OZE_Sensor.list 2.2 MB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854158551585615857158581585915860158611586215863158641586515866158671586815869158701587115872158731587415875158761587715878158791588015881158821588315884158851588615887158881588915890158911589215893158941589515896158971589815899159001590115902159031590415905159061590715908159091591015911159121591315914159151591615917159181591915920159211592215923159241592515926159271592815929159301593115932159331593415935159361593715938159391594015941159421594315944159451594615947159481594915950159511595215953159541595515956159571595815959159601596115962159631596415965159661596715968159691597015971159721597315974159751597615977159781597915980159811598215983159841598515986159871598815989159901599115992159931599415995159961599715998159991600016001160021600316004160051600616007160081600916010160111601216013160141601516016160171601816019160201602116022160231602416025160261602716028160291603016031160321603316034160351603616037160381603916040160411604216043160441604516046160471604816049160501605116052160531605416055160561605716058160591606016061160621606316064160651606616067160681606916070160711607216073160741607516076160771607816079160801608116082160831608416085160861608716088160891609016091160921609316094160951609616097160981609916100161011610216103161041610516106161071610816109161101611116112161131611416115161161611716118161191612016121161221612316124161251612616127161281612916130161311613216133161341613516136161371613816139161401614116142161431614416145161461614716148161491615016151161521615316154161551615616157161581615916160161611616216163161641616516166161671616816169161701617116172161731617416175161761617716178161791618016181161821618316184161851618616187161881618916190161911619216193161941619516196161971619816199162001620116202162031620416205162061620716208162091621016211162121621316214162151621616217162181621916220162211622216223162241622516226162271622816229162301623116232162331623416235162361623716238162391624016241162421624316244162451624616247162481624916250162511625216253162541625516256162571625816259162601626116262162631626416265162661626716268162691627016271162721627316274162751627616277162781627916280162811628216283162841628516286162871628816289162901629116292162931629416295162961629716298162991630016301163021630316304163051630616307163081630916310163111631216313163141631516316163171631816319163201632116322163231632416325163261632716328163291633016331163321633316334163351633616337163381633916340163411634216343163441634516346163471634816349163501635116352163531635416355163561635716358163591636016361163621636316364163651636616367163681636916370163711637216373163741637516376163771637816379163801638116382163831638416385163861638716388163891639016391163921639316394163951639616397163981639916400164011640216403164041640516406164071640816409164101641116412164131641416415164161641716418164191642016421164221642316424164251642616427164281642916430164311643216433164341643516436164371643816439164401644116442164431644416445164461644716448164491645016451164521645316454164551645616457164581645916460164611646216463164641646516466164671646816469164701647116472164731647416475164761647716478164791648016481164821648316484164851648616487164881648916490164911649216493164941649516496164971649816499165001650116502165031650416505165061650716508165091651016511165121651316514165151651616517165181651916520165211652216523165241652516526165271652816529165301653116532165331653416535165361653716538165391654016541165421654316544165451654616547165481654916550165511655216553165541655516556165571655816559165601656116562165631656416565165661656716568165691657016571165721657316574165751657616577165781657916580165811658216583165841658516586165871658816589165901659116592165931659416595165961659716598165991660016601166021660316604166051660616607166081660916610166111661216613166141661516616166171661816619166201662116622166231662416625166261662716628166291663016631166321663316634166351663616637166381663916640166411664216643166441664516646166471664816649166501665116652166531665416655166561665716658166591666016661166621666316664166651666616667166681666916670166711667216673166741667516676166771667816679166801668116682166831668416685166861668716688166891669016691166921669316694166951669616697166981669916700167011670216703167041670516706167071670816709167101671116712167131671416715167161671716718167191672016721167221672316724167251672616727167281672916730167311673216733167341673516736167371673816739167401674116742167431674416745167461674716748167491675016751167521675316754167551675616757167581675916760167611676216763167641676516766167671676816769167701677116772167731677416775167761677716778167791678016781167821678316784167851678616787167881678916790167911679216793167941679516796167971679816799168001680116802168031680416805168061680716808168091681016811168121681316814168151681616817168181681916820168211682216823168241682516826168271682816829168301683116832168331683416835168361683716838168391684016841168421684316844168451684616847168481684916850168511685216853168541685516856168571685816859168601686116862168631686416865168661686716868168691687016871168721687316874168751687616877168781687916880168811688216883168841688516886168871688816889168901689116892168931689416895168961689716898168991690016901169021690316904169051690616907169081690916910169111691216913169141691516916169171691816919169201692116922169231692416925169261692716928169291693016931169321693316934169351693616937169381693916940169411694216943169441694516946169471694816949169501695116952169531695416955169561695716958169591696016961169621696316964169651696616967169681696916970169711697216973169741697516976169771697816979169801698116982169831698416985169861698716988169891699016991169921699316994169951699616997169981699917000170011700217003170041700517006170071700817009170101701117012170131701417015170161701717018170191702017021170221702317024170251702617027170281702917030170311703217033170341703517036170371703817039170401704117042170431704417045170461704717048170491705017051170521705317054170551705617057170581705917060170611706217063170641706517066170671706817069170701707117072170731707417075170761707717078170791708017081170821708317084170851708617087170881708917090170911709217093170941709517096170971709817099171001710117102171031710417105171061710717108171091711017111171121711317114171151711617117171181711917120171211712217123171241712517126171271712817129171301713117132171331713417135171361713717138171391714017141171421714317144171451714617147171481714917150171511715217153171541715517156171571715817159171601716117162171631716417165171661716717168171691717017171171721717317174171751717617177171781717917180171811718217183171841718517186171871718817189171901719117192171931719417195171961719717198171991720017201172021720317204172051720617207172081720917210172111721217213172141721517216172171721817219172201722117222172231722417225172261722717228172291723017231172321723317234172351723617237172381723917240172411724217243172441724517246172471724817249172501725117252172531725417255172561725717258172591726017261172621726317264172651726617267172681726917270172711727217273172741727517276172771727817279172801728117282172831728417285172861728717288172891729017291172921729317294172951729617297172981729917300173011730217303173041730517306173071730817309173101731117312173131731417315173161731717318173191732017321173221732317324173251732617327173281732917330173311733217333173341733517336173371733817339173401734117342173431734417345173461734717348173491735017351173521735317354173551735617357173581735917360173611736217363173641736517366173671736817369173701737117372173731737417375173761737717378173791738017381173821738317384173851738617387173881738917390173911739217393173941739517396173971739817399174001740117402174031740417405174061740717408174091741017411174121741317414174151741617417174181741917420174211742217423174241742517426174271742817429174301743117432174331743417435174361743717438174391744017441174421744317444174451744617447174481744917450174511745217453174541745517456174571745817459174601746117462174631746417465174661746717468174691747017471174721747317474174751747617477174781747917480174811748217483174841748517486174871748817489174901749117492174931749417495174961749717498174991750017501175021750317504175051750617507175081750917510175111751217513175141751517516175171751817519175201752117522175231752417525175261752717528175291753017531175321753317534175351753617537175381753917540175411754217543175441754517546175471754817549175501755117552175531755417555175561755717558175591756017561175621756317564175651756617567175681756917570175711757217573175741757517576175771757817579175801758117582175831758417585175861758717588175891759017591175921759317594175951759617597175981759917600176011760217603176041760517606176071760817609176101761117612176131761417615176161761717618176191762017621176221762317624176251762617627176281762917630176311763217633176341763517636176371763817639176401764117642176431764417645176461764717648176491765017651176521765317654176551765617657176581765917660176611766217663176641766517666176671766817669176701767117672176731767417675176761767717678176791768017681176821768317684176851768617687176881768917690176911769217693176941769517696176971769817699177001770117702177031770417705177061770717708177091771017711177121771317714177151771617717177181771917720177211772217723177241772517726177271772817729177301773117732177331773417735177361773717738177391774017741177421774317744177451774617747177481774917750177511775217753177541775517756177571775817759177601776117762177631776417765177661776717768177691777017771177721777317774177751777617777177781777917780177811778217783177841778517786177871778817789177901779117792177931779417795177961779717798177991780017801178021780317804178051780617807178081780917810178111781217813178141781517816178171781817819178201782117822178231782417825178261782717828178291783017831178321783317834178351783617837178381783917840178411784217843178441784517846178471784817849178501785117852178531785417855178561785717858178591786017861178621786317864178651786617867178681786917870178711787217873178741787517876178771787817879178801788117882178831788417885178861788717888178891789017891178921789317894178951789617897178981789917900179011790217903179041790517906179071790817909179101791117912179131791417915179161791717918179191792017921179221792317924179251792617927179281792917930179311793217933179341793517936179371793817939179401794117942179431794417945179461794717948179491795017951179521795317954179551795617957179581795917960179611796217963179641796517966179671796817969179701797117972179731797417975179761797717978179791798017981179821798317984179851798617987179881798917990179911799217993179941799517996179971799817999180001800118002180031800418005180061800718008180091801018011180121801318014180151801618017180181801918020180211802218023180241802518026180271802818029180301803118032180331803418035180361803718038180391804018041180421804318044180451804618047180481804918050180511805218053180541805518056180571805818059180601806118062180631806418065180661806718068180691807018071180721807318074180751807618077180781807918080180811808218083180841808518086180871808818089180901809118092180931809418095180961809718098180991810018101181021810318104181051810618107181081810918110181111811218113181141811518116181171811818119181201812118122181231812418125181261812718128181291813018131181321813318134181351813618137181381813918140181411814218143181441814518146181471814818149181501815118152181531815418155181561815718158181591816018161181621816318164181651816618167181681816918170181711817218173181741817518176181771817818179181801818118182181831818418185181861818718188181891819018191181921819318194181951819618197181981819918200182011820218203182041820518206182071820818209182101821118212182131821418215182161821718218182191822018221182221822318224182251822618227182281822918230182311823218233182341823518236182371823818239182401824118242182431824418245182461824718248182491825018251182521825318254182551825618257182581825918260182611826218263182641826518266182671826818269182701827118272182731827418275182761827718278182791828018281182821828318284182851828618287182881828918290182911829218293182941829518296182971829818299183001830118302183031830418305183061830718308183091831018311183121831318314183151831618317183181831918320183211832218323183241832518326183271832818329183301833118332183331833418335183361833718338183391834018341183421834318344183451834618347183481834918350183511835218353183541835518356183571835818359183601836118362183631836418365183661836718368183691837018371183721837318374183751837618377183781837918380183811838218383183841838518386183871838818389183901839118392183931839418395183961839718398183991840018401184021840318404184051840618407184081840918410184111841218413184141841518416184171841818419184201842118422184231842418425184261842718428184291843018431184321843318434184351843618437184381843918440184411844218443184441844518446184471844818449184501845118452184531845418455184561845718458184591846018461184621846318464184651846618467184681846918470184711847218473184741847518476184771847818479184801848118482184831848418485184861848718488184891849018491184921849318494184951849618497184981849918500185011850218503185041850518506185071850818509185101851118512185131851418515185161851718518185191852018521185221852318524185251852618527185281852918530185311853218533185341853518536185371853818539185401854118542185431854418545185461854718548185491855018551185521855318554185551855618557185581855918560185611856218563185641856518566185671856818569185701857118572185731857418575185761857718578185791858018581185821858318584185851858618587185881858918590185911859218593185941859518596185971859818599186001860118602186031860418605186061860718608186091861018611186121861318614186151861618617186181861918620186211862218623186241862518626186271862818629186301863118632186331863418635186361863718638186391864018641186421864318644186451864618647186481864918650186511865218653186541865518656186571865818659186601866118662186631866418665186661866718668186691867018671186721867318674186751867618677186781867918680186811868218683186841868518686186871868818689186901869118692186931869418695186961869718698186991870018701187021870318704187051870618707187081870918710187111871218713187141871518716187171871818719187201872118722187231872418725187261872718728187291873018731187321873318734187351873618737187381873918740187411874218743187441874518746187471874818749187501875118752187531875418755187561875718758187591876018761187621876318764187651876618767187681876918770187711877218773187741877518776187771877818779187801878118782187831878418785187861878718788187891879018791187921879318794187951879618797187981879918800188011880218803188041880518806188071880818809188101881118812188131881418815188161881718818188191882018821188221882318824188251882618827188281882918830188311883218833188341883518836188371883818839188401884118842188431884418845188461884718848188491885018851188521885318854188551885618857188581885918860188611886218863188641886518866188671886818869188701887118872188731887418875188761887718878188791888018881188821888318884188851888618887188881888918890188911889218893188941889518896188971889818899189001890118902189031890418905189061890718908189091891018911189121891318914189151891618917189181891918920189211892218923189241892518926189271892818929189301893118932189331893418935189361893718938189391894018941189421894318944189451894618947189481894918950189511895218953189541895518956189571895818959189601896118962189631896418965189661896718968189691897018971189721897318974189751897618977189781897918980189811898218983189841898518986189871898818989189901899118992189931899418995189961899718998189991900019001190021900319004190051900619007190081900919010190111901219013190141901519016190171901819019190201902119022190231902419025190261902719028190291903019031190321903319034190351903619037190381903919040190411904219043190441904519046190471904819049190501905119052190531905419055190561905719058190591906019061190621906319064190651906619067190681906919070190711907219073190741907519076190771907819079190801908119082190831908419085190861908719088190891909019091190921909319094190951909619097190981909919100191011910219103191041910519106191071910819109191101911119112191131911419115191161911719118191191912019121191221912319124191251912619127191281912919130191311913219133191341913519136191371913819139191401914119142191431914419145191461914719148191491915019151191521915319154191551915619157191581915919160191611916219163191641916519166191671916819169191701917119172191731917419175191761917719178191791918019181191821918319184191851918619187191881918919190191911919219193191941919519196191971919819199192001920119202192031920419205192061920719208192091921019211192121921319214192151921619217192181921919220192211922219223192241922519226192271922819229192301923119232192331923419235192361923719238192391924019241192421924319244192451924619247192481924919250192511925219253192541925519256192571925819259192601926119262192631926419265192661926719268192691927019271192721927319274192751927619277192781927919280192811928219283192841928519286192871928819289192901929119292192931929419295192961929719298192991930019301193021930319304193051930619307193081930919310193111931219313193141931519316193171931819319193201932119322193231932419325193261932719328193291933019331193321933319334193351933619337193381933919340193411934219343193441934519346193471934819349193501935119352193531935419355193561935719358193591936019361193621936319364193651936619367193681936919370193711937219373193741937519376193771937819379193801938119382193831938419385193861938719388193891939019391193921939319394193951939619397193981939919400194011940219403194041940519406194071940819409194101941119412194131941419415194161941719418194191942019421194221942319424194251942619427194281942919430194311943219433194341943519436194371943819439194401944119442194431944419445194461944719448194491945019451194521945319454194551945619457194581945919460194611946219463194641946519466194671946819469194701947119472194731947419475194761947719478194791948019481194821948319484194851948619487194881948919490194911949219493194941949519496194971949819499195001950119502195031950419505195061950719508195091951019511195121951319514195151951619517195181951919520195211952219523195241952519526195271952819529195301953119532195331953419535195361953719538195391954019541195421954319544195451954619547195481954919550195511955219553195541955519556195571955819559195601956119562195631956419565195661956719568195691957019571195721957319574195751957619577195781957919580195811958219583195841958519586195871958819589195901959119592195931959419595195961959719598195991960019601196021960319604196051960619607196081960919610196111961219613196141961519616196171961819619196201962119622196231962419625196261962719628196291963019631196321963319634196351963619637196381963919640196411964219643196441964519646196471964819649196501965119652196531965419655196561965719658196591966019661196621966319664196651966619667196681966919670196711967219673196741967519676196771967819679196801968119682196831968419685196861968719688196891969019691196921969319694196951969619697196981969919700197011970219703197041970519706197071970819709197101971119712197131971419715197161971719718197191972019721197221972319724197251972619727197281972919730197311973219733197341973519736197371973819739197401974119742197431974419745197461974719748197491975019751197521975319754197551975619757197581975919760197611976219763197641976519766197671976819769197701977119772197731977419775197761977719778197791978019781197821978319784197851978619787197881978919790197911979219793197941979519796197971979819799198001980119802198031980419805198061980719808198091981019811198121981319814198151981619817198181981919820198211982219823198241982519826198271982819829198301983119832198331983419835198361983719838198391984019841198421984319844198451984619847198481984919850198511985219853198541985519856198571985819859198601986119862198631986419865198661986719868198691987019871198721987319874198751987619877198781987919880198811988219883198841988519886198871988819889198901989119892198931989419895198961989719898198991990019901199021990319904199051990619907199081990919910199111991219913199141991519916199171991819919199201992119922199231992419925199261992719928199291993019931199321993319934199351993619937199381993919940199411994219943199441994519946199471994819949199501995119952199531995419955199561995719958199591996019961199621996319964199651996619967199681996919970199711997219973199741997519976199771997819979199801998119982199831998419985199861998719988199891999019991199921999319994199951999619997199981999920000200012000220003200042000520006200072000820009200102001120012200132001420015200162001720018200192002020021200222002320024200252002620027200282002920030200312003220033200342003520036200372003820039200402004120042200432004420045200462004720048200492005020051200522005320054200552005620057200582005920060200612006220063200642006520066200672006820069200702007120072200732007420075200762007720078200792008020081200822008320084200852008620087200882008920090200912009220093200942009520096200972009820099201002010120102201032010420105201062010720108201092011020111201122011320114201152011620117201182011920120201212012220123201242012520126201272012820129201302013120132201332013420135201362013720138201392014020141201422014320144201452014620147201482014920150201512015220153201542015520156201572015820159201602016120162201632016420165201662016720168201692017020171201722017320174201752017620177201782017920180201812018220183201842018520186201872018820189201902019120192201932019420195201962019720198201992020020201202022020320204202052020620207202082020920210202112021220213202142021520216202172021820219202202022120222202232022420225202262022720228202292023020231202322023320234202352023620237202382023920240202412024220243202442024520246202472024820249202502025120252202532025420255202562025720258202592026020261202622026320264202652026620267202682026920270202712027220273202742027520276202772027820279202802028120282202832028420285202862028720288202892029020291202922029320294202952029620297202982029920300203012030220303203042030520306203072030820309203102031120312203132031420315203162031720318203192032020321203222032320324203252032620327203282032920330203312033220333203342033520336203372033820339203402034120342203432034420345203462034720348203492035020351203522035320354203552035620357203582035920360203612036220363203642036520366203672036820369203702037120372203732037420375203762037720378203792038020381203822038320384203852038620387203882038920390203912039220393203942039520396203972039820399204002040120402204032040420405204062040720408204092041020411204122041320414204152041620417204182041920420204212042220423204242042520426204272042820429204302043120432204332043420435204362043720438204392044020441204422044320444204452044620447204482044920450204512045220453204542045520456204572045820459204602046120462204632046420465204662046720468204692047020471204722047320474204752047620477204782047920480204812048220483204842048520486204872048820489204902049120492204932049420495204962049720498204992050020501205022050320504205052050620507205082050920510205112051220513205142051520516205172051820519205202052120522205232052420525205262052720528205292053020531205322053320534205352053620537205382053920540205412054220543205442054520546205472054820549205502055120552205532055420555205562055720558205592056020561205622056320564205652056620567205682056920570205712057220573205742057520576205772057820579205802058120582205832058420585205862058720588205892059020591205922059320594205952059620597205982059920600206012060220603206042060520606206072060820609206102061120612206132061420615206162061720618206192062020621206222062320624206252062620627206282062920630206312063220633206342063520636206372063820639206402064120642206432064420645206462064720648206492065020651206522065320654206552065620657206582065920660206612066220663206642066520666206672066820669206702067120672206732067420675206762067720678206792068020681206822068320684206852068620687206882068920690206912069220693206942069520696206972069820699207002070120702207032070420705207062070720708207092071020711207122071320714207152071620717207182071920720207212072220723207242072520726207272072820729207302073120732207332073420735207362073720738207392074020741207422074320744207452074620747207482074920750207512075220753207542075520756207572075820759207602076120762207632076420765207662076720768207692077020771207722077320774207752077620777207782077920780207812078220783207842078520786207872078820789207902079120792207932079420795207962079720798207992080020801208022080320804208052080620807208082080920810208112081220813208142081520816208172081820819208202082120822208232082420825208262082720828208292083020831208322083320834208352083620837208382083920840208412084220843208442084520846208472084820849208502085120852208532085420855208562085720858208592086020861208622086320864208652086620867208682086920870208712087220873208742087520876208772087820879208802088120882208832088420885208862088720888208892089020891208922089320894208952089620897208982089920900209012090220903209042090520906209072090820909209102091120912209132091420915209162091720918209192092020921209222092320924209252092620927209282092920930209312093220933209342093520936209372093820939209402094120942209432094420945209462094720948209492095020951209522095320954209552095620957209582095920960209612096220963209642096520966209672096820969209702097120972209732097420975209762097720978209792098020981209822098320984209852098620987209882098920990209912099220993209942099520996209972099820999210002100121002210032100421005210062100721008210092101021011210122101321014210152101621017210182101921020210212102221023210242102521026210272102821029210302103121032210332103421035210362103721038210392104021041210422104321044210452104621047210482104921050210512105221053210542105521056210572105821059210602106121062210632106421065210662106721068210692107021071210722107321074210752107621077210782107921080210812108221083210842108521086210872108821089210902109121092210932109421095210962109721098210992110021101211022110321104211052110621107211082110921110211112111221113211142111521116211172111821119211202112121122211232112421125211262112721128211292113021131211322113321134211352113621137211382113921140211412114221143211442114521146211472114821149211502115121152211532115421155211562115721158211592116021161211622116321164211652116621167211682116921170211712117221173211742117521176211772117821179211802118121182211832118421185211862118721188211892119021191211922119321194211952119621197211982119921200212012120221203212042120521206212072120821209212102121121212212132121421215212162121721218212192122021221212222122321224212252122621227212282122921230212312123221233212342123521236212372123821239212402124121242212432124421245212462124721248212492125021251212522125321254212552125621257212582125921260212612126221263212642126521266212672126821269212702127121272212732127421275212762127721278212792128021281212822128321284212852128621287212882128921290212912129221293212942129521296212972129821299213002130121302213032130421305213062130721308213092131021311213122131321314213152131621317213182131921320213212132221323213242132521326213272132821329213302133121332213332133421335213362133721338213392134021341213422134321344213452134621347213482134921350213512135221353213542135521356213572135821359213602136121362213632136421365213662136721368213692137021371213722137321374213752137621377213782137921380213812138221383213842138521386213872138821389213902139121392213932139421395213962139721398213992140021401214022140321404214052140621407214082140921410214112141221413214142141521416214172141821419214202142121422214232142421425214262142721428214292143021431214322143321434214352143621437214382143921440214412144221443214442144521446214472144821449214502145121452214532145421455214562145721458214592146021461214622146321464214652146621467214682146921470214712147221473214742147521476214772147821479214802148121482214832148421485214862148721488214892149021491214922149321494214952149621497214982149921500215012150221503215042150521506215072150821509215102151121512215132151421515215162151721518215192152021521215222152321524215252152621527215282152921530215312153221533215342153521536215372153821539215402154121542215432154421545215462154721548215492155021551215522155321554215552155621557215582155921560215612156221563215642156521566215672156821569215702157121572215732157421575215762157721578215792158021581215822158321584215852158621587215882158921590215912159221593215942159521596215972159821599216002160121602216032160421605216062160721608216092161021611216122161321614216152161621617216182161921620216212162221623216242162521626216272162821629216302163121632216332163421635216362163721638216392164021641216422164321644216452164621647216482164921650216512165221653216542165521656216572165821659216602166121662216632166421665216662166721668216692167021671216722167321674216752167621677216782167921680216812168221683216842168521686216872168821689216902169121692216932169421695216962169721698216992170021701217022170321704217052170621707217082170921710217112171221713217142171521716217172171821719217202172121722217232172421725217262172721728217292173021731217322173321734217352173621737217382173921740217412174221743217442174521746217472174821749217502175121752217532175421755217562175721758217592176021761217622176321764217652176621767217682176921770217712177221773217742177521776217772177821779217802178121782217832178421785217862178721788217892179021791217922179321794217952179621797217982179921800218012180221803218042180521806218072180821809218102181121812218132181421815218162181721818218192182021821218222182321824218252182621827218282182921830218312183221833218342183521836218372183821839218402184121842218432184421845218462184721848218492185021851218522185321854218552185621857218582185921860218612186221863218642186521866218672186821869218702187121872218732187421875218762187721878218792188021881218822188321884218852188621887218882188921890218912189221893218942189521896218972189821899219002190121902219032190421905219062190721908219092191021911219122191321914219152191621917219182191921920219212192221923219242192521926219272192821929219302193121932219332193421935219362193721938219392194021941219422194321944219452194621947219482194921950219512195221953219542195521956219572195821959219602196121962219632196421965219662196721968219692197021971219722197321974219752197621977219782197921980219812198221983219842198521986219872198821989219902199121992219932199421995219962199721998219992200022001220022200322004220052200622007220082200922010220112201222013220142201522016220172201822019220202202122022220232202422025220262202722028220292203022031220322203322034220352203622037220382203922040220412204222043220442204522046220472204822049220502205122052220532205422055220562205722058220592206022061220622206322064220652206622067220682206922070220712207222073220742207522076220772207822079220802208122082220832208422085220862208722088220892209022091220922209322094220952209622097220982209922100221012210222103221042210522106221072210822109221102211122112221132211422115221162211722118221192212022121221222212322124221252212622127221282212922130221312213222133221342213522136221372213822139221402214122142221432214422145221462214722148221492215022151221522215322154221552215622157221582215922160221612216222163221642216522166221672216822169221702217122172221732217422175221762217722178221792218022181221822218322184221852218622187221882218922190221912219222193221942219522196221972219822199222002220122202222032220422205222062220722208222092221022211222122221322214222152221622217222182221922220222212222222223222242222522226222272222822229222302223122232222332223422235222362223722238222392224022241222422224322244222452224622247222482224922250222512225222253222542225522256222572225822259222602226122262222632226422265222662226722268222692227022271222722227322274222752227622277222782227922280222812228222283222842228522286222872228822289222902229122292222932229422295222962229722298222992230022301223022230322304223052230622307223082230922310223112231222313223142231522316223172231822319223202232122322223232232422325223262232722328223292233022331223322233322334223352233622337223382233922340223412234222343223442234522346223472234822349223502235122352223532235422355223562235722358223592236022361223622236322364223652236622367223682236922370223712237222373223742237522376223772237822379223802238122382223832238422385223862238722388223892239022391223922239322394223952239622397223982239922400224012240222403224042240522406224072240822409224102241122412224132241422415224162241722418224192242022421224222242322424224252242622427224282242922430224312243222433224342243522436224372243822439224402244122442224432244422445224462244722448224492245022451224522245322454224552245622457224582245922460224612246222463224642246522466224672246822469224702247122472224732247422475224762247722478224792248022481224822248322484224852248622487224882248922490224912249222493224942249522496224972249822499225002250122502225032250422505225062250722508225092251022511225122251322514225152251622517225182251922520225212252222523225242252522526225272252822529225302253122532225332253422535225362253722538225392254022541225422254322544225452254622547225482254922550225512255222553225542255522556225572255822559225602256122562225632256422565225662256722568225692257022571225722257322574225752257622577225782257922580225812258222583225842258522586225872258822589225902259122592225932259422595225962259722598225992260022601226022260322604226052260622607226082260922610226112261222613226142261522616226172261822619226202262122622226232262422625226262262722628226292263022631226322263322634226352263622637226382263922640226412264222643226442264522646226472264822649226502265122652226532265422655226562265722658226592266022661226622266322664226652266622667226682266922670226712267222673226742267522676226772267822679226802268122682226832268422685226862268722688226892269022691226922269322694226952269622697226982269922700227012270222703227042270522706227072270822709227102271122712227132271422715227162271722718227192272022721227222272322724227252272622727227282272922730227312273222733227342273522736227372273822739227402274122742227432274422745227462274722748227492275022751227522275322754227552275622757227582275922760227612276222763227642276522766227672276822769227702277122772227732277422775227762277722778227792278022781227822278322784227852278622787227882278922790227912279222793227942279522796227972279822799228002280122802228032280422805228062280722808228092281022811228122281322814228152281622817228182281922820228212282222823228242282522826228272282822829228302283122832228332283422835228362283722838228392284022841228422284322844228452284622847228482284922850228512285222853228542285522856228572285822859228602286122862228632286422865228662286722868228692287022871228722287322874228752287622877228782287922880228812288222883228842288522886228872288822889228902289122892228932289422895228962289722898228992290022901229022290322904229052290622907229082290922910229112291222913229142291522916229172291822919229202292122922229232292422925229262292722928229292293022931229322293322934229352293622937229382293922940229412294222943229442294522946229472294822949229502295122952229532295422955229562295722958229592296022961229622296322964229652296622967229682296922970229712297222973229742297522976229772297822979229802298122982229832298422985229862298722988229892299022991229922299322994229952299622997229982299923000230012300223003230042300523006230072300823009230102301123012230132301423015230162301723018230192302023021230222302323024230252302623027230282302923030230312303223033230342303523036230372303823039230402304123042230432304423045230462304723048230492305023051230522305323054230552305623057230582305923060230612306223063230642306523066230672306823069230702307123072230732307423075230762307723078230792308023081230822308323084230852308623087230882308923090230912309223093230942309523096230972309823099231002310123102231032310423105231062310723108231092311023111231122311323114231152311623117231182311923120231212312223123231242312523126231272312823129231302313123132231332313423135231362313723138231392314023141231422314323144231452314623147231482314923150231512315223153231542315523156231572315823159231602316123162231632316423165231662316723168231692317023171231722317323174231752317623177231782317923180231812318223183231842318523186231872318823189231902319123192231932319423195231962319723198231992320023201232022320323204232052320623207232082320923210232112321223213232142321523216232172321823219232202322123222232232322423225232262322723228232292323023231232322323323234232352323623237232382323923240232412324223243232442324523246232472324823249232502325123252232532325423255232562325723258232592326023261232622326323264232652326623267232682326923270232712327223273232742327523276232772327823279232802328123282232832328423285232862328723288232892329023291232922329323294232952329623297232982329923300233012330223303233042330523306233072330823309233102331123312233132331423315233162331723318233192332023321233222332323324233252332623327233282332923330233312333223333233342333523336233372333823339233402334123342233432334423345233462334723348233492335023351233522335323354233552335623357233582335923360233612336223363233642336523366233672336823369233702337123372233732337423375233762337723378233792338023381233822338323384233852338623387233882338923390233912339223393233942339523396233972339823399234002340123402234032340423405234062340723408234092341023411234122341323414234152341623417234182341923420234212342223423234242342523426234272342823429234302343123432234332343423435234362343723438234392344023441234422344323444234452344623447234482344923450234512345223453234542345523456234572345823459234602346123462234632346423465234662346723468234692347023471234722347323474234752347623477234782347923480234812348223483234842348523486234872348823489234902349123492234932349423495234962349723498234992350023501235022350323504235052350623507235082350923510235112351223513235142351523516235172351823519235202352123522235232352423525235262352723528235292353023531235322353323534235352353623537235382353923540235412354223543235442354523546235472354823549235502355123552235532355423555235562355723558235592356023561235622356323564235652356623567235682356923570235712357223573235742357523576235772357823579235802358123582235832358423585235862358723588235892359023591235922359323594235952359623597235982359923600236012360223603236042360523606236072360823609236102361123612236132361423615236162361723618236192362023621236222362323624236252362623627236282362923630236312363223633236342363523636236372363823639236402364123642236432364423645236462364723648236492365023651236522365323654236552365623657236582365923660236612366223663236642366523666236672366823669236702367123672236732367423675236762367723678236792368023681236822368323684236852368623687236882368923690236912369223693236942369523696236972369823699237002370123702237032370423705237062370723708237092371023711237122371323714237152371623717237182371923720237212372223723237242372523726237272372823729237302373123732237332373423735237362373723738237392374023741237422374323744237452374623747237482374923750237512375223753237542375523756237572375823759237602376123762237632376423765237662376723768237692377023771237722377323774237752377623777237782377923780237812378223783237842378523786237872378823789237902379123792237932379423795237962379723798237992380023801238022380323804238052380623807238082380923810238112381223813238142381523816238172381823819238202382123822238232382423825238262382723828238292383023831238322383323834238352383623837238382383923840238412384223843238442384523846238472384823849238502385123852238532385423855238562385723858238592386023861238622386323864238652386623867238682386923870238712387223873238742387523876238772387823879238802388123882238832388423885238862388723888238892389023891238922389323894238952389623897238982389923900239012390223903239042390523906239072390823909239102391123912239132391423915239162391723918239192392023921239222392323924239252392623927239282392923930239312393223933239342393523936239372393823939239402394123942239432394423945239462394723948239492395023951239522395323954239552395623957239582395923960239612396223963239642396523966239672396823969239702397123972239732397423975239762397723978239792398023981239822398323984239852398623987239882398923990239912399223993239942399523996239972399823999240002400124002240032400424005240062400724008240092401024011240122401324014240152401624017240182401924020240212402224023240242402524026240272402824029240302403124032240332403424035240362403724038240392404024041240422404324044240452404624047240482404924050240512405224053240542405524056240572405824059240602406124062240632406424065240662406724068240692407024071240722407324074240752407624077240782407924080240812408224083240842408524086240872408824089240902409124092240932409424095240962409724098240992410024101241022410324104241052410624107241082410924110241112411224113241142411524116241172411824119241202412124122241232412424125241262412724128241292413024131241322413324134241352413624137241382413924140241412414224143241442414524146241472414824149241502415124152241532415424155241562415724158241592416024161241622416324164241652416624167241682416924170241712417224173241742417524176241772417824179241802418124182241832418424185241862418724188241892419024191241922419324194241952419624197241982419924200242012420224203242042420524206242072420824209242102421124212242132421424215242162421724218242192422024221242222422324224242252422624227242282422924230242312423224233242342423524236242372423824239242402424124242242432424424245242462424724248242492425024251242522425324254242552425624257242582425924260242612426224263242642426524266242672426824269242702427124272242732427424275242762427724278242792428024281242822428324284242852428624287242882428924290242912429224293242942429524296242972429824299243002430124302243032430424305243062430724308243092431024311243122431324314243152431624317243182431924320243212432224323243242432524326243272432824329243302433124332243332433424335243362433724338243392434024341243422434324344243452434624347243482434924350243512435224353243542435524356243572435824359243602436124362243632436424365243662436724368243692437024371243722437324374243752437624377243782437924380243812438224383243842438524386243872438824389243902439124392243932439424395243962439724398243992440024401244022440324404244052440624407244082440924410244112441224413244142441524416244172441824419244202442124422244232442424425244262442724428244292443024431244322443324434244352443624437244382443924440244412444224443244442444524446244472444824449244502445124452244532445424455244562445724458244592446024461244622446324464244652446624467244682446924470244712447224473244742447524476244772447824479244802448124482244832448424485244862448724488244892449024491244922449324494244952449624497244982449924500245012450224503245042450524506245072450824509245102451124512245132451424515245162451724518245192452024521245222452324524245252452624527245282452924530245312453224533245342453524536245372453824539245402454124542245432454424545245462454724548245492455024551245522455324554245552455624557245582455924560245612456224563245642456524566245672456824569245702457124572245732457424575245762457724578245792458024581245822458324584245852458624587245882458924590245912459224593245942459524596245972459824599246002460124602246032460424605246062460724608246092461024611246122461324614246152461624617246182461924620246212462224623246242462524626246272462824629246302463124632246332463424635246362463724638246392464024641246422464324644246452464624647246482464924650246512465224653246542465524656246572465824659246602466124662246632466424665246662466724668246692467024671246722467324674246752467624677246782467924680246812468224683246842468524686246872468824689246902469124692246932469424695246962469724698246992470024701247022470324704247052470624707247082470924710247112471224713247142471524716247172471824719247202472124722247232472424725247262472724728247292473024731247322473324734247352473624737247382473924740247412474224743247442474524746247472474824749247502475124752247532475424755247562475724758247592476024761247622476324764247652476624767247682476924770247712477224773247742477524776247772477824779247802478124782247832478424785247862478724788247892479024791247922479324794247952479624797247982479924800248012480224803248042480524806248072480824809248102481124812248132481424815248162481724818248192482024821248222482324824248252482624827248282482924830248312483224833248342483524836248372483824839248402484124842248432484424845248462484724848248492485024851248522485324854248552485624857248582485924860248612486224863248642486524866248672486824869248702487124872248732487424875248762487724878248792488024881248822488324884248852488624887248882488924890248912489224893248942489524896248972489824899249002490124902249032490424905249062490724908249092491024911249122491324914249152491624917249182491924920249212492224923249242492524926249272492824929249302493124932249332493424935249362493724938249392494024941249422494324944249452494624947249482494924950249512495224953249542495524956249572495824959249602496124962249632496424965249662496724968249692497024971249722497324974249752497624977249782497924980249812498224983249842498524986249872498824989249902499124992249932499424995249962499724998249992500025001250022500325004250052500625007250082500925010250112501225013250142501525016250172501825019250202502125022250232502425025250262502725028250292503025031250322503325034250352503625037250382503925040250412504225043250442504525046250472504825049250502505125052250532505425055250562505725058250592506025061250622506325064250652506625067250682506925070250712507225073250742507525076250772507825079250802508125082250832508425085250862508725088250892509025091250922509325094250952509625097250982509925100251012510225103251042510525106251072510825109251102511125112251132511425115251162511725118251192512025121251222512325124251252512625127251282512925130251312513225133251342513525136251372513825139251402514125142251432514425145251462514725148251492515025151251522515325154251552515625157251582515925160251612516225163251642516525166251672516825169251702517125172251732517425175251762517725178251792518025181251822518325184251852518625187251882518925190251912519225193251942519525196251972519825199252002520125202252032520425205252062520725208252092521025211252122521325214252152521625217252182521925220252212522225223252242522525226252272522825229252302523125232252332523425235252362523725238252392524025241252422524325244252452524625247252482524925250252512525225253252542525525256252572525825259252602526125262252632526425265252662526725268252692527025271252722527325274252752527625277252782527925280252812528225283252842528525286252872528825289252902529125292252932529425295252962529725298252992530025301253022530325304253052530625307253082530925310253112531225313253142531525316253172531825319253202532125322253232532425325253262532725328253292533025331253322533325334253352533625337253382533925340253412534225343253442534525346253472534825349253502535125352253532535425355253562535725358253592536025361253622536325364253652536625367253682536925370253712537225373253742537525376253772537825379253802538125382253832538425385253862538725388253892539025391253922539325394253952539625397253982539925400254012540225403254042540525406254072540825409254102541125412254132541425415254162541725418254192542025421254222542325424254252542625427254282542925430254312543225433254342543525436254372543825439254402544125442254432544425445254462544725448254492545025451254522545325454254552545625457254582545925460254612546225463254642546525466254672546825469254702547125472254732547425475254762547725478254792548025481254822548325484254852548625487254882548925490254912549225493254942549525496254972549825499255002550125502255032550425505255062550725508255092551025511255122551325514255152551625517255182551925520255212552225523255242552525526255272552825529255302553125532255332553425535255362553725538255392554025541255422554325544255452554625547255482554925550255512555225553255542555525556255572555825559255602556125562255632556425565255662556725568255692557025571255722557325574255752557625577255782557925580255812558225583255842558525586255872558825589255902559125592255932559425595255962559725598255992560025601256022560325604256052560625607256082560925610256112561225613256142561525616256172561825619256202562125622256232562425625256262562725628256292563025631256322563325634256352563625637256382563925640256412564225643256442564525646256472564825649256502565125652256532565425655256562565725658256592566025661256622566325664256652566625667256682566925670256712567225673256742567525676256772567825679256802568125682256832568425685256862568725688256892569025691256922569325694256952569625697256982569925700257012570225703257042570525706257072570825709257102571125712257132571425715257162571725718257192572025721257222572325724257252572625727257282572925730257312573225733257342573525736257372573825739257402574125742257432574425745257462574725748257492575025751257522575325754257552575625757257582575925760257612576225763257642576525766257672576825769257702577125772257732577425775257762577725778257792578025781257822578325784257852578625787257882578925790257912579225793257942579525796257972579825799258002580125802258032580425805258062580725808258092581025811258122581325814258152581625817258182581925820258212582225823258242582525826258272582825829258302583125832258332583425835258362583725838258392584025841258422584325844258452584625847258482584925850258512585225853258542585525856258572585825859258602586125862258632586425865258662586725868258692587025871258722587325874258752587625877258782587925880258812588225883258842588525886258872588825889258902589125892258932589425895258962589725898258992590025901259022590325904259052590625907259082590925910259112591225913259142591525916259172591825919259202592125922259232592425925259262592725928259292593025931259322593325934259352593625937259382593925940259412594225943259442594525946259472594825949259502595125952259532595425955259562595725958259592596025961259622596325964259652596625967259682596925970259712597225973259742597525976259772597825979259802598125982259832598425985259862598725988259892599025991259922599325994259952599625997259982599926000260012600226003260042600526006260072600826009260102601126012260132601426015260162601726018260192602026021260222602326024260252602626027260282602926030260312603226033260342603526036260372603826039260402604126042260432604426045260462604726048260492605026051260522605326054260552605626057260582605926060260612606226063260642606526066260672606826069260702607126072260732607426075260762607726078260792608026081260822608326084260852608626087260882608926090260912609226093260942609526096260972609826099261002610126102261032610426105261062610726108261092611026111261122611326114261152611626117261182611926120261212612226123261242612526126261272612826129261302613126132261332613426135261362613726138261392614026141261422614326144261452614626147261482614926150261512615226153261542615526156261572615826159261602616126162261632616426165261662616726168261692617026171261722617326174261752617626177261782617926180261812618226183261842618526186261872618826189261902619126192261932619426195261962619726198261992620026201262022620326204262052620626207262082620926210262112621226213262142621526216262172621826219262202622126222262232622426225262262622726228262292623026231262322623326234262352623626237262382623926240262412624226243262442624526246262472624826249262502625126252262532625426255262562625726258262592626026261262622626326264262652626626267262682626926270262712627226273262742627526276262772627826279262802628126282262832628426285262862628726288262892629026291262922629326294262952629626297262982629926300263012630226303263042630526306263072630826309263102631126312263132631426315263162631726318263192632026321263222632326324263252632626327263282632926330263312633226333263342633526336263372633826339263402634126342263432634426345263462634726348263492635026351263522635326354263552635626357263582635926360263612636226363263642636526366263672636826369263702637126372263732637426375263762637726378263792638026381263822638326384263852638626387263882638926390263912639226393263942639526396263972639826399264002640126402264032640426405264062640726408264092641026411264122641326414264152641626417264182641926420264212642226423264242642526426264272642826429264302643126432264332643426435264362643726438264392644026441264422644326444264452644626447264482644926450264512645226453264542645526456264572645826459264602646126462264632646426465264662646726468264692647026471264722647326474264752647626477264782647926480264812648226483264842648526486264872648826489264902649126492264932649426495264962649726498264992650026501265022650326504265052650626507265082650926510265112651226513265142651526516265172651826519265202652126522265232652426525265262652726528265292653026531265322653326534265352653626537265382653926540265412654226543265442654526546265472654826549265502655126552265532655426555265562655726558265592656026561265622656326564265652656626567265682656926570265712657226573265742657526576265772657826579265802658126582265832658426585265862658726588265892659026591265922659326594265952659626597265982659926600266012660226603266042660526606266072660826609266102661126612266132661426615266162661726618266192662026621266222662326624266252662626627266282662926630266312663226633266342663526636266372663826639266402664126642266432664426645266462664726648266492665026651266522665326654266552665626657266582665926660266612666226663266642666526666266672666826669266702667126672266732667426675266762667726678266792668026681266822668326684266852668626687266882668926690266912669226693266942669526696266972669826699267002670126702267032670426705267062670726708267092671026711267122671326714267152671626717267182671926720267212672226723267242672526726267272672826729267302673126732267332673426735267362673726738267392674026741267422674326744267452674626747267482674926750267512675226753267542675526756267572675826759267602676126762267632676426765267662676726768267692677026771267722677326774267752677626777267782677926780267812678226783267842678526786267872678826789267902679126792267932679426795267962679726798267992680026801268022680326804268052680626807268082680926810268112681226813268142681526816268172681826819268202682126822268232682426825268262682726828268292683026831268322683326834268352683626837268382683926840268412684226843268442684526846268472684826849268502685126852268532685426855268562685726858268592686026861268622686326864268652686626867268682686926870268712687226873268742687526876268772687826879268802688126882268832688426885268862688726888268892689026891268922689326894268952689626897268982689926900269012690226903269042690526906269072690826909269102691126912269132691426915269162691726918269192692026921269222692326924269252692626927269282692926930269312693226933269342693526936269372693826939269402694126942269432694426945269462694726948269492695026951269522695326954269552695626957269582695926960269612696226963269642696526966269672696826969269702697126972269732697426975269762697726978269792698026981269822698326984269852698626987269882698926990269912699226993269942699526996269972699826999270002700127002270032700427005270062700727008270092701027011270122701327014270152701627017270182701927020270212702227023270242702527026270272702827029270302703127032270332703427035270362703727038270392704027041270422704327044270452704627047270482704927050270512705227053270542705527056270572705827059270602706127062270632706427065270662706727068270692707027071270722707327074270752707627077270782707927080270812708227083270842708527086270872708827089270902709127092270932709427095270962709727098270992710027101271022710327104271052710627107271082710927110271112711227113271142711527116271172711827119271202712127122271232712427125271262712727128271292713027131271322713327134271352713627137271382713927140271412714227143271442714527146271472714827149271502715127152271532715427155271562715727158271592716027161271622716327164271652716627167271682716927170271712717227173271742717527176271772717827179271802718127182271832718427185271862718727188271892719027191271922719327194271952719627197271982719927200272012720227203272042720527206272072720827209272102721127212272132721427215272162721727218272192722027221272222722327224272252722627227272282722927230272312723227233272342723527236272372723827239272402724127242272432724427245272462724727248272492725027251272522725327254272552725627257272582725927260272612726227263272642726527266272672726827269272702727127272272732727427275272762727727278272792728027281272822728327284272852728627287272882728927290272912729227293272942729527296272972729827299273002730127302273032730427305273062730727308273092731027311273122731327314273152731627317273182731927320273212732227323273242732527326273272732827329273302733127332273332733427335273362733727338273392734027341273422734327344273452734627347273482734927350273512735227353273542735527356273572735827359273602736127362273632736427365273662736727368273692737027371273722737327374273752737627377273782737927380273812738227383273842738527386273872738827389273902739127392273932739427395273962739727398273992740027401274022740327404274052740627407274082740927410274112741227413274142741527416274172741827419274202742127422274232742427425274262742727428274292743027431274322743327434274352743627437274382743927440274412744227443274442744527446274472744827449274502745127452274532745427455274562745727458274592746027461274622746327464274652746627467274682746927470274712747227473274742747527476274772747827479274802748127482274832748427485274862748727488274892749027491274922749327494274952749627497274982749927500275012750227503275042750527506275072750827509275102751127512275132751427515275162751727518275192752027521275222752327524275252752627527275282752927530275312753227533275342753527536275372753827539275402754127542275432754427545275462754727548275492755027551275522755327554275552755627557275582755927560275612756227563275642756527566275672756827569275702757127572275732757427575275762757727578275792758027581275822758327584275852758627587275882758927590275912759227593275942759527596275972759827599276002760127602276032760427605276062760727608276092761027611276122761327614276152761627617276182761927620276212762227623276242762527626276272762827629276302763127632276332763427635276362763727638276392764027641276422764327644276452764627647276482764927650276512765227653276542765527656276572765827659276602766127662276632766427665276662766727668276692767027671276722767327674276752767627677276782767927680276812768227683276842768527686276872768827689276902769127692276932769427695276962769727698276992770027701277022770327704277052770627707277082770927710277112771227713277142771527716277172771827719277202772127722277232772427725277262772727728277292773027731277322773327734277352773627737277382773927740277412774227743277442774527746277472774827749277502775127752277532775427755277562775727758277592776027761277622776327764277652776627767277682776927770277712777227773277742777527776277772777827779277802778127782277832778427785277862778727788277892779027791277922779327794277952779627797277982779927800278012780227803278042780527806278072780827809278102781127812278132781427815278162781727818278192782027821278222782327824278252782627827278282782927830278312783227833278342783527836278372783827839278402784127842278432784427845278462784727848278492785027851278522785327854278552785627857278582785927860278612786227863278642786527866278672786827869278702787127872278732787427875278762787727878278792788027881278822788327884278852788627887278882788927890278912789227893278942789527896278972789827899279002790127902279032790427905279062790727908279092791027911279122791327914279152791627917279182791927920279212792227923279242792527926279272792827929279302793127932279332793427935279362793727938279392794027941279422794327944279452794627947279482794927950279512795227953279542795527956279572795827959279602796127962279632796427965279662796727968279692797027971279722797327974279752797627977279782797927980279812798227983279842798527986279872798827989279902799127992279932799427995279962799727998279992800028001280022800328004280052800628007280082800928010280112801228013280142801528016280172801828019280202802128022280232802428025280262802728028280292803028031280322803328034280352803628037280382803928040280412804228043280442804528046280472804828049280502805128052280532805428055280562805728058280592806028061280622806328064280652806628067280682806928070280712807228073280742807528076280772807828079280802808128082280832808428085280862808728088280892809028091280922809328094280952809628097280982809928100281012810228103281042810528106281072810828109281102811128112281132811428115281162811728118281192812028121281222812328124281252812628127281282812928130281312813228133281342813528136281372813828139281402814128142281432814428145281462814728148281492815028151281522815328154281552815628157281582815928160281612816228163281642816528166281672816828169281702817128172281732817428175281762817728178281792818028181281822818328184281852818628187281882818928190281912819228193281942819528196281972819828199282002820128202282032820428205282062820728208282092821028211282122821328214282152821628217282182821928220282212822228223282242822528226282272822828229282302823128232282332823428235282362823728238282392824028241282422824328244282452824628247282482824928250282512825228253282542825528256282572825828259282602826128262282632826428265282662826728268282692827028271282722827328274282752827628277282782827928280282812828228283282842828528286282872828828289282902829128292282932829428295282962829728298282992830028301283022830328304283052830628307283082830928310283112831228313283142831528316283172831828319283202832128322283232832428325283262832728328283292833028331283322833328334283352833628337283382833928340283412834228343283442834528346283472834828349283502835128352283532835428355283562835728358283592836028361283622836328364283652836628367283682836928370283712837228373283742837528376283772837828379283802838128382283832838428385283862838728388283892839028391283922839328394283952839628397283982839928400284012840228403284042840528406284072840828409284102841128412284132841428415284162841728418284192842028421284222842328424284252842628427284282842928430284312843228433284342843528436284372843828439284402844128442284432844428445284462844728448284492845028451284522845328454284552845628457284582845928460284612846228463284642846528466284672846828469284702847128472284732847428475284762847728478284792848028481284822848328484284852848628487284882848928490284912849228493284942849528496284972849828499285002850128502285032850428505285062850728508285092851028511285122851328514285152851628517285182851928520285212852228523285242852528526285272852828529285302853128532285332853428535285362853728538285392854028541285422854328544285452854628547285482854928550285512855228553285542855528556285572855828559285602856128562285632856428565285662856728568285692857028571285722857328574285752857628577285782857928580285812858228583285842858528586285872858828589285902859128592285932859428595285962859728598285992860028601286022860328604286052860628607286082860928610286112861228613286142861528616286172861828619286202862128622286232862428625286262862728628286292863028631286322863328634286352863628637286382863928640286412864228643286442864528646286472864828649286502865128652286532865428655286562865728658286592866028661286622866328664286652866628667286682866928670286712867228673286742867528676286772867828679286802868128682286832868428685286862868728688286892869028691286922869328694286952869628697286982869928700287012870228703287042870528706287072870828709287102871128712287132871428715287162871728718287192872028721287222872328724287252872628727287282872928730287312873228733287342873528736287372873828739287402874128742287432874428745287462874728748287492875028751287522875328754287552875628757287582875928760287612876228763287642876528766287672876828769287702877128772287732877428775287762877728778287792878028781287822878328784287852878628787287882878928790287912879228793287942879528796287972879828799288002880128802288032880428805288062880728808288092881028811288122881328814288152881628817288182881928820288212882228823288242882528826288272882828829288302883128832288332883428835288362883728838288392884028841288422884328844288452884628847288482884928850288512885228853288542885528856288572885828859288602886128862288632886428865288662886728868288692887028871288722887328874288752887628877288782887928880288812888228883288842888528886288872888828889288902889128892288932889428895288962889728898288992890028901289022890328904289052890628907289082890928910289112891228913289142891528916289172891828919289202892128922289232892428925289262892728928289292893028931289322893328934289352893628937289382893928940289412894228943289442894528946289472894828949289502895128952289532895428955289562895728958289592896028961289622896328964289652896628967289682896928970289712897228973289742897528976289772897828979289802898128982289832898428985289862898728988289892899028991289922899328994289952899628997289982899929000290012900229003290042900529006290072900829009290102901129012290132901429015290162901729018290192902029021290222902329024290252902629027290282902929030290312903229033290342903529036290372903829039290402904129042290432904429045290462904729048290492905029051290522905329054290552905629057290582905929060290612906229063290642906529066290672906829069290702907129072290732907429075290762907729078290792908029081290822908329084290852908629087290882908929090290912909229093290942909529096290972909829099291002910129102291032910429105291062910729108291092911029111291122911329114291152911629117291182911929120291212912229123291242912529126291272912829129291302913129132291332913429135291362913729138291392914029141291422914329144291452914629147291482914929150291512915229153291542915529156291572915829159291602916129162291632916429165291662916729168291692917029171291722917329174291752917629177291782917929180291812918229183291842918529186291872918829189291902919129192291932919429195291962919729198291992920029201292022920329204292052920629207292082920929210292112921229213292142921529216292172921829219292202922129222292232922429225292262922729228292292923029231292322923329234292352923629237292382923929240292412924229243292442924529246292472924829249292502925129252292532925429255292562925729258292592926029261292622926329264292652926629267292682926929270292712927229273292742927529276292772927829279292802928129282292832928429285292862928729288292892929029291292922929329294292952929629297292982929929300293012930229303293042930529306293072930829309293102931129312293132931429315293162931729318293192932029321293222932329324293252932629327293282932929330293312933229333293342933529336293372933829339293402934129342293432934429345293462934729348293492935029351293522935329354293552935629357293582935929360293612936229363293642936529366293672936829369293702937129372293732937429375293762937729378293792938029381293822938329384293852938629387293882938929390293912939229393293942939529396293972939829399294002940129402294032940429405294062940729408294092941029411294122941329414294152941629417294182941929420294212942229423294242942529426294272942829429294302943129432294332943429435294362943729438294392944029441294422944329444294452944629447294482944929450294512945229453294542945529456294572945829459294602946129462294632946429465294662946729468294692947029471294722947329474294752947629477294782947929480294812948229483294842948529486294872948829489294902949129492294932949429495294962949729498294992950029501295022950329504295052950629507295082950929510295112951229513295142951529516295172951829519295202952129522295232952429525295262952729528295292953029531295322953329534295352953629537295382953929540295412954229543295442954529546295472954829549295502955129552295532955429555295562955729558295592956029561295622956329564295652956629567295682956929570295712957229573295742957529576295772957829579295802958129582295832958429585295862958729588295892959029591295922959329594295952959629597295982959929600296012960229603296042960529606296072960829609296102961129612296132961429615296162961729618296192962029621296222962329624296252962629627296282962929630296312963229633296342963529636296372963829639296402964129642296432964429645296462964729648296492965029651296522965329654296552965629657296582965929660296612966229663296642966529666296672966829669296702967129672296732967429675296762967729678296792968029681296822968329684296852968629687296882968929690296912969229693296942969529696296972969829699297002970129702297032970429705297062970729708297092971029711297122971329714297152971629717297182971929720297212972229723297242972529726297272972829729297302973129732297332973429735297362973729738297392974029741297422974329744297452974629747297482974929750297512975229753297542975529756297572975829759297602976129762297632976429765297662976729768297692977029771297722977329774297752977629777297782977929780297812978229783297842978529786297872978829789297902979129792297932979429795297962979729798297992980029801298022980329804298052980629807298082980929810298112981229813298142981529816298172981829819298202982129822298232982429825298262982729828298292983029831298322983329834298352983629837298382983929840298412984229843298442984529846298472984829849298502985129852298532985429855298562985729858298592986029861298622986329864298652986629867298682986929870298712987229873298742987529876298772987829879298802988129882298832988429885298862988729888298892989029891298922989329894298952989629897298982989929900299012990229903299042990529906299072990829909299102991129912299132991429915299162991729918299192992029921299222992329924299252992629927299282992929930299312993229933299342993529936299372993829939299402994129942299432994429945299462994729948299492995029951299522995329954299552995629957299582995929960299612996229963299642996529966299672996829969299702997129972299732997429975299762997729978299792998029981299822998329984299852998629987299882998929990299912999229993299942999529996299972999829999300003000130002300033000430005300063000730008300093001030011300123001330014300153001630017300183001930020300213002230023300243002530026300273002830029300303003130032300333003430035300363003730038300393004030041300423004330044300453004630047300483004930050300513005230053300543005530056300573005830059300603006130062300633006430065300663006730068300693007030071300723007330074300753007630077300783007930080300813008230083300843008530086300873008830089300903009130092300933009430095300963009730098300993010030101301023010330104301053010630107301083010930110301113011230113301143011530116301173011830119301203012130122301233012430125301263012730128301293013030131301323013330134301353013630137301383013930140301413014230143301443014530146301473014830149301503015130152301533015430155301563015730158301593016030161301623016330164301653016630167301683016930170301713017230173301743017530176301773017830179301803018130182301833018430185301863018730188301893019030191301923019330194301953019630197301983019930200302013020230203302043020530206302073020830209302103021130212302133021430215302163021730218302193022030221302223022330224302253022630227302283022930230302313023230233302343023530236302373023830239302403024130242302433024430245302463024730248302493025030251302523025330254302553025630257302583025930260302613026230263302643026530266302673026830269302703027130272302733027430275302763027730278302793028030281302823028330284302853028630287302883028930290302913029230293302943029530296302973029830299303003030130302303033030430305303063030730308303093031030311303123031330314303153031630317303183031930320303213032230323303243032530326303273032830329303303033130332303333033430335303363033730338303393034030341303423034330344303453034630347303483034930350303513035230353303543035530356303573035830359303603036130362303633036430365303663036730368303693037030371303723037330374303753037630377303783037930380303813038230383303843038530386303873038830389303903039130392303933039430395303963039730398303993040030401304023040330404304053040630407304083040930410304113041230413304143041530416304173041830419304203042130422304233042430425304263042730428304293043030431304323043330434304353043630437304383043930440304413044230443304443044530446304473044830449304503045130452304533045430455304563045730458304593046030461304623046330464304653046630467304683046930470304713047230473304743047530476304773047830479304803048130482304833048430485304863048730488304893049030491304923049330494304953049630497304983049930500305013050230503305043050530506305073050830509305103051130512305133051430515305163051730518305193052030521305223052330524305253052630527305283052930530305313053230533305343053530536305373053830539305403054130542305433054430545305463054730548305493055030551305523055330554305553055630557305583055930560305613056230563305643056530566305673056830569305703057130572305733057430575305763057730578305793058030581305823058330584305853058630587305883058930590305913059230593305943059530596305973059830599306003060130602306033060430605306063060730608306093061030611306123061330614306153061630617306183061930620306213062230623306243062530626306273062830629306303063130632306333063430635306363063730638306393064030641306423064330644306453064630647306483064930650306513065230653306543065530656306573065830659306603066130662306633066430665306663066730668306693067030671306723067330674306753067630677306783067930680306813068230683306843068530686306873068830689306903069130692306933069430695306963069730698306993070030701307023070330704307053070630707307083070930710307113071230713307143071530716307173071830719307203072130722307233072430725307263072730728307293073030731307323073330734307353073630737307383073930740307413074230743307443074530746307473074830749307503075130752307533075430755307563075730758307593076030761307623076330764307653076630767307683076930770307713077230773307743077530776307773077830779307803078130782307833078430785307863078730788307893079030791307923079330794307953079630797307983079930800308013080230803308043080530806308073080830809308103081130812308133081430815308163081730818308193082030821308223082330824308253082630827308283082930830308313083230833308343083530836308373083830839308403084130842308433084430845308463084730848308493085030851308523085330854308553085630857308583085930860308613086230863308643086530866308673086830869308703087130872308733087430875308763087730878308793088030881308823088330884308853088630887308883088930890308913089230893308943089530896308973089830899309003090130902309033090430905309063090730908309093091030911309123091330914309153091630917309183091930920309213092230923309243092530926309273092830929309303093130932309333093430935309363093730938309393094030941309423094330944309453094630947309483094930950309513095230953309543095530956309573095830959309603096130962309633096430965309663096730968309693097030971309723097330974309753097630977309783097930980309813098230983309843098530986309873098830989309903099130992309933099430995309963099730998309993100031001310023100331004310053100631007310083100931010310113101231013310143101531016310173101831019310203102131022310233102431025310263102731028310293103031031310323103331034310353103631037310383103931040310413104231043310443104531046310473104831049310503105131052310533105431055310563105731058310593106031061310623106331064310653106631067310683106931070310713107231073310743107531076310773107831079310803108131082310833108431085310863108731088310893109031091310923109331094310953109631097310983109931100311013110231103311043110531106311073110831109311103111131112311133111431115311163111731118311193112031121311223112331124311253112631127311283112931130311313113231133311343113531136311373113831139311403114131142311433114431145311463114731148311493115031151311523115331154311553115631157311583115931160311613116231163311643116531166311673116831169311703117131172311733117431175311763117731178311793118031181311823118331184311853118631187311883118931190311913119231193311943119531196311973119831199312003120131202312033120431205312063120731208312093121031211312123121331214312153121631217312183121931220312213122231223312243122531226312273122831229312303123131232312333123431235312363123731238312393124031241312423124331244312453124631247312483124931250312513125231253312543125531256312573125831259312603126131262312633126431265312663126731268312693127031271312723127331274312753127631277312783127931280312813128231283312843128531286312873128831289312903129131292312933129431295312963129731298312993130031301313023130331304313053130631307313083130931310313113131231313313143131531316313173131831319313203132131322313233132431325313263132731328313293133031331313323133331334313353133631337313383133931340313413134231343313443134531346313473134831349313503135131352313533135431355313563135731358313593136031361313623136331364313653136631367313683136931370313713137231373313743137531376313773137831379313803138131382313833138431385313863138731388313893139031391313923139331394313953139631397313983139931400314013140231403314043140531406314073140831409314103141131412314133141431415314163141731418314193142031421314223142331424314253142631427314283142931430314313143231433314343143531436314373143831439314403144131442314433144431445314463144731448314493145031451314523145331454314553145631457314583145931460314613146231463314643146531466314673146831469314703147131472314733147431475314763147731478314793148031481314823148331484314853148631487314883148931490314913149231493314943149531496314973149831499315003150131502315033150431505315063150731508315093151031511315123151331514315153151631517315183151931520315213152231523315243152531526315273152831529315303153131532315333153431535315363153731538315393154031541315423154331544315453154631547315483154931550315513155231553315543155531556315573155831559315603156131562315633156431565315663156731568315693157031571315723157331574315753157631577315783157931580315813158231583315843158531586315873158831589315903159131592315933159431595315963159731598315993160031601316023160331604316053160631607316083160931610316113161231613316143161531616316173161831619316203162131622316233162431625316263162731628316293163031631316323163331634316353163631637316383163931640316413164231643316443164531646316473164831649316503165131652316533165431655316563165731658316593166031661316623166331664316653166631667316683166931670316713167231673316743167531676316773167831679316803168131682316833168431685316863168731688316893169031691316923169331694316953169631697316983169931700317013170231703317043170531706317073170831709317103171131712317133171431715317163171731718317193172031721317223172331724317253172631727317283172931730317313173231733317343173531736317373173831739317403174131742317433174431745317463174731748317493175031751317523175331754317553175631757317583175931760317613176231763317643176531766317673176831769317703177131772317733177431775317763177731778317793178031781317823178331784317853178631787317883178931790317913179231793317943179531796317973179831799318003180131802318033180431805318063180731808318093181031811318123181331814318153181631817318183181931820318213182231823318243182531826318273182831829318303183131832318333183431835318363183731838318393184031841318423184331844318453184631847318483184931850318513185231853318543185531856318573185831859318603186131862318633186431865318663186731868318693187031871318723187331874318753187631877318783187931880318813188231883318843188531886318873188831889318903189131892318933189431895318963189731898318993190031901319023190331904319053190631907319083190931910319113191231913319143191531916319173191831919319203192131922319233192431925319263192731928319293193031931319323193331934319353193631937319383193931940319413194231943319443194531946319473194831949319503195131952319533195431955319563195731958319593196031961319623196331964319653196631967319683196931970319713197231973319743197531976319773197831979319803198131982319833198431985319863198731988319893199031991319923199331994319953199631997319983199932000320013200232003320043200532006320073200832009320103201132012320133201432015320163201732018320193202032021320223202332024320253202632027320283202932030320313203232033320343203532036320373203832039320403204132042320433204432045320463204732048320493205032051320523205332054320553205632057320583205932060320613206232063320643206532066320673206832069320703207132072320733207432075320763207732078320793208032081320823208332084320853208632087320883208932090320913209232093320943209532096320973209832099321003210132102321033210432105321063210732108321093211032111321123211332114321153211632117321183211932120321213212232123321243212532126321273212832129321303213132132321333213432135321363213732138321393214032141321423214332144321453214632147321483214932150321513215232153321543215532156321573215832159321603216132162321633216432165321663216732168321693217032171321723217332174321753217632177321783217932180321813218232183321843218532186321873218832189321903219132192321933219432195321963219732198321993220032201322023220332204322053220632207322083220932210322113221232213322143221532216322173221832219322203222132222322233222432225322263222732228322293223032231322323223332234322353223632237322383223932240322413224232243322443224532246322473224832249322503225132252322533225432255322563225732258322593226032261322623226332264322653226632267322683226932270322713227232273322743227532276322773227832279322803228132282322833228432285322863228732288322893229032291322923229332294322953229632297322983229932300323013230232303323043230532306323073230832309323103231132312323133231432315323163231732318323193232032321323223232332324323253232632327323283232932330323313233232333323343233532336323373233832339323403234132342323433234432345323463234732348323493235032351323523235332354323553235632357323583235932360323613236232363323643236532366323673236832369323703237132372323733237432375323763237732378323793238032381323823238332384323853238632387323883238932390323913239232393323943239532396323973239832399324003240132402324033240432405324063240732408324093241032411324123241332414324153241632417324183241932420324213242232423324243242532426324273242832429324303243132432324333243432435324363243732438324393244032441324423244332444324453244632447324483244932450324513245232453324543245532456324573245832459324603246132462324633246432465324663246732468324693247032471324723247332474324753247632477324783247932480324813248232483324843248532486324873248832489324903249132492324933249432495324963249732498324993250032501325023250332504325053250632507325083250932510325113251232513325143251532516325173251832519325203252132522325233252432525325263252732528325293253032531325323253332534325353253632537325383253932540325413254232543325443254532546325473254832549325503255132552325533255432555325563255732558325593256032561325623256332564325653256632567325683256932570325713257232573325743257532576325773257832579325803258132582325833258432585325863258732588325893259032591325923259332594325953259632597325983259932600326013260232603326043260532606326073260832609326103261132612326133261432615326163261732618326193262032621326223262332624326253262632627326283262932630326313263232633326343263532636326373263832639326403264132642326433264432645326463264732648326493265032651326523265332654326553265632657326583265932660326613266232663326643266532666326673266832669326703267132672326733267432675326763267732678326793268032681326823268332684326853268632687326883268932690326913269232693326943269532696326973269832699327003270132702327033270432705327063270732708327093271032711327123271332714327153271632717327183271932720327213272232723327243272532726327273272832729327303273132732327333273432735327363273732738327393274032741327423274332744327453274632747327483274932750327513275232753327543275532756327573275832759327603276132762327633276432765327663276732768327693277032771327723277332774327753277632777327783277932780327813278232783327843278532786327873278832789327903279132792327933279432795327963279732798327993280032801328023280332804328053280632807328083280932810328113281232813328143281532816328173281832819328203282132822328233282432825328263282732828328293283032831328323283332834328353283632837328383283932840328413284232843328443284532846328473284832849328503285132852328533285432855328563285732858328593286032861328623286332864328653286632867328683286932870328713287232873328743287532876328773287832879328803288132882328833288432885328863288732888328893289032891328923289332894328953289632897328983289932900329013290232903329043290532906329073290832909329103291132912329133291432915329163291732918329193292032921329223292332924329253292632927329283292932930329313293232933329343293532936329373293832939329403294132942329433294432945329463294732948329493295032951329523295332954329553295632957329583295932960329613296232963329643296532966329673296832969329703297132972329733297432975329763297732978329793298032981329823298332984329853298632987329883298932990329913299232993329943299532996329973299832999330003300133002330033300433005330063300733008330093301033011330123301333014330153301633017330183301933020330213302233023330243302533026330273302833029330303303133032330333303433035330363303733038330393304033041330423304333044330453304633047330483304933050330513305233053330543305533056330573305833059330603306133062330633306433065330663306733068330693307033071330723307333074330753307633077330783307933080330813308233083330843308533086330873308833089330903309133092330933309433095330963309733098330993310033101331023310333104331053310633107331083310933110331113311233113331143311533116331173311833119331203312133122331233312433125331263312733128331293313033131331323313333134331353313633137331383313933140331413314233143331443314533146331473314833149331503315133152331533315433155331563315733158331593316033161331623316333164331653316633167331683316933170331713317233173331743317533176331773317833179331803318133182331833318433185331863318733188331893319033191331923319333194331953319633197331983319933200332013320233203332043320533206332073320833209332103321133212332133321433215332163321733218332193322033221332223322333224332253322633227332283322933230332313323233233332343323533236332373323833239332403324133242332433324433245332463324733248332493325033251332523325333254332553325633257332583325933260332613326233263332643326533266332673326833269332703327133272332733327433275332763327733278332793328033281332823328333284332853328633287332883328933290332913329233293332943329533296332973329833299333003330133302333033330433305333063330733308333093331033311333123331333314333153331633317333183331933320333213332233323333243332533326333273332833329333303333133332333333333433335333363333733338333393334033341333423334333344333453334633347333483334933350333513335233353333543335533356333573335833359333603336133362333633336433365333663336733368333693337033371333723337333374333753337633377333783337933380333813338233383333843338533386333873338833389333903339133392333933339433395333963339733398333993340033401334023340333404334053340633407334083340933410334113341233413334143341533416334173341833419334203342133422334233342433425334263342733428334293343033431334323343333434334353343633437334383343933440334413344233443334443344533446334473344833449334503345133452334533345433455334563345733458334593346033461334623346333464334653346633467334683346933470334713347233473334743347533476334773347833479334803348133482334833348433485334863348733488334893349033491334923349333494334953349633497334983349933500335013350233503335043350533506335073350833509335103351133512335133351433515335163351733518335193352033521335223352333524335253352633527335283352933530335313353233533335343353533536335373353833539335403354133542335433354433545335463354733548335493355033551335523355333554335553355633557335583355933560335613356233563335643356533566335673356833569335703357133572335733357433575335763357733578335793358033581335823358333584335853358633587335883358933590335913359233593335943359533596335973359833599336003360133602336033360433605336063360733608336093361033611336123361333614336153361633617336183361933620336213362233623336243362533626336273362833629336303363133632336333363433635336363363733638336393364033641336423364333644336453364633647336483364933650336513365233653336543365533656336573365833659336603366133662336633366433665336663366733668336693367033671336723367333674336753367633677336783367933680336813368233683336843368533686336873368833689336903369133692336933369433695336963369733698336993370033701337023370333704337053370633707337083370933710337113371233713337143371533716337173371833719337203372133722337233372433725337263372733728337293373033731337323373333734337353373633737337383373933740337413374233743337443374533746337473374833749337503375133752337533375433755337563375733758337593376033761337623376333764337653376633767337683376933770337713377233773337743377533776337773377833779337803378133782337833378433785337863378733788337893379033791337923379333794337953379633797337983379933800338013380233803338043380533806338073380833809338103381133812338133381433815338163381733818338193382033821338223382333824338253382633827338283382933830338313383233833338343383533836338373383833839338403384133842338433384433845338463384733848338493385033851338523385333854338553385633857338583385933860338613386233863338643386533866338673386833869338703387133872338733387433875338763387733878338793388033881338823388333884338853388633887338883388933890338913389233893338943389533896338973389833899339003390133902339033390433905339063390733908339093391033911339123391333914339153391633917339183391933920339213392233923339243392533926339273392833929339303393133932339333393433935339363393733938339393394033941339423394333944339453394633947339483394933950339513395233953339543395533956339573395833959339603396133962339633396433965339663396733968339693397033971339723397333974339753397633977339783397933980339813398233983339843398533986339873398833989339903399133992339933399433995339963399733998339993400034001340023400334004340053400634007340083400934010340113401234013340143401534016340173401834019340203402134022340233402434025340263402734028340293403034031340323403334034340353403634037340383403934040340413404234043340443404534046340473404834049340503405134052340533405434055340563405734058340593406034061340623406334064340653406634067340683406934070340713407234073340743407534076340773407834079340803408134082340833408434085340863408734088340893409034091340923409334094340953409634097340983409934100341013410234103341043410534106341073410834109341103411134112341133411434115341163411734118341193412034121341223412334124341253412634127341283412934130341313413234133341343413534136341373413834139341403414134142341433414434145341463414734148341493415034151341523415334154341553415634157341583415934160341613416234163341643416534166341673416834169341703417134172341733417434175341763417734178341793418034181341823418334184341853418634187341883418934190341913419234193341943419534196341973419834199342003420134202342033420434205342063420734208342093421034211342123421334214342153421634217342183421934220342213422234223342243422534226342273422834229342303423134232342333423434235342363423734238342393424034241342423424334244342453424634247342483424934250342513425234253342543425534256342573425834259342603426134262342633426434265342663426734268342693427034271342723427334274342753427634277342783427934280342813428234283342843428534286342873428834289342903429134292342933429434295342963429734298342993430034301343023430334304343053430634307343083430934310343113431234313343143431534316343173431834319343203432134322343233432434325343263432734328343293433034331343323433334334343353433634337343383433934340343413434234343343443434534346343473434834349343503435134352343533435434355343563435734358343593436034361343623436334364343653436634367343683436934370343713437234373343743437534376343773437834379343803438134382343833438434385343863438734388343893439034391343923439334394343953439634397343983439934400344013440234403344043440534406344073440834409344103441134412344133441434415344163441734418344193442034421344223442334424344253442634427344283442934430344313443234433344343443534436344373443834439344403444134442344433444434445344463444734448344493445034451344523445334454344553445634457344583445934460344613446234463344643446534466344673446834469344703447134472344733447434475344763447734478344793448034481344823448334484344853448634487344883448934490344913449234493344943449534496344973449834499345003450134502345033450434505345063450734508345093451034511345123451334514345153451634517345183451934520345213452234523345243452534526345273452834529345303453134532345333453434535345363453734538345393454034541345423454334544345453454634547345483454934550345513455234553345543455534556345573455834559345603456134562345633456434565345663456734568345693457034571345723457334574345753457634577345783457934580345813458234583345843458534586345873458834589345903459134592345933459434595345963459734598345993460034601346023460334604346053460634607346083460934610346113461234613346143461534616346173461834619346203462134622346233462434625346263462734628346293463034631346323463334634346353463634637346383463934640346413464234643346443464534646346473464834649346503465134652346533465434655346563465734658346593466034661346623466334664346653466634667346683466934670346713467234673346743467534676346773467834679346803468134682346833468434685346863468734688346893469034691346923469334694346953469634697346983469934700347013470234703347043470534706347073470834709347103471134712347133471434715347163471734718347193472034721347223472334724347253472634727347283472934730347313473234733347343473534736347373473834739347403474134742347433474434745347463474734748347493475034751347523475334754347553475634757347583475934760347613476234763347643476534766347673476834769347703477134772347733477434775347763477734778347793478034781347823478334784347853478634787347883478934790347913479234793347943479534796347973479834799348003480134802348033480434805348063480734808348093481034811348123481334814348153481634817348183481934820348213482234823348243482534826348273482834829348303483134832348333483434835348363483734838348393484034841348423484334844348453484634847348483484934850348513485234853348543485534856348573485834859348603486134862348633486434865348663486734868348693487034871348723487334874348753487634877348783487934880348813488234883348843488534886348873488834889348903489134892348933489434895348963489734898348993490034901349023490334904349053490634907349083490934910349113491234913349143491534916349173491834919349203492134922349233492434925349263492734928349293493034931349323493334934349353493634937349383493934940349413494234943349443494534946349473494834949349503495134952349533495434955349563495734958349593496034961349623496334964349653496634967349683496934970349713497234973349743497534976349773497834979349803498134982349833498434985349863498734988349893499034991349923499334994349953499634997349983499935000350013500235003350043500535006350073500835009350103501135012350133501435015350163501735018350193502035021350223502335024350253502635027350283502935030350313503235033350343503535036350373503835039350403504135042350433504435045350463504735048350493505035051350523505335054350553505635057350583505935060350613506235063350643506535066350673506835069350703507135072350733507435075350763507735078350793508035081350823508335084350853508635087350883508935090350913509235093350943509535096350973509835099351003510135102351033510435105351063510735108351093511035111351123511335114351153511635117351183511935120351213512235123351243512535126351273512835129351303513135132351333513435135351363513735138351393514035141351423514335144351453514635147351483514935150351513515235153351543515535156351573515835159351603516135162351633516435165351663516735168351693517035171351723517335174351753517635177351783517935180351813518235183351843518535186351873518835189351903519135192351933519435195351963519735198351993520035201352023520335204352053520635207352083520935210352113521235213352143521535216352173521835219352203522135222352233522435225352263522735228352293523035231352323523335234352353523635237352383523935240352413524235243352443524535246352473524835249352503525135252352533525435255352563525735258352593526035261352623526335264352653526635267352683526935270352713527235273352743527535276352773527835279352803528135282352833528435285352863528735288352893529035291352923529335294352953529635297352983529935300353013530235303353043530535306353073530835309353103531135312353133531435315353163531735318353193532035321353223532335324353253532635327353283532935330353313533235333353343533535336353373533835339353403534135342353433534435345353463534735348353493535035351353523535335354353553535635357353583535935360353613536235363353643536535366353673536835369353703537135372353733537435375353763537735378353793538035381353823538335384353853538635387353883538935390353913539235393353943539535396353973539835399354003540135402354033540435405354063540735408354093541035411354123541335414354153541635417354183541935420354213542235423354243542535426354273542835429354303543135432354333543435435354363543735438354393544035441354423544335444354453544635447354483544935450354513545235453354543545535456354573545835459354603546135462354633546435465354663546735468354693547035471354723547335474354753547635477354783547935480354813548235483354843548535486354873548835489354903549135492354933549435495354963549735498354993550035501355023550335504355053550635507355083550935510355113551235513355143551535516355173551835519355203552135522355233552435525355263552735528355293553035531355323553335534355353553635537355383553935540355413554235543355443554535546355473554835549355503555135552355533555435555355563555735558355593556035561355623556335564355653556635567355683556935570355713557235573355743557535576355773557835579355803558135582355833558435585355863558735588355893559035591355923559335594355953559635597355983559935600356013560235603356043560535606356073560835609356103561135612356133561435615356163561735618356193562035621356223562335624356253562635627356283562935630356313563235633356343563535636356373563835639356403564135642356433564435645356463564735648356493565035651356523565335654356553565635657356583565935660356613566235663356643566535666356673566835669356703567135672356733567435675356763567735678356793568035681356823568335684356853568635687356883568935690356913569235693356943569535696356973569835699357003570135702357033570435705357063570735708357093571035711357123571335714357153571635717357183571935720357213572235723357243572535726357273572835729357303573135732357333573435735357363573735738357393574035741357423574335744357453574635747357483574935750357513575235753357543575535756357573575835759357603576135762357633576435765357663576735768357693577035771357723577335774357753577635777357783577935780357813578235783357843578535786357873578835789357903579135792357933579435795357963579735798357993580035801358023580335804358053580635807358083580935810358113581235813358143581535816358173581835819358203582135822358233582435825358263582735828358293583035831358323583335834358353583635837358383583935840358413584235843358443584535846358473584835849358503585135852358533585435855358563585735858358593586035861358623586335864358653586635867358683586935870358713587235873358743587535876358773587835879358803588135882358833588435885358863588735888358893589035891358923589335894358953589635897358983589935900359013590235903359043590535906359073590835909359103591135912359133591435915359163591735918359193592035921359223592335924359253592635927359283592935930359313593235933359343593535936359373593835939359403594135942359433594435945359463594735948359493595035951359523595335954359553595635957359583595935960359613596235963359643596535966359673596835969359703597135972359733597435975359763597735978359793598035981359823598335984359853598635987359883598935990359913599235993359943599535996359973599835999360003600136002360033600436005360063600736008360093601036011360123601336014360153601636017360183601936020360213602236023360243602536026360273602836029360303603136032360333603436035360363603736038360393604036041360423604336044360453604636047360483604936050360513605236053360543605536056360573605836059360603606136062360633606436065360663606736068360693607036071360723607336074360753607636077360783607936080360813608236083360843608536086360873608836089360903609136092360933609436095360963609736098360993610036101361023610336104361053610636107361083610936110361113611236113361143611536116361173611836119361203612136122361233612436125361263612736128361293613036131361323613336134361353613636137361383613936140361413614236143361443614536146361473614836149361503615136152361533615436155361563615736158361593616036161361623616336164361653616636167361683616936170361713617236173361743617536176361773617836179361803618136182361833618436185361863618736188361893619036191361923619336194361953619636197361983619936200362013620236203362043620536206362073620836209362103621136212362133621436215362163621736218362193622036221362223622336224362253622636227362283622936230362313623236233362343623536236362373623836239362403624136242362433624436245362463624736248362493625036251362523625336254362553625636257362583625936260362613626236263362643626536266362673626836269362703627136272362733627436275362763627736278362793628036281362823628336284362853628636287362883628936290362913629236293362943629536296362973629836299363003630136302363033630436305363063630736308363093631036311363123631336314363153631636317363183631936320363213632236323363243632536326363273632836329363303633136332363333633436335363363633736338363393634036341363423634336344363453634636347363483634936350363513635236353363543635536356363573635836359363603636136362363633636436365363663636736368363693637036371363723637336374363753637636377363783637936380363813638236383363843638536386363873638836389363903639136392363933639436395363963639736398363993640036401364023640336404364053640636407364083640936410364113641236413364143641536416364173641836419364203642136422364233642436425364263642736428364293643036431364323643336434364353643636437364383643936440364413644236443364443644536446364473644836449364503645136452364533645436455364563645736458364593646036461364623646336464364653646636467364683646936470364713647236473364743647536476364773647836479364803648136482364833648436485364863648736488364893649036491364923649336494364953649636497364983649936500365013650236503365043650536506365073650836509365103651136512365133651436515365163651736518365193652036521365223652336524365253652636527365283652936530365313653236533365343653536536365373653836539365403654136542365433654436545365463654736548365493655036551365523655336554365553655636557365583655936560365613656236563365643656536566365673656836569365703657136572365733657436575365763657736578365793658036581365823658336584365853658636587365883658936590365913659236593365943659536596365973659836599366003660136602366033660436605366063660736608366093661036611366123661336614366153661636617366183661936620366213662236623366243662536626366273662836629366303663136632366333663436635366363663736638366393664036641366423664336644366453664636647366483664936650366513665236653366543665536656366573665836659366603666136662366633666436665366663666736668366693667036671366723667336674366753667636677366783667936680366813668236683366843668536686366873668836689366903669136692366933669436695366963669736698366993670036701367023670336704367053670636707367083670936710367113671236713367143671536716367173671836719367203672136722367233672436725367263672736728367293673036731367323673336734367353673636737367383673936740367413674236743367443674536746367473674836749367503675136752367533675436755367563675736758367593676036761367623676336764367653676636767367683676936770367713677236773367743677536776367773677836779367803678136782367833678436785367863678736788367893679036791367923679336794367953679636797367983679936800368013680236803368043680536806368073680836809368103681136812368133681436815368163681736818368193682036821368223682336824368253682636827368283682936830368313683236833368343683536836368373683836839368403684136842368433684436845368463684736848368493685036851368523685336854368553685636857368583685936860368613686236863368643686536866368673686836869368703687136872368733687436875368763687736878368793688036881368823688336884368853688636887368883688936890368913689236893368943689536896368973689836899369003690136902369033690436905369063690736908369093691036911369123691336914369153691636917369183691936920369213692236923369243692536926369273692836929369303693136932369333693436935369363693736938369393694036941369423694336944369453694636947369483694936950369513695236953369543695536956369573695836959369603696136962369633696436965369663696736968369693697036971369723697336974369753697636977369783697936980369813698236983369843698536986369873698836989369903699136992369933699436995369963699736998369993700037001370023700337004370053700637007370083700937010370113701237013370143701537016370173701837019370203702137022370233702437025370263702737028370293703037031370323703337034370353703637037370383703937040370413704237043370443704537046370473704837049370503705137052370533705437055370563705737058370593706037061370623706337064370653706637067370683706937070370713707237073370743707537076370773707837079370803708137082370833708437085370863708737088370893709037091370923709337094370953709637097370983709937100371013710237103371043710537106371073710837109371103711137112371133711437115371163711737118371193712037121371223712337124371253712637127371283712937130371313713237133371343713537136371373713837139371403714137142371433714437145371463714737148371493715037151371523715337154371553715637157371583715937160371613716237163371643716537166371673716837169371703717137172371733717437175371763717737178371793718037181371823718337184371853718637187371883718937190371913719237193371943719537196371973719837199372003720137202372033720437205372063720737208372093721037211372123721337214372153721637217372183721937220372213722237223372243722537226372273722837229372303723137232372333723437235372363723737238372393724037241372423724337244372453724637247372483724937250372513725237253372543725537256372573725837259372603726137262372633726437265372663726737268372693727037271372723727337274372753727637277372783727937280372813728237283372843728537286372873728837289372903729137292372933729437295372963729737298372993730037301373023730337304373053730637307373083730937310373113731237313373143731537316373173731837319373203732137322373233732437325373263732737328373293733037331373323733337334373353733637337373383733937340373413734237343373443734537346373473734837349373503735137352373533735437355373563735737358373593736037361373623736337364373653736637367373683736937370373713737237373373743737537376373773737837379373803738137382373833738437385373863738737388373893739037391373923739337394373953739637397373983739937400374013740237403374043740537406374073740837409374103741137412374133741437415374163741737418374193742037421374223742337424374253742637427374283742937430374313743237433374343743537436374373743837439374403744137442374433744437445374463744737448374493745037451374523745337454374553745637457374583745937460374613746237463374643746537466374673746837469374703747137472374733747437475374763747737478374793748037481374823748337484374853748637487374883748937490374913749237493374943749537496374973749837499375003750137502375033750437505375063750737508375093751037511375123751337514375153751637517375183751937520375213752237523375243752537526375273752837529375303753137532375333753437535375363753737538375393754037541375423754337544375453754637547375483754937550375513755237553375543755537556375573755837559375603756137562375633756437565375663756737568375693757037571375723757337574375753757637577375783757937580375813758237583375843758537586375873758837589375903759137592375933759437595375963759737598375993760037601376023760337604376053760637607376083760937610376113761237613376143761537616376173761837619376203762137622376233762437625376263762737628376293763037631376323763337634376353763637637376383763937640376413764237643376443764537646376473764837649376503765137652376533765437655376563765737658376593766037661376623766337664376653766637667376683766937670376713767237673376743767537676376773767837679376803768137682376833768437685376863768737688376893769037691376923769337694376953769637697376983769937700377013770237703377043770537706377073770837709377103771137712377133771437715377163771737718377193772037721377223772337724377253772637727377283772937730377313773237733377343773537736377373773837739377403774137742377433774437745377463774737748377493775037751377523775337754377553775637757377583775937760377613776237763377643776537766377673776837769377703777137772377733777437775377763777737778377793778037781377823778337784377853778637787377883778937790377913779237793377943779537796377973779837799378003780137802378033780437805378063780737808378093781037811378123781337814378153781637817378183781937820378213782237823378243782537826378273782837829378303783137832378333783437835378363783737838378393784037841378423784337844378453784637847378483784937850378513785237853378543785537856378573785837859378603786137862378633786437865378663786737868378693787037871378723787337874378753787637877378783787937880378813788237883378843788537886378873788837889378903789137892378933789437895378963789737898378993790037901379023790337904379053790637907379083790937910379113791237913379143791537916379173791837919379203792137922379233792437925379263792737928379293793037931379323793337934379353793637937379383793937940379413794237943379443794537946379473794837949379503795137952379533795437955379563795737958379593796037961379623796337964379653796637967379683796937970379713797237973379743797537976379773797837979379803798137982379833798437985379863798737988379893799037991379923799337994379953799637997379983799938000380013800238003380043800538006380073800838009380103801138012380133801438015380163801738018380193802038021380223802338024380253802638027380283802938030380313803238033380343803538036380373803838039380403804138042380433804438045380463804738048380493805038051380523805338054380553805638057380583805938060380613806238063380643806538066380673806838069380703807138072380733807438075380763807738078380793808038081380823808338084380853808638087380883808938090380913809238093380943809538096380973809838099381003810138102381033810438105381063810738108381093811038111381123811338114381153811638117381183811938120381213812238123381243812538126381273812838129381303813138132381333813438135381363813738138381393814038141381423814338144381453814638147381483814938150381513815238153381543815538156381573815838159381603816138162381633816438165381663816738168381693817038171381723817338174381753817638177381783817938180381813818238183381843818538186381873818838189381903819138192381933819438195381963819738198381993820038201382023820338204382053820638207382083820938210382113821238213382143821538216382173821838219382203822138222382233822438225382263822738228382293823038231382323823338234382353823638237382383823938240382413824238243382443824538246382473824838249382503825138252382533825438255382563825738258382593826038261382623826338264382653826638267382683826938270382713827238273382743827538276382773827838279382803828138282382833828438285382863828738288382893829038291382923829338294382953829638297382983829938300383013830238303383043830538306383073830838309383103831138312383133831438315383163831738318383193832038321383223832338324383253832638327383283832938330383313833238333383343833538336383373833838339383403834138342383433834438345383463834738348383493835038351383523835338354383553835638357383583835938360383613836238363383643836538366383673836838369383703837138372383733837438375383763837738378383793838038381383823838338384383853838638387383883838938390383913839238393383943839538396383973839838399384003840138402384033840438405384063840738408384093841038411384123841338414384153841638417384183841938420384213842238423384243842538426384273842838429384303843138432384333843438435384363843738438384393844038441384423844338444384453844638447384483844938450384513845238453384543845538456384573845838459384603846138462384633846438465384663846738468384693847038471384723847338474384753847638477384783847938480384813848238483384843848538486384873848838489384903849138492384933849438495384963849738498384993850038501385023850338504385053850638507385083850938510385113851238513385143851538516385173851838519385203852138522385233852438525385263852738528385293853038531385323853338534385353853638537385383853938540385413854238543385443854538546385473854838549385503855138552385533855438555385563855738558385593856038561385623856338564385653856638567385683856938570385713857238573385743857538576385773857838579385803858138582385833858438585385863858738588385893859038591385923859338594385953859638597385983859938600386013860238603386043860538606386073860838609386103861138612386133861438615386163861738618386193862038621386223862338624386253862638627386283862938630386313863238633386343863538636386373863838639386403864138642386433864438645386463864738648386493865038651386523865338654386553865638657386583865938660386613866238663386643866538666386673866838669386703867138672386733867438675386763867738678386793868038681386823868338684386853868638687386883868938690386913869238693386943869538696386973869838699387003870138702387033870438705387063870738708387093871038711387123871338714387153871638717387183871938720387213872238723387243872538726387273872838729387303873138732387333873438735387363873738738387393874038741387423874338744387453874638747387483874938750387513875238753387543875538756387573875838759387603876138762387633876438765387663876738768387693877038771387723877338774387753877638777387783877938780387813878238783387843878538786387873878838789387903879138792387933879438795387963879738798387993880038801388023880338804388053880638807388083880938810388113881238813388143881538816388173881838819388203882138822388233882438825388263882738828388293883038831388323883338834388353883638837388383883938840388413884238843388443884538846388473884838849388503885138852388533885438855388563885738858388593886038861388623886338864388653886638867388683886938870388713887238873388743887538876388773887838879388803888138882388833888438885388863888738888388893889038891388923889338894388953889638897388983889938900389013890238903389043890538906389073890838909389103891138912389133891438915389163891738918389193892038921389223892338924389253892638927389283892938930389313893238933389343893538936389373893838939389403894138942389433894438945389463894738948389493895038951389523895338954389553895638957389583895938960389613896238963389643896538966389673896838969389703897138972389733897438975389763897738978389793898038981389823898338984389853898638987389883898938990389913899238993389943899538996389973899838999390003900139002390033900439005390063900739008390093901039011390123901339014390153901639017390183901939020390213902239023390243902539026390273902839029390303903139032390333903439035390363903739038390393904039041390423904339044390453904639047390483904939050390513905239053390543905539056390573905839059390603906139062390633906439065390663906739068390693907039071390723907339074390753907639077390783907939080390813908239083390843908539086390873908839089390903909139092390933909439095390963909739098390993910039101391023910339104391053910639107391083910939110391113911239113391143911539116391173911839119391203912139122391233912439125391263912739128391293913039131391323913339134391353913639137391383913939140391413914239143391443914539146391473914839149391503915139152391533915439155391563915739158391593916039161391623916339164391653916639167391683916939170391713917239173391743917539176391773917839179391803918139182391833918439185391863918739188391893919039191391923919339194391953919639197391983919939200392013920239203392043920539206392073920839209392103921139212392133921439215392163921739218392193922039221392223922339224392253922639227392283922939230392313923239233392343923539236392373923839239392403924139242392433924439245392463924739248392493925039251392523925339254392553925639257392583925939260392613926239263392643926539266392673926839269392703927139272392733927439275392763927739278392793928039281392823928339284392853928639287392883928939290392913929239293392943929539296392973929839299393003930139302393033930439305393063930739308393093931039311393123931339314393153931639317393183931939320393213932239323393243932539326393273932839329393303933139332393333933439335393363933739338393393934039341393423934339344393453934639347393483934939350393513935239353393543935539356393573935839359393603936139362393633936439365393663936739368393693937039371393723937339374393753937639377393783937939380393813938239383393843938539386393873938839389393903939139392393933939439395393963939739398393993940039401394023940339404394053940639407394083940939410394113941239413394143941539416394173941839419394203942139422394233942439425394263942739428394293943039431394323943339434394353943639437394383943939440394413944239443394443944539446394473944839449394503945139452394533945439455394563945739458394593946039461394623946339464394653946639467394683946939470394713947239473394743947539476394773947839479394803948139482394833948439485394863948739488394893949039491394923949339494394953949639497394983949939500395013950239503395043950539506395073950839509395103951139512395133951439515395163951739518395193952039521395223952339524395253952639527395283952939530395313953239533395343953539536395373953839539395403954139542395433954439545395463954739548395493955039551395523955339554395553955639557395583955939560395613956239563395643956539566395673956839569395703957139572395733957439575395763957739578395793958039581395823958339584395853958639587395883958939590395913959239593395943959539596395973959839599396003960139602396033960439605396063960739608396093961039611396123961339614396153961639617396183961939620396213962239623396243962539626396273962839629396303963139632396333963439635396363963739638396393964039641396423964339644396453964639647396483964939650396513965239653396543965539656396573965839659396603966139662396633966439665396663966739668396693967039671396723967339674396753967639677396783967939680396813968239683396843968539686396873968839689396903969139692396933969439695396963969739698396993970039701397023970339704397053970639707397083970939710397113971239713397143971539716397173971839719397203972139722397233972439725397263972739728397293973039731397323973339734397353973639737397383973939740397413974239743397443974539746397473974839749397503975139752397533975439755397563975739758397593976039761397623976339764397653976639767397683976939770397713977239773397743977539776397773977839779397803978139782397833978439785397863978739788397893979039791397923979339794397953979639797397983979939800398013980239803398043980539806398073980839809398103981139812398133981439815398163981739818398193982039821398223982339824398253982639827398283982939830398313983239833398343983539836398373983839839398403984139842398433984439845398463984739848398493985039851398523985339854398553985639857398583985939860398613986239863398643986539866398673986839869398703987139872398733987439875398763987739878398793988039881398823988339884398853988639887398883988939890398913989239893398943989539896398973989839899399003990139902399033990439905399063990739908399093991039911399123991339914399153991639917399183991939920399213992239923399243992539926399273992839929399303993139932399333993439935399363993739938399393994039941399423994339944399453994639947399483994939950399513995239953399543995539956399573995839959399603996139962399633996439965399663996739968399693997039971399723997339974399753997639977399783997939980399813998239983399843998539986399873998839989399903999139992399933999439995399963999739998399994000040001400024000340004400054000640007400084000940010400114001240013400144001540016400174001840019400204002140022400234002440025400264002740028400294003040031400324003340034400354003640037400384003940040400414004240043400444004540046400474004840049400504005140052400534005440055400564005740058400594006040061400624006340064400654006640067400684006940070400714007240073400744007540076400774007840079400804008140082400834008440085400864008740088400894009040091400924009340094400954009640097400984009940100401014010240103401044010540106401074010840109401104011140112401134011440115401164011740118401194012040121401224012340124401254012640127401284012940130401314013240133401344013540136401374013840139401404014140142401434014440145401464014740148401494015040151401524015340154401554015640157401584015940160401614016240163401644016540166401674016840169401704017140172401734017440175401764017740178401794018040181401824018340184401854018640187401884018940190401914019240193401944019540196401974019840199402004020140202402034020440205402064020740208402094021040211402124021340214402154021640217402184021940220402214022240223402244022540226402274022840229402304023140232402334023440235402364023740238402394024040241402424024340244402454024640247402484024940250402514025240253402544025540256402574025840259402604026140262402634026440265402664026740268402694027040271402724027340274402754027640277402784027940280402814028240283402844028540286402874028840289402904029140292402934029440295402964029740298402994030040301403024030340304403054030640307403084030940310403114031240313403144031540316403174031840319403204032140322403234032440325403264032740328403294033040331403324033340334403354033640337403384033940340403414034240343403444034540346403474034840349403504035140352403534035440355403564035740358403594036040361403624036340364403654036640367403684036940370403714037240373403744037540376403774037840379403804038140382403834038440385403864038740388403894039040391403924039340394403954039640397403984039940400404014040240403404044040540406404074040840409404104041140412404134041440415404164041740418404194042040421404224042340424404254042640427404284042940430404314043240433404344043540436404374043840439404404044140442404434044440445404464044740448404494045040451404524045340454404554045640457404584045940460404614046240463404644046540466404674046840469404704047140472404734047440475404764047740478404794048040481404824048340484404854048640487404884048940490404914049240493404944049540496404974049840499405004050140502405034050440505405064050740508405094051040511405124051340514405154051640517405184051940520405214052240523405244052540526405274052840529405304053140532405334053440535405364053740538405394054040541405424054340544405454054640547405484054940550405514055240553405544055540556405574055840559405604056140562405634056440565405664056740568405694057040571405724057340574405754057640577405784057940580405814058240583405844058540586405874058840589405904059140592405934059440595405964059740598405994060040601406024060340604406054060640607406084060940610406114061240613406144061540616406174061840619406204062140622406234062440625406264062740628406294063040631406324063340634406354063640637406384063940640406414064240643406444064540646406474064840649406504065140652406534065440655406564065740658406594066040661406624066340664406654066640667406684066940670406714067240673406744067540676406774067840679406804068140682406834068440685406864068740688406894069040691406924069340694406954069640697406984069940700407014070240703407044070540706407074070840709407104071140712407134071440715407164071740718407194072040721407224072340724407254072640727407284072940730407314073240733407344073540736407374073840739407404074140742407434074440745407464074740748407494075040751407524075340754407554075640757407584075940760407614076240763407644076540766407674076840769407704077140772407734077440775407764077740778407794078040781407824078340784407854078640787407884078940790407914079240793407944079540796407974079840799408004080140802408034080440805408064080740808408094081040811408124081340814408154081640817408184081940820408214082240823408244082540826408274082840829408304083140832408334083440835408364083740838408394084040841408424084340844408454084640847408484084940850408514085240853408544085540856408574085840859408604086140862408634086440865408664086740868408694087040871408724087340874408754087640877408784087940880408814088240883408844088540886408874088840889408904089140892408934089440895408964089740898408994090040901409024090340904409054090640907409084090940910409114091240913409144091540916409174091840919409204092140922409234092440925409264092740928409294093040931409324093340934409354093640937409384093940940409414094240943409444094540946409474094840949409504095140952409534095440955409564095740958409594096040961409624096340964409654096640967409684096940970409714097240973409744097540976409774097840979409804098140982409834098440985409864098740988409894099040991409924099340994409954099640997409984099941000410014100241003410044100541006410074100841009410104101141012410134101441015410164101741018410194102041021410224102341024410254102641027410284102941030410314103241033410344103541036410374103841039410404104141042410434104441045410464104741048410494105041051410524105341054410554105641057410584105941060410614106241063410644106541066410674106841069410704107141072410734107441075410764107741078410794108041081410824108341084410854108641087410884108941090410914109241093410944109541096410974109841099411004110141102411034110441105411064110741108411094111041111411124111341114411154111641117411184111941120411214112241123411244112541126411274112841129411304113141132411334113441135411364113741138411394114041141411424114341144411454114641147411484114941150411514115241153411544115541156411574115841159411604116141162411634116441165411664116741168411694117041171411724117341174411754117641177411784117941180411814118241183411844118541186411874118841189411904119141192411934119441195411964119741198411994120041201412024120341204412054120641207412084120941210412114121241213412144121541216412174121841219412204122141222412234122441225412264122741228412294123041231412324123341234412354123641237412384123941240412414124241243412444124541246412474124841249412504125141252412534125441255412564125741258412594126041261412624126341264412654126641267412684126941270412714127241273412744127541276412774127841279412804128141282412834128441285412864128741288412894129041291412924129341294412954129641297412984129941300413014130241303413044130541306413074130841309413104131141312413134131441315413164131741318413194132041321413224132341324413254132641327413284132941330413314133241333413344133541336413374133841339413404134141342413434134441345413464134741348413494135041351413524135341354413554135641357413584135941360413614136241363413644136541366413674136841369413704137141372413734137441375413764137741378413794138041381413824138341384413854138641387413884138941390413914139241393413944139541396413974139841399414004140141402414034140441405414064140741408414094141041411414124141341414414154141641417414184141941420414214142241423414244142541426414274142841429414304143141432414334143441435414364143741438414394144041441414424144341444414454144641447414484144941450414514145241453414544145541456414574145841459414604146141462414634146441465414664146741468414694147041471414724147341474414754147641477414784147941480414814148241483414844148541486414874148841489414904149141492414934149441495414964149741498414994150041501415024150341504415054150641507415084150941510415114151241513415144151541516415174151841519415204152141522415234152441525415264152741528415294153041531415324153341534415354153641537415384153941540415414154241543415444154541546415474154841549415504155141552415534155441555415564155741558415594156041561415624156341564415654156641567415684156941570415714157241573415744157541576415774157841579415804158141582415834158441585415864158741588415894159041591415924159341594415954159641597415984159941600416014160241603416044160541606416074160841609416104161141612416134161441615416164161741618416194162041621416224162341624416254162641627416284162941630416314163241633416344163541636416374163841639416404164141642416434164441645416464164741648416494165041651416524165341654416554165641657416584165941660416614166241663416644166541666416674166841669416704167141672416734167441675416764167741678416794168041681416824168341684416854168641687416884168941690416914169241693416944169541696416974169841699417004170141702417034170441705417064170741708417094171041711417124171341714417154171641717417184171941720417214172241723417244172541726417274172841729417304173141732417334173441735417364173741738417394174041741417424174341744417454174641747417484174941750417514175241753417544175541756417574175841759417604176141762417634176441765417664176741768417694177041771417724177341774417754177641777417784177941780417814178241783417844178541786417874178841789417904179141792417934179441795417964179741798417994180041801418024180341804418054180641807418084180941810418114181241813418144181541816418174181841819418204182141822418234182441825418264182741828418294183041831418324183341834418354183641837418384183941840418414184241843418444184541846418474184841849418504185141852418534185441855418564185741858418594186041861418624186341864418654186641867418684186941870418714187241873418744187541876418774187841879418804188141882418834188441885418864188741888418894189041891418924189341894418954189641897418984189941900419014190241903419044190541906419074190841909419104191141912419134191441915419164191741918419194192041921419224192341924419254192641927419284192941930419314193241933419344193541936419374193841939419404194141942419434194441945419464194741948419494195041951419524195341954419554195641957419584195941960419614196241963419644196541966419674196841969419704197141972419734197441975419764197741978419794198041981419824198341984419854198641987419884198941990419914199241993419944199541996419974199841999420004200142002420034200442005420064200742008420094201042011420124201342014420154201642017420184201942020420214202242023420244202542026420274202842029420304203142032420334203442035420364203742038420394204042041420424204342044420454204642047420484204942050420514205242053420544205542056420574205842059420604206142062420634206442065420664206742068420694207042071420724207342074420754207642077420784207942080420814208242083420844208542086420874208842089420904209142092420934209442095420964209742098420994210042101421024210342104421054210642107421084210942110421114211242113421144211542116421174211842119421204212142122421234212442125421264212742128421294213042131421324213342134421354213642137421384213942140421414214242143421444214542146421474214842149421504215142152421534215442155421564215742158421594216042161421624216342164421654216642167421684216942170421714217242173421744217542176421774217842179421804218142182421834218442185421864218742188421894219042191421924219342194421954219642197421984219942200422014220242203422044220542206422074220842209422104221142212422134221442215422164221742218422194222042221422224222342224422254222642227422284222942230422314223242233422344223542236422374223842239422404224142242422434224442245422464224742248422494225042251422524225342254422554225642257422584225942260422614226242263422644226542266422674226842269422704227142272422734227442275422764227742278422794228042281422824228342284422854228642287422884228942290422914229242293422944229542296422974229842299423004230142302423034230442305423064230742308423094231042311423124231342314423154231642317423184231942320423214232242323423244232542326423274232842329423304233142332423334233442335423364233742338423394234042341423424234342344423454234642347423484234942350423514235242353423544235542356423574235842359423604236142362423634236442365423664236742368423694237042371423724237342374423754237642377423784237942380423814238242383423844238542386423874238842389423904239142392423934239442395423964239742398423994240042401424024240342404424054240642407424084240942410424114241242413424144241542416424174241842419424204242142422424234242442425424264242742428424294243042431424324243342434424354243642437424384243942440424414244242443424444244542446424474244842449424504245142452424534245442455424564245742458424594246042461424624246342464424654246642467424684246942470424714247242473424744247542476424774247842479424804248142482424834248442485424864248742488424894249042491424924249342494424954249642497424984249942500425014250242503425044250542506425074250842509425104251142512425134251442515425164251742518425194252042521425224252342524425254252642527425284252942530425314253242533425344253542536425374253842539425404254142542425434254442545425464254742548425494255042551425524255342554425554255642557425584255942560425614256242563425644256542566425674256842569425704257142572425734257442575425764257742578425794258042581425824258342584425854258642587425884258942590425914259242593425944259542596425974259842599426004260142602426034260442605426064260742608426094261042611426124261342614426154261642617426184261942620426214262242623426244262542626426274262842629426304263142632426334263442635426364263742638426394264042641426424264342644426454264642647426484264942650426514265242653426544265542656426574265842659426604266142662426634266442665426664266742668426694267042671426724267342674426754267642677426784267942680426814268242683426844268542686426874268842689426904269142692426934269442695426964269742698426994270042701427024270342704427054270642707427084270942710427114271242713427144271542716427174271842719427204272142722427234272442725427264272742728427294273042731427324273342734427354273642737427384273942740427414274242743427444274542746427474274842749427504275142752427534275442755427564275742758427594276042761427624276342764427654276642767427684276942770427714277242773427744277542776427774277842779427804278142782427834278442785427864278742788427894279042791427924279342794427954279642797427984279942800428014280242803428044280542806428074280842809428104281142812428134281442815428164281742818428194282042821428224282342824428254282642827428284282942830428314283242833428344283542836428374283842839428404284142842428434284442845428464284742848428494285042851428524285342854428554285642857428584285942860428614286242863428644286542866428674286842869428704287142872428734287442875428764287742878428794288042881428824288342884428854288642887428884288942890428914289242893428944289542896428974289842899429004290142902429034290442905429064290742908429094291042911429124291342914429154291642917429184291942920429214292242923429244292542926429274292842929429304293142932429334293442935429364293742938429394294042941429424294342944429454294642947429484294942950429514295242953429544295542956429574295842959429604296142962429634296442965429664296742968429694297042971429724297342974429754297642977429784297942980429814298242983429844298542986429874298842989429904299142992429934299442995429964299742998429994300043001430024300343004430054300643007430084300943010430114301243013430144301543016430174301843019430204302143022430234302443025430264302743028430294303043031430324303343034430354303643037430384303943040430414304243043430444304543046430474304843049430504305143052430534305443055430564305743058430594306043061430624306343064430654306643067430684306943070430714307243073430744307543076430774307843079430804308143082430834308443085430864308743088430894309043091430924309343094430954309643097430984309943100431014310243103431044310543106431074310843109431104311143112431134311443115431164311743118431194312043121431224312343124431254312643127431284312943130431314313243133431344313543136431374313843139431404314143142431434314443145431464314743148431494315043151431524315343154431554315643157431584315943160431614316243163431644316543166431674316843169431704317143172431734317443175431764317743178431794318043181431824318343184431854318643187431884318943190431914319243193431944319543196431974319843199432004320143202432034320443205432064320743208432094321043211432124321343214432154321643217432184321943220432214322243223432244322543226432274322843229432304323143232432334323443235432364323743238432394324043241432424324343244432454324643247432484324943250432514325243253432544325543256432574325843259432604326143262432634326443265432664326743268432694327043271432724327343274432754327643277432784327943280432814328243283432844328543286432874328843289432904329143292432934329443295432964329743298432994330043301433024330343304433054330643307433084330943310433114331243313433144331543316433174331843319433204332143322433234332443325433264332743328433294333043331433324333343334433354333643337433384333943340433414334243343433444334543346433474334843349433504335143352433534335443355433564335743358433594336043361433624336343364433654336643367433684336943370433714337243373433744337543376433774337843379433804338143382433834338443385433864338743388433894339043391433924339343394433954339643397433984339943400434014340243403434044340543406434074340843409434104341143412434134341443415434164341743418434194342043421434224342343424434254342643427434284342943430434314343243433434344343543436434374343843439434404344143442434434344443445434464344743448434494345043451434524345343454434554345643457434584345943460434614346243463434644346543466434674346843469434704347143472434734347443475434764347743478434794348043481434824348343484434854348643487434884348943490434914349243493434944349543496434974349843499435004350143502435034350443505435064350743508435094351043511435124351343514435154351643517435184351943520435214352243523435244352543526435274352843529435304353143532435334353443535435364353743538435394354043541435424354343544435454354643547435484354943550435514355243553435544355543556435574355843559435604356143562435634356443565435664356743568435694357043571435724357343574435754357643577435784357943580435814358243583435844358543586435874358843589435904359143592435934359443595435964359743598435994360043601436024360343604436054360643607436084360943610436114361243613436144361543616436174361843619436204362143622436234362443625436264362743628436294363043631436324363343634436354363643637436384363943640436414364243643436444364543646436474364843649436504365143652436534365443655436564365743658436594366043661436624366343664436654366643667436684366943670436714367243673436744367543676436774367843679436804368143682436834368443685436864368743688436894369043691436924369343694436954369643697436984369943700437014370243703437044370543706437074370843709437104371143712437134371443715437164371743718437194372043721437224372343724437254372643727437284372943730437314373243733437344373543736437374373843739437404374143742437434374443745437464374743748437494375043751437524375343754437554375643757437584375943760437614376243763437644376543766437674376843769437704377143772437734377443775437764377743778437794378043781437824378343784437854378643787437884378943790437914379243793437944379543796437974379843799438004380143802438034380443805438064380743808438094381043811438124381343814438154381643817438184381943820438214382243823438244382543826438274382843829438304383143832438334383443835438364383743838438394384043841438424384343844438454384643847438484384943850438514385243853438544385543856438574385843859438604386143862438634386443865438664386743868438694387043871438724387343874438754387643877438784387943880438814388243883438844388543886438874388843889438904389143892438934389443895438964389743898438994390043901439024390343904439054390643907439084390943910439114391243913439144391543916439174391843919439204392143922439234392443925439264392743928439294393043931439324393343934439354393643937439384393943940439414394243943439444394543946439474394843949439504395143952439534395443955439564395743958439594396043961439624396343964439654396643967439684396943970439714397243973439744397543976439774397843979439804398143982439834398443985439864398743988439894399043991439924399343994439954399643997439984399944000440014400244003440044400544006440074400844009440104401144012440134401444015440164401744018440194402044021440224402344024440254402644027440284402944030440314403244033440344403544036440374403844039440404404144042440434404444045440464404744048440494405044051440524405344054440554405644057440584405944060440614406244063440644406544066440674406844069440704407144072440734407444075440764407744078440794408044081440824408344084440854408644087440884408944090440914409244093440944409544096440974409844099441004410144102441034410444105441064410744108441094411044111441124411344114441154411644117441184411944120441214412244123441244412544126441274412844129441304413144132441334413444135441364413744138441394414044141441424414344144441454414644147441484414944150441514415244153441544415544156441574415844159441604416144162441634416444165441664416744168441694417044171441724417344174441754417644177441784417944180441814418244183441844418544186441874418844189441904419144192441934419444195441964419744198441994420044201442024420344204442054420644207442084420944210442114421244213442144421544216442174421844219442204422144222442234422444225442264422744228442294423044231442324423344234442354423644237442384423944240442414424244243442444424544246442474424844249442504425144252442534425444255442564425744258442594426044261442624426344264442654426644267442684426944270442714427244273442744427544276442774427844279442804428144282442834428444285442864428744288442894429044291442924429344294442954429644297442984429944300443014430244303443044430544306443074430844309443104431144312443134431444315443164431744318443194432044321443224432344324443254432644327443284432944330443314433244333443344433544336443374433844339443404434144342443434434444345443464434744348443494435044351443524435344354443554435644357443584435944360443614436244363443644436544366443674436844369443704437144372443734437444375443764437744378443794438044381443824438344384443854438644387443884438944390443914439244393443944439544396443974439844399444004440144402444034440444405444064440744408444094441044411444124441344414444154441644417444184441944420444214442244423444244442544426444274442844429444304443144432444334443444435444364443744438444394444044441444424444344444444454444644447444484444944450444514445244453444544445544456444574445844459444604446144462444634446444465444664446744468444694447044471444724447344474444754447644477444784447944480444814448244483444844448544486444874448844489444904449144492444934449444495444964449744498444994450044501445024450344504445054450644507445084450944510445114451244513445144451544516445174451844519445204452144522445234452444525445264452744528445294453044531445324453344534445354453644537445384453944540445414454244543445444454544546445474454844549445504455144552445534455444555445564455744558445594456044561445624456344564445654456644567445684456944570445714457244573445744457544576445774457844579445804458144582445834458444585445864458744588445894459044591445924459344594445954459644597445984459944600446014460244603446044460544606446074460844609446104461144612446134461444615446164461744618446194462044621446224462344624446254462644627446284462944630446314463244633446344463544636446374463844639446404464144642446434464444645446464464744648446494465044651446524465344654446554465644657446584465944660446614466244663446644466544666446674466844669446704467144672446734467444675446764467744678446794468044681446824468344684446854468644687446884468944690446914469244693446944469544696446974469844699447004470144702447034470444705447064470744708447094471044711447124471344714447154471644717447184471944720447214472244723447244472544726447274472844729447304473144732447334473444735447364473744738447394474044741447424474344744447454474644747447484474944750447514475244753447544475544756447574475844759447604476144762447634476444765447664476744768447694477044771447724477344774447754477644777447784477944780447814478244783447844478544786447874478844789447904479144792447934479444795447964479744798447994480044801448024480344804448054480644807448084480944810448114481244813448144481544816448174481844819448204482144822448234482444825448264482744828448294483044831448324483344834448354483644837448384483944840448414484244843448444484544846448474484844849448504485144852448534485444855448564485744858448594486044861448624486344864448654486644867448684486944870448714487244873448744487544876448774487844879448804488144882448834488444885448864488744888448894489044891448924489344894448954489644897448984489944900449014490244903449044490544906449074490844909449104491144912449134491444915449164491744918449194492044921449224492344924449254492644927449284492944930449314493244933449344493544936449374493844939449404494144942449434494444945449464494744948449494495044951449524495344954449554495644957449584495944960449614496244963449644496544966449674496844969449704497144972449734497444975449764497744978449794498044981449824498344984449854498644987449884498944990449914499244993449944499544996449974499844999450004500145002450034500445005450064500745008450094501045011450124501345014450154501645017450184501945020450214502245023450244502545026450274502845029450304503145032450334503445035450364503745038450394504045041450424504345044450454504645047450484504945050450514505245053450544505545056450574505845059450604506145062450634506445065450664506745068450694507045071450724507345074450754507645077450784507945080450814508245083450844508545086450874508845089450904509145092450934509445095450964509745098450994510045101451024510345104451054510645107451084510945110451114511245113451144511545116451174511845119451204512145122451234512445125451264512745128451294513045131451324513345134451354513645137451384513945140451414514245143451444514545146451474514845149451504515145152451534515445155451564515745158451594516045161451624516345164451654516645167451684516945170451714517245173451744517545176451774517845179451804518145182451834518445185451864518745188451894519045191451924519345194451954519645197451984519945200452014520245203452044520545206452074520845209452104521145212452134521445215452164521745218452194522045221452224522345224452254522645227452284522945230452314523245233452344523545236452374523845239452404524145242452434524445245452464524745248452494525045251452524525345254452554525645257452584525945260452614526245263452644526545266452674526845269452704527145272452734527445275452764527745278452794528045281452824528345284452854528645287452884528945290452914529245293452944529545296452974529845299453004530145302453034530445305453064530745308453094531045311453124531345314453154531645317453184531945320453214532245323453244532545326453274532845329453304533145332453334533445335453364533745338453394534045341453424534345344453454534645347453484534945350453514535245353453544535545356453574535845359453604536145362453634536445365453664536745368453694537045371453724537345374453754537645377453784537945380453814538245383453844538545386453874538845389453904539145392453934539445395453964539745398453994540045401454024540345404454054540645407454084540945410454114541245413454144541545416454174541845419454204542145422454234542445425454264542745428454294543045431454324543345434454354543645437454384543945440454414544245443454444544545446454474544845449454504545145452454534545445455454564545745458454594546045461454624546345464454654546645467454684546945470454714547245473454744547545476454774547845479454804548145482454834548445485454864548745488454894549045491454924549345494454954549645497454984549945500455014550245503455044550545506455074550845509455104551145512455134551445515455164551745518455194552045521455224552345524455254552645527455284552945530455314553245533455344553545536455374553845539455404554145542455434554445545455464554745548455494555045551455524555345554455554555645557455584555945560455614556245563455644556545566455674556845569455704557145572455734557445575455764557745578455794558045581455824558345584455854558645587455884558945590455914559245593455944559545596455974559845599456004560145602456034560445605456064560745608456094561045611456124561345614456154561645617456184561945620456214562245623456244562545626456274562845629456304563145632456334563445635456364563745638456394564045641456424564345644456454564645647456484564945650456514565245653456544565545656456574565845659456604566145662456634566445665456664566745668456694567045671456724567345674456754567645677456784567945680456814568245683456844568545686456874568845689456904569145692456934569445695456964569745698456994570045701457024570345704457054570645707457084570945710457114571245713457144571545716457174571845719457204572145722457234572445725457264572745728457294573045731457324573345734457354573645737457384573945740457414574245743457444574545746457474574845749457504575145752457534575445755457564575745758457594576045761457624576345764457654576645767457684576945770457714577245773457744577545776457774577845779457804578145782457834578445785457864578745788457894579045791457924579345794457954579645797457984579945800458014580245803458044580545806458074580845809458104581145812458134581445815458164581745818458194582045821458224582345824458254582645827458284582945830458314583245833458344583545836458374583845839458404584145842458434584445845458464584745848458494585045851458524585345854458554585645857458584585945860458614586245863458644586545866458674586845869458704587145872458734587445875458764587745878458794588045881458824588345884458854588645887458884588945890458914589245893458944589545896458974589845899459004590145902459034590445905459064590745908459094591045911459124591345914459154591645917459184591945920459214592245923459244592545926459274592845929459304593145932459334593445935459364593745938459394594045941459424594345944459454594645947459484594945950459514595245953459544595545956459574595845959459604596145962459634596445965459664596745968459694597045971459724597345974459754597645977459784597945980459814598245983459844598545986459874598845989459904599145992459934599445995459964599745998459994600046001460024600346004460054600646007460084600946010460114601246013460144601546016460174601846019460204602146022460234602446025460264602746028460294603046031460324603346034460354603646037460384603946040460414604246043460444604546046460474604846049460504605146052460534605446055460564605746058460594606046061460624606346064460654606646067460684606946070460714607246073460744607546076460774607846079460804608146082460834608446085460864608746088460894609046091460924609346094460954609646097460984609946100461014610246103461044610546106461074610846109461104611146112461134611446115461164611746118461194612046121461224612346124461254612646127461284612946130461314613246133461344613546136461374613846139461404614146142461434614446145461464614746148461494615046151461524615346154461554615646157461584615946160461614616246163461644616546166461674616846169461704617146172461734617446175461764617746178461794618046181461824618346184461854618646187461884618946190461914619246193461944619546196461974619846199462004620146202462034620446205462064620746208462094621046211462124621346214462154621646217462184621946220462214622246223462244622546226462274622846229462304623146232462334623446235462364623746238462394624046241462424624346244462454624646247462484624946250462514625246253462544625546256462574625846259462604626146262462634626446265462664626746268462694627046271462724627346274462754627646277462784627946280462814628246283462844628546286462874628846289462904629146292462934629446295462964629746298462994630046301463024630346304463054630646307463084630946310463114631246313463144631546316463174631846319463204632146322463234632446325463264632746328463294633046331463324633346334463354633646337463384633946340463414634246343463444634546346463474634846349463504635146352463534635446355463564635746358463594636046361463624636346364463654636646367463684636946370463714637246373463744637546376463774637846379463804638146382463834638446385463864638746388463894639046391463924639346394463954639646397463984639946400464014640246403464044640546406464074640846409464104641146412464134641446415464164641746418464194642046421464224642346424464254642646427464284642946430464314643246433464344643546436464374643846439464404644146442464434644446445464464644746448464494645046451464524645346454464554645646457464584645946460464614646246463464644646546466464674646846469464704647146472464734647446475464764647746478464794648046481464824648346484464854648646487464884648946490464914649246493464944649546496464974649846499465004650146502465034650446505465064650746508465094651046511465124651346514465154651646517465184651946520465214652246523465244652546526465274652846529465304653146532465334653446535465364653746538465394654046541465424654346544465454654646547465484654946550465514655246553465544655546556465574655846559465604656146562465634656446565465664656746568465694657046571465724657346574465754657646577465784657946580465814658246583465844658546586465874658846589465904659146592465934659446595465964659746598465994660046601466024660346604466054660646607466084660946610466114661246613466144661546616466174661846619466204662146622466234662446625466264662746628466294663046631466324663346634466354663646637466384663946640466414664246643466444664546646466474664846649466504665146652466534665446655466564665746658466594666046661466624666346664466654666646667466684666946670466714667246673466744667546676466774667846679466804668146682466834668446685466864668746688466894669046691466924669346694466954669646697466984669946700467014670246703467044670546706467074670846709467104671146712467134671446715467164671746718467194672046721467224672346724467254672646727467284672946730467314673246733467344673546736467374673846739467404674146742467434674446745467464674746748467494675046751467524675346754467554675646757467584675946760467614676246763467644676546766467674676846769467704677146772467734677446775467764677746778467794678046781467824678346784467854678646787467884678946790467914679246793467944679546796467974679846799468004680146802468034680446805468064680746808468094681046811468124681346814468154681646817468184681946820468214682246823468244682546826468274682846829468304683146832468334683446835468364683746838468394684046841468424684346844468454684646847468484684946850468514685246853468544685546856468574685846859468604686146862468634686446865468664686746868468694687046871468724687346874468754687646877468784687946880468814688246883468844688546886468874688846889468904689146892468934689446895468964689746898468994690046901469024690346904469054690646907469084690946910469114691246913469144691546916469174691846919469204692146922469234692446925469264692746928469294693046931469324693346934469354693646937469384693946940469414694246943469444694546946469474694846949469504695146952469534695446955469564695746958469594696046961469624696346964469654696646967469684696946970469714697246973469744697546976469774697846979469804698146982469834698446985469864698746988469894699046991469924699346994469954699646997469984699947000470014700247003470044700547006470074700847009470104701147012470134701447015470164701747018470194702047021470224702347024470254702647027470284702947030470314703247033470344703547036470374703847039470404704147042470434704447045470464704747048470494705047051470524705347054470554705647057470584705947060470614706247063470644706547066470674706847069470704707147072470734707447075470764707747078470794708047081470824708347084470854708647087470884708947090470914709247093470944709547096470974709847099471004710147102471034710447105471064710747108471094711047111471124711347114471154711647117471184711947120471214712247123471244712547126471274712847129471304713147132471334713447135471364713747138471394714047141471424714347144471454714647147471484714947150471514715247153471544715547156471574715847159471604716147162471634716447165471664716747168471694717047171471724717347174471754717647177471784717947180471814718247183471844718547186471874718847189471904719147192471934719447195471964719747198471994720047201472024720347204472054720647207472084720947210472114721247213472144721547216472174721847219472204722147222472234722447225472264722747228472294723047231472324723347234472354723647237472384723947240472414724247243472444724547246472474724847249472504725147252472534725447255472564725747258472594726047261472624726347264472654726647267472684726947270472714727247273472744727547276472774727847279472804728147282472834728447285472864728747288472894729047291472924729347294472954729647297472984729947300473014730247303473044730547306473074730847309473104731147312473134731447315473164731747318473194732047321473224732347324473254732647327473284732947330473314733247333473344733547336473374733847339473404734147342473434734447345473464734747348473494735047351473524735347354473554735647357473584735947360473614736247363473644736547366473674736847369473704737147372473734737447375473764737747378473794738047381473824738347384473854738647387473884738947390473914739247393473944739547396473974739847399474004740147402474034740447405474064740747408474094741047411474124741347414474154741647417474184741947420474214742247423474244742547426474274742847429474304743147432474334743447435474364743747438474394744047441474424744347444474454744647447474484744947450474514745247453474544745547456474574745847459474604746147462474634746447465474664746747468474694747047471474724747347474474754747647477474784747947480474814748247483474844748547486474874748847489474904749147492474934749447495474964749747498474994750047501475024750347504475054750647507475084750947510475114751247513475144751547516475174751847519475204752147522475234752447525475264752747528475294753047531475324753347534475354753647537475384753947540475414754247543475444754547546475474754847549475504755147552475534755447555475564755747558475594756047561475624756347564475654756647567475684756947570475714757247573475744757547576475774757847579475804758147582475834758447585475864758747588475894759047591475924759347594475954759647597475984759947600476014760247603476044760547606476074760847609476104761147612476134761447615476164761747618476194762047621476224762347624476254762647627476284762947630476314763247633476344763547636476374763847639476404764147642476434764447645476464764747648476494765047651476524765347654476554765647657476584765947660476614766247663476644766547666476674766847669476704767147672476734767447675476764767747678476794768047681476824768347684476854768647687476884768947690476914769247693476944769547696476974769847699477004770147702477034770447705477064770747708477094771047711477124771347714477154771647717477184771947720477214772247723477244772547726477274772847729477304773147732477334773447735477364773747738477394774047741477424774347744477454774647747477484774947750477514775247753477544775547756477574775847759477604776147762477634776447765477664776747768477694777047771477724777347774477754777647777477784777947780477814778247783477844778547786477874778847789477904779147792477934779447795477964779747798477994780047801478024780347804478054780647807478084780947810478114781247813478144781547816478174781847819478204782147822478234782447825478264782747828478294783047831478324783347834478354783647837478384783947840478414784247843478444784547846478474784847849478504785147852478534785447855478564785747858478594786047861478624786347864478654786647867478684786947870478714787247873478744787547876478774787847879478804788147882478834788447885478864788747888478894789047891478924789347894478954789647897478984789947900479014790247903479044790547906479074790847909479104791147912479134791447915479164791747918479194792047921479224792347924479254792647927479284792947930479314793247933479344793547936479374793847939479404794147942479434794447945479464794747948479494795047951479524795347954479554795647957479584795947960479614796247963479644796547966479674796847969479704797147972479734797447975479764797747978479794798047981479824798347984479854798647987479884798947990479914799247993479944799547996479974799847999480004800148002480034800448005480064800748008480094801048011480124801348014480154801648017480184801948020480214802248023480244802548026480274802848029480304803148032480334803448035480364803748038480394804048041480424804348044480454804648047480484804948050480514805248053480544805548056480574805848059480604806148062480634806448065480664806748068480694807048071480724807348074480754807648077480784807948080480814808248083480844808548086480874808848089480904809148092480934809448095480964809748098480994810048101481024810348104481054810648107481084810948110481114811248113481144811548116481174811848119481204812148122481234812448125481264812748128481294813048131481324813348134481354813648137481384813948140481414814248143481444814548146481474814848149481504815148152481534815448155481564815748158481594816048161481624816348164481654816648167481684816948170481714817248173481744817548176481774817848179481804818148182481834818448185481864818748188481894819048191481924819348194481954819648197481984819948200482014820248203482044820548206482074820848209482104821148212482134821448215482164821748218482194822048221482224822348224482254822648227482284822948230482314823248233482344823548236482374823848239482404824148242482434824448245482464824748248482494825048251482524825348254482554825648257482584825948260482614826248263482644826548266482674826848269482704827148272482734827448275482764827748278482794828048281482824828348284482854828648287482884828948290482914829248293482944829548296482974829848299483004830148302483034830448305483064830748308483094831048311483124831348314483154831648317483184831948320483214832248323483244832548326483274832848329483304833148332483334833448335483364833748338483394834048341483424834348344483454834648347483484834948350483514835248353483544835548356483574835848359483604836148362483634836448365483664836748368483694837048371483724837348374483754837648377483784837948380483814838248383483844838548386483874838848389483904839148392483934839448395483964839748398483994840048401484024840348404484054840648407484084840948410484114841248413484144841548416484174841848419484204842148422484234842448425484264842748428484294843048431484324843348434484354843648437484384843948440484414844248443484444844548446484474844848449484504845148452484534845448455484564845748458484594846048461484624846348464484654846648467484684846948470484714847248473484744847548476484774847848479484804848148482484834848448485484864848748488484894849048491484924849348494484954849648497484984849948500485014850248503485044850548506485074850848509485104851148512485134851448515485164851748518485194852048521485224852348524485254852648527485284852948530485314853248533485344853548536485374853848539485404854148542485434854448545485464854748548485494855048551485524855348554485554855648557485584855948560485614856248563485644856548566485674856848569485704857148572485734857448575485764857748578485794858048581485824858348584485854858648587485884858948590485914859248593485944859548596485974859848599486004860148602486034860448605486064860748608486094861048611486124861348614486154861648617486184861948620486214862248623486244862548626486274862848629486304863148632486334863448635486364863748638486394864048641486424864348644486454864648647486484864948650486514865248653486544865548656486574865848659486604866148662486634866448665486664866748668486694867048671486724867348674486754867648677486784867948680486814868248683486844868548686486874868848689486904869148692486934869448695486964869748698486994870048701487024870348704487054870648707487084870948710487114871248713487144871548716487174871848719487204872148722487234872448725487264872748728487294873048731487324873348734487354873648737487384873948740487414874248743487444874548746487474874848749487504875148752487534875448755487564875748758487594876048761487624876348764487654876648767487684876948770487714877248773487744877548776487774877848779487804878148782487834878448785487864878748788487894879048791487924879348794487954879648797487984879948800488014880248803488044880548806488074880848809488104881148812488134881448815488164881748818488194882048821488224882348824488254882648827488284882948830488314883248833488344883548836488374883848839488404884148842488434884448845488464884748848488494885048851488524885348854488554885648857488584885948860488614886248863488644886548866488674886848869488704887148872488734887448875488764887748878488794888048881488824888348884488854888648887488884888948890488914889248893488944889548896488974889848899489004890148902489034890448905489064890748908489094891048911489124891348914489154891648917489184891948920489214892248923489244892548926489274892848929489304893148932489334893448935489364893748938489394894048941489424894348944489454894648947489484894948950489514895248953489544895548956489574895848959489604896148962489634896448965489664896748968489694897048971489724897348974489754897648977489784897948980489814898248983489844898548986489874898848989489904899148992489934899448995489964899748998489994900049001490024900349004490054900649007490084900949010490114901249013490144901549016490174901849019490204902149022490234902449025490264902749028490294903049031490324903349034490354903649037490384903949040490414904249043490444904549046490474904849049490504905149052490534905449055490564905749058490594906049061490624906349064490654906649067490684906949070490714907249073490744907549076490774907849079490804908149082490834908449085490864908749088490894909049091490924909349094490954909649097490984909949100491014910249103491044910549106491074910849109491104911149112491134911449115491164911749118491194912049121491224912349124491254912649127491284912949130491314913249133491344913549136491374913849139491404914149142491434914449145491464914749148491494915049151491524915349154491554915649157491584915949160491614916249163491644916549166491674916849169491704917149172491734917449175491764917749178491794918049181491824918349184491854918649187491884918949190491914919249193491944919549196491974919849199492004920149202492034920449205492064920749208492094921049211492124921349214492154921649217492184921949220492214922249223492244922549226492274922849229492304923149232492334923449235492364923749238492394924049241492424924349244492454924649247492484924949250492514925249253492544925549256492574925849259492604926149262492634926449265492664926749268492694927049271492724927349274492754927649277492784927949280492814928249283492844928549286492874928849289492904929149292492934929449295492964929749298492994930049301493024930349304493054930649307493084930949310493114931249313493144931549316493174931849319493204932149322493234932449325493264932749328493294933049331493324933349334493354933649337493384933949340493414934249343493444934549346493474934849349493504935149352493534935449355493564935749358493594936049361493624936349364493654936649367493684936949370493714937249373493744937549376493774937849379493804938149382493834938449385493864938749388493894939049391493924939349394493954939649397493984939949400494014940249403494044940549406494074940849409494104941149412494134941449415494164941749418494194942049421494224942349424494254942649427494284942949430494314943249433494344943549436494374943849439494404944149442494434944449445494464944749448494494945049451494524945349454494554945649457494584945949460494614946249463494644946549466494674946849469494704947149472494734947449475494764947749478494794948049481494824948349484494854948649487494884948949490494914949249493494944949549496494974949849499495004950149502495034950449505495064950749508495094951049511495124951349514495154951649517495184951949520495214952249523495244952549526495274952849529495304953149532495334953449535495364953749538495394954049541495424954349544495454954649547495484954949550495514955249553495544955549556495574955849559495604956149562495634956449565495664956749568495694957049571495724957349574495754957649577495784957949580495814958249583495844958549586495874958849589495904959149592495934959449595495964959749598495994960049601496024960349604496054960649607496084960949610496114961249613496144961549616496174961849619496204962149622496234962449625496264962749628496294963049631496324963349634496354963649637496384963949640496414964249643496444964549646496474964849649496504965149652496534965449655496564965749658496594966049661496624966349664496654966649667496684966949670496714967249673496744967549676496774967849679496804968149682496834968449685496864968749688496894969049691496924969349694496954969649697496984969949700497014970249703497044970549706497074970849709497104971149712497134971449715497164971749718497194972049721497224972349724497254972649727497284972949730497314973249733497344973549736497374973849739497404974149742497434974449745497464974749748497494975049751497524975349754497554975649757497584975949760497614976249763497644976549766497674976849769497704977149772497734977449775497764977749778497794978049781497824978349784497854978649787497884978949790497914979249793497944979549796497974979849799498004980149802498034980449805498064980749808498094981049811498124981349814498154981649817498184981949820498214982249823498244982549826498274982849829498304983149832498334983449835498364983749838498394984049841498424984349844498454984649847498484984949850498514985249853498544985549856498574985849859498604986149862498634986449865498664986749868498694987049871498724987349874498754987649877498784987949880498814988249883498844988549886498874988849889498904989149892498934989449895498964989749898498994990049901499024990349904499054990649907499084990949910499114991249913499144991549916499174991849919499204992149922499234992449925499264992749928499294993049931499324993349934499354993649937499384993949940499414994249943499444994549946499474994849949499504995149952499534995449955499564995749958499594996049961499624996349964499654996649967499684996949970499714997249973499744997549976499774997849979499804998149982499834998449985499864998749988499894999049991499924999349994499954999649997499984999950000500015000250003500045000550006500075000850009500105001150012500135001450015500165001750018500195002050021500225002350024500255002650027500285002950030500315003250033500345003550036500375003850039500405004150042500435004450045500465004750048500495005050051500525005350054500555005650057500585005950060500615006250063500645006550066500675006850069500705007150072500735007450075500765007750078500795008050081500825008350084500855008650087500885008950090500915009250093500945009550096500975009850099501005010150102501035010450105501065010750108501095011050111501125011350114501155011650117501185011950120501215012250123501245012550126501275012850129501305013150132501335013450135501365013750138501395014050141501425014350144501455014650147501485014950150501515015250153501545015550156501575015850159501605016150162501635016450165501665016750168501695017050171501725017350174501755017650177501785017950180501815018250183501845018550186501875018850189501905019150192501935019450195501965019750198501995020050201502025020350204502055020650207502085020950210502115021250213502145021550216502175021850219502205022150222502235022450225502265022750228502295023050231502325023350234502355023650237502385023950240502415024250243502445024550246502475024850249502505025150252502535025450255502565025750258502595026050261502625026350264502655026650267502685026950270502715027250273502745027550276502775027850279502805028150282502835028450285502865028750288502895029050291502925029350294502955029650297502985029950300503015030250303503045030550306503075030850309503105031150312503135031450315503165031750318503195032050321503225032350324503255032650327503285032950330503315033250333503345033550336503375033850339503405034150342503435034450345503465034750348503495035050351503525035350354503555035650357503585035950360503615036250363503645036550366503675036850369503705037150372503735037450375503765037750378503795038050381503825038350384503855038650387503885038950390503915039250393503945039550396503975039850399504005040150402504035040450405504065040750408504095041050411504125041350414504155041650417504185041950420504215042250423504245042550426504275042850429504305043150432504335043450435504365043750438504395044050441504425044350444504455044650447504485044950450504515045250453504545045550456504575045850459504605046150462504635046450465504665046750468504695047050471504725047350474504755047650477504785047950480504815048250483504845048550486504875048850489504905049150492504935049450495504965049750498504995050050501505025050350504505055050650507505085050950510505115051250513505145051550516505175051850519505205052150522505235052450525505265052750528505295053050531505325053350534505355053650537505385053950540505415054250543505445054550546505475054850549505505055150552505535055450555505565055750558505595056050561505625056350564505655056650567505685056950570505715057250573505745057550576505775057850579505805058150582505835058450585505865058750588505895059050591505925059350594505955059650597505985059950600506015060250603506045060550606506075060850609506105061150612506135061450615506165061750618506195062050621506225062350624506255062650627506285062950630506315063250633506345063550636506375063850639506405064150642506435064450645506465064750648506495065050651506525065350654506555065650657506585065950660506615066250663506645066550666506675066850669506705067150672506735067450675506765067750678506795068050681506825068350684506855068650687506885068950690506915069250693506945069550696506975069850699507005070150702507035070450705507065070750708507095071050711507125071350714507155071650717507185071950720507215072250723507245072550726507275072850729507305073150732507335073450735507365073750738507395074050741507425074350744507455074650747507485074950750507515075250753507545075550756507575075850759507605076150762507635076450765507665076750768507695077050771507725077350774507755077650777507785077950780507815078250783507845078550786507875078850789507905079150792507935079450795507965079750798507995080050801508025080350804508055080650807508085080950810508115081250813508145081550816508175081850819508205082150822508235082450825508265082750828508295083050831508325083350834508355083650837508385083950840508415084250843508445084550846508475084850849508505085150852508535085450855508565085750858508595086050861508625086350864508655086650867508685086950870508715087250873508745087550876508775087850879508805088150882508835088450885508865088750888508895089050891508925089350894508955089650897508985089950900509015090250903509045090550906509075090850909509105091150912509135091450915509165091750918509195092050921509225092350924509255092650927509285092950930509315093250933509345093550936509375093850939509405094150942509435094450945509465094750948509495095050951509525095350954509555095650957509585095950960509615096250963509645096550966509675096850969509705097150972509735097450975509765097750978509795098050981509825098350984509855098650987509885098950990509915099250993509945099550996509975099850999510005100151002510035100451005510065100751008510095101051011510125101351014510155101651017510185101951020510215102251023510245102551026510275102851029510305103151032510335103451035510365103751038510395104051041510425104351044510455104651047510485104951050510515105251053510545105551056510575105851059510605106151062510635106451065510665106751068510695107051071510725107351074510755107651077510785107951080510815108251083510845108551086510875108851089510905109151092510935109451095510965109751098510995110051101511025110351104511055110651107511085110951110511115111251113511145111551116511175111851119511205112151122511235112451125511265112751128511295113051131511325113351134511355113651137511385113951140511415114251143511445114551146511475114851149511505115151152511535115451155511565115751158511595116051161511625116351164511655116651167511685116951170511715117251173511745117551176511775117851179511805118151182511835118451185511865118751188511895119051191511925119351194511955119651197511985119951200512015120251203512045120551206512075120851209512105121151212512135121451215512165121751218512195122051221512225122351224512255122651227512285122951230512315123251233512345123551236512375123851239512405124151242512435124451245512465124751248512495125051251512525125351254512555125651257512585125951260512615126251263512645126551266512675126851269512705127151272512735127451275512765127751278512795128051281512825128351284512855128651287512885128951290512915129251293512945129551296512975129851299513005130151302513035130451305513065130751308513095131051311513125131351314513155131651317513185131951320513215132251323513245132551326513275132851329513305133151332513335133451335513365133751338513395134051341513425134351344513455134651347513485134951350513515135251353513545135551356513575135851359513605136151362513635136451365513665136751368513695137051371513725137351374513755137651377513785137951380513815138251383513845138551386513875138851389513905139151392513935139451395513965139751398513995140051401514025140351404514055140651407514085140951410514115141251413514145141551416514175141851419514205142151422514235142451425514265142751428514295143051431514325143351434514355143651437514385143951440514415144251443514445144551446514475144851449514505145151452514535145451455514565145751458514595146051461514625146351464514655146651467514685146951470514715147251473514745147551476514775147851479514805148151482514835148451485514865148751488514895149051491514925149351494514955149651497514985149951500515015150251503515045150551506515075150851509515105151151512515135151451515515165151751518515195152051521515225152351524515255152651527515285152951530515315153251533515345153551536515375153851539515405154151542515435154451545515465154751548515495155051551515525155351554515555155651557515585155951560515615156251563515645156551566515675156851569515705157151572515735157451575515765157751578515795158051581515825158351584515855158651587515885158951590515915159251593515945159551596515975159851599516005160151602516035160451605516065160751608516095161051611516125161351614516155161651617516185161951620516215162251623516245162551626516275162851629516305163151632516335163451635516365163751638516395164051641516425164351644516455164651647516485164951650516515165251653516545165551656516575165851659516605166151662516635166451665516665166751668516695167051671516725167351674516755167651677516785167951680516815168251683516845168551686516875168851689516905169151692516935169451695516965169751698516995170051701517025170351704517055170651707517085170951710517115171251713517145171551716517175171851719517205172151722517235172451725517265172751728517295173051731517325173351734517355173651737517385173951740517415174251743517445174551746517475174851749517505175151752517535175451755517565175751758517595176051761517625176351764517655176651767517685176951770517715177251773517745177551776517775177851779517805178151782517835178451785517865178751788517895179051791517925179351794517955179651797517985179951800518015180251803518045180551806518075180851809518105181151812518135181451815518165181751818518195182051821518225182351824518255182651827518285182951830518315183251833518345183551836518375183851839518405184151842518435184451845518465184751848518495185051851518525185351854518555185651857518585185951860518615186251863518645186551866518675186851869518705187151872518735187451875518765187751878518795188051881518825188351884518855188651887518885188951890518915189251893518945189551896518975189851899519005190151902519035190451905519065190751908519095191051911519125191351914519155191651917519185191951920519215192251923519245192551926519275192851929519305193151932519335193451935519365193751938519395194051941519425194351944519455194651947519485194951950519515195251953519545195551956519575195851959519605196151962519635196451965519665196751968519695197051971519725197351974519755197651977519785197951980519815198251983519845198551986519875198851989519905199151992519935199451995519965199751998519995200052001520025200352004520055200652007520085200952010520115201252013520145201552016520175201852019520205202152022520235202452025520265202752028520295203052031520325203352034520355203652037520385203952040520415204252043520445204552046520475204852049520505205152052520535205452055520565205752058520595206052061520625206352064520655206652067520685206952070520715207252073520745207552076520775207852079520805208152082520835208452085520865208752088520895209052091520925209352094520955209652097520985209952100521015210252103521045210552106521075210852109521105211152112521135211452115521165211752118521195212052121521225212352124521255212652127521285212952130521315213252133521345213552136521375213852139521405214152142521435214452145521465214752148521495215052151521525215352154521555215652157521585215952160521615216252163521645216552166521675216852169521705217152172521735217452175521765217752178521795218052181521825218352184521855218652187521885218952190521915219252193521945219552196521975219852199522005220152202522035220452205522065220752208522095221052211522125221352214522155221652217522185221952220522215222252223522245222552226522275222852229522305223152232522335223452235522365223752238522395224052241522425224352244522455224652247522485224952250522515225252253522545225552256522575225852259522605226152262522635226452265522665226752268522695227052271522725227352274522755227652277522785227952280522815228252283522845228552286522875228852289522905229152292522935229452295522965229752298522995230052301523025230352304523055230652307523085230952310523115231252313523145231552316523175231852319523205232152322523235232452325523265232752328523295233052331523325233352334523355233652337523385233952340523415234252343523445234552346523475234852349523505235152352523535235452355523565235752358523595236052361523625236352364523655236652367523685236952370523715237252373523745237552376523775237852379523805238152382523835238452385523865238752388523895239052391523925239352394523955239652397523985239952400524015240252403524045240552406524075240852409524105241152412524135241452415524165241752418524195242052421524225242352424524255242652427524285242952430524315243252433524345243552436524375243852439524405244152442524435244452445524465244752448524495245052451524525245352454524555245652457524585245952460524615246252463524645246552466524675246852469524705247152472524735247452475524765247752478524795248052481524825248352484524855248652487524885248952490524915249252493524945249552496524975249852499525005250152502525035250452505525065250752508525095251052511525125251352514525155251652517525185251952520525215252252523525245252552526525275252852529525305253152532525335253452535525365253752538525395254052541525425254352544525455254652547525485254952550525515255252553525545255552556525575255852559525605256152562525635256452565525665256752568525695257052571525725257352574525755257652577525785257952580525815258252583525845258552586525875258852589525905259152592525935259452595525965259752598525995260052601526025260352604526055260652607526085260952610526115261252613526145261552616526175261852619526205262152622526235262452625526265262752628526295263052631526325263352634526355263652637526385263952640526415264252643526445264552646526475264852649526505265152652526535265452655526565265752658526595266052661526625266352664526655266652667526685266952670526715267252673526745267552676526775267852679526805268152682526835268452685526865268752688526895269052691526925269352694526955269652697526985269952700527015270252703527045270552706527075270852709527105271152712527135271452715527165271752718527195272052721527225272352724527255272652727527285272952730527315273252733527345273552736527375273852739527405274152742527435274452745527465274752748527495275052751527525275352754527555275652757527585275952760527615276252763527645276552766527675276852769527705277152772527735277452775527765277752778527795278052781527825278352784527855278652787527885278952790527915279252793527945279552796527975279852799528005280152802528035280452805528065280752808528095281052811528125281352814528155281652817528185281952820528215282252823528245282552826528275282852829528305283152832528335283452835528365283752838528395284052841528425284352844528455284652847528485284952850528515285252853528545285552856528575285852859528605286152862528635286452865528665286752868528695287052871528725287352874528755287652877528785287952880528815288252883528845288552886528875288852889528905289152892528935289452895528965289752898528995290052901529025290352904529055290652907529085290952910529115291252913529145291552916529175291852919529205292152922529235292452925529265292752928529295293052931529325293352934529355293652937529385293952940529415294252943529445294552946529475294852949529505295152952529535295452955529565295752958529595296052961529625296352964529655296652967529685296952970529715297252973529745297552976529775297852979529805298152982529835298452985529865298752988529895299052991529925299352994529955299652997529985299953000530015300253003530045300553006530075300853009530105301153012530135301453015530165301753018530195302053021530225302353024530255302653027530285302953030530315303253033530345303553036530375303853039530405304153042530435304453045530465304753048530495305053051530525305353054530555305653057530585305953060530615306253063530645306553066530675306853069530705307153072530735307453075530765307753078530795308053081530825308353084530855308653087530885308953090530915309253093530945309553096530975309853099531005310153102531035310453105531065310753108531095311053111531125311353114531155311653117531185311953120531215312253123531245312553126531275312853129531305313153132531335313453135531365313753138531395314053141531425314353144531455314653147531485314953150531515315253153531545315553156531575315853159531605316153162531635316453165531665316753168531695317053171531725317353174531755317653177531785317953180531815318253183531845318553186531875318853189531905319153192531935319453195531965319753198531995320053201532025320353204532055320653207532085320953210532115321253213532145321553216532175321853219532205322153222532235322453225532265322753228532295323053231532325323353234532355323653237532385323953240532415324253243532445324553246532475324853249532505325153252532535325453255532565325753258532595326053261532625326353264532655326653267532685326953270532715327253273532745327553276532775327853279532805328153282532835328453285532865328753288532895329053291532925329353294532955329653297532985329953300533015330253303533045330553306533075330853309533105331153312533135331453315533165331753318533195332053321533225332353324533255332653327533285332953330533315333253333533345333553336533375333853339533405334153342533435334453345533465334753348533495335053351533525335353354533555335653357533585335953360533615336253363533645336553366533675336853369533705337153372533735337453375533765337753378533795338053381533825338353384533855338653387533885338953390533915339253393533945339553396533975339853399534005340153402534035340453405534065340753408534095341053411534125341353414534155341653417534185341953420534215342253423534245342553426534275342853429534305343153432534335343453435534365343753438534395344053441534425344353444534455344653447534485344953450534515345253453534545345553456534575345853459534605346153462534635346453465534665346753468534695347053471534725347353474534755347653477534785347953480534815348253483534845348553486534875348853489534905349153492534935349453495534965349753498534995350053501535025350353504535055350653507535085350953510535115351253513535145351553516535175351853519535205352153522535235352453525535265352753528535295353053531535325353353534535355353653537535385353953540535415354253543535445354553546535475354853549535505355153552535535355453555535565355753558535595356053561535625356353564535655356653567535685356953570535715357253573535745357553576535775357853579535805358153582535835358453585535865358753588535895359053591535925359353594535955359653597535985359953600536015360253603536045360553606536075360853609536105361153612536135361453615536165361753618536195362053621536225362353624536255362653627536285362953630536315363253633536345363553636536375363853639536405364153642536435364453645536465364753648536495365053651536525365353654536555365653657536585365953660536615366253663536645366553666536675366853669536705367153672536735367453675536765367753678536795368053681536825368353684536855368653687536885368953690536915369253693536945369553696536975369853699537005370153702537035370453705537065370753708537095371053711537125371353714537155371653717537185371953720537215372253723537245372553726537275372853729537305373153732537335373453735537365373753738537395374053741537425374353744537455374653747537485374953750537515375253753537545375553756537575375853759537605376153762537635376453765537665376753768537695377053771537725377353774537755377653777537785377953780537815378253783537845378553786537875378853789537905379153792537935379453795537965379753798537995380053801538025380353804538055380653807538085380953810538115381253813538145381553816538175381853819538205382153822538235382453825538265382753828538295383053831538325383353834538355383653837538385383953840538415384253843538445384553846538475384853849538505385153852538535385453855538565385753858538595386053861538625386353864538655386653867538685386953870538715387253873538745387553876538775387853879538805388153882538835388453885538865388753888538895389053891538925389353894538955389653897538985389953900539015390253903539045390553906539075390853909539105391153912539135391453915539165391753918539195392053921539225392353924539255392653927539285392953930539315393253933539345393553936539375393853939539405394153942539435394453945539465394753948539495395053951539525395353954539555395653957539585395953960539615396253963539645396553966539675396853969539705397153972539735397453975539765397753978539795398053981539825398353984539855398653987539885398953990539915399253993539945399553996539975399853999540005400154002540035400454005540065400754008540095401054011540125401354014540155401654017540185401954020540215402254023540245402554026540275402854029540305403154032540335403454035540365403754038540395404054041540425404354044540455404654047540485404954050540515405254053540545405554056540575405854059540605406154062540635406454065540665406754068540695407054071540725407354074540755407654077540785407954080540815408254083540845408554086540875408854089540905409154092540935409454095540965409754098540995410054101541025410354104541055410654107541085410954110541115411254113541145411554116541175411854119541205412154122541235412454125541265412754128541295413054131541325413354134541355413654137541385413954140541415414254143541445414554146541475414854149541505415154152541535415454155541565415754158541595416054161541625416354164541655416654167541685416954170541715417254173541745417554176541775417854179541805418154182541835418454185541865418754188541895419054191541925419354194541955419654197541985419954200542015420254203542045420554206542075420854209542105421154212542135421454215542165421754218542195422054221542225422354224542255422654227542285422954230542315423254233542345423554236542375423854239542405424154242542435424454245542465424754248542495425054251542525425354254542555425654257542585425954260542615426254263542645426554266542675426854269542705427154272542735427454275542765427754278542795428054281542825428354284542855428654287542885428954290542915429254293542945429554296542975429854299543005430154302543035430454305543065430754308543095431054311543125431354314543155431654317543185431954320543215432254323543245432554326543275432854329543305433154332543335433454335543365433754338543395434054341543425434354344543455434654347543485434954350543515435254353543545435554356543575435854359543605436154362543635436454365543665436754368543695437054371543725437354374543755437654377543785437954380543815438254383543845438554386543875438854389543905439154392543935439454395543965439754398543995440054401544025440354404544055440654407544085440954410544115441254413544145441554416544175441854419544205442154422544235442454425544265442754428544295443054431544325443354434544355443654437544385443954440544415444254443544445444554446544475444854449544505445154452544535445454455544565445754458544595446054461544625446354464544655446654467544685446954470544715447254473544745447554476544775447854479544805448154482544835448454485544865448754488544895449054491544925449354494544955449654497544985449954500545015450254503545045450554506545075450854509545105451154512545135451454515545165451754518545195452054521545225452354524545255452654527545285452954530545315453254533545345453554536545375453854539545405454154542545435454454545545465454754548545495455054551545525455354554545555455654557545585455954560545615456254563545645456554566545675456854569545705457154572545735457454575545765457754578545795458054581545825458354584545855458654587545885458954590545915459254593545945459554596545975459854599546005460154602546035460454605546065460754608546095461054611546125461354614546155461654617546185461954620546215462254623546245462554626546275462854629546305463154632546335463454635546365463754638546395464054641546425464354644546455464654647546485464954650546515465254653546545465554656546575465854659546605466154662546635466454665546665466754668546695467054671546725467354674546755467654677546785467954680546815468254683546845468554686546875468854689546905469154692546935469454695546965469754698546995470054701547025470354704547055470654707547085470954710547115471254713547145471554716547175471854719547205472154722547235472454725547265472754728547295473054731547325473354734547355473654737547385473954740547415474254743547445474554746547475474854749547505475154752547535475454755547565475754758547595476054761547625476354764547655476654767547685476954770547715477254773547745477554776547775477854779547805478154782547835478454785547865478754788547895479054791547925479354794547955479654797547985479954800548015480254803548045480554806548075480854809548105481154812548135481454815548165481754818548195482054821548225482354824548255482654827548285482954830548315483254833548345483554836548375483854839548405484154842548435484454845548465484754848548495485054851548525485354854548555485654857548585485954860548615486254863548645486554866548675486854869548705487154872548735487454875548765487754878548795488054881548825488354884548855488654887548885488954890548915489254893548945489554896548975489854899549005490154902549035490454905549065490754908549095491054911549125491354914549155491654917549185491954920549215492254923549245492554926549275492854929549305493154932549335493454935549365493754938549395494054941549425494354944549455494654947549485494954950549515495254953549545495554956549575495854959549605496154962549635496454965549665496754968549695497054971549725497354974549755497654977549785497954980549815498254983549845498554986549875498854989549905499154992549935499454995549965499754998549995500055001550025500355004550055500655007550085500955010550115501255013550145501555016550175501855019550205502155022550235502455025550265502755028550295503055031550325503355034550355503655037550385503955040550415504255043550445504555046550475504855049550505505155052550535505455055550565505755058550595506055061550625506355064550655506655067550685506955070550715507255073550745507555076550775507855079550805508155082550835508455085550865508755088550895509055091550925509355094550955509655097550985509955100551015510255103551045510555106551075510855109551105511155112551135511455115551165511755118551195512055121551225512355124551255512655127551285512955130551315513255133551345513555136551375513855139551405514155142551435514455145551465514755148551495515055151551525515355154551555515655157551585515955160551615516255163551645516555166551675516855169551705517155172551735517455175551765517755178551795518055181551825518355184551855518655187551885518955190551915519255193551945519555196551975519855199552005520155202552035520455205552065520755208552095521055211552125521355214552155521655217552185521955220552215522255223552245522555226552275522855229552305523155232552335523455235552365523755238552395524055241552425524355244552455524655247552485524955250552515525255253552545525555256552575525855259552605526155262552635526455265552665526755268552695527055271552725527355274552755527655277552785527955280552815528255283552845528555286552875528855289552905529155292552935529455295552965529755298552995530055301553025530355304553055530655307553085530955310553115531255313553145531555316553175531855319553205532155322553235532455325553265532755328553295533055331553325533355334553355533655337553385533955340553415534255343553445534555346553475534855349553505535155352553535535455355553565535755358553595536055361553625536355364553655536655367553685536955370553715537255373553745537555376553775537855379553805538155382553835538455385553865538755388553895539055391553925539355394553955539655397553985539955400554015540255403554045540555406554075540855409554105541155412554135541455415554165541755418554195542055421554225542355424554255542655427554285542955430554315543255433554345543555436554375543855439554405544155442554435544455445554465544755448554495545055451554525545355454554555545655457554585545955460554615546255463554645546555466554675546855469554705547155472554735547455475554765547755478554795548055481554825548355484554855548655487554885548955490554915549255493554945549555496554975549855499555005550155502555035550455505555065550755508555095551055511555125551355514555155551655517555185551955520555215552255523555245552555526555275552855529555305553155532555335553455535555365553755538555395554055541555425554355544555455554655547555485554955550555515555255553555545555555556555575555855559555605556155562555635556455565555665556755568555695557055571555725557355574555755557655577555785557955580555815558255583555845558555586555875558855589555905559155592555935559455595555965559755598555995560055601556025560355604556055560655607556085560955610556115561255613556145561555616556175561855619556205562155622556235562455625556265562755628556295563055631556325563355634556355563655637556385563955640556415564255643556445564555646556475564855649556505565155652556535565455655556565565755658556595566055661556625566355664556655566655667556685566955670556715567255673556745567555676556775567855679556805568155682556835568455685556865568755688556895569055691556925569355694556955569655697556985569955700557015570255703557045570555706557075570855709557105571155712557135571455715557165571755718557195572055721557225572355724557255572655727557285572955730557315573255733557345573555736557375573855739557405574155742557435574455745557465574755748557495575055751557525575355754557555575655757557585575955760557615576255763557645576555766557675576855769557705577155772557735577455775557765577755778557795578055781557825578355784557855578655787557885578955790557915579255793557945579555796557975579855799558005580155802558035580455805558065580755808558095581055811558125581355814558155581655817558185581955820558215582255823558245582555826558275582855829558305583155832558335583455835558365583755838558395584055841558425584355844558455584655847558485584955850558515585255853558545585555856558575585855859558605586155862558635586455865558665586755868558695587055871558725587355874558755587655877558785587955880558815588255883558845588555886558875588855889558905589155892558935589455895558965589755898558995590055901559025590355904559055590655907559085590955910559115591255913559145591555916559175591855919559205592155922559235592455925559265592755928559295593055931559325593355934559355593655937559385593955940559415594255943559445594555946559475594855949559505595155952559535595455955559565595755958559595596055961559625596355964559655596655967559685596955970559715597255973559745597555976559775597855979559805598155982559835598455985559865598755988559895599055991559925599355994559955599655997559985599956000560015600256003560045600556006560075600856009560105601156012560135601456015560165601756018560195602056021560225602356024560255602656027560285602956030560315603256033560345603556036560375603856039560405604156042560435604456045560465604756048560495605056051560525605356054560555605656057560585605956060560615606256063560645606556066560675606856069560705607156072560735607456075560765607756078560795608056081560825608356084560855608656087560885608956090560915609256093560945609556096560975609856099561005610156102561035610456105561065610756108561095611056111561125611356114561155611656117561185611956120561215612256123561245612556126561275612856129561305613156132561335613456135561365613756138561395614056141561425614356144561455614656147561485614956150561515615256153561545615556156561575615856159561605616156162561635616456165561665616756168561695617056171561725617356174561755617656177561785617956180561815618256183561845618556186561875618856189561905619156192561935619456195561965619756198561995620056201562025620356204562055620656207562085620956210562115621256213562145621556216562175621856219562205622156222562235622456225562265622756228562295623056231562325623356234562355623656237562385623956240562415624256243562445624556246562475624856249562505625156252562535625456255562565625756258562595626056261562625626356264562655626656267562685626956270562715627256273562745627556276562775627856279562805628156282562835628456285562865628756288562895629056291562925629356294562955629656297562985629956300563015630256303563045630556306563075630856309563105631156312563135631456315563165631756318563195632056321563225632356324563255632656327563285632956330563315633256333563345633556336563375633856339563405634156342563435634456345563465634756348563495635056351563525635356354563555635656357563585635956360563615636256363563645636556366563675636856369563705637156372563735637456375563765637756378563795638056381563825638356384563855638656387563885638956390563915639256393563945639556396563975639856399564005640156402564035640456405564065640756408564095641056411564125641356414564155641656417564185641956420564215642256423564245642556426564275642856429564305643156432564335643456435564365643756438564395644056441564425644356444564455644656447564485644956450564515645256453564545645556456564575645856459564605646156462564635646456465564665646756468564695647056471564725647356474564755647656477564785647956480564815648256483564845648556486564875648856489564905649156492564935649456495564965649756498564995650056501565025650356504565055650656507565085650956510565115651256513565145651556516565175651856519565205652156522565235652456525565265652756528565295653056531565325653356534565355653656537565385653956540565415654256543565445654556546565475654856549565505655156552565535655456555565565655756558565595656056561565625656356564565655656656567565685656956570565715657256573565745657556576565775657856579565805658156582565835658456585565865658756588565895659056591565925659356594565955659656597565985659956600566015660256603566045660556606566075660856609566105661156612566135661456615566165661756618566195662056621566225662356624566255662656627566285662956630566315663256633566345663556636566375663856639566405664156642566435664456645566465664756648566495665056651566525665356654566555665656657566585665956660566615666256663566645666556666566675666856669566705667156672566735667456675566765667756678566795668056681566825668356684566855668656687566885668956690566915669256693566945669556696566975669856699567005670156702567035670456705567065670756708567095671056711567125671356714567155671656717567185671956720567215672256723567245672556726567275672856729567305673156732567335673456735567365673756738567395674056741567425674356744567455674656747567485674956750567515675256753567545675556756567575675856759567605676156762567635676456765567665676756768567695677056771567725677356774567755677656777567785677956780567815678256783567845678556786567875678856789567905679156792567935679456795567965679756798567995680056801568025680356804568055680656807568085680956810568115681256813568145681556816568175681856819568205682156822568235682456825568265682756828568295683056831568325683356834568355683656837568385683956840568415684256843568445684556846568475684856849568505685156852568535685456855568565685756858568595686056861568625686356864568655686656867568685686956870568715687256873568745687556876568775687856879568805688156882568835688456885568865688756888568895689056891568925689356894568955689656897568985689956900569015690256903569045690556906569075690856909569105691156912569135691456915569165691756918569195692056921569225692356924569255692656927569285692956930569315693256933569345693556936569375693856939569405694156942569435694456945569465694756948569495695056951569525695356954569555695656957569585695956960569615696256963569645696556966569675696856969569705697156972569735697456975569765697756978569795698056981569825698356984569855698656987569885698956990569915699256993569945699556996569975699856999570005700157002570035700457005570065700757008570095701057011570125701357014570155701657017570185701957020570215702257023570245702557026570275702857029570305703157032570335703457035570365703757038570395704057041570425704357044570455704657047570485704957050570515705257053570545705557056570575705857059570605706157062570635706457065570665706757068570695707057071570725707357074570755707657077570785707957080570815708257083570845708557086570875708857089570905709157092570935709457095570965709757098570995710057101571025710357104571055710657107571085710957110571115711257113571145711557116571175711857119571205712157122571235712457125571265712757128571295713057131571325713357134571355713657137571385713957140571415714257143571445714557146571475714857149571505715157152571535715457155571565715757158571595716057161571625716357164571655716657167571685716957170571715717257173571745717557176571775717857179571805718157182571835718457185571865718757188571895719057191571925719357194571955719657197571985719957200572015720257203572045720557206572075720857209572105721157212572135721457215572165721757218572195722057221572225722357224572255722657227572285722957230572315723257233572345723557236572375723857239572405724157242572435724457245572465724757248572495725057251572525725357254572555725657257572585725957260572615726257263572645726557266572675726857269572705727157272572735727457275572765727757278572795728057281572825728357284572855728657287572885728957290572915729257293572945729557296572975729857299573005730157302573035730457305573065730757308573095731057311573125731357314573155731657317573185731957320573215732257323573245732557326573275732857329573305733157332573335733457335573365733757338573395734057341573425734357344573455734657347573485734957350573515735257353573545735557356573575735857359573605736157362573635736457365573665736757368573695737057371573725737357374573755737657377573785737957380573815738257383573845738557386573875738857389573905739157392573935739457395573965739757398573995740057401574025740357404574055740657407574085740957410574115741257413574145741557416574175741857419574205742157422574235742457425574265742757428574295743057431574325743357434574355743657437574385743957440574415744257443574445744557446574475744857449574505745157452574535745457455574565745757458574595746057461574625746357464574655746657467574685746957470574715747257473574745747557476574775747857479574805748157482574835748457485574865748757488574895749057491574925749357494574955749657497574985749957500575015750257503575045750557506575075750857509575105751157512575135751457515575165751757518575195752057521575225752357524575255752657527575285752957530575315753257533575345753557536575375753857539575405754157542575435754457545575465754757548575495755057551575525755357554575555755657557575585755957560575615756257563575645756557566575675756857569575705757157572575735757457575575765757757578575795758057581575825758357584575855758657587575885758957590575915759257593575945759557596575975759857599576005760157602576035760457605576065760757608576095761057611576125761357614576155761657617576185761957620576215762257623576245762557626576275762857629576305763157632576335763457635576365763757638576395764057641576425764357644576455764657647576485764957650576515765257653576545765557656576575765857659576605766157662576635766457665576665766757668576695767057671576725767357674576755767657677576785767957680576815768257683576845768557686576875768857689576905769157692576935769457695576965769757698576995770057701577025770357704577055770657707577085770957710577115771257713577145771557716577175771857719577205772157722577235772457725577265772757728577295773057731577325773357734577355773657737577385773957740577415774257743577445774557746577475774857749577505775157752577535775457755577565775757758577595776057761577625776357764577655776657767577685776957770577715777257773577745777557776577775777857779577805778157782577835778457785577865778757788577895779057791577925779357794577955779657797577985779957800578015780257803578045780557806578075780857809578105781157812578135781457815578165781757818578195782057821578225782357824578255782657827578285782957830578315783257833578345783557836578375783857839578405784157842578435784457845578465784757848578495785057851578525785357854578555785657857578585785957860578615786257863578645786557866578675786857869578705787157872578735787457875578765787757878578795788057881578825788357884578855788657887578885788957890578915789257893578945789557896578975789857899579005790157902579035790457905579065790757908579095791057911579125791357914579155791657917579185791957920579215792257923579245792557926579275792857929579305793157932579335793457935579365793757938579395794057941579425794357944579455794657947579485794957950579515795257953579545795557956579575795857959579605796157962579635796457965579665796757968579695797057971579725797357974579755797657977579785797957980579815798257983579845798557986579875798857989579905799157992579935799457995579965799757998579995800058001580025800358004580055800658007580085800958010580115801258013580145801558016580175801858019580205802158022580235802458025580265802758028580295803058031580325803358034580355803658037580385803958040580415804258043580445804558046580475804858049580505805158052580535805458055580565805758058580595806058061580625806358064580655806658067580685806958070580715807258073580745807558076580775807858079580805808158082580835808458085580865808758088580895809058091580925809358094580955809658097580985809958100581015810258103581045810558106581075810858109581105811158112581135811458115581165811758118581195812058121581225812358124581255812658127581285812958130581315813258133581345813558136581375813858139581405814158142581435814458145581465814758148581495815058151581525815358154581555815658157581585815958160581615816258163581645816558166581675816858169581705817158172581735817458175581765817758178581795818058181581825818358184581855818658187581885818958190581915819258193581945819558196581975819858199582005820158202582035820458205582065820758208582095821058211582125821358214582155821658217582185821958220582215822258223582245822558226582275822858229582305823158232582335823458235582365823758238582395824058241582425824358244582455824658247582485824958250582515825258253582545825558256582575825858259582605826158262582635826458265582665826758268582695827058271582725827358274582755827658277582785827958280582815828258283582845828558286582875828858289582905829158292582935829458295582965829758298582995830058301583025830358304583055830658307583085830958310583115831258313583145831558316583175831858319583205832158322583235832458325583265832758328583295833058331583325833358334583355833658337583385833958340583415834258343583445834558346583475834858349583505835158352583535835458355583565835758358583595836058361583625836358364583655836658367583685836958370583715837258373583745837558376583775837858379583805838158382583835838458385583865838758388583895839058391583925839358394583955839658397583985839958400584015840258403584045840558406584075840858409584105841158412584135841458415584165841758418584195842058421584225842358424584255842658427584285842958430584315843258433584345843558436584375843858439584405844158442584435844458445584465844758448584495845058451584525845358454584555845658457584585845958460584615846258463584645846558466584675846858469584705847158472584735847458475584765847758478584795848058481584825848358484584855848658487584885848958490584915849258493584945849558496584975849858499585005850158502585035850458505585065850758508585095851058511585125851358514585155851658517585185851958520585215852258523585245852558526585275852858529585305853158532585335853458535585365853758538585395854058541585425854358544585455854658547585485854958550585515855258553585545855558556585575855858559585605856158562585635856458565585665856758568585695857058571585725857358574585755857658577585785857958580585815858258583585845858558586585875858858589585905859158592585935859458595585965859758598585995860058601586025860358604586055860658607586085860958610586115861258613586145861558616586175861858619586205862158622586235862458625586265862758628586295863058631586325863358634586355863658637
  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 000171c8 080002a0 080002a0 000012a0 2**4
  7. CONTENTS, ALLOC, LOAD, READONLY, CODE
  8. 2 .rodata 000001d4 08017468 08017468 00018468 2**2
  9. CONTENTS, ALLOC, LOAD, READONLY, DATA
  10. 3 .ARM 00000008 0801763c 0801763c 0001863c 2**2
  11. CONTENTS, ALLOC, LOAD, READONLY, DATA
  12. 4 .init_array 00000004 08017644 08017644 00018644 2**2
  13. CONTENTS, ALLOC, LOAD, READONLY, DATA
  14. 5 .fini_array 00000004 08017648 08017648 00018648 2**2
  15. CONTENTS, ALLOC, LOAD, READONLY, DATA
  16. 6 .data 000000a4 24000000 0801764c 00019000 2**2
  17. CONTENTS, ALLOC, LOAD, DATA
  18. 7 .bss 00012c84 240000c0 080176f0 000190c0 2**5
  19. ALLOC
  20. 8 ._user_heap_stack 00000604 24012d44 080176f0 00019d44 2**0
  21. ALLOC
  22. 9 .ARM.attributes 0000002e 00000000 00000000 000190a4 2**0
  23. CONTENTS, READONLY
  24. 10 .debug_info 00032953 00000000 00000000 000190d2 2**0
  25. CONTENTS, READONLY, DEBUGGING, OCTETS
  26. 11 .debug_abbrev 00006060 00000000 00000000 0004ba25 2**0
  27. CONTENTS, READONLY, DEBUGGING, OCTETS
  28. 12 .debug_aranges 00002410 00000000 00000000 00051a88 2**3
  29. CONTENTS, READONLY, DEBUGGING, OCTETS
  30. 13 .debug_macro 0003ec89 00000000 00000000 00053e98 2**0
  31. CONTENTS, READONLY, DEBUGGING, OCTETS
  32. 14 .debug_line 0002f2d3 00000000 00000000 00092b21 2**0
  33. CONTENTS, READONLY, DEBUGGING, OCTETS
  34. 15 .debug_str 00185536 00000000 00000000 000c1df4 2**0
  35. CONTENTS, READONLY, DEBUGGING, OCTETS
  36. 16 .comment 00000043 00000000 00000000 0024732a 2**0
  37. CONTENTS, READONLY
  38. 17 .debug_rnglists 00001bc5 00000000 00000000 0024736d 2**0
  39. CONTENTS, READONLY, DEBUGGING, OCTETS
  40. 18 .debug_frame 00009fc8 00000000 00000000 00248f34 2**2
  41. CONTENTS, READONLY, DEBUGGING, OCTETS
  42. 19 .debug_line_str 00000066 00000000 00000000 00252efc 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: 08017450 .word 0x08017450
  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: 08017450 .word 0x08017450
  71. 080002e0 <memchr>:
  72. 80002e0: f001 01ff and.w r1, r1, #255 @ 0xff
  73. 80002e4: 2a10 cmp r2, #16
  74. 80002e6: db2b blt.n 8000340 <memchr+0x60>
  75. 80002e8: f010 0f07 tst.w r0, #7
  76. 80002ec: d008 beq.n 8000300 <memchr+0x20>
  77. 80002ee: f810 3b01 ldrb.w r3, [r0], #1
  78. 80002f2: 3a01 subs r2, #1
  79. 80002f4: 428b cmp r3, r1
  80. 80002f6: d02d beq.n 8000354 <memchr+0x74>
  81. 80002f8: f010 0f07 tst.w r0, #7
  82. 80002fc: b342 cbz r2, 8000350 <memchr+0x70>
  83. 80002fe: d1f6 bne.n 80002ee <memchr+0xe>
  84. 8000300: b4f0 push {r4, r5, r6, r7}
  85. 8000302: ea41 2101 orr.w r1, r1, r1, lsl #8
  86. 8000306: ea41 4101 orr.w r1, r1, r1, lsl #16
  87. 800030a: f022 0407 bic.w r4, r2, #7
  88. 800030e: f07f 0700 mvns.w r7, #0
  89. 8000312: 2300 movs r3, #0
  90. 8000314: e8f0 5602 ldrd r5, r6, [r0], #8
  91. 8000318: 3c08 subs r4, #8
  92. 800031a: ea85 0501 eor.w r5, r5, r1
  93. 800031e: ea86 0601 eor.w r6, r6, r1
  94. 8000322: fa85 f547 uadd8 r5, r5, r7
  95. 8000326: faa3 f587 sel r5, r3, r7
  96. 800032a: fa86 f647 uadd8 r6, r6, r7
  97. 800032e: faa5 f687 sel r6, r5, r7
  98. 8000332: b98e cbnz r6, 8000358 <memchr+0x78>
  99. 8000334: d1ee bne.n 8000314 <memchr+0x34>
  100. 8000336: bcf0 pop {r4, r5, r6, r7}
  101. 8000338: f001 01ff and.w r1, r1, #255 @ 0xff
  102. 800033c: f002 0207 and.w r2, r2, #7
  103. 8000340: b132 cbz r2, 8000350 <memchr+0x70>
  104. 8000342: f810 3b01 ldrb.w r3, [r0], #1
  105. 8000346: 3a01 subs r2, #1
  106. 8000348: ea83 0301 eor.w r3, r3, r1
  107. 800034c: b113 cbz r3, 8000354 <memchr+0x74>
  108. 800034e: d1f8 bne.n 8000342 <memchr+0x62>
  109. 8000350: 2000 movs r0, #0
  110. 8000352: 4770 bx lr
  111. 8000354: 3801 subs r0, #1
  112. 8000356: 4770 bx lr
  113. 8000358: 2d00 cmp r5, #0
  114. 800035a: bf06 itte eq
  115. 800035c: 4635 moveq r5, r6
  116. 800035e: 3803 subeq r0, #3
  117. 8000360: 3807 subne r0, #7
  118. 8000362: f015 0f01 tst.w r5, #1
  119. 8000366: d107 bne.n 8000378 <memchr+0x98>
  120. 8000368: 3001 adds r0, #1
  121. 800036a: f415 7f80 tst.w r5, #256 @ 0x100
  122. 800036e: bf02 ittt eq
  123. 8000370: 3001 addeq r0, #1
  124. 8000372: f415 3fc0 tsteq.w r5, #98304 @ 0x18000
  125. 8000376: 3001 addeq r0, #1
  126. 8000378: bcf0 pop {r4, r5, r6, r7}
  127. 800037a: 3801 subs r0, #1
  128. 800037c: 4770 bx lr
  129. 800037e: bf00 nop
  130. 08000380 <__aeabi_uldivmod>:
  131. 8000380: b953 cbnz r3, 8000398 <__aeabi_uldivmod+0x18>
  132. 8000382: b94a cbnz r2, 8000398 <__aeabi_uldivmod+0x18>
  133. 8000384: 2900 cmp r1, #0
  134. 8000386: bf08 it eq
  135. 8000388: 2800 cmpeq r0, #0
  136. 800038a: bf1c itt ne
  137. 800038c: f04f 31ff movne.w r1, #4294967295 @ 0xffffffff
  138. 8000390: f04f 30ff movne.w r0, #4294967295 @ 0xffffffff
  139. 8000394: f000 b96a b.w 800066c <__aeabi_idiv0>
  140. 8000398: f1ad 0c08 sub.w ip, sp, #8
  141. 800039c: e96d ce04 strd ip, lr, [sp, #-16]!
  142. 80003a0: f000 f806 bl 80003b0 <__udivmoddi4>
  143. 80003a4: f8dd e004 ldr.w lr, [sp, #4]
  144. 80003a8: e9dd 2302 ldrd r2, r3, [sp, #8]
  145. 80003ac: b004 add sp, #16
  146. 80003ae: 4770 bx lr
  147. 080003b0 <__udivmoddi4>:
  148. 80003b0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
  149. 80003b4: 9d08 ldr r5, [sp, #32]
  150. 80003b6: 460c mov r4, r1
  151. 80003b8: 2b00 cmp r3, #0
  152. 80003ba: d14e bne.n 800045a <__udivmoddi4+0xaa>
  153. 80003bc: 4694 mov ip, r2
  154. 80003be: 458c cmp ip, r1
  155. 80003c0: 4686 mov lr, r0
  156. 80003c2: fab2 f282 clz r2, r2
  157. 80003c6: d962 bls.n 800048e <__udivmoddi4+0xde>
  158. 80003c8: b14a cbz r2, 80003de <__udivmoddi4+0x2e>
  159. 80003ca: f1c2 0320 rsb r3, r2, #32
  160. 80003ce: 4091 lsls r1, r2
  161. 80003d0: fa20 f303 lsr.w r3, r0, r3
  162. 80003d4: fa0c fc02 lsl.w ip, ip, r2
  163. 80003d8: 4319 orrs r1, r3
  164. 80003da: fa00 fe02 lsl.w lr, r0, r2
  165. 80003de: ea4f 471c mov.w r7, ip, lsr #16
  166. 80003e2: fa1f f68c uxth.w r6, ip
  167. 80003e6: fbb1 f4f7 udiv r4, r1, r7
  168. 80003ea: ea4f 431e mov.w r3, lr, lsr #16
  169. 80003ee: fb07 1114 mls r1, r7, r4, r1
  170. 80003f2: ea43 4301 orr.w r3, r3, r1, lsl #16
  171. 80003f6: fb04 f106 mul.w r1, r4, r6
  172. 80003fa: 4299 cmp r1, r3
  173. 80003fc: d90a bls.n 8000414 <__udivmoddi4+0x64>
  174. 80003fe: eb1c 0303 adds.w r3, ip, r3
  175. 8000402: f104 30ff add.w r0, r4, #4294967295 @ 0xffffffff
  176. 8000406: f080 8112 bcs.w 800062e <__udivmoddi4+0x27e>
  177. 800040a: 4299 cmp r1, r3
  178. 800040c: f240 810f bls.w 800062e <__udivmoddi4+0x27e>
  179. 8000410: 3c02 subs r4, #2
  180. 8000412: 4463 add r3, ip
  181. 8000414: 1a59 subs r1, r3, r1
  182. 8000416: fa1f f38e uxth.w r3, lr
  183. 800041a: fbb1 f0f7 udiv r0, r1, r7
  184. 800041e: fb07 1110 mls r1, r7, r0, r1
  185. 8000422: ea43 4301 orr.w r3, r3, r1, lsl #16
  186. 8000426: fb00 f606 mul.w r6, r0, r6
  187. 800042a: 429e cmp r6, r3
  188. 800042c: d90a bls.n 8000444 <__udivmoddi4+0x94>
  189. 800042e: eb1c 0303 adds.w r3, ip, r3
  190. 8000432: f100 31ff add.w r1, r0, #4294967295 @ 0xffffffff
  191. 8000436: f080 80fc bcs.w 8000632 <__udivmoddi4+0x282>
  192. 800043a: 429e cmp r6, r3
  193. 800043c: f240 80f9 bls.w 8000632 <__udivmoddi4+0x282>
  194. 8000440: 4463 add r3, ip
  195. 8000442: 3802 subs r0, #2
  196. 8000444: 1b9b subs r3, r3, r6
  197. 8000446: ea40 4004 orr.w r0, r0, r4, lsl #16
  198. 800044a: 2100 movs r1, #0
  199. 800044c: b11d cbz r5, 8000456 <__udivmoddi4+0xa6>
  200. 800044e: 40d3 lsrs r3, r2
  201. 8000450: 2200 movs r2, #0
  202. 8000452: e9c5 3200 strd r3, r2, [r5]
  203. 8000456: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  204. 800045a: 428b cmp r3, r1
  205. 800045c: d905 bls.n 800046a <__udivmoddi4+0xba>
  206. 800045e: b10d cbz r5, 8000464 <__udivmoddi4+0xb4>
  207. 8000460: e9c5 0100 strd r0, r1, [r5]
  208. 8000464: 2100 movs r1, #0
  209. 8000466: 4608 mov r0, r1
  210. 8000468: e7f5 b.n 8000456 <__udivmoddi4+0xa6>
  211. 800046a: fab3 f183 clz r1, r3
  212. 800046e: 2900 cmp r1, #0
  213. 8000470: d146 bne.n 8000500 <__udivmoddi4+0x150>
  214. 8000472: 42a3 cmp r3, r4
  215. 8000474: d302 bcc.n 800047c <__udivmoddi4+0xcc>
  216. 8000476: 4290 cmp r0, r2
  217. 8000478: f0c0 80f0 bcc.w 800065c <__udivmoddi4+0x2ac>
  218. 800047c: 1a86 subs r6, r0, r2
  219. 800047e: eb64 0303 sbc.w r3, r4, r3
  220. 8000482: 2001 movs r0, #1
  221. 8000484: 2d00 cmp r5, #0
  222. 8000486: d0e6 beq.n 8000456 <__udivmoddi4+0xa6>
  223. 8000488: e9c5 6300 strd r6, r3, [r5]
  224. 800048c: e7e3 b.n 8000456 <__udivmoddi4+0xa6>
  225. 800048e: 2a00 cmp r2, #0
  226. 8000490: f040 8090 bne.w 80005b4 <__udivmoddi4+0x204>
  227. 8000494: eba1 040c sub.w r4, r1, ip
  228. 8000498: ea4f 481c mov.w r8, ip, lsr #16
  229. 800049c: fa1f f78c uxth.w r7, ip
  230. 80004a0: 2101 movs r1, #1
  231. 80004a2: fbb4 f6f8 udiv r6, r4, r8
  232. 80004a6: ea4f 431e mov.w r3, lr, lsr #16
  233. 80004aa: fb08 4416 mls r4, r8, r6, r4
  234. 80004ae: ea43 4304 orr.w r3, r3, r4, lsl #16
  235. 80004b2: fb07 f006 mul.w r0, r7, r6
  236. 80004b6: 4298 cmp r0, r3
  237. 80004b8: d908 bls.n 80004cc <__udivmoddi4+0x11c>
  238. 80004ba: eb1c 0303 adds.w r3, ip, r3
  239. 80004be: f106 34ff add.w r4, r6, #4294967295 @ 0xffffffff
  240. 80004c2: d202 bcs.n 80004ca <__udivmoddi4+0x11a>
  241. 80004c4: 4298 cmp r0, r3
  242. 80004c6: f200 80cd bhi.w 8000664 <__udivmoddi4+0x2b4>
  243. 80004ca: 4626 mov r6, r4
  244. 80004cc: 1a1c subs r4, r3, r0
  245. 80004ce: fa1f f38e uxth.w r3, lr
  246. 80004d2: fbb4 f0f8 udiv r0, r4, r8
  247. 80004d6: fb08 4410 mls r4, r8, r0, r4
  248. 80004da: ea43 4304 orr.w r3, r3, r4, lsl #16
  249. 80004de: fb00 f707 mul.w r7, r0, r7
  250. 80004e2: 429f cmp r7, r3
  251. 80004e4: d908 bls.n 80004f8 <__udivmoddi4+0x148>
  252. 80004e6: eb1c 0303 adds.w r3, ip, r3
  253. 80004ea: f100 34ff add.w r4, r0, #4294967295 @ 0xffffffff
  254. 80004ee: d202 bcs.n 80004f6 <__udivmoddi4+0x146>
  255. 80004f0: 429f cmp r7, r3
  256. 80004f2: f200 80b0 bhi.w 8000656 <__udivmoddi4+0x2a6>
  257. 80004f6: 4620 mov r0, r4
  258. 80004f8: 1bdb subs r3, r3, r7
  259. 80004fa: ea40 4006 orr.w r0, r0, r6, lsl #16
  260. 80004fe: e7a5 b.n 800044c <__udivmoddi4+0x9c>
  261. 8000500: f1c1 0620 rsb r6, r1, #32
  262. 8000504: 408b lsls r3, r1
  263. 8000506: fa22 f706 lsr.w r7, r2, r6
  264. 800050a: 431f orrs r7, r3
  265. 800050c: fa20 fc06 lsr.w ip, r0, r6
  266. 8000510: fa04 f301 lsl.w r3, r4, r1
  267. 8000514: ea43 030c orr.w r3, r3, ip
  268. 8000518: 40f4 lsrs r4, r6
  269. 800051a: fa00 f801 lsl.w r8, r0, r1
  270. 800051e: 0c38 lsrs r0, r7, #16
  271. 8000520: ea4f 4913 mov.w r9, r3, lsr #16
  272. 8000524: fbb4 fef0 udiv lr, r4, r0
  273. 8000528: fa1f fc87 uxth.w ip, r7
  274. 800052c: fb00 441e mls r4, r0, lr, r4
  275. 8000530: ea49 4404 orr.w r4, r9, r4, lsl #16
  276. 8000534: fb0e f90c mul.w r9, lr, ip
  277. 8000538: 45a1 cmp r9, r4
  278. 800053a: fa02 f201 lsl.w r2, r2, r1
  279. 800053e: d90a bls.n 8000556 <__udivmoddi4+0x1a6>
  280. 8000540: 193c adds r4, r7, r4
  281. 8000542: f10e 3aff add.w sl, lr, #4294967295 @ 0xffffffff
  282. 8000546: f080 8084 bcs.w 8000652 <__udivmoddi4+0x2a2>
  283. 800054a: 45a1 cmp r9, r4
  284. 800054c: f240 8081 bls.w 8000652 <__udivmoddi4+0x2a2>
  285. 8000550: f1ae 0e02 sub.w lr, lr, #2
  286. 8000554: 443c add r4, r7
  287. 8000556: eba4 0409 sub.w r4, r4, r9
  288. 800055a: fa1f f983 uxth.w r9, r3
  289. 800055e: fbb4 f3f0 udiv r3, r4, r0
  290. 8000562: fb00 4413 mls r4, r0, r3, r4
  291. 8000566: ea49 4404 orr.w r4, r9, r4, lsl #16
  292. 800056a: fb03 fc0c mul.w ip, r3, ip
  293. 800056e: 45a4 cmp ip, r4
  294. 8000570: d907 bls.n 8000582 <__udivmoddi4+0x1d2>
  295. 8000572: 193c adds r4, r7, r4
  296. 8000574: f103 30ff add.w r0, r3, #4294967295 @ 0xffffffff
  297. 8000578: d267 bcs.n 800064a <__udivmoddi4+0x29a>
  298. 800057a: 45a4 cmp ip, r4
  299. 800057c: d965 bls.n 800064a <__udivmoddi4+0x29a>
  300. 800057e: 3b02 subs r3, #2
  301. 8000580: 443c add r4, r7
  302. 8000582: ea43 400e orr.w r0, r3, lr, lsl #16
  303. 8000586: fba0 9302 umull r9, r3, r0, r2
  304. 800058a: eba4 040c sub.w r4, r4, ip
  305. 800058e: 429c cmp r4, r3
  306. 8000590: 46ce mov lr, r9
  307. 8000592: 469c mov ip, r3
  308. 8000594: d351 bcc.n 800063a <__udivmoddi4+0x28a>
  309. 8000596: d04e beq.n 8000636 <__udivmoddi4+0x286>
  310. 8000598: b155 cbz r5, 80005b0 <__udivmoddi4+0x200>
  311. 800059a: ebb8 030e subs.w r3, r8, lr
  312. 800059e: eb64 040c sbc.w r4, r4, ip
  313. 80005a2: fa04 f606 lsl.w r6, r4, r6
  314. 80005a6: 40cb lsrs r3, r1
  315. 80005a8: 431e orrs r6, r3
  316. 80005aa: 40cc lsrs r4, r1
  317. 80005ac: e9c5 6400 strd r6, r4, [r5]
  318. 80005b0: 2100 movs r1, #0
  319. 80005b2: e750 b.n 8000456 <__udivmoddi4+0xa6>
  320. 80005b4: f1c2 0320 rsb r3, r2, #32
  321. 80005b8: fa20 f103 lsr.w r1, r0, r3
  322. 80005bc: fa0c fc02 lsl.w ip, ip, r2
  323. 80005c0: fa24 f303 lsr.w r3, r4, r3
  324. 80005c4: 4094 lsls r4, r2
  325. 80005c6: 430c orrs r4, r1
  326. 80005c8: ea4f 481c mov.w r8, ip, lsr #16
  327. 80005cc: fa00 fe02 lsl.w lr, r0, r2
  328. 80005d0: fa1f f78c uxth.w r7, ip
  329. 80005d4: fbb3 f0f8 udiv r0, r3, r8
  330. 80005d8: fb08 3110 mls r1, r8, r0, r3
  331. 80005dc: 0c23 lsrs r3, r4, #16
  332. 80005de: ea43 4301 orr.w r3, r3, r1, lsl #16
  333. 80005e2: fb00 f107 mul.w r1, r0, r7
  334. 80005e6: 4299 cmp r1, r3
  335. 80005e8: d908 bls.n 80005fc <__udivmoddi4+0x24c>
  336. 80005ea: eb1c 0303 adds.w r3, ip, r3
  337. 80005ee: f100 36ff add.w r6, r0, #4294967295 @ 0xffffffff
  338. 80005f2: d22c bcs.n 800064e <__udivmoddi4+0x29e>
  339. 80005f4: 4299 cmp r1, r3
  340. 80005f6: d92a bls.n 800064e <__udivmoddi4+0x29e>
  341. 80005f8: 3802 subs r0, #2
  342. 80005fa: 4463 add r3, ip
  343. 80005fc: 1a5b subs r3, r3, r1
  344. 80005fe: b2a4 uxth r4, r4
  345. 8000600: fbb3 f1f8 udiv r1, r3, r8
  346. 8000604: fb08 3311 mls r3, r8, r1, r3
  347. 8000608: ea44 4403 orr.w r4, r4, r3, lsl #16
  348. 800060c: fb01 f307 mul.w r3, r1, r7
  349. 8000610: 42a3 cmp r3, r4
  350. 8000612: d908 bls.n 8000626 <__udivmoddi4+0x276>
  351. 8000614: eb1c 0404 adds.w r4, ip, r4
  352. 8000618: f101 36ff add.w r6, r1, #4294967295 @ 0xffffffff
  353. 800061c: d213 bcs.n 8000646 <__udivmoddi4+0x296>
  354. 800061e: 42a3 cmp r3, r4
  355. 8000620: d911 bls.n 8000646 <__udivmoddi4+0x296>
  356. 8000622: 3902 subs r1, #2
  357. 8000624: 4464 add r4, ip
  358. 8000626: 1ae4 subs r4, r4, r3
  359. 8000628: ea41 4100 orr.w r1, r1, r0, lsl #16
  360. 800062c: e739 b.n 80004a2 <__udivmoddi4+0xf2>
  361. 800062e: 4604 mov r4, r0
  362. 8000630: e6f0 b.n 8000414 <__udivmoddi4+0x64>
  363. 8000632: 4608 mov r0, r1
  364. 8000634: e706 b.n 8000444 <__udivmoddi4+0x94>
  365. 8000636: 45c8 cmp r8, r9
  366. 8000638: d2ae bcs.n 8000598 <__udivmoddi4+0x1e8>
  367. 800063a: ebb9 0e02 subs.w lr, r9, r2
  368. 800063e: eb63 0c07 sbc.w ip, r3, r7
  369. 8000642: 3801 subs r0, #1
  370. 8000644: e7a8 b.n 8000598 <__udivmoddi4+0x1e8>
  371. 8000646: 4631 mov r1, r6
  372. 8000648: e7ed b.n 8000626 <__udivmoddi4+0x276>
  373. 800064a: 4603 mov r3, r0
  374. 800064c: e799 b.n 8000582 <__udivmoddi4+0x1d2>
  375. 800064e: 4630 mov r0, r6
  376. 8000650: e7d4 b.n 80005fc <__udivmoddi4+0x24c>
  377. 8000652: 46d6 mov lr, sl
  378. 8000654: e77f b.n 8000556 <__udivmoddi4+0x1a6>
  379. 8000656: 4463 add r3, ip
  380. 8000658: 3802 subs r0, #2
  381. 800065a: e74d b.n 80004f8 <__udivmoddi4+0x148>
  382. 800065c: 4606 mov r6, r0
  383. 800065e: 4623 mov r3, r4
  384. 8000660: 4608 mov r0, r1
  385. 8000662: e70f b.n 8000484 <__udivmoddi4+0xd4>
  386. 8000664: 3e02 subs r6, #2
  387. 8000666: 4463 add r3, ip
  388. 8000668: e730 b.n 80004cc <__udivmoddi4+0x11c>
  389. 800066a: bf00 nop
  390. 0800066c <__aeabi_idiv0>:
  391. 800066c: 4770 bx lr
  392. 800066e: bf00 nop
  393. 08000670 <vApplicationStackOverflowHook>:
  394. /* Hook prototypes */
  395. void vApplicationStackOverflowHook(xTaskHandle xTask, signed char *pcTaskName);
  396. /* USER CODE BEGIN 4 */
  397. void vApplicationStackOverflowHook(xTaskHandle xTask, signed char *pcTaskName)
  398. {
  399. 8000670: b480 push {r7}
  400. 8000672: b083 sub sp, #12
  401. 8000674: af00 add r7, sp, #0
  402. 8000676: 6078 str r0, [r7, #4]
  403. 8000678: 6039 str r1, [r7, #0]
  404. /* Run time stack overflow checking is performed if
  405. configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook function is
  406. called if a stack overflow is detected. */
  407. }
  408. 800067a: bf00 nop
  409. 800067c: 370c adds r7, #12
  410. 800067e: 46bd mov sp, r7
  411. 8000680: f85d 7b04 ldr.w r7, [sp], #4
  412. 8000684: 4770 bx lr
  413. ...
  414. 08000688 <__io_putchar>:
  415. /* USER CODE END PFP */
  416. /* Private user code ---------------------------------------------------------*/
  417. /* USER CODE BEGIN 0 */
  418. int __io_putchar(int ch)
  419. {
  420. 8000688: b580 push {r7, lr}
  421. 800068a: b082 sub sp, #8
  422. 800068c: af00 add r7, sp, #0
  423. 800068e: 6078 str r0, [r7, #4]
  424. HAL_UART_Transmit(&huart8, (uint8_t *)&ch, 1, 0xFFFF); // Use UART8 as debug interface
  425. 8000690: 1d39 adds r1, r7, #4
  426. 8000692: f64f 73ff movw r3, #65535 @ 0xffff
  427. 8000696: 2201 movs r2, #1
  428. 8000698: 4803 ldr r0, [pc, #12] @ (80006a8 <__io_putchar+0x20>)
  429. 800069a: f00e ff61 bl 800f560 <HAL_UART_Transmit>
  430. // ITM_SendChar(ch); // Use SWV as debug interface
  431. return ch;
  432. 800069e: 687b ldr r3, [r7, #4]
  433. }
  434. 80006a0: 4618 mov r0, r3
  435. 80006a2: 3708 adds r7, #8
  436. 80006a4: 46bd mov sp, r7
  437. 80006a6: bd80 pop {r7, pc}
  438. 80006a8: 24000504 .word 0x24000504
  439. 080006ac <HAL_GPIO_EXTI_Callback>:
  440. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  441. {
  442. 80006ac: b580 push {r7, lr}
  443. 80006ae: b084 sub sp, #16
  444. 80006b0: af00 add r7, sp, #0
  445. 80006b2: 4603 mov r3, r0
  446. 80006b4: 80fb strh r3, [r7, #6]
  447. LimiterSwitchData limiterSwitchData = { 0 };
  448. 80006b6: 2300 movs r3, #0
  449. 80006b8: 60fb str r3, [r7, #12]
  450. limiterSwitchData.gpioPin = GPIO_Pin;
  451. 80006ba: 88fb ldrh r3, [r7, #6]
  452. 80006bc: 81bb strh r3, [r7, #12]
  453. limiterSwitchData.pinState = HAL_GPIO_ReadPin(GPIOD, GPIO_Pin);
  454. 80006be: 88fb ldrh r3, [r7, #6]
  455. 80006c0: 4619 mov r1, r3
  456. 80006c2: 4808 ldr r0, [pc, #32] @ (80006e4 <HAL_GPIO_EXTI_Callback+0x38>)
  457. 80006c4: f009 fbc4 bl 8009e50 <HAL_GPIO_ReadPin>
  458. 80006c8: 4603 mov r3, r0
  459. 80006ca: 73bb strb r3, [r7, #14]
  460. osMessageQueuePut(limiterSwitchDataQueue, &limiterSwitchData, 0, 0);
  461. 80006cc: 4b06 ldr r3, [pc, #24] @ (80006e8 <HAL_GPIO_EXTI_Callback+0x3c>)
  462. 80006ce: 6818 ldr r0, [r3, #0]
  463. 80006d0: f107 010c add.w r1, r7, #12
  464. 80006d4: 2300 movs r3, #0
  465. 80006d6: 2200 movs r2, #0
  466. 80006d8: f012 f8f8 bl 80128cc <osMessageQueuePut>
  467. }
  468. 80006dc: bf00 nop
  469. 80006de: 3710 adds r7, #16
  470. 80006e0: 46bd mov sp, r7
  471. 80006e2: bd80 pop {r7, pc}
  472. 80006e4: 58020c00 .word 0x58020c00
  473. 80006e8: 24000744 .word 0x24000744
  474. 080006ec <main>:
  475. /**
  476. * @brief The application entry point.
  477. * @retval int
  478. */
  479. int main(void)
  480. {
  481. 80006ec: b580 push {r7, lr}
  482. 80006ee: b084 sub sp, #16
  483. 80006f0: af00 add r7, sp, #0
  484. /* USER CODE BEGIN 1 */
  485. /* USER CODE END 1 */
  486. /* MPU Configuration--------------------------------------------------------*/
  487. MPU_Config();
  488. 80006f2: f001 f931 bl 8001958 <MPU_Config>
  489. \details Turns on I-Cache
  490. */
  491. __STATIC_FORCEINLINE void SCB_EnableICache (void)
  492. {
  493. #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
  494. if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */
  495. 80006f6: 4b5c ldr r3, [pc, #368] @ (8000868 <main+0x17c>)
  496. 80006f8: 695b ldr r3, [r3, #20]
  497. 80006fa: f403 3300 and.w r3, r3, #131072 @ 0x20000
  498. 80006fe: 2b00 cmp r3, #0
  499. 8000700: d11b bne.n 800073a <main+0x4e>
  500. \details Acts as a special kind of Data Memory Barrier.
  501. It completes when all explicit memory accesses before this instruction complete.
  502. */
  503. __STATIC_FORCEINLINE void __DSB(void)
  504. {
  505. __ASM volatile ("dsb 0xF":::"memory");
  506. 8000702: f3bf 8f4f dsb sy
  507. }
  508. 8000706: bf00 nop
  509. __ASM volatile ("isb 0xF":::"memory");
  510. 8000708: f3bf 8f6f isb sy
  511. }
  512. 800070c: bf00 nop
  513. __DSB();
  514. __ISB();
  515. SCB->ICIALLU = 0UL; /* invalidate I-Cache */
  516. 800070e: 4b56 ldr r3, [pc, #344] @ (8000868 <main+0x17c>)
  517. 8000710: 2200 movs r2, #0
  518. 8000712: f8c3 2250 str.w r2, [r3, #592] @ 0x250
  519. __ASM volatile ("dsb 0xF":::"memory");
  520. 8000716: f3bf 8f4f dsb sy
  521. }
  522. 800071a: bf00 nop
  523. __ASM volatile ("isb 0xF":::"memory");
  524. 800071c: f3bf 8f6f isb sy
  525. }
  526. 8000720: bf00 nop
  527. __DSB();
  528. __ISB();
  529. SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */
  530. 8000722: 4b51 ldr r3, [pc, #324] @ (8000868 <main+0x17c>)
  531. 8000724: 695b ldr r3, [r3, #20]
  532. 8000726: 4a50 ldr r2, [pc, #320] @ (8000868 <main+0x17c>)
  533. 8000728: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  534. 800072c: 6153 str r3, [r2, #20]
  535. __ASM volatile ("dsb 0xF":::"memory");
  536. 800072e: f3bf 8f4f dsb sy
  537. }
  538. 8000732: bf00 nop
  539. __ASM volatile ("isb 0xF":::"memory");
  540. 8000734: f3bf 8f6f isb sy
  541. }
  542. 8000738: e000 b.n 800073c <main+0x50>
  543. if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */
  544. 800073a: bf00 nop
  545. #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
  546. uint32_t ccsidr;
  547. uint32_t sets;
  548. uint32_t ways;
  549. if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */
  550. 800073c: 4b4a ldr r3, [pc, #296] @ (8000868 <main+0x17c>)
  551. 800073e: 695b ldr r3, [r3, #20]
  552. 8000740: f403 3380 and.w r3, r3, #65536 @ 0x10000
  553. 8000744: 2b00 cmp r3, #0
  554. 8000746: d138 bne.n 80007ba <main+0xce>
  555. SCB->CSSELR = 0U; /* select Level 1 data cache */
  556. 8000748: 4b47 ldr r3, [pc, #284] @ (8000868 <main+0x17c>)
  557. 800074a: 2200 movs r2, #0
  558. 800074c: f8c3 2084 str.w r2, [r3, #132] @ 0x84
  559. __ASM volatile ("dsb 0xF":::"memory");
  560. 8000750: f3bf 8f4f dsb sy
  561. }
  562. 8000754: bf00 nop
  563. __DSB();
  564. ccsidr = SCB->CCSIDR;
  565. 8000756: 4b44 ldr r3, [pc, #272] @ (8000868 <main+0x17c>)
  566. 8000758: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  567. 800075c: 60fb str r3, [r7, #12]
  568. /* invalidate D-Cache */
  569. sets = (uint32_t)(CCSIDR_SETS(ccsidr));
  570. 800075e: 68fb ldr r3, [r7, #12]
  571. 8000760: 0b5b lsrs r3, r3, #13
  572. 8000762: f3c3 030e ubfx r3, r3, #0, #15
  573. 8000766: 60bb str r3, [r7, #8]
  574. do {
  575. ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
  576. 8000768: 68fb ldr r3, [r7, #12]
  577. 800076a: 08db lsrs r3, r3, #3
  578. 800076c: f3c3 0309 ubfx r3, r3, #0, #10
  579. 8000770: 607b str r3, [r7, #4]
  580. do {
  581. SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
  582. 8000772: 68bb ldr r3, [r7, #8]
  583. 8000774: 015a lsls r2, r3, #5
  584. 8000776: f643 73e0 movw r3, #16352 @ 0x3fe0
  585. 800077a: 4013 ands r3, r2
  586. ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) );
  587. 800077c: 687a ldr r2, [r7, #4]
  588. 800077e: 0792 lsls r2, r2, #30
  589. SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
  590. 8000780: 4939 ldr r1, [pc, #228] @ (8000868 <main+0x17c>)
  591. 8000782: 4313 orrs r3, r2
  592. 8000784: f8c1 3260 str.w r3, [r1, #608] @ 0x260
  593. #if defined ( __CC_ARM )
  594. __schedule_barrier();
  595. #endif
  596. } while (ways-- != 0U);
  597. 8000788: 687b ldr r3, [r7, #4]
  598. 800078a: 1e5a subs r2, r3, #1
  599. 800078c: 607a str r2, [r7, #4]
  600. 800078e: 2b00 cmp r3, #0
  601. 8000790: d1ef bne.n 8000772 <main+0x86>
  602. } while(sets-- != 0U);
  603. 8000792: 68bb ldr r3, [r7, #8]
  604. 8000794: 1e5a subs r2, r3, #1
  605. 8000796: 60ba str r2, [r7, #8]
  606. 8000798: 2b00 cmp r3, #0
  607. 800079a: d1e5 bne.n 8000768 <main+0x7c>
  608. __ASM volatile ("dsb 0xF":::"memory");
  609. 800079c: f3bf 8f4f dsb sy
  610. }
  611. 80007a0: bf00 nop
  612. __DSB();
  613. SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */
  614. 80007a2: 4b31 ldr r3, [pc, #196] @ (8000868 <main+0x17c>)
  615. 80007a4: 695b ldr r3, [r3, #20]
  616. 80007a6: 4a30 ldr r2, [pc, #192] @ (8000868 <main+0x17c>)
  617. 80007a8: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  618. 80007ac: 6153 str r3, [r2, #20]
  619. __ASM volatile ("dsb 0xF":::"memory");
  620. 80007ae: f3bf 8f4f dsb sy
  621. }
  622. 80007b2: bf00 nop
  623. __ASM volatile ("isb 0xF":::"memory");
  624. 80007b4: f3bf 8f6f isb sy
  625. }
  626. 80007b8: e000 b.n 80007bc <main+0xd0>
  627. if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */
  628. 80007ba: bf00 nop
  629. SCB_EnableDCache();
  630. /* MCU Configuration--------------------------------------------------------*/
  631. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  632. HAL_Init();
  633. 80007bc: f004 f902 bl 80049c4 <HAL_Init>
  634. /* USER CODE BEGIN Init */
  635. /* USER CODE END Init */
  636. /* Configure the system clock */
  637. SystemClock_Config();
  638. 80007c0: f000 f872 bl 80008a8 <SystemClock_Config>
  639. /* Configure the peripherals common clocks */
  640. PeriphCommonClock_Config();
  641. 80007c4: f000 f8ec bl 80009a0 <PeriphCommonClock_Config>
  642. /* USER CODE BEGIN SysInit */
  643. /* USER CODE END SysInit */
  644. /* Initialize all configured peripherals */
  645. MX_GPIO_Init();
  646. 80007c8: f000 fe28 bl 800141c <MX_GPIO_Init>
  647. MX_DMA_Init();
  648. 80007cc: f000 fdf6 bl 80013bc <MX_DMA_Init>
  649. MX_RNG_Init();
  650. 80007d0: f000 fbaa bl 8000f28 <MX_RNG_Init>
  651. MX_USART1_UART_Init();
  652. 80007d4: f000 fda2 bl 800131c <MX_USART1_UART_Init>
  653. MX_ADC1_Init();
  654. 80007d8: f000 f912 bl 8000a00 <MX_ADC1_Init>
  655. MX_UART8_Init();
  656. 80007dc: f000 fd52 bl 8001284 <MX_UART8_Init>
  657. MX_CRC_Init();
  658. 80007e0: f000 fb3c bl 8000e5c <MX_CRC_Init>
  659. MX_ADC2_Init();
  660. 80007e4: f000 f9f6 bl 8000bd4 <MX_ADC2_Init>
  661. MX_ADC3_Init();
  662. 80007e8: f000 fa88 bl 8000cfc <MX_ADC3_Init>
  663. MX_TIM2_Init();
  664. 80007ec: f000 fc4e bl 800108c <MX_TIM2_Init>
  665. MX_TIM1_Init();
  666. 80007f0: f000 fbb0 bl 8000f54 <MX_TIM1_Init>
  667. MX_TIM3_Init();
  668. 80007f4: f000 fc9a bl 800112c <MX_TIM3_Init>
  669. MX_DAC1_Init();
  670. 80007f8: f000 fb5a bl 8000eb0 <MX_DAC1_Init>
  671. /* USER CODE BEGIN 2 */
  672. /* USER CODE END 2 */
  673. /* Init scheduler */
  674. osKernelInitialize();
  675. 80007fc: f011 fcf6 bl 80121ec <osKernelInitialize>
  676. /* add semaphores, ... */
  677. /* USER CODE END RTOS_SEMAPHORES */
  678. /* Create the timer(s) */
  679. /* creation of debugLedTimer */
  680. debugLedTimerHandle = osTimerNew(debugLedTimerCallback, osTimerOnce, NULL, &debugLedTimer_attributes);
  681. 8000800: 4b1a ldr r3, [pc, #104] @ (800086c <main+0x180>)
  682. 8000802: 2200 movs r2, #0
  683. 8000804: 2100 movs r1, #0
  684. 8000806: 481a ldr r0, [pc, #104] @ (8000870 <main+0x184>)
  685. 8000808: f011 fdfe bl 8012408 <osTimerNew>
  686. 800080c: 4603 mov r3, r0
  687. 800080e: 4a19 ldr r2, [pc, #100] @ (8000874 <main+0x188>)
  688. 8000810: 6013 str r3, [r2, #0]
  689. /* creation of fanTimer */
  690. fanTimerHandle = osTimerNew(fanTimerCallback, osTimerOnce, NULL, &fanTimer_attributes);
  691. 8000812: 4b19 ldr r3, [pc, #100] @ (8000878 <main+0x18c>)
  692. 8000814: 2200 movs r2, #0
  693. 8000816: 2100 movs r1, #0
  694. 8000818: 4818 ldr r0, [pc, #96] @ (800087c <main+0x190>)
  695. 800081a: f011 fdf5 bl 8012408 <osTimerNew>
  696. 800081e: 4603 mov r3, r0
  697. 8000820: 4a17 ldr r2, [pc, #92] @ (8000880 <main+0x194>)
  698. 8000822: 6013 str r3, [r2, #0]
  699. /* creation of motorXTimer */
  700. motorXTimerHandle = osTimerNew(motorXTimerCallback, osTimerPeriodic, NULL, &motorXTimer_attributes);
  701. 8000824: 4b17 ldr r3, [pc, #92] @ (8000884 <main+0x198>)
  702. 8000826: 2200 movs r2, #0
  703. 8000828: 2101 movs r1, #1
  704. 800082a: 4817 ldr r0, [pc, #92] @ (8000888 <main+0x19c>)
  705. 800082c: f011 fdec bl 8012408 <osTimerNew>
  706. 8000830: 4603 mov r3, r0
  707. 8000832: 4a16 ldr r2, [pc, #88] @ (800088c <main+0x1a0>)
  708. 8000834: 6013 str r3, [r2, #0]
  709. /* creation of motorYTimer */
  710. motorYTimerHandle = osTimerNew(motorYTimerCallback, osTimerPeriodic, NULL, &motorYTimer_attributes);
  711. 8000836: 4b16 ldr r3, [pc, #88] @ (8000890 <main+0x1a4>)
  712. 8000838: 2200 movs r2, #0
  713. 800083a: 2101 movs r1, #1
  714. 800083c: 4815 ldr r0, [pc, #84] @ (8000894 <main+0x1a8>)
  715. 800083e: f011 fde3 bl 8012408 <osTimerNew>
  716. 8000842: 4603 mov r3, r0
  717. 8000844: 4a14 ldr r2, [pc, #80] @ (8000898 <main+0x1ac>)
  718. 8000846: 6013 str r3, [r2, #0]
  719. /* add queues, ... */
  720. /* USER CODE END RTOS_QUEUES */
  721. /* Create the thread(s) */
  722. /* creation of defaultTask */
  723. defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
  724. 8000848: 4a14 ldr r2, [pc, #80] @ (800089c <main+0x1b0>)
  725. 800084a: 2100 movs r1, #0
  726. 800084c: 4814 ldr r0, [pc, #80] @ (80008a0 <main+0x1b4>)
  727. 800084e: f011 fd17 bl 8012280 <osThreadNew>
  728. 8000852: 4603 mov r3, r0
  729. 8000854: 4a13 ldr r2, [pc, #76] @ (80008a4 <main+0x1b8>)
  730. 8000856: 6013 str r3, [r2, #0]
  731. /* USER CODE BEGIN RTOS_THREADS */
  732. /* add threads, ... */
  733. // Uart8TasksInit();
  734. UartTasksInit();
  735. 8000858: f003 f96e bl 8003b38 <UartTasksInit>
  736. #ifdef USER_MOCKS
  737. MockMeasurmetsTaskInit();
  738. #else
  739. MeasTasksInit();
  740. 800085c: f001 f8e6 bl 8001a2c <MeasTasksInit>
  741. /* USER CODE BEGIN RTOS_EVENTS */
  742. /* add events, ... */
  743. /* USER CODE END RTOS_EVENTS */
  744. /* Start scheduler */
  745. osKernelStart();
  746. 8000860: f011 fce8 bl 8012234 <osKernelStart>
  747. /* We should never get here as control is now taken by the scheduler */
  748. /* Infinite loop */
  749. /* USER CODE BEGIN WHILE */
  750. while (1)
  751. 8000864: bf00 nop
  752. 8000866: e7fd b.n 8000864 <main+0x178>
  753. 8000868: e000ed00 .word 0xe000ed00
  754. 800086c: 08017588 .word 0x08017588
  755. 8000870: 080018ad .word 0x080018ad
  756. 8000874: 24000630 .word 0x24000630
  757. 8000878: 08017598 .word 0x08017598
  758. 800087c: 080018c5 .word 0x080018c5
  759. 8000880: 24000660 .word 0x24000660
  760. 8000884: 080175a8 .word 0x080175a8
  761. 8000888: 080018e1 .word 0x080018e1
  762. 800088c: 24000690 .word 0x24000690
  763. 8000890: 080175b8 .word 0x080175b8
  764. 8000894: 0800191d .word 0x0800191d
  765. 8000898: 240006c0 .word 0x240006c0
  766. 800089c: 08017564 .word 0x08017564
  767. 80008a0: 08001785 .word 0x08001785
  768. 80008a4: 2400062c .word 0x2400062c
  769. 080008a8 <SystemClock_Config>:
  770. /**
  771. * @brief System Clock Configuration
  772. * @retval None
  773. */
  774. void SystemClock_Config(void)
  775. {
  776. 80008a8: b580 push {r7, lr}
  777. 80008aa: b09c sub sp, #112 @ 0x70
  778. 80008ac: af00 add r7, sp, #0
  779. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  780. 80008ae: f107 0324 add.w r3, r7, #36 @ 0x24
  781. 80008b2: 224c movs r2, #76 @ 0x4c
  782. 80008b4: 2100 movs r1, #0
  783. 80008b6: 4618 mov r0, r3
  784. 80008b8: f015 ff4d bl 8016756 <memset>
  785. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  786. 80008bc: 1d3b adds r3, r7, #4
  787. 80008be: 2220 movs r2, #32
  788. 80008c0: 2100 movs r1, #0
  789. 80008c2: 4618 mov r0, r3
  790. 80008c4: f015 ff47 bl 8016756 <memset>
  791. /** Supply configuration update enable
  792. */
  793. HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
  794. 80008c8: 2002 movs r0, #2
  795. 80008ca: f009 fbb1 bl 800a030 <HAL_PWREx_ConfigSupply>
  796. /** Configure the main internal regulator output voltage
  797. */
  798. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  799. 80008ce: 2300 movs r3, #0
  800. 80008d0: 603b str r3, [r7, #0]
  801. 80008d2: 4b31 ldr r3, [pc, #196] @ (8000998 <SystemClock_Config+0xf0>)
  802. 80008d4: 6adb ldr r3, [r3, #44] @ 0x2c
  803. 80008d6: 4a30 ldr r2, [pc, #192] @ (8000998 <SystemClock_Config+0xf0>)
  804. 80008d8: f023 0301 bic.w r3, r3, #1
  805. 80008dc: 62d3 str r3, [r2, #44] @ 0x2c
  806. 80008de: 4b2e ldr r3, [pc, #184] @ (8000998 <SystemClock_Config+0xf0>)
  807. 80008e0: 6adb ldr r3, [r3, #44] @ 0x2c
  808. 80008e2: f003 0301 and.w r3, r3, #1
  809. 80008e6: 603b str r3, [r7, #0]
  810. 80008e8: 4b2c ldr r3, [pc, #176] @ (800099c <SystemClock_Config+0xf4>)
  811. 80008ea: 699b ldr r3, [r3, #24]
  812. 80008ec: 4a2b ldr r2, [pc, #172] @ (800099c <SystemClock_Config+0xf4>)
  813. 80008ee: f443 4340 orr.w r3, r3, #49152 @ 0xc000
  814. 80008f2: 6193 str r3, [r2, #24]
  815. 80008f4: 4b29 ldr r3, [pc, #164] @ (800099c <SystemClock_Config+0xf4>)
  816. 80008f6: 699b ldr r3, [r3, #24]
  817. 80008f8: f403 4340 and.w r3, r3, #49152 @ 0xc000
  818. 80008fc: 603b str r3, [r7, #0]
  819. 80008fe: 683b ldr r3, [r7, #0]
  820. while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
  821. 8000900: bf00 nop
  822. 8000902: 4b26 ldr r3, [pc, #152] @ (800099c <SystemClock_Config+0xf4>)
  823. 8000904: 699b ldr r3, [r3, #24]
  824. 8000906: f403 5300 and.w r3, r3, #8192 @ 0x2000
  825. 800090a: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  826. 800090e: d1f8 bne.n 8000902 <SystemClock_Config+0x5a>
  827. /** Initializes the RCC Oscillators according to the specified parameters
  828. * in the RCC_OscInitTypeDef structure.
  829. */
  830. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSE;
  831. 8000910: 2321 movs r3, #33 @ 0x21
  832. 8000912: 627b str r3, [r7, #36] @ 0x24
  833. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  834. 8000914: f44f 3380 mov.w r3, #65536 @ 0x10000
  835. 8000918: 62bb str r3, [r7, #40] @ 0x28
  836. RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  837. 800091a: 2301 movs r3, #1
  838. 800091c: 63fb str r3, [r7, #60] @ 0x3c
  839. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  840. 800091e: 2302 movs r3, #2
  841. 8000920: 64bb str r3, [r7, #72] @ 0x48
  842. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  843. 8000922: 2302 movs r3, #2
  844. 8000924: 64fb str r3, [r7, #76] @ 0x4c
  845. RCC_OscInitStruct.PLL.PLLM = 5;
  846. 8000926: 2305 movs r3, #5
  847. 8000928: 653b str r3, [r7, #80] @ 0x50
  848. RCC_OscInitStruct.PLL.PLLN = 160;
  849. 800092a: 23a0 movs r3, #160 @ 0xa0
  850. 800092c: 657b str r3, [r7, #84] @ 0x54
  851. RCC_OscInitStruct.PLL.PLLP = 2;
  852. 800092e: 2302 movs r3, #2
  853. 8000930: 65bb str r3, [r7, #88] @ 0x58
  854. RCC_OscInitStruct.PLL.PLLQ = 2;
  855. 8000932: 2302 movs r3, #2
  856. 8000934: 65fb str r3, [r7, #92] @ 0x5c
  857. RCC_OscInitStruct.PLL.PLLR = 2;
  858. 8000936: 2302 movs r3, #2
  859. 8000938: 663b str r3, [r7, #96] @ 0x60
  860. RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
  861. 800093a: 2308 movs r3, #8
  862. 800093c: 667b str r3, [r7, #100] @ 0x64
  863. RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
  864. 800093e: 2300 movs r3, #0
  865. 8000940: 66bb str r3, [r7, #104] @ 0x68
  866. RCC_OscInitStruct.PLL.PLLFRACN = 0;
  867. 8000942: 2300 movs r3, #0
  868. 8000944: 66fb str r3, [r7, #108] @ 0x6c
  869. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  870. 8000946: f107 0324 add.w r3, r7, #36 @ 0x24
  871. 800094a: 4618 mov r0, r3
  872. 800094c: f009 fc30 bl 800a1b0 <HAL_RCC_OscConfig>
  873. 8000950: 4603 mov r3, r0
  874. 8000952: 2b00 cmp r3, #0
  875. 8000954: d001 beq.n 800095a <SystemClock_Config+0xb2>
  876. {
  877. Error_Handler();
  878. 8000956: f001 f863 bl 8001a20 <Error_Handler>
  879. }
  880. /** Initializes the CPU, AHB and APB buses clocks
  881. */
  882. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  883. 800095a: 233f movs r3, #63 @ 0x3f
  884. 800095c: 607b str r3, [r7, #4]
  885. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
  886. |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
  887. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  888. 800095e: 2303 movs r3, #3
  889. 8000960: 60bb str r3, [r7, #8]
  890. RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  891. 8000962: 2300 movs r3, #0
  892. 8000964: 60fb str r3, [r7, #12]
  893. RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
  894. 8000966: 2308 movs r3, #8
  895. 8000968: 613b str r3, [r7, #16]
  896. RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
  897. 800096a: 2340 movs r3, #64 @ 0x40
  898. 800096c: 617b str r3, [r7, #20]
  899. RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
  900. 800096e: 2340 movs r3, #64 @ 0x40
  901. 8000970: 61bb str r3, [r7, #24]
  902. RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
  903. 8000972: f44f 6380 mov.w r3, #1024 @ 0x400
  904. 8000976: 61fb str r3, [r7, #28]
  905. RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
  906. 8000978: 2340 movs r3, #64 @ 0x40
  907. 800097a: 623b str r3, [r7, #32]
  908. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  909. 800097c: 1d3b adds r3, r7, #4
  910. 800097e: 2102 movs r1, #2
  911. 8000980: 4618 mov r0, r3
  912. 8000982: f00a f86f bl 800aa64 <HAL_RCC_ClockConfig>
  913. 8000986: 4603 mov r3, r0
  914. 8000988: 2b00 cmp r3, #0
  915. 800098a: d001 beq.n 8000990 <SystemClock_Config+0xe8>
  916. {
  917. Error_Handler();
  918. 800098c: f001 f848 bl 8001a20 <Error_Handler>
  919. }
  920. }
  921. 8000990: bf00 nop
  922. 8000992: 3770 adds r7, #112 @ 0x70
  923. 8000994: 46bd mov sp, r7
  924. 8000996: bd80 pop {r7, pc}
  925. 8000998: 58000400 .word 0x58000400
  926. 800099c: 58024800 .word 0x58024800
  927. 080009a0 <PeriphCommonClock_Config>:
  928. /**
  929. * @brief Peripherals Common Clock Configuration
  930. * @retval None
  931. */
  932. void PeriphCommonClock_Config(void)
  933. {
  934. 80009a0: b580 push {r7, lr}
  935. 80009a2: b0b0 sub sp, #192 @ 0xc0
  936. 80009a4: af00 add r7, sp, #0
  937. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  938. 80009a6: 463b mov r3, r7
  939. 80009a8: 22c0 movs r2, #192 @ 0xc0
  940. 80009aa: 2100 movs r1, #0
  941. 80009ac: 4618 mov r0, r3
  942. 80009ae: f015 fed2 bl 8016756 <memset>
  943. /** Initializes the peripherals clock
  944. */
  945. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC;
  946. 80009b2: f44f 2200 mov.w r2, #524288 @ 0x80000
  947. 80009b6: f04f 0300 mov.w r3, #0
  948. 80009ba: e9c7 2300 strd r2, r3, [r7]
  949. PeriphClkInitStruct.PLL2.PLL2M = 5;
  950. 80009be: 2305 movs r3, #5
  951. 80009c0: 60bb str r3, [r7, #8]
  952. PeriphClkInitStruct.PLL2.PLL2N = 52;
  953. 80009c2: 2334 movs r3, #52 @ 0x34
  954. 80009c4: 60fb str r3, [r7, #12]
  955. PeriphClkInitStruct.PLL2.PLL2P = 26;
  956. 80009c6: 231a movs r3, #26
  957. 80009c8: 613b str r3, [r7, #16]
  958. PeriphClkInitStruct.PLL2.PLL2Q = 2;
  959. 80009ca: 2302 movs r3, #2
  960. 80009cc: 617b str r3, [r7, #20]
  961. PeriphClkInitStruct.PLL2.PLL2R = 2;
  962. 80009ce: 2302 movs r3, #2
  963. 80009d0: 61bb str r3, [r7, #24]
  964. PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_2;
  965. 80009d2: 2380 movs r3, #128 @ 0x80
  966. 80009d4: 61fb str r3, [r7, #28]
  967. PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE;
  968. 80009d6: 2300 movs r3, #0
  969. 80009d8: 623b str r3, [r7, #32]
  970. PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
  971. 80009da: 2300 movs r3, #0
  972. 80009dc: 627b str r3, [r7, #36] @ 0x24
  973. PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2;
  974. 80009de: 2300 movs r3, #0
  975. 80009e0: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  976. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  977. 80009e4: 463b mov r3, r7
  978. 80009e6: 4618 mov r0, r3
  979. 80009e8: f00a fc0a bl 800b200 <HAL_RCCEx_PeriphCLKConfig>
  980. 80009ec: 4603 mov r3, r0
  981. 80009ee: 2b00 cmp r3, #0
  982. 80009f0: d001 beq.n 80009f6 <PeriphCommonClock_Config+0x56>
  983. {
  984. Error_Handler();
  985. 80009f2: f001 f815 bl 8001a20 <Error_Handler>
  986. }
  987. }
  988. 80009f6: bf00 nop
  989. 80009f8: 37c0 adds r7, #192 @ 0xc0
  990. 80009fa: 46bd mov sp, r7
  991. 80009fc: bd80 pop {r7, pc}
  992. ...
  993. 08000a00 <MX_ADC1_Init>:
  994. * @brief ADC1 Initialization Function
  995. * @param None
  996. * @retval None
  997. */
  998. static void MX_ADC1_Init(void)
  999. {
  1000. 8000a00: b580 push {r7, lr}
  1001. 8000a02: b08a sub sp, #40 @ 0x28
  1002. 8000a04: af00 add r7, sp, #0
  1003. /* USER CODE BEGIN ADC1_Init 0 */
  1004. /* USER CODE END ADC1_Init 0 */
  1005. ADC_MultiModeTypeDef multimode = {0};
  1006. 8000a06: f107 031c add.w r3, r7, #28
  1007. 8000a0a: 2200 movs r2, #0
  1008. 8000a0c: 601a str r2, [r3, #0]
  1009. 8000a0e: 605a str r2, [r3, #4]
  1010. 8000a10: 609a str r2, [r3, #8]
  1011. ADC_ChannelConfTypeDef sConfig = {0};
  1012. 8000a12: 463b mov r3, r7
  1013. 8000a14: 2200 movs r2, #0
  1014. 8000a16: 601a str r2, [r3, #0]
  1015. 8000a18: 605a str r2, [r3, #4]
  1016. 8000a1a: 609a str r2, [r3, #8]
  1017. 8000a1c: 60da str r2, [r3, #12]
  1018. 8000a1e: 611a str r2, [r3, #16]
  1019. 8000a20: 615a str r2, [r3, #20]
  1020. 8000a22: 619a str r2, [r3, #24]
  1021. /* USER CODE END ADC1_Init 1 */
  1022. /** Common config
  1023. */
  1024. hadc1.Instance = ADC1;
  1025. 8000a24: 4b62 ldr r3, [pc, #392] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1026. 8000a26: 4a63 ldr r2, [pc, #396] @ (8000bb4 <MX_ADC1_Init+0x1b4>)
  1027. 8000a28: 601a str r2, [r3, #0]
  1028. hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  1029. 8000a2a: 4b61 ldr r3, [pc, #388] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1030. 8000a2c: 2200 movs r2, #0
  1031. 8000a2e: 605a str r2, [r3, #4]
  1032. hadc1.Init.Resolution = ADC_RESOLUTION_16B;
  1033. 8000a30: 4b5f ldr r3, [pc, #380] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1034. 8000a32: 2200 movs r2, #0
  1035. 8000a34: 609a str r2, [r3, #8]
  1036. hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
  1037. 8000a36: 4b5e ldr r3, [pc, #376] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1038. 8000a38: 2201 movs r2, #1
  1039. 8000a3a: 60da str r2, [r3, #12]
  1040. hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  1041. 8000a3c: 4b5c ldr r3, [pc, #368] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1042. 8000a3e: 2208 movs r2, #8
  1043. 8000a40: 611a str r2, [r3, #16]
  1044. hadc1.Init.LowPowerAutoWait = DISABLE;
  1045. 8000a42: 4b5b ldr r3, [pc, #364] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1046. 8000a44: 2200 movs r2, #0
  1047. 8000a46: 751a strb r2, [r3, #20]
  1048. hadc1.Init.ContinuousConvMode = ENABLE;
  1049. 8000a48: 4b59 ldr r3, [pc, #356] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1050. 8000a4a: 2201 movs r2, #1
  1051. 8000a4c: 755a strb r2, [r3, #21]
  1052. hadc1.Init.NbrOfConversion = 7;
  1053. 8000a4e: 4b58 ldr r3, [pc, #352] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1054. 8000a50: 2207 movs r2, #7
  1055. 8000a52: 619a str r2, [r3, #24]
  1056. hadc1.Init.DiscontinuousConvMode = DISABLE;
  1057. 8000a54: 4b56 ldr r3, [pc, #344] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1058. 8000a56: 2200 movs r2, #0
  1059. 8000a58: 771a strb r2, [r3, #28]
  1060. hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T2_TRGO;
  1061. 8000a5a: 4b55 ldr r3, [pc, #340] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1062. 8000a5c: f44f 62ac mov.w r2, #1376 @ 0x560
  1063. 8000a60: 625a str r2, [r3, #36] @ 0x24
  1064. hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  1065. 8000a62: 4b53 ldr r3, [pc, #332] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1066. 8000a64: f44f 6280 mov.w r2, #1024 @ 0x400
  1067. 8000a68: 629a str r2, [r3, #40] @ 0x28
  1068. hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;
  1069. 8000a6a: 4b51 ldr r3, [pc, #324] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1070. 8000a6c: 2201 movs r2, #1
  1071. 8000a6e: 62da str r2, [r3, #44] @ 0x2c
  1072. hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  1073. 8000a70: 4b4f ldr r3, [pc, #316] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1074. 8000a72: 2200 movs r2, #0
  1075. 8000a74: 631a str r2, [r3, #48] @ 0x30
  1076. hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  1077. 8000a76: 4b4e ldr r3, [pc, #312] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1078. 8000a78: 2200 movs r2, #0
  1079. 8000a7a: 635a str r2, [r3, #52] @ 0x34
  1080. hadc1.Init.OversamplingMode = DISABLE;
  1081. 8000a7c: 4b4c ldr r3, [pc, #304] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1082. 8000a7e: 2200 movs r2, #0
  1083. 8000a80: f883 2038 strb.w r2, [r3, #56] @ 0x38
  1084. if (HAL_ADC_Init(&hadc1) != HAL_OK)
  1085. 8000a84: 484a ldr r0, [pc, #296] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1086. 8000a86: f004 fa4d bl 8004f24 <HAL_ADC_Init>
  1087. 8000a8a: 4603 mov r3, r0
  1088. 8000a8c: 2b00 cmp r3, #0
  1089. 8000a8e: d001 beq.n 8000a94 <MX_ADC1_Init+0x94>
  1090. {
  1091. Error_Handler();
  1092. 8000a90: f000 ffc6 bl 8001a20 <Error_Handler>
  1093. }
  1094. /** Configure the ADC multi-mode
  1095. */
  1096. multimode.Mode = ADC_MODE_INDEPENDENT;
  1097. 8000a94: 2300 movs r3, #0
  1098. 8000a96: 61fb str r3, [r7, #28]
  1099. if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
  1100. 8000a98: f107 031c add.w r3, r7, #28
  1101. 8000a9c: 4619 mov r1, r3
  1102. 8000a9e: 4844 ldr r0, [pc, #272] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1103. 8000aa0: f005 fb5e bl 8006160 <HAL_ADCEx_MultiModeConfigChannel>
  1104. 8000aa4: 4603 mov r3, r0
  1105. 8000aa6: 2b00 cmp r3, #0
  1106. 8000aa8: d001 beq.n 8000aae <MX_ADC1_Init+0xae>
  1107. {
  1108. Error_Handler();
  1109. 8000aaa: f000 ffb9 bl 8001a20 <Error_Handler>
  1110. }
  1111. /** Configure Regular Channel
  1112. */
  1113. sConfig.Channel = ADC_CHANNEL_8;
  1114. 8000aae: 4b42 ldr r3, [pc, #264] @ (8000bb8 <MX_ADC1_Init+0x1b8>)
  1115. 8000ab0: 603b str r3, [r7, #0]
  1116. sConfig.Rank = ADC_REGULAR_RANK_1;
  1117. 8000ab2: 2306 movs r3, #6
  1118. 8000ab4: 607b str r3, [r7, #4]
  1119. sConfig.SamplingTime = ADC_SAMPLETIME_387CYCLES_5;
  1120. 8000ab6: 2306 movs r3, #6
  1121. 8000ab8: 60bb str r3, [r7, #8]
  1122. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  1123. 8000aba: f240 73ff movw r3, #2047 @ 0x7ff
  1124. 8000abe: 60fb str r3, [r7, #12]
  1125. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  1126. 8000ac0: 2304 movs r3, #4
  1127. 8000ac2: 613b str r3, [r7, #16]
  1128. sConfig.Offset = 0;
  1129. 8000ac4: 2300 movs r3, #0
  1130. 8000ac6: 617b str r3, [r7, #20]
  1131. sConfig.OffsetSignedSaturation = DISABLE;
  1132. 8000ac8: 2300 movs r3, #0
  1133. 8000aca: 767b strb r3, [r7, #25]
  1134. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1135. 8000acc: 463b mov r3, r7
  1136. 8000ace: 4619 mov r1, r3
  1137. 8000ad0: 4837 ldr r0, [pc, #220] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1138. 8000ad2: f004 fca1 bl 8005418 <HAL_ADC_ConfigChannel>
  1139. 8000ad6: 4603 mov r3, r0
  1140. 8000ad8: 2b00 cmp r3, #0
  1141. 8000ada: d001 beq.n 8000ae0 <MX_ADC1_Init+0xe0>
  1142. {
  1143. Error_Handler();
  1144. 8000adc: f000 ffa0 bl 8001a20 <Error_Handler>
  1145. }
  1146. /** Configure Regular Channel
  1147. */
  1148. sConfig.Channel = ADC_CHANNEL_7;
  1149. 8000ae0: 4b36 ldr r3, [pc, #216] @ (8000bbc <MX_ADC1_Init+0x1bc>)
  1150. 8000ae2: 603b str r3, [r7, #0]
  1151. sConfig.Rank = ADC_REGULAR_RANK_2;
  1152. 8000ae4: 230c movs r3, #12
  1153. 8000ae6: 607b str r3, [r7, #4]
  1154. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1155. 8000ae8: 463b mov r3, r7
  1156. 8000aea: 4619 mov r1, r3
  1157. 8000aec: 4830 ldr r0, [pc, #192] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1158. 8000aee: f004 fc93 bl 8005418 <HAL_ADC_ConfigChannel>
  1159. 8000af2: 4603 mov r3, r0
  1160. 8000af4: 2b00 cmp r3, #0
  1161. 8000af6: d001 beq.n 8000afc <MX_ADC1_Init+0xfc>
  1162. {
  1163. Error_Handler();
  1164. 8000af8: f000 ff92 bl 8001a20 <Error_Handler>
  1165. }
  1166. /** Configure Regular Channel
  1167. */
  1168. sConfig.Channel = ADC_CHANNEL_9;
  1169. 8000afc: 4b30 ldr r3, [pc, #192] @ (8000bc0 <MX_ADC1_Init+0x1c0>)
  1170. 8000afe: 603b str r3, [r7, #0]
  1171. sConfig.Rank = ADC_REGULAR_RANK_3;
  1172. 8000b00: 2312 movs r3, #18
  1173. 8000b02: 607b str r3, [r7, #4]
  1174. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1175. 8000b04: 463b mov r3, r7
  1176. 8000b06: 4619 mov r1, r3
  1177. 8000b08: 4829 ldr r0, [pc, #164] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1178. 8000b0a: f004 fc85 bl 8005418 <HAL_ADC_ConfigChannel>
  1179. 8000b0e: 4603 mov r3, r0
  1180. 8000b10: 2b00 cmp r3, #0
  1181. 8000b12: d001 beq.n 8000b18 <MX_ADC1_Init+0x118>
  1182. {
  1183. Error_Handler();
  1184. 8000b14: f000 ff84 bl 8001a20 <Error_Handler>
  1185. }
  1186. /** Configure Regular Channel
  1187. */
  1188. sConfig.Channel = ADC_CHANNEL_16;
  1189. 8000b18: 4b2a ldr r3, [pc, #168] @ (8000bc4 <MX_ADC1_Init+0x1c4>)
  1190. 8000b1a: 603b str r3, [r7, #0]
  1191. sConfig.Rank = ADC_REGULAR_RANK_4;
  1192. 8000b1c: 2318 movs r3, #24
  1193. 8000b1e: 607b str r3, [r7, #4]
  1194. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1195. 8000b20: 463b mov r3, r7
  1196. 8000b22: 4619 mov r1, r3
  1197. 8000b24: 4822 ldr r0, [pc, #136] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1198. 8000b26: f004 fc77 bl 8005418 <HAL_ADC_ConfigChannel>
  1199. 8000b2a: 4603 mov r3, r0
  1200. 8000b2c: 2b00 cmp r3, #0
  1201. 8000b2e: d001 beq.n 8000b34 <MX_ADC1_Init+0x134>
  1202. {
  1203. Error_Handler();
  1204. 8000b30: f000 ff76 bl 8001a20 <Error_Handler>
  1205. }
  1206. /** Configure Regular Channel
  1207. */
  1208. sConfig.Channel = ADC_CHANNEL_17;
  1209. 8000b34: 4b24 ldr r3, [pc, #144] @ (8000bc8 <MX_ADC1_Init+0x1c8>)
  1210. 8000b36: 603b str r3, [r7, #0]
  1211. sConfig.Rank = ADC_REGULAR_RANK_5;
  1212. 8000b38: f44f 7380 mov.w r3, #256 @ 0x100
  1213. 8000b3c: 607b str r3, [r7, #4]
  1214. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1215. 8000b3e: 463b mov r3, r7
  1216. 8000b40: 4619 mov r1, r3
  1217. 8000b42: 481b ldr r0, [pc, #108] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1218. 8000b44: f004 fc68 bl 8005418 <HAL_ADC_ConfigChannel>
  1219. 8000b48: 4603 mov r3, r0
  1220. 8000b4a: 2b00 cmp r3, #0
  1221. 8000b4c: d001 beq.n 8000b52 <MX_ADC1_Init+0x152>
  1222. {
  1223. Error_Handler();
  1224. 8000b4e: f000 ff67 bl 8001a20 <Error_Handler>
  1225. }
  1226. /** Configure Regular Channel
  1227. */
  1228. sConfig.Channel = ADC_CHANNEL_14;
  1229. 8000b52: 4b1e ldr r3, [pc, #120] @ (8000bcc <MX_ADC1_Init+0x1cc>)
  1230. 8000b54: 603b str r3, [r7, #0]
  1231. sConfig.Rank = ADC_REGULAR_RANK_6;
  1232. 8000b56: f44f 7383 mov.w r3, #262 @ 0x106
  1233. 8000b5a: 607b str r3, [r7, #4]
  1234. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1235. 8000b5c: 463b mov r3, r7
  1236. 8000b5e: 4619 mov r1, r3
  1237. 8000b60: 4813 ldr r0, [pc, #76] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1238. 8000b62: f004 fc59 bl 8005418 <HAL_ADC_ConfigChannel>
  1239. 8000b66: 4603 mov r3, r0
  1240. 8000b68: 2b00 cmp r3, #0
  1241. 8000b6a: d001 beq.n 8000b70 <MX_ADC1_Init+0x170>
  1242. {
  1243. Error_Handler();
  1244. 8000b6c: f000 ff58 bl 8001a20 <Error_Handler>
  1245. }
  1246. /** Configure Regular Channel
  1247. */
  1248. sConfig.Channel = ADC_CHANNEL_15;
  1249. 8000b70: 4b17 ldr r3, [pc, #92] @ (8000bd0 <MX_ADC1_Init+0x1d0>)
  1250. 8000b72: 603b str r3, [r7, #0]
  1251. sConfig.Rank = ADC_REGULAR_RANK_7;
  1252. 8000b74: f44f 7386 mov.w r3, #268 @ 0x10c
  1253. 8000b78: 607b str r3, [r7, #4]
  1254. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1255. 8000b7a: 463b mov r3, r7
  1256. 8000b7c: 4619 mov r1, r3
  1257. 8000b7e: 480c ldr r0, [pc, #48] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1258. 8000b80: f004 fc4a bl 8005418 <HAL_ADC_ConfigChannel>
  1259. 8000b84: 4603 mov r3, r0
  1260. 8000b86: 2b00 cmp r3, #0
  1261. 8000b88: d001 beq.n 8000b8e <MX_ADC1_Init+0x18e>
  1262. {
  1263. Error_Handler();
  1264. 8000b8a: f000 ff49 bl 8001a20 <Error_Handler>
  1265. }
  1266. /* USER CODE BEGIN ADC1_Init 2 */
  1267. if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
  1268. 8000b8e: f240 72ff movw r2, #2047 @ 0x7ff
  1269. 8000b92: f04f 1101 mov.w r1, #65537 @ 0x10001
  1270. 8000b96: 4806 ldr r0, [pc, #24] @ (8000bb0 <MX_ADC1_Init+0x1b0>)
  1271. 8000b98: f005 fa7e bl 8006098 <HAL_ADCEx_Calibration_Start>
  1272. 8000b9c: 4603 mov r3, r0
  1273. 8000b9e: 2b00 cmp r3, #0
  1274. 8000ba0: d001 beq.n 8000ba6 <MX_ADC1_Init+0x1a6>
  1275. {
  1276. Error_Handler();
  1277. 8000ba2: f000 ff3d bl 8001a20 <Error_Handler>
  1278. }
  1279. /* USER CODE END ADC1_Init 2 */
  1280. }
  1281. 8000ba6: bf00 nop
  1282. 8000ba8: 3728 adds r7, #40 @ 0x28
  1283. 8000baa: 46bd mov sp, r7
  1284. 8000bac: bd80 pop {r7, pc}
  1285. 8000bae: bf00 nop
  1286. 8000bb0: 24000140 .word 0x24000140
  1287. 8000bb4: 40022000 .word 0x40022000
  1288. 8000bb8: 21800100 .word 0x21800100
  1289. 8000bbc: 1d500080 .word 0x1d500080
  1290. 8000bc0: 25b00200 .word 0x25b00200
  1291. 8000bc4: 43210000 .word 0x43210000
  1292. 8000bc8: 47520000 .word 0x47520000
  1293. 8000bcc: 3ac04000 .word 0x3ac04000
  1294. 8000bd0: 3ef08000 .word 0x3ef08000
  1295. 08000bd4 <MX_ADC2_Init>:
  1296. * @brief ADC2 Initialization Function
  1297. * @param None
  1298. * @retval None
  1299. */
  1300. static void MX_ADC2_Init(void)
  1301. {
  1302. 8000bd4: b580 push {r7, lr}
  1303. 8000bd6: b088 sub sp, #32
  1304. 8000bd8: af00 add r7, sp, #0
  1305. /* USER CODE BEGIN ADC2_Init 0 */
  1306. /* USER CODE END ADC2_Init 0 */
  1307. ADC_ChannelConfTypeDef sConfig = {0};
  1308. 8000bda: 1d3b adds r3, r7, #4
  1309. 8000bdc: 2200 movs r2, #0
  1310. 8000bde: 601a str r2, [r3, #0]
  1311. 8000be0: 605a str r2, [r3, #4]
  1312. 8000be2: 609a str r2, [r3, #8]
  1313. 8000be4: 60da str r2, [r3, #12]
  1314. 8000be6: 611a str r2, [r3, #16]
  1315. 8000be8: 615a str r2, [r3, #20]
  1316. 8000bea: 619a str r2, [r3, #24]
  1317. /* USER CODE END ADC2_Init 1 */
  1318. /** Common config
  1319. */
  1320. hadc2.Instance = ADC2;
  1321. 8000bec: 4b3e ldr r3, [pc, #248] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1322. 8000bee: 4a3f ldr r2, [pc, #252] @ (8000cec <MX_ADC2_Init+0x118>)
  1323. 8000bf0: 601a str r2, [r3, #0]
  1324. hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  1325. 8000bf2: 4b3d ldr r3, [pc, #244] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1326. 8000bf4: 2200 movs r2, #0
  1327. 8000bf6: 605a str r2, [r3, #4]
  1328. hadc2.Init.Resolution = ADC_RESOLUTION_16B;
  1329. 8000bf8: 4b3b ldr r3, [pc, #236] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1330. 8000bfa: 2200 movs r2, #0
  1331. 8000bfc: 609a str r2, [r3, #8]
  1332. hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
  1333. 8000bfe: 4b3a ldr r3, [pc, #232] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1334. 8000c00: 2201 movs r2, #1
  1335. 8000c02: 60da str r2, [r3, #12]
  1336. hadc2.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  1337. 8000c04: 4b38 ldr r3, [pc, #224] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1338. 8000c06: 2208 movs r2, #8
  1339. 8000c08: 611a str r2, [r3, #16]
  1340. hadc2.Init.LowPowerAutoWait = DISABLE;
  1341. 8000c0a: 4b37 ldr r3, [pc, #220] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1342. 8000c0c: 2200 movs r2, #0
  1343. 8000c0e: 751a strb r2, [r3, #20]
  1344. hadc2.Init.ContinuousConvMode = ENABLE;
  1345. 8000c10: 4b35 ldr r3, [pc, #212] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1346. 8000c12: 2201 movs r2, #1
  1347. 8000c14: 755a strb r2, [r3, #21]
  1348. hadc2.Init.NbrOfConversion = 3;
  1349. 8000c16: 4b34 ldr r3, [pc, #208] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1350. 8000c18: 2203 movs r2, #3
  1351. 8000c1a: 619a str r2, [r3, #24]
  1352. hadc2.Init.DiscontinuousConvMode = DISABLE;
  1353. 8000c1c: 4b32 ldr r3, [pc, #200] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1354. 8000c1e: 2200 movs r2, #0
  1355. 8000c20: 771a strb r2, [r3, #28]
  1356. hadc2.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T2_TRGO;
  1357. 8000c22: 4b31 ldr r3, [pc, #196] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1358. 8000c24: f44f 62ac mov.w r2, #1376 @ 0x560
  1359. 8000c28: 625a str r2, [r3, #36] @ 0x24
  1360. hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  1361. 8000c2a: 4b2f ldr r3, [pc, #188] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1362. 8000c2c: f44f 6280 mov.w r2, #1024 @ 0x400
  1363. 8000c30: 629a str r2, [r3, #40] @ 0x28
  1364. hadc2.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;
  1365. 8000c32: 4b2d ldr r3, [pc, #180] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1366. 8000c34: 2201 movs r2, #1
  1367. 8000c36: 62da str r2, [r3, #44] @ 0x2c
  1368. hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  1369. 8000c38: 4b2b ldr r3, [pc, #172] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1370. 8000c3a: 2200 movs r2, #0
  1371. 8000c3c: 631a str r2, [r3, #48] @ 0x30
  1372. hadc2.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  1373. 8000c3e: 4b2a ldr r3, [pc, #168] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1374. 8000c40: 2200 movs r2, #0
  1375. 8000c42: 635a str r2, [r3, #52] @ 0x34
  1376. hadc2.Init.OversamplingMode = DISABLE;
  1377. 8000c44: 4b28 ldr r3, [pc, #160] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1378. 8000c46: 2200 movs r2, #0
  1379. 8000c48: f883 2038 strb.w r2, [r3, #56] @ 0x38
  1380. if (HAL_ADC_Init(&hadc2) != HAL_OK)
  1381. 8000c4c: 4826 ldr r0, [pc, #152] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1382. 8000c4e: f004 f969 bl 8004f24 <HAL_ADC_Init>
  1383. 8000c52: 4603 mov r3, r0
  1384. 8000c54: 2b00 cmp r3, #0
  1385. 8000c56: d001 beq.n 8000c5c <MX_ADC2_Init+0x88>
  1386. {
  1387. Error_Handler();
  1388. 8000c58: f000 fee2 bl 8001a20 <Error_Handler>
  1389. }
  1390. /** Configure Regular Channel
  1391. */
  1392. sConfig.Channel = ADC_CHANNEL_3;
  1393. 8000c5c: 4b24 ldr r3, [pc, #144] @ (8000cf0 <MX_ADC2_Init+0x11c>)
  1394. 8000c5e: 607b str r3, [r7, #4]
  1395. sConfig.Rank = ADC_REGULAR_RANK_1;
  1396. 8000c60: 2306 movs r3, #6
  1397. 8000c62: 60bb str r3, [r7, #8]
  1398. sConfig.SamplingTime = ADC_SAMPLETIME_387CYCLES_5;
  1399. 8000c64: 2306 movs r3, #6
  1400. 8000c66: 60fb str r3, [r7, #12]
  1401. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  1402. 8000c68: f240 73ff movw r3, #2047 @ 0x7ff
  1403. 8000c6c: 613b str r3, [r7, #16]
  1404. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  1405. 8000c6e: 2304 movs r3, #4
  1406. 8000c70: 617b str r3, [r7, #20]
  1407. sConfig.Offset = 0;
  1408. 8000c72: 2300 movs r3, #0
  1409. 8000c74: 61bb str r3, [r7, #24]
  1410. sConfig.OffsetSignedSaturation = DISABLE;
  1411. 8000c76: 2300 movs r3, #0
  1412. 8000c78: 777b strb r3, [r7, #29]
  1413. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  1414. 8000c7a: 1d3b adds r3, r7, #4
  1415. 8000c7c: 4619 mov r1, r3
  1416. 8000c7e: 481a ldr r0, [pc, #104] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1417. 8000c80: f004 fbca bl 8005418 <HAL_ADC_ConfigChannel>
  1418. 8000c84: 4603 mov r3, r0
  1419. 8000c86: 2b00 cmp r3, #0
  1420. 8000c88: d001 beq.n 8000c8e <MX_ADC2_Init+0xba>
  1421. {
  1422. Error_Handler();
  1423. 8000c8a: f000 fec9 bl 8001a20 <Error_Handler>
  1424. }
  1425. /** Configure Regular Channel
  1426. */
  1427. sConfig.Channel = ADC_CHANNEL_4;
  1428. 8000c8e: 4b19 ldr r3, [pc, #100] @ (8000cf4 <MX_ADC2_Init+0x120>)
  1429. 8000c90: 607b str r3, [r7, #4]
  1430. sConfig.Rank = ADC_REGULAR_RANK_2;
  1431. 8000c92: 230c movs r3, #12
  1432. 8000c94: 60bb str r3, [r7, #8]
  1433. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  1434. 8000c96: 1d3b adds r3, r7, #4
  1435. 8000c98: 4619 mov r1, r3
  1436. 8000c9a: 4813 ldr r0, [pc, #76] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1437. 8000c9c: f004 fbbc bl 8005418 <HAL_ADC_ConfigChannel>
  1438. 8000ca0: 4603 mov r3, r0
  1439. 8000ca2: 2b00 cmp r3, #0
  1440. 8000ca4: d001 beq.n 8000caa <MX_ADC2_Init+0xd6>
  1441. {
  1442. Error_Handler();
  1443. 8000ca6: f000 febb bl 8001a20 <Error_Handler>
  1444. }
  1445. /** Configure Regular Channel
  1446. */
  1447. sConfig.Channel = ADC_CHANNEL_5;
  1448. 8000caa: 4b13 ldr r3, [pc, #76] @ (8000cf8 <MX_ADC2_Init+0x124>)
  1449. 8000cac: 607b str r3, [r7, #4]
  1450. sConfig.Rank = ADC_REGULAR_RANK_3;
  1451. 8000cae: 2312 movs r3, #18
  1452. 8000cb0: 60bb str r3, [r7, #8]
  1453. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  1454. 8000cb2: 1d3b adds r3, r7, #4
  1455. 8000cb4: 4619 mov r1, r3
  1456. 8000cb6: 480c ldr r0, [pc, #48] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1457. 8000cb8: f004 fbae bl 8005418 <HAL_ADC_ConfigChannel>
  1458. 8000cbc: 4603 mov r3, r0
  1459. 8000cbe: 2b00 cmp r3, #0
  1460. 8000cc0: d001 beq.n 8000cc6 <MX_ADC2_Init+0xf2>
  1461. {
  1462. Error_Handler();
  1463. 8000cc2: f000 fead bl 8001a20 <Error_Handler>
  1464. }
  1465. /* USER CODE BEGIN ADC2_Init 2 */
  1466. if (HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
  1467. 8000cc6: f240 72ff movw r2, #2047 @ 0x7ff
  1468. 8000cca: f04f 1101 mov.w r1, #65537 @ 0x10001
  1469. 8000cce: 4806 ldr r0, [pc, #24] @ (8000ce8 <MX_ADC2_Init+0x114>)
  1470. 8000cd0: f005 f9e2 bl 8006098 <HAL_ADCEx_Calibration_Start>
  1471. 8000cd4: 4603 mov r3, r0
  1472. 8000cd6: 2b00 cmp r3, #0
  1473. 8000cd8: d001 beq.n 8000cde <MX_ADC2_Init+0x10a>
  1474. {
  1475. Error_Handler();
  1476. 8000cda: f000 fea1 bl 8001a20 <Error_Handler>
  1477. }
  1478. /* USER CODE END ADC2_Init 2 */
  1479. }
  1480. 8000cde: bf00 nop
  1481. 8000ce0: 3720 adds r7, #32
  1482. 8000ce2: 46bd mov sp, r7
  1483. 8000ce4: bd80 pop {r7, pc}
  1484. 8000ce6: bf00 nop
  1485. 8000ce8: 240001a4 .word 0x240001a4
  1486. 8000cec: 40022100 .word 0x40022100
  1487. 8000cf0: 0c900008 .word 0x0c900008
  1488. 8000cf4: 10c00010 .word 0x10c00010
  1489. 8000cf8: 14f00020 .word 0x14f00020
  1490. 08000cfc <MX_ADC3_Init>:
  1491. * @brief ADC3 Initialization Function
  1492. * @param None
  1493. * @retval None
  1494. */
  1495. static void MX_ADC3_Init(void)
  1496. {
  1497. 8000cfc: b580 push {r7, lr}
  1498. 8000cfe: b088 sub sp, #32
  1499. 8000d00: af00 add r7, sp, #0
  1500. /* USER CODE BEGIN ADC3_Init 0 */
  1501. /* USER CODE END ADC3_Init 0 */
  1502. ADC_ChannelConfTypeDef sConfig = {0};
  1503. 8000d02: 1d3b adds r3, r7, #4
  1504. 8000d04: 2200 movs r2, #0
  1505. 8000d06: 601a str r2, [r3, #0]
  1506. 8000d08: 605a str r2, [r3, #4]
  1507. 8000d0a: 609a str r2, [r3, #8]
  1508. 8000d0c: 60da str r2, [r3, #12]
  1509. 8000d0e: 611a str r2, [r3, #16]
  1510. 8000d10: 615a str r2, [r3, #20]
  1511. 8000d12: 619a str r2, [r3, #24]
  1512. /* USER CODE END ADC3_Init 1 */
  1513. /** Common config
  1514. */
  1515. hadc3.Instance = ADC3;
  1516. 8000d14: 4b4b ldr r3, [pc, #300] @ (8000e44 <MX_ADC3_Init+0x148>)
  1517. 8000d16: 4a4c ldr r2, [pc, #304] @ (8000e48 <MX_ADC3_Init+0x14c>)
  1518. 8000d18: 601a str r2, [r3, #0]
  1519. hadc3.Init.Resolution = ADC_RESOLUTION_16B;
  1520. 8000d1a: 4b4a ldr r3, [pc, #296] @ (8000e44 <MX_ADC3_Init+0x148>)
  1521. 8000d1c: 2200 movs r2, #0
  1522. 8000d1e: 609a str r2, [r3, #8]
  1523. hadc3.Init.ScanConvMode = ADC_SCAN_ENABLE;
  1524. 8000d20: 4b48 ldr r3, [pc, #288] @ (8000e44 <MX_ADC3_Init+0x148>)
  1525. 8000d22: 2201 movs r2, #1
  1526. 8000d24: 60da str r2, [r3, #12]
  1527. hadc3.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  1528. 8000d26: 4b47 ldr r3, [pc, #284] @ (8000e44 <MX_ADC3_Init+0x148>)
  1529. 8000d28: 2208 movs r2, #8
  1530. 8000d2a: 611a str r2, [r3, #16]
  1531. hadc3.Init.LowPowerAutoWait = DISABLE;
  1532. 8000d2c: 4b45 ldr r3, [pc, #276] @ (8000e44 <MX_ADC3_Init+0x148>)
  1533. 8000d2e: 2200 movs r2, #0
  1534. 8000d30: 751a strb r2, [r3, #20]
  1535. hadc3.Init.ContinuousConvMode = ENABLE;
  1536. 8000d32: 4b44 ldr r3, [pc, #272] @ (8000e44 <MX_ADC3_Init+0x148>)
  1537. 8000d34: 2201 movs r2, #1
  1538. 8000d36: 755a strb r2, [r3, #21]
  1539. hadc3.Init.NbrOfConversion = 5;
  1540. 8000d38: 4b42 ldr r3, [pc, #264] @ (8000e44 <MX_ADC3_Init+0x148>)
  1541. 8000d3a: 2205 movs r2, #5
  1542. 8000d3c: 619a str r2, [r3, #24]
  1543. hadc3.Init.DiscontinuousConvMode = DISABLE;
  1544. 8000d3e: 4b41 ldr r3, [pc, #260] @ (8000e44 <MX_ADC3_Init+0x148>)
  1545. 8000d40: 2200 movs r2, #0
  1546. 8000d42: 771a strb r2, [r3, #28]
  1547. hadc3.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T2_TRGO;
  1548. 8000d44: 4b3f ldr r3, [pc, #252] @ (8000e44 <MX_ADC3_Init+0x148>)
  1549. 8000d46: f44f 62ac mov.w r2, #1376 @ 0x560
  1550. 8000d4a: 625a str r2, [r3, #36] @ 0x24
  1551. hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  1552. 8000d4c: 4b3d ldr r3, [pc, #244] @ (8000e44 <MX_ADC3_Init+0x148>)
  1553. 8000d4e: f44f 6280 mov.w r2, #1024 @ 0x400
  1554. 8000d52: 629a str r2, [r3, #40] @ 0x28
  1555. hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;
  1556. 8000d54: 4b3b ldr r3, [pc, #236] @ (8000e44 <MX_ADC3_Init+0x148>)
  1557. 8000d56: 2201 movs r2, #1
  1558. 8000d58: 62da str r2, [r3, #44] @ 0x2c
  1559. hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  1560. 8000d5a: 4b3a ldr r3, [pc, #232] @ (8000e44 <MX_ADC3_Init+0x148>)
  1561. 8000d5c: 2200 movs r2, #0
  1562. 8000d5e: 631a str r2, [r3, #48] @ 0x30
  1563. hadc3.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  1564. 8000d60: 4b38 ldr r3, [pc, #224] @ (8000e44 <MX_ADC3_Init+0x148>)
  1565. 8000d62: 2200 movs r2, #0
  1566. 8000d64: 635a str r2, [r3, #52] @ 0x34
  1567. hadc3.Init.OversamplingMode = DISABLE;
  1568. 8000d66: 4b37 ldr r3, [pc, #220] @ (8000e44 <MX_ADC3_Init+0x148>)
  1569. 8000d68: 2200 movs r2, #0
  1570. 8000d6a: f883 2038 strb.w r2, [r3, #56] @ 0x38
  1571. if (HAL_ADC_Init(&hadc3) != HAL_OK)
  1572. 8000d6e: 4835 ldr r0, [pc, #212] @ (8000e44 <MX_ADC3_Init+0x148>)
  1573. 8000d70: f004 f8d8 bl 8004f24 <HAL_ADC_Init>
  1574. 8000d74: 4603 mov r3, r0
  1575. 8000d76: 2b00 cmp r3, #0
  1576. 8000d78: d001 beq.n 8000d7e <MX_ADC3_Init+0x82>
  1577. {
  1578. Error_Handler();
  1579. 8000d7a: f000 fe51 bl 8001a20 <Error_Handler>
  1580. }
  1581. /** Configure Regular Channel
  1582. */
  1583. sConfig.Channel = ADC_CHANNEL_0;
  1584. 8000d7e: 2301 movs r3, #1
  1585. 8000d80: 607b str r3, [r7, #4]
  1586. sConfig.Rank = ADC_REGULAR_RANK_1;
  1587. 8000d82: 2306 movs r3, #6
  1588. 8000d84: 60bb str r3, [r7, #8]
  1589. sConfig.SamplingTime = ADC_SAMPLETIME_387CYCLES_5;
  1590. 8000d86: 2306 movs r3, #6
  1591. 8000d88: 60fb str r3, [r7, #12]
  1592. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  1593. 8000d8a: f240 73ff movw r3, #2047 @ 0x7ff
  1594. 8000d8e: 613b str r3, [r7, #16]
  1595. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  1596. 8000d90: 2304 movs r3, #4
  1597. 8000d92: 617b str r3, [r7, #20]
  1598. sConfig.Offset = 0;
  1599. 8000d94: 2300 movs r3, #0
  1600. 8000d96: 61bb str r3, [r7, #24]
  1601. sConfig.OffsetSignedSaturation = DISABLE;
  1602. 8000d98: 2300 movs r3, #0
  1603. 8000d9a: 777b strb r3, [r7, #29]
  1604. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1605. 8000d9c: 1d3b adds r3, r7, #4
  1606. 8000d9e: 4619 mov r1, r3
  1607. 8000da0: 4828 ldr r0, [pc, #160] @ (8000e44 <MX_ADC3_Init+0x148>)
  1608. 8000da2: f004 fb39 bl 8005418 <HAL_ADC_ConfigChannel>
  1609. 8000da6: 4603 mov r3, r0
  1610. 8000da8: 2b00 cmp r3, #0
  1611. 8000daa: d001 beq.n 8000db0 <MX_ADC3_Init+0xb4>
  1612. {
  1613. Error_Handler();
  1614. 8000dac: f000 fe38 bl 8001a20 <Error_Handler>
  1615. }
  1616. /** Configure Regular Channel
  1617. */
  1618. sConfig.Channel = ADC_CHANNEL_1;
  1619. 8000db0: 4b26 ldr r3, [pc, #152] @ (8000e4c <MX_ADC3_Init+0x150>)
  1620. 8000db2: 607b str r3, [r7, #4]
  1621. sConfig.Rank = ADC_REGULAR_RANK_2;
  1622. 8000db4: 230c movs r3, #12
  1623. 8000db6: 60bb str r3, [r7, #8]
  1624. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1625. 8000db8: 1d3b adds r3, r7, #4
  1626. 8000dba: 4619 mov r1, r3
  1627. 8000dbc: 4821 ldr r0, [pc, #132] @ (8000e44 <MX_ADC3_Init+0x148>)
  1628. 8000dbe: f004 fb2b bl 8005418 <HAL_ADC_ConfigChannel>
  1629. 8000dc2: 4603 mov r3, r0
  1630. 8000dc4: 2b00 cmp r3, #0
  1631. 8000dc6: d001 beq.n 8000dcc <MX_ADC3_Init+0xd0>
  1632. {
  1633. Error_Handler();
  1634. 8000dc8: f000 fe2a bl 8001a20 <Error_Handler>
  1635. }
  1636. /** Configure Regular Channel
  1637. */
  1638. sConfig.Channel = ADC_CHANNEL_10;
  1639. 8000dcc: 4b20 ldr r3, [pc, #128] @ (8000e50 <MX_ADC3_Init+0x154>)
  1640. 8000dce: 607b str r3, [r7, #4]
  1641. sConfig.Rank = ADC_REGULAR_RANK_3;
  1642. 8000dd0: 2312 movs r3, #18
  1643. 8000dd2: 60bb str r3, [r7, #8]
  1644. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1645. 8000dd4: 1d3b adds r3, r7, #4
  1646. 8000dd6: 4619 mov r1, r3
  1647. 8000dd8: 481a ldr r0, [pc, #104] @ (8000e44 <MX_ADC3_Init+0x148>)
  1648. 8000dda: f004 fb1d bl 8005418 <HAL_ADC_ConfigChannel>
  1649. 8000dde: 4603 mov r3, r0
  1650. 8000de0: 2b00 cmp r3, #0
  1651. 8000de2: d001 beq.n 8000de8 <MX_ADC3_Init+0xec>
  1652. {
  1653. Error_Handler();
  1654. 8000de4: f000 fe1c bl 8001a20 <Error_Handler>
  1655. }
  1656. /** Configure Regular Channel
  1657. */
  1658. sConfig.Channel = ADC_CHANNEL_11;
  1659. 8000de8: 4b1a ldr r3, [pc, #104] @ (8000e54 <MX_ADC3_Init+0x158>)
  1660. 8000dea: 607b str r3, [r7, #4]
  1661. sConfig.Rank = ADC_REGULAR_RANK_4;
  1662. 8000dec: 2318 movs r3, #24
  1663. 8000dee: 60bb str r3, [r7, #8]
  1664. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1665. 8000df0: 1d3b adds r3, r7, #4
  1666. 8000df2: 4619 mov r1, r3
  1667. 8000df4: 4813 ldr r0, [pc, #76] @ (8000e44 <MX_ADC3_Init+0x148>)
  1668. 8000df6: f004 fb0f bl 8005418 <HAL_ADC_ConfigChannel>
  1669. 8000dfa: 4603 mov r3, r0
  1670. 8000dfc: 2b00 cmp r3, #0
  1671. 8000dfe: d001 beq.n 8000e04 <MX_ADC3_Init+0x108>
  1672. {
  1673. Error_Handler();
  1674. 8000e00: f000 fe0e bl 8001a20 <Error_Handler>
  1675. }
  1676. /** Configure Regular Channel
  1677. */
  1678. sConfig.Channel = ADC_CHANNEL_VREFINT;
  1679. 8000e04: 4b14 ldr r3, [pc, #80] @ (8000e58 <MX_ADC3_Init+0x15c>)
  1680. 8000e06: 607b str r3, [r7, #4]
  1681. sConfig.Rank = ADC_REGULAR_RANK_5;
  1682. 8000e08: f44f 7380 mov.w r3, #256 @ 0x100
  1683. 8000e0c: 60bb str r3, [r7, #8]
  1684. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1685. 8000e0e: 1d3b adds r3, r7, #4
  1686. 8000e10: 4619 mov r1, r3
  1687. 8000e12: 480c ldr r0, [pc, #48] @ (8000e44 <MX_ADC3_Init+0x148>)
  1688. 8000e14: f004 fb00 bl 8005418 <HAL_ADC_ConfigChannel>
  1689. 8000e18: 4603 mov r3, r0
  1690. 8000e1a: 2b00 cmp r3, #0
  1691. 8000e1c: d001 beq.n 8000e22 <MX_ADC3_Init+0x126>
  1692. {
  1693. Error_Handler();
  1694. 8000e1e: f000 fdff bl 8001a20 <Error_Handler>
  1695. }
  1696. /* USER CODE BEGIN ADC3_Init 2 */
  1697. if (HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
  1698. 8000e22: f240 72ff movw r2, #2047 @ 0x7ff
  1699. 8000e26: f04f 1101 mov.w r1, #65537 @ 0x10001
  1700. 8000e2a: 4806 ldr r0, [pc, #24] @ (8000e44 <MX_ADC3_Init+0x148>)
  1701. 8000e2c: f005 f934 bl 8006098 <HAL_ADCEx_Calibration_Start>
  1702. 8000e30: 4603 mov r3, r0
  1703. 8000e32: 2b00 cmp r3, #0
  1704. 8000e34: d001 beq.n 8000e3a <MX_ADC3_Init+0x13e>
  1705. {
  1706. Error_Handler();
  1707. 8000e36: f000 fdf3 bl 8001a20 <Error_Handler>
  1708. }
  1709. /* USER CODE END ADC3_Init 2 */
  1710. }
  1711. 8000e3a: bf00 nop
  1712. 8000e3c: 3720 adds r7, #32
  1713. 8000e3e: 46bd mov sp, r7
  1714. 8000e40: bd80 pop {r7, pc}
  1715. 8000e42: bf00 nop
  1716. 8000e44: 24000208 .word 0x24000208
  1717. 8000e48: 58026000 .word 0x58026000
  1718. 8000e4c: 04300002 .word 0x04300002
  1719. 8000e50: 2a000400 .word 0x2a000400
  1720. 8000e54: 2e300800 .word 0x2e300800
  1721. 8000e58: cfb80000 .word 0xcfb80000
  1722. 08000e5c <MX_CRC_Init>:
  1723. * @brief CRC Initialization Function
  1724. * @param None
  1725. * @retval None
  1726. */
  1727. static void MX_CRC_Init(void)
  1728. {
  1729. 8000e5c: b580 push {r7, lr}
  1730. 8000e5e: af00 add r7, sp, #0
  1731. /* USER CODE END CRC_Init 0 */
  1732. /* USER CODE BEGIN CRC_Init 1 */
  1733. /* USER CODE END CRC_Init 1 */
  1734. hcrc.Instance = CRC;
  1735. 8000e60: 4b11 ldr r3, [pc, #68] @ (8000ea8 <MX_CRC_Init+0x4c>)
  1736. 8000e62: 4a12 ldr r2, [pc, #72] @ (8000eac <MX_CRC_Init+0x50>)
  1737. 8000e64: 601a str r2, [r3, #0]
  1738. hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;
  1739. 8000e66: 4b10 ldr r3, [pc, #64] @ (8000ea8 <MX_CRC_Init+0x4c>)
  1740. 8000e68: 2201 movs r2, #1
  1741. 8000e6a: 711a strb r2, [r3, #4]
  1742. hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
  1743. 8000e6c: 4b0e ldr r3, [pc, #56] @ (8000ea8 <MX_CRC_Init+0x4c>)
  1744. 8000e6e: 2200 movs r2, #0
  1745. 8000e70: 715a strb r2, [r3, #5]
  1746. hcrc.Init.GeneratingPolynomial = 4129;
  1747. 8000e72: 4b0d ldr r3, [pc, #52] @ (8000ea8 <MX_CRC_Init+0x4c>)
  1748. 8000e74: f241 0221 movw r2, #4129 @ 0x1021
  1749. 8000e78: 609a str r2, [r3, #8]
  1750. hcrc.Init.CRCLength = CRC_POLYLENGTH_16B;
  1751. 8000e7a: 4b0b ldr r3, [pc, #44] @ (8000ea8 <MX_CRC_Init+0x4c>)
  1752. 8000e7c: 2208 movs r2, #8
  1753. 8000e7e: 60da str r2, [r3, #12]
  1754. hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
  1755. 8000e80: 4b09 ldr r3, [pc, #36] @ (8000ea8 <MX_CRC_Init+0x4c>)
  1756. 8000e82: 2200 movs r2, #0
  1757. 8000e84: 615a str r2, [r3, #20]
  1758. hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
  1759. 8000e86: 4b08 ldr r3, [pc, #32] @ (8000ea8 <MX_CRC_Init+0x4c>)
  1760. 8000e88: 2200 movs r2, #0
  1761. 8000e8a: 619a str r2, [r3, #24]
  1762. hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
  1763. 8000e8c: 4b06 ldr r3, [pc, #24] @ (8000ea8 <MX_CRC_Init+0x4c>)
  1764. 8000e8e: 2201 movs r2, #1
  1765. 8000e90: 621a str r2, [r3, #32]
  1766. if (HAL_CRC_Init(&hcrc) != HAL_OK)
  1767. 8000e92: 4805 ldr r0, [pc, #20] @ (8000ea8 <MX_CRC_Init+0x4c>)
  1768. 8000e94: f005 fb9a bl 80065cc <HAL_CRC_Init>
  1769. 8000e98: 4603 mov r3, r0
  1770. 8000e9a: 2b00 cmp r3, #0
  1771. 8000e9c: d001 beq.n 8000ea2 <MX_CRC_Init+0x46>
  1772. {
  1773. Error_Handler();
  1774. 8000e9e: f000 fdbf bl 8001a20 <Error_Handler>
  1775. }
  1776. /* USER CODE BEGIN CRC_Init 2 */
  1777. /* USER CODE END CRC_Init 2 */
  1778. }
  1779. 8000ea2: bf00 nop
  1780. 8000ea4: bd80 pop {r7, pc}
  1781. 8000ea6: bf00 nop
  1782. 8000ea8: 240003d4 .word 0x240003d4
  1783. 8000eac: 58024c00 .word 0x58024c00
  1784. 08000eb0 <MX_DAC1_Init>:
  1785. * @brief DAC1 Initialization Function
  1786. * @param None
  1787. * @retval None
  1788. */
  1789. static void MX_DAC1_Init(void)
  1790. {
  1791. 8000eb0: b580 push {r7, lr}
  1792. 8000eb2: b08a sub sp, #40 @ 0x28
  1793. 8000eb4: af00 add r7, sp, #0
  1794. /* USER CODE BEGIN DAC1_Init 0 */
  1795. /* USER CODE END DAC1_Init 0 */
  1796. DAC_ChannelConfTypeDef sConfig = {0};
  1797. 8000eb6: 1d3b adds r3, r7, #4
  1798. 8000eb8: 2224 movs r2, #36 @ 0x24
  1799. 8000eba: 2100 movs r1, #0
  1800. 8000ebc: 4618 mov r0, r3
  1801. 8000ebe: f015 fc4a bl 8016756 <memset>
  1802. /* USER CODE END DAC1_Init 1 */
  1803. /** DAC Initialization
  1804. */
  1805. hdac1.Instance = DAC1;
  1806. 8000ec2: 4b17 ldr r3, [pc, #92] @ (8000f20 <MX_DAC1_Init+0x70>)
  1807. 8000ec4: 4a17 ldr r2, [pc, #92] @ (8000f24 <MX_DAC1_Init+0x74>)
  1808. 8000ec6: 601a str r2, [r3, #0]
  1809. if (HAL_DAC_Init(&hdac1) != HAL_OK)
  1810. 8000ec8: 4815 ldr r0, [pc, #84] @ (8000f20 <MX_DAC1_Init+0x70>)
  1811. 8000eca: f005 fd85 bl 80069d8 <HAL_DAC_Init>
  1812. 8000ece: 4603 mov r3, r0
  1813. 8000ed0: 2b00 cmp r3, #0
  1814. 8000ed2: d001 beq.n 8000ed8 <MX_DAC1_Init+0x28>
  1815. {
  1816. Error_Handler();
  1817. 8000ed4: f000 fda4 bl 8001a20 <Error_Handler>
  1818. }
  1819. /** DAC channel OUT1 config
  1820. */
  1821. sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;
  1822. 8000ed8: 2300 movs r3, #0
  1823. 8000eda: 607b str r3, [r7, #4]
  1824. sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
  1825. 8000edc: 2300 movs r3, #0
  1826. 8000ede: 60bb str r3, [r7, #8]
  1827. sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
  1828. 8000ee0: 2300 movs r3, #0
  1829. 8000ee2: 60fb str r3, [r7, #12]
  1830. sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_DISABLE;
  1831. 8000ee4: 2301 movs r3, #1
  1832. 8000ee6: 613b str r3, [r7, #16]
  1833. sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY;
  1834. 8000ee8: 2300 movs r3, #0
  1835. 8000eea: 617b str r3, [r7, #20]
  1836. if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_1) != HAL_OK)
  1837. 8000eec: 1d3b adds r3, r7, #4
  1838. 8000eee: 2200 movs r2, #0
  1839. 8000ef0: 4619 mov r1, r3
  1840. 8000ef2: 480b ldr r0, [pc, #44] @ (8000f20 <MX_DAC1_Init+0x70>)
  1841. 8000ef4: f005 fe74 bl 8006be0 <HAL_DAC_ConfigChannel>
  1842. 8000ef8: 4603 mov r3, r0
  1843. 8000efa: 2b00 cmp r3, #0
  1844. 8000efc: d001 beq.n 8000f02 <MX_DAC1_Init+0x52>
  1845. {
  1846. Error_Handler();
  1847. 8000efe: f000 fd8f bl 8001a20 <Error_Handler>
  1848. }
  1849. /** DAC channel OUT2 config
  1850. */
  1851. if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_2) != HAL_OK)
  1852. 8000f02: 1d3b adds r3, r7, #4
  1853. 8000f04: 2210 movs r2, #16
  1854. 8000f06: 4619 mov r1, r3
  1855. 8000f08: 4805 ldr r0, [pc, #20] @ (8000f20 <MX_DAC1_Init+0x70>)
  1856. 8000f0a: f005 fe69 bl 8006be0 <HAL_DAC_ConfigChannel>
  1857. 8000f0e: 4603 mov r3, r0
  1858. 8000f10: 2b00 cmp r3, #0
  1859. 8000f12: d001 beq.n 8000f18 <MX_DAC1_Init+0x68>
  1860. {
  1861. Error_Handler();
  1862. 8000f14: f000 fd84 bl 8001a20 <Error_Handler>
  1863. }
  1864. /* USER CODE BEGIN DAC1_Init 2 */
  1865. /* USER CODE END DAC1_Init 2 */
  1866. }
  1867. 8000f18: bf00 nop
  1868. 8000f1a: 3728 adds r7, #40 @ 0x28
  1869. 8000f1c: 46bd mov sp, r7
  1870. 8000f1e: bd80 pop {r7, pc}
  1871. 8000f20: 240003f8 .word 0x240003f8
  1872. 8000f24: 40007400 .word 0x40007400
  1873. 08000f28 <MX_RNG_Init>:
  1874. * @brief RNG Initialization Function
  1875. * @param None
  1876. * @retval None
  1877. */
  1878. static void MX_RNG_Init(void)
  1879. {
  1880. 8000f28: b580 push {r7, lr}
  1881. 8000f2a: af00 add r7, sp, #0
  1882. /* USER CODE END RNG_Init 0 */
  1883. /* USER CODE BEGIN RNG_Init 1 */
  1884. /* USER CODE END RNG_Init 1 */
  1885. hrng.Instance = RNG;
  1886. 8000f2c: 4b07 ldr r3, [pc, #28] @ (8000f4c <MX_RNG_Init+0x24>)
  1887. 8000f2e: 4a08 ldr r2, [pc, #32] @ (8000f50 <MX_RNG_Init+0x28>)
  1888. 8000f30: 601a str r2, [r3, #0]
  1889. hrng.Init.ClockErrorDetection = RNG_CED_ENABLE;
  1890. 8000f32: 4b06 ldr r3, [pc, #24] @ (8000f4c <MX_RNG_Init+0x24>)
  1891. 8000f34: 2200 movs r2, #0
  1892. 8000f36: 605a str r2, [r3, #4]
  1893. if (HAL_RNG_Init(&hrng) != HAL_OK)
  1894. 8000f38: 4804 ldr r0, [pc, #16] @ (8000f4c <MX_RNG_Init+0x24>)
  1895. 8000f3a: f00c fe43 bl 800dbc4 <HAL_RNG_Init>
  1896. 8000f3e: 4603 mov r3, r0
  1897. 8000f40: 2b00 cmp r3, #0
  1898. 8000f42: d001 beq.n 8000f48 <MX_RNG_Init+0x20>
  1899. {
  1900. Error_Handler();
  1901. 8000f44: f000 fd6c bl 8001a20 <Error_Handler>
  1902. }
  1903. /* USER CODE BEGIN RNG_Init 2 */
  1904. /* USER CODE END RNG_Init 2 */
  1905. }
  1906. 8000f48: bf00 nop
  1907. 8000f4a: bd80 pop {r7, pc}
  1908. 8000f4c: 2400040c .word 0x2400040c
  1909. 8000f50: 48021800 .word 0x48021800
  1910. 08000f54 <MX_TIM1_Init>:
  1911. * @brief TIM1 Initialization Function
  1912. * @param None
  1913. * @retval None
  1914. */
  1915. static void MX_TIM1_Init(void)
  1916. {
  1917. 8000f54: b5b0 push {r4, r5, r7, lr}
  1918. 8000f56: b096 sub sp, #88 @ 0x58
  1919. 8000f58: af00 add r7, sp, #0
  1920. /* USER CODE BEGIN TIM1_Init 0 */
  1921. /* USER CODE END TIM1_Init 0 */
  1922. TIM_MasterConfigTypeDef sMasterConfig = {0};
  1923. 8000f5a: f107 034c add.w r3, r7, #76 @ 0x4c
  1924. 8000f5e: 2200 movs r2, #0
  1925. 8000f60: 601a str r2, [r3, #0]
  1926. 8000f62: 605a str r2, [r3, #4]
  1927. 8000f64: 609a str r2, [r3, #8]
  1928. TIM_OC_InitTypeDef sConfigOC = {0};
  1929. 8000f66: f107 0330 add.w r3, r7, #48 @ 0x30
  1930. 8000f6a: 2200 movs r2, #0
  1931. 8000f6c: 601a str r2, [r3, #0]
  1932. 8000f6e: 605a str r2, [r3, #4]
  1933. 8000f70: 609a str r2, [r3, #8]
  1934. 8000f72: 60da str r2, [r3, #12]
  1935. 8000f74: 611a str r2, [r3, #16]
  1936. 8000f76: 615a str r2, [r3, #20]
  1937. 8000f78: 619a str r2, [r3, #24]
  1938. TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
  1939. 8000f7a: 1d3b adds r3, r7, #4
  1940. 8000f7c: 222c movs r2, #44 @ 0x2c
  1941. 8000f7e: 2100 movs r1, #0
  1942. 8000f80: 4618 mov r0, r3
  1943. 8000f82: f015 fbe8 bl 8016756 <memset>
  1944. /* USER CODE BEGIN TIM1_Init 1 */
  1945. /* USER CODE END TIM1_Init 1 */
  1946. htim1.Instance = TIM1;
  1947. 8000f86: 4b3e ldr r3, [pc, #248] @ (8001080 <MX_TIM1_Init+0x12c>)
  1948. 8000f88: 4a3e ldr r2, [pc, #248] @ (8001084 <MX_TIM1_Init+0x130>)
  1949. 8000f8a: 601a str r2, [r3, #0]
  1950. htim1.Init.Prescaler = 199;
  1951. 8000f8c: 4b3c ldr r3, [pc, #240] @ (8001080 <MX_TIM1_Init+0x12c>)
  1952. 8000f8e: 22c7 movs r2, #199 @ 0xc7
  1953. 8000f90: 605a str r2, [r3, #4]
  1954. htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  1955. 8000f92: 4b3b ldr r3, [pc, #236] @ (8001080 <MX_TIM1_Init+0x12c>)
  1956. 8000f94: 2200 movs r2, #0
  1957. 8000f96: 609a str r2, [r3, #8]
  1958. htim1.Init.Period = 999;
  1959. 8000f98: 4b39 ldr r3, [pc, #228] @ (8001080 <MX_TIM1_Init+0x12c>)
  1960. 8000f9a: f240 32e7 movw r2, #999 @ 0x3e7
  1961. 8000f9e: 60da str r2, [r3, #12]
  1962. htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  1963. 8000fa0: 4b37 ldr r3, [pc, #220] @ (8001080 <MX_TIM1_Init+0x12c>)
  1964. 8000fa2: 2200 movs r2, #0
  1965. 8000fa4: 611a str r2, [r3, #16]
  1966. htim1.Init.RepetitionCounter = 0;
  1967. 8000fa6: 4b36 ldr r3, [pc, #216] @ (8001080 <MX_TIM1_Init+0x12c>)
  1968. 8000fa8: 2200 movs r2, #0
  1969. 8000faa: 615a str r2, [r3, #20]
  1970. htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  1971. 8000fac: 4b34 ldr r3, [pc, #208] @ (8001080 <MX_TIM1_Init+0x12c>)
  1972. 8000fae: 2280 movs r2, #128 @ 0x80
  1973. 8000fb0: 619a str r2, [r3, #24]
  1974. if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
  1975. 8000fb2: 4833 ldr r0, [pc, #204] @ (8001080 <MX_TIM1_Init+0x12c>)
  1976. 8000fb4: f00c ffa8 bl 800df08 <HAL_TIM_PWM_Init>
  1977. 8000fb8: 4603 mov r3, r0
  1978. 8000fba: 2b00 cmp r3, #0
  1979. 8000fbc: d001 beq.n 8000fc2 <MX_TIM1_Init+0x6e>
  1980. {
  1981. Error_Handler();
  1982. 8000fbe: f000 fd2f bl 8001a20 <Error_Handler>
  1983. }
  1984. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  1985. 8000fc2: 2300 movs r3, #0
  1986. 8000fc4: 64fb str r3, [r7, #76] @ 0x4c
  1987. sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
  1988. 8000fc6: 2300 movs r3, #0
  1989. 8000fc8: 653b str r3, [r7, #80] @ 0x50
  1990. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  1991. 8000fca: 2300 movs r3, #0
  1992. 8000fcc: 657b str r3, [r7, #84] @ 0x54
  1993. if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  1994. 8000fce: f107 034c add.w r3, r7, #76 @ 0x4c
  1995. 8000fd2: 4619 mov r1, r3
  1996. 8000fd4: 482a ldr r0, [pc, #168] @ (8001080 <MX_TIM1_Init+0x12c>)
  1997. 8000fd6: f00e f949 bl 800f26c <HAL_TIMEx_MasterConfigSynchronization>
  1998. 8000fda: 4603 mov r3, r0
  1999. 8000fdc: 2b00 cmp r3, #0
  2000. 8000fde: d001 beq.n 8000fe4 <MX_TIM1_Init+0x90>
  2001. {
  2002. Error_Handler();
  2003. 8000fe0: f000 fd1e bl 8001a20 <Error_Handler>
  2004. }
  2005. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  2006. 8000fe4: 2360 movs r3, #96 @ 0x60
  2007. 8000fe6: 633b str r3, [r7, #48] @ 0x30
  2008. sConfigOC.Pulse = 99;
  2009. 8000fe8: 2363 movs r3, #99 @ 0x63
  2010. 8000fea: 637b str r3, [r7, #52] @ 0x34
  2011. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  2012. 8000fec: 2300 movs r3, #0
  2013. 8000fee: 63bb str r3, [r7, #56] @ 0x38
  2014. sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  2015. 8000ff0: 2300 movs r3, #0
  2016. 8000ff2: 63fb str r3, [r7, #60] @ 0x3c
  2017. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  2018. 8000ff4: 2300 movs r3, #0
  2019. 8000ff6: 643b str r3, [r7, #64] @ 0x40
  2020. sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  2021. 8000ff8: 2300 movs r3, #0
  2022. 8000ffa: 647b str r3, [r7, #68] @ 0x44
  2023. sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  2024. 8000ffc: 2300 movs r3, #0
  2025. 8000ffe: 64bb str r3, [r7, #72] @ 0x48
  2026. if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  2027. 8001000: f107 0330 add.w r3, r7, #48 @ 0x30
  2028. 8001004: 2204 movs r2, #4
  2029. 8001006: 4619 mov r1, r3
  2030. 8001008: 481d ldr r0, [pc, #116] @ (8001080 <MX_TIM1_Init+0x12c>)
  2031. 800100a: f00d fa81 bl 800e510 <HAL_TIM_PWM_ConfigChannel>
  2032. 800100e: 4603 mov r3, r0
  2033. 8001010: 2b00 cmp r3, #0
  2034. 8001012: d001 beq.n 8001018 <MX_TIM1_Init+0xc4>
  2035. {
  2036. Error_Handler();
  2037. 8001014: f000 fd04 bl 8001a20 <Error_Handler>
  2038. }
  2039. sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
  2040. 8001018: 2300 movs r3, #0
  2041. 800101a: 607b str r3, [r7, #4]
  2042. sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
  2043. 800101c: 2300 movs r3, #0
  2044. 800101e: 60bb str r3, [r7, #8]
  2045. sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
  2046. 8001020: 2300 movs r3, #0
  2047. 8001022: 60fb str r3, [r7, #12]
  2048. sBreakDeadTimeConfig.DeadTime = 0;
  2049. 8001024: 2300 movs r3, #0
  2050. 8001026: 613b str r3, [r7, #16]
  2051. sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
  2052. 8001028: 2300 movs r3, #0
  2053. 800102a: 617b str r3, [r7, #20]
  2054. sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
  2055. 800102c: f44f 5300 mov.w r3, #8192 @ 0x2000
  2056. 8001030: 61bb str r3, [r7, #24]
  2057. sBreakDeadTimeConfig.BreakFilter = 0;
  2058. 8001032: 2300 movs r3, #0
  2059. 8001034: 61fb str r3, [r7, #28]
  2060. sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
  2061. 8001036: 2300 movs r3, #0
  2062. 8001038: 623b str r3, [r7, #32]
  2063. sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
  2064. 800103a: f04f 7300 mov.w r3, #33554432 @ 0x2000000
  2065. 800103e: 627b str r3, [r7, #36] @ 0x24
  2066. sBreakDeadTimeConfig.Break2Filter = 0;
  2067. 8001040: 2300 movs r3, #0
  2068. 8001042: 62bb str r3, [r7, #40] @ 0x28
  2069. sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
  2070. 8001044: 2300 movs r3, #0
  2071. 8001046: 62fb str r3, [r7, #44] @ 0x2c
  2072. if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
  2073. 8001048: 1d3b adds r3, r7, #4
  2074. 800104a: 4619 mov r1, r3
  2075. 800104c: 480c ldr r0, [pc, #48] @ (8001080 <MX_TIM1_Init+0x12c>)
  2076. 800104e: f00e f99b bl 800f388 <HAL_TIMEx_ConfigBreakDeadTime>
  2077. 8001052: 4603 mov r3, r0
  2078. 8001054: 2b00 cmp r3, #0
  2079. 8001056: d001 beq.n 800105c <MX_TIM1_Init+0x108>
  2080. {
  2081. Error_Handler();
  2082. 8001058: f000 fce2 bl 8001a20 <Error_Handler>
  2083. }
  2084. /* USER CODE BEGIN TIM1_Init 2 */
  2085. memcpy(&fanTimerConfigOC, &sConfigOC, sizeof(TIM_OC_InitTypeDef));
  2086. 800105c: 4b0a ldr r3, [pc, #40] @ (8001088 <MX_TIM1_Init+0x134>)
  2087. 800105e: 461d mov r5, r3
  2088. 8001060: f107 0430 add.w r4, r7, #48 @ 0x30
  2089. 8001064: cc0f ldmia r4!, {r0, r1, r2, r3}
  2090. 8001066: c50f stmia r5!, {r0, r1, r2, r3}
  2091. 8001068: e894 0007 ldmia.w r4, {r0, r1, r2}
  2092. 800106c: e885 0007 stmia.w r5, {r0, r1, r2}
  2093. /* USER CODE END TIM1_Init 2 */
  2094. HAL_TIM_MspPostInit(&htim1);
  2095. 8001070: 4803 ldr r0, [pc, #12] @ (8001080 <MX_TIM1_Init+0x12c>)
  2096. 8001072: f002 fa07 bl 8003484 <HAL_TIM_MspPostInit>
  2097. }
  2098. 8001076: bf00 nop
  2099. 8001078: 3758 adds r7, #88 @ 0x58
  2100. 800107a: 46bd mov sp, r7
  2101. 800107c: bdb0 pop {r4, r5, r7, pc}
  2102. 800107e: bf00 nop
  2103. 8001080: 24000420 .word 0x24000420
  2104. 8001084: 40010000 .word 0x40010000
  2105. 8001088: 240006f0 .word 0x240006f0
  2106. 0800108c <MX_TIM2_Init>:
  2107. * @brief TIM2 Initialization Function
  2108. * @param None
  2109. * @retval None
  2110. */
  2111. static void MX_TIM2_Init(void)
  2112. {
  2113. 800108c: b580 push {r7, lr}
  2114. 800108e: b088 sub sp, #32
  2115. 8001090: af00 add r7, sp, #0
  2116. /* USER CODE BEGIN TIM2_Init 0 */
  2117. /* USER CODE END TIM2_Init 0 */
  2118. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  2119. 8001092: f107 0310 add.w r3, r7, #16
  2120. 8001096: 2200 movs r2, #0
  2121. 8001098: 601a str r2, [r3, #0]
  2122. 800109a: 605a str r2, [r3, #4]
  2123. 800109c: 609a str r2, [r3, #8]
  2124. 800109e: 60da str r2, [r3, #12]
  2125. TIM_MasterConfigTypeDef sMasterConfig = {0};
  2126. 80010a0: 1d3b adds r3, r7, #4
  2127. 80010a2: 2200 movs r2, #0
  2128. 80010a4: 601a str r2, [r3, #0]
  2129. 80010a6: 605a str r2, [r3, #4]
  2130. 80010a8: 609a str r2, [r3, #8]
  2131. /* USER CODE BEGIN TIM2_Init 1 */
  2132. /* USER CODE END TIM2_Init 1 */
  2133. htim2.Instance = TIM2;
  2134. 80010aa: 4b1e ldr r3, [pc, #120] @ (8001124 <MX_TIM2_Init+0x98>)
  2135. 80010ac: f04f 4280 mov.w r2, #1073741824 @ 0x40000000
  2136. 80010b0: 601a str r2, [r3, #0]
  2137. htim2.Init.Prescaler = 0;
  2138. 80010b2: 4b1c ldr r3, [pc, #112] @ (8001124 <MX_TIM2_Init+0x98>)
  2139. 80010b4: 2200 movs r2, #0
  2140. 80010b6: 605a str r2, [r3, #4]
  2141. htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  2142. 80010b8: 4b1a ldr r3, [pc, #104] @ (8001124 <MX_TIM2_Init+0x98>)
  2143. 80010ba: 2200 movs r2, #0
  2144. 80010bc: 609a str r2, [r3, #8]
  2145. htim2.Init.Period = 9999999;
  2146. 80010be: 4b19 ldr r3, [pc, #100] @ (8001124 <MX_TIM2_Init+0x98>)
  2147. 80010c0: 4a19 ldr r2, [pc, #100] @ (8001128 <MX_TIM2_Init+0x9c>)
  2148. 80010c2: 60da str r2, [r3, #12]
  2149. htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV2;
  2150. 80010c4: 4b17 ldr r3, [pc, #92] @ (8001124 <MX_TIM2_Init+0x98>)
  2151. 80010c6: f44f 7280 mov.w r2, #256 @ 0x100
  2152. 80010ca: 611a str r2, [r3, #16]
  2153. htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  2154. 80010cc: 4b15 ldr r3, [pc, #84] @ (8001124 <MX_TIM2_Init+0x98>)
  2155. 80010ce: 2280 movs r2, #128 @ 0x80
  2156. 80010d0: 619a str r2, [r3, #24]
  2157. if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  2158. 80010d2: 4814 ldr r0, [pc, #80] @ (8001124 <MX_TIM2_Init+0x98>)
  2159. 80010d4: f00c fdd8 bl 800dc88 <HAL_TIM_Base_Init>
  2160. 80010d8: 4603 mov r3, r0
  2161. 80010da: 2b00 cmp r3, #0
  2162. 80010dc: d001 beq.n 80010e2 <MX_TIM2_Init+0x56>
  2163. {
  2164. Error_Handler();
  2165. 80010de: f000 fc9f bl 8001a20 <Error_Handler>
  2166. }
  2167. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  2168. 80010e2: f44f 5380 mov.w r3, #4096 @ 0x1000
  2169. 80010e6: 613b str r3, [r7, #16]
  2170. if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  2171. 80010e8: f107 0310 add.w r3, r7, #16
  2172. 80010ec: 4619 mov r1, r3
  2173. 80010ee: 480d ldr r0, [pc, #52] @ (8001124 <MX_TIM2_Init+0x98>)
  2174. 80010f0: f00d fb22 bl 800e738 <HAL_TIM_ConfigClockSource>
  2175. 80010f4: 4603 mov r3, r0
  2176. 80010f6: 2b00 cmp r3, #0
  2177. 80010f8: d001 beq.n 80010fe <MX_TIM2_Init+0x72>
  2178. {
  2179. Error_Handler();
  2180. 80010fa: f000 fc91 bl 8001a20 <Error_Handler>
  2181. }
  2182. sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
  2183. 80010fe: 2320 movs r3, #32
  2184. 8001100: 607b str r3, [r7, #4]
  2185. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
  2186. 8001102: 2380 movs r3, #128 @ 0x80
  2187. 8001104: 60fb str r3, [r7, #12]
  2188. if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  2189. 8001106: 1d3b adds r3, r7, #4
  2190. 8001108: 4619 mov r1, r3
  2191. 800110a: 4806 ldr r0, [pc, #24] @ (8001124 <MX_TIM2_Init+0x98>)
  2192. 800110c: f00e f8ae bl 800f26c <HAL_TIMEx_MasterConfigSynchronization>
  2193. 8001110: 4603 mov r3, r0
  2194. 8001112: 2b00 cmp r3, #0
  2195. 8001114: d001 beq.n 800111a <MX_TIM2_Init+0x8e>
  2196. {
  2197. Error_Handler();
  2198. 8001116: f000 fc83 bl 8001a20 <Error_Handler>
  2199. }
  2200. /* USER CODE BEGIN TIM2_Init 2 */
  2201. /* USER CODE END TIM2_Init 2 */
  2202. }
  2203. 800111a: bf00 nop
  2204. 800111c: 3720 adds r7, #32
  2205. 800111e: 46bd mov sp, r7
  2206. 8001120: bd80 pop {r7, pc}
  2207. 8001122: bf00 nop
  2208. 8001124: 2400046c .word 0x2400046c
  2209. 8001128: 0098967f .word 0x0098967f
  2210. 0800112c <MX_TIM3_Init>:
  2211. * @brief TIM3 Initialization Function
  2212. * @param None
  2213. * @retval None
  2214. */
  2215. static void MX_TIM3_Init(void)
  2216. {
  2217. 800112c: b5b0 push {r4, r5, r7, lr}
  2218. 800112e: b08a sub sp, #40 @ 0x28
  2219. 8001130: af00 add r7, sp, #0
  2220. /* USER CODE BEGIN TIM3_Init 0 */
  2221. /* USER CODE END TIM3_Init 0 */
  2222. TIM_MasterConfigTypeDef sMasterConfig = {0};
  2223. 8001132: f107 031c add.w r3, r7, #28
  2224. 8001136: 2200 movs r2, #0
  2225. 8001138: 601a str r2, [r3, #0]
  2226. 800113a: 605a str r2, [r3, #4]
  2227. 800113c: 609a str r2, [r3, #8]
  2228. TIM_OC_InitTypeDef sConfigOC = {0};
  2229. 800113e: 463b mov r3, r7
  2230. 8001140: 2200 movs r2, #0
  2231. 8001142: 601a str r2, [r3, #0]
  2232. 8001144: 605a str r2, [r3, #4]
  2233. 8001146: 609a str r2, [r3, #8]
  2234. 8001148: 60da str r2, [r3, #12]
  2235. 800114a: 611a str r2, [r3, #16]
  2236. 800114c: 615a str r2, [r3, #20]
  2237. 800114e: 619a str r2, [r3, #24]
  2238. /* USER CODE BEGIN TIM3_Init 1 */
  2239. /* USER CODE END TIM3_Init 1 */
  2240. htim3.Instance = TIM3;
  2241. 8001150: 4b48 ldr r3, [pc, #288] @ (8001274 <MX_TIM3_Init+0x148>)
  2242. 8001152: 4a49 ldr r2, [pc, #292] @ (8001278 <MX_TIM3_Init+0x14c>)
  2243. 8001154: 601a str r2, [r3, #0]
  2244. htim3.Init.Prescaler = 199;
  2245. 8001156: 4b47 ldr r3, [pc, #284] @ (8001274 <MX_TIM3_Init+0x148>)
  2246. 8001158: 22c7 movs r2, #199 @ 0xc7
  2247. 800115a: 605a str r2, [r3, #4]
  2248. htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  2249. 800115c: 4b45 ldr r3, [pc, #276] @ (8001274 <MX_TIM3_Init+0x148>)
  2250. 800115e: 2200 movs r2, #0
  2251. 8001160: 609a str r2, [r3, #8]
  2252. htim3.Init.Period = 999;
  2253. 8001162: 4b44 ldr r3, [pc, #272] @ (8001274 <MX_TIM3_Init+0x148>)
  2254. 8001164: f240 32e7 movw r2, #999 @ 0x3e7
  2255. 8001168: 60da str r2, [r3, #12]
  2256. htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  2257. 800116a: 4b42 ldr r3, [pc, #264] @ (8001274 <MX_TIM3_Init+0x148>)
  2258. 800116c: 2200 movs r2, #0
  2259. 800116e: 611a str r2, [r3, #16]
  2260. htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  2261. 8001170: 4b40 ldr r3, [pc, #256] @ (8001274 <MX_TIM3_Init+0x148>)
  2262. 8001172: 2280 movs r2, #128 @ 0x80
  2263. 8001174: 619a str r2, [r3, #24]
  2264. if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
  2265. 8001176: 483f ldr r0, [pc, #252] @ (8001274 <MX_TIM3_Init+0x148>)
  2266. 8001178: f00c fec6 bl 800df08 <HAL_TIM_PWM_Init>
  2267. 800117c: 4603 mov r3, r0
  2268. 800117e: 2b00 cmp r3, #0
  2269. 8001180: d001 beq.n 8001186 <MX_TIM3_Init+0x5a>
  2270. {
  2271. Error_Handler();
  2272. 8001182: f000 fc4d bl 8001a20 <Error_Handler>
  2273. }
  2274. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  2275. 8001186: 2300 movs r3, #0
  2276. 8001188: 61fb str r3, [r7, #28]
  2277. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  2278. 800118a: 2300 movs r3, #0
  2279. 800118c: 627b str r3, [r7, #36] @ 0x24
  2280. if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  2281. 800118e: f107 031c add.w r3, r7, #28
  2282. 8001192: 4619 mov r1, r3
  2283. 8001194: 4837 ldr r0, [pc, #220] @ (8001274 <MX_TIM3_Init+0x148>)
  2284. 8001196: f00e f869 bl 800f26c <HAL_TIMEx_MasterConfigSynchronization>
  2285. 800119a: 4603 mov r3, r0
  2286. 800119c: 2b00 cmp r3, #0
  2287. 800119e: d001 beq.n 80011a4 <MX_TIM3_Init+0x78>
  2288. {
  2289. Error_Handler();
  2290. 80011a0: f000 fc3e bl 8001a20 <Error_Handler>
  2291. }
  2292. sConfigOC.OCMode = TIM_OCMODE_COMBINED_PWM1;
  2293. 80011a4: 4b35 ldr r3, [pc, #212] @ (800127c <MX_TIM3_Init+0x150>)
  2294. 80011a6: 603b str r3, [r7, #0]
  2295. sConfigOC.Pulse = 500;
  2296. 80011a8: f44f 73fa mov.w r3, #500 @ 0x1f4
  2297. 80011ac: 607b str r3, [r7, #4]
  2298. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  2299. 80011ae: 2300 movs r3, #0
  2300. 80011b0: 60bb str r3, [r7, #8]
  2301. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  2302. 80011b2: 2300 movs r3, #0
  2303. 80011b4: 613b str r3, [r7, #16]
  2304. if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  2305. 80011b6: 463b mov r3, r7
  2306. 80011b8: 2200 movs r2, #0
  2307. 80011ba: 4619 mov r1, r3
  2308. 80011bc: 482d ldr r0, [pc, #180] @ (8001274 <MX_TIM3_Init+0x148>)
  2309. 80011be: f00d f9a7 bl 800e510 <HAL_TIM_PWM_ConfigChannel>
  2310. 80011c2: 4603 mov r3, r0
  2311. 80011c4: 2b00 cmp r3, #0
  2312. 80011c6: d001 beq.n 80011cc <MX_TIM3_Init+0xa0>
  2313. {
  2314. Error_Handler();
  2315. 80011c8: f000 fc2a bl 8001a20 <Error_Handler>
  2316. }
  2317. __HAL_TIM_DISABLE_OCxPRELOAD(&htim3, TIM_CHANNEL_1);
  2318. 80011cc: 4b29 ldr r3, [pc, #164] @ (8001274 <MX_TIM3_Init+0x148>)
  2319. 80011ce: 681b ldr r3, [r3, #0]
  2320. 80011d0: 699a ldr r2, [r3, #24]
  2321. 80011d2: 4b28 ldr r3, [pc, #160] @ (8001274 <MX_TIM3_Init+0x148>)
  2322. 80011d4: 681b ldr r3, [r3, #0]
  2323. 80011d6: f022 0208 bic.w r2, r2, #8
  2324. 80011da: 619a str r2, [r3, #24]
  2325. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  2326. 80011dc: 2360 movs r3, #96 @ 0x60
  2327. 80011de: 603b str r3, [r7, #0]
  2328. if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  2329. 80011e0: 463b mov r3, r7
  2330. 80011e2: 2204 movs r2, #4
  2331. 80011e4: 4619 mov r1, r3
  2332. 80011e6: 4823 ldr r0, [pc, #140] @ (8001274 <MX_TIM3_Init+0x148>)
  2333. 80011e8: f00d f992 bl 800e510 <HAL_TIM_PWM_ConfigChannel>
  2334. 80011ec: 4603 mov r3, r0
  2335. 80011ee: 2b00 cmp r3, #0
  2336. 80011f0: d001 beq.n 80011f6 <MX_TIM3_Init+0xca>
  2337. {
  2338. Error_Handler();
  2339. 80011f2: f000 fc15 bl 8001a20 <Error_Handler>
  2340. }
  2341. __HAL_TIM_DISABLE_OCxPRELOAD(&htim3, TIM_CHANNEL_2);
  2342. 80011f6: 4b1f ldr r3, [pc, #124] @ (8001274 <MX_TIM3_Init+0x148>)
  2343. 80011f8: 681b ldr r3, [r3, #0]
  2344. 80011fa: 699a ldr r2, [r3, #24]
  2345. 80011fc: 4b1d ldr r3, [pc, #116] @ (8001274 <MX_TIM3_Init+0x148>)
  2346. 80011fe: 681b ldr r3, [r3, #0]
  2347. 8001200: f422 6200 bic.w r2, r2, #2048 @ 0x800
  2348. 8001204: 619a str r2, [r3, #24]
  2349. if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
  2350. 8001206: 463b mov r3, r7
  2351. 8001208: 2208 movs r2, #8
  2352. 800120a: 4619 mov r1, r3
  2353. 800120c: 4819 ldr r0, [pc, #100] @ (8001274 <MX_TIM3_Init+0x148>)
  2354. 800120e: f00d f97f bl 800e510 <HAL_TIM_PWM_ConfigChannel>
  2355. 8001212: 4603 mov r3, r0
  2356. 8001214: 2b00 cmp r3, #0
  2357. 8001216: d001 beq.n 800121c <MX_TIM3_Init+0xf0>
  2358. {
  2359. Error_Handler();
  2360. 8001218: f000 fc02 bl 8001a20 <Error_Handler>
  2361. }
  2362. __HAL_TIM_DISABLE_OCxPRELOAD(&htim3, TIM_CHANNEL_3);
  2363. 800121c: 4b15 ldr r3, [pc, #84] @ (8001274 <MX_TIM3_Init+0x148>)
  2364. 800121e: 681b ldr r3, [r3, #0]
  2365. 8001220: 69da ldr r2, [r3, #28]
  2366. 8001222: 4b14 ldr r3, [pc, #80] @ (8001274 <MX_TIM3_Init+0x148>)
  2367. 8001224: 681b ldr r3, [r3, #0]
  2368. 8001226: f022 0208 bic.w r2, r2, #8
  2369. 800122a: 61da str r2, [r3, #28]
  2370. if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
  2371. 800122c: 463b mov r3, r7
  2372. 800122e: 220c movs r2, #12
  2373. 8001230: 4619 mov r1, r3
  2374. 8001232: 4810 ldr r0, [pc, #64] @ (8001274 <MX_TIM3_Init+0x148>)
  2375. 8001234: f00d f96c bl 800e510 <HAL_TIM_PWM_ConfigChannel>
  2376. 8001238: 4603 mov r3, r0
  2377. 800123a: 2b00 cmp r3, #0
  2378. 800123c: d001 beq.n 8001242 <MX_TIM3_Init+0x116>
  2379. {
  2380. Error_Handler();
  2381. 800123e: f000 fbef bl 8001a20 <Error_Handler>
  2382. }
  2383. __HAL_TIM_DISABLE_OCxPRELOAD(&htim3, TIM_CHANNEL_4);
  2384. 8001242: 4b0c ldr r3, [pc, #48] @ (8001274 <MX_TIM3_Init+0x148>)
  2385. 8001244: 681b ldr r3, [r3, #0]
  2386. 8001246: 69da ldr r2, [r3, #28]
  2387. 8001248: 4b0a ldr r3, [pc, #40] @ (8001274 <MX_TIM3_Init+0x148>)
  2388. 800124a: 681b ldr r3, [r3, #0]
  2389. 800124c: f422 6200 bic.w r2, r2, #2048 @ 0x800
  2390. 8001250: 61da str r2, [r3, #28]
  2391. /* USER CODE BEGIN TIM3_Init 2 */
  2392. memcpy(&motorXYTimerConfigOC, &sConfigOC, sizeof(TIM_OC_InitTypeDef));
  2393. 8001252: 4b0b ldr r3, [pc, #44] @ (8001280 <MX_TIM3_Init+0x154>)
  2394. 8001254: 461d mov r5, r3
  2395. 8001256: 463c mov r4, r7
  2396. 8001258: cc0f ldmia r4!, {r0, r1, r2, r3}
  2397. 800125a: c50f stmia r5!, {r0, r1, r2, r3}
  2398. 800125c: e894 0007 ldmia.w r4, {r0, r1, r2}
  2399. 8001260: e885 0007 stmia.w r5, {r0, r1, r2}
  2400. /* USER CODE END TIM3_Init 2 */
  2401. HAL_TIM_MspPostInit(&htim3);
  2402. 8001264: 4803 ldr r0, [pc, #12] @ (8001274 <MX_TIM3_Init+0x148>)
  2403. 8001266: f002 f90d bl 8003484 <HAL_TIM_MspPostInit>
  2404. }
  2405. 800126a: bf00 nop
  2406. 800126c: 3728 adds r7, #40 @ 0x28
  2407. 800126e: 46bd mov sp, r7
  2408. 8001270: bdb0 pop {r4, r5, r7, pc}
  2409. 8001272: bf00 nop
  2410. 8001274: 240004b8 .word 0x240004b8
  2411. 8001278: 40000400 .word 0x40000400
  2412. 800127c: 00010040 .word 0x00010040
  2413. 8001280: 2400070c .word 0x2400070c
  2414. 08001284 <MX_UART8_Init>:
  2415. * @brief UART8 Initialization Function
  2416. * @param None
  2417. * @retval None
  2418. */
  2419. static void MX_UART8_Init(void)
  2420. {
  2421. 8001284: b580 push {r7, lr}
  2422. 8001286: af00 add r7, sp, #0
  2423. /* USER CODE END UART8_Init 0 */
  2424. /* USER CODE BEGIN UART8_Init 1 */
  2425. /* USER CODE END UART8_Init 1 */
  2426. huart8.Instance = UART8;
  2427. 8001288: 4b22 ldr r3, [pc, #136] @ (8001314 <MX_UART8_Init+0x90>)
  2428. 800128a: 4a23 ldr r2, [pc, #140] @ (8001318 <MX_UART8_Init+0x94>)
  2429. 800128c: 601a str r2, [r3, #0]
  2430. huart8.Init.BaudRate = 115200;
  2431. 800128e: 4b21 ldr r3, [pc, #132] @ (8001314 <MX_UART8_Init+0x90>)
  2432. 8001290: f44f 32e1 mov.w r2, #115200 @ 0x1c200
  2433. 8001294: 605a str r2, [r3, #4]
  2434. huart8.Init.WordLength = UART_WORDLENGTH_8B;
  2435. 8001296: 4b1f ldr r3, [pc, #124] @ (8001314 <MX_UART8_Init+0x90>)
  2436. 8001298: 2200 movs r2, #0
  2437. 800129a: 609a str r2, [r3, #8]
  2438. huart8.Init.StopBits = UART_STOPBITS_1;
  2439. 800129c: 4b1d ldr r3, [pc, #116] @ (8001314 <MX_UART8_Init+0x90>)
  2440. 800129e: 2200 movs r2, #0
  2441. 80012a0: 60da str r2, [r3, #12]
  2442. huart8.Init.Parity = UART_PARITY_NONE;
  2443. 80012a2: 4b1c ldr r3, [pc, #112] @ (8001314 <MX_UART8_Init+0x90>)
  2444. 80012a4: 2200 movs r2, #0
  2445. 80012a6: 611a str r2, [r3, #16]
  2446. huart8.Init.Mode = UART_MODE_TX_RX;
  2447. 80012a8: 4b1a ldr r3, [pc, #104] @ (8001314 <MX_UART8_Init+0x90>)
  2448. 80012aa: 220c movs r2, #12
  2449. 80012ac: 615a str r2, [r3, #20]
  2450. huart8.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  2451. 80012ae: 4b19 ldr r3, [pc, #100] @ (8001314 <MX_UART8_Init+0x90>)
  2452. 80012b0: 2200 movs r2, #0
  2453. 80012b2: 619a str r2, [r3, #24]
  2454. huart8.Init.OverSampling = UART_OVERSAMPLING_16;
  2455. 80012b4: 4b17 ldr r3, [pc, #92] @ (8001314 <MX_UART8_Init+0x90>)
  2456. 80012b6: 2200 movs r2, #0
  2457. 80012b8: 61da str r2, [r3, #28]
  2458. huart8.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  2459. 80012ba: 4b16 ldr r3, [pc, #88] @ (8001314 <MX_UART8_Init+0x90>)
  2460. 80012bc: 2200 movs r2, #0
  2461. 80012be: 621a str r2, [r3, #32]
  2462. huart8.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  2463. 80012c0: 4b14 ldr r3, [pc, #80] @ (8001314 <MX_UART8_Init+0x90>)
  2464. 80012c2: 2200 movs r2, #0
  2465. 80012c4: 625a str r2, [r3, #36] @ 0x24
  2466. huart8.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  2467. 80012c6: 4b13 ldr r3, [pc, #76] @ (8001314 <MX_UART8_Init+0x90>)
  2468. 80012c8: 2200 movs r2, #0
  2469. 80012ca: 629a str r2, [r3, #40] @ 0x28
  2470. if (HAL_UART_Init(&huart8) != HAL_OK)
  2471. 80012cc: 4811 ldr r0, [pc, #68] @ (8001314 <MX_UART8_Init+0x90>)
  2472. 80012ce: f00e f8f7 bl 800f4c0 <HAL_UART_Init>
  2473. 80012d2: 4603 mov r3, r0
  2474. 80012d4: 2b00 cmp r3, #0
  2475. 80012d6: d001 beq.n 80012dc <MX_UART8_Init+0x58>
  2476. {
  2477. Error_Handler();
  2478. 80012d8: f000 fba2 bl 8001a20 <Error_Handler>
  2479. }
  2480. if (HAL_UARTEx_SetTxFifoThreshold(&huart8, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  2481. 80012dc: 2100 movs r1, #0
  2482. 80012de: 480d ldr r0, [pc, #52] @ (8001314 <MX_UART8_Init+0x90>)
  2483. 80012e0: f010 fe25 bl 8011f2e <HAL_UARTEx_SetTxFifoThreshold>
  2484. 80012e4: 4603 mov r3, r0
  2485. 80012e6: 2b00 cmp r3, #0
  2486. 80012e8: d001 beq.n 80012ee <MX_UART8_Init+0x6a>
  2487. {
  2488. Error_Handler();
  2489. 80012ea: f000 fb99 bl 8001a20 <Error_Handler>
  2490. }
  2491. if (HAL_UARTEx_SetRxFifoThreshold(&huart8, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  2492. 80012ee: 2100 movs r1, #0
  2493. 80012f0: 4808 ldr r0, [pc, #32] @ (8001314 <MX_UART8_Init+0x90>)
  2494. 80012f2: f010 fe5a bl 8011faa <HAL_UARTEx_SetRxFifoThreshold>
  2495. 80012f6: 4603 mov r3, r0
  2496. 80012f8: 2b00 cmp r3, #0
  2497. 80012fa: d001 beq.n 8001300 <MX_UART8_Init+0x7c>
  2498. {
  2499. Error_Handler();
  2500. 80012fc: f000 fb90 bl 8001a20 <Error_Handler>
  2501. }
  2502. if (HAL_UARTEx_DisableFifoMode(&huart8) != HAL_OK)
  2503. 8001300: 4804 ldr r0, [pc, #16] @ (8001314 <MX_UART8_Init+0x90>)
  2504. 8001302: f010 fddb bl 8011ebc <HAL_UARTEx_DisableFifoMode>
  2505. 8001306: 4603 mov r3, r0
  2506. 8001308: 2b00 cmp r3, #0
  2507. 800130a: d001 beq.n 8001310 <MX_UART8_Init+0x8c>
  2508. {
  2509. Error_Handler();
  2510. 800130c: f000 fb88 bl 8001a20 <Error_Handler>
  2511. }
  2512. /* USER CODE BEGIN UART8_Init 2 */
  2513. /* USER CODE END UART8_Init 2 */
  2514. }
  2515. 8001310: bf00 nop
  2516. 8001312: bd80 pop {r7, pc}
  2517. 8001314: 24000504 .word 0x24000504
  2518. 8001318: 40007c00 .word 0x40007c00
  2519. 0800131c <MX_USART1_UART_Init>:
  2520. * @brief USART1 Initialization Function
  2521. * @param None
  2522. * @retval None
  2523. */
  2524. static void MX_USART1_UART_Init(void)
  2525. {
  2526. 800131c: b580 push {r7, lr}
  2527. 800131e: af00 add r7, sp, #0
  2528. /* USER CODE END USART1_Init 0 */
  2529. /* USER CODE BEGIN USART1_Init 1 */
  2530. /* USER CODE END USART1_Init 1 */
  2531. huart1.Instance = USART1;
  2532. 8001320: 4b24 ldr r3, [pc, #144] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2533. 8001322: 4a25 ldr r2, [pc, #148] @ (80013b8 <MX_USART1_UART_Init+0x9c>)
  2534. 8001324: 601a str r2, [r3, #0]
  2535. huart1.Init.BaudRate = 115200;
  2536. 8001326: 4b23 ldr r3, [pc, #140] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2537. 8001328: f44f 32e1 mov.w r2, #115200 @ 0x1c200
  2538. 800132c: 605a str r2, [r3, #4]
  2539. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  2540. 800132e: 4b21 ldr r3, [pc, #132] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2541. 8001330: 2200 movs r2, #0
  2542. 8001332: 609a str r2, [r3, #8]
  2543. huart1.Init.StopBits = UART_STOPBITS_1;
  2544. 8001334: 4b1f ldr r3, [pc, #124] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2545. 8001336: 2200 movs r2, #0
  2546. 8001338: 60da str r2, [r3, #12]
  2547. huart1.Init.Parity = UART_PARITY_NONE;
  2548. 800133a: 4b1e ldr r3, [pc, #120] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2549. 800133c: 2200 movs r2, #0
  2550. 800133e: 611a str r2, [r3, #16]
  2551. huart1.Init.Mode = UART_MODE_TX_RX;
  2552. 8001340: 4b1c ldr r3, [pc, #112] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2553. 8001342: 220c movs r2, #12
  2554. 8001344: 615a str r2, [r3, #20]
  2555. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  2556. 8001346: 4b1b ldr r3, [pc, #108] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2557. 8001348: 2200 movs r2, #0
  2558. 800134a: 619a str r2, [r3, #24]
  2559. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  2560. 800134c: 4b19 ldr r3, [pc, #100] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2561. 800134e: 2200 movs r2, #0
  2562. 8001350: 61da str r2, [r3, #28]
  2563. huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  2564. 8001352: 4b18 ldr r3, [pc, #96] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2565. 8001354: 2200 movs r2, #0
  2566. 8001356: 621a str r2, [r3, #32]
  2567. huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  2568. 8001358: 4b16 ldr r3, [pc, #88] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2569. 800135a: 2200 movs r2, #0
  2570. 800135c: 625a str r2, [r3, #36] @ 0x24
  2571. huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_TXINVERT_INIT;
  2572. 800135e: 4b15 ldr r3, [pc, #84] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2573. 8001360: 2201 movs r2, #1
  2574. 8001362: 629a str r2, [r3, #40] @ 0x28
  2575. huart1.AdvancedInit.TxPinLevelInvert = UART_ADVFEATURE_TXINV_ENABLE;
  2576. 8001364: 4b13 ldr r3, [pc, #76] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2577. 8001366: f44f 3200 mov.w r2, #131072 @ 0x20000
  2578. 800136a: 62da str r2, [r3, #44] @ 0x2c
  2579. if (HAL_UART_Init(&huart1) != HAL_OK)
  2580. 800136c: 4811 ldr r0, [pc, #68] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2581. 800136e: f00e f8a7 bl 800f4c0 <HAL_UART_Init>
  2582. 8001372: 4603 mov r3, r0
  2583. 8001374: 2b00 cmp r3, #0
  2584. 8001376: d001 beq.n 800137c <MX_USART1_UART_Init+0x60>
  2585. {
  2586. Error_Handler();
  2587. 8001378: f000 fb52 bl 8001a20 <Error_Handler>
  2588. }
  2589. if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  2590. 800137c: 2100 movs r1, #0
  2591. 800137e: 480d ldr r0, [pc, #52] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2592. 8001380: f010 fdd5 bl 8011f2e <HAL_UARTEx_SetTxFifoThreshold>
  2593. 8001384: 4603 mov r3, r0
  2594. 8001386: 2b00 cmp r3, #0
  2595. 8001388: d001 beq.n 800138e <MX_USART1_UART_Init+0x72>
  2596. {
  2597. Error_Handler();
  2598. 800138a: f000 fb49 bl 8001a20 <Error_Handler>
  2599. }
  2600. if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  2601. 800138e: 2100 movs r1, #0
  2602. 8001390: 4808 ldr r0, [pc, #32] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2603. 8001392: f010 fe0a bl 8011faa <HAL_UARTEx_SetRxFifoThreshold>
  2604. 8001396: 4603 mov r3, r0
  2605. 8001398: 2b00 cmp r3, #0
  2606. 800139a: d001 beq.n 80013a0 <MX_USART1_UART_Init+0x84>
  2607. {
  2608. Error_Handler();
  2609. 800139c: f000 fb40 bl 8001a20 <Error_Handler>
  2610. }
  2611. if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
  2612. 80013a0: 4804 ldr r0, [pc, #16] @ (80013b4 <MX_USART1_UART_Init+0x98>)
  2613. 80013a2: f010 fd8b bl 8011ebc <HAL_UARTEx_DisableFifoMode>
  2614. 80013a6: 4603 mov r3, r0
  2615. 80013a8: 2b00 cmp r3, #0
  2616. 80013aa: d001 beq.n 80013b0 <MX_USART1_UART_Init+0x94>
  2617. {
  2618. Error_Handler();
  2619. 80013ac: f000 fb38 bl 8001a20 <Error_Handler>
  2620. }
  2621. /* USER CODE BEGIN USART1_Init 2 */
  2622. /* USER CODE END USART1_Init 2 */
  2623. }
  2624. 80013b0: bf00 nop
  2625. 80013b2: bd80 pop {r7, pc}
  2626. 80013b4: 24000598 .word 0x24000598
  2627. 80013b8: 40011000 .word 0x40011000
  2628. 080013bc <MX_DMA_Init>:
  2629. /**
  2630. * Enable DMA controller clock
  2631. */
  2632. static void MX_DMA_Init(void)
  2633. {
  2634. 80013bc: b580 push {r7, lr}
  2635. 80013be: b082 sub sp, #8
  2636. 80013c0: af00 add r7, sp, #0
  2637. /* DMA controller clock enable */
  2638. __HAL_RCC_DMA1_CLK_ENABLE();
  2639. 80013c2: 4b15 ldr r3, [pc, #84] @ (8001418 <MX_DMA_Init+0x5c>)
  2640. 80013c4: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  2641. 80013c8: 4a13 ldr r2, [pc, #76] @ (8001418 <MX_DMA_Init+0x5c>)
  2642. 80013ca: f043 0301 orr.w r3, r3, #1
  2643. 80013ce: f8c2 30d8 str.w r3, [r2, #216] @ 0xd8
  2644. 80013d2: 4b11 ldr r3, [pc, #68] @ (8001418 <MX_DMA_Init+0x5c>)
  2645. 80013d4: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  2646. 80013d8: f003 0301 and.w r3, r3, #1
  2647. 80013dc: 607b str r3, [r7, #4]
  2648. 80013de: 687b ldr r3, [r7, #4]
  2649. /* DMA interrupt init */
  2650. /* DMA1_Stream0_IRQn interrupt configuration */
  2651. HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 5, 0);
  2652. 80013e0: 2200 movs r2, #0
  2653. 80013e2: 2105 movs r1, #5
  2654. 80013e4: 200b movs r0, #11
  2655. 80013e6: f005 f851 bl 800648c <HAL_NVIC_SetPriority>
  2656. HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
  2657. 80013ea: 200b movs r0, #11
  2658. 80013ec: f005 f868 bl 80064c0 <HAL_NVIC_EnableIRQ>
  2659. /* DMA1_Stream1_IRQn interrupt configuration */
  2660. HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0);
  2661. 80013f0: 2200 movs r2, #0
  2662. 80013f2: 2105 movs r1, #5
  2663. 80013f4: 200c movs r0, #12
  2664. 80013f6: f005 f849 bl 800648c <HAL_NVIC_SetPriority>
  2665. HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
  2666. 80013fa: 200c movs r0, #12
  2667. 80013fc: f005 f860 bl 80064c0 <HAL_NVIC_EnableIRQ>
  2668. /* DMA1_Stream2_IRQn interrupt configuration */
  2669. HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 5, 0);
  2670. 8001400: 2200 movs r2, #0
  2671. 8001402: 2105 movs r1, #5
  2672. 8001404: 200d movs r0, #13
  2673. 8001406: f005 f841 bl 800648c <HAL_NVIC_SetPriority>
  2674. HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);
  2675. 800140a: 200d movs r0, #13
  2676. 800140c: f005 f858 bl 80064c0 <HAL_NVIC_EnableIRQ>
  2677. }
  2678. 8001410: bf00 nop
  2679. 8001412: 3708 adds r7, #8
  2680. 8001414: 46bd mov sp, r7
  2681. 8001416: bd80 pop {r7, pc}
  2682. 8001418: 58024400 .word 0x58024400
  2683. 0800141c <MX_GPIO_Init>:
  2684. * @brief GPIO Initialization Function
  2685. * @param None
  2686. * @retval None
  2687. */
  2688. static void MX_GPIO_Init(void)
  2689. {
  2690. 800141c: b580 push {r7, lr}
  2691. 800141e: b08c sub sp, #48 @ 0x30
  2692. 8001420: af00 add r7, sp, #0
  2693. GPIO_InitTypeDef GPIO_InitStruct = {0};
  2694. 8001422: f107 031c add.w r3, r7, #28
  2695. 8001426: 2200 movs r2, #0
  2696. 8001428: 601a str r2, [r3, #0]
  2697. 800142a: 605a str r2, [r3, #4]
  2698. 800142c: 609a str r2, [r3, #8]
  2699. 800142e: 60da str r2, [r3, #12]
  2700. 8001430: 611a str r2, [r3, #16]
  2701. /* USER CODE BEGIN MX_GPIO_Init_1 */
  2702. /* USER CODE END MX_GPIO_Init_1 */
  2703. /* GPIO Ports Clock Enable */
  2704. __HAL_RCC_GPIOH_CLK_ENABLE();
  2705. 8001432: 4b58 ldr r3, [pc, #352] @ (8001594 <MX_GPIO_Init+0x178>)
  2706. 8001434: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2707. 8001438: 4a56 ldr r2, [pc, #344] @ (8001594 <MX_GPIO_Init+0x178>)
  2708. 800143a: f043 0380 orr.w r3, r3, #128 @ 0x80
  2709. 800143e: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2710. 8001442: 4b54 ldr r3, [pc, #336] @ (8001594 <MX_GPIO_Init+0x178>)
  2711. 8001444: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2712. 8001448: f003 0380 and.w r3, r3, #128 @ 0x80
  2713. 800144c: 61bb str r3, [r7, #24]
  2714. 800144e: 69bb ldr r3, [r7, #24]
  2715. __HAL_RCC_GPIOC_CLK_ENABLE();
  2716. 8001450: 4b50 ldr r3, [pc, #320] @ (8001594 <MX_GPIO_Init+0x178>)
  2717. 8001452: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2718. 8001456: 4a4f ldr r2, [pc, #316] @ (8001594 <MX_GPIO_Init+0x178>)
  2719. 8001458: f043 0304 orr.w r3, r3, #4
  2720. 800145c: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2721. 8001460: 4b4c ldr r3, [pc, #304] @ (8001594 <MX_GPIO_Init+0x178>)
  2722. 8001462: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2723. 8001466: f003 0304 and.w r3, r3, #4
  2724. 800146a: 617b str r3, [r7, #20]
  2725. 800146c: 697b ldr r3, [r7, #20]
  2726. __HAL_RCC_GPIOA_CLK_ENABLE();
  2727. 800146e: 4b49 ldr r3, [pc, #292] @ (8001594 <MX_GPIO_Init+0x178>)
  2728. 8001470: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2729. 8001474: 4a47 ldr r2, [pc, #284] @ (8001594 <MX_GPIO_Init+0x178>)
  2730. 8001476: f043 0301 orr.w r3, r3, #1
  2731. 800147a: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2732. 800147e: 4b45 ldr r3, [pc, #276] @ (8001594 <MX_GPIO_Init+0x178>)
  2733. 8001480: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2734. 8001484: f003 0301 and.w r3, r3, #1
  2735. 8001488: 613b str r3, [r7, #16]
  2736. 800148a: 693b ldr r3, [r7, #16]
  2737. __HAL_RCC_GPIOB_CLK_ENABLE();
  2738. 800148c: 4b41 ldr r3, [pc, #260] @ (8001594 <MX_GPIO_Init+0x178>)
  2739. 800148e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2740. 8001492: 4a40 ldr r2, [pc, #256] @ (8001594 <MX_GPIO_Init+0x178>)
  2741. 8001494: f043 0302 orr.w r3, r3, #2
  2742. 8001498: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2743. 800149c: 4b3d ldr r3, [pc, #244] @ (8001594 <MX_GPIO_Init+0x178>)
  2744. 800149e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2745. 80014a2: f003 0302 and.w r3, r3, #2
  2746. 80014a6: 60fb str r3, [r7, #12]
  2747. 80014a8: 68fb ldr r3, [r7, #12]
  2748. __HAL_RCC_GPIOE_CLK_ENABLE();
  2749. 80014aa: 4b3a ldr r3, [pc, #232] @ (8001594 <MX_GPIO_Init+0x178>)
  2750. 80014ac: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2751. 80014b0: 4a38 ldr r2, [pc, #224] @ (8001594 <MX_GPIO_Init+0x178>)
  2752. 80014b2: f043 0310 orr.w r3, r3, #16
  2753. 80014b6: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2754. 80014ba: 4b36 ldr r3, [pc, #216] @ (8001594 <MX_GPIO_Init+0x178>)
  2755. 80014bc: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2756. 80014c0: f003 0310 and.w r3, r3, #16
  2757. 80014c4: 60bb str r3, [r7, #8]
  2758. 80014c6: 68bb ldr r3, [r7, #8]
  2759. __HAL_RCC_GPIOD_CLK_ENABLE();
  2760. 80014c8: 4b32 ldr r3, [pc, #200] @ (8001594 <MX_GPIO_Init+0x178>)
  2761. 80014ca: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2762. 80014ce: 4a31 ldr r2, [pc, #196] @ (8001594 <MX_GPIO_Init+0x178>)
  2763. 80014d0: f043 0308 orr.w r3, r3, #8
  2764. 80014d4: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2765. 80014d8: 4b2e ldr r3, [pc, #184] @ (8001594 <MX_GPIO_Init+0x178>)
  2766. 80014da: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2767. 80014de: f003 0308 and.w r3, r3, #8
  2768. 80014e2: 607b str r3, [r7, #4]
  2769. 80014e4: 687b ldr r3, [r7, #4]
  2770. /*Configure GPIO pin Output Level */
  2771. HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
  2772. 80014e6: 2200 movs r2, #0
  2773. 80014e8: f24e 7180 movw r1, #59264 @ 0xe780
  2774. 80014ec: 482a ldr r0, [pc, #168] @ (8001598 <MX_GPIO_Init+0x17c>)
  2775. 80014ee: f008 fcc7 bl 8009e80 <HAL_GPIO_WritePin>
  2776. |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_RESET);
  2777. /*Configure GPIO pin Output Level */
  2778. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_RESET);
  2779. 80014f2: 2200 movs r2, #0
  2780. 80014f4: 21f0 movs r1, #240 @ 0xf0
  2781. 80014f6: 4829 ldr r0, [pc, #164] @ (800159c <MX_GPIO_Init+0x180>)
  2782. 80014f8: f008 fcc2 bl 8009e80 <HAL_GPIO_WritePin>
  2783. /*Configure GPIO pins : PE7 PE8 PE9 PE10
  2784. PE13 PE14 PE15 */
  2785. GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
  2786. 80014fc: f24e 7380 movw r3, #59264 @ 0xe780
  2787. 8001500: 61fb str r3, [r7, #28]
  2788. |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
  2789. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  2790. 8001502: 2301 movs r3, #1
  2791. 8001504: 623b str r3, [r7, #32]
  2792. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2793. 8001506: 2300 movs r3, #0
  2794. 8001508: 627b str r3, [r7, #36] @ 0x24
  2795. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  2796. 800150a: 2300 movs r3, #0
  2797. 800150c: 62bb str r3, [r7, #40] @ 0x28
  2798. HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  2799. 800150e: f107 031c add.w r3, r7, #28
  2800. 8001512: 4619 mov r1, r3
  2801. 8001514: 4820 ldr r0, [pc, #128] @ (8001598 <MX_GPIO_Init+0x17c>)
  2802. 8001516: f008 faeb bl 8009af0 <HAL_GPIO_Init>
  2803. /*Configure GPIO pins : PD8 PD9 PD10 PD11
  2804. PD12 PD13 */
  2805. GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
  2806. 800151a: f44f 537c mov.w r3, #16128 @ 0x3f00
  2807. 800151e: 61fb str r3, [r7, #28]
  2808. |GPIO_PIN_12|GPIO_PIN_13;
  2809. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
  2810. 8001520: f44f 1344 mov.w r3, #3211264 @ 0x310000
  2811. 8001524: 623b str r3, [r7, #32]
  2812. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2813. 8001526: 2300 movs r3, #0
  2814. 8001528: 627b str r3, [r7, #36] @ 0x24
  2815. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  2816. 800152a: f107 031c add.w r3, r7, #28
  2817. 800152e: 4619 mov r1, r3
  2818. 8001530: 481a ldr r0, [pc, #104] @ (800159c <MX_GPIO_Init+0x180>)
  2819. 8001532: f008 fadd bl 8009af0 <HAL_GPIO_Init>
  2820. /*Configure GPIO pin : PD3 */
  2821. GPIO_InitStruct.Pin = GPIO_PIN_3;
  2822. 8001536: 2308 movs r3, #8
  2823. 8001538: 61fb str r3, [r7, #28]
  2824. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  2825. 800153a: 2300 movs r3, #0
  2826. 800153c: 623b str r3, [r7, #32]
  2827. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2828. 800153e: 2300 movs r3, #0
  2829. 8001540: 627b str r3, [r7, #36] @ 0x24
  2830. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  2831. 8001542: f107 031c add.w r3, r7, #28
  2832. 8001546: 4619 mov r1, r3
  2833. 8001548: 4814 ldr r0, [pc, #80] @ (800159c <MX_GPIO_Init+0x180>)
  2834. 800154a: f008 fad1 bl 8009af0 <HAL_GPIO_Init>
  2835. /*Configure GPIO pins : PD4 PD5 PD6 PD7 */
  2836. GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
  2837. 800154e: 23f0 movs r3, #240 @ 0xf0
  2838. 8001550: 61fb str r3, [r7, #28]
  2839. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  2840. 8001552: 2301 movs r3, #1
  2841. 8001554: 623b str r3, [r7, #32]
  2842. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2843. 8001556: 2300 movs r3, #0
  2844. 8001558: 627b str r3, [r7, #36] @ 0x24
  2845. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  2846. 800155a: 2300 movs r3, #0
  2847. 800155c: 62bb str r3, [r7, #40] @ 0x28
  2848. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  2849. 800155e: f107 031c add.w r3, r7, #28
  2850. 8001562: 4619 mov r1, r3
  2851. 8001564: 480d ldr r0, [pc, #52] @ (800159c <MX_GPIO_Init+0x180>)
  2852. 8001566: f008 fac3 bl 8009af0 <HAL_GPIO_Init>
  2853. /* EXTI interrupt init*/
  2854. HAL_NVIC_SetPriority(EXTI9_5_IRQn, 5, 0);
  2855. 800156a: 2200 movs r2, #0
  2856. 800156c: 2105 movs r1, #5
  2857. 800156e: 2017 movs r0, #23
  2858. 8001570: f004 ff8c bl 800648c <HAL_NVIC_SetPriority>
  2859. HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
  2860. 8001574: 2017 movs r0, #23
  2861. 8001576: f004 ffa3 bl 80064c0 <HAL_NVIC_EnableIRQ>
  2862. HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0);
  2863. 800157a: 2200 movs r2, #0
  2864. 800157c: 2105 movs r1, #5
  2865. 800157e: 2028 movs r0, #40 @ 0x28
  2866. 8001580: f004 ff84 bl 800648c <HAL_NVIC_SetPriority>
  2867. HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
  2868. 8001584: 2028 movs r0, #40 @ 0x28
  2869. 8001586: f004 ff9b bl 80064c0 <HAL_NVIC_EnableIRQ>
  2870. /* USER CODE BEGIN MX_GPIO_Init_2 */
  2871. /* USER CODE END MX_GPIO_Init_2 */
  2872. }
  2873. 800158a: bf00 nop
  2874. 800158c: 3730 adds r7, #48 @ 0x30
  2875. 800158e: 46bd mov sp, r7
  2876. 8001590: bd80 pop {r7, pc}
  2877. 8001592: bf00 nop
  2878. 8001594: 58024400 .word 0x58024400
  2879. 8001598: 58021000 .word 0x58021000
  2880. 800159c: 58020c00 .word 0x58020c00
  2881. 080015a0 <HAL_ADC_ConvCpltCallback>:
  2882. /* USER CODE BEGIN 4 */
  2883. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
  2884. {
  2885. 80015a0: b580 push {r7, lr}
  2886. 80015a2: b08e sub sp, #56 @ 0x38
  2887. 80015a4: af00 add r7, sp, #0
  2888. 80015a6: 6078 str r0, [r7, #4]
  2889. if(hadc->Instance == ADC1)
  2890. 80015a8: 687b ldr r3, [r7, #4]
  2891. 80015aa: 681b ldr r3, [r3, #0]
  2892. 80015ac: 4a67 ldr r2, [pc, #412] @ (800174c <HAL_ADC_ConvCpltCallback+0x1ac>)
  2893. 80015ae: 4293 cmp r3, r2
  2894. 80015b0: d13f bne.n 8001632 <HAL_ADC_ConvCpltCallback+0x92>
  2895. {
  2896. DbgLEDToggle(DBG_LED4);
  2897. 80015b2: 2080 movs r0, #128 @ 0x80
  2898. 80015b4: f001 f916 bl 80027e4 <DbgLEDToggle>
  2899. SCB_InvalidateDCache_by_Addr((uint32_t*)(((uint32_t)adc1Data.adcDataBuffer) & ~(uint32_t)0x1F), __SCB_DCACHE_LINE_SIZE);
  2900. 80015b8: 4b65 ldr r3, [pc, #404] @ (8001750 <HAL_ADC_ConvCpltCallback+0x1b0>)
  2901. 80015ba: f023 031f bic.w r3, r3, #31
  2902. 80015be: 637b str r3, [r7, #52] @ 0x34
  2903. 80015c0: 2320 movs r3, #32
  2904. 80015c2: 633b str r3, [r7, #48] @ 0x30
  2905. \param[in] dsize size of memory block (in number of bytes)
  2906. */
  2907. __STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr (void *addr, int32_t dsize)
  2908. {
  2909. #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
  2910. if ( dsize > 0 ) {
  2911. 80015c4: 6b3b ldr r3, [r7, #48] @ 0x30
  2912. 80015c6: 2b00 cmp r3, #0
  2913. 80015c8: dd1d ble.n 8001606 <HAL_ADC_ConvCpltCallback+0x66>
  2914. int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
  2915. 80015ca: 6b7b ldr r3, [r7, #52] @ 0x34
  2916. 80015cc: f003 021f and.w r2, r3, #31
  2917. 80015d0: 6b3b ldr r3, [r7, #48] @ 0x30
  2918. 80015d2: 4413 add r3, r2
  2919. 80015d4: 62fb str r3, [r7, #44] @ 0x2c
  2920. uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
  2921. 80015d6: 6b7b ldr r3, [r7, #52] @ 0x34
  2922. 80015d8: 62bb str r3, [r7, #40] @ 0x28
  2923. __ASM volatile ("dsb 0xF":::"memory");
  2924. 80015da: f3bf 8f4f dsb sy
  2925. }
  2926. 80015de: bf00 nop
  2927. __DSB();
  2928. do {
  2929. SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */
  2930. 80015e0: 4a5c ldr r2, [pc, #368] @ (8001754 <HAL_ADC_ConvCpltCallback+0x1b4>)
  2931. 80015e2: 6abb ldr r3, [r7, #40] @ 0x28
  2932. 80015e4: f8c2 325c str.w r3, [r2, #604] @ 0x25c
  2933. op_addr += __SCB_DCACHE_LINE_SIZE;
  2934. 80015e8: 6abb ldr r3, [r7, #40] @ 0x28
  2935. 80015ea: 3320 adds r3, #32
  2936. 80015ec: 62bb str r3, [r7, #40] @ 0x28
  2937. op_size -= __SCB_DCACHE_LINE_SIZE;
  2938. 80015ee: 6afb ldr r3, [r7, #44] @ 0x2c
  2939. 80015f0: 3b20 subs r3, #32
  2940. 80015f2: 62fb str r3, [r7, #44] @ 0x2c
  2941. } while ( op_size > 0 );
  2942. 80015f4: 6afb ldr r3, [r7, #44] @ 0x2c
  2943. 80015f6: 2b00 cmp r3, #0
  2944. 80015f8: dcf2 bgt.n 80015e0 <HAL_ADC_ConvCpltCallback+0x40>
  2945. __ASM volatile ("dsb 0xF":::"memory");
  2946. 80015fa: f3bf 8f4f dsb sy
  2947. }
  2948. 80015fe: bf00 nop
  2949. __ASM volatile ("isb 0xF":::"memory");
  2950. 8001600: f3bf 8f6f isb sy
  2951. }
  2952. 8001604: bf00 nop
  2953. __DSB();
  2954. __ISB();
  2955. }
  2956. #endif
  2957. }
  2958. 8001606: bf00 nop
  2959. if(adc1MeasDataQueue != NULL)
  2960. 8001608: 4b53 ldr r3, [pc, #332] @ (8001758 <HAL_ADC_ConvCpltCallback+0x1b8>)
  2961. 800160a: 681b ldr r3, [r3, #0]
  2962. 800160c: 2b00 cmp r3, #0
  2963. 800160e: d006 beq.n 800161e <HAL_ADC_ConvCpltCallback+0x7e>
  2964. {
  2965. osMessageQueuePut(adc1MeasDataQueue, &adc1Data, 0, 0);
  2966. 8001610: 4b51 ldr r3, [pc, #324] @ (8001758 <HAL_ADC_ConvCpltCallback+0x1b8>)
  2967. 8001612: 6818 ldr r0, [r3, #0]
  2968. 8001614: 2300 movs r3, #0
  2969. 8001616: 2200 movs r2, #0
  2970. 8001618: 494d ldr r1, [pc, #308] @ (8001750 <HAL_ADC_ConvCpltCallback+0x1b0>)
  2971. 800161a: f011 f957 bl 80128cc <osMessageQueuePut>
  2972. }
  2973. if(HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc1Data.adcDataBuffer, ADC1LastData) != HAL_OK)
  2974. 800161e: 2207 movs r2, #7
  2975. 8001620: 494b ldr r1, [pc, #300] @ (8001750 <HAL_ADC_ConvCpltCallback+0x1b0>)
  2976. 8001622: 484e ldr r0, [pc, #312] @ (800175c <HAL_ADC_ConvCpltCallback+0x1bc>)
  2977. 8001624: f003 fe20 bl 8005268 <HAL_ADC_Start_DMA>
  2978. 8001628: 4603 mov r3, r0
  2979. 800162a: 2b00 cmp r3, #0
  2980. 800162c: d001 beq.n 8001632 <HAL_ADC_ConvCpltCallback+0x92>
  2981. {
  2982. Error_Handler();
  2983. 800162e: f000 f9f7 bl 8001a20 <Error_Handler>
  2984. }
  2985. }
  2986. if(hadc->Instance == ADC2)
  2987. 8001632: 687b ldr r3, [r7, #4]
  2988. 8001634: 681b ldr r3, [r3, #0]
  2989. 8001636: 4a4a ldr r2, [pc, #296] @ (8001760 <HAL_ADC_ConvCpltCallback+0x1c0>)
  2990. 8001638: 4293 cmp r3, r2
  2991. 800163a: d13c bne.n 80016b6 <HAL_ADC_ConvCpltCallback+0x116>
  2992. {
  2993. SCB_InvalidateDCache_by_Addr((uint32_t*)(((uint32_t)adc2Data.adcDataBuffer) & ~(uint32_t)0x1F), __SCB_DCACHE_LINE_SIZE);
  2994. 800163c: 4b49 ldr r3, [pc, #292] @ (8001764 <HAL_ADC_ConvCpltCallback+0x1c4>)
  2995. 800163e: f023 031f bic.w r3, r3, #31
  2996. 8001642: 627b str r3, [r7, #36] @ 0x24
  2997. 8001644: 2320 movs r3, #32
  2998. 8001646: 623b str r3, [r7, #32]
  2999. if ( dsize > 0 ) {
  3000. 8001648: 6a3b ldr r3, [r7, #32]
  3001. 800164a: 2b00 cmp r3, #0
  3002. 800164c: dd1d ble.n 800168a <HAL_ADC_ConvCpltCallback+0xea>
  3003. int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
  3004. 800164e: 6a7b ldr r3, [r7, #36] @ 0x24
  3005. 8001650: f003 021f and.w r2, r3, #31
  3006. 8001654: 6a3b ldr r3, [r7, #32]
  3007. 8001656: 4413 add r3, r2
  3008. 8001658: 61fb str r3, [r7, #28]
  3009. uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
  3010. 800165a: 6a7b ldr r3, [r7, #36] @ 0x24
  3011. 800165c: 61bb str r3, [r7, #24]
  3012. __ASM volatile ("dsb 0xF":::"memory");
  3013. 800165e: f3bf 8f4f dsb sy
  3014. }
  3015. 8001662: bf00 nop
  3016. SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */
  3017. 8001664: 4a3b ldr r2, [pc, #236] @ (8001754 <HAL_ADC_ConvCpltCallback+0x1b4>)
  3018. 8001666: 69bb ldr r3, [r7, #24]
  3019. 8001668: f8c2 325c str.w r3, [r2, #604] @ 0x25c
  3020. op_addr += __SCB_DCACHE_LINE_SIZE;
  3021. 800166c: 69bb ldr r3, [r7, #24]
  3022. 800166e: 3320 adds r3, #32
  3023. 8001670: 61bb str r3, [r7, #24]
  3024. op_size -= __SCB_DCACHE_LINE_SIZE;
  3025. 8001672: 69fb ldr r3, [r7, #28]
  3026. 8001674: 3b20 subs r3, #32
  3027. 8001676: 61fb str r3, [r7, #28]
  3028. } while ( op_size > 0 );
  3029. 8001678: 69fb ldr r3, [r7, #28]
  3030. 800167a: 2b00 cmp r3, #0
  3031. 800167c: dcf2 bgt.n 8001664 <HAL_ADC_ConvCpltCallback+0xc4>
  3032. __ASM volatile ("dsb 0xF":::"memory");
  3033. 800167e: f3bf 8f4f dsb sy
  3034. }
  3035. 8001682: bf00 nop
  3036. __ASM volatile ("isb 0xF":::"memory");
  3037. 8001684: f3bf 8f6f isb sy
  3038. }
  3039. 8001688: bf00 nop
  3040. }
  3041. 800168a: bf00 nop
  3042. if(adc2MeasDataQueue != NULL)
  3043. 800168c: 4b36 ldr r3, [pc, #216] @ (8001768 <HAL_ADC_ConvCpltCallback+0x1c8>)
  3044. 800168e: 681b ldr r3, [r3, #0]
  3045. 8001690: 2b00 cmp r3, #0
  3046. 8001692: d006 beq.n 80016a2 <HAL_ADC_ConvCpltCallback+0x102>
  3047. {
  3048. osMessageQueuePut(adc2MeasDataQueue, &adc2Data, 0, 0);
  3049. 8001694: 4b34 ldr r3, [pc, #208] @ (8001768 <HAL_ADC_ConvCpltCallback+0x1c8>)
  3050. 8001696: 6818 ldr r0, [r3, #0]
  3051. 8001698: 2300 movs r3, #0
  3052. 800169a: 2200 movs r2, #0
  3053. 800169c: 4931 ldr r1, [pc, #196] @ (8001764 <HAL_ADC_ConvCpltCallback+0x1c4>)
  3054. 800169e: f011 f915 bl 80128cc <osMessageQueuePut>
  3055. }
  3056. if(HAL_ADC_Start_DMA(&hadc2, (uint32_t *)adc2Data.adcDataBuffer, ADC2LastData) != HAL_OK)
  3057. 80016a2: 2203 movs r2, #3
  3058. 80016a4: 492f ldr r1, [pc, #188] @ (8001764 <HAL_ADC_ConvCpltCallback+0x1c4>)
  3059. 80016a6: 4831 ldr r0, [pc, #196] @ (800176c <HAL_ADC_ConvCpltCallback+0x1cc>)
  3060. 80016a8: f003 fdde bl 8005268 <HAL_ADC_Start_DMA>
  3061. 80016ac: 4603 mov r3, r0
  3062. 80016ae: 2b00 cmp r3, #0
  3063. 80016b0: d001 beq.n 80016b6 <HAL_ADC_ConvCpltCallback+0x116>
  3064. {
  3065. Error_Handler();
  3066. 80016b2: f000 f9b5 bl 8001a20 <Error_Handler>
  3067. }
  3068. }
  3069. if(hadc->Instance == ADC3)
  3070. 80016b6: 687b ldr r3, [r7, #4]
  3071. 80016b8: 681b ldr r3, [r3, #0]
  3072. 80016ba: 4a2d ldr r2, [pc, #180] @ (8001770 <HAL_ADC_ConvCpltCallback+0x1d0>)
  3073. 80016bc: 4293 cmp r3, r2
  3074. 80016be: d13c bne.n 800173a <HAL_ADC_ConvCpltCallback+0x19a>
  3075. {
  3076. SCB_InvalidateDCache_by_Addr((uint32_t*)(((uint32_t)adc3Data.adcDataBuffer) & ~(uint32_t)0x1F), __SCB_DCACHE_LINE_SIZE);
  3077. 80016c0: 4b2c ldr r3, [pc, #176] @ (8001774 <HAL_ADC_ConvCpltCallback+0x1d4>)
  3078. 80016c2: f023 031f bic.w r3, r3, #31
  3079. 80016c6: 617b str r3, [r7, #20]
  3080. 80016c8: 2320 movs r3, #32
  3081. 80016ca: 613b str r3, [r7, #16]
  3082. if ( dsize > 0 ) {
  3083. 80016cc: 693b ldr r3, [r7, #16]
  3084. 80016ce: 2b00 cmp r3, #0
  3085. 80016d0: dd1d ble.n 800170e <HAL_ADC_ConvCpltCallback+0x16e>
  3086. int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
  3087. 80016d2: 697b ldr r3, [r7, #20]
  3088. 80016d4: f003 021f and.w r2, r3, #31
  3089. 80016d8: 693b ldr r3, [r7, #16]
  3090. 80016da: 4413 add r3, r2
  3091. 80016dc: 60fb str r3, [r7, #12]
  3092. uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
  3093. 80016de: 697b ldr r3, [r7, #20]
  3094. 80016e0: 60bb str r3, [r7, #8]
  3095. __ASM volatile ("dsb 0xF":::"memory");
  3096. 80016e2: f3bf 8f4f dsb sy
  3097. }
  3098. 80016e6: bf00 nop
  3099. SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */
  3100. 80016e8: 4a1a ldr r2, [pc, #104] @ (8001754 <HAL_ADC_ConvCpltCallback+0x1b4>)
  3101. 80016ea: 68bb ldr r3, [r7, #8]
  3102. 80016ec: f8c2 325c str.w r3, [r2, #604] @ 0x25c
  3103. op_addr += __SCB_DCACHE_LINE_SIZE;
  3104. 80016f0: 68bb ldr r3, [r7, #8]
  3105. 80016f2: 3320 adds r3, #32
  3106. 80016f4: 60bb str r3, [r7, #8]
  3107. op_size -= __SCB_DCACHE_LINE_SIZE;
  3108. 80016f6: 68fb ldr r3, [r7, #12]
  3109. 80016f8: 3b20 subs r3, #32
  3110. 80016fa: 60fb str r3, [r7, #12]
  3111. } while ( op_size > 0 );
  3112. 80016fc: 68fb ldr r3, [r7, #12]
  3113. 80016fe: 2b00 cmp r3, #0
  3114. 8001700: dcf2 bgt.n 80016e8 <HAL_ADC_ConvCpltCallback+0x148>
  3115. __ASM volatile ("dsb 0xF":::"memory");
  3116. 8001702: f3bf 8f4f dsb sy
  3117. }
  3118. 8001706: bf00 nop
  3119. __ASM volatile ("isb 0xF":::"memory");
  3120. 8001708: f3bf 8f6f isb sy
  3121. }
  3122. 800170c: bf00 nop
  3123. }
  3124. 800170e: bf00 nop
  3125. if(adc3MeasDataQueue != NULL)
  3126. 8001710: 4b19 ldr r3, [pc, #100] @ (8001778 <HAL_ADC_ConvCpltCallback+0x1d8>)
  3127. 8001712: 681b ldr r3, [r3, #0]
  3128. 8001714: 2b00 cmp r3, #0
  3129. 8001716: d006 beq.n 8001726 <HAL_ADC_ConvCpltCallback+0x186>
  3130. {
  3131. osMessageQueuePut(adc3MeasDataQueue, &adc3Data, 0, 0);
  3132. 8001718: 4b17 ldr r3, [pc, #92] @ (8001778 <HAL_ADC_ConvCpltCallback+0x1d8>)
  3133. 800171a: 6818 ldr r0, [r3, #0]
  3134. 800171c: 2300 movs r3, #0
  3135. 800171e: 2200 movs r2, #0
  3136. 8001720: 4914 ldr r1, [pc, #80] @ (8001774 <HAL_ADC_ConvCpltCallback+0x1d4>)
  3137. 8001722: f011 f8d3 bl 80128cc <osMessageQueuePut>
  3138. }
  3139. if(HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adc3Data.adcDataBuffer, ADC3LastData) != HAL_OK)
  3140. 8001726: 2205 movs r2, #5
  3141. 8001728: 4912 ldr r1, [pc, #72] @ (8001774 <HAL_ADC_ConvCpltCallback+0x1d4>)
  3142. 800172a: 4814 ldr r0, [pc, #80] @ (800177c <HAL_ADC_ConvCpltCallback+0x1dc>)
  3143. 800172c: f003 fd9c bl 8005268 <HAL_ADC_Start_DMA>
  3144. 8001730: 4603 mov r3, r0
  3145. 8001732: 2b00 cmp r3, #0
  3146. 8001734: d001 beq.n 800173a <HAL_ADC_ConvCpltCallback+0x19a>
  3147. {
  3148. Error_Handler();
  3149. 8001736: f000 f973 bl 8001a20 <Error_Handler>
  3150. }
  3151. }osTimerStop (debugLedTimerHandle);
  3152. 800173a: 4b11 ldr r3, [pc, #68] @ (8001780 <HAL_ADC_ConvCpltCallback+0x1e0>)
  3153. 800173c: 681b ldr r3, [r3, #0]
  3154. 800173e: 4618 mov r0, r3
  3155. 8001740: f010 ff0c bl 801255c <osTimerStop>
  3156. }
  3157. 8001744: bf00 nop
  3158. 8001746: 3738 adds r7, #56 @ 0x38
  3159. 8001748: 46bd mov sp, r7
  3160. 800174a: bd80 pop {r7, pc}
  3161. 800174c: 40022000 .word 0x40022000
  3162. 8001750: 240000e0 .word 0x240000e0
  3163. 8001754: e000ed00 .word 0xe000ed00
  3164. 8001758: 24000738 .word 0x24000738
  3165. 800175c: 24000140 .word 0x24000140
  3166. 8001760: 40022100 .word 0x40022100
  3167. 8001764: 24000100 .word 0x24000100
  3168. 8001768: 2400073c .word 0x2400073c
  3169. 800176c: 240001a4 .word 0x240001a4
  3170. 8001770: 58026000 .word 0x58026000
  3171. 8001774: 24000120 .word 0x24000120
  3172. 8001778: 24000740 .word 0x24000740
  3173. 800177c: 24000208 .word 0x24000208
  3174. 8001780: 24000630 .word 0x24000630
  3175. 08001784 <StartDefaultTask>:
  3176. * @param argument: Not used
  3177. * @retval None
  3178. */
  3179. /* USER CODE END Header_StartDefaultTask */
  3180. void StartDefaultTask(void *argument)
  3181. {
  3182. 8001784: b580 push {r7, lr}
  3183. 8001786: b082 sub sp, #8
  3184. 8001788: af00 add r7, sp, #0
  3185. 800178a: 6078 str r0, [r7, #4]
  3186. /* USER CODE BEGIN 5 */
  3187. SelectCurrentSensorGain(CurrentSensorL1, csGain3);
  3188. 800178c: 2102 movs r1, #2
  3189. 800178e: 2000 movs r0, #0
  3190. 8001790: f001 f846 bl 8002820 <SelectCurrentSensorGain>
  3191. SelectCurrentSensorGain(CurrentSensorL2, csGain3);
  3192. 8001794: 2102 movs r1, #2
  3193. 8001796: 2001 movs r0, #1
  3194. 8001798: f001 f842 bl 8002820 <SelectCurrentSensorGain>
  3195. SelectCurrentSensorGain(CurrentSensorL3, csGain3);
  3196. 800179c: 2102 movs r1, #2
  3197. 800179e: 2002 movs r0, #2
  3198. 80017a0: f001 f83e bl 8002820 <SelectCurrentSensorGain>
  3199. EnableCurrentSensors();
  3200. 80017a4: f001 f830 bl 8002808 <EnableCurrentSensors>
  3201. osDelay(pdMS_TO_TICKS(1000));
  3202. 80017a8: f44f 707a mov.w r0, #1000 @ 0x3e8
  3203. 80017ac: f010 fdfb bl 80123a6 <osDelay>
  3204. if(HAL_TIM_Base_Start(&htim2) != HAL_OK)
  3205. 80017b0: 4834 ldr r0, [pc, #208] @ (8001884 <StartDefaultTask+0x100>)
  3206. 80017b2: f00c fac1 bl 800dd38 <HAL_TIM_Base_Start>
  3207. 80017b6: 4603 mov r3, r0
  3208. 80017b8: 2b00 cmp r3, #0
  3209. 80017ba: d001 beq.n 80017c0 <StartDefaultTask+0x3c>
  3210. {
  3211. Error_Handler();
  3212. 80017bc: f000 f930 bl 8001a20 <Error_Handler>
  3213. }
  3214. // if(HAL_ADC_Start_IT(&hadc1) != HAL_OK)
  3215. // {
  3216. // Error_Handler();
  3217. // }
  3218. if(HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc1Data.adcDataBuffer, ADC1LastData) != HAL_OK)
  3219. 80017c0: 2207 movs r2, #7
  3220. 80017c2: 4931 ldr r1, [pc, #196] @ (8001888 <StartDefaultTask+0x104>)
  3221. 80017c4: 4831 ldr r0, [pc, #196] @ (800188c <StartDefaultTask+0x108>)
  3222. 80017c6: f003 fd4f bl 8005268 <HAL_ADC_Start_DMA>
  3223. 80017ca: 4603 mov r3, r0
  3224. 80017cc: 2b00 cmp r3, #0
  3225. 80017ce: d001 beq.n 80017d4 <StartDefaultTask+0x50>
  3226. {
  3227. Error_Handler();
  3228. 80017d0: f000 f926 bl 8001a20 <Error_Handler>
  3229. }
  3230. if(HAL_ADC_Start_DMA(&hadc2, (uint32_t *)adc2Data.adcDataBuffer, ADC2LastData) != HAL_OK)
  3231. 80017d4: 2203 movs r2, #3
  3232. 80017d6: 492e ldr r1, [pc, #184] @ (8001890 <StartDefaultTask+0x10c>)
  3233. 80017d8: 482e ldr r0, [pc, #184] @ (8001894 <StartDefaultTask+0x110>)
  3234. 80017da: f003 fd45 bl 8005268 <HAL_ADC_Start_DMA>
  3235. 80017de: 4603 mov r3, r0
  3236. 80017e0: 2b00 cmp r3, #0
  3237. 80017e2: d001 beq.n 80017e8 <StartDefaultTask+0x64>
  3238. {
  3239. Error_Handler();
  3240. 80017e4: f000 f91c bl 8001a20 <Error_Handler>
  3241. }
  3242. if(HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adc3Data.adcDataBuffer, ADC3LastData) != HAL_OK)
  3243. 80017e8: 2205 movs r2, #5
  3244. 80017ea: 492b ldr r1, [pc, #172] @ (8001898 <StartDefaultTask+0x114>)
  3245. 80017ec: 482b ldr r0, [pc, #172] @ (800189c <StartDefaultTask+0x118>)
  3246. 80017ee: f003 fd3b bl 8005268 <HAL_ADC_Start_DMA>
  3247. 80017f2: 4603 mov r3, r0
  3248. 80017f4: 2b00 cmp r3, #0
  3249. 80017f6: d001 beq.n 80017fc <StartDefaultTask+0x78>
  3250. {
  3251. Error_Handler();
  3252. 80017f8: f000 f912 bl 8001a20 <Error_Handler>
  3253. }
  3254. /* Infinite loop */
  3255. for(;;)
  3256. {
  3257. osDelay(pdMS_TO_TICKS(100));
  3258. 80017fc: 2064 movs r0, #100 @ 0x64
  3259. 80017fe: f010 fdd2 bl 80123a6 <osDelay>
  3260. if(HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_1) == HAL_TIM_CHANNEL_STATE_READY &&
  3261. 8001802: 2100 movs r1, #0
  3262. 8001804: 4826 ldr r0, [pc, #152] @ (80018a0 <StartDefaultTask+0x11c>)
  3263. 8001806: f00d f8b7 bl 800e978 <HAL_TIM_GetChannelState>
  3264. 800180a: 4603 mov r3, r0
  3265. 800180c: 2b01 cmp r3, #1
  3266. 800180e: d118 bne.n 8001842 <StartDefaultTask+0xbe>
  3267. HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_2) == HAL_TIM_CHANNEL_STATE_READY)
  3268. 8001810: 2104 movs r1, #4
  3269. 8001812: 4823 ldr r0, [pc, #140] @ (80018a0 <StartDefaultTask+0x11c>)
  3270. 8001814: f00d f8b0 bl 800e978 <HAL_TIM_GetChannelState>
  3271. 8001818: 4603 mov r3, r0
  3272. if(HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_1) == HAL_TIM_CHANNEL_STATE_READY &&
  3273. 800181a: 2b01 cmp r3, #1
  3274. 800181c: d111 bne.n 8001842 <StartDefaultTask+0xbe>
  3275. {
  3276. if(osMutexAcquire(sensorsInfoMutex, osWaitForever) == osOK)
  3277. 800181e: 4b21 ldr r3, [pc, #132] @ (80018a4 <StartDefaultTask+0x120>)
  3278. 8001820: 681b ldr r3, [r3, #0]
  3279. 8001822: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3280. 8001826: 4618 mov r0, r3
  3281. 8001828: f010 ff55 bl 80126d6 <osMutexAcquire>
  3282. 800182c: 4603 mov r3, r0
  3283. 800182e: 2b00 cmp r3, #0
  3284. 8001830: d107 bne.n 8001842 <StartDefaultTask+0xbe>
  3285. {
  3286. sensorsInfo.motorXStatus = 0;
  3287. 8001832: 4b1d ldr r3, [pc, #116] @ (80018a8 <StartDefaultTask+0x124>)
  3288. 8001834: 2200 movs r2, #0
  3289. 8001836: 741a strb r2, [r3, #16]
  3290. osMutexRelease(sensorsInfoMutex);
  3291. 8001838: 4b1a ldr r3, [pc, #104] @ (80018a4 <StartDefaultTask+0x120>)
  3292. 800183a: 681b ldr r3, [r3, #0]
  3293. 800183c: 4618 mov r0, r3
  3294. 800183e: f010 ff95 bl 801276c <osMutexRelease>
  3295. }
  3296. }
  3297. if(HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_3) == HAL_TIM_CHANNEL_STATE_READY &&
  3298. 8001842: 2108 movs r1, #8
  3299. 8001844: 4816 ldr r0, [pc, #88] @ (80018a0 <StartDefaultTask+0x11c>)
  3300. 8001846: f00d f897 bl 800e978 <HAL_TIM_GetChannelState>
  3301. 800184a: 4603 mov r3, r0
  3302. 800184c: 2b01 cmp r3, #1
  3303. 800184e: d1d5 bne.n 80017fc <StartDefaultTask+0x78>
  3304. HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_4) == HAL_TIM_CHANNEL_STATE_READY)
  3305. 8001850: 210c movs r1, #12
  3306. 8001852: 4813 ldr r0, [pc, #76] @ (80018a0 <StartDefaultTask+0x11c>)
  3307. 8001854: f00d f890 bl 800e978 <HAL_TIM_GetChannelState>
  3308. 8001858: 4603 mov r3, r0
  3309. if(HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_3) == HAL_TIM_CHANNEL_STATE_READY &&
  3310. 800185a: 2b01 cmp r3, #1
  3311. 800185c: d1ce bne.n 80017fc <StartDefaultTask+0x78>
  3312. {
  3313. if(osMutexAcquire(sensorsInfoMutex, osWaitForever) == osOK)
  3314. 800185e: 4b11 ldr r3, [pc, #68] @ (80018a4 <StartDefaultTask+0x120>)
  3315. 8001860: 681b ldr r3, [r3, #0]
  3316. 8001862: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3317. 8001866: 4618 mov r0, r3
  3318. 8001868: f010 ff35 bl 80126d6 <osMutexAcquire>
  3319. 800186c: 4603 mov r3, r0
  3320. 800186e: 2b00 cmp r3, #0
  3321. 8001870: d1c4 bne.n 80017fc <StartDefaultTask+0x78>
  3322. {
  3323. sensorsInfo.motorYStatus = 0;
  3324. 8001872: 4b0d ldr r3, [pc, #52] @ (80018a8 <StartDefaultTask+0x124>)
  3325. 8001874: 2200 movs r2, #0
  3326. 8001876: 745a strb r2, [r3, #17]
  3327. osMutexRelease(sensorsInfoMutex);
  3328. 8001878: 4b0a ldr r3, [pc, #40] @ (80018a4 <StartDefaultTask+0x120>)
  3329. 800187a: 681b ldr r3, [r3, #0]
  3330. 800187c: 4618 mov r0, r3
  3331. 800187e: f010 ff75 bl 801276c <osMutexRelease>
  3332. osDelay(pdMS_TO_TICKS(100));
  3333. 8001882: e7bb b.n 80017fc <StartDefaultTask+0x78>
  3334. 8001884: 2400046c .word 0x2400046c
  3335. 8001888: 240000e0 .word 0x240000e0
  3336. 800188c: 24000140 .word 0x24000140
  3337. 8001890: 24000100 .word 0x24000100
  3338. 8001894: 240001a4 .word 0x240001a4
  3339. 8001898: 24000120 .word 0x24000120
  3340. 800189c: 24000208 .word 0x24000208
  3341. 80018a0: 240004b8 .word 0x240004b8
  3342. 80018a4: 24000750 .word 0x24000750
  3343. 80018a8: 24000794 .word 0x24000794
  3344. 080018ac <debugLedTimerCallback>:
  3345. /* USER CODE END 5 */
  3346. }
  3347. /* debugLedTimerCallback function */
  3348. void debugLedTimerCallback(void *argument)
  3349. {
  3350. 80018ac: b580 push {r7, lr}
  3351. 80018ae: b082 sub sp, #8
  3352. 80018b0: af00 add r7, sp, #0
  3353. 80018b2: 6078 str r0, [r7, #4]
  3354. /* USER CODE BEGIN debugLedTimerCallback */
  3355. DbgLEDOff (DBG_LED1);
  3356. 80018b4: 2010 movs r0, #16
  3357. 80018b6: f000 ff83 bl 80027c0 <DbgLEDOff>
  3358. /* USER CODE END debugLedTimerCallback */
  3359. }
  3360. 80018ba: bf00 nop
  3361. 80018bc: 3708 adds r7, #8
  3362. 80018be: 46bd mov sp, r7
  3363. 80018c0: bd80 pop {r7, pc}
  3364. ...
  3365. 080018c4 <fanTimerCallback>:
  3366. /* fanTimerCallback function */
  3367. void fanTimerCallback(void *argument)
  3368. {
  3369. 80018c4: b580 push {r7, lr}
  3370. 80018c6: b082 sub sp, #8
  3371. 80018c8: af00 add r7, sp, #0
  3372. 80018ca: 6078 str r0, [r7, #4]
  3373. /* USER CODE BEGIN fanTimerCallback */
  3374. HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);
  3375. 80018cc: 2104 movs r1, #4
  3376. 80018ce: 4803 ldr r0, [pc, #12] @ (80018dc <fanTimerCallback+0x18>)
  3377. 80018d0: f00c fc80 bl 800e1d4 <HAL_TIM_PWM_Stop>
  3378. /* USER CODE END fanTimerCallback */
  3379. }
  3380. 80018d4: bf00 nop
  3381. 80018d6: 3708 adds r7, #8
  3382. 80018d8: 46bd mov sp, r7
  3383. 80018da: bd80 pop {r7, pc}
  3384. 80018dc: 24000420 .word 0x24000420
  3385. 080018e0 <motorXTimerCallback>:
  3386. /* motorXTimerCallback function */
  3387. void motorXTimerCallback(void *argument)
  3388. {
  3389. 80018e0: b580 push {r7, lr}
  3390. 80018e2: b084 sub sp, #16
  3391. 80018e4: af02 add r7, sp, #8
  3392. 80018e6: 6078 str r0, [r7, #4]
  3393. /* USER CODE BEGIN motorXTimerCallback */
  3394. motorAction(&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_1, TIM_CHANNEL_2, HiZ, 0);
  3395. 80018e8: 2300 movs r3, #0
  3396. 80018ea: 9301 str r3, [sp, #4]
  3397. 80018ec: 2300 movs r3, #0
  3398. 80018ee: 9300 str r3, [sp, #0]
  3399. 80018f0: 2304 movs r3, #4
  3400. 80018f2: 2200 movs r2, #0
  3401. 80018f4: 4907 ldr r1, [pc, #28] @ (8001914 <motorXTimerCallback+0x34>)
  3402. 80018f6: 4808 ldr r0, [pc, #32] @ (8001918 <motorXTimerCallback+0x38>)
  3403. 80018f8: f001 f917 bl 8002b2a <motorAction>
  3404. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);
  3405. 80018fc: 2100 movs r1, #0
  3406. 80018fe: 4806 ldr r0, [pc, #24] @ (8001918 <motorXTimerCallback+0x38>)
  3407. 8001900: f00c fc68 bl 800e1d4 <HAL_TIM_PWM_Stop>
  3408. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2);
  3409. 8001904: 2104 movs r1, #4
  3410. 8001906: 4804 ldr r0, [pc, #16] @ (8001918 <motorXTimerCallback+0x38>)
  3411. 8001908: f00c fc64 bl 800e1d4 <HAL_TIM_PWM_Stop>
  3412. /* USER CODE END motorXTimerCallback */
  3413. }
  3414. 800190c: bf00 nop
  3415. 800190e: 3708 adds r7, #8
  3416. 8001910: 46bd mov sp, r7
  3417. 8001912: bd80 pop {r7, pc}
  3418. 8001914: 2400070c .word 0x2400070c
  3419. 8001918: 240004b8 .word 0x240004b8
  3420. 0800191c <motorYTimerCallback>:
  3421. /* motorYTimerCallback function */
  3422. void motorYTimerCallback(void *argument)
  3423. {
  3424. 800191c: b580 push {r7, lr}
  3425. 800191e: b084 sub sp, #16
  3426. 8001920: af02 add r7, sp, #8
  3427. 8001922: 6078 str r0, [r7, #4]
  3428. /* USER CODE BEGIN motorYTimerCallback */
  3429. motorAction(&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_3, TIM_CHANNEL_4, HiZ, 0);
  3430. 8001924: 2300 movs r3, #0
  3431. 8001926: 9301 str r3, [sp, #4]
  3432. 8001928: 2300 movs r3, #0
  3433. 800192a: 9300 str r3, [sp, #0]
  3434. 800192c: 230c movs r3, #12
  3435. 800192e: 2208 movs r2, #8
  3436. 8001930: 4907 ldr r1, [pc, #28] @ (8001950 <motorYTimerCallback+0x34>)
  3437. 8001932: 4808 ldr r0, [pc, #32] @ (8001954 <motorYTimerCallback+0x38>)
  3438. 8001934: f001 f8f9 bl 8002b2a <motorAction>
  3439. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3);
  3440. 8001938: 2108 movs r1, #8
  3441. 800193a: 4806 ldr r0, [pc, #24] @ (8001954 <motorYTimerCallback+0x38>)
  3442. 800193c: f00c fc4a bl 800e1d4 <HAL_TIM_PWM_Stop>
  3443. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_4);
  3444. 8001940: 210c movs r1, #12
  3445. 8001942: 4804 ldr r0, [pc, #16] @ (8001954 <motorYTimerCallback+0x38>)
  3446. 8001944: f00c fc46 bl 800e1d4 <HAL_TIM_PWM_Stop>
  3447. /* USER CODE END motorYTimerCallback */
  3448. }
  3449. 8001948: bf00 nop
  3450. 800194a: 3708 adds r7, #8
  3451. 800194c: 46bd mov sp, r7
  3452. 800194e: bd80 pop {r7, pc}
  3453. 8001950: 2400070c .word 0x2400070c
  3454. 8001954: 240004b8 .word 0x240004b8
  3455. 08001958 <MPU_Config>:
  3456. /* MPU Configuration */
  3457. void MPU_Config(void)
  3458. {
  3459. 8001958: b580 push {r7, lr}
  3460. 800195a: b084 sub sp, #16
  3461. 800195c: af00 add r7, sp, #0
  3462. MPU_Region_InitTypeDef MPU_InitStruct = {0};
  3463. 800195e: 463b mov r3, r7
  3464. 8001960: 2200 movs r2, #0
  3465. 8001962: 601a str r2, [r3, #0]
  3466. 8001964: 605a str r2, [r3, #4]
  3467. 8001966: 609a str r2, [r3, #8]
  3468. 8001968: 60da str r2, [r3, #12]
  3469. /* Disables the MPU */
  3470. HAL_MPU_Disable();
  3471. 800196a: f004 fdb7 bl 80064dc <HAL_MPU_Disable>
  3472. /** Initializes and configures the Region and the memory to be protected
  3473. */
  3474. MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  3475. 800196e: 2301 movs r3, #1
  3476. 8001970: 703b strb r3, [r7, #0]
  3477. MPU_InitStruct.Number = MPU_REGION_NUMBER0;
  3478. 8001972: 2300 movs r3, #0
  3479. 8001974: 707b strb r3, [r7, #1]
  3480. MPU_InitStruct.BaseAddress = 0x0;
  3481. 8001976: 2300 movs r3, #0
  3482. 8001978: 607b str r3, [r7, #4]
  3483. MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;
  3484. 800197a: 231f movs r3, #31
  3485. 800197c: 723b strb r3, [r7, #8]
  3486. MPU_InitStruct.SubRegionDisable = 0x87;
  3487. 800197e: 2387 movs r3, #135 @ 0x87
  3488. 8001980: 727b strb r3, [r7, #9]
  3489. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  3490. 8001982: 2300 movs r3, #0
  3491. 8001984: 72bb strb r3, [r7, #10]
  3492. MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;
  3493. 8001986: 2300 movs r3, #0
  3494. 8001988: 72fb strb r3, [r7, #11]
  3495. MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
  3496. 800198a: 2301 movs r3, #1
  3497. 800198c: 733b strb r3, [r7, #12]
  3498. MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
  3499. 800198e: 2301 movs r3, #1
  3500. 8001990: 737b strb r3, [r7, #13]
  3501. MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
  3502. 8001992: 2300 movs r3, #0
  3503. 8001994: 73bb strb r3, [r7, #14]
  3504. MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
  3505. 8001996: 2300 movs r3, #0
  3506. 8001998: 73fb strb r3, [r7, #15]
  3507. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  3508. 800199a: 463b mov r3, r7
  3509. 800199c: 4618 mov r0, r3
  3510. 800199e: f004 fdd5 bl 800654c <HAL_MPU_ConfigRegion>
  3511. /** Initializes and configures the Region and the memory to be protected
  3512. */
  3513. MPU_InitStruct.Number = MPU_REGION_NUMBER1;
  3514. 80019a2: 2301 movs r3, #1
  3515. 80019a4: 707b strb r3, [r7, #1]
  3516. MPU_InitStruct.BaseAddress = 0x24020000;
  3517. 80019a6: 4b13 ldr r3, [pc, #76] @ (80019f4 <MPU_Config+0x9c>)
  3518. 80019a8: 607b str r3, [r7, #4]
  3519. MPU_InitStruct.Size = MPU_REGION_SIZE_128KB;
  3520. 80019aa: 2310 movs r3, #16
  3521. 80019ac: 723b strb r3, [r7, #8]
  3522. MPU_InitStruct.SubRegionDisable = 0x0;
  3523. 80019ae: 2300 movs r3, #0
  3524. 80019b0: 727b strb r3, [r7, #9]
  3525. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
  3526. 80019b2: 2301 movs r3, #1
  3527. 80019b4: 72bb strb r3, [r7, #10]
  3528. MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  3529. 80019b6: 2303 movs r3, #3
  3530. 80019b8: 72fb strb r3, [r7, #11]
  3531. MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
  3532. 80019ba: 2300 movs r3, #0
  3533. 80019bc: 737b strb r3, [r7, #13]
  3534. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  3535. 80019be: 463b mov r3, r7
  3536. 80019c0: 4618 mov r0, r3
  3537. 80019c2: f004 fdc3 bl 800654c <HAL_MPU_ConfigRegion>
  3538. /** Initializes and configures the Region and the memory to be protected
  3539. */
  3540. MPU_InitStruct.Number = MPU_REGION_NUMBER2;
  3541. 80019c6: 2302 movs r3, #2
  3542. 80019c8: 707b strb r3, [r7, #1]
  3543. MPU_InitStruct.BaseAddress = 0x24040000;
  3544. 80019ca: 4b0b ldr r3, [pc, #44] @ (80019f8 <MPU_Config+0xa0>)
  3545. 80019cc: 607b str r3, [r7, #4]
  3546. MPU_InitStruct.Size = MPU_REGION_SIZE_512B;
  3547. 80019ce: 2308 movs r3, #8
  3548. 80019d0: 723b strb r3, [r7, #8]
  3549. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  3550. 80019d2: 2300 movs r3, #0
  3551. 80019d4: 72bb strb r3, [r7, #10]
  3552. MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
  3553. 80019d6: 2301 movs r3, #1
  3554. 80019d8: 737b strb r3, [r7, #13]
  3555. MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
  3556. 80019da: 2301 movs r3, #1
  3557. 80019dc: 73fb strb r3, [r7, #15]
  3558. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  3559. 80019de: 463b mov r3, r7
  3560. 80019e0: 4618 mov r0, r3
  3561. 80019e2: f004 fdb3 bl 800654c <HAL_MPU_ConfigRegion>
  3562. /* Enables the MPU */
  3563. HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
  3564. 80019e6: 2004 movs r0, #4
  3565. 80019e8: f004 fd90 bl 800650c <HAL_MPU_Enable>
  3566. }
  3567. 80019ec: bf00 nop
  3568. 80019ee: 3710 adds r7, #16
  3569. 80019f0: 46bd mov sp, r7
  3570. 80019f2: bd80 pop {r7, pc}
  3571. 80019f4: 24020000 .word 0x24020000
  3572. 80019f8: 24040000 .word 0x24040000
  3573. 080019fc <HAL_TIM_PeriodElapsedCallback>:
  3574. * a global variable "uwTick" used as application time base.
  3575. * @param htim : TIM handle
  3576. * @retval None
  3577. */
  3578. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  3579. {
  3580. 80019fc: b580 push {r7, lr}
  3581. 80019fe: b082 sub sp, #8
  3582. 8001a00: af00 add r7, sp, #0
  3583. 8001a02: 6078 str r0, [r7, #4]
  3584. /* USER CODE BEGIN Callback 0 */
  3585. /* USER CODE END Callback 0 */
  3586. if (htim->Instance == TIM6) {
  3587. 8001a04: 687b ldr r3, [r7, #4]
  3588. 8001a06: 681b ldr r3, [r3, #0]
  3589. 8001a08: 4a04 ldr r2, [pc, #16] @ (8001a1c <HAL_TIM_PeriodElapsedCallback+0x20>)
  3590. 8001a0a: 4293 cmp r3, r2
  3591. 8001a0c: d101 bne.n 8001a12 <HAL_TIM_PeriodElapsedCallback+0x16>
  3592. HAL_IncTick();
  3593. 8001a0e: f003 f815 bl 8004a3c <HAL_IncTick>
  3594. {
  3595. }
  3596. /* USER CODE END Callback 1 */
  3597. }
  3598. 8001a12: bf00 nop
  3599. 8001a14: 3708 adds r7, #8
  3600. 8001a16: 46bd mov sp, r7
  3601. 8001a18: bd80 pop {r7, pc}
  3602. 8001a1a: bf00 nop
  3603. 8001a1c: 40001000 .word 0x40001000
  3604. 08001a20 <Error_Handler>:
  3605. /**
  3606. * @brief This function is executed in case of error occurrence.
  3607. * @retval None
  3608. */
  3609. void Error_Handler(void)
  3610. {
  3611. 8001a20: b480 push {r7}
  3612. 8001a22: af00 add r7, sp, #0
  3613. __ASM volatile ("cpsid i" : : : "memory");
  3614. 8001a24: b672 cpsid i
  3615. }
  3616. 8001a26: bf00 nop
  3617. /* USER CODE BEGIN Error_Handler_Debug */
  3618. /* User can add his own implementation to report the HAL error return state */
  3619. __disable_irq();
  3620. while (1)
  3621. 8001a28: bf00 nop
  3622. 8001a2a: e7fd b.n 8001a28 <Error_Handler+0x8>
  3623. 08001a2c <MeasTasksInit>:
  3624. extern TIM_OC_InitTypeDef motorXYTimerConfigOC;
  3625. extern osTimerId_t motorXTimerHandle;
  3626. extern osTimerId_t motorYTimerHandle;
  3627. void MeasTasksInit (void) {
  3628. 8001a2c: b580 push {r7, lr}
  3629. 8001a2e: b0a4 sub sp, #144 @ 0x90
  3630. 8001a30: af00 add r7, sp, #0
  3631. vRefmVMutex = osMutexNew (NULL);
  3632. 8001a32: 2000 movs r0, #0
  3633. 8001a34: f010 fdc9 bl 80125ca <osMutexNew>
  3634. 8001a38: 4603 mov r3, r0
  3635. 8001a3a: 4a48 ldr r2, [pc, #288] @ (8001b5c <MeasTasksInit+0x130>)
  3636. 8001a3c: 6013 str r3, [r2, #0]
  3637. resMeasurementsMutex = osMutexNew (NULL);
  3638. 8001a3e: 2000 movs r0, #0
  3639. 8001a40: f010 fdc3 bl 80125ca <osMutexNew>
  3640. 8001a44: 4603 mov r3, r0
  3641. 8001a46: 4a46 ldr r2, [pc, #280] @ (8001b60 <MeasTasksInit+0x134>)
  3642. 8001a48: 6013 str r3, [r2, #0]
  3643. sensorsInfoMutex = osMutexNew (NULL);
  3644. 8001a4a: 2000 movs r0, #0
  3645. 8001a4c: f010 fdbd bl 80125ca <osMutexNew>
  3646. 8001a50: 4603 mov r3, r0
  3647. 8001a52: 4a44 ldr r2, [pc, #272] @ (8001b64 <MeasTasksInit+0x138>)
  3648. 8001a54: 6013 str r3, [r2, #0]
  3649. ILxRefMutex = osMutexNew (NULL);
  3650. 8001a56: 2000 movs r0, #0
  3651. 8001a58: f010 fdb7 bl 80125ca <osMutexNew>
  3652. 8001a5c: 4603 mov r3, r0
  3653. 8001a5e: 4a42 ldr r2, [pc, #264] @ (8001b68 <MeasTasksInit+0x13c>)
  3654. 8001a60: 6013 str r3, [r2, #0]
  3655. adc1MeasDataQueue = osMessageQueueNew (8, sizeof (ADC1_Data), NULL);
  3656. 8001a62: 2200 movs r2, #0
  3657. 8001a64: 2120 movs r1, #32
  3658. 8001a66: 2008 movs r0, #8
  3659. 8001a68: f010 febd bl 80127e6 <osMessageQueueNew>
  3660. 8001a6c: 4603 mov r3, r0
  3661. 8001a6e: 4a3f ldr r2, [pc, #252] @ (8001b6c <MeasTasksInit+0x140>)
  3662. 8001a70: 6013 str r3, [r2, #0]
  3663. adc2MeasDataQueue = osMessageQueueNew (8, sizeof (ADC2_Data), NULL);
  3664. 8001a72: 2200 movs r2, #0
  3665. 8001a74: 2120 movs r1, #32
  3666. 8001a76: 2008 movs r0, #8
  3667. 8001a78: f010 feb5 bl 80127e6 <osMessageQueueNew>
  3668. 8001a7c: 4603 mov r3, r0
  3669. 8001a7e: 4a3c ldr r2, [pc, #240] @ (8001b70 <MeasTasksInit+0x144>)
  3670. 8001a80: 6013 str r3, [r2, #0]
  3671. adc3MeasDataQueue = osMessageQueueNew (8, sizeof (ADC3_Data), NULL);
  3672. 8001a82: 2200 movs r2, #0
  3673. 8001a84: 2120 movs r1, #32
  3674. 8001a86: 2008 movs r0, #8
  3675. 8001a88: f010 fead bl 80127e6 <osMessageQueueNew>
  3676. 8001a8c: 4603 mov r3, r0
  3677. 8001a8e: 4a39 ldr r2, [pc, #228] @ (8001b74 <MeasTasksInit+0x148>)
  3678. 8001a90: 6013 str r3, [r2, #0]
  3679. osThreadAttr_t osThreadAttradc1MeasTask = { 0 };
  3680. 8001a92: f107 036c add.w r3, r7, #108 @ 0x6c
  3681. 8001a96: 2224 movs r2, #36 @ 0x24
  3682. 8001a98: 2100 movs r1, #0
  3683. 8001a9a: 4618 mov r0, r3
  3684. 8001a9c: f014 fe5b bl 8016756 <memset>
  3685. osThreadAttr_t osThreadAttradc2MeasTask = { 0 };
  3686. 8001aa0: f107 0348 add.w r3, r7, #72 @ 0x48
  3687. 8001aa4: 2224 movs r2, #36 @ 0x24
  3688. 8001aa6: 2100 movs r1, #0
  3689. 8001aa8: 4618 mov r0, r3
  3690. 8001aaa: f014 fe54 bl 8016756 <memset>
  3691. osThreadAttr_t osThreadAttradc3MeasTask = { 0 };
  3692. 8001aae: f107 0324 add.w r3, r7, #36 @ 0x24
  3693. 8001ab2: 2224 movs r2, #36 @ 0x24
  3694. 8001ab4: 2100 movs r1, #0
  3695. 8001ab6: 4618 mov r0, r3
  3696. 8001ab8: f014 fe4d bl 8016756 <memset>
  3697. osThreadAttradc1MeasTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  3698. 8001abc: f44f 6380 mov.w r3, #1024 @ 0x400
  3699. 8001ac0: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  3700. osThreadAttradc1MeasTask.priority = (osPriority_t)osPriorityRealtime;
  3701. 8001ac4: 2330 movs r3, #48 @ 0x30
  3702. 8001ac6: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  3703. osThreadAttradc2MeasTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  3704. 8001aca: f44f 6380 mov.w r3, #1024 @ 0x400
  3705. 8001ace: 65fb str r3, [r7, #92] @ 0x5c
  3706. osThreadAttradc2MeasTask.priority = (osPriority_t)osPriorityRealtime;
  3707. 8001ad0: 2330 movs r3, #48 @ 0x30
  3708. 8001ad2: 663b str r3, [r7, #96] @ 0x60
  3709. osThreadAttradc3MeasTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  3710. 8001ad4: f44f 6380 mov.w r3, #1024 @ 0x400
  3711. 8001ad8: 63bb str r3, [r7, #56] @ 0x38
  3712. osThreadAttradc3MeasTask.priority = (osPriority_t)osPriorityNormal;
  3713. 8001ada: 2318 movs r3, #24
  3714. 8001adc: 63fb str r3, [r7, #60] @ 0x3c
  3715. adc1MeasTaskHandle = osThreadNew (ADC1MeasTask, NULL, &osThreadAttradc1MeasTask);
  3716. 8001ade: f107 036c add.w r3, r7, #108 @ 0x6c
  3717. 8001ae2: 461a mov r2, r3
  3718. 8001ae4: 2100 movs r1, #0
  3719. 8001ae6: 4824 ldr r0, [pc, #144] @ (8001b78 <MeasTasksInit+0x14c>)
  3720. 8001ae8: f010 fbca bl 8012280 <osThreadNew>
  3721. 8001aec: 4603 mov r3, r0
  3722. 8001aee: 4a23 ldr r2, [pc, #140] @ (8001b7c <MeasTasksInit+0x150>)
  3723. 8001af0: 6013 str r3, [r2, #0]
  3724. adc2MeasTaskHandle = osThreadNew (ADC2MeasTask, NULL, &osThreadAttradc2MeasTask);
  3725. 8001af2: f107 0348 add.w r3, r7, #72 @ 0x48
  3726. 8001af6: 461a mov r2, r3
  3727. 8001af8: 2100 movs r1, #0
  3728. 8001afa: 4821 ldr r0, [pc, #132] @ (8001b80 <MeasTasksInit+0x154>)
  3729. 8001afc: f010 fbc0 bl 8012280 <osThreadNew>
  3730. 8001b00: 4603 mov r3, r0
  3731. 8001b02: 4a20 ldr r2, [pc, #128] @ (8001b84 <MeasTasksInit+0x158>)
  3732. 8001b04: 6013 str r3, [r2, #0]
  3733. adc3MeasTaskHandle = osThreadNew (ADC3MeasTask, NULL, &osThreadAttradc3MeasTask);
  3734. 8001b06: f107 0324 add.w r3, r7, #36 @ 0x24
  3735. 8001b0a: 461a mov r2, r3
  3736. 8001b0c: 2100 movs r1, #0
  3737. 8001b0e: 481e ldr r0, [pc, #120] @ (8001b88 <MeasTasksInit+0x15c>)
  3738. 8001b10: f010 fbb6 bl 8012280 <osThreadNew>
  3739. 8001b14: 4603 mov r3, r0
  3740. 8001b16: 4a1d ldr r2, [pc, #116] @ (8001b8c <MeasTasksInit+0x160>)
  3741. 8001b18: 6013 str r3, [r2, #0]
  3742. limiterSwitchDataQueue = osMessageQueueNew (8, sizeof (LimiterSwitchData), NULL);
  3743. 8001b1a: 2200 movs r2, #0
  3744. 8001b1c: 2104 movs r1, #4
  3745. 8001b1e: 2008 movs r0, #8
  3746. 8001b20: f010 fe61 bl 80127e6 <osMessageQueueNew>
  3747. 8001b24: 4603 mov r3, r0
  3748. 8001b26: 4a1a ldr r2, [pc, #104] @ (8001b90 <MeasTasksInit+0x164>)
  3749. 8001b28: 6013 str r3, [r2, #0]
  3750. osThreadAttr_t osThreadAttradc1LimiterSwitchTask = { 0 };
  3751. 8001b2a: 463b mov r3, r7
  3752. 8001b2c: 2224 movs r2, #36 @ 0x24
  3753. 8001b2e: 2100 movs r1, #0
  3754. 8001b30: 4618 mov r0, r3
  3755. 8001b32: f014 fe10 bl 8016756 <memset>
  3756. osThreadAttradc1LimiterSwitchTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  3757. 8001b36: f44f 6380 mov.w r3, #1024 @ 0x400
  3758. 8001b3a: 617b str r3, [r7, #20]
  3759. osThreadAttradc1LimiterSwitchTask.priority = (osPriority_t)osPriorityNormal;
  3760. 8001b3c: 2318 movs r3, #24
  3761. 8001b3e: 61bb str r3, [r7, #24]
  3762. limiterSwitchTaskHandle = osThreadNew (LimiterSwitchTask, NULL, &osThreadAttradc1LimiterSwitchTask);
  3763. 8001b40: 463b mov r3, r7
  3764. 8001b42: 461a mov r2, r3
  3765. 8001b44: 2100 movs r1, #0
  3766. 8001b46: 4813 ldr r0, [pc, #76] @ (8001b94 <MeasTasksInit+0x168>)
  3767. 8001b48: f010 fb9a bl 8012280 <osThreadNew>
  3768. 8001b4c: 4603 mov r3, r0
  3769. 8001b4e: 4a12 ldr r2, [pc, #72] @ (8001b98 <MeasTasksInit+0x16c>)
  3770. 8001b50: 6013 str r3, [r2, #0]
  3771. }
  3772. 8001b52: bf00 nop
  3773. 8001b54: 3790 adds r7, #144 @ 0x90
  3774. 8001b56: 46bd mov sp, r7
  3775. 8001b58: bd80 pop {r7, pc}
  3776. 8001b5a: bf00 nop
  3777. 8001b5c: 24000748 .word 0x24000748
  3778. 8001b60: 2400074c .word 0x2400074c
  3779. 8001b64: 24000750 .word 0x24000750
  3780. 8001b68: 24000754 .word 0x24000754
  3781. 8001b6c: 24000738 .word 0x24000738
  3782. 8001b70: 2400073c .word 0x2400073c
  3783. 8001b74: 24000740 .word 0x24000740
  3784. 8001b78: 08001ba1 .word 0x08001ba1
  3785. 8001b7c: 24000728 .word 0x24000728
  3786. 8001b80: 08001f29 .word 0x08001f29
  3787. 8001b84: 2400072c .word 0x2400072c
  3788. 8001b88: 08002231 .word 0x08002231
  3789. 8001b8c: 24000730 .word 0x24000730
  3790. 8001b90: 24000744 .word 0x24000744
  3791. 8001b94: 080025ad .word 0x080025ad
  3792. 8001b98: 24000734 .word 0x24000734
  3793. 8001b9c: 00000000 .word 0x00000000
  3794. 08001ba0 <ADC1MeasTask>:
  3795. void ADC1MeasTask (void* arg) {
  3796. 8001ba0: b580 push {r7, lr}
  3797. 8001ba2: b09a sub sp, #104 @ 0x68
  3798. 8001ba4: af00 add r7, sp, #0
  3799. 8001ba6: 6078 str r0, [r7, #4]
  3800. float circBuffer[VOLTAGES_COUNT][CIRC_BUFF_LEN] = {0};
  3801. 8001ba8: f107 032c add.w r3, r7, #44 @ 0x2c
  3802. 8001bac: 2228 movs r2, #40 @ 0x28
  3803. 8001bae: 2100 movs r1, #0
  3804. 8001bb0: 4618 mov r0, r3
  3805. 8001bb2: f014 fdd0 bl 8016756 <memset>
  3806. float rms[VOLTAGES_COUNT] = {0};;
  3807. 8001bb6: f04f 0300 mov.w r3, #0
  3808. 8001bba: 62bb str r3, [r7, #40] @ 0x28
  3809. ADC1_Data adcData = { 0 };
  3810. 8001bbc: f107 0308 add.w r3, r7, #8
  3811. 8001bc0: 2220 movs r2, #32
  3812. 8001bc2: 2100 movs r1, #0
  3813. 8001bc4: 4618 mov r0, r3
  3814. 8001bc6: f014 fdc6 bl 8016756 <memset>
  3815. uint32_t circBuffPos = 0;
  3816. 8001bca: 2300 movs r3, #0
  3817. 8001bcc: 667b str r3, [r7, #100] @ 0x64
  3818. float gainCorrection = 1.0;
  3819. 8001bce: f04f 537e mov.w r3, #1065353216 @ 0x3f800000
  3820. 8001bd2: 663b str r3, [r7, #96] @ 0x60
  3821. while (pdTRUE) {
  3822. osMessageQueueGet (adc1MeasDataQueue, &adcData, 0, osWaitForever);
  3823. 8001bd4: 4bc8 ldr r3, [pc, #800] @ (8001ef8 <ADC1MeasTask+0x358>)
  3824. 8001bd6: 6818 ldr r0, [r3, #0]
  3825. 8001bd8: f107 0108 add.w r1, r7, #8
  3826. 8001bdc: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  3827. 8001be0: 2200 movs r2, #0
  3828. 8001be2: f010 fed3 bl 801298c <osMessageQueueGet>
  3829. #ifdef GAIN_AUTO_CORRECTION
  3830. if (osMutexAcquire (vRefmVMutex, osWaitForever) == osOK) {
  3831. 8001be6: 4bc5 ldr r3, [pc, #788] @ (8001efc <ADC1MeasTask+0x35c>)
  3832. 8001be8: 681b ldr r3, [r3, #0]
  3833. 8001bea: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3834. 8001bee: 4618 mov r0, r3
  3835. 8001bf0: f010 fd71 bl 80126d6 <osMutexAcquire>
  3836. 8001bf4: 4603 mov r3, r0
  3837. 8001bf6: 2b00 cmp r3, #0
  3838. 8001bf8: d10c bne.n 8001c14 <ADC1MeasTask+0x74>
  3839. gainCorrection = (float)vRefmV;
  3840. 8001bfa: 4bc1 ldr r3, [pc, #772] @ (8001f00 <ADC1MeasTask+0x360>)
  3841. 8001bfc: 681b ldr r3, [r3, #0]
  3842. 8001bfe: ee07 3a90 vmov s15, r3
  3843. 8001c02: eef8 7a67 vcvt.f32.u32 s15, s15
  3844. 8001c06: edc7 7a18 vstr s15, [r7, #96] @ 0x60
  3845. osMutexRelease (vRefmVMutex);
  3846. 8001c0a: 4bbc ldr r3, [pc, #752] @ (8001efc <ADC1MeasTask+0x35c>)
  3847. 8001c0c: 681b ldr r3, [r3, #0]
  3848. 8001c0e: 4618 mov r0, r3
  3849. 8001c10: f010 fdac bl 801276c <osMutexRelease>
  3850. }
  3851. gainCorrection = gainCorrection / EXT_VREF_mV;
  3852. 8001c14: ed97 7a18 vldr s14, [r7, #96] @ 0x60
  3853. 8001c18: eddf 6aba vldr s13, [pc, #744] @ 8001f04 <ADC1MeasTask+0x364>
  3854. 8001c1c: eec7 7a26 vdiv.f32 s15, s14, s13
  3855. 8001c20: edc7 7a18 vstr s15, [r7, #96] @ 0x60
  3856. #endif
  3857. for (uint8_t i = 0; i < VOLTAGES_COUNT; i++) {
  3858. 8001c24: 2300 movs r3, #0
  3859. 8001c26: f887 305f strb.w r3, [r7, #95] @ 0x5f
  3860. 8001c2a: e0e7 b.n 8001dfc <ADC1MeasTask+0x25c>
  3861. float val = adcData.adcDataBuffer[i] * deltaADC * U_CHANNEL_CONST * gainCorrection * U_MeasCorrectionData[i].gain + U_MeasCorrectionData[i].offset;
  3862. 8001c2c: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3863. 8001c30: 005b lsls r3, r3, #1
  3864. 8001c32: 3368 adds r3, #104 @ 0x68
  3865. 8001c34: 443b add r3, r7
  3866. 8001c36: f833 3c60 ldrh.w r3, [r3, #-96]
  3867. 8001c3a: ee07 3a90 vmov s15, r3
  3868. 8001c3e: eeb8 7be7 vcvt.f64.s32 d7, s15
  3869. 8001c42: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  3870. 8001c46: ee27 6b06 vmul.f64 d6, d7, d6
  3871. 8001c4a: ed9f 5ba5 vldr d5, [pc, #660] @ 8001ee0 <ADC1MeasTask+0x340>
  3872. 8001c4e: ee86 7b05 vdiv.f64 d7, d6, d5
  3873. 8001c52: ed9f 6ba5 vldr d6, [pc, #660] @ 8001ee8 <ADC1MeasTask+0x348>
  3874. 8001c56: ee27 6b06 vmul.f64 d6, d7, d6
  3875. 8001c5a: edd7 7a18 vldr s15, [r7, #96] @ 0x60
  3876. 8001c5e: eeb7 7ae7 vcvt.f64.f32 d7, s15
  3877. 8001c62: ee26 6b07 vmul.f64 d6, d6, d7
  3878. 8001c66: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3879. 8001c6a: 4aa7 ldr r2, [pc, #668] @ (8001f08 <ADC1MeasTask+0x368>)
  3880. 8001c6c: 00db lsls r3, r3, #3
  3881. 8001c6e: 4413 add r3, r2
  3882. 8001c70: edd3 7a00 vldr s15, [r3]
  3883. 8001c74: eeb7 7ae7 vcvt.f64.f32 d7, s15
  3884. 8001c78: ee26 6b07 vmul.f64 d6, d6, d7
  3885. 8001c7c: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3886. 8001c80: 4aa1 ldr r2, [pc, #644] @ (8001f08 <ADC1MeasTask+0x368>)
  3887. 8001c82: 00db lsls r3, r3, #3
  3888. 8001c84: 4413 add r3, r2
  3889. 8001c86: 3304 adds r3, #4
  3890. 8001c88: edd3 7a00 vldr s15, [r3]
  3891. 8001c8c: eeb7 7ae7 vcvt.f64.f32 d7, s15
  3892. 8001c90: ee36 7b07 vadd.f64 d7, d6, d7
  3893. 8001c94: eef7 7bc7 vcvt.f32.f64 s15, d7
  3894. 8001c98: edc7 7a15 vstr s15, [r7, #84] @ 0x54
  3895. circBuffer[i][circBuffPos] = val;
  3896. 8001c9c: f897 205f ldrb.w r2, [r7, #95] @ 0x5f
  3897. 8001ca0: 4613 mov r3, r2
  3898. 8001ca2: 009b lsls r3, r3, #2
  3899. 8001ca4: 4413 add r3, r2
  3900. 8001ca6: 005b lsls r3, r3, #1
  3901. 8001ca8: 6e7a ldr r2, [r7, #100] @ 0x64
  3902. 8001caa: 4413 add r3, r2
  3903. 8001cac: 009b lsls r3, r3, #2
  3904. 8001cae: 3368 adds r3, #104 @ 0x68
  3905. 8001cb0: 443b add r3, r7
  3906. 8001cb2: 3b3c subs r3, #60 @ 0x3c
  3907. 8001cb4: 6d7a ldr r2, [r7, #84] @ 0x54
  3908. 8001cb6: 601a str r2, [r3, #0]
  3909. rms[i] = 0.0;
  3910. 8001cb8: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3911. 8001cbc: 009b lsls r3, r3, #2
  3912. 8001cbe: 3368 adds r3, #104 @ 0x68
  3913. 8001cc0: 443b add r3, r7
  3914. 8001cc2: 3b40 subs r3, #64 @ 0x40
  3915. 8001cc4: f04f 0200 mov.w r2, #0
  3916. 8001cc8: 601a str r2, [r3, #0]
  3917. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  3918. 8001cca: 2300 movs r3, #0
  3919. 8001ccc: f887 305e strb.w r3, [r7, #94] @ 0x5e
  3920. 8001cd0: e025 b.n 8001d1e <ADC1MeasTask+0x17e>
  3921. rms[i] += circBuffer[i][c];
  3922. 8001cd2: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3923. 8001cd6: 009b lsls r3, r3, #2
  3924. 8001cd8: 3368 adds r3, #104 @ 0x68
  3925. 8001cda: 443b add r3, r7
  3926. 8001cdc: 3b40 subs r3, #64 @ 0x40
  3927. 8001cde: ed93 7a00 vldr s14, [r3]
  3928. 8001ce2: f897 205f ldrb.w r2, [r7, #95] @ 0x5f
  3929. 8001ce6: f897 105e ldrb.w r1, [r7, #94] @ 0x5e
  3930. 8001cea: 4613 mov r3, r2
  3931. 8001cec: 009b lsls r3, r3, #2
  3932. 8001cee: 4413 add r3, r2
  3933. 8001cf0: 005b lsls r3, r3, #1
  3934. 8001cf2: 440b add r3, r1
  3935. 8001cf4: 009b lsls r3, r3, #2
  3936. 8001cf6: 3368 adds r3, #104 @ 0x68
  3937. 8001cf8: 443b add r3, r7
  3938. 8001cfa: 3b3c subs r3, #60 @ 0x3c
  3939. 8001cfc: edd3 7a00 vldr s15, [r3]
  3940. 8001d00: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3941. 8001d04: ee77 7a27 vadd.f32 s15, s14, s15
  3942. 8001d08: 009b lsls r3, r3, #2
  3943. 8001d0a: 3368 adds r3, #104 @ 0x68
  3944. 8001d0c: 443b add r3, r7
  3945. 8001d0e: 3b40 subs r3, #64 @ 0x40
  3946. 8001d10: edc3 7a00 vstr s15, [r3]
  3947. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  3948. 8001d14: f897 305e ldrb.w r3, [r7, #94] @ 0x5e
  3949. 8001d18: 3301 adds r3, #1
  3950. 8001d1a: f887 305e strb.w r3, [r7, #94] @ 0x5e
  3951. 8001d1e: f897 305e ldrb.w r3, [r7, #94] @ 0x5e
  3952. 8001d22: 2b09 cmp r3, #9
  3953. 8001d24: d9d5 bls.n 8001cd2 <ADC1MeasTask+0x132>
  3954. }
  3955. rms[i] = rms[i] / CIRC_BUFF_LEN;
  3956. 8001d26: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3957. 8001d2a: 009b lsls r3, r3, #2
  3958. 8001d2c: 3368 adds r3, #104 @ 0x68
  3959. 8001d2e: 443b add r3, r7
  3960. 8001d30: 3b40 subs r3, #64 @ 0x40
  3961. 8001d32: ed93 7a00 vldr s14, [r3]
  3962. 8001d36: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3963. 8001d3a: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  3964. 8001d3e: eec7 7a26 vdiv.f32 s15, s14, s13
  3965. 8001d42: 009b lsls r3, r3, #2
  3966. 8001d44: 3368 adds r3, #104 @ 0x68
  3967. 8001d46: 443b add r3, r7
  3968. 8001d48: 3b40 subs r3, #64 @ 0x40
  3969. 8001d4a: edc3 7a00 vstr s15, [r3]
  3970. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  3971. 8001d4e: 4b6f ldr r3, [pc, #444] @ (8001f0c <ADC1MeasTask+0x36c>)
  3972. 8001d50: 681b ldr r3, [r3, #0]
  3973. 8001d52: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3974. 8001d56: 4618 mov r0, r3
  3975. 8001d58: f010 fcbd bl 80126d6 <osMutexAcquire>
  3976. 8001d5c: 4603 mov r3, r0
  3977. 8001d5e: 2b00 cmp r3, #0
  3978. 8001d60: d147 bne.n 8001df2 <ADC1MeasTask+0x252>
  3979. if (fabs(resMeasurements.voltagePeak[i]) < fabs(val)) {
  3980. 8001d62: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3981. 8001d66: 4a6a ldr r2, [pc, #424] @ (8001f10 <ADC1MeasTask+0x370>)
  3982. 8001d68: 3302 adds r3, #2
  3983. 8001d6a: 009b lsls r3, r3, #2
  3984. 8001d6c: 4413 add r3, r2
  3985. 8001d6e: 3304 adds r3, #4
  3986. 8001d70: edd3 7a00 vldr s15, [r3]
  3987. 8001d74: eeb0 7ae7 vabs.f32 s14, s15
  3988. 8001d78: edd7 7a15 vldr s15, [r7, #84] @ 0x54
  3989. 8001d7c: eef0 7ae7 vabs.f32 s15, s15
  3990. 8001d80: eeb4 7ae7 vcmpe.f32 s14, s15
  3991. 8001d84: eef1 fa10 vmrs APSR_nzcv, fpscr
  3992. 8001d88: d508 bpl.n 8001d9c <ADC1MeasTask+0x1fc>
  3993. resMeasurements.voltagePeak[i] = val;
  3994. 8001d8a: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3995. 8001d8e: 4a60 ldr r2, [pc, #384] @ (8001f10 <ADC1MeasTask+0x370>)
  3996. 8001d90: 3302 adds r3, #2
  3997. 8001d92: 009b lsls r3, r3, #2
  3998. 8001d94: 4413 add r3, r2
  3999. 8001d96: 3304 adds r3, #4
  4000. 8001d98: 6d7a ldr r2, [r7, #84] @ 0x54
  4001. 8001d9a: 601a str r2, [r3, #0]
  4002. }
  4003. resMeasurements.voltageRMS[i] = rms[i];
  4004. 8001d9c: f897 205f ldrb.w r2, [r7, #95] @ 0x5f
  4005. 8001da0: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4006. 8001da4: 0092 lsls r2, r2, #2
  4007. 8001da6: 3268 adds r2, #104 @ 0x68
  4008. 8001da8: 443a add r2, r7
  4009. 8001daa: 3a40 subs r2, #64 @ 0x40
  4010. 8001dac: 6812 ldr r2, [r2, #0]
  4011. 8001dae: 4958 ldr r1, [pc, #352] @ (8001f10 <ADC1MeasTask+0x370>)
  4012. 8001db0: 009b lsls r3, r3, #2
  4013. 8001db2: 440b add r3, r1
  4014. 8001db4: 601a str r2, [r3, #0]
  4015. resMeasurements.power[i] = resMeasurements.voltageRMS[i] * resMeasurements.currentRMS[i];
  4016. 8001db6: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4017. 8001dba: 4a55 ldr r2, [pc, #340] @ (8001f10 <ADC1MeasTask+0x370>)
  4018. 8001dbc: 009b lsls r3, r3, #2
  4019. 8001dbe: 4413 add r3, r2
  4020. 8001dc0: ed93 7a00 vldr s14, [r3]
  4021. 8001dc4: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4022. 8001dc8: 4a51 ldr r2, [pc, #324] @ (8001f10 <ADC1MeasTask+0x370>)
  4023. 8001dca: 3306 adds r3, #6
  4024. 8001dcc: 009b lsls r3, r3, #2
  4025. 8001dce: 4413 add r3, r2
  4026. 8001dd0: edd3 7a00 vldr s15, [r3]
  4027. 8001dd4: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4028. 8001dd8: ee67 7a27 vmul.f32 s15, s14, s15
  4029. 8001ddc: 4a4c ldr r2, [pc, #304] @ (8001f10 <ADC1MeasTask+0x370>)
  4030. 8001dde: 330c adds r3, #12
  4031. 8001de0: 009b lsls r3, r3, #2
  4032. 8001de2: 4413 add r3, r2
  4033. 8001de4: edc3 7a00 vstr s15, [r3]
  4034. osMutexRelease (resMeasurementsMutex);
  4035. 8001de8: 4b48 ldr r3, [pc, #288] @ (8001f0c <ADC1MeasTask+0x36c>)
  4036. 8001dea: 681b ldr r3, [r3, #0]
  4037. 8001dec: 4618 mov r0, r3
  4038. 8001dee: f010 fcbd bl 801276c <osMutexRelease>
  4039. for (uint8_t i = 0; i < VOLTAGES_COUNT; i++) {
  4040. 8001df2: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4041. 8001df6: 3301 adds r3, #1
  4042. 8001df8: f887 305f strb.w r3, [r7, #95] @ 0x5f
  4043. 8001dfc: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4044. 8001e00: 2b00 cmp r3, #0
  4045. 8001e02: f43f af13 beq.w 8001c2c <ADC1MeasTask+0x8c>
  4046. }
  4047. }
  4048. ++circBuffPos;
  4049. 8001e06: 6e7b ldr r3, [r7, #100] @ 0x64
  4050. 8001e08: 3301 adds r3, #1
  4051. 8001e0a: 667b str r3, [r7, #100] @ 0x64
  4052. circBuffPos = circBuffPos % CIRC_BUFF_LEN;
  4053. 8001e0c: 6e7a ldr r2, [r7, #100] @ 0x64
  4054. 8001e0e: 4b41 ldr r3, [pc, #260] @ (8001f14 <ADC1MeasTask+0x374>)
  4055. 8001e10: fba3 1302 umull r1, r3, r3, r2
  4056. 8001e14: 08d9 lsrs r1, r3, #3
  4057. 8001e16: 460b mov r3, r1
  4058. 8001e18: 009b lsls r3, r3, #2
  4059. 8001e1a: 440b add r3, r1
  4060. 8001e1c: 005b lsls r3, r3, #1
  4061. 8001e1e: 1ad3 subs r3, r2, r3
  4062. 8001e20: 667b str r3, [r7, #100] @ 0x64
  4063. if (osMutexAcquire (ILxRefMutex, osWaitForever) == osOK) {
  4064. 8001e22: 4b3d ldr r3, [pc, #244] @ (8001f18 <ADC1MeasTask+0x378>)
  4065. 8001e24: 681b ldr r3, [r3, #0]
  4066. 8001e26: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4067. 8001e2a: 4618 mov r0, r3
  4068. 8001e2c: f010 fc53 bl 80126d6 <osMutexAcquire>
  4069. 8001e30: 4603 mov r3, r0
  4070. 8001e32: 2b00 cmp r3, #0
  4071. 8001e34: d124 bne.n 8001e80 <ADC1MeasTask+0x2e0>
  4072. uint8_t refIdx = 0;
  4073. 8001e36: 2300 movs r3, #0
  4074. 8001e38: f887 305d strb.w r3, [r7, #93] @ 0x5d
  4075. for (uint8_t i = (uint8_t)IL1Ref; i <= (uint8_t)IL3Ref; i++) {
  4076. 8001e3c: 2303 movs r3, #3
  4077. 8001e3e: f887 305c strb.w r3, [r7, #92] @ 0x5c
  4078. 8001e42: e014 b.n 8001e6e <ADC1MeasTask+0x2ce>
  4079. ILxRef[refIdx++] = adcData.adcDataBuffer[i];
  4080. 8001e44: f897 205c ldrb.w r2, [r7, #92] @ 0x5c
  4081. 8001e48: f897 305d ldrb.w r3, [r7, #93] @ 0x5d
  4082. 8001e4c: 1c59 adds r1, r3, #1
  4083. 8001e4e: f887 105d strb.w r1, [r7, #93] @ 0x5d
  4084. 8001e52: 4619 mov r1, r3
  4085. 8001e54: 0053 lsls r3, r2, #1
  4086. 8001e56: 3368 adds r3, #104 @ 0x68
  4087. 8001e58: 443b add r3, r7
  4088. 8001e5a: f833 2c60 ldrh.w r2, [r3, #-96]
  4089. 8001e5e: 4b2f ldr r3, [pc, #188] @ (8001f1c <ADC1MeasTask+0x37c>)
  4090. 8001e60: f823 2011 strh.w r2, [r3, r1, lsl #1]
  4091. for (uint8_t i = (uint8_t)IL1Ref; i <= (uint8_t)IL3Ref; i++) {
  4092. 8001e64: f897 305c ldrb.w r3, [r7, #92] @ 0x5c
  4093. 8001e68: 3301 adds r3, #1
  4094. 8001e6a: f887 305c strb.w r3, [r7, #92] @ 0x5c
  4095. 8001e6e: f897 305c ldrb.w r3, [r7, #92] @ 0x5c
  4096. 8001e72: 2b05 cmp r3, #5
  4097. 8001e74: d9e6 bls.n 8001e44 <ADC1MeasTask+0x2a4>
  4098. }
  4099. osMutexRelease (ILxRefMutex);
  4100. 8001e76: 4b28 ldr r3, [pc, #160] @ (8001f18 <ADC1MeasTask+0x378>)
  4101. 8001e78: 681b ldr r3, [r3, #0]
  4102. 8001e7a: 4618 mov r0, r3
  4103. 8001e7c: f010 fc76 bl 801276c <osMutexRelease>
  4104. }
  4105. float fanFBVoltage = adcData.adcDataBuffer[FanFB] * deltaADC * -4.35 + 12;
  4106. 8001e80: 8abb ldrh r3, [r7, #20]
  4107. 8001e82: ee07 3a90 vmov s15, r3
  4108. 8001e86: eeb8 7be7 vcvt.f64.s32 d7, s15
  4109. 8001e8a: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4110. 8001e8e: ee27 6b06 vmul.f64 d6, d7, d6
  4111. 8001e92: ed9f 5b13 vldr d5, [pc, #76] @ 8001ee0 <ADC1MeasTask+0x340>
  4112. 8001e96: ee86 7b05 vdiv.f64 d7, d6, d5
  4113. 8001e9a: ed9f 6b15 vldr d6, [pc, #84] @ 8001ef0 <ADC1MeasTask+0x350>
  4114. 8001e9e: ee27 7b06 vmul.f64 d7, d7, d6
  4115. 8001ea2: eeb2 6b08 vmov.f64 d6, #40 @ 0x41400000 12.0
  4116. 8001ea6: ee37 7b06 vadd.f64 d7, d7, d6
  4117. 8001eaa: eef7 7bc7 vcvt.f32.f64 s15, d7
  4118. 8001eae: edc7 7a16 vstr s15, [r7, #88] @ 0x58
  4119. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  4120. 8001eb2: 4b1b ldr r3, [pc, #108] @ (8001f20 <ADC1MeasTask+0x380>)
  4121. 8001eb4: 681b ldr r3, [r3, #0]
  4122. 8001eb6: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4123. 8001eba: 4618 mov r0, r3
  4124. 8001ebc: f010 fc0b bl 80126d6 <osMutexAcquire>
  4125. 8001ec0: 4603 mov r3, r0
  4126. 8001ec2: 2b00 cmp r3, #0
  4127. 8001ec4: f47f ae86 bne.w 8001bd4 <ADC1MeasTask+0x34>
  4128. sensorsInfo.fanVoltage = fanFBVoltage;
  4129. 8001ec8: 4a16 ldr r2, [pc, #88] @ (8001f24 <ADC1MeasTask+0x384>)
  4130. 8001eca: 6dbb ldr r3, [r7, #88] @ 0x58
  4131. 8001ecc: 6093 str r3, [r2, #8]
  4132. osMutexRelease(sensorsInfoMutex);
  4133. 8001ece: 4b14 ldr r3, [pc, #80] @ (8001f20 <ADC1MeasTask+0x380>)
  4134. 8001ed0: 681b ldr r3, [r3, #0]
  4135. 8001ed2: 4618 mov r0, r3
  4136. 8001ed4: f010 fc4a bl 801276c <osMutexRelease>
  4137. while (pdTRUE) {
  4138. 8001ed8: e67c b.n 8001bd4 <ADC1MeasTask+0x34>
  4139. 8001eda: bf00 nop
  4140. 8001edc: f3af 8000 nop.w
  4141. 8001ee0: 00000000 .word 0x00000000
  4142. 8001ee4: 40efffe0 .word 0x40efffe0
  4143. 8001ee8: f5c28f5c .word 0xf5c28f5c
  4144. 8001eec: 401e5c28 .word 0x401e5c28
  4145. 8001ef0: 66666666 .word 0x66666666
  4146. 8001ef4: c0116666 .word 0xc0116666
  4147. 8001ef8: 24000738 .word 0x24000738
  4148. 8001efc: 24000748 .word 0x24000748
  4149. 8001f00: 24000030 .word 0x24000030
  4150. 8001f04: 453b8000 .word 0x453b8000
  4151. 8001f08: 24000000 .word 0x24000000
  4152. 8001f0c: 2400074c .word 0x2400074c
  4153. 8001f10: 24000758 .word 0x24000758
  4154. 8001f14: cccccccd .word 0xcccccccd
  4155. 8001f18: 24000754 .word 0x24000754
  4156. 8001f1c: 240007c0 .word 0x240007c0
  4157. 8001f20: 24000750 .word 0x24000750
  4158. 8001f24: 24000794 .word 0x24000794
  4159. 08001f28 <ADC2MeasTask>:
  4160. }
  4161. }
  4162. }
  4163. void ADC2MeasTask (void* arg) {
  4164. 8001f28: b580 push {r7, lr}
  4165. 8001f2a: b09c sub sp, #112 @ 0x70
  4166. 8001f2c: af00 add r7, sp, #0
  4167. 8001f2e: 6078 str r0, [r7, #4]
  4168. float circBuffer[CURRENTS_COUNT][CIRC_BUFF_LEN] = {0};
  4169. 8001f30: f107 0334 add.w r3, r7, #52 @ 0x34
  4170. 8001f34: 2228 movs r2, #40 @ 0x28
  4171. 8001f36: 2100 movs r1, #0
  4172. 8001f38: 4618 mov r0, r3
  4173. 8001f3a: f014 fc0c bl 8016756 <memset>
  4174. float rms[CURRENTS_COUNT] = {0};
  4175. 8001f3e: f04f 0300 mov.w r3, #0
  4176. 8001f42: 633b str r3, [r7, #48] @ 0x30
  4177. ADC2_Data adcData = { 0 };
  4178. 8001f44: f107 0310 add.w r3, r7, #16
  4179. 8001f48: 2220 movs r2, #32
  4180. 8001f4a: 2100 movs r1, #0
  4181. 8001f4c: 4618 mov r0, r3
  4182. 8001f4e: f014 fc02 bl 8016756 <memset>
  4183. uint32_t circBuffPos = 0;
  4184. 8001f52: 2300 movs r3, #0
  4185. 8001f54: 66fb str r3, [r7, #108] @ 0x6c
  4186. float gainCorrection = 1.0;
  4187. 8001f56: f04f 537e mov.w r3, #1065353216 @ 0x3f800000
  4188. 8001f5a: 66bb str r3, [r7, #104] @ 0x68
  4189. while (pdTRUE) {
  4190. osMessageQueueGet (adc2MeasDataQueue, &adcData, 0, osWaitForever);
  4191. 8001f5c: 4baa ldr r3, [pc, #680] @ (8002208 <ADC2MeasTask+0x2e0>)
  4192. 8001f5e: 6818 ldr r0, [r3, #0]
  4193. 8001f60: f107 0110 add.w r1, r7, #16
  4194. 8001f64: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  4195. 8001f68: 2200 movs r2, #0
  4196. 8001f6a: f010 fd0f bl 801298c <osMessageQueueGet>
  4197. if (osMutexAcquire (vRefmVMutex, osWaitForever) == osOK) {
  4198. 8001f6e: 4ba7 ldr r3, [pc, #668] @ (800220c <ADC2MeasTask+0x2e4>)
  4199. 8001f70: 681b ldr r3, [r3, #0]
  4200. 8001f72: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4201. 8001f76: 4618 mov r0, r3
  4202. 8001f78: f010 fbad bl 80126d6 <osMutexAcquire>
  4203. 8001f7c: 4603 mov r3, r0
  4204. 8001f7e: 2b00 cmp r3, #0
  4205. 8001f80: d10c bne.n 8001f9c <ADC2MeasTask+0x74>
  4206. gainCorrection = (float)vRefmV;
  4207. 8001f82: 4ba3 ldr r3, [pc, #652] @ (8002210 <ADC2MeasTask+0x2e8>)
  4208. 8001f84: 681b ldr r3, [r3, #0]
  4209. 8001f86: ee07 3a90 vmov s15, r3
  4210. 8001f8a: eef8 7a67 vcvt.f32.u32 s15, s15
  4211. 8001f8e: edc7 7a1a vstr s15, [r7, #104] @ 0x68
  4212. osMutexRelease (vRefmVMutex);
  4213. 8001f92: 4b9e ldr r3, [pc, #632] @ (800220c <ADC2MeasTask+0x2e4>)
  4214. 8001f94: 681b ldr r3, [r3, #0]
  4215. 8001f96: 4618 mov r0, r3
  4216. 8001f98: f010 fbe8 bl 801276c <osMutexRelease>
  4217. }
  4218. gainCorrection = gainCorrection / EXT_VREF_mV;
  4219. 8001f9c: ed97 7a1a vldr s14, [r7, #104] @ 0x68
  4220. 8001fa0: eddf 6a9c vldr s13, [pc, #624] @ 8002214 <ADC2MeasTask+0x2ec>
  4221. 8001fa4: eec7 7a26 vdiv.f32 s15, s14, s13
  4222. 8001fa8: edc7 7a1a vstr s15, [r7, #104] @ 0x68
  4223. float ref[CURRENTS_COUNT] = { 0 };
  4224. 8001fac: f04f 0300 mov.w r3, #0
  4225. 8001fb0: 60fb str r3, [r7, #12]
  4226. if (osMutexAcquire (ILxRefMutex, osWaitForever) == osOK) {
  4227. 8001fb2: 4b99 ldr r3, [pc, #612] @ (8002218 <ADC2MeasTask+0x2f0>)
  4228. 8001fb4: 681b ldr r3, [r3, #0]
  4229. 8001fb6: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4230. 8001fba: 4618 mov r0, r3
  4231. 8001fbc: f010 fb8b bl 80126d6 <osMutexAcquire>
  4232. 8001fc0: 4603 mov r3, r0
  4233. 8001fc2: 2b00 cmp r3, #0
  4234. 8001fc4: d122 bne.n 800200c <ADC2MeasTask+0xe4>
  4235. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  4236. 8001fc6: 2300 movs r3, #0
  4237. 8001fc8: f887 3067 strb.w r3, [r7, #103] @ 0x67
  4238. 8001fcc: e015 b.n 8001ffa <ADC2MeasTask+0xd2>
  4239. ref[i] = (float)ILxRef[i];
  4240. 8001fce: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  4241. 8001fd2: 4a92 ldr r2, [pc, #584] @ (800221c <ADC2MeasTask+0x2f4>)
  4242. 8001fd4: f832 2013 ldrh.w r2, [r2, r3, lsl #1]
  4243. 8001fd8: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  4244. 8001fdc: ee07 2a90 vmov s15, r2
  4245. 8001fe0: eef8 7a67 vcvt.f32.u32 s15, s15
  4246. 8001fe4: 009b lsls r3, r3, #2
  4247. 8001fe6: 3370 adds r3, #112 @ 0x70
  4248. 8001fe8: 443b add r3, r7
  4249. 8001fea: 3b64 subs r3, #100 @ 0x64
  4250. 8001fec: edc3 7a00 vstr s15, [r3]
  4251. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  4252. 8001ff0: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  4253. 8001ff4: 3301 adds r3, #1
  4254. 8001ff6: f887 3067 strb.w r3, [r7, #103] @ 0x67
  4255. 8001ffa: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  4256. 8001ffe: 2b00 cmp r3, #0
  4257. 8002000: d0e5 beq.n 8001fce <ADC2MeasTask+0xa6>
  4258. }
  4259. osMutexRelease (ILxRefMutex);
  4260. 8002002: 4b85 ldr r3, [pc, #532] @ (8002218 <ADC2MeasTask+0x2f0>)
  4261. 8002004: 681b ldr r3, [r3, #0]
  4262. 8002006: 4618 mov r0, r3
  4263. 8002008: f010 fbb0 bl 801276c <osMutexRelease>
  4264. }
  4265. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  4266. 800200c: 2300 movs r3, #0
  4267. 800200e: f887 3066 strb.w r3, [r7, #102] @ 0x66
  4268. 8002012: e0db b.n 80021cc <ADC2MeasTask+0x2a4>
  4269. float adcVal = (float)adcData.adcDataBuffer[i];
  4270. 8002014: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4271. 8002018: 005b lsls r3, r3, #1
  4272. 800201a: 3370 adds r3, #112 @ 0x70
  4273. 800201c: 443b add r3, r7
  4274. 800201e: f833 3c60 ldrh.w r3, [r3, #-96]
  4275. 8002022: ee07 3a90 vmov s15, r3
  4276. 8002026: eef8 7a67 vcvt.f32.u32 s15, s15
  4277. 800202a: edc7 7a18 vstr s15, [r7, #96] @ 0x60
  4278. float val = (adcVal - ref[i]) * deltaADC * I_CHANNEL_CONST * gainCorrection * I_MeasCorrectionData[i].gain + I_MeasCorrectionData[i].offset;
  4279. 800202e: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4280. 8002032: 009b lsls r3, r3, #2
  4281. 8002034: 3370 adds r3, #112 @ 0x70
  4282. 8002036: 443b add r3, r7
  4283. 8002038: 3b64 subs r3, #100 @ 0x64
  4284. 800203a: edd3 7a00 vldr s15, [r3]
  4285. 800203e: ed97 7a18 vldr s14, [r7, #96] @ 0x60
  4286. 8002042: ee77 7a67 vsub.f32 s15, s14, s15
  4287. 8002046: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4288. 800204a: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4289. 800204e: ee27 6b06 vmul.f64 d6, d7, d6
  4290. 8002052: ed9f 5b69 vldr d5, [pc, #420] @ 80021f8 <ADC2MeasTask+0x2d0>
  4291. 8002056: ee86 7b05 vdiv.f64 d7, d6, d5
  4292. 800205a: ed9f 6b69 vldr d6, [pc, #420] @ 8002200 <ADC2MeasTask+0x2d8>
  4293. 800205e: ee27 6b06 vmul.f64 d6, d7, d6
  4294. 8002062: edd7 7a1a vldr s15, [r7, #104] @ 0x68
  4295. 8002066: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4296. 800206a: ee26 6b07 vmul.f64 d6, d6, d7
  4297. 800206e: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4298. 8002072: 4a6b ldr r2, [pc, #428] @ (8002220 <ADC2MeasTask+0x2f8>)
  4299. 8002074: 00db lsls r3, r3, #3
  4300. 8002076: 4413 add r3, r2
  4301. 8002078: edd3 7a00 vldr s15, [r3]
  4302. 800207c: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4303. 8002080: ee26 6b07 vmul.f64 d6, d6, d7
  4304. 8002084: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4305. 8002088: 4a65 ldr r2, [pc, #404] @ (8002220 <ADC2MeasTask+0x2f8>)
  4306. 800208a: 00db lsls r3, r3, #3
  4307. 800208c: 4413 add r3, r2
  4308. 800208e: 3304 adds r3, #4
  4309. 8002090: edd3 7a00 vldr s15, [r3]
  4310. 8002094: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4311. 8002098: ee36 7b07 vadd.f64 d7, d6, d7
  4312. 800209c: eef7 7bc7 vcvt.f32.f64 s15, d7
  4313. 80020a0: edc7 7a17 vstr s15, [r7, #92] @ 0x5c
  4314. circBuffer[i][circBuffPos] = val;
  4315. 80020a4: f897 2066 ldrb.w r2, [r7, #102] @ 0x66
  4316. 80020a8: 4613 mov r3, r2
  4317. 80020aa: 009b lsls r3, r3, #2
  4318. 80020ac: 4413 add r3, r2
  4319. 80020ae: 005b lsls r3, r3, #1
  4320. 80020b0: 6efa ldr r2, [r7, #108] @ 0x6c
  4321. 80020b2: 4413 add r3, r2
  4322. 80020b4: 009b lsls r3, r3, #2
  4323. 80020b6: 3370 adds r3, #112 @ 0x70
  4324. 80020b8: 443b add r3, r7
  4325. 80020ba: 3b3c subs r3, #60 @ 0x3c
  4326. 80020bc: 6dfa ldr r2, [r7, #92] @ 0x5c
  4327. 80020be: 601a str r2, [r3, #0]
  4328. rms[i] = 0.0;
  4329. 80020c0: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4330. 80020c4: 009b lsls r3, r3, #2
  4331. 80020c6: 3370 adds r3, #112 @ 0x70
  4332. 80020c8: 443b add r3, r7
  4333. 80020ca: 3b40 subs r3, #64 @ 0x40
  4334. 80020cc: f04f 0200 mov.w r2, #0
  4335. 80020d0: 601a str r2, [r3, #0]
  4336. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  4337. 80020d2: 2300 movs r3, #0
  4338. 80020d4: f887 3065 strb.w r3, [r7, #101] @ 0x65
  4339. 80020d8: e025 b.n 8002126 <ADC2MeasTask+0x1fe>
  4340. rms[i] += circBuffer[i][c];
  4341. 80020da: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4342. 80020de: 009b lsls r3, r3, #2
  4343. 80020e0: 3370 adds r3, #112 @ 0x70
  4344. 80020e2: 443b add r3, r7
  4345. 80020e4: 3b40 subs r3, #64 @ 0x40
  4346. 80020e6: ed93 7a00 vldr s14, [r3]
  4347. 80020ea: f897 2066 ldrb.w r2, [r7, #102] @ 0x66
  4348. 80020ee: f897 1065 ldrb.w r1, [r7, #101] @ 0x65
  4349. 80020f2: 4613 mov r3, r2
  4350. 80020f4: 009b lsls r3, r3, #2
  4351. 80020f6: 4413 add r3, r2
  4352. 80020f8: 005b lsls r3, r3, #1
  4353. 80020fa: 440b add r3, r1
  4354. 80020fc: 009b lsls r3, r3, #2
  4355. 80020fe: 3370 adds r3, #112 @ 0x70
  4356. 8002100: 443b add r3, r7
  4357. 8002102: 3b3c subs r3, #60 @ 0x3c
  4358. 8002104: edd3 7a00 vldr s15, [r3]
  4359. 8002108: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4360. 800210c: ee77 7a27 vadd.f32 s15, s14, s15
  4361. 8002110: 009b lsls r3, r3, #2
  4362. 8002112: 3370 adds r3, #112 @ 0x70
  4363. 8002114: 443b add r3, r7
  4364. 8002116: 3b40 subs r3, #64 @ 0x40
  4365. 8002118: edc3 7a00 vstr s15, [r3]
  4366. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  4367. 800211c: f897 3065 ldrb.w r3, [r7, #101] @ 0x65
  4368. 8002120: 3301 adds r3, #1
  4369. 8002122: f887 3065 strb.w r3, [r7, #101] @ 0x65
  4370. 8002126: f897 3065 ldrb.w r3, [r7, #101] @ 0x65
  4371. 800212a: 2b09 cmp r3, #9
  4372. 800212c: d9d5 bls.n 80020da <ADC2MeasTask+0x1b2>
  4373. }
  4374. rms[i] = rms[i] / CIRC_BUFF_LEN;
  4375. 800212e: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4376. 8002132: 009b lsls r3, r3, #2
  4377. 8002134: 3370 adds r3, #112 @ 0x70
  4378. 8002136: 443b add r3, r7
  4379. 8002138: 3b40 subs r3, #64 @ 0x40
  4380. 800213a: ed93 7a00 vldr s14, [r3]
  4381. 800213e: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4382. 8002142: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  4383. 8002146: eec7 7a26 vdiv.f32 s15, s14, s13
  4384. 800214a: 009b lsls r3, r3, #2
  4385. 800214c: 3370 adds r3, #112 @ 0x70
  4386. 800214e: 443b add r3, r7
  4387. 8002150: 3b40 subs r3, #64 @ 0x40
  4388. 8002152: edc3 7a00 vstr s15, [r3]
  4389. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  4390. 8002156: 4b33 ldr r3, [pc, #204] @ (8002224 <ADC2MeasTask+0x2fc>)
  4391. 8002158: 681b ldr r3, [r3, #0]
  4392. 800215a: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4393. 800215e: 4618 mov r0, r3
  4394. 8002160: f010 fab9 bl 80126d6 <osMutexAcquire>
  4395. 8002164: 4603 mov r3, r0
  4396. 8002166: 2b00 cmp r3, #0
  4397. 8002168: d12b bne.n 80021c2 <ADC2MeasTask+0x29a>
  4398. if (resMeasurements.currentPeak[i] < val) {
  4399. 800216a: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4400. 800216e: 4a2e ldr r2, [pc, #184] @ (8002228 <ADC2MeasTask+0x300>)
  4401. 8002170: 3308 adds r3, #8
  4402. 8002172: 009b lsls r3, r3, #2
  4403. 8002174: 4413 add r3, r2
  4404. 8002176: 3304 adds r3, #4
  4405. 8002178: edd3 7a00 vldr s15, [r3]
  4406. 800217c: ed97 7a17 vldr s14, [r7, #92] @ 0x5c
  4407. 8002180: eeb4 7ae7 vcmpe.f32 s14, s15
  4408. 8002184: eef1 fa10 vmrs APSR_nzcv, fpscr
  4409. 8002188: dd08 ble.n 800219c <ADC2MeasTask+0x274>
  4410. resMeasurements.currentPeak[i] = val;
  4411. 800218a: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4412. 800218e: 4a26 ldr r2, [pc, #152] @ (8002228 <ADC2MeasTask+0x300>)
  4413. 8002190: 3308 adds r3, #8
  4414. 8002192: 009b lsls r3, r3, #2
  4415. 8002194: 4413 add r3, r2
  4416. 8002196: 3304 adds r3, #4
  4417. 8002198: 6dfa ldr r2, [r7, #92] @ 0x5c
  4418. 800219a: 601a str r2, [r3, #0]
  4419. }
  4420. resMeasurements.currentRMS[i] = rms[i];
  4421. 800219c: f897 2066 ldrb.w r2, [r7, #102] @ 0x66
  4422. 80021a0: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4423. 80021a4: 0092 lsls r2, r2, #2
  4424. 80021a6: 3270 adds r2, #112 @ 0x70
  4425. 80021a8: 443a add r2, r7
  4426. 80021aa: 3a40 subs r2, #64 @ 0x40
  4427. 80021ac: 6812 ldr r2, [r2, #0]
  4428. 80021ae: 491e ldr r1, [pc, #120] @ (8002228 <ADC2MeasTask+0x300>)
  4429. 80021b0: 3306 adds r3, #6
  4430. 80021b2: 009b lsls r3, r3, #2
  4431. 80021b4: 440b add r3, r1
  4432. 80021b6: 601a str r2, [r3, #0]
  4433. osMutexRelease (resMeasurementsMutex);
  4434. 80021b8: 4b1a ldr r3, [pc, #104] @ (8002224 <ADC2MeasTask+0x2fc>)
  4435. 80021ba: 681b ldr r3, [r3, #0]
  4436. 80021bc: 4618 mov r0, r3
  4437. 80021be: f010 fad5 bl 801276c <osMutexRelease>
  4438. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  4439. 80021c2: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4440. 80021c6: 3301 adds r3, #1
  4441. 80021c8: f887 3066 strb.w r3, [r7, #102] @ 0x66
  4442. 80021cc: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4443. 80021d0: 2b00 cmp r3, #0
  4444. 80021d2: f43f af1f beq.w 8002014 <ADC2MeasTask+0xec>
  4445. }
  4446. }
  4447. ++circBuffPos;
  4448. 80021d6: 6efb ldr r3, [r7, #108] @ 0x6c
  4449. 80021d8: 3301 adds r3, #1
  4450. 80021da: 66fb str r3, [r7, #108] @ 0x6c
  4451. circBuffPos = circBuffPos % CIRC_BUFF_LEN;
  4452. 80021dc: 6efa ldr r2, [r7, #108] @ 0x6c
  4453. 80021de: 4b13 ldr r3, [pc, #76] @ (800222c <ADC2MeasTask+0x304>)
  4454. 80021e0: fba3 1302 umull r1, r3, r3, r2
  4455. 80021e4: 08d9 lsrs r1, r3, #3
  4456. 80021e6: 460b mov r3, r1
  4457. 80021e8: 009b lsls r3, r3, #2
  4458. 80021ea: 440b add r3, r1
  4459. 80021ec: 005b lsls r3, r3, #1
  4460. 80021ee: 1ad3 subs r3, r2, r3
  4461. 80021f0: 66fb str r3, [r7, #108] @ 0x6c
  4462. while (pdTRUE) {
  4463. 80021f2: e6b3 b.n 8001f5c <ADC2MeasTask+0x34>
  4464. 80021f4: f3af 8000 nop.w
  4465. 80021f8: 00000000 .word 0x00000000
  4466. 80021fc: 40efffe0 .word 0x40efffe0
  4467. 8002200: 83e425af .word 0x83e425af
  4468. 8002204: 401e4d9e .word 0x401e4d9e
  4469. 8002208: 2400073c .word 0x2400073c
  4470. 800220c: 24000748 .word 0x24000748
  4471. 8002210: 24000030 .word 0x24000030
  4472. 8002214: 453b8000 .word 0x453b8000
  4473. 8002218: 24000754 .word 0x24000754
  4474. 800221c: 240007c0 .word 0x240007c0
  4475. 8002220: 24000018 .word 0x24000018
  4476. 8002224: 2400074c .word 0x2400074c
  4477. 8002228: 24000758 .word 0x24000758
  4478. 800222c: cccccccd .word 0xcccccccd
  4479. 08002230 <ADC3MeasTask>:
  4480. }
  4481. }
  4482. void ADC3MeasTask (void* arg) {
  4483. 8002230: b580 push {r7, lr}
  4484. 8002232: b0bc sub sp, #240 @ 0xf0
  4485. 8002234: af00 add r7, sp, #0
  4486. 8002236: 6078 str r0, [r7, #4]
  4487. float motorXSensCircBuffer[CIRC_BUFF_LEN] = { 0 };
  4488. 8002238: f107 03a4 add.w r3, r7, #164 @ 0xa4
  4489. 800223c: 2228 movs r2, #40 @ 0x28
  4490. 800223e: 2100 movs r1, #0
  4491. 8002240: 4618 mov r0, r3
  4492. 8002242: f014 fa88 bl 8016756 <memset>
  4493. float motorYSensCircBuffer[CIRC_BUFF_LEN] = { 0 };
  4494. 8002246: f107 037c add.w r3, r7, #124 @ 0x7c
  4495. 800224a: 2228 movs r2, #40 @ 0x28
  4496. 800224c: 2100 movs r1, #0
  4497. 800224e: 4618 mov r0, r3
  4498. 8002250: f014 fa81 bl 8016756 <memset>
  4499. float pvT1CircBuffer[CIRC_BUFF_LEN] = { 0 };
  4500. 8002254: f107 0354 add.w r3, r7, #84 @ 0x54
  4501. 8002258: 2228 movs r2, #40 @ 0x28
  4502. 800225a: 2100 movs r1, #0
  4503. 800225c: 4618 mov r0, r3
  4504. 800225e: f014 fa7a bl 8016756 <memset>
  4505. float pvT2CircBuffer[CIRC_BUFF_LEN] = { 0 };
  4506. 8002262: f107 032c add.w r3, r7, #44 @ 0x2c
  4507. 8002266: 2228 movs r2, #40 @ 0x28
  4508. 8002268: 2100 movs r1, #0
  4509. 800226a: 4618 mov r0, r3
  4510. 800226c: f014 fa73 bl 8016756 <memset>
  4511. uint32_t circBuffPos = 0;
  4512. 8002270: 2300 movs r3, #0
  4513. 8002272: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  4514. ADC3_Data adcData = { 0 };
  4515. 8002276: f107 030c add.w r3, r7, #12
  4516. 800227a: 2220 movs r2, #32
  4517. 800227c: 2100 movs r1, #0
  4518. 800227e: 4618 mov r0, r3
  4519. 8002280: f014 fa69 bl 8016756 <memset>
  4520. while (pdTRUE) {
  4521. osMessageQueueGet (adc3MeasDataQueue, &adcData, 0, osWaitForever);
  4522. 8002284: 4bc2 ldr r3, [pc, #776] @ (8002590 <ADC3MeasTask+0x360>)
  4523. 8002286: 6818 ldr r0, [r3, #0]
  4524. 8002288: f107 010c add.w r1, r7, #12
  4525. 800228c: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  4526. 8002290: 2200 movs r2, #0
  4527. 8002292: f010 fb7b bl 801298c <osMessageQueueGet>
  4528. uint32_t vRef = __LL_ADC_CALC_VREFANALOG_VOLTAGE (adcData.adcDataBuffer[VrefInt], LL_ADC_RESOLUTION_16B);
  4529. 8002296: 4bbf ldr r3, [pc, #764] @ (8002594 <ADC3MeasTask+0x364>)
  4530. 8002298: 881b ldrh r3, [r3, #0]
  4531. 800229a: 461a mov r2, r3
  4532. 800229c: f640 43e4 movw r3, #3300 @ 0xce4
  4533. 80022a0: fb02 f303 mul.w r3, r2, r3
  4534. 80022a4: 8aba ldrh r2, [r7, #20]
  4535. 80022a6: fbb3 f3f2 udiv r3, r3, r2
  4536. 80022aa: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4
  4537. if (osMutexAcquire (vRefmVMutex, osWaitForever) == osOK) {
  4538. 80022ae: 4bba ldr r3, [pc, #744] @ (8002598 <ADC3MeasTask+0x368>)
  4539. 80022b0: 681b ldr r3, [r3, #0]
  4540. 80022b2: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4541. 80022b6: 4618 mov r0, r3
  4542. 80022b8: f010 fa0d bl 80126d6 <osMutexAcquire>
  4543. 80022bc: 4603 mov r3, r0
  4544. 80022be: 2b00 cmp r3, #0
  4545. 80022c0: d108 bne.n 80022d4 <ADC3MeasTask+0xa4>
  4546. vRefmV = vRef;
  4547. 80022c2: 4ab6 ldr r2, [pc, #728] @ (800259c <ADC3MeasTask+0x36c>)
  4548. 80022c4: f8d7 30d4 ldr.w r3, [r7, #212] @ 0xd4
  4549. 80022c8: 6013 str r3, [r2, #0]
  4550. osMutexRelease (vRefmVMutex);
  4551. 80022ca: 4bb3 ldr r3, [pc, #716] @ (8002598 <ADC3MeasTask+0x368>)
  4552. 80022cc: 681b ldr r3, [r3, #0]
  4553. 80022ce: 4618 mov r0, r3
  4554. 80022d0: f010 fa4c bl 801276c <osMutexRelease>
  4555. }
  4556. float motorXCurrentSense = adcData.adcDataBuffer[motorXSense] * deltaADC * 10 / 8.33333;
  4557. 80022d4: 8a3b ldrh r3, [r7, #16]
  4558. 80022d6: ee07 3a90 vmov s15, r3
  4559. 80022da: eeb8 7be7 vcvt.f64.s32 d7, s15
  4560. 80022de: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4561. 80022e2: ee27 6b06 vmul.f64 d6, d7, d6
  4562. 80022e6: ed9f 5ba2 vldr d5, [pc, #648] @ 8002570 <ADC3MeasTask+0x340>
  4563. 80022ea: ee86 7b05 vdiv.f64 d7, d6, d5
  4564. 80022ee: eeb2 6b04 vmov.f64 d6, #36 @ 0x41200000 10.0
  4565. 80022f2: ee27 6b06 vmul.f64 d6, d7, d6
  4566. 80022f6: ed9f 5ba0 vldr d5, [pc, #640] @ 8002578 <ADC3MeasTask+0x348>
  4567. 80022fa: ee86 7b05 vdiv.f64 d7, d6, d5
  4568. 80022fe: eef7 7bc7 vcvt.f32.f64 s15, d7
  4569. 8002302: edc7 7a34 vstr s15, [r7, #208] @ 0xd0
  4570. float motorYCurrentSense = adcData.adcDataBuffer[motorYSense] * deltaADC * 10 / 8.33333;
  4571. 8002306: 8a7b ldrh r3, [r7, #18]
  4572. 8002308: ee07 3a90 vmov s15, r3
  4573. 800230c: eeb8 7be7 vcvt.f64.s32 d7, s15
  4574. 8002310: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4575. 8002314: ee27 6b06 vmul.f64 d6, d7, d6
  4576. 8002318: ed9f 5b95 vldr d5, [pc, #596] @ 8002570 <ADC3MeasTask+0x340>
  4577. 800231c: ee86 7b05 vdiv.f64 d7, d6, d5
  4578. 8002320: eeb2 6b04 vmov.f64 d6, #36 @ 0x41200000 10.0
  4579. 8002324: ee27 6b06 vmul.f64 d6, d7, d6
  4580. 8002328: ed9f 5b93 vldr d5, [pc, #588] @ 8002578 <ADC3MeasTask+0x348>
  4581. 800232c: ee86 7b05 vdiv.f64 d7, d6, d5
  4582. 8002330: eef7 7bc7 vcvt.f32.f64 s15, d7
  4583. 8002334: edc7 7a33 vstr s15, [r7, #204] @ 0xcc
  4584. motorXSensCircBuffer[circBuffPos] = motorXCurrentSense;
  4585. 8002338: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  4586. 800233c: 009b lsls r3, r3, #2
  4587. 800233e: 33f0 adds r3, #240 @ 0xf0
  4588. 8002340: 443b add r3, r7
  4589. 8002342: 3b4c subs r3, #76 @ 0x4c
  4590. 8002344: f8d7 20d0 ldr.w r2, [r7, #208] @ 0xd0
  4591. 8002348: 601a str r2, [r3, #0]
  4592. motorYSensCircBuffer[circBuffPos] = motorYCurrentSense;
  4593. 800234a: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  4594. 800234e: 009b lsls r3, r3, #2
  4595. 8002350: 33f0 adds r3, #240 @ 0xf0
  4596. 8002352: 443b add r3, r7
  4597. 8002354: 3b74 subs r3, #116 @ 0x74
  4598. 8002356: f8d7 20cc ldr.w r2, [r7, #204] @ 0xcc
  4599. 800235a: 601a str r2, [r3, #0]
  4600. pvT1CircBuffer[circBuffPos] = adcData.adcDataBuffer[pvTemp1] * deltaADC * 45.33333333 - 63;
  4601. 800235c: 89bb ldrh r3, [r7, #12]
  4602. 800235e: ee07 3a90 vmov s15, r3
  4603. 8002362: eeb8 7be7 vcvt.f64.s32 d7, s15
  4604. 8002366: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4605. 800236a: ee27 6b06 vmul.f64 d6, d7, d6
  4606. 800236e: ed9f 5b80 vldr d5, [pc, #512] @ 8002570 <ADC3MeasTask+0x340>
  4607. 8002372: ee86 7b05 vdiv.f64 d7, d6, d5
  4608. 8002376: ed9f 6b82 vldr d6, [pc, #520] @ 8002580 <ADC3MeasTask+0x350>
  4609. 800237a: ee27 7b06 vmul.f64 d7, d7, d6
  4610. 800237e: ed9f 6b82 vldr d6, [pc, #520] @ 8002588 <ADC3MeasTask+0x358>
  4611. 8002382: ee37 7b46 vsub.f64 d7, d7, d6
  4612. 8002386: eef7 7bc7 vcvt.f32.f64 s15, d7
  4613. 800238a: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  4614. 800238e: 009b lsls r3, r3, #2
  4615. 8002390: 33f0 adds r3, #240 @ 0xf0
  4616. 8002392: 443b add r3, r7
  4617. 8002394: 3b9c subs r3, #156 @ 0x9c
  4618. 8002396: edc3 7a00 vstr s15, [r3]
  4619. pvT2CircBuffer[circBuffPos] = adcData.adcDataBuffer[pvTemp2] * deltaADC * 45.33333333 - 63;
  4620. 800239a: 89fb ldrh r3, [r7, #14]
  4621. 800239c: ee07 3a90 vmov s15, r3
  4622. 80023a0: eeb8 7be7 vcvt.f64.s32 d7, s15
  4623. 80023a4: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4624. 80023a8: ee27 6b06 vmul.f64 d6, d7, d6
  4625. 80023ac: ed9f 5b70 vldr d5, [pc, #448] @ 8002570 <ADC3MeasTask+0x340>
  4626. 80023b0: ee86 7b05 vdiv.f64 d7, d6, d5
  4627. 80023b4: ed9f 6b72 vldr d6, [pc, #456] @ 8002580 <ADC3MeasTask+0x350>
  4628. 80023b8: ee27 7b06 vmul.f64 d7, d7, d6
  4629. 80023bc: ed9f 6b72 vldr d6, [pc, #456] @ 8002588 <ADC3MeasTask+0x358>
  4630. 80023c0: ee37 7b46 vsub.f64 d7, d7, d6
  4631. 80023c4: eef7 7bc7 vcvt.f32.f64 s15, d7
  4632. 80023c8: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  4633. 80023cc: 009b lsls r3, r3, #2
  4634. 80023ce: 33f0 adds r3, #240 @ 0xf0
  4635. 80023d0: 443b add r3, r7
  4636. 80023d2: 3bc4 subs r3, #196 @ 0xc4
  4637. 80023d4: edc3 7a00 vstr s15, [r3]
  4638. float motorXAveCurrent = 0;
  4639. 80023d8: f04f 0300 mov.w r3, #0
  4640. 80023dc: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  4641. float motorYAveCurrent = 0;
  4642. 80023e0: f04f 0300 mov.w r3, #0
  4643. 80023e4: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  4644. float pvT1AveTemp = 0;
  4645. 80023e8: f04f 0300 mov.w r3, #0
  4646. 80023ec: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  4647. float pvT2AveTemp = 0;
  4648. 80023f0: f04f 0300 mov.w r3, #0
  4649. 80023f4: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  4650. for (uint8_t i = 0; i < CIRC_BUFF_LEN; i++) {
  4651. 80023f8: 2300 movs r3, #0
  4652. 80023fa: f887 30db strb.w r3, [r7, #219] @ 0xdb
  4653. 80023fe: e03c b.n 800247a <ADC3MeasTask+0x24a>
  4654. motorXAveCurrent += motorXSensCircBuffer[i];
  4655. 8002400: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  4656. 8002404: 009b lsls r3, r3, #2
  4657. 8002406: 33f0 adds r3, #240 @ 0xf0
  4658. 8002408: 443b add r3, r7
  4659. 800240a: 3b4c subs r3, #76 @ 0x4c
  4660. 800240c: edd3 7a00 vldr s15, [r3]
  4661. 8002410: ed97 7a3a vldr s14, [r7, #232] @ 0xe8
  4662. 8002414: ee77 7a27 vadd.f32 s15, s14, s15
  4663. 8002418: edc7 7a3a vstr s15, [r7, #232] @ 0xe8
  4664. motorYAveCurrent += motorYSensCircBuffer[i];
  4665. 800241c: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  4666. 8002420: 009b lsls r3, r3, #2
  4667. 8002422: 33f0 adds r3, #240 @ 0xf0
  4668. 8002424: 443b add r3, r7
  4669. 8002426: 3b74 subs r3, #116 @ 0x74
  4670. 8002428: edd3 7a00 vldr s15, [r3]
  4671. 800242c: ed97 7a39 vldr s14, [r7, #228] @ 0xe4
  4672. 8002430: ee77 7a27 vadd.f32 s15, s14, s15
  4673. 8002434: edc7 7a39 vstr s15, [r7, #228] @ 0xe4
  4674. pvT1AveTemp += pvT1CircBuffer[i];
  4675. 8002438: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  4676. 800243c: 009b lsls r3, r3, #2
  4677. 800243e: 33f0 adds r3, #240 @ 0xf0
  4678. 8002440: 443b add r3, r7
  4679. 8002442: 3b9c subs r3, #156 @ 0x9c
  4680. 8002444: edd3 7a00 vldr s15, [r3]
  4681. 8002448: ed97 7a38 vldr s14, [r7, #224] @ 0xe0
  4682. 800244c: ee77 7a27 vadd.f32 s15, s14, s15
  4683. 8002450: edc7 7a38 vstr s15, [r7, #224] @ 0xe0
  4684. pvT2AveTemp += pvT2CircBuffer[i];
  4685. 8002454: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  4686. 8002458: 009b lsls r3, r3, #2
  4687. 800245a: 33f0 adds r3, #240 @ 0xf0
  4688. 800245c: 443b add r3, r7
  4689. 800245e: 3bc4 subs r3, #196 @ 0xc4
  4690. 8002460: edd3 7a00 vldr s15, [r3]
  4691. 8002464: ed97 7a37 vldr s14, [r7, #220] @ 0xdc
  4692. 8002468: ee77 7a27 vadd.f32 s15, s14, s15
  4693. 800246c: edc7 7a37 vstr s15, [r7, #220] @ 0xdc
  4694. for (uint8_t i = 0; i < CIRC_BUFF_LEN; i++) {
  4695. 8002470: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  4696. 8002474: 3301 adds r3, #1
  4697. 8002476: f887 30db strb.w r3, [r7, #219] @ 0xdb
  4698. 800247a: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  4699. 800247e: 2b09 cmp r3, #9
  4700. 8002480: d9be bls.n 8002400 <ADC3MeasTask+0x1d0>
  4701. }
  4702. motorXAveCurrent /= CIRC_BUFF_LEN;
  4703. 8002482: ed97 7a3a vldr s14, [r7, #232] @ 0xe8
  4704. 8002486: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  4705. 800248a: eec7 7a26 vdiv.f32 s15, s14, s13
  4706. 800248e: edc7 7a3a vstr s15, [r7, #232] @ 0xe8
  4707. motorYAveCurrent /= CIRC_BUFF_LEN;
  4708. 8002492: ed97 7a39 vldr s14, [r7, #228] @ 0xe4
  4709. 8002496: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  4710. 800249a: eec7 7a26 vdiv.f32 s15, s14, s13
  4711. 800249e: edc7 7a39 vstr s15, [r7, #228] @ 0xe4
  4712. pvT1AveTemp /= CIRC_BUFF_LEN;
  4713. 80024a2: ed97 7a38 vldr s14, [r7, #224] @ 0xe0
  4714. 80024a6: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  4715. 80024aa: eec7 7a26 vdiv.f32 s15, s14, s13
  4716. 80024ae: edc7 7a38 vstr s15, [r7, #224] @ 0xe0
  4717. pvT2AveTemp /= CIRC_BUFF_LEN;
  4718. 80024b2: ed97 7a37 vldr s14, [r7, #220] @ 0xdc
  4719. 80024b6: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  4720. 80024ba: eec7 7a26 vdiv.f32 s15, s14, s13
  4721. 80024be: edc7 7a37 vstr s15, [r7, #220] @ 0xdc
  4722. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  4723. 80024c2: 4b37 ldr r3, [pc, #220] @ (80025a0 <ADC3MeasTask+0x370>)
  4724. 80024c4: 681b ldr r3, [r3, #0]
  4725. 80024c6: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4726. 80024ca: 4618 mov r0, r3
  4727. 80024cc: f010 f903 bl 80126d6 <osMutexAcquire>
  4728. 80024d0: 4603 mov r3, r0
  4729. 80024d2: 2b00 cmp r3, #0
  4730. 80024d4: d138 bne.n 8002548 <ADC3MeasTask+0x318>
  4731. if (sensorsInfo.motorXStatus == 1) {
  4732. 80024d6: 4b33 ldr r3, [pc, #204] @ (80025a4 <ADC3MeasTask+0x374>)
  4733. 80024d8: 7c1b ldrb r3, [r3, #16]
  4734. 80024da: 2b01 cmp r3, #1
  4735. 80024dc: d111 bne.n 8002502 <ADC3MeasTask+0x2d2>
  4736. sensorsInfo.motorXAveCurrent = motorXAveCurrent;
  4737. 80024de: 4a31 ldr r2, [pc, #196] @ (80025a4 <ADC3MeasTask+0x374>)
  4738. 80024e0: f8d7 30e8 ldr.w r3, [r7, #232] @ 0xe8
  4739. 80024e4: 6153 str r3, [r2, #20]
  4740. if (sensorsInfo.motorXPeakCurrent < motorXCurrentSense) {
  4741. 80024e6: 4b2f ldr r3, [pc, #188] @ (80025a4 <ADC3MeasTask+0x374>)
  4742. 80024e8: edd3 7a07 vldr s15, [r3, #28]
  4743. 80024ec: ed97 7a34 vldr s14, [r7, #208] @ 0xd0
  4744. 80024f0: eeb4 7ae7 vcmpe.f32 s14, s15
  4745. 80024f4: eef1 fa10 vmrs APSR_nzcv, fpscr
  4746. 80024f8: dd03 ble.n 8002502 <ADC3MeasTask+0x2d2>
  4747. sensorsInfo.motorXPeakCurrent = motorXCurrentSense;
  4748. 80024fa: 4a2a ldr r2, [pc, #168] @ (80025a4 <ADC3MeasTask+0x374>)
  4749. 80024fc: f8d7 30d0 ldr.w r3, [r7, #208] @ 0xd0
  4750. 8002500: 61d3 str r3, [r2, #28]
  4751. }
  4752. }
  4753. if (sensorsInfo.motorYStatus == 1) {
  4754. 8002502: 4b28 ldr r3, [pc, #160] @ (80025a4 <ADC3MeasTask+0x374>)
  4755. 8002504: 7c5b ldrb r3, [r3, #17]
  4756. 8002506: 2b01 cmp r3, #1
  4757. 8002508: d111 bne.n 800252e <ADC3MeasTask+0x2fe>
  4758. sensorsInfo.motorYAveCurrent = motorYAveCurrent;
  4759. 800250a: 4a26 ldr r2, [pc, #152] @ (80025a4 <ADC3MeasTask+0x374>)
  4760. 800250c: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  4761. 8002510: 6193 str r3, [r2, #24]
  4762. if (sensorsInfo.motorYPeakCurrent < motorYCurrentSense) {
  4763. 8002512: 4b24 ldr r3, [pc, #144] @ (80025a4 <ADC3MeasTask+0x374>)
  4764. 8002514: edd3 7a08 vldr s15, [r3, #32]
  4765. 8002518: ed97 7a33 vldr s14, [r7, #204] @ 0xcc
  4766. 800251c: eeb4 7ae7 vcmpe.f32 s14, s15
  4767. 8002520: eef1 fa10 vmrs APSR_nzcv, fpscr
  4768. 8002524: dd03 ble.n 800252e <ADC3MeasTask+0x2fe>
  4769. sensorsInfo.motorYPeakCurrent = motorYCurrentSense;
  4770. 8002526: 4a1f ldr r2, [pc, #124] @ (80025a4 <ADC3MeasTask+0x374>)
  4771. 8002528: f8d7 30cc ldr.w r3, [r7, #204] @ 0xcc
  4772. 800252c: 6213 str r3, [r2, #32]
  4773. }
  4774. }
  4775. sensorsInfo.pvTemperature[0] = pvT1AveTemp;
  4776. 800252e: 4a1d ldr r2, [pc, #116] @ (80025a4 <ADC3MeasTask+0x374>)
  4777. 8002530: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  4778. 8002534: 6013 str r3, [r2, #0]
  4779. sensorsInfo.pvTemperature[1] = pvT2AveTemp;
  4780. 8002536: 4a1b ldr r2, [pc, #108] @ (80025a4 <ADC3MeasTask+0x374>)
  4781. 8002538: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  4782. 800253c: 6053 str r3, [r2, #4]
  4783. osMutexRelease (sensorsInfoMutex);
  4784. 800253e: 4b18 ldr r3, [pc, #96] @ (80025a0 <ADC3MeasTask+0x370>)
  4785. 8002540: 681b ldr r3, [r3, #0]
  4786. 8002542: 4618 mov r0, r3
  4787. 8002544: f010 f912 bl 801276c <osMutexRelease>
  4788. }
  4789. ++circBuffPos;
  4790. 8002548: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  4791. 800254c: 3301 adds r3, #1
  4792. 800254e: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  4793. circBuffPos = circBuffPos % CIRC_BUFF_LEN;
  4794. 8002552: f8d7 20ec ldr.w r2, [r7, #236] @ 0xec
  4795. 8002556: 4b14 ldr r3, [pc, #80] @ (80025a8 <ADC3MeasTask+0x378>)
  4796. 8002558: fba3 1302 umull r1, r3, r3, r2
  4797. 800255c: 08d9 lsrs r1, r3, #3
  4798. 800255e: 460b mov r3, r1
  4799. 8002560: 009b lsls r3, r3, #2
  4800. 8002562: 440b add r3, r1
  4801. 8002564: 005b lsls r3, r3, #1
  4802. 8002566: 1ad3 subs r3, r2, r3
  4803. 8002568: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  4804. while (pdTRUE) {
  4805. 800256c: e68a b.n 8002284 <ADC3MeasTask+0x54>
  4806. 800256e: bf00 nop
  4807. 8002570: 00000000 .word 0x00000000
  4808. 8002574: 40efffe0 .word 0x40efffe0
  4809. 8002578: 3ad18d26 .word 0x3ad18d26
  4810. 800257c: 4020aaaa .word 0x4020aaaa
  4811. 8002580: aaa38226 .word 0xaaa38226
  4812. 8002584: 4046aaaa .word 0x4046aaaa
  4813. 8002588: 00000000 .word 0x00000000
  4814. 800258c: 404f8000 .word 0x404f8000
  4815. 8002590: 24000740 .word 0x24000740
  4816. 8002594: 1ff1e860 .word 0x1ff1e860
  4817. 8002598: 24000748 .word 0x24000748
  4818. 800259c: 24000030 .word 0x24000030
  4819. 80025a0: 24000750 .word 0x24000750
  4820. 80025a4: 24000794 .word 0x24000794
  4821. 80025a8: cccccccd .word 0xcccccccd
  4822. 080025ac <LimiterSwitchTask>:
  4823. }
  4824. }
  4825. void LimiterSwitchTask (void* arg) {
  4826. 80025ac: b580 push {r7, lr}
  4827. 80025ae: b08a sub sp, #40 @ 0x28
  4828. 80025b0: af06 add r7, sp, #24
  4829. 80025b2: 6078 str r0, [r7, #4]
  4830. LimiterSwitchData limiterSwitchData = { 0 };
  4831. 80025b4: 2300 movs r3, #0
  4832. 80025b6: 60bb str r3, [r7, #8]
  4833. limiterSwitchData.gpioPin = GPIO_PIN_8;
  4834. 80025b8: f44f 7380 mov.w r3, #256 @ 0x100
  4835. 80025bc: 813b strh r3, [r7, #8]
  4836. for(uint8_t i = 0; i < 6; i++)
  4837. 80025be: 2300 movs r3, #0
  4838. 80025c0: 73fb strb r3, [r7, #15]
  4839. 80025c2: e015 b.n 80025f0 <LimiterSwitchTask+0x44>
  4840. {
  4841. limiterSwitchData.pinState = HAL_GPIO_ReadPin(GPIOD, limiterSwitchData.gpioPin);
  4842. 80025c4: 893b ldrh r3, [r7, #8]
  4843. 80025c6: 4619 mov r1, r3
  4844. 80025c8: 486c ldr r0, [pc, #432] @ (800277c <LimiterSwitchTask+0x1d0>)
  4845. 80025ca: f007 fc41 bl 8009e50 <HAL_GPIO_ReadPin>
  4846. 80025ce: 4603 mov r3, r0
  4847. 80025d0: 72bb strb r3, [r7, #10]
  4848. osMessageQueuePut(limiterSwitchDataQueue, &limiterSwitchData, 0, 0);
  4849. 80025d2: 4b6b ldr r3, [pc, #428] @ (8002780 <LimiterSwitchTask+0x1d4>)
  4850. 80025d4: 6818 ldr r0, [r3, #0]
  4851. 80025d6: f107 0108 add.w r1, r7, #8
  4852. 80025da: 2300 movs r3, #0
  4853. 80025dc: 2200 movs r2, #0
  4854. 80025de: f010 f975 bl 80128cc <osMessageQueuePut>
  4855. limiterSwitchData.gpioPin = limiterSwitchData.gpioPin << 1;
  4856. 80025e2: 893b ldrh r3, [r7, #8]
  4857. 80025e4: 005b lsls r3, r3, #1
  4858. 80025e6: b29b uxth r3, r3
  4859. 80025e8: 813b strh r3, [r7, #8]
  4860. for(uint8_t i = 0; i < 6; i++)
  4861. 80025ea: 7bfb ldrb r3, [r7, #15]
  4862. 80025ec: 3301 adds r3, #1
  4863. 80025ee: 73fb strb r3, [r7, #15]
  4864. 80025f0: 7bfb ldrb r3, [r7, #15]
  4865. 80025f2: 2b05 cmp r3, #5
  4866. 80025f4: d9e6 bls.n 80025c4 <LimiterSwitchTask+0x18>
  4867. }
  4868. while (pdTRUE) {
  4869. osMessageQueueGet (limiterSwitchDataQueue, &limiterSwitchData, 0, osWaitForever);
  4870. 80025f6: 4b62 ldr r3, [pc, #392] @ (8002780 <LimiterSwitchTask+0x1d4>)
  4871. 80025f8: 6818 ldr r0, [r3, #0]
  4872. 80025fa: f107 0108 add.w r1, r7, #8
  4873. 80025fe: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  4874. 8002602: 2200 movs r2, #0
  4875. 8002604: f010 f9c2 bl 801298c <osMessageQueueGet>
  4876. if(osMutexAcquire(sensorsInfoMutex, osWaitForever) == osOK)
  4877. 8002608: 4b5e ldr r3, [pc, #376] @ (8002784 <LimiterSwitchTask+0x1d8>)
  4878. 800260a: 681b ldr r3, [r3, #0]
  4879. 800260c: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4880. 8002610: 4618 mov r0, r3
  4881. 8002612: f010 f860 bl 80126d6 <osMutexAcquire>
  4882. 8002616: 4603 mov r3, r0
  4883. 8002618: 2b00 cmp r3, #0
  4884. 800261a: d1ec bne.n 80025f6 <LimiterSwitchTask+0x4a>
  4885. {
  4886. switch(limiterSwitchData.gpioPin)
  4887. 800261c: 893b ldrh r3, [r7, #8]
  4888. 800261e: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  4889. 8002622: d052 beq.n 80026ca <LimiterSwitchTask+0x11e>
  4890. 8002624: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  4891. 8002628: dc5a bgt.n 80026e0 <LimiterSwitchTask+0x134>
  4892. 800262a: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  4893. 800262e: d041 beq.n 80026b4 <LimiterSwitchTask+0x108>
  4894. 8002630: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  4895. 8002634: dc54 bgt.n 80026e0 <LimiterSwitchTask+0x134>
  4896. 8002636: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  4897. 800263a: d030 beq.n 800269e <LimiterSwitchTask+0xf2>
  4898. 800263c: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  4899. 8002640: dc4e bgt.n 80026e0 <LimiterSwitchTask+0x134>
  4900. 8002642: f5b3 6f80 cmp.w r3, #1024 @ 0x400
  4901. 8002646: d01f beq.n 8002688 <LimiterSwitchTask+0xdc>
  4902. 8002648: f5b3 6f80 cmp.w r3, #1024 @ 0x400
  4903. 800264c: dc48 bgt.n 80026e0 <LimiterSwitchTask+0x134>
  4904. 800264e: f5b3 7f80 cmp.w r3, #256 @ 0x100
  4905. 8002652: d003 beq.n 800265c <LimiterSwitchTask+0xb0>
  4906. 8002654: f5b3 7f00 cmp.w r3, #512 @ 0x200
  4907. 8002658: d00b beq.n 8002672 <LimiterSwitchTask+0xc6>
  4908. break;
  4909. case GPIO_PIN_13:
  4910. sensorsInfo.limitXSwitchDown = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1;
  4911. break;
  4912. default:
  4913. break;
  4914. 800265a: e041 b.n 80026e0 <LimiterSwitchTask+0x134>
  4915. sensorsInfo.limitYSwitchCenter = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1;
  4916. 800265c: 7abb ldrb r3, [r7, #10]
  4917. 800265e: 2b01 cmp r3, #1
  4918. 8002660: bf14 ite ne
  4919. 8002662: 2301 movne r3, #1
  4920. 8002664: 2300 moveq r3, #0
  4921. 8002666: b2db uxtb r3, r3
  4922. 8002668: 461a mov r2, r3
  4923. 800266a: 4b47 ldr r3, [pc, #284] @ (8002788 <LimiterSwitchTask+0x1dc>)
  4924. 800266c: f883 2029 strb.w r2, [r3, #41] @ 0x29
  4925. break;
  4926. 8002670: e037 b.n 80026e2 <LimiterSwitchTask+0x136>
  4927. sensorsInfo.limitYSwitchDown = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1;
  4928. 8002672: 7abb ldrb r3, [r7, #10]
  4929. 8002674: 2b01 cmp r3, #1
  4930. 8002676: bf14 ite ne
  4931. 8002678: 2301 movne r3, #1
  4932. 800267a: 2300 moveq r3, #0
  4933. 800267c: b2db uxtb r3, r3
  4934. 800267e: 461a mov r2, r3
  4935. 8002680: 4b41 ldr r3, [pc, #260] @ (8002788 <LimiterSwitchTask+0x1dc>)
  4936. 8002682: f883 2028 strb.w r2, [r3, #40] @ 0x28
  4937. break;
  4938. 8002686: e02c b.n 80026e2 <LimiterSwitchTask+0x136>
  4939. sensorsInfo.limitXSwitchCenter = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1;
  4940. 8002688: 7abb ldrb r3, [r7, #10]
  4941. 800268a: 2b01 cmp r3, #1
  4942. 800268c: bf14 ite ne
  4943. 800268e: 2301 movne r3, #1
  4944. 8002690: 2300 moveq r3, #0
  4945. 8002692: b2db uxtb r3, r3
  4946. 8002694: 461a mov r2, r3
  4947. 8002696: 4b3c ldr r3, [pc, #240] @ (8002788 <LimiterSwitchTask+0x1dc>)
  4948. 8002698: f883 2026 strb.w r2, [r3, #38] @ 0x26
  4949. break;
  4950. 800269c: e021 b.n 80026e2 <LimiterSwitchTask+0x136>
  4951. sensorsInfo.limitYSwitchUp = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1;
  4952. 800269e: 7abb ldrb r3, [r7, #10]
  4953. 80026a0: 2b01 cmp r3, #1
  4954. 80026a2: bf14 ite ne
  4955. 80026a4: 2301 movne r3, #1
  4956. 80026a6: 2300 moveq r3, #0
  4957. 80026a8: b2db uxtb r3, r3
  4958. 80026aa: 461a mov r2, r3
  4959. 80026ac: 4b36 ldr r3, [pc, #216] @ (8002788 <LimiterSwitchTask+0x1dc>)
  4960. 80026ae: f883 2027 strb.w r2, [r3, #39] @ 0x27
  4961. break;
  4962. 80026b2: e016 b.n 80026e2 <LimiterSwitchTask+0x136>
  4963. sensorsInfo.limitXSwitchUp = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1;
  4964. 80026b4: 7abb ldrb r3, [r7, #10]
  4965. 80026b6: 2b01 cmp r3, #1
  4966. 80026b8: bf14 ite ne
  4967. 80026ba: 2301 movne r3, #1
  4968. 80026bc: 2300 moveq r3, #0
  4969. 80026be: b2db uxtb r3, r3
  4970. 80026c0: 461a mov r2, r3
  4971. 80026c2: 4b31 ldr r3, [pc, #196] @ (8002788 <LimiterSwitchTask+0x1dc>)
  4972. 80026c4: f883 2024 strb.w r2, [r3, #36] @ 0x24
  4973. break;
  4974. 80026c8: e00b b.n 80026e2 <LimiterSwitchTask+0x136>
  4975. sensorsInfo.limitXSwitchDown = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1;
  4976. 80026ca: 7abb ldrb r3, [r7, #10]
  4977. 80026cc: 2b01 cmp r3, #1
  4978. 80026ce: bf14 ite ne
  4979. 80026d0: 2301 movne r3, #1
  4980. 80026d2: 2300 moveq r3, #0
  4981. 80026d4: b2db uxtb r3, r3
  4982. 80026d6: 461a mov r2, r3
  4983. 80026d8: 4b2b ldr r3, [pc, #172] @ (8002788 <LimiterSwitchTask+0x1dc>)
  4984. 80026da: f883 2025 strb.w r2, [r3, #37] @ 0x25
  4985. break;
  4986. 80026de: e000 b.n 80026e2 <LimiterSwitchTask+0x136>
  4987. break;
  4988. 80026e0: bf00 nop
  4989. }
  4990. if((sensorsInfo.limitXSwitchDown == 1) ||(sensorsInfo.limitXSwitchUp == 1))
  4991. 80026e2: 4b29 ldr r3, [pc, #164] @ (8002788 <LimiterSwitchTask+0x1dc>)
  4992. 80026e4: f893 3025 ldrb.w r3, [r3, #37] @ 0x25
  4993. 80026e8: 2b01 cmp r3, #1
  4994. 80026ea: d004 beq.n 80026f6 <LimiterSwitchTask+0x14a>
  4995. 80026ec: 4b26 ldr r3, [pc, #152] @ (8002788 <LimiterSwitchTask+0x1dc>)
  4996. 80026ee: f893 3024 ldrb.w r3, [r3, #36] @ 0x24
  4997. 80026f2: 2b01 cmp r3, #1
  4998. 80026f4: d118 bne.n 8002728 <LimiterSwitchTask+0x17c>
  4999. {
  5000. sensorsInfo.motorXStatus = motorControl(&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_1, TIM_CHANNEL_2, motorXTimerHandle, 0, 0, sensorsInfo.limitXSwitchUp, sensorsInfo.limitXSwitchDown);
  5001. 80026f6: 4b25 ldr r3, [pc, #148] @ (800278c <LimiterSwitchTask+0x1e0>)
  5002. 80026f8: 681b ldr r3, [r3, #0]
  5003. 80026fa: 4a23 ldr r2, [pc, #140] @ (8002788 <LimiterSwitchTask+0x1dc>)
  5004. 80026fc: f892 2024 ldrb.w r2, [r2, #36] @ 0x24
  5005. 8002700: 4921 ldr r1, [pc, #132] @ (8002788 <LimiterSwitchTask+0x1dc>)
  5006. 8002702: f891 1025 ldrb.w r1, [r1, #37] @ 0x25
  5007. 8002706: 9104 str r1, [sp, #16]
  5008. 8002708: 9203 str r2, [sp, #12]
  5009. 800270a: 2200 movs r2, #0
  5010. 800270c: 9202 str r2, [sp, #8]
  5011. 800270e: 2200 movs r2, #0
  5012. 8002710: 9201 str r2, [sp, #4]
  5013. 8002712: 9300 str r3, [sp, #0]
  5014. 8002714: 2304 movs r3, #4
  5015. 8002716: 2200 movs r2, #0
  5016. 8002718: 491d ldr r1, [pc, #116] @ (8002790 <LimiterSwitchTask+0x1e4>)
  5017. 800271a: 481e ldr r0, [pc, #120] @ (8002794 <LimiterSwitchTask+0x1e8>)
  5018. 800271c: f000 f8cc bl 80028b8 <motorControl>
  5019. 8002720: 4603 mov r3, r0
  5020. 8002722: 461a mov r2, r3
  5021. 8002724: 4b18 ldr r3, [pc, #96] @ (8002788 <LimiterSwitchTask+0x1dc>)
  5022. 8002726: 741a strb r2, [r3, #16]
  5023. }
  5024. if((sensorsInfo.limitYSwitchDown == 1) ||(sensorsInfo.limitYSwitchUp == 1))
  5025. 8002728: 4b17 ldr r3, [pc, #92] @ (8002788 <LimiterSwitchTask+0x1dc>)
  5026. 800272a: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  5027. 800272e: 2b01 cmp r3, #1
  5028. 8002730: d004 beq.n 800273c <LimiterSwitchTask+0x190>
  5029. 8002732: 4b15 ldr r3, [pc, #84] @ (8002788 <LimiterSwitchTask+0x1dc>)
  5030. 8002734: f893 3027 ldrb.w r3, [r3, #39] @ 0x27
  5031. 8002738: 2b01 cmp r3, #1
  5032. 800273a: d118 bne.n 800276e <LimiterSwitchTask+0x1c2>
  5033. {
  5034. sensorsInfo.motorYStatus = motorControl(&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_3, TIM_CHANNEL_4, motorYTimerHandle, 0, 0, sensorsInfo.limitYSwitchUp, sensorsInfo.limitYSwitchDown);
  5035. 800273c: 4b16 ldr r3, [pc, #88] @ (8002798 <LimiterSwitchTask+0x1ec>)
  5036. 800273e: 681b ldr r3, [r3, #0]
  5037. 8002740: 4a11 ldr r2, [pc, #68] @ (8002788 <LimiterSwitchTask+0x1dc>)
  5038. 8002742: f892 2027 ldrb.w r2, [r2, #39] @ 0x27
  5039. 8002746: 4910 ldr r1, [pc, #64] @ (8002788 <LimiterSwitchTask+0x1dc>)
  5040. 8002748: f891 1028 ldrb.w r1, [r1, #40] @ 0x28
  5041. 800274c: 9104 str r1, [sp, #16]
  5042. 800274e: 9203 str r2, [sp, #12]
  5043. 8002750: 2200 movs r2, #0
  5044. 8002752: 9202 str r2, [sp, #8]
  5045. 8002754: 2200 movs r2, #0
  5046. 8002756: 9201 str r2, [sp, #4]
  5047. 8002758: 9300 str r3, [sp, #0]
  5048. 800275a: 230c movs r3, #12
  5049. 800275c: 2208 movs r2, #8
  5050. 800275e: 490c ldr r1, [pc, #48] @ (8002790 <LimiterSwitchTask+0x1e4>)
  5051. 8002760: 480c ldr r0, [pc, #48] @ (8002794 <LimiterSwitchTask+0x1e8>)
  5052. 8002762: f000 f8a9 bl 80028b8 <motorControl>
  5053. 8002766: 4603 mov r3, r0
  5054. 8002768: 461a mov r2, r3
  5055. 800276a: 4b07 ldr r3, [pc, #28] @ (8002788 <LimiterSwitchTask+0x1dc>)
  5056. 800276c: 745a strb r2, [r3, #17]
  5057. }
  5058. // sensorsInfo.motorXStatus = motorControl(&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_1, TIM_CHANNEL_2, motorXTimerHandle, 0, 0, sensorsInfo.limitXSwitchUp, sensorsInfo.limitXSwitchDown);
  5059. // sensorsInfo.motorYStatus = motorControl(&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_3, TIM_CHANNEL_4, motorYTimerHandle, 0, 0, sensorsInfo.limitYSwitchUp, sensorsInfo.limitYSwitchDown);
  5060. osMutexRelease(sensorsInfoMutex);
  5061. 800276e: 4b05 ldr r3, [pc, #20] @ (8002784 <LimiterSwitchTask+0x1d8>)
  5062. 8002770: 681b ldr r3, [r3, #0]
  5063. 8002772: 4618 mov r0, r3
  5064. 8002774: f00f fffa bl 801276c <osMutexRelease>
  5065. osMessageQueueGet (limiterSwitchDataQueue, &limiterSwitchData, 0, osWaitForever);
  5066. 8002778: e73d b.n 80025f6 <LimiterSwitchTask+0x4a>
  5067. 800277a: bf00 nop
  5068. 800277c: 58020c00 .word 0x58020c00
  5069. 8002780: 24000744 .word 0x24000744
  5070. 8002784: 24000750 .word 0x24000750
  5071. 8002788: 24000794 .word 0x24000794
  5072. 800278c: 24000690 .word 0x24000690
  5073. 8002790: 2400070c .word 0x2400070c
  5074. 8002794: 240004b8 .word 0x240004b8
  5075. 8002798: 240006c0 .word 0x240006c0
  5076. 0800279c <DbgLEDOn>:
  5077. #include <stdlib.h>
  5078. #include "peripherial.h"
  5079. void DbgLEDOn(uint8_t ledNumber)
  5080. {
  5081. 800279c: b580 push {r7, lr}
  5082. 800279e: b082 sub sp, #8
  5083. 80027a0: af00 add r7, sp, #0
  5084. 80027a2: 4603 mov r3, r0
  5085. 80027a4: 71fb strb r3, [r7, #7]
  5086. HAL_GPIO_WritePin(GPIOD, ledNumber, GPIO_PIN_SET);
  5087. 80027a6: 79fb ldrb r3, [r7, #7]
  5088. 80027a8: b29b uxth r3, r3
  5089. 80027aa: 2201 movs r2, #1
  5090. 80027ac: 4619 mov r1, r3
  5091. 80027ae: 4803 ldr r0, [pc, #12] @ (80027bc <DbgLEDOn+0x20>)
  5092. 80027b0: f007 fb66 bl 8009e80 <HAL_GPIO_WritePin>
  5093. }
  5094. 80027b4: bf00 nop
  5095. 80027b6: 3708 adds r7, #8
  5096. 80027b8: 46bd mov sp, r7
  5097. 80027ba: bd80 pop {r7, pc}
  5098. 80027bc: 58020c00 .word 0x58020c00
  5099. 080027c0 <DbgLEDOff>:
  5100. void DbgLEDOff(uint8_t ledNumber)
  5101. {
  5102. 80027c0: b580 push {r7, lr}
  5103. 80027c2: b082 sub sp, #8
  5104. 80027c4: af00 add r7, sp, #0
  5105. 80027c6: 4603 mov r3, r0
  5106. 80027c8: 71fb strb r3, [r7, #7]
  5107. HAL_GPIO_WritePin(GPIOD, ledNumber, GPIO_PIN_RESET);
  5108. 80027ca: 79fb ldrb r3, [r7, #7]
  5109. 80027cc: b29b uxth r3, r3
  5110. 80027ce: 2200 movs r2, #0
  5111. 80027d0: 4619 mov r1, r3
  5112. 80027d2: 4803 ldr r0, [pc, #12] @ (80027e0 <DbgLEDOff+0x20>)
  5113. 80027d4: f007 fb54 bl 8009e80 <HAL_GPIO_WritePin>
  5114. }
  5115. 80027d8: bf00 nop
  5116. 80027da: 3708 adds r7, #8
  5117. 80027dc: 46bd mov sp, r7
  5118. 80027de: bd80 pop {r7, pc}
  5119. 80027e0: 58020c00 .word 0x58020c00
  5120. 080027e4 <DbgLEDToggle>:
  5121. void DbgLEDToggle(uint8_t ledNumber)
  5122. {
  5123. 80027e4: b580 push {r7, lr}
  5124. 80027e6: b082 sub sp, #8
  5125. 80027e8: af00 add r7, sp, #0
  5126. 80027ea: 4603 mov r3, r0
  5127. 80027ec: 71fb strb r3, [r7, #7]
  5128. HAL_GPIO_TogglePin(GPIOD, ledNumber);
  5129. 80027ee: 79fb ldrb r3, [r7, #7]
  5130. 80027f0: b29b uxth r3, r3
  5131. 80027f2: 4619 mov r1, r3
  5132. 80027f4: 4803 ldr r0, [pc, #12] @ (8002804 <DbgLEDToggle+0x20>)
  5133. 80027f6: f007 fb5c bl 8009eb2 <HAL_GPIO_TogglePin>
  5134. }
  5135. 80027fa: bf00 nop
  5136. 80027fc: 3708 adds r7, #8
  5137. 80027fe: 46bd mov sp, r7
  5138. 8002800: bd80 pop {r7, pc}
  5139. 8002802: bf00 nop
  5140. 8002804: 58020c00 .word 0x58020c00
  5141. 08002808 <EnableCurrentSensors>:
  5142. void EnableCurrentSensors(void)
  5143. {
  5144. 8002808: b580 push {r7, lr}
  5145. 800280a: af00 add r7, sp, #0
  5146. HAL_GPIO_WritePin(GPIOE, MCU_CS_PWR_EN, GPIO_PIN_SET);
  5147. 800280c: 2201 movs r2, #1
  5148. 800280e: f44f 4100 mov.w r1, #32768 @ 0x8000
  5149. 8002812: 4802 ldr r0, [pc, #8] @ (800281c <EnableCurrentSensors+0x14>)
  5150. 8002814: f007 fb34 bl 8009e80 <HAL_GPIO_WritePin>
  5151. }
  5152. 8002818: bf00 nop
  5153. 800281a: bd80 pop {r7, pc}
  5154. 800281c: 58021000 .word 0x58021000
  5155. 08002820 <SelectCurrentSensorGain>:
  5156. {
  5157. HAL_GPIO_WritePin(GPIOE, MCU_CS_PWR_EN, GPIO_PIN_RESET);
  5158. }
  5159. void SelectCurrentSensorGain(CurrentSensor sensor, CurrentSensorGain gain)
  5160. {
  5161. 8002820: b580 push {r7, lr}
  5162. 8002822: b084 sub sp, #16
  5163. 8002824: af00 add r7, sp, #0
  5164. 8002826: 4603 mov r3, r0
  5165. 8002828: 460a mov r2, r1
  5166. 800282a: 71fb strb r3, [r7, #7]
  5167. 800282c: 4613 mov r3, r2
  5168. 800282e: 71bb strb r3, [r7, #6]
  5169. uint8_t gpioOffset = 0;
  5170. 8002830: 2300 movs r3, #0
  5171. 8002832: 73fb strb r3, [r7, #15]
  5172. switch(sensor)
  5173. 8002834: 79fb ldrb r3, [r7, #7]
  5174. 8002836: 2b02 cmp r3, #2
  5175. 8002838: d00c beq.n 8002854 <SelectCurrentSensorGain+0x34>
  5176. 800283a: 2b02 cmp r3, #2
  5177. 800283c: dc0d bgt.n 800285a <SelectCurrentSensorGain+0x3a>
  5178. 800283e: 2b00 cmp r3, #0
  5179. 8002840: d002 beq.n 8002848 <SelectCurrentSensorGain+0x28>
  5180. 8002842: 2b01 cmp r3, #1
  5181. 8002844: d003 beq.n 800284e <SelectCurrentSensorGain+0x2e>
  5182. break;
  5183. case CurrentSensorL3:
  5184. gpioOffset = CURRENT_SENSOR_L3_GPIO_OFFSET;
  5185. break;
  5186. default:
  5187. break;
  5188. 8002846: e008 b.n 800285a <SelectCurrentSensorGain+0x3a>
  5189. gpioOffset = CURRENT_SENSOR_L1_GPIO_OFFSET;
  5190. 8002848: 2307 movs r3, #7
  5191. 800284a: 73fb strb r3, [r7, #15]
  5192. break;
  5193. 800284c: e006 b.n 800285c <SelectCurrentSensorGain+0x3c>
  5194. gpioOffset = CURRENT_SENSOR_L2_GPIO_OFFSET;
  5195. 800284e: 2309 movs r3, #9
  5196. 8002850: 73fb strb r3, [r7, #15]
  5197. break;
  5198. 8002852: e003 b.n 800285c <SelectCurrentSensorGain+0x3c>
  5199. gpioOffset = CURRENT_SENSOR_L3_GPIO_OFFSET;
  5200. 8002854: 230d movs r3, #13
  5201. 8002856: 73fb strb r3, [r7, #15]
  5202. break;
  5203. 8002858: e000 b.n 800285c <SelectCurrentSensorGain+0x3c>
  5204. break;
  5205. 800285a: bf00 nop
  5206. }
  5207. if(gpioOffset > 0)
  5208. 800285c: 7bfb ldrb r3, [r7, #15]
  5209. 800285e: 2b00 cmp r3, #0
  5210. 8002860: d023 beq.n 80028aa <SelectCurrentSensorGain+0x8a>
  5211. {
  5212. uint16_t gain0Gpio = 1 << gpioOffset;
  5213. 8002862: 7bfb ldrb r3, [r7, #15]
  5214. 8002864: 2201 movs r2, #1
  5215. 8002866: fa02 f303 lsl.w r3, r2, r3
  5216. 800286a: 81bb strh r3, [r7, #12]
  5217. uint16_t gain1Gpio = 1 << (gpioOffset + 1);
  5218. 800286c: 7bfb ldrb r3, [r7, #15]
  5219. 800286e: 3301 adds r3, #1
  5220. 8002870: 2201 movs r2, #1
  5221. 8002872: fa02 f303 lsl.w r3, r2, r3
  5222. 8002876: 817b strh r3, [r7, #10]
  5223. uint16_t gpioState = ((uint16_t)gain) & 0x0001;
  5224. 8002878: 79bb ldrb r3, [r7, #6]
  5225. 800287a: b29b uxth r3, r3
  5226. 800287c: f003 0301 and.w r3, r3, #1
  5227. 8002880: 813b strh r3, [r7, #8]
  5228. HAL_GPIO_WritePin(GPIOE, gain0Gpio, gpioState);
  5229. 8002882: 893b ldrh r3, [r7, #8]
  5230. 8002884: b2da uxtb r2, r3
  5231. 8002886: 89bb ldrh r3, [r7, #12]
  5232. 8002888: 4619 mov r1, r3
  5233. 800288a: 480a ldr r0, [pc, #40] @ (80028b4 <SelectCurrentSensorGain+0x94>)
  5234. 800288c: f007 faf8 bl 8009e80 <HAL_GPIO_WritePin>
  5235. gpioState = (((uint16_t)gain) >> 1) & 0x0001;
  5236. 8002890: 79bb ldrb r3, [r7, #6]
  5237. 8002892: 085b lsrs r3, r3, #1
  5238. 8002894: b2db uxtb r3, r3
  5239. 8002896: f003 0301 and.w r3, r3, #1
  5240. 800289a: 813b strh r3, [r7, #8]
  5241. HAL_GPIO_WritePin(GPIOE, gain1Gpio, gpioState);
  5242. 800289c: 893b ldrh r3, [r7, #8]
  5243. 800289e: b2da uxtb r2, r3
  5244. 80028a0: 897b ldrh r3, [r7, #10]
  5245. 80028a2: 4619 mov r1, r3
  5246. 80028a4: 4803 ldr r0, [pc, #12] @ (80028b4 <SelectCurrentSensorGain+0x94>)
  5247. 80028a6: f007 faeb bl 8009e80 <HAL_GPIO_WritePin>
  5248. }
  5249. }
  5250. 80028aa: bf00 nop
  5251. 80028ac: 3710 adds r7, #16
  5252. 80028ae: 46bd mov sp, r7
  5253. 80028b0: bd80 pop {r7, pc}
  5254. 80028b2: bf00 nop
  5255. 80028b4: 58021000 .word 0x58021000
  5256. 080028b8 <motorControl>:
  5257. uint8_t motorControl (TIM_HandleTypeDef* htim, TIM_OC_InitTypeDef* motorTimerConfigOC, uint8_t channel1, uint8_t channel2, osTimerId_t motorTimerHandle, int32_t motorPWMPulse,
  5258. int32_t motorTimerPeriod, uint8_t switchLimiterUpStat, uint8_t switchLimiterDownStat) {
  5259. 80028b8: b580 push {r7, lr}
  5260. 80028ba: b088 sub sp, #32
  5261. 80028bc: af02 add r7, sp, #8
  5262. 80028be: 60f8 str r0, [r7, #12]
  5263. 80028c0: 60b9 str r1, [r7, #8]
  5264. 80028c2: 4611 mov r1, r2
  5265. 80028c4: 461a mov r2, r3
  5266. 80028c6: 460b mov r3, r1
  5267. 80028c8: 71fb strb r3, [r7, #7]
  5268. 80028ca: 4613 mov r3, r2
  5269. 80028cc: 71bb strb r3, [r7, #6]
  5270. uint32_t motorStatus = 0;
  5271. 80028ce: 2300 movs r3, #0
  5272. 80028d0: 617b str r3, [r7, #20]
  5273. MotorDriverState setMotorYState = HiZ;
  5274. 80028d2: 2300 movs r3, #0
  5275. 80028d4: 74fb strb r3, [r7, #19]
  5276. HAL_TIM_PWM_Stop (htim, channel1);
  5277. 80028d6: 79fb ldrb r3, [r7, #7]
  5278. 80028d8: 4619 mov r1, r3
  5279. 80028da: 68f8 ldr r0, [r7, #12]
  5280. 80028dc: f00b fc7a bl 800e1d4 <HAL_TIM_PWM_Stop>
  5281. HAL_TIM_PWM_Stop (htim, channel2);
  5282. 80028e0: 79bb ldrb r3, [r7, #6]
  5283. 80028e2: 4619 mov r1, r3
  5284. 80028e4: 68f8 ldr r0, [r7, #12]
  5285. 80028e6: f00b fc75 bl 800e1d4 <HAL_TIM_PWM_Stop>
  5286. if (motorTimerPeriod > 0) {
  5287. 80028ea: 6abb ldr r3, [r7, #40] @ 0x28
  5288. 80028ec: 2b00 cmp r3, #0
  5289. 80028ee: f340 808c ble.w 8002a0a <motorControl+0x152>
  5290. if (motorPWMPulse > 0) {
  5291. 80028f2: 6a7b ldr r3, [r7, #36] @ 0x24
  5292. 80028f4: 2b00 cmp r3, #0
  5293. 80028f6: dd2c ble.n 8002952 <motorControl+0x9a>
  5294. // Forward
  5295. if (switchLimiterUpStat == 0) {
  5296. 80028f8: f897 302c ldrb.w r3, [r7, #44] @ 0x2c
  5297. 80028fc: 2b00 cmp r3, #0
  5298. 80028fe: d11d bne.n 800293c <motorControl+0x84>
  5299. setMotorYState = Forward;
  5300. 8002900: 2301 movs r3, #1
  5301. 8002902: 74fb strb r3, [r7, #19]
  5302. motorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorYState, abs (motorPWMPulse) * 10);
  5303. 8002904: 79f9 ldrb r1, [r7, #7]
  5304. 8002906: 79b8 ldrb r0, [r7, #6]
  5305. 8002908: 6a7b ldr r3, [r7, #36] @ 0x24
  5306. 800290a: ea83 72e3 eor.w r2, r3, r3, asr #31
  5307. 800290e: eba2 72e3 sub.w r2, r2, r3, asr #31
  5308. 8002912: 4613 mov r3, r2
  5309. 8002914: 009b lsls r3, r3, #2
  5310. 8002916: 4413 add r3, r2
  5311. 8002918: 005b lsls r3, r3, #1
  5312. 800291a: 9301 str r3, [sp, #4]
  5313. 800291c: 7cfb ldrb r3, [r7, #19]
  5314. 800291e: 9300 str r3, [sp, #0]
  5315. 8002920: 4603 mov r3, r0
  5316. 8002922: 460a mov r2, r1
  5317. 8002924: 68b9 ldr r1, [r7, #8]
  5318. 8002926: 68f8 ldr r0, [r7, #12]
  5319. 8002928: f000 f8ff bl 8002b2a <motorAction>
  5320. HAL_TIM_PWM_Start (htim, channel1);
  5321. 800292c: 79fb ldrb r3, [r7, #7]
  5322. 800292e: 4619 mov r1, r3
  5323. 8002930: 68f8 ldr r0, [r7, #12]
  5324. 8002932: f00b fb41 bl 800dfb8 <HAL_TIM_PWM_Start>
  5325. // HAL_TIM_PWM_Stop (htim, channel2);
  5326. motorStatus = 1;
  5327. 8002936: 2301 movs r3, #1
  5328. 8002938: 617b str r3, [r7, #20]
  5329. 800293a: e004 b.n 8002946 <motorControl+0x8e>
  5330. }
  5331. else
  5332. {
  5333. HAL_TIM_PWM_Stop (htim, channel1);
  5334. 800293c: 79fb ldrb r3, [r7, #7]
  5335. 800293e: 4619 mov r1, r3
  5336. 8002940: 68f8 ldr r0, [r7, #12]
  5337. 8002942: f00b fc47 bl 800e1d4 <HAL_TIM_PWM_Stop>
  5338. }
  5339. HAL_TIM_PWM_Stop (htim, channel2);
  5340. 8002946: 79bb ldrb r3, [r7, #6]
  5341. 8002948: 4619 mov r1, r3
  5342. 800294a: 68f8 ldr r0, [r7, #12]
  5343. 800294c: f00b fc42 bl 800e1d4 <HAL_TIM_PWM_Stop>
  5344. 8002950: e051 b.n 80029f6 <motorControl+0x13e>
  5345. } else if (motorPWMPulse < 0) {
  5346. 8002952: 6a7b ldr r3, [r7, #36] @ 0x24
  5347. 8002954: 2b00 cmp r3, #0
  5348. 8002956: da2c bge.n 80029b2 <motorControl+0xfa>
  5349. // Reverse
  5350. if (switchLimiterDownStat == 0) {
  5351. 8002958: f897 3030 ldrb.w r3, [r7, #48] @ 0x30
  5352. 800295c: 2b00 cmp r3, #0
  5353. 800295e: d11d bne.n 800299c <motorControl+0xe4>
  5354. setMotorYState = Reverse;
  5355. 8002960: 2302 movs r3, #2
  5356. 8002962: 74fb strb r3, [r7, #19]
  5357. motorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorYState, abs (motorPWMPulse) * 10);
  5358. 8002964: 79f9 ldrb r1, [r7, #7]
  5359. 8002966: 79b8 ldrb r0, [r7, #6]
  5360. 8002968: 6a7b ldr r3, [r7, #36] @ 0x24
  5361. 800296a: ea83 72e3 eor.w r2, r3, r3, asr #31
  5362. 800296e: eba2 72e3 sub.w r2, r2, r3, asr #31
  5363. 8002972: 4613 mov r3, r2
  5364. 8002974: 009b lsls r3, r3, #2
  5365. 8002976: 4413 add r3, r2
  5366. 8002978: 005b lsls r3, r3, #1
  5367. 800297a: 9301 str r3, [sp, #4]
  5368. 800297c: 7cfb ldrb r3, [r7, #19]
  5369. 800297e: 9300 str r3, [sp, #0]
  5370. 8002980: 4603 mov r3, r0
  5371. 8002982: 460a mov r2, r1
  5372. 8002984: 68b9 ldr r1, [r7, #8]
  5373. 8002986: 68f8 ldr r0, [r7, #12]
  5374. 8002988: f000 f8cf bl 8002b2a <motorAction>
  5375. HAL_TIM_PWM_Start (htim, channel2);
  5376. 800298c: 79bb ldrb r3, [r7, #6]
  5377. 800298e: 4619 mov r1, r3
  5378. 8002990: 68f8 ldr r0, [r7, #12]
  5379. 8002992: f00b fb11 bl 800dfb8 <HAL_TIM_PWM_Start>
  5380. motorStatus = 1;
  5381. 8002996: 2301 movs r3, #1
  5382. 8002998: 617b str r3, [r7, #20]
  5383. 800299a: e004 b.n 80029a6 <motorControl+0xee>
  5384. }
  5385. else
  5386. {
  5387. HAL_TIM_PWM_Stop (htim, channel2);
  5388. 800299c: 79bb ldrb r3, [r7, #6]
  5389. 800299e: 4619 mov r1, r3
  5390. 80029a0: 68f8 ldr r0, [r7, #12]
  5391. 80029a2: f00b fc17 bl 800e1d4 <HAL_TIM_PWM_Stop>
  5392. }
  5393. HAL_TIM_PWM_Stop (htim, channel1);
  5394. 80029a6: 79fb ldrb r3, [r7, #7]
  5395. 80029a8: 4619 mov r1, r3
  5396. 80029aa: 68f8 ldr r0, [r7, #12]
  5397. 80029ac: f00b fc12 bl 800e1d4 <HAL_TIM_PWM_Stop>
  5398. 80029b0: e021 b.n 80029f6 <motorControl+0x13e>
  5399. } else {
  5400. // Brake
  5401. setMotorYState = Brake;
  5402. 80029b2: 2303 movs r3, #3
  5403. 80029b4: 74fb strb r3, [r7, #19]
  5404. motorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorYState, abs (motorPWMPulse) * 10);
  5405. 80029b6: 79f9 ldrb r1, [r7, #7]
  5406. 80029b8: 79b8 ldrb r0, [r7, #6]
  5407. 80029ba: 6a7b ldr r3, [r7, #36] @ 0x24
  5408. 80029bc: ea83 72e3 eor.w r2, r3, r3, asr #31
  5409. 80029c0: eba2 72e3 sub.w r2, r2, r3, asr #31
  5410. 80029c4: 4613 mov r3, r2
  5411. 80029c6: 009b lsls r3, r3, #2
  5412. 80029c8: 4413 add r3, r2
  5413. 80029ca: 005b lsls r3, r3, #1
  5414. 80029cc: 9301 str r3, [sp, #4]
  5415. 80029ce: 7cfb ldrb r3, [r7, #19]
  5416. 80029d0: 9300 str r3, [sp, #0]
  5417. 80029d2: 4603 mov r3, r0
  5418. 80029d4: 460a mov r2, r1
  5419. 80029d6: 68b9 ldr r1, [r7, #8]
  5420. 80029d8: 68f8 ldr r0, [r7, #12]
  5421. 80029da: f000 f8a6 bl 8002b2a <motorAction>
  5422. HAL_TIM_PWM_Start (htim, channel1);
  5423. 80029de: 79fb ldrb r3, [r7, #7]
  5424. 80029e0: 4619 mov r1, r3
  5425. 80029e2: 68f8 ldr r0, [r7, #12]
  5426. 80029e4: f00b fae8 bl 800dfb8 <HAL_TIM_PWM_Start>
  5427. HAL_TIM_PWM_Start (htim, channel2);
  5428. 80029e8: 79bb ldrb r3, [r7, #6]
  5429. 80029ea: 4619 mov r1, r3
  5430. 80029ec: 68f8 ldr r0, [r7, #12]
  5431. 80029ee: f00b fae3 bl 800dfb8 <HAL_TIM_PWM_Start>
  5432. motorStatus = 0;
  5433. 80029f2: 2300 movs r3, #0
  5434. 80029f4: 617b str r3, [r7, #20]
  5435. }
  5436. osTimerStart (motorTimerHandle, motorTimerPeriod * 1000);
  5437. 80029f6: 6abb ldr r3, [r7, #40] @ 0x28
  5438. 80029f8: f44f 727a mov.w r2, #1000 @ 0x3e8
  5439. 80029fc: fb02 f303 mul.w r3, r2, r3
  5440. 8002a00: 4619 mov r1, r3
  5441. 8002a02: 6a38 ldr r0, [r7, #32]
  5442. 8002a04: f00f fd7c bl 8012500 <osTimerStart>
  5443. 8002a08: e089 b.n 8002b1e <motorControl+0x266>
  5444. } else if ((motorTimerPeriod == 0) && (motorPWMPulse == 0)) {
  5445. 8002a0a: 6abb ldr r3, [r7, #40] @ 0x28
  5446. 8002a0c: 2b00 cmp r3, #0
  5447. 8002a0e: d126 bne.n 8002a5e <motorControl+0x1a6>
  5448. 8002a10: 6a7b ldr r3, [r7, #36] @ 0x24
  5449. 8002a12: 2b00 cmp r3, #0
  5450. 8002a14: d123 bne.n 8002a5e <motorControl+0x1a6>
  5451. motorAction (htim, motorTimerConfigOC, channel1, channel2, HiZ, abs (motorPWMPulse) * 10);
  5452. 8002a16: 79f9 ldrb r1, [r7, #7]
  5453. 8002a18: 79b8 ldrb r0, [r7, #6]
  5454. 8002a1a: 6a7b ldr r3, [r7, #36] @ 0x24
  5455. 8002a1c: ea83 72e3 eor.w r2, r3, r3, asr #31
  5456. 8002a20: eba2 72e3 sub.w r2, r2, r3, asr #31
  5457. 8002a24: 4613 mov r3, r2
  5458. 8002a26: 009b lsls r3, r3, #2
  5459. 8002a28: 4413 add r3, r2
  5460. 8002a2a: 005b lsls r3, r3, #1
  5461. 8002a2c: 9301 str r3, [sp, #4]
  5462. 8002a2e: 2300 movs r3, #0
  5463. 8002a30: 9300 str r3, [sp, #0]
  5464. 8002a32: 4603 mov r3, r0
  5465. 8002a34: 460a mov r2, r1
  5466. 8002a36: 68b9 ldr r1, [r7, #8]
  5467. 8002a38: 68f8 ldr r0, [r7, #12]
  5468. 8002a3a: f000 f876 bl 8002b2a <motorAction>
  5469. HAL_TIM_PWM_Stop (htim, channel1);
  5470. 8002a3e: 79fb ldrb r3, [r7, #7]
  5471. 8002a40: 4619 mov r1, r3
  5472. 8002a42: 68f8 ldr r0, [r7, #12]
  5473. 8002a44: f00b fbc6 bl 800e1d4 <HAL_TIM_PWM_Stop>
  5474. HAL_TIM_PWM_Stop (htim, channel2);
  5475. 8002a48: 79bb ldrb r3, [r7, #6]
  5476. 8002a4a: 4619 mov r1, r3
  5477. 8002a4c: 68f8 ldr r0, [r7, #12]
  5478. 8002a4e: f00b fbc1 bl 800e1d4 <HAL_TIM_PWM_Stop>
  5479. osTimerStop (motorTimerHandle);
  5480. 8002a52: 6a38 ldr r0, [r7, #32]
  5481. 8002a54: f00f fd82 bl 801255c <osTimerStop>
  5482. motorStatus = 0;
  5483. 8002a58: 2300 movs r3, #0
  5484. 8002a5a: 617b str r3, [r7, #20]
  5485. 8002a5c: e05f b.n 8002b1e <motorControl+0x266>
  5486. } else if (motorTimerPeriod == -1) {
  5487. 8002a5e: 6abb ldr r3, [r7, #40] @ 0x28
  5488. 8002a60: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  5489. 8002a64: d15b bne.n 8002b1e <motorControl+0x266>
  5490. if (motorPWMPulse > 0) {
  5491. 8002a66: 6a7b ldr r3, [r7, #36] @ 0x24
  5492. 8002a68: 2b00 cmp r3, #0
  5493. 8002a6a: dd2c ble.n 8002ac6 <motorControl+0x20e>
  5494. // Forward
  5495. if (switchLimiterUpStat == 0) {
  5496. 8002a6c: f897 302c ldrb.w r3, [r7, #44] @ 0x2c
  5497. 8002a70: 2b00 cmp r3, #0
  5498. 8002a72: d11d bne.n 8002ab0 <motorControl+0x1f8>
  5499. setMotorYState = Forward;
  5500. 8002a74: 2301 movs r3, #1
  5501. 8002a76: 74fb strb r3, [r7, #19]
  5502. motorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorYState, abs (motorPWMPulse) * 10);
  5503. 8002a78: 79f9 ldrb r1, [r7, #7]
  5504. 8002a7a: 79b8 ldrb r0, [r7, #6]
  5505. 8002a7c: 6a7b ldr r3, [r7, #36] @ 0x24
  5506. 8002a7e: ea83 72e3 eor.w r2, r3, r3, asr #31
  5507. 8002a82: eba2 72e3 sub.w r2, r2, r3, asr #31
  5508. 8002a86: 4613 mov r3, r2
  5509. 8002a88: 009b lsls r3, r3, #2
  5510. 8002a8a: 4413 add r3, r2
  5511. 8002a8c: 005b lsls r3, r3, #1
  5512. 8002a8e: 9301 str r3, [sp, #4]
  5513. 8002a90: 7cfb ldrb r3, [r7, #19]
  5514. 8002a92: 9300 str r3, [sp, #0]
  5515. 8002a94: 4603 mov r3, r0
  5516. 8002a96: 460a mov r2, r1
  5517. 8002a98: 68b9 ldr r1, [r7, #8]
  5518. 8002a9a: 68f8 ldr r0, [r7, #12]
  5519. 8002a9c: f000 f845 bl 8002b2a <motorAction>
  5520. HAL_TIM_PWM_Start (htim, channel1);
  5521. 8002aa0: 79fb ldrb r3, [r7, #7]
  5522. 8002aa2: 4619 mov r1, r3
  5523. 8002aa4: 68f8 ldr r0, [r7, #12]
  5524. 8002aa6: f00b fa87 bl 800dfb8 <HAL_TIM_PWM_Start>
  5525. motorStatus = 1;
  5526. 8002aaa: 2301 movs r3, #1
  5527. 8002aac: 617b str r3, [r7, #20]
  5528. 8002aae: e004 b.n 8002aba <motorControl+0x202>
  5529. }
  5530. else
  5531. {
  5532. HAL_TIM_PWM_Stop (htim, channel1);
  5533. 8002ab0: 79fb ldrb r3, [r7, #7]
  5534. 8002ab2: 4619 mov r1, r3
  5535. 8002ab4: 68f8 ldr r0, [r7, #12]
  5536. 8002ab6: f00b fb8d bl 800e1d4 <HAL_TIM_PWM_Stop>
  5537. }
  5538. HAL_TIM_PWM_Stop (htim, channel2);
  5539. 8002aba: 79bb ldrb r3, [r7, #6]
  5540. 8002abc: 4619 mov r1, r3
  5541. 8002abe: 68f8 ldr r0, [r7, #12]
  5542. 8002ac0: f00b fb88 bl 800e1d4 <HAL_TIM_PWM_Stop>
  5543. 8002ac4: e02b b.n 8002b1e <motorControl+0x266>
  5544. } else {
  5545. // Reverse
  5546. if (switchLimiterDownStat == 0) {
  5547. 8002ac6: f897 3030 ldrb.w r3, [r7, #48] @ 0x30
  5548. 8002aca: 2b00 cmp r3, #0
  5549. 8002acc: d11d bne.n 8002b0a <motorControl+0x252>
  5550. setMotorYState = Reverse;
  5551. 8002ace: 2302 movs r3, #2
  5552. 8002ad0: 74fb strb r3, [r7, #19]
  5553. motorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorYState, abs (motorPWMPulse) * 10);
  5554. 8002ad2: 79f9 ldrb r1, [r7, #7]
  5555. 8002ad4: 79b8 ldrb r0, [r7, #6]
  5556. 8002ad6: 6a7b ldr r3, [r7, #36] @ 0x24
  5557. 8002ad8: ea83 72e3 eor.w r2, r3, r3, asr #31
  5558. 8002adc: eba2 72e3 sub.w r2, r2, r3, asr #31
  5559. 8002ae0: 4613 mov r3, r2
  5560. 8002ae2: 009b lsls r3, r3, #2
  5561. 8002ae4: 4413 add r3, r2
  5562. 8002ae6: 005b lsls r3, r3, #1
  5563. 8002ae8: 9301 str r3, [sp, #4]
  5564. 8002aea: 7cfb ldrb r3, [r7, #19]
  5565. 8002aec: 9300 str r3, [sp, #0]
  5566. 8002aee: 4603 mov r3, r0
  5567. 8002af0: 460a mov r2, r1
  5568. 8002af2: 68b9 ldr r1, [r7, #8]
  5569. 8002af4: 68f8 ldr r0, [r7, #12]
  5570. 8002af6: f000 f818 bl 8002b2a <motorAction>
  5571. HAL_TIM_PWM_Start (htim, channel2);
  5572. 8002afa: 79bb ldrb r3, [r7, #6]
  5573. 8002afc: 4619 mov r1, r3
  5574. 8002afe: 68f8 ldr r0, [r7, #12]
  5575. 8002b00: f00b fa5a bl 800dfb8 <HAL_TIM_PWM_Start>
  5576. motorStatus = 1;
  5577. 8002b04: 2301 movs r3, #1
  5578. 8002b06: 617b str r3, [r7, #20]
  5579. 8002b08: e004 b.n 8002b14 <motorControl+0x25c>
  5580. }
  5581. else
  5582. {
  5583. HAL_TIM_PWM_Stop (htim, channel2);
  5584. 8002b0a: 79bb ldrb r3, [r7, #6]
  5585. 8002b0c: 4619 mov r1, r3
  5586. 8002b0e: 68f8 ldr r0, [r7, #12]
  5587. 8002b10: f00b fb60 bl 800e1d4 <HAL_TIM_PWM_Stop>
  5588. }
  5589. HAL_TIM_PWM_Stop (htim, channel1);
  5590. 8002b14: 79fb ldrb r3, [r7, #7]
  5591. 8002b16: 4619 mov r1, r3
  5592. 8002b18: 68f8 ldr r0, [r7, #12]
  5593. 8002b1a: f00b fb5b bl 800e1d4 <HAL_TIM_PWM_Stop>
  5594. }
  5595. }
  5596. return motorStatus;
  5597. 8002b1e: 697b ldr r3, [r7, #20]
  5598. 8002b20: b2db uxtb r3, r3
  5599. }
  5600. 8002b22: 4618 mov r0, r3
  5601. 8002b24: 3718 adds r7, #24
  5602. 8002b26: 46bd mov sp, r7
  5603. 8002b28: bd80 pop {r7, pc}
  5604. 08002b2a <motorAction>:
  5605. void motorAction(TIM_HandleTypeDef *tim, TIM_OC_InitTypeDef *timerConf, uint32_t channel1, uint32_t channel2, MotorDriverState setState, uint32_t pulse)
  5606. {
  5607. 8002b2a: b580 push {r7, lr}
  5608. 8002b2c: b084 sub sp, #16
  5609. 8002b2e: af00 add r7, sp, #0
  5610. 8002b30: 60f8 str r0, [r7, #12]
  5611. 8002b32: 60b9 str r1, [r7, #8]
  5612. 8002b34: 607a str r2, [r7, #4]
  5613. 8002b36: 603b str r3, [r7, #0]
  5614. timerConf->Pulse = pulse;
  5615. 8002b38: 68bb ldr r3, [r7, #8]
  5616. 8002b3a: 69fa ldr r2, [r7, #28]
  5617. 8002b3c: 605a str r2, [r3, #4]
  5618. switch(setState)
  5619. 8002b3e: 7e3b ldrb r3, [r7, #24]
  5620. 8002b40: 2b02 cmp r3, #2
  5621. 8002b42: dc02 bgt.n 8002b4a <motorAction+0x20>
  5622. 8002b44: 2b00 cmp r3, #0
  5623. 8002b46: da03 bge.n 8002b50 <motorAction+0x26>
  5624. 8002b48: e038 b.n 8002bbc <motorAction+0x92>
  5625. 8002b4a: 2b03 cmp r3, #3
  5626. 8002b4c: d01b beq.n 8002b86 <motorAction+0x5c>
  5627. 8002b4e: e035 b.n 8002bbc <motorAction+0x92>
  5628. {
  5629. case Forward:
  5630. case Reverse:
  5631. case HiZ:
  5632. timerConf->OCPolarity = TIM_OCPOLARITY_HIGH;
  5633. 8002b50: 68bb ldr r3, [r7, #8]
  5634. 8002b52: 2200 movs r2, #0
  5635. 8002b54: 609a str r2, [r3, #8]
  5636. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel1) != HAL_OK) {
  5637. 8002b56: 687a ldr r2, [r7, #4]
  5638. 8002b58: 68b9 ldr r1, [r7, #8]
  5639. 8002b5a: 68f8 ldr r0, [r7, #12]
  5640. 8002b5c: f00b fcd8 bl 800e510 <HAL_TIM_PWM_ConfigChannel>
  5641. 8002b60: 4603 mov r3, r0
  5642. 8002b62: 2b00 cmp r3, #0
  5643. 8002b64: d001 beq.n 8002b6a <motorAction+0x40>
  5644. Error_Handler ();
  5645. 8002b66: f7fe ff5b bl 8001a20 <Error_Handler>
  5646. }
  5647. timerConf->OCPolarity = TIM_OCPOLARITY_HIGH;
  5648. 8002b6a: 68bb ldr r3, [r7, #8]
  5649. 8002b6c: 2200 movs r2, #0
  5650. 8002b6e: 609a str r2, [r3, #8]
  5651. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel2) != HAL_OK) {
  5652. 8002b70: 683a ldr r2, [r7, #0]
  5653. 8002b72: 68b9 ldr r1, [r7, #8]
  5654. 8002b74: 68f8 ldr r0, [r7, #12]
  5655. 8002b76: f00b fccb bl 800e510 <HAL_TIM_PWM_ConfigChannel>
  5656. 8002b7a: 4603 mov r3, r0
  5657. 8002b7c: 2b00 cmp r3, #0
  5658. 8002b7e: d038 beq.n 8002bf2 <motorAction+0xc8>
  5659. Error_Handler ();
  5660. 8002b80: f7fe ff4e bl 8001a20 <Error_Handler>
  5661. }
  5662. break;
  5663. 8002b84: e035 b.n 8002bf2 <motorAction+0xc8>
  5664. case Brake:
  5665. timerConf->OCPolarity = TIM_OCPOLARITY_LOW;
  5666. 8002b86: 68bb ldr r3, [r7, #8]
  5667. 8002b88: 2202 movs r2, #2
  5668. 8002b8a: 609a str r2, [r3, #8]
  5669. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel1) != HAL_OK) {
  5670. 8002b8c: 687a ldr r2, [r7, #4]
  5671. 8002b8e: 68b9 ldr r1, [r7, #8]
  5672. 8002b90: 68f8 ldr r0, [r7, #12]
  5673. 8002b92: f00b fcbd bl 800e510 <HAL_TIM_PWM_ConfigChannel>
  5674. 8002b96: 4603 mov r3, r0
  5675. 8002b98: 2b00 cmp r3, #0
  5676. 8002b9a: d001 beq.n 8002ba0 <motorAction+0x76>
  5677. Error_Handler ();
  5678. 8002b9c: f7fe ff40 bl 8001a20 <Error_Handler>
  5679. }
  5680. timerConf->OCPolarity = TIM_OCPOLARITY_LOW;
  5681. 8002ba0: 68bb ldr r3, [r7, #8]
  5682. 8002ba2: 2202 movs r2, #2
  5683. 8002ba4: 609a str r2, [r3, #8]
  5684. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel2) != HAL_OK) {
  5685. 8002ba6: 683a ldr r2, [r7, #0]
  5686. 8002ba8: 68b9 ldr r1, [r7, #8]
  5687. 8002baa: 68f8 ldr r0, [r7, #12]
  5688. 8002bac: f00b fcb0 bl 800e510 <HAL_TIM_PWM_ConfigChannel>
  5689. 8002bb0: 4603 mov r3, r0
  5690. 8002bb2: 2b00 cmp r3, #0
  5691. 8002bb4: d01f beq.n 8002bf6 <motorAction+0xcc>
  5692. Error_Handler ();
  5693. 8002bb6: f7fe ff33 bl 8001a20 <Error_Handler>
  5694. }
  5695. break;
  5696. 8002bba: e01c b.n 8002bf6 <motorAction+0xcc>
  5697. default:
  5698. timerConf->OCPolarity = TIM_OCPOLARITY_HIGH;
  5699. 8002bbc: 68bb ldr r3, [r7, #8]
  5700. 8002bbe: 2200 movs r2, #0
  5701. 8002bc0: 609a str r2, [r3, #8]
  5702. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel1) != HAL_OK) {
  5703. 8002bc2: 687a ldr r2, [r7, #4]
  5704. 8002bc4: 68b9 ldr r1, [r7, #8]
  5705. 8002bc6: 68f8 ldr r0, [r7, #12]
  5706. 8002bc8: f00b fca2 bl 800e510 <HAL_TIM_PWM_ConfigChannel>
  5707. 8002bcc: 4603 mov r3, r0
  5708. 8002bce: 2b00 cmp r3, #0
  5709. 8002bd0: d001 beq.n 8002bd6 <motorAction+0xac>
  5710. Error_Handler ();
  5711. 8002bd2: f7fe ff25 bl 8001a20 <Error_Handler>
  5712. }
  5713. timerConf->OCPolarity = TIM_OCPOLARITY_HIGH;
  5714. 8002bd6: 68bb ldr r3, [r7, #8]
  5715. 8002bd8: 2200 movs r2, #0
  5716. 8002bda: 609a str r2, [r3, #8]
  5717. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel2) != HAL_OK) {
  5718. 8002bdc: 683a ldr r2, [r7, #0]
  5719. 8002bde: 68b9 ldr r1, [r7, #8]
  5720. 8002be0: 68f8 ldr r0, [r7, #12]
  5721. 8002be2: f00b fc95 bl 800e510 <HAL_TIM_PWM_ConfigChannel>
  5722. 8002be6: 4603 mov r3, r0
  5723. 8002be8: 2b00 cmp r3, #0
  5724. 8002bea: d006 beq.n 8002bfa <motorAction+0xd0>
  5725. Error_Handler ();
  5726. 8002bec: f7fe ff18 bl 8001a20 <Error_Handler>
  5727. }
  5728. break;
  5729. 8002bf0: e003 b.n 8002bfa <motorAction+0xd0>
  5730. break;
  5731. 8002bf2: bf00 nop
  5732. 8002bf4: e002 b.n 8002bfc <motorAction+0xd2>
  5733. break;
  5734. 8002bf6: bf00 nop
  5735. 8002bf8: e000 b.n 8002bfc <motorAction+0xd2>
  5736. break;
  5737. 8002bfa: bf00 nop
  5738. }
  5739. }
  5740. 8002bfc: bf00 nop
  5741. 8002bfe: 3710 adds r7, #16
  5742. 8002c00: 46bd mov sp, r7
  5743. 8002c02: bd80 pop {r7, pc}
  5744. 08002c04 <WriteDataToBuffer>:
  5745. buff[newBuffPos++] = (uint8_t)((uData >> (i * 8)) & 0xFF);
  5746. }
  5747. *buffPos = newBuffPos;
  5748. }
  5749. void WriteDataToBuffer (uint8_t* buff, uint16_t* buffPos, void* data, uint8_t dataSize) {
  5750. 8002c04: b480 push {r7}
  5751. 8002c06: b089 sub sp, #36 @ 0x24
  5752. 8002c08: af00 add r7, sp, #0
  5753. 8002c0a: 60f8 str r0, [r7, #12]
  5754. 8002c0c: 60b9 str r1, [r7, #8]
  5755. 8002c0e: 607a str r2, [r7, #4]
  5756. 8002c10: 70fb strb r3, [r7, #3]
  5757. uint32_t* uDataPtr = data;
  5758. 8002c12: 687b ldr r3, [r7, #4]
  5759. 8002c14: 61bb str r3, [r7, #24]
  5760. uint32_t uData = *uDataPtr;
  5761. 8002c16: 69bb ldr r3, [r7, #24]
  5762. 8002c18: 681b ldr r3, [r3, #0]
  5763. 8002c1a: 617b str r3, [r7, #20]
  5764. uint8_t i = 0;
  5765. 8002c1c: 2300 movs r3, #0
  5766. 8002c1e: 77fb strb r3, [r7, #31]
  5767. uint8_t newBuffPos = *buffPos;
  5768. 8002c20: 68bb ldr r3, [r7, #8]
  5769. 8002c22: 881b ldrh r3, [r3, #0]
  5770. 8002c24: 77bb strb r3, [r7, #30]
  5771. for (i = 0; i < dataSize; i++) {
  5772. 8002c26: 2300 movs r3, #0
  5773. 8002c28: 77fb strb r3, [r7, #31]
  5774. 8002c2a: e00e b.n 8002c4a <WriteDataToBuffer+0x46>
  5775. buff[newBuffPos++] = (uint8_t)((uData >> (i * 8)) & 0xFF);
  5776. 8002c2c: 7ffb ldrb r3, [r7, #31]
  5777. 8002c2e: 00db lsls r3, r3, #3
  5778. 8002c30: 697a ldr r2, [r7, #20]
  5779. 8002c32: 40da lsrs r2, r3
  5780. 8002c34: 7fbb ldrb r3, [r7, #30]
  5781. 8002c36: 1c59 adds r1, r3, #1
  5782. 8002c38: 77b9 strb r1, [r7, #30]
  5783. 8002c3a: 4619 mov r1, r3
  5784. 8002c3c: 68fb ldr r3, [r7, #12]
  5785. 8002c3e: 440b add r3, r1
  5786. 8002c40: b2d2 uxtb r2, r2
  5787. 8002c42: 701a strb r2, [r3, #0]
  5788. for (i = 0; i < dataSize; i++) {
  5789. 8002c44: 7ffb ldrb r3, [r7, #31]
  5790. 8002c46: 3301 adds r3, #1
  5791. 8002c48: 77fb strb r3, [r7, #31]
  5792. 8002c4a: 7ffa ldrb r2, [r7, #31]
  5793. 8002c4c: 78fb ldrb r3, [r7, #3]
  5794. 8002c4e: 429a cmp r2, r3
  5795. 8002c50: d3ec bcc.n 8002c2c <WriteDataToBuffer+0x28>
  5796. }
  5797. *buffPos = newBuffPos;
  5798. 8002c52: 7fbb ldrb r3, [r7, #30]
  5799. 8002c54: b29a uxth r2, r3
  5800. 8002c56: 68bb ldr r3, [r7, #8]
  5801. 8002c58: 801a strh r2, [r3, #0]
  5802. }
  5803. 8002c5a: bf00 nop
  5804. 8002c5c: 3724 adds r7, #36 @ 0x24
  5805. 8002c5e: 46bd mov sp, r7
  5806. 8002c60: f85d 7b04 ldr.w r7, [sp], #4
  5807. 8002c64: 4770 bx lr
  5808. 08002c66 <ReadWordFromBufer>:
  5809. *data = CONVERT_BYTES_TO_SHORT_WORD(&buff[*buffPos]);
  5810. *buffPos += sizeof(uint16_t);
  5811. }
  5812. void ReadWordFromBufer(uint8_t* buff, uint16_t* buffPos, uint32_t* data)
  5813. {
  5814. 8002c66: b480 push {r7}
  5815. 8002c68: b085 sub sp, #20
  5816. 8002c6a: af00 add r7, sp, #0
  5817. 8002c6c: 60f8 str r0, [r7, #12]
  5818. 8002c6e: 60b9 str r1, [r7, #8]
  5819. 8002c70: 607a str r2, [r7, #4]
  5820. *data = CONVERT_BYTES_TO_WORD(&buff[*buffPos]);
  5821. 8002c72: 68bb ldr r3, [r7, #8]
  5822. 8002c74: 881b ldrh r3, [r3, #0]
  5823. 8002c76: 3303 adds r3, #3
  5824. 8002c78: 68fa ldr r2, [r7, #12]
  5825. 8002c7a: 4413 add r3, r2
  5826. 8002c7c: 781b ldrb r3, [r3, #0]
  5827. 8002c7e: 061a lsls r2, r3, #24
  5828. 8002c80: 68bb ldr r3, [r7, #8]
  5829. 8002c82: 881b ldrh r3, [r3, #0]
  5830. 8002c84: 3302 adds r3, #2
  5831. 8002c86: 68f9 ldr r1, [r7, #12]
  5832. 8002c88: 440b add r3, r1
  5833. 8002c8a: 781b ldrb r3, [r3, #0]
  5834. 8002c8c: 041b lsls r3, r3, #16
  5835. 8002c8e: 431a orrs r2, r3
  5836. 8002c90: 68bb ldr r3, [r7, #8]
  5837. 8002c92: 881b ldrh r3, [r3, #0]
  5838. 8002c94: 3301 adds r3, #1
  5839. 8002c96: 68f9 ldr r1, [r7, #12]
  5840. 8002c98: 440b add r3, r1
  5841. 8002c9a: 781b ldrb r3, [r3, #0]
  5842. 8002c9c: 021b lsls r3, r3, #8
  5843. 8002c9e: 4313 orrs r3, r2
  5844. 8002ca0: 68ba ldr r2, [r7, #8]
  5845. 8002ca2: 8812 ldrh r2, [r2, #0]
  5846. 8002ca4: 4611 mov r1, r2
  5847. 8002ca6: 68fa ldr r2, [r7, #12]
  5848. 8002ca8: 440a add r2, r1
  5849. 8002caa: 7812 ldrb r2, [r2, #0]
  5850. 8002cac: 4313 orrs r3, r2
  5851. 8002cae: 461a mov r2, r3
  5852. 8002cb0: 687b ldr r3, [r7, #4]
  5853. 8002cb2: 601a str r2, [r3, #0]
  5854. *buffPos += sizeof(uint32_t);
  5855. 8002cb4: 68bb ldr r3, [r7, #8]
  5856. 8002cb6: 881b ldrh r3, [r3, #0]
  5857. 8002cb8: 3304 adds r3, #4
  5858. 8002cba: b29a uxth r2, r3
  5859. 8002cbc: 68bb ldr r3, [r7, #8]
  5860. 8002cbe: 801a strh r2, [r3, #0]
  5861. }
  5862. 8002cc0: bf00 nop
  5863. 8002cc2: 3714 adds r7, #20
  5864. 8002cc4: 46bd mov sp, r7
  5865. 8002cc6: f85d 7b04 ldr.w r7, [sp], #4
  5866. 8002cca: 4770 bx lr
  5867. 08002ccc <PrepareRespFrame>:
  5868. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (crc);
  5869. return txBufferPos;
  5870. }
  5871. uint16_t PrepareRespFrame (uint8_t* txBuffer, uint16_t frameId, SerialProtocolCommands frameCommand, SerialProtocolRespStatus respStatus, uint8_t* dataBuffer, uint16_t dataLength) {
  5872. 8002ccc: b580 push {r7, lr}
  5873. 8002cce: b084 sub sp, #16
  5874. 8002cd0: af00 add r7, sp, #0
  5875. 8002cd2: 6078 str r0, [r7, #4]
  5876. 8002cd4: 4608 mov r0, r1
  5877. 8002cd6: 4611 mov r1, r2
  5878. 8002cd8: 461a mov r2, r3
  5879. 8002cda: 4603 mov r3, r0
  5880. 8002cdc: 807b strh r3, [r7, #2]
  5881. 8002cde: 460b mov r3, r1
  5882. 8002ce0: 707b strb r3, [r7, #1]
  5883. 8002ce2: 4613 mov r3, r2
  5884. 8002ce4: 703b strb r3, [r7, #0]
  5885. uint16_t crc = 0;
  5886. 8002ce6: 2300 movs r3, #0
  5887. 8002ce8: 81bb strh r3, [r7, #12]
  5888. uint16_t txBufferPos = 0;
  5889. 8002cea: 2300 movs r3, #0
  5890. 8002cec: 81fb strh r3, [r7, #14]
  5891. uint16_t frameCmd = ((uint16_t)frameCommand) | 0x8000; // MSB set means response
  5892. 8002cee: 787b ldrb r3, [r7, #1]
  5893. 8002cf0: b21a sxth r2, r3
  5894. 8002cf2: 4b43 ldr r3, [pc, #268] @ (8002e00 <PrepareRespFrame+0x134>)
  5895. 8002cf4: 4313 orrs r3, r2
  5896. 8002cf6: b21b sxth r3, r3
  5897. 8002cf8: 817b strh r3, [r7, #10]
  5898. memset (txBuffer, 0x00, dataLength);
  5899. 8002cfa: 8bbb ldrh r3, [r7, #28]
  5900. 8002cfc: 461a mov r2, r3
  5901. 8002cfe: 2100 movs r1, #0
  5902. 8002d00: 6878 ldr r0, [r7, #4]
  5903. 8002d02: f013 fd28 bl 8016756 <memset>
  5904. txBuffer[txBufferPos++] = FRAME_INDICATOR;
  5905. 8002d06: 89fb ldrh r3, [r7, #14]
  5906. 8002d08: 1c5a adds r2, r3, #1
  5907. 8002d0a: 81fa strh r2, [r7, #14]
  5908. 8002d0c: 461a mov r2, r3
  5909. 8002d0e: 687b ldr r3, [r7, #4]
  5910. 8002d10: 4413 add r3, r2
  5911. 8002d12: 22aa movs r2, #170 @ 0xaa
  5912. 8002d14: 701a strb r2, [r3, #0]
  5913. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (frameId);
  5914. 8002d16: 89fb ldrh r3, [r7, #14]
  5915. 8002d18: 1c5a adds r2, r3, #1
  5916. 8002d1a: 81fa strh r2, [r7, #14]
  5917. 8002d1c: 461a mov r2, r3
  5918. 8002d1e: 687b ldr r3, [r7, #4]
  5919. 8002d20: 4413 add r3, r2
  5920. 8002d22: 887a ldrh r2, [r7, #2]
  5921. 8002d24: b2d2 uxtb r2, r2
  5922. 8002d26: 701a strb r2, [r3, #0]
  5923. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (frameId);
  5924. 8002d28: 887b ldrh r3, [r7, #2]
  5925. 8002d2a: 0a1b lsrs r3, r3, #8
  5926. 8002d2c: b29a uxth r2, r3
  5927. 8002d2e: 89fb ldrh r3, [r7, #14]
  5928. 8002d30: 1c59 adds r1, r3, #1
  5929. 8002d32: 81f9 strh r1, [r7, #14]
  5930. 8002d34: 4619 mov r1, r3
  5931. 8002d36: 687b ldr r3, [r7, #4]
  5932. 8002d38: 440b add r3, r1
  5933. 8002d3a: b2d2 uxtb r2, r2
  5934. 8002d3c: 701a strb r2, [r3, #0]
  5935. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (frameCmd);
  5936. 8002d3e: 89fb ldrh r3, [r7, #14]
  5937. 8002d40: 1c5a adds r2, r3, #1
  5938. 8002d42: 81fa strh r2, [r7, #14]
  5939. 8002d44: 461a mov r2, r3
  5940. 8002d46: 687b ldr r3, [r7, #4]
  5941. 8002d48: 4413 add r3, r2
  5942. 8002d4a: 897a ldrh r2, [r7, #10]
  5943. 8002d4c: b2d2 uxtb r2, r2
  5944. 8002d4e: 701a strb r2, [r3, #0]
  5945. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (frameCmd);
  5946. 8002d50: 897b ldrh r3, [r7, #10]
  5947. 8002d52: 0a1b lsrs r3, r3, #8
  5948. 8002d54: b29a uxth r2, r3
  5949. 8002d56: 89fb ldrh r3, [r7, #14]
  5950. 8002d58: 1c59 adds r1, r3, #1
  5951. 8002d5a: 81f9 strh r1, [r7, #14]
  5952. 8002d5c: 4619 mov r1, r3
  5953. 8002d5e: 687b ldr r3, [r7, #4]
  5954. 8002d60: 440b add r3, r1
  5955. 8002d62: b2d2 uxtb r2, r2
  5956. 8002d64: 701a strb r2, [r3, #0]
  5957. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (dataLength);
  5958. 8002d66: 89fb ldrh r3, [r7, #14]
  5959. 8002d68: 1c5a adds r2, r3, #1
  5960. 8002d6a: 81fa strh r2, [r7, #14]
  5961. 8002d6c: 461a mov r2, r3
  5962. 8002d6e: 687b ldr r3, [r7, #4]
  5963. 8002d70: 4413 add r3, r2
  5964. 8002d72: 8bba ldrh r2, [r7, #28]
  5965. 8002d74: b2d2 uxtb r2, r2
  5966. 8002d76: 701a strb r2, [r3, #0]
  5967. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (dataLength);
  5968. 8002d78: 8bbb ldrh r3, [r7, #28]
  5969. 8002d7a: 0a1b lsrs r3, r3, #8
  5970. 8002d7c: b29a uxth r2, r3
  5971. 8002d7e: 89fb ldrh r3, [r7, #14]
  5972. 8002d80: 1c59 adds r1, r3, #1
  5973. 8002d82: 81f9 strh r1, [r7, #14]
  5974. 8002d84: 4619 mov r1, r3
  5975. 8002d86: 687b ldr r3, [r7, #4]
  5976. 8002d88: 440b add r3, r1
  5977. 8002d8a: b2d2 uxtb r2, r2
  5978. 8002d8c: 701a strb r2, [r3, #0]
  5979. txBuffer[txBufferPos++] = (uint8_t)respStatus;
  5980. 8002d8e: 89fb ldrh r3, [r7, #14]
  5981. 8002d90: 1c5a adds r2, r3, #1
  5982. 8002d92: 81fa strh r2, [r7, #14]
  5983. 8002d94: 461a mov r2, r3
  5984. 8002d96: 687b ldr r3, [r7, #4]
  5985. 8002d98: 4413 add r3, r2
  5986. 8002d9a: 783a ldrb r2, [r7, #0]
  5987. 8002d9c: 701a strb r2, [r3, #0]
  5988. if (dataLength > 0) {
  5989. 8002d9e: 8bbb ldrh r3, [r7, #28]
  5990. 8002da0: 2b00 cmp r3, #0
  5991. 8002da2: d00b beq.n 8002dbc <PrepareRespFrame+0xf0>
  5992. memcpy (&txBuffer[txBufferPos], dataBuffer, dataLength);
  5993. 8002da4: 89fb ldrh r3, [r7, #14]
  5994. 8002da6: 687a ldr r2, [r7, #4]
  5995. 8002da8: 4413 add r3, r2
  5996. 8002daa: 8bba ldrh r2, [r7, #28]
  5997. 8002dac: 69b9 ldr r1, [r7, #24]
  5998. 8002dae: 4618 mov r0, r3
  5999. 8002db0: f013 fda3 bl 80168fa <memcpy>
  6000. txBufferPos += dataLength;
  6001. 8002db4: 89fa ldrh r2, [r7, #14]
  6002. 8002db6: 8bbb ldrh r3, [r7, #28]
  6003. 8002db8: 4413 add r3, r2
  6004. 8002dba: 81fb strh r3, [r7, #14]
  6005. }
  6006. crc = HAL_CRC_Calculate (&hcrc, (uint32_t*)txBuffer, txBufferPos);
  6007. 8002dbc: 89fb ldrh r3, [r7, #14]
  6008. 8002dbe: 461a mov r2, r3
  6009. 8002dc0: 6879 ldr r1, [r7, #4]
  6010. 8002dc2: 4810 ldr r0, [pc, #64] @ (8002e04 <PrepareRespFrame+0x138>)
  6011. 8002dc4: f003 fc66 bl 8006694 <HAL_CRC_Calculate>
  6012. 8002dc8: 4603 mov r3, r0
  6013. 8002dca: 81bb strh r3, [r7, #12]
  6014. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (crc);
  6015. 8002dcc: 89fb ldrh r3, [r7, #14]
  6016. 8002dce: 1c5a adds r2, r3, #1
  6017. 8002dd0: 81fa strh r2, [r7, #14]
  6018. 8002dd2: 461a mov r2, r3
  6019. 8002dd4: 687b ldr r3, [r7, #4]
  6020. 8002dd6: 4413 add r3, r2
  6021. 8002dd8: 89ba ldrh r2, [r7, #12]
  6022. 8002dda: b2d2 uxtb r2, r2
  6023. 8002ddc: 701a strb r2, [r3, #0]
  6024. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (crc);
  6025. 8002dde: 89bb ldrh r3, [r7, #12]
  6026. 8002de0: 0a1b lsrs r3, r3, #8
  6027. 8002de2: b29a uxth r2, r3
  6028. 8002de4: 89fb ldrh r3, [r7, #14]
  6029. 8002de6: 1c59 adds r1, r3, #1
  6030. 8002de8: 81f9 strh r1, [r7, #14]
  6031. 8002dea: 4619 mov r1, r3
  6032. 8002dec: 687b ldr r3, [r7, #4]
  6033. 8002dee: 440b add r3, r1
  6034. 8002df0: b2d2 uxtb r2, r2
  6035. 8002df2: 701a strb r2, [r3, #0]
  6036. return txBufferPos;
  6037. 8002df4: 89fb ldrh r3, [r7, #14]
  6038. }
  6039. 8002df6: 4618 mov r0, r3
  6040. 8002df8: 3710 adds r7, #16
  6041. 8002dfa: 46bd mov sp, r7
  6042. 8002dfc: bd80 pop {r7, pc}
  6043. 8002dfe: bf00 nop
  6044. 8002e00: ffff8000 .word 0xffff8000
  6045. 8002e04: 240003d4 .word 0x240003d4
  6046. 08002e08 <HAL_MspInit>:
  6047. void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
  6048. /**
  6049. * Initializes the Global MSP.
  6050. */
  6051. void HAL_MspInit(void)
  6052. {
  6053. 8002e08: b580 push {r7, lr}
  6054. 8002e0a: b086 sub sp, #24
  6055. 8002e0c: af00 add r7, sp, #0
  6056. /* USER CODE BEGIN MspInit 0 */
  6057. /* USER CODE END MspInit 0 */
  6058. PWREx_AVDTypeDef sConfigAVD = {0};
  6059. 8002e0e: f107 0310 add.w r3, r7, #16
  6060. 8002e12: 2200 movs r2, #0
  6061. 8002e14: 601a str r2, [r3, #0]
  6062. 8002e16: 605a str r2, [r3, #4]
  6063. PWR_PVDTypeDef sConfigPVD = {0};
  6064. 8002e18: f107 0308 add.w r3, r7, #8
  6065. 8002e1c: 2200 movs r2, #0
  6066. 8002e1e: 601a str r2, [r3, #0]
  6067. 8002e20: 605a str r2, [r3, #4]
  6068. __HAL_RCC_SYSCFG_CLK_ENABLE();
  6069. 8002e22: 4b26 ldr r3, [pc, #152] @ (8002ebc <HAL_MspInit+0xb4>)
  6070. 8002e24: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  6071. 8002e28: 4a24 ldr r2, [pc, #144] @ (8002ebc <HAL_MspInit+0xb4>)
  6072. 8002e2a: f043 0302 orr.w r3, r3, #2
  6073. 8002e2e: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  6074. 8002e32: 4b22 ldr r3, [pc, #136] @ (8002ebc <HAL_MspInit+0xb4>)
  6075. 8002e34: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  6076. 8002e38: f003 0302 and.w r3, r3, #2
  6077. 8002e3c: 607b str r3, [r7, #4]
  6078. 8002e3e: 687b ldr r3, [r7, #4]
  6079. /* System interrupt init*/
  6080. /* PendSV_IRQn interrupt configuration */
  6081. HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
  6082. 8002e40: 2200 movs r2, #0
  6083. 8002e42: 210f movs r1, #15
  6084. 8002e44: f06f 0001 mvn.w r0, #1
  6085. 8002e48: f003 fb20 bl 800648c <HAL_NVIC_SetPriority>
  6086. /* Peripheral interrupt init */
  6087. /* RCC_IRQn interrupt configuration */
  6088. HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
  6089. 8002e4c: 2200 movs r2, #0
  6090. 8002e4e: 2105 movs r1, #5
  6091. 8002e50: 2005 movs r0, #5
  6092. 8002e52: f003 fb1b bl 800648c <HAL_NVIC_SetPriority>
  6093. HAL_NVIC_EnableIRQ(RCC_IRQn);
  6094. 8002e56: 2005 movs r0, #5
  6095. 8002e58: f003 fb32 bl 80064c0 <HAL_NVIC_EnableIRQ>
  6096. /** AVD Configuration
  6097. */
  6098. sConfigAVD.AVDLevel = PWR_AVDLEVEL_3;
  6099. 8002e5c: f44f 23c0 mov.w r3, #393216 @ 0x60000
  6100. 8002e60: 613b str r3, [r7, #16]
  6101. sConfigAVD.Mode = PWR_AVD_MODE_NORMAL;
  6102. 8002e62: 2300 movs r3, #0
  6103. 8002e64: 617b str r3, [r7, #20]
  6104. HAL_PWREx_ConfigAVD(&sConfigAVD);
  6105. 8002e66: f107 0310 add.w r3, r7, #16
  6106. 8002e6a: 4618 mov r0, r3
  6107. 8002e6c: f007 f91a bl 800a0a4 <HAL_PWREx_ConfigAVD>
  6108. /** Enable the AVD Output
  6109. */
  6110. HAL_PWREx_EnableAVD();
  6111. 8002e70: f007 f98e bl 800a190 <HAL_PWREx_EnableAVD>
  6112. /** PVD Configuration
  6113. */
  6114. sConfigPVD.PVDLevel = PWR_PVDLEVEL_6;
  6115. 8002e74: 23c0 movs r3, #192 @ 0xc0
  6116. 8002e76: 60bb str r3, [r7, #8]
  6117. sConfigPVD.Mode = PWR_PVD_MODE_NORMAL;
  6118. 8002e78: 2300 movs r3, #0
  6119. 8002e7a: 60fb str r3, [r7, #12]
  6120. HAL_PWR_ConfigPVD(&sConfigPVD);
  6121. 8002e7c: f107 0308 add.w r3, r7, #8
  6122. 8002e80: 4618 mov r0, r3
  6123. 8002e82: f007 f84b bl 8009f1c <HAL_PWR_ConfigPVD>
  6124. /** Enable the PVD Output
  6125. */
  6126. HAL_PWR_EnablePVD();
  6127. 8002e86: f007 f8c3 bl 800a010 <HAL_PWR_EnablePVD>
  6128. /** Enable the VREF clock
  6129. */
  6130. __HAL_RCC_VREF_CLK_ENABLE();
  6131. 8002e8a: 4b0c ldr r3, [pc, #48] @ (8002ebc <HAL_MspInit+0xb4>)
  6132. 8002e8c: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  6133. 8002e90: 4a0a ldr r2, [pc, #40] @ (8002ebc <HAL_MspInit+0xb4>)
  6134. 8002e92: f443 4300 orr.w r3, r3, #32768 @ 0x8000
  6135. 8002e96: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  6136. 8002e9a: 4b08 ldr r3, [pc, #32] @ (8002ebc <HAL_MspInit+0xb4>)
  6137. 8002e9c: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  6138. 8002ea0: f403 4300 and.w r3, r3, #32768 @ 0x8000
  6139. 8002ea4: 603b str r3, [r7, #0]
  6140. 8002ea6: 683b ldr r3, [r7, #0]
  6141. /** Disable the Internal Voltage Reference buffer
  6142. */
  6143. HAL_SYSCFG_DisableVREFBUF();
  6144. 8002ea8: f001 fe08 bl 8004abc <HAL_SYSCFG_DisableVREFBUF>
  6145. /** Configure the internal voltage reference buffer high impedance mode
  6146. */
  6147. HAL_SYSCFG_VREFBUF_HighImpedanceConfig(SYSCFG_VREFBUF_HIGH_IMPEDANCE_ENABLE);
  6148. 8002eac: 2002 movs r0, #2
  6149. 8002eae: f001 fdf1 bl 8004a94 <HAL_SYSCFG_VREFBUF_HighImpedanceConfig>
  6150. /* USER CODE BEGIN MspInit 1 */
  6151. /* USER CODE END MspInit 1 */
  6152. }
  6153. 8002eb2: bf00 nop
  6154. 8002eb4: 3718 adds r7, #24
  6155. 8002eb6: 46bd mov sp, r7
  6156. 8002eb8: bd80 pop {r7, pc}
  6157. 8002eba: bf00 nop
  6158. 8002ebc: 58024400 .word 0x58024400
  6159. 08002ec0 <HAL_ADC_MspInit>:
  6160. * This function configures the hardware resources used in this example
  6161. * @param hadc: ADC handle pointer
  6162. * @retval None
  6163. */
  6164. void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
  6165. {
  6166. 8002ec0: b580 push {r7, lr}
  6167. 8002ec2: b092 sub sp, #72 @ 0x48
  6168. 8002ec4: af00 add r7, sp, #0
  6169. 8002ec6: 6078 str r0, [r7, #4]
  6170. GPIO_InitTypeDef GPIO_InitStruct = {0};
  6171. 8002ec8: f107 0334 add.w r3, r7, #52 @ 0x34
  6172. 8002ecc: 2200 movs r2, #0
  6173. 8002ece: 601a str r2, [r3, #0]
  6174. 8002ed0: 605a str r2, [r3, #4]
  6175. 8002ed2: 609a str r2, [r3, #8]
  6176. 8002ed4: 60da str r2, [r3, #12]
  6177. 8002ed6: 611a str r2, [r3, #16]
  6178. if(hadc->Instance==ADC1)
  6179. 8002ed8: 687b ldr r3, [r7, #4]
  6180. 8002eda: 681b ldr r3, [r3, #0]
  6181. 8002edc: 4a9d ldr r2, [pc, #628] @ (8003154 <HAL_ADC_MspInit+0x294>)
  6182. 8002ede: 4293 cmp r3, r2
  6183. 8002ee0: f040 8099 bne.w 8003016 <HAL_ADC_MspInit+0x156>
  6184. {
  6185. /* USER CODE BEGIN ADC1_MspInit 0 */
  6186. /* USER CODE END ADC1_MspInit 0 */
  6187. /* Peripheral clock enable */
  6188. HAL_RCC_ADC12_CLK_ENABLED++;
  6189. 8002ee4: 4b9c ldr r3, [pc, #624] @ (8003158 <HAL_ADC_MspInit+0x298>)
  6190. 8002ee6: 681b ldr r3, [r3, #0]
  6191. 8002ee8: 3301 adds r3, #1
  6192. 8002eea: 4a9b ldr r2, [pc, #620] @ (8003158 <HAL_ADC_MspInit+0x298>)
  6193. 8002eec: 6013 str r3, [r2, #0]
  6194. if(HAL_RCC_ADC12_CLK_ENABLED==1){
  6195. 8002eee: 4b9a ldr r3, [pc, #616] @ (8003158 <HAL_ADC_MspInit+0x298>)
  6196. 8002ef0: 681b ldr r3, [r3, #0]
  6197. 8002ef2: 2b01 cmp r3, #1
  6198. 8002ef4: d10e bne.n 8002f14 <HAL_ADC_MspInit+0x54>
  6199. __HAL_RCC_ADC12_CLK_ENABLE();
  6200. 8002ef6: 4b99 ldr r3, [pc, #612] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6201. 8002ef8: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  6202. 8002efc: 4a97 ldr r2, [pc, #604] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6203. 8002efe: f043 0320 orr.w r3, r3, #32
  6204. 8002f02: f8c2 30d8 str.w r3, [r2, #216] @ 0xd8
  6205. 8002f06: 4b95 ldr r3, [pc, #596] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6206. 8002f08: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  6207. 8002f0c: f003 0320 and.w r3, r3, #32
  6208. 8002f10: 633b str r3, [r7, #48] @ 0x30
  6209. 8002f12: 6b3b ldr r3, [r7, #48] @ 0x30
  6210. }
  6211. __HAL_RCC_GPIOA_CLK_ENABLE();
  6212. 8002f14: 4b91 ldr r3, [pc, #580] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6213. 8002f16: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6214. 8002f1a: 4a90 ldr r2, [pc, #576] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6215. 8002f1c: f043 0301 orr.w r3, r3, #1
  6216. 8002f20: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  6217. 8002f24: 4b8d ldr r3, [pc, #564] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6218. 8002f26: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6219. 8002f2a: f003 0301 and.w r3, r3, #1
  6220. 8002f2e: 62fb str r3, [r7, #44] @ 0x2c
  6221. 8002f30: 6afb ldr r3, [r7, #44] @ 0x2c
  6222. __HAL_RCC_GPIOC_CLK_ENABLE();
  6223. 8002f32: 4b8a ldr r3, [pc, #552] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6224. 8002f34: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6225. 8002f38: 4a88 ldr r2, [pc, #544] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6226. 8002f3a: f043 0304 orr.w r3, r3, #4
  6227. 8002f3e: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  6228. 8002f42: 4b86 ldr r3, [pc, #536] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6229. 8002f44: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6230. 8002f48: f003 0304 and.w r3, r3, #4
  6231. 8002f4c: 62bb str r3, [r7, #40] @ 0x28
  6232. 8002f4e: 6abb ldr r3, [r7, #40] @ 0x28
  6233. __HAL_RCC_GPIOB_CLK_ENABLE();
  6234. 8002f50: 4b82 ldr r3, [pc, #520] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6235. 8002f52: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6236. 8002f56: 4a81 ldr r2, [pc, #516] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6237. 8002f58: f043 0302 orr.w r3, r3, #2
  6238. 8002f5c: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  6239. 8002f60: 4b7e ldr r3, [pc, #504] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6240. 8002f62: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6241. 8002f66: f003 0302 and.w r3, r3, #2
  6242. 8002f6a: 627b str r3, [r7, #36] @ 0x24
  6243. 8002f6c: 6a7b ldr r3, [r7, #36] @ 0x24
  6244. PA3 ------> ADC1_INP15
  6245. PA7 ------> ADC1_INP7
  6246. PC5 ------> ADC1_INP8
  6247. PB0 ------> ADC1_INP9
  6248. */
  6249. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
  6250. 8002f6e: 238f movs r3, #143 @ 0x8f
  6251. 8002f70: 637b str r3, [r7, #52] @ 0x34
  6252. |GPIO_PIN_7;
  6253. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  6254. 8002f72: 2303 movs r3, #3
  6255. 8002f74: 63bb str r3, [r7, #56] @ 0x38
  6256. GPIO_InitStruct.Pull = GPIO_NOPULL;
  6257. 8002f76: 2300 movs r3, #0
  6258. 8002f78: 63fb str r3, [r7, #60] @ 0x3c
  6259. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  6260. 8002f7a: f107 0334 add.w r3, r7, #52 @ 0x34
  6261. 8002f7e: 4619 mov r1, r3
  6262. 8002f80: 4877 ldr r0, [pc, #476] @ (8003160 <HAL_ADC_MspInit+0x2a0>)
  6263. 8002f82: f006 fdb5 bl 8009af0 <HAL_GPIO_Init>
  6264. GPIO_InitStruct.Pin = GPIO_PIN_5;
  6265. 8002f86: 2320 movs r3, #32
  6266. 8002f88: 637b str r3, [r7, #52] @ 0x34
  6267. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  6268. 8002f8a: 2303 movs r3, #3
  6269. 8002f8c: 63bb str r3, [r7, #56] @ 0x38
  6270. GPIO_InitStruct.Pull = GPIO_NOPULL;
  6271. 8002f8e: 2300 movs r3, #0
  6272. 8002f90: 63fb str r3, [r7, #60] @ 0x3c
  6273. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  6274. 8002f92: f107 0334 add.w r3, r7, #52 @ 0x34
  6275. 8002f96: 4619 mov r1, r3
  6276. 8002f98: 4872 ldr r0, [pc, #456] @ (8003164 <HAL_ADC_MspInit+0x2a4>)
  6277. 8002f9a: f006 fda9 bl 8009af0 <HAL_GPIO_Init>
  6278. GPIO_InitStruct.Pin = GPIO_PIN_0;
  6279. 8002f9e: 2301 movs r3, #1
  6280. 8002fa0: 637b str r3, [r7, #52] @ 0x34
  6281. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  6282. 8002fa2: 2303 movs r3, #3
  6283. 8002fa4: 63bb str r3, [r7, #56] @ 0x38
  6284. GPIO_InitStruct.Pull = GPIO_NOPULL;
  6285. 8002fa6: 2300 movs r3, #0
  6286. 8002fa8: 63fb str r3, [r7, #60] @ 0x3c
  6287. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  6288. 8002faa: f107 0334 add.w r3, r7, #52 @ 0x34
  6289. 8002fae: 4619 mov r1, r3
  6290. 8002fb0: 486d ldr r0, [pc, #436] @ (8003168 <HAL_ADC_MspInit+0x2a8>)
  6291. 8002fb2: f006 fd9d bl 8009af0 <HAL_GPIO_Init>
  6292. /* ADC1 DMA Init */
  6293. /* ADC1 Init */
  6294. hdma_adc1.Instance = DMA1_Stream0;
  6295. 8002fb6: 4b6d ldr r3, [pc, #436] @ (800316c <HAL_ADC_MspInit+0x2ac>)
  6296. 8002fb8: 4a6d ldr r2, [pc, #436] @ (8003170 <HAL_ADC_MspInit+0x2b0>)
  6297. 8002fba: 601a str r2, [r3, #0]
  6298. hdma_adc1.Init.Request = DMA_REQUEST_ADC1;
  6299. 8002fbc: 4b6b ldr r3, [pc, #428] @ (800316c <HAL_ADC_MspInit+0x2ac>)
  6300. 8002fbe: 2209 movs r2, #9
  6301. 8002fc0: 605a str r2, [r3, #4]
  6302. hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
  6303. 8002fc2: 4b6a ldr r3, [pc, #424] @ (800316c <HAL_ADC_MspInit+0x2ac>)
  6304. 8002fc4: 2200 movs r2, #0
  6305. 8002fc6: 609a str r2, [r3, #8]
  6306. hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
  6307. 8002fc8: 4b68 ldr r3, [pc, #416] @ (800316c <HAL_ADC_MspInit+0x2ac>)
  6308. 8002fca: 2200 movs r2, #0
  6309. 8002fcc: 60da str r2, [r3, #12]
  6310. hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
  6311. 8002fce: 4b67 ldr r3, [pc, #412] @ (800316c <HAL_ADC_MspInit+0x2ac>)
  6312. 8002fd0: f44f 6280 mov.w r2, #1024 @ 0x400
  6313. 8002fd4: 611a str r2, [r3, #16]
  6314. hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  6315. 8002fd6: 4b65 ldr r3, [pc, #404] @ (800316c <HAL_ADC_MspInit+0x2ac>)
  6316. 8002fd8: f44f 6200 mov.w r2, #2048 @ 0x800
  6317. 8002fdc: 615a str r2, [r3, #20]
  6318. hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  6319. 8002fde: 4b63 ldr r3, [pc, #396] @ (800316c <HAL_ADC_MspInit+0x2ac>)
  6320. 8002fe0: f44f 5200 mov.w r2, #8192 @ 0x2000
  6321. 8002fe4: 619a str r2, [r3, #24]
  6322. hdma_adc1.Init.Mode = DMA_NORMAL;
  6323. 8002fe6: 4b61 ldr r3, [pc, #388] @ (800316c <HAL_ADC_MspInit+0x2ac>)
  6324. 8002fe8: 2200 movs r2, #0
  6325. 8002fea: 61da str r2, [r3, #28]
  6326. hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
  6327. 8002fec: 4b5f ldr r3, [pc, #380] @ (800316c <HAL_ADC_MspInit+0x2ac>)
  6328. 8002fee: 2200 movs r2, #0
  6329. 8002ff0: 621a str r2, [r3, #32]
  6330. hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  6331. 8002ff2: 4b5e ldr r3, [pc, #376] @ (800316c <HAL_ADC_MspInit+0x2ac>)
  6332. 8002ff4: 2200 movs r2, #0
  6333. 8002ff6: 625a str r2, [r3, #36] @ 0x24
  6334. if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
  6335. 8002ff8: 485c ldr r0, [pc, #368] @ (800316c <HAL_ADC_MspInit+0x2ac>)
  6336. 8002ffa: f003 ff3d bl 8006e78 <HAL_DMA_Init>
  6337. 8002ffe: 4603 mov r3, r0
  6338. 8003000: 2b00 cmp r3, #0
  6339. 8003002: d001 beq.n 8003008 <HAL_ADC_MspInit+0x148>
  6340. {
  6341. Error_Handler();
  6342. 8003004: f7fe fd0c bl 8001a20 <Error_Handler>
  6343. }
  6344. __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc1);
  6345. 8003008: 687b ldr r3, [r7, #4]
  6346. 800300a: 4a58 ldr r2, [pc, #352] @ (800316c <HAL_ADC_MspInit+0x2ac>)
  6347. 800300c: 64da str r2, [r3, #76] @ 0x4c
  6348. 800300e: 4a57 ldr r2, [pc, #348] @ (800316c <HAL_ADC_MspInit+0x2ac>)
  6349. 8003010: 687b ldr r3, [r7, #4]
  6350. 8003012: 6393 str r3, [r2, #56] @ 0x38
  6351. /* USER CODE BEGIN ADC3_MspInit 1 */
  6352. /* USER CODE END ADC3_MspInit 1 */
  6353. }
  6354. }
  6355. 8003014: e11e b.n 8003254 <HAL_ADC_MspInit+0x394>
  6356. else if(hadc->Instance==ADC2)
  6357. 8003016: 687b ldr r3, [r7, #4]
  6358. 8003018: 681b ldr r3, [r3, #0]
  6359. 800301a: 4a56 ldr r2, [pc, #344] @ (8003174 <HAL_ADC_MspInit+0x2b4>)
  6360. 800301c: 4293 cmp r3, r2
  6361. 800301e: f040 80af bne.w 8003180 <HAL_ADC_MspInit+0x2c0>
  6362. HAL_RCC_ADC12_CLK_ENABLED++;
  6363. 8003022: 4b4d ldr r3, [pc, #308] @ (8003158 <HAL_ADC_MspInit+0x298>)
  6364. 8003024: 681b ldr r3, [r3, #0]
  6365. 8003026: 3301 adds r3, #1
  6366. 8003028: 4a4b ldr r2, [pc, #300] @ (8003158 <HAL_ADC_MspInit+0x298>)
  6367. 800302a: 6013 str r3, [r2, #0]
  6368. if(HAL_RCC_ADC12_CLK_ENABLED==1){
  6369. 800302c: 4b4a ldr r3, [pc, #296] @ (8003158 <HAL_ADC_MspInit+0x298>)
  6370. 800302e: 681b ldr r3, [r3, #0]
  6371. 8003030: 2b01 cmp r3, #1
  6372. 8003032: d10e bne.n 8003052 <HAL_ADC_MspInit+0x192>
  6373. __HAL_RCC_ADC12_CLK_ENABLE();
  6374. 8003034: 4b49 ldr r3, [pc, #292] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6375. 8003036: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  6376. 800303a: 4a48 ldr r2, [pc, #288] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6377. 800303c: f043 0320 orr.w r3, r3, #32
  6378. 8003040: f8c2 30d8 str.w r3, [r2, #216] @ 0xd8
  6379. 8003044: 4b45 ldr r3, [pc, #276] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6380. 8003046: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  6381. 800304a: f003 0320 and.w r3, r3, #32
  6382. 800304e: 623b str r3, [r7, #32]
  6383. 8003050: 6a3b ldr r3, [r7, #32]
  6384. __HAL_RCC_GPIOA_CLK_ENABLE();
  6385. 8003052: 4b42 ldr r3, [pc, #264] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6386. 8003054: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6387. 8003058: 4a40 ldr r2, [pc, #256] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6388. 800305a: f043 0301 orr.w r3, r3, #1
  6389. 800305e: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  6390. 8003062: 4b3e ldr r3, [pc, #248] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6391. 8003064: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6392. 8003068: f003 0301 and.w r3, r3, #1
  6393. 800306c: 61fb str r3, [r7, #28]
  6394. 800306e: 69fb ldr r3, [r7, #28]
  6395. __HAL_RCC_GPIOC_CLK_ENABLE();
  6396. 8003070: 4b3a ldr r3, [pc, #232] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6397. 8003072: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6398. 8003076: 4a39 ldr r2, [pc, #228] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6399. 8003078: f043 0304 orr.w r3, r3, #4
  6400. 800307c: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  6401. 8003080: 4b36 ldr r3, [pc, #216] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6402. 8003082: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6403. 8003086: f003 0304 and.w r3, r3, #4
  6404. 800308a: 61bb str r3, [r7, #24]
  6405. 800308c: 69bb ldr r3, [r7, #24]
  6406. __HAL_RCC_GPIOB_CLK_ENABLE();
  6407. 800308e: 4b33 ldr r3, [pc, #204] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6408. 8003090: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6409. 8003094: 4a31 ldr r2, [pc, #196] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6410. 8003096: f043 0302 orr.w r3, r3, #2
  6411. 800309a: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  6412. 800309e: 4b2f ldr r3, [pc, #188] @ (800315c <HAL_ADC_MspInit+0x29c>)
  6413. 80030a0: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6414. 80030a4: f003 0302 and.w r3, r3, #2
  6415. 80030a8: 617b str r3, [r7, #20]
  6416. 80030aa: 697b ldr r3, [r7, #20]
  6417. GPIO_InitStruct.Pin = GPIO_PIN_6;
  6418. 80030ac: 2340 movs r3, #64 @ 0x40
  6419. 80030ae: 637b str r3, [r7, #52] @ 0x34
  6420. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  6421. 80030b0: 2303 movs r3, #3
  6422. 80030b2: 63bb str r3, [r7, #56] @ 0x38
  6423. GPIO_InitStruct.Pull = GPIO_NOPULL;
  6424. 80030b4: 2300 movs r3, #0
  6425. 80030b6: 63fb str r3, [r7, #60] @ 0x3c
  6426. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  6427. 80030b8: f107 0334 add.w r3, r7, #52 @ 0x34
  6428. 80030bc: 4619 mov r1, r3
  6429. 80030be: 4828 ldr r0, [pc, #160] @ (8003160 <HAL_ADC_MspInit+0x2a0>)
  6430. 80030c0: f006 fd16 bl 8009af0 <HAL_GPIO_Init>
  6431. GPIO_InitStruct.Pin = GPIO_PIN_4;
  6432. 80030c4: 2310 movs r3, #16
  6433. 80030c6: 637b str r3, [r7, #52] @ 0x34
  6434. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  6435. 80030c8: 2303 movs r3, #3
  6436. 80030ca: 63bb str r3, [r7, #56] @ 0x38
  6437. GPIO_InitStruct.Pull = GPIO_NOPULL;
  6438. 80030cc: 2300 movs r3, #0
  6439. 80030ce: 63fb str r3, [r7, #60] @ 0x3c
  6440. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  6441. 80030d0: f107 0334 add.w r3, r7, #52 @ 0x34
  6442. 80030d4: 4619 mov r1, r3
  6443. 80030d6: 4823 ldr r0, [pc, #140] @ (8003164 <HAL_ADC_MspInit+0x2a4>)
  6444. 80030d8: f006 fd0a bl 8009af0 <HAL_GPIO_Init>
  6445. GPIO_InitStruct.Pin = GPIO_PIN_1;
  6446. 80030dc: 2302 movs r3, #2
  6447. 80030de: 637b str r3, [r7, #52] @ 0x34
  6448. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  6449. 80030e0: 2303 movs r3, #3
  6450. 80030e2: 63bb str r3, [r7, #56] @ 0x38
  6451. GPIO_InitStruct.Pull = GPIO_NOPULL;
  6452. 80030e4: 2300 movs r3, #0
  6453. 80030e6: 63fb str r3, [r7, #60] @ 0x3c
  6454. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  6455. 80030e8: f107 0334 add.w r3, r7, #52 @ 0x34
  6456. 80030ec: 4619 mov r1, r3
  6457. 80030ee: 481e ldr r0, [pc, #120] @ (8003168 <HAL_ADC_MspInit+0x2a8>)
  6458. 80030f0: f006 fcfe bl 8009af0 <HAL_GPIO_Init>
  6459. hdma_adc2.Instance = DMA1_Stream1;
  6460. 80030f4: 4b20 ldr r3, [pc, #128] @ (8003178 <HAL_ADC_MspInit+0x2b8>)
  6461. 80030f6: 4a21 ldr r2, [pc, #132] @ (800317c <HAL_ADC_MspInit+0x2bc>)
  6462. 80030f8: 601a str r2, [r3, #0]
  6463. hdma_adc2.Init.Request = DMA_REQUEST_ADC2;
  6464. 80030fa: 4b1f ldr r3, [pc, #124] @ (8003178 <HAL_ADC_MspInit+0x2b8>)
  6465. 80030fc: 220a movs r2, #10
  6466. 80030fe: 605a str r2, [r3, #4]
  6467. hdma_adc2.Init.Direction = DMA_PERIPH_TO_MEMORY;
  6468. 8003100: 4b1d ldr r3, [pc, #116] @ (8003178 <HAL_ADC_MspInit+0x2b8>)
  6469. 8003102: 2200 movs r2, #0
  6470. 8003104: 609a str r2, [r3, #8]
  6471. hdma_adc2.Init.PeriphInc = DMA_PINC_DISABLE;
  6472. 8003106: 4b1c ldr r3, [pc, #112] @ (8003178 <HAL_ADC_MspInit+0x2b8>)
  6473. 8003108: 2200 movs r2, #0
  6474. 800310a: 60da str r2, [r3, #12]
  6475. hdma_adc2.Init.MemInc = DMA_MINC_ENABLE;
  6476. 800310c: 4b1a ldr r3, [pc, #104] @ (8003178 <HAL_ADC_MspInit+0x2b8>)
  6477. 800310e: f44f 6280 mov.w r2, #1024 @ 0x400
  6478. 8003112: 611a str r2, [r3, #16]
  6479. hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  6480. 8003114: 4b18 ldr r3, [pc, #96] @ (8003178 <HAL_ADC_MspInit+0x2b8>)
  6481. 8003116: f44f 6200 mov.w r2, #2048 @ 0x800
  6482. 800311a: 615a str r2, [r3, #20]
  6483. hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  6484. 800311c: 4b16 ldr r3, [pc, #88] @ (8003178 <HAL_ADC_MspInit+0x2b8>)
  6485. 800311e: f44f 5200 mov.w r2, #8192 @ 0x2000
  6486. 8003122: 619a str r2, [r3, #24]
  6487. hdma_adc2.Init.Mode = DMA_NORMAL;
  6488. 8003124: 4b14 ldr r3, [pc, #80] @ (8003178 <HAL_ADC_MspInit+0x2b8>)
  6489. 8003126: 2200 movs r2, #0
  6490. 8003128: 61da str r2, [r3, #28]
  6491. hdma_adc2.Init.Priority = DMA_PRIORITY_LOW;
  6492. 800312a: 4b13 ldr r3, [pc, #76] @ (8003178 <HAL_ADC_MspInit+0x2b8>)
  6493. 800312c: 2200 movs r2, #0
  6494. 800312e: 621a str r2, [r3, #32]
  6495. hdma_adc2.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  6496. 8003130: 4b11 ldr r3, [pc, #68] @ (8003178 <HAL_ADC_MspInit+0x2b8>)
  6497. 8003132: 2200 movs r2, #0
  6498. 8003134: 625a str r2, [r3, #36] @ 0x24
  6499. if (HAL_DMA_Init(&hdma_adc2) != HAL_OK)
  6500. 8003136: 4810 ldr r0, [pc, #64] @ (8003178 <HAL_ADC_MspInit+0x2b8>)
  6501. 8003138: f003 fe9e bl 8006e78 <HAL_DMA_Init>
  6502. 800313c: 4603 mov r3, r0
  6503. 800313e: 2b00 cmp r3, #0
  6504. 8003140: d001 beq.n 8003146 <HAL_ADC_MspInit+0x286>
  6505. Error_Handler();
  6506. 8003142: f7fe fc6d bl 8001a20 <Error_Handler>
  6507. __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc2);
  6508. 8003146: 687b ldr r3, [r7, #4]
  6509. 8003148: 4a0b ldr r2, [pc, #44] @ (8003178 <HAL_ADC_MspInit+0x2b8>)
  6510. 800314a: 64da str r2, [r3, #76] @ 0x4c
  6511. 800314c: 4a0a ldr r2, [pc, #40] @ (8003178 <HAL_ADC_MspInit+0x2b8>)
  6512. 800314e: 687b ldr r3, [r7, #4]
  6513. 8003150: 6393 str r3, [r2, #56] @ 0x38
  6514. }
  6515. 8003152: e07f b.n 8003254 <HAL_ADC_MspInit+0x394>
  6516. 8003154: 40022000 .word 0x40022000
  6517. 8003158: 240007c4 .word 0x240007c4
  6518. 800315c: 58024400 .word 0x58024400
  6519. 8003160: 58020000 .word 0x58020000
  6520. 8003164: 58020800 .word 0x58020800
  6521. 8003168: 58020400 .word 0x58020400
  6522. 800316c: 2400026c .word 0x2400026c
  6523. 8003170: 40020010 .word 0x40020010
  6524. 8003174: 40022100 .word 0x40022100
  6525. 8003178: 240002e4 .word 0x240002e4
  6526. 800317c: 40020028 .word 0x40020028
  6527. else if(hadc->Instance==ADC3)
  6528. 8003180: 687b ldr r3, [r7, #4]
  6529. 8003182: 681b ldr r3, [r3, #0]
  6530. 8003184: 4a35 ldr r2, [pc, #212] @ (800325c <HAL_ADC_MspInit+0x39c>)
  6531. 8003186: 4293 cmp r3, r2
  6532. 8003188: d164 bne.n 8003254 <HAL_ADC_MspInit+0x394>
  6533. __HAL_RCC_ADC3_CLK_ENABLE();
  6534. 800318a: 4b35 ldr r3, [pc, #212] @ (8003260 <HAL_ADC_MspInit+0x3a0>)
  6535. 800318c: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6536. 8003190: 4a33 ldr r2, [pc, #204] @ (8003260 <HAL_ADC_MspInit+0x3a0>)
  6537. 8003192: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  6538. 8003196: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  6539. 800319a: 4b31 ldr r3, [pc, #196] @ (8003260 <HAL_ADC_MspInit+0x3a0>)
  6540. 800319c: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6541. 80031a0: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  6542. 80031a4: 613b str r3, [r7, #16]
  6543. 80031a6: 693b ldr r3, [r7, #16]
  6544. __HAL_RCC_GPIOC_CLK_ENABLE();
  6545. 80031a8: 4b2d ldr r3, [pc, #180] @ (8003260 <HAL_ADC_MspInit+0x3a0>)
  6546. 80031aa: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6547. 80031ae: 4a2c ldr r2, [pc, #176] @ (8003260 <HAL_ADC_MspInit+0x3a0>)
  6548. 80031b0: f043 0304 orr.w r3, r3, #4
  6549. 80031b4: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  6550. 80031b8: 4b29 ldr r3, [pc, #164] @ (8003260 <HAL_ADC_MspInit+0x3a0>)
  6551. 80031ba: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6552. 80031be: f003 0304 and.w r3, r3, #4
  6553. 80031c2: 60fb str r3, [r7, #12]
  6554. 80031c4: 68fb ldr r3, [r7, #12]
  6555. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
  6556. 80031c6: 2303 movs r3, #3
  6557. 80031c8: 637b str r3, [r7, #52] @ 0x34
  6558. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  6559. 80031ca: 2303 movs r3, #3
  6560. 80031cc: 63bb str r3, [r7, #56] @ 0x38
  6561. GPIO_InitStruct.Pull = GPIO_NOPULL;
  6562. 80031ce: 2300 movs r3, #0
  6563. 80031d0: 63fb str r3, [r7, #60] @ 0x3c
  6564. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  6565. 80031d2: f107 0334 add.w r3, r7, #52 @ 0x34
  6566. 80031d6: 4619 mov r1, r3
  6567. 80031d8: 4822 ldr r0, [pc, #136] @ (8003264 <HAL_ADC_MspInit+0x3a4>)
  6568. 80031da: f006 fc89 bl 8009af0 <HAL_GPIO_Init>
  6569. HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC2, SYSCFG_SWITCH_PC2_OPEN);
  6570. 80031de: f04f 6180 mov.w r1, #67108864 @ 0x4000000
  6571. 80031e2: f04f 6080 mov.w r0, #67108864 @ 0x4000000
  6572. 80031e6: f001 fc79 bl 8004adc <HAL_SYSCFG_AnalogSwitchConfig>
  6573. HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC3, SYSCFG_SWITCH_PC3_OPEN);
  6574. 80031ea: f04f 6100 mov.w r1, #134217728 @ 0x8000000
  6575. 80031ee: f04f 6000 mov.w r0, #134217728 @ 0x8000000
  6576. 80031f2: f001 fc73 bl 8004adc <HAL_SYSCFG_AnalogSwitchConfig>
  6577. hdma_adc3.Instance = DMA1_Stream2;
  6578. 80031f6: 4b1c ldr r3, [pc, #112] @ (8003268 <HAL_ADC_MspInit+0x3a8>)
  6579. 80031f8: 4a1c ldr r2, [pc, #112] @ (800326c <HAL_ADC_MspInit+0x3ac>)
  6580. 80031fa: 601a str r2, [r3, #0]
  6581. hdma_adc3.Init.Request = DMA_REQUEST_ADC3;
  6582. 80031fc: 4b1a ldr r3, [pc, #104] @ (8003268 <HAL_ADC_MspInit+0x3a8>)
  6583. 80031fe: 2273 movs r2, #115 @ 0x73
  6584. 8003200: 605a str r2, [r3, #4]
  6585. hdma_adc3.Init.Direction = DMA_PERIPH_TO_MEMORY;
  6586. 8003202: 4b19 ldr r3, [pc, #100] @ (8003268 <HAL_ADC_MspInit+0x3a8>)
  6587. 8003204: 2200 movs r2, #0
  6588. 8003206: 609a str r2, [r3, #8]
  6589. hdma_adc3.Init.PeriphInc = DMA_PINC_DISABLE;
  6590. 8003208: 4b17 ldr r3, [pc, #92] @ (8003268 <HAL_ADC_MspInit+0x3a8>)
  6591. 800320a: 2200 movs r2, #0
  6592. 800320c: 60da str r2, [r3, #12]
  6593. hdma_adc3.Init.MemInc = DMA_MINC_ENABLE;
  6594. 800320e: 4b16 ldr r3, [pc, #88] @ (8003268 <HAL_ADC_MspInit+0x3a8>)
  6595. 8003210: f44f 6280 mov.w r2, #1024 @ 0x400
  6596. 8003214: 611a str r2, [r3, #16]
  6597. hdma_adc3.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  6598. 8003216: 4b14 ldr r3, [pc, #80] @ (8003268 <HAL_ADC_MspInit+0x3a8>)
  6599. 8003218: f44f 6200 mov.w r2, #2048 @ 0x800
  6600. 800321c: 615a str r2, [r3, #20]
  6601. hdma_adc3.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  6602. 800321e: 4b12 ldr r3, [pc, #72] @ (8003268 <HAL_ADC_MspInit+0x3a8>)
  6603. 8003220: f44f 5200 mov.w r2, #8192 @ 0x2000
  6604. 8003224: 619a str r2, [r3, #24]
  6605. hdma_adc3.Init.Mode = DMA_NORMAL;
  6606. 8003226: 4b10 ldr r3, [pc, #64] @ (8003268 <HAL_ADC_MspInit+0x3a8>)
  6607. 8003228: 2200 movs r2, #0
  6608. 800322a: 61da str r2, [r3, #28]
  6609. hdma_adc3.Init.Priority = DMA_PRIORITY_LOW;
  6610. 800322c: 4b0e ldr r3, [pc, #56] @ (8003268 <HAL_ADC_MspInit+0x3a8>)
  6611. 800322e: 2200 movs r2, #0
  6612. 8003230: 621a str r2, [r3, #32]
  6613. hdma_adc3.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  6614. 8003232: 4b0d ldr r3, [pc, #52] @ (8003268 <HAL_ADC_MspInit+0x3a8>)
  6615. 8003234: 2200 movs r2, #0
  6616. 8003236: 625a str r2, [r3, #36] @ 0x24
  6617. if (HAL_DMA_Init(&hdma_adc3) != HAL_OK)
  6618. 8003238: 480b ldr r0, [pc, #44] @ (8003268 <HAL_ADC_MspInit+0x3a8>)
  6619. 800323a: f003 fe1d bl 8006e78 <HAL_DMA_Init>
  6620. 800323e: 4603 mov r3, r0
  6621. 8003240: 2b00 cmp r3, #0
  6622. 8003242: d001 beq.n 8003248 <HAL_ADC_MspInit+0x388>
  6623. Error_Handler();
  6624. 8003244: f7fe fbec bl 8001a20 <Error_Handler>
  6625. __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc3);
  6626. 8003248: 687b ldr r3, [r7, #4]
  6627. 800324a: 4a07 ldr r2, [pc, #28] @ (8003268 <HAL_ADC_MspInit+0x3a8>)
  6628. 800324c: 64da str r2, [r3, #76] @ 0x4c
  6629. 800324e: 4a06 ldr r2, [pc, #24] @ (8003268 <HAL_ADC_MspInit+0x3a8>)
  6630. 8003250: 687b ldr r3, [r7, #4]
  6631. 8003252: 6393 str r3, [r2, #56] @ 0x38
  6632. }
  6633. 8003254: bf00 nop
  6634. 8003256: 3748 adds r7, #72 @ 0x48
  6635. 8003258: 46bd mov sp, r7
  6636. 800325a: bd80 pop {r7, pc}
  6637. 800325c: 58026000 .word 0x58026000
  6638. 8003260: 58024400 .word 0x58024400
  6639. 8003264: 58020800 .word 0x58020800
  6640. 8003268: 2400035c .word 0x2400035c
  6641. 800326c: 40020040 .word 0x40020040
  6642. 08003270 <HAL_CRC_MspInit>:
  6643. * This function configures the hardware resources used in this example
  6644. * @param hcrc: CRC handle pointer
  6645. * @retval None
  6646. */
  6647. void HAL_CRC_MspInit(CRC_HandleTypeDef* hcrc)
  6648. {
  6649. 8003270: b480 push {r7}
  6650. 8003272: b085 sub sp, #20
  6651. 8003274: af00 add r7, sp, #0
  6652. 8003276: 6078 str r0, [r7, #4]
  6653. if(hcrc->Instance==CRC)
  6654. 8003278: 687b ldr r3, [r7, #4]
  6655. 800327a: 681b ldr r3, [r3, #0]
  6656. 800327c: 4a0b ldr r2, [pc, #44] @ (80032ac <HAL_CRC_MspInit+0x3c>)
  6657. 800327e: 4293 cmp r3, r2
  6658. 8003280: d10e bne.n 80032a0 <HAL_CRC_MspInit+0x30>
  6659. {
  6660. /* USER CODE BEGIN CRC_MspInit 0 */
  6661. /* USER CODE END CRC_MspInit 0 */
  6662. /* Peripheral clock enable */
  6663. __HAL_RCC_CRC_CLK_ENABLE();
  6664. 8003282: 4b0b ldr r3, [pc, #44] @ (80032b0 <HAL_CRC_MspInit+0x40>)
  6665. 8003284: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6666. 8003288: 4a09 ldr r2, [pc, #36] @ (80032b0 <HAL_CRC_MspInit+0x40>)
  6667. 800328a: f443 2300 orr.w r3, r3, #524288 @ 0x80000
  6668. 800328e: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  6669. 8003292: 4b07 ldr r3, [pc, #28] @ (80032b0 <HAL_CRC_MspInit+0x40>)
  6670. 8003294: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6671. 8003298: f403 2300 and.w r3, r3, #524288 @ 0x80000
  6672. 800329c: 60fb str r3, [r7, #12]
  6673. 800329e: 68fb ldr r3, [r7, #12]
  6674. /* USER CODE BEGIN CRC_MspInit 1 */
  6675. /* USER CODE END CRC_MspInit 1 */
  6676. }
  6677. }
  6678. 80032a0: bf00 nop
  6679. 80032a2: 3714 adds r7, #20
  6680. 80032a4: 46bd mov sp, r7
  6681. 80032a6: f85d 7b04 ldr.w r7, [sp], #4
  6682. 80032aa: 4770 bx lr
  6683. 80032ac: 58024c00 .word 0x58024c00
  6684. 80032b0: 58024400 .word 0x58024400
  6685. 080032b4 <HAL_DAC_MspInit>:
  6686. * This function configures the hardware resources used in this example
  6687. * @param hdac: DAC handle pointer
  6688. * @retval None
  6689. */
  6690. void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac)
  6691. {
  6692. 80032b4: b580 push {r7, lr}
  6693. 80032b6: b08a sub sp, #40 @ 0x28
  6694. 80032b8: af00 add r7, sp, #0
  6695. 80032ba: 6078 str r0, [r7, #4]
  6696. GPIO_InitTypeDef GPIO_InitStruct = {0};
  6697. 80032bc: f107 0314 add.w r3, r7, #20
  6698. 80032c0: 2200 movs r2, #0
  6699. 80032c2: 601a str r2, [r3, #0]
  6700. 80032c4: 605a str r2, [r3, #4]
  6701. 80032c6: 609a str r2, [r3, #8]
  6702. 80032c8: 60da str r2, [r3, #12]
  6703. 80032ca: 611a str r2, [r3, #16]
  6704. if(hdac->Instance==DAC1)
  6705. 80032cc: 687b ldr r3, [r7, #4]
  6706. 80032ce: 681b ldr r3, [r3, #0]
  6707. 80032d0: 4a1c ldr r2, [pc, #112] @ (8003344 <HAL_DAC_MspInit+0x90>)
  6708. 80032d2: 4293 cmp r3, r2
  6709. 80032d4: d131 bne.n 800333a <HAL_DAC_MspInit+0x86>
  6710. {
  6711. /* USER CODE BEGIN DAC1_MspInit 0 */
  6712. /* USER CODE END DAC1_MspInit 0 */
  6713. /* Peripheral clock enable */
  6714. __HAL_RCC_DAC12_CLK_ENABLE();
  6715. 80032d6: 4b1c ldr r3, [pc, #112] @ (8003348 <HAL_DAC_MspInit+0x94>)
  6716. 80032d8: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  6717. 80032dc: 4a1a ldr r2, [pc, #104] @ (8003348 <HAL_DAC_MspInit+0x94>)
  6718. 80032de: f043 5300 orr.w r3, r3, #536870912 @ 0x20000000
  6719. 80032e2: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  6720. 80032e6: 4b18 ldr r3, [pc, #96] @ (8003348 <HAL_DAC_MspInit+0x94>)
  6721. 80032e8: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  6722. 80032ec: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  6723. 80032f0: 613b str r3, [r7, #16]
  6724. 80032f2: 693b ldr r3, [r7, #16]
  6725. __HAL_RCC_GPIOA_CLK_ENABLE();
  6726. 80032f4: 4b14 ldr r3, [pc, #80] @ (8003348 <HAL_DAC_MspInit+0x94>)
  6727. 80032f6: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6728. 80032fa: 4a13 ldr r2, [pc, #76] @ (8003348 <HAL_DAC_MspInit+0x94>)
  6729. 80032fc: f043 0301 orr.w r3, r3, #1
  6730. 8003300: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  6731. 8003304: 4b10 ldr r3, [pc, #64] @ (8003348 <HAL_DAC_MspInit+0x94>)
  6732. 8003306: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6733. 800330a: f003 0301 and.w r3, r3, #1
  6734. 800330e: 60fb str r3, [r7, #12]
  6735. 8003310: 68fb ldr r3, [r7, #12]
  6736. /**DAC1 GPIO Configuration
  6737. PA4 ------> DAC1_OUT1
  6738. PA5 ------> DAC1_OUT2
  6739. */
  6740. GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5;
  6741. 8003312: 2330 movs r3, #48 @ 0x30
  6742. 8003314: 617b str r3, [r7, #20]
  6743. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  6744. 8003316: 2303 movs r3, #3
  6745. 8003318: 61bb str r3, [r7, #24]
  6746. GPIO_InitStruct.Pull = GPIO_NOPULL;
  6747. 800331a: 2300 movs r3, #0
  6748. 800331c: 61fb str r3, [r7, #28]
  6749. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  6750. 800331e: f107 0314 add.w r3, r7, #20
  6751. 8003322: 4619 mov r1, r3
  6752. 8003324: 4809 ldr r0, [pc, #36] @ (800334c <HAL_DAC_MspInit+0x98>)
  6753. 8003326: f006 fbe3 bl 8009af0 <HAL_GPIO_Init>
  6754. /* DAC1 interrupt Init */
  6755. HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 5, 0);
  6756. 800332a: 2200 movs r2, #0
  6757. 800332c: 2105 movs r1, #5
  6758. 800332e: 2036 movs r0, #54 @ 0x36
  6759. 8003330: f003 f8ac bl 800648c <HAL_NVIC_SetPriority>
  6760. HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
  6761. 8003334: 2036 movs r0, #54 @ 0x36
  6762. 8003336: f003 f8c3 bl 80064c0 <HAL_NVIC_EnableIRQ>
  6763. /* USER CODE BEGIN DAC1_MspInit 1 */
  6764. /* USER CODE END DAC1_MspInit 1 */
  6765. }
  6766. }
  6767. 800333a: bf00 nop
  6768. 800333c: 3728 adds r7, #40 @ 0x28
  6769. 800333e: 46bd mov sp, r7
  6770. 8003340: bd80 pop {r7, pc}
  6771. 8003342: bf00 nop
  6772. 8003344: 40007400 .word 0x40007400
  6773. 8003348: 58024400 .word 0x58024400
  6774. 800334c: 58020000 .word 0x58020000
  6775. 08003350 <HAL_RNG_MspInit>:
  6776. * This function configures the hardware resources used in this example
  6777. * @param hrng: RNG handle pointer
  6778. * @retval None
  6779. */
  6780. void HAL_RNG_MspInit(RNG_HandleTypeDef* hrng)
  6781. {
  6782. 8003350: b580 push {r7, lr}
  6783. 8003352: b0b4 sub sp, #208 @ 0xd0
  6784. 8003354: af00 add r7, sp, #0
  6785. 8003356: 6078 str r0, [r7, #4]
  6786. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  6787. 8003358: f107 0310 add.w r3, r7, #16
  6788. 800335c: 22c0 movs r2, #192 @ 0xc0
  6789. 800335e: 2100 movs r1, #0
  6790. 8003360: 4618 mov r0, r3
  6791. 8003362: f013 f9f8 bl 8016756 <memset>
  6792. if(hrng->Instance==RNG)
  6793. 8003366: 687b ldr r3, [r7, #4]
  6794. 8003368: 681b ldr r3, [r3, #0]
  6795. 800336a: 4a14 ldr r2, [pc, #80] @ (80033bc <HAL_RNG_MspInit+0x6c>)
  6796. 800336c: 4293 cmp r3, r2
  6797. 800336e: d121 bne.n 80033b4 <HAL_RNG_MspInit+0x64>
  6798. /* USER CODE END RNG_MspInit 0 */
  6799. /** Initializes the peripherals clock
  6800. */
  6801. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RNG;
  6802. 8003370: f44f 3200 mov.w r2, #131072 @ 0x20000
  6803. 8003374: f04f 0300 mov.w r3, #0
  6804. 8003378: e9c7 2304 strd r2, r3, [r7, #16]
  6805. PeriphClkInitStruct.RngClockSelection = RCC_RNGCLKSOURCE_HSI48;
  6806. 800337c: 2300 movs r3, #0
  6807. 800337e: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  6808. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  6809. 8003382: f107 0310 add.w r3, r7, #16
  6810. 8003386: 4618 mov r0, r3
  6811. 8003388: f007 ff3a bl 800b200 <HAL_RCCEx_PeriphCLKConfig>
  6812. 800338c: 4603 mov r3, r0
  6813. 800338e: 2b00 cmp r3, #0
  6814. 8003390: d001 beq.n 8003396 <HAL_RNG_MspInit+0x46>
  6815. {
  6816. Error_Handler();
  6817. 8003392: f7fe fb45 bl 8001a20 <Error_Handler>
  6818. }
  6819. /* Peripheral clock enable */
  6820. __HAL_RCC_RNG_CLK_ENABLE();
  6821. 8003396: 4b0a ldr r3, [pc, #40] @ (80033c0 <HAL_RNG_MspInit+0x70>)
  6822. 8003398: f8d3 30dc ldr.w r3, [r3, #220] @ 0xdc
  6823. 800339c: 4a08 ldr r2, [pc, #32] @ (80033c0 <HAL_RNG_MspInit+0x70>)
  6824. 800339e: f043 0340 orr.w r3, r3, #64 @ 0x40
  6825. 80033a2: f8c2 30dc str.w r3, [r2, #220] @ 0xdc
  6826. 80033a6: 4b06 ldr r3, [pc, #24] @ (80033c0 <HAL_RNG_MspInit+0x70>)
  6827. 80033a8: f8d3 30dc ldr.w r3, [r3, #220] @ 0xdc
  6828. 80033ac: f003 0340 and.w r3, r3, #64 @ 0x40
  6829. 80033b0: 60fb str r3, [r7, #12]
  6830. 80033b2: 68fb ldr r3, [r7, #12]
  6831. /* USER CODE BEGIN RNG_MspInit 1 */
  6832. /* USER CODE END RNG_MspInit 1 */
  6833. }
  6834. }
  6835. 80033b4: bf00 nop
  6836. 80033b6: 37d0 adds r7, #208 @ 0xd0
  6837. 80033b8: 46bd mov sp, r7
  6838. 80033ba: bd80 pop {r7, pc}
  6839. 80033bc: 48021800 .word 0x48021800
  6840. 80033c0: 58024400 .word 0x58024400
  6841. 080033c4 <HAL_TIM_PWM_MspInit>:
  6842. * This function configures the hardware resources used in this example
  6843. * @param htim_pwm: TIM_PWM handle pointer
  6844. * @retval None
  6845. */
  6846. void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm)
  6847. {
  6848. 80033c4: b480 push {r7}
  6849. 80033c6: b085 sub sp, #20
  6850. 80033c8: af00 add r7, sp, #0
  6851. 80033ca: 6078 str r0, [r7, #4]
  6852. if(htim_pwm->Instance==TIM1)
  6853. 80033cc: 687b ldr r3, [r7, #4]
  6854. 80033ce: 681b ldr r3, [r3, #0]
  6855. 80033d0: 4a16 ldr r2, [pc, #88] @ (800342c <HAL_TIM_PWM_MspInit+0x68>)
  6856. 80033d2: 4293 cmp r3, r2
  6857. 80033d4: d10f bne.n 80033f6 <HAL_TIM_PWM_MspInit+0x32>
  6858. {
  6859. /* USER CODE BEGIN TIM1_MspInit 0 */
  6860. /* USER CODE END TIM1_MspInit 0 */
  6861. /* Peripheral clock enable */
  6862. __HAL_RCC_TIM1_CLK_ENABLE();
  6863. 80033d6: 4b16 ldr r3, [pc, #88] @ (8003430 <HAL_TIM_PWM_MspInit+0x6c>)
  6864. 80033d8: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  6865. 80033dc: 4a14 ldr r2, [pc, #80] @ (8003430 <HAL_TIM_PWM_MspInit+0x6c>)
  6866. 80033de: f043 0301 orr.w r3, r3, #1
  6867. 80033e2: f8c2 30f0 str.w r3, [r2, #240] @ 0xf0
  6868. 80033e6: 4b12 ldr r3, [pc, #72] @ (8003430 <HAL_TIM_PWM_MspInit+0x6c>)
  6869. 80033e8: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  6870. 80033ec: f003 0301 and.w r3, r3, #1
  6871. 80033f0: 60fb str r3, [r7, #12]
  6872. 80033f2: 68fb ldr r3, [r7, #12]
  6873. /* USER CODE BEGIN TIM3_MspInit 1 */
  6874. /* USER CODE END TIM3_MspInit 1 */
  6875. }
  6876. }
  6877. 80033f4: e013 b.n 800341e <HAL_TIM_PWM_MspInit+0x5a>
  6878. else if(htim_pwm->Instance==TIM3)
  6879. 80033f6: 687b ldr r3, [r7, #4]
  6880. 80033f8: 681b ldr r3, [r3, #0]
  6881. 80033fa: 4a0e ldr r2, [pc, #56] @ (8003434 <HAL_TIM_PWM_MspInit+0x70>)
  6882. 80033fc: 4293 cmp r3, r2
  6883. 80033fe: d10e bne.n 800341e <HAL_TIM_PWM_MspInit+0x5a>
  6884. __HAL_RCC_TIM3_CLK_ENABLE();
  6885. 8003400: 4b0b ldr r3, [pc, #44] @ (8003430 <HAL_TIM_PWM_MspInit+0x6c>)
  6886. 8003402: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  6887. 8003406: 4a0a ldr r2, [pc, #40] @ (8003430 <HAL_TIM_PWM_MspInit+0x6c>)
  6888. 8003408: f043 0302 orr.w r3, r3, #2
  6889. 800340c: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  6890. 8003410: 4b07 ldr r3, [pc, #28] @ (8003430 <HAL_TIM_PWM_MspInit+0x6c>)
  6891. 8003412: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  6892. 8003416: f003 0302 and.w r3, r3, #2
  6893. 800341a: 60bb str r3, [r7, #8]
  6894. 800341c: 68bb ldr r3, [r7, #8]
  6895. }
  6896. 800341e: bf00 nop
  6897. 8003420: 3714 adds r7, #20
  6898. 8003422: 46bd mov sp, r7
  6899. 8003424: f85d 7b04 ldr.w r7, [sp], #4
  6900. 8003428: 4770 bx lr
  6901. 800342a: bf00 nop
  6902. 800342c: 40010000 .word 0x40010000
  6903. 8003430: 58024400 .word 0x58024400
  6904. 8003434: 40000400 .word 0x40000400
  6905. 08003438 <HAL_TIM_Base_MspInit>:
  6906. * This function configures the hardware resources used in this example
  6907. * @param htim_base: TIM_Base handle pointer
  6908. * @retval None
  6909. */
  6910. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
  6911. {
  6912. 8003438: b580 push {r7, lr}
  6913. 800343a: b084 sub sp, #16
  6914. 800343c: af00 add r7, sp, #0
  6915. 800343e: 6078 str r0, [r7, #4]
  6916. if(htim_base->Instance==TIM2)
  6917. 8003440: 687b ldr r3, [r7, #4]
  6918. 8003442: 681b ldr r3, [r3, #0]
  6919. 8003444: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  6920. 8003448: d116 bne.n 8003478 <HAL_TIM_Base_MspInit+0x40>
  6921. {
  6922. /* USER CODE BEGIN TIM2_MspInit 0 */
  6923. /* USER CODE END TIM2_MspInit 0 */
  6924. /* Peripheral clock enable */
  6925. __HAL_RCC_TIM2_CLK_ENABLE();
  6926. 800344a: 4b0d ldr r3, [pc, #52] @ (8003480 <HAL_TIM_Base_MspInit+0x48>)
  6927. 800344c: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  6928. 8003450: 4a0b ldr r2, [pc, #44] @ (8003480 <HAL_TIM_Base_MspInit+0x48>)
  6929. 8003452: f043 0301 orr.w r3, r3, #1
  6930. 8003456: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  6931. 800345a: 4b09 ldr r3, [pc, #36] @ (8003480 <HAL_TIM_Base_MspInit+0x48>)
  6932. 800345c: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  6933. 8003460: f003 0301 and.w r3, r3, #1
  6934. 8003464: 60fb str r3, [r7, #12]
  6935. 8003466: 68fb ldr r3, [r7, #12]
  6936. /* TIM2 interrupt Init */
  6937. HAL_NVIC_SetPriority(TIM2_IRQn, 5, 0);
  6938. 8003468: 2200 movs r2, #0
  6939. 800346a: 2105 movs r1, #5
  6940. 800346c: 201c movs r0, #28
  6941. 800346e: f003 f80d bl 800648c <HAL_NVIC_SetPriority>
  6942. HAL_NVIC_EnableIRQ(TIM2_IRQn);
  6943. 8003472: 201c movs r0, #28
  6944. 8003474: f003 f824 bl 80064c0 <HAL_NVIC_EnableIRQ>
  6945. /* USER CODE BEGIN TIM2_MspInit 1 */
  6946. /* USER CODE END TIM2_MspInit 1 */
  6947. }
  6948. }
  6949. 8003478: bf00 nop
  6950. 800347a: 3710 adds r7, #16
  6951. 800347c: 46bd mov sp, r7
  6952. 800347e: bd80 pop {r7, pc}
  6953. 8003480: 58024400 .word 0x58024400
  6954. 08003484 <HAL_TIM_MspPostInit>:
  6955. void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
  6956. {
  6957. 8003484: b580 push {r7, lr}
  6958. 8003486: b08a sub sp, #40 @ 0x28
  6959. 8003488: af00 add r7, sp, #0
  6960. 800348a: 6078 str r0, [r7, #4]
  6961. GPIO_InitTypeDef GPIO_InitStruct = {0};
  6962. 800348c: f107 0314 add.w r3, r7, #20
  6963. 8003490: 2200 movs r2, #0
  6964. 8003492: 601a str r2, [r3, #0]
  6965. 8003494: 605a str r2, [r3, #4]
  6966. 8003496: 609a str r2, [r3, #8]
  6967. 8003498: 60da str r2, [r3, #12]
  6968. 800349a: 611a str r2, [r3, #16]
  6969. if(htim->Instance==TIM1)
  6970. 800349c: 687b ldr r3, [r7, #4]
  6971. 800349e: 681b ldr r3, [r3, #0]
  6972. 80034a0: 4a26 ldr r2, [pc, #152] @ (800353c <HAL_TIM_MspPostInit+0xb8>)
  6973. 80034a2: 4293 cmp r3, r2
  6974. 80034a4: d120 bne.n 80034e8 <HAL_TIM_MspPostInit+0x64>
  6975. {
  6976. /* USER CODE BEGIN TIM1_MspPostInit 0 */
  6977. /* USER CODE END TIM1_MspPostInit 0 */
  6978. __HAL_RCC_GPIOA_CLK_ENABLE();
  6979. 80034a6: 4b26 ldr r3, [pc, #152] @ (8003540 <HAL_TIM_MspPostInit+0xbc>)
  6980. 80034a8: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6981. 80034ac: 4a24 ldr r2, [pc, #144] @ (8003540 <HAL_TIM_MspPostInit+0xbc>)
  6982. 80034ae: f043 0301 orr.w r3, r3, #1
  6983. 80034b2: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  6984. 80034b6: 4b22 ldr r3, [pc, #136] @ (8003540 <HAL_TIM_MspPostInit+0xbc>)
  6985. 80034b8: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6986. 80034bc: f003 0301 and.w r3, r3, #1
  6987. 80034c0: 613b str r3, [r7, #16]
  6988. 80034c2: 693b ldr r3, [r7, #16]
  6989. /**TIM1 GPIO Configuration
  6990. PA9 ------> TIM1_CH2
  6991. */
  6992. GPIO_InitStruct.Pin = GPIO_PIN_9;
  6993. 80034c4: f44f 7300 mov.w r3, #512 @ 0x200
  6994. 80034c8: 617b str r3, [r7, #20]
  6995. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  6996. 80034ca: 2302 movs r3, #2
  6997. 80034cc: 61bb str r3, [r7, #24]
  6998. GPIO_InitStruct.Pull = GPIO_NOPULL;
  6999. 80034ce: 2300 movs r3, #0
  7000. 80034d0: 61fb str r3, [r7, #28]
  7001. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  7002. 80034d2: 2300 movs r3, #0
  7003. 80034d4: 623b str r3, [r7, #32]
  7004. GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
  7005. 80034d6: 2301 movs r3, #1
  7006. 80034d8: 627b str r3, [r7, #36] @ 0x24
  7007. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  7008. 80034da: f107 0314 add.w r3, r7, #20
  7009. 80034de: 4619 mov r1, r3
  7010. 80034e0: 4818 ldr r0, [pc, #96] @ (8003544 <HAL_TIM_MspPostInit+0xc0>)
  7011. 80034e2: f006 fb05 bl 8009af0 <HAL_GPIO_Init>
  7012. /* USER CODE BEGIN TIM3_MspPostInit 1 */
  7013. /* USER CODE END TIM3_MspPostInit 1 */
  7014. }
  7015. }
  7016. 80034e6: e024 b.n 8003532 <HAL_TIM_MspPostInit+0xae>
  7017. else if(htim->Instance==TIM3)
  7018. 80034e8: 687b ldr r3, [r7, #4]
  7019. 80034ea: 681b ldr r3, [r3, #0]
  7020. 80034ec: 4a16 ldr r2, [pc, #88] @ (8003548 <HAL_TIM_MspPostInit+0xc4>)
  7021. 80034ee: 4293 cmp r3, r2
  7022. 80034f0: d11f bne.n 8003532 <HAL_TIM_MspPostInit+0xae>
  7023. __HAL_RCC_GPIOC_CLK_ENABLE();
  7024. 80034f2: 4b13 ldr r3, [pc, #76] @ (8003540 <HAL_TIM_MspPostInit+0xbc>)
  7025. 80034f4: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7026. 80034f8: 4a11 ldr r2, [pc, #68] @ (8003540 <HAL_TIM_MspPostInit+0xbc>)
  7027. 80034fa: f043 0304 orr.w r3, r3, #4
  7028. 80034fe: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7029. 8003502: 4b0f ldr r3, [pc, #60] @ (8003540 <HAL_TIM_MspPostInit+0xbc>)
  7030. 8003504: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7031. 8003508: f003 0304 and.w r3, r3, #4
  7032. 800350c: 60fb str r3, [r7, #12]
  7033. 800350e: 68fb ldr r3, [r7, #12]
  7034. GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
  7035. 8003510: f44f 7370 mov.w r3, #960 @ 0x3c0
  7036. 8003514: 617b str r3, [r7, #20]
  7037. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  7038. 8003516: 2302 movs r3, #2
  7039. 8003518: 61bb str r3, [r7, #24]
  7040. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7041. 800351a: 2300 movs r3, #0
  7042. 800351c: 61fb str r3, [r7, #28]
  7043. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
  7044. 800351e: 2301 movs r3, #1
  7045. 8003520: 623b str r3, [r7, #32]
  7046. GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
  7047. 8003522: 2302 movs r3, #2
  7048. 8003524: 627b str r3, [r7, #36] @ 0x24
  7049. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  7050. 8003526: f107 0314 add.w r3, r7, #20
  7051. 800352a: 4619 mov r1, r3
  7052. 800352c: 4807 ldr r0, [pc, #28] @ (800354c <HAL_TIM_MspPostInit+0xc8>)
  7053. 800352e: f006 fadf bl 8009af0 <HAL_GPIO_Init>
  7054. }
  7055. 8003532: bf00 nop
  7056. 8003534: 3728 adds r7, #40 @ 0x28
  7057. 8003536: 46bd mov sp, r7
  7058. 8003538: bd80 pop {r7, pc}
  7059. 800353a: bf00 nop
  7060. 800353c: 40010000 .word 0x40010000
  7061. 8003540: 58024400 .word 0x58024400
  7062. 8003544: 58020000 .word 0x58020000
  7063. 8003548: 40000400 .word 0x40000400
  7064. 800354c: 58020800 .word 0x58020800
  7065. 08003550 <HAL_UART_MspInit>:
  7066. * This function configures the hardware resources used in this example
  7067. * @param huart: UART handle pointer
  7068. * @retval None
  7069. */
  7070. void HAL_UART_MspInit(UART_HandleTypeDef* huart)
  7071. {
  7072. 8003550: b580 push {r7, lr}
  7073. 8003552: b0bc sub sp, #240 @ 0xf0
  7074. 8003554: af00 add r7, sp, #0
  7075. 8003556: 6078 str r0, [r7, #4]
  7076. GPIO_InitTypeDef GPIO_InitStruct = {0};
  7077. 8003558: f107 03dc add.w r3, r7, #220 @ 0xdc
  7078. 800355c: 2200 movs r2, #0
  7079. 800355e: 601a str r2, [r3, #0]
  7080. 8003560: 605a str r2, [r3, #4]
  7081. 8003562: 609a str r2, [r3, #8]
  7082. 8003564: 60da str r2, [r3, #12]
  7083. 8003566: 611a str r2, [r3, #16]
  7084. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  7085. 8003568: f107 0318 add.w r3, r7, #24
  7086. 800356c: 22c0 movs r2, #192 @ 0xc0
  7087. 800356e: 2100 movs r1, #0
  7088. 8003570: 4618 mov r0, r3
  7089. 8003572: f013 f8f0 bl 8016756 <memset>
  7090. if(huart->Instance==UART8)
  7091. 8003576: 687b ldr r3, [r7, #4]
  7092. 8003578: 681b ldr r3, [r3, #0]
  7093. 800357a: 4a55 ldr r2, [pc, #340] @ (80036d0 <HAL_UART_MspInit+0x180>)
  7094. 800357c: 4293 cmp r3, r2
  7095. 800357e: d14e bne.n 800361e <HAL_UART_MspInit+0xce>
  7096. /* USER CODE END UART8_MspInit 0 */
  7097. /** Initializes the peripherals clock
  7098. */
  7099. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_UART8;
  7100. 8003580: f04f 0202 mov.w r2, #2
  7101. 8003584: f04f 0300 mov.w r3, #0
  7102. 8003588: e9c7 2306 strd r2, r3, [r7, #24]
  7103. PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
  7104. 800358c: 2300 movs r3, #0
  7105. 800358e: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  7106. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  7107. 8003592: f107 0318 add.w r3, r7, #24
  7108. 8003596: 4618 mov r0, r3
  7109. 8003598: f007 fe32 bl 800b200 <HAL_RCCEx_PeriphCLKConfig>
  7110. 800359c: 4603 mov r3, r0
  7111. 800359e: 2b00 cmp r3, #0
  7112. 80035a0: d001 beq.n 80035a6 <HAL_UART_MspInit+0x56>
  7113. {
  7114. Error_Handler();
  7115. 80035a2: f7fe fa3d bl 8001a20 <Error_Handler>
  7116. }
  7117. /* Peripheral clock enable */
  7118. __HAL_RCC_UART8_CLK_ENABLE();
  7119. 80035a6: 4b4b ldr r3, [pc, #300] @ (80036d4 <HAL_UART_MspInit+0x184>)
  7120. 80035a8: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  7121. 80035ac: 4a49 ldr r2, [pc, #292] @ (80036d4 <HAL_UART_MspInit+0x184>)
  7122. 80035ae: f043 4300 orr.w r3, r3, #2147483648 @ 0x80000000
  7123. 80035b2: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  7124. 80035b6: 4b47 ldr r3, [pc, #284] @ (80036d4 <HAL_UART_MspInit+0x184>)
  7125. 80035b8: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  7126. 80035bc: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000
  7127. 80035c0: 617b str r3, [r7, #20]
  7128. 80035c2: 697b ldr r3, [r7, #20]
  7129. __HAL_RCC_GPIOE_CLK_ENABLE();
  7130. 80035c4: 4b43 ldr r3, [pc, #268] @ (80036d4 <HAL_UART_MspInit+0x184>)
  7131. 80035c6: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7132. 80035ca: 4a42 ldr r2, [pc, #264] @ (80036d4 <HAL_UART_MspInit+0x184>)
  7133. 80035cc: f043 0310 orr.w r3, r3, #16
  7134. 80035d0: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7135. 80035d4: 4b3f ldr r3, [pc, #252] @ (80036d4 <HAL_UART_MspInit+0x184>)
  7136. 80035d6: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7137. 80035da: f003 0310 and.w r3, r3, #16
  7138. 80035de: 613b str r3, [r7, #16]
  7139. 80035e0: 693b ldr r3, [r7, #16]
  7140. /**UART8 GPIO Configuration
  7141. PE0 ------> UART8_RX
  7142. PE1 ------> UART8_TX
  7143. */
  7144. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
  7145. 80035e2: 2303 movs r3, #3
  7146. 80035e4: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  7147. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  7148. 80035e8: 2302 movs r3, #2
  7149. 80035ea: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  7150. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7151. 80035ee: 2300 movs r3, #0
  7152. 80035f0: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  7153. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  7154. 80035f4: 2300 movs r3, #0
  7155. 80035f6: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  7156. GPIO_InitStruct.Alternate = GPIO_AF8_UART8;
  7157. 80035fa: 2308 movs r3, #8
  7158. 80035fc: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  7159. HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  7160. 8003600: f107 03dc add.w r3, r7, #220 @ 0xdc
  7161. 8003604: 4619 mov r1, r3
  7162. 8003606: 4834 ldr r0, [pc, #208] @ (80036d8 <HAL_UART_MspInit+0x188>)
  7163. 8003608: f006 fa72 bl 8009af0 <HAL_GPIO_Init>
  7164. /* UART8 interrupt Init */
  7165. HAL_NVIC_SetPriority(UART8_IRQn, 5, 0);
  7166. 800360c: 2200 movs r2, #0
  7167. 800360e: 2105 movs r1, #5
  7168. 8003610: 2053 movs r0, #83 @ 0x53
  7169. 8003612: f002 ff3b bl 800648c <HAL_NVIC_SetPriority>
  7170. HAL_NVIC_EnableIRQ(UART8_IRQn);
  7171. 8003616: 2053 movs r0, #83 @ 0x53
  7172. 8003618: f002 ff52 bl 80064c0 <HAL_NVIC_EnableIRQ>
  7173. /* USER CODE BEGIN USART1_MspInit 1 */
  7174. /* USER CODE END USART1_MspInit 1 */
  7175. }
  7176. }
  7177. 800361c: e053 b.n 80036c6 <HAL_UART_MspInit+0x176>
  7178. else if(huart->Instance==USART1)
  7179. 800361e: 687b ldr r3, [r7, #4]
  7180. 8003620: 681b ldr r3, [r3, #0]
  7181. 8003622: 4a2e ldr r2, [pc, #184] @ (80036dc <HAL_UART_MspInit+0x18c>)
  7182. 8003624: 4293 cmp r3, r2
  7183. 8003626: d14e bne.n 80036c6 <HAL_UART_MspInit+0x176>
  7184. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1;
  7185. 8003628: f04f 0201 mov.w r2, #1
  7186. 800362c: f04f 0300 mov.w r3, #0
  7187. 8003630: e9c7 2306 strd r2, r3, [r7, #24]
  7188. PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2;
  7189. 8003634: 2300 movs r3, #0
  7190. 8003636: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  7191. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  7192. 800363a: f107 0318 add.w r3, r7, #24
  7193. 800363e: 4618 mov r0, r3
  7194. 8003640: f007 fdde bl 800b200 <HAL_RCCEx_PeriphCLKConfig>
  7195. 8003644: 4603 mov r3, r0
  7196. 8003646: 2b00 cmp r3, #0
  7197. 8003648: d001 beq.n 800364e <HAL_UART_MspInit+0xfe>
  7198. Error_Handler();
  7199. 800364a: f7fe f9e9 bl 8001a20 <Error_Handler>
  7200. __HAL_RCC_USART1_CLK_ENABLE();
  7201. 800364e: 4b21 ldr r3, [pc, #132] @ (80036d4 <HAL_UART_MspInit+0x184>)
  7202. 8003650: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  7203. 8003654: 4a1f ldr r2, [pc, #124] @ (80036d4 <HAL_UART_MspInit+0x184>)
  7204. 8003656: f043 0310 orr.w r3, r3, #16
  7205. 800365a: f8c2 30f0 str.w r3, [r2, #240] @ 0xf0
  7206. 800365e: 4b1d ldr r3, [pc, #116] @ (80036d4 <HAL_UART_MspInit+0x184>)
  7207. 8003660: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  7208. 8003664: f003 0310 and.w r3, r3, #16
  7209. 8003668: 60fb str r3, [r7, #12]
  7210. 800366a: 68fb ldr r3, [r7, #12]
  7211. __HAL_RCC_GPIOB_CLK_ENABLE();
  7212. 800366c: 4b19 ldr r3, [pc, #100] @ (80036d4 <HAL_UART_MspInit+0x184>)
  7213. 800366e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7214. 8003672: 4a18 ldr r2, [pc, #96] @ (80036d4 <HAL_UART_MspInit+0x184>)
  7215. 8003674: f043 0302 orr.w r3, r3, #2
  7216. 8003678: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7217. 800367c: 4b15 ldr r3, [pc, #84] @ (80036d4 <HAL_UART_MspInit+0x184>)
  7218. 800367e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7219. 8003682: f003 0302 and.w r3, r3, #2
  7220. 8003686: 60bb str r3, [r7, #8]
  7221. 8003688: 68bb ldr r3, [r7, #8]
  7222. GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
  7223. 800368a: f44f 4340 mov.w r3, #49152 @ 0xc000
  7224. 800368e: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  7225. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  7226. 8003692: 2302 movs r3, #2
  7227. 8003694: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  7228. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7229. 8003698: 2300 movs r3, #0
  7230. 800369a: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  7231. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  7232. 800369e: 2300 movs r3, #0
  7233. 80036a0: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  7234. GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
  7235. 80036a4: 2304 movs r3, #4
  7236. 80036a6: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  7237. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  7238. 80036aa: f107 03dc add.w r3, r7, #220 @ 0xdc
  7239. 80036ae: 4619 mov r1, r3
  7240. 80036b0: 480b ldr r0, [pc, #44] @ (80036e0 <HAL_UART_MspInit+0x190>)
  7241. 80036b2: f006 fa1d bl 8009af0 <HAL_GPIO_Init>
  7242. HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
  7243. 80036b6: 2200 movs r2, #0
  7244. 80036b8: 2105 movs r1, #5
  7245. 80036ba: 2025 movs r0, #37 @ 0x25
  7246. 80036bc: f002 fee6 bl 800648c <HAL_NVIC_SetPriority>
  7247. HAL_NVIC_EnableIRQ(USART1_IRQn);
  7248. 80036c0: 2025 movs r0, #37 @ 0x25
  7249. 80036c2: f002 fefd bl 80064c0 <HAL_NVIC_EnableIRQ>
  7250. }
  7251. 80036c6: bf00 nop
  7252. 80036c8: 37f0 adds r7, #240 @ 0xf0
  7253. 80036ca: 46bd mov sp, r7
  7254. 80036cc: bd80 pop {r7, pc}
  7255. 80036ce: bf00 nop
  7256. 80036d0: 40007c00 .word 0x40007c00
  7257. 80036d4: 58024400 .word 0x58024400
  7258. 80036d8: 58021000 .word 0x58021000
  7259. 80036dc: 40011000 .word 0x40011000
  7260. 80036e0: 58020400 .word 0x58020400
  7261. 080036e4 <HAL_InitTick>:
  7262. * reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig().
  7263. * @param TickPriority: Tick interrupt priority.
  7264. * @retval HAL status
  7265. */
  7266. HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
  7267. {
  7268. 80036e4: b580 push {r7, lr}
  7269. 80036e6: b090 sub sp, #64 @ 0x40
  7270. 80036e8: af00 add r7, sp, #0
  7271. 80036ea: 6078 str r0, [r7, #4]
  7272. uint32_t uwTimclock, uwAPB1Prescaler;
  7273. uint32_t uwPrescalerValue;
  7274. uint32_t pFLatency;
  7275. /*Configure the TIM6 IRQ priority */
  7276. if (TickPriority < (1UL << __NVIC_PRIO_BITS))
  7277. 80036ec: 687b ldr r3, [r7, #4]
  7278. 80036ee: 2b0f cmp r3, #15
  7279. 80036f0: d827 bhi.n 8003742 <HAL_InitTick+0x5e>
  7280. {
  7281. HAL_NVIC_SetPriority(TIM6_DAC_IRQn, TickPriority ,0U);
  7282. 80036f2: 2200 movs r2, #0
  7283. 80036f4: 6879 ldr r1, [r7, #4]
  7284. 80036f6: 2036 movs r0, #54 @ 0x36
  7285. 80036f8: f002 fec8 bl 800648c <HAL_NVIC_SetPriority>
  7286. /* Enable the TIM6 global Interrupt */
  7287. HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
  7288. 80036fc: 2036 movs r0, #54 @ 0x36
  7289. 80036fe: f002 fedf bl 80064c0 <HAL_NVIC_EnableIRQ>
  7290. uwTickPrio = TickPriority;
  7291. 8003702: 4a29 ldr r2, [pc, #164] @ (80037a8 <HAL_InitTick+0xc4>)
  7292. 8003704: 687b ldr r3, [r7, #4]
  7293. 8003706: 6013 str r3, [r2, #0]
  7294. {
  7295. return HAL_ERROR;
  7296. }
  7297. /* Enable TIM6 clock */
  7298. __HAL_RCC_TIM6_CLK_ENABLE();
  7299. 8003708: 4b28 ldr r3, [pc, #160] @ (80037ac <HAL_InitTick+0xc8>)
  7300. 800370a: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  7301. 800370e: 4a27 ldr r2, [pc, #156] @ (80037ac <HAL_InitTick+0xc8>)
  7302. 8003710: f043 0310 orr.w r3, r3, #16
  7303. 8003714: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  7304. 8003718: 4b24 ldr r3, [pc, #144] @ (80037ac <HAL_InitTick+0xc8>)
  7305. 800371a: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  7306. 800371e: f003 0310 and.w r3, r3, #16
  7307. 8003722: 60fb str r3, [r7, #12]
  7308. 8003724: 68fb ldr r3, [r7, #12]
  7309. /* Get clock configuration */
  7310. HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);
  7311. 8003726: f107 0210 add.w r2, r7, #16
  7312. 800372a: f107 0314 add.w r3, r7, #20
  7313. 800372e: 4611 mov r1, r2
  7314. 8003730: 4618 mov r0, r3
  7315. 8003732: f007 fd23 bl 800b17c <HAL_RCC_GetClockConfig>
  7316. /* Get APB1 prescaler */
  7317. uwAPB1Prescaler = clkconfig.APB1CLKDivider;
  7318. 8003736: 6abb ldr r3, [r7, #40] @ 0x28
  7319. 8003738: 63bb str r3, [r7, #56] @ 0x38
  7320. /* Compute TIM6 clock */
  7321. if (uwAPB1Prescaler == RCC_HCLK_DIV1)
  7322. 800373a: 6bbb ldr r3, [r7, #56] @ 0x38
  7323. 800373c: 2b00 cmp r3, #0
  7324. 800373e: d106 bne.n 800374e <HAL_InitTick+0x6a>
  7325. 8003740: e001 b.n 8003746 <HAL_InitTick+0x62>
  7326. return HAL_ERROR;
  7327. 8003742: 2301 movs r3, #1
  7328. 8003744: e02b b.n 800379e <HAL_InitTick+0xba>
  7329. {
  7330. uwTimclock = HAL_RCC_GetPCLK1Freq();
  7331. 8003746: f007 fced bl 800b124 <HAL_RCC_GetPCLK1Freq>
  7332. 800374a: 63f8 str r0, [r7, #60] @ 0x3c
  7333. 800374c: e004 b.n 8003758 <HAL_InitTick+0x74>
  7334. }
  7335. else
  7336. {
  7337. uwTimclock = 2UL * HAL_RCC_GetPCLK1Freq();
  7338. 800374e: f007 fce9 bl 800b124 <HAL_RCC_GetPCLK1Freq>
  7339. 8003752: 4603 mov r3, r0
  7340. 8003754: 005b lsls r3, r3, #1
  7341. 8003756: 63fb str r3, [r7, #60] @ 0x3c
  7342. }
  7343. /* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */
  7344. uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U);
  7345. 8003758: 6bfb ldr r3, [r7, #60] @ 0x3c
  7346. 800375a: 4a15 ldr r2, [pc, #84] @ (80037b0 <HAL_InitTick+0xcc>)
  7347. 800375c: fba2 2303 umull r2, r3, r2, r3
  7348. 8003760: 0c9b lsrs r3, r3, #18
  7349. 8003762: 3b01 subs r3, #1
  7350. 8003764: 637b str r3, [r7, #52] @ 0x34
  7351. /* Initialize TIM6 */
  7352. htim6.Instance = TIM6;
  7353. 8003766: 4b13 ldr r3, [pc, #76] @ (80037b4 <HAL_InitTick+0xd0>)
  7354. 8003768: 4a13 ldr r2, [pc, #76] @ (80037b8 <HAL_InitTick+0xd4>)
  7355. 800376a: 601a str r2, [r3, #0]
  7356. + Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base.
  7357. + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.
  7358. + ClockDivision = 0
  7359. + Counter direction = Up
  7360. */
  7361. htim6.Init.Period = (1000000U / 1000U) - 1U;
  7362. 800376c: 4b11 ldr r3, [pc, #68] @ (80037b4 <HAL_InitTick+0xd0>)
  7363. 800376e: f240 32e7 movw r2, #999 @ 0x3e7
  7364. 8003772: 60da str r2, [r3, #12]
  7365. htim6.Init.Prescaler = uwPrescalerValue;
  7366. 8003774: 4a0f ldr r2, [pc, #60] @ (80037b4 <HAL_InitTick+0xd0>)
  7367. 8003776: 6b7b ldr r3, [r7, #52] @ 0x34
  7368. 8003778: 6053 str r3, [r2, #4]
  7369. htim6.Init.ClockDivision = 0;
  7370. 800377a: 4b0e ldr r3, [pc, #56] @ (80037b4 <HAL_InitTick+0xd0>)
  7371. 800377c: 2200 movs r2, #0
  7372. 800377e: 611a str r2, [r3, #16]
  7373. htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
  7374. 8003780: 4b0c ldr r3, [pc, #48] @ (80037b4 <HAL_InitTick+0xd0>)
  7375. 8003782: 2200 movs r2, #0
  7376. 8003784: 609a str r2, [r3, #8]
  7377. if(HAL_TIM_Base_Init(&htim6) == HAL_OK)
  7378. 8003786: 480b ldr r0, [pc, #44] @ (80037b4 <HAL_InitTick+0xd0>)
  7379. 8003788: f00a fa7e bl 800dc88 <HAL_TIM_Base_Init>
  7380. 800378c: 4603 mov r3, r0
  7381. 800378e: 2b00 cmp r3, #0
  7382. 8003790: d104 bne.n 800379c <HAL_InitTick+0xb8>
  7383. {
  7384. /* Start the TIM time Base generation in interrupt mode */
  7385. return HAL_TIM_Base_Start_IT(&htim6);
  7386. 8003792: 4808 ldr r0, [pc, #32] @ (80037b4 <HAL_InitTick+0xd0>)
  7387. 8003794: f00a fb40 bl 800de18 <HAL_TIM_Base_Start_IT>
  7388. 8003798: 4603 mov r3, r0
  7389. 800379a: e000 b.n 800379e <HAL_InitTick+0xba>
  7390. }
  7391. /* Return function status */
  7392. return HAL_ERROR;
  7393. 800379c: 2301 movs r3, #1
  7394. }
  7395. 800379e: 4618 mov r0, r3
  7396. 80037a0: 3740 adds r7, #64 @ 0x40
  7397. 80037a2: 46bd mov sp, r7
  7398. 80037a4: bd80 pop {r7, pc}
  7399. 80037a6: bf00 nop
  7400. 80037a8: 2400003c .word 0x2400003c
  7401. 80037ac: 58024400 .word 0x58024400
  7402. 80037b0: 431bde83 .word 0x431bde83
  7403. 80037b4: 240007c8 .word 0x240007c8
  7404. 80037b8: 40001000 .word 0x40001000
  7405. 080037bc <NMI_Handler>:
  7406. /******************************************************************************/
  7407. /**
  7408. * @brief This function handles Non maskable interrupt.
  7409. */
  7410. void NMI_Handler(void)
  7411. {
  7412. 80037bc: b480 push {r7}
  7413. 80037be: af00 add r7, sp, #0
  7414. /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
  7415. /* USER CODE END NonMaskableInt_IRQn 0 */
  7416. /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
  7417. while (1)
  7418. 80037c0: bf00 nop
  7419. 80037c2: e7fd b.n 80037c0 <NMI_Handler+0x4>
  7420. 080037c4 <HardFault_Handler>:
  7421. /**
  7422. * @brief This function handles Hard fault interrupt.
  7423. */
  7424. void HardFault_Handler(void)
  7425. {
  7426. 80037c4: b480 push {r7}
  7427. 80037c6: af00 add r7, sp, #0
  7428. /* USER CODE BEGIN HardFault_IRQn 0 */
  7429. /* USER CODE END HardFault_IRQn 0 */
  7430. while (1)
  7431. 80037c8: bf00 nop
  7432. 80037ca: e7fd b.n 80037c8 <HardFault_Handler+0x4>
  7433. 080037cc <MemManage_Handler>:
  7434. /**
  7435. * @brief This function handles Memory management fault.
  7436. */
  7437. void MemManage_Handler(void)
  7438. {
  7439. 80037cc: b480 push {r7}
  7440. 80037ce: af00 add r7, sp, #0
  7441. /* USER CODE BEGIN MemoryManagement_IRQn 0 */
  7442. /* USER CODE END MemoryManagement_IRQn 0 */
  7443. while (1)
  7444. 80037d0: bf00 nop
  7445. 80037d2: e7fd b.n 80037d0 <MemManage_Handler+0x4>
  7446. 080037d4 <BusFault_Handler>:
  7447. /**
  7448. * @brief This function handles Pre-fetch fault, memory access fault.
  7449. */
  7450. void BusFault_Handler(void)
  7451. {
  7452. 80037d4: b480 push {r7}
  7453. 80037d6: af00 add r7, sp, #0
  7454. /* USER CODE BEGIN BusFault_IRQn 0 */
  7455. /* USER CODE END BusFault_IRQn 0 */
  7456. while (1)
  7457. 80037d8: bf00 nop
  7458. 80037da: e7fd b.n 80037d8 <BusFault_Handler+0x4>
  7459. 080037dc <UsageFault_Handler>:
  7460. /**
  7461. * @brief This function handles Undefined instruction or illegal state.
  7462. */
  7463. void UsageFault_Handler(void)
  7464. {
  7465. 80037dc: b480 push {r7}
  7466. 80037de: af00 add r7, sp, #0
  7467. /* USER CODE BEGIN UsageFault_IRQn 0 */
  7468. /* USER CODE END UsageFault_IRQn 0 */
  7469. while (1)
  7470. 80037e0: bf00 nop
  7471. 80037e2: e7fd b.n 80037e0 <UsageFault_Handler+0x4>
  7472. 080037e4 <DebugMon_Handler>:
  7473. /**
  7474. * @brief This function handles Debug monitor.
  7475. */
  7476. void DebugMon_Handler(void)
  7477. {
  7478. 80037e4: b480 push {r7}
  7479. 80037e6: af00 add r7, sp, #0
  7480. /* USER CODE END DebugMonitor_IRQn 0 */
  7481. /* USER CODE BEGIN DebugMonitor_IRQn 1 */
  7482. /* USER CODE END DebugMonitor_IRQn 1 */
  7483. }
  7484. 80037e8: bf00 nop
  7485. 80037ea: 46bd mov sp, r7
  7486. 80037ec: f85d 7b04 ldr.w r7, [sp], #4
  7487. 80037f0: 4770 bx lr
  7488. 080037f2 <RCC_IRQHandler>:
  7489. /**
  7490. * @brief This function handles RCC global interrupt.
  7491. */
  7492. void RCC_IRQHandler(void)
  7493. {
  7494. 80037f2: b480 push {r7}
  7495. 80037f4: af00 add r7, sp, #0
  7496. /* USER CODE END RCC_IRQn 0 */
  7497. /* USER CODE BEGIN RCC_IRQn 1 */
  7498. /* USER CODE END RCC_IRQn 1 */
  7499. }
  7500. 80037f6: bf00 nop
  7501. 80037f8: 46bd mov sp, r7
  7502. 80037fa: f85d 7b04 ldr.w r7, [sp], #4
  7503. 80037fe: 4770 bx lr
  7504. 08003800 <DMA1_Stream0_IRQHandler>:
  7505. /**
  7506. * @brief This function handles DMA1 stream0 global interrupt.
  7507. */
  7508. void DMA1_Stream0_IRQHandler(void)
  7509. {
  7510. 8003800: b580 push {r7, lr}
  7511. 8003802: af00 add r7, sp, #0
  7512. /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */
  7513. /* USER CODE END DMA1_Stream0_IRQn 0 */
  7514. HAL_DMA_IRQHandler(&hdma_adc1);
  7515. 8003804: 4802 ldr r0, [pc, #8] @ (8003810 <DMA1_Stream0_IRQHandler+0x10>)
  7516. 8003806: f004 fe61 bl 80084cc <HAL_DMA_IRQHandler>
  7517. /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */
  7518. /* USER CODE END DMA1_Stream0_IRQn 1 */
  7519. }
  7520. 800380a: bf00 nop
  7521. 800380c: bd80 pop {r7, pc}
  7522. 800380e: bf00 nop
  7523. 8003810: 2400026c .word 0x2400026c
  7524. 08003814 <DMA1_Stream1_IRQHandler>:
  7525. /**
  7526. * @brief This function handles DMA1 stream1 global interrupt.
  7527. */
  7528. void DMA1_Stream1_IRQHandler(void)
  7529. {
  7530. 8003814: b580 push {r7, lr}
  7531. 8003816: af00 add r7, sp, #0
  7532. /* USER CODE BEGIN DMA1_Stream1_IRQn 0 */
  7533. /* USER CODE END DMA1_Stream1_IRQn 0 */
  7534. HAL_DMA_IRQHandler(&hdma_adc2);
  7535. 8003818: 4802 ldr r0, [pc, #8] @ (8003824 <DMA1_Stream1_IRQHandler+0x10>)
  7536. 800381a: f004 fe57 bl 80084cc <HAL_DMA_IRQHandler>
  7537. /* USER CODE BEGIN DMA1_Stream1_IRQn 1 */
  7538. /* USER CODE END DMA1_Stream1_IRQn 1 */
  7539. }
  7540. 800381e: bf00 nop
  7541. 8003820: bd80 pop {r7, pc}
  7542. 8003822: bf00 nop
  7543. 8003824: 240002e4 .word 0x240002e4
  7544. 08003828 <DMA1_Stream2_IRQHandler>:
  7545. /**
  7546. * @brief This function handles DMA1 stream2 global interrupt.
  7547. */
  7548. void DMA1_Stream2_IRQHandler(void)
  7549. {
  7550. 8003828: b580 push {r7, lr}
  7551. 800382a: af00 add r7, sp, #0
  7552. /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */
  7553. /* USER CODE END DMA1_Stream2_IRQn 0 */
  7554. HAL_DMA_IRQHandler(&hdma_adc3);
  7555. 800382c: 4802 ldr r0, [pc, #8] @ (8003838 <DMA1_Stream2_IRQHandler+0x10>)
  7556. 800382e: f004 fe4d bl 80084cc <HAL_DMA_IRQHandler>
  7557. /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */
  7558. /* USER CODE END DMA1_Stream2_IRQn 1 */
  7559. }
  7560. 8003832: bf00 nop
  7561. 8003834: bd80 pop {r7, pc}
  7562. 8003836: bf00 nop
  7563. 8003838: 2400035c .word 0x2400035c
  7564. 0800383c <EXTI9_5_IRQHandler>:
  7565. /**
  7566. * @brief This function handles EXTI line[9:5] interrupts.
  7567. */
  7568. void EXTI9_5_IRQHandler(void)
  7569. {
  7570. 800383c: b580 push {r7, lr}
  7571. 800383e: af00 add r7, sp, #0
  7572. /* USER CODE BEGIN EXTI9_5_IRQn 0 */
  7573. /* USER CODE END EXTI9_5_IRQn 0 */
  7574. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);
  7575. 8003840: f44f 7080 mov.w r0, #256 @ 0x100
  7576. 8003844: f006 fb4f bl 8009ee6 <HAL_GPIO_EXTI_IRQHandler>
  7577. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);
  7578. 8003848: f44f 7000 mov.w r0, #512 @ 0x200
  7579. 800384c: f006 fb4b bl 8009ee6 <HAL_GPIO_EXTI_IRQHandler>
  7580. /* USER CODE BEGIN EXTI9_5_IRQn 1 */
  7581. /* USER CODE END EXTI9_5_IRQn 1 */
  7582. }
  7583. 8003850: bf00 nop
  7584. 8003852: bd80 pop {r7, pc}
  7585. 08003854 <TIM2_IRQHandler>:
  7586. /**
  7587. * @brief This function handles TIM2 global interrupt.
  7588. */
  7589. void TIM2_IRQHandler(void)
  7590. {
  7591. 8003854: b580 push {r7, lr}
  7592. 8003856: af00 add r7, sp, #0
  7593. /* USER CODE BEGIN TIM2_IRQn 0 */
  7594. /* USER CODE END TIM2_IRQn 0 */
  7595. HAL_TIM_IRQHandler(&htim2);
  7596. 8003858: 4802 ldr r0, [pc, #8] @ (8003864 <TIM2_IRQHandler+0x10>)
  7597. 800385a: f00a fd51 bl 800e300 <HAL_TIM_IRQHandler>
  7598. /* USER CODE BEGIN TIM2_IRQn 1 */
  7599. /* USER CODE END TIM2_IRQn 1 */
  7600. }
  7601. 800385e: bf00 nop
  7602. 8003860: bd80 pop {r7, pc}
  7603. 8003862: bf00 nop
  7604. 8003864: 2400046c .word 0x2400046c
  7605. 08003868 <USART1_IRQHandler>:
  7606. /**
  7607. * @brief This function handles USART1 global interrupt.
  7608. */
  7609. void USART1_IRQHandler(void)
  7610. {
  7611. 8003868: b580 push {r7, lr}
  7612. 800386a: af00 add r7, sp, #0
  7613. /* USER CODE BEGIN USART1_IRQn 0 */
  7614. /* USER CODE END USART1_IRQn 0 */
  7615. HAL_UART_IRQHandler(&huart1);
  7616. 800386c: 4802 ldr r0, [pc, #8] @ (8003878 <USART1_IRQHandler+0x10>)
  7617. 800386e: f00b ff99 bl 800f7a4 <HAL_UART_IRQHandler>
  7618. /* USER CODE BEGIN USART1_IRQn 1 */
  7619. /* USER CODE END USART1_IRQn 1 */
  7620. }
  7621. 8003872: bf00 nop
  7622. 8003874: bd80 pop {r7, pc}
  7623. 8003876: bf00 nop
  7624. 8003878: 24000598 .word 0x24000598
  7625. 0800387c <EXTI15_10_IRQHandler>:
  7626. /**
  7627. * @brief This function handles EXTI line[15:10] interrupts.
  7628. */
  7629. void EXTI15_10_IRQHandler(void)
  7630. {
  7631. 800387c: b580 push {r7, lr}
  7632. 800387e: af00 add r7, sp, #0
  7633. /* USER CODE BEGIN EXTI15_10_IRQn 0 */
  7634. /* USER CODE END EXTI15_10_IRQn 0 */
  7635. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
  7636. 8003880: f44f 6080 mov.w r0, #1024 @ 0x400
  7637. 8003884: f006 fb2f bl 8009ee6 <HAL_GPIO_EXTI_IRQHandler>
  7638. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
  7639. 8003888: f44f 6000 mov.w r0, #2048 @ 0x800
  7640. 800388c: f006 fb2b bl 8009ee6 <HAL_GPIO_EXTI_IRQHandler>
  7641. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
  7642. 8003890: f44f 5080 mov.w r0, #4096 @ 0x1000
  7643. 8003894: f006 fb27 bl 8009ee6 <HAL_GPIO_EXTI_IRQHandler>
  7644. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
  7645. 8003898: f44f 5000 mov.w r0, #8192 @ 0x2000
  7646. 800389c: f006 fb23 bl 8009ee6 <HAL_GPIO_EXTI_IRQHandler>
  7647. /* USER CODE BEGIN EXTI15_10_IRQn 1 */
  7648. /* USER CODE END EXTI15_10_IRQn 1 */
  7649. }
  7650. 80038a0: bf00 nop
  7651. 80038a2: bd80 pop {r7, pc}
  7652. 080038a4 <TIM6_DAC_IRQHandler>:
  7653. /**
  7654. * @brief This function handles TIM6 global interrupt, DAC1_CH1 and DAC1_CH2 underrun error interrupts.
  7655. */
  7656. void TIM6_DAC_IRQHandler(void)
  7657. {
  7658. 80038a4: b580 push {r7, lr}
  7659. 80038a6: af00 add r7, sp, #0
  7660. /* USER CODE BEGIN TIM6_DAC_IRQn 0 */
  7661. /* USER CODE END TIM6_DAC_IRQn 0 */
  7662. if (hdac1.State != HAL_DAC_STATE_RESET) {
  7663. 80038a8: 4b06 ldr r3, [pc, #24] @ (80038c4 <TIM6_DAC_IRQHandler+0x20>)
  7664. 80038aa: 791b ldrb r3, [r3, #4]
  7665. 80038ac: b2db uxtb r3, r3
  7666. 80038ae: 2b00 cmp r3, #0
  7667. 80038b0: d002 beq.n 80038b8 <TIM6_DAC_IRQHandler+0x14>
  7668. HAL_DAC_IRQHandler(&hdac1);
  7669. 80038b2: 4804 ldr r0, [pc, #16] @ (80038c4 <TIM6_DAC_IRQHandler+0x20>)
  7670. 80038b4: f003 f909 bl 8006aca <HAL_DAC_IRQHandler>
  7671. }
  7672. HAL_TIM_IRQHandler(&htim6);
  7673. 80038b8: 4803 ldr r0, [pc, #12] @ (80038c8 <TIM6_DAC_IRQHandler+0x24>)
  7674. 80038ba: f00a fd21 bl 800e300 <HAL_TIM_IRQHandler>
  7675. /* USER CODE BEGIN TIM6_DAC_IRQn 1 */
  7676. /* USER CODE END TIM6_DAC_IRQn 1 */
  7677. }
  7678. 80038be: bf00 nop
  7679. 80038c0: bd80 pop {r7, pc}
  7680. 80038c2: bf00 nop
  7681. 80038c4: 240003f8 .word 0x240003f8
  7682. 80038c8: 240007c8 .word 0x240007c8
  7683. 080038cc <UART8_IRQHandler>:
  7684. /**
  7685. * @brief This function handles UART8 global interrupt.
  7686. */
  7687. void UART8_IRQHandler(void)
  7688. {
  7689. 80038cc: b580 push {r7, lr}
  7690. 80038ce: af00 add r7, sp, #0
  7691. /* USER CODE BEGIN UART8_IRQn 0 */
  7692. /* USER CODE END UART8_IRQn 0 */
  7693. HAL_UART_IRQHandler(&huart8);
  7694. 80038d0: 4802 ldr r0, [pc, #8] @ (80038dc <UART8_IRQHandler+0x10>)
  7695. 80038d2: f00b ff67 bl 800f7a4 <HAL_UART_IRQHandler>
  7696. /* USER CODE BEGIN UART8_IRQn 1 */
  7697. /* USER CODE END UART8_IRQn 1 */
  7698. }
  7699. 80038d6: bf00 nop
  7700. 80038d8: bd80 pop {r7, pc}
  7701. 80038da: bf00 nop
  7702. 80038dc: 24000504 .word 0x24000504
  7703. 080038e0 <_read>:
  7704. _kill(status, -1);
  7705. while (1) {} /* Make sure we hang here */
  7706. }
  7707. __attribute__((weak)) int _read(int file, char *ptr, int len)
  7708. {
  7709. 80038e0: b580 push {r7, lr}
  7710. 80038e2: b086 sub sp, #24
  7711. 80038e4: af00 add r7, sp, #0
  7712. 80038e6: 60f8 str r0, [r7, #12]
  7713. 80038e8: 60b9 str r1, [r7, #8]
  7714. 80038ea: 607a str r2, [r7, #4]
  7715. (void)file;
  7716. int DataIdx;
  7717. for (DataIdx = 0; DataIdx < len; DataIdx++)
  7718. 80038ec: 2300 movs r3, #0
  7719. 80038ee: 617b str r3, [r7, #20]
  7720. 80038f0: e00a b.n 8003908 <_read+0x28>
  7721. {
  7722. *ptr++ = __io_getchar();
  7723. 80038f2: f3af 8000 nop.w
  7724. 80038f6: 4601 mov r1, r0
  7725. 80038f8: 68bb ldr r3, [r7, #8]
  7726. 80038fa: 1c5a adds r2, r3, #1
  7727. 80038fc: 60ba str r2, [r7, #8]
  7728. 80038fe: b2ca uxtb r2, r1
  7729. 8003900: 701a strb r2, [r3, #0]
  7730. for (DataIdx = 0; DataIdx < len; DataIdx++)
  7731. 8003902: 697b ldr r3, [r7, #20]
  7732. 8003904: 3301 adds r3, #1
  7733. 8003906: 617b str r3, [r7, #20]
  7734. 8003908: 697a ldr r2, [r7, #20]
  7735. 800390a: 687b ldr r3, [r7, #4]
  7736. 800390c: 429a cmp r2, r3
  7737. 800390e: dbf0 blt.n 80038f2 <_read+0x12>
  7738. }
  7739. return len;
  7740. 8003910: 687b ldr r3, [r7, #4]
  7741. }
  7742. 8003912: 4618 mov r0, r3
  7743. 8003914: 3718 adds r7, #24
  7744. 8003916: 46bd mov sp, r7
  7745. 8003918: bd80 pop {r7, pc}
  7746. 0800391a <_write>:
  7747. __attribute__((weak)) int _write(int file, char *ptr, int len)
  7748. {
  7749. 800391a: b580 push {r7, lr}
  7750. 800391c: b086 sub sp, #24
  7751. 800391e: af00 add r7, sp, #0
  7752. 8003920: 60f8 str r0, [r7, #12]
  7753. 8003922: 60b9 str r1, [r7, #8]
  7754. 8003924: 607a str r2, [r7, #4]
  7755. (void)file;
  7756. int DataIdx;
  7757. for (DataIdx = 0; DataIdx < len; DataIdx++)
  7758. 8003926: 2300 movs r3, #0
  7759. 8003928: 617b str r3, [r7, #20]
  7760. 800392a: e009 b.n 8003940 <_write+0x26>
  7761. {
  7762. __io_putchar(*ptr++);
  7763. 800392c: 68bb ldr r3, [r7, #8]
  7764. 800392e: 1c5a adds r2, r3, #1
  7765. 8003930: 60ba str r2, [r7, #8]
  7766. 8003932: 781b ldrb r3, [r3, #0]
  7767. 8003934: 4618 mov r0, r3
  7768. 8003936: f7fc fea7 bl 8000688 <__io_putchar>
  7769. for (DataIdx = 0; DataIdx < len; DataIdx++)
  7770. 800393a: 697b ldr r3, [r7, #20]
  7771. 800393c: 3301 adds r3, #1
  7772. 800393e: 617b str r3, [r7, #20]
  7773. 8003940: 697a ldr r2, [r7, #20]
  7774. 8003942: 687b ldr r3, [r7, #4]
  7775. 8003944: 429a cmp r2, r3
  7776. 8003946: dbf1 blt.n 800392c <_write+0x12>
  7777. }
  7778. return len;
  7779. 8003948: 687b ldr r3, [r7, #4]
  7780. }
  7781. 800394a: 4618 mov r0, r3
  7782. 800394c: 3718 adds r7, #24
  7783. 800394e: 46bd mov sp, r7
  7784. 8003950: bd80 pop {r7, pc}
  7785. 08003952 <_close>:
  7786. int _close(int file)
  7787. {
  7788. 8003952: b480 push {r7}
  7789. 8003954: b083 sub sp, #12
  7790. 8003956: af00 add r7, sp, #0
  7791. 8003958: 6078 str r0, [r7, #4]
  7792. (void)file;
  7793. return -1;
  7794. 800395a: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  7795. }
  7796. 800395e: 4618 mov r0, r3
  7797. 8003960: 370c adds r7, #12
  7798. 8003962: 46bd mov sp, r7
  7799. 8003964: f85d 7b04 ldr.w r7, [sp], #4
  7800. 8003968: 4770 bx lr
  7801. 0800396a <_fstat>:
  7802. int _fstat(int file, struct stat *st)
  7803. {
  7804. 800396a: b480 push {r7}
  7805. 800396c: b083 sub sp, #12
  7806. 800396e: af00 add r7, sp, #0
  7807. 8003970: 6078 str r0, [r7, #4]
  7808. 8003972: 6039 str r1, [r7, #0]
  7809. (void)file;
  7810. st->st_mode = S_IFCHR;
  7811. 8003974: 683b ldr r3, [r7, #0]
  7812. 8003976: f44f 5200 mov.w r2, #8192 @ 0x2000
  7813. 800397a: 605a str r2, [r3, #4]
  7814. return 0;
  7815. 800397c: 2300 movs r3, #0
  7816. }
  7817. 800397e: 4618 mov r0, r3
  7818. 8003980: 370c adds r7, #12
  7819. 8003982: 46bd mov sp, r7
  7820. 8003984: f85d 7b04 ldr.w r7, [sp], #4
  7821. 8003988: 4770 bx lr
  7822. 0800398a <_isatty>:
  7823. int _isatty(int file)
  7824. {
  7825. 800398a: b480 push {r7}
  7826. 800398c: b083 sub sp, #12
  7827. 800398e: af00 add r7, sp, #0
  7828. 8003990: 6078 str r0, [r7, #4]
  7829. (void)file;
  7830. return 1;
  7831. 8003992: 2301 movs r3, #1
  7832. }
  7833. 8003994: 4618 mov r0, r3
  7834. 8003996: 370c adds r7, #12
  7835. 8003998: 46bd mov sp, r7
  7836. 800399a: f85d 7b04 ldr.w r7, [sp], #4
  7837. 800399e: 4770 bx lr
  7838. 080039a0 <_lseek>:
  7839. int _lseek(int file, int ptr, int dir)
  7840. {
  7841. 80039a0: b480 push {r7}
  7842. 80039a2: b085 sub sp, #20
  7843. 80039a4: af00 add r7, sp, #0
  7844. 80039a6: 60f8 str r0, [r7, #12]
  7845. 80039a8: 60b9 str r1, [r7, #8]
  7846. 80039aa: 607a str r2, [r7, #4]
  7847. (void)file;
  7848. (void)ptr;
  7849. (void)dir;
  7850. return 0;
  7851. 80039ac: 2300 movs r3, #0
  7852. }
  7853. 80039ae: 4618 mov r0, r3
  7854. 80039b0: 3714 adds r7, #20
  7855. 80039b2: 46bd mov sp, r7
  7856. 80039b4: f85d 7b04 ldr.w r7, [sp], #4
  7857. 80039b8: 4770 bx lr
  7858. ...
  7859. 080039bc <_sbrk>:
  7860. *
  7861. * @param incr Memory size
  7862. * @return Pointer to allocated memory
  7863. */
  7864. void *_sbrk(ptrdiff_t incr)
  7865. {
  7866. 80039bc: b580 push {r7, lr}
  7867. 80039be: b086 sub sp, #24
  7868. 80039c0: af00 add r7, sp, #0
  7869. 80039c2: 6078 str r0, [r7, #4]
  7870. extern uint8_t _end; /* Symbol defined in the linker script */
  7871. extern uint8_t _estack; /* Symbol defined in the linker script */
  7872. extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */
  7873. const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size;
  7874. 80039c4: 4a14 ldr r2, [pc, #80] @ (8003a18 <_sbrk+0x5c>)
  7875. 80039c6: 4b15 ldr r3, [pc, #84] @ (8003a1c <_sbrk+0x60>)
  7876. 80039c8: 1ad3 subs r3, r2, r3
  7877. 80039ca: 617b str r3, [r7, #20]
  7878. const uint8_t *max_heap = (uint8_t *)stack_limit;
  7879. 80039cc: 697b ldr r3, [r7, #20]
  7880. 80039ce: 613b str r3, [r7, #16]
  7881. uint8_t *prev_heap_end;
  7882. /* Initialize heap end at first call */
  7883. if (NULL == __sbrk_heap_end)
  7884. 80039d0: 4b13 ldr r3, [pc, #76] @ (8003a20 <_sbrk+0x64>)
  7885. 80039d2: 681b ldr r3, [r3, #0]
  7886. 80039d4: 2b00 cmp r3, #0
  7887. 80039d6: d102 bne.n 80039de <_sbrk+0x22>
  7888. {
  7889. __sbrk_heap_end = &_end;
  7890. 80039d8: 4b11 ldr r3, [pc, #68] @ (8003a20 <_sbrk+0x64>)
  7891. 80039da: 4a12 ldr r2, [pc, #72] @ (8003a24 <_sbrk+0x68>)
  7892. 80039dc: 601a str r2, [r3, #0]
  7893. }
  7894. /* Protect heap from growing into the reserved MSP stack */
  7895. if (__sbrk_heap_end + incr > max_heap)
  7896. 80039de: 4b10 ldr r3, [pc, #64] @ (8003a20 <_sbrk+0x64>)
  7897. 80039e0: 681a ldr r2, [r3, #0]
  7898. 80039e2: 687b ldr r3, [r7, #4]
  7899. 80039e4: 4413 add r3, r2
  7900. 80039e6: 693a ldr r2, [r7, #16]
  7901. 80039e8: 429a cmp r2, r3
  7902. 80039ea: d207 bcs.n 80039fc <_sbrk+0x40>
  7903. {
  7904. errno = ENOMEM;
  7905. 80039ec: f012 ff58 bl 80168a0 <__errno>
  7906. 80039f0: 4603 mov r3, r0
  7907. 80039f2: 220c movs r2, #12
  7908. 80039f4: 601a str r2, [r3, #0]
  7909. return (void *)-1;
  7910. 80039f6: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  7911. 80039fa: e009 b.n 8003a10 <_sbrk+0x54>
  7912. }
  7913. prev_heap_end = __sbrk_heap_end;
  7914. 80039fc: 4b08 ldr r3, [pc, #32] @ (8003a20 <_sbrk+0x64>)
  7915. 80039fe: 681b ldr r3, [r3, #0]
  7916. 8003a00: 60fb str r3, [r7, #12]
  7917. __sbrk_heap_end += incr;
  7918. 8003a02: 4b07 ldr r3, [pc, #28] @ (8003a20 <_sbrk+0x64>)
  7919. 8003a04: 681a ldr r2, [r3, #0]
  7920. 8003a06: 687b ldr r3, [r7, #4]
  7921. 8003a08: 4413 add r3, r2
  7922. 8003a0a: 4a05 ldr r2, [pc, #20] @ (8003a20 <_sbrk+0x64>)
  7923. 8003a0c: 6013 str r3, [r2, #0]
  7924. return (void *)prev_heap_end;
  7925. 8003a0e: 68fb ldr r3, [r7, #12]
  7926. }
  7927. 8003a10: 4618 mov r0, r3
  7928. 8003a12: 3718 adds r7, #24
  7929. 8003a14: 46bd mov sp, r7
  7930. 8003a16: bd80 pop {r7, pc}
  7931. 8003a18: 24060000 .word 0x24060000
  7932. 8003a1c: 00000400 .word 0x00000400
  7933. 8003a20: 24000814 .word 0x24000814
  7934. 8003a24: 24012d48 .word 0x24012d48
  7935. 08003a28 <SystemInit>:
  7936. * configuration.
  7937. * @param None
  7938. * @retval None
  7939. */
  7940. void SystemInit (void)
  7941. {
  7942. 8003a28: b480 push {r7}
  7943. 8003a2a: af00 add r7, sp, #0
  7944. __IO uint32_t tmpreg;
  7945. #endif /* DATA_IN_D2_SRAM */
  7946. /* FPU settings ------------------------------------------------------------*/
  7947. #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
  7948. SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2))); /* set CP10 and CP11 Full Access */
  7949. 8003a2c: 4b37 ldr r3, [pc, #220] @ (8003b0c <SystemInit+0xe4>)
  7950. 8003a2e: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  7951. 8003a32: 4a36 ldr r2, [pc, #216] @ (8003b0c <SystemInit+0xe4>)
  7952. 8003a34: f443 0370 orr.w r3, r3, #15728640 @ 0xf00000
  7953. 8003a38: f8c2 3088 str.w r3, [r2, #136] @ 0x88
  7954. #endif
  7955. /* Reset the RCC clock configuration to the default reset state ------------*/
  7956. /* Increasing the CPU frequency */
  7957. if(FLASH_LATENCY_DEFAULT > (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)))
  7958. 8003a3c: 4b34 ldr r3, [pc, #208] @ (8003b10 <SystemInit+0xe8>)
  7959. 8003a3e: 681b ldr r3, [r3, #0]
  7960. 8003a40: f003 030f and.w r3, r3, #15
  7961. 8003a44: 2b06 cmp r3, #6
  7962. 8003a46: d807 bhi.n 8003a58 <SystemInit+0x30>
  7963. {
  7964. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  7965. MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT));
  7966. 8003a48: 4b31 ldr r3, [pc, #196] @ (8003b10 <SystemInit+0xe8>)
  7967. 8003a4a: 681b ldr r3, [r3, #0]
  7968. 8003a4c: f023 030f bic.w r3, r3, #15
  7969. 8003a50: 4a2f ldr r2, [pc, #188] @ (8003b10 <SystemInit+0xe8>)
  7970. 8003a52: f043 0307 orr.w r3, r3, #7
  7971. 8003a56: 6013 str r3, [r2, #0]
  7972. }
  7973. /* Set HSION bit */
  7974. RCC->CR |= RCC_CR_HSION;
  7975. 8003a58: 4b2e ldr r3, [pc, #184] @ (8003b14 <SystemInit+0xec>)
  7976. 8003a5a: 681b ldr r3, [r3, #0]
  7977. 8003a5c: 4a2d ldr r2, [pc, #180] @ (8003b14 <SystemInit+0xec>)
  7978. 8003a5e: f043 0301 orr.w r3, r3, #1
  7979. 8003a62: 6013 str r3, [r2, #0]
  7980. /* Reset CFGR register */
  7981. RCC->CFGR = 0x00000000;
  7982. 8003a64: 4b2b ldr r3, [pc, #172] @ (8003b14 <SystemInit+0xec>)
  7983. 8003a66: 2200 movs r2, #0
  7984. 8003a68: 611a str r2, [r3, #16]
  7985. /* Reset HSEON, HSECSSON, CSION, HSI48ON, CSIKERON, PLL1ON, PLL2ON and PLL3ON bits */
  7986. RCC->CR &= 0xEAF6ED7FU;
  7987. 8003a6a: 4b2a ldr r3, [pc, #168] @ (8003b14 <SystemInit+0xec>)
  7988. 8003a6c: 681a ldr r2, [r3, #0]
  7989. 8003a6e: 4929 ldr r1, [pc, #164] @ (8003b14 <SystemInit+0xec>)
  7990. 8003a70: 4b29 ldr r3, [pc, #164] @ (8003b18 <SystemInit+0xf0>)
  7991. 8003a72: 4013 ands r3, r2
  7992. 8003a74: 600b str r3, [r1, #0]
  7993. /* Decreasing the number of wait states because of lower CPU frequency */
  7994. if(FLASH_LATENCY_DEFAULT < (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)))
  7995. 8003a76: 4b26 ldr r3, [pc, #152] @ (8003b10 <SystemInit+0xe8>)
  7996. 8003a78: 681b ldr r3, [r3, #0]
  7997. 8003a7a: f003 0308 and.w r3, r3, #8
  7998. 8003a7e: 2b00 cmp r3, #0
  7999. 8003a80: d007 beq.n 8003a92 <SystemInit+0x6a>
  8000. {
  8001. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  8002. MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT));
  8003. 8003a82: 4b23 ldr r3, [pc, #140] @ (8003b10 <SystemInit+0xe8>)
  8004. 8003a84: 681b ldr r3, [r3, #0]
  8005. 8003a86: f023 030f bic.w r3, r3, #15
  8006. 8003a8a: 4a21 ldr r2, [pc, #132] @ (8003b10 <SystemInit+0xe8>)
  8007. 8003a8c: f043 0307 orr.w r3, r3, #7
  8008. 8003a90: 6013 str r3, [r2, #0]
  8009. }
  8010. #if defined(D3_SRAM_BASE)
  8011. /* Reset D1CFGR register */
  8012. RCC->D1CFGR = 0x00000000;
  8013. 8003a92: 4b20 ldr r3, [pc, #128] @ (8003b14 <SystemInit+0xec>)
  8014. 8003a94: 2200 movs r2, #0
  8015. 8003a96: 619a str r2, [r3, #24]
  8016. /* Reset D2CFGR register */
  8017. RCC->D2CFGR = 0x00000000;
  8018. 8003a98: 4b1e ldr r3, [pc, #120] @ (8003b14 <SystemInit+0xec>)
  8019. 8003a9a: 2200 movs r2, #0
  8020. 8003a9c: 61da str r2, [r3, #28]
  8021. /* Reset D3CFGR register */
  8022. RCC->D3CFGR = 0x00000000;
  8023. 8003a9e: 4b1d ldr r3, [pc, #116] @ (8003b14 <SystemInit+0xec>)
  8024. 8003aa0: 2200 movs r2, #0
  8025. 8003aa2: 621a str r2, [r3, #32]
  8026. /* Reset SRDCFGR register */
  8027. RCC->SRDCFGR = 0x00000000;
  8028. #endif
  8029. /* Reset PLLCKSELR register */
  8030. RCC->PLLCKSELR = 0x02020200;
  8031. 8003aa4: 4b1b ldr r3, [pc, #108] @ (8003b14 <SystemInit+0xec>)
  8032. 8003aa6: 4a1d ldr r2, [pc, #116] @ (8003b1c <SystemInit+0xf4>)
  8033. 8003aa8: 629a str r2, [r3, #40] @ 0x28
  8034. /* Reset PLLCFGR register */
  8035. RCC->PLLCFGR = 0x01FF0000;
  8036. 8003aaa: 4b1a ldr r3, [pc, #104] @ (8003b14 <SystemInit+0xec>)
  8037. 8003aac: 4a1c ldr r2, [pc, #112] @ (8003b20 <SystemInit+0xf8>)
  8038. 8003aae: 62da str r2, [r3, #44] @ 0x2c
  8039. /* Reset PLL1DIVR register */
  8040. RCC->PLL1DIVR = 0x01010280;
  8041. 8003ab0: 4b18 ldr r3, [pc, #96] @ (8003b14 <SystemInit+0xec>)
  8042. 8003ab2: 4a1c ldr r2, [pc, #112] @ (8003b24 <SystemInit+0xfc>)
  8043. 8003ab4: 631a str r2, [r3, #48] @ 0x30
  8044. /* Reset PLL1FRACR register */
  8045. RCC->PLL1FRACR = 0x00000000;
  8046. 8003ab6: 4b17 ldr r3, [pc, #92] @ (8003b14 <SystemInit+0xec>)
  8047. 8003ab8: 2200 movs r2, #0
  8048. 8003aba: 635a str r2, [r3, #52] @ 0x34
  8049. /* Reset PLL2DIVR register */
  8050. RCC->PLL2DIVR = 0x01010280;
  8051. 8003abc: 4b15 ldr r3, [pc, #84] @ (8003b14 <SystemInit+0xec>)
  8052. 8003abe: 4a19 ldr r2, [pc, #100] @ (8003b24 <SystemInit+0xfc>)
  8053. 8003ac0: 639a str r2, [r3, #56] @ 0x38
  8054. /* Reset PLL2FRACR register */
  8055. RCC->PLL2FRACR = 0x00000000;
  8056. 8003ac2: 4b14 ldr r3, [pc, #80] @ (8003b14 <SystemInit+0xec>)
  8057. 8003ac4: 2200 movs r2, #0
  8058. 8003ac6: 63da str r2, [r3, #60] @ 0x3c
  8059. /* Reset PLL3DIVR register */
  8060. RCC->PLL3DIVR = 0x01010280;
  8061. 8003ac8: 4b12 ldr r3, [pc, #72] @ (8003b14 <SystemInit+0xec>)
  8062. 8003aca: 4a16 ldr r2, [pc, #88] @ (8003b24 <SystemInit+0xfc>)
  8063. 8003acc: 641a str r2, [r3, #64] @ 0x40
  8064. /* Reset PLL3FRACR register */
  8065. RCC->PLL3FRACR = 0x00000000;
  8066. 8003ace: 4b11 ldr r3, [pc, #68] @ (8003b14 <SystemInit+0xec>)
  8067. 8003ad0: 2200 movs r2, #0
  8068. 8003ad2: 645a str r2, [r3, #68] @ 0x44
  8069. /* Reset HSEBYP bit */
  8070. RCC->CR &= 0xFFFBFFFFU;
  8071. 8003ad4: 4b0f ldr r3, [pc, #60] @ (8003b14 <SystemInit+0xec>)
  8072. 8003ad6: 681b ldr r3, [r3, #0]
  8073. 8003ad8: 4a0e ldr r2, [pc, #56] @ (8003b14 <SystemInit+0xec>)
  8074. 8003ada: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  8075. 8003ade: 6013 str r3, [r2, #0]
  8076. /* Disable all interrupts */
  8077. RCC->CIER = 0x00000000;
  8078. 8003ae0: 4b0c ldr r3, [pc, #48] @ (8003b14 <SystemInit+0xec>)
  8079. 8003ae2: 2200 movs r2, #0
  8080. 8003ae4: 661a str r2, [r3, #96] @ 0x60
  8081. #if (STM32H7_DEV_ID == 0x450UL)
  8082. /* dual core CM7 or single core line */
  8083. if((DBGMCU->IDCODE & 0xFFFF0000U) < 0x20000000U)
  8084. 8003ae6: 4b10 ldr r3, [pc, #64] @ (8003b28 <SystemInit+0x100>)
  8085. 8003ae8: 681a ldr r2, [r3, #0]
  8086. 8003aea: 4b10 ldr r3, [pc, #64] @ (8003b2c <SystemInit+0x104>)
  8087. 8003aec: 4013 ands r3, r2
  8088. 8003aee: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  8089. 8003af2: d202 bcs.n 8003afa <SystemInit+0xd2>
  8090. {
  8091. /* if stm32h7 revY*/
  8092. /* Change the switch matrix read issuing capability to 1 for the AXI SRAM target (Target 7) */
  8093. *((__IO uint32_t*)0x51008108) = 0x000000001U;
  8094. 8003af4: 4b0e ldr r3, [pc, #56] @ (8003b30 <SystemInit+0x108>)
  8095. 8003af6: 2201 movs r2, #1
  8096. 8003af8: 601a str r2, [r3, #0]
  8097. /*
  8098. * Disable the FMC bank1 (enabled after reset).
  8099. * This, prevents CPU speculation access on this bank which blocks the use of FMC during
  8100. * 24us. During this time the others FMC master (such as LTDC) cannot use it!
  8101. */
  8102. FMC_Bank1_R->BTCR[0] = 0x000030D2;
  8103. 8003afa: 4b0e ldr r3, [pc, #56] @ (8003b34 <SystemInit+0x10c>)
  8104. 8003afc: f243 02d2 movw r2, #12498 @ 0x30d2
  8105. 8003b00: 601a str r2, [r3, #0]
  8106. #if defined(USER_VECT_TAB_ADDRESS)
  8107. SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D1 AXI-RAM or in Internal FLASH */
  8108. #endif /* USER_VECT_TAB_ADDRESS */
  8109. #endif /*DUAL_CORE && CORE_CM4*/
  8110. }
  8111. 8003b02: bf00 nop
  8112. 8003b04: 46bd mov sp, r7
  8113. 8003b06: f85d 7b04 ldr.w r7, [sp], #4
  8114. 8003b0a: 4770 bx lr
  8115. 8003b0c: e000ed00 .word 0xe000ed00
  8116. 8003b10: 52002000 .word 0x52002000
  8117. 8003b14: 58024400 .word 0x58024400
  8118. 8003b18: eaf6ed7f .word 0xeaf6ed7f
  8119. 8003b1c: 02020200 .word 0x02020200
  8120. 8003b20: 01ff0000 .word 0x01ff0000
  8121. 8003b24: 01010280 .word 0x01010280
  8122. 8003b28: 5c001000 .word 0x5c001000
  8123. 8003b2c: ffff0000 .word 0xffff0000
  8124. 8003b30: 51008108 .word 0x51008108
  8125. 8003b34: 52004000 .word 0x52004000
  8126. 08003b38 <UartTasksInit>:
  8127. uint32_t slaveLastSeen[SLAVES_COUNT] = { 0 };
  8128. extern RNG_HandleTypeDef hrng;
  8129. void UartTasksInit(void) {
  8130. 8003b38: b580 push {r7, lr}
  8131. 8003b3a: af00 add r7, sp, #0
  8132. uart1TaskData.uartRxBuffer = uart1RxBuffer;
  8133. 8003b3c: 4b13 ldr r3, [pc, #76] @ (8003b8c <UartTasksInit+0x54>)
  8134. 8003b3e: 4a14 ldr r2, [pc, #80] @ (8003b90 <UartTasksInit+0x58>)
  8135. 8003b40: 601a str r2, [r3, #0]
  8136. uart1TaskData.uartRxBufferLen = UART1_RX_BUFF_SIZE;
  8137. 8003b42: 4b12 ldr r3, [pc, #72] @ (8003b8c <UartTasksInit+0x54>)
  8138. 8003b44: f44f 7280 mov.w r2, #256 @ 0x100
  8139. 8003b48: 809a strh r2, [r3, #4]
  8140. uart1TaskData.uartTxBuffer = uart1TxBuffer;
  8141. 8003b4a: 4b10 ldr r3, [pc, #64] @ (8003b8c <UartTasksInit+0x54>)
  8142. 8003b4c: 4a11 ldr r2, [pc, #68] @ (8003b94 <UartTasksInit+0x5c>)
  8143. 8003b4e: 609a str r2, [r3, #8]
  8144. uart1TaskData.uartRxBufferLen = UART1_TX_BUFF_SIZE;
  8145. 8003b50: 4b0e ldr r3, [pc, #56] @ (8003b8c <UartTasksInit+0x54>)
  8146. 8003b52: f44f 7280 mov.w r2, #256 @ 0x100
  8147. 8003b56: 809a strh r2, [r3, #4]
  8148. uart1TaskData.frameData = uart1TaskFrameData;
  8149. 8003b58: 4b0c ldr r3, [pc, #48] @ (8003b8c <UartTasksInit+0x54>)
  8150. 8003b5a: 4a0f ldr r2, [pc, #60] @ (8003b98 <UartTasksInit+0x60>)
  8151. 8003b5c: 611a str r2, [r3, #16]
  8152. uart1TaskData.frameDataLen = UART1_RX_BUFF_SIZE;
  8153. 8003b5e: 4b0b ldr r3, [pc, #44] @ (8003b8c <UartTasksInit+0x54>)
  8154. 8003b60: f44f 7280 mov.w r2, #256 @ 0x100
  8155. 8003b64: 829a strh r2, [r3, #20]
  8156. uart1TaskData.huart = &huart1;
  8157. 8003b66: 4b09 ldr r3, [pc, #36] @ (8003b8c <UartTasksInit+0x54>)
  8158. 8003b68: 4a0c ldr r2, [pc, #48] @ (8003b9c <UartTasksInit+0x64>)
  8159. 8003b6a: 631a str r2, [r3, #48] @ 0x30
  8160. uart1TaskData.uartNumber = 1;
  8161. 8003b6c: 4b07 ldr r3, [pc, #28] @ (8003b8c <UartTasksInit+0x54>)
  8162. 8003b6e: 2201 movs r2, #1
  8163. 8003b70: f883 2034 strb.w r2, [r3, #52] @ 0x34
  8164. uart1TaskData.processDataCb = Uart1ReceivedDataProcessCallback;
  8165. 8003b74: 4b05 ldr r3, [pc, #20] @ (8003b8c <UartTasksInit+0x54>)
  8166. 8003b76: 4a0a ldr r2, [pc, #40] @ (8003ba0 <UartTasksInit+0x68>)
  8167. 8003b78: 629a str r2, [r3, #40] @ 0x28
  8168. uart1TaskData.processRxDataMsgBuffer = NULL;
  8169. 8003b7a: 4b04 ldr r3, [pc, #16] @ (8003b8c <UartTasksInit+0x54>)
  8170. 8003b7c: 2200 movs r2, #0
  8171. 8003b7e: 625a str r2, [r3, #36] @ 0x24
  8172. UartTaskCreate(&uart1TaskData);
  8173. 8003b80: 4802 ldr r0, [pc, #8] @ (8003b8c <UartTasksInit+0x54>)
  8174. 8003b82: f000 f80f bl 8003ba4 <UartTaskCreate>
  8175. }
  8176. 8003b86: bf00 nop
  8177. 8003b88: bd80 pop {r7, pc}
  8178. 8003b8a: bf00 nop
  8179. 8003b8c: 24000b18 .word 0x24000b18
  8180. 8003b90: 24000818 .word 0x24000818
  8181. 8003b94: 24000918 .word 0x24000918
  8182. 8003b98: 24000a18 .word 0x24000a18
  8183. 8003b9c: 24000598 .word 0x24000598
  8184. 8003ba0: 080042a9 .word 0x080042a9
  8185. 08003ba4 <UartTaskCreate>:
  8186. void UartTaskCreate (UartTaskData* uartTaskData) {
  8187. 8003ba4: b580 push {r7, lr}
  8188. 8003ba6: b08c sub sp, #48 @ 0x30
  8189. 8003ba8: af00 add r7, sp, #0
  8190. 8003baa: 6078 str r0, [r7, #4]
  8191. osThreadAttr_t osThreadAttrRxUart = { 0 };
  8192. 8003bac: f107 030c add.w r3, r7, #12
  8193. 8003bb0: 2224 movs r2, #36 @ 0x24
  8194. 8003bb2: 2100 movs r1, #0
  8195. 8003bb4: 4618 mov r0, r3
  8196. 8003bb6: f012 fdce bl 8016756 <memset>
  8197. osThreadAttrRxUart.stack_size = configMINIMAL_STACK_SIZE * 2;
  8198. 8003bba: f44f 6380 mov.w r3, #1024 @ 0x400
  8199. 8003bbe: 623b str r3, [r7, #32]
  8200. osThreadAttrRxUart.priority = (osPriority_t)osPriorityHigh;
  8201. 8003bc0: 2328 movs r3, #40 @ 0x28
  8202. 8003bc2: 627b str r3, [r7, #36] @ 0x24
  8203. uartTaskData->uartRecieveTaskHandle = osThreadNew (UartRxTask, uartTaskData, &osThreadAttrRxUart);
  8204. 8003bc4: f107 030c add.w r3, r7, #12
  8205. 8003bc8: 461a mov r2, r3
  8206. 8003bca: 6879 ldr r1, [r7, #4]
  8207. 8003bcc: 4804 ldr r0, [pc, #16] @ (8003be0 <UartTaskCreate+0x3c>)
  8208. 8003bce: f00e fb57 bl 8012280 <osThreadNew>
  8209. 8003bd2: 4602 mov r2, r0
  8210. 8003bd4: 687b ldr r3, [r7, #4]
  8211. 8003bd6: 619a str r2, [r3, #24]
  8212. }
  8213. 8003bd8: bf00 nop
  8214. 8003bda: 3730 adds r7, #48 @ 0x30
  8215. 8003bdc: 46bd mov sp, r7
  8216. 8003bde: bd80 pop {r7, pc}
  8217. 8003be0: 08003cf9 .word 0x08003cf9
  8218. 08003be4 <HAL_UART_RxCpltCallback>:
  8219. uart8TaskData.huart = &huart8;
  8220. uart8TaskData.uartNumber = 8;
  8221. uart8TaskData.uartRecieveTaskHandle = osThreadNew (UartRxTask, &uart8TaskData, &osThreadAttrRxUart);
  8222. }
  8223. void HAL_UART_RxCpltCallback (UART_HandleTypeDef* huart) {
  8224. 8003be4: b480 push {r7}
  8225. 8003be6: b083 sub sp, #12
  8226. 8003be8: af00 add r7, sp, #0
  8227. 8003bea: 6078 str r0, [r7, #4]
  8228. }
  8229. 8003bec: bf00 nop
  8230. 8003bee: 370c adds r7, #12
  8231. 8003bf0: 46bd mov sp, r7
  8232. 8003bf2: f85d 7b04 ldr.w r7, [sp], #4
  8233. 8003bf6: 4770 bx lr
  8234. 08003bf8 <HAL_UARTEx_RxEventCallback>:
  8235. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef* huart, uint16_t Size) {
  8236. 8003bf8: b580 push {r7, lr}
  8237. 8003bfa: b082 sub sp, #8
  8238. 8003bfc: af00 add r7, sp, #0
  8239. 8003bfe: 6078 str r0, [r7, #4]
  8240. 8003c00: 460b mov r3, r1
  8241. 8003c02: 807b strh r3, [r7, #2]
  8242. if (huart->Instance == USART1) {
  8243. 8003c04: 687b ldr r3, [r7, #4]
  8244. 8003c06: 681b ldr r3, [r3, #0]
  8245. 8003c08: 4a0c ldr r2, [pc, #48] @ (8003c3c <HAL_UARTEx_RxEventCallback+0x44>)
  8246. 8003c0a: 4293 cmp r3, r2
  8247. 8003c0c: d106 bne.n 8003c1c <HAL_UARTEx_RxEventCallback+0x24>
  8248. HandleUartRxCallback(&uart1TaskData, huart, Size);
  8249. 8003c0e: 887b ldrh r3, [r7, #2]
  8250. 8003c10: 461a mov r2, r3
  8251. 8003c12: 6879 ldr r1, [r7, #4]
  8252. 8003c14: 480a ldr r0, [pc, #40] @ (8003c40 <HAL_UARTEx_RxEventCallback+0x48>)
  8253. 8003c16: f000 f823 bl 8003c60 <HandleUartRxCallback>
  8254. } else if (huart->Instance == UART8) {
  8255. HandleUartRxCallback(&uart8TaskData, huart, Size);
  8256. }
  8257. }
  8258. 8003c1a: e00a b.n 8003c32 <HAL_UARTEx_RxEventCallback+0x3a>
  8259. } else if (huart->Instance == UART8) {
  8260. 8003c1c: 687b ldr r3, [r7, #4]
  8261. 8003c1e: 681b ldr r3, [r3, #0]
  8262. 8003c20: 4a08 ldr r2, [pc, #32] @ (8003c44 <HAL_UARTEx_RxEventCallback+0x4c>)
  8263. 8003c22: 4293 cmp r3, r2
  8264. 8003c24: d105 bne.n 8003c32 <HAL_UARTEx_RxEventCallback+0x3a>
  8265. HandleUartRxCallback(&uart8TaskData, huart, Size);
  8266. 8003c26: 887b ldrh r3, [r7, #2]
  8267. 8003c28: 461a mov r2, r3
  8268. 8003c2a: 6879 ldr r1, [r7, #4]
  8269. 8003c2c: 4806 ldr r0, [pc, #24] @ (8003c48 <HAL_UARTEx_RxEventCallback+0x50>)
  8270. 8003c2e: f000 f817 bl 8003c60 <HandleUartRxCallback>
  8271. }
  8272. 8003c32: bf00 nop
  8273. 8003c34: 3708 adds r7, #8
  8274. 8003c36: 46bd mov sp, r7
  8275. 8003c38: bd80 pop {r7, pc}
  8276. 8003c3a: bf00 nop
  8277. 8003c3c: 40011000 .word 0x40011000
  8278. 8003c40: 24000b18 .word 0x24000b18
  8279. 8003c44: 40007c00 .word 0x40007c00
  8280. 8003c48: 24000b50 .word 0x24000b50
  8281. 08003c4c <HAL_UART_TxCpltCallback>:
  8282. void HAL_UART_TxCpltCallback (UART_HandleTypeDef* huart) {
  8283. 8003c4c: b480 push {r7}
  8284. 8003c4e: b083 sub sp, #12
  8285. 8003c50: af00 add r7, sp, #0
  8286. 8003c52: 6078 str r0, [r7, #4]
  8287. if (huart->Instance == UART8) {
  8288. }
  8289. }
  8290. 8003c54: bf00 nop
  8291. 8003c56: 370c adds r7, #12
  8292. 8003c58: 46bd mov sp, r7
  8293. 8003c5a: f85d 7b04 ldr.w r7, [sp], #4
  8294. 8003c5e: 4770 bx lr
  8295. 08003c60 <HandleUartRxCallback>:
  8296. void HandleUartRxCallback (UartTaskData* uartTaskData, UART_HandleTypeDef* huart, uint16_t Size) {
  8297. 8003c60: b580 push {r7, lr}
  8298. 8003c62: b088 sub sp, #32
  8299. 8003c64: af02 add r7, sp, #8
  8300. 8003c66: 60f8 str r0, [r7, #12]
  8301. 8003c68: 60b9 str r1, [r7, #8]
  8302. 8003c6a: 4613 mov r3, r2
  8303. 8003c6c: 80fb strh r3, [r7, #6]
  8304. BaseType_t pxHigherPriorityTaskWoken = pdFALSE;
  8305. 8003c6e: 2300 movs r3, #0
  8306. 8003c70: 617b str r3, [r7, #20]
  8307. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  8308. 8003c72: 68fb ldr r3, [r7, #12]
  8309. 8003c74: 6a1b ldr r3, [r3, #32]
  8310. 8003c76: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  8311. 8003c7a: 4618 mov r0, r3
  8312. 8003c7c: f00e fd2b bl 80126d6 <osMutexAcquire>
  8313. memcpy (&(uartTaskData->frameData[uartTaskData->frameBytesCount]), uartTaskData->uartRxBuffer, Size);
  8314. 8003c80: 68fb ldr r3, [r7, #12]
  8315. 8003c82: 691b ldr r3, [r3, #16]
  8316. 8003c84: 68fa ldr r2, [r7, #12]
  8317. 8003c86: 8ad2 ldrh r2, [r2, #22]
  8318. 8003c88: 1898 adds r0, r3, r2
  8319. 8003c8a: 68fb ldr r3, [r7, #12]
  8320. 8003c8c: 681b ldr r3, [r3, #0]
  8321. 8003c8e: 88fa ldrh r2, [r7, #6]
  8322. 8003c90: 4619 mov r1, r3
  8323. 8003c92: f012 fe32 bl 80168fa <memcpy>
  8324. uartTaskData->frameBytesCount += Size;
  8325. 8003c96: 68fb ldr r3, [r7, #12]
  8326. 8003c98: 8ada ldrh r2, [r3, #22]
  8327. 8003c9a: 88fb ldrh r3, [r7, #6]
  8328. 8003c9c: 4413 add r3, r2
  8329. 8003c9e: b29a uxth r2, r3
  8330. 8003ca0: 68fb ldr r3, [r7, #12]
  8331. 8003ca2: 82da strh r2, [r3, #22]
  8332. osMutexRelease (uartTaskData->rxDataBufferMutex);
  8333. 8003ca4: 68fb ldr r3, [r7, #12]
  8334. 8003ca6: 6a1b ldr r3, [r3, #32]
  8335. 8003ca8: 4618 mov r0, r3
  8336. 8003caa: f00e fd5f bl 801276c <osMutexRelease>
  8337. xTaskNotifyFromISR (uartTaskData->uartRecieveTaskHandle, Size, eSetValueWithOverwrite, &pxHigherPriorityTaskWoken);
  8338. 8003cae: 68fb ldr r3, [r7, #12]
  8339. 8003cb0: 6998 ldr r0, [r3, #24]
  8340. 8003cb2: 88f9 ldrh r1, [r7, #6]
  8341. 8003cb4: f107 0314 add.w r3, r7, #20
  8342. 8003cb8: 9300 str r3, [sp, #0]
  8343. 8003cba: 2300 movs r3, #0
  8344. 8003cbc: 2203 movs r2, #3
  8345. 8003cbe: f011 fa4f bl 8015160 <xTaskGenericNotifyFromISR>
  8346. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  8347. 8003cc2: 68fb ldr r3, [r7, #12]
  8348. 8003cc4: 6b18 ldr r0, [r3, #48] @ 0x30
  8349. 8003cc6: 68fb ldr r3, [r7, #12]
  8350. 8003cc8: 6819 ldr r1, [r3, #0]
  8351. 8003cca: 68fb ldr r3, [r7, #12]
  8352. 8003ccc: 889b ldrh r3, [r3, #4]
  8353. 8003cce: 461a mov r2, r3
  8354. 8003cd0: f00e f9a9 bl 8012026 <HAL_UARTEx_ReceiveToIdle_IT>
  8355. portEND_SWITCHING_ISR (pxHigherPriorityTaskWoken);
  8356. 8003cd4: 697b ldr r3, [r7, #20]
  8357. 8003cd6: 2b00 cmp r3, #0
  8358. 8003cd8: d007 beq.n 8003cea <HandleUartRxCallback+0x8a>
  8359. 8003cda: 4b06 ldr r3, [pc, #24] @ (8003cf4 <HandleUartRxCallback+0x94>)
  8360. 8003cdc: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  8361. 8003ce0: 601a str r2, [r3, #0]
  8362. 8003ce2: f3bf 8f4f dsb sy
  8363. 8003ce6: f3bf 8f6f isb sy
  8364. }
  8365. 8003cea: bf00 nop
  8366. 8003cec: 3718 adds r7, #24
  8367. 8003cee: 46bd mov sp, r7
  8368. 8003cf0: bd80 pop {r7, pc}
  8369. 8003cf2: bf00 nop
  8370. 8003cf4: e000ed04 .word 0xe000ed04
  8371. 08003cf8 <UartRxTask>:
  8372. void UartRxTask (void* argument) {
  8373. 8003cf8: b580 push {r7, lr}
  8374. 8003cfa: b0d2 sub sp, #328 @ 0x148
  8375. 8003cfc: af02 add r7, sp, #8
  8376. 8003cfe: f507 73a0 add.w r3, r7, #320 @ 0x140
  8377. 8003d02: f5a3 739e sub.w r3, r3, #316 @ 0x13c
  8378. 8003d06: 6018 str r0, [r3, #0]
  8379. UartTaskData* uartTaskData = (UartTaskData*)argument;
  8380. 8003d08: f507 73a0 add.w r3, r7, #320 @ 0x140
  8381. 8003d0c: f5a3 739e sub.w r3, r3, #316 @ 0x13c
  8382. 8003d10: 681b ldr r3, [r3, #0]
  8383. 8003d12: f8c7 312c str.w r3, [r7, #300] @ 0x12c
  8384. SerialProtocolFrameData spFrameData = { 0 };
  8385. 8003d16: f507 73a0 add.w r3, r7, #320 @ 0x140
  8386. 8003d1a: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8387. 8003d1e: 4618 mov r0, r3
  8388. 8003d20: f44f 7386 mov.w r3, #268 @ 0x10c
  8389. 8003d24: 461a mov r2, r3
  8390. 8003d26: 2100 movs r1, #0
  8391. 8003d28: f012 fd15 bl 8016756 <memset>
  8392. uint32_t bytesRec = 0;
  8393. 8003d2c: f507 73a0 add.w r3, r7, #320 @ 0x140
  8394. 8003d30: f5a3 739a sub.w r3, r3, #308 @ 0x134
  8395. 8003d34: 2200 movs r2, #0
  8396. 8003d36: 601a str r2, [r3, #0]
  8397. uint32_t crc = 0;
  8398. 8003d38: 2300 movs r3, #0
  8399. 8003d3a: f8c7 3128 str.w r3, [r7, #296] @ 0x128
  8400. uint16_t frameCommandRaw = 0x0000;
  8401. 8003d3e: 2300 movs r3, #0
  8402. 8003d40: f8a7 3126 strh.w r3, [r7, #294] @ 0x126
  8403. uint16_t frameBytesCount = 0;
  8404. 8003d44: 2300 movs r3, #0
  8405. 8003d46: f8a7 3124 strh.w r3, [r7, #292] @ 0x124
  8406. uint16_t frameCrc = 0;
  8407. 8003d4a: 2300 movs r3, #0
  8408. 8003d4c: f8a7 3122 strh.w r3, [r7, #290] @ 0x122
  8409. uint16_t frameTotalLength = 0;
  8410. 8003d50: 2300 movs r3, #0
  8411. 8003d52: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  8412. uint16_t dataToSend = 0;
  8413. 8003d56: 2300 movs r3, #0
  8414. 8003d58: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  8415. portBASE_TYPE crcPass = pdFAIL;
  8416. 8003d5c: 2300 movs r3, #0
  8417. 8003d5e: f8c7 3138 str.w r3, [r7, #312] @ 0x138
  8418. portBASE_TYPE proceed = pdFALSE;
  8419. 8003d62: 2300 movs r3, #0
  8420. 8003d64: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  8421. portBASE_TYPE frameTimeout = pdFAIL;
  8422. 8003d68: 2300 movs r3, #0
  8423. 8003d6a: f8c7 311c str.w r3, [r7, #284] @ 0x11c
  8424. enum SerialReceiverStates receverState = srWaitForHeader;
  8425. 8003d6e: 2300 movs r3, #0
  8426. 8003d70: f887 3133 strb.w r3, [r7, #307] @ 0x133
  8427. uartTaskData->rxDataBufferMutex = osMutexNew (NULL);
  8428. 8003d74: 2000 movs r0, #0
  8429. 8003d76: f00e fc28 bl 80125ca <osMutexNew>
  8430. 8003d7a: 4602 mov r2, r0
  8431. 8003d7c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8432. 8003d80: 621a str r2, [r3, #32]
  8433. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  8434. 8003d82: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8435. 8003d86: 6b18 ldr r0, [r3, #48] @ 0x30
  8436. 8003d88: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8437. 8003d8c: 6819 ldr r1, [r3, #0]
  8438. 8003d8e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8439. 8003d92: 889b ldrh r3, [r3, #4]
  8440. 8003d94: 461a mov r2, r3
  8441. 8003d96: f00e f946 bl 8012026 <HAL_UARTEx_ReceiveToIdle_IT>
  8442. while (pdTRUE) {
  8443. frameTimeout = !(xTaskNotifyWait (0, 0, &bytesRec, pdMS_TO_TICKS (FRAME_TIMEOUT_MS)));
  8444. 8003d9a: f107 020c add.w r2, r7, #12
  8445. 8003d9e: f44f 63fa mov.w r3, #2000 @ 0x7d0
  8446. 8003da2: 2100 movs r1, #0
  8447. 8003da4: 2000 movs r0, #0
  8448. 8003da6: f011 f8b9 bl 8014f1c <xTaskNotifyWait>
  8449. 8003daa: 4603 mov r3, r0
  8450. 8003dac: 2b00 cmp r3, #0
  8451. 8003dae: bf0c ite eq
  8452. 8003db0: 2301 moveq r3, #1
  8453. 8003db2: 2300 movne r3, #0
  8454. 8003db4: b2db uxtb r3, r3
  8455. 8003db6: f8c7 311c str.w r3, [r7, #284] @ 0x11c
  8456. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  8457. 8003dba: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8458. 8003dbe: 6a1b ldr r3, [r3, #32]
  8459. 8003dc0: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  8460. 8003dc4: 4618 mov r0, r3
  8461. 8003dc6: f00e fc86 bl 80126d6 <osMutexAcquire>
  8462. frameBytesCount = uartTaskData->frameBytesCount;
  8463. 8003dca: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8464. 8003dce: 8adb ldrh r3, [r3, #22]
  8465. 8003dd0: f8a7 3124 strh.w r3, [r7, #292] @ 0x124
  8466. osMutexRelease (uartTaskData->rxDataBufferMutex);
  8467. 8003dd4: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8468. 8003dd8: 6a1b ldr r3, [r3, #32]
  8469. 8003dda: 4618 mov r0, r3
  8470. 8003ddc: f00e fcc6 bl 801276c <osMutexRelease>
  8471. if ((frameTimeout == pdTRUE) && (frameBytesCount > 0)) {
  8472. 8003de0: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  8473. 8003de4: 2b01 cmp r3, #1
  8474. 8003de6: d10a bne.n 8003dfe <UartRxTask+0x106>
  8475. 8003de8: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  8476. 8003dec: 2b00 cmp r3, #0
  8477. 8003dee: d006 beq.n 8003dfe <UartRxTask+0x106>
  8478. receverState = srFail;
  8479. 8003df0: 2304 movs r3, #4
  8480. 8003df2: f887 3133 strb.w r3, [r7, #307] @ 0x133
  8481. proceed = pdTRUE;
  8482. 8003df6: 2301 movs r3, #1
  8483. 8003df8: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  8484. 8003dfc: e029 b.n 8003e52 <UartRxTask+0x15a>
  8485. } else {
  8486. if (frameTimeout == pdFALSE) {
  8487. 8003dfe: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  8488. 8003e02: 2b00 cmp r3, #0
  8489. 8003e04: d111 bne.n 8003e2a <UartRxTask+0x132>
  8490. proceed = pdTRUE;
  8491. 8003e06: 2301 movs r3, #1
  8492. 8003e08: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  8493. #if UART_TASK_LOGS
  8494. printf ("Uart%d: RX bytes received: %ld\n", uartTaskData->uartNumber, bytesRec);
  8495. 8003e0c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8496. 8003e10: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  8497. 8003e14: 4619 mov r1, r3
  8498. 8003e16: f507 73a0 add.w r3, r7, #320 @ 0x140
  8499. 8003e1a: f5a3 739a sub.w r3, r3, #308 @ 0x134
  8500. 8003e1e: 681b ldr r3, [r3, #0]
  8501. 8003e20: 461a mov r2, r3
  8502. 8003e22: 48c1 ldr r0, [pc, #772] @ (8004128 <UartRxTask+0x430>)
  8503. 8003e24: f012 fc42 bl 80166ac <iprintf>
  8504. 8003e28: e22f b.n 800428a <UartRxTask+0x592>
  8505. #endif
  8506. } else {
  8507. if (uartTaskData->huart->RxState == HAL_UART_STATE_READY) {
  8508. 8003e2a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8509. 8003e2e: 6b1b ldr r3, [r3, #48] @ 0x30
  8510. 8003e30: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  8511. 8003e34: 2b20 cmp r3, #32
  8512. 8003e36: f040 8228 bne.w 800428a <UartRxTask+0x592>
  8513. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  8514. 8003e3a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8515. 8003e3e: 6b18 ldr r0, [r3, #48] @ 0x30
  8516. 8003e40: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8517. 8003e44: 6819 ldr r1, [r3, #0]
  8518. 8003e46: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8519. 8003e4a: 889b ldrh r3, [r3, #4]
  8520. 8003e4c: 461a mov r2, r3
  8521. 8003e4e: f00e f8ea bl 8012026 <HAL_UARTEx_ReceiveToIdle_IT>
  8522. }
  8523. }
  8524. }
  8525. while (proceed) {
  8526. 8003e52: e21a b.n 800428a <UartRxTask+0x592>
  8527. switch (receverState) {
  8528. 8003e54: f897 3133 ldrb.w r3, [r7, #307] @ 0x133
  8529. 8003e58: 2b04 cmp r3, #4
  8530. 8003e5a: f200 81f1 bhi.w 8004240 <UartRxTask+0x548>
  8531. 8003e5e: a201 add r2, pc, #4 @ (adr r2, 8003e64 <UartRxTask+0x16c>)
  8532. 8003e60: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  8533. 8003e64: 08003e79 .word 0x08003e79
  8534. 8003e68: 08003fdb .word 0x08003fdb
  8535. 8003e6c: 08003fbf .word 0x08003fbf
  8536. 8003e70: 0800407b .word 0x0800407b
  8537. 8003e74: 08004135 .word 0x08004135
  8538. case srWaitForHeader:
  8539. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  8540. 8003e78: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8541. 8003e7c: 6a1b ldr r3, [r3, #32]
  8542. 8003e7e: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  8543. 8003e82: 4618 mov r0, r3
  8544. 8003e84: f00e fc27 bl 80126d6 <osMutexAcquire>
  8545. if (uartTaskData->frameData[0] == FRAME_INDICATOR) {
  8546. 8003e88: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8547. 8003e8c: 691b ldr r3, [r3, #16]
  8548. 8003e8e: 781b ldrb r3, [r3, #0]
  8549. 8003e90: 2baa cmp r3, #170 @ 0xaa
  8550. 8003e92: f040 8082 bne.w 8003f9a <UartRxTask+0x2a2>
  8551. if (frameBytesCount > FRAME_ID_LENGTH) {
  8552. 8003e96: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  8553. 8003e9a: 2b02 cmp r3, #2
  8554. 8003e9c: d914 bls.n 8003ec8 <UartRxTask+0x1d0>
  8555. spFrameData.frameHeader.frameId =
  8556. CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH - FRAME_ID_LENGTH - FRAME_COMMAND_LENGTH]));
  8557. 8003e9e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8558. 8003ea2: 691b ldr r3, [r3, #16]
  8559. 8003ea4: 3302 adds r3, #2
  8560. 8003ea6: 781b ldrb r3, [r3, #0]
  8561. 8003ea8: 021b lsls r3, r3, #8
  8562. 8003eaa: b21a sxth r2, r3
  8563. 8003eac: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8564. 8003eb0: 691b ldr r3, [r3, #16]
  8565. 8003eb2: 3301 adds r3, #1
  8566. 8003eb4: 781b ldrb r3, [r3, #0]
  8567. 8003eb6: b21b sxth r3, r3
  8568. 8003eb8: 4313 orrs r3, r2
  8569. 8003eba: b21b sxth r3, r3
  8570. 8003ebc: b29a uxth r2, r3
  8571. spFrameData.frameHeader.frameId =
  8572. 8003ebe: f507 73a0 add.w r3, r7, #320 @ 0x140
  8573. 8003ec2: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8574. 8003ec6: 801a strh r2, [r3, #0]
  8575. }
  8576. if (frameBytesCount > FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH) {
  8577. 8003ec8: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  8578. 8003ecc: 2b04 cmp r3, #4
  8579. 8003ece: d923 bls.n 8003f18 <UartRxTask+0x220>
  8580. frameCommandRaw = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH - FRAME_COMMAND_LENGTH]));
  8581. 8003ed0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8582. 8003ed4: 691b ldr r3, [r3, #16]
  8583. 8003ed6: 3304 adds r3, #4
  8584. 8003ed8: 781b ldrb r3, [r3, #0]
  8585. 8003eda: 021b lsls r3, r3, #8
  8586. 8003edc: b21a sxth r2, r3
  8587. 8003ede: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8588. 8003ee2: 691b ldr r3, [r3, #16]
  8589. 8003ee4: 3303 adds r3, #3
  8590. 8003ee6: 781b ldrb r3, [r3, #0]
  8591. 8003ee8: b21b sxth r3, r3
  8592. 8003eea: 4313 orrs r3, r2
  8593. 8003eec: b21b sxth r3, r3
  8594. 8003eee: f8a7 3126 strh.w r3, [r7, #294] @ 0x126
  8595. spFrameData.frameHeader.frameCommand = (SerialProtocolCommands)(frameCommandRaw & 0x7FFF);
  8596. 8003ef2: f8b7 3126 ldrh.w r3, [r7, #294] @ 0x126
  8597. 8003ef6: b2da uxtb r2, r3
  8598. 8003ef8: f507 73a0 add.w r3, r7, #320 @ 0x140
  8599. 8003efc: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8600. 8003f00: 709a strb r2, [r3, #2]
  8601. spFrameData.frameHeader.isResponseFrame = (frameCommandRaw & 0x8000) != 0 ? pdTRUE : pdFALSE;
  8602. 8003f02: f9b7 3126 ldrsh.w r3, [r7, #294] @ 0x126
  8603. 8003f06: 13db asrs r3, r3, #15
  8604. 8003f08: b21b sxth r3, r3
  8605. 8003f0a: f003 0201 and.w r2, r3, #1
  8606. 8003f0e: f507 73a0 add.w r3, r7, #320 @ 0x140
  8607. 8003f12: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8608. 8003f16: 609a str r2, [r3, #8]
  8609. }
  8610. if ((frameBytesCount > FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH + FRAME_RESP_STAT_LENGTH) && ((spFrameData.frameHeader.frameCommand & 0x8000) != 0)) {
  8611. 8003f18: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  8612. 8003f1c: 2b05 cmp r3, #5
  8613. 8003f1e: d913 bls.n 8003f48 <UartRxTask+0x250>
  8614. 8003f20: f507 73a0 add.w r3, r7, #320 @ 0x140
  8615. 8003f24: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8616. 8003f28: 789b ldrb r3, [r3, #2]
  8617. 8003f2a: f403 4300 and.w r3, r3, #32768 @ 0x8000
  8618. 8003f2e: 2b00 cmp r3, #0
  8619. 8003f30: d00a beq.n 8003f48 <UartRxTask+0x250>
  8620. spFrameData.frameHeader.respStatus = (SerialProtocolRespStatus)(uartTaskData->frameData[FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH + FRAME_RESP_STAT_LENGTH]);
  8621. 8003f32: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8622. 8003f36: 691b ldr r3, [r3, #16]
  8623. 8003f38: 3305 adds r3, #5
  8624. 8003f3a: 781b ldrb r3, [r3, #0]
  8625. 8003f3c: b25a sxtb r2, r3
  8626. 8003f3e: f507 73a0 add.w r3, r7, #320 @ 0x140
  8627. 8003f42: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8628. 8003f46: 70da strb r2, [r3, #3]
  8629. }
  8630. if (frameBytesCount >= FRAME_HEADER_LENGTH) {
  8631. 8003f48: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  8632. 8003f4c: 2b07 cmp r3, #7
  8633. 8003f4e: d920 bls.n 8003f92 <UartRxTask+0x29a>
  8634. spFrameData.frameHeader.frameDataLength = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH]));
  8635. 8003f50: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8636. 8003f54: 691b ldr r3, [r3, #16]
  8637. 8003f56: 3306 adds r3, #6
  8638. 8003f58: 781b ldrb r3, [r3, #0]
  8639. 8003f5a: 021b lsls r3, r3, #8
  8640. 8003f5c: b21a sxth r2, r3
  8641. 8003f5e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8642. 8003f62: 691b ldr r3, [r3, #16]
  8643. 8003f64: 3305 adds r3, #5
  8644. 8003f66: 781b ldrb r3, [r3, #0]
  8645. 8003f68: b21b sxth r3, r3
  8646. 8003f6a: 4313 orrs r3, r2
  8647. 8003f6c: b21b sxth r3, r3
  8648. 8003f6e: b29a uxth r2, r3
  8649. 8003f70: f507 73a0 add.w r3, r7, #320 @ 0x140
  8650. 8003f74: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8651. 8003f78: 809a strh r2, [r3, #4]
  8652. frameTotalLength = FRAME_HEADER_LENGTH + spFrameData.frameHeader.frameDataLength + FRAME_CRC_LENGTH;
  8653. 8003f7a: f507 73a0 add.w r3, r7, #320 @ 0x140
  8654. 8003f7e: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8655. 8003f82: 889b ldrh r3, [r3, #4]
  8656. 8003f84: 330a adds r3, #10
  8657. 8003f86: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  8658. receverState = srRecieveData;
  8659. 8003f8a: 2302 movs r3, #2
  8660. 8003f8c: f887 3133 strb.w r3, [r7, #307] @ 0x133
  8661. 8003f90: e00e b.n 8003fb0 <UartRxTask+0x2b8>
  8662. } else {
  8663. proceed = pdFALSE;
  8664. 8003f92: 2300 movs r3, #0
  8665. 8003f94: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  8666. 8003f98: e00a b.n 8003fb0 <UartRxTask+0x2b8>
  8667. }
  8668. } else {
  8669. if (frameBytesCount > 0) {
  8670. 8003f9a: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  8671. 8003f9e: 2b00 cmp r3, #0
  8672. 8003fa0: d003 beq.n 8003faa <UartRxTask+0x2b2>
  8673. receverState = srFail;
  8674. 8003fa2: 2304 movs r3, #4
  8675. 8003fa4: f887 3133 strb.w r3, [r7, #307] @ 0x133
  8676. 8003fa8: e002 b.n 8003fb0 <UartRxTask+0x2b8>
  8677. } else {
  8678. proceed = pdFALSE;
  8679. 8003faa: 2300 movs r3, #0
  8680. 8003fac: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  8681. }
  8682. }
  8683. osMutexRelease (uartTaskData->rxDataBufferMutex);
  8684. 8003fb0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8685. 8003fb4: 6a1b ldr r3, [r3, #32]
  8686. 8003fb6: 4618 mov r0, r3
  8687. 8003fb8: f00e fbd8 bl 801276c <osMutexRelease>
  8688. break;
  8689. 8003fbc: e165 b.n 800428a <UartRxTask+0x592>
  8690. case srRecieveData:
  8691. if (frameBytesCount >= frameTotalLength) {
  8692. 8003fbe: f8b7 2124 ldrh.w r2, [r7, #292] @ 0x124
  8693. 8003fc2: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  8694. 8003fc6: 429a cmp r2, r3
  8695. 8003fc8: d303 bcc.n 8003fd2 <UartRxTask+0x2da>
  8696. receverState = srCheckCrc;
  8697. 8003fca: 2301 movs r3, #1
  8698. 8003fcc: f887 3133 strb.w r3, [r7, #307] @ 0x133
  8699. } else {
  8700. proceed = pdFALSE;
  8701. }
  8702. break;
  8703. 8003fd0: e15b b.n 800428a <UartRxTask+0x592>
  8704. proceed = pdFALSE;
  8705. 8003fd2: 2300 movs r3, #0
  8706. 8003fd4: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  8707. break;
  8708. 8003fd8: e157 b.n 800428a <UartRxTask+0x592>
  8709. case srCheckCrc:
  8710. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  8711. 8003fda: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8712. 8003fde: 6a1b ldr r3, [r3, #32]
  8713. 8003fe0: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  8714. 8003fe4: 4618 mov r0, r3
  8715. 8003fe6: f00e fb76 bl 80126d6 <osMutexAcquire>
  8716. frameCrc = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[frameTotalLength - FRAME_CRC_LENGTH]));
  8717. 8003fea: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8718. 8003fee: 691a ldr r2, [r3, #16]
  8719. 8003ff0: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  8720. 8003ff4: 3b01 subs r3, #1
  8721. 8003ff6: 4413 add r3, r2
  8722. 8003ff8: 781b ldrb r3, [r3, #0]
  8723. 8003ffa: 021b lsls r3, r3, #8
  8724. 8003ffc: b21a sxth r2, r3
  8725. 8003ffe: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8726. 8004002: 6919 ldr r1, [r3, #16]
  8727. 8004004: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  8728. 8004008: 3b02 subs r3, #2
  8729. 800400a: 440b add r3, r1
  8730. 800400c: 781b ldrb r3, [r3, #0]
  8731. 800400e: b21b sxth r3, r3
  8732. 8004010: 4313 orrs r3, r2
  8733. 8004012: b21b sxth r3, r3
  8734. 8004014: f8a7 3122 strh.w r3, [r7, #290] @ 0x122
  8735. crc = HAL_CRC_Calculate (&hcrc, (uint32_t*)(uartTaskData->frameData), frameTotalLength - FRAME_CRC_LENGTH);
  8736. 8004018: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8737. 800401c: 6919 ldr r1, [r3, #16]
  8738. 800401e: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  8739. 8004022: 3b02 subs r3, #2
  8740. 8004024: 461a mov r2, r3
  8741. 8004026: 4841 ldr r0, [pc, #260] @ (800412c <UartRxTask+0x434>)
  8742. 8004028: f002 fb34 bl 8006694 <HAL_CRC_Calculate>
  8743. 800402c: f8c7 0128 str.w r0, [r7, #296] @ 0x128
  8744. osMutexRelease (uartTaskData->rxDataBufferMutex);
  8745. 8004030: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8746. 8004034: 6a1b ldr r3, [r3, #32]
  8747. 8004036: 4618 mov r0, r3
  8748. 8004038: f00e fb98 bl 801276c <osMutexRelease>
  8749. crcPass = frameCrc == crc;
  8750. 800403c: f8b7 3122 ldrh.w r3, [r7, #290] @ 0x122
  8751. 8004040: f8d7 2128 ldr.w r2, [r7, #296] @ 0x128
  8752. 8004044: 429a cmp r2, r3
  8753. 8004046: bf0c ite eq
  8754. 8004048: 2301 moveq r3, #1
  8755. 800404a: 2300 movne r3, #0
  8756. 800404c: b2db uxtb r3, r3
  8757. 800404e: f8c7 3138 str.w r3, [r7, #312] @ 0x138
  8758. if (crcPass) {
  8759. 8004052: f8d7 3138 ldr.w r3, [r7, #312] @ 0x138
  8760. 8004056: 2b00 cmp r3, #0
  8761. 8004058: d00b beq.n 8004072 <UartRxTask+0x37a>
  8762. #if UART_TASK_LOGS
  8763. printf ("Uart%d: Frame CRC PASS\n", uartTaskData->uartNumber);
  8764. 800405a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8765. 800405e: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  8766. 8004062: 4619 mov r1, r3
  8767. 8004064: 4832 ldr r0, [pc, #200] @ (8004130 <UartRxTask+0x438>)
  8768. 8004066: f012 fb21 bl 80166ac <iprintf>
  8769. #endif
  8770. receverState = srExecuteCmd;
  8771. 800406a: 2303 movs r3, #3
  8772. 800406c: f887 3133 strb.w r3, [r7, #307] @ 0x133
  8773. } else {
  8774. receverState = srFail;
  8775. }
  8776. break;
  8777. 8004070: e10b b.n 800428a <UartRxTask+0x592>
  8778. receverState = srFail;
  8779. 8004072: 2304 movs r3, #4
  8780. 8004074: f887 3133 strb.w r3, [r7, #307] @ 0x133
  8781. break;
  8782. 8004078: e107 b.n 800428a <UartRxTask+0x592>
  8783. case srExecuteCmd:
  8784. if ((uartTaskData->processDataCb != NULL) || (uartTaskData->processRxDataMsgBuffer != NULL)) {
  8785. 800407a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8786. 800407e: 6a9b ldr r3, [r3, #40] @ 0x28
  8787. 8004080: 2b00 cmp r3, #0
  8788. 8004082: d104 bne.n 800408e <UartRxTask+0x396>
  8789. 8004084: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8790. 8004088: 6a5b ldr r3, [r3, #36] @ 0x24
  8791. 800408a: 2b00 cmp r3, #0
  8792. 800408c: d01e beq.n 80040cc <UartRxTask+0x3d4>
  8793. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  8794. 800408e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8795. 8004092: 6a1b ldr r3, [r3, #32]
  8796. 8004094: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  8797. 8004098: 4618 mov r0, r3
  8798. 800409a: f00e fb1c bl 80126d6 <osMutexAcquire>
  8799. memcpy (spFrameData.dataBuffer, &(uartTaskData->frameData[FRAME_HEADER_LENGTH]), spFrameData.frameHeader.frameDataLength);
  8800. 800409e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8801. 80040a2: 691b ldr r3, [r3, #16]
  8802. 80040a4: f103 0108 add.w r1, r3, #8
  8803. 80040a8: f507 73a0 add.w r3, r7, #320 @ 0x140
  8804. 80040ac: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8805. 80040b0: 889b ldrh r3, [r3, #4]
  8806. 80040b2: 461a mov r2, r3
  8807. 80040b4: f107 0310 add.w r3, r7, #16
  8808. 80040b8: 330c adds r3, #12
  8809. 80040ba: 4618 mov r0, r3
  8810. 80040bc: f012 fc1d bl 80168fa <memcpy>
  8811. osMutexRelease (uartTaskData->rxDataBufferMutex);
  8812. 80040c0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8813. 80040c4: 6a1b ldr r3, [r3, #32]
  8814. 80040c6: 4618 mov r0, r3
  8815. 80040c8: f00e fb50 bl 801276c <osMutexRelease>
  8816. }
  8817. if (uartTaskData->processRxDataMsgBuffer != NULL) {
  8818. 80040cc: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8819. 80040d0: 6a5b ldr r3, [r3, #36] @ 0x24
  8820. 80040d2: 2b00 cmp r3, #0
  8821. 80040d4: d015 beq.n 8004102 <UartRxTask+0x40a>
  8822. if(xMessageBufferSend (uartTaskData->processRxDataMsgBuffer, &spFrameData, sizeof (SerialProtocolFrameHeader) + spFrameData.frameHeader.frameDataLength, pdMS_TO_TICKS (200)) == pdFALSE)
  8823. 80040d6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8824. 80040da: 6a58 ldr r0, [r3, #36] @ 0x24
  8825. 80040dc: f507 73a0 add.w r3, r7, #320 @ 0x140
  8826. 80040e0: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8827. 80040e4: 889b ldrh r3, [r3, #4]
  8828. 80040e6: f103 020c add.w r2, r3, #12
  8829. 80040ea: f107 0110 add.w r1, r7, #16
  8830. 80040ee: 23c8 movs r3, #200 @ 0xc8
  8831. 80040f0: f00f fd5e bl 8013bb0 <xStreamBufferSend>
  8832. 80040f4: 4603 mov r3, r0
  8833. 80040f6: 2b00 cmp r3, #0
  8834. 80040f8: d103 bne.n 8004102 <UartRxTask+0x40a>
  8835. {
  8836. receverState = srFail;
  8837. 80040fa: 2304 movs r3, #4
  8838. 80040fc: f887 3133 strb.w r3, [r7, #307] @ 0x133
  8839. break;
  8840. 8004100: e0c3 b.n 800428a <UartRxTask+0x592>
  8841. }
  8842. }
  8843. if (uartTaskData->processDataCb != NULL) {
  8844. 8004102: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8845. 8004106: 6a9b ldr r3, [r3, #40] @ 0x28
  8846. 8004108: 2b00 cmp r3, #0
  8847. 800410a: d008 beq.n 800411e <UartRxTask+0x426>
  8848. uartTaskData->processDataCb (uartTaskData, &spFrameData);
  8849. 800410c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8850. 8004110: 6a9b ldr r3, [r3, #40] @ 0x28
  8851. 8004112: f107 0210 add.w r2, r7, #16
  8852. 8004116: 4611 mov r1, r2
  8853. 8004118: f8d7 012c ldr.w r0, [r7, #300] @ 0x12c
  8854. 800411c: 4798 blx r3
  8855. }
  8856. receverState = srFinish;
  8857. 800411e: 2305 movs r3, #5
  8858. 8004120: f887 3133 strb.w r3, [r7, #307] @ 0x133
  8859. break;
  8860. 8004124: e0b1 b.n 800428a <UartRxTask+0x592>
  8861. 8004126: bf00 nop
  8862. 8004128: 080174bc .word 0x080174bc
  8863. 800412c: 240003d4 .word 0x240003d4
  8864. 8004130: 080174dc .word 0x080174dc
  8865. case srFail:
  8866. dataToSend = 0;
  8867. 8004134: 2300 movs r3, #0
  8868. 8004136: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  8869. if ((frameTimeout == pdTRUE) && (frameBytesCount > 2)) {
  8870. 800413a: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  8871. 800413e: 2b01 cmp r3, #1
  8872. 8004140: d124 bne.n 800418c <UartRxTask+0x494>
  8873. 8004142: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  8874. 8004146: 2b02 cmp r3, #2
  8875. 8004148: d920 bls.n 800418c <UartRxTask+0x494>
  8876. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spTimeout, NULL, 0);
  8877. 800414a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8878. 800414e: 6898 ldr r0, [r3, #8]
  8879. 8004150: f507 73a0 add.w r3, r7, #320 @ 0x140
  8880. 8004154: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8881. 8004158: 8819 ldrh r1, [r3, #0]
  8882. 800415a: f507 73a0 add.w r3, r7, #320 @ 0x140
  8883. 800415e: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8884. 8004162: 789a ldrb r2, [r3, #2]
  8885. 8004164: 2300 movs r3, #0
  8886. 8004166: 9301 str r3, [sp, #4]
  8887. 8004168: 2300 movs r3, #0
  8888. 800416a: 9300 str r3, [sp, #0]
  8889. 800416c: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  8890. 8004170: f7fe fdac bl 8002ccc <PrepareRespFrame>
  8891. 8004174: 4603 mov r3, r0
  8892. 8004176: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  8893. #if UART_TASK_LOGS
  8894. printf ("Uart%d: RX data receiver timeout!\n", uartTaskData->uartNumber);
  8895. 800417a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8896. 800417e: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  8897. 8004182: 4619 mov r1, r3
  8898. 8004184: 4844 ldr r0, [pc, #272] @ (8004298 <UartRxTask+0x5a0>)
  8899. 8004186: f012 fa91 bl 80166ac <iprintf>
  8900. 800418a: e03c b.n 8004206 <UartRxTask+0x50e>
  8901. #endif
  8902. } else if (!crcPass) {
  8903. 800418c: f8d7 3138 ldr.w r3, [r7, #312] @ 0x138
  8904. 8004190: 2b00 cmp r3, #0
  8905. 8004192: d120 bne.n 80041d6 <UartRxTask+0x4de>
  8906. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spCrcFail, NULL, 0);
  8907. 8004194: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8908. 8004198: 6898 ldr r0, [r3, #8]
  8909. 800419a: f507 73a0 add.w r3, r7, #320 @ 0x140
  8910. 800419e: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8911. 80041a2: 8819 ldrh r1, [r3, #0]
  8912. 80041a4: f507 73a0 add.w r3, r7, #320 @ 0x140
  8913. 80041a8: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8914. 80041ac: 789a ldrb r2, [r3, #2]
  8915. 80041ae: 2300 movs r3, #0
  8916. 80041b0: 9301 str r3, [sp, #4]
  8917. 80041b2: 2300 movs r3, #0
  8918. 80041b4: 9300 str r3, [sp, #0]
  8919. 80041b6: f06f 0301 mvn.w r3, #1
  8920. 80041ba: f7fe fd87 bl 8002ccc <PrepareRespFrame>
  8921. 80041be: 4603 mov r3, r0
  8922. 80041c0: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  8923. #if UART_TASK_LOGS
  8924. printf ("Uart%d: Frame CRC FAIL\n", uartTaskData->uartNumber);
  8925. 80041c4: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8926. 80041c8: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  8927. 80041cc: 4619 mov r1, r3
  8928. 80041ce: 4833 ldr r0, [pc, #204] @ (800429c <UartRxTask+0x5a4>)
  8929. 80041d0: f012 fa6c bl 80166ac <iprintf>
  8930. 80041d4: e017 b.n 8004206 <UartRxTask+0x50e>
  8931. #endif
  8932. }
  8933. else
  8934. {
  8935. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spInternalError, NULL, 0);
  8936. 80041d6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8937. 80041da: 6898 ldr r0, [r3, #8]
  8938. 80041dc: f507 73a0 add.w r3, r7, #320 @ 0x140
  8939. 80041e0: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8940. 80041e4: 8819 ldrh r1, [r3, #0]
  8941. 80041e6: f507 73a0 add.w r3, r7, #320 @ 0x140
  8942. 80041ea: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  8943. 80041ee: 789a ldrb r2, [r3, #2]
  8944. 80041f0: 2300 movs r3, #0
  8945. 80041f2: 9301 str r3, [sp, #4]
  8946. 80041f4: 2300 movs r3, #0
  8947. 80041f6: 9300 str r3, [sp, #0]
  8948. 80041f8: f06f 0303 mvn.w r3, #3
  8949. 80041fc: f7fe fd66 bl 8002ccc <PrepareRespFrame>
  8950. 8004200: 4603 mov r3, r0
  8951. 8004202: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  8952. }
  8953. if (dataToSend > 0) {
  8954. 8004206: f8b7 313c ldrh.w r3, [r7, #316] @ 0x13c
  8955. 800420a: 2b00 cmp r3, #0
  8956. 800420c: d00a beq.n 8004224 <UartRxTask+0x52c>
  8957. HAL_UART_Transmit_IT (uartTaskData->huart, uartTaskData->uartTxBuffer, dataToSend);
  8958. 800420e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8959. 8004212: 6b18 ldr r0, [r3, #48] @ 0x30
  8960. 8004214: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8961. 8004218: 689b ldr r3, [r3, #8]
  8962. 800421a: f8b7 213c ldrh.w r2, [r7, #316] @ 0x13c
  8963. 800421e: 4619 mov r1, r3
  8964. 8004220: f00b fa2c bl 800f67c <HAL_UART_Transmit_IT>
  8965. }
  8966. #if UART_TASK_LOGS
  8967. printf ("Uart%d: TX bytes sent: %d\n", dataToSend, uartTaskData->uartNumber);
  8968. 8004224: f8b7 113c ldrh.w r1, [r7, #316] @ 0x13c
  8969. 8004228: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8970. 800422c: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  8971. 8004230: 461a mov r2, r3
  8972. 8004232: 481b ldr r0, [pc, #108] @ (80042a0 <UartRxTask+0x5a8>)
  8973. 8004234: f012 fa3a bl 80166ac <iprintf>
  8974. #endif
  8975. receverState = srFinish;
  8976. 8004238: 2305 movs r3, #5
  8977. 800423a: f887 3133 strb.w r3, [r7, #307] @ 0x133
  8978. break;
  8979. 800423e: e024 b.n 800428a <UartRxTask+0x592>
  8980. case srFinish:
  8981. default:
  8982. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  8983. 8004240: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8984. 8004244: 6a1b ldr r3, [r3, #32]
  8985. 8004246: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  8986. 800424a: 4618 mov r0, r3
  8987. 800424c: f00e fa43 bl 80126d6 <osMutexAcquire>
  8988. uartTaskData->frameBytesCount = 0;
  8989. 8004250: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8990. 8004254: 2200 movs r2, #0
  8991. 8004256: 82da strh r2, [r3, #22]
  8992. osMutexRelease (uartTaskData->rxDataBufferMutex);
  8993. 8004258: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  8994. 800425c: 6a1b ldr r3, [r3, #32]
  8995. 800425e: 4618 mov r0, r3
  8996. 8004260: f00e fa84 bl 801276c <osMutexRelease>
  8997. spFrameData.frameHeader.frameCommand = spUnknown;
  8998. 8004264: f507 73a0 add.w r3, r7, #320 @ 0x140
  8999. 8004268: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9000. 800426c: 2209 movs r2, #9
  9001. 800426e: 709a strb r2, [r3, #2]
  9002. frameTotalLength = 0;
  9003. 8004270: 2300 movs r3, #0
  9004. 8004272: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  9005. outputDataBufferPos = 0;
  9006. 8004276: 4b0b ldr r3, [pc, #44] @ (80042a4 <UartRxTask+0x5ac>)
  9007. 8004278: 2200 movs r2, #0
  9008. 800427a: 801a strh r2, [r3, #0]
  9009. receverState = srWaitForHeader;
  9010. 800427c: 2300 movs r3, #0
  9011. 800427e: f887 3133 strb.w r3, [r7, #307] @ 0x133
  9012. proceed = pdFALSE;
  9013. 8004282: 2300 movs r3, #0
  9014. 8004284: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  9015. break;
  9016. 8004288: bf00 nop
  9017. while (proceed) {
  9018. 800428a: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
  9019. 800428e: 2b00 cmp r3, #0
  9020. 8004290: f47f ade0 bne.w 8003e54 <UartRxTask+0x15c>
  9021. frameTimeout = !(xTaskNotifyWait (0, 0, &bytesRec, pdMS_TO_TICKS (FRAME_TIMEOUT_MS)));
  9022. 8004294: e581 b.n 8003d9a <UartRxTask+0xa2>
  9023. 8004296: bf00 nop
  9024. 8004298: 080174f4 .word 0x080174f4
  9025. 800429c: 08017518 .word 0x08017518
  9026. 80042a0: 08017530 .word 0x08017530
  9027. 80042a4: 24000c08 .word 0x24000c08
  9028. 080042a8 <Uart1ReceivedDataProcessCallback>:
  9029. void Uart8ReceivedDataProcessCallback (void* arg, SerialProtocolFrameData* spFrameData)
  9030. {
  9031. Uart1ReceivedDataProcessCallback(arg, spFrameData);
  9032. }
  9033. void Uart1ReceivedDataProcessCallback (void* arg, SerialProtocolFrameData* spFrameData) {
  9034. 80042a8: b590 push {r4, r7, lr}
  9035. 80042aa: b0a1 sub sp, #132 @ 0x84
  9036. 80042ac: af06 add r7, sp, #24
  9037. 80042ae: 6078 str r0, [r7, #4]
  9038. 80042b0: 6039 str r1, [r7, #0]
  9039. UartTaskData* uartTaskData = (UartTaskData*)arg;
  9040. 80042b2: 687b ldr r3, [r7, #4]
  9041. 80042b4: 64bb str r3, [r7, #72] @ 0x48
  9042. uint16_t dataToSend = 0;
  9043. 80042b6: 2300 movs r3, #0
  9044. 80042b8: f8a7 3046 strh.w r3, [r7, #70] @ 0x46
  9045. outputDataBufferPos = 0;
  9046. 80042bc: 4baa ldr r3, [pc, #680] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9047. 80042be: 2200 movs r2, #0
  9048. 80042c0: 801a strh r2, [r3, #0]
  9049. uint16_t inputDataBufferPos = 0;
  9050. 80042c2: 2300 movs r3, #0
  9051. 80042c4: 867b strh r3, [r7, #50] @ 0x32
  9052. SerialProtocolRespStatus respStatus = spUnknownCommand;
  9053. 80042c6: 23fd movs r3, #253 @ 0xfd
  9054. 80042c8: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9055. switch (spFrameData->frameHeader.frameCommand) {
  9056. 80042cc: 683b ldr r3, [r7, #0]
  9057. 80042ce: 789b ldrb r3, [r3, #2]
  9058. 80042d0: 2b08 cmp r3, #8
  9059. 80042d2: f200 8311 bhi.w 80048f8 <Uart1ReceivedDataProcessCallback+0x650>
  9060. 80042d6: a201 add r2, pc, #4 @ (adr r2, 80042dc <Uart1ReceivedDataProcessCallback+0x34>)
  9061. 80042d8: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  9062. 80042dc: 08004301 .word 0x08004301
  9063. 80042e0: 080043ef .word 0x080043ef
  9064. 80042e4: 080044e9 .word 0x080044e9
  9065. 80042e8: 080045ff .word 0x080045ff
  9066. 80042ec: 080046a1 .word 0x080046a1
  9067. 80042f0: 080047ab .word 0x080047ab
  9068. 80042f4: 08004801 .word 0x08004801
  9069. 80042f8: 08004743 .word 0x08004743
  9070. 80042fc: 08004857 .word 0x08004857
  9071. case spGetElectricalMeasurments:
  9072. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  9073. 8004300: 4b9a ldr r3, [pc, #616] @ (800456c <Uart1ReceivedDataProcessCallback+0x2c4>)
  9074. 8004302: 681b ldr r3, [r3, #0]
  9075. 8004304: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  9076. 8004308: 4618 mov r0, r3
  9077. 800430a: f00e f9e4 bl 80126d6 <osMutexAcquire>
  9078. 800430e: 4603 mov r3, r0
  9079. 8004310: 2b00 cmp r3, #0
  9080. 8004312: d168 bne.n 80043e6 <Uart1ReceivedDataProcessCallback+0x13e>
  9081. for (int i = 0; i < 3; i++) {
  9082. 8004314: 2300 movs r3, #0
  9083. 8004316: 663b str r3, [r7, #96] @ 0x60
  9084. 8004318: e00b b.n 8004332 <Uart1ReceivedDataProcessCallback+0x8a>
  9085. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.voltageRMS[i], sizeof (float));
  9086. 800431a: 6e3b ldr r3, [r7, #96] @ 0x60
  9087. 800431c: 009b lsls r3, r3, #2
  9088. 800431e: 4a94 ldr r2, [pc, #592] @ (8004570 <Uart1ReceivedDataProcessCallback+0x2c8>)
  9089. 8004320: 441a add r2, r3
  9090. 8004322: 2304 movs r3, #4
  9091. 8004324: 4990 ldr r1, [pc, #576] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9092. 8004326: 4893 ldr r0, [pc, #588] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9093. 8004328: f7fe fc6c bl 8002c04 <WriteDataToBuffer>
  9094. for (int i = 0; i < 3; i++) {
  9095. 800432c: 6e3b ldr r3, [r7, #96] @ 0x60
  9096. 800432e: 3301 adds r3, #1
  9097. 8004330: 663b str r3, [r7, #96] @ 0x60
  9098. 8004332: 6e3b ldr r3, [r7, #96] @ 0x60
  9099. 8004334: 2b02 cmp r3, #2
  9100. 8004336: ddf0 ble.n 800431a <Uart1ReceivedDataProcessCallback+0x72>
  9101. }
  9102. for (int i = 0; i < 3; i++) {
  9103. 8004338: 2300 movs r3, #0
  9104. 800433a: 65fb str r3, [r7, #92] @ 0x5c
  9105. 800433c: e00d b.n 800435a <Uart1ReceivedDataProcessCallback+0xb2>
  9106. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.voltagePeak[i], sizeof (float));
  9107. 800433e: 6dfb ldr r3, [r7, #92] @ 0x5c
  9108. 8004340: 3302 adds r3, #2
  9109. 8004342: 009b lsls r3, r3, #2
  9110. 8004344: 4a8a ldr r2, [pc, #552] @ (8004570 <Uart1ReceivedDataProcessCallback+0x2c8>)
  9111. 8004346: 4413 add r3, r2
  9112. 8004348: 1d1a adds r2, r3, #4
  9113. 800434a: 2304 movs r3, #4
  9114. 800434c: 4986 ldr r1, [pc, #536] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9115. 800434e: 4889 ldr r0, [pc, #548] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9116. 8004350: f7fe fc58 bl 8002c04 <WriteDataToBuffer>
  9117. for (int i = 0; i < 3; i++) {
  9118. 8004354: 6dfb ldr r3, [r7, #92] @ 0x5c
  9119. 8004356: 3301 adds r3, #1
  9120. 8004358: 65fb str r3, [r7, #92] @ 0x5c
  9121. 800435a: 6dfb ldr r3, [r7, #92] @ 0x5c
  9122. 800435c: 2b02 cmp r3, #2
  9123. 800435e: ddee ble.n 800433e <Uart1ReceivedDataProcessCallback+0x96>
  9124. }
  9125. for (int i = 0; i < 3; i++) {
  9126. 8004360: 2300 movs r3, #0
  9127. 8004362: 65bb str r3, [r7, #88] @ 0x58
  9128. 8004364: e00c b.n 8004380 <Uart1ReceivedDataProcessCallback+0xd8>
  9129. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.currentRMS[i], sizeof (float));
  9130. 8004366: 6dbb ldr r3, [r7, #88] @ 0x58
  9131. 8004368: 3306 adds r3, #6
  9132. 800436a: 009b lsls r3, r3, #2
  9133. 800436c: 4a80 ldr r2, [pc, #512] @ (8004570 <Uart1ReceivedDataProcessCallback+0x2c8>)
  9134. 800436e: 441a add r2, r3
  9135. 8004370: 2304 movs r3, #4
  9136. 8004372: 497d ldr r1, [pc, #500] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9137. 8004374: 487f ldr r0, [pc, #508] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9138. 8004376: f7fe fc45 bl 8002c04 <WriteDataToBuffer>
  9139. for (int i = 0; i < 3; i++) {
  9140. 800437a: 6dbb ldr r3, [r7, #88] @ 0x58
  9141. 800437c: 3301 adds r3, #1
  9142. 800437e: 65bb str r3, [r7, #88] @ 0x58
  9143. 8004380: 6dbb ldr r3, [r7, #88] @ 0x58
  9144. 8004382: 2b02 cmp r3, #2
  9145. 8004384: ddef ble.n 8004366 <Uart1ReceivedDataProcessCallback+0xbe>
  9146. }
  9147. for (int i = 0; i < 3; i++) {
  9148. 8004386: 2300 movs r3, #0
  9149. 8004388: 657b str r3, [r7, #84] @ 0x54
  9150. 800438a: e00d b.n 80043a8 <Uart1ReceivedDataProcessCallback+0x100>
  9151. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.currentPeak[i], sizeof (float));
  9152. 800438c: 6d7b ldr r3, [r7, #84] @ 0x54
  9153. 800438e: 3308 adds r3, #8
  9154. 8004390: 009b lsls r3, r3, #2
  9155. 8004392: 4a77 ldr r2, [pc, #476] @ (8004570 <Uart1ReceivedDataProcessCallback+0x2c8>)
  9156. 8004394: 4413 add r3, r2
  9157. 8004396: 1d1a adds r2, r3, #4
  9158. 8004398: 2304 movs r3, #4
  9159. 800439a: 4973 ldr r1, [pc, #460] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9160. 800439c: 4875 ldr r0, [pc, #468] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9161. 800439e: f7fe fc31 bl 8002c04 <WriteDataToBuffer>
  9162. for (int i = 0; i < 3; i++) {
  9163. 80043a2: 6d7b ldr r3, [r7, #84] @ 0x54
  9164. 80043a4: 3301 adds r3, #1
  9165. 80043a6: 657b str r3, [r7, #84] @ 0x54
  9166. 80043a8: 6d7b ldr r3, [r7, #84] @ 0x54
  9167. 80043aa: 2b02 cmp r3, #2
  9168. 80043ac: ddee ble.n 800438c <Uart1ReceivedDataProcessCallback+0xe4>
  9169. }
  9170. for (int i = 0; i < 3; i++) {
  9171. 80043ae: 2300 movs r3, #0
  9172. 80043b0: 653b str r3, [r7, #80] @ 0x50
  9173. 80043b2: e00c b.n 80043ce <Uart1ReceivedDataProcessCallback+0x126>
  9174. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.power[i], sizeof (float));
  9175. 80043b4: 6d3b ldr r3, [r7, #80] @ 0x50
  9176. 80043b6: 330c adds r3, #12
  9177. 80043b8: 009b lsls r3, r3, #2
  9178. 80043ba: 4a6d ldr r2, [pc, #436] @ (8004570 <Uart1ReceivedDataProcessCallback+0x2c8>)
  9179. 80043bc: 441a add r2, r3
  9180. 80043be: 2304 movs r3, #4
  9181. 80043c0: 4969 ldr r1, [pc, #420] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9182. 80043c2: 486c ldr r0, [pc, #432] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9183. 80043c4: f7fe fc1e bl 8002c04 <WriteDataToBuffer>
  9184. for (int i = 0; i < 3; i++) {
  9185. 80043c8: 6d3b ldr r3, [r7, #80] @ 0x50
  9186. 80043ca: 3301 adds r3, #1
  9187. 80043cc: 653b str r3, [r7, #80] @ 0x50
  9188. 80043ce: 6d3b ldr r3, [r7, #80] @ 0x50
  9189. 80043d0: 2b02 cmp r3, #2
  9190. 80043d2: ddef ble.n 80043b4 <Uart1ReceivedDataProcessCallback+0x10c>
  9191. }
  9192. osMutexRelease (resMeasurementsMutex);
  9193. 80043d4: 4b65 ldr r3, [pc, #404] @ (800456c <Uart1ReceivedDataProcessCallback+0x2c4>)
  9194. 80043d6: 681b ldr r3, [r3, #0]
  9195. 80043d8: 4618 mov r0, r3
  9196. 80043da: f00e f9c7 bl 801276c <osMutexRelease>
  9197. respStatus = spOK;
  9198. 80043de: 2300 movs r3, #0
  9199. 80043e0: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9200. } else {
  9201. respStatus = spInternalError;
  9202. }
  9203. break;
  9204. 80043e4: e28c b.n 8004900 <Uart1ReceivedDataProcessCallback+0x658>
  9205. respStatus = spInternalError;
  9206. 80043e6: 23fc movs r3, #252 @ 0xfc
  9207. 80043e8: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9208. break;
  9209. 80043ec: e288 b.n 8004900 <Uart1ReceivedDataProcessCallback+0x658>
  9210. case spGetSensorMeasurments:
  9211. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  9212. 80043ee: 4b62 ldr r3, [pc, #392] @ (8004578 <Uart1ReceivedDataProcessCallback+0x2d0>)
  9213. 80043f0: 681b ldr r3, [r3, #0]
  9214. 80043f2: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  9215. 80043f6: 4618 mov r0, r3
  9216. 80043f8: f00e f96d bl 80126d6 <osMutexAcquire>
  9217. 80043fc: 4603 mov r3, r0
  9218. 80043fe: 2b00 cmp r3, #0
  9219. 8004400: d16e bne.n 80044e0 <Uart1ReceivedDataProcessCallback+0x238>
  9220. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvTemperature[0], sizeof (float));
  9221. 8004402: 2304 movs r3, #4
  9222. 8004404: 4a5d ldr r2, [pc, #372] @ (800457c <Uart1ReceivedDataProcessCallback+0x2d4>)
  9223. 8004406: 4958 ldr r1, [pc, #352] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9224. 8004408: 485a ldr r0, [pc, #360] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9225. 800440a: f7fe fbfb bl 8002c04 <WriteDataToBuffer>
  9226. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvTemperature[1], sizeof (float));
  9227. 800440e: 2304 movs r3, #4
  9228. 8004410: 4a5b ldr r2, [pc, #364] @ (8004580 <Uart1ReceivedDataProcessCallback+0x2d8>)
  9229. 8004412: 4955 ldr r1, [pc, #340] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9230. 8004414: 4857 ldr r0, [pc, #348] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9231. 8004416: f7fe fbf5 bl 8002c04 <WriteDataToBuffer>
  9232. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.fanVoltage, sizeof (float));
  9233. 800441a: 2304 movs r3, #4
  9234. 800441c: 4a59 ldr r2, [pc, #356] @ (8004584 <Uart1ReceivedDataProcessCallback+0x2dc>)
  9235. 800441e: 4952 ldr r1, [pc, #328] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9236. 8004420: 4854 ldr r0, [pc, #336] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9237. 8004422: f7fe fbef bl 8002c04 <WriteDataToBuffer>
  9238. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvEncoder, sizeof (float));
  9239. 8004426: 2304 movs r3, #4
  9240. 8004428: 4a57 ldr r2, [pc, #348] @ (8004588 <Uart1ReceivedDataProcessCallback+0x2e0>)
  9241. 800442a: 494f ldr r1, [pc, #316] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9242. 800442c: 4851 ldr r0, [pc, #324] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9243. 800442e: f7fe fbe9 bl 8002c04 <WriteDataToBuffer>
  9244. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXStatus, sizeof (uint8_t));
  9245. 8004432: 2301 movs r3, #1
  9246. 8004434: 4a55 ldr r2, [pc, #340] @ (800458c <Uart1ReceivedDataProcessCallback+0x2e4>)
  9247. 8004436: 494c ldr r1, [pc, #304] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9248. 8004438: 484e ldr r0, [pc, #312] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9249. 800443a: f7fe fbe3 bl 8002c04 <WriteDataToBuffer>
  9250. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYStatus, sizeof (uint8_t));
  9251. 800443e: 2301 movs r3, #1
  9252. 8004440: 4a53 ldr r2, [pc, #332] @ (8004590 <Uart1ReceivedDataProcessCallback+0x2e8>)
  9253. 8004442: 4949 ldr r1, [pc, #292] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9254. 8004444: 484b ldr r0, [pc, #300] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9255. 8004446: f7fe fbdd bl 8002c04 <WriteDataToBuffer>
  9256. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXAveCurrent, sizeof (float));
  9257. 800444a: 2304 movs r3, #4
  9258. 800444c: 4a51 ldr r2, [pc, #324] @ (8004594 <Uart1ReceivedDataProcessCallback+0x2ec>)
  9259. 800444e: 4946 ldr r1, [pc, #280] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9260. 8004450: 4848 ldr r0, [pc, #288] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9261. 8004452: f7fe fbd7 bl 8002c04 <WriteDataToBuffer>
  9262. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYAveCurrent, sizeof (float));
  9263. 8004456: 2304 movs r3, #4
  9264. 8004458: 4a4f ldr r2, [pc, #316] @ (8004598 <Uart1ReceivedDataProcessCallback+0x2f0>)
  9265. 800445a: 4943 ldr r1, [pc, #268] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9266. 800445c: 4845 ldr r0, [pc, #276] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9267. 800445e: f7fe fbd1 bl 8002c04 <WriteDataToBuffer>
  9268. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXPeakCurrent, sizeof (float));
  9269. 8004462: 2304 movs r3, #4
  9270. 8004464: 4a4d ldr r2, [pc, #308] @ (800459c <Uart1ReceivedDataProcessCallback+0x2f4>)
  9271. 8004466: 4940 ldr r1, [pc, #256] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9272. 8004468: 4842 ldr r0, [pc, #264] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9273. 800446a: f7fe fbcb bl 8002c04 <WriteDataToBuffer>
  9274. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYPeakCurrent, sizeof (float));
  9275. 800446e: 2304 movs r3, #4
  9276. 8004470: 4a4b ldr r2, [pc, #300] @ (80045a0 <Uart1ReceivedDataProcessCallback+0x2f8>)
  9277. 8004472: 493d ldr r1, [pc, #244] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9278. 8004474: 483f ldr r0, [pc, #252] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9279. 8004476: f7fe fbc5 bl 8002c04 <WriteDataToBuffer>
  9280. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitXSwitchUp, sizeof (uint8_t));
  9281. 800447a: 2301 movs r3, #1
  9282. 800447c: 4a49 ldr r2, [pc, #292] @ (80045a4 <Uart1ReceivedDataProcessCallback+0x2fc>)
  9283. 800447e: 493a ldr r1, [pc, #232] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9284. 8004480: 483c ldr r0, [pc, #240] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9285. 8004482: f7fe fbbf bl 8002c04 <WriteDataToBuffer>
  9286. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitXSwitchDown, sizeof (uint8_t));
  9287. 8004486: 2301 movs r3, #1
  9288. 8004488: 4a47 ldr r2, [pc, #284] @ (80045a8 <Uart1ReceivedDataProcessCallback+0x300>)
  9289. 800448a: 4937 ldr r1, [pc, #220] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9290. 800448c: 4839 ldr r0, [pc, #228] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9291. 800448e: f7fe fbb9 bl 8002c04 <WriteDataToBuffer>
  9292. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitXSwitchCenter, sizeof (uint8_t));
  9293. 8004492: 2301 movs r3, #1
  9294. 8004494: 4a45 ldr r2, [pc, #276] @ (80045ac <Uart1ReceivedDataProcessCallback+0x304>)
  9295. 8004496: 4934 ldr r1, [pc, #208] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9296. 8004498: 4836 ldr r0, [pc, #216] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9297. 800449a: f7fe fbb3 bl 8002c04 <WriteDataToBuffer>
  9298. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitYSwitchUp, sizeof (uint8_t));
  9299. 800449e: 2301 movs r3, #1
  9300. 80044a0: 4a43 ldr r2, [pc, #268] @ (80045b0 <Uart1ReceivedDataProcessCallback+0x308>)
  9301. 80044a2: 4931 ldr r1, [pc, #196] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9302. 80044a4: 4833 ldr r0, [pc, #204] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9303. 80044a6: f7fe fbad bl 8002c04 <WriteDataToBuffer>
  9304. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitYSwitchDown, sizeof (uint8_t));
  9305. 80044aa: 2301 movs r3, #1
  9306. 80044ac: 4a41 ldr r2, [pc, #260] @ (80045b4 <Uart1ReceivedDataProcessCallback+0x30c>)
  9307. 80044ae: 492e ldr r1, [pc, #184] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9308. 80044b0: 4830 ldr r0, [pc, #192] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9309. 80044b2: f7fe fba7 bl 8002c04 <WriteDataToBuffer>
  9310. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitYSwitchCenter, sizeof (uint8_t));
  9311. 80044b6: 2301 movs r3, #1
  9312. 80044b8: 4a3f ldr r2, [pc, #252] @ (80045b8 <Uart1ReceivedDataProcessCallback+0x310>)
  9313. 80044ba: 492b ldr r1, [pc, #172] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9314. 80044bc: 482d ldr r0, [pc, #180] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9315. 80044be: f7fe fba1 bl 8002c04 <WriteDataToBuffer>
  9316. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.powerSupplyFailMask, sizeof (uint8_t));
  9317. 80044c2: 2301 movs r3, #1
  9318. 80044c4: 4a3d ldr r2, [pc, #244] @ (80045bc <Uart1ReceivedDataProcessCallback+0x314>)
  9319. 80044c6: 4928 ldr r1, [pc, #160] @ (8004568 <Uart1ReceivedDataProcessCallback+0x2c0>)
  9320. 80044c8: 482a ldr r0, [pc, #168] @ (8004574 <Uart1ReceivedDataProcessCallback+0x2cc>)
  9321. 80044ca: f7fe fb9b bl 8002c04 <WriteDataToBuffer>
  9322. osMutexRelease (sensorsInfoMutex);
  9323. 80044ce: 4b2a ldr r3, [pc, #168] @ (8004578 <Uart1ReceivedDataProcessCallback+0x2d0>)
  9324. 80044d0: 681b ldr r3, [r3, #0]
  9325. 80044d2: 4618 mov r0, r3
  9326. 80044d4: f00e f94a bl 801276c <osMutexRelease>
  9327. respStatus = spOK;
  9328. 80044d8: 2300 movs r3, #0
  9329. 80044da: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9330. } else {
  9331. respStatus = spInternalError;
  9332. }
  9333. break;
  9334. 80044de: e20f b.n 8004900 <Uart1ReceivedDataProcessCallback+0x658>
  9335. respStatus = spInternalError;
  9336. 80044e0: 23fc movs r3, #252 @ 0xfc
  9337. 80044e2: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9338. break;
  9339. 80044e6: e20b b.n 8004900 <Uart1ReceivedDataProcessCallback+0x658>
  9340. case spSetFanSpeed:
  9341. osTimerStop (fanTimerHandle);
  9342. 80044e8: 4b35 ldr r3, [pc, #212] @ (80045c0 <Uart1ReceivedDataProcessCallback+0x318>)
  9343. 80044ea: 681b ldr r3, [r3, #0]
  9344. 80044ec: 4618 mov r0, r3
  9345. 80044ee: f00e f835 bl 801255c <osTimerStop>
  9346. int32_t fanTimerPeriod = 0;
  9347. 80044f2: 2300 movs r3, #0
  9348. 80044f4: 62fb str r3, [r7, #44] @ 0x2c
  9349. uint32_t pulse = 0;
  9350. 80044f6: 2300 movs r3, #0
  9351. 80044f8: 62bb str r3, [r7, #40] @ 0x28
  9352. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, &pulse);
  9353. 80044fa: 683b ldr r3, [r7, #0]
  9354. 80044fc: 330c adds r3, #12
  9355. 80044fe: f107 0228 add.w r2, r7, #40 @ 0x28
  9356. 8004502: f107 0132 add.w r1, r7, #50 @ 0x32
  9357. 8004506: 4618 mov r0, r3
  9358. 8004508: f7fe fbad bl 8002c66 <ReadWordFromBufer>
  9359. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&fanTimerPeriod);
  9360. 800450c: 683b ldr r3, [r7, #0]
  9361. 800450e: 330c adds r3, #12
  9362. 8004510: f107 022c add.w r2, r7, #44 @ 0x2c
  9363. 8004514: f107 0132 add.w r1, r7, #50 @ 0x32
  9364. 8004518: 4618 mov r0, r3
  9365. 800451a: f7fe fba4 bl 8002c66 <ReadWordFromBufer>
  9366. fanTimerConfigOC.Pulse = pulse * 10;
  9367. 800451e: 6aba ldr r2, [r7, #40] @ 0x28
  9368. 8004520: 4613 mov r3, r2
  9369. 8004522: 009b lsls r3, r3, #2
  9370. 8004524: 4413 add r3, r2
  9371. 8004526: 005b lsls r3, r3, #1
  9372. 8004528: 461a mov r2, r3
  9373. 800452a: 4b26 ldr r3, [pc, #152] @ (80045c4 <Uart1ReceivedDataProcessCallback+0x31c>)
  9374. 800452c: 605a str r2, [r3, #4]
  9375. if (HAL_TIM_PWM_ConfigChannel (&htim1, &fanTimerConfigOC, TIM_CHANNEL_2) != HAL_OK) {
  9376. 800452e: 2204 movs r2, #4
  9377. 8004530: 4924 ldr r1, [pc, #144] @ (80045c4 <Uart1ReceivedDataProcessCallback+0x31c>)
  9378. 8004532: 4825 ldr r0, [pc, #148] @ (80045c8 <Uart1ReceivedDataProcessCallback+0x320>)
  9379. 8004534: f009 ffec bl 800e510 <HAL_TIM_PWM_ConfigChannel>
  9380. 8004538: 4603 mov r3, r0
  9381. 800453a: 2b00 cmp r3, #0
  9382. 800453c: d001 beq.n 8004542 <Uart1ReceivedDataProcessCallback+0x29a>
  9383. Error_Handler ();
  9384. 800453e: f7fd fa6f bl 8001a20 <Error_Handler>
  9385. }
  9386. if (fanTimerPeriod > 0) {
  9387. 8004542: 6afb ldr r3, [r7, #44] @ 0x2c
  9388. 8004544: 2b00 cmp r3, #0
  9389. 8004546: dd41 ble.n 80045cc <Uart1ReceivedDataProcessCallback+0x324>
  9390. osTimerStart (fanTimerHandle, fanTimerPeriod * 1000);
  9391. 8004548: 4b1d ldr r3, [pc, #116] @ (80045c0 <Uart1ReceivedDataProcessCallback+0x318>)
  9392. 800454a: 681a ldr r2, [r3, #0]
  9393. 800454c: 6afb ldr r3, [r7, #44] @ 0x2c
  9394. 800454e: f44f 717a mov.w r1, #1000 @ 0x3e8
  9395. 8004552: fb01 f303 mul.w r3, r1, r3
  9396. 8004556: 4619 mov r1, r3
  9397. 8004558: 4610 mov r0, r2
  9398. 800455a: f00d ffd1 bl 8012500 <osTimerStart>
  9399. HAL_TIM_PWM_Start (&htim1, TIM_CHANNEL_2);
  9400. 800455e: 2104 movs r1, #4
  9401. 8004560: 4819 ldr r0, [pc, #100] @ (80045c8 <Uart1ReceivedDataProcessCallback+0x320>)
  9402. 8004562: f009 fd29 bl 800dfb8 <HAL_TIM_PWM_Start>
  9403. 8004566: e046 b.n 80045f6 <Uart1ReceivedDataProcessCallback+0x34e>
  9404. 8004568: 24000c08 .word 0x24000c08
  9405. 800456c: 2400074c .word 0x2400074c
  9406. 8004570: 24000758 .word 0x24000758
  9407. 8004574: 24000b88 .word 0x24000b88
  9408. 8004578: 24000750 .word 0x24000750
  9409. 800457c: 24000794 .word 0x24000794
  9410. 8004580: 24000798 .word 0x24000798
  9411. 8004584: 2400079c .word 0x2400079c
  9412. 8004588: 240007a0 .word 0x240007a0
  9413. 800458c: 240007a4 .word 0x240007a4
  9414. 8004590: 240007a5 .word 0x240007a5
  9415. 8004594: 240007a8 .word 0x240007a8
  9416. 8004598: 240007ac .word 0x240007ac
  9417. 800459c: 240007b0 .word 0x240007b0
  9418. 80045a0: 240007b4 .word 0x240007b4
  9419. 80045a4: 240007b8 .word 0x240007b8
  9420. 80045a8: 240007b9 .word 0x240007b9
  9421. 80045ac: 240007ba .word 0x240007ba
  9422. 80045b0: 240007bb .word 0x240007bb
  9423. 80045b4: 240007bc .word 0x240007bc
  9424. 80045b8: 240007bd .word 0x240007bd
  9425. 80045bc: 240007be .word 0x240007be
  9426. 80045c0: 24000660 .word 0x24000660
  9427. 80045c4: 240006f0 .word 0x240006f0
  9428. 80045c8: 24000420 .word 0x24000420
  9429. } else if (fanTimerPeriod == 0) {
  9430. 80045cc: 6afb ldr r3, [r7, #44] @ 0x2c
  9431. 80045ce: 2b00 cmp r3, #0
  9432. 80045d0: d109 bne.n 80045e6 <Uart1ReceivedDataProcessCallback+0x33e>
  9433. osTimerStop (fanTimerHandle);
  9434. 80045d2: 4ba7 ldr r3, [pc, #668] @ (8004870 <Uart1ReceivedDataProcessCallback+0x5c8>)
  9435. 80045d4: 681b ldr r3, [r3, #0]
  9436. 80045d6: 4618 mov r0, r3
  9437. 80045d8: f00d ffc0 bl 801255c <osTimerStop>
  9438. HAL_TIM_PWM_Stop (&htim1, TIM_CHANNEL_2);
  9439. 80045dc: 2104 movs r1, #4
  9440. 80045de: 48a5 ldr r0, [pc, #660] @ (8004874 <Uart1ReceivedDataProcessCallback+0x5cc>)
  9441. 80045e0: f009 fdf8 bl 800e1d4 <HAL_TIM_PWM_Stop>
  9442. 80045e4: e007 b.n 80045f6 <Uart1ReceivedDataProcessCallback+0x34e>
  9443. } else if (fanTimerPeriod == -1) {
  9444. 80045e6: 6afb ldr r3, [r7, #44] @ 0x2c
  9445. 80045e8: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  9446. 80045ec: d103 bne.n 80045f6 <Uart1ReceivedDataProcessCallback+0x34e>
  9447. HAL_TIM_PWM_Start (&htim1, TIM_CHANNEL_2);
  9448. 80045ee: 2104 movs r1, #4
  9449. 80045f0: 48a0 ldr r0, [pc, #640] @ (8004874 <Uart1ReceivedDataProcessCallback+0x5cc>)
  9450. 80045f2: f009 fce1 bl 800dfb8 <HAL_TIM_PWM_Start>
  9451. }
  9452. respStatus = spOK;
  9453. 80045f6: 2300 movs r3, #0
  9454. 80045f8: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9455. break;
  9456. 80045fc: e180 b.n 8004900 <Uart1ReceivedDataProcessCallback+0x658>
  9457. case spSetMotorXOn:
  9458. int32_t motorXPWMPulse = 0;
  9459. 80045fe: 2300 movs r3, #0
  9460. 8004600: 627b str r3, [r7, #36] @ 0x24
  9461. int32_t motorXTimerPeriod = 0;
  9462. 8004602: 2300 movs r3, #0
  9463. 8004604: 623b str r3, [r7, #32]
  9464. uint32_t motorXStatus = 0;
  9465. 8004606: 2300 movs r3, #0
  9466. 8004608: 637b str r3, [r7, #52] @ 0x34
  9467. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorXPWMPulse);
  9468. 800460a: 683b ldr r3, [r7, #0]
  9469. 800460c: 330c adds r3, #12
  9470. 800460e: f107 0224 add.w r2, r7, #36 @ 0x24
  9471. 8004612: f107 0132 add.w r1, r7, #50 @ 0x32
  9472. 8004616: 4618 mov r0, r3
  9473. 8004618: f7fe fb25 bl 8002c66 <ReadWordFromBufer>
  9474. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorXTimerPeriod);
  9475. 800461c: 683b ldr r3, [r7, #0]
  9476. 800461e: 330c adds r3, #12
  9477. 8004620: f107 0220 add.w r2, r7, #32
  9478. 8004624: f107 0132 add.w r1, r7, #50 @ 0x32
  9479. 8004628: 4618 mov r0, r3
  9480. 800462a: f7fe fb1c bl 8002c66 <ReadWordFromBufer>
  9481. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  9482. 800462e: 4b92 ldr r3, [pc, #584] @ (8004878 <Uart1ReceivedDataProcessCallback+0x5d0>)
  9483. 8004630: 681b ldr r3, [r3, #0]
  9484. 8004632: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  9485. 8004636: 4618 mov r0, r3
  9486. 8004638: f00e f84d bl 80126d6 <osMutexAcquire>
  9487. 800463c: 4603 mov r3, r0
  9488. 800463e: 2b00 cmp r3, #0
  9489. 8004640: d12a bne.n 8004698 <Uart1ReceivedDataProcessCallback+0x3f0>
  9490. motorXStatus =
  9491. motorControl (&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_1, TIM_CHANNEL_2, motorXTimerHandle, motorXPWMPulse, motorXTimerPeriod, sensorsInfo.limitXSwitchUp, sensorsInfo.limitXSwitchDown);
  9492. 8004642: 4b8e ldr r3, [pc, #568] @ (800487c <Uart1ReceivedDataProcessCallback+0x5d4>)
  9493. 8004644: 681b ldr r3, [r3, #0]
  9494. 8004646: 6a7a ldr r2, [r7, #36] @ 0x24
  9495. 8004648: 6a39 ldr r1, [r7, #32]
  9496. 800464a: 488d ldr r0, [pc, #564] @ (8004880 <Uart1ReceivedDataProcessCallback+0x5d8>)
  9497. 800464c: f890 0024 ldrb.w r0, [r0, #36] @ 0x24
  9498. 8004650: 4c8b ldr r4, [pc, #556] @ (8004880 <Uart1ReceivedDataProcessCallback+0x5d8>)
  9499. 8004652: f894 4025 ldrb.w r4, [r4, #37] @ 0x25
  9500. 8004656: 9404 str r4, [sp, #16]
  9501. 8004658: 9003 str r0, [sp, #12]
  9502. 800465a: 9102 str r1, [sp, #8]
  9503. 800465c: 9201 str r2, [sp, #4]
  9504. 800465e: 9300 str r3, [sp, #0]
  9505. 8004660: 2304 movs r3, #4
  9506. 8004662: 2200 movs r2, #0
  9507. 8004664: 4987 ldr r1, [pc, #540] @ (8004884 <Uart1ReceivedDataProcessCallback+0x5dc>)
  9508. 8004666: 4888 ldr r0, [pc, #544] @ (8004888 <Uart1ReceivedDataProcessCallback+0x5e0>)
  9509. 8004668: f7fe f926 bl 80028b8 <motorControl>
  9510. 800466c: 4603 mov r3, r0
  9511. motorXStatus =
  9512. 800466e: 637b str r3, [r7, #52] @ 0x34
  9513. sensorsInfo.motorXStatus = motorXStatus;
  9514. 8004670: 6b7b ldr r3, [r7, #52] @ 0x34
  9515. 8004672: b2da uxtb r2, r3
  9516. 8004674: 4b82 ldr r3, [pc, #520] @ (8004880 <Uart1ReceivedDataProcessCallback+0x5d8>)
  9517. 8004676: 741a strb r2, [r3, #16]
  9518. if (motorXStatus == 1) {
  9519. 8004678: 6b7b ldr r3, [r7, #52] @ 0x34
  9520. 800467a: 2b01 cmp r3, #1
  9521. 800467c: d103 bne.n 8004686 <Uart1ReceivedDataProcessCallback+0x3de>
  9522. sensorsInfo.motorXPeakCurrent = 0.0;
  9523. 800467e: 4b80 ldr r3, [pc, #512] @ (8004880 <Uart1ReceivedDataProcessCallback+0x5d8>)
  9524. 8004680: f04f 0200 mov.w r2, #0
  9525. 8004684: 61da str r2, [r3, #28]
  9526. }
  9527. osMutexRelease (sensorsInfoMutex);
  9528. 8004686: 4b7c ldr r3, [pc, #496] @ (8004878 <Uart1ReceivedDataProcessCallback+0x5d0>)
  9529. 8004688: 681b ldr r3, [r3, #0]
  9530. 800468a: 4618 mov r0, r3
  9531. 800468c: f00e f86e bl 801276c <osMutexRelease>
  9532. respStatus = spOK;
  9533. 8004690: 2300 movs r3, #0
  9534. 8004692: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9535. } else {
  9536. respStatus = spInternalError;
  9537. }
  9538. break;
  9539. 8004696: e133 b.n 8004900 <Uart1ReceivedDataProcessCallback+0x658>
  9540. respStatus = spInternalError;
  9541. 8004698: 23fc movs r3, #252 @ 0xfc
  9542. 800469a: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9543. break;
  9544. 800469e: e12f b.n 8004900 <Uart1ReceivedDataProcessCallback+0x658>
  9545. case spSetMotorYOn:
  9546. int32_t motorYPWMPulse = 0;
  9547. 80046a0: 2300 movs r3, #0
  9548. 80046a2: 61fb str r3, [r7, #28]
  9549. int32_t motorYTimerPeriod = 0;
  9550. 80046a4: 2300 movs r3, #0
  9551. 80046a6: 61bb str r3, [r7, #24]
  9552. uint32_t motorYStatus = 0;
  9553. 80046a8: 2300 movs r3, #0
  9554. 80046aa: 63bb str r3, [r7, #56] @ 0x38
  9555. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorYPWMPulse);
  9556. 80046ac: 683b ldr r3, [r7, #0]
  9557. 80046ae: 330c adds r3, #12
  9558. 80046b0: f107 021c add.w r2, r7, #28
  9559. 80046b4: f107 0132 add.w r1, r7, #50 @ 0x32
  9560. 80046b8: 4618 mov r0, r3
  9561. 80046ba: f7fe fad4 bl 8002c66 <ReadWordFromBufer>
  9562. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorYTimerPeriod);
  9563. 80046be: 683b ldr r3, [r7, #0]
  9564. 80046c0: 330c adds r3, #12
  9565. 80046c2: f107 0218 add.w r2, r7, #24
  9566. 80046c6: f107 0132 add.w r1, r7, #50 @ 0x32
  9567. 80046ca: 4618 mov r0, r3
  9568. 80046cc: f7fe facb bl 8002c66 <ReadWordFromBufer>
  9569. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  9570. 80046d0: 4b69 ldr r3, [pc, #420] @ (8004878 <Uart1ReceivedDataProcessCallback+0x5d0>)
  9571. 80046d2: 681b ldr r3, [r3, #0]
  9572. 80046d4: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  9573. 80046d8: 4618 mov r0, r3
  9574. 80046da: f00d fffc bl 80126d6 <osMutexAcquire>
  9575. 80046de: 4603 mov r3, r0
  9576. 80046e0: 2b00 cmp r3, #0
  9577. 80046e2: d12a bne.n 800473a <Uart1ReceivedDataProcessCallback+0x492>
  9578. motorYStatus =
  9579. motorControl (&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_3, TIM_CHANNEL_4, motorYTimerHandle, motorYPWMPulse, motorYTimerPeriod, sensorsInfo.limitYSwitchUp, sensorsInfo.limitYSwitchDown);
  9580. 80046e4: 4b69 ldr r3, [pc, #420] @ (800488c <Uart1ReceivedDataProcessCallback+0x5e4>)
  9581. 80046e6: 681b ldr r3, [r3, #0]
  9582. 80046e8: 69fa ldr r2, [r7, #28]
  9583. 80046ea: 69b9 ldr r1, [r7, #24]
  9584. 80046ec: 4864 ldr r0, [pc, #400] @ (8004880 <Uart1ReceivedDataProcessCallback+0x5d8>)
  9585. 80046ee: f890 0027 ldrb.w r0, [r0, #39] @ 0x27
  9586. 80046f2: 4c63 ldr r4, [pc, #396] @ (8004880 <Uart1ReceivedDataProcessCallback+0x5d8>)
  9587. 80046f4: f894 4028 ldrb.w r4, [r4, #40] @ 0x28
  9588. 80046f8: 9404 str r4, [sp, #16]
  9589. 80046fa: 9003 str r0, [sp, #12]
  9590. 80046fc: 9102 str r1, [sp, #8]
  9591. 80046fe: 9201 str r2, [sp, #4]
  9592. 8004700: 9300 str r3, [sp, #0]
  9593. 8004702: 230c movs r3, #12
  9594. 8004704: 2208 movs r2, #8
  9595. 8004706: 495f ldr r1, [pc, #380] @ (8004884 <Uart1ReceivedDataProcessCallback+0x5dc>)
  9596. 8004708: 485f ldr r0, [pc, #380] @ (8004888 <Uart1ReceivedDataProcessCallback+0x5e0>)
  9597. 800470a: f7fe f8d5 bl 80028b8 <motorControl>
  9598. 800470e: 4603 mov r3, r0
  9599. motorYStatus =
  9600. 8004710: 63bb str r3, [r7, #56] @ 0x38
  9601. sensorsInfo.motorYStatus = motorYStatus;
  9602. 8004712: 6bbb ldr r3, [r7, #56] @ 0x38
  9603. 8004714: b2da uxtb r2, r3
  9604. 8004716: 4b5a ldr r3, [pc, #360] @ (8004880 <Uart1ReceivedDataProcessCallback+0x5d8>)
  9605. 8004718: 745a strb r2, [r3, #17]
  9606. if (motorYStatus == 1) {
  9607. 800471a: 6bbb ldr r3, [r7, #56] @ 0x38
  9608. 800471c: 2b01 cmp r3, #1
  9609. 800471e: d103 bne.n 8004728 <Uart1ReceivedDataProcessCallback+0x480>
  9610. sensorsInfo.motorYPeakCurrent = 0.0;
  9611. 8004720: 4b57 ldr r3, [pc, #348] @ (8004880 <Uart1ReceivedDataProcessCallback+0x5d8>)
  9612. 8004722: f04f 0200 mov.w r2, #0
  9613. 8004726: 621a str r2, [r3, #32]
  9614. }
  9615. osMutexRelease (sensorsInfoMutex);
  9616. 8004728: 4b53 ldr r3, [pc, #332] @ (8004878 <Uart1ReceivedDataProcessCallback+0x5d0>)
  9617. 800472a: 681b ldr r3, [r3, #0]
  9618. 800472c: 4618 mov r0, r3
  9619. 800472e: f00e f81d bl 801276c <osMutexRelease>
  9620. respStatus = spOK;
  9621. 8004732: 2300 movs r3, #0
  9622. 8004734: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9623. } else {
  9624. respStatus = spInternalError;
  9625. }
  9626. break;
  9627. 8004738: e0e2 b.n 8004900 <Uart1ReceivedDataProcessCallback+0x658>
  9628. respStatus = spInternalError;
  9629. 800473a: 23fc movs r3, #252 @ 0xfc
  9630. 800473c: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9631. break;
  9632. 8004740: e0de b.n 8004900 <Uart1ReceivedDataProcessCallback+0x658>
  9633. case spSetDiodeOn:
  9634. osTimerStop (debugLedTimerHandle);
  9635. 8004742: 4b53 ldr r3, [pc, #332] @ (8004890 <Uart1ReceivedDataProcessCallback+0x5e8>)
  9636. 8004744: 681b ldr r3, [r3, #0]
  9637. 8004746: 4618 mov r0, r3
  9638. 8004748: f00d ff08 bl 801255c <osTimerStop>
  9639. int32_t dbgLedTimerPeriod = 0;
  9640. 800474c: 2300 movs r3, #0
  9641. 800474e: 617b str r3, [r7, #20]
  9642. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&dbgLedTimerPeriod);
  9643. 8004750: 683b ldr r3, [r7, #0]
  9644. 8004752: 330c adds r3, #12
  9645. 8004754: f107 0214 add.w r2, r7, #20
  9646. 8004758: f107 0132 add.w r1, r7, #50 @ 0x32
  9647. 800475c: 4618 mov r0, r3
  9648. 800475e: f7fe fa82 bl 8002c66 <ReadWordFromBufer>
  9649. if (dbgLedTimerPeriod > 0) {
  9650. 8004762: 697b ldr r3, [r7, #20]
  9651. 8004764: 2b00 cmp r3, #0
  9652. 8004766: dd0e ble.n 8004786 <Uart1ReceivedDataProcessCallback+0x4de>
  9653. osTimerStart (debugLedTimerHandle, dbgLedTimerPeriod * 1000);
  9654. 8004768: 4b49 ldr r3, [pc, #292] @ (8004890 <Uart1ReceivedDataProcessCallback+0x5e8>)
  9655. 800476a: 681a ldr r2, [r3, #0]
  9656. 800476c: 697b ldr r3, [r7, #20]
  9657. 800476e: f44f 717a mov.w r1, #1000 @ 0x3e8
  9658. 8004772: fb01 f303 mul.w r3, r1, r3
  9659. 8004776: 4619 mov r1, r3
  9660. 8004778: 4610 mov r0, r2
  9661. 800477a: f00d fec1 bl 8012500 <osTimerStart>
  9662. DbgLEDOn (DBG_LED1);
  9663. 800477e: 2010 movs r0, #16
  9664. 8004780: f7fe f80c bl 800279c <DbgLEDOn>
  9665. 8004784: e00d b.n 80047a2 <Uart1ReceivedDataProcessCallback+0x4fa>
  9666. } else if (dbgLedTimerPeriod == 0) {
  9667. 8004786: 697b ldr r3, [r7, #20]
  9668. 8004788: 2b00 cmp r3, #0
  9669. 800478a: d103 bne.n 8004794 <Uart1ReceivedDataProcessCallback+0x4ec>
  9670. DbgLEDOff (DBG_LED1);
  9671. 800478c: 2010 movs r0, #16
  9672. 800478e: f7fe f817 bl 80027c0 <DbgLEDOff>
  9673. 8004792: e006 b.n 80047a2 <Uart1ReceivedDataProcessCallback+0x4fa>
  9674. } else if (dbgLedTimerPeriod == -1) {
  9675. 8004794: 697b ldr r3, [r7, #20]
  9676. 8004796: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  9677. 800479a: d102 bne.n 80047a2 <Uart1ReceivedDataProcessCallback+0x4fa>
  9678. DbgLEDOn (DBG_LED1);
  9679. 800479c: 2010 movs r0, #16
  9680. 800479e: f7fd fffd bl 800279c <DbgLEDOn>
  9681. }
  9682. respStatus = spOK;
  9683. 80047a2: 2300 movs r3, #0
  9684. 80047a4: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9685. break;
  9686. 80047a8: e0aa b.n 8004900 <Uart1ReceivedDataProcessCallback+0x658>
  9687. case spSetmotorXMaxCurrent:
  9688. float motorXMaxCurrent = 0;
  9689. 80047aa: f04f 0300 mov.w r3, #0
  9690. 80047ae: 613b str r3, [r7, #16]
  9691. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorXMaxCurrent);
  9692. 80047b0: 683b ldr r3, [r7, #0]
  9693. 80047b2: 330c adds r3, #12
  9694. 80047b4: f107 0210 add.w r2, r7, #16
  9695. 80047b8: f107 0132 add.w r1, r7, #50 @ 0x32
  9696. 80047bc: 4618 mov r0, r3
  9697. 80047be: f7fe fa52 bl 8002c66 <ReadWordFromBufer>
  9698. uint32_t dacDataCh1 = (uint32_t)(4095 * motorXMaxCurrent / (EXT_VREF_mV * 0.001));
  9699. 80047c2: edd7 7a04 vldr s15, [r7, #16]
  9700. 80047c6: ed9f 7a33 vldr s14, [pc, #204] @ 8004894 <Uart1ReceivedDataProcessCallback+0x5ec>
  9701. 80047ca: ee67 7a87 vmul.f32 s15, s15, s14
  9702. 80047ce: eeb7 6ae7 vcvt.f64.f32 d6, s15
  9703. 80047d2: eeb0 5b08 vmov.f64 d5, #8 @ 0x40400000 3.0
  9704. 80047d6: ee86 7b05 vdiv.f64 d7, d6, d5
  9705. 80047da: eefc 7bc7 vcvt.u32.f64 s15, d7
  9706. 80047de: ee17 3a90 vmov r3, s15
  9707. 80047e2: 63fb str r3, [r7, #60] @ 0x3c
  9708. HAL_DAC_SetValue (&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, dacDataCh1);
  9709. 80047e4: 6bfb ldr r3, [r7, #60] @ 0x3c
  9710. 80047e6: 2200 movs r2, #0
  9711. 80047e8: 2100 movs r1, #0
  9712. 80047ea: 482b ldr r0, [pc, #172] @ (8004898 <Uart1ReceivedDataProcessCallback+0x5f0>)
  9713. 80047ec: f002 f9c3 bl 8006b76 <HAL_DAC_SetValue>
  9714. HAL_DAC_Start (&hdac1, DAC_CHANNEL_1);
  9715. 80047f0: 2100 movs r1, #0
  9716. 80047f2: 4829 ldr r0, [pc, #164] @ (8004898 <Uart1ReceivedDataProcessCallback+0x5f0>)
  9717. 80047f4: f002 f912 bl 8006a1c <HAL_DAC_Start>
  9718. respStatus = spOK;
  9719. 80047f8: 2300 movs r3, #0
  9720. 80047fa: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9721. break;
  9722. 80047fe: e07f b.n 8004900 <Uart1ReceivedDataProcessCallback+0x658>
  9723. case spSetmotorYMaxCurrent:
  9724. float motorYMaxCurrent = 0;
  9725. 8004800: f04f 0300 mov.w r3, #0
  9726. 8004804: 60fb str r3, [r7, #12]
  9727. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorYMaxCurrent);
  9728. 8004806: 683b ldr r3, [r7, #0]
  9729. 8004808: 330c adds r3, #12
  9730. 800480a: f107 020c add.w r2, r7, #12
  9731. 800480e: f107 0132 add.w r1, r7, #50 @ 0x32
  9732. 8004812: 4618 mov r0, r3
  9733. 8004814: f7fe fa27 bl 8002c66 <ReadWordFromBufer>
  9734. uint32_t dacDataCh2 = (uint32_t)(4095 * motorYMaxCurrent / (EXT_VREF_mV * 0.001));
  9735. 8004818: edd7 7a03 vldr s15, [r7, #12]
  9736. 800481c: ed9f 7a1d vldr s14, [pc, #116] @ 8004894 <Uart1ReceivedDataProcessCallback+0x5ec>
  9737. 8004820: ee67 7a87 vmul.f32 s15, s15, s14
  9738. 8004824: eeb7 6ae7 vcvt.f64.f32 d6, s15
  9739. 8004828: eeb0 5b08 vmov.f64 d5, #8 @ 0x40400000 3.0
  9740. 800482c: ee86 7b05 vdiv.f64 d7, d6, d5
  9741. 8004830: eefc 7bc7 vcvt.u32.f64 s15, d7
  9742. 8004834: ee17 3a90 vmov r3, s15
  9743. 8004838: 643b str r3, [r7, #64] @ 0x40
  9744. HAL_DAC_SetValue (&hdac1, DAC_CHANNEL_2, DAC_ALIGN_12B_R, dacDataCh2);
  9745. 800483a: 6c3b ldr r3, [r7, #64] @ 0x40
  9746. 800483c: 2200 movs r2, #0
  9747. 800483e: 2110 movs r1, #16
  9748. 8004840: 4815 ldr r0, [pc, #84] @ (8004898 <Uart1ReceivedDataProcessCallback+0x5f0>)
  9749. 8004842: f002 f998 bl 8006b76 <HAL_DAC_SetValue>
  9750. HAL_DAC_Start (&hdac1, DAC_CHANNEL_2);
  9751. 8004846: 2110 movs r1, #16
  9752. 8004848: 4813 ldr r0, [pc, #76] @ (8004898 <Uart1ReceivedDataProcessCallback+0x5f0>)
  9753. 800484a: f002 f8e7 bl 8006a1c <HAL_DAC_Start>
  9754. respStatus = spOK;
  9755. 800484e: 2300 movs r3, #0
  9756. 8004850: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9757. break;
  9758. 8004854: e054 b.n 8004900 <Uart1ReceivedDataProcessCallback+0x658>
  9759. case spClearPeakMeasurments:
  9760. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  9761. 8004856: 4b11 ldr r3, [pc, #68] @ (800489c <Uart1ReceivedDataProcessCallback+0x5f4>)
  9762. 8004858: 681b ldr r3, [r3, #0]
  9763. 800485a: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  9764. 800485e: 4618 mov r0, r3
  9765. 8004860: f00d ff39 bl 80126d6 <osMutexAcquire>
  9766. 8004864: 4603 mov r3, r0
  9767. 8004866: 2b00 cmp r3, #0
  9768. 8004868: d142 bne.n 80048f0 <Uart1ReceivedDataProcessCallback+0x648>
  9769. for (int i = 0; i < 3; i++) {
  9770. 800486a: 2300 movs r3, #0
  9771. 800486c: 64fb str r3, [r7, #76] @ 0x4c
  9772. 800486e: e033 b.n 80048d8 <Uart1ReceivedDataProcessCallback+0x630>
  9773. 8004870: 24000660 .word 0x24000660
  9774. 8004874: 24000420 .word 0x24000420
  9775. 8004878: 24000750 .word 0x24000750
  9776. 800487c: 24000690 .word 0x24000690
  9777. 8004880: 24000794 .word 0x24000794
  9778. 8004884: 2400070c .word 0x2400070c
  9779. 8004888: 240004b8 .word 0x240004b8
  9780. 800488c: 240006c0 .word 0x240006c0
  9781. 8004890: 24000630 .word 0x24000630
  9782. 8004894: 457ff000 .word 0x457ff000
  9783. 8004898: 240003f8 .word 0x240003f8
  9784. 800489c: 2400074c .word 0x2400074c
  9785. resMeasurements.voltagePeak[i] = resMeasurements.voltageRMS[i];
  9786. 80048a0: 4a2e ldr r2, [pc, #184] @ (800495c <Uart1ReceivedDataProcessCallback+0x6b4>)
  9787. 80048a2: 6cfb ldr r3, [r7, #76] @ 0x4c
  9788. 80048a4: 009b lsls r3, r3, #2
  9789. 80048a6: 4413 add r3, r2
  9790. 80048a8: 681a ldr r2, [r3, #0]
  9791. 80048aa: 492c ldr r1, [pc, #176] @ (800495c <Uart1ReceivedDataProcessCallback+0x6b4>)
  9792. 80048ac: 6cfb ldr r3, [r7, #76] @ 0x4c
  9793. 80048ae: 3302 adds r3, #2
  9794. 80048b0: 009b lsls r3, r3, #2
  9795. 80048b2: 440b add r3, r1
  9796. 80048b4: 3304 adds r3, #4
  9797. 80048b6: 601a str r2, [r3, #0]
  9798. resMeasurements.currentPeak[i] = resMeasurements.currentRMS[i];
  9799. 80048b8: 4a28 ldr r2, [pc, #160] @ (800495c <Uart1ReceivedDataProcessCallback+0x6b4>)
  9800. 80048ba: 6cfb ldr r3, [r7, #76] @ 0x4c
  9801. 80048bc: 3306 adds r3, #6
  9802. 80048be: 009b lsls r3, r3, #2
  9803. 80048c0: 4413 add r3, r2
  9804. 80048c2: 681a ldr r2, [r3, #0]
  9805. 80048c4: 4925 ldr r1, [pc, #148] @ (800495c <Uart1ReceivedDataProcessCallback+0x6b4>)
  9806. 80048c6: 6cfb ldr r3, [r7, #76] @ 0x4c
  9807. 80048c8: 3308 adds r3, #8
  9808. 80048ca: 009b lsls r3, r3, #2
  9809. 80048cc: 440b add r3, r1
  9810. 80048ce: 3304 adds r3, #4
  9811. 80048d0: 601a str r2, [r3, #0]
  9812. for (int i = 0; i < 3; i++) {
  9813. 80048d2: 6cfb ldr r3, [r7, #76] @ 0x4c
  9814. 80048d4: 3301 adds r3, #1
  9815. 80048d6: 64fb str r3, [r7, #76] @ 0x4c
  9816. 80048d8: 6cfb ldr r3, [r7, #76] @ 0x4c
  9817. 80048da: 2b02 cmp r3, #2
  9818. 80048dc: dde0 ble.n 80048a0 <Uart1ReceivedDataProcessCallback+0x5f8>
  9819. }
  9820. osMutexRelease (resMeasurementsMutex);
  9821. 80048de: 4b20 ldr r3, [pc, #128] @ (8004960 <Uart1ReceivedDataProcessCallback+0x6b8>)
  9822. 80048e0: 681b ldr r3, [r3, #0]
  9823. 80048e2: 4618 mov r0, r3
  9824. 80048e4: f00d ff42 bl 801276c <osMutexRelease>
  9825. respStatus = spOK;
  9826. 80048e8: 2300 movs r3, #0
  9827. 80048ea: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9828. } else {
  9829. respStatus = spInternalError;
  9830. }
  9831. break;
  9832. 80048ee: e007 b.n 8004900 <Uart1ReceivedDataProcessCallback+0x658>
  9833. respStatus = spInternalError;
  9834. 80048f0: 23fc movs r3, #252 @ 0xfc
  9835. 80048f2: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9836. break;
  9837. 80048f6: e003 b.n 8004900 <Uart1ReceivedDataProcessCallback+0x658>
  9838. default: respStatus = spUnknownCommand; break;
  9839. 80048f8: 23fd movs r3, #253 @ 0xfd
  9840. 80048fa: f887 3067 strb.w r3, [r7, #103] @ 0x67
  9841. 80048fe: bf00 nop
  9842. }
  9843. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData->frameHeader.frameId, spFrameData->frameHeader.frameCommand, respStatus, outputDataBuffer, outputDataBufferPos);
  9844. 8004900: 6cbb ldr r3, [r7, #72] @ 0x48
  9845. 8004902: 6898 ldr r0, [r3, #8]
  9846. 8004904: 683b ldr r3, [r7, #0]
  9847. 8004906: 8819 ldrh r1, [r3, #0]
  9848. 8004908: 683b ldr r3, [r7, #0]
  9849. 800490a: 789a ldrb r2, [r3, #2]
  9850. 800490c: 4b15 ldr r3, [pc, #84] @ (8004964 <Uart1ReceivedDataProcessCallback+0x6bc>)
  9851. 800490e: 881b ldrh r3, [r3, #0]
  9852. 8004910: f997 4067 ldrsb.w r4, [r7, #103] @ 0x67
  9853. 8004914: 9301 str r3, [sp, #4]
  9854. 8004916: 4b14 ldr r3, [pc, #80] @ (8004968 <Uart1ReceivedDataProcessCallback+0x6c0>)
  9855. 8004918: 9300 str r3, [sp, #0]
  9856. 800491a: 4623 mov r3, r4
  9857. 800491c: f7fe f9d6 bl 8002ccc <PrepareRespFrame>
  9858. 8004920: 4603 mov r3, r0
  9859. 8004922: f8a7 3046 strh.w r3, [r7, #70] @ 0x46
  9860. if (dataToSend > 0) {
  9861. 8004926: f8b7 3046 ldrh.w r3, [r7, #70] @ 0x46
  9862. 800492a: 2b00 cmp r3, #0
  9863. 800492c: d008 beq.n 8004940 <Uart1ReceivedDataProcessCallback+0x698>
  9864. HAL_UART_Transmit_IT (uartTaskData->huart, uartTaskData->uartTxBuffer, dataToSend);
  9865. 800492e: 6cbb ldr r3, [r7, #72] @ 0x48
  9866. 8004930: 6b18 ldr r0, [r3, #48] @ 0x30
  9867. 8004932: 6cbb ldr r3, [r7, #72] @ 0x48
  9868. 8004934: 689b ldr r3, [r3, #8]
  9869. 8004936: f8b7 2046 ldrh.w r2, [r7, #70] @ 0x46
  9870. 800493a: 4619 mov r1, r3
  9871. 800493c: f00a fe9e bl 800f67c <HAL_UART_Transmit_IT>
  9872. }
  9873. #if UART_TASK_LOGS
  9874. printf ("Uart%d: TX bytes sent: %d\n", uartTaskData->uartNumber, dataToSend);
  9875. 8004940: 6cbb ldr r3, [r7, #72] @ 0x48
  9876. 8004942: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  9877. 8004946: 4619 mov r1, r3
  9878. 8004948: f8b7 3046 ldrh.w r3, [r7, #70] @ 0x46
  9879. 800494c: 461a mov r2, r3
  9880. 800494e: 4807 ldr r0, [pc, #28] @ (800496c <Uart1ReceivedDataProcessCallback+0x6c4>)
  9881. 8004950: f011 feac bl 80166ac <iprintf>
  9882. #endif
  9883. }
  9884. 8004954: bf00 nop
  9885. 8004956: 376c adds r7, #108 @ 0x6c
  9886. 8004958: 46bd mov sp, r7
  9887. 800495a: bd90 pop {r4, r7, pc}
  9888. 800495c: 24000758 .word 0x24000758
  9889. 8004960: 2400074c .word 0x2400074c
  9890. 8004964: 24000c08 .word 0x24000c08
  9891. 8004968: 24000b88 .word 0x24000b88
  9892. 800496c: 08017530 .word 0x08017530
  9893. 08004970 <Reset_Handler>:
  9894. .section .text.Reset_Handler
  9895. .weak Reset_Handler
  9896. .type Reset_Handler, %function
  9897. Reset_Handler:
  9898. ldr sp, =_estack /* set stack pointer */
  9899. 8004970: f8df d034 ldr.w sp, [pc, #52] @ 80049a8 <LoopFillZerobss+0xe>
  9900. /* Call the clock system initialization function.*/
  9901. bl SystemInit
  9902. 8004974: f7ff f858 bl 8003a28 <SystemInit>
  9903. /* Copy the data segment initializers from flash to SRAM */
  9904. ldr r0, =_sdata
  9905. 8004978: 480c ldr r0, [pc, #48] @ (80049ac <LoopFillZerobss+0x12>)
  9906. ldr r1, =_edata
  9907. 800497a: 490d ldr r1, [pc, #52] @ (80049b0 <LoopFillZerobss+0x16>)
  9908. ldr r2, =_sidata
  9909. 800497c: 4a0d ldr r2, [pc, #52] @ (80049b4 <LoopFillZerobss+0x1a>)
  9910. movs r3, #0
  9911. 800497e: 2300 movs r3, #0
  9912. b LoopCopyDataInit
  9913. 8004980: e002 b.n 8004988 <LoopCopyDataInit>
  9914. 08004982 <CopyDataInit>:
  9915. CopyDataInit:
  9916. ldr r4, [r2, r3]
  9917. 8004982: 58d4 ldr r4, [r2, r3]
  9918. str r4, [r0, r3]
  9919. 8004984: 50c4 str r4, [r0, r3]
  9920. adds r3, r3, #4
  9921. 8004986: 3304 adds r3, #4
  9922. 08004988 <LoopCopyDataInit>:
  9923. LoopCopyDataInit:
  9924. adds r4, r0, r3
  9925. 8004988: 18c4 adds r4, r0, r3
  9926. cmp r4, r1
  9927. 800498a: 428c cmp r4, r1
  9928. bcc CopyDataInit
  9929. 800498c: d3f9 bcc.n 8004982 <CopyDataInit>
  9930. /* Zero fill the bss segment. */
  9931. ldr r2, =_sbss
  9932. 800498e: 4a0a ldr r2, [pc, #40] @ (80049b8 <LoopFillZerobss+0x1e>)
  9933. ldr r4, =_ebss
  9934. 8004990: 4c0a ldr r4, [pc, #40] @ (80049bc <LoopFillZerobss+0x22>)
  9935. movs r3, #0
  9936. 8004992: 2300 movs r3, #0
  9937. b LoopFillZerobss
  9938. 8004994: e001 b.n 800499a <LoopFillZerobss>
  9939. 08004996 <FillZerobss>:
  9940. FillZerobss:
  9941. str r3, [r2]
  9942. 8004996: 6013 str r3, [r2, #0]
  9943. adds r2, r2, #4
  9944. 8004998: 3204 adds r2, #4
  9945. 0800499a <LoopFillZerobss>:
  9946. LoopFillZerobss:
  9947. cmp r2, r4
  9948. 800499a: 42a2 cmp r2, r4
  9949. bcc FillZerobss
  9950. 800499c: d3fb bcc.n 8004996 <FillZerobss>
  9951. /* Call static constructors */
  9952. bl __libc_init_array
  9953. 800499e: f011 ff85 bl 80168ac <__libc_init_array>
  9954. /* Call the application's entry point.*/
  9955. bl main
  9956. 80049a2: f7fb fea3 bl 80006ec <main>
  9957. bx lr
  9958. 80049a6: 4770 bx lr
  9959. ldr sp, =_estack /* set stack pointer */
  9960. 80049a8: 24060000 .word 0x24060000
  9961. ldr r0, =_sdata
  9962. 80049ac: 24000000 .word 0x24000000
  9963. ldr r1, =_edata
  9964. 80049b0: 240000a4 .word 0x240000a4
  9965. ldr r2, =_sidata
  9966. 80049b4: 0801764c .word 0x0801764c
  9967. ldr r2, =_sbss
  9968. 80049b8: 240000c0 .word 0x240000c0
  9969. ldr r4, =_ebss
  9970. 80049bc: 24012d44 .word 0x24012d44
  9971. 080049c0 <ADC3_IRQHandler>:
  9972. * @retval None
  9973. */
  9974. .section .text.Default_Handler,"ax",%progbits
  9975. Default_Handler:
  9976. Infinite_Loop:
  9977. b Infinite_Loop
  9978. 80049c0: e7fe b.n 80049c0 <ADC3_IRQHandler>
  9979. ...
  9980. 080049c4 <HAL_Init>:
  9981. * need to ensure that the SysTick time base is always set to 1 millisecond
  9982. * to have correct HAL operation.
  9983. * @retval HAL status
  9984. */
  9985. HAL_StatusTypeDef HAL_Init(void)
  9986. {
  9987. 80049c4: b580 push {r7, lr}
  9988. 80049c6: b082 sub sp, #8
  9989. 80049c8: af00 add r7, sp, #0
  9990. __HAL_ART_CONFIG_BASE_ADDRESS(0x08100000UL); /* Configure the Cortex-M4 ART Base address to the Flash Bank 2 : */
  9991. __HAL_ART_ENABLE(); /* Enable the Cortex-M4 ART */
  9992. #endif /* DUAL_CORE && CORE_CM4 */
  9993. /* Set Interrupt Group Priority */
  9994. HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
  9995. 80049ca: 2003 movs r0, #3
  9996. 80049cc: f001 fd53 bl 8006476 <HAL_NVIC_SetPriorityGrouping>
  9997. /* Update the SystemCoreClock global variable */
  9998. #if defined(RCC_D1CFGR_D1CPRE)
  9999. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> RCC_D1CFGR_D1CPRE_Pos]) & 0x1FU);
  10000. 80049d0: f006 f9fe bl 800add0 <HAL_RCC_GetSysClockFreq>
  10001. 80049d4: 4602 mov r2, r0
  10002. 80049d6: 4b15 ldr r3, [pc, #84] @ (8004a2c <HAL_Init+0x68>)
  10003. 80049d8: 699b ldr r3, [r3, #24]
  10004. 80049da: 0a1b lsrs r3, r3, #8
  10005. 80049dc: f003 030f and.w r3, r3, #15
  10006. 80049e0: 4913 ldr r1, [pc, #76] @ (8004a30 <HAL_Init+0x6c>)
  10007. 80049e2: 5ccb ldrb r3, [r1, r3]
  10008. 80049e4: f003 031f and.w r3, r3, #31
  10009. 80049e8: fa22 f303 lsr.w r3, r2, r3
  10010. 80049ec: 607b str r3, [r7, #4]
  10011. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE)>> RCC_CDCFGR1_CDCPRE_Pos]) & 0x1FU);
  10012. #endif
  10013. /* Update the SystemD2Clock global variable */
  10014. #if defined(RCC_D1CFGR_HPRE)
  10015. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE)>> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  10016. 80049ee: 4b0f ldr r3, [pc, #60] @ (8004a2c <HAL_Init+0x68>)
  10017. 80049f0: 699b ldr r3, [r3, #24]
  10018. 80049f2: f003 030f and.w r3, r3, #15
  10019. 80049f6: 4a0e ldr r2, [pc, #56] @ (8004a30 <HAL_Init+0x6c>)
  10020. 80049f8: 5cd3 ldrb r3, [r2, r3]
  10021. 80049fa: f003 031f and.w r3, r3, #31
  10022. 80049fe: 687a ldr r2, [r7, #4]
  10023. 8004a00: fa22 f303 lsr.w r3, r2, r3
  10024. 8004a04: 4a0b ldr r2, [pc, #44] @ (8004a34 <HAL_Init+0x70>)
  10025. 8004a06: 6013 str r3, [r2, #0]
  10026. #endif
  10027. #if defined(DUAL_CORE) && defined(CORE_CM4)
  10028. SystemCoreClock = SystemD2Clock;
  10029. #else
  10030. SystemCoreClock = common_system_clock;
  10031. 8004a08: 4a0b ldr r2, [pc, #44] @ (8004a38 <HAL_Init+0x74>)
  10032. 8004a0a: 687b ldr r3, [r7, #4]
  10033. 8004a0c: 6013 str r3, [r2, #0]
  10034. #endif /* DUAL_CORE && CORE_CM4 */
  10035. /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */
  10036. if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
  10037. 8004a0e: 2005 movs r0, #5
  10038. 8004a10: f7fe fe68 bl 80036e4 <HAL_InitTick>
  10039. 8004a14: 4603 mov r3, r0
  10040. 8004a16: 2b00 cmp r3, #0
  10041. 8004a18: d001 beq.n 8004a1e <HAL_Init+0x5a>
  10042. {
  10043. return HAL_ERROR;
  10044. 8004a1a: 2301 movs r3, #1
  10045. 8004a1c: e002 b.n 8004a24 <HAL_Init+0x60>
  10046. }
  10047. /* Init the low level hardware */
  10048. HAL_MspInit();
  10049. 8004a1e: f7fe f9f3 bl 8002e08 <HAL_MspInit>
  10050. /* Return function status */
  10051. return HAL_OK;
  10052. 8004a22: 2300 movs r3, #0
  10053. }
  10054. 8004a24: 4618 mov r0, r3
  10055. 8004a26: 3708 adds r7, #8
  10056. 8004a28: 46bd mov sp, r7
  10057. 8004a2a: bd80 pop {r7, pc}
  10058. 8004a2c: 58024400 .word 0x58024400
  10059. 8004a30: 080175c8 .word 0x080175c8
  10060. 8004a34: 24000038 .word 0x24000038
  10061. 8004a38: 24000034 .word 0x24000034
  10062. 08004a3c <HAL_IncTick>:
  10063. * @note This function is declared as __weak to be overwritten in case of other
  10064. * implementations in user file.
  10065. * @retval None
  10066. */
  10067. __weak void HAL_IncTick(void)
  10068. {
  10069. 8004a3c: b480 push {r7}
  10070. 8004a3e: af00 add r7, sp, #0
  10071. uwTick += (uint32_t)uwTickFreq;
  10072. 8004a40: 4b06 ldr r3, [pc, #24] @ (8004a5c <HAL_IncTick+0x20>)
  10073. 8004a42: 781b ldrb r3, [r3, #0]
  10074. 8004a44: 461a mov r2, r3
  10075. 8004a46: 4b06 ldr r3, [pc, #24] @ (8004a60 <HAL_IncTick+0x24>)
  10076. 8004a48: 681b ldr r3, [r3, #0]
  10077. 8004a4a: 4413 add r3, r2
  10078. 8004a4c: 4a04 ldr r2, [pc, #16] @ (8004a60 <HAL_IncTick+0x24>)
  10079. 8004a4e: 6013 str r3, [r2, #0]
  10080. }
  10081. 8004a50: bf00 nop
  10082. 8004a52: 46bd mov sp, r7
  10083. 8004a54: f85d 7b04 ldr.w r7, [sp], #4
  10084. 8004a58: 4770 bx lr
  10085. 8004a5a: bf00 nop
  10086. 8004a5c: 24000040 .word 0x24000040
  10087. 8004a60: 24000c0c .word 0x24000c0c
  10088. 08004a64 <HAL_GetTick>:
  10089. * @note This function is declared as __weak to be overwritten in case of other
  10090. * implementations in user file.
  10091. * @retval tick value
  10092. */
  10093. __weak uint32_t HAL_GetTick(void)
  10094. {
  10095. 8004a64: b480 push {r7}
  10096. 8004a66: af00 add r7, sp, #0
  10097. return uwTick;
  10098. 8004a68: 4b03 ldr r3, [pc, #12] @ (8004a78 <HAL_GetTick+0x14>)
  10099. 8004a6a: 681b ldr r3, [r3, #0]
  10100. }
  10101. 8004a6c: 4618 mov r0, r3
  10102. 8004a6e: 46bd mov sp, r7
  10103. 8004a70: f85d 7b04 ldr.w r7, [sp], #4
  10104. 8004a74: 4770 bx lr
  10105. 8004a76: bf00 nop
  10106. 8004a78: 24000c0c .word 0x24000c0c
  10107. 08004a7c <HAL_GetREVID>:
  10108. /**
  10109. * @brief Returns the device revision identifier.
  10110. * @retval Device revision identifier
  10111. */
  10112. uint32_t HAL_GetREVID(void)
  10113. {
  10114. 8004a7c: b480 push {r7}
  10115. 8004a7e: af00 add r7, sp, #0
  10116. return((DBGMCU->IDCODE) >> 16);
  10117. 8004a80: 4b03 ldr r3, [pc, #12] @ (8004a90 <HAL_GetREVID+0x14>)
  10118. 8004a82: 681b ldr r3, [r3, #0]
  10119. 8004a84: 0c1b lsrs r3, r3, #16
  10120. }
  10121. 8004a86: 4618 mov r0, r3
  10122. 8004a88: 46bd mov sp, r7
  10123. 8004a8a: f85d 7b04 ldr.w r7, [sp], #4
  10124. 8004a8e: 4770 bx lr
  10125. 8004a90: 5c001000 .word 0x5c001000
  10126. 08004a94 <HAL_SYSCFG_VREFBUF_HighImpedanceConfig>:
  10127. * @arg SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE: VREF+ pin is internally connect to VREFINT output.
  10128. * @arg SYSCFG_VREFBUF_HIGH_IMPEDANCE_ENABLE: VREF+ pin is high impedance.
  10129. * @retval None
  10130. */
  10131. void HAL_SYSCFG_VREFBUF_HighImpedanceConfig(uint32_t Mode)
  10132. {
  10133. 8004a94: b480 push {r7}
  10134. 8004a96: b083 sub sp, #12
  10135. 8004a98: af00 add r7, sp, #0
  10136. 8004a9a: 6078 str r0, [r7, #4]
  10137. /* Check the parameters */
  10138. assert_param(IS_SYSCFG_VREFBUF_HIGH_IMPEDANCE(Mode));
  10139. MODIFY_REG(VREFBUF->CSR, VREFBUF_CSR_HIZ, Mode);
  10140. 8004a9c: 4b06 ldr r3, [pc, #24] @ (8004ab8 <HAL_SYSCFG_VREFBUF_HighImpedanceConfig+0x24>)
  10141. 8004a9e: 681b ldr r3, [r3, #0]
  10142. 8004aa0: f023 0202 bic.w r2, r3, #2
  10143. 8004aa4: 4904 ldr r1, [pc, #16] @ (8004ab8 <HAL_SYSCFG_VREFBUF_HighImpedanceConfig+0x24>)
  10144. 8004aa6: 687b ldr r3, [r7, #4]
  10145. 8004aa8: 4313 orrs r3, r2
  10146. 8004aaa: 600b str r3, [r1, #0]
  10147. }
  10148. 8004aac: bf00 nop
  10149. 8004aae: 370c adds r7, #12
  10150. 8004ab0: 46bd mov sp, r7
  10151. 8004ab2: f85d 7b04 ldr.w r7, [sp], #4
  10152. 8004ab6: 4770 bx lr
  10153. 8004ab8: 58003c00 .word 0x58003c00
  10154. 08004abc <HAL_SYSCFG_DisableVREFBUF>:
  10155. * @brief Disable the Internal Voltage Reference buffer (VREFBUF).
  10156. *
  10157. * @retval None
  10158. */
  10159. void HAL_SYSCFG_DisableVREFBUF(void)
  10160. {
  10161. 8004abc: b480 push {r7}
  10162. 8004abe: af00 add r7, sp, #0
  10163. CLEAR_BIT(VREFBUF->CSR, VREFBUF_CSR_ENVR);
  10164. 8004ac0: 4b05 ldr r3, [pc, #20] @ (8004ad8 <HAL_SYSCFG_DisableVREFBUF+0x1c>)
  10165. 8004ac2: 681b ldr r3, [r3, #0]
  10166. 8004ac4: 4a04 ldr r2, [pc, #16] @ (8004ad8 <HAL_SYSCFG_DisableVREFBUF+0x1c>)
  10167. 8004ac6: f023 0301 bic.w r3, r3, #1
  10168. 8004aca: 6013 str r3, [r2, #0]
  10169. }
  10170. 8004acc: bf00 nop
  10171. 8004ace: 46bd mov sp, r7
  10172. 8004ad0: f85d 7b04 ldr.w r7, [sp], #4
  10173. 8004ad4: 4770 bx lr
  10174. 8004ad6: bf00 nop
  10175. 8004ad8: 58003c00 .word 0x58003c00
  10176. 08004adc <HAL_SYSCFG_AnalogSwitchConfig>:
  10177. * @arg SYSCFG_SWITCH_PC3_CLOSE
  10178. * @retval None
  10179. */
  10180. void HAL_SYSCFG_AnalogSwitchConfig(uint32_t SYSCFG_AnalogSwitch , uint32_t SYSCFG_SwitchState )
  10181. {
  10182. 8004adc: b480 push {r7}
  10183. 8004ade: b083 sub sp, #12
  10184. 8004ae0: af00 add r7, sp, #0
  10185. 8004ae2: 6078 str r0, [r7, #4]
  10186. 8004ae4: 6039 str r1, [r7, #0]
  10187. /* Check the parameter */
  10188. assert_param(IS_SYSCFG_ANALOG_SWITCH(SYSCFG_AnalogSwitch));
  10189. assert_param(IS_SYSCFG_SWITCH_STATE(SYSCFG_SwitchState));
  10190. MODIFY_REG(SYSCFG->PMCR, (uint32_t) SYSCFG_AnalogSwitch, (uint32_t)(SYSCFG_SwitchState));
  10191. 8004ae6: 4b07 ldr r3, [pc, #28] @ (8004b04 <HAL_SYSCFG_AnalogSwitchConfig+0x28>)
  10192. 8004ae8: 685a ldr r2, [r3, #4]
  10193. 8004aea: 687b ldr r3, [r7, #4]
  10194. 8004aec: 43db mvns r3, r3
  10195. 8004aee: 401a ands r2, r3
  10196. 8004af0: 4904 ldr r1, [pc, #16] @ (8004b04 <HAL_SYSCFG_AnalogSwitchConfig+0x28>)
  10197. 8004af2: 683b ldr r3, [r7, #0]
  10198. 8004af4: 4313 orrs r3, r2
  10199. 8004af6: 604b str r3, [r1, #4]
  10200. }
  10201. 8004af8: bf00 nop
  10202. 8004afa: 370c adds r7, #12
  10203. 8004afc: 46bd mov sp, r7
  10204. 8004afe: f85d 7b04 ldr.w r7, [sp], #4
  10205. 8004b02: 4770 bx lr
  10206. 8004b04: 58000400 .word 0x58000400
  10207. 08004b08 <LL_ADC_SetCommonClock>:
  10208. * @arg @ref LL_ADC_CLOCK_ASYNC_DIV128
  10209. * @arg @ref LL_ADC_CLOCK_ASYNC_DIV256
  10210. * @retval None
  10211. */
  10212. __STATIC_INLINE void LL_ADC_SetCommonClock(ADC_Common_TypeDef *ADCxy_COMMON, uint32_t CommonClock)
  10213. {
  10214. 8004b08: b480 push {r7}
  10215. 8004b0a: b083 sub sp, #12
  10216. 8004b0c: af00 add r7, sp, #0
  10217. 8004b0e: 6078 str r0, [r7, #4]
  10218. 8004b10: 6039 str r1, [r7, #0]
  10219. MODIFY_REG(ADCxy_COMMON->CCR, ADC_CCR_CKMODE | ADC_CCR_PRESC, CommonClock);
  10220. 8004b12: 687b ldr r3, [r7, #4]
  10221. 8004b14: 689b ldr r3, [r3, #8]
  10222. 8004b16: f423 127c bic.w r2, r3, #4128768 @ 0x3f0000
  10223. 8004b1a: 683b ldr r3, [r7, #0]
  10224. 8004b1c: 431a orrs r2, r3
  10225. 8004b1e: 687b ldr r3, [r7, #4]
  10226. 8004b20: 609a str r2, [r3, #8]
  10227. }
  10228. 8004b22: bf00 nop
  10229. 8004b24: 370c adds r7, #12
  10230. 8004b26: 46bd mov sp, r7
  10231. 8004b28: f85d 7b04 ldr.w r7, [sp], #4
  10232. 8004b2c: 4770 bx lr
  10233. 08004b2e <LL_ADC_SetCommonPathInternalCh>:
  10234. * @arg @ref LL_ADC_PATH_INTERNAL_TEMPSENSOR
  10235. * @arg @ref LL_ADC_PATH_INTERNAL_VBAT
  10236. * @retval None
  10237. */
  10238. __STATIC_INLINE void LL_ADC_SetCommonPathInternalCh(ADC_Common_TypeDef *ADCxy_COMMON, uint32_t PathInternal)
  10239. {
  10240. 8004b2e: b480 push {r7}
  10241. 8004b30: b083 sub sp, #12
  10242. 8004b32: af00 add r7, sp, #0
  10243. 8004b34: 6078 str r0, [r7, #4]
  10244. 8004b36: 6039 str r1, [r7, #0]
  10245. MODIFY_REG(ADCxy_COMMON->CCR, ADC_CCR_VREFEN | ADC_CCR_TSEN | ADC_CCR_VBATEN, PathInternal);
  10246. 8004b38: 687b ldr r3, [r7, #4]
  10247. 8004b3a: 689b ldr r3, [r3, #8]
  10248. 8004b3c: f023 72e0 bic.w r2, r3, #29360128 @ 0x1c00000
  10249. 8004b40: 683b ldr r3, [r7, #0]
  10250. 8004b42: 431a orrs r2, r3
  10251. 8004b44: 687b ldr r3, [r7, #4]
  10252. 8004b46: 609a str r2, [r3, #8]
  10253. }
  10254. 8004b48: bf00 nop
  10255. 8004b4a: 370c adds r7, #12
  10256. 8004b4c: 46bd mov sp, r7
  10257. 8004b4e: f85d 7b04 ldr.w r7, [sp], #4
  10258. 8004b52: 4770 bx lr
  10259. 08004b54 <LL_ADC_GetCommonPathInternalCh>:
  10260. * @arg @ref LL_ADC_PATH_INTERNAL_VREFINT
  10261. * @arg @ref LL_ADC_PATH_INTERNAL_TEMPSENSOR
  10262. * @arg @ref LL_ADC_PATH_INTERNAL_VBAT
  10263. */
  10264. __STATIC_INLINE uint32_t LL_ADC_GetCommonPathInternalCh(ADC_Common_TypeDef *ADCxy_COMMON)
  10265. {
  10266. 8004b54: b480 push {r7}
  10267. 8004b56: b083 sub sp, #12
  10268. 8004b58: af00 add r7, sp, #0
  10269. 8004b5a: 6078 str r0, [r7, #4]
  10270. return (uint32_t)(READ_BIT(ADCxy_COMMON->CCR, ADC_CCR_VREFEN | ADC_CCR_TSEN | ADC_CCR_VBATEN));
  10271. 8004b5c: 687b ldr r3, [r7, #4]
  10272. 8004b5e: 689b ldr r3, [r3, #8]
  10273. 8004b60: f003 73e0 and.w r3, r3, #29360128 @ 0x1c00000
  10274. }
  10275. 8004b64: 4618 mov r0, r3
  10276. 8004b66: 370c adds r7, #12
  10277. 8004b68: 46bd mov sp, r7
  10278. 8004b6a: f85d 7b04 ldr.w r7, [sp], #4
  10279. 8004b6e: 4770 bx lr
  10280. 08004b70 <LL_ADC_SetOffset>:
  10281. * Other channels are slow channels (conversion rate: refer to reference manual).
  10282. * @param OffsetLevel Value between Min_Data=0x000 and Max_Data=0x3FFFFFF
  10283. * @retval None
  10284. */
  10285. __STATIC_INLINE void LL_ADC_SetOffset(ADC_TypeDef *ADCx, uint32_t Offsety, uint32_t Channel, uint32_t OffsetLevel)
  10286. {
  10287. 8004b70: b480 push {r7}
  10288. 8004b72: b087 sub sp, #28
  10289. 8004b74: af00 add r7, sp, #0
  10290. 8004b76: 60f8 str r0, [r7, #12]
  10291. 8004b78: 60b9 str r1, [r7, #8]
  10292. 8004b7a: 607a str r2, [r7, #4]
  10293. 8004b7c: 603b str r3, [r7, #0]
  10294. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->OFR1, Offsety);
  10295. 8004b7e: 68fb ldr r3, [r7, #12]
  10296. 8004b80: 3360 adds r3, #96 @ 0x60
  10297. 8004b82: 461a mov r2, r3
  10298. 8004b84: 68bb ldr r3, [r7, #8]
  10299. 8004b86: 009b lsls r3, r3, #2
  10300. 8004b88: 4413 add r3, r2
  10301. 8004b8a: 617b str r3, [r7, #20]
  10302. ADC3_OFR1_OFFSET1_EN | (Channel & ADC_CHANNEL_ID_NUMBER_MASK) | OffsetLevel);
  10303. }
  10304. else
  10305. #endif /* ADC_VER_V5_V90 */
  10306. {
  10307. MODIFY_REG(*preg,
  10308. 8004b8c: 697b ldr r3, [r7, #20]
  10309. 8004b8e: 681b ldr r3, [r3, #0]
  10310. 8004b90: f003 4200 and.w r2, r3, #2147483648 @ 0x80000000
  10311. 8004b94: 687b ldr r3, [r7, #4]
  10312. 8004b96: f003 41f8 and.w r1, r3, #2080374784 @ 0x7c000000
  10313. 8004b9a: 683b ldr r3, [r7, #0]
  10314. 8004b9c: 430b orrs r3, r1
  10315. 8004b9e: 431a orrs r2, r3
  10316. 8004ba0: 697b ldr r3, [r7, #20]
  10317. 8004ba2: 601a str r2, [r3, #0]
  10318. ADC_OFR1_OFFSET1_CH | ADC_OFR1_OFFSET1,
  10319. (Channel & ADC_CHANNEL_ID_NUMBER_MASK) | OffsetLevel);
  10320. }
  10321. }
  10322. 8004ba4: bf00 nop
  10323. 8004ba6: 371c adds r7, #28
  10324. 8004ba8: 46bd mov sp, r7
  10325. 8004baa: f85d 7b04 ldr.w r7, [sp], #4
  10326. 8004bae: 4770 bx lr
  10327. 08004bb0 <LL_ADC_SetDataRightShift>:
  10328. * @arg @ref LL_ADC_OFFSET_RSHIFT_ENABLE
  10329. * @arg @ref LL_ADC_OFFSET_RSHIFT_DISABLE
  10330. * @retval Returned None
  10331. */
  10332. __STATIC_INLINE void LL_ADC_SetDataRightShift(ADC_TypeDef *ADCx, uint32_t Offsety, uint32_t RigthShift)
  10333. {
  10334. 8004bb0: b480 push {r7}
  10335. 8004bb2: b085 sub sp, #20
  10336. 8004bb4: af00 add r7, sp, #0
  10337. 8004bb6: 60f8 str r0, [r7, #12]
  10338. 8004bb8: 60b9 str r1, [r7, #8]
  10339. 8004bba: 607a str r2, [r7, #4]
  10340. MODIFY_REG(ADCx->CFGR2, (ADC_CFGR2_RSHIFT1 | ADC_CFGR2_RSHIFT2 | ADC_CFGR2_RSHIFT3 | ADC_CFGR2_RSHIFT4), RigthShift << (Offsety & 0x1FUL));
  10341. 8004bbc: 68fb ldr r3, [r7, #12]
  10342. 8004bbe: 691b ldr r3, [r3, #16]
  10343. 8004bc0: f423 42f0 bic.w r2, r3, #30720 @ 0x7800
  10344. 8004bc4: 68bb ldr r3, [r7, #8]
  10345. 8004bc6: f003 031f and.w r3, r3, #31
  10346. 8004bca: 6879 ldr r1, [r7, #4]
  10347. 8004bcc: fa01 f303 lsl.w r3, r1, r3
  10348. 8004bd0: 431a orrs r2, r3
  10349. 8004bd2: 68fb ldr r3, [r7, #12]
  10350. 8004bd4: 611a str r2, [r3, #16]
  10351. }
  10352. 8004bd6: bf00 nop
  10353. 8004bd8: 3714 adds r7, #20
  10354. 8004bda: 46bd mov sp, r7
  10355. 8004bdc: f85d 7b04 ldr.w r7, [sp], #4
  10356. 8004be0: 4770 bx lr
  10357. 08004be2 <LL_ADC_SetOffsetSignedSaturation>:
  10358. * @arg @ref LL_ADC_OFFSET_SIGNED_SATURATION_ENABLE
  10359. * @arg @ref LL_ADC_OFFSET_SIGNED_SATURATION_DISABLE
  10360. * @retval Returned None
  10361. */
  10362. __STATIC_INLINE void LL_ADC_SetOffsetSignedSaturation(ADC_TypeDef *ADCx, uint32_t Offsety, uint32_t OffsetSignedSaturation)
  10363. {
  10364. 8004be2: b480 push {r7}
  10365. 8004be4: b087 sub sp, #28
  10366. 8004be6: af00 add r7, sp, #0
  10367. 8004be8: 60f8 str r0, [r7, #12]
  10368. 8004bea: 60b9 str r1, [r7, #8]
  10369. 8004bec: 607a str r2, [r7, #4]
  10370. /* Function not available on this instance */
  10371. }
  10372. else
  10373. #endif /* ADC_VER_V5_V90 */
  10374. {
  10375. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->OFR1, Offsety);
  10376. 8004bee: 68fb ldr r3, [r7, #12]
  10377. 8004bf0: 3360 adds r3, #96 @ 0x60
  10378. 8004bf2: 461a mov r2, r3
  10379. 8004bf4: 68bb ldr r3, [r7, #8]
  10380. 8004bf6: 009b lsls r3, r3, #2
  10381. 8004bf8: 4413 add r3, r2
  10382. 8004bfa: 617b str r3, [r7, #20]
  10383. MODIFY_REG(*preg, ADC_OFR1_SSATE, OffsetSignedSaturation);
  10384. 8004bfc: 697b ldr r3, [r7, #20]
  10385. 8004bfe: 681b ldr r3, [r3, #0]
  10386. 8004c00: f023 4200 bic.w r2, r3, #2147483648 @ 0x80000000
  10387. 8004c04: 687b ldr r3, [r7, #4]
  10388. 8004c06: 431a orrs r2, r3
  10389. 8004c08: 697b ldr r3, [r7, #20]
  10390. 8004c0a: 601a str r2, [r3, #0]
  10391. }
  10392. }
  10393. 8004c0c: bf00 nop
  10394. 8004c0e: 371c adds r7, #28
  10395. 8004c10: 46bd mov sp, r7
  10396. 8004c12: f85d 7b04 ldr.w r7, [sp], #4
  10397. 8004c16: 4770 bx lr
  10398. 08004c18 <LL_ADC_REG_IsTriggerSourceSWStart>:
  10399. * @param ADCx ADC instance
  10400. * @retval Value "0" if trigger source external trigger
  10401. * Value "1" if trigger source SW start.
  10402. */
  10403. __STATIC_INLINE uint32_t LL_ADC_REG_IsTriggerSourceSWStart(ADC_TypeDef *ADCx)
  10404. {
  10405. 8004c18: b480 push {r7}
  10406. 8004c1a: b083 sub sp, #12
  10407. 8004c1c: af00 add r7, sp, #0
  10408. 8004c1e: 6078 str r0, [r7, #4]
  10409. return ((READ_BIT(ADCx->CFGR, ADC_CFGR_EXTEN) == (LL_ADC_REG_TRIG_SOFTWARE & ADC_CFGR_EXTEN)) ? 1UL : 0UL);
  10410. 8004c20: 687b ldr r3, [r7, #4]
  10411. 8004c22: 68db ldr r3, [r3, #12]
  10412. 8004c24: f403 6340 and.w r3, r3, #3072 @ 0xc00
  10413. 8004c28: 2b00 cmp r3, #0
  10414. 8004c2a: d101 bne.n 8004c30 <LL_ADC_REG_IsTriggerSourceSWStart+0x18>
  10415. 8004c2c: 2301 movs r3, #1
  10416. 8004c2e: e000 b.n 8004c32 <LL_ADC_REG_IsTriggerSourceSWStart+0x1a>
  10417. 8004c30: 2300 movs r3, #0
  10418. }
  10419. 8004c32: 4618 mov r0, r3
  10420. 8004c34: 370c adds r7, #12
  10421. 8004c36: 46bd mov sp, r7
  10422. 8004c38: f85d 7b04 ldr.w r7, [sp], #4
  10423. 8004c3c: 4770 bx lr
  10424. 08004c3e <LL_ADC_REG_SetSequencerRanks>:
  10425. * (3) On STM32H7, fast channel (0.125 us for 14-bit resolution (ADC conversion rate up to 8 Ms/s)).
  10426. * Other channels are slow channels (conversion rate: refer to reference manual).
  10427. * @retval None
  10428. */
  10429. __STATIC_INLINE void LL_ADC_REG_SetSequencerRanks(ADC_TypeDef *ADCx, uint32_t Rank, uint32_t Channel)
  10430. {
  10431. 8004c3e: b480 push {r7}
  10432. 8004c40: b087 sub sp, #28
  10433. 8004c42: af00 add r7, sp, #0
  10434. 8004c44: 60f8 str r0, [r7, #12]
  10435. 8004c46: 60b9 str r1, [r7, #8]
  10436. 8004c48: 607a str r2, [r7, #4]
  10437. /* Set bits with content of parameter "Channel" with bits position */
  10438. /* in register and register position depending on parameter "Rank". */
  10439. /* Parameters "Rank" and "Channel" are used with masks because containing */
  10440. /* other bits reserved for other purpose. */
  10441. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SQR1, ((Rank & ADC_REG_SQRX_REGOFFSET_MASK) >> ADC_SQRX_REGOFFSET_POS));
  10442. 8004c4a: 68fb ldr r3, [r7, #12]
  10443. 8004c4c: 3330 adds r3, #48 @ 0x30
  10444. 8004c4e: 461a mov r2, r3
  10445. 8004c50: 68bb ldr r3, [r7, #8]
  10446. 8004c52: 0a1b lsrs r3, r3, #8
  10447. 8004c54: 009b lsls r3, r3, #2
  10448. 8004c56: f003 030c and.w r3, r3, #12
  10449. 8004c5a: 4413 add r3, r2
  10450. 8004c5c: 617b str r3, [r7, #20]
  10451. MODIFY_REG(*preg,
  10452. 8004c5e: 697b ldr r3, [r7, #20]
  10453. 8004c60: 681a ldr r2, [r3, #0]
  10454. 8004c62: 68bb ldr r3, [r7, #8]
  10455. 8004c64: f003 031f and.w r3, r3, #31
  10456. 8004c68: 211f movs r1, #31
  10457. 8004c6a: fa01 f303 lsl.w r3, r1, r3
  10458. 8004c6e: 43db mvns r3, r3
  10459. 8004c70: 401a ands r2, r3
  10460. 8004c72: 687b ldr r3, [r7, #4]
  10461. 8004c74: 0e9b lsrs r3, r3, #26
  10462. 8004c76: f003 011f and.w r1, r3, #31
  10463. 8004c7a: 68bb ldr r3, [r7, #8]
  10464. 8004c7c: f003 031f and.w r3, r3, #31
  10465. 8004c80: fa01 f303 lsl.w r3, r1, r3
  10466. 8004c84: 431a orrs r2, r3
  10467. 8004c86: 697b ldr r3, [r7, #20]
  10468. 8004c88: 601a str r2, [r3, #0]
  10469. ADC_CHANNEL_ID_NUMBER_MASK_POSBIT0 << (Rank & ADC_REG_RANK_ID_SQRX_MASK),
  10470. ((Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS) << (Rank & ADC_REG_RANK_ID_SQRX_MASK));
  10471. }
  10472. 8004c8a: bf00 nop
  10473. 8004c8c: 371c adds r7, #28
  10474. 8004c8e: 46bd mov sp, r7
  10475. 8004c90: f85d 7b04 ldr.w r7, [sp], #4
  10476. 8004c94: 4770 bx lr
  10477. 08004c96 <LL_ADC_REG_SetDataTransferMode>:
  10478. * @param ADCx ADC instance
  10479. * @param DataTransferMode Select Data Management configuration
  10480. * @retval None
  10481. */
  10482. __STATIC_INLINE void LL_ADC_REG_SetDataTransferMode(ADC_TypeDef *ADCx, uint32_t DataTransferMode)
  10483. {
  10484. 8004c96: b480 push {r7}
  10485. 8004c98: b083 sub sp, #12
  10486. 8004c9a: af00 add r7, sp, #0
  10487. 8004c9c: 6078 str r0, [r7, #4]
  10488. 8004c9e: 6039 str r1, [r7, #0]
  10489. MODIFY_REG(ADCx->CFGR, ADC_CFGR_DMNGT, DataTransferMode);
  10490. 8004ca0: 687b ldr r3, [r7, #4]
  10491. 8004ca2: 68db ldr r3, [r3, #12]
  10492. 8004ca4: f023 0203 bic.w r2, r3, #3
  10493. 8004ca8: 683b ldr r3, [r7, #0]
  10494. 8004caa: 431a orrs r2, r3
  10495. 8004cac: 687b ldr r3, [r7, #4]
  10496. 8004cae: 60da str r2, [r3, #12]
  10497. }
  10498. 8004cb0: bf00 nop
  10499. 8004cb2: 370c adds r7, #12
  10500. 8004cb4: 46bd mov sp, r7
  10501. 8004cb6: f85d 7b04 ldr.w r7, [sp], #4
  10502. 8004cba: 4770 bx lr
  10503. 08004cbc <LL_ADC_SetChannelSamplingTime>:
  10504. * @arg @ref LL_ADC_SAMPLINGTIME_387CYCLES_5
  10505. * @arg @ref LL_ADC_SAMPLINGTIME_810CYCLES_5
  10506. * @retval None
  10507. */
  10508. __STATIC_INLINE void LL_ADC_SetChannelSamplingTime(ADC_TypeDef *ADCx, uint32_t Channel, uint32_t SamplingTime)
  10509. {
  10510. 8004cbc: b480 push {r7}
  10511. 8004cbe: b087 sub sp, #28
  10512. 8004cc0: af00 add r7, sp, #0
  10513. 8004cc2: 60f8 str r0, [r7, #12]
  10514. 8004cc4: 60b9 str r1, [r7, #8]
  10515. 8004cc6: 607a str r2, [r7, #4]
  10516. /* Set bits with content of parameter "SamplingTime" with bits position */
  10517. /* in register and register position depending on parameter "Channel". */
  10518. /* Parameter "Channel" is used with masks because containing */
  10519. /* other bits reserved for other purpose. */
  10520. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SMPR1, ((Channel & ADC_CHANNEL_SMPRX_REGOFFSET_MASK) >> ADC_SMPRX_REGOFFSET_POS));
  10521. 8004cc8: 68fb ldr r3, [r7, #12]
  10522. 8004cca: 3314 adds r3, #20
  10523. 8004ccc: 461a mov r2, r3
  10524. 8004cce: 68bb ldr r3, [r7, #8]
  10525. 8004cd0: 0e5b lsrs r3, r3, #25
  10526. 8004cd2: 009b lsls r3, r3, #2
  10527. 8004cd4: f003 0304 and.w r3, r3, #4
  10528. 8004cd8: 4413 add r3, r2
  10529. 8004cda: 617b str r3, [r7, #20]
  10530. MODIFY_REG(*preg,
  10531. 8004cdc: 697b ldr r3, [r7, #20]
  10532. 8004cde: 681a ldr r2, [r3, #0]
  10533. 8004ce0: 68bb ldr r3, [r7, #8]
  10534. 8004ce2: 0d1b lsrs r3, r3, #20
  10535. 8004ce4: f003 031f and.w r3, r3, #31
  10536. 8004ce8: 2107 movs r1, #7
  10537. 8004cea: fa01 f303 lsl.w r3, r1, r3
  10538. 8004cee: 43db mvns r3, r3
  10539. 8004cf0: 401a ands r2, r3
  10540. 8004cf2: 68bb ldr r3, [r7, #8]
  10541. 8004cf4: 0d1b lsrs r3, r3, #20
  10542. 8004cf6: f003 031f and.w r3, r3, #31
  10543. 8004cfa: 6879 ldr r1, [r7, #4]
  10544. 8004cfc: fa01 f303 lsl.w r3, r1, r3
  10545. 8004d00: 431a orrs r2, r3
  10546. 8004d02: 697b ldr r3, [r7, #20]
  10547. 8004d04: 601a str r2, [r3, #0]
  10548. ADC_SMPR1_SMP0 << ((Channel & ADC_CHANNEL_SMPx_BITOFFSET_MASK) >> ADC_CHANNEL_SMPx_BITOFFSET_POS),
  10549. SamplingTime << ((Channel & ADC_CHANNEL_SMPx_BITOFFSET_MASK) >> ADC_CHANNEL_SMPx_BITOFFSET_POS));
  10550. }
  10551. 8004d06: bf00 nop
  10552. 8004d08: 371c adds r7, #28
  10553. 8004d0a: 46bd mov sp, r7
  10554. 8004d0c: f85d 7b04 ldr.w r7, [sp], #4
  10555. 8004d10: 4770 bx lr
  10556. ...
  10557. 08004d14 <LL_ADC_SetChannelSingleDiff>:
  10558. * @arg @ref LL_ADC_SINGLE_ENDED
  10559. * @arg @ref LL_ADC_DIFFERENTIAL_ENDED
  10560. * @retval None
  10561. */
  10562. __STATIC_INLINE void LL_ADC_SetChannelSingleDiff(ADC_TypeDef *ADCx, uint32_t Channel, uint32_t SingleDiff)
  10563. {
  10564. 8004d14: b480 push {r7}
  10565. 8004d16: b085 sub sp, #20
  10566. 8004d18: af00 add r7, sp, #0
  10567. 8004d1a: 60f8 str r0, [r7, #12]
  10568. 8004d1c: 60b9 str r1, [r7, #8]
  10569. 8004d1e: 607a str r2, [r7, #4]
  10570. }
  10571. #else /* ADC_VER_V5_V90 */
  10572. /* Bits of channels in single or differential mode are set only for */
  10573. /* differential mode (for single mode, mask of bits allowed to be set is */
  10574. /* shifted out of range of bits of channels in single or differential mode. */
  10575. MODIFY_REG(ADCx->DIFSEL,
  10576. 8004d20: 68fb ldr r3, [r7, #12]
  10577. 8004d22: f8d3 20c0 ldr.w r2, [r3, #192] @ 0xc0
  10578. 8004d26: 68bb ldr r3, [r7, #8]
  10579. 8004d28: f3c3 0313 ubfx r3, r3, #0, #20
  10580. 8004d2c: 43db mvns r3, r3
  10581. 8004d2e: 401a ands r2, r3
  10582. 8004d30: 687b ldr r3, [r7, #4]
  10583. 8004d32: f003 0318 and.w r3, r3, #24
  10584. 8004d36: 4908 ldr r1, [pc, #32] @ (8004d58 <LL_ADC_SetChannelSingleDiff+0x44>)
  10585. 8004d38: 40d9 lsrs r1, r3
  10586. 8004d3a: 68bb ldr r3, [r7, #8]
  10587. 8004d3c: 400b ands r3, r1
  10588. 8004d3e: f3c3 0313 ubfx r3, r3, #0, #20
  10589. 8004d42: 431a orrs r2, r3
  10590. 8004d44: 68fb ldr r3, [r7, #12]
  10591. 8004d46: f8c3 20c0 str.w r2, [r3, #192] @ 0xc0
  10592. Channel & ADC_SINGLEDIFF_CHANNEL_MASK,
  10593. (Channel & ADC_SINGLEDIFF_CHANNEL_MASK) & (ADC_DIFSEL_DIFSEL >> (SingleDiff & ADC_SINGLEDIFF_CHANNEL_SHIFT_MASK)));
  10594. #endif /* ADC_VER_V5_V90 */
  10595. }
  10596. 8004d4a: bf00 nop
  10597. 8004d4c: 3714 adds r7, #20
  10598. 8004d4e: 46bd mov sp, r7
  10599. 8004d50: f85d 7b04 ldr.w r7, [sp], #4
  10600. 8004d54: 4770 bx lr
  10601. 8004d56: bf00 nop
  10602. 8004d58: 000fffff .word 0x000fffff
  10603. 08004d5c <LL_ADC_GetMultimode>:
  10604. * @arg @ref LL_ADC_MULTI_DUAL_REG_SIM_INJ_SIM
  10605. * @arg @ref LL_ADC_MULTI_DUAL_REG_SIM_INJ_ALT
  10606. * @arg @ref LL_ADC_MULTI_DUAL_REG_INT_INJ_SIM
  10607. */
  10608. __STATIC_INLINE uint32_t LL_ADC_GetMultimode(ADC_Common_TypeDef *ADCxy_COMMON)
  10609. {
  10610. 8004d5c: b480 push {r7}
  10611. 8004d5e: b083 sub sp, #12
  10612. 8004d60: af00 add r7, sp, #0
  10613. 8004d62: 6078 str r0, [r7, #4]
  10614. return (uint32_t)(READ_BIT(ADCxy_COMMON->CCR, ADC_CCR_DUAL));
  10615. 8004d64: 687b ldr r3, [r7, #4]
  10616. 8004d66: 689b ldr r3, [r3, #8]
  10617. 8004d68: f003 031f and.w r3, r3, #31
  10618. }
  10619. 8004d6c: 4618 mov r0, r3
  10620. 8004d6e: 370c adds r7, #12
  10621. 8004d70: 46bd mov sp, r7
  10622. 8004d72: f85d 7b04 ldr.w r7, [sp], #4
  10623. 8004d76: 4770 bx lr
  10624. 08004d78 <LL_ADC_DisableDeepPowerDown>:
  10625. * @rmtoll CR DEEPPWD LL_ADC_DisableDeepPowerDown
  10626. * @param ADCx ADC instance
  10627. * @retval None
  10628. */
  10629. __STATIC_INLINE void LL_ADC_DisableDeepPowerDown(ADC_TypeDef *ADCx)
  10630. {
  10631. 8004d78: b480 push {r7}
  10632. 8004d7a: b083 sub sp, #12
  10633. 8004d7c: af00 add r7, sp, #0
  10634. 8004d7e: 6078 str r0, [r7, #4]
  10635. /* Note: Write register with some additional bits forced to state reset */
  10636. /* instead of modifying only the selected bit for this function, */
  10637. /* to not interfere with bits with HW property "rs". */
  10638. CLEAR_BIT(ADCx->CR, (ADC_CR_DEEPPWD | ADC_CR_BITS_PROPERTY_RS));
  10639. 8004d80: 687b ldr r3, [r7, #4]
  10640. 8004d82: 689a ldr r2, [r3, #8]
  10641. 8004d84: 4b04 ldr r3, [pc, #16] @ (8004d98 <LL_ADC_DisableDeepPowerDown+0x20>)
  10642. 8004d86: 4013 ands r3, r2
  10643. 8004d88: 687a ldr r2, [r7, #4]
  10644. 8004d8a: 6093 str r3, [r2, #8]
  10645. }
  10646. 8004d8c: bf00 nop
  10647. 8004d8e: 370c adds r7, #12
  10648. 8004d90: 46bd mov sp, r7
  10649. 8004d92: f85d 7b04 ldr.w r7, [sp], #4
  10650. 8004d96: 4770 bx lr
  10651. 8004d98: 5fffffc0 .word 0x5fffffc0
  10652. 08004d9c <LL_ADC_IsDeepPowerDownEnabled>:
  10653. * @rmtoll CR DEEPPWD LL_ADC_IsDeepPowerDownEnabled
  10654. * @param ADCx ADC instance
  10655. * @retval 0: deep power down is disabled, 1: deep power down is enabled.
  10656. */
  10657. __STATIC_INLINE uint32_t LL_ADC_IsDeepPowerDownEnabled(ADC_TypeDef *ADCx)
  10658. {
  10659. 8004d9c: b480 push {r7}
  10660. 8004d9e: b083 sub sp, #12
  10661. 8004da0: af00 add r7, sp, #0
  10662. 8004da2: 6078 str r0, [r7, #4]
  10663. return ((READ_BIT(ADCx->CR, ADC_CR_DEEPPWD) == (ADC_CR_DEEPPWD)) ? 1UL : 0UL);
  10664. 8004da4: 687b ldr r3, [r7, #4]
  10665. 8004da6: 689b ldr r3, [r3, #8]
  10666. 8004da8: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  10667. 8004dac: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  10668. 8004db0: d101 bne.n 8004db6 <LL_ADC_IsDeepPowerDownEnabled+0x1a>
  10669. 8004db2: 2301 movs r3, #1
  10670. 8004db4: e000 b.n 8004db8 <LL_ADC_IsDeepPowerDownEnabled+0x1c>
  10671. 8004db6: 2300 movs r3, #0
  10672. }
  10673. 8004db8: 4618 mov r0, r3
  10674. 8004dba: 370c adds r7, #12
  10675. 8004dbc: 46bd mov sp, r7
  10676. 8004dbe: f85d 7b04 ldr.w r7, [sp], #4
  10677. 8004dc2: 4770 bx lr
  10678. 08004dc4 <LL_ADC_EnableInternalRegulator>:
  10679. * @rmtoll CR ADVREGEN LL_ADC_EnableInternalRegulator
  10680. * @param ADCx ADC instance
  10681. * @retval None
  10682. */
  10683. __STATIC_INLINE void LL_ADC_EnableInternalRegulator(ADC_TypeDef *ADCx)
  10684. {
  10685. 8004dc4: b480 push {r7}
  10686. 8004dc6: b083 sub sp, #12
  10687. 8004dc8: af00 add r7, sp, #0
  10688. 8004dca: 6078 str r0, [r7, #4]
  10689. /* Note: Write register with some additional bits forced to state reset */
  10690. /* instead of modifying only the selected bit for this function, */
  10691. /* to not interfere with bits with HW property "rs". */
  10692. MODIFY_REG(ADCx->CR,
  10693. 8004dcc: 687b ldr r3, [r7, #4]
  10694. 8004dce: 689a ldr r2, [r3, #8]
  10695. 8004dd0: 4b05 ldr r3, [pc, #20] @ (8004de8 <LL_ADC_EnableInternalRegulator+0x24>)
  10696. 8004dd2: 4013 ands r3, r2
  10697. 8004dd4: f043 5280 orr.w r2, r3, #268435456 @ 0x10000000
  10698. 8004dd8: 687b ldr r3, [r7, #4]
  10699. 8004dda: 609a str r2, [r3, #8]
  10700. ADC_CR_BITS_PROPERTY_RS,
  10701. ADC_CR_ADVREGEN);
  10702. }
  10703. 8004ddc: bf00 nop
  10704. 8004dde: 370c adds r7, #12
  10705. 8004de0: 46bd mov sp, r7
  10706. 8004de2: f85d 7b04 ldr.w r7, [sp], #4
  10707. 8004de6: 4770 bx lr
  10708. 8004de8: 6fffffc0 .word 0x6fffffc0
  10709. 08004dec <LL_ADC_IsInternalRegulatorEnabled>:
  10710. * @rmtoll CR ADVREGEN LL_ADC_IsInternalRegulatorEnabled
  10711. * @param ADCx ADC instance
  10712. * @retval 0: internal regulator is disabled, 1: internal regulator is enabled.
  10713. */
  10714. __STATIC_INLINE uint32_t LL_ADC_IsInternalRegulatorEnabled(ADC_TypeDef *ADCx)
  10715. {
  10716. 8004dec: b480 push {r7}
  10717. 8004dee: b083 sub sp, #12
  10718. 8004df0: af00 add r7, sp, #0
  10719. 8004df2: 6078 str r0, [r7, #4]
  10720. return ((READ_BIT(ADCx->CR, ADC_CR_ADVREGEN) == (ADC_CR_ADVREGEN)) ? 1UL : 0UL);
  10721. 8004df4: 687b ldr r3, [r7, #4]
  10722. 8004df6: 689b ldr r3, [r3, #8]
  10723. 8004df8: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
  10724. 8004dfc: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  10725. 8004e00: d101 bne.n 8004e06 <LL_ADC_IsInternalRegulatorEnabled+0x1a>
  10726. 8004e02: 2301 movs r3, #1
  10727. 8004e04: e000 b.n 8004e08 <LL_ADC_IsInternalRegulatorEnabled+0x1c>
  10728. 8004e06: 2300 movs r3, #0
  10729. }
  10730. 8004e08: 4618 mov r0, r3
  10731. 8004e0a: 370c adds r7, #12
  10732. 8004e0c: 46bd mov sp, r7
  10733. 8004e0e: f85d 7b04 ldr.w r7, [sp], #4
  10734. 8004e12: 4770 bx lr
  10735. 08004e14 <LL_ADC_Enable>:
  10736. * @rmtoll CR ADEN LL_ADC_Enable
  10737. * @param ADCx ADC instance
  10738. * @retval None
  10739. */
  10740. __STATIC_INLINE void LL_ADC_Enable(ADC_TypeDef *ADCx)
  10741. {
  10742. 8004e14: b480 push {r7}
  10743. 8004e16: b083 sub sp, #12
  10744. 8004e18: af00 add r7, sp, #0
  10745. 8004e1a: 6078 str r0, [r7, #4]
  10746. /* Note: Write register with some additional bits forced to state reset */
  10747. /* instead of modifying only the selected bit for this function, */
  10748. /* to not interfere with bits with HW property "rs". */
  10749. MODIFY_REG(ADCx->CR,
  10750. 8004e1c: 687b ldr r3, [r7, #4]
  10751. 8004e1e: 689a ldr r2, [r3, #8]
  10752. 8004e20: 4b05 ldr r3, [pc, #20] @ (8004e38 <LL_ADC_Enable+0x24>)
  10753. 8004e22: 4013 ands r3, r2
  10754. 8004e24: f043 0201 orr.w r2, r3, #1
  10755. 8004e28: 687b ldr r3, [r7, #4]
  10756. 8004e2a: 609a str r2, [r3, #8]
  10757. ADC_CR_BITS_PROPERTY_RS,
  10758. ADC_CR_ADEN);
  10759. }
  10760. 8004e2c: bf00 nop
  10761. 8004e2e: 370c adds r7, #12
  10762. 8004e30: 46bd mov sp, r7
  10763. 8004e32: f85d 7b04 ldr.w r7, [sp], #4
  10764. 8004e36: 4770 bx lr
  10765. 8004e38: 7fffffc0 .word 0x7fffffc0
  10766. 08004e3c <LL_ADC_Disable>:
  10767. * @rmtoll CR ADDIS LL_ADC_Disable
  10768. * @param ADCx ADC instance
  10769. * @retval None
  10770. */
  10771. __STATIC_INLINE void LL_ADC_Disable(ADC_TypeDef *ADCx)
  10772. {
  10773. 8004e3c: b480 push {r7}
  10774. 8004e3e: b083 sub sp, #12
  10775. 8004e40: af00 add r7, sp, #0
  10776. 8004e42: 6078 str r0, [r7, #4]
  10777. /* Note: Write register with some additional bits forced to state reset */
  10778. /* instead of modifying only the selected bit for this function, */
  10779. /* to not interfere with bits with HW property "rs". */
  10780. MODIFY_REG(ADCx->CR,
  10781. 8004e44: 687b ldr r3, [r7, #4]
  10782. 8004e46: 689a ldr r2, [r3, #8]
  10783. 8004e48: 4b05 ldr r3, [pc, #20] @ (8004e60 <LL_ADC_Disable+0x24>)
  10784. 8004e4a: 4013 ands r3, r2
  10785. 8004e4c: f043 0202 orr.w r2, r3, #2
  10786. 8004e50: 687b ldr r3, [r7, #4]
  10787. 8004e52: 609a str r2, [r3, #8]
  10788. ADC_CR_BITS_PROPERTY_RS,
  10789. ADC_CR_ADDIS);
  10790. }
  10791. 8004e54: bf00 nop
  10792. 8004e56: 370c adds r7, #12
  10793. 8004e58: 46bd mov sp, r7
  10794. 8004e5a: f85d 7b04 ldr.w r7, [sp], #4
  10795. 8004e5e: 4770 bx lr
  10796. 8004e60: 7fffffc0 .word 0x7fffffc0
  10797. 08004e64 <LL_ADC_IsEnabled>:
  10798. * @rmtoll CR ADEN LL_ADC_IsEnabled
  10799. * @param ADCx ADC instance
  10800. * @retval 0: ADC is disabled, 1: ADC is enabled.
  10801. */
  10802. __STATIC_INLINE uint32_t LL_ADC_IsEnabled(ADC_TypeDef *ADCx)
  10803. {
  10804. 8004e64: b480 push {r7}
  10805. 8004e66: b083 sub sp, #12
  10806. 8004e68: af00 add r7, sp, #0
  10807. 8004e6a: 6078 str r0, [r7, #4]
  10808. return ((READ_BIT(ADCx->CR, ADC_CR_ADEN) == (ADC_CR_ADEN)) ? 1UL : 0UL);
  10809. 8004e6c: 687b ldr r3, [r7, #4]
  10810. 8004e6e: 689b ldr r3, [r3, #8]
  10811. 8004e70: f003 0301 and.w r3, r3, #1
  10812. 8004e74: 2b01 cmp r3, #1
  10813. 8004e76: d101 bne.n 8004e7c <LL_ADC_IsEnabled+0x18>
  10814. 8004e78: 2301 movs r3, #1
  10815. 8004e7a: e000 b.n 8004e7e <LL_ADC_IsEnabled+0x1a>
  10816. 8004e7c: 2300 movs r3, #0
  10817. }
  10818. 8004e7e: 4618 mov r0, r3
  10819. 8004e80: 370c adds r7, #12
  10820. 8004e82: 46bd mov sp, r7
  10821. 8004e84: f85d 7b04 ldr.w r7, [sp], #4
  10822. 8004e88: 4770 bx lr
  10823. 08004e8a <LL_ADC_IsDisableOngoing>:
  10824. * @rmtoll CR ADDIS LL_ADC_IsDisableOngoing
  10825. * @param ADCx ADC instance
  10826. * @retval 0: no ADC disable command on going.
  10827. */
  10828. __STATIC_INLINE uint32_t LL_ADC_IsDisableOngoing(ADC_TypeDef *ADCx)
  10829. {
  10830. 8004e8a: b480 push {r7}
  10831. 8004e8c: b083 sub sp, #12
  10832. 8004e8e: af00 add r7, sp, #0
  10833. 8004e90: 6078 str r0, [r7, #4]
  10834. return ((READ_BIT(ADCx->CR, ADC_CR_ADDIS) == (ADC_CR_ADDIS)) ? 1UL : 0UL);
  10835. 8004e92: 687b ldr r3, [r7, #4]
  10836. 8004e94: 689b ldr r3, [r3, #8]
  10837. 8004e96: f003 0302 and.w r3, r3, #2
  10838. 8004e9a: 2b02 cmp r3, #2
  10839. 8004e9c: d101 bne.n 8004ea2 <LL_ADC_IsDisableOngoing+0x18>
  10840. 8004e9e: 2301 movs r3, #1
  10841. 8004ea0: e000 b.n 8004ea4 <LL_ADC_IsDisableOngoing+0x1a>
  10842. 8004ea2: 2300 movs r3, #0
  10843. }
  10844. 8004ea4: 4618 mov r0, r3
  10845. 8004ea6: 370c adds r7, #12
  10846. 8004ea8: 46bd mov sp, r7
  10847. 8004eaa: f85d 7b04 ldr.w r7, [sp], #4
  10848. 8004eae: 4770 bx lr
  10849. 08004eb0 <LL_ADC_REG_StartConversion>:
  10850. * @rmtoll CR ADSTART LL_ADC_REG_StartConversion
  10851. * @param ADCx ADC instance
  10852. * @retval None
  10853. */
  10854. __STATIC_INLINE void LL_ADC_REG_StartConversion(ADC_TypeDef *ADCx)
  10855. {
  10856. 8004eb0: b480 push {r7}
  10857. 8004eb2: b083 sub sp, #12
  10858. 8004eb4: af00 add r7, sp, #0
  10859. 8004eb6: 6078 str r0, [r7, #4]
  10860. /* Note: Write register with some additional bits forced to state reset */
  10861. /* instead of modifying only the selected bit for this function, */
  10862. /* to not interfere with bits with HW property "rs". */
  10863. MODIFY_REG(ADCx->CR,
  10864. 8004eb8: 687b ldr r3, [r7, #4]
  10865. 8004eba: 689a ldr r2, [r3, #8]
  10866. 8004ebc: 4b05 ldr r3, [pc, #20] @ (8004ed4 <LL_ADC_REG_StartConversion+0x24>)
  10867. 8004ebe: 4013 ands r3, r2
  10868. 8004ec0: f043 0204 orr.w r2, r3, #4
  10869. 8004ec4: 687b ldr r3, [r7, #4]
  10870. 8004ec6: 609a str r2, [r3, #8]
  10871. ADC_CR_BITS_PROPERTY_RS,
  10872. ADC_CR_ADSTART);
  10873. }
  10874. 8004ec8: bf00 nop
  10875. 8004eca: 370c adds r7, #12
  10876. 8004ecc: 46bd mov sp, r7
  10877. 8004ece: f85d 7b04 ldr.w r7, [sp], #4
  10878. 8004ed2: 4770 bx lr
  10879. 8004ed4: 7fffffc0 .word 0x7fffffc0
  10880. 08004ed8 <LL_ADC_REG_IsConversionOngoing>:
  10881. * @rmtoll CR ADSTART LL_ADC_REG_IsConversionOngoing
  10882. * @param ADCx ADC instance
  10883. * @retval 0: no conversion is on going on ADC group regular.
  10884. */
  10885. __STATIC_INLINE uint32_t LL_ADC_REG_IsConversionOngoing(ADC_TypeDef *ADCx)
  10886. {
  10887. 8004ed8: b480 push {r7}
  10888. 8004eda: b083 sub sp, #12
  10889. 8004edc: af00 add r7, sp, #0
  10890. 8004ede: 6078 str r0, [r7, #4]
  10891. return ((READ_BIT(ADCx->CR, ADC_CR_ADSTART) == (ADC_CR_ADSTART)) ? 1UL : 0UL);
  10892. 8004ee0: 687b ldr r3, [r7, #4]
  10893. 8004ee2: 689b ldr r3, [r3, #8]
  10894. 8004ee4: f003 0304 and.w r3, r3, #4
  10895. 8004ee8: 2b04 cmp r3, #4
  10896. 8004eea: d101 bne.n 8004ef0 <LL_ADC_REG_IsConversionOngoing+0x18>
  10897. 8004eec: 2301 movs r3, #1
  10898. 8004eee: e000 b.n 8004ef2 <LL_ADC_REG_IsConversionOngoing+0x1a>
  10899. 8004ef0: 2300 movs r3, #0
  10900. }
  10901. 8004ef2: 4618 mov r0, r3
  10902. 8004ef4: 370c adds r7, #12
  10903. 8004ef6: 46bd mov sp, r7
  10904. 8004ef8: f85d 7b04 ldr.w r7, [sp], #4
  10905. 8004efc: 4770 bx lr
  10906. 08004efe <LL_ADC_INJ_IsConversionOngoing>:
  10907. * @rmtoll CR JADSTART LL_ADC_INJ_IsConversionOngoing
  10908. * @param ADCx ADC instance
  10909. * @retval 0: no conversion is on going on ADC group injected.
  10910. */
  10911. __STATIC_INLINE uint32_t LL_ADC_INJ_IsConversionOngoing(ADC_TypeDef *ADCx)
  10912. {
  10913. 8004efe: b480 push {r7}
  10914. 8004f00: b083 sub sp, #12
  10915. 8004f02: af00 add r7, sp, #0
  10916. 8004f04: 6078 str r0, [r7, #4]
  10917. return ((READ_BIT(ADCx->CR, ADC_CR_JADSTART) == (ADC_CR_JADSTART)) ? 1UL : 0UL);
  10918. 8004f06: 687b ldr r3, [r7, #4]
  10919. 8004f08: 689b ldr r3, [r3, #8]
  10920. 8004f0a: f003 0308 and.w r3, r3, #8
  10921. 8004f0e: 2b08 cmp r3, #8
  10922. 8004f10: d101 bne.n 8004f16 <LL_ADC_INJ_IsConversionOngoing+0x18>
  10923. 8004f12: 2301 movs r3, #1
  10924. 8004f14: e000 b.n 8004f18 <LL_ADC_INJ_IsConversionOngoing+0x1a>
  10925. 8004f16: 2300 movs r3, #0
  10926. }
  10927. 8004f18: 4618 mov r0, r3
  10928. 8004f1a: 370c adds r7, #12
  10929. 8004f1c: 46bd mov sp, r7
  10930. 8004f1e: f85d 7b04 ldr.w r7, [sp], #4
  10931. 8004f22: 4770 bx lr
  10932. 08004f24 <HAL_ADC_Init>:
  10933. * without disabling the other ADCs.
  10934. * @param hadc ADC handle
  10935. * @retval HAL status
  10936. */
  10937. HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc)
  10938. {
  10939. 8004f24: b590 push {r4, r7, lr}
  10940. 8004f26: b089 sub sp, #36 @ 0x24
  10941. 8004f28: af00 add r7, sp, #0
  10942. 8004f2a: 6078 str r0, [r7, #4]
  10943. HAL_StatusTypeDef tmp_hal_status = HAL_OK;
  10944. 8004f2c: 2300 movs r3, #0
  10945. 8004f2e: 77fb strb r3, [r7, #31]
  10946. uint32_t tmpCFGR;
  10947. uint32_t tmp_adc_reg_is_conversion_on_going;
  10948. __IO uint32_t wait_loop_index = 0UL;
  10949. 8004f30: 2300 movs r3, #0
  10950. 8004f32: 60bb str r3, [r7, #8]
  10951. uint32_t tmp_adc_is_conversion_on_going_regular;
  10952. uint32_t tmp_adc_is_conversion_on_going_injected;
  10953. /* Check ADC handle */
  10954. if (hadc == NULL)
  10955. 8004f34: 687b ldr r3, [r7, #4]
  10956. 8004f36: 2b00 cmp r3, #0
  10957. 8004f38: d101 bne.n 8004f3e <HAL_ADC_Init+0x1a>
  10958. {
  10959. return HAL_ERROR;
  10960. 8004f3a: 2301 movs r3, #1
  10961. 8004f3c: e18f b.n 800525e <HAL_ADC_Init+0x33a>
  10962. assert_param(IS_ADC_EOC_SELECTION(hadc->Init.EOCSelection));
  10963. assert_param(IS_ADC_OVERRUN(hadc->Init.Overrun));
  10964. assert_param(IS_FUNCTIONAL_STATE(hadc->Init.LowPowerAutoWait));
  10965. assert_param(IS_FUNCTIONAL_STATE(hadc->Init.OversamplingMode));
  10966. if (hadc->Init.ScanConvMode != ADC_SCAN_DISABLE)
  10967. 8004f3e: 687b ldr r3, [r7, #4]
  10968. 8004f40: 68db ldr r3, [r3, #12]
  10969. 8004f42: 2b00 cmp r3, #0
  10970. /* DISCEN and CONT bits cannot be set at the same time */
  10971. assert_param(!((hadc->Init.DiscontinuousConvMode == ENABLE) && (hadc->Init.ContinuousConvMode == ENABLE)));
  10972. /* Actions performed only if ADC is coming from state reset: */
  10973. /* - Initialization of ADC MSP */
  10974. if (hadc->State == HAL_ADC_STATE_RESET)
  10975. 8004f44: 687b ldr r3, [r7, #4]
  10976. 8004f46: 6d5b ldr r3, [r3, #84] @ 0x54
  10977. 8004f48: 2b00 cmp r3, #0
  10978. 8004f4a: d109 bne.n 8004f60 <HAL_ADC_Init+0x3c>
  10979. /* Init the low level hardware */
  10980. hadc->MspInitCallback(hadc);
  10981. #else
  10982. /* Init the low level hardware */
  10983. HAL_ADC_MspInit(hadc);
  10984. 8004f4c: 6878 ldr r0, [r7, #4]
  10985. 8004f4e: f7fd ffb7 bl 8002ec0 <HAL_ADC_MspInit>
  10986. #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */
  10987. /* Set ADC error code to none */
  10988. ADC_CLEAR_ERRORCODE(hadc);
  10989. 8004f52: 687b ldr r3, [r7, #4]
  10990. 8004f54: 2200 movs r2, #0
  10991. 8004f56: 659a str r2, [r3, #88] @ 0x58
  10992. /* Initialize Lock */
  10993. hadc->Lock = HAL_UNLOCKED;
  10994. 8004f58: 687b ldr r3, [r7, #4]
  10995. 8004f5a: 2200 movs r2, #0
  10996. 8004f5c: f883 2050 strb.w r2, [r3, #80] @ 0x50
  10997. }
  10998. /* - Exit from deep-power-down mode and ADC voltage regulator enable */
  10999. if (LL_ADC_IsDeepPowerDownEnabled(hadc->Instance) != 0UL)
  11000. 8004f60: 687b ldr r3, [r7, #4]
  11001. 8004f62: 681b ldr r3, [r3, #0]
  11002. 8004f64: 4618 mov r0, r3
  11003. 8004f66: f7ff ff19 bl 8004d9c <LL_ADC_IsDeepPowerDownEnabled>
  11004. 8004f6a: 4603 mov r3, r0
  11005. 8004f6c: 2b00 cmp r3, #0
  11006. 8004f6e: d004 beq.n 8004f7a <HAL_ADC_Init+0x56>
  11007. {
  11008. /* Disable ADC deep power down mode */
  11009. LL_ADC_DisableDeepPowerDown(hadc->Instance);
  11010. 8004f70: 687b ldr r3, [r7, #4]
  11011. 8004f72: 681b ldr r3, [r3, #0]
  11012. 8004f74: 4618 mov r0, r3
  11013. 8004f76: f7ff feff bl 8004d78 <LL_ADC_DisableDeepPowerDown>
  11014. /* System was in deep power down mode, calibration must
  11015. be relaunched or a previously saved calibration factor
  11016. re-applied once the ADC voltage regulator is enabled */
  11017. }
  11018. if (LL_ADC_IsInternalRegulatorEnabled(hadc->Instance) == 0UL)
  11019. 8004f7a: 687b ldr r3, [r7, #4]
  11020. 8004f7c: 681b ldr r3, [r3, #0]
  11021. 8004f7e: 4618 mov r0, r3
  11022. 8004f80: f7ff ff34 bl 8004dec <LL_ADC_IsInternalRegulatorEnabled>
  11023. 8004f84: 4603 mov r3, r0
  11024. 8004f86: 2b00 cmp r3, #0
  11025. 8004f88: d114 bne.n 8004fb4 <HAL_ADC_Init+0x90>
  11026. {
  11027. /* Enable ADC internal voltage regulator */
  11028. LL_ADC_EnableInternalRegulator(hadc->Instance);
  11029. 8004f8a: 687b ldr r3, [r7, #4]
  11030. 8004f8c: 681b ldr r3, [r3, #0]
  11031. 8004f8e: 4618 mov r0, r3
  11032. 8004f90: f7ff ff18 bl 8004dc4 <LL_ADC_EnableInternalRegulator>
  11033. /* Note: Variable divided by 2 to compensate partially */
  11034. /* CPU processing cycles, scaling in us split to not */
  11035. /* exceed 32 bits register capacity and handle low frequency. */
  11036. wait_loop_index = ((LL_ADC_DELAY_INTERNAL_REGUL_STAB_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
  11037. 8004f94: 4b87 ldr r3, [pc, #540] @ (80051b4 <HAL_ADC_Init+0x290>)
  11038. 8004f96: 681b ldr r3, [r3, #0]
  11039. 8004f98: 099b lsrs r3, r3, #6
  11040. 8004f9a: 4a87 ldr r2, [pc, #540] @ (80051b8 <HAL_ADC_Init+0x294>)
  11041. 8004f9c: fba2 2303 umull r2, r3, r2, r3
  11042. 8004fa0: 099b lsrs r3, r3, #6
  11043. 8004fa2: 3301 adds r3, #1
  11044. 8004fa4: 60bb str r3, [r7, #8]
  11045. while (wait_loop_index != 0UL)
  11046. 8004fa6: e002 b.n 8004fae <HAL_ADC_Init+0x8a>
  11047. {
  11048. wait_loop_index--;
  11049. 8004fa8: 68bb ldr r3, [r7, #8]
  11050. 8004faa: 3b01 subs r3, #1
  11051. 8004fac: 60bb str r3, [r7, #8]
  11052. while (wait_loop_index != 0UL)
  11053. 8004fae: 68bb ldr r3, [r7, #8]
  11054. 8004fb0: 2b00 cmp r3, #0
  11055. 8004fb2: d1f9 bne.n 8004fa8 <HAL_ADC_Init+0x84>
  11056. }
  11057. /* Verification that ADC voltage regulator is correctly enabled, whether */
  11058. /* or not ADC is coming from state reset (if any potential problem of */
  11059. /* clocking, voltage regulator would not be enabled). */
  11060. if (LL_ADC_IsInternalRegulatorEnabled(hadc->Instance) == 0UL)
  11061. 8004fb4: 687b ldr r3, [r7, #4]
  11062. 8004fb6: 681b ldr r3, [r3, #0]
  11063. 8004fb8: 4618 mov r0, r3
  11064. 8004fba: f7ff ff17 bl 8004dec <LL_ADC_IsInternalRegulatorEnabled>
  11065. 8004fbe: 4603 mov r3, r0
  11066. 8004fc0: 2b00 cmp r3, #0
  11067. 8004fc2: d10d bne.n 8004fe0 <HAL_ADC_Init+0xbc>
  11068. {
  11069. /* Update ADC state machine to error */
  11070. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  11071. 8004fc4: 687b ldr r3, [r7, #4]
  11072. 8004fc6: 6d5b ldr r3, [r3, #84] @ 0x54
  11073. 8004fc8: f043 0210 orr.w r2, r3, #16
  11074. 8004fcc: 687b ldr r3, [r7, #4]
  11075. 8004fce: 655a str r2, [r3, #84] @ 0x54
  11076. /* Set ADC error code to ADC peripheral internal error */
  11077. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  11078. 8004fd0: 687b ldr r3, [r7, #4]
  11079. 8004fd2: 6d9b ldr r3, [r3, #88] @ 0x58
  11080. 8004fd4: f043 0201 orr.w r2, r3, #1
  11081. 8004fd8: 687b ldr r3, [r7, #4]
  11082. 8004fda: 659a str r2, [r3, #88] @ 0x58
  11083. tmp_hal_status = HAL_ERROR;
  11084. 8004fdc: 2301 movs r3, #1
  11085. 8004fde: 77fb strb r3, [r7, #31]
  11086. /* Configuration of ADC parameters if previous preliminary actions are */
  11087. /* correctly completed and if there is no conversion on going on regular */
  11088. /* group (ADC may already be enabled at this point if HAL_ADC_Init() is */
  11089. /* called to update a parameter on the fly). */
  11090. tmp_adc_reg_is_conversion_on_going = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
  11091. 8004fe0: 687b ldr r3, [r7, #4]
  11092. 8004fe2: 681b ldr r3, [r3, #0]
  11093. 8004fe4: 4618 mov r0, r3
  11094. 8004fe6: f7ff ff77 bl 8004ed8 <LL_ADC_REG_IsConversionOngoing>
  11095. 8004fea: 6178 str r0, [r7, #20]
  11096. if (((hadc->State & HAL_ADC_STATE_ERROR_INTERNAL) == 0UL)
  11097. 8004fec: 687b ldr r3, [r7, #4]
  11098. 8004fee: 6d5b ldr r3, [r3, #84] @ 0x54
  11099. 8004ff0: f003 0310 and.w r3, r3, #16
  11100. 8004ff4: 2b00 cmp r3, #0
  11101. 8004ff6: f040 8129 bne.w 800524c <HAL_ADC_Init+0x328>
  11102. && (tmp_adc_reg_is_conversion_on_going == 0UL)
  11103. 8004ffa: 697b ldr r3, [r7, #20]
  11104. 8004ffc: 2b00 cmp r3, #0
  11105. 8004ffe: f040 8125 bne.w 800524c <HAL_ADC_Init+0x328>
  11106. )
  11107. {
  11108. /* Set ADC state */
  11109. ADC_STATE_CLR_SET(hadc->State,
  11110. 8005002: 687b ldr r3, [r7, #4]
  11111. 8005004: 6d5b ldr r3, [r3, #84] @ 0x54
  11112. 8005006: f423 7381 bic.w r3, r3, #258 @ 0x102
  11113. 800500a: f043 0202 orr.w r2, r3, #2
  11114. 800500e: 687b ldr r3, [r7, #4]
  11115. 8005010: 655a str r2, [r3, #84] @ 0x54
  11116. /* Configuration of common ADC parameters */
  11117. /* Parameters update conditioned to ADC state: */
  11118. /* Parameters that can be updated only when ADC is disabled: */
  11119. /* - clock configuration */
  11120. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  11121. 8005012: 687b ldr r3, [r7, #4]
  11122. 8005014: 681b ldr r3, [r3, #0]
  11123. 8005016: 4618 mov r0, r3
  11124. 8005018: f7ff ff24 bl 8004e64 <LL_ADC_IsEnabled>
  11125. 800501c: 4603 mov r3, r0
  11126. 800501e: 2b00 cmp r3, #0
  11127. 8005020: d136 bne.n 8005090 <HAL_ADC_Init+0x16c>
  11128. {
  11129. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  11130. 8005022: 687b ldr r3, [r7, #4]
  11131. 8005024: 681b ldr r3, [r3, #0]
  11132. 8005026: 4a65 ldr r2, [pc, #404] @ (80051bc <HAL_ADC_Init+0x298>)
  11133. 8005028: 4293 cmp r3, r2
  11134. 800502a: d004 beq.n 8005036 <HAL_ADC_Init+0x112>
  11135. 800502c: 687b ldr r3, [r7, #4]
  11136. 800502e: 681b ldr r3, [r3, #0]
  11137. 8005030: 4a63 ldr r2, [pc, #396] @ (80051c0 <HAL_ADC_Init+0x29c>)
  11138. 8005032: 4293 cmp r3, r2
  11139. 8005034: d10e bne.n 8005054 <HAL_ADC_Init+0x130>
  11140. 8005036: 4861 ldr r0, [pc, #388] @ (80051bc <HAL_ADC_Init+0x298>)
  11141. 8005038: f7ff ff14 bl 8004e64 <LL_ADC_IsEnabled>
  11142. 800503c: 4604 mov r4, r0
  11143. 800503e: 4860 ldr r0, [pc, #384] @ (80051c0 <HAL_ADC_Init+0x29c>)
  11144. 8005040: f7ff ff10 bl 8004e64 <LL_ADC_IsEnabled>
  11145. 8005044: 4603 mov r3, r0
  11146. 8005046: 4323 orrs r3, r4
  11147. 8005048: 2b00 cmp r3, #0
  11148. 800504a: bf0c ite eq
  11149. 800504c: 2301 moveq r3, #1
  11150. 800504e: 2300 movne r3, #0
  11151. 8005050: b2db uxtb r3, r3
  11152. 8005052: e008 b.n 8005066 <HAL_ADC_Init+0x142>
  11153. 8005054: 485b ldr r0, [pc, #364] @ (80051c4 <HAL_ADC_Init+0x2a0>)
  11154. 8005056: f7ff ff05 bl 8004e64 <LL_ADC_IsEnabled>
  11155. 800505a: 4603 mov r3, r0
  11156. 800505c: 2b00 cmp r3, #0
  11157. 800505e: bf0c ite eq
  11158. 8005060: 2301 moveq r3, #1
  11159. 8005062: 2300 movne r3, #0
  11160. 8005064: b2db uxtb r3, r3
  11161. 8005066: 2b00 cmp r3, #0
  11162. 8005068: d012 beq.n 8005090 <HAL_ADC_Init+0x16c>
  11163. /* parameters: MDMA, DMACFG, DELAY, DUAL (set by API */
  11164. /* HAL_ADCEx_MultiModeConfigChannel() ) */
  11165. /* - internal measurement paths: Vbat, temperature sensor, Vref */
  11166. /* (set into HAL_ADC_ConfigChannel() or */
  11167. /* HAL_ADCEx_InjectedConfigChannel() ) */
  11168. LL_ADC_SetCommonClock(__LL_ADC_COMMON_INSTANCE(hadc->Instance), hadc->Init.ClockPrescaler);
  11169. 800506a: 687b ldr r3, [r7, #4]
  11170. 800506c: 681b ldr r3, [r3, #0]
  11171. 800506e: 4a53 ldr r2, [pc, #332] @ (80051bc <HAL_ADC_Init+0x298>)
  11172. 8005070: 4293 cmp r3, r2
  11173. 8005072: d004 beq.n 800507e <HAL_ADC_Init+0x15a>
  11174. 8005074: 687b ldr r3, [r7, #4]
  11175. 8005076: 681b ldr r3, [r3, #0]
  11176. 8005078: 4a51 ldr r2, [pc, #324] @ (80051c0 <HAL_ADC_Init+0x29c>)
  11177. 800507a: 4293 cmp r3, r2
  11178. 800507c: d101 bne.n 8005082 <HAL_ADC_Init+0x15e>
  11179. 800507e: 4a52 ldr r2, [pc, #328] @ (80051c8 <HAL_ADC_Init+0x2a4>)
  11180. 8005080: e000 b.n 8005084 <HAL_ADC_Init+0x160>
  11181. 8005082: 4a52 ldr r2, [pc, #328] @ (80051cc <HAL_ADC_Init+0x2a8>)
  11182. 8005084: 687b ldr r3, [r7, #4]
  11183. 8005086: 685b ldr r3, [r3, #4]
  11184. 8005088: 4619 mov r1, r3
  11185. 800508a: 4610 mov r0, r2
  11186. 800508c: f7ff fd3c bl 8004b08 <LL_ADC_SetCommonClock>
  11187. ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
  11188. }
  11189. #else
  11190. if ((HAL_GetREVID() > REV_ID_Y) && (ADC_RESOLUTION_8B == hadc->Init.Resolution))
  11191. 8005090: f7ff fcf4 bl 8004a7c <HAL_GetREVID>
  11192. 8005094: 4603 mov r3, r0
  11193. 8005096: f241 0203 movw r2, #4099 @ 0x1003
  11194. 800509a: 4293 cmp r3, r2
  11195. 800509c: d914 bls.n 80050c8 <HAL_ADC_Init+0x1a4>
  11196. 800509e: 687b ldr r3, [r7, #4]
  11197. 80050a0: 689b ldr r3, [r3, #8]
  11198. 80050a2: 2b10 cmp r3, #16
  11199. 80050a4: d110 bne.n 80050c8 <HAL_ADC_Init+0x1a4>
  11200. {
  11201. /* for STM32H7 silicon rev.B and above , ADC_CFGR_RES value for 8bits resolution is : b111 */
  11202. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  11203. 80050a6: 687b ldr r3, [r7, #4]
  11204. 80050a8: 7d5b ldrb r3, [r3, #21]
  11205. 80050aa: 035a lsls r2, r3, #13
  11206. hadc->Init.Overrun |
  11207. 80050ac: 687b ldr r3, [r7, #4]
  11208. 80050ae: 6b1b ldr r3, [r3, #48] @ 0x30
  11209. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  11210. 80050b0: 431a orrs r2, r3
  11211. hadc->Init.Resolution | (ADC_CFGR_RES_1 | ADC_CFGR_RES_0) |
  11212. 80050b2: 687b ldr r3, [r7, #4]
  11213. 80050b4: 689b ldr r3, [r3, #8]
  11214. hadc->Init.Overrun |
  11215. 80050b6: 431a orrs r2, r3
  11216. ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
  11217. 80050b8: 687b ldr r3, [r7, #4]
  11218. 80050ba: 7f1b ldrb r3, [r3, #28]
  11219. 80050bc: 041b lsls r3, r3, #16
  11220. hadc->Init.Resolution | (ADC_CFGR_RES_1 | ADC_CFGR_RES_0) |
  11221. 80050be: 4313 orrs r3, r2
  11222. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  11223. 80050c0: f043 030c orr.w r3, r3, #12
  11224. 80050c4: 61bb str r3, [r7, #24]
  11225. 80050c6: e00d b.n 80050e4 <HAL_ADC_Init+0x1c0>
  11226. }
  11227. else
  11228. {
  11229. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  11230. 80050c8: 687b ldr r3, [r7, #4]
  11231. 80050ca: 7d5b ldrb r3, [r3, #21]
  11232. 80050cc: 035a lsls r2, r3, #13
  11233. hadc->Init.Overrun |
  11234. 80050ce: 687b ldr r3, [r7, #4]
  11235. 80050d0: 6b1b ldr r3, [r3, #48] @ 0x30
  11236. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  11237. 80050d2: 431a orrs r2, r3
  11238. hadc->Init.Resolution |
  11239. 80050d4: 687b ldr r3, [r7, #4]
  11240. 80050d6: 689b ldr r3, [r3, #8]
  11241. hadc->Init.Overrun |
  11242. 80050d8: 431a orrs r2, r3
  11243. ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
  11244. 80050da: 687b ldr r3, [r7, #4]
  11245. 80050dc: 7f1b ldrb r3, [r3, #28]
  11246. 80050de: 041b lsls r3, r3, #16
  11247. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  11248. 80050e0: 4313 orrs r3, r2
  11249. 80050e2: 61bb str r3, [r7, #24]
  11250. }
  11251. #endif /* ADC_VER_V5_3 */
  11252. if (hadc->Init.DiscontinuousConvMode == ENABLE)
  11253. 80050e4: 687b ldr r3, [r7, #4]
  11254. 80050e6: 7f1b ldrb r3, [r3, #28]
  11255. 80050e8: 2b01 cmp r3, #1
  11256. 80050ea: d106 bne.n 80050fa <HAL_ADC_Init+0x1d6>
  11257. {
  11258. tmpCFGR |= ADC_CFGR_DISCONTINUOUS_NUM(hadc->Init.NbrOfDiscConversion);
  11259. 80050ec: 687b ldr r3, [r7, #4]
  11260. 80050ee: 6a1b ldr r3, [r3, #32]
  11261. 80050f0: 3b01 subs r3, #1
  11262. 80050f2: 045b lsls r3, r3, #17
  11263. 80050f4: 69ba ldr r2, [r7, #24]
  11264. 80050f6: 4313 orrs r3, r2
  11265. 80050f8: 61bb str r3, [r7, #24]
  11266. /* Enable external trigger if trigger selection is different of software */
  11267. /* start. */
  11268. /* Note: This configuration keeps the hardware feature of parameter */
  11269. /* ExternalTrigConvEdge "trigger edge none" equivalent to */
  11270. /* software start. */
  11271. if (hadc->Init.ExternalTrigConv != ADC_SOFTWARE_START)
  11272. 80050fa: 687b ldr r3, [r7, #4]
  11273. 80050fc: 6a5b ldr r3, [r3, #36] @ 0x24
  11274. 80050fe: 2b00 cmp r3, #0
  11275. 8005100: d009 beq.n 8005116 <HAL_ADC_Init+0x1f2>
  11276. {
  11277. tmpCFGR |= ((hadc->Init.ExternalTrigConv & ADC_CFGR_EXTSEL)
  11278. 8005102: 687b ldr r3, [r7, #4]
  11279. 8005104: 6a5b ldr r3, [r3, #36] @ 0x24
  11280. 8005106: f403 7278 and.w r2, r3, #992 @ 0x3e0
  11281. | hadc->Init.ExternalTrigConvEdge
  11282. 800510a: 687b ldr r3, [r7, #4]
  11283. 800510c: 6a9b ldr r3, [r3, #40] @ 0x28
  11284. 800510e: 4313 orrs r3, r2
  11285. tmpCFGR |= ((hadc->Init.ExternalTrigConv & ADC_CFGR_EXTSEL)
  11286. 8005110: 69ba ldr r2, [r7, #24]
  11287. 8005112: 4313 orrs r3, r2
  11288. 8005114: 61bb str r3, [r7, #24]
  11289. /* Update Configuration Register CFGR */
  11290. MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_1, tmpCFGR);
  11291. }
  11292. #else
  11293. /* Update Configuration Register CFGR */
  11294. MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_1, tmpCFGR);
  11295. 8005116: 687b ldr r3, [r7, #4]
  11296. 8005118: 681b ldr r3, [r3, #0]
  11297. 800511a: 68da ldr r2, [r3, #12]
  11298. 800511c: 4b2c ldr r3, [pc, #176] @ (80051d0 <HAL_ADC_Init+0x2ac>)
  11299. 800511e: 4013 ands r3, r2
  11300. 8005120: 687a ldr r2, [r7, #4]
  11301. 8005122: 6812 ldr r2, [r2, #0]
  11302. 8005124: 69b9 ldr r1, [r7, #24]
  11303. 8005126: 430b orrs r3, r1
  11304. 8005128: 60d3 str r3, [r2, #12]
  11305. /* Parameters that can be updated when ADC is disabled or enabled without */
  11306. /* conversion on going on regular and injected groups: */
  11307. /* - Conversion data management Init.ConversionDataManagement */
  11308. /* - LowPowerAutoWait feature Init.LowPowerAutoWait */
  11309. /* - Oversampling parameters Init.Oversampling */
  11310. tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
  11311. 800512a: 687b ldr r3, [r7, #4]
  11312. 800512c: 681b ldr r3, [r3, #0]
  11313. 800512e: 4618 mov r0, r3
  11314. 8005130: f7ff fed2 bl 8004ed8 <LL_ADC_REG_IsConversionOngoing>
  11315. 8005134: 6138 str r0, [r7, #16]
  11316. tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
  11317. 8005136: 687b ldr r3, [r7, #4]
  11318. 8005138: 681b ldr r3, [r3, #0]
  11319. 800513a: 4618 mov r0, r3
  11320. 800513c: f7ff fedf bl 8004efe <LL_ADC_INJ_IsConversionOngoing>
  11321. 8005140: 60f8 str r0, [r7, #12]
  11322. if ((tmp_adc_is_conversion_on_going_regular == 0UL)
  11323. 8005142: 693b ldr r3, [r7, #16]
  11324. 8005144: 2b00 cmp r3, #0
  11325. 8005146: d15f bne.n 8005208 <HAL_ADC_Init+0x2e4>
  11326. && (tmp_adc_is_conversion_on_going_injected == 0UL)
  11327. 8005148: 68fb ldr r3, [r7, #12]
  11328. 800514a: 2b00 cmp r3, #0
  11329. 800514c: d15c bne.n 8005208 <HAL_ADC_Init+0x2e4>
  11330. ADC_CFGR_AUTOWAIT((uint32_t)hadc->Init.LowPowerAutoWait) |
  11331. ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
  11332. }
  11333. #else
  11334. tmpCFGR = (
  11335. ADC_CFGR_AUTOWAIT((uint32_t)hadc->Init.LowPowerAutoWait) |
  11336. 800514e: 687b ldr r3, [r7, #4]
  11337. 8005150: 7d1b ldrb r3, [r3, #20]
  11338. 8005152: 039a lsls r2, r3, #14
  11339. ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
  11340. 8005154: 687b ldr r3, [r7, #4]
  11341. 8005156: 6adb ldr r3, [r3, #44] @ 0x2c
  11342. tmpCFGR = (
  11343. 8005158: 4313 orrs r3, r2
  11344. 800515a: 61bb str r3, [r7, #24]
  11345. #endif
  11346. MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_2, tmpCFGR);
  11347. 800515c: 687b ldr r3, [r7, #4]
  11348. 800515e: 681b ldr r3, [r3, #0]
  11349. 8005160: 68da ldr r2, [r3, #12]
  11350. 8005162: 4b1c ldr r3, [pc, #112] @ (80051d4 <HAL_ADC_Init+0x2b0>)
  11351. 8005164: 4013 ands r3, r2
  11352. 8005166: 687a ldr r2, [r7, #4]
  11353. 8005168: 6812 ldr r2, [r2, #0]
  11354. 800516a: 69b9 ldr r1, [r7, #24]
  11355. 800516c: 430b orrs r3, r1
  11356. 800516e: 60d3 str r3, [r2, #12]
  11357. if (hadc->Init.OversamplingMode == ENABLE)
  11358. 8005170: 687b ldr r3, [r7, #4]
  11359. 8005172: f893 3038 ldrb.w r3, [r3, #56] @ 0x38
  11360. 8005176: 2b01 cmp r3, #1
  11361. 8005178: d130 bne.n 80051dc <HAL_ADC_Init+0x2b8>
  11362. #endif
  11363. assert_param(IS_ADC_RIGHT_BIT_SHIFT(hadc->Init.Oversampling.RightBitShift));
  11364. assert_param(IS_ADC_TRIGGERED_OVERSAMPLING_MODE(hadc->Init.Oversampling.TriggeredMode));
  11365. assert_param(IS_ADC_REGOVERSAMPLING_MODE(hadc->Init.Oversampling.OversamplingStopReset));
  11366. if ((hadc->Init.ExternalTrigConv == ADC_SOFTWARE_START)
  11367. 800517a: 687b ldr r3, [r7, #4]
  11368. 800517c: 6a5b ldr r3, [r3, #36] @ 0x24
  11369. 800517e: 2b00 cmp r3, #0
  11370. /* - Oversampling Ratio */
  11371. /* - Right bit shift */
  11372. /* - Left bit shift */
  11373. /* - Triggered mode */
  11374. /* - Oversampling mode (continued/resumed) */
  11375. MODIFY_REG(hadc->Instance->CFGR2, ADC_CFGR2_FIELDS,
  11376. 8005180: 687b ldr r3, [r7, #4]
  11377. 8005182: 681b ldr r3, [r3, #0]
  11378. 8005184: 691a ldr r2, [r3, #16]
  11379. 8005186: 4b14 ldr r3, [pc, #80] @ (80051d8 <HAL_ADC_Init+0x2b4>)
  11380. 8005188: 4013 ands r3, r2
  11381. 800518a: 687a ldr r2, [r7, #4]
  11382. 800518c: 6bd2 ldr r2, [r2, #60] @ 0x3c
  11383. 800518e: 3a01 subs r2, #1
  11384. 8005190: 0411 lsls r1, r2, #16
  11385. 8005192: 687a ldr r2, [r7, #4]
  11386. 8005194: 6c12 ldr r2, [r2, #64] @ 0x40
  11387. 8005196: 4311 orrs r1, r2
  11388. 8005198: 687a ldr r2, [r7, #4]
  11389. 800519a: 6c52 ldr r2, [r2, #68] @ 0x44
  11390. 800519c: 4311 orrs r1, r2
  11391. 800519e: 687a ldr r2, [r7, #4]
  11392. 80051a0: 6c92 ldr r2, [r2, #72] @ 0x48
  11393. 80051a2: 430a orrs r2, r1
  11394. 80051a4: 431a orrs r2, r3
  11395. 80051a6: 687b ldr r3, [r7, #4]
  11396. 80051a8: 681b ldr r3, [r3, #0]
  11397. 80051aa: f042 0201 orr.w r2, r2, #1
  11398. 80051ae: 611a str r2, [r3, #16]
  11399. 80051b0: e01c b.n 80051ec <HAL_ADC_Init+0x2c8>
  11400. 80051b2: bf00 nop
  11401. 80051b4: 24000034 .word 0x24000034
  11402. 80051b8: 053e2d63 .word 0x053e2d63
  11403. 80051bc: 40022000 .word 0x40022000
  11404. 80051c0: 40022100 .word 0x40022100
  11405. 80051c4: 58026000 .word 0x58026000
  11406. 80051c8: 40022300 .word 0x40022300
  11407. 80051cc: 58026300 .word 0x58026300
  11408. 80051d0: fff0c003 .word 0xfff0c003
  11409. 80051d4: ffffbffc .word 0xffffbffc
  11410. 80051d8: fc00f81e .word 0xfc00f81e
  11411. }
  11412. else
  11413. {
  11414. /* Disable ADC oversampling scope on ADC group regular */
  11415. CLEAR_BIT(hadc->Instance->CFGR2, ADC_CFGR2_ROVSE);
  11416. 80051dc: 687b ldr r3, [r7, #4]
  11417. 80051de: 681b ldr r3, [r3, #0]
  11418. 80051e0: 691a ldr r2, [r3, #16]
  11419. 80051e2: 687b ldr r3, [r7, #4]
  11420. 80051e4: 681b ldr r3, [r3, #0]
  11421. 80051e6: f022 0201 bic.w r2, r2, #1
  11422. 80051ea: 611a str r2, [r3, #16]
  11423. }
  11424. /* Set the LeftShift parameter: it is applied to the final result with or without oversampling */
  11425. MODIFY_REG(hadc->Instance->CFGR2, ADC_CFGR2_LSHIFT, hadc->Init.LeftBitShift);
  11426. 80051ec: 687b ldr r3, [r7, #4]
  11427. 80051ee: 681b ldr r3, [r3, #0]
  11428. 80051f0: 691b ldr r3, [r3, #16]
  11429. 80051f2: f023 4170 bic.w r1, r3, #4026531840 @ 0xf0000000
  11430. 80051f6: 687b ldr r3, [r7, #4]
  11431. 80051f8: 6b5a ldr r2, [r3, #52] @ 0x34
  11432. 80051fa: 687b ldr r3, [r7, #4]
  11433. 80051fc: 681b ldr r3, [r3, #0]
  11434. 80051fe: 430a orrs r2, r1
  11435. 8005200: 611a str r2, [r3, #16]
  11436. /* Configure the BOOST Mode */
  11437. ADC_ConfigureBoostMode(hadc);
  11438. }
  11439. #else
  11440. /* Configure the BOOST Mode */
  11441. ADC_ConfigureBoostMode(hadc);
  11442. 8005202: 6878 ldr r0, [r7, #4]
  11443. 8005204: f000 fde2 bl 8005dcc <ADC_ConfigureBoostMode>
  11444. /* Note: Scan mode is not present by hardware on this device, but */
  11445. /* emulated by software for alignment over all STM32 devices. */
  11446. /* - if scan mode is enabled, regular channels sequence length is set to */
  11447. /* parameter "NbrOfConversion". */
  11448. if (hadc->Init.ScanConvMode == ADC_SCAN_ENABLE)
  11449. 8005208: 687b ldr r3, [r7, #4]
  11450. 800520a: 68db ldr r3, [r3, #12]
  11451. 800520c: 2b01 cmp r3, #1
  11452. 800520e: d10c bne.n 800522a <HAL_ADC_Init+0x306>
  11453. {
  11454. /* Set number of ranks in regular group sequencer */
  11455. MODIFY_REG(hadc->Instance->SQR1, ADC_SQR1_L, (hadc->Init.NbrOfConversion - (uint8_t)1));
  11456. 8005210: 687b ldr r3, [r7, #4]
  11457. 8005212: 681b ldr r3, [r3, #0]
  11458. 8005214: 6b1b ldr r3, [r3, #48] @ 0x30
  11459. 8005216: f023 010f bic.w r1, r3, #15
  11460. 800521a: 687b ldr r3, [r7, #4]
  11461. 800521c: 699b ldr r3, [r3, #24]
  11462. 800521e: 1e5a subs r2, r3, #1
  11463. 8005220: 687b ldr r3, [r7, #4]
  11464. 8005222: 681b ldr r3, [r3, #0]
  11465. 8005224: 430a orrs r2, r1
  11466. 8005226: 631a str r2, [r3, #48] @ 0x30
  11467. 8005228: e007 b.n 800523a <HAL_ADC_Init+0x316>
  11468. }
  11469. else
  11470. {
  11471. CLEAR_BIT(hadc->Instance->SQR1, ADC_SQR1_L);
  11472. 800522a: 687b ldr r3, [r7, #4]
  11473. 800522c: 681b ldr r3, [r3, #0]
  11474. 800522e: 6b1a ldr r2, [r3, #48] @ 0x30
  11475. 8005230: 687b ldr r3, [r7, #4]
  11476. 8005232: 681b ldr r3, [r3, #0]
  11477. 8005234: f022 020f bic.w r2, r2, #15
  11478. 8005238: 631a str r2, [r3, #48] @ 0x30
  11479. }
  11480. /* Initialize the ADC state */
  11481. /* Clear HAL_ADC_STATE_BUSY_INTERNAL bit, set HAL_ADC_STATE_READY bit */
  11482. ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_READY);
  11483. 800523a: 687b ldr r3, [r7, #4]
  11484. 800523c: 6d5b ldr r3, [r3, #84] @ 0x54
  11485. 800523e: f023 0303 bic.w r3, r3, #3
  11486. 8005242: f043 0201 orr.w r2, r3, #1
  11487. 8005246: 687b ldr r3, [r7, #4]
  11488. 8005248: 655a str r2, [r3, #84] @ 0x54
  11489. 800524a: e007 b.n 800525c <HAL_ADC_Init+0x338>
  11490. }
  11491. else
  11492. {
  11493. /* Update ADC state machine to error */
  11494. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  11495. 800524c: 687b ldr r3, [r7, #4]
  11496. 800524e: 6d5b ldr r3, [r3, #84] @ 0x54
  11497. 8005250: f043 0210 orr.w r2, r3, #16
  11498. 8005254: 687b ldr r3, [r7, #4]
  11499. 8005256: 655a str r2, [r3, #84] @ 0x54
  11500. tmp_hal_status = HAL_ERROR;
  11501. 8005258: 2301 movs r3, #1
  11502. 800525a: 77fb strb r3, [r7, #31]
  11503. }
  11504. /* Return function status */
  11505. return tmp_hal_status;
  11506. 800525c: 7ffb ldrb r3, [r7, #31]
  11507. }
  11508. 800525e: 4618 mov r0, r3
  11509. 8005260: 3724 adds r7, #36 @ 0x24
  11510. 8005262: 46bd mov sp, r7
  11511. 8005264: bd90 pop {r4, r7, pc}
  11512. 8005266: bf00 nop
  11513. 08005268 <HAL_ADC_Start_DMA>:
  11514. * @param pData Destination Buffer address.
  11515. * @param Length Number of data to be transferred from ADC peripheral to memory
  11516. * @retval HAL status.
  11517. */
  11518. HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length)
  11519. {
  11520. 8005268: b580 push {r7, lr}
  11521. 800526a: b086 sub sp, #24
  11522. 800526c: af00 add r7, sp, #0
  11523. 800526e: 60f8 str r0, [r7, #12]
  11524. 8005270: 60b9 str r1, [r7, #8]
  11525. 8005272: 607a str r2, [r7, #4]
  11526. HAL_StatusTypeDef tmp_hal_status;
  11527. uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
  11528. 8005274: 68fb ldr r3, [r7, #12]
  11529. 8005276: 681b ldr r3, [r3, #0]
  11530. 8005278: 4a55 ldr r2, [pc, #340] @ (80053d0 <HAL_ADC_Start_DMA+0x168>)
  11531. 800527a: 4293 cmp r3, r2
  11532. 800527c: d004 beq.n 8005288 <HAL_ADC_Start_DMA+0x20>
  11533. 800527e: 68fb ldr r3, [r7, #12]
  11534. 8005280: 681b ldr r3, [r3, #0]
  11535. 8005282: 4a54 ldr r2, [pc, #336] @ (80053d4 <HAL_ADC_Start_DMA+0x16c>)
  11536. 8005284: 4293 cmp r3, r2
  11537. 8005286: d101 bne.n 800528c <HAL_ADC_Start_DMA+0x24>
  11538. 8005288: 4b53 ldr r3, [pc, #332] @ (80053d8 <HAL_ADC_Start_DMA+0x170>)
  11539. 800528a: e000 b.n 800528e <HAL_ADC_Start_DMA+0x26>
  11540. 800528c: 4b53 ldr r3, [pc, #332] @ (80053dc <HAL_ADC_Start_DMA+0x174>)
  11541. 800528e: 4618 mov r0, r3
  11542. 8005290: f7ff fd64 bl 8004d5c <LL_ADC_GetMultimode>
  11543. 8005294: 6138 str r0, [r7, #16]
  11544. /* Check the parameters */
  11545. assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
  11546. /* Perform ADC enable and conversion start if no conversion is on going */
  11547. if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
  11548. 8005296: 68fb ldr r3, [r7, #12]
  11549. 8005298: 681b ldr r3, [r3, #0]
  11550. 800529a: 4618 mov r0, r3
  11551. 800529c: f7ff fe1c bl 8004ed8 <LL_ADC_REG_IsConversionOngoing>
  11552. 80052a0: 4603 mov r3, r0
  11553. 80052a2: 2b00 cmp r3, #0
  11554. 80052a4: f040 808c bne.w 80053c0 <HAL_ADC_Start_DMA+0x158>
  11555. {
  11556. /* Process locked */
  11557. __HAL_LOCK(hadc);
  11558. 80052a8: 68fb ldr r3, [r7, #12]
  11559. 80052aa: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  11560. 80052ae: 2b01 cmp r3, #1
  11561. 80052b0: d101 bne.n 80052b6 <HAL_ADC_Start_DMA+0x4e>
  11562. 80052b2: 2302 movs r3, #2
  11563. 80052b4: e087 b.n 80053c6 <HAL_ADC_Start_DMA+0x15e>
  11564. 80052b6: 68fb ldr r3, [r7, #12]
  11565. 80052b8: 2201 movs r2, #1
  11566. 80052ba: f883 2050 strb.w r2, [r3, #80] @ 0x50
  11567. /* Ensure that multimode regular conversions are not enabled. */
  11568. /* Otherwise, dedicated API HAL_ADCEx_MultiModeStart_DMA() must be used. */
  11569. if ((tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
  11570. 80052be: 693b ldr r3, [r7, #16]
  11571. 80052c0: 2b00 cmp r3, #0
  11572. 80052c2: d005 beq.n 80052d0 <HAL_ADC_Start_DMA+0x68>
  11573. || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_SIMULT)
  11574. 80052c4: 693b ldr r3, [r7, #16]
  11575. 80052c6: 2b05 cmp r3, #5
  11576. 80052c8: d002 beq.n 80052d0 <HAL_ADC_Start_DMA+0x68>
  11577. || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_ALTERN)
  11578. 80052ca: 693b ldr r3, [r7, #16]
  11579. 80052cc: 2b09 cmp r3, #9
  11580. 80052ce: d170 bne.n 80053b2 <HAL_ADC_Start_DMA+0x14a>
  11581. )
  11582. {
  11583. /* Enable the ADC peripheral */
  11584. tmp_hal_status = ADC_Enable(hadc);
  11585. 80052d0: 68f8 ldr r0, [r7, #12]
  11586. 80052d2: f000 fbfd bl 8005ad0 <ADC_Enable>
  11587. 80052d6: 4603 mov r3, r0
  11588. 80052d8: 75fb strb r3, [r7, #23]
  11589. /* Start conversion if ADC is effectively enabled */
  11590. if (tmp_hal_status == HAL_OK)
  11591. 80052da: 7dfb ldrb r3, [r7, #23]
  11592. 80052dc: 2b00 cmp r3, #0
  11593. 80052de: d163 bne.n 80053a8 <HAL_ADC_Start_DMA+0x140>
  11594. {
  11595. /* Set ADC state */
  11596. /* - Clear state bitfield related to regular group conversion results */
  11597. /* - Set state bitfield related to regular operation */
  11598. ADC_STATE_CLR_SET(hadc->State,
  11599. 80052e0: 68fb ldr r3, [r7, #12]
  11600. 80052e2: 6d5a ldr r2, [r3, #84] @ 0x54
  11601. 80052e4: 4b3e ldr r3, [pc, #248] @ (80053e0 <HAL_ADC_Start_DMA+0x178>)
  11602. 80052e6: 4013 ands r3, r2
  11603. 80052e8: f443 7280 orr.w r2, r3, #256 @ 0x100
  11604. 80052ec: 68fb ldr r3, [r7, #12]
  11605. 80052ee: 655a str r2, [r3, #84] @ 0x54
  11606. HAL_ADC_STATE_REG_BUSY);
  11607. /* Reset HAL_ADC_STATE_MULTIMODE_SLAVE bit
  11608. - if ADC instance is master or if multimode feature is not available
  11609. - if multimode setting is disabled (ADC instance slave in independent mode) */
  11610. if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
  11611. 80052f0: 68fb ldr r3, [r7, #12]
  11612. 80052f2: 681b ldr r3, [r3, #0]
  11613. 80052f4: 4a37 ldr r2, [pc, #220] @ (80053d4 <HAL_ADC_Start_DMA+0x16c>)
  11614. 80052f6: 4293 cmp r3, r2
  11615. 80052f8: d002 beq.n 8005300 <HAL_ADC_Start_DMA+0x98>
  11616. 80052fa: 68fb ldr r3, [r7, #12]
  11617. 80052fc: 681b ldr r3, [r3, #0]
  11618. 80052fe: e000 b.n 8005302 <HAL_ADC_Start_DMA+0x9a>
  11619. 8005300: 4b33 ldr r3, [pc, #204] @ (80053d0 <HAL_ADC_Start_DMA+0x168>)
  11620. 8005302: 68fa ldr r2, [r7, #12]
  11621. 8005304: 6812 ldr r2, [r2, #0]
  11622. 8005306: 4293 cmp r3, r2
  11623. 8005308: d002 beq.n 8005310 <HAL_ADC_Start_DMA+0xa8>
  11624. || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
  11625. 800530a: 693b ldr r3, [r7, #16]
  11626. 800530c: 2b00 cmp r3, #0
  11627. 800530e: d105 bne.n 800531c <HAL_ADC_Start_DMA+0xb4>
  11628. )
  11629. {
  11630. CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);
  11631. 8005310: 68fb ldr r3, [r7, #12]
  11632. 8005312: 6d5b ldr r3, [r3, #84] @ 0x54
  11633. 8005314: f423 1280 bic.w r2, r3, #1048576 @ 0x100000
  11634. 8005318: 68fb ldr r3, [r7, #12]
  11635. 800531a: 655a str r2, [r3, #84] @ 0x54
  11636. }
  11637. /* Check if a conversion is on going on ADC group injected */
  11638. if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) != 0UL)
  11639. 800531c: 68fb ldr r3, [r7, #12]
  11640. 800531e: 6d5b ldr r3, [r3, #84] @ 0x54
  11641. 8005320: f403 5380 and.w r3, r3, #4096 @ 0x1000
  11642. 8005324: 2b00 cmp r3, #0
  11643. 8005326: d006 beq.n 8005336 <HAL_ADC_Start_DMA+0xce>
  11644. {
  11645. /* Reset ADC error code fields related to regular conversions only */
  11646. CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));
  11647. 8005328: 68fb ldr r3, [r7, #12]
  11648. 800532a: 6d9b ldr r3, [r3, #88] @ 0x58
  11649. 800532c: f023 0206 bic.w r2, r3, #6
  11650. 8005330: 68fb ldr r3, [r7, #12]
  11651. 8005332: 659a str r2, [r3, #88] @ 0x58
  11652. 8005334: e002 b.n 800533c <HAL_ADC_Start_DMA+0xd4>
  11653. }
  11654. else
  11655. {
  11656. /* Reset all ADC error code fields */
  11657. ADC_CLEAR_ERRORCODE(hadc);
  11658. 8005336: 68fb ldr r3, [r7, #12]
  11659. 8005338: 2200 movs r2, #0
  11660. 800533a: 659a str r2, [r3, #88] @ 0x58
  11661. }
  11662. /* Set the DMA transfer complete callback */
  11663. hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt;
  11664. 800533c: 68fb ldr r3, [r7, #12]
  11665. 800533e: 6cdb ldr r3, [r3, #76] @ 0x4c
  11666. 8005340: 4a28 ldr r2, [pc, #160] @ (80053e4 <HAL_ADC_Start_DMA+0x17c>)
  11667. 8005342: 63da str r2, [r3, #60] @ 0x3c
  11668. /* Set the DMA half transfer complete callback */
  11669. hadc->DMA_Handle->XferHalfCpltCallback = ADC_DMAHalfConvCplt;
  11670. 8005344: 68fb ldr r3, [r7, #12]
  11671. 8005346: 6cdb ldr r3, [r3, #76] @ 0x4c
  11672. 8005348: 4a27 ldr r2, [pc, #156] @ (80053e8 <HAL_ADC_Start_DMA+0x180>)
  11673. 800534a: 641a str r2, [r3, #64] @ 0x40
  11674. /* Set the DMA error callback */
  11675. hadc->DMA_Handle->XferErrorCallback = ADC_DMAError;
  11676. 800534c: 68fb ldr r3, [r7, #12]
  11677. 800534e: 6cdb ldr r3, [r3, #76] @ 0x4c
  11678. 8005350: 4a26 ldr r2, [pc, #152] @ (80053ec <HAL_ADC_Start_DMA+0x184>)
  11679. 8005352: 64da str r2, [r3, #76] @ 0x4c
  11680. /* ADC start (in case of SW start): */
  11681. /* Clear regular group conversion flag and overrun flag */
  11682. /* (To ensure of no unknown state from potential previous ADC */
  11683. /* operations) */
  11684. __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR));
  11685. 8005354: 68fb ldr r3, [r7, #12]
  11686. 8005356: 681b ldr r3, [r3, #0]
  11687. 8005358: 221c movs r2, #28
  11688. 800535a: 601a str r2, [r3, #0]
  11689. /* Process unlocked */
  11690. /* Unlock before starting ADC conversions: in case of potential */
  11691. /* interruption, to let the process to ADC IRQ Handler. */
  11692. __HAL_UNLOCK(hadc);
  11693. 800535c: 68fb ldr r3, [r7, #12]
  11694. 800535e: 2200 movs r2, #0
  11695. 8005360: f883 2050 strb.w r2, [r3, #80] @ 0x50
  11696. /* With DMA, overrun event is always considered as an error even if
  11697. hadc->Init.Overrun is set to ADC_OVR_DATA_OVERWRITTEN. Therefore,
  11698. ADC_IT_OVR is enabled. */
  11699. __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR);
  11700. 8005364: 68fb ldr r3, [r7, #12]
  11701. 8005366: 681b ldr r3, [r3, #0]
  11702. 8005368: 685a ldr r2, [r3, #4]
  11703. 800536a: 68fb ldr r3, [r7, #12]
  11704. 800536c: 681b ldr r3, [r3, #0]
  11705. 800536e: f042 0210 orr.w r2, r2, #16
  11706. 8005372: 605a str r2, [r3, #4]
  11707. {
  11708. LL_ADC_REG_SetDataTransferMode(hadc->Instance, ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
  11709. }
  11710. #else
  11711. LL_ADC_REG_SetDataTransferMode(hadc->Instance, (uint32_t)hadc->Init.ConversionDataManagement);
  11712. 8005374: 68fb ldr r3, [r7, #12]
  11713. 8005376: 681a ldr r2, [r3, #0]
  11714. 8005378: 68fb ldr r3, [r7, #12]
  11715. 800537a: 6adb ldr r3, [r3, #44] @ 0x2c
  11716. 800537c: 4619 mov r1, r3
  11717. 800537e: 4610 mov r0, r2
  11718. 8005380: f7ff fc89 bl 8004c96 <LL_ADC_REG_SetDataTransferMode>
  11719. #endif
  11720. /* Start the DMA channel */
  11721. tmp_hal_status = HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length);
  11722. 8005384: 68fb ldr r3, [r7, #12]
  11723. 8005386: 6cd8 ldr r0, [r3, #76] @ 0x4c
  11724. 8005388: 68fb ldr r3, [r7, #12]
  11725. 800538a: 681b ldr r3, [r3, #0]
  11726. 800538c: 3340 adds r3, #64 @ 0x40
  11727. 800538e: 4619 mov r1, r3
  11728. 8005390: 68ba ldr r2, [r7, #8]
  11729. 8005392: 687b ldr r3, [r7, #4]
  11730. 8005394: f002 f8cc bl 8007530 <HAL_DMA_Start_IT>
  11731. 8005398: 4603 mov r3, r0
  11732. 800539a: 75fb strb r3, [r7, #23]
  11733. /* Enable conversion of regular group. */
  11734. /* If software start has been selected, conversion starts immediately. */
  11735. /* If external trigger has been selected, conversion will start at next */
  11736. /* trigger event. */
  11737. /* Start ADC group regular conversion */
  11738. LL_ADC_REG_StartConversion(hadc->Instance);
  11739. 800539c: 68fb ldr r3, [r7, #12]
  11740. 800539e: 681b ldr r3, [r3, #0]
  11741. 80053a0: 4618 mov r0, r3
  11742. 80053a2: f7ff fd85 bl 8004eb0 <LL_ADC_REG_StartConversion>
  11743. if (tmp_hal_status == HAL_OK)
  11744. 80053a6: e00d b.n 80053c4 <HAL_ADC_Start_DMA+0x15c>
  11745. }
  11746. else
  11747. {
  11748. /* Process unlocked */
  11749. __HAL_UNLOCK(hadc);
  11750. 80053a8: 68fb ldr r3, [r7, #12]
  11751. 80053aa: 2200 movs r2, #0
  11752. 80053ac: f883 2050 strb.w r2, [r3, #80] @ 0x50
  11753. if (tmp_hal_status == HAL_OK)
  11754. 80053b0: e008 b.n 80053c4 <HAL_ADC_Start_DMA+0x15c>
  11755. }
  11756. }
  11757. else
  11758. {
  11759. tmp_hal_status = HAL_ERROR;
  11760. 80053b2: 2301 movs r3, #1
  11761. 80053b4: 75fb strb r3, [r7, #23]
  11762. /* Process unlocked */
  11763. __HAL_UNLOCK(hadc);
  11764. 80053b6: 68fb ldr r3, [r7, #12]
  11765. 80053b8: 2200 movs r2, #0
  11766. 80053ba: f883 2050 strb.w r2, [r3, #80] @ 0x50
  11767. 80053be: e001 b.n 80053c4 <HAL_ADC_Start_DMA+0x15c>
  11768. }
  11769. }
  11770. else
  11771. {
  11772. tmp_hal_status = HAL_BUSY;
  11773. 80053c0: 2302 movs r3, #2
  11774. 80053c2: 75fb strb r3, [r7, #23]
  11775. }
  11776. /* Return function status */
  11777. return tmp_hal_status;
  11778. 80053c4: 7dfb ldrb r3, [r7, #23]
  11779. }
  11780. 80053c6: 4618 mov r0, r3
  11781. 80053c8: 3718 adds r7, #24
  11782. 80053ca: 46bd mov sp, r7
  11783. 80053cc: bd80 pop {r7, pc}
  11784. 80053ce: bf00 nop
  11785. 80053d0: 40022000 .word 0x40022000
  11786. 80053d4: 40022100 .word 0x40022100
  11787. 80053d8: 40022300 .word 0x40022300
  11788. 80053dc: 58026300 .word 0x58026300
  11789. 80053e0: fffff0fe .word 0xfffff0fe
  11790. 80053e4: 08005ca3 .word 0x08005ca3
  11791. 80053e8: 08005d7b .word 0x08005d7b
  11792. 80053ec: 08005d97 .word 0x08005d97
  11793. 080053f0 <HAL_ADC_ConvHalfCpltCallback>:
  11794. * @brief Conversion DMA half-transfer callback in non-blocking mode.
  11795. * @param hadc ADC handle
  11796. * @retval None
  11797. */
  11798. __weak void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc)
  11799. {
  11800. 80053f0: b480 push {r7}
  11801. 80053f2: b083 sub sp, #12
  11802. 80053f4: af00 add r7, sp, #0
  11803. 80053f6: 6078 str r0, [r7, #4]
  11804. UNUSED(hadc);
  11805. /* NOTE : This function should not be modified. When the callback is needed,
  11806. function HAL_ADC_ConvHalfCpltCallback must be implemented in the user file.
  11807. */
  11808. }
  11809. 80053f8: bf00 nop
  11810. 80053fa: 370c adds r7, #12
  11811. 80053fc: 46bd mov sp, r7
  11812. 80053fe: f85d 7b04 ldr.w r7, [sp], #4
  11813. 8005402: 4770 bx lr
  11814. 08005404 <HAL_ADC_ErrorCallback>:
  11815. * (this function is also clearing overrun flag)
  11816. * @param hadc ADC handle
  11817. * @retval None
  11818. */
  11819. __weak void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc)
  11820. {
  11821. 8005404: b480 push {r7}
  11822. 8005406: b083 sub sp, #12
  11823. 8005408: af00 add r7, sp, #0
  11824. 800540a: 6078 str r0, [r7, #4]
  11825. UNUSED(hadc);
  11826. /* NOTE : This function should not be modified. When the callback is needed,
  11827. function HAL_ADC_ErrorCallback must be implemented in the user file.
  11828. */
  11829. }
  11830. 800540c: bf00 nop
  11831. 800540e: 370c adds r7, #12
  11832. 8005410: 46bd mov sp, r7
  11833. 8005412: f85d 7b04 ldr.w r7, [sp], #4
  11834. 8005416: 4770 bx lr
  11835. 08005418 <HAL_ADC_ConfigChannel>:
  11836. * @param hadc ADC handle
  11837. * @param sConfig Structure of ADC channel assigned to ADC group regular.
  11838. * @retval HAL status
  11839. */
  11840. HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef *hadc, ADC_ChannelConfTypeDef *sConfig)
  11841. {
  11842. 8005418: b590 push {r4, r7, lr}
  11843. 800541a: b0a1 sub sp, #132 @ 0x84
  11844. 800541c: af00 add r7, sp, #0
  11845. 800541e: 6078 str r0, [r7, #4]
  11846. 8005420: 6039 str r1, [r7, #0]
  11847. HAL_StatusTypeDef tmp_hal_status = HAL_OK;
  11848. 8005422: 2300 movs r3, #0
  11849. 8005424: f887 307f strb.w r3, [r7, #127] @ 0x7f
  11850. uint32_t tmpOffsetShifted;
  11851. uint32_t tmp_config_internal_channel;
  11852. __IO uint32_t wait_loop_index = 0;
  11853. 8005428: 2300 movs r3, #0
  11854. 800542a: 60bb str r3, [r7, #8]
  11855. /* if ROVSE is set, the value of the OFFSETy_EN bit in ADCx_OFRy register is
  11856. ignored (considered as reset) */
  11857. assert_param(!((sConfig->OffsetNumber != ADC_OFFSET_NONE) && (hadc->Init.OversamplingMode == ENABLE)));
  11858. /* Verification of channel number */
  11859. if (sConfig->SingleDiff != ADC_DIFFERENTIAL_ENDED)
  11860. 800542c: 683b ldr r3, [r7, #0]
  11861. 800542e: 68db ldr r3, [r3, #12]
  11862. 8005430: 4a65 ldr r2, [pc, #404] @ (80055c8 <HAL_ADC_ConfigChannel+0x1b0>)
  11863. 8005432: 4293 cmp r3, r2
  11864. }
  11865. #endif
  11866. }
  11867. /* Process locked */
  11868. __HAL_LOCK(hadc);
  11869. 8005434: 687b ldr r3, [r7, #4]
  11870. 8005436: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  11871. 800543a: 2b01 cmp r3, #1
  11872. 800543c: d101 bne.n 8005442 <HAL_ADC_ConfigChannel+0x2a>
  11873. 800543e: 2302 movs r3, #2
  11874. 8005440: e32e b.n 8005aa0 <HAL_ADC_ConfigChannel+0x688>
  11875. 8005442: 687b ldr r3, [r7, #4]
  11876. 8005444: 2201 movs r2, #1
  11877. 8005446: f883 2050 strb.w r2, [r3, #80] @ 0x50
  11878. /* Parameters update conditioned to ADC state: */
  11879. /* Parameters that can be updated when ADC is disabled or enabled without */
  11880. /* conversion on going on regular group: */
  11881. /* - Channel number */
  11882. /* - Channel rank */
  11883. if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
  11884. 800544a: 687b ldr r3, [r7, #4]
  11885. 800544c: 681b ldr r3, [r3, #0]
  11886. 800544e: 4618 mov r0, r3
  11887. 8005450: f7ff fd42 bl 8004ed8 <LL_ADC_REG_IsConversionOngoing>
  11888. 8005454: 4603 mov r3, r0
  11889. 8005456: 2b00 cmp r3, #0
  11890. 8005458: f040 8313 bne.w 8005a82 <HAL_ADC_ConfigChannel+0x66a>
  11891. {
  11892. if (!(__LL_ADC_IS_CHANNEL_INTERNAL(sConfig->Channel)))
  11893. 800545c: 683b ldr r3, [r7, #0]
  11894. 800545e: 681b ldr r3, [r3, #0]
  11895. 8005460: 2b00 cmp r3, #0
  11896. 8005462: db2c blt.n 80054be <HAL_ADC_ConfigChannel+0xa6>
  11897. /* ADC channels preselection */
  11898. hadc->Instance->PCSEL_RES0 |= (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) & 0x1FUL));
  11899. }
  11900. #else
  11901. /* ADC channels preselection */
  11902. hadc->Instance->PCSEL |= (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) & 0x1FUL));
  11903. 8005464: 683b ldr r3, [r7, #0]
  11904. 8005466: 681b ldr r3, [r3, #0]
  11905. 8005468: f3c3 0313 ubfx r3, r3, #0, #20
  11906. 800546c: 2b00 cmp r3, #0
  11907. 800546e: d108 bne.n 8005482 <HAL_ADC_ConfigChannel+0x6a>
  11908. 8005470: 683b ldr r3, [r7, #0]
  11909. 8005472: 681b ldr r3, [r3, #0]
  11910. 8005474: 0e9b lsrs r3, r3, #26
  11911. 8005476: f003 031f and.w r3, r3, #31
  11912. 800547a: 2201 movs r2, #1
  11913. 800547c: fa02 f303 lsl.w r3, r2, r3
  11914. 8005480: e016 b.n 80054b0 <HAL_ADC_ConfigChannel+0x98>
  11915. 8005482: 683b ldr r3, [r7, #0]
  11916. 8005484: 681b ldr r3, [r3, #0]
  11917. 8005486: 667b str r3, [r7, #100] @ 0x64
  11918. uint32_t result;
  11919. #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
  11920. (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
  11921. (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) )
  11922. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  11923. 8005488: 6e7b ldr r3, [r7, #100] @ 0x64
  11924. 800548a: fa93 f3a3 rbit r3, r3
  11925. 800548e: 663b str r3, [r7, #96] @ 0x60
  11926. result |= value & 1U;
  11927. s--;
  11928. }
  11929. result <<= s; /* shift when v's highest bits are zero */
  11930. #endif
  11931. return result;
  11932. 8005490: 6e3b ldr r3, [r7, #96] @ 0x60
  11933. 8005492: 66bb str r3, [r7, #104] @ 0x68
  11934. optimisations using the logic "value was passed to __builtin_clz, so it
  11935. is non-zero".
  11936. ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a
  11937. single CLZ instruction.
  11938. */
  11939. if (value == 0U)
  11940. 8005494: 6ebb ldr r3, [r7, #104] @ 0x68
  11941. 8005496: 2b00 cmp r3, #0
  11942. 8005498: d101 bne.n 800549e <HAL_ADC_ConfigChannel+0x86>
  11943. {
  11944. return 32U;
  11945. 800549a: 2320 movs r3, #32
  11946. 800549c: e003 b.n 80054a6 <HAL_ADC_ConfigChannel+0x8e>
  11947. }
  11948. return __builtin_clz(value);
  11949. 800549e: 6ebb ldr r3, [r7, #104] @ 0x68
  11950. 80054a0: fab3 f383 clz r3, r3
  11951. 80054a4: b2db uxtb r3, r3
  11952. 80054a6: f003 031f and.w r3, r3, #31
  11953. 80054aa: 2201 movs r2, #1
  11954. 80054ac: fa02 f303 lsl.w r3, r2, r3
  11955. 80054b0: 687a ldr r2, [r7, #4]
  11956. 80054b2: 6812 ldr r2, [r2, #0]
  11957. 80054b4: 69d1 ldr r1, [r2, #28]
  11958. 80054b6: 687a ldr r2, [r7, #4]
  11959. 80054b8: 6812 ldr r2, [r2, #0]
  11960. 80054ba: 430b orrs r3, r1
  11961. 80054bc: 61d3 str r3, [r2, #28]
  11962. #endif /* ADC_VER_V5_V90 */
  11963. }
  11964. /* Set ADC group regular sequence: channel on the selected scan sequence rank */
  11965. LL_ADC_REG_SetSequencerRanks(hadc->Instance, sConfig->Rank, sConfig->Channel);
  11966. 80054be: 687b ldr r3, [r7, #4]
  11967. 80054c0: 6818 ldr r0, [r3, #0]
  11968. 80054c2: 683b ldr r3, [r7, #0]
  11969. 80054c4: 6859 ldr r1, [r3, #4]
  11970. 80054c6: 683b ldr r3, [r7, #0]
  11971. 80054c8: 681b ldr r3, [r3, #0]
  11972. 80054ca: 461a mov r2, r3
  11973. 80054cc: f7ff fbb7 bl 8004c3e <LL_ADC_REG_SetSequencerRanks>
  11974. /* Parameters update conditioned to ADC state: */
  11975. /* Parameters that can be updated when ADC is disabled or enabled without */
  11976. /* conversion on going on regular group: */
  11977. /* - Channel sampling time */
  11978. /* - Channel offset */
  11979. tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
  11980. 80054d0: 687b ldr r3, [r7, #4]
  11981. 80054d2: 681b ldr r3, [r3, #0]
  11982. 80054d4: 4618 mov r0, r3
  11983. 80054d6: f7ff fcff bl 8004ed8 <LL_ADC_REG_IsConversionOngoing>
  11984. 80054da: 67b8 str r0, [r7, #120] @ 0x78
  11985. tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
  11986. 80054dc: 687b ldr r3, [r7, #4]
  11987. 80054de: 681b ldr r3, [r3, #0]
  11988. 80054e0: 4618 mov r0, r3
  11989. 80054e2: f7ff fd0c bl 8004efe <LL_ADC_INJ_IsConversionOngoing>
  11990. 80054e6: 6778 str r0, [r7, #116] @ 0x74
  11991. if ((tmp_adc_is_conversion_on_going_regular == 0UL)
  11992. 80054e8: 6fbb ldr r3, [r7, #120] @ 0x78
  11993. 80054ea: 2b00 cmp r3, #0
  11994. 80054ec: f040 80b8 bne.w 8005660 <HAL_ADC_ConfigChannel+0x248>
  11995. && (tmp_adc_is_conversion_on_going_injected == 0UL)
  11996. 80054f0: 6f7b ldr r3, [r7, #116] @ 0x74
  11997. 80054f2: 2b00 cmp r3, #0
  11998. 80054f4: f040 80b4 bne.w 8005660 <HAL_ADC_ConfigChannel+0x248>
  11999. )
  12000. {
  12001. /* Set sampling time of the selected ADC channel */
  12002. LL_ADC_SetChannelSamplingTime(hadc->Instance, sConfig->Channel, sConfig->SamplingTime);
  12003. 80054f8: 687b ldr r3, [r7, #4]
  12004. 80054fa: 6818 ldr r0, [r3, #0]
  12005. 80054fc: 683b ldr r3, [r7, #0]
  12006. 80054fe: 6819 ldr r1, [r3, #0]
  12007. 8005500: 683b ldr r3, [r7, #0]
  12008. 8005502: 689b ldr r3, [r3, #8]
  12009. 8005504: 461a mov r2, r3
  12010. 8005506: f7ff fbd9 bl 8004cbc <LL_ADC_SetChannelSamplingTime>
  12011. tmpOffsetShifted = ADC3_OFFSET_SHIFT_RESOLUTION(hadc, (uint32_t)sConfig->Offset);
  12012. }
  12013. else
  12014. #endif /* ADC_VER_V5_V90 */
  12015. {
  12016. tmpOffsetShifted = ADC_OFFSET_SHIFT_RESOLUTION(hadc, (uint32_t)sConfig->Offset);
  12017. 800550a: 4b30 ldr r3, [pc, #192] @ (80055cc <HAL_ADC_ConfigChannel+0x1b4>)
  12018. 800550c: 681b ldr r3, [r3, #0]
  12019. 800550e: f003 4370 and.w r3, r3, #4026531840 @ 0xf0000000
  12020. 8005512: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  12021. 8005516: d10b bne.n 8005530 <HAL_ADC_ConfigChannel+0x118>
  12022. 8005518: 683b ldr r3, [r7, #0]
  12023. 800551a: 695a ldr r2, [r3, #20]
  12024. 800551c: 687b ldr r3, [r7, #4]
  12025. 800551e: 681b ldr r3, [r3, #0]
  12026. 8005520: 68db ldr r3, [r3, #12]
  12027. 8005522: 089b lsrs r3, r3, #2
  12028. 8005524: f003 0307 and.w r3, r3, #7
  12029. 8005528: 005b lsls r3, r3, #1
  12030. 800552a: fa02 f303 lsl.w r3, r2, r3
  12031. 800552e: e01d b.n 800556c <HAL_ADC_ConfigChannel+0x154>
  12032. 8005530: 687b ldr r3, [r7, #4]
  12033. 8005532: 681b ldr r3, [r3, #0]
  12034. 8005534: 68db ldr r3, [r3, #12]
  12035. 8005536: f003 0310 and.w r3, r3, #16
  12036. 800553a: 2b00 cmp r3, #0
  12037. 800553c: d10b bne.n 8005556 <HAL_ADC_ConfigChannel+0x13e>
  12038. 800553e: 683b ldr r3, [r7, #0]
  12039. 8005540: 695a ldr r2, [r3, #20]
  12040. 8005542: 687b ldr r3, [r7, #4]
  12041. 8005544: 681b ldr r3, [r3, #0]
  12042. 8005546: 68db ldr r3, [r3, #12]
  12043. 8005548: 089b lsrs r3, r3, #2
  12044. 800554a: f003 0307 and.w r3, r3, #7
  12045. 800554e: 005b lsls r3, r3, #1
  12046. 8005550: fa02 f303 lsl.w r3, r2, r3
  12047. 8005554: e00a b.n 800556c <HAL_ADC_ConfigChannel+0x154>
  12048. 8005556: 683b ldr r3, [r7, #0]
  12049. 8005558: 695a ldr r2, [r3, #20]
  12050. 800555a: 687b ldr r3, [r7, #4]
  12051. 800555c: 681b ldr r3, [r3, #0]
  12052. 800555e: 68db ldr r3, [r3, #12]
  12053. 8005560: 089b lsrs r3, r3, #2
  12054. 8005562: f003 0304 and.w r3, r3, #4
  12055. 8005566: 005b lsls r3, r3, #1
  12056. 8005568: fa02 f303 lsl.w r3, r2, r3
  12057. 800556c: 673b str r3, [r7, #112] @ 0x70
  12058. }
  12059. if (sConfig->OffsetNumber != ADC_OFFSET_NONE)
  12060. 800556e: 683b ldr r3, [r7, #0]
  12061. 8005570: 691b ldr r3, [r3, #16]
  12062. 8005572: 2b04 cmp r3, #4
  12063. 8005574: d02c beq.n 80055d0 <HAL_ADC_ConfigChannel+0x1b8>
  12064. {
  12065. /* Set ADC selected offset number */
  12066. LL_ADC_SetOffset(hadc->Instance, sConfig->OffsetNumber, sConfig->Channel, tmpOffsetShifted);
  12067. 8005576: 687b ldr r3, [r7, #4]
  12068. 8005578: 6818 ldr r0, [r3, #0]
  12069. 800557a: 683b ldr r3, [r7, #0]
  12070. 800557c: 6919 ldr r1, [r3, #16]
  12071. 800557e: 683b ldr r3, [r7, #0]
  12072. 8005580: 681a ldr r2, [r3, #0]
  12073. 8005582: 6f3b ldr r3, [r7, #112] @ 0x70
  12074. 8005584: f7ff faf4 bl 8004b70 <LL_ADC_SetOffset>
  12075. else
  12076. #endif /* ADC_VER_V5_V90 */
  12077. {
  12078. assert_param(IS_FUNCTIONAL_STATE(sConfig->OffsetSignedSaturation));
  12079. /* Set ADC selected offset signed saturation */
  12080. LL_ADC_SetOffsetSignedSaturation(hadc->Instance, sConfig->OffsetNumber, (sConfig->OffsetSignedSaturation == ENABLE) ? LL_ADC_OFFSET_SIGNED_SATURATION_ENABLE : LL_ADC_OFFSET_SIGNED_SATURATION_DISABLE);
  12081. 8005588: 687b ldr r3, [r7, #4]
  12082. 800558a: 6818 ldr r0, [r3, #0]
  12083. 800558c: 683b ldr r3, [r7, #0]
  12084. 800558e: 6919 ldr r1, [r3, #16]
  12085. 8005590: 683b ldr r3, [r7, #0]
  12086. 8005592: 7e5b ldrb r3, [r3, #25]
  12087. 8005594: 2b01 cmp r3, #1
  12088. 8005596: d102 bne.n 800559e <HAL_ADC_ConfigChannel+0x186>
  12089. 8005598: f04f 4300 mov.w r3, #2147483648 @ 0x80000000
  12090. 800559c: e000 b.n 80055a0 <HAL_ADC_ConfigChannel+0x188>
  12091. 800559e: 2300 movs r3, #0
  12092. 80055a0: 461a mov r2, r3
  12093. 80055a2: f7ff fb1e bl 8004be2 <LL_ADC_SetOffsetSignedSaturation>
  12094. assert_param(IS_FUNCTIONAL_STATE(sConfig->OffsetRightShift));
  12095. /* Set ADC selected offset right shift */
  12096. LL_ADC_SetDataRightShift(hadc->Instance, sConfig->OffsetNumber, (sConfig->OffsetRightShift == ENABLE) ? LL_ADC_OFFSET_RSHIFT_ENABLE : LL_ADC_OFFSET_RSHIFT_DISABLE);
  12097. 80055a6: 687b ldr r3, [r7, #4]
  12098. 80055a8: 6818 ldr r0, [r3, #0]
  12099. 80055aa: 683b ldr r3, [r7, #0]
  12100. 80055ac: 6919 ldr r1, [r3, #16]
  12101. 80055ae: 683b ldr r3, [r7, #0]
  12102. 80055b0: 7e1b ldrb r3, [r3, #24]
  12103. 80055b2: 2b01 cmp r3, #1
  12104. 80055b4: d102 bne.n 80055bc <HAL_ADC_ConfigChannel+0x1a4>
  12105. 80055b6: f44f 6300 mov.w r3, #2048 @ 0x800
  12106. 80055ba: e000 b.n 80055be <HAL_ADC_ConfigChannel+0x1a6>
  12107. 80055bc: 2300 movs r3, #0
  12108. 80055be: 461a mov r2, r3
  12109. 80055c0: f7ff faf6 bl 8004bb0 <LL_ADC_SetDataRightShift>
  12110. 80055c4: e04c b.n 8005660 <HAL_ADC_ConfigChannel+0x248>
  12111. 80055c6: bf00 nop
  12112. 80055c8: 47ff0000 .word 0x47ff0000
  12113. 80055cc: 5c001000 .word 0x5c001000
  12114. }
  12115. }
  12116. else
  12117. #endif /* ADC_VER_V5_V90 */
  12118. {
  12119. if (((hadc->Instance->OFR1) & ADC_OFR1_OFFSET1_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  12120. 80055d0: 687b ldr r3, [r7, #4]
  12121. 80055d2: 681b ldr r3, [r3, #0]
  12122. 80055d4: 6e1b ldr r3, [r3, #96] @ 0x60
  12123. 80055d6: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  12124. 80055da: 683b ldr r3, [r7, #0]
  12125. 80055dc: 681b ldr r3, [r3, #0]
  12126. 80055de: 069b lsls r3, r3, #26
  12127. 80055e0: 429a cmp r2, r3
  12128. 80055e2: d107 bne.n 80055f4 <HAL_ADC_ConfigChannel+0x1dc>
  12129. {
  12130. CLEAR_BIT(hadc->Instance->OFR1, ADC_OFR1_SSATE);
  12131. 80055e4: 687b ldr r3, [r7, #4]
  12132. 80055e6: 681b ldr r3, [r3, #0]
  12133. 80055e8: 6e1a ldr r2, [r3, #96] @ 0x60
  12134. 80055ea: 687b ldr r3, [r7, #4]
  12135. 80055ec: 681b ldr r3, [r3, #0]
  12136. 80055ee: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  12137. 80055f2: 661a str r2, [r3, #96] @ 0x60
  12138. }
  12139. if (((hadc->Instance->OFR2) & ADC_OFR2_OFFSET2_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  12140. 80055f4: 687b ldr r3, [r7, #4]
  12141. 80055f6: 681b ldr r3, [r3, #0]
  12142. 80055f8: 6e5b ldr r3, [r3, #100] @ 0x64
  12143. 80055fa: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  12144. 80055fe: 683b ldr r3, [r7, #0]
  12145. 8005600: 681b ldr r3, [r3, #0]
  12146. 8005602: 069b lsls r3, r3, #26
  12147. 8005604: 429a cmp r2, r3
  12148. 8005606: d107 bne.n 8005618 <HAL_ADC_ConfigChannel+0x200>
  12149. {
  12150. CLEAR_BIT(hadc->Instance->OFR2, ADC_OFR2_SSATE);
  12151. 8005608: 687b ldr r3, [r7, #4]
  12152. 800560a: 681b ldr r3, [r3, #0]
  12153. 800560c: 6e5a ldr r2, [r3, #100] @ 0x64
  12154. 800560e: 687b ldr r3, [r7, #4]
  12155. 8005610: 681b ldr r3, [r3, #0]
  12156. 8005612: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  12157. 8005616: 665a str r2, [r3, #100] @ 0x64
  12158. }
  12159. if (((hadc->Instance->OFR3) & ADC_OFR3_OFFSET3_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  12160. 8005618: 687b ldr r3, [r7, #4]
  12161. 800561a: 681b ldr r3, [r3, #0]
  12162. 800561c: 6e9b ldr r3, [r3, #104] @ 0x68
  12163. 800561e: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  12164. 8005622: 683b ldr r3, [r7, #0]
  12165. 8005624: 681b ldr r3, [r3, #0]
  12166. 8005626: 069b lsls r3, r3, #26
  12167. 8005628: 429a cmp r2, r3
  12168. 800562a: d107 bne.n 800563c <HAL_ADC_ConfigChannel+0x224>
  12169. {
  12170. CLEAR_BIT(hadc->Instance->OFR3, ADC_OFR3_SSATE);
  12171. 800562c: 687b ldr r3, [r7, #4]
  12172. 800562e: 681b ldr r3, [r3, #0]
  12173. 8005630: 6e9a ldr r2, [r3, #104] @ 0x68
  12174. 8005632: 687b ldr r3, [r7, #4]
  12175. 8005634: 681b ldr r3, [r3, #0]
  12176. 8005636: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  12177. 800563a: 669a str r2, [r3, #104] @ 0x68
  12178. }
  12179. if (((hadc->Instance->OFR4) & ADC_OFR4_OFFSET4_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  12180. 800563c: 687b ldr r3, [r7, #4]
  12181. 800563e: 681b ldr r3, [r3, #0]
  12182. 8005640: 6edb ldr r3, [r3, #108] @ 0x6c
  12183. 8005642: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  12184. 8005646: 683b ldr r3, [r7, #0]
  12185. 8005648: 681b ldr r3, [r3, #0]
  12186. 800564a: 069b lsls r3, r3, #26
  12187. 800564c: 429a cmp r2, r3
  12188. 800564e: d107 bne.n 8005660 <HAL_ADC_ConfigChannel+0x248>
  12189. {
  12190. CLEAR_BIT(hadc->Instance->OFR4, ADC_OFR4_SSATE);
  12191. 8005650: 687b ldr r3, [r7, #4]
  12192. 8005652: 681b ldr r3, [r3, #0]
  12193. 8005654: 6eda ldr r2, [r3, #108] @ 0x6c
  12194. 8005656: 687b ldr r3, [r7, #4]
  12195. 8005658: 681b ldr r3, [r3, #0]
  12196. 800565a: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  12197. 800565e: 66da str r2, [r3, #108] @ 0x6c
  12198. /* Parameters update conditioned to ADC state: */
  12199. /* Parameters that can be updated only when ADC is disabled: */
  12200. /* - Single or differential mode */
  12201. /* - Internal measurement channels: Vbat/VrefInt/TempSensor */
  12202. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  12203. 8005660: 687b ldr r3, [r7, #4]
  12204. 8005662: 681b ldr r3, [r3, #0]
  12205. 8005664: 4618 mov r0, r3
  12206. 8005666: f7ff fbfd bl 8004e64 <LL_ADC_IsEnabled>
  12207. 800566a: 4603 mov r3, r0
  12208. 800566c: 2b00 cmp r3, #0
  12209. 800566e: f040 8211 bne.w 8005a94 <HAL_ADC_ConfigChannel+0x67c>
  12210. {
  12211. /* Set mode single-ended or differential input of the selected ADC channel */
  12212. LL_ADC_SetChannelSingleDiff(hadc->Instance, sConfig->Channel, sConfig->SingleDiff);
  12213. 8005672: 687b ldr r3, [r7, #4]
  12214. 8005674: 6818 ldr r0, [r3, #0]
  12215. 8005676: 683b ldr r3, [r7, #0]
  12216. 8005678: 6819 ldr r1, [r3, #0]
  12217. 800567a: 683b ldr r3, [r7, #0]
  12218. 800567c: 68db ldr r3, [r3, #12]
  12219. 800567e: 461a mov r2, r3
  12220. 8005680: f7ff fb48 bl 8004d14 <LL_ADC_SetChannelSingleDiff>
  12221. /* Configuration of differential mode */
  12222. if (sConfig->SingleDiff == ADC_DIFFERENTIAL_ENDED)
  12223. 8005684: 683b ldr r3, [r7, #0]
  12224. 8005686: 68db ldr r3, [r3, #12]
  12225. 8005688: 4aa1 ldr r2, [pc, #644] @ (8005910 <HAL_ADC_ConfigChannel+0x4f8>)
  12226. 800568a: 4293 cmp r3, r2
  12227. 800568c: f040 812e bne.w 80058ec <HAL_ADC_ConfigChannel+0x4d4>
  12228. {
  12229. /* Set sampling time of the selected ADC channel */
  12230. /* Note: ADC channel number masked with value "0x1F" to ensure shift value within 32 bits range */
  12231. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  12232. 8005690: 687b ldr r3, [r7, #4]
  12233. 8005692: 6818 ldr r0, [r3, #0]
  12234. (uint32_t)(__LL_ADC_DECIMAL_NB_TO_CHANNEL((__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) + 1UL) & 0x1FUL)),
  12235. 8005694: 683b ldr r3, [r7, #0]
  12236. 8005696: 681b ldr r3, [r3, #0]
  12237. 8005698: f3c3 0313 ubfx r3, r3, #0, #20
  12238. 800569c: 2b00 cmp r3, #0
  12239. 800569e: d10b bne.n 80056b8 <HAL_ADC_ConfigChannel+0x2a0>
  12240. 80056a0: 683b ldr r3, [r7, #0]
  12241. 80056a2: 681b ldr r3, [r3, #0]
  12242. 80056a4: 0e9b lsrs r3, r3, #26
  12243. 80056a6: 3301 adds r3, #1
  12244. 80056a8: f003 031f and.w r3, r3, #31
  12245. 80056ac: 2b09 cmp r3, #9
  12246. 80056ae: bf94 ite ls
  12247. 80056b0: 2301 movls r3, #1
  12248. 80056b2: 2300 movhi r3, #0
  12249. 80056b4: b2db uxtb r3, r3
  12250. 80056b6: e019 b.n 80056ec <HAL_ADC_ConfigChannel+0x2d4>
  12251. 80056b8: 683b ldr r3, [r7, #0]
  12252. 80056ba: 681b ldr r3, [r3, #0]
  12253. 80056bc: 65bb str r3, [r7, #88] @ 0x58
  12254. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  12255. 80056be: 6dbb ldr r3, [r7, #88] @ 0x58
  12256. 80056c0: fa93 f3a3 rbit r3, r3
  12257. 80056c4: 657b str r3, [r7, #84] @ 0x54
  12258. return result;
  12259. 80056c6: 6d7b ldr r3, [r7, #84] @ 0x54
  12260. 80056c8: 65fb str r3, [r7, #92] @ 0x5c
  12261. if (value == 0U)
  12262. 80056ca: 6dfb ldr r3, [r7, #92] @ 0x5c
  12263. 80056cc: 2b00 cmp r3, #0
  12264. 80056ce: d101 bne.n 80056d4 <HAL_ADC_ConfigChannel+0x2bc>
  12265. return 32U;
  12266. 80056d0: 2320 movs r3, #32
  12267. 80056d2: e003 b.n 80056dc <HAL_ADC_ConfigChannel+0x2c4>
  12268. return __builtin_clz(value);
  12269. 80056d4: 6dfb ldr r3, [r7, #92] @ 0x5c
  12270. 80056d6: fab3 f383 clz r3, r3
  12271. 80056da: b2db uxtb r3, r3
  12272. 80056dc: 3301 adds r3, #1
  12273. 80056de: f003 031f and.w r3, r3, #31
  12274. 80056e2: 2b09 cmp r3, #9
  12275. 80056e4: bf94 ite ls
  12276. 80056e6: 2301 movls r3, #1
  12277. 80056e8: 2300 movhi r3, #0
  12278. 80056ea: b2db uxtb r3, r3
  12279. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  12280. 80056ec: 2b00 cmp r3, #0
  12281. 80056ee: d079 beq.n 80057e4 <HAL_ADC_ConfigChannel+0x3cc>
  12282. (uint32_t)(__LL_ADC_DECIMAL_NB_TO_CHANNEL((__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) + 1UL) & 0x1FUL)),
  12283. 80056f0: 683b ldr r3, [r7, #0]
  12284. 80056f2: 681b ldr r3, [r3, #0]
  12285. 80056f4: f3c3 0313 ubfx r3, r3, #0, #20
  12286. 80056f8: 2b00 cmp r3, #0
  12287. 80056fa: d107 bne.n 800570c <HAL_ADC_ConfigChannel+0x2f4>
  12288. 80056fc: 683b ldr r3, [r7, #0]
  12289. 80056fe: 681b ldr r3, [r3, #0]
  12290. 8005700: 0e9b lsrs r3, r3, #26
  12291. 8005702: 3301 adds r3, #1
  12292. 8005704: 069b lsls r3, r3, #26
  12293. 8005706: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  12294. 800570a: e015 b.n 8005738 <HAL_ADC_ConfigChannel+0x320>
  12295. 800570c: 683b ldr r3, [r7, #0]
  12296. 800570e: 681b ldr r3, [r3, #0]
  12297. 8005710: 64fb str r3, [r7, #76] @ 0x4c
  12298. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  12299. 8005712: 6cfb ldr r3, [r7, #76] @ 0x4c
  12300. 8005714: fa93 f3a3 rbit r3, r3
  12301. 8005718: 64bb str r3, [r7, #72] @ 0x48
  12302. return result;
  12303. 800571a: 6cbb ldr r3, [r7, #72] @ 0x48
  12304. 800571c: 653b str r3, [r7, #80] @ 0x50
  12305. if (value == 0U)
  12306. 800571e: 6d3b ldr r3, [r7, #80] @ 0x50
  12307. 8005720: 2b00 cmp r3, #0
  12308. 8005722: d101 bne.n 8005728 <HAL_ADC_ConfigChannel+0x310>
  12309. return 32U;
  12310. 8005724: 2320 movs r3, #32
  12311. 8005726: e003 b.n 8005730 <HAL_ADC_ConfigChannel+0x318>
  12312. return __builtin_clz(value);
  12313. 8005728: 6d3b ldr r3, [r7, #80] @ 0x50
  12314. 800572a: fab3 f383 clz r3, r3
  12315. 800572e: b2db uxtb r3, r3
  12316. 8005730: 3301 adds r3, #1
  12317. 8005732: 069b lsls r3, r3, #26
  12318. 8005734: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  12319. 8005738: 683b ldr r3, [r7, #0]
  12320. 800573a: 681b ldr r3, [r3, #0]
  12321. 800573c: f3c3 0313 ubfx r3, r3, #0, #20
  12322. 8005740: 2b00 cmp r3, #0
  12323. 8005742: d109 bne.n 8005758 <HAL_ADC_ConfigChannel+0x340>
  12324. 8005744: 683b ldr r3, [r7, #0]
  12325. 8005746: 681b ldr r3, [r3, #0]
  12326. 8005748: 0e9b lsrs r3, r3, #26
  12327. 800574a: 3301 adds r3, #1
  12328. 800574c: f003 031f and.w r3, r3, #31
  12329. 8005750: 2101 movs r1, #1
  12330. 8005752: fa01 f303 lsl.w r3, r1, r3
  12331. 8005756: e017 b.n 8005788 <HAL_ADC_ConfigChannel+0x370>
  12332. 8005758: 683b ldr r3, [r7, #0]
  12333. 800575a: 681b ldr r3, [r3, #0]
  12334. 800575c: 643b str r3, [r7, #64] @ 0x40
  12335. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  12336. 800575e: 6c3b ldr r3, [r7, #64] @ 0x40
  12337. 8005760: fa93 f3a3 rbit r3, r3
  12338. 8005764: 63fb str r3, [r7, #60] @ 0x3c
  12339. return result;
  12340. 8005766: 6bfb ldr r3, [r7, #60] @ 0x3c
  12341. 8005768: 647b str r3, [r7, #68] @ 0x44
  12342. if (value == 0U)
  12343. 800576a: 6c7b ldr r3, [r7, #68] @ 0x44
  12344. 800576c: 2b00 cmp r3, #0
  12345. 800576e: d101 bne.n 8005774 <HAL_ADC_ConfigChannel+0x35c>
  12346. return 32U;
  12347. 8005770: 2320 movs r3, #32
  12348. 8005772: e003 b.n 800577c <HAL_ADC_ConfigChannel+0x364>
  12349. return __builtin_clz(value);
  12350. 8005774: 6c7b ldr r3, [r7, #68] @ 0x44
  12351. 8005776: fab3 f383 clz r3, r3
  12352. 800577a: b2db uxtb r3, r3
  12353. 800577c: 3301 adds r3, #1
  12354. 800577e: f003 031f and.w r3, r3, #31
  12355. 8005782: 2101 movs r1, #1
  12356. 8005784: fa01 f303 lsl.w r3, r1, r3
  12357. 8005788: ea42 0103 orr.w r1, r2, r3
  12358. 800578c: 683b ldr r3, [r7, #0]
  12359. 800578e: 681b ldr r3, [r3, #0]
  12360. 8005790: f3c3 0313 ubfx r3, r3, #0, #20
  12361. 8005794: 2b00 cmp r3, #0
  12362. 8005796: d10a bne.n 80057ae <HAL_ADC_ConfigChannel+0x396>
  12363. 8005798: 683b ldr r3, [r7, #0]
  12364. 800579a: 681b ldr r3, [r3, #0]
  12365. 800579c: 0e9b lsrs r3, r3, #26
  12366. 800579e: 3301 adds r3, #1
  12367. 80057a0: f003 021f and.w r2, r3, #31
  12368. 80057a4: 4613 mov r3, r2
  12369. 80057a6: 005b lsls r3, r3, #1
  12370. 80057a8: 4413 add r3, r2
  12371. 80057aa: 051b lsls r3, r3, #20
  12372. 80057ac: e018 b.n 80057e0 <HAL_ADC_ConfigChannel+0x3c8>
  12373. 80057ae: 683b ldr r3, [r7, #0]
  12374. 80057b0: 681b ldr r3, [r3, #0]
  12375. 80057b2: 637b str r3, [r7, #52] @ 0x34
  12376. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  12377. 80057b4: 6b7b ldr r3, [r7, #52] @ 0x34
  12378. 80057b6: fa93 f3a3 rbit r3, r3
  12379. 80057ba: 633b str r3, [r7, #48] @ 0x30
  12380. return result;
  12381. 80057bc: 6b3b ldr r3, [r7, #48] @ 0x30
  12382. 80057be: 63bb str r3, [r7, #56] @ 0x38
  12383. if (value == 0U)
  12384. 80057c0: 6bbb ldr r3, [r7, #56] @ 0x38
  12385. 80057c2: 2b00 cmp r3, #0
  12386. 80057c4: d101 bne.n 80057ca <HAL_ADC_ConfigChannel+0x3b2>
  12387. return 32U;
  12388. 80057c6: 2320 movs r3, #32
  12389. 80057c8: e003 b.n 80057d2 <HAL_ADC_ConfigChannel+0x3ba>
  12390. return __builtin_clz(value);
  12391. 80057ca: 6bbb ldr r3, [r7, #56] @ 0x38
  12392. 80057cc: fab3 f383 clz r3, r3
  12393. 80057d0: b2db uxtb r3, r3
  12394. 80057d2: 3301 adds r3, #1
  12395. 80057d4: f003 021f and.w r2, r3, #31
  12396. 80057d8: 4613 mov r3, r2
  12397. 80057da: 005b lsls r3, r3, #1
  12398. 80057dc: 4413 add r3, r2
  12399. 80057de: 051b lsls r3, r3, #20
  12400. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  12401. 80057e0: 430b orrs r3, r1
  12402. 80057e2: e07e b.n 80058e2 <HAL_ADC_ConfigChannel+0x4ca>
  12403. (uint32_t)(__LL_ADC_DECIMAL_NB_TO_CHANNEL((__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) + 1UL) & 0x1FUL)),
  12404. 80057e4: 683b ldr r3, [r7, #0]
  12405. 80057e6: 681b ldr r3, [r3, #0]
  12406. 80057e8: f3c3 0313 ubfx r3, r3, #0, #20
  12407. 80057ec: 2b00 cmp r3, #0
  12408. 80057ee: d107 bne.n 8005800 <HAL_ADC_ConfigChannel+0x3e8>
  12409. 80057f0: 683b ldr r3, [r7, #0]
  12410. 80057f2: 681b ldr r3, [r3, #0]
  12411. 80057f4: 0e9b lsrs r3, r3, #26
  12412. 80057f6: 3301 adds r3, #1
  12413. 80057f8: 069b lsls r3, r3, #26
  12414. 80057fa: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  12415. 80057fe: e015 b.n 800582c <HAL_ADC_ConfigChannel+0x414>
  12416. 8005800: 683b ldr r3, [r7, #0]
  12417. 8005802: 681b ldr r3, [r3, #0]
  12418. 8005804: 62bb str r3, [r7, #40] @ 0x28
  12419. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  12420. 8005806: 6abb ldr r3, [r7, #40] @ 0x28
  12421. 8005808: fa93 f3a3 rbit r3, r3
  12422. 800580c: 627b str r3, [r7, #36] @ 0x24
  12423. return result;
  12424. 800580e: 6a7b ldr r3, [r7, #36] @ 0x24
  12425. 8005810: 62fb str r3, [r7, #44] @ 0x2c
  12426. if (value == 0U)
  12427. 8005812: 6afb ldr r3, [r7, #44] @ 0x2c
  12428. 8005814: 2b00 cmp r3, #0
  12429. 8005816: d101 bne.n 800581c <HAL_ADC_ConfigChannel+0x404>
  12430. return 32U;
  12431. 8005818: 2320 movs r3, #32
  12432. 800581a: e003 b.n 8005824 <HAL_ADC_ConfigChannel+0x40c>
  12433. return __builtin_clz(value);
  12434. 800581c: 6afb ldr r3, [r7, #44] @ 0x2c
  12435. 800581e: fab3 f383 clz r3, r3
  12436. 8005822: b2db uxtb r3, r3
  12437. 8005824: 3301 adds r3, #1
  12438. 8005826: 069b lsls r3, r3, #26
  12439. 8005828: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  12440. 800582c: 683b ldr r3, [r7, #0]
  12441. 800582e: 681b ldr r3, [r3, #0]
  12442. 8005830: f3c3 0313 ubfx r3, r3, #0, #20
  12443. 8005834: 2b00 cmp r3, #0
  12444. 8005836: d109 bne.n 800584c <HAL_ADC_ConfigChannel+0x434>
  12445. 8005838: 683b ldr r3, [r7, #0]
  12446. 800583a: 681b ldr r3, [r3, #0]
  12447. 800583c: 0e9b lsrs r3, r3, #26
  12448. 800583e: 3301 adds r3, #1
  12449. 8005840: f003 031f and.w r3, r3, #31
  12450. 8005844: 2101 movs r1, #1
  12451. 8005846: fa01 f303 lsl.w r3, r1, r3
  12452. 800584a: e017 b.n 800587c <HAL_ADC_ConfigChannel+0x464>
  12453. 800584c: 683b ldr r3, [r7, #0]
  12454. 800584e: 681b ldr r3, [r3, #0]
  12455. 8005850: 61fb str r3, [r7, #28]
  12456. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  12457. 8005852: 69fb ldr r3, [r7, #28]
  12458. 8005854: fa93 f3a3 rbit r3, r3
  12459. 8005858: 61bb str r3, [r7, #24]
  12460. return result;
  12461. 800585a: 69bb ldr r3, [r7, #24]
  12462. 800585c: 623b str r3, [r7, #32]
  12463. if (value == 0U)
  12464. 800585e: 6a3b ldr r3, [r7, #32]
  12465. 8005860: 2b00 cmp r3, #0
  12466. 8005862: d101 bne.n 8005868 <HAL_ADC_ConfigChannel+0x450>
  12467. return 32U;
  12468. 8005864: 2320 movs r3, #32
  12469. 8005866: e003 b.n 8005870 <HAL_ADC_ConfigChannel+0x458>
  12470. return __builtin_clz(value);
  12471. 8005868: 6a3b ldr r3, [r7, #32]
  12472. 800586a: fab3 f383 clz r3, r3
  12473. 800586e: b2db uxtb r3, r3
  12474. 8005870: 3301 adds r3, #1
  12475. 8005872: f003 031f and.w r3, r3, #31
  12476. 8005876: 2101 movs r1, #1
  12477. 8005878: fa01 f303 lsl.w r3, r1, r3
  12478. 800587c: ea42 0103 orr.w r1, r2, r3
  12479. 8005880: 683b ldr r3, [r7, #0]
  12480. 8005882: 681b ldr r3, [r3, #0]
  12481. 8005884: f3c3 0313 ubfx r3, r3, #0, #20
  12482. 8005888: 2b00 cmp r3, #0
  12483. 800588a: d10d bne.n 80058a8 <HAL_ADC_ConfigChannel+0x490>
  12484. 800588c: 683b ldr r3, [r7, #0]
  12485. 800588e: 681b ldr r3, [r3, #0]
  12486. 8005890: 0e9b lsrs r3, r3, #26
  12487. 8005892: 3301 adds r3, #1
  12488. 8005894: f003 021f and.w r2, r3, #31
  12489. 8005898: 4613 mov r3, r2
  12490. 800589a: 005b lsls r3, r3, #1
  12491. 800589c: 4413 add r3, r2
  12492. 800589e: 3b1e subs r3, #30
  12493. 80058a0: 051b lsls r3, r3, #20
  12494. 80058a2: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000
  12495. 80058a6: e01b b.n 80058e0 <HAL_ADC_ConfigChannel+0x4c8>
  12496. 80058a8: 683b ldr r3, [r7, #0]
  12497. 80058aa: 681b ldr r3, [r3, #0]
  12498. 80058ac: 613b str r3, [r7, #16]
  12499. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  12500. 80058ae: 693b ldr r3, [r7, #16]
  12501. 80058b0: fa93 f3a3 rbit r3, r3
  12502. 80058b4: 60fb str r3, [r7, #12]
  12503. return result;
  12504. 80058b6: 68fb ldr r3, [r7, #12]
  12505. 80058b8: 617b str r3, [r7, #20]
  12506. if (value == 0U)
  12507. 80058ba: 697b ldr r3, [r7, #20]
  12508. 80058bc: 2b00 cmp r3, #0
  12509. 80058be: d101 bne.n 80058c4 <HAL_ADC_ConfigChannel+0x4ac>
  12510. return 32U;
  12511. 80058c0: 2320 movs r3, #32
  12512. 80058c2: e003 b.n 80058cc <HAL_ADC_ConfigChannel+0x4b4>
  12513. return __builtin_clz(value);
  12514. 80058c4: 697b ldr r3, [r7, #20]
  12515. 80058c6: fab3 f383 clz r3, r3
  12516. 80058ca: b2db uxtb r3, r3
  12517. 80058cc: 3301 adds r3, #1
  12518. 80058ce: f003 021f and.w r2, r3, #31
  12519. 80058d2: 4613 mov r3, r2
  12520. 80058d4: 005b lsls r3, r3, #1
  12521. 80058d6: 4413 add r3, r2
  12522. 80058d8: 3b1e subs r3, #30
  12523. 80058da: 051b lsls r3, r3, #20
  12524. 80058dc: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000
  12525. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  12526. 80058e0: 430b orrs r3, r1
  12527. 80058e2: 683a ldr r2, [r7, #0]
  12528. 80058e4: 6892 ldr r2, [r2, #8]
  12529. 80058e6: 4619 mov r1, r3
  12530. 80058e8: f7ff f9e8 bl 8004cbc <LL_ADC_SetChannelSamplingTime>
  12531. /* If internal channel selected, enable dedicated internal buffers and */
  12532. /* paths. */
  12533. /* Note: these internal measurement paths can be disabled using */
  12534. /* HAL_ADC_DeInit(). */
  12535. if (__LL_ADC_IS_CHANNEL_INTERNAL(sConfig->Channel))
  12536. 80058ec: 683b ldr r3, [r7, #0]
  12537. 80058ee: 681b ldr r3, [r3, #0]
  12538. 80058f0: 2b00 cmp r3, #0
  12539. 80058f2: f280 80cf bge.w 8005a94 <HAL_ADC_ConfigChannel+0x67c>
  12540. {
  12541. /* Configuration of common ADC parameters */
  12542. tmp_config_internal_channel = LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
  12543. 80058f6: 687b ldr r3, [r7, #4]
  12544. 80058f8: 681b ldr r3, [r3, #0]
  12545. 80058fa: 4a06 ldr r2, [pc, #24] @ (8005914 <HAL_ADC_ConfigChannel+0x4fc>)
  12546. 80058fc: 4293 cmp r3, r2
  12547. 80058fe: d004 beq.n 800590a <HAL_ADC_ConfigChannel+0x4f2>
  12548. 8005900: 687b ldr r3, [r7, #4]
  12549. 8005902: 681b ldr r3, [r3, #0]
  12550. 8005904: 4a04 ldr r2, [pc, #16] @ (8005918 <HAL_ADC_ConfigChannel+0x500>)
  12551. 8005906: 4293 cmp r3, r2
  12552. 8005908: d10a bne.n 8005920 <HAL_ADC_ConfigChannel+0x508>
  12553. 800590a: 4b04 ldr r3, [pc, #16] @ (800591c <HAL_ADC_ConfigChannel+0x504>)
  12554. 800590c: e009 b.n 8005922 <HAL_ADC_ConfigChannel+0x50a>
  12555. 800590e: bf00 nop
  12556. 8005910: 47ff0000 .word 0x47ff0000
  12557. 8005914: 40022000 .word 0x40022000
  12558. 8005918: 40022100 .word 0x40022100
  12559. 800591c: 40022300 .word 0x40022300
  12560. 8005920: 4b61 ldr r3, [pc, #388] @ (8005aa8 <HAL_ADC_ConfigChannel+0x690>)
  12561. 8005922: 4618 mov r0, r3
  12562. 8005924: f7ff f916 bl 8004b54 <LL_ADC_GetCommonPathInternalCh>
  12563. 8005928: 66f8 str r0, [r7, #108] @ 0x6c
  12564. /* Software is allowed to change common parameters only when all ADCs */
  12565. /* of the common group are disabled. */
  12566. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  12567. 800592a: 687b ldr r3, [r7, #4]
  12568. 800592c: 681b ldr r3, [r3, #0]
  12569. 800592e: 4a5f ldr r2, [pc, #380] @ (8005aac <HAL_ADC_ConfigChannel+0x694>)
  12570. 8005930: 4293 cmp r3, r2
  12571. 8005932: d004 beq.n 800593e <HAL_ADC_ConfigChannel+0x526>
  12572. 8005934: 687b ldr r3, [r7, #4]
  12573. 8005936: 681b ldr r3, [r3, #0]
  12574. 8005938: 4a5d ldr r2, [pc, #372] @ (8005ab0 <HAL_ADC_ConfigChannel+0x698>)
  12575. 800593a: 4293 cmp r3, r2
  12576. 800593c: d10e bne.n 800595c <HAL_ADC_ConfigChannel+0x544>
  12577. 800593e: 485b ldr r0, [pc, #364] @ (8005aac <HAL_ADC_ConfigChannel+0x694>)
  12578. 8005940: f7ff fa90 bl 8004e64 <LL_ADC_IsEnabled>
  12579. 8005944: 4604 mov r4, r0
  12580. 8005946: 485a ldr r0, [pc, #360] @ (8005ab0 <HAL_ADC_ConfigChannel+0x698>)
  12581. 8005948: f7ff fa8c bl 8004e64 <LL_ADC_IsEnabled>
  12582. 800594c: 4603 mov r3, r0
  12583. 800594e: 4323 orrs r3, r4
  12584. 8005950: 2b00 cmp r3, #0
  12585. 8005952: bf0c ite eq
  12586. 8005954: 2301 moveq r3, #1
  12587. 8005956: 2300 movne r3, #0
  12588. 8005958: b2db uxtb r3, r3
  12589. 800595a: e008 b.n 800596e <HAL_ADC_ConfigChannel+0x556>
  12590. 800595c: 4855 ldr r0, [pc, #340] @ (8005ab4 <HAL_ADC_ConfigChannel+0x69c>)
  12591. 800595e: f7ff fa81 bl 8004e64 <LL_ADC_IsEnabled>
  12592. 8005962: 4603 mov r3, r0
  12593. 8005964: 2b00 cmp r3, #0
  12594. 8005966: bf0c ite eq
  12595. 8005968: 2301 moveq r3, #1
  12596. 800596a: 2300 movne r3, #0
  12597. 800596c: b2db uxtb r3, r3
  12598. 800596e: 2b00 cmp r3, #0
  12599. 8005970: d07d beq.n 8005a6e <HAL_ADC_ConfigChannel+0x656>
  12600. {
  12601. /* If the requested internal measurement path has already been enabled, */
  12602. /* bypass the configuration processing. */
  12603. if ((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_TEMPSENSOR) == 0UL))
  12604. 8005972: 683b ldr r3, [r7, #0]
  12605. 8005974: 681b ldr r3, [r3, #0]
  12606. 8005976: 4a50 ldr r2, [pc, #320] @ (8005ab8 <HAL_ADC_ConfigChannel+0x6a0>)
  12607. 8005978: 4293 cmp r3, r2
  12608. 800597a: d130 bne.n 80059de <HAL_ADC_ConfigChannel+0x5c6>
  12609. 800597c: 6efb ldr r3, [r7, #108] @ 0x6c
  12610. 800597e: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  12611. 8005982: 2b00 cmp r3, #0
  12612. 8005984: d12b bne.n 80059de <HAL_ADC_ConfigChannel+0x5c6>
  12613. {
  12614. if (ADC_TEMPERATURE_SENSOR_INSTANCE(hadc))
  12615. 8005986: 687b ldr r3, [r7, #4]
  12616. 8005988: 681b ldr r3, [r3, #0]
  12617. 800598a: 4a4a ldr r2, [pc, #296] @ (8005ab4 <HAL_ADC_ConfigChannel+0x69c>)
  12618. 800598c: 4293 cmp r3, r2
  12619. 800598e: f040 8081 bne.w 8005a94 <HAL_ADC_ConfigChannel+0x67c>
  12620. {
  12621. LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_TEMPSENSOR | tmp_config_internal_channel);
  12622. 8005992: 687b ldr r3, [r7, #4]
  12623. 8005994: 681b ldr r3, [r3, #0]
  12624. 8005996: 4a45 ldr r2, [pc, #276] @ (8005aac <HAL_ADC_ConfigChannel+0x694>)
  12625. 8005998: 4293 cmp r3, r2
  12626. 800599a: d004 beq.n 80059a6 <HAL_ADC_ConfigChannel+0x58e>
  12627. 800599c: 687b ldr r3, [r7, #4]
  12628. 800599e: 681b ldr r3, [r3, #0]
  12629. 80059a0: 4a43 ldr r2, [pc, #268] @ (8005ab0 <HAL_ADC_ConfigChannel+0x698>)
  12630. 80059a2: 4293 cmp r3, r2
  12631. 80059a4: d101 bne.n 80059aa <HAL_ADC_ConfigChannel+0x592>
  12632. 80059a6: 4a45 ldr r2, [pc, #276] @ (8005abc <HAL_ADC_ConfigChannel+0x6a4>)
  12633. 80059a8: e000 b.n 80059ac <HAL_ADC_ConfigChannel+0x594>
  12634. 80059aa: 4a3f ldr r2, [pc, #252] @ (8005aa8 <HAL_ADC_ConfigChannel+0x690>)
  12635. 80059ac: 6efb ldr r3, [r7, #108] @ 0x6c
  12636. 80059ae: f443 0300 orr.w r3, r3, #8388608 @ 0x800000
  12637. 80059b2: 4619 mov r1, r3
  12638. 80059b4: 4610 mov r0, r2
  12639. 80059b6: f7ff f8ba bl 8004b2e <LL_ADC_SetCommonPathInternalCh>
  12640. /* Delay for temperature sensor stabilization time */
  12641. /* Wait loop initialization and execution */
  12642. /* Note: Variable divided by 2 to compensate partially */
  12643. /* CPU processing cycles, scaling in us split to not */
  12644. /* exceed 32 bits register capacity and handle low frequency. */
  12645. wait_loop_index = ((LL_ADC_DELAY_TEMPSENSOR_STAB_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
  12646. 80059ba: 4b41 ldr r3, [pc, #260] @ (8005ac0 <HAL_ADC_ConfigChannel+0x6a8>)
  12647. 80059bc: 681b ldr r3, [r3, #0]
  12648. 80059be: 099b lsrs r3, r3, #6
  12649. 80059c0: 4a40 ldr r2, [pc, #256] @ (8005ac4 <HAL_ADC_ConfigChannel+0x6ac>)
  12650. 80059c2: fba2 2303 umull r2, r3, r2, r3
  12651. 80059c6: 099b lsrs r3, r3, #6
  12652. 80059c8: 3301 adds r3, #1
  12653. 80059ca: 005b lsls r3, r3, #1
  12654. 80059cc: 60bb str r3, [r7, #8]
  12655. while (wait_loop_index != 0UL)
  12656. 80059ce: e002 b.n 80059d6 <HAL_ADC_ConfigChannel+0x5be>
  12657. {
  12658. wait_loop_index--;
  12659. 80059d0: 68bb ldr r3, [r7, #8]
  12660. 80059d2: 3b01 subs r3, #1
  12661. 80059d4: 60bb str r3, [r7, #8]
  12662. while (wait_loop_index != 0UL)
  12663. 80059d6: 68bb ldr r3, [r7, #8]
  12664. 80059d8: 2b00 cmp r3, #0
  12665. 80059da: d1f9 bne.n 80059d0 <HAL_ADC_ConfigChannel+0x5b8>
  12666. if (ADC_TEMPERATURE_SENSOR_INSTANCE(hadc))
  12667. 80059dc: e05a b.n 8005a94 <HAL_ADC_ConfigChannel+0x67c>
  12668. }
  12669. }
  12670. }
  12671. else if ((sConfig->Channel == ADC_CHANNEL_VBAT) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_VBAT) == 0UL))
  12672. 80059de: 683b ldr r3, [r7, #0]
  12673. 80059e0: 681b ldr r3, [r3, #0]
  12674. 80059e2: 4a39 ldr r2, [pc, #228] @ (8005ac8 <HAL_ADC_ConfigChannel+0x6b0>)
  12675. 80059e4: 4293 cmp r3, r2
  12676. 80059e6: d11e bne.n 8005a26 <HAL_ADC_ConfigChannel+0x60e>
  12677. 80059e8: 6efb ldr r3, [r7, #108] @ 0x6c
  12678. 80059ea: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  12679. 80059ee: 2b00 cmp r3, #0
  12680. 80059f0: d119 bne.n 8005a26 <HAL_ADC_ConfigChannel+0x60e>
  12681. {
  12682. if (ADC_BATTERY_VOLTAGE_INSTANCE(hadc))
  12683. 80059f2: 687b ldr r3, [r7, #4]
  12684. 80059f4: 681b ldr r3, [r3, #0]
  12685. 80059f6: 4a2f ldr r2, [pc, #188] @ (8005ab4 <HAL_ADC_ConfigChannel+0x69c>)
  12686. 80059f8: 4293 cmp r3, r2
  12687. 80059fa: d14b bne.n 8005a94 <HAL_ADC_ConfigChannel+0x67c>
  12688. {
  12689. LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VBAT | tmp_config_internal_channel);
  12690. 80059fc: 687b ldr r3, [r7, #4]
  12691. 80059fe: 681b ldr r3, [r3, #0]
  12692. 8005a00: 4a2a ldr r2, [pc, #168] @ (8005aac <HAL_ADC_ConfigChannel+0x694>)
  12693. 8005a02: 4293 cmp r3, r2
  12694. 8005a04: d004 beq.n 8005a10 <HAL_ADC_ConfigChannel+0x5f8>
  12695. 8005a06: 687b ldr r3, [r7, #4]
  12696. 8005a08: 681b ldr r3, [r3, #0]
  12697. 8005a0a: 4a29 ldr r2, [pc, #164] @ (8005ab0 <HAL_ADC_ConfigChannel+0x698>)
  12698. 8005a0c: 4293 cmp r3, r2
  12699. 8005a0e: d101 bne.n 8005a14 <HAL_ADC_ConfigChannel+0x5fc>
  12700. 8005a10: 4a2a ldr r2, [pc, #168] @ (8005abc <HAL_ADC_ConfigChannel+0x6a4>)
  12701. 8005a12: e000 b.n 8005a16 <HAL_ADC_ConfigChannel+0x5fe>
  12702. 8005a14: 4a24 ldr r2, [pc, #144] @ (8005aa8 <HAL_ADC_ConfigChannel+0x690>)
  12703. 8005a16: 6efb ldr r3, [r7, #108] @ 0x6c
  12704. 8005a18: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  12705. 8005a1c: 4619 mov r1, r3
  12706. 8005a1e: 4610 mov r0, r2
  12707. 8005a20: f7ff f885 bl 8004b2e <LL_ADC_SetCommonPathInternalCh>
  12708. if (ADC_BATTERY_VOLTAGE_INSTANCE(hadc))
  12709. 8005a24: e036 b.n 8005a94 <HAL_ADC_ConfigChannel+0x67c>
  12710. }
  12711. }
  12712. else if ((sConfig->Channel == ADC_CHANNEL_VREFINT) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_VREFINT) == 0UL))
  12713. 8005a26: 683b ldr r3, [r7, #0]
  12714. 8005a28: 681b ldr r3, [r3, #0]
  12715. 8005a2a: 4a28 ldr r2, [pc, #160] @ (8005acc <HAL_ADC_ConfigChannel+0x6b4>)
  12716. 8005a2c: 4293 cmp r3, r2
  12717. 8005a2e: d131 bne.n 8005a94 <HAL_ADC_ConfigChannel+0x67c>
  12718. 8005a30: 6efb ldr r3, [r7, #108] @ 0x6c
  12719. 8005a32: f403 0380 and.w r3, r3, #4194304 @ 0x400000
  12720. 8005a36: 2b00 cmp r3, #0
  12721. 8005a38: d12c bne.n 8005a94 <HAL_ADC_ConfigChannel+0x67c>
  12722. {
  12723. if (ADC_VREFINT_INSTANCE(hadc))
  12724. 8005a3a: 687b ldr r3, [r7, #4]
  12725. 8005a3c: 681b ldr r3, [r3, #0]
  12726. 8005a3e: 4a1d ldr r2, [pc, #116] @ (8005ab4 <HAL_ADC_ConfigChannel+0x69c>)
  12727. 8005a40: 4293 cmp r3, r2
  12728. 8005a42: d127 bne.n 8005a94 <HAL_ADC_ConfigChannel+0x67c>
  12729. {
  12730. LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VREFINT | tmp_config_internal_channel);
  12731. 8005a44: 687b ldr r3, [r7, #4]
  12732. 8005a46: 681b ldr r3, [r3, #0]
  12733. 8005a48: 4a18 ldr r2, [pc, #96] @ (8005aac <HAL_ADC_ConfigChannel+0x694>)
  12734. 8005a4a: 4293 cmp r3, r2
  12735. 8005a4c: d004 beq.n 8005a58 <HAL_ADC_ConfigChannel+0x640>
  12736. 8005a4e: 687b ldr r3, [r7, #4]
  12737. 8005a50: 681b ldr r3, [r3, #0]
  12738. 8005a52: 4a17 ldr r2, [pc, #92] @ (8005ab0 <HAL_ADC_ConfigChannel+0x698>)
  12739. 8005a54: 4293 cmp r3, r2
  12740. 8005a56: d101 bne.n 8005a5c <HAL_ADC_ConfigChannel+0x644>
  12741. 8005a58: 4a18 ldr r2, [pc, #96] @ (8005abc <HAL_ADC_ConfigChannel+0x6a4>)
  12742. 8005a5a: e000 b.n 8005a5e <HAL_ADC_ConfigChannel+0x646>
  12743. 8005a5c: 4a12 ldr r2, [pc, #72] @ (8005aa8 <HAL_ADC_ConfigChannel+0x690>)
  12744. 8005a5e: 6efb ldr r3, [r7, #108] @ 0x6c
  12745. 8005a60: f443 0380 orr.w r3, r3, #4194304 @ 0x400000
  12746. 8005a64: 4619 mov r1, r3
  12747. 8005a66: 4610 mov r0, r2
  12748. 8005a68: f7ff f861 bl 8004b2e <LL_ADC_SetCommonPathInternalCh>
  12749. 8005a6c: e012 b.n 8005a94 <HAL_ADC_ConfigChannel+0x67c>
  12750. /* enabled and other ADC of the common group are enabled, internal */
  12751. /* measurement paths cannot be enabled. */
  12752. else
  12753. {
  12754. /* Update ADC state machine to error */
  12755. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  12756. 8005a6e: 687b ldr r3, [r7, #4]
  12757. 8005a70: 6d5b ldr r3, [r3, #84] @ 0x54
  12758. 8005a72: f043 0220 orr.w r2, r3, #32
  12759. 8005a76: 687b ldr r3, [r7, #4]
  12760. 8005a78: 655a str r2, [r3, #84] @ 0x54
  12761. tmp_hal_status = HAL_ERROR;
  12762. 8005a7a: 2301 movs r3, #1
  12763. 8005a7c: f887 307f strb.w r3, [r7, #127] @ 0x7f
  12764. 8005a80: e008 b.n 8005a94 <HAL_ADC_ConfigChannel+0x67c>
  12765. /* channel could be done on neither of the channel configuration structure */
  12766. /* parameters. */
  12767. else
  12768. {
  12769. /* Update ADC state machine to error */
  12770. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  12771. 8005a82: 687b ldr r3, [r7, #4]
  12772. 8005a84: 6d5b ldr r3, [r3, #84] @ 0x54
  12773. 8005a86: f043 0220 orr.w r2, r3, #32
  12774. 8005a8a: 687b ldr r3, [r7, #4]
  12775. 8005a8c: 655a str r2, [r3, #84] @ 0x54
  12776. tmp_hal_status = HAL_ERROR;
  12777. 8005a8e: 2301 movs r3, #1
  12778. 8005a90: f887 307f strb.w r3, [r7, #127] @ 0x7f
  12779. }
  12780. /* Process unlocked */
  12781. __HAL_UNLOCK(hadc);
  12782. 8005a94: 687b ldr r3, [r7, #4]
  12783. 8005a96: 2200 movs r2, #0
  12784. 8005a98: f883 2050 strb.w r2, [r3, #80] @ 0x50
  12785. /* Return function status */
  12786. return tmp_hal_status;
  12787. 8005a9c: f897 307f ldrb.w r3, [r7, #127] @ 0x7f
  12788. }
  12789. 8005aa0: 4618 mov r0, r3
  12790. 8005aa2: 3784 adds r7, #132 @ 0x84
  12791. 8005aa4: 46bd mov sp, r7
  12792. 8005aa6: bd90 pop {r4, r7, pc}
  12793. 8005aa8: 58026300 .word 0x58026300
  12794. 8005aac: 40022000 .word 0x40022000
  12795. 8005ab0: 40022100 .word 0x40022100
  12796. 8005ab4: 58026000 .word 0x58026000
  12797. 8005ab8: cb840000 .word 0xcb840000
  12798. 8005abc: 40022300 .word 0x40022300
  12799. 8005ac0: 24000034 .word 0x24000034
  12800. 8005ac4: 053e2d63 .word 0x053e2d63
  12801. 8005ac8: c7520000 .word 0xc7520000
  12802. 8005acc: cfb80000 .word 0xcfb80000
  12803. 08005ad0 <ADC_Enable>:
  12804. * and voltage regulator must be enabled (done into HAL_ADC_Init()).
  12805. * @param hadc ADC handle
  12806. * @retval HAL status.
  12807. */
  12808. HAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef *hadc)
  12809. {
  12810. 8005ad0: b580 push {r7, lr}
  12811. 8005ad2: b084 sub sp, #16
  12812. 8005ad4: af00 add r7, sp, #0
  12813. 8005ad6: 6078 str r0, [r7, #4]
  12814. /* ADC enable and wait for ADC ready (in case of ADC is disabled or */
  12815. /* enabling phase not yet completed: flag ADC ready not yet set). */
  12816. /* Timeout implemented to not be stuck if ADC cannot be enabled (possible */
  12817. /* causes: ADC clock not running, ...). */
  12818. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  12819. 8005ad8: 687b ldr r3, [r7, #4]
  12820. 8005ada: 681b ldr r3, [r3, #0]
  12821. 8005adc: 4618 mov r0, r3
  12822. 8005ade: f7ff f9c1 bl 8004e64 <LL_ADC_IsEnabled>
  12823. 8005ae2: 4603 mov r3, r0
  12824. 8005ae4: 2b00 cmp r3, #0
  12825. 8005ae6: d16e bne.n 8005bc6 <ADC_Enable+0xf6>
  12826. {
  12827. /* Check if conditions to enable the ADC are fulfilled */
  12828. 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)
  12829. 8005ae8: 687b ldr r3, [r7, #4]
  12830. 8005aea: 681b ldr r3, [r3, #0]
  12831. 8005aec: 689a ldr r2, [r3, #8]
  12832. 8005aee: 4b38 ldr r3, [pc, #224] @ (8005bd0 <ADC_Enable+0x100>)
  12833. 8005af0: 4013 ands r3, r2
  12834. 8005af2: 2b00 cmp r3, #0
  12835. 8005af4: d00d beq.n 8005b12 <ADC_Enable+0x42>
  12836. {
  12837. /* Update ADC state machine to error */
  12838. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  12839. 8005af6: 687b ldr r3, [r7, #4]
  12840. 8005af8: 6d5b ldr r3, [r3, #84] @ 0x54
  12841. 8005afa: f043 0210 orr.w r2, r3, #16
  12842. 8005afe: 687b ldr r3, [r7, #4]
  12843. 8005b00: 655a str r2, [r3, #84] @ 0x54
  12844. /* Set ADC error code to ADC peripheral internal error */
  12845. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  12846. 8005b02: 687b ldr r3, [r7, #4]
  12847. 8005b04: 6d9b ldr r3, [r3, #88] @ 0x58
  12848. 8005b06: f043 0201 orr.w r2, r3, #1
  12849. 8005b0a: 687b ldr r3, [r7, #4]
  12850. 8005b0c: 659a str r2, [r3, #88] @ 0x58
  12851. return HAL_ERROR;
  12852. 8005b0e: 2301 movs r3, #1
  12853. 8005b10: e05a b.n 8005bc8 <ADC_Enable+0xf8>
  12854. }
  12855. /* Enable the ADC peripheral */
  12856. LL_ADC_Enable(hadc->Instance);
  12857. 8005b12: 687b ldr r3, [r7, #4]
  12858. 8005b14: 681b ldr r3, [r3, #0]
  12859. 8005b16: 4618 mov r0, r3
  12860. 8005b18: f7ff f97c bl 8004e14 <LL_ADC_Enable>
  12861. /* Wait for ADC effectively enabled */
  12862. tickstart = HAL_GetTick();
  12863. 8005b1c: f7fe ffa2 bl 8004a64 <HAL_GetTick>
  12864. 8005b20: 60f8 str r0, [r7, #12]
  12865. /* Poll for ADC ready flag raised except case of multimode enabled
  12866. and ADC slave selected. */
  12867. uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
  12868. 8005b22: 687b ldr r3, [r7, #4]
  12869. 8005b24: 681b ldr r3, [r3, #0]
  12870. 8005b26: 4a2b ldr r2, [pc, #172] @ (8005bd4 <ADC_Enable+0x104>)
  12871. 8005b28: 4293 cmp r3, r2
  12872. 8005b2a: d004 beq.n 8005b36 <ADC_Enable+0x66>
  12873. 8005b2c: 687b ldr r3, [r7, #4]
  12874. 8005b2e: 681b ldr r3, [r3, #0]
  12875. 8005b30: 4a29 ldr r2, [pc, #164] @ (8005bd8 <ADC_Enable+0x108>)
  12876. 8005b32: 4293 cmp r3, r2
  12877. 8005b34: d101 bne.n 8005b3a <ADC_Enable+0x6a>
  12878. 8005b36: 4b29 ldr r3, [pc, #164] @ (8005bdc <ADC_Enable+0x10c>)
  12879. 8005b38: e000 b.n 8005b3c <ADC_Enable+0x6c>
  12880. 8005b3a: 4b29 ldr r3, [pc, #164] @ (8005be0 <ADC_Enable+0x110>)
  12881. 8005b3c: 4618 mov r0, r3
  12882. 8005b3e: f7ff f90d bl 8004d5c <LL_ADC_GetMultimode>
  12883. 8005b42: 60b8 str r0, [r7, #8]
  12884. if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
  12885. 8005b44: 687b ldr r3, [r7, #4]
  12886. 8005b46: 681b ldr r3, [r3, #0]
  12887. 8005b48: 4a23 ldr r2, [pc, #140] @ (8005bd8 <ADC_Enable+0x108>)
  12888. 8005b4a: 4293 cmp r3, r2
  12889. 8005b4c: d002 beq.n 8005b54 <ADC_Enable+0x84>
  12890. 8005b4e: 687b ldr r3, [r7, #4]
  12891. 8005b50: 681b ldr r3, [r3, #0]
  12892. 8005b52: e000 b.n 8005b56 <ADC_Enable+0x86>
  12893. 8005b54: 4b1f ldr r3, [pc, #124] @ (8005bd4 <ADC_Enable+0x104>)
  12894. 8005b56: 687a ldr r2, [r7, #4]
  12895. 8005b58: 6812 ldr r2, [r2, #0]
  12896. 8005b5a: 4293 cmp r3, r2
  12897. 8005b5c: d02c beq.n 8005bb8 <ADC_Enable+0xe8>
  12898. || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
  12899. 8005b5e: 68bb ldr r3, [r7, #8]
  12900. 8005b60: 2b00 cmp r3, #0
  12901. 8005b62: d130 bne.n 8005bc6 <ADC_Enable+0xf6>
  12902. )
  12903. {
  12904. while (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == 0UL)
  12905. 8005b64: e028 b.n 8005bb8 <ADC_Enable+0xe8>
  12906. The workaround is to continue setting ADEN until ADRDY is becomes 1.
  12907. Additionally, ADC_ENABLE_TIMEOUT is defined to encompass this
  12908. 4 ADC clock cycle duration */
  12909. /* Note: Test of ADC enabled required due to hardware constraint to */
  12910. /* not enable ADC if already enabled. */
  12911. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  12912. 8005b66: 687b ldr r3, [r7, #4]
  12913. 8005b68: 681b ldr r3, [r3, #0]
  12914. 8005b6a: 4618 mov r0, r3
  12915. 8005b6c: f7ff f97a bl 8004e64 <LL_ADC_IsEnabled>
  12916. 8005b70: 4603 mov r3, r0
  12917. 8005b72: 2b00 cmp r3, #0
  12918. 8005b74: d104 bne.n 8005b80 <ADC_Enable+0xb0>
  12919. {
  12920. LL_ADC_Enable(hadc->Instance);
  12921. 8005b76: 687b ldr r3, [r7, #4]
  12922. 8005b78: 681b ldr r3, [r3, #0]
  12923. 8005b7a: 4618 mov r0, r3
  12924. 8005b7c: f7ff f94a bl 8004e14 <LL_ADC_Enable>
  12925. }
  12926. if ((HAL_GetTick() - tickstart) > ADC_ENABLE_TIMEOUT)
  12927. 8005b80: f7fe ff70 bl 8004a64 <HAL_GetTick>
  12928. 8005b84: 4602 mov r2, r0
  12929. 8005b86: 68fb ldr r3, [r7, #12]
  12930. 8005b88: 1ad3 subs r3, r2, r3
  12931. 8005b8a: 2b02 cmp r3, #2
  12932. 8005b8c: d914 bls.n 8005bb8 <ADC_Enable+0xe8>
  12933. {
  12934. /* New check to avoid false timeout detection in case of preemption */
  12935. if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == 0UL)
  12936. 8005b8e: 687b ldr r3, [r7, #4]
  12937. 8005b90: 681b ldr r3, [r3, #0]
  12938. 8005b92: 681b ldr r3, [r3, #0]
  12939. 8005b94: f003 0301 and.w r3, r3, #1
  12940. 8005b98: 2b01 cmp r3, #1
  12941. 8005b9a: d00d beq.n 8005bb8 <ADC_Enable+0xe8>
  12942. {
  12943. /* Update ADC state machine to error */
  12944. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  12945. 8005b9c: 687b ldr r3, [r7, #4]
  12946. 8005b9e: 6d5b ldr r3, [r3, #84] @ 0x54
  12947. 8005ba0: f043 0210 orr.w r2, r3, #16
  12948. 8005ba4: 687b ldr r3, [r7, #4]
  12949. 8005ba6: 655a str r2, [r3, #84] @ 0x54
  12950. /* Set ADC error code to ADC peripheral internal error */
  12951. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  12952. 8005ba8: 687b ldr r3, [r7, #4]
  12953. 8005baa: 6d9b ldr r3, [r3, #88] @ 0x58
  12954. 8005bac: f043 0201 orr.w r2, r3, #1
  12955. 8005bb0: 687b ldr r3, [r7, #4]
  12956. 8005bb2: 659a str r2, [r3, #88] @ 0x58
  12957. return HAL_ERROR;
  12958. 8005bb4: 2301 movs r3, #1
  12959. 8005bb6: e007 b.n 8005bc8 <ADC_Enable+0xf8>
  12960. while (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == 0UL)
  12961. 8005bb8: 687b ldr r3, [r7, #4]
  12962. 8005bba: 681b ldr r3, [r3, #0]
  12963. 8005bbc: 681b ldr r3, [r3, #0]
  12964. 8005bbe: f003 0301 and.w r3, r3, #1
  12965. 8005bc2: 2b01 cmp r3, #1
  12966. 8005bc4: d1cf bne.n 8005b66 <ADC_Enable+0x96>
  12967. }
  12968. }
  12969. }
  12970. /* Return HAL status */
  12971. return HAL_OK;
  12972. 8005bc6: 2300 movs r3, #0
  12973. }
  12974. 8005bc8: 4618 mov r0, r3
  12975. 8005bca: 3710 adds r7, #16
  12976. 8005bcc: 46bd mov sp, r7
  12977. 8005bce: bd80 pop {r7, pc}
  12978. 8005bd0: 8000003f .word 0x8000003f
  12979. 8005bd4: 40022000 .word 0x40022000
  12980. 8005bd8: 40022100 .word 0x40022100
  12981. 8005bdc: 40022300 .word 0x40022300
  12982. 8005be0: 58026300 .word 0x58026300
  12983. 08005be4 <ADC_Disable>:
  12984. * stopped.
  12985. * @param hadc ADC handle
  12986. * @retval HAL status.
  12987. */
  12988. HAL_StatusTypeDef ADC_Disable(ADC_HandleTypeDef *hadc)
  12989. {
  12990. 8005be4: b580 push {r7, lr}
  12991. 8005be6: b084 sub sp, #16
  12992. 8005be8: af00 add r7, sp, #0
  12993. 8005bea: 6078 str r0, [r7, #4]
  12994. uint32_t tickstart;
  12995. const uint32_t tmp_adc_is_disable_on_going = LL_ADC_IsDisableOngoing(hadc->Instance);
  12996. 8005bec: 687b ldr r3, [r7, #4]
  12997. 8005bee: 681b ldr r3, [r3, #0]
  12998. 8005bf0: 4618 mov r0, r3
  12999. 8005bf2: f7ff f94a bl 8004e8a <LL_ADC_IsDisableOngoing>
  13000. 8005bf6: 60f8 str r0, [r7, #12]
  13001. /* Verification if ADC is not already disabled: */
  13002. /* Note: forbidden to disable ADC (set bit ADC_CR_ADDIS) if ADC is already */
  13003. /* disabled. */
  13004. if ((LL_ADC_IsEnabled(hadc->Instance) != 0UL)
  13005. 8005bf8: 687b ldr r3, [r7, #4]
  13006. 8005bfa: 681b ldr r3, [r3, #0]
  13007. 8005bfc: 4618 mov r0, r3
  13008. 8005bfe: f7ff f931 bl 8004e64 <LL_ADC_IsEnabled>
  13009. 8005c02: 4603 mov r3, r0
  13010. 8005c04: 2b00 cmp r3, #0
  13011. 8005c06: d047 beq.n 8005c98 <ADC_Disable+0xb4>
  13012. && (tmp_adc_is_disable_on_going == 0UL)
  13013. 8005c08: 68fb ldr r3, [r7, #12]
  13014. 8005c0a: 2b00 cmp r3, #0
  13015. 8005c0c: d144 bne.n 8005c98 <ADC_Disable+0xb4>
  13016. )
  13017. {
  13018. /* Check if conditions to disable the ADC are fulfilled */
  13019. if ((hadc->Instance->CR & (ADC_CR_JADSTART | ADC_CR_ADSTART | ADC_CR_ADEN)) == ADC_CR_ADEN)
  13020. 8005c0e: 687b ldr r3, [r7, #4]
  13021. 8005c10: 681b ldr r3, [r3, #0]
  13022. 8005c12: 689b ldr r3, [r3, #8]
  13023. 8005c14: f003 030d and.w r3, r3, #13
  13024. 8005c18: 2b01 cmp r3, #1
  13025. 8005c1a: d10c bne.n 8005c36 <ADC_Disable+0x52>
  13026. {
  13027. /* Disable the ADC peripheral */
  13028. LL_ADC_Disable(hadc->Instance);
  13029. 8005c1c: 687b ldr r3, [r7, #4]
  13030. 8005c1e: 681b ldr r3, [r3, #0]
  13031. 8005c20: 4618 mov r0, r3
  13032. 8005c22: f7ff f90b bl 8004e3c <LL_ADC_Disable>
  13033. __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOSMP | ADC_FLAG_RDY));
  13034. 8005c26: 687b ldr r3, [r7, #4]
  13035. 8005c28: 681b ldr r3, [r3, #0]
  13036. 8005c2a: 2203 movs r2, #3
  13037. 8005c2c: 601a str r2, [r3, #0]
  13038. return HAL_ERROR;
  13039. }
  13040. /* Wait for ADC effectively disabled */
  13041. /* Get tick count */
  13042. tickstart = HAL_GetTick();
  13043. 8005c2e: f7fe ff19 bl 8004a64 <HAL_GetTick>
  13044. 8005c32: 60b8 str r0, [r7, #8]
  13045. while ((hadc->Instance->CR & ADC_CR_ADEN) != 0UL)
  13046. 8005c34: e029 b.n 8005c8a <ADC_Disable+0xa6>
  13047. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  13048. 8005c36: 687b ldr r3, [r7, #4]
  13049. 8005c38: 6d5b ldr r3, [r3, #84] @ 0x54
  13050. 8005c3a: f043 0210 orr.w r2, r3, #16
  13051. 8005c3e: 687b ldr r3, [r7, #4]
  13052. 8005c40: 655a str r2, [r3, #84] @ 0x54
  13053. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  13054. 8005c42: 687b ldr r3, [r7, #4]
  13055. 8005c44: 6d9b ldr r3, [r3, #88] @ 0x58
  13056. 8005c46: f043 0201 orr.w r2, r3, #1
  13057. 8005c4a: 687b ldr r3, [r7, #4]
  13058. 8005c4c: 659a str r2, [r3, #88] @ 0x58
  13059. return HAL_ERROR;
  13060. 8005c4e: 2301 movs r3, #1
  13061. 8005c50: e023 b.n 8005c9a <ADC_Disable+0xb6>
  13062. {
  13063. if ((HAL_GetTick() - tickstart) > ADC_DISABLE_TIMEOUT)
  13064. 8005c52: f7fe ff07 bl 8004a64 <HAL_GetTick>
  13065. 8005c56: 4602 mov r2, r0
  13066. 8005c58: 68bb ldr r3, [r7, #8]
  13067. 8005c5a: 1ad3 subs r3, r2, r3
  13068. 8005c5c: 2b02 cmp r3, #2
  13069. 8005c5e: d914 bls.n 8005c8a <ADC_Disable+0xa6>
  13070. {
  13071. /* New check to avoid false timeout detection in case of preemption */
  13072. if ((hadc->Instance->CR & ADC_CR_ADEN) != 0UL)
  13073. 8005c60: 687b ldr r3, [r7, #4]
  13074. 8005c62: 681b ldr r3, [r3, #0]
  13075. 8005c64: 689b ldr r3, [r3, #8]
  13076. 8005c66: f003 0301 and.w r3, r3, #1
  13077. 8005c6a: 2b00 cmp r3, #0
  13078. 8005c6c: d00d beq.n 8005c8a <ADC_Disable+0xa6>
  13079. {
  13080. /* Update ADC state machine to error */
  13081. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  13082. 8005c6e: 687b ldr r3, [r7, #4]
  13083. 8005c70: 6d5b ldr r3, [r3, #84] @ 0x54
  13084. 8005c72: f043 0210 orr.w r2, r3, #16
  13085. 8005c76: 687b ldr r3, [r7, #4]
  13086. 8005c78: 655a str r2, [r3, #84] @ 0x54
  13087. /* Set ADC error code to ADC peripheral internal error */
  13088. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  13089. 8005c7a: 687b ldr r3, [r7, #4]
  13090. 8005c7c: 6d9b ldr r3, [r3, #88] @ 0x58
  13091. 8005c7e: f043 0201 orr.w r2, r3, #1
  13092. 8005c82: 687b ldr r3, [r7, #4]
  13093. 8005c84: 659a str r2, [r3, #88] @ 0x58
  13094. return HAL_ERROR;
  13095. 8005c86: 2301 movs r3, #1
  13096. 8005c88: e007 b.n 8005c9a <ADC_Disable+0xb6>
  13097. while ((hadc->Instance->CR & ADC_CR_ADEN) != 0UL)
  13098. 8005c8a: 687b ldr r3, [r7, #4]
  13099. 8005c8c: 681b ldr r3, [r3, #0]
  13100. 8005c8e: 689b ldr r3, [r3, #8]
  13101. 8005c90: f003 0301 and.w r3, r3, #1
  13102. 8005c94: 2b00 cmp r3, #0
  13103. 8005c96: d1dc bne.n 8005c52 <ADC_Disable+0x6e>
  13104. }
  13105. }
  13106. }
  13107. /* Return HAL status */
  13108. return HAL_OK;
  13109. 8005c98: 2300 movs r3, #0
  13110. }
  13111. 8005c9a: 4618 mov r0, r3
  13112. 8005c9c: 3710 adds r7, #16
  13113. 8005c9e: 46bd mov sp, r7
  13114. 8005ca0: bd80 pop {r7, pc}
  13115. 08005ca2 <ADC_DMAConvCplt>:
  13116. * @brief DMA transfer complete callback.
  13117. * @param hdma pointer to DMA handle.
  13118. * @retval None
  13119. */
  13120. void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma)
  13121. {
  13122. 8005ca2: b580 push {r7, lr}
  13123. 8005ca4: b084 sub sp, #16
  13124. 8005ca6: af00 add r7, sp, #0
  13125. 8005ca8: 6078 str r0, [r7, #4]
  13126. /* Retrieve ADC handle corresponding to current DMA handle */
  13127. ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
  13128. 8005caa: 687b ldr r3, [r7, #4]
  13129. 8005cac: 6b9b ldr r3, [r3, #56] @ 0x38
  13130. 8005cae: 60fb str r3, [r7, #12]
  13131. /* Update state machine on conversion status if not in error state */
  13132. if ((hadc->State & (HAL_ADC_STATE_ERROR_INTERNAL | HAL_ADC_STATE_ERROR_DMA)) == 0UL)
  13133. 8005cb0: 68fb ldr r3, [r7, #12]
  13134. 8005cb2: 6d5b ldr r3, [r3, #84] @ 0x54
  13135. 8005cb4: f003 0350 and.w r3, r3, #80 @ 0x50
  13136. 8005cb8: 2b00 cmp r3, #0
  13137. 8005cba: d14b bne.n 8005d54 <ADC_DMAConvCplt+0xb2>
  13138. {
  13139. /* Set ADC state */
  13140. SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);
  13141. 8005cbc: 68fb ldr r3, [r7, #12]
  13142. 8005cbe: 6d5b ldr r3, [r3, #84] @ 0x54
  13143. 8005cc0: f443 7200 orr.w r2, r3, #512 @ 0x200
  13144. 8005cc4: 68fb ldr r3, [r7, #12]
  13145. 8005cc6: 655a str r2, [r3, #84] @ 0x54
  13146. /* Determine whether any further conversion upcoming on group regular */
  13147. /* by external trigger, continuous mode or scan sequence on going */
  13148. /* to disable interruption. */
  13149. /* Is it the end of the regular sequence ? */
  13150. if ((hadc->Instance->ISR & ADC_FLAG_EOS) != 0UL)
  13151. 8005cc8: 68fb ldr r3, [r7, #12]
  13152. 8005cca: 681b ldr r3, [r3, #0]
  13153. 8005ccc: 681b ldr r3, [r3, #0]
  13154. 8005cce: f003 0308 and.w r3, r3, #8
  13155. 8005cd2: 2b00 cmp r3, #0
  13156. 8005cd4: d021 beq.n 8005d1a <ADC_DMAConvCplt+0x78>
  13157. {
  13158. /* Are conversions software-triggered ? */
  13159. if (LL_ADC_REG_IsTriggerSourceSWStart(hadc->Instance) != 0UL)
  13160. 8005cd6: 68fb ldr r3, [r7, #12]
  13161. 8005cd8: 681b ldr r3, [r3, #0]
  13162. 8005cda: 4618 mov r0, r3
  13163. 8005cdc: f7fe ff9c bl 8004c18 <LL_ADC_REG_IsTriggerSourceSWStart>
  13164. 8005ce0: 4603 mov r3, r0
  13165. 8005ce2: 2b00 cmp r3, #0
  13166. 8005ce4: d032 beq.n 8005d4c <ADC_DMAConvCplt+0xaa>
  13167. {
  13168. /* Is CONT bit set ? */
  13169. if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_CONT) == 0UL)
  13170. 8005ce6: 68fb ldr r3, [r7, #12]
  13171. 8005ce8: 681b ldr r3, [r3, #0]
  13172. 8005cea: 68db ldr r3, [r3, #12]
  13173. 8005cec: f403 5300 and.w r3, r3, #8192 @ 0x2000
  13174. 8005cf0: 2b00 cmp r3, #0
  13175. 8005cf2: d12b bne.n 8005d4c <ADC_DMAConvCplt+0xaa>
  13176. {
  13177. /* CONT bit is not set, no more conversions expected */
  13178. CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
  13179. 8005cf4: 68fb ldr r3, [r7, #12]
  13180. 8005cf6: 6d5b ldr r3, [r3, #84] @ 0x54
  13181. 8005cf8: f423 7280 bic.w r2, r3, #256 @ 0x100
  13182. 8005cfc: 68fb ldr r3, [r7, #12]
  13183. 8005cfe: 655a str r2, [r3, #84] @ 0x54
  13184. if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) == 0UL)
  13185. 8005d00: 68fb ldr r3, [r7, #12]
  13186. 8005d02: 6d5b ldr r3, [r3, #84] @ 0x54
  13187. 8005d04: f403 5380 and.w r3, r3, #4096 @ 0x1000
  13188. 8005d08: 2b00 cmp r3, #0
  13189. 8005d0a: d11f bne.n 8005d4c <ADC_DMAConvCplt+0xaa>
  13190. {
  13191. SET_BIT(hadc->State, HAL_ADC_STATE_READY);
  13192. 8005d0c: 68fb ldr r3, [r7, #12]
  13193. 8005d0e: 6d5b ldr r3, [r3, #84] @ 0x54
  13194. 8005d10: f043 0201 orr.w r2, r3, #1
  13195. 8005d14: 68fb ldr r3, [r7, #12]
  13196. 8005d16: 655a str r2, [r3, #84] @ 0x54
  13197. 8005d18: e018 b.n 8005d4c <ADC_DMAConvCplt+0xaa>
  13198. }
  13199. else
  13200. {
  13201. /* DMA End of Transfer interrupt was triggered but conversions sequence
  13202. is not over. If DMACFG is set to 0, conversions are stopped. */
  13203. if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_DMNGT) == 0UL)
  13204. 8005d1a: 68fb ldr r3, [r7, #12]
  13205. 8005d1c: 681b ldr r3, [r3, #0]
  13206. 8005d1e: 68db ldr r3, [r3, #12]
  13207. 8005d20: f003 0303 and.w r3, r3, #3
  13208. 8005d24: 2b00 cmp r3, #0
  13209. 8005d26: d111 bne.n 8005d4c <ADC_DMAConvCplt+0xaa>
  13210. {
  13211. /* DMACFG bit is not set, conversions are stopped. */
  13212. CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
  13213. 8005d28: 68fb ldr r3, [r7, #12]
  13214. 8005d2a: 6d5b ldr r3, [r3, #84] @ 0x54
  13215. 8005d2c: f423 7280 bic.w r2, r3, #256 @ 0x100
  13216. 8005d30: 68fb ldr r3, [r7, #12]
  13217. 8005d32: 655a str r2, [r3, #84] @ 0x54
  13218. if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) == 0UL)
  13219. 8005d34: 68fb ldr r3, [r7, #12]
  13220. 8005d36: 6d5b ldr r3, [r3, #84] @ 0x54
  13221. 8005d38: f403 5380 and.w r3, r3, #4096 @ 0x1000
  13222. 8005d3c: 2b00 cmp r3, #0
  13223. 8005d3e: d105 bne.n 8005d4c <ADC_DMAConvCplt+0xaa>
  13224. {
  13225. SET_BIT(hadc->State, HAL_ADC_STATE_READY);
  13226. 8005d40: 68fb ldr r3, [r7, #12]
  13227. 8005d42: 6d5b ldr r3, [r3, #84] @ 0x54
  13228. 8005d44: f043 0201 orr.w r2, r3, #1
  13229. 8005d48: 68fb ldr r3, [r7, #12]
  13230. 8005d4a: 655a str r2, [r3, #84] @ 0x54
  13231. /* Conversion complete callback */
  13232. #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
  13233. hadc->ConvCpltCallback(hadc);
  13234. #else
  13235. HAL_ADC_ConvCpltCallback(hadc);
  13236. 8005d4c: 68f8 ldr r0, [r7, #12]
  13237. 8005d4e: f7fb fc27 bl 80015a0 <HAL_ADC_ConvCpltCallback>
  13238. {
  13239. /* Call ADC DMA error callback */
  13240. hadc->DMA_Handle->XferErrorCallback(hdma);
  13241. }
  13242. }
  13243. }
  13244. 8005d52: e00e b.n 8005d72 <ADC_DMAConvCplt+0xd0>
  13245. if ((hadc->State & HAL_ADC_STATE_ERROR_INTERNAL) != 0UL)
  13246. 8005d54: 68fb ldr r3, [r7, #12]
  13247. 8005d56: 6d5b ldr r3, [r3, #84] @ 0x54
  13248. 8005d58: f003 0310 and.w r3, r3, #16
  13249. 8005d5c: 2b00 cmp r3, #0
  13250. 8005d5e: d003 beq.n 8005d68 <ADC_DMAConvCplt+0xc6>
  13251. HAL_ADC_ErrorCallback(hadc);
  13252. 8005d60: 68f8 ldr r0, [r7, #12]
  13253. 8005d62: f7ff fb4f bl 8005404 <HAL_ADC_ErrorCallback>
  13254. }
  13255. 8005d66: e004 b.n 8005d72 <ADC_DMAConvCplt+0xd0>
  13256. hadc->DMA_Handle->XferErrorCallback(hdma);
  13257. 8005d68: 68fb ldr r3, [r7, #12]
  13258. 8005d6a: 6cdb ldr r3, [r3, #76] @ 0x4c
  13259. 8005d6c: 6cdb ldr r3, [r3, #76] @ 0x4c
  13260. 8005d6e: 6878 ldr r0, [r7, #4]
  13261. 8005d70: 4798 blx r3
  13262. }
  13263. 8005d72: bf00 nop
  13264. 8005d74: 3710 adds r7, #16
  13265. 8005d76: 46bd mov sp, r7
  13266. 8005d78: bd80 pop {r7, pc}
  13267. 08005d7a <ADC_DMAHalfConvCplt>:
  13268. * @brief DMA half transfer complete callback.
  13269. * @param hdma pointer to DMA handle.
  13270. * @retval None
  13271. */
  13272. void ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma)
  13273. {
  13274. 8005d7a: b580 push {r7, lr}
  13275. 8005d7c: b084 sub sp, #16
  13276. 8005d7e: af00 add r7, sp, #0
  13277. 8005d80: 6078 str r0, [r7, #4]
  13278. /* Retrieve ADC handle corresponding to current DMA handle */
  13279. ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
  13280. 8005d82: 687b ldr r3, [r7, #4]
  13281. 8005d84: 6b9b ldr r3, [r3, #56] @ 0x38
  13282. 8005d86: 60fb str r3, [r7, #12]
  13283. /* Half conversion callback */
  13284. #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
  13285. hadc->ConvHalfCpltCallback(hadc);
  13286. #else
  13287. HAL_ADC_ConvHalfCpltCallback(hadc);
  13288. 8005d88: 68f8 ldr r0, [r7, #12]
  13289. 8005d8a: f7ff fb31 bl 80053f0 <HAL_ADC_ConvHalfCpltCallback>
  13290. #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */
  13291. }
  13292. 8005d8e: bf00 nop
  13293. 8005d90: 3710 adds r7, #16
  13294. 8005d92: 46bd mov sp, r7
  13295. 8005d94: bd80 pop {r7, pc}
  13296. 08005d96 <ADC_DMAError>:
  13297. * @brief DMA error callback.
  13298. * @param hdma pointer to DMA handle.
  13299. * @retval None
  13300. */
  13301. void ADC_DMAError(DMA_HandleTypeDef *hdma)
  13302. {
  13303. 8005d96: b580 push {r7, lr}
  13304. 8005d98: b084 sub sp, #16
  13305. 8005d9a: af00 add r7, sp, #0
  13306. 8005d9c: 6078 str r0, [r7, #4]
  13307. /* Retrieve ADC handle corresponding to current DMA handle */
  13308. ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
  13309. 8005d9e: 687b ldr r3, [r7, #4]
  13310. 8005da0: 6b9b ldr r3, [r3, #56] @ 0x38
  13311. 8005da2: 60fb str r3, [r7, #12]
  13312. /* Set ADC state */
  13313. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA);
  13314. 8005da4: 68fb ldr r3, [r7, #12]
  13315. 8005da6: 6d5b ldr r3, [r3, #84] @ 0x54
  13316. 8005da8: f043 0240 orr.w r2, r3, #64 @ 0x40
  13317. 8005dac: 68fb ldr r3, [r7, #12]
  13318. 8005dae: 655a str r2, [r3, #84] @ 0x54
  13319. /* Set ADC error code to DMA error */
  13320. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_DMA);
  13321. 8005db0: 68fb ldr r3, [r7, #12]
  13322. 8005db2: 6d9b ldr r3, [r3, #88] @ 0x58
  13323. 8005db4: f043 0204 orr.w r2, r3, #4
  13324. 8005db8: 68fb ldr r3, [r7, #12]
  13325. 8005dba: 659a str r2, [r3, #88] @ 0x58
  13326. /* Error callback */
  13327. #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
  13328. hadc->ErrorCallback(hadc);
  13329. #else
  13330. HAL_ADC_ErrorCallback(hadc);
  13331. 8005dbc: 68f8 ldr r0, [r7, #12]
  13332. 8005dbe: f7ff fb21 bl 8005404 <HAL_ADC_ErrorCallback>
  13333. #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */
  13334. }
  13335. 8005dc2: bf00 nop
  13336. 8005dc4: 3710 adds r7, #16
  13337. 8005dc6: 46bd mov sp, r7
  13338. 8005dc8: bd80 pop {r7, pc}
  13339. ...
  13340. 08005dcc <ADC_ConfigureBoostMode>:
  13341. * stopped.
  13342. * @param hadc ADC handle
  13343. * @retval None.
  13344. */
  13345. void ADC_ConfigureBoostMode(ADC_HandleTypeDef *hadc)
  13346. {
  13347. 8005dcc: b580 push {r7, lr}
  13348. 8005dce: b084 sub sp, #16
  13349. 8005dd0: af00 add r7, sp, #0
  13350. 8005dd2: 6078 str r0, [r7, #4]
  13351. uint32_t freq;
  13352. if (ADC_IS_SYNCHRONOUS_CLOCK_MODE(hadc))
  13353. 8005dd4: 687b ldr r3, [r7, #4]
  13354. 8005dd6: 681b ldr r3, [r3, #0]
  13355. 8005dd8: 4a7a ldr r2, [pc, #488] @ (8005fc4 <ADC_ConfigureBoostMode+0x1f8>)
  13356. 8005dda: 4293 cmp r3, r2
  13357. 8005ddc: d004 beq.n 8005de8 <ADC_ConfigureBoostMode+0x1c>
  13358. 8005dde: 687b ldr r3, [r7, #4]
  13359. 8005de0: 681b ldr r3, [r3, #0]
  13360. 8005de2: 4a79 ldr r2, [pc, #484] @ (8005fc8 <ADC_ConfigureBoostMode+0x1fc>)
  13361. 8005de4: 4293 cmp r3, r2
  13362. 8005de6: d109 bne.n 8005dfc <ADC_ConfigureBoostMode+0x30>
  13363. 8005de8: 4b78 ldr r3, [pc, #480] @ (8005fcc <ADC_ConfigureBoostMode+0x200>)
  13364. 8005dea: 689b ldr r3, [r3, #8]
  13365. 8005dec: f403 3340 and.w r3, r3, #196608 @ 0x30000
  13366. 8005df0: 2b00 cmp r3, #0
  13367. 8005df2: bf14 ite ne
  13368. 8005df4: 2301 movne r3, #1
  13369. 8005df6: 2300 moveq r3, #0
  13370. 8005df8: b2db uxtb r3, r3
  13371. 8005dfa: e008 b.n 8005e0e <ADC_ConfigureBoostMode+0x42>
  13372. 8005dfc: 4b74 ldr r3, [pc, #464] @ (8005fd0 <ADC_ConfigureBoostMode+0x204>)
  13373. 8005dfe: 689b ldr r3, [r3, #8]
  13374. 8005e00: f403 3340 and.w r3, r3, #196608 @ 0x30000
  13375. 8005e04: 2b00 cmp r3, #0
  13376. 8005e06: bf14 ite ne
  13377. 8005e08: 2301 movne r3, #1
  13378. 8005e0a: 2300 moveq r3, #0
  13379. 8005e0c: b2db uxtb r3, r3
  13380. 8005e0e: 2b00 cmp r3, #0
  13381. 8005e10: d01c beq.n 8005e4c <ADC_ConfigureBoostMode+0x80>
  13382. {
  13383. freq = HAL_RCC_GetHCLKFreq();
  13384. 8005e12: f005 f957 bl 800b0c4 <HAL_RCC_GetHCLKFreq>
  13385. 8005e16: 60f8 str r0, [r7, #12]
  13386. switch (hadc->Init.ClockPrescaler)
  13387. 8005e18: 687b ldr r3, [r7, #4]
  13388. 8005e1a: 685b ldr r3, [r3, #4]
  13389. 8005e1c: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  13390. 8005e20: d010 beq.n 8005e44 <ADC_ConfigureBoostMode+0x78>
  13391. 8005e22: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  13392. 8005e26: d873 bhi.n 8005f10 <ADC_ConfigureBoostMode+0x144>
  13393. 8005e28: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  13394. 8005e2c: d002 beq.n 8005e34 <ADC_ConfigureBoostMode+0x68>
  13395. 8005e2e: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  13396. 8005e32: d16d bne.n 8005f10 <ADC_ConfigureBoostMode+0x144>
  13397. {
  13398. case ADC_CLOCK_SYNC_PCLK_DIV1:
  13399. case ADC_CLOCK_SYNC_PCLK_DIV2:
  13400. freq /= (hadc->Init.ClockPrescaler >> ADC_CCR_CKMODE_Pos);
  13401. 8005e34: 687b ldr r3, [r7, #4]
  13402. 8005e36: 685b ldr r3, [r3, #4]
  13403. 8005e38: 0c1b lsrs r3, r3, #16
  13404. 8005e3a: 68fa ldr r2, [r7, #12]
  13405. 8005e3c: fbb2 f3f3 udiv r3, r2, r3
  13406. 8005e40: 60fb str r3, [r7, #12]
  13407. break;
  13408. 8005e42: e068 b.n 8005f16 <ADC_ConfigureBoostMode+0x14a>
  13409. case ADC_CLOCK_SYNC_PCLK_DIV4:
  13410. freq /= 4UL;
  13411. 8005e44: 68fb ldr r3, [r7, #12]
  13412. 8005e46: 089b lsrs r3, r3, #2
  13413. 8005e48: 60fb str r3, [r7, #12]
  13414. break;
  13415. 8005e4a: e064 b.n 8005f16 <ADC_ConfigureBoostMode+0x14a>
  13416. break;
  13417. }
  13418. }
  13419. else
  13420. {
  13421. freq = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC);
  13422. 8005e4c: f44f 2000 mov.w r0, #524288 @ 0x80000
  13423. 8005e50: f04f 0100 mov.w r1, #0
  13424. 8005e54: f006 fbc2 bl 800c5dc <HAL_RCCEx_GetPeriphCLKFreq>
  13425. 8005e58: 60f8 str r0, [r7, #12]
  13426. switch (hadc->Init.ClockPrescaler)
  13427. 8005e5a: 687b ldr r3, [r7, #4]
  13428. 8005e5c: 685b ldr r3, [r3, #4]
  13429. 8005e5e: f5b3 1f30 cmp.w r3, #2883584 @ 0x2c0000
  13430. 8005e62: d051 beq.n 8005f08 <ADC_ConfigureBoostMode+0x13c>
  13431. 8005e64: f5b3 1f30 cmp.w r3, #2883584 @ 0x2c0000
  13432. 8005e68: d854 bhi.n 8005f14 <ADC_ConfigureBoostMode+0x148>
  13433. 8005e6a: f5b3 1f20 cmp.w r3, #2621440 @ 0x280000
  13434. 8005e6e: d047 beq.n 8005f00 <ADC_ConfigureBoostMode+0x134>
  13435. 8005e70: f5b3 1f20 cmp.w r3, #2621440 @ 0x280000
  13436. 8005e74: d84e bhi.n 8005f14 <ADC_ConfigureBoostMode+0x148>
  13437. 8005e76: f5b3 1f10 cmp.w r3, #2359296 @ 0x240000
  13438. 8005e7a: d03d beq.n 8005ef8 <ADC_ConfigureBoostMode+0x12c>
  13439. 8005e7c: f5b3 1f10 cmp.w r3, #2359296 @ 0x240000
  13440. 8005e80: d848 bhi.n 8005f14 <ADC_ConfigureBoostMode+0x148>
  13441. 8005e82: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  13442. 8005e86: d033 beq.n 8005ef0 <ADC_ConfigureBoostMode+0x124>
  13443. 8005e88: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  13444. 8005e8c: d842 bhi.n 8005f14 <ADC_ConfigureBoostMode+0x148>
  13445. 8005e8e: f5b3 1fe0 cmp.w r3, #1835008 @ 0x1c0000
  13446. 8005e92: d029 beq.n 8005ee8 <ADC_ConfigureBoostMode+0x11c>
  13447. 8005e94: f5b3 1fe0 cmp.w r3, #1835008 @ 0x1c0000
  13448. 8005e98: d83c bhi.n 8005f14 <ADC_ConfigureBoostMode+0x148>
  13449. 8005e9a: f5b3 1fc0 cmp.w r3, #1572864 @ 0x180000
  13450. 8005e9e: d01a beq.n 8005ed6 <ADC_ConfigureBoostMode+0x10a>
  13451. 8005ea0: f5b3 1fc0 cmp.w r3, #1572864 @ 0x180000
  13452. 8005ea4: d836 bhi.n 8005f14 <ADC_ConfigureBoostMode+0x148>
  13453. 8005ea6: f5b3 1fa0 cmp.w r3, #1310720 @ 0x140000
  13454. 8005eaa: d014 beq.n 8005ed6 <ADC_ConfigureBoostMode+0x10a>
  13455. 8005eac: f5b3 1fa0 cmp.w r3, #1310720 @ 0x140000
  13456. 8005eb0: d830 bhi.n 8005f14 <ADC_ConfigureBoostMode+0x148>
  13457. 8005eb2: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  13458. 8005eb6: d00e beq.n 8005ed6 <ADC_ConfigureBoostMode+0x10a>
  13459. 8005eb8: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  13460. 8005ebc: d82a bhi.n 8005f14 <ADC_ConfigureBoostMode+0x148>
  13461. 8005ebe: f5b3 2f40 cmp.w r3, #786432 @ 0xc0000
  13462. 8005ec2: d008 beq.n 8005ed6 <ADC_ConfigureBoostMode+0x10a>
  13463. 8005ec4: f5b3 2f40 cmp.w r3, #786432 @ 0xc0000
  13464. 8005ec8: d824 bhi.n 8005f14 <ADC_ConfigureBoostMode+0x148>
  13465. 8005eca: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  13466. 8005ece: d002 beq.n 8005ed6 <ADC_ConfigureBoostMode+0x10a>
  13467. 8005ed0: f5b3 2f00 cmp.w r3, #524288 @ 0x80000
  13468. 8005ed4: d11e bne.n 8005f14 <ADC_ConfigureBoostMode+0x148>
  13469. case ADC_CLOCK_ASYNC_DIV4:
  13470. case ADC_CLOCK_ASYNC_DIV6:
  13471. case ADC_CLOCK_ASYNC_DIV8:
  13472. case ADC_CLOCK_ASYNC_DIV10:
  13473. case ADC_CLOCK_ASYNC_DIV12:
  13474. freq /= ((hadc->Init.ClockPrescaler >> ADC_CCR_PRESC_Pos) << 1UL);
  13475. 8005ed6: 687b ldr r3, [r7, #4]
  13476. 8005ed8: 685b ldr r3, [r3, #4]
  13477. 8005eda: 0c9b lsrs r3, r3, #18
  13478. 8005edc: 005b lsls r3, r3, #1
  13479. 8005ede: 68fa ldr r2, [r7, #12]
  13480. 8005ee0: fbb2 f3f3 udiv r3, r2, r3
  13481. 8005ee4: 60fb str r3, [r7, #12]
  13482. break;
  13483. 8005ee6: e016 b.n 8005f16 <ADC_ConfigureBoostMode+0x14a>
  13484. case ADC_CLOCK_ASYNC_DIV16:
  13485. freq /= 16UL;
  13486. 8005ee8: 68fb ldr r3, [r7, #12]
  13487. 8005eea: 091b lsrs r3, r3, #4
  13488. 8005eec: 60fb str r3, [r7, #12]
  13489. break;
  13490. 8005eee: e012 b.n 8005f16 <ADC_ConfigureBoostMode+0x14a>
  13491. case ADC_CLOCK_ASYNC_DIV32:
  13492. freq /= 32UL;
  13493. 8005ef0: 68fb ldr r3, [r7, #12]
  13494. 8005ef2: 095b lsrs r3, r3, #5
  13495. 8005ef4: 60fb str r3, [r7, #12]
  13496. break;
  13497. 8005ef6: e00e b.n 8005f16 <ADC_ConfigureBoostMode+0x14a>
  13498. case ADC_CLOCK_ASYNC_DIV64:
  13499. freq /= 64UL;
  13500. 8005ef8: 68fb ldr r3, [r7, #12]
  13501. 8005efa: 099b lsrs r3, r3, #6
  13502. 8005efc: 60fb str r3, [r7, #12]
  13503. break;
  13504. 8005efe: e00a b.n 8005f16 <ADC_ConfigureBoostMode+0x14a>
  13505. case ADC_CLOCK_ASYNC_DIV128:
  13506. freq /= 128UL;
  13507. 8005f00: 68fb ldr r3, [r7, #12]
  13508. 8005f02: 09db lsrs r3, r3, #7
  13509. 8005f04: 60fb str r3, [r7, #12]
  13510. break;
  13511. 8005f06: e006 b.n 8005f16 <ADC_ConfigureBoostMode+0x14a>
  13512. case ADC_CLOCK_ASYNC_DIV256:
  13513. freq /= 256UL;
  13514. 8005f08: 68fb ldr r3, [r7, #12]
  13515. 8005f0a: 0a1b lsrs r3, r3, #8
  13516. 8005f0c: 60fb str r3, [r7, #12]
  13517. break;
  13518. 8005f0e: e002 b.n 8005f16 <ADC_ConfigureBoostMode+0x14a>
  13519. break;
  13520. 8005f10: bf00 nop
  13521. 8005f12: e000 b.n 8005f16 <ADC_ConfigureBoostMode+0x14a>
  13522. default:
  13523. break;
  13524. 8005f14: bf00 nop
  13525. else /* if(freq > 25000000UL) */
  13526. {
  13527. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1 | ADC_CR_BOOST_0);
  13528. }
  13529. #else
  13530. if (HAL_GetREVID() <= REV_ID_Y) /* STM32H7 silicon Rev.Y */
  13531. 8005f16: f7fe fdb1 bl 8004a7c <HAL_GetREVID>
  13532. 8005f1a: 4603 mov r3, r0
  13533. 8005f1c: f241 0203 movw r2, #4099 @ 0x1003
  13534. 8005f20: 4293 cmp r3, r2
  13535. 8005f22: d815 bhi.n 8005f50 <ADC_ConfigureBoostMode+0x184>
  13536. {
  13537. if (freq > 20000000UL)
  13538. 8005f24: 68fb ldr r3, [r7, #12]
  13539. 8005f26: 4a2b ldr r2, [pc, #172] @ (8005fd4 <ADC_ConfigureBoostMode+0x208>)
  13540. 8005f28: 4293 cmp r3, r2
  13541. 8005f2a: d908 bls.n 8005f3e <ADC_ConfigureBoostMode+0x172>
  13542. {
  13543. SET_BIT(hadc->Instance->CR, ADC_CR_BOOST_0);
  13544. 8005f2c: 687b ldr r3, [r7, #4]
  13545. 8005f2e: 681b ldr r3, [r3, #0]
  13546. 8005f30: 689a ldr r2, [r3, #8]
  13547. 8005f32: 687b ldr r3, [r7, #4]
  13548. 8005f34: 681b ldr r3, [r3, #0]
  13549. 8005f36: f442 7280 orr.w r2, r2, #256 @ 0x100
  13550. 8005f3a: 609a str r2, [r3, #8]
  13551. {
  13552. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1 | ADC_CR_BOOST_0);
  13553. }
  13554. }
  13555. #endif /* ADC_VER_V5_3 */
  13556. }
  13557. 8005f3c: e03e b.n 8005fbc <ADC_ConfigureBoostMode+0x1f0>
  13558. CLEAR_BIT(hadc->Instance->CR, ADC_CR_BOOST_0);
  13559. 8005f3e: 687b ldr r3, [r7, #4]
  13560. 8005f40: 681b ldr r3, [r3, #0]
  13561. 8005f42: 689a ldr r2, [r3, #8]
  13562. 8005f44: 687b ldr r3, [r7, #4]
  13563. 8005f46: 681b ldr r3, [r3, #0]
  13564. 8005f48: f422 7280 bic.w r2, r2, #256 @ 0x100
  13565. 8005f4c: 609a str r2, [r3, #8]
  13566. }
  13567. 8005f4e: e035 b.n 8005fbc <ADC_ConfigureBoostMode+0x1f0>
  13568. freq /= 2U; /* divider by 2 for Rev.V */
  13569. 8005f50: 68fb ldr r3, [r7, #12]
  13570. 8005f52: 085b lsrs r3, r3, #1
  13571. 8005f54: 60fb str r3, [r7, #12]
  13572. if (freq <= 6250000UL)
  13573. 8005f56: 68fb ldr r3, [r7, #12]
  13574. 8005f58: 4a1f ldr r2, [pc, #124] @ (8005fd8 <ADC_ConfigureBoostMode+0x20c>)
  13575. 8005f5a: 4293 cmp r3, r2
  13576. 8005f5c: d808 bhi.n 8005f70 <ADC_ConfigureBoostMode+0x1a4>
  13577. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, 0UL);
  13578. 8005f5e: 687b ldr r3, [r7, #4]
  13579. 8005f60: 681b ldr r3, [r3, #0]
  13580. 8005f62: 689a ldr r2, [r3, #8]
  13581. 8005f64: 687b ldr r3, [r7, #4]
  13582. 8005f66: 681b ldr r3, [r3, #0]
  13583. 8005f68: f422 7240 bic.w r2, r2, #768 @ 0x300
  13584. 8005f6c: 609a str r2, [r3, #8]
  13585. }
  13586. 8005f6e: e025 b.n 8005fbc <ADC_ConfigureBoostMode+0x1f0>
  13587. else if (freq <= 12500000UL)
  13588. 8005f70: 68fb ldr r3, [r7, #12]
  13589. 8005f72: 4a1a ldr r2, [pc, #104] @ (8005fdc <ADC_ConfigureBoostMode+0x210>)
  13590. 8005f74: 4293 cmp r3, r2
  13591. 8005f76: d80a bhi.n 8005f8e <ADC_ConfigureBoostMode+0x1c2>
  13592. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_0);
  13593. 8005f78: 687b ldr r3, [r7, #4]
  13594. 8005f7a: 681b ldr r3, [r3, #0]
  13595. 8005f7c: 689b ldr r3, [r3, #8]
  13596. 8005f7e: f423 7240 bic.w r2, r3, #768 @ 0x300
  13597. 8005f82: 687b ldr r3, [r7, #4]
  13598. 8005f84: 681b ldr r3, [r3, #0]
  13599. 8005f86: f442 7280 orr.w r2, r2, #256 @ 0x100
  13600. 8005f8a: 609a str r2, [r3, #8]
  13601. }
  13602. 8005f8c: e016 b.n 8005fbc <ADC_ConfigureBoostMode+0x1f0>
  13603. else if (freq <= 25000000UL)
  13604. 8005f8e: 68fb ldr r3, [r7, #12]
  13605. 8005f90: 4a13 ldr r2, [pc, #76] @ (8005fe0 <ADC_ConfigureBoostMode+0x214>)
  13606. 8005f92: 4293 cmp r3, r2
  13607. 8005f94: d80a bhi.n 8005fac <ADC_ConfigureBoostMode+0x1e0>
  13608. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1);
  13609. 8005f96: 687b ldr r3, [r7, #4]
  13610. 8005f98: 681b ldr r3, [r3, #0]
  13611. 8005f9a: 689b ldr r3, [r3, #8]
  13612. 8005f9c: f423 7240 bic.w r2, r3, #768 @ 0x300
  13613. 8005fa0: 687b ldr r3, [r7, #4]
  13614. 8005fa2: 681b ldr r3, [r3, #0]
  13615. 8005fa4: f442 7200 orr.w r2, r2, #512 @ 0x200
  13616. 8005fa8: 609a str r2, [r3, #8]
  13617. }
  13618. 8005faa: e007 b.n 8005fbc <ADC_ConfigureBoostMode+0x1f0>
  13619. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1 | ADC_CR_BOOST_0);
  13620. 8005fac: 687b ldr r3, [r7, #4]
  13621. 8005fae: 681b ldr r3, [r3, #0]
  13622. 8005fb0: 689a ldr r2, [r3, #8]
  13623. 8005fb2: 687b ldr r3, [r7, #4]
  13624. 8005fb4: 681b ldr r3, [r3, #0]
  13625. 8005fb6: f442 7240 orr.w r2, r2, #768 @ 0x300
  13626. 8005fba: 609a str r2, [r3, #8]
  13627. }
  13628. 8005fbc: bf00 nop
  13629. 8005fbe: 3710 adds r7, #16
  13630. 8005fc0: 46bd mov sp, r7
  13631. 8005fc2: bd80 pop {r7, pc}
  13632. 8005fc4: 40022000 .word 0x40022000
  13633. 8005fc8: 40022100 .word 0x40022100
  13634. 8005fcc: 40022300 .word 0x40022300
  13635. 8005fd0: 58026300 .word 0x58026300
  13636. 8005fd4: 01312d00 .word 0x01312d00
  13637. 8005fd8: 005f5e10 .word 0x005f5e10
  13638. 8005fdc: 00bebc20 .word 0x00bebc20
  13639. 8005fe0: 017d7840 .word 0x017d7840
  13640. 08005fe4 <LL_ADC_IsEnabled>:
  13641. {
  13642. 8005fe4: b480 push {r7}
  13643. 8005fe6: b083 sub sp, #12
  13644. 8005fe8: af00 add r7, sp, #0
  13645. 8005fea: 6078 str r0, [r7, #4]
  13646. return ((READ_BIT(ADCx->CR, ADC_CR_ADEN) == (ADC_CR_ADEN)) ? 1UL : 0UL);
  13647. 8005fec: 687b ldr r3, [r7, #4]
  13648. 8005fee: 689b ldr r3, [r3, #8]
  13649. 8005ff0: f003 0301 and.w r3, r3, #1
  13650. 8005ff4: 2b01 cmp r3, #1
  13651. 8005ff6: d101 bne.n 8005ffc <LL_ADC_IsEnabled+0x18>
  13652. 8005ff8: 2301 movs r3, #1
  13653. 8005ffa: e000 b.n 8005ffe <LL_ADC_IsEnabled+0x1a>
  13654. 8005ffc: 2300 movs r3, #0
  13655. }
  13656. 8005ffe: 4618 mov r0, r3
  13657. 8006000: 370c adds r7, #12
  13658. 8006002: 46bd mov sp, r7
  13659. 8006004: f85d 7b04 ldr.w r7, [sp], #4
  13660. 8006008: 4770 bx lr
  13661. ...
  13662. 0800600c <LL_ADC_StartCalibration>:
  13663. {
  13664. 800600c: b480 push {r7}
  13665. 800600e: b085 sub sp, #20
  13666. 8006010: af00 add r7, sp, #0
  13667. 8006012: 60f8 str r0, [r7, #12]
  13668. 8006014: 60b9 str r1, [r7, #8]
  13669. 8006016: 607a str r2, [r7, #4]
  13670. MODIFY_REG(ADCx->CR,
  13671. 8006018: 68fb ldr r3, [r7, #12]
  13672. 800601a: 689a ldr r2, [r3, #8]
  13673. 800601c: 4b09 ldr r3, [pc, #36] @ (8006044 <LL_ADC_StartCalibration+0x38>)
  13674. 800601e: 4013 ands r3, r2
  13675. 8006020: 68ba ldr r2, [r7, #8]
  13676. 8006022: f402 3180 and.w r1, r2, #65536 @ 0x10000
  13677. 8006026: 687a ldr r2, [r7, #4]
  13678. 8006028: f002 4280 and.w r2, r2, #1073741824 @ 0x40000000
  13679. 800602c: 430a orrs r2, r1
  13680. 800602e: 4313 orrs r3, r2
  13681. 8006030: f043 4200 orr.w r2, r3, #2147483648 @ 0x80000000
  13682. 8006034: 68fb ldr r3, [r7, #12]
  13683. 8006036: 609a str r2, [r3, #8]
  13684. }
  13685. 8006038: bf00 nop
  13686. 800603a: 3714 adds r7, #20
  13687. 800603c: 46bd mov sp, r7
  13688. 800603e: f85d 7b04 ldr.w r7, [sp], #4
  13689. 8006042: 4770 bx lr
  13690. 8006044: 3ffeffc0 .word 0x3ffeffc0
  13691. 08006048 <LL_ADC_IsCalibrationOnGoing>:
  13692. {
  13693. 8006048: b480 push {r7}
  13694. 800604a: b083 sub sp, #12
  13695. 800604c: af00 add r7, sp, #0
  13696. 800604e: 6078 str r0, [r7, #4]
  13697. return ((READ_BIT(ADCx->CR, ADC_CR_ADCAL) == (ADC_CR_ADCAL)) ? 1UL : 0UL);
  13698. 8006050: 687b ldr r3, [r7, #4]
  13699. 8006052: 689b ldr r3, [r3, #8]
  13700. 8006054: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000
  13701. 8006058: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000
  13702. 800605c: d101 bne.n 8006062 <LL_ADC_IsCalibrationOnGoing+0x1a>
  13703. 800605e: 2301 movs r3, #1
  13704. 8006060: e000 b.n 8006064 <LL_ADC_IsCalibrationOnGoing+0x1c>
  13705. 8006062: 2300 movs r3, #0
  13706. }
  13707. 8006064: 4618 mov r0, r3
  13708. 8006066: 370c adds r7, #12
  13709. 8006068: 46bd mov sp, r7
  13710. 800606a: f85d 7b04 ldr.w r7, [sp], #4
  13711. 800606e: 4770 bx lr
  13712. 08006070 <LL_ADC_REG_IsConversionOngoing>:
  13713. {
  13714. 8006070: b480 push {r7}
  13715. 8006072: b083 sub sp, #12
  13716. 8006074: af00 add r7, sp, #0
  13717. 8006076: 6078 str r0, [r7, #4]
  13718. return ((READ_BIT(ADCx->CR, ADC_CR_ADSTART) == (ADC_CR_ADSTART)) ? 1UL : 0UL);
  13719. 8006078: 687b ldr r3, [r7, #4]
  13720. 800607a: 689b ldr r3, [r3, #8]
  13721. 800607c: f003 0304 and.w r3, r3, #4
  13722. 8006080: 2b04 cmp r3, #4
  13723. 8006082: d101 bne.n 8006088 <LL_ADC_REG_IsConversionOngoing+0x18>
  13724. 8006084: 2301 movs r3, #1
  13725. 8006086: e000 b.n 800608a <LL_ADC_REG_IsConversionOngoing+0x1a>
  13726. 8006088: 2300 movs r3, #0
  13727. }
  13728. 800608a: 4618 mov r0, r3
  13729. 800608c: 370c adds r7, #12
  13730. 800608e: 46bd mov sp, r7
  13731. 8006090: f85d 7b04 ldr.w r7, [sp], #4
  13732. 8006094: 4770 bx lr
  13733. ...
  13734. 08006098 <HAL_ADCEx_Calibration_Start>:
  13735. * @arg @ref ADC_SINGLE_ENDED Channel in mode input single ended
  13736. * @arg @ref ADC_DIFFERENTIAL_ENDED Channel in mode input differential ended
  13737. * @retval HAL status
  13738. */
  13739. HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc, uint32_t CalibrationMode, uint32_t SingleDiff)
  13740. {
  13741. 8006098: b580 push {r7, lr}
  13742. 800609a: b086 sub sp, #24
  13743. 800609c: af00 add r7, sp, #0
  13744. 800609e: 60f8 str r0, [r7, #12]
  13745. 80060a0: 60b9 str r1, [r7, #8]
  13746. 80060a2: 607a str r2, [r7, #4]
  13747. HAL_StatusTypeDef tmp_hal_status;
  13748. __IO uint32_t wait_loop_index = 0UL;
  13749. 80060a4: 2300 movs r3, #0
  13750. 80060a6: 613b str r3, [r7, #16]
  13751. /* Check the parameters */
  13752. assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
  13753. assert_param(IS_ADC_SINGLE_DIFFERENTIAL(SingleDiff));
  13754. /* Process locked */
  13755. __HAL_LOCK(hadc);
  13756. 80060a8: 68fb ldr r3, [r7, #12]
  13757. 80060aa: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  13758. 80060ae: 2b01 cmp r3, #1
  13759. 80060b0: d101 bne.n 80060b6 <HAL_ADCEx_Calibration_Start+0x1e>
  13760. 80060b2: 2302 movs r3, #2
  13761. 80060b4: e04c b.n 8006150 <HAL_ADCEx_Calibration_Start+0xb8>
  13762. 80060b6: 68fb ldr r3, [r7, #12]
  13763. 80060b8: 2201 movs r2, #1
  13764. 80060ba: f883 2050 strb.w r2, [r3, #80] @ 0x50
  13765. /* Calibration prerequisite: ADC must be disabled. */
  13766. /* Disable the ADC (if not already disabled) */
  13767. tmp_hal_status = ADC_Disable(hadc);
  13768. 80060be: 68f8 ldr r0, [r7, #12]
  13769. 80060c0: f7ff fd90 bl 8005be4 <ADC_Disable>
  13770. 80060c4: 4603 mov r3, r0
  13771. 80060c6: 75fb strb r3, [r7, #23]
  13772. /* Check if ADC is effectively disabled */
  13773. if (tmp_hal_status == HAL_OK)
  13774. 80060c8: 7dfb ldrb r3, [r7, #23]
  13775. 80060ca: 2b00 cmp r3, #0
  13776. 80060cc: d135 bne.n 800613a <HAL_ADCEx_Calibration_Start+0xa2>
  13777. {
  13778. /* Set ADC state */
  13779. ADC_STATE_CLR_SET(hadc->State,
  13780. 80060ce: 68fb ldr r3, [r7, #12]
  13781. 80060d0: 6d5a ldr r2, [r3, #84] @ 0x54
  13782. 80060d2: 4b21 ldr r3, [pc, #132] @ (8006158 <HAL_ADCEx_Calibration_Start+0xc0>)
  13783. 80060d4: 4013 ands r3, r2
  13784. 80060d6: f043 0202 orr.w r2, r3, #2
  13785. 80060da: 68fb ldr r3, [r7, #12]
  13786. 80060dc: 655a str r2, [r3, #84] @ 0x54
  13787. HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY,
  13788. HAL_ADC_STATE_BUSY_INTERNAL);
  13789. /* Start ADC calibration in mode single-ended or differential */
  13790. LL_ADC_StartCalibration(hadc->Instance, CalibrationMode, SingleDiff);
  13791. 80060de: 68fb ldr r3, [r7, #12]
  13792. 80060e0: 681b ldr r3, [r3, #0]
  13793. 80060e2: 687a ldr r2, [r7, #4]
  13794. 80060e4: 68b9 ldr r1, [r7, #8]
  13795. 80060e6: 4618 mov r0, r3
  13796. 80060e8: f7ff ff90 bl 800600c <LL_ADC_StartCalibration>
  13797. /* Wait for calibration completion */
  13798. while (LL_ADC_IsCalibrationOnGoing(hadc->Instance) != 0UL)
  13799. 80060ec: e014 b.n 8006118 <HAL_ADCEx_Calibration_Start+0x80>
  13800. {
  13801. wait_loop_index++;
  13802. 80060ee: 693b ldr r3, [r7, #16]
  13803. 80060f0: 3301 adds r3, #1
  13804. 80060f2: 613b str r3, [r7, #16]
  13805. if (wait_loop_index >= ADC_CALIBRATION_TIMEOUT)
  13806. 80060f4: 693b ldr r3, [r7, #16]
  13807. 80060f6: 4a19 ldr r2, [pc, #100] @ (800615c <HAL_ADCEx_Calibration_Start+0xc4>)
  13808. 80060f8: 4293 cmp r3, r2
  13809. 80060fa: d30d bcc.n 8006118 <HAL_ADCEx_Calibration_Start+0x80>
  13810. {
  13811. /* Update ADC state machine to error */
  13812. ADC_STATE_CLR_SET(hadc->State,
  13813. 80060fc: 68fb ldr r3, [r7, #12]
  13814. 80060fe: 6d5b ldr r3, [r3, #84] @ 0x54
  13815. 8006100: f023 0312 bic.w r3, r3, #18
  13816. 8006104: f043 0210 orr.w r2, r3, #16
  13817. 8006108: 68fb ldr r3, [r7, #12]
  13818. 800610a: 655a str r2, [r3, #84] @ 0x54
  13819. HAL_ADC_STATE_BUSY_INTERNAL,
  13820. HAL_ADC_STATE_ERROR_INTERNAL);
  13821. /* Process unlocked */
  13822. __HAL_UNLOCK(hadc);
  13823. 800610c: 68fb ldr r3, [r7, #12]
  13824. 800610e: 2200 movs r2, #0
  13825. 8006110: f883 2050 strb.w r2, [r3, #80] @ 0x50
  13826. return HAL_ERROR;
  13827. 8006114: 2301 movs r3, #1
  13828. 8006116: e01b b.n 8006150 <HAL_ADCEx_Calibration_Start+0xb8>
  13829. while (LL_ADC_IsCalibrationOnGoing(hadc->Instance) != 0UL)
  13830. 8006118: 68fb ldr r3, [r7, #12]
  13831. 800611a: 681b ldr r3, [r3, #0]
  13832. 800611c: 4618 mov r0, r3
  13833. 800611e: f7ff ff93 bl 8006048 <LL_ADC_IsCalibrationOnGoing>
  13834. 8006122: 4603 mov r3, r0
  13835. 8006124: 2b00 cmp r3, #0
  13836. 8006126: d1e2 bne.n 80060ee <HAL_ADCEx_Calibration_Start+0x56>
  13837. }
  13838. }
  13839. /* Set ADC state */
  13840. ADC_STATE_CLR_SET(hadc->State,
  13841. 8006128: 68fb ldr r3, [r7, #12]
  13842. 800612a: 6d5b ldr r3, [r3, #84] @ 0x54
  13843. 800612c: f023 0303 bic.w r3, r3, #3
  13844. 8006130: f043 0201 orr.w r2, r3, #1
  13845. 8006134: 68fb ldr r3, [r7, #12]
  13846. 8006136: 655a str r2, [r3, #84] @ 0x54
  13847. 8006138: e005 b.n 8006146 <HAL_ADCEx_Calibration_Start+0xae>
  13848. HAL_ADC_STATE_BUSY_INTERNAL,
  13849. HAL_ADC_STATE_READY);
  13850. }
  13851. else
  13852. {
  13853. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  13854. 800613a: 68fb ldr r3, [r7, #12]
  13855. 800613c: 6d5b ldr r3, [r3, #84] @ 0x54
  13856. 800613e: f043 0210 orr.w r2, r3, #16
  13857. 8006142: 68fb ldr r3, [r7, #12]
  13858. 8006144: 655a str r2, [r3, #84] @ 0x54
  13859. /* Note: No need to update variable "tmp_hal_status" here: already set */
  13860. /* to state "HAL_ERROR" by function disabling the ADC. */
  13861. }
  13862. /* Process unlocked */
  13863. __HAL_UNLOCK(hadc);
  13864. 8006146: 68fb ldr r3, [r7, #12]
  13865. 8006148: 2200 movs r2, #0
  13866. 800614a: f883 2050 strb.w r2, [r3, #80] @ 0x50
  13867. /* Return function status */
  13868. return tmp_hal_status;
  13869. 800614e: 7dfb ldrb r3, [r7, #23]
  13870. }
  13871. 8006150: 4618 mov r0, r3
  13872. 8006152: 3718 adds r7, #24
  13873. 8006154: 46bd mov sp, r7
  13874. 8006156: bd80 pop {r7, pc}
  13875. 8006158: ffffeefd .word 0xffffeefd
  13876. 800615c: 25c3f800 .word 0x25c3f800
  13877. 08006160 <HAL_ADCEx_MultiModeConfigChannel>:
  13878. * @param hadc Master ADC handle
  13879. * @param multimode Structure of ADC multimode configuration
  13880. * @retval HAL status
  13881. */
  13882. HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode)
  13883. {
  13884. 8006160: b590 push {r4, r7, lr}
  13885. 8006162: b09f sub sp, #124 @ 0x7c
  13886. 8006164: af00 add r7, sp, #0
  13887. 8006166: 6078 str r0, [r7, #4]
  13888. 8006168: 6039 str r1, [r7, #0]
  13889. HAL_StatusTypeDef tmp_hal_status = HAL_OK;
  13890. 800616a: 2300 movs r3, #0
  13891. 800616c: f887 3077 strb.w r3, [r7, #119] @ 0x77
  13892. assert_param(IS_ADC_DUAL_DATA_MODE(multimode->DualModeData));
  13893. assert_param(IS_ADC_SAMPLING_DELAY(multimode->TwoSamplingDelay));
  13894. }
  13895. /* Process locked */
  13896. __HAL_LOCK(hadc);
  13897. 8006170: 687b ldr r3, [r7, #4]
  13898. 8006172: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  13899. 8006176: 2b01 cmp r3, #1
  13900. 8006178: d101 bne.n 800617e <HAL_ADCEx_MultiModeConfigChannel+0x1e>
  13901. 800617a: 2302 movs r3, #2
  13902. 800617c: e0be b.n 80062fc <HAL_ADCEx_MultiModeConfigChannel+0x19c>
  13903. 800617e: 687b ldr r3, [r7, #4]
  13904. 8006180: 2201 movs r2, #1
  13905. 8006182: f883 2050 strb.w r2, [r3, #80] @ 0x50
  13906. tmphadcSlave.State = HAL_ADC_STATE_RESET;
  13907. 8006186: 2300 movs r3, #0
  13908. 8006188: 65fb str r3, [r7, #92] @ 0x5c
  13909. tmphadcSlave.ErrorCode = HAL_ADC_ERROR_NONE;
  13910. 800618a: 2300 movs r3, #0
  13911. 800618c: 663b str r3, [r7, #96] @ 0x60
  13912. ADC_MULTI_SLAVE(hadc, &tmphadcSlave);
  13913. 800618e: 687b ldr r3, [r7, #4]
  13914. 8006190: 681b ldr r3, [r3, #0]
  13915. 8006192: 4a5c ldr r2, [pc, #368] @ (8006304 <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  13916. 8006194: 4293 cmp r3, r2
  13917. 8006196: d102 bne.n 800619e <HAL_ADCEx_MultiModeConfigChannel+0x3e>
  13918. 8006198: 4b5b ldr r3, [pc, #364] @ (8006308 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  13919. 800619a: 60bb str r3, [r7, #8]
  13920. 800619c: e001 b.n 80061a2 <HAL_ADCEx_MultiModeConfigChannel+0x42>
  13921. 800619e: 2300 movs r3, #0
  13922. 80061a0: 60bb str r3, [r7, #8]
  13923. if (tmphadcSlave.Instance == NULL)
  13924. 80061a2: 68bb ldr r3, [r7, #8]
  13925. 80061a4: 2b00 cmp r3, #0
  13926. 80061a6: d10b bne.n 80061c0 <HAL_ADCEx_MultiModeConfigChannel+0x60>
  13927. {
  13928. /* Update ADC state machine to error */
  13929. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  13930. 80061a8: 687b ldr r3, [r7, #4]
  13931. 80061aa: 6d5b ldr r3, [r3, #84] @ 0x54
  13932. 80061ac: f043 0220 orr.w r2, r3, #32
  13933. 80061b0: 687b ldr r3, [r7, #4]
  13934. 80061b2: 655a str r2, [r3, #84] @ 0x54
  13935. /* Process unlocked */
  13936. __HAL_UNLOCK(hadc);
  13937. 80061b4: 687b ldr r3, [r7, #4]
  13938. 80061b6: 2200 movs r2, #0
  13939. 80061b8: f883 2050 strb.w r2, [r3, #80] @ 0x50
  13940. return HAL_ERROR;
  13941. 80061bc: 2301 movs r3, #1
  13942. 80061be: e09d b.n 80062fc <HAL_ADCEx_MultiModeConfigChannel+0x19c>
  13943. /* Parameters update conditioned to ADC state: */
  13944. /* Parameters that can be updated when ADC is disabled or enabled without */
  13945. /* conversion on going on regular group: */
  13946. /* - Multimode DATA Format configuration */
  13947. tmphadcSlave_conversion_on_going = LL_ADC_REG_IsConversionOngoing((&tmphadcSlave)->Instance);
  13948. 80061c0: 68bb ldr r3, [r7, #8]
  13949. 80061c2: 4618 mov r0, r3
  13950. 80061c4: f7ff ff54 bl 8006070 <LL_ADC_REG_IsConversionOngoing>
  13951. 80061c8: 6738 str r0, [r7, #112] @ 0x70
  13952. if ((LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
  13953. 80061ca: 687b ldr r3, [r7, #4]
  13954. 80061cc: 681b ldr r3, [r3, #0]
  13955. 80061ce: 4618 mov r0, r3
  13956. 80061d0: f7ff ff4e bl 8006070 <LL_ADC_REG_IsConversionOngoing>
  13957. 80061d4: 4603 mov r3, r0
  13958. 80061d6: 2b00 cmp r3, #0
  13959. 80061d8: d17f bne.n 80062da <HAL_ADCEx_MultiModeConfigChannel+0x17a>
  13960. && (tmphadcSlave_conversion_on_going == 0UL))
  13961. 80061da: 6f3b ldr r3, [r7, #112] @ 0x70
  13962. 80061dc: 2b00 cmp r3, #0
  13963. 80061de: d17c bne.n 80062da <HAL_ADCEx_MultiModeConfigChannel+0x17a>
  13964. {
  13965. /* Pointer to the common control register */
  13966. tmpADC_Common = __LL_ADC_COMMON_INSTANCE(hadc->Instance);
  13967. 80061e0: 687b ldr r3, [r7, #4]
  13968. 80061e2: 681b ldr r3, [r3, #0]
  13969. 80061e4: 4a47 ldr r2, [pc, #284] @ (8006304 <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  13970. 80061e6: 4293 cmp r3, r2
  13971. 80061e8: d004 beq.n 80061f4 <HAL_ADCEx_MultiModeConfigChannel+0x94>
  13972. 80061ea: 687b ldr r3, [r7, #4]
  13973. 80061ec: 681b ldr r3, [r3, #0]
  13974. 80061ee: 4a46 ldr r2, [pc, #280] @ (8006308 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  13975. 80061f0: 4293 cmp r3, r2
  13976. 80061f2: d101 bne.n 80061f8 <HAL_ADCEx_MultiModeConfigChannel+0x98>
  13977. 80061f4: 4b45 ldr r3, [pc, #276] @ (800630c <HAL_ADCEx_MultiModeConfigChannel+0x1ac>)
  13978. 80061f6: e000 b.n 80061fa <HAL_ADCEx_MultiModeConfigChannel+0x9a>
  13979. 80061f8: 4b45 ldr r3, [pc, #276] @ (8006310 <HAL_ADCEx_MultiModeConfigChannel+0x1b0>)
  13980. 80061fa: 66fb str r3, [r7, #108] @ 0x6c
  13981. /* If multimode is selected, configure all multimode parameters. */
  13982. /* Otherwise, reset multimode parameters (can be used in case of */
  13983. /* transition from multimode to independent mode). */
  13984. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  13985. 80061fc: 683b ldr r3, [r7, #0]
  13986. 80061fe: 681b ldr r3, [r3, #0]
  13987. 8006200: 2b00 cmp r3, #0
  13988. 8006202: d039 beq.n 8006278 <HAL_ADCEx_MultiModeConfigChannel+0x118>
  13989. {
  13990. MODIFY_REG(tmpADC_Common->CCR, ADC_CCR_DAMDF, multimode->DualModeData);
  13991. 8006204: 6efb ldr r3, [r7, #108] @ 0x6c
  13992. 8006206: 689b ldr r3, [r3, #8]
  13993. 8006208: f423 4240 bic.w r2, r3, #49152 @ 0xc000
  13994. 800620c: 683b ldr r3, [r7, #0]
  13995. 800620e: 685b ldr r3, [r3, #4]
  13996. 8006210: 431a orrs r2, r3
  13997. 8006212: 6efb ldr r3, [r7, #108] @ 0x6c
  13998. 8006214: 609a str r2, [r3, #8]
  13999. /* from 1 to 8 clock cycles for 12 bits */
  14000. /* from 1 to 6 clock cycles for 10 and 8 bits */
  14001. /* If a higher delay is selected, it will be clipped to maximum delay */
  14002. /* range */
  14003. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  14004. 8006216: 687b ldr r3, [r7, #4]
  14005. 8006218: 681b ldr r3, [r3, #0]
  14006. 800621a: 4a3a ldr r2, [pc, #232] @ (8006304 <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  14007. 800621c: 4293 cmp r3, r2
  14008. 800621e: d004 beq.n 800622a <HAL_ADCEx_MultiModeConfigChannel+0xca>
  14009. 8006220: 687b ldr r3, [r7, #4]
  14010. 8006222: 681b ldr r3, [r3, #0]
  14011. 8006224: 4a38 ldr r2, [pc, #224] @ (8006308 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  14012. 8006226: 4293 cmp r3, r2
  14013. 8006228: d10e bne.n 8006248 <HAL_ADCEx_MultiModeConfigChannel+0xe8>
  14014. 800622a: 4836 ldr r0, [pc, #216] @ (8006304 <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  14015. 800622c: f7ff feda bl 8005fe4 <LL_ADC_IsEnabled>
  14016. 8006230: 4604 mov r4, r0
  14017. 8006232: 4835 ldr r0, [pc, #212] @ (8006308 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  14018. 8006234: f7ff fed6 bl 8005fe4 <LL_ADC_IsEnabled>
  14019. 8006238: 4603 mov r3, r0
  14020. 800623a: 4323 orrs r3, r4
  14021. 800623c: 2b00 cmp r3, #0
  14022. 800623e: bf0c ite eq
  14023. 8006240: 2301 moveq r3, #1
  14024. 8006242: 2300 movne r3, #0
  14025. 8006244: b2db uxtb r3, r3
  14026. 8006246: e008 b.n 800625a <HAL_ADCEx_MultiModeConfigChannel+0xfa>
  14027. 8006248: 4832 ldr r0, [pc, #200] @ (8006314 <HAL_ADCEx_MultiModeConfigChannel+0x1b4>)
  14028. 800624a: f7ff fecb bl 8005fe4 <LL_ADC_IsEnabled>
  14029. 800624e: 4603 mov r3, r0
  14030. 8006250: 2b00 cmp r3, #0
  14031. 8006252: bf0c ite eq
  14032. 8006254: 2301 moveq r3, #1
  14033. 8006256: 2300 movne r3, #0
  14034. 8006258: b2db uxtb r3, r3
  14035. 800625a: 2b00 cmp r3, #0
  14036. 800625c: d047 beq.n 80062ee <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  14037. {
  14038. MODIFY_REG(tmpADC_Common->CCR,
  14039. 800625e: 6efb ldr r3, [r7, #108] @ 0x6c
  14040. 8006260: 689a ldr r2, [r3, #8]
  14041. 8006262: 4b2d ldr r3, [pc, #180] @ (8006318 <HAL_ADCEx_MultiModeConfigChannel+0x1b8>)
  14042. 8006264: 4013 ands r3, r2
  14043. 8006266: 683a ldr r2, [r7, #0]
  14044. 8006268: 6811 ldr r1, [r2, #0]
  14045. 800626a: 683a ldr r2, [r7, #0]
  14046. 800626c: 6892 ldr r2, [r2, #8]
  14047. 800626e: 430a orrs r2, r1
  14048. 8006270: 431a orrs r2, r3
  14049. 8006272: 6efb ldr r3, [r7, #108] @ 0x6c
  14050. 8006274: 609a str r2, [r3, #8]
  14051. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  14052. 8006276: e03a b.n 80062ee <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  14053. );
  14054. }
  14055. }
  14056. else /* ADC_MODE_INDEPENDENT */
  14057. {
  14058. CLEAR_BIT(tmpADC_Common->CCR, ADC_CCR_DAMDF);
  14059. 8006278: 6efb ldr r3, [r7, #108] @ 0x6c
  14060. 800627a: 689b ldr r3, [r3, #8]
  14061. 800627c: f423 4240 bic.w r2, r3, #49152 @ 0xc000
  14062. 8006280: 6efb ldr r3, [r7, #108] @ 0x6c
  14063. 8006282: 609a str r2, [r3, #8]
  14064. /* Parameters that can be updated only when ADC is disabled: */
  14065. /* - Multimode mode selection */
  14066. /* - Multimode delay */
  14067. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  14068. 8006284: 687b ldr r3, [r7, #4]
  14069. 8006286: 681b ldr r3, [r3, #0]
  14070. 8006288: 4a1e ldr r2, [pc, #120] @ (8006304 <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  14071. 800628a: 4293 cmp r3, r2
  14072. 800628c: d004 beq.n 8006298 <HAL_ADCEx_MultiModeConfigChannel+0x138>
  14073. 800628e: 687b ldr r3, [r7, #4]
  14074. 8006290: 681b ldr r3, [r3, #0]
  14075. 8006292: 4a1d ldr r2, [pc, #116] @ (8006308 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  14076. 8006294: 4293 cmp r3, r2
  14077. 8006296: d10e bne.n 80062b6 <HAL_ADCEx_MultiModeConfigChannel+0x156>
  14078. 8006298: 481a ldr r0, [pc, #104] @ (8006304 <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  14079. 800629a: f7ff fea3 bl 8005fe4 <LL_ADC_IsEnabled>
  14080. 800629e: 4604 mov r4, r0
  14081. 80062a0: 4819 ldr r0, [pc, #100] @ (8006308 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  14082. 80062a2: f7ff fe9f bl 8005fe4 <LL_ADC_IsEnabled>
  14083. 80062a6: 4603 mov r3, r0
  14084. 80062a8: 4323 orrs r3, r4
  14085. 80062aa: 2b00 cmp r3, #0
  14086. 80062ac: bf0c ite eq
  14087. 80062ae: 2301 moveq r3, #1
  14088. 80062b0: 2300 movne r3, #0
  14089. 80062b2: b2db uxtb r3, r3
  14090. 80062b4: e008 b.n 80062c8 <HAL_ADCEx_MultiModeConfigChannel+0x168>
  14091. 80062b6: 4817 ldr r0, [pc, #92] @ (8006314 <HAL_ADCEx_MultiModeConfigChannel+0x1b4>)
  14092. 80062b8: f7ff fe94 bl 8005fe4 <LL_ADC_IsEnabled>
  14093. 80062bc: 4603 mov r3, r0
  14094. 80062be: 2b00 cmp r3, #0
  14095. 80062c0: bf0c ite eq
  14096. 80062c2: 2301 moveq r3, #1
  14097. 80062c4: 2300 movne r3, #0
  14098. 80062c6: b2db uxtb r3, r3
  14099. 80062c8: 2b00 cmp r3, #0
  14100. 80062ca: d010 beq.n 80062ee <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  14101. {
  14102. CLEAR_BIT(tmpADC_Common->CCR, ADC_CCR_DUAL | ADC_CCR_DELAY);
  14103. 80062cc: 6efb ldr r3, [r7, #108] @ 0x6c
  14104. 80062ce: 689a ldr r2, [r3, #8]
  14105. 80062d0: 4b11 ldr r3, [pc, #68] @ (8006318 <HAL_ADCEx_MultiModeConfigChannel+0x1b8>)
  14106. 80062d2: 4013 ands r3, r2
  14107. 80062d4: 6efa ldr r2, [r7, #108] @ 0x6c
  14108. 80062d6: 6093 str r3, [r2, #8]
  14109. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  14110. 80062d8: e009 b.n 80062ee <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  14111. /* If one of the ADC sharing the same common group is enabled, no update */
  14112. /* could be done on neither of the multimode structure parameters. */
  14113. else
  14114. {
  14115. /* Update ADC state machine to error */
  14116. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  14117. 80062da: 687b ldr r3, [r7, #4]
  14118. 80062dc: 6d5b ldr r3, [r3, #84] @ 0x54
  14119. 80062de: f043 0220 orr.w r2, r3, #32
  14120. 80062e2: 687b ldr r3, [r7, #4]
  14121. 80062e4: 655a str r2, [r3, #84] @ 0x54
  14122. tmp_hal_status = HAL_ERROR;
  14123. 80062e6: 2301 movs r3, #1
  14124. 80062e8: f887 3077 strb.w r3, [r7, #119] @ 0x77
  14125. 80062ec: e000 b.n 80062f0 <HAL_ADCEx_MultiModeConfigChannel+0x190>
  14126. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  14127. 80062ee: bf00 nop
  14128. }
  14129. /* Process unlocked */
  14130. __HAL_UNLOCK(hadc);
  14131. 80062f0: 687b ldr r3, [r7, #4]
  14132. 80062f2: 2200 movs r2, #0
  14133. 80062f4: f883 2050 strb.w r2, [r3, #80] @ 0x50
  14134. /* Return function status */
  14135. return tmp_hal_status;
  14136. 80062f8: f897 3077 ldrb.w r3, [r7, #119] @ 0x77
  14137. }
  14138. 80062fc: 4618 mov r0, r3
  14139. 80062fe: 377c adds r7, #124 @ 0x7c
  14140. 8006300: 46bd mov sp, r7
  14141. 8006302: bd90 pop {r4, r7, pc}
  14142. 8006304: 40022000 .word 0x40022000
  14143. 8006308: 40022100 .word 0x40022100
  14144. 800630c: 40022300 .word 0x40022300
  14145. 8006310: 58026300 .word 0x58026300
  14146. 8006314: 58026000 .word 0x58026000
  14147. 8006318: fffff0e0 .word 0xfffff0e0
  14148. 0800631c <__NVIC_SetPriorityGrouping>:
  14149. {
  14150. 800631c: b480 push {r7}
  14151. 800631e: b085 sub sp, #20
  14152. 8006320: af00 add r7, sp, #0
  14153. 8006322: 6078 str r0, [r7, #4]
  14154. uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
  14155. 8006324: 687b ldr r3, [r7, #4]
  14156. 8006326: f003 0307 and.w r3, r3, #7
  14157. 800632a: 60fb str r3, [r7, #12]
  14158. reg_value = SCB->AIRCR; /* read old register configuration */
  14159. 800632c: 4b0b ldr r3, [pc, #44] @ (800635c <__NVIC_SetPriorityGrouping+0x40>)
  14160. 800632e: 68db ldr r3, [r3, #12]
  14161. 8006330: 60bb str r3, [r7, #8]
  14162. reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */
  14163. 8006332: 68ba ldr r2, [r7, #8]
  14164. 8006334: f64f 03ff movw r3, #63743 @ 0xf8ff
  14165. 8006338: 4013 ands r3, r2
  14166. 800633a: 60bb str r3, [r7, #8]
  14167. (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */
  14168. 800633c: 68fb ldr r3, [r7, #12]
  14169. 800633e: 021a lsls r2, r3, #8
  14170. ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
  14171. 8006340: 68bb ldr r3, [r7, #8]
  14172. 8006342: 431a orrs r2, r3
  14173. reg_value = (reg_value |
  14174. 8006344: 4b06 ldr r3, [pc, #24] @ (8006360 <__NVIC_SetPriorityGrouping+0x44>)
  14175. 8006346: 4313 orrs r3, r2
  14176. 8006348: 60bb str r3, [r7, #8]
  14177. SCB->AIRCR = reg_value;
  14178. 800634a: 4a04 ldr r2, [pc, #16] @ (800635c <__NVIC_SetPriorityGrouping+0x40>)
  14179. 800634c: 68bb ldr r3, [r7, #8]
  14180. 800634e: 60d3 str r3, [r2, #12]
  14181. }
  14182. 8006350: bf00 nop
  14183. 8006352: 3714 adds r7, #20
  14184. 8006354: 46bd mov sp, r7
  14185. 8006356: f85d 7b04 ldr.w r7, [sp], #4
  14186. 800635a: 4770 bx lr
  14187. 800635c: e000ed00 .word 0xe000ed00
  14188. 8006360: 05fa0000 .word 0x05fa0000
  14189. 08006364 <__NVIC_GetPriorityGrouping>:
  14190. {
  14191. 8006364: b480 push {r7}
  14192. 8006366: af00 add r7, sp, #0
  14193. return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));
  14194. 8006368: 4b04 ldr r3, [pc, #16] @ (800637c <__NVIC_GetPriorityGrouping+0x18>)
  14195. 800636a: 68db ldr r3, [r3, #12]
  14196. 800636c: 0a1b lsrs r3, r3, #8
  14197. 800636e: f003 0307 and.w r3, r3, #7
  14198. }
  14199. 8006372: 4618 mov r0, r3
  14200. 8006374: 46bd mov sp, r7
  14201. 8006376: f85d 7b04 ldr.w r7, [sp], #4
  14202. 800637a: 4770 bx lr
  14203. 800637c: e000ed00 .word 0xe000ed00
  14204. 08006380 <__NVIC_EnableIRQ>:
  14205. {
  14206. 8006380: b480 push {r7}
  14207. 8006382: b083 sub sp, #12
  14208. 8006384: af00 add r7, sp, #0
  14209. 8006386: 4603 mov r3, r0
  14210. 8006388: 80fb strh r3, [r7, #6]
  14211. if ((int32_t)(IRQn) >= 0)
  14212. 800638a: f9b7 3006 ldrsh.w r3, [r7, #6]
  14213. 800638e: 2b00 cmp r3, #0
  14214. 8006390: db0b blt.n 80063aa <__NVIC_EnableIRQ+0x2a>
  14215. NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
  14216. 8006392: 88fb ldrh r3, [r7, #6]
  14217. 8006394: f003 021f and.w r2, r3, #31
  14218. 8006398: 4907 ldr r1, [pc, #28] @ (80063b8 <__NVIC_EnableIRQ+0x38>)
  14219. 800639a: f9b7 3006 ldrsh.w r3, [r7, #6]
  14220. 800639e: 095b lsrs r3, r3, #5
  14221. 80063a0: 2001 movs r0, #1
  14222. 80063a2: fa00 f202 lsl.w r2, r0, r2
  14223. 80063a6: f841 2023 str.w r2, [r1, r3, lsl #2]
  14224. }
  14225. 80063aa: bf00 nop
  14226. 80063ac: 370c adds r7, #12
  14227. 80063ae: 46bd mov sp, r7
  14228. 80063b0: f85d 7b04 ldr.w r7, [sp], #4
  14229. 80063b4: 4770 bx lr
  14230. 80063b6: bf00 nop
  14231. 80063b8: e000e100 .word 0xe000e100
  14232. 080063bc <__NVIC_SetPriority>:
  14233. {
  14234. 80063bc: b480 push {r7}
  14235. 80063be: b083 sub sp, #12
  14236. 80063c0: af00 add r7, sp, #0
  14237. 80063c2: 4603 mov r3, r0
  14238. 80063c4: 6039 str r1, [r7, #0]
  14239. 80063c6: 80fb strh r3, [r7, #6]
  14240. if ((int32_t)(IRQn) >= 0)
  14241. 80063c8: f9b7 3006 ldrsh.w r3, [r7, #6]
  14242. 80063cc: 2b00 cmp r3, #0
  14243. 80063ce: db0a blt.n 80063e6 <__NVIC_SetPriority+0x2a>
  14244. NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  14245. 80063d0: 683b ldr r3, [r7, #0]
  14246. 80063d2: b2da uxtb r2, r3
  14247. 80063d4: 490c ldr r1, [pc, #48] @ (8006408 <__NVIC_SetPriority+0x4c>)
  14248. 80063d6: f9b7 3006 ldrsh.w r3, [r7, #6]
  14249. 80063da: 0112 lsls r2, r2, #4
  14250. 80063dc: b2d2 uxtb r2, r2
  14251. 80063de: 440b add r3, r1
  14252. 80063e0: f883 2300 strb.w r2, [r3, #768] @ 0x300
  14253. }
  14254. 80063e4: e00a b.n 80063fc <__NVIC_SetPriority+0x40>
  14255. SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  14256. 80063e6: 683b ldr r3, [r7, #0]
  14257. 80063e8: b2da uxtb r2, r3
  14258. 80063ea: 4908 ldr r1, [pc, #32] @ (800640c <__NVIC_SetPriority+0x50>)
  14259. 80063ec: 88fb ldrh r3, [r7, #6]
  14260. 80063ee: f003 030f and.w r3, r3, #15
  14261. 80063f2: 3b04 subs r3, #4
  14262. 80063f4: 0112 lsls r2, r2, #4
  14263. 80063f6: b2d2 uxtb r2, r2
  14264. 80063f8: 440b add r3, r1
  14265. 80063fa: 761a strb r2, [r3, #24]
  14266. }
  14267. 80063fc: bf00 nop
  14268. 80063fe: 370c adds r7, #12
  14269. 8006400: 46bd mov sp, r7
  14270. 8006402: f85d 7b04 ldr.w r7, [sp], #4
  14271. 8006406: 4770 bx lr
  14272. 8006408: e000e100 .word 0xe000e100
  14273. 800640c: e000ed00 .word 0xe000ed00
  14274. 08006410 <NVIC_EncodePriority>:
  14275. {
  14276. 8006410: b480 push {r7}
  14277. 8006412: b089 sub sp, #36 @ 0x24
  14278. 8006414: af00 add r7, sp, #0
  14279. 8006416: 60f8 str r0, [r7, #12]
  14280. 8006418: 60b9 str r1, [r7, #8]
  14281. 800641a: 607a str r2, [r7, #4]
  14282. uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
  14283. 800641c: 68fb ldr r3, [r7, #12]
  14284. 800641e: f003 0307 and.w r3, r3, #7
  14285. 8006422: 61fb str r3, [r7, #28]
  14286. PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
  14287. 8006424: 69fb ldr r3, [r7, #28]
  14288. 8006426: f1c3 0307 rsb r3, r3, #7
  14289. 800642a: 2b04 cmp r3, #4
  14290. 800642c: bf28 it cs
  14291. 800642e: 2304 movcs r3, #4
  14292. 8006430: 61bb str r3, [r7, #24]
  14293. SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
  14294. 8006432: 69fb ldr r3, [r7, #28]
  14295. 8006434: 3304 adds r3, #4
  14296. 8006436: 2b06 cmp r3, #6
  14297. 8006438: d902 bls.n 8006440 <NVIC_EncodePriority+0x30>
  14298. 800643a: 69fb ldr r3, [r7, #28]
  14299. 800643c: 3b03 subs r3, #3
  14300. 800643e: e000 b.n 8006442 <NVIC_EncodePriority+0x32>
  14301. 8006440: 2300 movs r3, #0
  14302. 8006442: 617b str r3, [r7, #20]
  14303. ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
  14304. 8006444: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  14305. 8006448: 69bb ldr r3, [r7, #24]
  14306. 800644a: fa02 f303 lsl.w r3, r2, r3
  14307. 800644e: 43da mvns r2, r3
  14308. 8006450: 68bb ldr r3, [r7, #8]
  14309. 8006452: 401a ands r2, r3
  14310. 8006454: 697b ldr r3, [r7, #20]
  14311. 8006456: 409a lsls r2, r3
  14312. ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL)))
  14313. 8006458: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  14314. 800645c: 697b ldr r3, [r7, #20]
  14315. 800645e: fa01 f303 lsl.w r3, r1, r3
  14316. 8006462: 43d9 mvns r1, r3
  14317. 8006464: 687b ldr r3, [r7, #4]
  14318. 8006466: 400b ands r3, r1
  14319. ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
  14320. 8006468: 4313 orrs r3, r2
  14321. }
  14322. 800646a: 4618 mov r0, r3
  14323. 800646c: 3724 adds r7, #36 @ 0x24
  14324. 800646e: 46bd mov sp, r7
  14325. 8006470: f85d 7b04 ldr.w r7, [sp], #4
  14326. 8006474: 4770 bx lr
  14327. 08006476 <HAL_NVIC_SetPriorityGrouping>:
  14328. * @note When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible.
  14329. * The pending IRQ priority will be managed only by the subpriority.
  14330. * @retval None
  14331. */
  14332. void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
  14333. {
  14334. 8006476: b580 push {r7, lr}
  14335. 8006478: b082 sub sp, #8
  14336. 800647a: af00 add r7, sp, #0
  14337. 800647c: 6078 str r0, [r7, #4]
  14338. /* Check the parameters */
  14339. assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));
  14340. /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */
  14341. NVIC_SetPriorityGrouping(PriorityGroup);
  14342. 800647e: 6878 ldr r0, [r7, #4]
  14343. 8006480: f7ff ff4c bl 800631c <__NVIC_SetPriorityGrouping>
  14344. }
  14345. 8006484: bf00 nop
  14346. 8006486: 3708 adds r7, #8
  14347. 8006488: 46bd mov sp, r7
  14348. 800648a: bd80 pop {r7, pc}
  14349. 0800648c <HAL_NVIC_SetPriority>:
  14350. * This parameter can be a value between 0 and 15
  14351. * A lower priority value indicates a higher priority.
  14352. * @retval None
  14353. */
  14354. void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
  14355. {
  14356. 800648c: b580 push {r7, lr}
  14357. 800648e: b086 sub sp, #24
  14358. 8006490: af00 add r7, sp, #0
  14359. 8006492: 4603 mov r3, r0
  14360. 8006494: 60b9 str r1, [r7, #8]
  14361. 8006496: 607a str r2, [r7, #4]
  14362. 8006498: 81fb strh r3, [r7, #14]
  14363. /* Check the parameters */
  14364. assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));
  14365. assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));
  14366. prioritygroup = NVIC_GetPriorityGrouping();
  14367. 800649a: f7ff ff63 bl 8006364 <__NVIC_GetPriorityGrouping>
  14368. 800649e: 6178 str r0, [r7, #20]
  14369. NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));
  14370. 80064a0: 687a ldr r2, [r7, #4]
  14371. 80064a2: 68b9 ldr r1, [r7, #8]
  14372. 80064a4: 6978 ldr r0, [r7, #20]
  14373. 80064a6: f7ff ffb3 bl 8006410 <NVIC_EncodePriority>
  14374. 80064aa: 4602 mov r2, r0
  14375. 80064ac: f9b7 300e ldrsh.w r3, [r7, #14]
  14376. 80064b0: 4611 mov r1, r2
  14377. 80064b2: 4618 mov r0, r3
  14378. 80064b4: f7ff ff82 bl 80063bc <__NVIC_SetPriority>
  14379. }
  14380. 80064b8: bf00 nop
  14381. 80064ba: 3718 adds r7, #24
  14382. 80064bc: 46bd mov sp, r7
  14383. 80064be: bd80 pop {r7, pc}
  14384. 080064c0 <HAL_NVIC_EnableIRQ>:
  14385. * This parameter can be an enumerator of IRQn_Type enumeration
  14386. * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32h7xxxx.h))
  14387. * @retval None
  14388. */
  14389. void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
  14390. {
  14391. 80064c0: b580 push {r7, lr}
  14392. 80064c2: b082 sub sp, #8
  14393. 80064c4: af00 add r7, sp, #0
  14394. 80064c6: 4603 mov r3, r0
  14395. 80064c8: 80fb strh r3, [r7, #6]
  14396. /* Check the parameters */
  14397. assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
  14398. /* Enable interrupt */
  14399. NVIC_EnableIRQ(IRQn);
  14400. 80064ca: f9b7 3006 ldrsh.w r3, [r7, #6]
  14401. 80064ce: 4618 mov r0, r3
  14402. 80064d0: f7ff ff56 bl 8006380 <__NVIC_EnableIRQ>
  14403. }
  14404. 80064d4: bf00 nop
  14405. 80064d6: 3708 adds r7, #8
  14406. 80064d8: 46bd mov sp, r7
  14407. 80064da: bd80 pop {r7, pc}
  14408. 080064dc <HAL_MPU_Disable>:
  14409. /**
  14410. * @brief Disables the MPU
  14411. * @retval None
  14412. */
  14413. void HAL_MPU_Disable(void)
  14414. {
  14415. 80064dc: b480 push {r7}
  14416. 80064de: af00 add r7, sp, #0
  14417. __ASM volatile ("dmb 0xF":::"memory");
  14418. 80064e0: f3bf 8f5f dmb sy
  14419. }
  14420. 80064e4: bf00 nop
  14421. /* Make sure outstanding transfers are done */
  14422. __DMB();
  14423. /* Disable fault exceptions */
  14424. SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
  14425. 80064e6: 4b07 ldr r3, [pc, #28] @ (8006504 <HAL_MPU_Disable+0x28>)
  14426. 80064e8: 6a5b ldr r3, [r3, #36] @ 0x24
  14427. 80064ea: 4a06 ldr r2, [pc, #24] @ (8006504 <HAL_MPU_Disable+0x28>)
  14428. 80064ec: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  14429. 80064f0: 6253 str r3, [r2, #36] @ 0x24
  14430. /* Disable the MPU and clear the control register*/
  14431. MPU->CTRL = 0;
  14432. 80064f2: 4b05 ldr r3, [pc, #20] @ (8006508 <HAL_MPU_Disable+0x2c>)
  14433. 80064f4: 2200 movs r2, #0
  14434. 80064f6: 605a str r2, [r3, #4]
  14435. }
  14436. 80064f8: bf00 nop
  14437. 80064fa: 46bd mov sp, r7
  14438. 80064fc: f85d 7b04 ldr.w r7, [sp], #4
  14439. 8006500: 4770 bx lr
  14440. 8006502: bf00 nop
  14441. 8006504: e000ed00 .word 0xe000ed00
  14442. 8006508: e000ed90 .word 0xe000ed90
  14443. 0800650c <HAL_MPU_Enable>:
  14444. * @arg MPU_PRIVILEGED_DEFAULT
  14445. * @arg MPU_HFNMI_PRIVDEF
  14446. * @retval None
  14447. */
  14448. void HAL_MPU_Enable(uint32_t MPU_Control)
  14449. {
  14450. 800650c: b480 push {r7}
  14451. 800650e: b083 sub sp, #12
  14452. 8006510: af00 add r7, sp, #0
  14453. 8006512: 6078 str r0, [r7, #4]
  14454. /* Enable the MPU */
  14455. MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
  14456. 8006514: 4a0b ldr r2, [pc, #44] @ (8006544 <HAL_MPU_Enable+0x38>)
  14457. 8006516: 687b ldr r3, [r7, #4]
  14458. 8006518: f043 0301 orr.w r3, r3, #1
  14459. 800651c: 6053 str r3, [r2, #4]
  14460. /* Enable fault exceptions */
  14461. SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
  14462. 800651e: 4b0a ldr r3, [pc, #40] @ (8006548 <HAL_MPU_Enable+0x3c>)
  14463. 8006520: 6a5b ldr r3, [r3, #36] @ 0x24
  14464. 8006522: 4a09 ldr r2, [pc, #36] @ (8006548 <HAL_MPU_Enable+0x3c>)
  14465. 8006524: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  14466. 8006528: 6253 str r3, [r2, #36] @ 0x24
  14467. __ASM volatile ("dsb 0xF":::"memory");
  14468. 800652a: f3bf 8f4f dsb sy
  14469. }
  14470. 800652e: bf00 nop
  14471. __ASM volatile ("isb 0xF":::"memory");
  14472. 8006530: f3bf 8f6f isb sy
  14473. }
  14474. 8006534: bf00 nop
  14475. /* Ensure MPU setting take effects */
  14476. __DSB();
  14477. __ISB();
  14478. }
  14479. 8006536: bf00 nop
  14480. 8006538: 370c adds r7, #12
  14481. 800653a: 46bd mov sp, r7
  14482. 800653c: f85d 7b04 ldr.w r7, [sp], #4
  14483. 8006540: 4770 bx lr
  14484. 8006542: bf00 nop
  14485. 8006544: e000ed90 .word 0xe000ed90
  14486. 8006548: e000ed00 .word 0xe000ed00
  14487. 0800654c <HAL_MPU_ConfigRegion>:
  14488. * @param MPU_Init Pointer to a MPU_Region_InitTypeDef structure that contains
  14489. * the initialization and configuration information.
  14490. * @retval None
  14491. */
  14492. void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init)
  14493. {
  14494. 800654c: b480 push {r7}
  14495. 800654e: b083 sub sp, #12
  14496. 8006550: af00 add r7, sp, #0
  14497. 8006552: 6078 str r0, [r7, #4]
  14498. assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable));
  14499. assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable));
  14500. assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size));
  14501. /* Set the Region number */
  14502. MPU->RNR = MPU_Init->Number;
  14503. 8006554: 687b ldr r3, [r7, #4]
  14504. 8006556: 785a ldrb r2, [r3, #1]
  14505. 8006558: 4b1b ldr r3, [pc, #108] @ (80065c8 <HAL_MPU_ConfigRegion+0x7c>)
  14506. 800655a: 609a str r2, [r3, #8]
  14507. /* Disable the Region */
  14508. CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
  14509. 800655c: 4b1a ldr r3, [pc, #104] @ (80065c8 <HAL_MPU_ConfigRegion+0x7c>)
  14510. 800655e: 691b ldr r3, [r3, #16]
  14511. 8006560: 4a19 ldr r2, [pc, #100] @ (80065c8 <HAL_MPU_ConfigRegion+0x7c>)
  14512. 8006562: f023 0301 bic.w r3, r3, #1
  14513. 8006566: 6113 str r3, [r2, #16]
  14514. /* Apply configuration */
  14515. MPU->RBAR = MPU_Init->BaseAddress;
  14516. 8006568: 4a17 ldr r2, [pc, #92] @ (80065c8 <HAL_MPU_ConfigRegion+0x7c>)
  14517. 800656a: 687b ldr r3, [r7, #4]
  14518. 800656c: 685b ldr r3, [r3, #4]
  14519. 800656e: 60d3 str r3, [r2, #12]
  14520. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  14521. 8006570: 687b ldr r3, [r7, #4]
  14522. 8006572: 7b1b ldrb r3, [r3, #12]
  14523. 8006574: 071a lsls r2, r3, #28
  14524. ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) |
  14525. 8006576: 687b ldr r3, [r7, #4]
  14526. 8006578: 7adb ldrb r3, [r3, #11]
  14527. 800657a: 061b lsls r3, r3, #24
  14528. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  14529. 800657c: 431a orrs r2, r3
  14530. ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) |
  14531. 800657e: 687b ldr r3, [r7, #4]
  14532. 8006580: 7a9b ldrb r3, [r3, #10]
  14533. 8006582: 04db lsls r3, r3, #19
  14534. ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) |
  14535. 8006584: 431a orrs r2, r3
  14536. ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) |
  14537. 8006586: 687b ldr r3, [r7, #4]
  14538. 8006588: 7b5b ldrb r3, [r3, #13]
  14539. 800658a: 049b lsls r3, r3, #18
  14540. ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) |
  14541. 800658c: 431a orrs r2, r3
  14542. ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) |
  14543. 800658e: 687b ldr r3, [r7, #4]
  14544. 8006590: 7b9b ldrb r3, [r3, #14]
  14545. 8006592: 045b lsls r3, r3, #17
  14546. ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) |
  14547. 8006594: 431a orrs r2, r3
  14548. ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) |
  14549. 8006596: 687b ldr r3, [r7, #4]
  14550. 8006598: 7bdb ldrb r3, [r3, #15]
  14551. 800659a: 041b lsls r3, r3, #16
  14552. ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) |
  14553. 800659c: 431a orrs r2, r3
  14554. ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) |
  14555. 800659e: 687b ldr r3, [r7, #4]
  14556. 80065a0: 7a5b ldrb r3, [r3, #9]
  14557. 80065a2: 021b lsls r3, r3, #8
  14558. ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) |
  14559. 80065a4: 431a orrs r2, r3
  14560. ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) |
  14561. 80065a6: 687b ldr r3, [r7, #4]
  14562. 80065a8: 7a1b ldrb r3, [r3, #8]
  14563. 80065aa: 005b lsls r3, r3, #1
  14564. ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) |
  14565. 80065ac: 4313 orrs r3, r2
  14566. ((uint32_t)MPU_Init->Enable << MPU_RASR_ENABLE_Pos);
  14567. 80065ae: 687a ldr r2, [r7, #4]
  14568. 80065b0: 7812 ldrb r2, [r2, #0]
  14569. 80065b2: 4611 mov r1, r2
  14570. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  14571. 80065b4: 4a04 ldr r2, [pc, #16] @ (80065c8 <HAL_MPU_ConfigRegion+0x7c>)
  14572. ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) |
  14573. 80065b6: 430b orrs r3, r1
  14574. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  14575. 80065b8: 6113 str r3, [r2, #16]
  14576. }
  14577. 80065ba: bf00 nop
  14578. 80065bc: 370c adds r7, #12
  14579. 80065be: 46bd mov sp, r7
  14580. 80065c0: f85d 7b04 ldr.w r7, [sp], #4
  14581. 80065c4: 4770 bx lr
  14582. 80065c6: bf00 nop
  14583. 80065c8: e000ed90 .word 0xe000ed90
  14584. 080065cc <HAL_CRC_Init>:
  14585. * parameters in the CRC_InitTypeDef and create the associated handle.
  14586. * @param hcrc CRC handle
  14587. * @retval HAL status
  14588. */
  14589. HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc)
  14590. {
  14591. 80065cc: b580 push {r7, lr}
  14592. 80065ce: b082 sub sp, #8
  14593. 80065d0: af00 add r7, sp, #0
  14594. 80065d2: 6078 str r0, [r7, #4]
  14595. /* Check the CRC handle allocation */
  14596. if (hcrc == NULL)
  14597. 80065d4: 687b ldr r3, [r7, #4]
  14598. 80065d6: 2b00 cmp r3, #0
  14599. 80065d8: d101 bne.n 80065de <HAL_CRC_Init+0x12>
  14600. {
  14601. return HAL_ERROR;
  14602. 80065da: 2301 movs r3, #1
  14603. 80065dc: e054 b.n 8006688 <HAL_CRC_Init+0xbc>
  14604. }
  14605. /* Check the parameters */
  14606. assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance));
  14607. if (hcrc->State == HAL_CRC_STATE_RESET)
  14608. 80065de: 687b ldr r3, [r7, #4]
  14609. 80065e0: 7f5b ldrb r3, [r3, #29]
  14610. 80065e2: b2db uxtb r3, r3
  14611. 80065e4: 2b00 cmp r3, #0
  14612. 80065e6: d105 bne.n 80065f4 <HAL_CRC_Init+0x28>
  14613. {
  14614. /* Allocate lock resource and initialize it */
  14615. hcrc->Lock = HAL_UNLOCKED;
  14616. 80065e8: 687b ldr r3, [r7, #4]
  14617. 80065ea: 2200 movs r2, #0
  14618. 80065ec: 771a strb r2, [r3, #28]
  14619. /* Init the low level hardware */
  14620. HAL_CRC_MspInit(hcrc);
  14621. 80065ee: 6878 ldr r0, [r7, #4]
  14622. 80065f0: f7fc fe3e bl 8003270 <HAL_CRC_MspInit>
  14623. }
  14624. hcrc->State = HAL_CRC_STATE_BUSY;
  14625. 80065f4: 687b ldr r3, [r7, #4]
  14626. 80065f6: 2202 movs r2, #2
  14627. 80065f8: 775a strb r2, [r3, #29]
  14628. /* check whether or not non-default generating polynomial has been
  14629. * picked up by user */
  14630. assert_param(IS_DEFAULT_POLYNOMIAL(hcrc->Init.DefaultPolynomialUse));
  14631. if (hcrc->Init.DefaultPolynomialUse == DEFAULT_POLYNOMIAL_ENABLE)
  14632. 80065fa: 687b ldr r3, [r7, #4]
  14633. 80065fc: 791b ldrb r3, [r3, #4]
  14634. 80065fe: 2b00 cmp r3, #0
  14635. 8006600: d10c bne.n 800661c <HAL_CRC_Init+0x50>
  14636. {
  14637. /* initialize peripheral with default generating polynomial */
  14638. WRITE_REG(hcrc->Instance->POL, DEFAULT_CRC32_POLY);
  14639. 8006602: 687b ldr r3, [r7, #4]
  14640. 8006604: 681b ldr r3, [r3, #0]
  14641. 8006606: 4a22 ldr r2, [pc, #136] @ (8006690 <HAL_CRC_Init+0xc4>)
  14642. 8006608: 615a str r2, [r3, #20]
  14643. MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, CRC_POLYLENGTH_32B);
  14644. 800660a: 687b ldr r3, [r7, #4]
  14645. 800660c: 681b ldr r3, [r3, #0]
  14646. 800660e: 689a ldr r2, [r3, #8]
  14647. 8006610: 687b ldr r3, [r7, #4]
  14648. 8006612: 681b ldr r3, [r3, #0]
  14649. 8006614: f022 0218 bic.w r2, r2, #24
  14650. 8006618: 609a str r2, [r3, #8]
  14651. 800661a: e00c b.n 8006636 <HAL_CRC_Init+0x6a>
  14652. }
  14653. else
  14654. {
  14655. /* initialize CRC peripheral with generating polynomial defined by user */
  14656. if (HAL_CRCEx_Polynomial_Set(hcrc, hcrc->Init.GeneratingPolynomial, hcrc->Init.CRCLength) != HAL_OK)
  14657. 800661c: 687b ldr r3, [r7, #4]
  14658. 800661e: 6899 ldr r1, [r3, #8]
  14659. 8006620: 687b ldr r3, [r7, #4]
  14660. 8006622: 68db ldr r3, [r3, #12]
  14661. 8006624: 461a mov r2, r3
  14662. 8006626: 6878 ldr r0, [r7, #4]
  14663. 8006628: f000 f948 bl 80068bc <HAL_CRCEx_Polynomial_Set>
  14664. 800662c: 4603 mov r3, r0
  14665. 800662e: 2b00 cmp r3, #0
  14666. 8006630: d001 beq.n 8006636 <HAL_CRC_Init+0x6a>
  14667. {
  14668. return HAL_ERROR;
  14669. 8006632: 2301 movs r3, #1
  14670. 8006634: e028 b.n 8006688 <HAL_CRC_Init+0xbc>
  14671. }
  14672. /* check whether or not non-default CRC initial value has been
  14673. * picked up by user */
  14674. assert_param(IS_DEFAULT_INIT_VALUE(hcrc->Init.DefaultInitValueUse));
  14675. if (hcrc->Init.DefaultInitValueUse == DEFAULT_INIT_VALUE_ENABLE)
  14676. 8006636: 687b ldr r3, [r7, #4]
  14677. 8006638: 795b ldrb r3, [r3, #5]
  14678. 800663a: 2b00 cmp r3, #0
  14679. 800663c: d105 bne.n 800664a <HAL_CRC_Init+0x7e>
  14680. {
  14681. WRITE_REG(hcrc->Instance->INIT, DEFAULT_CRC_INITVALUE);
  14682. 800663e: 687b ldr r3, [r7, #4]
  14683. 8006640: 681b ldr r3, [r3, #0]
  14684. 8006642: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  14685. 8006646: 611a str r2, [r3, #16]
  14686. 8006648: e004 b.n 8006654 <HAL_CRC_Init+0x88>
  14687. }
  14688. else
  14689. {
  14690. WRITE_REG(hcrc->Instance->INIT, hcrc->Init.InitValue);
  14691. 800664a: 687b ldr r3, [r7, #4]
  14692. 800664c: 681b ldr r3, [r3, #0]
  14693. 800664e: 687a ldr r2, [r7, #4]
  14694. 8006650: 6912 ldr r2, [r2, #16]
  14695. 8006652: 611a str r2, [r3, #16]
  14696. }
  14697. /* set input data inversion mode */
  14698. assert_param(IS_CRC_INPUTDATA_INVERSION_MODE(hcrc->Init.InputDataInversionMode));
  14699. MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_IN, hcrc->Init.InputDataInversionMode);
  14700. 8006654: 687b ldr r3, [r7, #4]
  14701. 8006656: 681b ldr r3, [r3, #0]
  14702. 8006658: 689b ldr r3, [r3, #8]
  14703. 800665a: f023 0160 bic.w r1, r3, #96 @ 0x60
  14704. 800665e: 687b ldr r3, [r7, #4]
  14705. 8006660: 695a ldr r2, [r3, #20]
  14706. 8006662: 687b ldr r3, [r7, #4]
  14707. 8006664: 681b ldr r3, [r3, #0]
  14708. 8006666: 430a orrs r2, r1
  14709. 8006668: 609a str r2, [r3, #8]
  14710. /* set output data inversion mode */
  14711. assert_param(IS_CRC_OUTPUTDATA_INVERSION_MODE(hcrc->Init.OutputDataInversionMode));
  14712. MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_OUT, hcrc->Init.OutputDataInversionMode);
  14713. 800666a: 687b ldr r3, [r7, #4]
  14714. 800666c: 681b ldr r3, [r3, #0]
  14715. 800666e: 689b ldr r3, [r3, #8]
  14716. 8006670: f023 0180 bic.w r1, r3, #128 @ 0x80
  14717. 8006674: 687b ldr r3, [r7, #4]
  14718. 8006676: 699a ldr r2, [r3, #24]
  14719. 8006678: 687b ldr r3, [r7, #4]
  14720. 800667a: 681b ldr r3, [r3, #0]
  14721. 800667c: 430a orrs r2, r1
  14722. 800667e: 609a str r2, [r3, #8]
  14723. /* makes sure the input data format (bytes, halfwords or words stream)
  14724. * is properly specified by user */
  14725. assert_param(IS_CRC_INPUTDATA_FORMAT(hcrc->InputDataFormat));
  14726. /* Change CRC peripheral state */
  14727. hcrc->State = HAL_CRC_STATE_READY;
  14728. 8006680: 687b ldr r3, [r7, #4]
  14729. 8006682: 2201 movs r2, #1
  14730. 8006684: 775a strb r2, [r3, #29]
  14731. /* Return function status */
  14732. return HAL_OK;
  14733. 8006686: 2300 movs r3, #0
  14734. }
  14735. 8006688: 4618 mov r0, r3
  14736. 800668a: 3708 adds r7, #8
  14737. 800668c: 46bd mov sp, r7
  14738. 800668e: bd80 pop {r7, pc}
  14739. 8006690: 04c11db7 .word 0x04c11db7
  14740. 08006694 <HAL_CRC_Calculate>:
  14741. * and the API will internally adjust its input data processing based on the
  14742. * handle field hcrc->InputDataFormat.
  14743. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  14744. */
  14745. uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)
  14746. {
  14747. 8006694: b580 push {r7, lr}
  14748. 8006696: b086 sub sp, #24
  14749. 8006698: af00 add r7, sp, #0
  14750. 800669a: 60f8 str r0, [r7, #12]
  14751. 800669c: 60b9 str r1, [r7, #8]
  14752. 800669e: 607a str r2, [r7, #4]
  14753. uint32_t index; /* CRC input data buffer index */
  14754. uint32_t temp = 0U; /* CRC output (read from hcrc->Instance->DR register) */
  14755. 80066a0: 2300 movs r3, #0
  14756. 80066a2: 613b str r3, [r7, #16]
  14757. /* Change CRC peripheral state */
  14758. hcrc->State = HAL_CRC_STATE_BUSY;
  14759. 80066a4: 68fb ldr r3, [r7, #12]
  14760. 80066a6: 2202 movs r2, #2
  14761. 80066a8: 775a strb r2, [r3, #29]
  14762. /* Reset CRC Calculation Unit (hcrc->Instance->INIT is
  14763. * written in hcrc->Instance->DR) */
  14764. __HAL_CRC_DR_RESET(hcrc);
  14765. 80066aa: 68fb ldr r3, [r7, #12]
  14766. 80066ac: 681b ldr r3, [r3, #0]
  14767. 80066ae: 689a ldr r2, [r3, #8]
  14768. 80066b0: 68fb ldr r3, [r7, #12]
  14769. 80066b2: 681b ldr r3, [r3, #0]
  14770. 80066b4: f042 0201 orr.w r2, r2, #1
  14771. 80066b8: 609a str r2, [r3, #8]
  14772. switch (hcrc->InputDataFormat)
  14773. 80066ba: 68fb ldr r3, [r7, #12]
  14774. 80066bc: 6a1b ldr r3, [r3, #32]
  14775. 80066be: 2b03 cmp r3, #3
  14776. 80066c0: d006 beq.n 80066d0 <HAL_CRC_Calculate+0x3c>
  14777. 80066c2: 2b03 cmp r3, #3
  14778. 80066c4: d829 bhi.n 800671a <HAL_CRC_Calculate+0x86>
  14779. 80066c6: 2b01 cmp r3, #1
  14780. 80066c8: d019 beq.n 80066fe <HAL_CRC_Calculate+0x6a>
  14781. 80066ca: 2b02 cmp r3, #2
  14782. 80066cc: d01e beq.n 800670c <HAL_CRC_Calculate+0x78>
  14783. /* Specific 16-bit input data handling */
  14784. temp = CRC_Handle_16(hcrc, (uint16_t *)(void *)pBuffer, BufferLength); /* Derogation MisraC2012 R.11.5 */
  14785. break;
  14786. default:
  14787. break;
  14788. 80066ce: e024 b.n 800671a <HAL_CRC_Calculate+0x86>
  14789. for (index = 0U; index < BufferLength; index++)
  14790. 80066d0: 2300 movs r3, #0
  14791. 80066d2: 617b str r3, [r7, #20]
  14792. 80066d4: e00a b.n 80066ec <HAL_CRC_Calculate+0x58>
  14793. hcrc->Instance->DR = pBuffer[index];
  14794. 80066d6: 697b ldr r3, [r7, #20]
  14795. 80066d8: 009b lsls r3, r3, #2
  14796. 80066da: 68ba ldr r2, [r7, #8]
  14797. 80066dc: 441a add r2, r3
  14798. 80066de: 68fb ldr r3, [r7, #12]
  14799. 80066e0: 681b ldr r3, [r3, #0]
  14800. 80066e2: 6812 ldr r2, [r2, #0]
  14801. 80066e4: 601a str r2, [r3, #0]
  14802. for (index = 0U; index < BufferLength; index++)
  14803. 80066e6: 697b ldr r3, [r7, #20]
  14804. 80066e8: 3301 adds r3, #1
  14805. 80066ea: 617b str r3, [r7, #20]
  14806. 80066ec: 697a ldr r2, [r7, #20]
  14807. 80066ee: 687b ldr r3, [r7, #4]
  14808. 80066f0: 429a cmp r2, r3
  14809. 80066f2: d3f0 bcc.n 80066d6 <HAL_CRC_Calculate+0x42>
  14810. temp = hcrc->Instance->DR;
  14811. 80066f4: 68fb ldr r3, [r7, #12]
  14812. 80066f6: 681b ldr r3, [r3, #0]
  14813. 80066f8: 681b ldr r3, [r3, #0]
  14814. 80066fa: 613b str r3, [r7, #16]
  14815. break;
  14816. 80066fc: e00e b.n 800671c <HAL_CRC_Calculate+0x88>
  14817. temp = CRC_Handle_8(hcrc, (uint8_t *)pBuffer, BufferLength);
  14818. 80066fe: 687a ldr r2, [r7, #4]
  14819. 8006700: 68b9 ldr r1, [r7, #8]
  14820. 8006702: 68f8 ldr r0, [r7, #12]
  14821. 8006704: f000 f812 bl 800672c <CRC_Handle_8>
  14822. 8006708: 6138 str r0, [r7, #16]
  14823. break;
  14824. 800670a: e007 b.n 800671c <HAL_CRC_Calculate+0x88>
  14825. temp = CRC_Handle_16(hcrc, (uint16_t *)(void *)pBuffer, BufferLength); /* Derogation MisraC2012 R.11.5 */
  14826. 800670c: 687a ldr r2, [r7, #4]
  14827. 800670e: 68b9 ldr r1, [r7, #8]
  14828. 8006710: 68f8 ldr r0, [r7, #12]
  14829. 8006712: f000 f899 bl 8006848 <CRC_Handle_16>
  14830. 8006716: 6138 str r0, [r7, #16]
  14831. break;
  14832. 8006718: e000 b.n 800671c <HAL_CRC_Calculate+0x88>
  14833. break;
  14834. 800671a: bf00 nop
  14835. }
  14836. /* Change CRC peripheral state */
  14837. hcrc->State = HAL_CRC_STATE_READY;
  14838. 800671c: 68fb ldr r3, [r7, #12]
  14839. 800671e: 2201 movs r2, #1
  14840. 8006720: 775a strb r2, [r3, #29]
  14841. /* Return the CRC computed value */
  14842. return temp;
  14843. 8006722: 693b ldr r3, [r7, #16]
  14844. }
  14845. 8006724: 4618 mov r0, r3
  14846. 8006726: 3718 adds r7, #24
  14847. 8006728: 46bd mov sp, r7
  14848. 800672a: bd80 pop {r7, pc}
  14849. 0800672c <CRC_Handle_8>:
  14850. * @param pBuffer pointer to the input data buffer
  14851. * @param BufferLength input data buffer length
  14852. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  14853. */
  14854. static uint32_t CRC_Handle_8(CRC_HandleTypeDef *hcrc, uint8_t pBuffer[], uint32_t BufferLength)
  14855. {
  14856. 800672c: b480 push {r7}
  14857. 800672e: b089 sub sp, #36 @ 0x24
  14858. 8006730: af00 add r7, sp, #0
  14859. 8006732: 60f8 str r0, [r7, #12]
  14860. 8006734: 60b9 str r1, [r7, #8]
  14861. 8006736: 607a str r2, [r7, #4]
  14862. __IO uint16_t *pReg;
  14863. /* Processing time optimization: 4 bytes are entered in a row with a single word write,
  14864. * last bytes must be carefully fed to the CRC calculator to ensure a correct type
  14865. * handling by the peripheral */
  14866. for (i = 0U; i < (BufferLength / 4U); i++)
  14867. 8006738: 2300 movs r3, #0
  14868. 800673a: 61fb str r3, [r7, #28]
  14869. 800673c: e023 b.n 8006786 <CRC_Handle_8+0x5a>
  14870. {
  14871. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  14872. 800673e: 69fb ldr r3, [r7, #28]
  14873. 8006740: 009b lsls r3, r3, #2
  14874. 8006742: 68ba ldr r2, [r7, #8]
  14875. 8006744: 4413 add r3, r2
  14876. 8006746: 781b ldrb r3, [r3, #0]
  14877. 8006748: 061a lsls r2, r3, #24
  14878. ((uint32_t)pBuffer[(4U * i) + 1U] << 16U) | \
  14879. 800674a: 69fb ldr r3, [r7, #28]
  14880. 800674c: 009b lsls r3, r3, #2
  14881. 800674e: 3301 adds r3, #1
  14882. 8006750: 68b9 ldr r1, [r7, #8]
  14883. 8006752: 440b add r3, r1
  14884. 8006754: 781b ldrb r3, [r3, #0]
  14885. 8006756: 041b lsls r3, r3, #16
  14886. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  14887. 8006758: 431a orrs r2, r3
  14888. ((uint32_t)pBuffer[(4U * i) + 2U] << 8U) | \
  14889. 800675a: 69fb ldr r3, [r7, #28]
  14890. 800675c: 009b lsls r3, r3, #2
  14891. 800675e: 3302 adds r3, #2
  14892. 8006760: 68b9 ldr r1, [r7, #8]
  14893. 8006762: 440b add r3, r1
  14894. 8006764: 781b ldrb r3, [r3, #0]
  14895. 8006766: 021b lsls r3, r3, #8
  14896. ((uint32_t)pBuffer[(4U * i) + 1U] << 16U) | \
  14897. 8006768: 431a orrs r2, r3
  14898. (uint32_t)pBuffer[(4U * i) + 3U];
  14899. 800676a: 69fb ldr r3, [r7, #28]
  14900. 800676c: 009b lsls r3, r3, #2
  14901. 800676e: 3303 adds r3, #3
  14902. 8006770: 68b9 ldr r1, [r7, #8]
  14903. 8006772: 440b add r3, r1
  14904. 8006774: 781b ldrb r3, [r3, #0]
  14905. 8006776: 4619 mov r1, r3
  14906. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  14907. 8006778: 68fb ldr r3, [r7, #12]
  14908. 800677a: 681b ldr r3, [r3, #0]
  14909. ((uint32_t)pBuffer[(4U * i) + 2U] << 8U) | \
  14910. 800677c: 430a orrs r2, r1
  14911. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  14912. 800677e: 601a str r2, [r3, #0]
  14913. for (i = 0U; i < (BufferLength / 4U); i++)
  14914. 8006780: 69fb ldr r3, [r7, #28]
  14915. 8006782: 3301 adds r3, #1
  14916. 8006784: 61fb str r3, [r7, #28]
  14917. 8006786: 687b ldr r3, [r7, #4]
  14918. 8006788: 089b lsrs r3, r3, #2
  14919. 800678a: 69fa ldr r2, [r7, #28]
  14920. 800678c: 429a cmp r2, r3
  14921. 800678e: d3d6 bcc.n 800673e <CRC_Handle_8+0x12>
  14922. }
  14923. /* last bytes specific handling */
  14924. if ((BufferLength % 4U) != 0U)
  14925. 8006790: 687b ldr r3, [r7, #4]
  14926. 8006792: f003 0303 and.w r3, r3, #3
  14927. 8006796: 2b00 cmp r3, #0
  14928. 8006798: d04d beq.n 8006836 <CRC_Handle_8+0x10a>
  14929. {
  14930. if ((BufferLength % 4U) == 1U)
  14931. 800679a: 687b ldr r3, [r7, #4]
  14932. 800679c: f003 0303 and.w r3, r3, #3
  14933. 80067a0: 2b01 cmp r3, #1
  14934. 80067a2: d107 bne.n 80067b4 <CRC_Handle_8+0x88>
  14935. {
  14936. *(__IO uint8_t *)(__IO void *)(&hcrc->Instance->DR) = pBuffer[4U * i]; /* Derogation MisraC2012 R.11.5 */
  14937. 80067a4: 69fb ldr r3, [r7, #28]
  14938. 80067a6: 009b lsls r3, r3, #2
  14939. 80067a8: 68ba ldr r2, [r7, #8]
  14940. 80067aa: 4413 add r3, r2
  14941. 80067ac: 68fa ldr r2, [r7, #12]
  14942. 80067ae: 6812 ldr r2, [r2, #0]
  14943. 80067b0: 781b ldrb r3, [r3, #0]
  14944. 80067b2: 7013 strb r3, [r2, #0]
  14945. }
  14946. if ((BufferLength % 4U) == 2U)
  14947. 80067b4: 687b ldr r3, [r7, #4]
  14948. 80067b6: f003 0303 and.w r3, r3, #3
  14949. 80067ba: 2b02 cmp r3, #2
  14950. 80067bc: d116 bne.n 80067ec <CRC_Handle_8+0xc0>
  14951. {
  14952. data = ((uint16_t)(pBuffer[4U * i]) << 8U) | (uint16_t)pBuffer[(4U * i) + 1U];
  14953. 80067be: 69fb ldr r3, [r7, #28]
  14954. 80067c0: 009b lsls r3, r3, #2
  14955. 80067c2: 68ba ldr r2, [r7, #8]
  14956. 80067c4: 4413 add r3, r2
  14957. 80067c6: 781b ldrb r3, [r3, #0]
  14958. 80067c8: 021b lsls r3, r3, #8
  14959. 80067ca: b21a sxth r2, r3
  14960. 80067cc: 69fb ldr r3, [r7, #28]
  14961. 80067ce: 009b lsls r3, r3, #2
  14962. 80067d0: 3301 adds r3, #1
  14963. 80067d2: 68b9 ldr r1, [r7, #8]
  14964. 80067d4: 440b add r3, r1
  14965. 80067d6: 781b ldrb r3, [r3, #0]
  14966. 80067d8: b21b sxth r3, r3
  14967. 80067da: 4313 orrs r3, r2
  14968. 80067dc: b21b sxth r3, r3
  14969. 80067de: 837b strh r3, [r7, #26]
  14970. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  14971. 80067e0: 68fb ldr r3, [r7, #12]
  14972. 80067e2: 681b ldr r3, [r3, #0]
  14973. 80067e4: 617b str r3, [r7, #20]
  14974. *pReg = data;
  14975. 80067e6: 697b ldr r3, [r7, #20]
  14976. 80067e8: 8b7a ldrh r2, [r7, #26]
  14977. 80067ea: 801a strh r2, [r3, #0]
  14978. }
  14979. if ((BufferLength % 4U) == 3U)
  14980. 80067ec: 687b ldr r3, [r7, #4]
  14981. 80067ee: f003 0303 and.w r3, r3, #3
  14982. 80067f2: 2b03 cmp r3, #3
  14983. 80067f4: d11f bne.n 8006836 <CRC_Handle_8+0x10a>
  14984. {
  14985. data = ((uint16_t)(pBuffer[4U * i]) << 8U) | (uint16_t)pBuffer[(4U * i) + 1U];
  14986. 80067f6: 69fb ldr r3, [r7, #28]
  14987. 80067f8: 009b lsls r3, r3, #2
  14988. 80067fa: 68ba ldr r2, [r7, #8]
  14989. 80067fc: 4413 add r3, r2
  14990. 80067fe: 781b ldrb r3, [r3, #0]
  14991. 8006800: 021b lsls r3, r3, #8
  14992. 8006802: b21a sxth r2, r3
  14993. 8006804: 69fb ldr r3, [r7, #28]
  14994. 8006806: 009b lsls r3, r3, #2
  14995. 8006808: 3301 adds r3, #1
  14996. 800680a: 68b9 ldr r1, [r7, #8]
  14997. 800680c: 440b add r3, r1
  14998. 800680e: 781b ldrb r3, [r3, #0]
  14999. 8006810: b21b sxth r3, r3
  15000. 8006812: 4313 orrs r3, r2
  15001. 8006814: b21b sxth r3, r3
  15002. 8006816: 837b strh r3, [r7, #26]
  15003. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  15004. 8006818: 68fb ldr r3, [r7, #12]
  15005. 800681a: 681b ldr r3, [r3, #0]
  15006. 800681c: 617b str r3, [r7, #20]
  15007. *pReg = data;
  15008. 800681e: 697b ldr r3, [r7, #20]
  15009. 8006820: 8b7a ldrh r2, [r7, #26]
  15010. 8006822: 801a strh r2, [r3, #0]
  15011. *(__IO uint8_t *)(__IO void *)(&hcrc->Instance->DR) = pBuffer[(4U * i) + 2U]; /* Derogation MisraC2012 R.11.5 */
  15012. 8006824: 69fb ldr r3, [r7, #28]
  15013. 8006826: 009b lsls r3, r3, #2
  15014. 8006828: 3302 adds r3, #2
  15015. 800682a: 68ba ldr r2, [r7, #8]
  15016. 800682c: 4413 add r3, r2
  15017. 800682e: 68fa ldr r2, [r7, #12]
  15018. 8006830: 6812 ldr r2, [r2, #0]
  15019. 8006832: 781b ldrb r3, [r3, #0]
  15020. 8006834: 7013 strb r3, [r2, #0]
  15021. }
  15022. }
  15023. /* Return the CRC computed value */
  15024. return hcrc->Instance->DR;
  15025. 8006836: 68fb ldr r3, [r7, #12]
  15026. 8006838: 681b ldr r3, [r3, #0]
  15027. 800683a: 681b ldr r3, [r3, #0]
  15028. }
  15029. 800683c: 4618 mov r0, r3
  15030. 800683e: 3724 adds r7, #36 @ 0x24
  15031. 8006840: 46bd mov sp, r7
  15032. 8006842: f85d 7b04 ldr.w r7, [sp], #4
  15033. 8006846: 4770 bx lr
  15034. 08006848 <CRC_Handle_16>:
  15035. * @param pBuffer pointer to the input data buffer
  15036. * @param BufferLength input data buffer length
  15037. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  15038. */
  15039. static uint32_t CRC_Handle_16(CRC_HandleTypeDef *hcrc, uint16_t pBuffer[], uint32_t BufferLength)
  15040. {
  15041. 8006848: b480 push {r7}
  15042. 800684a: b087 sub sp, #28
  15043. 800684c: af00 add r7, sp, #0
  15044. 800684e: 60f8 str r0, [r7, #12]
  15045. 8006850: 60b9 str r1, [r7, #8]
  15046. 8006852: 607a str r2, [r7, #4]
  15047. __IO uint16_t *pReg;
  15048. /* Processing time optimization: 2 HalfWords are entered in a row with a single word write,
  15049. * in case of odd length, last HalfWord must be carefully fed to the CRC calculator to ensure
  15050. * a correct type handling by the peripheral */
  15051. for (i = 0U; i < (BufferLength / 2U); i++)
  15052. 8006854: 2300 movs r3, #0
  15053. 8006856: 617b str r3, [r7, #20]
  15054. 8006858: e013 b.n 8006882 <CRC_Handle_16+0x3a>
  15055. {
  15056. hcrc->Instance->DR = ((uint32_t)pBuffer[2U * i] << 16U) | (uint32_t)pBuffer[(2U * i) + 1U];
  15057. 800685a: 697b ldr r3, [r7, #20]
  15058. 800685c: 009b lsls r3, r3, #2
  15059. 800685e: 68ba ldr r2, [r7, #8]
  15060. 8006860: 4413 add r3, r2
  15061. 8006862: 881b ldrh r3, [r3, #0]
  15062. 8006864: 041a lsls r2, r3, #16
  15063. 8006866: 697b ldr r3, [r7, #20]
  15064. 8006868: 009b lsls r3, r3, #2
  15065. 800686a: 3302 adds r3, #2
  15066. 800686c: 68b9 ldr r1, [r7, #8]
  15067. 800686e: 440b add r3, r1
  15068. 8006870: 881b ldrh r3, [r3, #0]
  15069. 8006872: 4619 mov r1, r3
  15070. 8006874: 68fb ldr r3, [r7, #12]
  15071. 8006876: 681b ldr r3, [r3, #0]
  15072. 8006878: 430a orrs r2, r1
  15073. 800687a: 601a str r2, [r3, #0]
  15074. for (i = 0U; i < (BufferLength / 2U); i++)
  15075. 800687c: 697b ldr r3, [r7, #20]
  15076. 800687e: 3301 adds r3, #1
  15077. 8006880: 617b str r3, [r7, #20]
  15078. 8006882: 687b ldr r3, [r7, #4]
  15079. 8006884: 085b lsrs r3, r3, #1
  15080. 8006886: 697a ldr r2, [r7, #20]
  15081. 8006888: 429a cmp r2, r3
  15082. 800688a: d3e6 bcc.n 800685a <CRC_Handle_16+0x12>
  15083. }
  15084. if ((BufferLength % 2U) != 0U)
  15085. 800688c: 687b ldr r3, [r7, #4]
  15086. 800688e: f003 0301 and.w r3, r3, #1
  15087. 8006892: 2b00 cmp r3, #0
  15088. 8006894: d009 beq.n 80068aa <CRC_Handle_16+0x62>
  15089. {
  15090. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  15091. 8006896: 68fb ldr r3, [r7, #12]
  15092. 8006898: 681b ldr r3, [r3, #0]
  15093. 800689a: 613b str r3, [r7, #16]
  15094. *pReg = pBuffer[2U * i];
  15095. 800689c: 697b ldr r3, [r7, #20]
  15096. 800689e: 009b lsls r3, r3, #2
  15097. 80068a0: 68ba ldr r2, [r7, #8]
  15098. 80068a2: 4413 add r3, r2
  15099. 80068a4: 881a ldrh r2, [r3, #0]
  15100. 80068a6: 693b ldr r3, [r7, #16]
  15101. 80068a8: 801a strh r2, [r3, #0]
  15102. }
  15103. /* Return the CRC computed value */
  15104. return hcrc->Instance->DR;
  15105. 80068aa: 68fb ldr r3, [r7, #12]
  15106. 80068ac: 681b ldr r3, [r3, #0]
  15107. 80068ae: 681b ldr r3, [r3, #0]
  15108. }
  15109. 80068b0: 4618 mov r0, r3
  15110. 80068b2: 371c adds r7, #28
  15111. 80068b4: 46bd mov sp, r7
  15112. 80068b6: f85d 7b04 ldr.w r7, [sp], #4
  15113. 80068ba: 4770 bx lr
  15114. 080068bc <HAL_CRCEx_Polynomial_Set>:
  15115. * @arg @ref CRC_POLYLENGTH_16B 16-bit long CRC (generating polynomial of degree 16)
  15116. * @arg @ref CRC_POLYLENGTH_32B 32-bit long CRC (generating polynomial of degree 32)
  15117. * @retval HAL status
  15118. */
  15119. HAL_StatusTypeDef HAL_CRCEx_Polynomial_Set(CRC_HandleTypeDef *hcrc, uint32_t Pol, uint32_t PolyLength)
  15120. {
  15121. 80068bc: b480 push {r7}
  15122. 80068be: b087 sub sp, #28
  15123. 80068c0: af00 add r7, sp, #0
  15124. 80068c2: 60f8 str r0, [r7, #12]
  15125. 80068c4: 60b9 str r1, [r7, #8]
  15126. 80068c6: 607a str r2, [r7, #4]
  15127. HAL_StatusTypeDef status = HAL_OK;
  15128. 80068c8: 2300 movs r3, #0
  15129. 80068ca: 75fb strb r3, [r7, #23]
  15130. uint32_t msb = 31U; /* polynomial degree is 32 at most, so msb is initialized to max value */
  15131. 80068cc: 231f movs r3, #31
  15132. 80068ce: 613b str r3, [r7, #16]
  15133. /* Check the parameters */
  15134. assert_param(IS_CRC_POL_LENGTH(PolyLength));
  15135. /* Ensure that the generating polynomial is odd */
  15136. if ((Pol & (uint32_t)(0x1U)) == 0U)
  15137. 80068d0: 68bb ldr r3, [r7, #8]
  15138. 80068d2: f003 0301 and.w r3, r3, #1
  15139. 80068d6: 2b00 cmp r3, #0
  15140. 80068d8: d102 bne.n 80068e0 <HAL_CRCEx_Polynomial_Set+0x24>
  15141. {
  15142. status = HAL_ERROR;
  15143. 80068da: 2301 movs r3, #1
  15144. 80068dc: 75fb strb r3, [r7, #23]
  15145. 80068de: e063 b.n 80069a8 <HAL_CRCEx_Polynomial_Set+0xec>
  15146. * definition. HAL_ERROR is reported if Pol degree is
  15147. * larger than that indicated by PolyLength.
  15148. * Look for MSB position: msb will contain the degree of
  15149. * the second to the largest polynomial member. E.g., for
  15150. * X^7 + X^6 + X^5 + X^2 + 1, msb = 6. */
  15151. while ((msb-- > 0U) && ((Pol & ((uint32_t)(0x1U) << (msb & 0x1FU))) == 0U))
  15152. 80068e0: bf00 nop
  15153. 80068e2: 693b ldr r3, [r7, #16]
  15154. 80068e4: 1e5a subs r2, r3, #1
  15155. 80068e6: 613a str r2, [r7, #16]
  15156. 80068e8: 2b00 cmp r3, #0
  15157. 80068ea: d009 beq.n 8006900 <HAL_CRCEx_Polynomial_Set+0x44>
  15158. 80068ec: 693b ldr r3, [r7, #16]
  15159. 80068ee: f003 031f and.w r3, r3, #31
  15160. 80068f2: 68ba ldr r2, [r7, #8]
  15161. 80068f4: fa22 f303 lsr.w r3, r2, r3
  15162. 80068f8: f003 0301 and.w r3, r3, #1
  15163. 80068fc: 2b00 cmp r3, #0
  15164. 80068fe: d0f0 beq.n 80068e2 <HAL_CRCEx_Polynomial_Set+0x26>
  15165. {
  15166. }
  15167. switch (PolyLength)
  15168. 8006900: 687b ldr r3, [r7, #4]
  15169. 8006902: 2b18 cmp r3, #24
  15170. 8006904: d846 bhi.n 8006994 <HAL_CRCEx_Polynomial_Set+0xd8>
  15171. 8006906: a201 add r2, pc, #4 @ (adr r2, 800690c <HAL_CRCEx_Polynomial_Set+0x50>)
  15172. 8006908: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  15173. 800690c: 0800699b .word 0x0800699b
  15174. 8006910: 08006995 .word 0x08006995
  15175. 8006914: 08006995 .word 0x08006995
  15176. 8006918: 08006995 .word 0x08006995
  15177. 800691c: 08006995 .word 0x08006995
  15178. 8006920: 08006995 .word 0x08006995
  15179. 8006924: 08006995 .word 0x08006995
  15180. 8006928: 08006995 .word 0x08006995
  15181. 800692c: 08006989 .word 0x08006989
  15182. 8006930: 08006995 .word 0x08006995
  15183. 8006934: 08006995 .word 0x08006995
  15184. 8006938: 08006995 .word 0x08006995
  15185. 800693c: 08006995 .word 0x08006995
  15186. 8006940: 08006995 .word 0x08006995
  15187. 8006944: 08006995 .word 0x08006995
  15188. 8006948: 08006995 .word 0x08006995
  15189. 800694c: 0800697d .word 0x0800697d
  15190. 8006950: 08006995 .word 0x08006995
  15191. 8006954: 08006995 .word 0x08006995
  15192. 8006958: 08006995 .word 0x08006995
  15193. 800695c: 08006995 .word 0x08006995
  15194. 8006960: 08006995 .word 0x08006995
  15195. 8006964: 08006995 .word 0x08006995
  15196. 8006968: 08006995 .word 0x08006995
  15197. 800696c: 08006971 .word 0x08006971
  15198. {
  15199. case CRC_POLYLENGTH_7B:
  15200. if (msb >= HAL_CRC_LENGTH_7B)
  15201. 8006970: 693b ldr r3, [r7, #16]
  15202. 8006972: 2b06 cmp r3, #6
  15203. 8006974: d913 bls.n 800699e <HAL_CRCEx_Polynomial_Set+0xe2>
  15204. {
  15205. status = HAL_ERROR;
  15206. 8006976: 2301 movs r3, #1
  15207. 8006978: 75fb strb r3, [r7, #23]
  15208. }
  15209. break;
  15210. 800697a: e010 b.n 800699e <HAL_CRCEx_Polynomial_Set+0xe2>
  15211. case CRC_POLYLENGTH_8B:
  15212. if (msb >= HAL_CRC_LENGTH_8B)
  15213. 800697c: 693b ldr r3, [r7, #16]
  15214. 800697e: 2b07 cmp r3, #7
  15215. 8006980: d90f bls.n 80069a2 <HAL_CRCEx_Polynomial_Set+0xe6>
  15216. {
  15217. status = HAL_ERROR;
  15218. 8006982: 2301 movs r3, #1
  15219. 8006984: 75fb strb r3, [r7, #23]
  15220. }
  15221. break;
  15222. 8006986: e00c b.n 80069a2 <HAL_CRCEx_Polynomial_Set+0xe6>
  15223. case CRC_POLYLENGTH_16B:
  15224. if (msb >= HAL_CRC_LENGTH_16B)
  15225. 8006988: 693b ldr r3, [r7, #16]
  15226. 800698a: 2b0f cmp r3, #15
  15227. 800698c: d90b bls.n 80069a6 <HAL_CRCEx_Polynomial_Set+0xea>
  15228. {
  15229. status = HAL_ERROR;
  15230. 800698e: 2301 movs r3, #1
  15231. 8006990: 75fb strb r3, [r7, #23]
  15232. }
  15233. break;
  15234. 8006992: e008 b.n 80069a6 <HAL_CRCEx_Polynomial_Set+0xea>
  15235. case CRC_POLYLENGTH_32B:
  15236. /* no polynomial definition vs. polynomial length issue possible */
  15237. break;
  15238. default:
  15239. status = HAL_ERROR;
  15240. 8006994: 2301 movs r3, #1
  15241. 8006996: 75fb strb r3, [r7, #23]
  15242. break;
  15243. 8006998: e006 b.n 80069a8 <HAL_CRCEx_Polynomial_Set+0xec>
  15244. break;
  15245. 800699a: bf00 nop
  15246. 800699c: e004 b.n 80069a8 <HAL_CRCEx_Polynomial_Set+0xec>
  15247. break;
  15248. 800699e: bf00 nop
  15249. 80069a0: e002 b.n 80069a8 <HAL_CRCEx_Polynomial_Set+0xec>
  15250. break;
  15251. 80069a2: bf00 nop
  15252. 80069a4: e000 b.n 80069a8 <HAL_CRCEx_Polynomial_Set+0xec>
  15253. break;
  15254. 80069a6: bf00 nop
  15255. }
  15256. }
  15257. if (status == HAL_OK)
  15258. 80069a8: 7dfb ldrb r3, [r7, #23]
  15259. 80069aa: 2b00 cmp r3, #0
  15260. 80069ac: d10d bne.n 80069ca <HAL_CRCEx_Polynomial_Set+0x10e>
  15261. {
  15262. /* set generating polynomial */
  15263. WRITE_REG(hcrc->Instance->POL, Pol);
  15264. 80069ae: 68fb ldr r3, [r7, #12]
  15265. 80069b0: 681b ldr r3, [r3, #0]
  15266. 80069b2: 68ba ldr r2, [r7, #8]
  15267. 80069b4: 615a str r2, [r3, #20]
  15268. /* set generating polynomial size */
  15269. MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, PolyLength);
  15270. 80069b6: 68fb ldr r3, [r7, #12]
  15271. 80069b8: 681b ldr r3, [r3, #0]
  15272. 80069ba: 689b ldr r3, [r3, #8]
  15273. 80069bc: f023 0118 bic.w r1, r3, #24
  15274. 80069c0: 68fb ldr r3, [r7, #12]
  15275. 80069c2: 681b ldr r3, [r3, #0]
  15276. 80069c4: 687a ldr r2, [r7, #4]
  15277. 80069c6: 430a orrs r2, r1
  15278. 80069c8: 609a str r2, [r3, #8]
  15279. }
  15280. /* Return function status */
  15281. return status;
  15282. 80069ca: 7dfb ldrb r3, [r7, #23]
  15283. }
  15284. 80069cc: 4618 mov r0, r3
  15285. 80069ce: 371c adds r7, #28
  15286. 80069d0: 46bd mov sp, r7
  15287. 80069d2: f85d 7b04 ldr.w r7, [sp], #4
  15288. 80069d6: 4770 bx lr
  15289. 080069d8 <HAL_DAC_Init>:
  15290. * @param hdac pointer to a DAC_HandleTypeDef structure that contains
  15291. * the configuration information for the specified DAC.
  15292. * @retval HAL status
  15293. */
  15294. HAL_StatusTypeDef HAL_DAC_Init(DAC_HandleTypeDef *hdac)
  15295. {
  15296. 80069d8: b580 push {r7, lr}
  15297. 80069da: b082 sub sp, #8
  15298. 80069dc: af00 add r7, sp, #0
  15299. 80069de: 6078 str r0, [r7, #4]
  15300. /* Check the DAC peripheral handle */
  15301. if (hdac == NULL)
  15302. 80069e0: 687b ldr r3, [r7, #4]
  15303. 80069e2: 2b00 cmp r3, #0
  15304. 80069e4: d101 bne.n 80069ea <HAL_DAC_Init+0x12>
  15305. {
  15306. return HAL_ERROR;
  15307. 80069e6: 2301 movs r3, #1
  15308. 80069e8: e014 b.n 8006a14 <HAL_DAC_Init+0x3c>
  15309. }
  15310. /* Check the parameters */
  15311. assert_param(IS_DAC_ALL_INSTANCE(hdac->Instance));
  15312. if (hdac->State == HAL_DAC_STATE_RESET)
  15313. 80069ea: 687b ldr r3, [r7, #4]
  15314. 80069ec: 791b ldrb r3, [r3, #4]
  15315. 80069ee: b2db uxtb r3, r3
  15316. 80069f0: 2b00 cmp r3, #0
  15317. 80069f2: d105 bne.n 8006a00 <HAL_DAC_Init+0x28>
  15318. hdac->MspInitCallback = HAL_DAC_MspInit;
  15319. }
  15320. #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
  15321. /* Allocate lock resource and initialize it */
  15322. hdac->Lock = HAL_UNLOCKED;
  15323. 80069f4: 687b ldr r3, [r7, #4]
  15324. 80069f6: 2200 movs r2, #0
  15325. 80069f8: 715a strb r2, [r3, #5]
  15326. #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
  15327. /* Init the low level hardware */
  15328. hdac->MspInitCallback(hdac);
  15329. #else
  15330. /* Init the low level hardware */
  15331. HAL_DAC_MspInit(hdac);
  15332. 80069fa: 6878 ldr r0, [r7, #4]
  15333. 80069fc: f7fc fc5a bl 80032b4 <HAL_DAC_MspInit>
  15334. #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
  15335. }
  15336. /* Initialize the DAC state*/
  15337. hdac->State = HAL_DAC_STATE_BUSY;
  15338. 8006a00: 687b ldr r3, [r7, #4]
  15339. 8006a02: 2202 movs r2, #2
  15340. 8006a04: 711a strb r2, [r3, #4]
  15341. /* Set DAC error code to none */
  15342. hdac->ErrorCode = HAL_DAC_ERROR_NONE;
  15343. 8006a06: 687b ldr r3, [r7, #4]
  15344. 8006a08: 2200 movs r2, #0
  15345. 8006a0a: 611a str r2, [r3, #16]
  15346. /* Initialize the DAC state*/
  15347. hdac->State = HAL_DAC_STATE_READY;
  15348. 8006a0c: 687b ldr r3, [r7, #4]
  15349. 8006a0e: 2201 movs r2, #1
  15350. 8006a10: 711a strb r2, [r3, #4]
  15351. /* Return function status */
  15352. return HAL_OK;
  15353. 8006a12: 2300 movs r3, #0
  15354. }
  15355. 8006a14: 4618 mov r0, r3
  15356. 8006a16: 3708 adds r7, #8
  15357. 8006a18: 46bd mov sp, r7
  15358. 8006a1a: bd80 pop {r7, pc}
  15359. 08006a1c <HAL_DAC_Start>:
  15360. * @arg DAC_CHANNEL_1: DAC Channel1 selected
  15361. * @arg DAC_CHANNEL_2: DAC Channel2 selected
  15362. * @retval HAL status
  15363. */
  15364. HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef *hdac, uint32_t Channel)
  15365. {
  15366. 8006a1c: b480 push {r7}
  15367. 8006a1e: b083 sub sp, #12
  15368. 8006a20: af00 add r7, sp, #0
  15369. 8006a22: 6078 str r0, [r7, #4]
  15370. 8006a24: 6039 str r1, [r7, #0]
  15371. /* Check the DAC peripheral handle */
  15372. if (hdac == NULL)
  15373. 8006a26: 687b ldr r3, [r7, #4]
  15374. 8006a28: 2b00 cmp r3, #0
  15375. 8006a2a: d101 bne.n 8006a30 <HAL_DAC_Start+0x14>
  15376. {
  15377. return HAL_ERROR;
  15378. 8006a2c: 2301 movs r3, #1
  15379. 8006a2e: e046 b.n 8006abe <HAL_DAC_Start+0xa2>
  15380. /* Check the parameters */
  15381. assert_param(IS_DAC_CHANNEL(Channel));
  15382. /* Process locked */
  15383. __HAL_LOCK(hdac);
  15384. 8006a30: 687b ldr r3, [r7, #4]
  15385. 8006a32: 795b ldrb r3, [r3, #5]
  15386. 8006a34: 2b01 cmp r3, #1
  15387. 8006a36: d101 bne.n 8006a3c <HAL_DAC_Start+0x20>
  15388. 8006a38: 2302 movs r3, #2
  15389. 8006a3a: e040 b.n 8006abe <HAL_DAC_Start+0xa2>
  15390. 8006a3c: 687b ldr r3, [r7, #4]
  15391. 8006a3e: 2201 movs r2, #1
  15392. 8006a40: 715a strb r2, [r3, #5]
  15393. /* Change DAC state */
  15394. hdac->State = HAL_DAC_STATE_BUSY;
  15395. 8006a42: 687b ldr r3, [r7, #4]
  15396. 8006a44: 2202 movs r2, #2
  15397. 8006a46: 711a strb r2, [r3, #4]
  15398. /* Enable the Peripheral */
  15399. __HAL_DAC_ENABLE(hdac, Channel);
  15400. 8006a48: 687b ldr r3, [r7, #4]
  15401. 8006a4a: 681b ldr r3, [r3, #0]
  15402. 8006a4c: 6819 ldr r1, [r3, #0]
  15403. 8006a4e: 683b ldr r3, [r7, #0]
  15404. 8006a50: f003 0310 and.w r3, r3, #16
  15405. 8006a54: 2201 movs r2, #1
  15406. 8006a56: 409a lsls r2, r3
  15407. 8006a58: 687b ldr r3, [r7, #4]
  15408. 8006a5a: 681b ldr r3, [r3, #0]
  15409. 8006a5c: 430a orrs r2, r1
  15410. 8006a5e: 601a str r2, [r3, #0]
  15411. if (Channel == DAC_CHANNEL_1)
  15412. 8006a60: 683b ldr r3, [r7, #0]
  15413. 8006a62: 2b00 cmp r3, #0
  15414. 8006a64: d10f bne.n 8006a86 <HAL_DAC_Start+0x6a>
  15415. {
  15416. /* Check if software trigger enabled */
  15417. if ((hdac->Instance->CR & (DAC_CR_TEN1 | DAC_CR_TSEL1)) == DAC_TRIGGER_SOFTWARE)
  15418. 8006a66: 687b ldr r3, [r7, #4]
  15419. 8006a68: 681b ldr r3, [r3, #0]
  15420. 8006a6a: 681b ldr r3, [r3, #0]
  15421. 8006a6c: f003 033e and.w r3, r3, #62 @ 0x3e
  15422. 8006a70: 2b02 cmp r3, #2
  15423. 8006a72: d11d bne.n 8006ab0 <HAL_DAC_Start+0x94>
  15424. {
  15425. /* Enable the selected DAC software conversion */
  15426. SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG1);
  15427. 8006a74: 687b ldr r3, [r7, #4]
  15428. 8006a76: 681b ldr r3, [r3, #0]
  15429. 8006a78: 685a ldr r2, [r3, #4]
  15430. 8006a7a: 687b ldr r3, [r7, #4]
  15431. 8006a7c: 681b ldr r3, [r3, #0]
  15432. 8006a7e: f042 0201 orr.w r2, r2, #1
  15433. 8006a82: 605a str r2, [r3, #4]
  15434. 8006a84: e014 b.n 8006ab0 <HAL_DAC_Start+0x94>
  15435. }
  15436. else
  15437. {
  15438. /* Check if software trigger enabled */
  15439. if ((hdac->Instance->CR & (DAC_CR_TEN2 | DAC_CR_TSEL2)) == (DAC_TRIGGER_SOFTWARE << (Channel & 0x10UL)))
  15440. 8006a86: 687b ldr r3, [r7, #4]
  15441. 8006a88: 681b ldr r3, [r3, #0]
  15442. 8006a8a: 681b ldr r3, [r3, #0]
  15443. 8006a8c: f403 1278 and.w r2, r3, #4063232 @ 0x3e0000
  15444. 8006a90: 683b ldr r3, [r7, #0]
  15445. 8006a92: f003 0310 and.w r3, r3, #16
  15446. 8006a96: 2102 movs r1, #2
  15447. 8006a98: fa01 f303 lsl.w r3, r1, r3
  15448. 8006a9c: 429a cmp r2, r3
  15449. 8006a9e: d107 bne.n 8006ab0 <HAL_DAC_Start+0x94>
  15450. {
  15451. /* Enable the selected DAC software conversion*/
  15452. SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG2);
  15453. 8006aa0: 687b ldr r3, [r7, #4]
  15454. 8006aa2: 681b ldr r3, [r3, #0]
  15455. 8006aa4: 685a ldr r2, [r3, #4]
  15456. 8006aa6: 687b ldr r3, [r7, #4]
  15457. 8006aa8: 681b ldr r3, [r3, #0]
  15458. 8006aaa: f042 0202 orr.w r2, r2, #2
  15459. 8006aae: 605a str r2, [r3, #4]
  15460. }
  15461. }
  15462. /* Change DAC state */
  15463. hdac->State = HAL_DAC_STATE_READY;
  15464. 8006ab0: 687b ldr r3, [r7, #4]
  15465. 8006ab2: 2201 movs r2, #1
  15466. 8006ab4: 711a strb r2, [r3, #4]
  15467. /* Process unlocked */
  15468. __HAL_UNLOCK(hdac);
  15469. 8006ab6: 687b ldr r3, [r7, #4]
  15470. 8006ab8: 2200 movs r2, #0
  15471. 8006aba: 715a strb r2, [r3, #5]
  15472. /* Return function status */
  15473. return HAL_OK;
  15474. 8006abc: 2300 movs r3, #0
  15475. }
  15476. 8006abe: 4618 mov r0, r3
  15477. 8006ac0: 370c adds r7, #12
  15478. 8006ac2: 46bd mov sp, r7
  15479. 8006ac4: f85d 7b04 ldr.w r7, [sp], #4
  15480. 8006ac8: 4770 bx lr
  15481. 08006aca <HAL_DAC_IRQHandler>:
  15482. * @param hdac pointer to a DAC_HandleTypeDef structure that contains
  15483. * the configuration information for the specified DAC.
  15484. * @retval None
  15485. */
  15486. void HAL_DAC_IRQHandler(DAC_HandleTypeDef *hdac)
  15487. {
  15488. 8006aca: b580 push {r7, lr}
  15489. 8006acc: b084 sub sp, #16
  15490. 8006ace: af00 add r7, sp, #0
  15491. 8006ad0: 6078 str r0, [r7, #4]
  15492. uint32_t itsource = hdac->Instance->CR;
  15493. 8006ad2: 687b ldr r3, [r7, #4]
  15494. 8006ad4: 681b ldr r3, [r3, #0]
  15495. 8006ad6: 681b ldr r3, [r3, #0]
  15496. 8006ad8: 60fb str r3, [r7, #12]
  15497. uint32_t itflag = hdac->Instance->SR;
  15498. 8006ada: 687b ldr r3, [r7, #4]
  15499. 8006adc: 681b ldr r3, [r3, #0]
  15500. 8006ade: 6b5b ldr r3, [r3, #52] @ 0x34
  15501. 8006ae0: 60bb str r3, [r7, #8]
  15502. if ((itsource & DAC_IT_DMAUDR1) == DAC_IT_DMAUDR1)
  15503. 8006ae2: 68fb ldr r3, [r7, #12]
  15504. 8006ae4: f403 5300 and.w r3, r3, #8192 @ 0x2000
  15505. 8006ae8: 2b00 cmp r3, #0
  15506. 8006aea: d01d beq.n 8006b28 <HAL_DAC_IRQHandler+0x5e>
  15507. {
  15508. /* Check underrun flag of DAC channel 1 */
  15509. if ((itflag & DAC_FLAG_DMAUDR1) == DAC_FLAG_DMAUDR1)
  15510. 8006aec: 68bb ldr r3, [r7, #8]
  15511. 8006aee: f403 5300 and.w r3, r3, #8192 @ 0x2000
  15512. 8006af2: 2b00 cmp r3, #0
  15513. 8006af4: d018 beq.n 8006b28 <HAL_DAC_IRQHandler+0x5e>
  15514. {
  15515. /* Change DAC state to error state */
  15516. hdac->State = HAL_DAC_STATE_ERROR;
  15517. 8006af6: 687b ldr r3, [r7, #4]
  15518. 8006af8: 2204 movs r2, #4
  15519. 8006afa: 711a strb r2, [r3, #4]
  15520. /* Set DAC error code to channel1 DMA underrun error */
  15521. SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_DMAUNDERRUNCH1);
  15522. 8006afc: 687b ldr r3, [r7, #4]
  15523. 8006afe: 691b ldr r3, [r3, #16]
  15524. 8006b00: f043 0201 orr.w r2, r3, #1
  15525. 8006b04: 687b ldr r3, [r7, #4]
  15526. 8006b06: 611a str r2, [r3, #16]
  15527. /* Clear the underrun flag */
  15528. __HAL_DAC_CLEAR_FLAG(hdac, DAC_FLAG_DMAUDR1);
  15529. 8006b08: 687b ldr r3, [r7, #4]
  15530. 8006b0a: 681b ldr r3, [r3, #0]
  15531. 8006b0c: f44f 5200 mov.w r2, #8192 @ 0x2000
  15532. 8006b10: 635a str r2, [r3, #52] @ 0x34
  15533. /* Disable the selected DAC channel1 DMA request */
  15534. __HAL_DAC_DISABLE_IT(hdac, DAC_CR_DMAEN1);
  15535. 8006b12: 687b ldr r3, [r7, #4]
  15536. 8006b14: 681b ldr r3, [r3, #0]
  15537. 8006b16: 681a ldr r2, [r3, #0]
  15538. 8006b18: 687b ldr r3, [r7, #4]
  15539. 8006b1a: 681b ldr r3, [r3, #0]
  15540. 8006b1c: f422 5280 bic.w r2, r2, #4096 @ 0x1000
  15541. 8006b20: 601a str r2, [r3, #0]
  15542. /* Error callback */
  15543. #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
  15544. hdac->DMAUnderrunCallbackCh1(hdac);
  15545. #else
  15546. HAL_DAC_DMAUnderrunCallbackCh1(hdac);
  15547. 8006b22: 6878 ldr r0, [r7, #4]
  15548. 8006b24: f000 f851 bl 8006bca <HAL_DAC_DMAUnderrunCallbackCh1>
  15549. #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
  15550. }
  15551. }
  15552. if ((itsource & DAC_IT_DMAUDR2) == DAC_IT_DMAUDR2)
  15553. 8006b28: 68fb ldr r3, [r7, #12]
  15554. 8006b2a: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  15555. 8006b2e: 2b00 cmp r3, #0
  15556. 8006b30: d01d beq.n 8006b6e <HAL_DAC_IRQHandler+0xa4>
  15557. {
  15558. /* Check underrun flag of DAC channel 2 */
  15559. if ((itflag & DAC_FLAG_DMAUDR2) == DAC_FLAG_DMAUDR2)
  15560. 8006b32: 68bb ldr r3, [r7, #8]
  15561. 8006b34: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  15562. 8006b38: 2b00 cmp r3, #0
  15563. 8006b3a: d018 beq.n 8006b6e <HAL_DAC_IRQHandler+0xa4>
  15564. {
  15565. /* Change DAC state to error state */
  15566. hdac->State = HAL_DAC_STATE_ERROR;
  15567. 8006b3c: 687b ldr r3, [r7, #4]
  15568. 8006b3e: 2204 movs r2, #4
  15569. 8006b40: 711a strb r2, [r3, #4]
  15570. /* Set DAC error code to channel2 DMA underrun error */
  15571. SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_DMAUNDERRUNCH2);
  15572. 8006b42: 687b ldr r3, [r7, #4]
  15573. 8006b44: 691b ldr r3, [r3, #16]
  15574. 8006b46: f043 0202 orr.w r2, r3, #2
  15575. 8006b4a: 687b ldr r3, [r7, #4]
  15576. 8006b4c: 611a str r2, [r3, #16]
  15577. /* Clear the underrun flag */
  15578. __HAL_DAC_CLEAR_FLAG(hdac, DAC_FLAG_DMAUDR2);
  15579. 8006b4e: 687b ldr r3, [r7, #4]
  15580. 8006b50: 681b ldr r3, [r3, #0]
  15581. 8006b52: f04f 5200 mov.w r2, #536870912 @ 0x20000000
  15582. 8006b56: 635a str r2, [r3, #52] @ 0x34
  15583. /* Disable the selected DAC channel2 DMA request */
  15584. __HAL_DAC_DISABLE_IT(hdac, DAC_CR_DMAEN2);
  15585. 8006b58: 687b ldr r3, [r7, #4]
  15586. 8006b5a: 681b ldr r3, [r3, #0]
  15587. 8006b5c: 681a ldr r2, [r3, #0]
  15588. 8006b5e: 687b ldr r3, [r7, #4]
  15589. 8006b60: 681b ldr r3, [r3, #0]
  15590. 8006b62: f022 5280 bic.w r2, r2, #268435456 @ 0x10000000
  15591. 8006b66: 601a str r2, [r3, #0]
  15592. /* Error callback */
  15593. #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
  15594. hdac->DMAUnderrunCallbackCh2(hdac);
  15595. #else
  15596. HAL_DACEx_DMAUnderrunCallbackCh2(hdac);
  15597. 8006b68: 6878 ldr r0, [r7, #4]
  15598. 8006b6a: f000 f97b bl 8006e64 <HAL_DACEx_DMAUnderrunCallbackCh2>
  15599. #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
  15600. }
  15601. }
  15602. }
  15603. 8006b6e: bf00 nop
  15604. 8006b70: 3710 adds r7, #16
  15605. 8006b72: 46bd mov sp, r7
  15606. 8006b74: bd80 pop {r7, pc}
  15607. 08006b76 <HAL_DAC_SetValue>:
  15608. * @arg DAC_ALIGN_12B_R: 12bit right data alignment selected
  15609. * @param Data Data to be loaded in the selected data holding register.
  15610. * @retval HAL status
  15611. */
  15612. HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef *hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data)
  15613. {
  15614. 8006b76: b480 push {r7}
  15615. 8006b78: b087 sub sp, #28
  15616. 8006b7a: af00 add r7, sp, #0
  15617. 8006b7c: 60f8 str r0, [r7, #12]
  15618. 8006b7e: 60b9 str r1, [r7, #8]
  15619. 8006b80: 607a str r2, [r7, #4]
  15620. 8006b82: 603b str r3, [r7, #0]
  15621. __IO uint32_t tmp = 0UL;
  15622. 8006b84: 2300 movs r3, #0
  15623. 8006b86: 617b str r3, [r7, #20]
  15624. /* Check the DAC peripheral handle */
  15625. if (hdac == NULL)
  15626. 8006b88: 68fb ldr r3, [r7, #12]
  15627. 8006b8a: 2b00 cmp r3, #0
  15628. 8006b8c: d101 bne.n 8006b92 <HAL_DAC_SetValue+0x1c>
  15629. {
  15630. return HAL_ERROR;
  15631. 8006b8e: 2301 movs r3, #1
  15632. 8006b90: e015 b.n 8006bbe <HAL_DAC_SetValue+0x48>
  15633. /* Check the parameters */
  15634. assert_param(IS_DAC_CHANNEL(Channel));
  15635. assert_param(IS_DAC_ALIGN(Alignment));
  15636. assert_param(IS_DAC_DATA(Data));
  15637. tmp = (uint32_t)hdac->Instance;
  15638. 8006b92: 68fb ldr r3, [r7, #12]
  15639. 8006b94: 681b ldr r3, [r3, #0]
  15640. 8006b96: 617b str r3, [r7, #20]
  15641. if (Channel == DAC_CHANNEL_1)
  15642. 8006b98: 68bb ldr r3, [r7, #8]
  15643. 8006b9a: 2b00 cmp r3, #0
  15644. 8006b9c: d105 bne.n 8006baa <HAL_DAC_SetValue+0x34>
  15645. {
  15646. tmp += DAC_DHR12R1_ALIGNMENT(Alignment);
  15647. 8006b9e: 697a ldr r2, [r7, #20]
  15648. 8006ba0: 687b ldr r3, [r7, #4]
  15649. 8006ba2: 4413 add r3, r2
  15650. 8006ba4: 3308 adds r3, #8
  15651. 8006ba6: 617b str r3, [r7, #20]
  15652. 8006ba8: e004 b.n 8006bb4 <HAL_DAC_SetValue+0x3e>
  15653. }
  15654. else
  15655. {
  15656. tmp += DAC_DHR12R2_ALIGNMENT(Alignment);
  15657. 8006baa: 697a ldr r2, [r7, #20]
  15658. 8006bac: 687b ldr r3, [r7, #4]
  15659. 8006bae: 4413 add r3, r2
  15660. 8006bb0: 3314 adds r3, #20
  15661. 8006bb2: 617b str r3, [r7, #20]
  15662. }
  15663. /* Set the DAC channel selected data holding register */
  15664. *(__IO uint32_t *) tmp = Data;
  15665. 8006bb4: 697b ldr r3, [r7, #20]
  15666. 8006bb6: 461a mov r2, r3
  15667. 8006bb8: 683b ldr r3, [r7, #0]
  15668. 8006bba: 6013 str r3, [r2, #0]
  15669. /* Return function status */
  15670. return HAL_OK;
  15671. 8006bbc: 2300 movs r3, #0
  15672. }
  15673. 8006bbe: 4618 mov r0, r3
  15674. 8006bc0: 371c adds r7, #28
  15675. 8006bc2: 46bd mov sp, r7
  15676. 8006bc4: f85d 7b04 ldr.w r7, [sp], #4
  15677. 8006bc8: 4770 bx lr
  15678. 08006bca <HAL_DAC_DMAUnderrunCallbackCh1>:
  15679. * @param hdac pointer to a DAC_HandleTypeDef structure that contains
  15680. * the configuration information for the specified DAC.
  15681. * @retval None
  15682. */
  15683. __weak void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac)
  15684. {
  15685. 8006bca: b480 push {r7}
  15686. 8006bcc: b083 sub sp, #12
  15687. 8006bce: af00 add r7, sp, #0
  15688. 8006bd0: 6078 str r0, [r7, #4]
  15689. UNUSED(hdac);
  15690. /* NOTE : This function should not be modified, when the callback is needed,
  15691. the HAL_DAC_DMAUnderrunCallbackCh1 could be implemented in the user file
  15692. */
  15693. }
  15694. 8006bd2: bf00 nop
  15695. 8006bd4: 370c adds r7, #12
  15696. 8006bd6: 46bd mov sp, r7
  15697. 8006bd8: f85d 7b04 ldr.w r7, [sp], #4
  15698. 8006bdc: 4770 bx lr
  15699. ...
  15700. 08006be0 <HAL_DAC_ConfigChannel>:
  15701. * @arg DAC_CHANNEL_2: DAC Channel2 selected
  15702. * @retval HAL status
  15703. */
  15704. HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef *hdac,
  15705. const DAC_ChannelConfTypeDef *sConfig, uint32_t Channel)
  15706. {
  15707. 8006be0: b580 push {r7, lr}
  15708. 8006be2: b08a sub sp, #40 @ 0x28
  15709. 8006be4: af00 add r7, sp, #0
  15710. 8006be6: 60f8 str r0, [r7, #12]
  15711. 8006be8: 60b9 str r1, [r7, #8]
  15712. 8006bea: 607a str r2, [r7, #4]
  15713. HAL_StatusTypeDef status = HAL_OK;
  15714. 8006bec: 2300 movs r3, #0
  15715. 8006bee: f887 3023 strb.w r3, [r7, #35] @ 0x23
  15716. uint32_t tmpreg2;
  15717. uint32_t tickstart;
  15718. uint32_t connectOnChip;
  15719. /* Check the DAC peripheral handle and channel configuration struct */
  15720. if ((hdac == NULL) || (sConfig == NULL))
  15721. 8006bf2: 68fb ldr r3, [r7, #12]
  15722. 8006bf4: 2b00 cmp r3, #0
  15723. 8006bf6: d002 beq.n 8006bfe <HAL_DAC_ConfigChannel+0x1e>
  15724. 8006bf8: 68bb ldr r3, [r7, #8]
  15725. 8006bfa: 2b00 cmp r3, #0
  15726. 8006bfc: d101 bne.n 8006c02 <HAL_DAC_ConfigChannel+0x22>
  15727. {
  15728. return HAL_ERROR;
  15729. 8006bfe: 2301 movs r3, #1
  15730. 8006c00: e12a b.n 8006e58 <HAL_DAC_ConfigChannel+0x278>
  15731. assert_param(IS_DAC_REFRESHTIME(sConfig->DAC_SampleAndHoldConfig.DAC_RefreshTime));
  15732. }
  15733. assert_param(IS_DAC_CHANNEL(Channel));
  15734. /* Process locked */
  15735. __HAL_LOCK(hdac);
  15736. 8006c02: 68fb ldr r3, [r7, #12]
  15737. 8006c04: 795b ldrb r3, [r3, #5]
  15738. 8006c06: 2b01 cmp r3, #1
  15739. 8006c08: d101 bne.n 8006c0e <HAL_DAC_ConfigChannel+0x2e>
  15740. 8006c0a: 2302 movs r3, #2
  15741. 8006c0c: e124 b.n 8006e58 <HAL_DAC_ConfigChannel+0x278>
  15742. 8006c0e: 68fb ldr r3, [r7, #12]
  15743. 8006c10: 2201 movs r2, #1
  15744. 8006c12: 715a strb r2, [r3, #5]
  15745. /* Change DAC state */
  15746. hdac->State = HAL_DAC_STATE_BUSY;
  15747. 8006c14: 68fb ldr r3, [r7, #12]
  15748. 8006c16: 2202 movs r2, #2
  15749. 8006c18: 711a strb r2, [r3, #4]
  15750. /* Sample and hold configuration */
  15751. if (sConfig->DAC_SampleAndHold == DAC_SAMPLEANDHOLD_ENABLE)
  15752. 8006c1a: 68bb ldr r3, [r7, #8]
  15753. 8006c1c: 681b ldr r3, [r3, #0]
  15754. 8006c1e: 2b04 cmp r3, #4
  15755. 8006c20: d17a bne.n 8006d18 <HAL_DAC_ConfigChannel+0x138>
  15756. {
  15757. /* Get timeout */
  15758. tickstart = HAL_GetTick();
  15759. 8006c22: f7fd ff1f bl 8004a64 <HAL_GetTick>
  15760. 8006c26: 61f8 str r0, [r7, #28]
  15761. if (Channel == DAC_CHANNEL_1)
  15762. 8006c28: 687b ldr r3, [r7, #4]
  15763. 8006c2a: 2b00 cmp r3, #0
  15764. 8006c2c: d13d bne.n 8006caa <HAL_DAC_ConfigChannel+0xca>
  15765. {
  15766. /* SHSR1 can be written when BWST1 is cleared */
  15767. while (((hdac->Instance->SR) & DAC_SR_BWST1) != 0UL)
  15768. 8006c2e: e018 b.n 8006c62 <HAL_DAC_ConfigChannel+0x82>
  15769. {
  15770. /* Check for the Timeout */
  15771. if ((HAL_GetTick() - tickstart) > TIMEOUT_DAC_CALIBCONFIG)
  15772. 8006c30: f7fd ff18 bl 8004a64 <HAL_GetTick>
  15773. 8006c34: 4602 mov r2, r0
  15774. 8006c36: 69fb ldr r3, [r7, #28]
  15775. 8006c38: 1ad3 subs r3, r2, r3
  15776. 8006c3a: 2b01 cmp r3, #1
  15777. 8006c3c: d911 bls.n 8006c62 <HAL_DAC_ConfigChannel+0x82>
  15778. {
  15779. /* New check to avoid false timeout detection in case of preemption */
  15780. if (((hdac->Instance->SR) & DAC_SR_BWST1) != 0UL)
  15781. 8006c3e: 68fb ldr r3, [r7, #12]
  15782. 8006c40: 681b ldr r3, [r3, #0]
  15783. 8006c42: 6b5a ldr r2, [r3, #52] @ 0x34
  15784. 8006c44: 4b86 ldr r3, [pc, #536] @ (8006e60 <HAL_DAC_ConfigChannel+0x280>)
  15785. 8006c46: 4013 ands r3, r2
  15786. 8006c48: 2b00 cmp r3, #0
  15787. 8006c4a: d00a beq.n 8006c62 <HAL_DAC_ConfigChannel+0x82>
  15788. {
  15789. /* Update error code */
  15790. SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_TIMEOUT);
  15791. 8006c4c: 68fb ldr r3, [r7, #12]
  15792. 8006c4e: 691b ldr r3, [r3, #16]
  15793. 8006c50: f043 0208 orr.w r2, r3, #8
  15794. 8006c54: 68fb ldr r3, [r7, #12]
  15795. 8006c56: 611a str r2, [r3, #16]
  15796. /* Change the DMA state */
  15797. hdac->State = HAL_DAC_STATE_TIMEOUT;
  15798. 8006c58: 68fb ldr r3, [r7, #12]
  15799. 8006c5a: 2203 movs r2, #3
  15800. 8006c5c: 711a strb r2, [r3, #4]
  15801. return HAL_TIMEOUT;
  15802. 8006c5e: 2303 movs r3, #3
  15803. 8006c60: e0fa b.n 8006e58 <HAL_DAC_ConfigChannel+0x278>
  15804. while (((hdac->Instance->SR) & DAC_SR_BWST1) != 0UL)
  15805. 8006c62: 68fb ldr r3, [r7, #12]
  15806. 8006c64: 681b ldr r3, [r3, #0]
  15807. 8006c66: 6b5a ldr r2, [r3, #52] @ 0x34
  15808. 8006c68: 4b7d ldr r3, [pc, #500] @ (8006e60 <HAL_DAC_ConfigChannel+0x280>)
  15809. 8006c6a: 4013 ands r3, r2
  15810. 8006c6c: 2b00 cmp r3, #0
  15811. 8006c6e: d1df bne.n 8006c30 <HAL_DAC_ConfigChannel+0x50>
  15812. }
  15813. }
  15814. }
  15815. hdac->Instance->SHSR1 = sConfig->DAC_SampleAndHoldConfig.DAC_SampleTime;
  15816. 8006c70: 68fb ldr r3, [r7, #12]
  15817. 8006c72: 681b ldr r3, [r3, #0]
  15818. 8006c74: 68ba ldr r2, [r7, #8]
  15819. 8006c76: 6992 ldr r2, [r2, #24]
  15820. 8006c78: 641a str r2, [r3, #64] @ 0x40
  15821. 8006c7a: e020 b.n 8006cbe <HAL_DAC_ConfigChannel+0xde>
  15822. {
  15823. /* SHSR2 can be written when BWST2 is cleared */
  15824. while (((hdac->Instance->SR) & DAC_SR_BWST2) != 0UL)
  15825. {
  15826. /* Check for the Timeout */
  15827. if ((HAL_GetTick() - tickstart) > TIMEOUT_DAC_CALIBCONFIG)
  15828. 8006c7c: f7fd fef2 bl 8004a64 <HAL_GetTick>
  15829. 8006c80: 4602 mov r2, r0
  15830. 8006c82: 69fb ldr r3, [r7, #28]
  15831. 8006c84: 1ad3 subs r3, r2, r3
  15832. 8006c86: 2b01 cmp r3, #1
  15833. 8006c88: d90f bls.n 8006caa <HAL_DAC_ConfigChannel+0xca>
  15834. {
  15835. /* New check to avoid false timeout detection in case of preemption */
  15836. if (((hdac->Instance->SR) & DAC_SR_BWST2) != 0UL)
  15837. 8006c8a: 68fb ldr r3, [r7, #12]
  15838. 8006c8c: 681b ldr r3, [r3, #0]
  15839. 8006c8e: 6b5b ldr r3, [r3, #52] @ 0x34
  15840. 8006c90: 2b00 cmp r3, #0
  15841. 8006c92: da0a bge.n 8006caa <HAL_DAC_ConfigChannel+0xca>
  15842. {
  15843. /* Update error code */
  15844. SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_TIMEOUT);
  15845. 8006c94: 68fb ldr r3, [r7, #12]
  15846. 8006c96: 691b ldr r3, [r3, #16]
  15847. 8006c98: f043 0208 orr.w r2, r3, #8
  15848. 8006c9c: 68fb ldr r3, [r7, #12]
  15849. 8006c9e: 611a str r2, [r3, #16]
  15850. /* Change the DMA state */
  15851. hdac->State = HAL_DAC_STATE_TIMEOUT;
  15852. 8006ca0: 68fb ldr r3, [r7, #12]
  15853. 8006ca2: 2203 movs r2, #3
  15854. 8006ca4: 711a strb r2, [r3, #4]
  15855. return HAL_TIMEOUT;
  15856. 8006ca6: 2303 movs r3, #3
  15857. 8006ca8: e0d6 b.n 8006e58 <HAL_DAC_ConfigChannel+0x278>
  15858. while (((hdac->Instance->SR) & DAC_SR_BWST2) != 0UL)
  15859. 8006caa: 68fb ldr r3, [r7, #12]
  15860. 8006cac: 681b ldr r3, [r3, #0]
  15861. 8006cae: 6b5b ldr r3, [r3, #52] @ 0x34
  15862. 8006cb0: 2b00 cmp r3, #0
  15863. 8006cb2: dbe3 blt.n 8006c7c <HAL_DAC_ConfigChannel+0x9c>
  15864. }
  15865. }
  15866. }
  15867. hdac->Instance->SHSR2 = sConfig->DAC_SampleAndHoldConfig.DAC_SampleTime;
  15868. 8006cb4: 68fb ldr r3, [r7, #12]
  15869. 8006cb6: 681b ldr r3, [r3, #0]
  15870. 8006cb8: 68ba ldr r2, [r7, #8]
  15871. 8006cba: 6992 ldr r2, [r2, #24]
  15872. 8006cbc: 645a str r2, [r3, #68] @ 0x44
  15873. }
  15874. /* HoldTime */
  15875. MODIFY_REG(hdac->Instance->SHHR, DAC_SHHR_THOLD1 << (Channel & 0x10UL),
  15876. 8006cbe: 68fb ldr r3, [r7, #12]
  15877. 8006cc0: 681b ldr r3, [r3, #0]
  15878. 8006cc2: 6c9a ldr r2, [r3, #72] @ 0x48
  15879. 8006cc4: 687b ldr r3, [r7, #4]
  15880. 8006cc6: f003 0310 and.w r3, r3, #16
  15881. 8006cca: f240 31ff movw r1, #1023 @ 0x3ff
  15882. 8006cce: fa01 f303 lsl.w r3, r1, r3
  15883. 8006cd2: 43db mvns r3, r3
  15884. 8006cd4: ea02 0103 and.w r1, r2, r3
  15885. 8006cd8: 68bb ldr r3, [r7, #8]
  15886. 8006cda: 69da ldr r2, [r3, #28]
  15887. 8006cdc: 687b ldr r3, [r7, #4]
  15888. 8006cde: f003 0310 and.w r3, r3, #16
  15889. 8006ce2: 409a lsls r2, r3
  15890. 8006ce4: 68fb ldr r3, [r7, #12]
  15891. 8006ce6: 681b ldr r3, [r3, #0]
  15892. 8006ce8: 430a orrs r2, r1
  15893. 8006cea: 649a str r2, [r3, #72] @ 0x48
  15894. (sConfig->DAC_SampleAndHoldConfig.DAC_HoldTime) << (Channel & 0x10UL));
  15895. /* RefreshTime */
  15896. MODIFY_REG(hdac->Instance->SHRR, DAC_SHRR_TREFRESH1 << (Channel & 0x10UL),
  15897. 8006cec: 68fb ldr r3, [r7, #12]
  15898. 8006cee: 681b ldr r3, [r3, #0]
  15899. 8006cf0: 6cda ldr r2, [r3, #76] @ 0x4c
  15900. 8006cf2: 687b ldr r3, [r7, #4]
  15901. 8006cf4: f003 0310 and.w r3, r3, #16
  15902. 8006cf8: 21ff movs r1, #255 @ 0xff
  15903. 8006cfa: fa01 f303 lsl.w r3, r1, r3
  15904. 8006cfe: 43db mvns r3, r3
  15905. 8006d00: ea02 0103 and.w r1, r2, r3
  15906. 8006d04: 68bb ldr r3, [r7, #8]
  15907. 8006d06: 6a1a ldr r2, [r3, #32]
  15908. 8006d08: 687b ldr r3, [r7, #4]
  15909. 8006d0a: f003 0310 and.w r3, r3, #16
  15910. 8006d0e: 409a lsls r2, r3
  15911. 8006d10: 68fb ldr r3, [r7, #12]
  15912. 8006d12: 681b ldr r3, [r3, #0]
  15913. 8006d14: 430a orrs r2, r1
  15914. 8006d16: 64da str r2, [r3, #76] @ 0x4c
  15915. (sConfig->DAC_SampleAndHoldConfig.DAC_RefreshTime) << (Channel & 0x10UL));
  15916. }
  15917. if (sConfig->DAC_UserTrimming == DAC_TRIMMING_USER)
  15918. 8006d18: 68bb ldr r3, [r7, #8]
  15919. 8006d1a: 691b ldr r3, [r3, #16]
  15920. 8006d1c: 2b01 cmp r3, #1
  15921. 8006d1e: d11d bne.n 8006d5c <HAL_DAC_ConfigChannel+0x17c>
  15922. /* USER TRIMMING */
  15923. {
  15924. /* Get the DAC CCR value */
  15925. tmpreg1 = hdac->Instance->CCR;
  15926. 8006d20: 68fb ldr r3, [r7, #12]
  15927. 8006d22: 681b ldr r3, [r3, #0]
  15928. 8006d24: 6b9b ldr r3, [r3, #56] @ 0x38
  15929. 8006d26: 61bb str r3, [r7, #24]
  15930. /* Clear trimming value */
  15931. tmpreg1 &= ~(((uint32_t)(DAC_CCR_OTRIM1)) << (Channel & 0x10UL));
  15932. 8006d28: 687b ldr r3, [r7, #4]
  15933. 8006d2a: f003 0310 and.w r3, r3, #16
  15934. 8006d2e: 221f movs r2, #31
  15935. 8006d30: fa02 f303 lsl.w r3, r2, r3
  15936. 8006d34: 43db mvns r3, r3
  15937. 8006d36: 69ba ldr r2, [r7, #24]
  15938. 8006d38: 4013 ands r3, r2
  15939. 8006d3a: 61bb str r3, [r7, #24]
  15940. /* Configure for the selected trimming offset */
  15941. tmpreg2 = sConfig->DAC_TrimmingValue;
  15942. 8006d3c: 68bb ldr r3, [r7, #8]
  15943. 8006d3e: 695b ldr r3, [r3, #20]
  15944. 8006d40: 617b str r3, [r7, #20]
  15945. /* Calculate CCR register value depending on DAC_Channel */
  15946. tmpreg1 |= tmpreg2 << (Channel & 0x10UL);
  15947. 8006d42: 687b ldr r3, [r7, #4]
  15948. 8006d44: f003 0310 and.w r3, r3, #16
  15949. 8006d48: 697a ldr r2, [r7, #20]
  15950. 8006d4a: fa02 f303 lsl.w r3, r2, r3
  15951. 8006d4e: 69ba ldr r2, [r7, #24]
  15952. 8006d50: 4313 orrs r3, r2
  15953. 8006d52: 61bb str r3, [r7, #24]
  15954. /* Write to DAC CCR */
  15955. hdac->Instance->CCR = tmpreg1;
  15956. 8006d54: 68fb ldr r3, [r7, #12]
  15957. 8006d56: 681b ldr r3, [r3, #0]
  15958. 8006d58: 69ba ldr r2, [r7, #24]
  15959. 8006d5a: 639a str r2, [r3, #56] @ 0x38
  15960. }
  15961. /* else factory trimming is used (factory setting are available at reset)*/
  15962. /* SW Nothing has nothing to do */
  15963. /* Get the DAC MCR value */
  15964. tmpreg1 = hdac->Instance->MCR;
  15965. 8006d5c: 68fb ldr r3, [r7, #12]
  15966. 8006d5e: 681b ldr r3, [r3, #0]
  15967. 8006d60: 6bdb ldr r3, [r3, #60] @ 0x3c
  15968. 8006d62: 61bb str r3, [r7, #24]
  15969. /* Clear DAC_MCR_MODEx bits */
  15970. tmpreg1 &= ~(((uint32_t)(DAC_MCR_MODE1)) << (Channel & 0x10UL));
  15971. 8006d64: 687b ldr r3, [r7, #4]
  15972. 8006d66: f003 0310 and.w r3, r3, #16
  15973. 8006d6a: 2207 movs r2, #7
  15974. 8006d6c: fa02 f303 lsl.w r3, r2, r3
  15975. 8006d70: 43db mvns r3, r3
  15976. 8006d72: 69ba ldr r2, [r7, #24]
  15977. 8006d74: 4013 ands r3, r2
  15978. 8006d76: 61bb str r3, [r7, #24]
  15979. /* Configure for the selected DAC channel: mode, buffer output & on chip peripheral connect */
  15980. if (sConfig->DAC_ConnectOnChipPeripheral == DAC_CHIPCONNECT_EXTERNAL)
  15981. 8006d78: 68bb ldr r3, [r7, #8]
  15982. 8006d7a: 68db ldr r3, [r3, #12]
  15983. 8006d7c: 2b01 cmp r3, #1
  15984. 8006d7e: d102 bne.n 8006d86 <HAL_DAC_ConfigChannel+0x1a6>
  15985. {
  15986. connectOnChip = 0x00000000UL;
  15987. 8006d80: 2300 movs r3, #0
  15988. 8006d82: 627b str r3, [r7, #36] @ 0x24
  15989. 8006d84: e00f b.n 8006da6 <HAL_DAC_ConfigChannel+0x1c6>
  15990. }
  15991. else if (sConfig->DAC_ConnectOnChipPeripheral == DAC_CHIPCONNECT_INTERNAL)
  15992. 8006d86: 68bb ldr r3, [r7, #8]
  15993. 8006d88: 68db ldr r3, [r3, #12]
  15994. 8006d8a: 2b02 cmp r3, #2
  15995. 8006d8c: d102 bne.n 8006d94 <HAL_DAC_ConfigChannel+0x1b4>
  15996. {
  15997. connectOnChip = DAC_MCR_MODE1_0;
  15998. 8006d8e: 2301 movs r3, #1
  15999. 8006d90: 627b str r3, [r7, #36] @ 0x24
  16000. 8006d92: e008 b.n 8006da6 <HAL_DAC_ConfigChannel+0x1c6>
  16001. }
  16002. else /* (sConfig->DAC_ConnectOnChipPeripheral == DAC_CHIPCONNECT_BOTH) */
  16003. {
  16004. if (sConfig->DAC_OutputBuffer == DAC_OUTPUTBUFFER_ENABLE)
  16005. 8006d94: 68bb ldr r3, [r7, #8]
  16006. 8006d96: 689b ldr r3, [r3, #8]
  16007. 8006d98: 2b00 cmp r3, #0
  16008. 8006d9a: d102 bne.n 8006da2 <HAL_DAC_ConfigChannel+0x1c2>
  16009. {
  16010. connectOnChip = DAC_MCR_MODE1_0;
  16011. 8006d9c: 2301 movs r3, #1
  16012. 8006d9e: 627b str r3, [r7, #36] @ 0x24
  16013. 8006da0: e001 b.n 8006da6 <HAL_DAC_ConfigChannel+0x1c6>
  16014. }
  16015. else
  16016. {
  16017. connectOnChip = 0x00000000UL;
  16018. 8006da2: 2300 movs r3, #0
  16019. 8006da4: 627b str r3, [r7, #36] @ 0x24
  16020. }
  16021. }
  16022. tmpreg2 = (sConfig->DAC_SampleAndHold | sConfig->DAC_OutputBuffer | connectOnChip);
  16023. 8006da6: 68bb ldr r3, [r7, #8]
  16024. 8006da8: 681a ldr r2, [r3, #0]
  16025. 8006daa: 68bb ldr r3, [r7, #8]
  16026. 8006dac: 689b ldr r3, [r3, #8]
  16027. 8006dae: 4313 orrs r3, r2
  16028. 8006db0: 6a7a ldr r2, [r7, #36] @ 0x24
  16029. 8006db2: 4313 orrs r3, r2
  16030. 8006db4: 617b str r3, [r7, #20]
  16031. /* Calculate MCR register value depending on DAC_Channel */
  16032. tmpreg1 |= tmpreg2 << (Channel & 0x10UL);
  16033. 8006db6: 687b ldr r3, [r7, #4]
  16034. 8006db8: f003 0310 and.w r3, r3, #16
  16035. 8006dbc: 697a ldr r2, [r7, #20]
  16036. 8006dbe: fa02 f303 lsl.w r3, r2, r3
  16037. 8006dc2: 69ba ldr r2, [r7, #24]
  16038. 8006dc4: 4313 orrs r3, r2
  16039. 8006dc6: 61bb str r3, [r7, #24]
  16040. /* Write to DAC MCR */
  16041. hdac->Instance->MCR = tmpreg1;
  16042. 8006dc8: 68fb ldr r3, [r7, #12]
  16043. 8006dca: 681b ldr r3, [r3, #0]
  16044. 8006dcc: 69ba ldr r2, [r7, #24]
  16045. 8006dce: 63da str r2, [r3, #60] @ 0x3c
  16046. /* DAC in normal operating mode hence clear DAC_CR_CENx bit */
  16047. CLEAR_BIT(hdac->Instance->CR, DAC_CR_CEN1 << (Channel & 0x10UL));
  16048. 8006dd0: 68fb ldr r3, [r7, #12]
  16049. 8006dd2: 681b ldr r3, [r3, #0]
  16050. 8006dd4: 6819 ldr r1, [r3, #0]
  16051. 8006dd6: 687b ldr r3, [r7, #4]
  16052. 8006dd8: f003 0310 and.w r3, r3, #16
  16053. 8006ddc: f44f 4280 mov.w r2, #16384 @ 0x4000
  16054. 8006de0: fa02 f303 lsl.w r3, r2, r3
  16055. 8006de4: 43da mvns r2, r3
  16056. 8006de6: 68fb ldr r3, [r7, #12]
  16057. 8006de8: 681b ldr r3, [r3, #0]
  16058. 8006dea: 400a ands r2, r1
  16059. 8006dec: 601a str r2, [r3, #0]
  16060. /* Get the DAC CR value */
  16061. tmpreg1 = hdac->Instance->CR;
  16062. 8006dee: 68fb ldr r3, [r7, #12]
  16063. 8006df0: 681b ldr r3, [r3, #0]
  16064. 8006df2: 681b ldr r3, [r3, #0]
  16065. 8006df4: 61bb str r3, [r7, #24]
  16066. /* Clear TENx, TSELx, WAVEx and MAMPx bits */
  16067. tmpreg1 &= ~(((uint32_t)(DAC_CR_MAMP1 | DAC_CR_WAVE1 | DAC_CR_TSEL1 | DAC_CR_TEN1)) << (Channel & 0x10UL));
  16068. 8006df6: 687b ldr r3, [r7, #4]
  16069. 8006df8: f003 0310 and.w r3, r3, #16
  16070. 8006dfc: f640 72fe movw r2, #4094 @ 0xffe
  16071. 8006e00: fa02 f303 lsl.w r3, r2, r3
  16072. 8006e04: 43db mvns r3, r3
  16073. 8006e06: 69ba ldr r2, [r7, #24]
  16074. 8006e08: 4013 ands r3, r2
  16075. 8006e0a: 61bb str r3, [r7, #24]
  16076. /* Configure for the selected DAC channel: trigger */
  16077. /* Set TSELx and TENx bits according to DAC_Trigger value */
  16078. tmpreg2 = sConfig->DAC_Trigger;
  16079. 8006e0c: 68bb ldr r3, [r7, #8]
  16080. 8006e0e: 685b ldr r3, [r3, #4]
  16081. 8006e10: 617b str r3, [r7, #20]
  16082. /* Calculate CR register value depending on DAC_Channel */
  16083. tmpreg1 |= tmpreg2 << (Channel & 0x10UL);
  16084. 8006e12: 687b ldr r3, [r7, #4]
  16085. 8006e14: f003 0310 and.w r3, r3, #16
  16086. 8006e18: 697a ldr r2, [r7, #20]
  16087. 8006e1a: fa02 f303 lsl.w r3, r2, r3
  16088. 8006e1e: 69ba ldr r2, [r7, #24]
  16089. 8006e20: 4313 orrs r3, r2
  16090. 8006e22: 61bb str r3, [r7, #24]
  16091. /* Write to DAC CR */
  16092. hdac->Instance->CR = tmpreg1;
  16093. 8006e24: 68fb ldr r3, [r7, #12]
  16094. 8006e26: 681b ldr r3, [r3, #0]
  16095. 8006e28: 69ba ldr r2, [r7, #24]
  16096. 8006e2a: 601a str r2, [r3, #0]
  16097. /* Disable wave generation */
  16098. CLEAR_BIT(hdac->Instance->CR, (DAC_CR_WAVE1 << (Channel & 0x10UL)));
  16099. 8006e2c: 68fb ldr r3, [r7, #12]
  16100. 8006e2e: 681b ldr r3, [r3, #0]
  16101. 8006e30: 6819 ldr r1, [r3, #0]
  16102. 8006e32: 687b ldr r3, [r7, #4]
  16103. 8006e34: f003 0310 and.w r3, r3, #16
  16104. 8006e38: 22c0 movs r2, #192 @ 0xc0
  16105. 8006e3a: fa02 f303 lsl.w r3, r2, r3
  16106. 8006e3e: 43da mvns r2, r3
  16107. 8006e40: 68fb ldr r3, [r7, #12]
  16108. 8006e42: 681b ldr r3, [r3, #0]
  16109. 8006e44: 400a ands r2, r1
  16110. 8006e46: 601a str r2, [r3, #0]
  16111. /* Change DAC state */
  16112. hdac->State = HAL_DAC_STATE_READY;
  16113. 8006e48: 68fb ldr r3, [r7, #12]
  16114. 8006e4a: 2201 movs r2, #1
  16115. 8006e4c: 711a strb r2, [r3, #4]
  16116. /* Process unlocked */
  16117. __HAL_UNLOCK(hdac);
  16118. 8006e4e: 68fb ldr r3, [r7, #12]
  16119. 8006e50: 2200 movs r2, #0
  16120. 8006e52: 715a strb r2, [r3, #5]
  16121. /* Return function status */
  16122. return status;
  16123. 8006e54: f897 3023 ldrb.w r3, [r7, #35] @ 0x23
  16124. }
  16125. 8006e58: 4618 mov r0, r3
  16126. 8006e5a: 3728 adds r7, #40 @ 0x28
  16127. 8006e5c: 46bd mov sp, r7
  16128. 8006e5e: bd80 pop {r7, pc}
  16129. 8006e60: 20008000 .word 0x20008000
  16130. 08006e64 <HAL_DACEx_DMAUnderrunCallbackCh2>:
  16131. * @param hdac pointer to a DAC_HandleTypeDef structure that contains
  16132. * the configuration information for the specified DAC.
  16133. * @retval None
  16134. */
  16135. __weak void HAL_DACEx_DMAUnderrunCallbackCh2(DAC_HandleTypeDef *hdac)
  16136. {
  16137. 8006e64: b480 push {r7}
  16138. 8006e66: b083 sub sp, #12
  16139. 8006e68: af00 add r7, sp, #0
  16140. 8006e6a: 6078 str r0, [r7, #4]
  16141. UNUSED(hdac);
  16142. /* NOTE : This function should not be modified, when the callback is needed,
  16143. the HAL_DACEx_DMAUnderrunCallbackCh2 could be implemented in the user file
  16144. */
  16145. }
  16146. 8006e6c: bf00 nop
  16147. 8006e6e: 370c adds r7, #12
  16148. 8006e70: 46bd mov sp, r7
  16149. 8006e72: f85d 7b04 ldr.w r7, [sp], #4
  16150. 8006e76: 4770 bx lr
  16151. 08006e78 <HAL_DMA_Init>:
  16152. * @param hdma: Pointer to a DMA_HandleTypeDef structure that contains
  16153. * the configuration information for the specified DMA Stream.
  16154. * @retval HAL status
  16155. */
  16156. HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma)
  16157. {
  16158. 8006e78: b580 push {r7, lr}
  16159. 8006e7a: b086 sub sp, #24
  16160. 8006e7c: af00 add r7, sp, #0
  16161. 8006e7e: 6078 str r0, [r7, #4]
  16162. uint32_t registerValue;
  16163. uint32_t tickstart = HAL_GetTick();
  16164. 8006e80: f7fd fdf0 bl 8004a64 <HAL_GetTick>
  16165. 8006e84: 6138 str r0, [r7, #16]
  16166. DMA_Base_Registers *regs_dma;
  16167. BDMA_Base_Registers *regs_bdma;
  16168. /* Check the DMA peripheral handle */
  16169. if(hdma == NULL)
  16170. 8006e86: 687b ldr r3, [r7, #4]
  16171. 8006e88: 2b00 cmp r3, #0
  16172. 8006e8a: d101 bne.n 8006e90 <HAL_DMA_Init+0x18>
  16173. {
  16174. return HAL_ERROR;
  16175. 8006e8c: 2301 movs r3, #1
  16176. 8006e8e: e316 b.n 80074be <HAL_DMA_Init+0x646>
  16177. assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(hdma->Init.PeriphDataAlignment));
  16178. assert_param(IS_DMA_MEMORY_DATA_SIZE(hdma->Init.MemDataAlignment));
  16179. assert_param(IS_DMA_MODE(hdma->Init.Mode));
  16180. assert_param(IS_DMA_PRIORITY(hdma->Init.Priority));
  16181. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  16182. 8006e90: 687b ldr r3, [r7, #4]
  16183. 8006e92: 681b ldr r3, [r3, #0]
  16184. 8006e94: 4a66 ldr r2, [pc, #408] @ (8007030 <HAL_DMA_Init+0x1b8>)
  16185. 8006e96: 4293 cmp r3, r2
  16186. 8006e98: d04a beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16187. 8006e9a: 687b ldr r3, [r7, #4]
  16188. 8006e9c: 681b ldr r3, [r3, #0]
  16189. 8006e9e: 4a65 ldr r2, [pc, #404] @ (8007034 <HAL_DMA_Init+0x1bc>)
  16190. 8006ea0: 4293 cmp r3, r2
  16191. 8006ea2: d045 beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16192. 8006ea4: 687b ldr r3, [r7, #4]
  16193. 8006ea6: 681b ldr r3, [r3, #0]
  16194. 8006ea8: 4a63 ldr r2, [pc, #396] @ (8007038 <HAL_DMA_Init+0x1c0>)
  16195. 8006eaa: 4293 cmp r3, r2
  16196. 8006eac: d040 beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16197. 8006eae: 687b ldr r3, [r7, #4]
  16198. 8006eb0: 681b ldr r3, [r3, #0]
  16199. 8006eb2: 4a62 ldr r2, [pc, #392] @ (800703c <HAL_DMA_Init+0x1c4>)
  16200. 8006eb4: 4293 cmp r3, r2
  16201. 8006eb6: d03b beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16202. 8006eb8: 687b ldr r3, [r7, #4]
  16203. 8006eba: 681b ldr r3, [r3, #0]
  16204. 8006ebc: 4a60 ldr r2, [pc, #384] @ (8007040 <HAL_DMA_Init+0x1c8>)
  16205. 8006ebe: 4293 cmp r3, r2
  16206. 8006ec0: d036 beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16207. 8006ec2: 687b ldr r3, [r7, #4]
  16208. 8006ec4: 681b ldr r3, [r3, #0]
  16209. 8006ec6: 4a5f ldr r2, [pc, #380] @ (8007044 <HAL_DMA_Init+0x1cc>)
  16210. 8006ec8: 4293 cmp r3, r2
  16211. 8006eca: d031 beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16212. 8006ecc: 687b ldr r3, [r7, #4]
  16213. 8006ece: 681b ldr r3, [r3, #0]
  16214. 8006ed0: 4a5d ldr r2, [pc, #372] @ (8007048 <HAL_DMA_Init+0x1d0>)
  16215. 8006ed2: 4293 cmp r3, r2
  16216. 8006ed4: d02c beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16217. 8006ed6: 687b ldr r3, [r7, #4]
  16218. 8006ed8: 681b ldr r3, [r3, #0]
  16219. 8006eda: 4a5c ldr r2, [pc, #368] @ (800704c <HAL_DMA_Init+0x1d4>)
  16220. 8006edc: 4293 cmp r3, r2
  16221. 8006ede: d027 beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16222. 8006ee0: 687b ldr r3, [r7, #4]
  16223. 8006ee2: 681b ldr r3, [r3, #0]
  16224. 8006ee4: 4a5a ldr r2, [pc, #360] @ (8007050 <HAL_DMA_Init+0x1d8>)
  16225. 8006ee6: 4293 cmp r3, r2
  16226. 8006ee8: d022 beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16227. 8006eea: 687b ldr r3, [r7, #4]
  16228. 8006eec: 681b ldr r3, [r3, #0]
  16229. 8006eee: 4a59 ldr r2, [pc, #356] @ (8007054 <HAL_DMA_Init+0x1dc>)
  16230. 8006ef0: 4293 cmp r3, r2
  16231. 8006ef2: d01d beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16232. 8006ef4: 687b ldr r3, [r7, #4]
  16233. 8006ef6: 681b ldr r3, [r3, #0]
  16234. 8006ef8: 4a57 ldr r2, [pc, #348] @ (8007058 <HAL_DMA_Init+0x1e0>)
  16235. 8006efa: 4293 cmp r3, r2
  16236. 8006efc: d018 beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16237. 8006efe: 687b ldr r3, [r7, #4]
  16238. 8006f00: 681b ldr r3, [r3, #0]
  16239. 8006f02: 4a56 ldr r2, [pc, #344] @ (800705c <HAL_DMA_Init+0x1e4>)
  16240. 8006f04: 4293 cmp r3, r2
  16241. 8006f06: d013 beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16242. 8006f08: 687b ldr r3, [r7, #4]
  16243. 8006f0a: 681b ldr r3, [r3, #0]
  16244. 8006f0c: 4a54 ldr r2, [pc, #336] @ (8007060 <HAL_DMA_Init+0x1e8>)
  16245. 8006f0e: 4293 cmp r3, r2
  16246. 8006f10: d00e beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16247. 8006f12: 687b ldr r3, [r7, #4]
  16248. 8006f14: 681b ldr r3, [r3, #0]
  16249. 8006f16: 4a53 ldr r2, [pc, #332] @ (8007064 <HAL_DMA_Init+0x1ec>)
  16250. 8006f18: 4293 cmp r3, r2
  16251. 8006f1a: d009 beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16252. 8006f1c: 687b ldr r3, [r7, #4]
  16253. 8006f1e: 681b ldr r3, [r3, #0]
  16254. 8006f20: 4a51 ldr r2, [pc, #324] @ (8007068 <HAL_DMA_Init+0x1f0>)
  16255. 8006f22: 4293 cmp r3, r2
  16256. 8006f24: d004 beq.n 8006f30 <HAL_DMA_Init+0xb8>
  16257. 8006f26: 687b ldr r3, [r7, #4]
  16258. 8006f28: 681b ldr r3, [r3, #0]
  16259. 8006f2a: 4a50 ldr r2, [pc, #320] @ (800706c <HAL_DMA_Init+0x1f4>)
  16260. 8006f2c: 4293 cmp r3, r2
  16261. 8006f2e: d101 bne.n 8006f34 <HAL_DMA_Init+0xbc>
  16262. 8006f30: 2301 movs r3, #1
  16263. 8006f32: e000 b.n 8006f36 <HAL_DMA_Init+0xbe>
  16264. 8006f34: 2300 movs r3, #0
  16265. 8006f36: 2b00 cmp r3, #0
  16266. 8006f38: f000 813b beq.w 80071b2 <HAL_DMA_Init+0x33a>
  16267. assert_param(IS_DMA_MEMORY_BURST(hdma->Init.MemBurst));
  16268. assert_param(IS_DMA_PERIPHERAL_BURST(hdma->Init.PeriphBurst));
  16269. }
  16270. /* Change DMA peripheral state */
  16271. hdma->State = HAL_DMA_STATE_BUSY;
  16272. 8006f3c: 687b ldr r3, [r7, #4]
  16273. 8006f3e: 2202 movs r2, #2
  16274. 8006f40: f883 2035 strb.w r2, [r3, #53] @ 0x35
  16275. /* Allocate lock resource */
  16276. __HAL_UNLOCK(hdma);
  16277. 8006f44: 687b ldr r3, [r7, #4]
  16278. 8006f46: 2200 movs r2, #0
  16279. 8006f48: f883 2034 strb.w r2, [r3, #52] @ 0x34
  16280. /* Disable the peripheral */
  16281. __HAL_DMA_DISABLE(hdma);
  16282. 8006f4c: 687b ldr r3, [r7, #4]
  16283. 8006f4e: 681b ldr r3, [r3, #0]
  16284. 8006f50: 4a37 ldr r2, [pc, #220] @ (8007030 <HAL_DMA_Init+0x1b8>)
  16285. 8006f52: 4293 cmp r3, r2
  16286. 8006f54: d04a beq.n 8006fec <HAL_DMA_Init+0x174>
  16287. 8006f56: 687b ldr r3, [r7, #4]
  16288. 8006f58: 681b ldr r3, [r3, #0]
  16289. 8006f5a: 4a36 ldr r2, [pc, #216] @ (8007034 <HAL_DMA_Init+0x1bc>)
  16290. 8006f5c: 4293 cmp r3, r2
  16291. 8006f5e: d045 beq.n 8006fec <HAL_DMA_Init+0x174>
  16292. 8006f60: 687b ldr r3, [r7, #4]
  16293. 8006f62: 681b ldr r3, [r3, #0]
  16294. 8006f64: 4a34 ldr r2, [pc, #208] @ (8007038 <HAL_DMA_Init+0x1c0>)
  16295. 8006f66: 4293 cmp r3, r2
  16296. 8006f68: d040 beq.n 8006fec <HAL_DMA_Init+0x174>
  16297. 8006f6a: 687b ldr r3, [r7, #4]
  16298. 8006f6c: 681b ldr r3, [r3, #0]
  16299. 8006f6e: 4a33 ldr r2, [pc, #204] @ (800703c <HAL_DMA_Init+0x1c4>)
  16300. 8006f70: 4293 cmp r3, r2
  16301. 8006f72: d03b beq.n 8006fec <HAL_DMA_Init+0x174>
  16302. 8006f74: 687b ldr r3, [r7, #4]
  16303. 8006f76: 681b ldr r3, [r3, #0]
  16304. 8006f78: 4a31 ldr r2, [pc, #196] @ (8007040 <HAL_DMA_Init+0x1c8>)
  16305. 8006f7a: 4293 cmp r3, r2
  16306. 8006f7c: d036 beq.n 8006fec <HAL_DMA_Init+0x174>
  16307. 8006f7e: 687b ldr r3, [r7, #4]
  16308. 8006f80: 681b ldr r3, [r3, #0]
  16309. 8006f82: 4a30 ldr r2, [pc, #192] @ (8007044 <HAL_DMA_Init+0x1cc>)
  16310. 8006f84: 4293 cmp r3, r2
  16311. 8006f86: d031 beq.n 8006fec <HAL_DMA_Init+0x174>
  16312. 8006f88: 687b ldr r3, [r7, #4]
  16313. 8006f8a: 681b ldr r3, [r3, #0]
  16314. 8006f8c: 4a2e ldr r2, [pc, #184] @ (8007048 <HAL_DMA_Init+0x1d0>)
  16315. 8006f8e: 4293 cmp r3, r2
  16316. 8006f90: d02c beq.n 8006fec <HAL_DMA_Init+0x174>
  16317. 8006f92: 687b ldr r3, [r7, #4]
  16318. 8006f94: 681b ldr r3, [r3, #0]
  16319. 8006f96: 4a2d ldr r2, [pc, #180] @ (800704c <HAL_DMA_Init+0x1d4>)
  16320. 8006f98: 4293 cmp r3, r2
  16321. 8006f9a: d027 beq.n 8006fec <HAL_DMA_Init+0x174>
  16322. 8006f9c: 687b ldr r3, [r7, #4]
  16323. 8006f9e: 681b ldr r3, [r3, #0]
  16324. 8006fa0: 4a2b ldr r2, [pc, #172] @ (8007050 <HAL_DMA_Init+0x1d8>)
  16325. 8006fa2: 4293 cmp r3, r2
  16326. 8006fa4: d022 beq.n 8006fec <HAL_DMA_Init+0x174>
  16327. 8006fa6: 687b ldr r3, [r7, #4]
  16328. 8006fa8: 681b ldr r3, [r3, #0]
  16329. 8006faa: 4a2a ldr r2, [pc, #168] @ (8007054 <HAL_DMA_Init+0x1dc>)
  16330. 8006fac: 4293 cmp r3, r2
  16331. 8006fae: d01d beq.n 8006fec <HAL_DMA_Init+0x174>
  16332. 8006fb0: 687b ldr r3, [r7, #4]
  16333. 8006fb2: 681b ldr r3, [r3, #0]
  16334. 8006fb4: 4a28 ldr r2, [pc, #160] @ (8007058 <HAL_DMA_Init+0x1e0>)
  16335. 8006fb6: 4293 cmp r3, r2
  16336. 8006fb8: d018 beq.n 8006fec <HAL_DMA_Init+0x174>
  16337. 8006fba: 687b ldr r3, [r7, #4]
  16338. 8006fbc: 681b ldr r3, [r3, #0]
  16339. 8006fbe: 4a27 ldr r2, [pc, #156] @ (800705c <HAL_DMA_Init+0x1e4>)
  16340. 8006fc0: 4293 cmp r3, r2
  16341. 8006fc2: d013 beq.n 8006fec <HAL_DMA_Init+0x174>
  16342. 8006fc4: 687b ldr r3, [r7, #4]
  16343. 8006fc6: 681b ldr r3, [r3, #0]
  16344. 8006fc8: 4a25 ldr r2, [pc, #148] @ (8007060 <HAL_DMA_Init+0x1e8>)
  16345. 8006fca: 4293 cmp r3, r2
  16346. 8006fcc: d00e beq.n 8006fec <HAL_DMA_Init+0x174>
  16347. 8006fce: 687b ldr r3, [r7, #4]
  16348. 8006fd0: 681b ldr r3, [r3, #0]
  16349. 8006fd2: 4a24 ldr r2, [pc, #144] @ (8007064 <HAL_DMA_Init+0x1ec>)
  16350. 8006fd4: 4293 cmp r3, r2
  16351. 8006fd6: d009 beq.n 8006fec <HAL_DMA_Init+0x174>
  16352. 8006fd8: 687b ldr r3, [r7, #4]
  16353. 8006fda: 681b ldr r3, [r3, #0]
  16354. 8006fdc: 4a22 ldr r2, [pc, #136] @ (8007068 <HAL_DMA_Init+0x1f0>)
  16355. 8006fde: 4293 cmp r3, r2
  16356. 8006fe0: d004 beq.n 8006fec <HAL_DMA_Init+0x174>
  16357. 8006fe2: 687b ldr r3, [r7, #4]
  16358. 8006fe4: 681b ldr r3, [r3, #0]
  16359. 8006fe6: 4a21 ldr r2, [pc, #132] @ (800706c <HAL_DMA_Init+0x1f4>)
  16360. 8006fe8: 4293 cmp r3, r2
  16361. 8006fea: d108 bne.n 8006ffe <HAL_DMA_Init+0x186>
  16362. 8006fec: 687b ldr r3, [r7, #4]
  16363. 8006fee: 681b ldr r3, [r3, #0]
  16364. 8006ff0: 681a ldr r2, [r3, #0]
  16365. 8006ff2: 687b ldr r3, [r7, #4]
  16366. 8006ff4: 681b ldr r3, [r3, #0]
  16367. 8006ff6: f022 0201 bic.w r2, r2, #1
  16368. 8006ffa: 601a str r2, [r3, #0]
  16369. 8006ffc: e007 b.n 800700e <HAL_DMA_Init+0x196>
  16370. 8006ffe: 687b ldr r3, [r7, #4]
  16371. 8007000: 681b ldr r3, [r3, #0]
  16372. 8007002: 681a ldr r2, [r3, #0]
  16373. 8007004: 687b ldr r3, [r7, #4]
  16374. 8007006: 681b ldr r3, [r3, #0]
  16375. 8007008: f022 0201 bic.w r2, r2, #1
  16376. 800700c: 601a str r2, [r3, #0]
  16377. /* Check if the DMA Stream is effectively disabled */
  16378. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  16379. 800700e: e02f b.n 8007070 <HAL_DMA_Init+0x1f8>
  16380. {
  16381. /* Check for the Timeout */
  16382. if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT)
  16383. 8007010: f7fd fd28 bl 8004a64 <HAL_GetTick>
  16384. 8007014: 4602 mov r2, r0
  16385. 8007016: 693b ldr r3, [r7, #16]
  16386. 8007018: 1ad3 subs r3, r2, r3
  16387. 800701a: 2b05 cmp r3, #5
  16388. 800701c: d928 bls.n 8007070 <HAL_DMA_Init+0x1f8>
  16389. {
  16390. /* Update error code */
  16391. hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT;
  16392. 800701e: 687b ldr r3, [r7, #4]
  16393. 8007020: 2220 movs r2, #32
  16394. 8007022: 655a str r2, [r3, #84] @ 0x54
  16395. /* Change the DMA state */
  16396. hdma->State = HAL_DMA_STATE_ERROR;
  16397. 8007024: 687b ldr r3, [r7, #4]
  16398. 8007026: 2203 movs r2, #3
  16399. 8007028: f883 2035 strb.w r2, [r3, #53] @ 0x35
  16400. return HAL_ERROR;
  16401. 800702c: 2301 movs r3, #1
  16402. 800702e: e246 b.n 80074be <HAL_DMA_Init+0x646>
  16403. 8007030: 40020010 .word 0x40020010
  16404. 8007034: 40020028 .word 0x40020028
  16405. 8007038: 40020040 .word 0x40020040
  16406. 800703c: 40020058 .word 0x40020058
  16407. 8007040: 40020070 .word 0x40020070
  16408. 8007044: 40020088 .word 0x40020088
  16409. 8007048: 400200a0 .word 0x400200a0
  16410. 800704c: 400200b8 .word 0x400200b8
  16411. 8007050: 40020410 .word 0x40020410
  16412. 8007054: 40020428 .word 0x40020428
  16413. 8007058: 40020440 .word 0x40020440
  16414. 800705c: 40020458 .word 0x40020458
  16415. 8007060: 40020470 .word 0x40020470
  16416. 8007064: 40020488 .word 0x40020488
  16417. 8007068: 400204a0 .word 0x400204a0
  16418. 800706c: 400204b8 .word 0x400204b8
  16419. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  16420. 8007070: 687b ldr r3, [r7, #4]
  16421. 8007072: 681b ldr r3, [r3, #0]
  16422. 8007074: 681b ldr r3, [r3, #0]
  16423. 8007076: f003 0301 and.w r3, r3, #1
  16424. 800707a: 2b00 cmp r3, #0
  16425. 800707c: d1c8 bne.n 8007010 <HAL_DMA_Init+0x198>
  16426. }
  16427. }
  16428. /* Get the CR register value */
  16429. registerValue = ((DMA_Stream_TypeDef *)hdma->Instance)->CR;
  16430. 800707e: 687b ldr r3, [r7, #4]
  16431. 8007080: 681b ldr r3, [r3, #0]
  16432. 8007082: 681b ldr r3, [r3, #0]
  16433. 8007084: 617b str r3, [r7, #20]
  16434. /* Clear CHSEL, MBURST, PBURST, PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR, CT and DBM bits */
  16435. registerValue &= ((uint32_t)~(DMA_SxCR_MBURST | DMA_SxCR_PBURST | \
  16436. 8007086: 697a ldr r2, [r7, #20]
  16437. 8007088: 4b83 ldr r3, [pc, #524] @ (8007298 <HAL_DMA_Init+0x420>)
  16438. 800708a: 4013 ands r3, r2
  16439. 800708c: 617b str r3, [r7, #20]
  16440. DMA_SxCR_PL | DMA_SxCR_MSIZE | DMA_SxCR_PSIZE | \
  16441. DMA_SxCR_MINC | DMA_SxCR_PINC | DMA_SxCR_CIRC | \
  16442. DMA_SxCR_DIR | DMA_SxCR_CT | DMA_SxCR_DBM));
  16443. /* Prepare the DMA Stream configuration */
  16444. registerValue |= hdma->Init.Direction |
  16445. 800708e: 687b ldr r3, [r7, #4]
  16446. 8007090: 689a ldr r2, [r3, #8]
  16447. hdma->Init.PeriphInc | hdma->Init.MemInc |
  16448. 8007092: 687b ldr r3, [r7, #4]
  16449. 8007094: 68db ldr r3, [r3, #12]
  16450. registerValue |= hdma->Init.Direction |
  16451. 8007096: 431a orrs r2, r3
  16452. hdma->Init.PeriphInc | hdma->Init.MemInc |
  16453. 8007098: 687b ldr r3, [r7, #4]
  16454. 800709a: 691b ldr r3, [r3, #16]
  16455. 800709c: 431a orrs r2, r3
  16456. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  16457. 800709e: 687b ldr r3, [r7, #4]
  16458. 80070a0: 695b ldr r3, [r3, #20]
  16459. hdma->Init.PeriphInc | hdma->Init.MemInc |
  16460. 80070a2: 431a orrs r2, r3
  16461. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  16462. 80070a4: 687b ldr r3, [r7, #4]
  16463. 80070a6: 699b ldr r3, [r3, #24]
  16464. 80070a8: 431a orrs r2, r3
  16465. hdma->Init.Mode | hdma->Init.Priority;
  16466. 80070aa: 687b ldr r3, [r7, #4]
  16467. 80070ac: 69db ldr r3, [r3, #28]
  16468. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  16469. 80070ae: 431a orrs r2, r3
  16470. hdma->Init.Mode | hdma->Init.Priority;
  16471. 80070b0: 687b ldr r3, [r7, #4]
  16472. 80070b2: 6a1b ldr r3, [r3, #32]
  16473. 80070b4: 4313 orrs r3, r2
  16474. registerValue |= hdma->Init.Direction |
  16475. 80070b6: 697a ldr r2, [r7, #20]
  16476. 80070b8: 4313 orrs r3, r2
  16477. 80070ba: 617b str r3, [r7, #20]
  16478. /* the Memory burst and peripheral burst are not used when the FIFO is disabled */
  16479. if(hdma->Init.FIFOMode == DMA_FIFOMODE_ENABLE)
  16480. 80070bc: 687b ldr r3, [r7, #4]
  16481. 80070be: 6a5b ldr r3, [r3, #36] @ 0x24
  16482. 80070c0: 2b04 cmp r3, #4
  16483. 80070c2: d107 bne.n 80070d4 <HAL_DMA_Init+0x25c>
  16484. {
  16485. /* Get memory burst and peripheral burst */
  16486. registerValue |= hdma->Init.MemBurst | hdma->Init.PeriphBurst;
  16487. 80070c4: 687b ldr r3, [r7, #4]
  16488. 80070c6: 6ada ldr r2, [r3, #44] @ 0x2c
  16489. 80070c8: 687b ldr r3, [r7, #4]
  16490. 80070ca: 6b1b ldr r3, [r3, #48] @ 0x30
  16491. 80070cc: 4313 orrs r3, r2
  16492. 80070ce: 697a ldr r2, [r7, #20]
  16493. 80070d0: 4313 orrs r3, r2
  16494. 80070d2: 617b str r3, [r7, #20]
  16495. }
  16496. /* Work around for Errata 2.22: UART/USART- DMA transfer lock: DMA stream could be
  16497. lock when transferring data to/from USART/UART */
  16498. #if (STM32H7_DEV_ID == 0x450UL)
  16499. if((DBGMCU->IDCODE & 0xFFFF0000U) >= 0x20000000U)
  16500. 80070d4: 4b71 ldr r3, [pc, #452] @ (800729c <HAL_DMA_Init+0x424>)
  16501. 80070d6: 681a ldr r2, [r3, #0]
  16502. 80070d8: 4b71 ldr r3, [pc, #452] @ (80072a0 <HAL_DMA_Init+0x428>)
  16503. 80070da: 4013 ands r3, r2
  16504. 80070dc: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  16505. 80070e0: d328 bcc.n 8007134 <HAL_DMA_Init+0x2bc>
  16506. {
  16507. #endif /* STM32H7_DEV_ID == 0x450UL */
  16508. if(IS_DMA_UART_USART_REQUEST(hdma->Init.Request) != 0U)
  16509. 80070e2: 687b ldr r3, [r7, #4]
  16510. 80070e4: 685b ldr r3, [r3, #4]
  16511. 80070e6: 2b28 cmp r3, #40 @ 0x28
  16512. 80070e8: d903 bls.n 80070f2 <HAL_DMA_Init+0x27a>
  16513. 80070ea: 687b ldr r3, [r7, #4]
  16514. 80070ec: 685b ldr r3, [r3, #4]
  16515. 80070ee: 2b2e cmp r3, #46 @ 0x2e
  16516. 80070f0: d917 bls.n 8007122 <HAL_DMA_Init+0x2aa>
  16517. 80070f2: 687b ldr r3, [r7, #4]
  16518. 80070f4: 685b ldr r3, [r3, #4]
  16519. 80070f6: 2b3e cmp r3, #62 @ 0x3e
  16520. 80070f8: d903 bls.n 8007102 <HAL_DMA_Init+0x28a>
  16521. 80070fa: 687b ldr r3, [r7, #4]
  16522. 80070fc: 685b ldr r3, [r3, #4]
  16523. 80070fe: 2b42 cmp r3, #66 @ 0x42
  16524. 8007100: d90f bls.n 8007122 <HAL_DMA_Init+0x2aa>
  16525. 8007102: 687b ldr r3, [r7, #4]
  16526. 8007104: 685b ldr r3, [r3, #4]
  16527. 8007106: 2b46 cmp r3, #70 @ 0x46
  16528. 8007108: d903 bls.n 8007112 <HAL_DMA_Init+0x29a>
  16529. 800710a: 687b ldr r3, [r7, #4]
  16530. 800710c: 685b ldr r3, [r3, #4]
  16531. 800710e: 2b48 cmp r3, #72 @ 0x48
  16532. 8007110: d907 bls.n 8007122 <HAL_DMA_Init+0x2aa>
  16533. 8007112: 687b ldr r3, [r7, #4]
  16534. 8007114: 685b ldr r3, [r3, #4]
  16535. 8007116: 2b4e cmp r3, #78 @ 0x4e
  16536. 8007118: d905 bls.n 8007126 <HAL_DMA_Init+0x2ae>
  16537. 800711a: 687b ldr r3, [r7, #4]
  16538. 800711c: 685b ldr r3, [r3, #4]
  16539. 800711e: 2b52 cmp r3, #82 @ 0x52
  16540. 8007120: d801 bhi.n 8007126 <HAL_DMA_Init+0x2ae>
  16541. 8007122: 2301 movs r3, #1
  16542. 8007124: e000 b.n 8007128 <HAL_DMA_Init+0x2b0>
  16543. 8007126: 2300 movs r3, #0
  16544. 8007128: 2b00 cmp r3, #0
  16545. 800712a: d003 beq.n 8007134 <HAL_DMA_Init+0x2bc>
  16546. {
  16547. registerValue |= DMA_SxCR_TRBUFF;
  16548. 800712c: 697b ldr r3, [r7, #20]
  16549. 800712e: f443 1380 orr.w r3, r3, #1048576 @ 0x100000
  16550. 8007132: 617b str r3, [r7, #20]
  16551. #if (STM32H7_DEV_ID == 0x450UL)
  16552. }
  16553. #endif /* STM32H7_DEV_ID == 0x450UL */
  16554. /* Write to DMA Stream CR register */
  16555. ((DMA_Stream_TypeDef *)hdma->Instance)->CR = registerValue;
  16556. 8007134: 687b ldr r3, [r7, #4]
  16557. 8007136: 681b ldr r3, [r3, #0]
  16558. 8007138: 697a ldr r2, [r7, #20]
  16559. 800713a: 601a str r2, [r3, #0]
  16560. /* Get the FCR register value */
  16561. registerValue = ((DMA_Stream_TypeDef *)hdma->Instance)->FCR;
  16562. 800713c: 687b ldr r3, [r7, #4]
  16563. 800713e: 681b ldr r3, [r3, #0]
  16564. 8007140: 695b ldr r3, [r3, #20]
  16565. 8007142: 617b str r3, [r7, #20]
  16566. /* Clear Direct mode and FIFO threshold bits */
  16567. registerValue &= (uint32_t)~(DMA_SxFCR_DMDIS | DMA_SxFCR_FTH);
  16568. 8007144: 697b ldr r3, [r7, #20]
  16569. 8007146: f023 0307 bic.w r3, r3, #7
  16570. 800714a: 617b str r3, [r7, #20]
  16571. /* Prepare the DMA Stream FIFO configuration */
  16572. registerValue |= hdma->Init.FIFOMode;
  16573. 800714c: 687b ldr r3, [r7, #4]
  16574. 800714e: 6a5b ldr r3, [r3, #36] @ 0x24
  16575. 8007150: 697a ldr r2, [r7, #20]
  16576. 8007152: 4313 orrs r3, r2
  16577. 8007154: 617b str r3, [r7, #20]
  16578. /* the FIFO threshold is not used when the FIFO mode is disabled */
  16579. if(hdma->Init.FIFOMode == DMA_FIFOMODE_ENABLE)
  16580. 8007156: 687b ldr r3, [r7, #4]
  16581. 8007158: 6a5b ldr r3, [r3, #36] @ 0x24
  16582. 800715a: 2b04 cmp r3, #4
  16583. 800715c: d117 bne.n 800718e <HAL_DMA_Init+0x316>
  16584. {
  16585. /* Get the FIFO threshold */
  16586. registerValue |= hdma->Init.FIFOThreshold;
  16587. 800715e: 687b ldr r3, [r7, #4]
  16588. 8007160: 6a9b ldr r3, [r3, #40] @ 0x28
  16589. 8007162: 697a ldr r2, [r7, #20]
  16590. 8007164: 4313 orrs r3, r2
  16591. 8007166: 617b str r3, [r7, #20]
  16592. /* Check compatibility between FIFO threshold level and size of the memory burst */
  16593. /* for INCR4, INCR8, INCR16 */
  16594. if(hdma->Init.MemBurst != DMA_MBURST_SINGLE)
  16595. 8007168: 687b ldr r3, [r7, #4]
  16596. 800716a: 6adb ldr r3, [r3, #44] @ 0x2c
  16597. 800716c: 2b00 cmp r3, #0
  16598. 800716e: d00e beq.n 800718e <HAL_DMA_Init+0x316>
  16599. {
  16600. if (DMA_CheckFifoParam(hdma) != HAL_OK)
  16601. 8007170: 6878 ldr r0, [r7, #4]
  16602. 8007172: f002 fb33 bl 80097dc <DMA_CheckFifoParam>
  16603. 8007176: 4603 mov r3, r0
  16604. 8007178: 2b00 cmp r3, #0
  16605. 800717a: d008 beq.n 800718e <HAL_DMA_Init+0x316>
  16606. {
  16607. /* Update error code */
  16608. hdma->ErrorCode = HAL_DMA_ERROR_PARAM;
  16609. 800717c: 687b ldr r3, [r7, #4]
  16610. 800717e: 2240 movs r2, #64 @ 0x40
  16611. 8007180: 655a str r2, [r3, #84] @ 0x54
  16612. /* Change the DMA state */
  16613. hdma->State = HAL_DMA_STATE_READY;
  16614. 8007182: 687b ldr r3, [r7, #4]
  16615. 8007184: 2201 movs r2, #1
  16616. 8007186: f883 2035 strb.w r2, [r3, #53] @ 0x35
  16617. return HAL_ERROR;
  16618. 800718a: 2301 movs r3, #1
  16619. 800718c: e197 b.n 80074be <HAL_DMA_Init+0x646>
  16620. }
  16621. }
  16622. }
  16623. /* Write to DMA Stream FCR */
  16624. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR = registerValue;
  16625. 800718e: 687b ldr r3, [r7, #4]
  16626. 8007190: 681b ldr r3, [r3, #0]
  16627. 8007192: 697a ldr r2, [r7, #20]
  16628. 8007194: 615a str r2, [r3, #20]
  16629. /* Initialize StreamBaseAddress and StreamIndex parameters to be used to calculate
  16630. DMA steam Base Address needed by HAL_DMA_IRQHandler() and HAL_DMA_PollForTransfer() */
  16631. regs_dma = (DMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma);
  16632. 8007196: 6878 ldr r0, [r7, #4]
  16633. 8007198: f002 fa6e bl 8009678 <DMA_CalcBaseAndBitshift>
  16634. 800719c: 4603 mov r3, r0
  16635. 800719e: 60bb str r3, [r7, #8]
  16636. /* Clear all interrupt flags */
  16637. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  16638. 80071a0: 687b ldr r3, [r7, #4]
  16639. 80071a2: 6ddb ldr r3, [r3, #92] @ 0x5c
  16640. 80071a4: f003 031f and.w r3, r3, #31
  16641. 80071a8: 223f movs r2, #63 @ 0x3f
  16642. 80071aa: 409a lsls r2, r3
  16643. 80071ac: 68bb ldr r3, [r7, #8]
  16644. 80071ae: 609a str r2, [r3, #8]
  16645. 80071b0: e0cd b.n 800734e <HAL_DMA_Init+0x4d6>
  16646. }
  16647. else if(IS_BDMA_CHANNEL_INSTANCE(hdma->Instance) != 0U) /* BDMA instance(s) */
  16648. 80071b2: 687b ldr r3, [r7, #4]
  16649. 80071b4: 681b ldr r3, [r3, #0]
  16650. 80071b6: 4a3b ldr r2, [pc, #236] @ (80072a4 <HAL_DMA_Init+0x42c>)
  16651. 80071b8: 4293 cmp r3, r2
  16652. 80071ba: d022 beq.n 8007202 <HAL_DMA_Init+0x38a>
  16653. 80071bc: 687b ldr r3, [r7, #4]
  16654. 80071be: 681b ldr r3, [r3, #0]
  16655. 80071c0: 4a39 ldr r2, [pc, #228] @ (80072a8 <HAL_DMA_Init+0x430>)
  16656. 80071c2: 4293 cmp r3, r2
  16657. 80071c4: d01d beq.n 8007202 <HAL_DMA_Init+0x38a>
  16658. 80071c6: 687b ldr r3, [r7, #4]
  16659. 80071c8: 681b ldr r3, [r3, #0]
  16660. 80071ca: 4a38 ldr r2, [pc, #224] @ (80072ac <HAL_DMA_Init+0x434>)
  16661. 80071cc: 4293 cmp r3, r2
  16662. 80071ce: d018 beq.n 8007202 <HAL_DMA_Init+0x38a>
  16663. 80071d0: 687b ldr r3, [r7, #4]
  16664. 80071d2: 681b ldr r3, [r3, #0]
  16665. 80071d4: 4a36 ldr r2, [pc, #216] @ (80072b0 <HAL_DMA_Init+0x438>)
  16666. 80071d6: 4293 cmp r3, r2
  16667. 80071d8: d013 beq.n 8007202 <HAL_DMA_Init+0x38a>
  16668. 80071da: 687b ldr r3, [r7, #4]
  16669. 80071dc: 681b ldr r3, [r3, #0]
  16670. 80071de: 4a35 ldr r2, [pc, #212] @ (80072b4 <HAL_DMA_Init+0x43c>)
  16671. 80071e0: 4293 cmp r3, r2
  16672. 80071e2: d00e beq.n 8007202 <HAL_DMA_Init+0x38a>
  16673. 80071e4: 687b ldr r3, [r7, #4]
  16674. 80071e6: 681b ldr r3, [r3, #0]
  16675. 80071e8: 4a33 ldr r2, [pc, #204] @ (80072b8 <HAL_DMA_Init+0x440>)
  16676. 80071ea: 4293 cmp r3, r2
  16677. 80071ec: d009 beq.n 8007202 <HAL_DMA_Init+0x38a>
  16678. 80071ee: 687b ldr r3, [r7, #4]
  16679. 80071f0: 681b ldr r3, [r3, #0]
  16680. 80071f2: 4a32 ldr r2, [pc, #200] @ (80072bc <HAL_DMA_Init+0x444>)
  16681. 80071f4: 4293 cmp r3, r2
  16682. 80071f6: d004 beq.n 8007202 <HAL_DMA_Init+0x38a>
  16683. 80071f8: 687b ldr r3, [r7, #4]
  16684. 80071fa: 681b ldr r3, [r3, #0]
  16685. 80071fc: 4a30 ldr r2, [pc, #192] @ (80072c0 <HAL_DMA_Init+0x448>)
  16686. 80071fe: 4293 cmp r3, r2
  16687. 8007200: d101 bne.n 8007206 <HAL_DMA_Init+0x38e>
  16688. 8007202: 2301 movs r3, #1
  16689. 8007204: e000 b.n 8007208 <HAL_DMA_Init+0x390>
  16690. 8007206: 2300 movs r3, #0
  16691. 8007208: 2b00 cmp r3, #0
  16692. 800720a: f000 8097 beq.w 800733c <HAL_DMA_Init+0x4c4>
  16693. {
  16694. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  16695. 800720e: 687b ldr r3, [r7, #4]
  16696. 8007210: 681b ldr r3, [r3, #0]
  16697. 8007212: 4a24 ldr r2, [pc, #144] @ (80072a4 <HAL_DMA_Init+0x42c>)
  16698. 8007214: 4293 cmp r3, r2
  16699. 8007216: d021 beq.n 800725c <HAL_DMA_Init+0x3e4>
  16700. 8007218: 687b ldr r3, [r7, #4]
  16701. 800721a: 681b ldr r3, [r3, #0]
  16702. 800721c: 4a22 ldr r2, [pc, #136] @ (80072a8 <HAL_DMA_Init+0x430>)
  16703. 800721e: 4293 cmp r3, r2
  16704. 8007220: d01c beq.n 800725c <HAL_DMA_Init+0x3e4>
  16705. 8007222: 687b ldr r3, [r7, #4]
  16706. 8007224: 681b ldr r3, [r3, #0]
  16707. 8007226: 4a21 ldr r2, [pc, #132] @ (80072ac <HAL_DMA_Init+0x434>)
  16708. 8007228: 4293 cmp r3, r2
  16709. 800722a: d017 beq.n 800725c <HAL_DMA_Init+0x3e4>
  16710. 800722c: 687b ldr r3, [r7, #4]
  16711. 800722e: 681b ldr r3, [r3, #0]
  16712. 8007230: 4a1f ldr r2, [pc, #124] @ (80072b0 <HAL_DMA_Init+0x438>)
  16713. 8007232: 4293 cmp r3, r2
  16714. 8007234: d012 beq.n 800725c <HAL_DMA_Init+0x3e4>
  16715. 8007236: 687b ldr r3, [r7, #4]
  16716. 8007238: 681b ldr r3, [r3, #0]
  16717. 800723a: 4a1e ldr r2, [pc, #120] @ (80072b4 <HAL_DMA_Init+0x43c>)
  16718. 800723c: 4293 cmp r3, r2
  16719. 800723e: d00d beq.n 800725c <HAL_DMA_Init+0x3e4>
  16720. 8007240: 687b ldr r3, [r7, #4]
  16721. 8007242: 681b ldr r3, [r3, #0]
  16722. 8007244: 4a1c ldr r2, [pc, #112] @ (80072b8 <HAL_DMA_Init+0x440>)
  16723. 8007246: 4293 cmp r3, r2
  16724. 8007248: d008 beq.n 800725c <HAL_DMA_Init+0x3e4>
  16725. 800724a: 687b ldr r3, [r7, #4]
  16726. 800724c: 681b ldr r3, [r3, #0]
  16727. 800724e: 4a1b ldr r2, [pc, #108] @ (80072bc <HAL_DMA_Init+0x444>)
  16728. 8007250: 4293 cmp r3, r2
  16729. 8007252: d003 beq.n 800725c <HAL_DMA_Init+0x3e4>
  16730. 8007254: 687b ldr r3, [r7, #4]
  16731. 8007256: 681b ldr r3, [r3, #0]
  16732. 8007258: 4a19 ldr r2, [pc, #100] @ (80072c0 <HAL_DMA_Init+0x448>)
  16733. 800725a: 4293 cmp r3, r2
  16734. /* Check the request parameter */
  16735. assert_param(IS_BDMA_REQUEST(hdma->Init.Request));
  16736. }
  16737. /* Change DMA peripheral state */
  16738. hdma->State = HAL_DMA_STATE_BUSY;
  16739. 800725c: 687b ldr r3, [r7, #4]
  16740. 800725e: 2202 movs r2, #2
  16741. 8007260: f883 2035 strb.w r2, [r3, #53] @ 0x35
  16742. /* Allocate lock resource */
  16743. __HAL_UNLOCK(hdma);
  16744. 8007264: 687b ldr r3, [r7, #4]
  16745. 8007266: 2200 movs r2, #0
  16746. 8007268: f883 2034 strb.w r2, [r3, #52] @ 0x34
  16747. /* Get the CR register value */
  16748. registerValue = ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR;
  16749. 800726c: 687b ldr r3, [r7, #4]
  16750. 800726e: 681b ldr r3, [r3, #0]
  16751. 8007270: 681b ldr r3, [r3, #0]
  16752. 8007272: 617b str r3, [r7, #20]
  16753. /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR, MEM2MEM, DBM and CT bits */
  16754. registerValue &= ((uint32_t)~(BDMA_CCR_PL | BDMA_CCR_MSIZE | BDMA_CCR_PSIZE | \
  16755. 8007274: 697a ldr r2, [r7, #20]
  16756. 8007276: 4b13 ldr r3, [pc, #76] @ (80072c4 <HAL_DMA_Init+0x44c>)
  16757. 8007278: 4013 ands r3, r2
  16758. 800727a: 617b str r3, [r7, #20]
  16759. BDMA_CCR_MINC | BDMA_CCR_PINC | BDMA_CCR_CIRC | \
  16760. BDMA_CCR_DIR | BDMA_CCR_MEM2MEM | BDMA_CCR_DBM | \
  16761. BDMA_CCR_CT));
  16762. /* Prepare the DMA Channel configuration */
  16763. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  16764. 800727c: 687b ldr r3, [r7, #4]
  16765. 800727e: 689b ldr r3, [r3, #8]
  16766. 8007280: 2b40 cmp r3, #64 @ 0x40
  16767. 8007282: d021 beq.n 80072c8 <HAL_DMA_Init+0x450>
  16768. 8007284: 687b ldr r3, [r7, #4]
  16769. 8007286: 689b ldr r3, [r3, #8]
  16770. 8007288: 2b80 cmp r3, #128 @ 0x80
  16771. 800728a: d102 bne.n 8007292 <HAL_DMA_Init+0x41a>
  16772. 800728c: f44f 4380 mov.w r3, #16384 @ 0x4000
  16773. 8007290: e01b b.n 80072ca <HAL_DMA_Init+0x452>
  16774. 8007292: 2300 movs r3, #0
  16775. 8007294: e019 b.n 80072ca <HAL_DMA_Init+0x452>
  16776. 8007296: bf00 nop
  16777. 8007298: fe10803f .word 0xfe10803f
  16778. 800729c: 5c001000 .word 0x5c001000
  16779. 80072a0: ffff0000 .word 0xffff0000
  16780. 80072a4: 58025408 .word 0x58025408
  16781. 80072a8: 5802541c .word 0x5802541c
  16782. 80072ac: 58025430 .word 0x58025430
  16783. 80072b0: 58025444 .word 0x58025444
  16784. 80072b4: 58025458 .word 0x58025458
  16785. 80072b8: 5802546c .word 0x5802546c
  16786. 80072bc: 58025480 .word 0x58025480
  16787. 80072c0: 58025494 .word 0x58025494
  16788. 80072c4: fffe000f .word 0xfffe000f
  16789. 80072c8: 2310 movs r3, #16
  16790. DMA_TO_BDMA_PERIPHERAL_INC(hdma->Init.PeriphInc) |
  16791. 80072ca: 687a ldr r2, [r7, #4]
  16792. 80072cc: 68d2 ldr r2, [r2, #12]
  16793. 80072ce: 08d2 lsrs r2, r2, #3
  16794. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  16795. 80072d0: 431a orrs r2, r3
  16796. DMA_TO_BDMA_MEMORY_INC(hdma->Init.MemInc) |
  16797. 80072d2: 687b ldr r3, [r7, #4]
  16798. 80072d4: 691b ldr r3, [r3, #16]
  16799. 80072d6: 08db lsrs r3, r3, #3
  16800. DMA_TO_BDMA_PERIPHERAL_INC(hdma->Init.PeriphInc) |
  16801. 80072d8: 431a orrs r2, r3
  16802. DMA_TO_BDMA_PDATA_SIZE(hdma->Init.PeriphDataAlignment) |
  16803. 80072da: 687b ldr r3, [r7, #4]
  16804. 80072dc: 695b ldr r3, [r3, #20]
  16805. 80072de: 08db lsrs r3, r3, #3
  16806. DMA_TO_BDMA_MEMORY_INC(hdma->Init.MemInc) |
  16807. 80072e0: 431a orrs r2, r3
  16808. DMA_TO_BDMA_MDATA_SIZE(hdma->Init.MemDataAlignment) |
  16809. 80072e2: 687b ldr r3, [r7, #4]
  16810. 80072e4: 699b ldr r3, [r3, #24]
  16811. 80072e6: 08db lsrs r3, r3, #3
  16812. DMA_TO_BDMA_PDATA_SIZE(hdma->Init.PeriphDataAlignment) |
  16813. 80072e8: 431a orrs r2, r3
  16814. DMA_TO_BDMA_MODE(hdma->Init.Mode) |
  16815. 80072ea: 687b ldr r3, [r7, #4]
  16816. 80072ec: 69db ldr r3, [r3, #28]
  16817. 80072ee: 08db lsrs r3, r3, #3
  16818. DMA_TO_BDMA_MDATA_SIZE(hdma->Init.MemDataAlignment) |
  16819. 80072f0: 431a orrs r2, r3
  16820. DMA_TO_BDMA_PRIORITY(hdma->Init.Priority);
  16821. 80072f2: 687b ldr r3, [r7, #4]
  16822. 80072f4: 6a1b ldr r3, [r3, #32]
  16823. 80072f6: 091b lsrs r3, r3, #4
  16824. DMA_TO_BDMA_MODE(hdma->Init.Mode) |
  16825. 80072f8: 4313 orrs r3, r2
  16826. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  16827. 80072fa: 697a ldr r2, [r7, #20]
  16828. 80072fc: 4313 orrs r3, r2
  16829. 80072fe: 617b str r3, [r7, #20]
  16830. /* Write to DMA Channel CR register */
  16831. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR = registerValue;
  16832. 8007300: 687b ldr r3, [r7, #4]
  16833. 8007302: 681b ldr r3, [r3, #0]
  16834. 8007304: 697a ldr r2, [r7, #20]
  16835. 8007306: 601a str r2, [r3, #0]
  16836. /* calculation of the channel index */
  16837. hdma->StreamIndex = (((uint32_t)((uint32_t*)hdma->Instance) - (uint32_t)BDMA_Channel0) / ((uint32_t)BDMA_Channel1 - (uint32_t)BDMA_Channel0)) << 2U;
  16838. 8007308: 687b ldr r3, [r7, #4]
  16839. 800730a: 681b ldr r3, [r3, #0]
  16840. 800730c: 461a mov r2, r3
  16841. 800730e: 4b6e ldr r3, [pc, #440] @ (80074c8 <HAL_DMA_Init+0x650>)
  16842. 8007310: 4413 add r3, r2
  16843. 8007312: 4a6e ldr r2, [pc, #440] @ (80074cc <HAL_DMA_Init+0x654>)
  16844. 8007314: fba2 2303 umull r2, r3, r2, r3
  16845. 8007318: 091b lsrs r3, r3, #4
  16846. 800731a: 009a lsls r2, r3, #2
  16847. 800731c: 687b ldr r3, [r7, #4]
  16848. 800731e: 65da str r2, [r3, #92] @ 0x5c
  16849. /* Initialize StreamBaseAddress and StreamIndex parameters to be used to calculate
  16850. DMA steam Base Address needed by HAL_DMA_IRQHandler() and HAL_DMA_PollForTransfer() */
  16851. regs_bdma = (BDMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma);
  16852. 8007320: 6878 ldr r0, [r7, #4]
  16853. 8007322: f002 f9a9 bl 8009678 <DMA_CalcBaseAndBitshift>
  16854. 8007326: 4603 mov r3, r0
  16855. 8007328: 60fb str r3, [r7, #12]
  16856. /* Clear all interrupt flags */
  16857. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  16858. 800732a: 687b ldr r3, [r7, #4]
  16859. 800732c: 6ddb ldr r3, [r3, #92] @ 0x5c
  16860. 800732e: f003 031f and.w r3, r3, #31
  16861. 8007332: 2201 movs r2, #1
  16862. 8007334: 409a lsls r2, r3
  16863. 8007336: 68fb ldr r3, [r7, #12]
  16864. 8007338: 605a str r2, [r3, #4]
  16865. 800733a: e008 b.n 800734e <HAL_DMA_Init+0x4d6>
  16866. }
  16867. else
  16868. {
  16869. hdma->ErrorCode = HAL_DMA_ERROR_PARAM;
  16870. 800733c: 687b ldr r3, [r7, #4]
  16871. 800733e: 2240 movs r2, #64 @ 0x40
  16872. 8007340: 655a str r2, [r3, #84] @ 0x54
  16873. hdma->State = HAL_DMA_STATE_ERROR;
  16874. 8007342: 687b ldr r3, [r7, #4]
  16875. 8007344: 2203 movs r2, #3
  16876. 8007346: f883 2035 strb.w r2, [r3, #53] @ 0x35
  16877. return HAL_ERROR;
  16878. 800734a: 2301 movs r3, #1
  16879. 800734c: e0b7 b.n 80074be <HAL_DMA_Init+0x646>
  16880. }
  16881. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  16882. 800734e: 687b ldr r3, [r7, #4]
  16883. 8007350: 681b ldr r3, [r3, #0]
  16884. 8007352: 4a5f ldr r2, [pc, #380] @ (80074d0 <HAL_DMA_Init+0x658>)
  16885. 8007354: 4293 cmp r3, r2
  16886. 8007356: d072 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16887. 8007358: 687b ldr r3, [r7, #4]
  16888. 800735a: 681b ldr r3, [r3, #0]
  16889. 800735c: 4a5d ldr r2, [pc, #372] @ (80074d4 <HAL_DMA_Init+0x65c>)
  16890. 800735e: 4293 cmp r3, r2
  16891. 8007360: d06d beq.n 800743e <HAL_DMA_Init+0x5c6>
  16892. 8007362: 687b ldr r3, [r7, #4]
  16893. 8007364: 681b ldr r3, [r3, #0]
  16894. 8007366: 4a5c ldr r2, [pc, #368] @ (80074d8 <HAL_DMA_Init+0x660>)
  16895. 8007368: 4293 cmp r3, r2
  16896. 800736a: d068 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16897. 800736c: 687b ldr r3, [r7, #4]
  16898. 800736e: 681b ldr r3, [r3, #0]
  16899. 8007370: 4a5a ldr r2, [pc, #360] @ (80074dc <HAL_DMA_Init+0x664>)
  16900. 8007372: 4293 cmp r3, r2
  16901. 8007374: d063 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16902. 8007376: 687b ldr r3, [r7, #4]
  16903. 8007378: 681b ldr r3, [r3, #0]
  16904. 800737a: 4a59 ldr r2, [pc, #356] @ (80074e0 <HAL_DMA_Init+0x668>)
  16905. 800737c: 4293 cmp r3, r2
  16906. 800737e: d05e beq.n 800743e <HAL_DMA_Init+0x5c6>
  16907. 8007380: 687b ldr r3, [r7, #4]
  16908. 8007382: 681b ldr r3, [r3, #0]
  16909. 8007384: 4a57 ldr r2, [pc, #348] @ (80074e4 <HAL_DMA_Init+0x66c>)
  16910. 8007386: 4293 cmp r3, r2
  16911. 8007388: d059 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16912. 800738a: 687b ldr r3, [r7, #4]
  16913. 800738c: 681b ldr r3, [r3, #0]
  16914. 800738e: 4a56 ldr r2, [pc, #344] @ (80074e8 <HAL_DMA_Init+0x670>)
  16915. 8007390: 4293 cmp r3, r2
  16916. 8007392: d054 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16917. 8007394: 687b ldr r3, [r7, #4]
  16918. 8007396: 681b ldr r3, [r3, #0]
  16919. 8007398: 4a54 ldr r2, [pc, #336] @ (80074ec <HAL_DMA_Init+0x674>)
  16920. 800739a: 4293 cmp r3, r2
  16921. 800739c: d04f beq.n 800743e <HAL_DMA_Init+0x5c6>
  16922. 800739e: 687b ldr r3, [r7, #4]
  16923. 80073a0: 681b ldr r3, [r3, #0]
  16924. 80073a2: 4a53 ldr r2, [pc, #332] @ (80074f0 <HAL_DMA_Init+0x678>)
  16925. 80073a4: 4293 cmp r3, r2
  16926. 80073a6: d04a beq.n 800743e <HAL_DMA_Init+0x5c6>
  16927. 80073a8: 687b ldr r3, [r7, #4]
  16928. 80073aa: 681b ldr r3, [r3, #0]
  16929. 80073ac: 4a51 ldr r2, [pc, #324] @ (80074f4 <HAL_DMA_Init+0x67c>)
  16930. 80073ae: 4293 cmp r3, r2
  16931. 80073b0: d045 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16932. 80073b2: 687b ldr r3, [r7, #4]
  16933. 80073b4: 681b ldr r3, [r3, #0]
  16934. 80073b6: 4a50 ldr r2, [pc, #320] @ (80074f8 <HAL_DMA_Init+0x680>)
  16935. 80073b8: 4293 cmp r3, r2
  16936. 80073ba: d040 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16937. 80073bc: 687b ldr r3, [r7, #4]
  16938. 80073be: 681b ldr r3, [r3, #0]
  16939. 80073c0: 4a4e ldr r2, [pc, #312] @ (80074fc <HAL_DMA_Init+0x684>)
  16940. 80073c2: 4293 cmp r3, r2
  16941. 80073c4: d03b beq.n 800743e <HAL_DMA_Init+0x5c6>
  16942. 80073c6: 687b ldr r3, [r7, #4]
  16943. 80073c8: 681b ldr r3, [r3, #0]
  16944. 80073ca: 4a4d ldr r2, [pc, #308] @ (8007500 <HAL_DMA_Init+0x688>)
  16945. 80073cc: 4293 cmp r3, r2
  16946. 80073ce: d036 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16947. 80073d0: 687b ldr r3, [r7, #4]
  16948. 80073d2: 681b ldr r3, [r3, #0]
  16949. 80073d4: 4a4b ldr r2, [pc, #300] @ (8007504 <HAL_DMA_Init+0x68c>)
  16950. 80073d6: 4293 cmp r3, r2
  16951. 80073d8: d031 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16952. 80073da: 687b ldr r3, [r7, #4]
  16953. 80073dc: 681b ldr r3, [r3, #0]
  16954. 80073de: 4a4a ldr r2, [pc, #296] @ (8007508 <HAL_DMA_Init+0x690>)
  16955. 80073e0: 4293 cmp r3, r2
  16956. 80073e2: d02c beq.n 800743e <HAL_DMA_Init+0x5c6>
  16957. 80073e4: 687b ldr r3, [r7, #4]
  16958. 80073e6: 681b ldr r3, [r3, #0]
  16959. 80073e8: 4a48 ldr r2, [pc, #288] @ (800750c <HAL_DMA_Init+0x694>)
  16960. 80073ea: 4293 cmp r3, r2
  16961. 80073ec: d027 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16962. 80073ee: 687b ldr r3, [r7, #4]
  16963. 80073f0: 681b ldr r3, [r3, #0]
  16964. 80073f2: 4a47 ldr r2, [pc, #284] @ (8007510 <HAL_DMA_Init+0x698>)
  16965. 80073f4: 4293 cmp r3, r2
  16966. 80073f6: d022 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16967. 80073f8: 687b ldr r3, [r7, #4]
  16968. 80073fa: 681b ldr r3, [r3, #0]
  16969. 80073fc: 4a45 ldr r2, [pc, #276] @ (8007514 <HAL_DMA_Init+0x69c>)
  16970. 80073fe: 4293 cmp r3, r2
  16971. 8007400: d01d beq.n 800743e <HAL_DMA_Init+0x5c6>
  16972. 8007402: 687b ldr r3, [r7, #4]
  16973. 8007404: 681b ldr r3, [r3, #0]
  16974. 8007406: 4a44 ldr r2, [pc, #272] @ (8007518 <HAL_DMA_Init+0x6a0>)
  16975. 8007408: 4293 cmp r3, r2
  16976. 800740a: d018 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16977. 800740c: 687b ldr r3, [r7, #4]
  16978. 800740e: 681b ldr r3, [r3, #0]
  16979. 8007410: 4a42 ldr r2, [pc, #264] @ (800751c <HAL_DMA_Init+0x6a4>)
  16980. 8007412: 4293 cmp r3, r2
  16981. 8007414: d013 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16982. 8007416: 687b ldr r3, [r7, #4]
  16983. 8007418: 681b ldr r3, [r3, #0]
  16984. 800741a: 4a41 ldr r2, [pc, #260] @ (8007520 <HAL_DMA_Init+0x6a8>)
  16985. 800741c: 4293 cmp r3, r2
  16986. 800741e: d00e beq.n 800743e <HAL_DMA_Init+0x5c6>
  16987. 8007420: 687b ldr r3, [r7, #4]
  16988. 8007422: 681b ldr r3, [r3, #0]
  16989. 8007424: 4a3f ldr r2, [pc, #252] @ (8007524 <HAL_DMA_Init+0x6ac>)
  16990. 8007426: 4293 cmp r3, r2
  16991. 8007428: d009 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16992. 800742a: 687b ldr r3, [r7, #4]
  16993. 800742c: 681b ldr r3, [r3, #0]
  16994. 800742e: 4a3e ldr r2, [pc, #248] @ (8007528 <HAL_DMA_Init+0x6b0>)
  16995. 8007430: 4293 cmp r3, r2
  16996. 8007432: d004 beq.n 800743e <HAL_DMA_Init+0x5c6>
  16997. 8007434: 687b ldr r3, [r7, #4]
  16998. 8007436: 681b ldr r3, [r3, #0]
  16999. 8007438: 4a3c ldr r2, [pc, #240] @ (800752c <HAL_DMA_Init+0x6b4>)
  17000. 800743a: 4293 cmp r3, r2
  17001. 800743c: d101 bne.n 8007442 <HAL_DMA_Init+0x5ca>
  17002. 800743e: 2301 movs r3, #1
  17003. 8007440: e000 b.n 8007444 <HAL_DMA_Init+0x5cc>
  17004. 8007442: 2300 movs r3, #0
  17005. 8007444: 2b00 cmp r3, #0
  17006. 8007446: d032 beq.n 80074ae <HAL_DMA_Init+0x636>
  17007. {
  17008. /* Initialize parameters for DMAMUX channel :
  17009. DMAmuxChannel, DMAmuxChannelStatus and DMAmuxChannelStatusMask
  17010. */
  17011. DMA_CalcDMAMUXChannelBaseAndMask(hdma);
  17012. 8007448: 6878 ldr r0, [r7, #4]
  17013. 800744a: f002 fa43 bl 80098d4 <DMA_CalcDMAMUXChannelBaseAndMask>
  17014. if(hdma->Init.Direction == DMA_MEMORY_TO_MEMORY)
  17015. 800744e: 687b ldr r3, [r7, #4]
  17016. 8007450: 689b ldr r3, [r3, #8]
  17017. 8007452: 2b80 cmp r3, #128 @ 0x80
  17018. 8007454: d102 bne.n 800745c <HAL_DMA_Init+0x5e4>
  17019. {
  17020. /* if memory to memory force the request to 0*/
  17021. hdma->Init.Request = DMA_REQUEST_MEM2MEM;
  17022. 8007456: 687b ldr r3, [r7, #4]
  17023. 8007458: 2200 movs r2, #0
  17024. 800745a: 605a str r2, [r3, #4]
  17025. }
  17026. /* Set peripheral request to DMAMUX channel */
  17027. hdma->DMAmuxChannel->CCR = (hdma->Init.Request & DMAMUX_CxCR_DMAREQ_ID);
  17028. 800745c: 687b ldr r3, [r7, #4]
  17029. 800745e: 685a ldr r2, [r3, #4]
  17030. 8007460: 687b ldr r3, [r7, #4]
  17031. 8007462: 6e1b ldr r3, [r3, #96] @ 0x60
  17032. 8007464: b2d2 uxtb r2, r2
  17033. 8007466: 601a str r2, [r3, #0]
  17034. /* Clear the DMAMUX synchro overrun flag */
  17035. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  17036. 8007468: 687b ldr r3, [r7, #4]
  17037. 800746a: 6e5b ldr r3, [r3, #100] @ 0x64
  17038. 800746c: 687a ldr r2, [r7, #4]
  17039. 800746e: 6e92 ldr r2, [r2, #104] @ 0x68
  17040. 8007470: 605a str r2, [r3, #4]
  17041. /* Initialize parameters for DMAMUX request generator :
  17042. if the DMA request is DMA_REQUEST_GENERATOR0 to DMA_REQUEST_GENERATOR7
  17043. */
  17044. if((hdma->Init.Request >= DMA_REQUEST_GENERATOR0) && (hdma->Init.Request <= DMA_REQUEST_GENERATOR7))
  17045. 8007472: 687b ldr r3, [r7, #4]
  17046. 8007474: 685b ldr r3, [r3, #4]
  17047. 8007476: 2b00 cmp r3, #0
  17048. 8007478: d010 beq.n 800749c <HAL_DMA_Init+0x624>
  17049. 800747a: 687b ldr r3, [r7, #4]
  17050. 800747c: 685b ldr r3, [r3, #4]
  17051. 800747e: 2b08 cmp r3, #8
  17052. 8007480: d80c bhi.n 800749c <HAL_DMA_Init+0x624>
  17053. {
  17054. /* Initialize parameters for DMAMUX request generator :
  17055. DMAmuxRequestGen, DMAmuxRequestGenStatus and DMAmuxRequestGenStatusMask */
  17056. DMA_CalcDMAMUXRequestGenBaseAndMask(hdma);
  17057. 8007482: 6878 ldr r0, [r7, #4]
  17058. 8007484: f002 fac0 bl 8009a08 <DMA_CalcDMAMUXRequestGenBaseAndMask>
  17059. /* Reset the DMAMUX request generator register */
  17060. hdma->DMAmuxRequestGen->RGCR = 0U;
  17061. 8007488: 687b ldr r3, [r7, #4]
  17062. 800748a: 6edb ldr r3, [r3, #108] @ 0x6c
  17063. 800748c: 2200 movs r2, #0
  17064. 800748e: 601a str r2, [r3, #0]
  17065. /* Clear the DMAMUX request generator overrun flag */
  17066. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  17067. 8007490: 687b ldr r3, [r7, #4]
  17068. 8007492: 6f1b ldr r3, [r3, #112] @ 0x70
  17069. 8007494: 687a ldr r2, [r7, #4]
  17070. 8007496: 6f52 ldr r2, [r2, #116] @ 0x74
  17071. 8007498: 605a str r2, [r3, #4]
  17072. 800749a: e008 b.n 80074ae <HAL_DMA_Init+0x636>
  17073. }
  17074. else
  17075. {
  17076. hdma->DMAmuxRequestGen = 0U;
  17077. 800749c: 687b ldr r3, [r7, #4]
  17078. 800749e: 2200 movs r2, #0
  17079. 80074a0: 66da str r2, [r3, #108] @ 0x6c
  17080. hdma->DMAmuxRequestGenStatus = 0U;
  17081. 80074a2: 687b ldr r3, [r7, #4]
  17082. 80074a4: 2200 movs r2, #0
  17083. 80074a6: 671a str r2, [r3, #112] @ 0x70
  17084. hdma->DMAmuxRequestGenStatusMask = 0U;
  17085. 80074a8: 687b ldr r3, [r7, #4]
  17086. 80074aa: 2200 movs r2, #0
  17087. 80074ac: 675a str r2, [r3, #116] @ 0x74
  17088. }
  17089. }
  17090. /* Initialize the error code */
  17091. hdma->ErrorCode = HAL_DMA_ERROR_NONE;
  17092. 80074ae: 687b ldr r3, [r7, #4]
  17093. 80074b0: 2200 movs r2, #0
  17094. 80074b2: 655a str r2, [r3, #84] @ 0x54
  17095. /* Initialize the DMA state */
  17096. hdma->State = HAL_DMA_STATE_READY;
  17097. 80074b4: 687b ldr r3, [r7, #4]
  17098. 80074b6: 2201 movs r2, #1
  17099. 80074b8: f883 2035 strb.w r2, [r3, #53] @ 0x35
  17100. return HAL_OK;
  17101. 80074bc: 2300 movs r3, #0
  17102. }
  17103. 80074be: 4618 mov r0, r3
  17104. 80074c0: 3718 adds r7, #24
  17105. 80074c2: 46bd mov sp, r7
  17106. 80074c4: bd80 pop {r7, pc}
  17107. 80074c6: bf00 nop
  17108. 80074c8: a7fdabf8 .word 0xa7fdabf8
  17109. 80074cc: cccccccd .word 0xcccccccd
  17110. 80074d0: 40020010 .word 0x40020010
  17111. 80074d4: 40020028 .word 0x40020028
  17112. 80074d8: 40020040 .word 0x40020040
  17113. 80074dc: 40020058 .word 0x40020058
  17114. 80074e0: 40020070 .word 0x40020070
  17115. 80074e4: 40020088 .word 0x40020088
  17116. 80074e8: 400200a0 .word 0x400200a0
  17117. 80074ec: 400200b8 .word 0x400200b8
  17118. 80074f0: 40020410 .word 0x40020410
  17119. 80074f4: 40020428 .word 0x40020428
  17120. 80074f8: 40020440 .word 0x40020440
  17121. 80074fc: 40020458 .word 0x40020458
  17122. 8007500: 40020470 .word 0x40020470
  17123. 8007504: 40020488 .word 0x40020488
  17124. 8007508: 400204a0 .word 0x400204a0
  17125. 800750c: 400204b8 .word 0x400204b8
  17126. 8007510: 58025408 .word 0x58025408
  17127. 8007514: 5802541c .word 0x5802541c
  17128. 8007518: 58025430 .word 0x58025430
  17129. 800751c: 58025444 .word 0x58025444
  17130. 8007520: 58025458 .word 0x58025458
  17131. 8007524: 5802546c .word 0x5802546c
  17132. 8007528: 58025480 .word 0x58025480
  17133. 800752c: 58025494 .word 0x58025494
  17134. 08007530 <HAL_DMA_Start_IT>:
  17135. * @param DstAddress: The destination memory Buffer address
  17136. * @param DataLength: The length of data to be transferred from source to destination
  17137. * @retval HAL status
  17138. */
  17139. HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
  17140. {
  17141. 8007530: b580 push {r7, lr}
  17142. 8007532: b086 sub sp, #24
  17143. 8007534: af00 add r7, sp, #0
  17144. 8007536: 60f8 str r0, [r7, #12]
  17145. 8007538: 60b9 str r1, [r7, #8]
  17146. 800753a: 607a str r2, [r7, #4]
  17147. 800753c: 603b str r3, [r7, #0]
  17148. HAL_StatusTypeDef status = HAL_OK;
  17149. 800753e: 2300 movs r3, #0
  17150. 8007540: 75fb strb r3, [r7, #23]
  17151. /* Check the parameters */
  17152. assert_param(IS_DMA_BUFFER_SIZE(DataLength));
  17153. /* Check the DMA peripheral handle */
  17154. if(hdma == NULL)
  17155. 8007542: 68fb ldr r3, [r7, #12]
  17156. 8007544: 2b00 cmp r3, #0
  17157. 8007546: d101 bne.n 800754c <HAL_DMA_Start_IT+0x1c>
  17158. {
  17159. return HAL_ERROR;
  17160. 8007548: 2301 movs r3, #1
  17161. 800754a: e226 b.n 800799a <HAL_DMA_Start_IT+0x46a>
  17162. }
  17163. /* Process locked */
  17164. __HAL_LOCK(hdma);
  17165. 800754c: 68fb ldr r3, [r7, #12]
  17166. 800754e: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  17167. 8007552: 2b01 cmp r3, #1
  17168. 8007554: d101 bne.n 800755a <HAL_DMA_Start_IT+0x2a>
  17169. 8007556: 2302 movs r3, #2
  17170. 8007558: e21f b.n 800799a <HAL_DMA_Start_IT+0x46a>
  17171. 800755a: 68fb ldr r3, [r7, #12]
  17172. 800755c: 2201 movs r2, #1
  17173. 800755e: f883 2034 strb.w r2, [r3, #52] @ 0x34
  17174. if(HAL_DMA_STATE_READY == hdma->State)
  17175. 8007562: 68fb ldr r3, [r7, #12]
  17176. 8007564: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  17177. 8007568: b2db uxtb r3, r3
  17178. 800756a: 2b01 cmp r3, #1
  17179. 800756c: f040 820a bne.w 8007984 <HAL_DMA_Start_IT+0x454>
  17180. {
  17181. /* Change DMA peripheral state */
  17182. hdma->State = HAL_DMA_STATE_BUSY;
  17183. 8007570: 68fb ldr r3, [r7, #12]
  17184. 8007572: 2202 movs r2, #2
  17185. 8007574: f883 2035 strb.w r2, [r3, #53] @ 0x35
  17186. /* Initialize the error code */
  17187. hdma->ErrorCode = HAL_DMA_ERROR_NONE;
  17188. 8007578: 68fb ldr r3, [r7, #12]
  17189. 800757a: 2200 movs r2, #0
  17190. 800757c: 655a str r2, [r3, #84] @ 0x54
  17191. /* Disable the peripheral */
  17192. __HAL_DMA_DISABLE(hdma);
  17193. 800757e: 68fb ldr r3, [r7, #12]
  17194. 8007580: 681b ldr r3, [r3, #0]
  17195. 8007582: 4a68 ldr r2, [pc, #416] @ (8007724 <HAL_DMA_Start_IT+0x1f4>)
  17196. 8007584: 4293 cmp r3, r2
  17197. 8007586: d04a beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17198. 8007588: 68fb ldr r3, [r7, #12]
  17199. 800758a: 681b ldr r3, [r3, #0]
  17200. 800758c: 4a66 ldr r2, [pc, #408] @ (8007728 <HAL_DMA_Start_IT+0x1f8>)
  17201. 800758e: 4293 cmp r3, r2
  17202. 8007590: d045 beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17203. 8007592: 68fb ldr r3, [r7, #12]
  17204. 8007594: 681b ldr r3, [r3, #0]
  17205. 8007596: 4a65 ldr r2, [pc, #404] @ (800772c <HAL_DMA_Start_IT+0x1fc>)
  17206. 8007598: 4293 cmp r3, r2
  17207. 800759a: d040 beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17208. 800759c: 68fb ldr r3, [r7, #12]
  17209. 800759e: 681b ldr r3, [r3, #0]
  17210. 80075a0: 4a63 ldr r2, [pc, #396] @ (8007730 <HAL_DMA_Start_IT+0x200>)
  17211. 80075a2: 4293 cmp r3, r2
  17212. 80075a4: d03b beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17213. 80075a6: 68fb ldr r3, [r7, #12]
  17214. 80075a8: 681b ldr r3, [r3, #0]
  17215. 80075aa: 4a62 ldr r2, [pc, #392] @ (8007734 <HAL_DMA_Start_IT+0x204>)
  17216. 80075ac: 4293 cmp r3, r2
  17217. 80075ae: d036 beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17218. 80075b0: 68fb ldr r3, [r7, #12]
  17219. 80075b2: 681b ldr r3, [r3, #0]
  17220. 80075b4: 4a60 ldr r2, [pc, #384] @ (8007738 <HAL_DMA_Start_IT+0x208>)
  17221. 80075b6: 4293 cmp r3, r2
  17222. 80075b8: d031 beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17223. 80075ba: 68fb ldr r3, [r7, #12]
  17224. 80075bc: 681b ldr r3, [r3, #0]
  17225. 80075be: 4a5f ldr r2, [pc, #380] @ (800773c <HAL_DMA_Start_IT+0x20c>)
  17226. 80075c0: 4293 cmp r3, r2
  17227. 80075c2: d02c beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17228. 80075c4: 68fb ldr r3, [r7, #12]
  17229. 80075c6: 681b ldr r3, [r3, #0]
  17230. 80075c8: 4a5d ldr r2, [pc, #372] @ (8007740 <HAL_DMA_Start_IT+0x210>)
  17231. 80075ca: 4293 cmp r3, r2
  17232. 80075cc: d027 beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17233. 80075ce: 68fb ldr r3, [r7, #12]
  17234. 80075d0: 681b ldr r3, [r3, #0]
  17235. 80075d2: 4a5c ldr r2, [pc, #368] @ (8007744 <HAL_DMA_Start_IT+0x214>)
  17236. 80075d4: 4293 cmp r3, r2
  17237. 80075d6: d022 beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17238. 80075d8: 68fb ldr r3, [r7, #12]
  17239. 80075da: 681b ldr r3, [r3, #0]
  17240. 80075dc: 4a5a ldr r2, [pc, #360] @ (8007748 <HAL_DMA_Start_IT+0x218>)
  17241. 80075de: 4293 cmp r3, r2
  17242. 80075e0: d01d beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17243. 80075e2: 68fb ldr r3, [r7, #12]
  17244. 80075e4: 681b ldr r3, [r3, #0]
  17245. 80075e6: 4a59 ldr r2, [pc, #356] @ (800774c <HAL_DMA_Start_IT+0x21c>)
  17246. 80075e8: 4293 cmp r3, r2
  17247. 80075ea: d018 beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17248. 80075ec: 68fb ldr r3, [r7, #12]
  17249. 80075ee: 681b ldr r3, [r3, #0]
  17250. 80075f0: 4a57 ldr r2, [pc, #348] @ (8007750 <HAL_DMA_Start_IT+0x220>)
  17251. 80075f2: 4293 cmp r3, r2
  17252. 80075f4: d013 beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17253. 80075f6: 68fb ldr r3, [r7, #12]
  17254. 80075f8: 681b ldr r3, [r3, #0]
  17255. 80075fa: 4a56 ldr r2, [pc, #344] @ (8007754 <HAL_DMA_Start_IT+0x224>)
  17256. 80075fc: 4293 cmp r3, r2
  17257. 80075fe: d00e beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17258. 8007600: 68fb ldr r3, [r7, #12]
  17259. 8007602: 681b ldr r3, [r3, #0]
  17260. 8007604: 4a54 ldr r2, [pc, #336] @ (8007758 <HAL_DMA_Start_IT+0x228>)
  17261. 8007606: 4293 cmp r3, r2
  17262. 8007608: d009 beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17263. 800760a: 68fb ldr r3, [r7, #12]
  17264. 800760c: 681b ldr r3, [r3, #0]
  17265. 800760e: 4a53 ldr r2, [pc, #332] @ (800775c <HAL_DMA_Start_IT+0x22c>)
  17266. 8007610: 4293 cmp r3, r2
  17267. 8007612: d004 beq.n 800761e <HAL_DMA_Start_IT+0xee>
  17268. 8007614: 68fb ldr r3, [r7, #12]
  17269. 8007616: 681b ldr r3, [r3, #0]
  17270. 8007618: 4a51 ldr r2, [pc, #324] @ (8007760 <HAL_DMA_Start_IT+0x230>)
  17271. 800761a: 4293 cmp r3, r2
  17272. 800761c: d108 bne.n 8007630 <HAL_DMA_Start_IT+0x100>
  17273. 800761e: 68fb ldr r3, [r7, #12]
  17274. 8007620: 681b ldr r3, [r3, #0]
  17275. 8007622: 681a ldr r2, [r3, #0]
  17276. 8007624: 68fb ldr r3, [r7, #12]
  17277. 8007626: 681b ldr r3, [r3, #0]
  17278. 8007628: f022 0201 bic.w r2, r2, #1
  17279. 800762c: 601a str r2, [r3, #0]
  17280. 800762e: e007 b.n 8007640 <HAL_DMA_Start_IT+0x110>
  17281. 8007630: 68fb ldr r3, [r7, #12]
  17282. 8007632: 681b ldr r3, [r3, #0]
  17283. 8007634: 681a ldr r2, [r3, #0]
  17284. 8007636: 68fb ldr r3, [r7, #12]
  17285. 8007638: 681b ldr r3, [r3, #0]
  17286. 800763a: f022 0201 bic.w r2, r2, #1
  17287. 800763e: 601a str r2, [r3, #0]
  17288. /* Configure the source, destination address and the data length */
  17289. DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);
  17290. 8007640: 683b ldr r3, [r7, #0]
  17291. 8007642: 687a ldr r2, [r7, #4]
  17292. 8007644: 68b9 ldr r1, [r7, #8]
  17293. 8007646: 68f8 ldr r0, [r7, #12]
  17294. 8007648: f001 fe6a bl 8009320 <DMA_SetConfig>
  17295. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  17296. 800764c: 68fb ldr r3, [r7, #12]
  17297. 800764e: 681b ldr r3, [r3, #0]
  17298. 8007650: 4a34 ldr r2, [pc, #208] @ (8007724 <HAL_DMA_Start_IT+0x1f4>)
  17299. 8007652: 4293 cmp r3, r2
  17300. 8007654: d04a beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17301. 8007656: 68fb ldr r3, [r7, #12]
  17302. 8007658: 681b ldr r3, [r3, #0]
  17303. 800765a: 4a33 ldr r2, [pc, #204] @ (8007728 <HAL_DMA_Start_IT+0x1f8>)
  17304. 800765c: 4293 cmp r3, r2
  17305. 800765e: d045 beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17306. 8007660: 68fb ldr r3, [r7, #12]
  17307. 8007662: 681b ldr r3, [r3, #0]
  17308. 8007664: 4a31 ldr r2, [pc, #196] @ (800772c <HAL_DMA_Start_IT+0x1fc>)
  17309. 8007666: 4293 cmp r3, r2
  17310. 8007668: d040 beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17311. 800766a: 68fb ldr r3, [r7, #12]
  17312. 800766c: 681b ldr r3, [r3, #0]
  17313. 800766e: 4a30 ldr r2, [pc, #192] @ (8007730 <HAL_DMA_Start_IT+0x200>)
  17314. 8007670: 4293 cmp r3, r2
  17315. 8007672: d03b beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17316. 8007674: 68fb ldr r3, [r7, #12]
  17317. 8007676: 681b ldr r3, [r3, #0]
  17318. 8007678: 4a2e ldr r2, [pc, #184] @ (8007734 <HAL_DMA_Start_IT+0x204>)
  17319. 800767a: 4293 cmp r3, r2
  17320. 800767c: d036 beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17321. 800767e: 68fb ldr r3, [r7, #12]
  17322. 8007680: 681b ldr r3, [r3, #0]
  17323. 8007682: 4a2d ldr r2, [pc, #180] @ (8007738 <HAL_DMA_Start_IT+0x208>)
  17324. 8007684: 4293 cmp r3, r2
  17325. 8007686: d031 beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17326. 8007688: 68fb ldr r3, [r7, #12]
  17327. 800768a: 681b ldr r3, [r3, #0]
  17328. 800768c: 4a2b ldr r2, [pc, #172] @ (800773c <HAL_DMA_Start_IT+0x20c>)
  17329. 800768e: 4293 cmp r3, r2
  17330. 8007690: d02c beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17331. 8007692: 68fb ldr r3, [r7, #12]
  17332. 8007694: 681b ldr r3, [r3, #0]
  17333. 8007696: 4a2a ldr r2, [pc, #168] @ (8007740 <HAL_DMA_Start_IT+0x210>)
  17334. 8007698: 4293 cmp r3, r2
  17335. 800769a: d027 beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17336. 800769c: 68fb ldr r3, [r7, #12]
  17337. 800769e: 681b ldr r3, [r3, #0]
  17338. 80076a0: 4a28 ldr r2, [pc, #160] @ (8007744 <HAL_DMA_Start_IT+0x214>)
  17339. 80076a2: 4293 cmp r3, r2
  17340. 80076a4: d022 beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17341. 80076a6: 68fb ldr r3, [r7, #12]
  17342. 80076a8: 681b ldr r3, [r3, #0]
  17343. 80076aa: 4a27 ldr r2, [pc, #156] @ (8007748 <HAL_DMA_Start_IT+0x218>)
  17344. 80076ac: 4293 cmp r3, r2
  17345. 80076ae: d01d beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17346. 80076b0: 68fb ldr r3, [r7, #12]
  17347. 80076b2: 681b ldr r3, [r3, #0]
  17348. 80076b4: 4a25 ldr r2, [pc, #148] @ (800774c <HAL_DMA_Start_IT+0x21c>)
  17349. 80076b6: 4293 cmp r3, r2
  17350. 80076b8: d018 beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17351. 80076ba: 68fb ldr r3, [r7, #12]
  17352. 80076bc: 681b ldr r3, [r3, #0]
  17353. 80076be: 4a24 ldr r2, [pc, #144] @ (8007750 <HAL_DMA_Start_IT+0x220>)
  17354. 80076c0: 4293 cmp r3, r2
  17355. 80076c2: d013 beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17356. 80076c4: 68fb ldr r3, [r7, #12]
  17357. 80076c6: 681b ldr r3, [r3, #0]
  17358. 80076c8: 4a22 ldr r2, [pc, #136] @ (8007754 <HAL_DMA_Start_IT+0x224>)
  17359. 80076ca: 4293 cmp r3, r2
  17360. 80076cc: d00e beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17361. 80076ce: 68fb ldr r3, [r7, #12]
  17362. 80076d0: 681b ldr r3, [r3, #0]
  17363. 80076d2: 4a21 ldr r2, [pc, #132] @ (8007758 <HAL_DMA_Start_IT+0x228>)
  17364. 80076d4: 4293 cmp r3, r2
  17365. 80076d6: d009 beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17366. 80076d8: 68fb ldr r3, [r7, #12]
  17367. 80076da: 681b ldr r3, [r3, #0]
  17368. 80076dc: 4a1f ldr r2, [pc, #124] @ (800775c <HAL_DMA_Start_IT+0x22c>)
  17369. 80076de: 4293 cmp r3, r2
  17370. 80076e0: d004 beq.n 80076ec <HAL_DMA_Start_IT+0x1bc>
  17371. 80076e2: 68fb ldr r3, [r7, #12]
  17372. 80076e4: 681b ldr r3, [r3, #0]
  17373. 80076e6: 4a1e ldr r2, [pc, #120] @ (8007760 <HAL_DMA_Start_IT+0x230>)
  17374. 80076e8: 4293 cmp r3, r2
  17375. 80076ea: d101 bne.n 80076f0 <HAL_DMA_Start_IT+0x1c0>
  17376. 80076ec: 2301 movs r3, #1
  17377. 80076ee: e000 b.n 80076f2 <HAL_DMA_Start_IT+0x1c2>
  17378. 80076f0: 2300 movs r3, #0
  17379. 80076f2: 2b00 cmp r3, #0
  17380. 80076f4: d036 beq.n 8007764 <HAL_DMA_Start_IT+0x234>
  17381. {
  17382. /* Enable Common interrupts*/
  17383. 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));
  17384. 80076f6: 68fb ldr r3, [r7, #12]
  17385. 80076f8: 681b ldr r3, [r3, #0]
  17386. 80076fa: 681b ldr r3, [r3, #0]
  17387. 80076fc: f023 021e bic.w r2, r3, #30
  17388. 8007700: 68fb ldr r3, [r7, #12]
  17389. 8007702: 681b ldr r3, [r3, #0]
  17390. 8007704: f042 0216 orr.w r2, r2, #22
  17391. 8007708: 601a str r2, [r3, #0]
  17392. if(hdma->XferHalfCpltCallback != NULL)
  17393. 800770a: 68fb ldr r3, [r7, #12]
  17394. 800770c: 6c1b ldr r3, [r3, #64] @ 0x40
  17395. 800770e: 2b00 cmp r3, #0
  17396. 8007710: d03e beq.n 8007790 <HAL_DMA_Start_IT+0x260>
  17397. {
  17398. /* Enable Half Transfer IT if corresponding Callback is set */
  17399. ((DMA_Stream_TypeDef *)hdma->Instance)->CR |= DMA_IT_HT;
  17400. 8007712: 68fb ldr r3, [r7, #12]
  17401. 8007714: 681b ldr r3, [r3, #0]
  17402. 8007716: 681a ldr r2, [r3, #0]
  17403. 8007718: 68fb ldr r3, [r7, #12]
  17404. 800771a: 681b ldr r3, [r3, #0]
  17405. 800771c: f042 0208 orr.w r2, r2, #8
  17406. 8007720: 601a str r2, [r3, #0]
  17407. 8007722: e035 b.n 8007790 <HAL_DMA_Start_IT+0x260>
  17408. 8007724: 40020010 .word 0x40020010
  17409. 8007728: 40020028 .word 0x40020028
  17410. 800772c: 40020040 .word 0x40020040
  17411. 8007730: 40020058 .word 0x40020058
  17412. 8007734: 40020070 .word 0x40020070
  17413. 8007738: 40020088 .word 0x40020088
  17414. 800773c: 400200a0 .word 0x400200a0
  17415. 8007740: 400200b8 .word 0x400200b8
  17416. 8007744: 40020410 .word 0x40020410
  17417. 8007748: 40020428 .word 0x40020428
  17418. 800774c: 40020440 .word 0x40020440
  17419. 8007750: 40020458 .word 0x40020458
  17420. 8007754: 40020470 .word 0x40020470
  17421. 8007758: 40020488 .word 0x40020488
  17422. 800775c: 400204a0 .word 0x400204a0
  17423. 8007760: 400204b8 .word 0x400204b8
  17424. }
  17425. }
  17426. else /* BDMA channel */
  17427. {
  17428. /* Enable Common interrupts */
  17429. MODIFY_REG(((BDMA_Channel_TypeDef *)hdma->Instance)->CCR, (BDMA_CCR_TCIE | BDMA_CCR_HTIE | BDMA_CCR_TEIE), (BDMA_CCR_TCIE | BDMA_CCR_TEIE));
  17430. 8007764: 68fb ldr r3, [r7, #12]
  17431. 8007766: 681b ldr r3, [r3, #0]
  17432. 8007768: 681b ldr r3, [r3, #0]
  17433. 800776a: f023 020e bic.w r2, r3, #14
  17434. 800776e: 68fb ldr r3, [r7, #12]
  17435. 8007770: 681b ldr r3, [r3, #0]
  17436. 8007772: f042 020a orr.w r2, r2, #10
  17437. 8007776: 601a str r2, [r3, #0]
  17438. if(hdma->XferHalfCpltCallback != NULL)
  17439. 8007778: 68fb ldr r3, [r7, #12]
  17440. 800777a: 6c1b ldr r3, [r3, #64] @ 0x40
  17441. 800777c: 2b00 cmp r3, #0
  17442. 800777e: d007 beq.n 8007790 <HAL_DMA_Start_IT+0x260>
  17443. {
  17444. /*Enable Half Transfer IT if corresponding Callback is set */
  17445. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR |= BDMA_CCR_HTIE;
  17446. 8007780: 68fb ldr r3, [r7, #12]
  17447. 8007782: 681b ldr r3, [r3, #0]
  17448. 8007784: 681a ldr r2, [r3, #0]
  17449. 8007786: 68fb ldr r3, [r7, #12]
  17450. 8007788: 681b ldr r3, [r3, #0]
  17451. 800778a: f042 0204 orr.w r2, r2, #4
  17452. 800778e: 601a str r2, [r3, #0]
  17453. }
  17454. }
  17455. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  17456. 8007790: 68fb ldr r3, [r7, #12]
  17457. 8007792: 681b ldr r3, [r3, #0]
  17458. 8007794: 4a83 ldr r2, [pc, #524] @ (80079a4 <HAL_DMA_Start_IT+0x474>)
  17459. 8007796: 4293 cmp r3, r2
  17460. 8007798: d072 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17461. 800779a: 68fb ldr r3, [r7, #12]
  17462. 800779c: 681b ldr r3, [r3, #0]
  17463. 800779e: 4a82 ldr r2, [pc, #520] @ (80079a8 <HAL_DMA_Start_IT+0x478>)
  17464. 80077a0: 4293 cmp r3, r2
  17465. 80077a2: d06d beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17466. 80077a4: 68fb ldr r3, [r7, #12]
  17467. 80077a6: 681b ldr r3, [r3, #0]
  17468. 80077a8: 4a80 ldr r2, [pc, #512] @ (80079ac <HAL_DMA_Start_IT+0x47c>)
  17469. 80077aa: 4293 cmp r3, r2
  17470. 80077ac: d068 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17471. 80077ae: 68fb ldr r3, [r7, #12]
  17472. 80077b0: 681b ldr r3, [r3, #0]
  17473. 80077b2: 4a7f ldr r2, [pc, #508] @ (80079b0 <HAL_DMA_Start_IT+0x480>)
  17474. 80077b4: 4293 cmp r3, r2
  17475. 80077b6: d063 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17476. 80077b8: 68fb ldr r3, [r7, #12]
  17477. 80077ba: 681b ldr r3, [r3, #0]
  17478. 80077bc: 4a7d ldr r2, [pc, #500] @ (80079b4 <HAL_DMA_Start_IT+0x484>)
  17479. 80077be: 4293 cmp r3, r2
  17480. 80077c0: d05e beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17481. 80077c2: 68fb ldr r3, [r7, #12]
  17482. 80077c4: 681b ldr r3, [r3, #0]
  17483. 80077c6: 4a7c ldr r2, [pc, #496] @ (80079b8 <HAL_DMA_Start_IT+0x488>)
  17484. 80077c8: 4293 cmp r3, r2
  17485. 80077ca: d059 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17486. 80077cc: 68fb ldr r3, [r7, #12]
  17487. 80077ce: 681b ldr r3, [r3, #0]
  17488. 80077d0: 4a7a ldr r2, [pc, #488] @ (80079bc <HAL_DMA_Start_IT+0x48c>)
  17489. 80077d2: 4293 cmp r3, r2
  17490. 80077d4: d054 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17491. 80077d6: 68fb ldr r3, [r7, #12]
  17492. 80077d8: 681b ldr r3, [r3, #0]
  17493. 80077da: 4a79 ldr r2, [pc, #484] @ (80079c0 <HAL_DMA_Start_IT+0x490>)
  17494. 80077dc: 4293 cmp r3, r2
  17495. 80077de: d04f beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17496. 80077e0: 68fb ldr r3, [r7, #12]
  17497. 80077e2: 681b ldr r3, [r3, #0]
  17498. 80077e4: 4a77 ldr r2, [pc, #476] @ (80079c4 <HAL_DMA_Start_IT+0x494>)
  17499. 80077e6: 4293 cmp r3, r2
  17500. 80077e8: d04a beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17501. 80077ea: 68fb ldr r3, [r7, #12]
  17502. 80077ec: 681b ldr r3, [r3, #0]
  17503. 80077ee: 4a76 ldr r2, [pc, #472] @ (80079c8 <HAL_DMA_Start_IT+0x498>)
  17504. 80077f0: 4293 cmp r3, r2
  17505. 80077f2: d045 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17506. 80077f4: 68fb ldr r3, [r7, #12]
  17507. 80077f6: 681b ldr r3, [r3, #0]
  17508. 80077f8: 4a74 ldr r2, [pc, #464] @ (80079cc <HAL_DMA_Start_IT+0x49c>)
  17509. 80077fa: 4293 cmp r3, r2
  17510. 80077fc: d040 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17511. 80077fe: 68fb ldr r3, [r7, #12]
  17512. 8007800: 681b ldr r3, [r3, #0]
  17513. 8007802: 4a73 ldr r2, [pc, #460] @ (80079d0 <HAL_DMA_Start_IT+0x4a0>)
  17514. 8007804: 4293 cmp r3, r2
  17515. 8007806: d03b beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17516. 8007808: 68fb ldr r3, [r7, #12]
  17517. 800780a: 681b ldr r3, [r3, #0]
  17518. 800780c: 4a71 ldr r2, [pc, #452] @ (80079d4 <HAL_DMA_Start_IT+0x4a4>)
  17519. 800780e: 4293 cmp r3, r2
  17520. 8007810: d036 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17521. 8007812: 68fb ldr r3, [r7, #12]
  17522. 8007814: 681b ldr r3, [r3, #0]
  17523. 8007816: 4a70 ldr r2, [pc, #448] @ (80079d8 <HAL_DMA_Start_IT+0x4a8>)
  17524. 8007818: 4293 cmp r3, r2
  17525. 800781a: d031 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17526. 800781c: 68fb ldr r3, [r7, #12]
  17527. 800781e: 681b ldr r3, [r3, #0]
  17528. 8007820: 4a6e ldr r2, [pc, #440] @ (80079dc <HAL_DMA_Start_IT+0x4ac>)
  17529. 8007822: 4293 cmp r3, r2
  17530. 8007824: d02c beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17531. 8007826: 68fb ldr r3, [r7, #12]
  17532. 8007828: 681b ldr r3, [r3, #0]
  17533. 800782a: 4a6d ldr r2, [pc, #436] @ (80079e0 <HAL_DMA_Start_IT+0x4b0>)
  17534. 800782c: 4293 cmp r3, r2
  17535. 800782e: d027 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17536. 8007830: 68fb ldr r3, [r7, #12]
  17537. 8007832: 681b ldr r3, [r3, #0]
  17538. 8007834: 4a6b ldr r2, [pc, #428] @ (80079e4 <HAL_DMA_Start_IT+0x4b4>)
  17539. 8007836: 4293 cmp r3, r2
  17540. 8007838: d022 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17541. 800783a: 68fb ldr r3, [r7, #12]
  17542. 800783c: 681b ldr r3, [r3, #0]
  17543. 800783e: 4a6a ldr r2, [pc, #424] @ (80079e8 <HAL_DMA_Start_IT+0x4b8>)
  17544. 8007840: 4293 cmp r3, r2
  17545. 8007842: d01d beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17546. 8007844: 68fb ldr r3, [r7, #12]
  17547. 8007846: 681b ldr r3, [r3, #0]
  17548. 8007848: 4a68 ldr r2, [pc, #416] @ (80079ec <HAL_DMA_Start_IT+0x4bc>)
  17549. 800784a: 4293 cmp r3, r2
  17550. 800784c: d018 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17551. 800784e: 68fb ldr r3, [r7, #12]
  17552. 8007850: 681b ldr r3, [r3, #0]
  17553. 8007852: 4a67 ldr r2, [pc, #412] @ (80079f0 <HAL_DMA_Start_IT+0x4c0>)
  17554. 8007854: 4293 cmp r3, r2
  17555. 8007856: d013 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17556. 8007858: 68fb ldr r3, [r7, #12]
  17557. 800785a: 681b ldr r3, [r3, #0]
  17558. 800785c: 4a65 ldr r2, [pc, #404] @ (80079f4 <HAL_DMA_Start_IT+0x4c4>)
  17559. 800785e: 4293 cmp r3, r2
  17560. 8007860: d00e beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17561. 8007862: 68fb ldr r3, [r7, #12]
  17562. 8007864: 681b ldr r3, [r3, #0]
  17563. 8007866: 4a64 ldr r2, [pc, #400] @ (80079f8 <HAL_DMA_Start_IT+0x4c8>)
  17564. 8007868: 4293 cmp r3, r2
  17565. 800786a: d009 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17566. 800786c: 68fb ldr r3, [r7, #12]
  17567. 800786e: 681b ldr r3, [r3, #0]
  17568. 8007870: 4a62 ldr r2, [pc, #392] @ (80079fc <HAL_DMA_Start_IT+0x4cc>)
  17569. 8007872: 4293 cmp r3, r2
  17570. 8007874: d004 beq.n 8007880 <HAL_DMA_Start_IT+0x350>
  17571. 8007876: 68fb ldr r3, [r7, #12]
  17572. 8007878: 681b ldr r3, [r3, #0]
  17573. 800787a: 4a61 ldr r2, [pc, #388] @ (8007a00 <HAL_DMA_Start_IT+0x4d0>)
  17574. 800787c: 4293 cmp r3, r2
  17575. 800787e: d101 bne.n 8007884 <HAL_DMA_Start_IT+0x354>
  17576. 8007880: 2301 movs r3, #1
  17577. 8007882: e000 b.n 8007886 <HAL_DMA_Start_IT+0x356>
  17578. 8007884: 2300 movs r3, #0
  17579. 8007886: 2b00 cmp r3, #0
  17580. 8007888: d01a beq.n 80078c0 <HAL_DMA_Start_IT+0x390>
  17581. {
  17582. /* Check if DMAMUX Synchronization is enabled */
  17583. if((hdma->DMAmuxChannel->CCR & DMAMUX_CxCR_SE) != 0U)
  17584. 800788a: 68fb ldr r3, [r7, #12]
  17585. 800788c: 6e1b ldr r3, [r3, #96] @ 0x60
  17586. 800788e: 681b ldr r3, [r3, #0]
  17587. 8007890: f403 3380 and.w r3, r3, #65536 @ 0x10000
  17588. 8007894: 2b00 cmp r3, #0
  17589. 8007896: d007 beq.n 80078a8 <HAL_DMA_Start_IT+0x378>
  17590. {
  17591. /* Enable DMAMUX sync overrun IT*/
  17592. hdma->DMAmuxChannel->CCR |= DMAMUX_CxCR_SOIE;
  17593. 8007898: 68fb ldr r3, [r7, #12]
  17594. 800789a: 6e1b ldr r3, [r3, #96] @ 0x60
  17595. 800789c: 681a ldr r2, [r3, #0]
  17596. 800789e: 68fb ldr r3, [r7, #12]
  17597. 80078a0: 6e1b ldr r3, [r3, #96] @ 0x60
  17598. 80078a2: f442 7280 orr.w r2, r2, #256 @ 0x100
  17599. 80078a6: 601a str r2, [r3, #0]
  17600. }
  17601. if(hdma->DMAmuxRequestGen != 0U)
  17602. 80078a8: 68fb ldr r3, [r7, #12]
  17603. 80078aa: 6edb ldr r3, [r3, #108] @ 0x6c
  17604. 80078ac: 2b00 cmp r3, #0
  17605. 80078ae: d007 beq.n 80078c0 <HAL_DMA_Start_IT+0x390>
  17606. {
  17607. /* if using DMAMUX request generator, enable the DMAMUX request generator overrun IT*/
  17608. /* enable the request gen overrun IT */
  17609. hdma->DMAmuxRequestGen->RGCR |= DMAMUX_RGxCR_OIE;
  17610. 80078b0: 68fb ldr r3, [r7, #12]
  17611. 80078b2: 6edb ldr r3, [r3, #108] @ 0x6c
  17612. 80078b4: 681a ldr r2, [r3, #0]
  17613. 80078b6: 68fb ldr r3, [r7, #12]
  17614. 80078b8: 6edb ldr r3, [r3, #108] @ 0x6c
  17615. 80078ba: f442 7280 orr.w r2, r2, #256 @ 0x100
  17616. 80078be: 601a str r2, [r3, #0]
  17617. }
  17618. }
  17619. /* Enable the Peripheral */
  17620. __HAL_DMA_ENABLE(hdma);
  17621. 80078c0: 68fb ldr r3, [r7, #12]
  17622. 80078c2: 681b ldr r3, [r3, #0]
  17623. 80078c4: 4a37 ldr r2, [pc, #220] @ (80079a4 <HAL_DMA_Start_IT+0x474>)
  17624. 80078c6: 4293 cmp r3, r2
  17625. 80078c8: d04a beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17626. 80078ca: 68fb ldr r3, [r7, #12]
  17627. 80078cc: 681b ldr r3, [r3, #0]
  17628. 80078ce: 4a36 ldr r2, [pc, #216] @ (80079a8 <HAL_DMA_Start_IT+0x478>)
  17629. 80078d0: 4293 cmp r3, r2
  17630. 80078d2: d045 beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17631. 80078d4: 68fb ldr r3, [r7, #12]
  17632. 80078d6: 681b ldr r3, [r3, #0]
  17633. 80078d8: 4a34 ldr r2, [pc, #208] @ (80079ac <HAL_DMA_Start_IT+0x47c>)
  17634. 80078da: 4293 cmp r3, r2
  17635. 80078dc: d040 beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17636. 80078de: 68fb ldr r3, [r7, #12]
  17637. 80078e0: 681b ldr r3, [r3, #0]
  17638. 80078e2: 4a33 ldr r2, [pc, #204] @ (80079b0 <HAL_DMA_Start_IT+0x480>)
  17639. 80078e4: 4293 cmp r3, r2
  17640. 80078e6: d03b beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17641. 80078e8: 68fb ldr r3, [r7, #12]
  17642. 80078ea: 681b ldr r3, [r3, #0]
  17643. 80078ec: 4a31 ldr r2, [pc, #196] @ (80079b4 <HAL_DMA_Start_IT+0x484>)
  17644. 80078ee: 4293 cmp r3, r2
  17645. 80078f0: d036 beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17646. 80078f2: 68fb ldr r3, [r7, #12]
  17647. 80078f4: 681b ldr r3, [r3, #0]
  17648. 80078f6: 4a30 ldr r2, [pc, #192] @ (80079b8 <HAL_DMA_Start_IT+0x488>)
  17649. 80078f8: 4293 cmp r3, r2
  17650. 80078fa: d031 beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17651. 80078fc: 68fb ldr r3, [r7, #12]
  17652. 80078fe: 681b ldr r3, [r3, #0]
  17653. 8007900: 4a2e ldr r2, [pc, #184] @ (80079bc <HAL_DMA_Start_IT+0x48c>)
  17654. 8007902: 4293 cmp r3, r2
  17655. 8007904: d02c beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17656. 8007906: 68fb ldr r3, [r7, #12]
  17657. 8007908: 681b ldr r3, [r3, #0]
  17658. 800790a: 4a2d ldr r2, [pc, #180] @ (80079c0 <HAL_DMA_Start_IT+0x490>)
  17659. 800790c: 4293 cmp r3, r2
  17660. 800790e: d027 beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17661. 8007910: 68fb ldr r3, [r7, #12]
  17662. 8007912: 681b ldr r3, [r3, #0]
  17663. 8007914: 4a2b ldr r2, [pc, #172] @ (80079c4 <HAL_DMA_Start_IT+0x494>)
  17664. 8007916: 4293 cmp r3, r2
  17665. 8007918: d022 beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17666. 800791a: 68fb ldr r3, [r7, #12]
  17667. 800791c: 681b ldr r3, [r3, #0]
  17668. 800791e: 4a2a ldr r2, [pc, #168] @ (80079c8 <HAL_DMA_Start_IT+0x498>)
  17669. 8007920: 4293 cmp r3, r2
  17670. 8007922: d01d beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17671. 8007924: 68fb ldr r3, [r7, #12]
  17672. 8007926: 681b ldr r3, [r3, #0]
  17673. 8007928: 4a28 ldr r2, [pc, #160] @ (80079cc <HAL_DMA_Start_IT+0x49c>)
  17674. 800792a: 4293 cmp r3, r2
  17675. 800792c: d018 beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17676. 800792e: 68fb ldr r3, [r7, #12]
  17677. 8007930: 681b ldr r3, [r3, #0]
  17678. 8007932: 4a27 ldr r2, [pc, #156] @ (80079d0 <HAL_DMA_Start_IT+0x4a0>)
  17679. 8007934: 4293 cmp r3, r2
  17680. 8007936: d013 beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17681. 8007938: 68fb ldr r3, [r7, #12]
  17682. 800793a: 681b ldr r3, [r3, #0]
  17683. 800793c: 4a25 ldr r2, [pc, #148] @ (80079d4 <HAL_DMA_Start_IT+0x4a4>)
  17684. 800793e: 4293 cmp r3, r2
  17685. 8007940: d00e beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17686. 8007942: 68fb ldr r3, [r7, #12]
  17687. 8007944: 681b ldr r3, [r3, #0]
  17688. 8007946: 4a24 ldr r2, [pc, #144] @ (80079d8 <HAL_DMA_Start_IT+0x4a8>)
  17689. 8007948: 4293 cmp r3, r2
  17690. 800794a: d009 beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17691. 800794c: 68fb ldr r3, [r7, #12]
  17692. 800794e: 681b ldr r3, [r3, #0]
  17693. 8007950: 4a22 ldr r2, [pc, #136] @ (80079dc <HAL_DMA_Start_IT+0x4ac>)
  17694. 8007952: 4293 cmp r3, r2
  17695. 8007954: d004 beq.n 8007960 <HAL_DMA_Start_IT+0x430>
  17696. 8007956: 68fb ldr r3, [r7, #12]
  17697. 8007958: 681b ldr r3, [r3, #0]
  17698. 800795a: 4a21 ldr r2, [pc, #132] @ (80079e0 <HAL_DMA_Start_IT+0x4b0>)
  17699. 800795c: 4293 cmp r3, r2
  17700. 800795e: d108 bne.n 8007972 <HAL_DMA_Start_IT+0x442>
  17701. 8007960: 68fb ldr r3, [r7, #12]
  17702. 8007962: 681b ldr r3, [r3, #0]
  17703. 8007964: 681a ldr r2, [r3, #0]
  17704. 8007966: 68fb ldr r3, [r7, #12]
  17705. 8007968: 681b ldr r3, [r3, #0]
  17706. 800796a: f042 0201 orr.w r2, r2, #1
  17707. 800796e: 601a str r2, [r3, #0]
  17708. 8007970: e012 b.n 8007998 <HAL_DMA_Start_IT+0x468>
  17709. 8007972: 68fb ldr r3, [r7, #12]
  17710. 8007974: 681b ldr r3, [r3, #0]
  17711. 8007976: 681a ldr r2, [r3, #0]
  17712. 8007978: 68fb ldr r3, [r7, #12]
  17713. 800797a: 681b ldr r3, [r3, #0]
  17714. 800797c: f042 0201 orr.w r2, r2, #1
  17715. 8007980: 601a str r2, [r3, #0]
  17716. 8007982: e009 b.n 8007998 <HAL_DMA_Start_IT+0x468>
  17717. }
  17718. else
  17719. {
  17720. /* Set the error code to busy */
  17721. hdma->ErrorCode = HAL_DMA_ERROR_BUSY;
  17722. 8007984: 68fb ldr r3, [r7, #12]
  17723. 8007986: f44f 6200 mov.w r2, #2048 @ 0x800
  17724. 800798a: 655a str r2, [r3, #84] @ 0x54
  17725. /* Process unlocked */
  17726. __HAL_UNLOCK(hdma);
  17727. 800798c: 68fb ldr r3, [r7, #12]
  17728. 800798e: 2200 movs r2, #0
  17729. 8007990: f883 2034 strb.w r2, [r3, #52] @ 0x34
  17730. /* Return error status */
  17731. status = HAL_ERROR;
  17732. 8007994: 2301 movs r3, #1
  17733. 8007996: 75fb strb r3, [r7, #23]
  17734. }
  17735. return status;
  17736. 8007998: 7dfb ldrb r3, [r7, #23]
  17737. }
  17738. 800799a: 4618 mov r0, r3
  17739. 800799c: 3718 adds r7, #24
  17740. 800799e: 46bd mov sp, r7
  17741. 80079a0: bd80 pop {r7, pc}
  17742. 80079a2: bf00 nop
  17743. 80079a4: 40020010 .word 0x40020010
  17744. 80079a8: 40020028 .word 0x40020028
  17745. 80079ac: 40020040 .word 0x40020040
  17746. 80079b0: 40020058 .word 0x40020058
  17747. 80079b4: 40020070 .word 0x40020070
  17748. 80079b8: 40020088 .word 0x40020088
  17749. 80079bc: 400200a0 .word 0x400200a0
  17750. 80079c0: 400200b8 .word 0x400200b8
  17751. 80079c4: 40020410 .word 0x40020410
  17752. 80079c8: 40020428 .word 0x40020428
  17753. 80079cc: 40020440 .word 0x40020440
  17754. 80079d0: 40020458 .word 0x40020458
  17755. 80079d4: 40020470 .word 0x40020470
  17756. 80079d8: 40020488 .word 0x40020488
  17757. 80079dc: 400204a0 .word 0x400204a0
  17758. 80079e0: 400204b8 .word 0x400204b8
  17759. 80079e4: 58025408 .word 0x58025408
  17760. 80079e8: 5802541c .word 0x5802541c
  17761. 80079ec: 58025430 .word 0x58025430
  17762. 80079f0: 58025444 .word 0x58025444
  17763. 80079f4: 58025458 .word 0x58025458
  17764. 80079f8: 5802546c .word 0x5802546c
  17765. 80079fc: 58025480 .word 0x58025480
  17766. 8007a00: 58025494 .word 0x58025494
  17767. 08007a04 <HAL_DMA_Abort>:
  17768. * and the Stream will be effectively disabled only after the transfer of
  17769. * this single data is finished.
  17770. * @retval HAL status
  17771. */
  17772. HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
  17773. {
  17774. 8007a04: b580 push {r7, lr}
  17775. 8007a06: b086 sub sp, #24
  17776. 8007a08: af00 add r7, sp, #0
  17777. 8007a0a: 6078 str r0, [r7, #4]
  17778. /* calculate DMA base and stream number */
  17779. DMA_Base_Registers *regs_dma;
  17780. BDMA_Base_Registers *regs_bdma;
  17781. const __IO uint32_t *enableRegister;
  17782. uint32_t tickstart = HAL_GetTick();
  17783. 8007a0c: f7fd f82a bl 8004a64 <HAL_GetTick>
  17784. 8007a10: 6138 str r0, [r7, #16]
  17785. /* Check the DMA peripheral handle */
  17786. if(hdma == NULL)
  17787. 8007a12: 687b ldr r3, [r7, #4]
  17788. 8007a14: 2b00 cmp r3, #0
  17789. 8007a16: d101 bne.n 8007a1c <HAL_DMA_Abort+0x18>
  17790. {
  17791. return HAL_ERROR;
  17792. 8007a18: 2301 movs r3, #1
  17793. 8007a1a: e2dc b.n 8007fd6 <HAL_DMA_Abort+0x5d2>
  17794. }
  17795. /* Check the DMA peripheral state */
  17796. if(hdma->State != HAL_DMA_STATE_BUSY)
  17797. 8007a1c: 687b ldr r3, [r7, #4]
  17798. 8007a1e: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  17799. 8007a22: b2db uxtb r3, r3
  17800. 8007a24: 2b02 cmp r3, #2
  17801. 8007a26: d008 beq.n 8007a3a <HAL_DMA_Abort+0x36>
  17802. {
  17803. hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;
  17804. 8007a28: 687b ldr r3, [r7, #4]
  17805. 8007a2a: 2280 movs r2, #128 @ 0x80
  17806. 8007a2c: 655a str r2, [r3, #84] @ 0x54
  17807. /* Process Unlocked */
  17808. __HAL_UNLOCK(hdma);
  17809. 8007a2e: 687b ldr r3, [r7, #4]
  17810. 8007a30: 2200 movs r2, #0
  17811. 8007a32: f883 2034 strb.w r2, [r3, #52] @ 0x34
  17812. return HAL_ERROR;
  17813. 8007a36: 2301 movs r3, #1
  17814. 8007a38: e2cd b.n 8007fd6 <HAL_DMA_Abort+0x5d2>
  17815. }
  17816. else
  17817. {
  17818. /* Disable all the transfer interrupts */
  17819. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  17820. 8007a3a: 687b ldr r3, [r7, #4]
  17821. 8007a3c: 681b ldr r3, [r3, #0]
  17822. 8007a3e: 4a76 ldr r2, [pc, #472] @ (8007c18 <HAL_DMA_Abort+0x214>)
  17823. 8007a40: 4293 cmp r3, r2
  17824. 8007a42: d04a beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17825. 8007a44: 687b ldr r3, [r7, #4]
  17826. 8007a46: 681b ldr r3, [r3, #0]
  17827. 8007a48: 4a74 ldr r2, [pc, #464] @ (8007c1c <HAL_DMA_Abort+0x218>)
  17828. 8007a4a: 4293 cmp r3, r2
  17829. 8007a4c: d045 beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17830. 8007a4e: 687b ldr r3, [r7, #4]
  17831. 8007a50: 681b ldr r3, [r3, #0]
  17832. 8007a52: 4a73 ldr r2, [pc, #460] @ (8007c20 <HAL_DMA_Abort+0x21c>)
  17833. 8007a54: 4293 cmp r3, r2
  17834. 8007a56: d040 beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17835. 8007a58: 687b ldr r3, [r7, #4]
  17836. 8007a5a: 681b ldr r3, [r3, #0]
  17837. 8007a5c: 4a71 ldr r2, [pc, #452] @ (8007c24 <HAL_DMA_Abort+0x220>)
  17838. 8007a5e: 4293 cmp r3, r2
  17839. 8007a60: d03b beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17840. 8007a62: 687b ldr r3, [r7, #4]
  17841. 8007a64: 681b ldr r3, [r3, #0]
  17842. 8007a66: 4a70 ldr r2, [pc, #448] @ (8007c28 <HAL_DMA_Abort+0x224>)
  17843. 8007a68: 4293 cmp r3, r2
  17844. 8007a6a: d036 beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17845. 8007a6c: 687b ldr r3, [r7, #4]
  17846. 8007a6e: 681b ldr r3, [r3, #0]
  17847. 8007a70: 4a6e ldr r2, [pc, #440] @ (8007c2c <HAL_DMA_Abort+0x228>)
  17848. 8007a72: 4293 cmp r3, r2
  17849. 8007a74: d031 beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17850. 8007a76: 687b ldr r3, [r7, #4]
  17851. 8007a78: 681b ldr r3, [r3, #0]
  17852. 8007a7a: 4a6d ldr r2, [pc, #436] @ (8007c30 <HAL_DMA_Abort+0x22c>)
  17853. 8007a7c: 4293 cmp r3, r2
  17854. 8007a7e: d02c beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17855. 8007a80: 687b ldr r3, [r7, #4]
  17856. 8007a82: 681b ldr r3, [r3, #0]
  17857. 8007a84: 4a6b ldr r2, [pc, #428] @ (8007c34 <HAL_DMA_Abort+0x230>)
  17858. 8007a86: 4293 cmp r3, r2
  17859. 8007a88: d027 beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17860. 8007a8a: 687b ldr r3, [r7, #4]
  17861. 8007a8c: 681b ldr r3, [r3, #0]
  17862. 8007a8e: 4a6a ldr r2, [pc, #424] @ (8007c38 <HAL_DMA_Abort+0x234>)
  17863. 8007a90: 4293 cmp r3, r2
  17864. 8007a92: d022 beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17865. 8007a94: 687b ldr r3, [r7, #4]
  17866. 8007a96: 681b ldr r3, [r3, #0]
  17867. 8007a98: 4a68 ldr r2, [pc, #416] @ (8007c3c <HAL_DMA_Abort+0x238>)
  17868. 8007a9a: 4293 cmp r3, r2
  17869. 8007a9c: d01d beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17870. 8007a9e: 687b ldr r3, [r7, #4]
  17871. 8007aa0: 681b ldr r3, [r3, #0]
  17872. 8007aa2: 4a67 ldr r2, [pc, #412] @ (8007c40 <HAL_DMA_Abort+0x23c>)
  17873. 8007aa4: 4293 cmp r3, r2
  17874. 8007aa6: d018 beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17875. 8007aa8: 687b ldr r3, [r7, #4]
  17876. 8007aaa: 681b ldr r3, [r3, #0]
  17877. 8007aac: 4a65 ldr r2, [pc, #404] @ (8007c44 <HAL_DMA_Abort+0x240>)
  17878. 8007aae: 4293 cmp r3, r2
  17879. 8007ab0: d013 beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17880. 8007ab2: 687b ldr r3, [r7, #4]
  17881. 8007ab4: 681b ldr r3, [r3, #0]
  17882. 8007ab6: 4a64 ldr r2, [pc, #400] @ (8007c48 <HAL_DMA_Abort+0x244>)
  17883. 8007ab8: 4293 cmp r3, r2
  17884. 8007aba: d00e beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17885. 8007abc: 687b ldr r3, [r7, #4]
  17886. 8007abe: 681b ldr r3, [r3, #0]
  17887. 8007ac0: 4a62 ldr r2, [pc, #392] @ (8007c4c <HAL_DMA_Abort+0x248>)
  17888. 8007ac2: 4293 cmp r3, r2
  17889. 8007ac4: d009 beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17890. 8007ac6: 687b ldr r3, [r7, #4]
  17891. 8007ac8: 681b ldr r3, [r3, #0]
  17892. 8007aca: 4a61 ldr r2, [pc, #388] @ (8007c50 <HAL_DMA_Abort+0x24c>)
  17893. 8007acc: 4293 cmp r3, r2
  17894. 8007ace: d004 beq.n 8007ada <HAL_DMA_Abort+0xd6>
  17895. 8007ad0: 687b ldr r3, [r7, #4]
  17896. 8007ad2: 681b ldr r3, [r3, #0]
  17897. 8007ad4: 4a5f ldr r2, [pc, #380] @ (8007c54 <HAL_DMA_Abort+0x250>)
  17898. 8007ad6: 4293 cmp r3, r2
  17899. 8007ad8: d101 bne.n 8007ade <HAL_DMA_Abort+0xda>
  17900. 8007ada: 2301 movs r3, #1
  17901. 8007adc: e000 b.n 8007ae0 <HAL_DMA_Abort+0xdc>
  17902. 8007ade: 2300 movs r3, #0
  17903. 8007ae0: 2b00 cmp r3, #0
  17904. 8007ae2: d013 beq.n 8007b0c <HAL_DMA_Abort+0x108>
  17905. {
  17906. /* Disable DMA All Interrupts */
  17907. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME | DMA_IT_HT);
  17908. 8007ae4: 687b ldr r3, [r7, #4]
  17909. 8007ae6: 681b ldr r3, [r3, #0]
  17910. 8007ae8: 681a ldr r2, [r3, #0]
  17911. 8007aea: 687b ldr r3, [r7, #4]
  17912. 8007aec: 681b ldr r3, [r3, #0]
  17913. 8007aee: f022 021e bic.w r2, r2, #30
  17914. 8007af2: 601a str r2, [r3, #0]
  17915. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR &= ~(DMA_IT_FE);
  17916. 8007af4: 687b ldr r3, [r7, #4]
  17917. 8007af6: 681b ldr r3, [r3, #0]
  17918. 8007af8: 695a ldr r2, [r3, #20]
  17919. 8007afa: 687b ldr r3, [r7, #4]
  17920. 8007afc: 681b ldr r3, [r3, #0]
  17921. 8007afe: f022 0280 bic.w r2, r2, #128 @ 0x80
  17922. 8007b02: 615a str r2, [r3, #20]
  17923. enableRegister = (__IO uint32_t *)(&(((DMA_Stream_TypeDef *)hdma->Instance)->CR));
  17924. 8007b04: 687b ldr r3, [r7, #4]
  17925. 8007b06: 681b ldr r3, [r3, #0]
  17926. 8007b08: 617b str r3, [r7, #20]
  17927. 8007b0a: e00a b.n 8007b22 <HAL_DMA_Abort+0x11e>
  17928. }
  17929. else /* BDMA channel */
  17930. {
  17931. /* Disable DMA All Interrupts */
  17932. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR &= ~(BDMA_CCR_TCIE | BDMA_CCR_HTIE | BDMA_CCR_TEIE);
  17933. 8007b0c: 687b ldr r3, [r7, #4]
  17934. 8007b0e: 681b ldr r3, [r3, #0]
  17935. 8007b10: 681a ldr r2, [r3, #0]
  17936. 8007b12: 687b ldr r3, [r7, #4]
  17937. 8007b14: 681b ldr r3, [r3, #0]
  17938. 8007b16: f022 020e bic.w r2, r2, #14
  17939. 8007b1a: 601a str r2, [r3, #0]
  17940. enableRegister = (__IO uint32_t *)(&(((BDMA_Channel_TypeDef *)hdma->Instance)->CCR));
  17941. 8007b1c: 687b ldr r3, [r7, #4]
  17942. 8007b1e: 681b ldr r3, [r3, #0]
  17943. 8007b20: 617b str r3, [r7, #20]
  17944. }
  17945. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  17946. 8007b22: 687b ldr r3, [r7, #4]
  17947. 8007b24: 681b ldr r3, [r3, #0]
  17948. 8007b26: 4a3c ldr r2, [pc, #240] @ (8007c18 <HAL_DMA_Abort+0x214>)
  17949. 8007b28: 4293 cmp r3, r2
  17950. 8007b2a: d072 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  17951. 8007b2c: 687b ldr r3, [r7, #4]
  17952. 8007b2e: 681b ldr r3, [r3, #0]
  17953. 8007b30: 4a3a ldr r2, [pc, #232] @ (8007c1c <HAL_DMA_Abort+0x218>)
  17954. 8007b32: 4293 cmp r3, r2
  17955. 8007b34: d06d beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  17956. 8007b36: 687b ldr r3, [r7, #4]
  17957. 8007b38: 681b ldr r3, [r3, #0]
  17958. 8007b3a: 4a39 ldr r2, [pc, #228] @ (8007c20 <HAL_DMA_Abort+0x21c>)
  17959. 8007b3c: 4293 cmp r3, r2
  17960. 8007b3e: d068 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  17961. 8007b40: 687b ldr r3, [r7, #4]
  17962. 8007b42: 681b ldr r3, [r3, #0]
  17963. 8007b44: 4a37 ldr r2, [pc, #220] @ (8007c24 <HAL_DMA_Abort+0x220>)
  17964. 8007b46: 4293 cmp r3, r2
  17965. 8007b48: d063 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  17966. 8007b4a: 687b ldr r3, [r7, #4]
  17967. 8007b4c: 681b ldr r3, [r3, #0]
  17968. 8007b4e: 4a36 ldr r2, [pc, #216] @ (8007c28 <HAL_DMA_Abort+0x224>)
  17969. 8007b50: 4293 cmp r3, r2
  17970. 8007b52: d05e beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  17971. 8007b54: 687b ldr r3, [r7, #4]
  17972. 8007b56: 681b ldr r3, [r3, #0]
  17973. 8007b58: 4a34 ldr r2, [pc, #208] @ (8007c2c <HAL_DMA_Abort+0x228>)
  17974. 8007b5a: 4293 cmp r3, r2
  17975. 8007b5c: d059 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  17976. 8007b5e: 687b ldr r3, [r7, #4]
  17977. 8007b60: 681b ldr r3, [r3, #0]
  17978. 8007b62: 4a33 ldr r2, [pc, #204] @ (8007c30 <HAL_DMA_Abort+0x22c>)
  17979. 8007b64: 4293 cmp r3, r2
  17980. 8007b66: d054 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  17981. 8007b68: 687b ldr r3, [r7, #4]
  17982. 8007b6a: 681b ldr r3, [r3, #0]
  17983. 8007b6c: 4a31 ldr r2, [pc, #196] @ (8007c34 <HAL_DMA_Abort+0x230>)
  17984. 8007b6e: 4293 cmp r3, r2
  17985. 8007b70: d04f beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  17986. 8007b72: 687b ldr r3, [r7, #4]
  17987. 8007b74: 681b ldr r3, [r3, #0]
  17988. 8007b76: 4a30 ldr r2, [pc, #192] @ (8007c38 <HAL_DMA_Abort+0x234>)
  17989. 8007b78: 4293 cmp r3, r2
  17990. 8007b7a: d04a beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  17991. 8007b7c: 687b ldr r3, [r7, #4]
  17992. 8007b7e: 681b ldr r3, [r3, #0]
  17993. 8007b80: 4a2e ldr r2, [pc, #184] @ (8007c3c <HAL_DMA_Abort+0x238>)
  17994. 8007b82: 4293 cmp r3, r2
  17995. 8007b84: d045 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  17996. 8007b86: 687b ldr r3, [r7, #4]
  17997. 8007b88: 681b ldr r3, [r3, #0]
  17998. 8007b8a: 4a2d ldr r2, [pc, #180] @ (8007c40 <HAL_DMA_Abort+0x23c>)
  17999. 8007b8c: 4293 cmp r3, r2
  18000. 8007b8e: d040 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  18001. 8007b90: 687b ldr r3, [r7, #4]
  18002. 8007b92: 681b ldr r3, [r3, #0]
  18003. 8007b94: 4a2b ldr r2, [pc, #172] @ (8007c44 <HAL_DMA_Abort+0x240>)
  18004. 8007b96: 4293 cmp r3, r2
  18005. 8007b98: d03b beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  18006. 8007b9a: 687b ldr r3, [r7, #4]
  18007. 8007b9c: 681b ldr r3, [r3, #0]
  18008. 8007b9e: 4a2a ldr r2, [pc, #168] @ (8007c48 <HAL_DMA_Abort+0x244>)
  18009. 8007ba0: 4293 cmp r3, r2
  18010. 8007ba2: d036 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  18011. 8007ba4: 687b ldr r3, [r7, #4]
  18012. 8007ba6: 681b ldr r3, [r3, #0]
  18013. 8007ba8: 4a28 ldr r2, [pc, #160] @ (8007c4c <HAL_DMA_Abort+0x248>)
  18014. 8007baa: 4293 cmp r3, r2
  18015. 8007bac: d031 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  18016. 8007bae: 687b ldr r3, [r7, #4]
  18017. 8007bb0: 681b ldr r3, [r3, #0]
  18018. 8007bb2: 4a27 ldr r2, [pc, #156] @ (8007c50 <HAL_DMA_Abort+0x24c>)
  18019. 8007bb4: 4293 cmp r3, r2
  18020. 8007bb6: d02c beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  18021. 8007bb8: 687b ldr r3, [r7, #4]
  18022. 8007bba: 681b ldr r3, [r3, #0]
  18023. 8007bbc: 4a25 ldr r2, [pc, #148] @ (8007c54 <HAL_DMA_Abort+0x250>)
  18024. 8007bbe: 4293 cmp r3, r2
  18025. 8007bc0: d027 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  18026. 8007bc2: 687b ldr r3, [r7, #4]
  18027. 8007bc4: 681b ldr r3, [r3, #0]
  18028. 8007bc6: 4a24 ldr r2, [pc, #144] @ (8007c58 <HAL_DMA_Abort+0x254>)
  18029. 8007bc8: 4293 cmp r3, r2
  18030. 8007bca: d022 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  18031. 8007bcc: 687b ldr r3, [r7, #4]
  18032. 8007bce: 681b ldr r3, [r3, #0]
  18033. 8007bd0: 4a22 ldr r2, [pc, #136] @ (8007c5c <HAL_DMA_Abort+0x258>)
  18034. 8007bd2: 4293 cmp r3, r2
  18035. 8007bd4: d01d beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  18036. 8007bd6: 687b ldr r3, [r7, #4]
  18037. 8007bd8: 681b ldr r3, [r3, #0]
  18038. 8007bda: 4a21 ldr r2, [pc, #132] @ (8007c60 <HAL_DMA_Abort+0x25c>)
  18039. 8007bdc: 4293 cmp r3, r2
  18040. 8007bde: d018 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  18041. 8007be0: 687b ldr r3, [r7, #4]
  18042. 8007be2: 681b ldr r3, [r3, #0]
  18043. 8007be4: 4a1f ldr r2, [pc, #124] @ (8007c64 <HAL_DMA_Abort+0x260>)
  18044. 8007be6: 4293 cmp r3, r2
  18045. 8007be8: d013 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  18046. 8007bea: 687b ldr r3, [r7, #4]
  18047. 8007bec: 681b ldr r3, [r3, #0]
  18048. 8007bee: 4a1e ldr r2, [pc, #120] @ (8007c68 <HAL_DMA_Abort+0x264>)
  18049. 8007bf0: 4293 cmp r3, r2
  18050. 8007bf2: d00e beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  18051. 8007bf4: 687b ldr r3, [r7, #4]
  18052. 8007bf6: 681b ldr r3, [r3, #0]
  18053. 8007bf8: 4a1c ldr r2, [pc, #112] @ (8007c6c <HAL_DMA_Abort+0x268>)
  18054. 8007bfa: 4293 cmp r3, r2
  18055. 8007bfc: d009 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  18056. 8007bfe: 687b ldr r3, [r7, #4]
  18057. 8007c00: 681b ldr r3, [r3, #0]
  18058. 8007c02: 4a1b ldr r2, [pc, #108] @ (8007c70 <HAL_DMA_Abort+0x26c>)
  18059. 8007c04: 4293 cmp r3, r2
  18060. 8007c06: d004 beq.n 8007c12 <HAL_DMA_Abort+0x20e>
  18061. 8007c08: 687b ldr r3, [r7, #4]
  18062. 8007c0a: 681b ldr r3, [r3, #0]
  18063. 8007c0c: 4a19 ldr r2, [pc, #100] @ (8007c74 <HAL_DMA_Abort+0x270>)
  18064. 8007c0e: 4293 cmp r3, r2
  18065. 8007c10: d132 bne.n 8007c78 <HAL_DMA_Abort+0x274>
  18066. 8007c12: 2301 movs r3, #1
  18067. 8007c14: e031 b.n 8007c7a <HAL_DMA_Abort+0x276>
  18068. 8007c16: bf00 nop
  18069. 8007c18: 40020010 .word 0x40020010
  18070. 8007c1c: 40020028 .word 0x40020028
  18071. 8007c20: 40020040 .word 0x40020040
  18072. 8007c24: 40020058 .word 0x40020058
  18073. 8007c28: 40020070 .word 0x40020070
  18074. 8007c2c: 40020088 .word 0x40020088
  18075. 8007c30: 400200a0 .word 0x400200a0
  18076. 8007c34: 400200b8 .word 0x400200b8
  18077. 8007c38: 40020410 .word 0x40020410
  18078. 8007c3c: 40020428 .word 0x40020428
  18079. 8007c40: 40020440 .word 0x40020440
  18080. 8007c44: 40020458 .word 0x40020458
  18081. 8007c48: 40020470 .word 0x40020470
  18082. 8007c4c: 40020488 .word 0x40020488
  18083. 8007c50: 400204a0 .word 0x400204a0
  18084. 8007c54: 400204b8 .word 0x400204b8
  18085. 8007c58: 58025408 .word 0x58025408
  18086. 8007c5c: 5802541c .word 0x5802541c
  18087. 8007c60: 58025430 .word 0x58025430
  18088. 8007c64: 58025444 .word 0x58025444
  18089. 8007c68: 58025458 .word 0x58025458
  18090. 8007c6c: 5802546c .word 0x5802546c
  18091. 8007c70: 58025480 .word 0x58025480
  18092. 8007c74: 58025494 .word 0x58025494
  18093. 8007c78: 2300 movs r3, #0
  18094. 8007c7a: 2b00 cmp r3, #0
  18095. 8007c7c: d007 beq.n 8007c8e <HAL_DMA_Abort+0x28a>
  18096. {
  18097. /* disable the DMAMUX sync overrun IT */
  18098. hdma->DMAmuxChannel->CCR &= ~DMAMUX_CxCR_SOIE;
  18099. 8007c7e: 687b ldr r3, [r7, #4]
  18100. 8007c80: 6e1b ldr r3, [r3, #96] @ 0x60
  18101. 8007c82: 681a ldr r2, [r3, #0]
  18102. 8007c84: 687b ldr r3, [r7, #4]
  18103. 8007c86: 6e1b ldr r3, [r3, #96] @ 0x60
  18104. 8007c88: f422 7280 bic.w r2, r2, #256 @ 0x100
  18105. 8007c8c: 601a str r2, [r3, #0]
  18106. }
  18107. /* Disable the stream */
  18108. __HAL_DMA_DISABLE(hdma);
  18109. 8007c8e: 687b ldr r3, [r7, #4]
  18110. 8007c90: 681b ldr r3, [r3, #0]
  18111. 8007c92: 4a6d ldr r2, [pc, #436] @ (8007e48 <HAL_DMA_Abort+0x444>)
  18112. 8007c94: 4293 cmp r3, r2
  18113. 8007c96: d04a beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18114. 8007c98: 687b ldr r3, [r7, #4]
  18115. 8007c9a: 681b ldr r3, [r3, #0]
  18116. 8007c9c: 4a6b ldr r2, [pc, #428] @ (8007e4c <HAL_DMA_Abort+0x448>)
  18117. 8007c9e: 4293 cmp r3, r2
  18118. 8007ca0: d045 beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18119. 8007ca2: 687b ldr r3, [r7, #4]
  18120. 8007ca4: 681b ldr r3, [r3, #0]
  18121. 8007ca6: 4a6a ldr r2, [pc, #424] @ (8007e50 <HAL_DMA_Abort+0x44c>)
  18122. 8007ca8: 4293 cmp r3, r2
  18123. 8007caa: d040 beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18124. 8007cac: 687b ldr r3, [r7, #4]
  18125. 8007cae: 681b ldr r3, [r3, #0]
  18126. 8007cb0: 4a68 ldr r2, [pc, #416] @ (8007e54 <HAL_DMA_Abort+0x450>)
  18127. 8007cb2: 4293 cmp r3, r2
  18128. 8007cb4: d03b beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18129. 8007cb6: 687b ldr r3, [r7, #4]
  18130. 8007cb8: 681b ldr r3, [r3, #0]
  18131. 8007cba: 4a67 ldr r2, [pc, #412] @ (8007e58 <HAL_DMA_Abort+0x454>)
  18132. 8007cbc: 4293 cmp r3, r2
  18133. 8007cbe: d036 beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18134. 8007cc0: 687b ldr r3, [r7, #4]
  18135. 8007cc2: 681b ldr r3, [r3, #0]
  18136. 8007cc4: 4a65 ldr r2, [pc, #404] @ (8007e5c <HAL_DMA_Abort+0x458>)
  18137. 8007cc6: 4293 cmp r3, r2
  18138. 8007cc8: d031 beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18139. 8007cca: 687b ldr r3, [r7, #4]
  18140. 8007ccc: 681b ldr r3, [r3, #0]
  18141. 8007cce: 4a64 ldr r2, [pc, #400] @ (8007e60 <HAL_DMA_Abort+0x45c>)
  18142. 8007cd0: 4293 cmp r3, r2
  18143. 8007cd2: d02c beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18144. 8007cd4: 687b ldr r3, [r7, #4]
  18145. 8007cd6: 681b ldr r3, [r3, #0]
  18146. 8007cd8: 4a62 ldr r2, [pc, #392] @ (8007e64 <HAL_DMA_Abort+0x460>)
  18147. 8007cda: 4293 cmp r3, r2
  18148. 8007cdc: d027 beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18149. 8007cde: 687b ldr r3, [r7, #4]
  18150. 8007ce0: 681b ldr r3, [r3, #0]
  18151. 8007ce2: 4a61 ldr r2, [pc, #388] @ (8007e68 <HAL_DMA_Abort+0x464>)
  18152. 8007ce4: 4293 cmp r3, r2
  18153. 8007ce6: d022 beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18154. 8007ce8: 687b ldr r3, [r7, #4]
  18155. 8007cea: 681b ldr r3, [r3, #0]
  18156. 8007cec: 4a5f ldr r2, [pc, #380] @ (8007e6c <HAL_DMA_Abort+0x468>)
  18157. 8007cee: 4293 cmp r3, r2
  18158. 8007cf0: d01d beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18159. 8007cf2: 687b ldr r3, [r7, #4]
  18160. 8007cf4: 681b ldr r3, [r3, #0]
  18161. 8007cf6: 4a5e ldr r2, [pc, #376] @ (8007e70 <HAL_DMA_Abort+0x46c>)
  18162. 8007cf8: 4293 cmp r3, r2
  18163. 8007cfa: d018 beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18164. 8007cfc: 687b ldr r3, [r7, #4]
  18165. 8007cfe: 681b ldr r3, [r3, #0]
  18166. 8007d00: 4a5c ldr r2, [pc, #368] @ (8007e74 <HAL_DMA_Abort+0x470>)
  18167. 8007d02: 4293 cmp r3, r2
  18168. 8007d04: d013 beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18169. 8007d06: 687b ldr r3, [r7, #4]
  18170. 8007d08: 681b ldr r3, [r3, #0]
  18171. 8007d0a: 4a5b ldr r2, [pc, #364] @ (8007e78 <HAL_DMA_Abort+0x474>)
  18172. 8007d0c: 4293 cmp r3, r2
  18173. 8007d0e: d00e beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18174. 8007d10: 687b ldr r3, [r7, #4]
  18175. 8007d12: 681b ldr r3, [r3, #0]
  18176. 8007d14: 4a59 ldr r2, [pc, #356] @ (8007e7c <HAL_DMA_Abort+0x478>)
  18177. 8007d16: 4293 cmp r3, r2
  18178. 8007d18: d009 beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18179. 8007d1a: 687b ldr r3, [r7, #4]
  18180. 8007d1c: 681b ldr r3, [r3, #0]
  18181. 8007d1e: 4a58 ldr r2, [pc, #352] @ (8007e80 <HAL_DMA_Abort+0x47c>)
  18182. 8007d20: 4293 cmp r3, r2
  18183. 8007d22: d004 beq.n 8007d2e <HAL_DMA_Abort+0x32a>
  18184. 8007d24: 687b ldr r3, [r7, #4]
  18185. 8007d26: 681b ldr r3, [r3, #0]
  18186. 8007d28: 4a56 ldr r2, [pc, #344] @ (8007e84 <HAL_DMA_Abort+0x480>)
  18187. 8007d2a: 4293 cmp r3, r2
  18188. 8007d2c: d108 bne.n 8007d40 <HAL_DMA_Abort+0x33c>
  18189. 8007d2e: 687b ldr r3, [r7, #4]
  18190. 8007d30: 681b ldr r3, [r3, #0]
  18191. 8007d32: 681a ldr r2, [r3, #0]
  18192. 8007d34: 687b ldr r3, [r7, #4]
  18193. 8007d36: 681b ldr r3, [r3, #0]
  18194. 8007d38: f022 0201 bic.w r2, r2, #1
  18195. 8007d3c: 601a str r2, [r3, #0]
  18196. 8007d3e: e007 b.n 8007d50 <HAL_DMA_Abort+0x34c>
  18197. 8007d40: 687b ldr r3, [r7, #4]
  18198. 8007d42: 681b ldr r3, [r3, #0]
  18199. 8007d44: 681a ldr r2, [r3, #0]
  18200. 8007d46: 687b ldr r3, [r7, #4]
  18201. 8007d48: 681b ldr r3, [r3, #0]
  18202. 8007d4a: f022 0201 bic.w r2, r2, #1
  18203. 8007d4e: 601a str r2, [r3, #0]
  18204. /* Check if the DMA Stream is effectively disabled */
  18205. while(((*enableRegister) & DMA_SxCR_EN) != 0U)
  18206. 8007d50: e013 b.n 8007d7a <HAL_DMA_Abort+0x376>
  18207. {
  18208. /* Check for the Timeout */
  18209. if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT)
  18210. 8007d52: f7fc fe87 bl 8004a64 <HAL_GetTick>
  18211. 8007d56: 4602 mov r2, r0
  18212. 8007d58: 693b ldr r3, [r7, #16]
  18213. 8007d5a: 1ad3 subs r3, r2, r3
  18214. 8007d5c: 2b05 cmp r3, #5
  18215. 8007d5e: d90c bls.n 8007d7a <HAL_DMA_Abort+0x376>
  18216. {
  18217. /* Update error code */
  18218. hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT;
  18219. 8007d60: 687b ldr r3, [r7, #4]
  18220. 8007d62: 2220 movs r2, #32
  18221. 8007d64: 655a str r2, [r3, #84] @ 0x54
  18222. /* Change the DMA state */
  18223. hdma->State = HAL_DMA_STATE_ERROR;
  18224. 8007d66: 687b ldr r3, [r7, #4]
  18225. 8007d68: 2203 movs r2, #3
  18226. 8007d6a: f883 2035 strb.w r2, [r3, #53] @ 0x35
  18227. /* Process Unlocked */
  18228. __HAL_UNLOCK(hdma);
  18229. 8007d6e: 687b ldr r3, [r7, #4]
  18230. 8007d70: 2200 movs r2, #0
  18231. 8007d72: f883 2034 strb.w r2, [r3, #52] @ 0x34
  18232. return HAL_ERROR;
  18233. 8007d76: 2301 movs r3, #1
  18234. 8007d78: e12d b.n 8007fd6 <HAL_DMA_Abort+0x5d2>
  18235. while(((*enableRegister) & DMA_SxCR_EN) != 0U)
  18236. 8007d7a: 697b ldr r3, [r7, #20]
  18237. 8007d7c: 681b ldr r3, [r3, #0]
  18238. 8007d7e: f003 0301 and.w r3, r3, #1
  18239. 8007d82: 2b00 cmp r3, #0
  18240. 8007d84: d1e5 bne.n 8007d52 <HAL_DMA_Abort+0x34e>
  18241. }
  18242. }
  18243. /* Clear all interrupt flags at correct offset within the register */
  18244. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  18245. 8007d86: 687b ldr r3, [r7, #4]
  18246. 8007d88: 681b ldr r3, [r3, #0]
  18247. 8007d8a: 4a2f ldr r2, [pc, #188] @ (8007e48 <HAL_DMA_Abort+0x444>)
  18248. 8007d8c: 4293 cmp r3, r2
  18249. 8007d8e: d04a beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18250. 8007d90: 687b ldr r3, [r7, #4]
  18251. 8007d92: 681b ldr r3, [r3, #0]
  18252. 8007d94: 4a2d ldr r2, [pc, #180] @ (8007e4c <HAL_DMA_Abort+0x448>)
  18253. 8007d96: 4293 cmp r3, r2
  18254. 8007d98: d045 beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18255. 8007d9a: 687b ldr r3, [r7, #4]
  18256. 8007d9c: 681b ldr r3, [r3, #0]
  18257. 8007d9e: 4a2c ldr r2, [pc, #176] @ (8007e50 <HAL_DMA_Abort+0x44c>)
  18258. 8007da0: 4293 cmp r3, r2
  18259. 8007da2: d040 beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18260. 8007da4: 687b ldr r3, [r7, #4]
  18261. 8007da6: 681b ldr r3, [r3, #0]
  18262. 8007da8: 4a2a ldr r2, [pc, #168] @ (8007e54 <HAL_DMA_Abort+0x450>)
  18263. 8007daa: 4293 cmp r3, r2
  18264. 8007dac: d03b beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18265. 8007dae: 687b ldr r3, [r7, #4]
  18266. 8007db0: 681b ldr r3, [r3, #0]
  18267. 8007db2: 4a29 ldr r2, [pc, #164] @ (8007e58 <HAL_DMA_Abort+0x454>)
  18268. 8007db4: 4293 cmp r3, r2
  18269. 8007db6: d036 beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18270. 8007db8: 687b ldr r3, [r7, #4]
  18271. 8007dba: 681b ldr r3, [r3, #0]
  18272. 8007dbc: 4a27 ldr r2, [pc, #156] @ (8007e5c <HAL_DMA_Abort+0x458>)
  18273. 8007dbe: 4293 cmp r3, r2
  18274. 8007dc0: d031 beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18275. 8007dc2: 687b ldr r3, [r7, #4]
  18276. 8007dc4: 681b ldr r3, [r3, #0]
  18277. 8007dc6: 4a26 ldr r2, [pc, #152] @ (8007e60 <HAL_DMA_Abort+0x45c>)
  18278. 8007dc8: 4293 cmp r3, r2
  18279. 8007dca: d02c beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18280. 8007dcc: 687b ldr r3, [r7, #4]
  18281. 8007dce: 681b ldr r3, [r3, #0]
  18282. 8007dd0: 4a24 ldr r2, [pc, #144] @ (8007e64 <HAL_DMA_Abort+0x460>)
  18283. 8007dd2: 4293 cmp r3, r2
  18284. 8007dd4: d027 beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18285. 8007dd6: 687b ldr r3, [r7, #4]
  18286. 8007dd8: 681b ldr r3, [r3, #0]
  18287. 8007dda: 4a23 ldr r2, [pc, #140] @ (8007e68 <HAL_DMA_Abort+0x464>)
  18288. 8007ddc: 4293 cmp r3, r2
  18289. 8007dde: d022 beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18290. 8007de0: 687b ldr r3, [r7, #4]
  18291. 8007de2: 681b ldr r3, [r3, #0]
  18292. 8007de4: 4a21 ldr r2, [pc, #132] @ (8007e6c <HAL_DMA_Abort+0x468>)
  18293. 8007de6: 4293 cmp r3, r2
  18294. 8007de8: d01d beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18295. 8007dea: 687b ldr r3, [r7, #4]
  18296. 8007dec: 681b ldr r3, [r3, #0]
  18297. 8007dee: 4a20 ldr r2, [pc, #128] @ (8007e70 <HAL_DMA_Abort+0x46c>)
  18298. 8007df0: 4293 cmp r3, r2
  18299. 8007df2: d018 beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18300. 8007df4: 687b ldr r3, [r7, #4]
  18301. 8007df6: 681b ldr r3, [r3, #0]
  18302. 8007df8: 4a1e ldr r2, [pc, #120] @ (8007e74 <HAL_DMA_Abort+0x470>)
  18303. 8007dfa: 4293 cmp r3, r2
  18304. 8007dfc: d013 beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18305. 8007dfe: 687b ldr r3, [r7, #4]
  18306. 8007e00: 681b ldr r3, [r3, #0]
  18307. 8007e02: 4a1d ldr r2, [pc, #116] @ (8007e78 <HAL_DMA_Abort+0x474>)
  18308. 8007e04: 4293 cmp r3, r2
  18309. 8007e06: d00e beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18310. 8007e08: 687b ldr r3, [r7, #4]
  18311. 8007e0a: 681b ldr r3, [r3, #0]
  18312. 8007e0c: 4a1b ldr r2, [pc, #108] @ (8007e7c <HAL_DMA_Abort+0x478>)
  18313. 8007e0e: 4293 cmp r3, r2
  18314. 8007e10: d009 beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18315. 8007e12: 687b ldr r3, [r7, #4]
  18316. 8007e14: 681b ldr r3, [r3, #0]
  18317. 8007e16: 4a1a ldr r2, [pc, #104] @ (8007e80 <HAL_DMA_Abort+0x47c>)
  18318. 8007e18: 4293 cmp r3, r2
  18319. 8007e1a: d004 beq.n 8007e26 <HAL_DMA_Abort+0x422>
  18320. 8007e1c: 687b ldr r3, [r7, #4]
  18321. 8007e1e: 681b ldr r3, [r3, #0]
  18322. 8007e20: 4a18 ldr r2, [pc, #96] @ (8007e84 <HAL_DMA_Abort+0x480>)
  18323. 8007e22: 4293 cmp r3, r2
  18324. 8007e24: d101 bne.n 8007e2a <HAL_DMA_Abort+0x426>
  18325. 8007e26: 2301 movs r3, #1
  18326. 8007e28: e000 b.n 8007e2c <HAL_DMA_Abort+0x428>
  18327. 8007e2a: 2300 movs r3, #0
  18328. 8007e2c: 2b00 cmp r3, #0
  18329. 8007e2e: d02b beq.n 8007e88 <HAL_DMA_Abort+0x484>
  18330. {
  18331. regs_dma = (DMA_Base_Registers *)hdma->StreamBaseAddress;
  18332. 8007e30: 687b ldr r3, [r7, #4]
  18333. 8007e32: 6d9b ldr r3, [r3, #88] @ 0x58
  18334. 8007e34: 60bb str r3, [r7, #8]
  18335. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  18336. 8007e36: 687b ldr r3, [r7, #4]
  18337. 8007e38: 6ddb ldr r3, [r3, #92] @ 0x5c
  18338. 8007e3a: f003 031f and.w r3, r3, #31
  18339. 8007e3e: 223f movs r2, #63 @ 0x3f
  18340. 8007e40: 409a lsls r2, r3
  18341. 8007e42: 68bb ldr r3, [r7, #8]
  18342. 8007e44: 609a str r2, [r3, #8]
  18343. 8007e46: e02a b.n 8007e9e <HAL_DMA_Abort+0x49a>
  18344. 8007e48: 40020010 .word 0x40020010
  18345. 8007e4c: 40020028 .word 0x40020028
  18346. 8007e50: 40020040 .word 0x40020040
  18347. 8007e54: 40020058 .word 0x40020058
  18348. 8007e58: 40020070 .word 0x40020070
  18349. 8007e5c: 40020088 .word 0x40020088
  18350. 8007e60: 400200a0 .word 0x400200a0
  18351. 8007e64: 400200b8 .word 0x400200b8
  18352. 8007e68: 40020410 .word 0x40020410
  18353. 8007e6c: 40020428 .word 0x40020428
  18354. 8007e70: 40020440 .word 0x40020440
  18355. 8007e74: 40020458 .word 0x40020458
  18356. 8007e78: 40020470 .word 0x40020470
  18357. 8007e7c: 40020488 .word 0x40020488
  18358. 8007e80: 400204a0 .word 0x400204a0
  18359. 8007e84: 400204b8 .word 0x400204b8
  18360. }
  18361. else /* BDMA channel */
  18362. {
  18363. regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  18364. 8007e88: 687b ldr r3, [r7, #4]
  18365. 8007e8a: 6d9b ldr r3, [r3, #88] @ 0x58
  18366. 8007e8c: 60fb str r3, [r7, #12]
  18367. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  18368. 8007e8e: 687b ldr r3, [r7, #4]
  18369. 8007e90: 6ddb ldr r3, [r3, #92] @ 0x5c
  18370. 8007e92: f003 031f and.w r3, r3, #31
  18371. 8007e96: 2201 movs r2, #1
  18372. 8007e98: 409a lsls r2, r3
  18373. 8007e9a: 68fb ldr r3, [r7, #12]
  18374. 8007e9c: 605a str r2, [r3, #4]
  18375. }
  18376. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  18377. 8007e9e: 687b ldr r3, [r7, #4]
  18378. 8007ea0: 681b ldr r3, [r3, #0]
  18379. 8007ea2: 4a4f ldr r2, [pc, #316] @ (8007fe0 <HAL_DMA_Abort+0x5dc>)
  18380. 8007ea4: 4293 cmp r3, r2
  18381. 8007ea6: d072 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18382. 8007ea8: 687b ldr r3, [r7, #4]
  18383. 8007eaa: 681b ldr r3, [r3, #0]
  18384. 8007eac: 4a4d ldr r2, [pc, #308] @ (8007fe4 <HAL_DMA_Abort+0x5e0>)
  18385. 8007eae: 4293 cmp r3, r2
  18386. 8007eb0: d06d beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18387. 8007eb2: 687b ldr r3, [r7, #4]
  18388. 8007eb4: 681b ldr r3, [r3, #0]
  18389. 8007eb6: 4a4c ldr r2, [pc, #304] @ (8007fe8 <HAL_DMA_Abort+0x5e4>)
  18390. 8007eb8: 4293 cmp r3, r2
  18391. 8007eba: d068 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18392. 8007ebc: 687b ldr r3, [r7, #4]
  18393. 8007ebe: 681b ldr r3, [r3, #0]
  18394. 8007ec0: 4a4a ldr r2, [pc, #296] @ (8007fec <HAL_DMA_Abort+0x5e8>)
  18395. 8007ec2: 4293 cmp r3, r2
  18396. 8007ec4: d063 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18397. 8007ec6: 687b ldr r3, [r7, #4]
  18398. 8007ec8: 681b ldr r3, [r3, #0]
  18399. 8007eca: 4a49 ldr r2, [pc, #292] @ (8007ff0 <HAL_DMA_Abort+0x5ec>)
  18400. 8007ecc: 4293 cmp r3, r2
  18401. 8007ece: d05e beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18402. 8007ed0: 687b ldr r3, [r7, #4]
  18403. 8007ed2: 681b ldr r3, [r3, #0]
  18404. 8007ed4: 4a47 ldr r2, [pc, #284] @ (8007ff4 <HAL_DMA_Abort+0x5f0>)
  18405. 8007ed6: 4293 cmp r3, r2
  18406. 8007ed8: d059 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18407. 8007eda: 687b ldr r3, [r7, #4]
  18408. 8007edc: 681b ldr r3, [r3, #0]
  18409. 8007ede: 4a46 ldr r2, [pc, #280] @ (8007ff8 <HAL_DMA_Abort+0x5f4>)
  18410. 8007ee0: 4293 cmp r3, r2
  18411. 8007ee2: d054 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18412. 8007ee4: 687b ldr r3, [r7, #4]
  18413. 8007ee6: 681b ldr r3, [r3, #0]
  18414. 8007ee8: 4a44 ldr r2, [pc, #272] @ (8007ffc <HAL_DMA_Abort+0x5f8>)
  18415. 8007eea: 4293 cmp r3, r2
  18416. 8007eec: d04f beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18417. 8007eee: 687b ldr r3, [r7, #4]
  18418. 8007ef0: 681b ldr r3, [r3, #0]
  18419. 8007ef2: 4a43 ldr r2, [pc, #268] @ (8008000 <HAL_DMA_Abort+0x5fc>)
  18420. 8007ef4: 4293 cmp r3, r2
  18421. 8007ef6: d04a beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18422. 8007ef8: 687b ldr r3, [r7, #4]
  18423. 8007efa: 681b ldr r3, [r3, #0]
  18424. 8007efc: 4a41 ldr r2, [pc, #260] @ (8008004 <HAL_DMA_Abort+0x600>)
  18425. 8007efe: 4293 cmp r3, r2
  18426. 8007f00: d045 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18427. 8007f02: 687b ldr r3, [r7, #4]
  18428. 8007f04: 681b ldr r3, [r3, #0]
  18429. 8007f06: 4a40 ldr r2, [pc, #256] @ (8008008 <HAL_DMA_Abort+0x604>)
  18430. 8007f08: 4293 cmp r3, r2
  18431. 8007f0a: d040 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18432. 8007f0c: 687b ldr r3, [r7, #4]
  18433. 8007f0e: 681b ldr r3, [r3, #0]
  18434. 8007f10: 4a3e ldr r2, [pc, #248] @ (800800c <HAL_DMA_Abort+0x608>)
  18435. 8007f12: 4293 cmp r3, r2
  18436. 8007f14: d03b beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18437. 8007f16: 687b ldr r3, [r7, #4]
  18438. 8007f18: 681b ldr r3, [r3, #0]
  18439. 8007f1a: 4a3d ldr r2, [pc, #244] @ (8008010 <HAL_DMA_Abort+0x60c>)
  18440. 8007f1c: 4293 cmp r3, r2
  18441. 8007f1e: d036 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18442. 8007f20: 687b ldr r3, [r7, #4]
  18443. 8007f22: 681b ldr r3, [r3, #0]
  18444. 8007f24: 4a3b ldr r2, [pc, #236] @ (8008014 <HAL_DMA_Abort+0x610>)
  18445. 8007f26: 4293 cmp r3, r2
  18446. 8007f28: d031 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18447. 8007f2a: 687b ldr r3, [r7, #4]
  18448. 8007f2c: 681b ldr r3, [r3, #0]
  18449. 8007f2e: 4a3a ldr r2, [pc, #232] @ (8008018 <HAL_DMA_Abort+0x614>)
  18450. 8007f30: 4293 cmp r3, r2
  18451. 8007f32: d02c beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18452. 8007f34: 687b ldr r3, [r7, #4]
  18453. 8007f36: 681b ldr r3, [r3, #0]
  18454. 8007f38: 4a38 ldr r2, [pc, #224] @ (800801c <HAL_DMA_Abort+0x618>)
  18455. 8007f3a: 4293 cmp r3, r2
  18456. 8007f3c: d027 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18457. 8007f3e: 687b ldr r3, [r7, #4]
  18458. 8007f40: 681b ldr r3, [r3, #0]
  18459. 8007f42: 4a37 ldr r2, [pc, #220] @ (8008020 <HAL_DMA_Abort+0x61c>)
  18460. 8007f44: 4293 cmp r3, r2
  18461. 8007f46: d022 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18462. 8007f48: 687b ldr r3, [r7, #4]
  18463. 8007f4a: 681b ldr r3, [r3, #0]
  18464. 8007f4c: 4a35 ldr r2, [pc, #212] @ (8008024 <HAL_DMA_Abort+0x620>)
  18465. 8007f4e: 4293 cmp r3, r2
  18466. 8007f50: d01d beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18467. 8007f52: 687b ldr r3, [r7, #4]
  18468. 8007f54: 681b ldr r3, [r3, #0]
  18469. 8007f56: 4a34 ldr r2, [pc, #208] @ (8008028 <HAL_DMA_Abort+0x624>)
  18470. 8007f58: 4293 cmp r3, r2
  18471. 8007f5a: d018 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18472. 8007f5c: 687b ldr r3, [r7, #4]
  18473. 8007f5e: 681b ldr r3, [r3, #0]
  18474. 8007f60: 4a32 ldr r2, [pc, #200] @ (800802c <HAL_DMA_Abort+0x628>)
  18475. 8007f62: 4293 cmp r3, r2
  18476. 8007f64: d013 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18477. 8007f66: 687b ldr r3, [r7, #4]
  18478. 8007f68: 681b ldr r3, [r3, #0]
  18479. 8007f6a: 4a31 ldr r2, [pc, #196] @ (8008030 <HAL_DMA_Abort+0x62c>)
  18480. 8007f6c: 4293 cmp r3, r2
  18481. 8007f6e: d00e beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18482. 8007f70: 687b ldr r3, [r7, #4]
  18483. 8007f72: 681b ldr r3, [r3, #0]
  18484. 8007f74: 4a2f ldr r2, [pc, #188] @ (8008034 <HAL_DMA_Abort+0x630>)
  18485. 8007f76: 4293 cmp r3, r2
  18486. 8007f78: d009 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18487. 8007f7a: 687b ldr r3, [r7, #4]
  18488. 8007f7c: 681b ldr r3, [r3, #0]
  18489. 8007f7e: 4a2e ldr r2, [pc, #184] @ (8008038 <HAL_DMA_Abort+0x634>)
  18490. 8007f80: 4293 cmp r3, r2
  18491. 8007f82: d004 beq.n 8007f8e <HAL_DMA_Abort+0x58a>
  18492. 8007f84: 687b ldr r3, [r7, #4]
  18493. 8007f86: 681b ldr r3, [r3, #0]
  18494. 8007f88: 4a2c ldr r2, [pc, #176] @ (800803c <HAL_DMA_Abort+0x638>)
  18495. 8007f8a: 4293 cmp r3, r2
  18496. 8007f8c: d101 bne.n 8007f92 <HAL_DMA_Abort+0x58e>
  18497. 8007f8e: 2301 movs r3, #1
  18498. 8007f90: e000 b.n 8007f94 <HAL_DMA_Abort+0x590>
  18499. 8007f92: 2300 movs r3, #0
  18500. 8007f94: 2b00 cmp r3, #0
  18501. 8007f96: d015 beq.n 8007fc4 <HAL_DMA_Abort+0x5c0>
  18502. {
  18503. /* Clear the DMAMUX synchro overrun flag */
  18504. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  18505. 8007f98: 687b ldr r3, [r7, #4]
  18506. 8007f9a: 6e5b ldr r3, [r3, #100] @ 0x64
  18507. 8007f9c: 687a ldr r2, [r7, #4]
  18508. 8007f9e: 6e92 ldr r2, [r2, #104] @ 0x68
  18509. 8007fa0: 605a str r2, [r3, #4]
  18510. if(hdma->DMAmuxRequestGen != 0U)
  18511. 8007fa2: 687b ldr r3, [r7, #4]
  18512. 8007fa4: 6edb ldr r3, [r3, #108] @ 0x6c
  18513. 8007fa6: 2b00 cmp r3, #0
  18514. 8007fa8: d00c beq.n 8007fc4 <HAL_DMA_Abort+0x5c0>
  18515. {
  18516. /* if using DMAMUX request generator, disable the DMAMUX request generator overrun IT */
  18517. /* disable the request gen overrun IT */
  18518. hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_OIE;
  18519. 8007faa: 687b ldr r3, [r7, #4]
  18520. 8007fac: 6edb ldr r3, [r3, #108] @ 0x6c
  18521. 8007fae: 681a ldr r2, [r3, #0]
  18522. 8007fb0: 687b ldr r3, [r7, #4]
  18523. 8007fb2: 6edb ldr r3, [r3, #108] @ 0x6c
  18524. 8007fb4: f422 7280 bic.w r2, r2, #256 @ 0x100
  18525. 8007fb8: 601a str r2, [r3, #0]
  18526. /* Clear the DMAMUX request generator overrun flag */
  18527. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  18528. 8007fba: 687b ldr r3, [r7, #4]
  18529. 8007fbc: 6f1b ldr r3, [r3, #112] @ 0x70
  18530. 8007fbe: 687a ldr r2, [r7, #4]
  18531. 8007fc0: 6f52 ldr r2, [r2, #116] @ 0x74
  18532. 8007fc2: 605a str r2, [r3, #4]
  18533. }
  18534. }
  18535. /* Change the DMA state */
  18536. hdma->State = HAL_DMA_STATE_READY;
  18537. 8007fc4: 687b ldr r3, [r7, #4]
  18538. 8007fc6: 2201 movs r2, #1
  18539. 8007fc8: f883 2035 strb.w r2, [r3, #53] @ 0x35
  18540. /* Process Unlocked */
  18541. __HAL_UNLOCK(hdma);
  18542. 8007fcc: 687b ldr r3, [r7, #4]
  18543. 8007fce: 2200 movs r2, #0
  18544. 8007fd0: f883 2034 strb.w r2, [r3, #52] @ 0x34
  18545. }
  18546. return HAL_OK;
  18547. 8007fd4: 2300 movs r3, #0
  18548. }
  18549. 8007fd6: 4618 mov r0, r3
  18550. 8007fd8: 3718 adds r7, #24
  18551. 8007fda: 46bd mov sp, r7
  18552. 8007fdc: bd80 pop {r7, pc}
  18553. 8007fde: bf00 nop
  18554. 8007fe0: 40020010 .word 0x40020010
  18555. 8007fe4: 40020028 .word 0x40020028
  18556. 8007fe8: 40020040 .word 0x40020040
  18557. 8007fec: 40020058 .word 0x40020058
  18558. 8007ff0: 40020070 .word 0x40020070
  18559. 8007ff4: 40020088 .word 0x40020088
  18560. 8007ff8: 400200a0 .word 0x400200a0
  18561. 8007ffc: 400200b8 .word 0x400200b8
  18562. 8008000: 40020410 .word 0x40020410
  18563. 8008004: 40020428 .word 0x40020428
  18564. 8008008: 40020440 .word 0x40020440
  18565. 800800c: 40020458 .word 0x40020458
  18566. 8008010: 40020470 .word 0x40020470
  18567. 8008014: 40020488 .word 0x40020488
  18568. 8008018: 400204a0 .word 0x400204a0
  18569. 800801c: 400204b8 .word 0x400204b8
  18570. 8008020: 58025408 .word 0x58025408
  18571. 8008024: 5802541c .word 0x5802541c
  18572. 8008028: 58025430 .word 0x58025430
  18573. 800802c: 58025444 .word 0x58025444
  18574. 8008030: 58025458 .word 0x58025458
  18575. 8008034: 5802546c .word 0x5802546c
  18576. 8008038: 58025480 .word 0x58025480
  18577. 800803c: 58025494 .word 0x58025494
  18578. 08008040 <HAL_DMA_Abort_IT>:
  18579. * @param hdma : pointer to a DMA_HandleTypeDef structure that contains
  18580. * the configuration information for the specified DMA Stream.
  18581. * @retval HAL status
  18582. */
  18583. HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
  18584. {
  18585. 8008040: b580 push {r7, lr}
  18586. 8008042: b084 sub sp, #16
  18587. 8008044: af00 add r7, sp, #0
  18588. 8008046: 6078 str r0, [r7, #4]
  18589. BDMA_Base_Registers *regs_bdma;
  18590. /* Check the DMA peripheral handle */
  18591. if(hdma == NULL)
  18592. 8008048: 687b ldr r3, [r7, #4]
  18593. 800804a: 2b00 cmp r3, #0
  18594. 800804c: d101 bne.n 8008052 <HAL_DMA_Abort_IT+0x12>
  18595. {
  18596. return HAL_ERROR;
  18597. 800804e: 2301 movs r3, #1
  18598. 8008050: e237 b.n 80084c2 <HAL_DMA_Abort_IT+0x482>
  18599. }
  18600. if(hdma->State != HAL_DMA_STATE_BUSY)
  18601. 8008052: 687b ldr r3, [r7, #4]
  18602. 8008054: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  18603. 8008058: b2db uxtb r3, r3
  18604. 800805a: 2b02 cmp r3, #2
  18605. 800805c: d004 beq.n 8008068 <HAL_DMA_Abort_IT+0x28>
  18606. {
  18607. hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;
  18608. 800805e: 687b ldr r3, [r7, #4]
  18609. 8008060: 2280 movs r2, #128 @ 0x80
  18610. 8008062: 655a str r2, [r3, #84] @ 0x54
  18611. return HAL_ERROR;
  18612. 8008064: 2301 movs r3, #1
  18613. 8008066: e22c b.n 80084c2 <HAL_DMA_Abort_IT+0x482>
  18614. }
  18615. else
  18616. {
  18617. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  18618. 8008068: 687b ldr r3, [r7, #4]
  18619. 800806a: 681b ldr r3, [r3, #0]
  18620. 800806c: 4a5c ldr r2, [pc, #368] @ (80081e0 <HAL_DMA_Abort_IT+0x1a0>)
  18621. 800806e: 4293 cmp r3, r2
  18622. 8008070: d04a beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18623. 8008072: 687b ldr r3, [r7, #4]
  18624. 8008074: 681b ldr r3, [r3, #0]
  18625. 8008076: 4a5b ldr r2, [pc, #364] @ (80081e4 <HAL_DMA_Abort_IT+0x1a4>)
  18626. 8008078: 4293 cmp r3, r2
  18627. 800807a: d045 beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18628. 800807c: 687b ldr r3, [r7, #4]
  18629. 800807e: 681b ldr r3, [r3, #0]
  18630. 8008080: 4a59 ldr r2, [pc, #356] @ (80081e8 <HAL_DMA_Abort_IT+0x1a8>)
  18631. 8008082: 4293 cmp r3, r2
  18632. 8008084: d040 beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18633. 8008086: 687b ldr r3, [r7, #4]
  18634. 8008088: 681b ldr r3, [r3, #0]
  18635. 800808a: 4a58 ldr r2, [pc, #352] @ (80081ec <HAL_DMA_Abort_IT+0x1ac>)
  18636. 800808c: 4293 cmp r3, r2
  18637. 800808e: d03b beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18638. 8008090: 687b ldr r3, [r7, #4]
  18639. 8008092: 681b ldr r3, [r3, #0]
  18640. 8008094: 4a56 ldr r2, [pc, #344] @ (80081f0 <HAL_DMA_Abort_IT+0x1b0>)
  18641. 8008096: 4293 cmp r3, r2
  18642. 8008098: d036 beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18643. 800809a: 687b ldr r3, [r7, #4]
  18644. 800809c: 681b ldr r3, [r3, #0]
  18645. 800809e: 4a55 ldr r2, [pc, #340] @ (80081f4 <HAL_DMA_Abort_IT+0x1b4>)
  18646. 80080a0: 4293 cmp r3, r2
  18647. 80080a2: d031 beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18648. 80080a4: 687b ldr r3, [r7, #4]
  18649. 80080a6: 681b ldr r3, [r3, #0]
  18650. 80080a8: 4a53 ldr r2, [pc, #332] @ (80081f8 <HAL_DMA_Abort_IT+0x1b8>)
  18651. 80080aa: 4293 cmp r3, r2
  18652. 80080ac: d02c beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18653. 80080ae: 687b ldr r3, [r7, #4]
  18654. 80080b0: 681b ldr r3, [r3, #0]
  18655. 80080b2: 4a52 ldr r2, [pc, #328] @ (80081fc <HAL_DMA_Abort_IT+0x1bc>)
  18656. 80080b4: 4293 cmp r3, r2
  18657. 80080b6: d027 beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18658. 80080b8: 687b ldr r3, [r7, #4]
  18659. 80080ba: 681b ldr r3, [r3, #0]
  18660. 80080bc: 4a50 ldr r2, [pc, #320] @ (8008200 <HAL_DMA_Abort_IT+0x1c0>)
  18661. 80080be: 4293 cmp r3, r2
  18662. 80080c0: d022 beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18663. 80080c2: 687b ldr r3, [r7, #4]
  18664. 80080c4: 681b ldr r3, [r3, #0]
  18665. 80080c6: 4a4f ldr r2, [pc, #316] @ (8008204 <HAL_DMA_Abort_IT+0x1c4>)
  18666. 80080c8: 4293 cmp r3, r2
  18667. 80080ca: d01d beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18668. 80080cc: 687b ldr r3, [r7, #4]
  18669. 80080ce: 681b ldr r3, [r3, #0]
  18670. 80080d0: 4a4d ldr r2, [pc, #308] @ (8008208 <HAL_DMA_Abort_IT+0x1c8>)
  18671. 80080d2: 4293 cmp r3, r2
  18672. 80080d4: d018 beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18673. 80080d6: 687b ldr r3, [r7, #4]
  18674. 80080d8: 681b ldr r3, [r3, #0]
  18675. 80080da: 4a4c ldr r2, [pc, #304] @ (800820c <HAL_DMA_Abort_IT+0x1cc>)
  18676. 80080dc: 4293 cmp r3, r2
  18677. 80080de: d013 beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18678. 80080e0: 687b ldr r3, [r7, #4]
  18679. 80080e2: 681b ldr r3, [r3, #0]
  18680. 80080e4: 4a4a ldr r2, [pc, #296] @ (8008210 <HAL_DMA_Abort_IT+0x1d0>)
  18681. 80080e6: 4293 cmp r3, r2
  18682. 80080e8: d00e beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18683. 80080ea: 687b ldr r3, [r7, #4]
  18684. 80080ec: 681b ldr r3, [r3, #0]
  18685. 80080ee: 4a49 ldr r2, [pc, #292] @ (8008214 <HAL_DMA_Abort_IT+0x1d4>)
  18686. 80080f0: 4293 cmp r3, r2
  18687. 80080f2: d009 beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18688. 80080f4: 687b ldr r3, [r7, #4]
  18689. 80080f6: 681b ldr r3, [r3, #0]
  18690. 80080f8: 4a47 ldr r2, [pc, #284] @ (8008218 <HAL_DMA_Abort_IT+0x1d8>)
  18691. 80080fa: 4293 cmp r3, r2
  18692. 80080fc: d004 beq.n 8008108 <HAL_DMA_Abort_IT+0xc8>
  18693. 80080fe: 687b ldr r3, [r7, #4]
  18694. 8008100: 681b ldr r3, [r3, #0]
  18695. 8008102: 4a46 ldr r2, [pc, #280] @ (800821c <HAL_DMA_Abort_IT+0x1dc>)
  18696. 8008104: 4293 cmp r3, r2
  18697. 8008106: d101 bne.n 800810c <HAL_DMA_Abort_IT+0xcc>
  18698. 8008108: 2301 movs r3, #1
  18699. 800810a: e000 b.n 800810e <HAL_DMA_Abort_IT+0xce>
  18700. 800810c: 2300 movs r3, #0
  18701. 800810e: 2b00 cmp r3, #0
  18702. 8008110: f000 8086 beq.w 8008220 <HAL_DMA_Abort_IT+0x1e0>
  18703. {
  18704. /* Set Abort State */
  18705. hdma->State = HAL_DMA_STATE_ABORT;
  18706. 8008114: 687b ldr r3, [r7, #4]
  18707. 8008116: 2204 movs r2, #4
  18708. 8008118: f883 2035 strb.w r2, [r3, #53] @ 0x35
  18709. /* Disable the stream */
  18710. __HAL_DMA_DISABLE(hdma);
  18711. 800811c: 687b ldr r3, [r7, #4]
  18712. 800811e: 681b ldr r3, [r3, #0]
  18713. 8008120: 4a2f ldr r2, [pc, #188] @ (80081e0 <HAL_DMA_Abort_IT+0x1a0>)
  18714. 8008122: 4293 cmp r3, r2
  18715. 8008124: d04a beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18716. 8008126: 687b ldr r3, [r7, #4]
  18717. 8008128: 681b ldr r3, [r3, #0]
  18718. 800812a: 4a2e ldr r2, [pc, #184] @ (80081e4 <HAL_DMA_Abort_IT+0x1a4>)
  18719. 800812c: 4293 cmp r3, r2
  18720. 800812e: d045 beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18721. 8008130: 687b ldr r3, [r7, #4]
  18722. 8008132: 681b ldr r3, [r3, #0]
  18723. 8008134: 4a2c ldr r2, [pc, #176] @ (80081e8 <HAL_DMA_Abort_IT+0x1a8>)
  18724. 8008136: 4293 cmp r3, r2
  18725. 8008138: d040 beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18726. 800813a: 687b ldr r3, [r7, #4]
  18727. 800813c: 681b ldr r3, [r3, #0]
  18728. 800813e: 4a2b ldr r2, [pc, #172] @ (80081ec <HAL_DMA_Abort_IT+0x1ac>)
  18729. 8008140: 4293 cmp r3, r2
  18730. 8008142: d03b beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18731. 8008144: 687b ldr r3, [r7, #4]
  18732. 8008146: 681b ldr r3, [r3, #0]
  18733. 8008148: 4a29 ldr r2, [pc, #164] @ (80081f0 <HAL_DMA_Abort_IT+0x1b0>)
  18734. 800814a: 4293 cmp r3, r2
  18735. 800814c: d036 beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18736. 800814e: 687b ldr r3, [r7, #4]
  18737. 8008150: 681b ldr r3, [r3, #0]
  18738. 8008152: 4a28 ldr r2, [pc, #160] @ (80081f4 <HAL_DMA_Abort_IT+0x1b4>)
  18739. 8008154: 4293 cmp r3, r2
  18740. 8008156: d031 beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18741. 8008158: 687b ldr r3, [r7, #4]
  18742. 800815a: 681b ldr r3, [r3, #0]
  18743. 800815c: 4a26 ldr r2, [pc, #152] @ (80081f8 <HAL_DMA_Abort_IT+0x1b8>)
  18744. 800815e: 4293 cmp r3, r2
  18745. 8008160: d02c beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18746. 8008162: 687b ldr r3, [r7, #4]
  18747. 8008164: 681b ldr r3, [r3, #0]
  18748. 8008166: 4a25 ldr r2, [pc, #148] @ (80081fc <HAL_DMA_Abort_IT+0x1bc>)
  18749. 8008168: 4293 cmp r3, r2
  18750. 800816a: d027 beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18751. 800816c: 687b ldr r3, [r7, #4]
  18752. 800816e: 681b ldr r3, [r3, #0]
  18753. 8008170: 4a23 ldr r2, [pc, #140] @ (8008200 <HAL_DMA_Abort_IT+0x1c0>)
  18754. 8008172: 4293 cmp r3, r2
  18755. 8008174: d022 beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18756. 8008176: 687b ldr r3, [r7, #4]
  18757. 8008178: 681b ldr r3, [r3, #0]
  18758. 800817a: 4a22 ldr r2, [pc, #136] @ (8008204 <HAL_DMA_Abort_IT+0x1c4>)
  18759. 800817c: 4293 cmp r3, r2
  18760. 800817e: d01d beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18761. 8008180: 687b ldr r3, [r7, #4]
  18762. 8008182: 681b ldr r3, [r3, #0]
  18763. 8008184: 4a20 ldr r2, [pc, #128] @ (8008208 <HAL_DMA_Abort_IT+0x1c8>)
  18764. 8008186: 4293 cmp r3, r2
  18765. 8008188: d018 beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18766. 800818a: 687b ldr r3, [r7, #4]
  18767. 800818c: 681b ldr r3, [r3, #0]
  18768. 800818e: 4a1f ldr r2, [pc, #124] @ (800820c <HAL_DMA_Abort_IT+0x1cc>)
  18769. 8008190: 4293 cmp r3, r2
  18770. 8008192: d013 beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18771. 8008194: 687b ldr r3, [r7, #4]
  18772. 8008196: 681b ldr r3, [r3, #0]
  18773. 8008198: 4a1d ldr r2, [pc, #116] @ (8008210 <HAL_DMA_Abort_IT+0x1d0>)
  18774. 800819a: 4293 cmp r3, r2
  18775. 800819c: d00e beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18776. 800819e: 687b ldr r3, [r7, #4]
  18777. 80081a0: 681b ldr r3, [r3, #0]
  18778. 80081a2: 4a1c ldr r2, [pc, #112] @ (8008214 <HAL_DMA_Abort_IT+0x1d4>)
  18779. 80081a4: 4293 cmp r3, r2
  18780. 80081a6: d009 beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18781. 80081a8: 687b ldr r3, [r7, #4]
  18782. 80081aa: 681b ldr r3, [r3, #0]
  18783. 80081ac: 4a1a ldr r2, [pc, #104] @ (8008218 <HAL_DMA_Abort_IT+0x1d8>)
  18784. 80081ae: 4293 cmp r3, r2
  18785. 80081b0: d004 beq.n 80081bc <HAL_DMA_Abort_IT+0x17c>
  18786. 80081b2: 687b ldr r3, [r7, #4]
  18787. 80081b4: 681b ldr r3, [r3, #0]
  18788. 80081b6: 4a19 ldr r2, [pc, #100] @ (800821c <HAL_DMA_Abort_IT+0x1dc>)
  18789. 80081b8: 4293 cmp r3, r2
  18790. 80081ba: d108 bne.n 80081ce <HAL_DMA_Abort_IT+0x18e>
  18791. 80081bc: 687b ldr r3, [r7, #4]
  18792. 80081be: 681b ldr r3, [r3, #0]
  18793. 80081c0: 681a ldr r2, [r3, #0]
  18794. 80081c2: 687b ldr r3, [r7, #4]
  18795. 80081c4: 681b ldr r3, [r3, #0]
  18796. 80081c6: f022 0201 bic.w r2, r2, #1
  18797. 80081ca: 601a str r2, [r3, #0]
  18798. 80081cc: e178 b.n 80084c0 <HAL_DMA_Abort_IT+0x480>
  18799. 80081ce: 687b ldr r3, [r7, #4]
  18800. 80081d0: 681b ldr r3, [r3, #0]
  18801. 80081d2: 681a ldr r2, [r3, #0]
  18802. 80081d4: 687b ldr r3, [r7, #4]
  18803. 80081d6: 681b ldr r3, [r3, #0]
  18804. 80081d8: f022 0201 bic.w r2, r2, #1
  18805. 80081dc: 601a str r2, [r3, #0]
  18806. 80081de: e16f b.n 80084c0 <HAL_DMA_Abort_IT+0x480>
  18807. 80081e0: 40020010 .word 0x40020010
  18808. 80081e4: 40020028 .word 0x40020028
  18809. 80081e8: 40020040 .word 0x40020040
  18810. 80081ec: 40020058 .word 0x40020058
  18811. 80081f0: 40020070 .word 0x40020070
  18812. 80081f4: 40020088 .word 0x40020088
  18813. 80081f8: 400200a0 .word 0x400200a0
  18814. 80081fc: 400200b8 .word 0x400200b8
  18815. 8008200: 40020410 .word 0x40020410
  18816. 8008204: 40020428 .word 0x40020428
  18817. 8008208: 40020440 .word 0x40020440
  18818. 800820c: 40020458 .word 0x40020458
  18819. 8008210: 40020470 .word 0x40020470
  18820. 8008214: 40020488 .word 0x40020488
  18821. 8008218: 400204a0 .word 0x400204a0
  18822. 800821c: 400204b8 .word 0x400204b8
  18823. }
  18824. else /* BDMA channel */
  18825. {
  18826. /* Disable DMA All Interrupts */
  18827. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR &= ~(BDMA_CCR_TCIE | BDMA_CCR_HTIE | BDMA_CCR_TEIE);
  18828. 8008220: 687b ldr r3, [r7, #4]
  18829. 8008222: 681b ldr r3, [r3, #0]
  18830. 8008224: 681a ldr r2, [r3, #0]
  18831. 8008226: 687b ldr r3, [r7, #4]
  18832. 8008228: 681b ldr r3, [r3, #0]
  18833. 800822a: f022 020e bic.w r2, r2, #14
  18834. 800822e: 601a str r2, [r3, #0]
  18835. /* Disable the channel */
  18836. __HAL_DMA_DISABLE(hdma);
  18837. 8008230: 687b ldr r3, [r7, #4]
  18838. 8008232: 681b ldr r3, [r3, #0]
  18839. 8008234: 4a6c ldr r2, [pc, #432] @ (80083e8 <HAL_DMA_Abort_IT+0x3a8>)
  18840. 8008236: 4293 cmp r3, r2
  18841. 8008238: d04a beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18842. 800823a: 687b ldr r3, [r7, #4]
  18843. 800823c: 681b ldr r3, [r3, #0]
  18844. 800823e: 4a6b ldr r2, [pc, #428] @ (80083ec <HAL_DMA_Abort_IT+0x3ac>)
  18845. 8008240: 4293 cmp r3, r2
  18846. 8008242: d045 beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18847. 8008244: 687b ldr r3, [r7, #4]
  18848. 8008246: 681b ldr r3, [r3, #0]
  18849. 8008248: 4a69 ldr r2, [pc, #420] @ (80083f0 <HAL_DMA_Abort_IT+0x3b0>)
  18850. 800824a: 4293 cmp r3, r2
  18851. 800824c: d040 beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18852. 800824e: 687b ldr r3, [r7, #4]
  18853. 8008250: 681b ldr r3, [r3, #0]
  18854. 8008252: 4a68 ldr r2, [pc, #416] @ (80083f4 <HAL_DMA_Abort_IT+0x3b4>)
  18855. 8008254: 4293 cmp r3, r2
  18856. 8008256: d03b beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18857. 8008258: 687b ldr r3, [r7, #4]
  18858. 800825a: 681b ldr r3, [r3, #0]
  18859. 800825c: 4a66 ldr r2, [pc, #408] @ (80083f8 <HAL_DMA_Abort_IT+0x3b8>)
  18860. 800825e: 4293 cmp r3, r2
  18861. 8008260: d036 beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18862. 8008262: 687b ldr r3, [r7, #4]
  18863. 8008264: 681b ldr r3, [r3, #0]
  18864. 8008266: 4a65 ldr r2, [pc, #404] @ (80083fc <HAL_DMA_Abort_IT+0x3bc>)
  18865. 8008268: 4293 cmp r3, r2
  18866. 800826a: d031 beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18867. 800826c: 687b ldr r3, [r7, #4]
  18868. 800826e: 681b ldr r3, [r3, #0]
  18869. 8008270: 4a63 ldr r2, [pc, #396] @ (8008400 <HAL_DMA_Abort_IT+0x3c0>)
  18870. 8008272: 4293 cmp r3, r2
  18871. 8008274: d02c beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18872. 8008276: 687b ldr r3, [r7, #4]
  18873. 8008278: 681b ldr r3, [r3, #0]
  18874. 800827a: 4a62 ldr r2, [pc, #392] @ (8008404 <HAL_DMA_Abort_IT+0x3c4>)
  18875. 800827c: 4293 cmp r3, r2
  18876. 800827e: d027 beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18877. 8008280: 687b ldr r3, [r7, #4]
  18878. 8008282: 681b ldr r3, [r3, #0]
  18879. 8008284: 4a60 ldr r2, [pc, #384] @ (8008408 <HAL_DMA_Abort_IT+0x3c8>)
  18880. 8008286: 4293 cmp r3, r2
  18881. 8008288: d022 beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18882. 800828a: 687b ldr r3, [r7, #4]
  18883. 800828c: 681b ldr r3, [r3, #0]
  18884. 800828e: 4a5f ldr r2, [pc, #380] @ (800840c <HAL_DMA_Abort_IT+0x3cc>)
  18885. 8008290: 4293 cmp r3, r2
  18886. 8008292: d01d beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18887. 8008294: 687b ldr r3, [r7, #4]
  18888. 8008296: 681b ldr r3, [r3, #0]
  18889. 8008298: 4a5d ldr r2, [pc, #372] @ (8008410 <HAL_DMA_Abort_IT+0x3d0>)
  18890. 800829a: 4293 cmp r3, r2
  18891. 800829c: d018 beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18892. 800829e: 687b ldr r3, [r7, #4]
  18893. 80082a0: 681b ldr r3, [r3, #0]
  18894. 80082a2: 4a5c ldr r2, [pc, #368] @ (8008414 <HAL_DMA_Abort_IT+0x3d4>)
  18895. 80082a4: 4293 cmp r3, r2
  18896. 80082a6: d013 beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18897. 80082a8: 687b ldr r3, [r7, #4]
  18898. 80082aa: 681b ldr r3, [r3, #0]
  18899. 80082ac: 4a5a ldr r2, [pc, #360] @ (8008418 <HAL_DMA_Abort_IT+0x3d8>)
  18900. 80082ae: 4293 cmp r3, r2
  18901. 80082b0: d00e beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18902. 80082b2: 687b ldr r3, [r7, #4]
  18903. 80082b4: 681b ldr r3, [r3, #0]
  18904. 80082b6: 4a59 ldr r2, [pc, #356] @ (800841c <HAL_DMA_Abort_IT+0x3dc>)
  18905. 80082b8: 4293 cmp r3, r2
  18906. 80082ba: d009 beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18907. 80082bc: 687b ldr r3, [r7, #4]
  18908. 80082be: 681b ldr r3, [r3, #0]
  18909. 80082c0: 4a57 ldr r2, [pc, #348] @ (8008420 <HAL_DMA_Abort_IT+0x3e0>)
  18910. 80082c2: 4293 cmp r3, r2
  18911. 80082c4: d004 beq.n 80082d0 <HAL_DMA_Abort_IT+0x290>
  18912. 80082c6: 687b ldr r3, [r7, #4]
  18913. 80082c8: 681b ldr r3, [r3, #0]
  18914. 80082ca: 4a56 ldr r2, [pc, #344] @ (8008424 <HAL_DMA_Abort_IT+0x3e4>)
  18915. 80082cc: 4293 cmp r3, r2
  18916. 80082ce: d108 bne.n 80082e2 <HAL_DMA_Abort_IT+0x2a2>
  18917. 80082d0: 687b ldr r3, [r7, #4]
  18918. 80082d2: 681b ldr r3, [r3, #0]
  18919. 80082d4: 681a ldr r2, [r3, #0]
  18920. 80082d6: 687b ldr r3, [r7, #4]
  18921. 80082d8: 681b ldr r3, [r3, #0]
  18922. 80082da: f022 0201 bic.w r2, r2, #1
  18923. 80082de: 601a str r2, [r3, #0]
  18924. 80082e0: e007 b.n 80082f2 <HAL_DMA_Abort_IT+0x2b2>
  18925. 80082e2: 687b ldr r3, [r7, #4]
  18926. 80082e4: 681b ldr r3, [r3, #0]
  18927. 80082e6: 681a ldr r2, [r3, #0]
  18928. 80082e8: 687b ldr r3, [r7, #4]
  18929. 80082ea: 681b ldr r3, [r3, #0]
  18930. 80082ec: f022 0201 bic.w r2, r2, #1
  18931. 80082f0: 601a str r2, [r3, #0]
  18932. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  18933. 80082f2: 687b ldr r3, [r7, #4]
  18934. 80082f4: 681b ldr r3, [r3, #0]
  18935. 80082f6: 4a3c ldr r2, [pc, #240] @ (80083e8 <HAL_DMA_Abort_IT+0x3a8>)
  18936. 80082f8: 4293 cmp r3, r2
  18937. 80082fa: d072 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  18938. 80082fc: 687b ldr r3, [r7, #4]
  18939. 80082fe: 681b ldr r3, [r3, #0]
  18940. 8008300: 4a3a ldr r2, [pc, #232] @ (80083ec <HAL_DMA_Abort_IT+0x3ac>)
  18941. 8008302: 4293 cmp r3, r2
  18942. 8008304: d06d beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  18943. 8008306: 687b ldr r3, [r7, #4]
  18944. 8008308: 681b ldr r3, [r3, #0]
  18945. 800830a: 4a39 ldr r2, [pc, #228] @ (80083f0 <HAL_DMA_Abort_IT+0x3b0>)
  18946. 800830c: 4293 cmp r3, r2
  18947. 800830e: d068 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  18948. 8008310: 687b ldr r3, [r7, #4]
  18949. 8008312: 681b ldr r3, [r3, #0]
  18950. 8008314: 4a37 ldr r2, [pc, #220] @ (80083f4 <HAL_DMA_Abort_IT+0x3b4>)
  18951. 8008316: 4293 cmp r3, r2
  18952. 8008318: d063 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  18953. 800831a: 687b ldr r3, [r7, #4]
  18954. 800831c: 681b ldr r3, [r3, #0]
  18955. 800831e: 4a36 ldr r2, [pc, #216] @ (80083f8 <HAL_DMA_Abort_IT+0x3b8>)
  18956. 8008320: 4293 cmp r3, r2
  18957. 8008322: d05e beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  18958. 8008324: 687b ldr r3, [r7, #4]
  18959. 8008326: 681b ldr r3, [r3, #0]
  18960. 8008328: 4a34 ldr r2, [pc, #208] @ (80083fc <HAL_DMA_Abort_IT+0x3bc>)
  18961. 800832a: 4293 cmp r3, r2
  18962. 800832c: d059 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  18963. 800832e: 687b ldr r3, [r7, #4]
  18964. 8008330: 681b ldr r3, [r3, #0]
  18965. 8008332: 4a33 ldr r2, [pc, #204] @ (8008400 <HAL_DMA_Abort_IT+0x3c0>)
  18966. 8008334: 4293 cmp r3, r2
  18967. 8008336: d054 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  18968. 8008338: 687b ldr r3, [r7, #4]
  18969. 800833a: 681b ldr r3, [r3, #0]
  18970. 800833c: 4a31 ldr r2, [pc, #196] @ (8008404 <HAL_DMA_Abort_IT+0x3c4>)
  18971. 800833e: 4293 cmp r3, r2
  18972. 8008340: d04f beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  18973. 8008342: 687b ldr r3, [r7, #4]
  18974. 8008344: 681b ldr r3, [r3, #0]
  18975. 8008346: 4a30 ldr r2, [pc, #192] @ (8008408 <HAL_DMA_Abort_IT+0x3c8>)
  18976. 8008348: 4293 cmp r3, r2
  18977. 800834a: d04a beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  18978. 800834c: 687b ldr r3, [r7, #4]
  18979. 800834e: 681b ldr r3, [r3, #0]
  18980. 8008350: 4a2e ldr r2, [pc, #184] @ (800840c <HAL_DMA_Abort_IT+0x3cc>)
  18981. 8008352: 4293 cmp r3, r2
  18982. 8008354: d045 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  18983. 8008356: 687b ldr r3, [r7, #4]
  18984. 8008358: 681b ldr r3, [r3, #0]
  18985. 800835a: 4a2d ldr r2, [pc, #180] @ (8008410 <HAL_DMA_Abort_IT+0x3d0>)
  18986. 800835c: 4293 cmp r3, r2
  18987. 800835e: d040 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  18988. 8008360: 687b ldr r3, [r7, #4]
  18989. 8008362: 681b ldr r3, [r3, #0]
  18990. 8008364: 4a2b ldr r2, [pc, #172] @ (8008414 <HAL_DMA_Abort_IT+0x3d4>)
  18991. 8008366: 4293 cmp r3, r2
  18992. 8008368: d03b beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  18993. 800836a: 687b ldr r3, [r7, #4]
  18994. 800836c: 681b ldr r3, [r3, #0]
  18995. 800836e: 4a2a ldr r2, [pc, #168] @ (8008418 <HAL_DMA_Abort_IT+0x3d8>)
  18996. 8008370: 4293 cmp r3, r2
  18997. 8008372: d036 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  18998. 8008374: 687b ldr r3, [r7, #4]
  18999. 8008376: 681b ldr r3, [r3, #0]
  19000. 8008378: 4a28 ldr r2, [pc, #160] @ (800841c <HAL_DMA_Abort_IT+0x3dc>)
  19001. 800837a: 4293 cmp r3, r2
  19002. 800837c: d031 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  19003. 800837e: 687b ldr r3, [r7, #4]
  19004. 8008380: 681b ldr r3, [r3, #0]
  19005. 8008382: 4a27 ldr r2, [pc, #156] @ (8008420 <HAL_DMA_Abort_IT+0x3e0>)
  19006. 8008384: 4293 cmp r3, r2
  19007. 8008386: d02c beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  19008. 8008388: 687b ldr r3, [r7, #4]
  19009. 800838a: 681b ldr r3, [r3, #0]
  19010. 800838c: 4a25 ldr r2, [pc, #148] @ (8008424 <HAL_DMA_Abort_IT+0x3e4>)
  19011. 800838e: 4293 cmp r3, r2
  19012. 8008390: d027 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  19013. 8008392: 687b ldr r3, [r7, #4]
  19014. 8008394: 681b ldr r3, [r3, #0]
  19015. 8008396: 4a24 ldr r2, [pc, #144] @ (8008428 <HAL_DMA_Abort_IT+0x3e8>)
  19016. 8008398: 4293 cmp r3, r2
  19017. 800839a: d022 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  19018. 800839c: 687b ldr r3, [r7, #4]
  19019. 800839e: 681b ldr r3, [r3, #0]
  19020. 80083a0: 4a22 ldr r2, [pc, #136] @ (800842c <HAL_DMA_Abort_IT+0x3ec>)
  19021. 80083a2: 4293 cmp r3, r2
  19022. 80083a4: d01d beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  19023. 80083a6: 687b ldr r3, [r7, #4]
  19024. 80083a8: 681b ldr r3, [r3, #0]
  19025. 80083aa: 4a21 ldr r2, [pc, #132] @ (8008430 <HAL_DMA_Abort_IT+0x3f0>)
  19026. 80083ac: 4293 cmp r3, r2
  19027. 80083ae: d018 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  19028. 80083b0: 687b ldr r3, [r7, #4]
  19029. 80083b2: 681b ldr r3, [r3, #0]
  19030. 80083b4: 4a1f ldr r2, [pc, #124] @ (8008434 <HAL_DMA_Abort_IT+0x3f4>)
  19031. 80083b6: 4293 cmp r3, r2
  19032. 80083b8: d013 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  19033. 80083ba: 687b ldr r3, [r7, #4]
  19034. 80083bc: 681b ldr r3, [r3, #0]
  19035. 80083be: 4a1e ldr r2, [pc, #120] @ (8008438 <HAL_DMA_Abort_IT+0x3f8>)
  19036. 80083c0: 4293 cmp r3, r2
  19037. 80083c2: d00e beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  19038. 80083c4: 687b ldr r3, [r7, #4]
  19039. 80083c6: 681b ldr r3, [r3, #0]
  19040. 80083c8: 4a1c ldr r2, [pc, #112] @ (800843c <HAL_DMA_Abort_IT+0x3fc>)
  19041. 80083ca: 4293 cmp r3, r2
  19042. 80083cc: d009 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  19043. 80083ce: 687b ldr r3, [r7, #4]
  19044. 80083d0: 681b ldr r3, [r3, #0]
  19045. 80083d2: 4a1b ldr r2, [pc, #108] @ (8008440 <HAL_DMA_Abort_IT+0x400>)
  19046. 80083d4: 4293 cmp r3, r2
  19047. 80083d6: d004 beq.n 80083e2 <HAL_DMA_Abort_IT+0x3a2>
  19048. 80083d8: 687b ldr r3, [r7, #4]
  19049. 80083da: 681b ldr r3, [r3, #0]
  19050. 80083dc: 4a19 ldr r2, [pc, #100] @ (8008444 <HAL_DMA_Abort_IT+0x404>)
  19051. 80083de: 4293 cmp r3, r2
  19052. 80083e0: d132 bne.n 8008448 <HAL_DMA_Abort_IT+0x408>
  19053. 80083e2: 2301 movs r3, #1
  19054. 80083e4: e031 b.n 800844a <HAL_DMA_Abort_IT+0x40a>
  19055. 80083e6: bf00 nop
  19056. 80083e8: 40020010 .word 0x40020010
  19057. 80083ec: 40020028 .word 0x40020028
  19058. 80083f0: 40020040 .word 0x40020040
  19059. 80083f4: 40020058 .word 0x40020058
  19060. 80083f8: 40020070 .word 0x40020070
  19061. 80083fc: 40020088 .word 0x40020088
  19062. 8008400: 400200a0 .word 0x400200a0
  19063. 8008404: 400200b8 .word 0x400200b8
  19064. 8008408: 40020410 .word 0x40020410
  19065. 800840c: 40020428 .word 0x40020428
  19066. 8008410: 40020440 .word 0x40020440
  19067. 8008414: 40020458 .word 0x40020458
  19068. 8008418: 40020470 .word 0x40020470
  19069. 800841c: 40020488 .word 0x40020488
  19070. 8008420: 400204a0 .word 0x400204a0
  19071. 8008424: 400204b8 .word 0x400204b8
  19072. 8008428: 58025408 .word 0x58025408
  19073. 800842c: 5802541c .word 0x5802541c
  19074. 8008430: 58025430 .word 0x58025430
  19075. 8008434: 58025444 .word 0x58025444
  19076. 8008438: 58025458 .word 0x58025458
  19077. 800843c: 5802546c .word 0x5802546c
  19078. 8008440: 58025480 .word 0x58025480
  19079. 8008444: 58025494 .word 0x58025494
  19080. 8008448: 2300 movs r3, #0
  19081. 800844a: 2b00 cmp r3, #0
  19082. 800844c: d028 beq.n 80084a0 <HAL_DMA_Abort_IT+0x460>
  19083. {
  19084. /* disable the DMAMUX sync overrun IT */
  19085. hdma->DMAmuxChannel->CCR &= ~DMAMUX_CxCR_SOIE;
  19086. 800844e: 687b ldr r3, [r7, #4]
  19087. 8008450: 6e1b ldr r3, [r3, #96] @ 0x60
  19088. 8008452: 681a ldr r2, [r3, #0]
  19089. 8008454: 687b ldr r3, [r7, #4]
  19090. 8008456: 6e1b ldr r3, [r3, #96] @ 0x60
  19091. 8008458: f422 7280 bic.w r2, r2, #256 @ 0x100
  19092. 800845c: 601a str r2, [r3, #0]
  19093. /* Clear all flags */
  19094. regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  19095. 800845e: 687b ldr r3, [r7, #4]
  19096. 8008460: 6d9b ldr r3, [r3, #88] @ 0x58
  19097. 8008462: 60fb str r3, [r7, #12]
  19098. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  19099. 8008464: 687b ldr r3, [r7, #4]
  19100. 8008466: 6ddb ldr r3, [r3, #92] @ 0x5c
  19101. 8008468: f003 031f and.w r3, r3, #31
  19102. 800846c: 2201 movs r2, #1
  19103. 800846e: 409a lsls r2, r3
  19104. 8008470: 68fb ldr r3, [r7, #12]
  19105. 8008472: 605a str r2, [r3, #4]
  19106. /* Clear the DMAMUX synchro overrun flag */
  19107. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  19108. 8008474: 687b ldr r3, [r7, #4]
  19109. 8008476: 6e5b ldr r3, [r3, #100] @ 0x64
  19110. 8008478: 687a ldr r2, [r7, #4]
  19111. 800847a: 6e92 ldr r2, [r2, #104] @ 0x68
  19112. 800847c: 605a str r2, [r3, #4]
  19113. if(hdma->DMAmuxRequestGen != 0U)
  19114. 800847e: 687b ldr r3, [r7, #4]
  19115. 8008480: 6edb ldr r3, [r3, #108] @ 0x6c
  19116. 8008482: 2b00 cmp r3, #0
  19117. 8008484: d00c beq.n 80084a0 <HAL_DMA_Abort_IT+0x460>
  19118. {
  19119. /* if using DMAMUX request generator, disable the DMAMUX request generator overrun IT*/
  19120. /* disable the request gen overrun IT */
  19121. hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_OIE;
  19122. 8008486: 687b ldr r3, [r7, #4]
  19123. 8008488: 6edb ldr r3, [r3, #108] @ 0x6c
  19124. 800848a: 681a ldr r2, [r3, #0]
  19125. 800848c: 687b ldr r3, [r7, #4]
  19126. 800848e: 6edb ldr r3, [r3, #108] @ 0x6c
  19127. 8008490: f422 7280 bic.w r2, r2, #256 @ 0x100
  19128. 8008494: 601a str r2, [r3, #0]
  19129. /* Clear the DMAMUX request generator overrun flag */
  19130. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  19131. 8008496: 687b ldr r3, [r7, #4]
  19132. 8008498: 6f1b ldr r3, [r3, #112] @ 0x70
  19133. 800849a: 687a ldr r2, [r7, #4]
  19134. 800849c: 6f52 ldr r2, [r2, #116] @ 0x74
  19135. 800849e: 605a str r2, [r3, #4]
  19136. }
  19137. }
  19138. /* Change the DMA state */
  19139. hdma->State = HAL_DMA_STATE_READY;
  19140. 80084a0: 687b ldr r3, [r7, #4]
  19141. 80084a2: 2201 movs r2, #1
  19142. 80084a4: f883 2035 strb.w r2, [r3, #53] @ 0x35
  19143. /* Process Unlocked */
  19144. __HAL_UNLOCK(hdma);
  19145. 80084a8: 687b ldr r3, [r7, #4]
  19146. 80084aa: 2200 movs r2, #0
  19147. 80084ac: f883 2034 strb.w r2, [r3, #52] @ 0x34
  19148. /* Call User Abort callback */
  19149. if(hdma->XferAbortCallback != NULL)
  19150. 80084b0: 687b ldr r3, [r7, #4]
  19151. 80084b2: 6d1b ldr r3, [r3, #80] @ 0x50
  19152. 80084b4: 2b00 cmp r3, #0
  19153. 80084b6: d003 beq.n 80084c0 <HAL_DMA_Abort_IT+0x480>
  19154. {
  19155. hdma->XferAbortCallback(hdma);
  19156. 80084b8: 687b ldr r3, [r7, #4]
  19157. 80084ba: 6d1b ldr r3, [r3, #80] @ 0x50
  19158. 80084bc: 6878 ldr r0, [r7, #4]
  19159. 80084be: 4798 blx r3
  19160. }
  19161. }
  19162. }
  19163. return HAL_OK;
  19164. 80084c0: 2300 movs r3, #0
  19165. }
  19166. 80084c2: 4618 mov r0, r3
  19167. 80084c4: 3710 adds r7, #16
  19168. 80084c6: 46bd mov sp, r7
  19169. 80084c8: bd80 pop {r7, pc}
  19170. 80084ca: bf00 nop
  19171. 080084cc <HAL_DMA_IRQHandler>:
  19172. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  19173. * the configuration information for the specified DMA Stream.
  19174. * @retval None
  19175. */
  19176. void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
  19177. {
  19178. 80084cc: b580 push {r7, lr}
  19179. 80084ce: b08a sub sp, #40 @ 0x28
  19180. 80084d0: af00 add r7, sp, #0
  19181. 80084d2: 6078 str r0, [r7, #4]
  19182. uint32_t tmpisr_dma, tmpisr_bdma;
  19183. uint32_t ccr_reg;
  19184. __IO uint32_t count = 0U;
  19185. 80084d4: 2300 movs r3, #0
  19186. 80084d6: 60fb str r3, [r7, #12]
  19187. uint32_t timeout = SystemCoreClock / 9600U;
  19188. 80084d8: 4b67 ldr r3, [pc, #412] @ (8008678 <HAL_DMA_IRQHandler+0x1ac>)
  19189. 80084da: 681b ldr r3, [r3, #0]
  19190. 80084dc: 4a67 ldr r2, [pc, #412] @ (800867c <HAL_DMA_IRQHandler+0x1b0>)
  19191. 80084de: fba2 2303 umull r2, r3, r2, r3
  19192. 80084e2: 0a9b lsrs r3, r3, #10
  19193. 80084e4: 627b str r3, [r7, #36] @ 0x24
  19194. /* calculate DMA base and stream number */
  19195. DMA_Base_Registers *regs_dma = (DMA_Base_Registers *)hdma->StreamBaseAddress;
  19196. 80084e6: 687b ldr r3, [r7, #4]
  19197. 80084e8: 6d9b ldr r3, [r3, #88] @ 0x58
  19198. 80084ea: 623b str r3, [r7, #32]
  19199. BDMA_Base_Registers *regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  19200. 80084ec: 687b ldr r3, [r7, #4]
  19201. 80084ee: 6d9b ldr r3, [r3, #88] @ 0x58
  19202. 80084f0: 61fb str r3, [r7, #28]
  19203. tmpisr_dma = regs_dma->ISR;
  19204. 80084f2: 6a3b ldr r3, [r7, #32]
  19205. 80084f4: 681b ldr r3, [r3, #0]
  19206. 80084f6: 61bb str r3, [r7, #24]
  19207. tmpisr_bdma = regs_bdma->ISR;
  19208. 80084f8: 69fb ldr r3, [r7, #28]
  19209. 80084fa: 681b ldr r3, [r3, #0]
  19210. 80084fc: 617b str r3, [r7, #20]
  19211. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  19212. 80084fe: 687b ldr r3, [r7, #4]
  19213. 8008500: 681b ldr r3, [r3, #0]
  19214. 8008502: 4a5f ldr r2, [pc, #380] @ (8008680 <HAL_DMA_IRQHandler+0x1b4>)
  19215. 8008504: 4293 cmp r3, r2
  19216. 8008506: d04a beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19217. 8008508: 687b ldr r3, [r7, #4]
  19218. 800850a: 681b ldr r3, [r3, #0]
  19219. 800850c: 4a5d ldr r2, [pc, #372] @ (8008684 <HAL_DMA_IRQHandler+0x1b8>)
  19220. 800850e: 4293 cmp r3, r2
  19221. 8008510: d045 beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19222. 8008512: 687b ldr r3, [r7, #4]
  19223. 8008514: 681b ldr r3, [r3, #0]
  19224. 8008516: 4a5c ldr r2, [pc, #368] @ (8008688 <HAL_DMA_IRQHandler+0x1bc>)
  19225. 8008518: 4293 cmp r3, r2
  19226. 800851a: d040 beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19227. 800851c: 687b ldr r3, [r7, #4]
  19228. 800851e: 681b ldr r3, [r3, #0]
  19229. 8008520: 4a5a ldr r2, [pc, #360] @ (800868c <HAL_DMA_IRQHandler+0x1c0>)
  19230. 8008522: 4293 cmp r3, r2
  19231. 8008524: d03b beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19232. 8008526: 687b ldr r3, [r7, #4]
  19233. 8008528: 681b ldr r3, [r3, #0]
  19234. 800852a: 4a59 ldr r2, [pc, #356] @ (8008690 <HAL_DMA_IRQHandler+0x1c4>)
  19235. 800852c: 4293 cmp r3, r2
  19236. 800852e: d036 beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19237. 8008530: 687b ldr r3, [r7, #4]
  19238. 8008532: 681b ldr r3, [r3, #0]
  19239. 8008534: 4a57 ldr r2, [pc, #348] @ (8008694 <HAL_DMA_IRQHandler+0x1c8>)
  19240. 8008536: 4293 cmp r3, r2
  19241. 8008538: d031 beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19242. 800853a: 687b ldr r3, [r7, #4]
  19243. 800853c: 681b ldr r3, [r3, #0]
  19244. 800853e: 4a56 ldr r2, [pc, #344] @ (8008698 <HAL_DMA_IRQHandler+0x1cc>)
  19245. 8008540: 4293 cmp r3, r2
  19246. 8008542: d02c beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19247. 8008544: 687b ldr r3, [r7, #4]
  19248. 8008546: 681b ldr r3, [r3, #0]
  19249. 8008548: 4a54 ldr r2, [pc, #336] @ (800869c <HAL_DMA_IRQHandler+0x1d0>)
  19250. 800854a: 4293 cmp r3, r2
  19251. 800854c: d027 beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19252. 800854e: 687b ldr r3, [r7, #4]
  19253. 8008550: 681b ldr r3, [r3, #0]
  19254. 8008552: 4a53 ldr r2, [pc, #332] @ (80086a0 <HAL_DMA_IRQHandler+0x1d4>)
  19255. 8008554: 4293 cmp r3, r2
  19256. 8008556: d022 beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19257. 8008558: 687b ldr r3, [r7, #4]
  19258. 800855a: 681b ldr r3, [r3, #0]
  19259. 800855c: 4a51 ldr r2, [pc, #324] @ (80086a4 <HAL_DMA_IRQHandler+0x1d8>)
  19260. 800855e: 4293 cmp r3, r2
  19261. 8008560: d01d beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19262. 8008562: 687b ldr r3, [r7, #4]
  19263. 8008564: 681b ldr r3, [r3, #0]
  19264. 8008566: 4a50 ldr r2, [pc, #320] @ (80086a8 <HAL_DMA_IRQHandler+0x1dc>)
  19265. 8008568: 4293 cmp r3, r2
  19266. 800856a: d018 beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19267. 800856c: 687b ldr r3, [r7, #4]
  19268. 800856e: 681b ldr r3, [r3, #0]
  19269. 8008570: 4a4e ldr r2, [pc, #312] @ (80086ac <HAL_DMA_IRQHandler+0x1e0>)
  19270. 8008572: 4293 cmp r3, r2
  19271. 8008574: d013 beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19272. 8008576: 687b ldr r3, [r7, #4]
  19273. 8008578: 681b ldr r3, [r3, #0]
  19274. 800857a: 4a4d ldr r2, [pc, #308] @ (80086b0 <HAL_DMA_IRQHandler+0x1e4>)
  19275. 800857c: 4293 cmp r3, r2
  19276. 800857e: d00e beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19277. 8008580: 687b ldr r3, [r7, #4]
  19278. 8008582: 681b ldr r3, [r3, #0]
  19279. 8008584: 4a4b ldr r2, [pc, #300] @ (80086b4 <HAL_DMA_IRQHandler+0x1e8>)
  19280. 8008586: 4293 cmp r3, r2
  19281. 8008588: d009 beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19282. 800858a: 687b ldr r3, [r7, #4]
  19283. 800858c: 681b ldr r3, [r3, #0]
  19284. 800858e: 4a4a ldr r2, [pc, #296] @ (80086b8 <HAL_DMA_IRQHandler+0x1ec>)
  19285. 8008590: 4293 cmp r3, r2
  19286. 8008592: d004 beq.n 800859e <HAL_DMA_IRQHandler+0xd2>
  19287. 8008594: 687b ldr r3, [r7, #4]
  19288. 8008596: 681b ldr r3, [r3, #0]
  19289. 8008598: 4a48 ldr r2, [pc, #288] @ (80086bc <HAL_DMA_IRQHandler+0x1f0>)
  19290. 800859a: 4293 cmp r3, r2
  19291. 800859c: d101 bne.n 80085a2 <HAL_DMA_IRQHandler+0xd6>
  19292. 800859e: 2301 movs r3, #1
  19293. 80085a0: e000 b.n 80085a4 <HAL_DMA_IRQHandler+0xd8>
  19294. 80085a2: 2300 movs r3, #0
  19295. 80085a4: 2b00 cmp r3, #0
  19296. 80085a6: f000 842b beq.w 8008e00 <HAL_DMA_IRQHandler+0x934>
  19297. {
  19298. /* Transfer Error Interrupt management ***************************************/
  19299. if ((tmpisr_dma & (DMA_FLAG_TEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  19300. 80085aa: 687b ldr r3, [r7, #4]
  19301. 80085ac: 6ddb ldr r3, [r3, #92] @ 0x5c
  19302. 80085ae: f003 031f and.w r3, r3, #31
  19303. 80085b2: 2208 movs r2, #8
  19304. 80085b4: 409a lsls r2, r3
  19305. 80085b6: 69bb ldr r3, [r7, #24]
  19306. 80085b8: 4013 ands r3, r2
  19307. 80085ba: 2b00 cmp r3, #0
  19308. 80085bc: f000 80a2 beq.w 8008704 <HAL_DMA_IRQHandler+0x238>
  19309. {
  19310. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TE) != 0U)
  19311. 80085c0: 687b ldr r3, [r7, #4]
  19312. 80085c2: 681b ldr r3, [r3, #0]
  19313. 80085c4: 4a2e ldr r2, [pc, #184] @ (8008680 <HAL_DMA_IRQHandler+0x1b4>)
  19314. 80085c6: 4293 cmp r3, r2
  19315. 80085c8: d04a beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19316. 80085ca: 687b ldr r3, [r7, #4]
  19317. 80085cc: 681b ldr r3, [r3, #0]
  19318. 80085ce: 4a2d ldr r2, [pc, #180] @ (8008684 <HAL_DMA_IRQHandler+0x1b8>)
  19319. 80085d0: 4293 cmp r3, r2
  19320. 80085d2: d045 beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19321. 80085d4: 687b ldr r3, [r7, #4]
  19322. 80085d6: 681b ldr r3, [r3, #0]
  19323. 80085d8: 4a2b ldr r2, [pc, #172] @ (8008688 <HAL_DMA_IRQHandler+0x1bc>)
  19324. 80085da: 4293 cmp r3, r2
  19325. 80085dc: d040 beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19326. 80085de: 687b ldr r3, [r7, #4]
  19327. 80085e0: 681b ldr r3, [r3, #0]
  19328. 80085e2: 4a2a ldr r2, [pc, #168] @ (800868c <HAL_DMA_IRQHandler+0x1c0>)
  19329. 80085e4: 4293 cmp r3, r2
  19330. 80085e6: d03b beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19331. 80085e8: 687b ldr r3, [r7, #4]
  19332. 80085ea: 681b ldr r3, [r3, #0]
  19333. 80085ec: 4a28 ldr r2, [pc, #160] @ (8008690 <HAL_DMA_IRQHandler+0x1c4>)
  19334. 80085ee: 4293 cmp r3, r2
  19335. 80085f0: d036 beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19336. 80085f2: 687b ldr r3, [r7, #4]
  19337. 80085f4: 681b ldr r3, [r3, #0]
  19338. 80085f6: 4a27 ldr r2, [pc, #156] @ (8008694 <HAL_DMA_IRQHandler+0x1c8>)
  19339. 80085f8: 4293 cmp r3, r2
  19340. 80085fa: d031 beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19341. 80085fc: 687b ldr r3, [r7, #4]
  19342. 80085fe: 681b ldr r3, [r3, #0]
  19343. 8008600: 4a25 ldr r2, [pc, #148] @ (8008698 <HAL_DMA_IRQHandler+0x1cc>)
  19344. 8008602: 4293 cmp r3, r2
  19345. 8008604: d02c beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19346. 8008606: 687b ldr r3, [r7, #4]
  19347. 8008608: 681b ldr r3, [r3, #0]
  19348. 800860a: 4a24 ldr r2, [pc, #144] @ (800869c <HAL_DMA_IRQHandler+0x1d0>)
  19349. 800860c: 4293 cmp r3, r2
  19350. 800860e: d027 beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19351. 8008610: 687b ldr r3, [r7, #4]
  19352. 8008612: 681b ldr r3, [r3, #0]
  19353. 8008614: 4a22 ldr r2, [pc, #136] @ (80086a0 <HAL_DMA_IRQHandler+0x1d4>)
  19354. 8008616: 4293 cmp r3, r2
  19355. 8008618: d022 beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19356. 800861a: 687b ldr r3, [r7, #4]
  19357. 800861c: 681b ldr r3, [r3, #0]
  19358. 800861e: 4a21 ldr r2, [pc, #132] @ (80086a4 <HAL_DMA_IRQHandler+0x1d8>)
  19359. 8008620: 4293 cmp r3, r2
  19360. 8008622: d01d beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19361. 8008624: 687b ldr r3, [r7, #4]
  19362. 8008626: 681b ldr r3, [r3, #0]
  19363. 8008628: 4a1f ldr r2, [pc, #124] @ (80086a8 <HAL_DMA_IRQHandler+0x1dc>)
  19364. 800862a: 4293 cmp r3, r2
  19365. 800862c: d018 beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19366. 800862e: 687b ldr r3, [r7, #4]
  19367. 8008630: 681b ldr r3, [r3, #0]
  19368. 8008632: 4a1e ldr r2, [pc, #120] @ (80086ac <HAL_DMA_IRQHandler+0x1e0>)
  19369. 8008634: 4293 cmp r3, r2
  19370. 8008636: d013 beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19371. 8008638: 687b ldr r3, [r7, #4]
  19372. 800863a: 681b ldr r3, [r3, #0]
  19373. 800863c: 4a1c ldr r2, [pc, #112] @ (80086b0 <HAL_DMA_IRQHandler+0x1e4>)
  19374. 800863e: 4293 cmp r3, r2
  19375. 8008640: d00e beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19376. 8008642: 687b ldr r3, [r7, #4]
  19377. 8008644: 681b ldr r3, [r3, #0]
  19378. 8008646: 4a1b ldr r2, [pc, #108] @ (80086b4 <HAL_DMA_IRQHandler+0x1e8>)
  19379. 8008648: 4293 cmp r3, r2
  19380. 800864a: d009 beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19381. 800864c: 687b ldr r3, [r7, #4]
  19382. 800864e: 681b ldr r3, [r3, #0]
  19383. 8008650: 4a19 ldr r2, [pc, #100] @ (80086b8 <HAL_DMA_IRQHandler+0x1ec>)
  19384. 8008652: 4293 cmp r3, r2
  19385. 8008654: d004 beq.n 8008660 <HAL_DMA_IRQHandler+0x194>
  19386. 8008656: 687b ldr r3, [r7, #4]
  19387. 8008658: 681b ldr r3, [r3, #0]
  19388. 800865a: 4a18 ldr r2, [pc, #96] @ (80086bc <HAL_DMA_IRQHandler+0x1f0>)
  19389. 800865c: 4293 cmp r3, r2
  19390. 800865e: d12f bne.n 80086c0 <HAL_DMA_IRQHandler+0x1f4>
  19391. 8008660: 687b ldr r3, [r7, #4]
  19392. 8008662: 681b ldr r3, [r3, #0]
  19393. 8008664: 681b ldr r3, [r3, #0]
  19394. 8008666: f003 0304 and.w r3, r3, #4
  19395. 800866a: 2b00 cmp r3, #0
  19396. 800866c: bf14 ite ne
  19397. 800866e: 2301 movne r3, #1
  19398. 8008670: 2300 moveq r3, #0
  19399. 8008672: b2db uxtb r3, r3
  19400. 8008674: e02e b.n 80086d4 <HAL_DMA_IRQHandler+0x208>
  19401. 8008676: bf00 nop
  19402. 8008678: 24000034 .word 0x24000034
  19403. 800867c: 1b4e81b5 .word 0x1b4e81b5
  19404. 8008680: 40020010 .word 0x40020010
  19405. 8008684: 40020028 .word 0x40020028
  19406. 8008688: 40020040 .word 0x40020040
  19407. 800868c: 40020058 .word 0x40020058
  19408. 8008690: 40020070 .word 0x40020070
  19409. 8008694: 40020088 .word 0x40020088
  19410. 8008698: 400200a0 .word 0x400200a0
  19411. 800869c: 400200b8 .word 0x400200b8
  19412. 80086a0: 40020410 .word 0x40020410
  19413. 80086a4: 40020428 .word 0x40020428
  19414. 80086a8: 40020440 .word 0x40020440
  19415. 80086ac: 40020458 .word 0x40020458
  19416. 80086b0: 40020470 .word 0x40020470
  19417. 80086b4: 40020488 .word 0x40020488
  19418. 80086b8: 400204a0 .word 0x400204a0
  19419. 80086bc: 400204b8 .word 0x400204b8
  19420. 80086c0: 687b ldr r3, [r7, #4]
  19421. 80086c2: 681b ldr r3, [r3, #0]
  19422. 80086c4: 681b ldr r3, [r3, #0]
  19423. 80086c6: f003 0308 and.w r3, r3, #8
  19424. 80086ca: 2b00 cmp r3, #0
  19425. 80086cc: bf14 ite ne
  19426. 80086ce: 2301 movne r3, #1
  19427. 80086d0: 2300 moveq r3, #0
  19428. 80086d2: b2db uxtb r3, r3
  19429. 80086d4: 2b00 cmp r3, #0
  19430. 80086d6: d015 beq.n 8008704 <HAL_DMA_IRQHandler+0x238>
  19431. {
  19432. /* Disable the transfer error interrupt */
  19433. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TE);
  19434. 80086d8: 687b ldr r3, [r7, #4]
  19435. 80086da: 681b ldr r3, [r3, #0]
  19436. 80086dc: 681a ldr r2, [r3, #0]
  19437. 80086de: 687b ldr r3, [r7, #4]
  19438. 80086e0: 681b ldr r3, [r3, #0]
  19439. 80086e2: f022 0204 bic.w r2, r2, #4
  19440. 80086e6: 601a str r2, [r3, #0]
  19441. /* Clear the transfer error flag */
  19442. regs_dma->IFCR = DMA_FLAG_TEIF0_4 << (hdma->StreamIndex & 0x1FU);
  19443. 80086e8: 687b ldr r3, [r7, #4]
  19444. 80086ea: 6ddb ldr r3, [r3, #92] @ 0x5c
  19445. 80086ec: f003 031f and.w r3, r3, #31
  19446. 80086f0: 2208 movs r2, #8
  19447. 80086f2: 409a lsls r2, r3
  19448. 80086f4: 6a3b ldr r3, [r7, #32]
  19449. 80086f6: 609a str r2, [r3, #8]
  19450. /* Update error code */
  19451. hdma->ErrorCode |= HAL_DMA_ERROR_TE;
  19452. 80086f8: 687b ldr r3, [r7, #4]
  19453. 80086fa: 6d5b ldr r3, [r3, #84] @ 0x54
  19454. 80086fc: f043 0201 orr.w r2, r3, #1
  19455. 8008700: 687b ldr r3, [r7, #4]
  19456. 8008702: 655a str r2, [r3, #84] @ 0x54
  19457. }
  19458. }
  19459. /* FIFO Error Interrupt management ******************************************/
  19460. if ((tmpisr_dma & (DMA_FLAG_FEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  19461. 8008704: 687b ldr r3, [r7, #4]
  19462. 8008706: 6ddb ldr r3, [r3, #92] @ 0x5c
  19463. 8008708: f003 031f and.w r3, r3, #31
  19464. 800870c: 69ba ldr r2, [r7, #24]
  19465. 800870e: fa22 f303 lsr.w r3, r2, r3
  19466. 8008712: f003 0301 and.w r3, r3, #1
  19467. 8008716: 2b00 cmp r3, #0
  19468. 8008718: d06e beq.n 80087f8 <HAL_DMA_IRQHandler+0x32c>
  19469. {
  19470. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_FE) != 0U)
  19471. 800871a: 687b ldr r3, [r7, #4]
  19472. 800871c: 681b ldr r3, [r3, #0]
  19473. 800871e: 4a69 ldr r2, [pc, #420] @ (80088c4 <HAL_DMA_IRQHandler+0x3f8>)
  19474. 8008720: 4293 cmp r3, r2
  19475. 8008722: d04a beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19476. 8008724: 687b ldr r3, [r7, #4]
  19477. 8008726: 681b ldr r3, [r3, #0]
  19478. 8008728: 4a67 ldr r2, [pc, #412] @ (80088c8 <HAL_DMA_IRQHandler+0x3fc>)
  19479. 800872a: 4293 cmp r3, r2
  19480. 800872c: d045 beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19481. 800872e: 687b ldr r3, [r7, #4]
  19482. 8008730: 681b ldr r3, [r3, #0]
  19483. 8008732: 4a66 ldr r2, [pc, #408] @ (80088cc <HAL_DMA_IRQHandler+0x400>)
  19484. 8008734: 4293 cmp r3, r2
  19485. 8008736: d040 beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19486. 8008738: 687b ldr r3, [r7, #4]
  19487. 800873a: 681b ldr r3, [r3, #0]
  19488. 800873c: 4a64 ldr r2, [pc, #400] @ (80088d0 <HAL_DMA_IRQHandler+0x404>)
  19489. 800873e: 4293 cmp r3, r2
  19490. 8008740: d03b beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19491. 8008742: 687b ldr r3, [r7, #4]
  19492. 8008744: 681b ldr r3, [r3, #0]
  19493. 8008746: 4a63 ldr r2, [pc, #396] @ (80088d4 <HAL_DMA_IRQHandler+0x408>)
  19494. 8008748: 4293 cmp r3, r2
  19495. 800874a: d036 beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19496. 800874c: 687b ldr r3, [r7, #4]
  19497. 800874e: 681b ldr r3, [r3, #0]
  19498. 8008750: 4a61 ldr r2, [pc, #388] @ (80088d8 <HAL_DMA_IRQHandler+0x40c>)
  19499. 8008752: 4293 cmp r3, r2
  19500. 8008754: d031 beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19501. 8008756: 687b ldr r3, [r7, #4]
  19502. 8008758: 681b ldr r3, [r3, #0]
  19503. 800875a: 4a60 ldr r2, [pc, #384] @ (80088dc <HAL_DMA_IRQHandler+0x410>)
  19504. 800875c: 4293 cmp r3, r2
  19505. 800875e: d02c beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19506. 8008760: 687b ldr r3, [r7, #4]
  19507. 8008762: 681b ldr r3, [r3, #0]
  19508. 8008764: 4a5e ldr r2, [pc, #376] @ (80088e0 <HAL_DMA_IRQHandler+0x414>)
  19509. 8008766: 4293 cmp r3, r2
  19510. 8008768: d027 beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19511. 800876a: 687b ldr r3, [r7, #4]
  19512. 800876c: 681b ldr r3, [r3, #0]
  19513. 800876e: 4a5d ldr r2, [pc, #372] @ (80088e4 <HAL_DMA_IRQHandler+0x418>)
  19514. 8008770: 4293 cmp r3, r2
  19515. 8008772: d022 beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19516. 8008774: 687b ldr r3, [r7, #4]
  19517. 8008776: 681b ldr r3, [r3, #0]
  19518. 8008778: 4a5b ldr r2, [pc, #364] @ (80088e8 <HAL_DMA_IRQHandler+0x41c>)
  19519. 800877a: 4293 cmp r3, r2
  19520. 800877c: d01d beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19521. 800877e: 687b ldr r3, [r7, #4]
  19522. 8008780: 681b ldr r3, [r3, #0]
  19523. 8008782: 4a5a ldr r2, [pc, #360] @ (80088ec <HAL_DMA_IRQHandler+0x420>)
  19524. 8008784: 4293 cmp r3, r2
  19525. 8008786: d018 beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19526. 8008788: 687b ldr r3, [r7, #4]
  19527. 800878a: 681b ldr r3, [r3, #0]
  19528. 800878c: 4a58 ldr r2, [pc, #352] @ (80088f0 <HAL_DMA_IRQHandler+0x424>)
  19529. 800878e: 4293 cmp r3, r2
  19530. 8008790: d013 beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19531. 8008792: 687b ldr r3, [r7, #4]
  19532. 8008794: 681b ldr r3, [r3, #0]
  19533. 8008796: 4a57 ldr r2, [pc, #348] @ (80088f4 <HAL_DMA_IRQHandler+0x428>)
  19534. 8008798: 4293 cmp r3, r2
  19535. 800879a: d00e beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19536. 800879c: 687b ldr r3, [r7, #4]
  19537. 800879e: 681b ldr r3, [r3, #0]
  19538. 80087a0: 4a55 ldr r2, [pc, #340] @ (80088f8 <HAL_DMA_IRQHandler+0x42c>)
  19539. 80087a2: 4293 cmp r3, r2
  19540. 80087a4: d009 beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19541. 80087a6: 687b ldr r3, [r7, #4]
  19542. 80087a8: 681b ldr r3, [r3, #0]
  19543. 80087aa: 4a54 ldr r2, [pc, #336] @ (80088fc <HAL_DMA_IRQHandler+0x430>)
  19544. 80087ac: 4293 cmp r3, r2
  19545. 80087ae: d004 beq.n 80087ba <HAL_DMA_IRQHandler+0x2ee>
  19546. 80087b0: 687b ldr r3, [r7, #4]
  19547. 80087b2: 681b ldr r3, [r3, #0]
  19548. 80087b4: 4a52 ldr r2, [pc, #328] @ (8008900 <HAL_DMA_IRQHandler+0x434>)
  19549. 80087b6: 4293 cmp r3, r2
  19550. 80087b8: d10a bne.n 80087d0 <HAL_DMA_IRQHandler+0x304>
  19551. 80087ba: 687b ldr r3, [r7, #4]
  19552. 80087bc: 681b ldr r3, [r3, #0]
  19553. 80087be: 695b ldr r3, [r3, #20]
  19554. 80087c0: f003 0380 and.w r3, r3, #128 @ 0x80
  19555. 80087c4: 2b00 cmp r3, #0
  19556. 80087c6: bf14 ite ne
  19557. 80087c8: 2301 movne r3, #1
  19558. 80087ca: 2300 moveq r3, #0
  19559. 80087cc: b2db uxtb r3, r3
  19560. 80087ce: e003 b.n 80087d8 <HAL_DMA_IRQHandler+0x30c>
  19561. 80087d0: 687b ldr r3, [r7, #4]
  19562. 80087d2: 681b ldr r3, [r3, #0]
  19563. 80087d4: 681b ldr r3, [r3, #0]
  19564. 80087d6: 2300 movs r3, #0
  19565. 80087d8: 2b00 cmp r3, #0
  19566. 80087da: d00d beq.n 80087f8 <HAL_DMA_IRQHandler+0x32c>
  19567. {
  19568. /* Clear the FIFO error flag */
  19569. regs_dma->IFCR = DMA_FLAG_FEIF0_4 << (hdma->StreamIndex & 0x1FU);
  19570. 80087dc: 687b ldr r3, [r7, #4]
  19571. 80087de: 6ddb ldr r3, [r3, #92] @ 0x5c
  19572. 80087e0: f003 031f and.w r3, r3, #31
  19573. 80087e4: 2201 movs r2, #1
  19574. 80087e6: 409a lsls r2, r3
  19575. 80087e8: 6a3b ldr r3, [r7, #32]
  19576. 80087ea: 609a str r2, [r3, #8]
  19577. /* Update error code */
  19578. hdma->ErrorCode |= HAL_DMA_ERROR_FE;
  19579. 80087ec: 687b ldr r3, [r7, #4]
  19580. 80087ee: 6d5b ldr r3, [r3, #84] @ 0x54
  19581. 80087f0: f043 0202 orr.w r2, r3, #2
  19582. 80087f4: 687b ldr r3, [r7, #4]
  19583. 80087f6: 655a str r2, [r3, #84] @ 0x54
  19584. }
  19585. }
  19586. /* Direct Mode Error Interrupt management ***********************************/
  19587. if ((tmpisr_dma & (DMA_FLAG_DMEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  19588. 80087f8: 687b ldr r3, [r7, #4]
  19589. 80087fa: 6ddb ldr r3, [r3, #92] @ 0x5c
  19590. 80087fc: f003 031f and.w r3, r3, #31
  19591. 8008800: 2204 movs r2, #4
  19592. 8008802: 409a lsls r2, r3
  19593. 8008804: 69bb ldr r3, [r7, #24]
  19594. 8008806: 4013 ands r3, r2
  19595. 8008808: 2b00 cmp r3, #0
  19596. 800880a: f000 808f beq.w 800892c <HAL_DMA_IRQHandler+0x460>
  19597. {
  19598. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_DME) != 0U)
  19599. 800880e: 687b ldr r3, [r7, #4]
  19600. 8008810: 681b ldr r3, [r3, #0]
  19601. 8008812: 4a2c ldr r2, [pc, #176] @ (80088c4 <HAL_DMA_IRQHandler+0x3f8>)
  19602. 8008814: 4293 cmp r3, r2
  19603. 8008816: d04a beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19604. 8008818: 687b ldr r3, [r7, #4]
  19605. 800881a: 681b ldr r3, [r3, #0]
  19606. 800881c: 4a2a ldr r2, [pc, #168] @ (80088c8 <HAL_DMA_IRQHandler+0x3fc>)
  19607. 800881e: 4293 cmp r3, r2
  19608. 8008820: d045 beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19609. 8008822: 687b ldr r3, [r7, #4]
  19610. 8008824: 681b ldr r3, [r3, #0]
  19611. 8008826: 4a29 ldr r2, [pc, #164] @ (80088cc <HAL_DMA_IRQHandler+0x400>)
  19612. 8008828: 4293 cmp r3, r2
  19613. 800882a: d040 beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19614. 800882c: 687b ldr r3, [r7, #4]
  19615. 800882e: 681b ldr r3, [r3, #0]
  19616. 8008830: 4a27 ldr r2, [pc, #156] @ (80088d0 <HAL_DMA_IRQHandler+0x404>)
  19617. 8008832: 4293 cmp r3, r2
  19618. 8008834: d03b beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19619. 8008836: 687b ldr r3, [r7, #4]
  19620. 8008838: 681b ldr r3, [r3, #0]
  19621. 800883a: 4a26 ldr r2, [pc, #152] @ (80088d4 <HAL_DMA_IRQHandler+0x408>)
  19622. 800883c: 4293 cmp r3, r2
  19623. 800883e: d036 beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19624. 8008840: 687b ldr r3, [r7, #4]
  19625. 8008842: 681b ldr r3, [r3, #0]
  19626. 8008844: 4a24 ldr r2, [pc, #144] @ (80088d8 <HAL_DMA_IRQHandler+0x40c>)
  19627. 8008846: 4293 cmp r3, r2
  19628. 8008848: d031 beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19629. 800884a: 687b ldr r3, [r7, #4]
  19630. 800884c: 681b ldr r3, [r3, #0]
  19631. 800884e: 4a23 ldr r2, [pc, #140] @ (80088dc <HAL_DMA_IRQHandler+0x410>)
  19632. 8008850: 4293 cmp r3, r2
  19633. 8008852: d02c beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19634. 8008854: 687b ldr r3, [r7, #4]
  19635. 8008856: 681b ldr r3, [r3, #0]
  19636. 8008858: 4a21 ldr r2, [pc, #132] @ (80088e0 <HAL_DMA_IRQHandler+0x414>)
  19637. 800885a: 4293 cmp r3, r2
  19638. 800885c: d027 beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19639. 800885e: 687b ldr r3, [r7, #4]
  19640. 8008860: 681b ldr r3, [r3, #0]
  19641. 8008862: 4a20 ldr r2, [pc, #128] @ (80088e4 <HAL_DMA_IRQHandler+0x418>)
  19642. 8008864: 4293 cmp r3, r2
  19643. 8008866: d022 beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19644. 8008868: 687b ldr r3, [r7, #4]
  19645. 800886a: 681b ldr r3, [r3, #0]
  19646. 800886c: 4a1e ldr r2, [pc, #120] @ (80088e8 <HAL_DMA_IRQHandler+0x41c>)
  19647. 800886e: 4293 cmp r3, r2
  19648. 8008870: d01d beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19649. 8008872: 687b ldr r3, [r7, #4]
  19650. 8008874: 681b ldr r3, [r3, #0]
  19651. 8008876: 4a1d ldr r2, [pc, #116] @ (80088ec <HAL_DMA_IRQHandler+0x420>)
  19652. 8008878: 4293 cmp r3, r2
  19653. 800887a: d018 beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19654. 800887c: 687b ldr r3, [r7, #4]
  19655. 800887e: 681b ldr r3, [r3, #0]
  19656. 8008880: 4a1b ldr r2, [pc, #108] @ (80088f0 <HAL_DMA_IRQHandler+0x424>)
  19657. 8008882: 4293 cmp r3, r2
  19658. 8008884: d013 beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19659. 8008886: 687b ldr r3, [r7, #4]
  19660. 8008888: 681b ldr r3, [r3, #0]
  19661. 800888a: 4a1a ldr r2, [pc, #104] @ (80088f4 <HAL_DMA_IRQHandler+0x428>)
  19662. 800888c: 4293 cmp r3, r2
  19663. 800888e: d00e beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19664. 8008890: 687b ldr r3, [r7, #4]
  19665. 8008892: 681b ldr r3, [r3, #0]
  19666. 8008894: 4a18 ldr r2, [pc, #96] @ (80088f8 <HAL_DMA_IRQHandler+0x42c>)
  19667. 8008896: 4293 cmp r3, r2
  19668. 8008898: d009 beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19669. 800889a: 687b ldr r3, [r7, #4]
  19670. 800889c: 681b ldr r3, [r3, #0]
  19671. 800889e: 4a17 ldr r2, [pc, #92] @ (80088fc <HAL_DMA_IRQHandler+0x430>)
  19672. 80088a0: 4293 cmp r3, r2
  19673. 80088a2: d004 beq.n 80088ae <HAL_DMA_IRQHandler+0x3e2>
  19674. 80088a4: 687b ldr r3, [r7, #4]
  19675. 80088a6: 681b ldr r3, [r3, #0]
  19676. 80088a8: 4a15 ldr r2, [pc, #84] @ (8008900 <HAL_DMA_IRQHandler+0x434>)
  19677. 80088aa: 4293 cmp r3, r2
  19678. 80088ac: d12a bne.n 8008904 <HAL_DMA_IRQHandler+0x438>
  19679. 80088ae: 687b ldr r3, [r7, #4]
  19680. 80088b0: 681b ldr r3, [r3, #0]
  19681. 80088b2: 681b ldr r3, [r3, #0]
  19682. 80088b4: f003 0302 and.w r3, r3, #2
  19683. 80088b8: 2b00 cmp r3, #0
  19684. 80088ba: bf14 ite ne
  19685. 80088bc: 2301 movne r3, #1
  19686. 80088be: 2300 moveq r3, #0
  19687. 80088c0: b2db uxtb r3, r3
  19688. 80088c2: e023 b.n 800890c <HAL_DMA_IRQHandler+0x440>
  19689. 80088c4: 40020010 .word 0x40020010
  19690. 80088c8: 40020028 .word 0x40020028
  19691. 80088cc: 40020040 .word 0x40020040
  19692. 80088d0: 40020058 .word 0x40020058
  19693. 80088d4: 40020070 .word 0x40020070
  19694. 80088d8: 40020088 .word 0x40020088
  19695. 80088dc: 400200a0 .word 0x400200a0
  19696. 80088e0: 400200b8 .word 0x400200b8
  19697. 80088e4: 40020410 .word 0x40020410
  19698. 80088e8: 40020428 .word 0x40020428
  19699. 80088ec: 40020440 .word 0x40020440
  19700. 80088f0: 40020458 .word 0x40020458
  19701. 80088f4: 40020470 .word 0x40020470
  19702. 80088f8: 40020488 .word 0x40020488
  19703. 80088fc: 400204a0 .word 0x400204a0
  19704. 8008900: 400204b8 .word 0x400204b8
  19705. 8008904: 687b ldr r3, [r7, #4]
  19706. 8008906: 681b ldr r3, [r3, #0]
  19707. 8008908: 681b ldr r3, [r3, #0]
  19708. 800890a: 2300 movs r3, #0
  19709. 800890c: 2b00 cmp r3, #0
  19710. 800890e: d00d beq.n 800892c <HAL_DMA_IRQHandler+0x460>
  19711. {
  19712. /* Clear the direct mode error flag */
  19713. regs_dma->IFCR = DMA_FLAG_DMEIF0_4 << (hdma->StreamIndex & 0x1FU);
  19714. 8008910: 687b ldr r3, [r7, #4]
  19715. 8008912: 6ddb ldr r3, [r3, #92] @ 0x5c
  19716. 8008914: f003 031f and.w r3, r3, #31
  19717. 8008918: 2204 movs r2, #4
  19718. 800891a: 409a lsls r2, r3
  19719. 800891c: 6a3b ldr r3, [r7, #32]
  19720. 800891e: 609a str r2, [r3, #8]
  19721. /* Update error code */
  19722. hdma->ErrorCode |= HAL_DMA_ERROR_DME;
  19723. 8008920: 687b ldr r3, [r7, #4]
  19724. 8008922: 6d5b ldr r3, [r3, #84] @ 0x54
  19725. 8008924: f043 0204 orr.w r2, r3, #4
  19726. 8008928: 687b ldr r3, [r7, #4]
  19727. 800892a: 655a str r2, [r3, #84] @ 0x54
  19728. }
  19729. }
  19730. /* Half Transfer Complete Interrupt management ******************************/
  19731. if ((tmpisr_dma & (DMA_FLAG_HTIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  19732. 800892c: 687b ldr r3, [r7, #4]
  19733. 800892e: 6ddb ldr r3, [r3, #92] @ 0x5c
  19734. 8008930: f003 031f and.w r3, r3, #31
  19735. 8008934: 2210 movs r2, #16
  19736. 8008936: 409a lsls r2, r3
  19737. 8008938: 69bb ldr r3, [r7, #24]
  19738. 800893a: 4013 ands r3, r2
  19739. 800893c: 2b00 cmp r3, #0
  19740. 800893e: f000 80a6 beq.w 8008a8e <HAL_DMA_IRQHandler+0x5c2>
  19741. {
  19742. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_HT) != 0U)
  19743. 8008942: 687b ldr r3, [r7, #4]
  19744. 8008944: 681b ldr r3, [r3, #0]
  19745. 8008946: 4a85 ldr r2, [pc, #532] @ (8008b5c <HAL_DMA_IRQHandler+0x690>)
  19746. 8008948: 4293 cmp r3, r2
  19747. 800894a: d04a beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19748. 800894c: 687b ldr r3, [r7, #4]
  19749. 800894e: 681b ldr r3, [r3, #0]
  19750. 8008950: 4a83 ldr r2, [pc, #524] @ (8008b60 <HAL_DMA_IRQHandler+0x694>)
  19751. 8008952: 4293 cmp r3, r2
  19752. 8008954: d045 beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19753. 8008956: 687b ldr r3, [r7, #4]
  19754. 8008958: 681b ldr r3, [r3, #0]
  19755. 800895a: 4a82 ldr r2, [pc, #520] @ (8008b64 <HAL_DMA_IRQHandler+0x698>)
  19756. 800895c: 4293 cmp r3, r2
  19757. 800895e: d040 beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19758. 8008960: 687b ldr r3, [r7, #4]
  19759. 8008962: 681b ldr r3, [r3, #0]
  19760. 8008964: 4a80 ldr r2, [pc, #512] @ (8008b68 <HAL_DMA_IRQHandler+0x69c>)
  19761. 8008966: 4293 cmp r3, r2
  19762. 8008968: d03b beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19763. 800896a: 687b ldr r3, [r7, #4]
  19764. 800896c: 681b ldr r3, [r3, #0]
  19765. 800896e: 4a7f ldr r2, [pc, #508] @ (8008b6c <HAL_DMA_IRQHandler+0x6a0>)
  19766. 8008970: 4293 cmp r3, r2
  19767. 8008972: d036 beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19768. 8008974: 687b ldr r3, [r7, #4]
  19769. 8008976: 681b ldr r3, [r3, #0]
  19770. 8008978: 4a7d ldr r2, [pc, #500] @ (8008b70 <HAL_DMA_IRQHandler+0x6a4>)
  19771. 800897a: 4293 cmp r3, r2
  19772. 800897c: d031 beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19773. 800897e: 687b ldr r3, [r7, #4]
  19774. 8008980: 681b ldr r3, [r3, #0]
  19775. 8008982: 4a7c ldr r2, [pc, #496] @ (8008b74 <HAL_DMA_IRQHandler+0x6a8>)
  19776. 8008984: 4293 cmp r3, r2
  19777. 8008986: d02c beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19778. 8008988: 687b ldr r3, [r7, #4]
  19779. 800898a: 681b ldr r3, [r3, #0]
  19780. 800898c: 4a7a ldr r2, [pc, #488] @ (8008b78 <HAL_DMA_IRQHandler+0x6ac>)
  19781. 800898e: 4293 cmp r3, r2
  19782. 8008990: d027 beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19783. 8008992: 687b ldr r3, [r7, #4]
  19784. 8008994: 681b ldr r3, [r3, #0]
  19785. 8008996: 4a79 ldr r2, [pc, #484] @ (8008b7c <HAL_DMA_IRQHandler+0x6b0>)
  19786. 8008998: 4293 cmp r3, r2
  19787. 800899a: d022 beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19788. 800899c: 687b ldr r3, [r7, #4]
  19789. 800899e: 681b ldr r3, [r3, #0]
  19790. 80089a0: 4a77 ldr r2, [pc, #476] @ (8008b80 <HAL_DMA_IRQHandler+0x6b4>)
  19791. 80089a2: 4293 cmp r3, r2
  19792. 80089a4: d01d beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19793. 80089a6: 687b ldr r3, [r7, #4]
  19794. 80089a8: 681b ldr r3, [r3, #0]
  19795. 80089aa: 4a76 ldr r2, [pc, #472] @ (8008b84 <HAL_DMA_IRQHandler+0x6b8>)
  19796. 80089ac: 4293 cmp r3, r2
  19797. 80089ae: d018 beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19798. 80089b0: 687b ldr r3, [r7, #4]
  19799. 80089b2: 681b ldr r3, [r3, #0]
  19800. 80089b4: 4a74 ldr r2, [pc, #464] @ (8008b88 <HAL_DMA_IRQHandler+0x6bc>)
  19801. 80089b6: 4293 cmp r3, r2
  19802. 80089b8: d013 beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19803. 80089ba: 687b ldr r3, [r7, #4]
  19804. 80089bc: 681b ldr r3, [r3, #0]
  19805. 80089be: 4a73 ldr r2, [pc, #460] @ (8008b8c <HAL_DMA_IRQHandler+0x6c0>)
  19806. 80089c0: 4293 cmp r3, r2
  19807. 80089c2: d00e beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19808. 80089c4: 687b ldr r3, [r7, #4]
  19809. 80089c6: 681b ldr r3, [r3, #0]
  19810. 80089c8: 4a71 ldr r2, [pc, #452] @ (8008b90 <HAL_DMA_IRQHandler+0x6c4>)
  19811. 80089ca: 4293 cmp r3, r2
  19812. 80089cc: d009 beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19813. 80089ce: 687b ldr r3, [r7, #4]
  19814. 80089d0: 681b ldr r3, [r3, #0]
  19815. 80089d2: 4a70 ldr r2, [pc, #448] @ (8008b94 <HAL_DMA_IRQHandler+0x6c8>)
  19816. 80089d4: 4293 cmp r3, r2
  19817. 80089d6: d004 beq.n 80089e2 <HAL_DMA_IRQHandler+0x516>
  19818. 80089d8: 687b ldr r3, [r7, #4]
  19819. 80089da: 681b ldr r3, [r3, #0]
  19820. 80089dc: 4a6e ldr r2, [pc, #440] @ (8008b98 <HAL_DMA_IRQHandler+0x6cc>)
  19821. 80089de: 4293 cmp r3, r2
  19822. 80089e0: d10a bne.n 80089f8 <HAL_DMA_IRQHandler+0x52c>
  19823. 80089e2: 687b ldr r3, [r7, #4]
  19824. 80089e4: 681b ldr r3, [r3, #0]
  19825. 80089e6: 681b ldr r3, [r3, #0]
  19826. 80089e8: f003 0308 and.w r3, r3, #8
  19827. 80089ec: 2b00 cmp r3, #0
  19828. 80089ee: bf14 ite ne
  19829. 80089f0: 2301 movne r3, #1
  19830. 80089f2: 2300 moveq r3, #0
  19831. 80089f4: b2db uxtb r3, r3
  19832. 80089f6: e009 b.n 8008a0c <HAL_DMA_IRQHandler+0x540>
  19833. 80089f8: 687b ldr r3, [r7, #4]
  19834. 80089fa: 681b ldr r3, [r3, #0]
  19835. 80089fc: 681b ldr r3, [r3, #0]
  19836. 80089fe: f003 0304 and.w r3, r3, #4
  19837. 8008a02: 2b00 cmp r3, #0
  19838. 8008a04: bf14 ite ne
  19839. 8008a06: 2301 movne r3, #1
  19840. 8008a08: 2300 moveq r3, #0
  19841. 8008a0a: b2db uxtb r3, r3
  19842. 8008a0c: 2b00 cmp r3, #0
  19843. 8008a0e: d03e beq.n 8008a8e <HAL_DMA_IRQHandler+0x5c2>
  19844. {
  19845. /* Clear the half transfer complete flag */
  19846. regs_dma->IFCR = DMA_FLAG_HTIF0_4 << (hdma->StreamIndex & 0x1FU);
  19847. 8008a10: 687b ldr r3, [r7, #4]
  19848. 8008a12: 6ddb ldr r3, [r3, #92] @ 0x5c
  19849. 8008a14: f003 031f and.w r3, r3, #31
  19850. 8008a18: 2210 movs r2, #16
  19851. 8008a1a: 409a lsls r2, r3
  19852. 8008a1c: 6a3b ldr r3, [r7, #32]
  19853. 8008a1e: 609a str r2, [r3, #8]
  19854. /* Multi_Buffering mode enabled */
  19855. if(((((DMA_Stream_TypeDef *)hdma->Instance)->CR) & (uint32_t)(DMA_SxCR_DBM)) != 0U)
  19856. 8008a20: 687b ldr r3, [r7, #4]
  19857. 8008a22: 681b ldr r3, [r3, #0]
  19858. 8008a24: 681b ldr r3, [r3, #0]
  19859. 8008a26: f403 2380 and.w r3, r3, #262144 @ 0x40000
  19860. 8008a2a: 2b00 cmp r3, #0
  19861. 8008a2c: d018 beq.n 8008a60 <HAL_DMA_IRQHandler+0x594>
  19862. {
  19863. /* Current memory buffer used is Memory 0 */
  19864. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CT) == 0U)
  19865. 8008a2e: 687b ldr r3, [r7, #4]
  19866. 8008a30: 681b ldr r3, [r3, #0]
  19867. 8008a32: 681b ldr r3, [r3, #0]
  19868. 8008a34: f403 2300 and.w r3, r3, #524288 @ 0x80000
  19869. 8008a38: 2b00 cmp r3, #0
  19870. 8008a3a: d108 bne.n 8008a4e <HAL_DMA_IRQHandler+0x582>
  19871. {
  19872. if(hdma->XferHalfCpltCallback != NULL)
  19873. 8008a3c: 687b ldr r3, [r7, #4]
  19874. 8008a3e: 6c1b ldr r3, [r3, #64] @ 0x40
  19875. 8008a40: 2b00 cmp r3, #0
  19876. 8008a42: d024 beq.n 8008a8e <HAL_DMA_IRQHandler+0x5c2>
  19877. {
  19878. /* Half transfer callback */
  19879. hdma->XferHalfCpltCallback(hdma);
  19880. 8008a44: 687b ldr r3, [r7, #4]
  19881. 8008a46: 6c1b ldr r3, [r3, #64] @ 0x40
  19882. 8008a48: 6878 ldr r0, [r7, #4]
  19883. 8008a4a: 4798 blx r3
  19884. 8008a4c: e01f b.n 8008a8e <HAL_DMA_IRQHandler+0x5c2>
  19885. }
  19886. }
  19887. /* Current memory buffer used is Memory 1 */
  19888. else
  19889. {
  19890. if(hdma->XferM1HalfCpltCallback != NULL)
  19891. 8008a4e: 687b ldr r3, [r7, #4]
  19892. 8008a50: 6c9b ldr r3, [r3, #72] @ 0x48
  19893. 8008a52: 2b00 cmp r3, #0
  19894. 8008a54: d01b beq.n 8008a8e <HAL_DMA_IRQHandler+0x5c2>
  19895. {
  19896. /* Half transfer callback */
  19897. hdma->XferM1HalfCpltCallback(hdma);
  19898. 8008a56: 687b ldr r3, [r7, #4]
  19899. 8008a58: 6c9b ldr r3, [r3, #72] @ 0x48
  19900. 8008a5a: 6878 ldr r0, [r7, #4]
  19901. 8008a5c: 4798 blx r3
  19902. 8008a5e: e016 b.n 8008a8e <HAL_DMA_IRQHandler+0x5c2>
  19903. }
  19904. }
  19905. else
  19906. {
  19907. /* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */
  19908. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CIRC) == 0U)
  19909. 8008a60: 687b ldr r3, [r7, #4]
  19910. 8008a62: 681b ldr r3, [r3, #0]
  19911. 8008a64: 681b ldr r3, [r3, #0]
  19912. 8008a66: f403 7380 and.w r3, r3, #256 @ 0x100
  19913. 8008a6a: 2b00 cmp r3, #0
  19914. 8008a6c: d107 bne.n 8008a7e <HAL_DMA_IRQHandler+0x5b2>
  19915. {
  19916. /* Disable the half transfer interrupt */
  19917. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_HT);
  19918. 8008a6e: 687b ldr r3, [r7, #4]
  19919. 8008a70: 681b ldr r3, [r3, #0]
  19920. 8008a72: 681a ldr r2, [r3, #0]
  19921. 8008a74: 687b ldr r3, [r7, #4]
  19922. 8008a76: 681b ldr r3, [r3, #0]
  19923. 8008a78: f022 0208 bic.w r2, r2, #8
  19924. 8008a7c: 601a str r2, [r3, #0]
  19925. }
  19926. if(hdma->XferHalfCpltCallback != NULL)
  19927. 8008a7e: 687b ldr r3, [r7, #4]
  19928. 8008a80: 6c1b ldr r3, [r3, #64] @ 0x40
  19929. 8008a82: 2b00 cmp r3, #0
  19930. 8008a84: d003 beq.n 8008a8e <HAL_DMA_IRQHandler+0x5c2>
  19931. {
  19932. /* Half transfer callback */
  19933. hdma->XferHalfCpltCallback(hdma);
  19934. 8008a86: 687b ldr r3, [r7, #4]
  19935. 8008a88: 6c1b ldr r3, [r3, #64] @ 0x40
  19936. 8008a8a: 6878 ldr r0, [r7, #4]
  19937. 8008a8c: 4798 blx r3
  19938. }
  19939. }
  19940. }
  19941. }
  19942. /* Transfer Complete Interrupt management ***********************************/
  19943. if ((tmpisr_dma & (DMA_FLAG_TCIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  19944. 8008a8e: 687b ldr r3, [r7, #4]
  19945. 8008a90: 6ddb ldr r3, [r3, #92] @ 0x5c
  19946. 8008a92: f003 031f and.w r3, r3, #31
  19947. 8008a96: 2220 movs r2, #32
  19948. 8008a98: 409a lsls r2, r3
  19949. 8008a9a: 69bb ldr r3, [r7, #24]
  19950. 8008a9c: 4013 ands r3, r2
  19951. 8008a9e: 2b00 cmp r3, #0
  19952. 8008aa0: f000 8110 beq.w 8008cc4 <HAL_DMA_IRQHandler+0x7f8>
  19953. {
  19954. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TC) != 0U)
  19955. 8008aa4: 687b ldr r3, [r7, #4]
  19956. 8008aa6: 681b ldr r3, [r3, #0]
  19957. 8008aa8: 4a2c ldr r2, [pc, #176] @ (8008b5c <HAL_DMA_IRQHandler+0x690>)
  19958. 8008aaa: 4293 cmp r3, r2
  19959. 8008aac: d04a beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  19960. 8008aae: 687b ldr r3, [r7, #4]
  19961. 8008ab0: 681b ldr r3, [r3, #0]
  19962. 8008ab2: 4a2b ldr r2, [pc, #172] @ (8008b60 <HAL_DMA_IRQHandler+0x694>)
  19963. 8008ab4: 4293 cmp r3, r2
  19964. 8008ab6: d045 beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  19965. 8008ab8: 687b ldr r3, [r7, #4]
  19966. 8008aba: 681b ldr r3, [r3, #0]
  19967. 8008abc: 4a29 ldr r2, [pc, #164] @ (8008b64 <HAL_DMA_IRQHandler+0x698>)
  19968. 8008abe: 4293 cmp r3, r2
  19969. 8008ac0: d040 beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  19970. 8008ac2: 687b ldr r3, [r7, #4]
  19971. 8008ac4: 681b ldr r3, [r3, #0]
  19972. 8008ac6: 4a28 ldr r2, [pc, #160] @ (8008b68 <HAL_DMA_IRQHandler+0x69c>)
  19973. 8008ac8: 4293 cmp r3, r2
  19974. 8008aca: d03b beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  19975. 8008acc: 687b ldr r3, [r7, #4]
  19976. 8008ace: 681b ldr r3, [r3, #0]
  19977. 8008ad0: 4a26 ldr r2, [pc, #152] @ (8008b6c <HAL_DMA_IRQHandler+0x6a0>)
  19978. 8008ad2: 4293 cmp r3, r2
  19979. 8008ad4: d036 beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  19980. 8008ad6: 687b ldr r3, [r7, #4]
  19981. 8008ad8: 681b ldr r3, [r3, #0]
  19982. 8008ada: 4a25 ldr r2, [pc, #148] @ (8008b70 <HAL_DMA_IRQHandler+0x6a4>)
  19983. 8008adc: 4293 cmp r3, r2
  19984. 8008ade: d031 beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  19985. 8008ae0: 687b ldr r3, [r7, #4]
  19986. 8008ae2: 681b ldr r3, [r3, #0]
  19987. 8008ae4: 4a23 ldr r2, [pc, #140] @ (8008b74 <HAL_DMA_IRQHandler+0x6a8>)
  19988. 8008ae6: 4293 cmp r3, r2
  19989. 8008ae8: d02c beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  19990. 8008aea: 687b ldr r3, [r7, #4]
  19991. 8008aec: 681b ldr r3, [r3, #0]
  19992. 8008aee: 4a22 ldr r2, [pc, #136] @ (8008b78 <HAL_DMA_IRQHandler+0x6ac>)
  19993. 8008af0: 4293 cmp r3, r2
  19994. 8008af2: d027 beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  19995. 8008af4: 687b ldr r3, [r7, #4]
  19996. 8008af6: 681b ldr r3, [r3, #0]
  19997. 8008af8: 4a20 ldr r2, [pc, #128] @ (8008b7c <HAL_DMA_IRQHandler+0x6b0>)
  19998. 8008afa: 4293 cmp r3, r2
  19999. 8008afc: d022 beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  20000. 8008afe: 687b ldr r3, [r7, #4]
  20001. 8008b00: 681b ldr r3, [r3, #0]
  20002. 8008b02: 4a1f ldr r2, [pc, #124] @ (8008b80 <HAL_DMA_IRQHandler+0x6b4>)
  20003. 8008b04: 4293 cmp r3, r2
  20004. 8008b06: d01d beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  20005. 8008b08: 687b ldr r3, [r7, #4]
  20006. 8008b0a: 681b ldr r3, [r3, #0]
  20007. 8008b0c: 4a1d ldr r2, [pc, #116] @ (8008b84 <HAL_DMA_IRQHandler+0x6b8>)
  20008. 8008b0e: 4293 cmp r3, r2
  20009. 8008b10: d018 beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  20010. 8008b12: 687b ldr r3, [r7, #4]
  20011. 8008b14: 681b ldr r3, [r3, #0]
  20012. 8008b16: 4a1c ldr r2, [pc, #112] @ (8008b88 <HAL_DMA_IRQHandler+0x6bc>)
  20013. 8008b18: 4293 cmp r3, r2
  20014. 8008b1a: d013 beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  20015. 8008b1c: 687b ldr r3, [r7, #4]
  20016. 8008b1e: 681b ldr r3, [r3, #0]
  20017. 8008b20: 4a1a ldr r2, [pc, #104] @ (8008b8c <HAL_DMA_IRQHandler+0x6c0>)
  20018. 8008b22: 4293 cmp r3, r2
  20019. 8008b24: d00e beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  20020. 8008b26: 687b ldr r3, [r7, #4]
  20021. 8008b28: 681b ldr r3, [r3, #0]
  20022. 8008b2a: 4a19 ldr r2, [pc, #100] @ (8008b90 <HAL_DMA_IRQHandler+0x6c4>)
  20023. 8008b2c: 4293 cmp r3, r2
  20024. 8008b2e: d009 beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  20025. 8008b30: 687b ldr r3, [r7, #4]
  20026. 8008b32: 681b ldr r3, [r3, #0]
  20027. 8008b34: 4a17 ldr r2, [pc, #92] @ (8008b94 <HAL_DMA_IRQHandler+0x6c8>)
  20028. 8008b36: 4293 cmp r3, r2
  20029. 8008b38: d004 beq.n 8008b44 <HAL_DMA_IRQHandler+0x678>
  20030. 8008b3a: 687b ldr r3, [r7, #4]
  20031. 8008b3c: 681b ldr r3, [r3, #0]
  20032. 8008b3e: 4a16 ldr r2, [pc, #88] @ (8008b98 <HAL_DMA_IRQHandler+0x6cc>)
  20033. 8008b40: 4293 cmp r3, r2
  20034. 8008b42: d12b bne.n 8008b9c <HAL_DMA_IRQHandler+0x6d0>
  20035. 8008b44: 687b ldr r3, [r7, #4]
  20036. 8008b46: 681b ldr r3, [r3, #0]
  20037. 8008b48: 681b ldr r3, [r3, #0]
  20038. 8008b4a: f003 0310 and.w r3, r3, #16
  20039. 8008b4e: 2b00 cmp r3, #0
  20040. 8008b50: bf14 ite ne
  20041. 8008b52: 2301 movne r3, #1
  20042. 8008b54: 2300 moveq r3, #0
  20043. 8008b56: b2db uxtb r3, r3
  20044. 8008b58: e02a b.n 8008bb0 <HAL_DMA_IRQHandler+0x6e4>
  20045. 8008b5a: bf00 nop
  20046. 8008b5c: 40020010 .word 0x40020010
  20047. 8008b60: 40020028 .word 0x40020028
  20048. 8008b64: 40020040 .word 0x40020040
  20049. 8008b68: 40020058 .word 0x40020058
  20050. 8008b6c: 40020070 .word 0x40020070
  20051. 8008b70: 40020088 .word 0x40020088
  20052. 8008b74: 400200a0 .word 0x400200a0
  20053. 8008b78: 400200b8 .word 0x400200b8
  20054. 8008b7c: 40020410 .word 0x40020410
  20055. 8008b80: 40020428 .word 0x40020428
  20056. 8008b84: 40020440 .word 0x40020440
  20057. 8008b88: 40020458 .word 0x40020458
  20058. 8008b8c: 40020470 .word 0x40020470
  20059. 8008b90: 40020488 .word 0x40020488
  20060. 8008b94: 400204a0 .word 0x400204a0
  20061. 8008b98: 400204b8 .word 0x400204b8
  20062. 8008b9c: 687b ldr r3, [r7, #4]
  20063. 8008b9e: 681b ldr r3, [r3, #0]
  20064. 8008ba0: 681b ldr r3, [r3, #0]
  20065. 8008ba2: f003 0302 and.w r3, r3, #2
  20066. 8008ba6: 2b00 cmp r3, #0
  20067. 8008ba8: bf14 ite ne
  20068. 8008baa: 2301 movne r3, #1
  20069. 8008bac: 2300 moveq r3, #0
  20070. 8008bae: b2db uxtb r3, r3
  20071. 8008bb0: 2b00 cmp r3, #0
  20072. 8008bb2: f000 8087 beq.w 8008cc4 <HAL_DMA_IRQHandler+0x7f8>
  20073. {
  20074. /* Clear the transfer complete flag */
  20075. regs_dma->IFCR = DMA_FLAG_TCIF0_4 << (hdma->StreamIndex & 0x1FU);
  20076. 8008bb6: 687b ldr r3, [r7, #4]
  20077. 8008bb8: 6ddb ldr r3, [r3, #92] @ 0x5c
  20078. 8008bba: f003 031f and.w r3, r3, #31
  20079. 8008bbe: 2220 movs r2, #32
  20080. 8008bc0: 409a lsls r2, r3
  20081. 8008bc2: 6a3b ldr r3, [r7, #32]
  20082. 8008bc4: 609a str r2, [r3, #8]
  20083. if(HAL_DMA_STATE_ABORT == hdma->State)
  20084. 8008bc6: 687b ldr r3, [r7, #4]
  20085. 8008bc8: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  20086. 8008bcc: b2db uxtb r3, r3
  20087. 8008bce: 2b04 cmp r3, #4
  20088. 8008bd0: d139 bne.n 8008c46 <HAL_DMA_IRQHandler+0x77a>
  20089. {
  20090. /* Disable all the transfer interrupts */
  20091. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME);
  20092. 8008bd2: 687b ldr r3, [r7, #4]
  20093. 8008bd4: 681b ldr r3, [r3, #0]
  20094. 8008bd6: 681a ldr r2, [r3, #0]
  20095. 8008bd8: 687b ldr r3, [r7, #4]
  20096. 8008bda: 681b ldr r3, [r3, #0]
  20097. 8008bdc: f022 0216 bic.w r2, r2, #22
  20098. 8008be0: 601a str r2, [r3, #0]
  20099. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR &= ~(DMA_IT_FE);
  20100. 8008be2: 687b ldr r3, [r7, #4]
  20101. 8008be4: 681b ldr r3, [r3, #0]
  20102. 8008be6: 695a ldr r2, [r3, #20]
  20103. 8008be8: 687b ldr r3, [r7, #4]
  20104. 8008bea: 681b ldr r3, [r3, #0]
  20105. 8008bec: f022 0280 bic.w r2, r2, #128 @ 0x80
  20106. 8008bf0: 615a str r2, [r3, #20]
  20107. if((hdma->XferHalfCpltCallback != NULL) || (hdma->XferM1HalfCpltCallback != NULL))
  20108. 8008bf2: 687b ldr r3, [r7, #4]
  20109. 8008bf4: 6c1b ldr r3, [r3, #64] @ 0x40
  20110. 8008bf6: 2b00 cmp r3, #0
  20111. 8008bf8: d103 bne.n 8008c02 <HAL_DMA_IRQHandler+0x736>
  20112. 8008bfa: 687b ldr r3, [r7, #4]
  20113. 8008bfc: 6c9b ldr r3, [r3, #72] @ 0x48
  20114. 8008bfe: 2b00 cmp r3, #0
  20115. 8008c00: d007 beq.n 8008c12 <HAL_DMA_IRQHandler+0x746>
  20116. {
  20117. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_HT);
  20118. 8008c02: 687b ldr r3, [r7, #4]
  20119. 8008c04: 681b ldr r3, [r3, #0]
  20120. 8008c06: 681a ldr r2, [r3, #0]
  20121. 8008c08: 687b ldr r3, [r7, #4]
  20122. 8008c0a: 681b ldr r3, [r3, #0]
  20123. 8008c0c: f022 0208 bic.w r2, r2, #8
  20124. 8008c10: 601a str r2, [r3, #0]
  20125. }
  20126. /* Clear all interrupt flags at correct offset within the register */
  20127. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  20128. 8008c12: 687b ldr r3, [r7, #4]
  20129. 8008c14: 6ddb ldr r3, [r3, #92] @ 0x5c
  20130. 8008c16: f003 031f and.w r3, r3, #31
  20131. 8008c1a: 223f movs r2, #63 @ 0x3f
  20132. 8008c1c: 409a lsls r2, r3
  20133. 8008c1e: 6a3b ldr r3, [r7, #32]
  20134. 8008c20: 609a str r2, [r3, #8]
  20135. /* Change the DMA state */
  20136. hdma->State = HAL_DMA_STATE_READY;
  20137. 8008c22: 687b ldr r3, [r7, #4]
  20138. 8008c24: 2201 movs r2, #1
  20139. 8008c26: f883 2035 strb.w r2, [r3, #53] @ 0x35
  20140. /* Process Unlocked */
  20141. __HAL_UNLOCK(hdma);
  20142. 8008c2a: 687b ldr r3, [r7, #4]
  20143. 8008c2c: 2200 movs r2, #0
  20144. 8008c2e: f883 2034 strb.w r2, [r3, #52] @ 0x34
  20145. if(hdma->XferAbortCallback != NULL)
  20146. 8008c32: 687b ldr r3, [r7, #4]
  20147. 8008c34: 6d1b ldr r3, [r3, #80] @ 0x50
  20148. 8008c36: 2b00 cmp r3, #0
  20149. 8008c38: f000 834a beq.w 80092d0 <HAL_DMA_IRQHandler+0xe04>
  20150. {
  20151. hdma->XferAbortCallback(hdma);
  20152. 8008c3c: 687b ldr r3, [r7, #4]
  20153. 8008c3e: 6d1b ldr r3, [r3, #80] @ 0x50
  20154. 8008c40: 6878 ldr r0, [r7, #4]
  20155. 8008c42: 4798 blx r3
  20156. }
  20157. return;
  20158. 8008c44: e344 b.n 80092d0 <HAL_DMA_IRQHandler+0xe04>
  20159. }
  20160. if(((((DMA_Stream_TypeDef *)hdma->Instance)->CR) & (uint32_t)(DMA_SxCR_DBM)) != 0U)
  20161. 8008c46: 687b ldr r3, [r7, #4]
  20162. 8008c48: 681b ldr r3, [r3, #0]
  20163. 8008c4a: 681b ldr r3, [r3, #0]
  20164. 8008c4c: f403 2380 and.w r3, r3, #262144 @ 0x40000
  20165. 8008c50: 2b00 cmp r3, #0
  20166. 8008c52: d018 beq.n 8008c86 <HAL_DMA_IRQHandler+0x7ba>
  20167. {
  20168. /* Current memory buffer used is Memory 0 */
  20169. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CT) == 0U)
  20170. 8008c54: 687b ldr r3, [r7, #4]
  20171. 8008c56: 681b ldr r3, [r3, #0]
  20172. 8008c58: 681b ldr r3, [r3, #0]
  20173. 8008c5a: f403 2300 and.w r3, r3, #524288 @ 0x80000
  20174. 8008c5e: 2b00 cmp r3, #0
  20175. 8008c60: d108 bne.n 8008c74 <HAL_DMA_IRQHandler+0x7a8>
  20176. {
  20177. if(hdma->XferM1CpltCallback != NULL)
  20178. 8008c62: 687b ldr r3, [r7, #4]
  20179. 8008c64: 6c5b ldr r3, [r3, #68] @ 0x44
  20180. 8008c66: 2b00 cmp r3, #0
  20181. 8008c68: d02c beq.n 8008cc4 <HAL_DMA_IRQHandler+0x7f8>
  20182. {
  20183. /* Transfer complete Callback for memory1 */
  20184. hdma->XferM1CpltCallback(hdma);
  20185. 8008c6a: 687b ldr r3, [r7, #4]
  20186. 8008c6c: 6c5b ldr r3, [r3, #68] @ 0x44
  20187. 8008c6e: 6878 ldr r0, [r7, #4]
  20188. 8008c70: 4798 blx r3
  20189. 8008c72: e027 b.n 8008cc4 <HAL_DMA_IRQHandler+0x7f8>
  20190. }
  20191. }
  20192. /* Current memory buffer used is Memory 1 */
  20193. else
  20194. {
  20195. if(hdma->XferCpltCallback != NULL)
  20196. 8008c74: 687b ldr r3, [r7, #4]
  20197. 8008c76: 6bdb ldr r3, [r3, #60] @ 0x3c
  20198. 8008c78: 2b00 cmp r3, #0
  20199. 8008c7a: d023 beq.n 8008cc4 <HAL_DMA_IRQHandler+0x7f8>
  20200. {
  20201. /* Transfer complete Callback for memory0 */
  20202. hdma->XferCpltCallback(hdma);
  20203. 8008c7c: 687b ldr r3, [r7, #4]
  20204. 8008c7e: 6bdb ldr r3, [r3, #60] @ 0x3c
  20205. 8008c80: 6878 ldr r0, [r7, #4]
  20206. 8008c82: 4798 blx r3
  20207. 8008c84: e01e b.n 8008cc4 <HAL_DMA_IRQHandler+0x7f8>
  20208. }
  20209. }
  20210. /* Disable the transfer complete interrupt if the DMA mode is not CIRCULAR */
  20211. else
  20212. {
  20213. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CIRC) == 0U)
  20214. 8008c86: 687b ldr r3, [r7, #4]
  20215. 8008c88: 681b ldr r3, [r3, #0]
  20216. 8008c8a: 681b ldr r3, [r3, #0]
  20217. 8008c8c: f403 7380 and.w r3, r3, #256 @ 0x100
  20218. 8008c90: 2b00 cmp r3, #0
  20219. 8008c92: d10f bne.n 8008cb4 <HAL_DMA_IRQHandler+0x7e8>
  20220. {
  20221. /* Disable the transfer complete interrupt */
  20222. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC);
  20223. 8008c94: 687b ldr r3, [r7, #4]
  20224. 8008c96: 681b ldr r3, [r3, #0]
  20225. 8008c98: 681a ldr r2, [r3, #0]
  20226. 8008c9a: 687b ldr r3, [r7, #4]
  20227. 8008c9c: 681b ldr r3, [r3, #0]
  20228. 8008c9e: f022 0210 bic.w r2, r2, #16
  20229. 8008ca2: 601a str r2, [r3, #0]
  20230. /* Change the DMA state */
  20231. hdma->State = HAL_DMA_STATE_READY;
  20232. 8008ca4: 687b ldr r3, [r7, #4]
  20233. 8008ca6: 2201 movs r2, #1
  20234. 8008ca8: f883 2035 strb.w r2, [r3, #53] @ 0x35
  20235. /* Process Unlocked */
  20236. __HAL_UNLOCK(hdma);
  20237. 8008cac: 687b ldr r3, [r7, #4]
  20238. 8008cae: 2200 movs r2, #0
  20239. 8008cb0: f883 2034 strb.w r2, [r3, #52] @ 0x34
  20240. }
  20241. if(hdma->XferCpltCallback != NULL)
  20242. 8008cb4: 687b ldr r3, [r7, #4]
  20243. 8008cb6: 6bdb ldr r3, [r3, #60] @ 0x3c
  20244. 8008cb8: 2b00 cmp r3, #0
  20245. 8008cba: d003 beq.n 8008cc4 <HAL_DMA_IRQHandler+0x7f8>
  20246. {
  20247. /* Transfer complete callback */
  20248. hdma->XferCpltCallback(hdma);
  20249. 8008cbc: 687b ldr r3, [r7, #4]
  20250. 8008cbe: 6bdb ldr r3, [r3, #60] @ 0x3c
  20251. 8008cc0: 6878 ldr r0, [r7, #4]
  20252. 8008cc2: 4798 blx r3
  20253. }
  20254. }
  20255. }
  20256. /* manage error case */
  20257. if(hdma->ErrorCode != HAL_DMA_ERROR_NONE)
  20258. 8008cc4: 687b ldr r3, [r7, #4]
  20259. 8008cc6: 6d5b ldr r3, [r3, #84] @ 0x54
  20260. 8008cc8: 2b00 cmp r3, #0
  20261. 8008cca: f000 8306 beq.w 80092da <HAL_DMA_IRQHandler+0xe0e>
  20262. {
  20263. if((hdma->ErrorCode & HAL_DMA_ERROR_TE) != 0U)
  20264. 8008cce: 687b ldr r3, [r7, #4]
  20265. 8008cd0: 6d5b ldr r3, [r3, #84] @ 0x54
  20266. 8008cd2: f003 0301 and.w r3, r3, #1
  20267. 8008cd6: 2b00 cmp r3, #0
  20268. 8008cd8: f000 8088 beq.w 8008dec <HAL_DMA_IRQHandler+0x920>
  20269. {
  20270. hdma->State = HAL_DMA_STATE_ABORT;
  20271. 8008cdc: 687b ldr r3, [r7, #4]
  20272. 8008cde: 2204 movs r2, #4
  20273. 8008ce0: f883 2035 strb.w r2, [r3, #53] @ 0x35
  20274. /* Disable the stream */
  20275. __HAL_DMA_DISABLE(hdma);
  20276. 8008ce4: 687b ldr r3, [r7, #4]
  20277. 8008ce6: 681b ldr r3, [r3, #0]
  20278. 8008ce8: 4a7a ldr r2, [pc, #488] @ (8008ed4 <HAL_DMA_IRQHandler+0xa08>)
  20279. 8008cea: 4293 cmp r3, r2
  20280. 8008cec: d04a beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20281. 8008cee: 687b ldr r3, [r7, #4]
  20282. 8008cf0: 681b ldr r3, [r3, #0]
  20283. 8008cf2: 4a79 ldr r2, [pc, #484] @ (8008ed8 <HAL_DMA_IRQHandler+0xa0c>)
  20284. 8008cf4: 4293 cmp r3, r2
  20285. 8008cf6: d045 beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20286. 8008cf8: 687b ldr r3, [r7, #4]
  20287. 8008cfa: 681b ldr r3, [r3, #0]
  20288. 8008cfc: 4a77 ldr r2, [pc, #476] @ (8008edc <HAL_DMA_IRQHandler+0xa10>)
  20289. 8008cfe: 4293 cmp r3, r2
  20290. 8008d00: d040 beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20291. 8008d02: 687b ldr r3, [r7, #4]
  20292. 8008d04: 681b ldr r3, [r3, #0]
  20293. 8008d06: 4a76 ldr r2, [pc, #472] @ (8008ee0 <HAL_DMA_IRQHandler+0xa14>)
  20294. 8008d08: 4293 cmp r3, r2
  20295. 8008d0a: d03b beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20296. 8008d0c: 687b ldr r3, [r7, #4]
  20297. 8008d0e: 681b ldr r3, [r3, #0]
  20298. 8008d10: 4a74 ldr r2, [pc, #464] @ (8008ee4 <HAL_DMA_IRQHandler+0xa18>)
  20299. 8008d12: 4293 cmp r3, r2
  20300. 8008d14: d036 beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20301. 8008d16: 687b ldr r3, [r7, #4]
  20302. 8008d18: 681b ldr r3, [r3, #0]
  20303. 8008d1a: 4a73 ldr r2, [pc, #460] @ (8008ee8 <HAL_DMA_IRQHandler+0xa1c>)
  20304. 8008d1c: 4293 cmp r3, r2
  20305. 8008d1e: d031 beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20306. 8008d20: 687b ldr r3, [r7, #4]
  20307. 8008d22: 681b ldr r3, [r3, #0]
  20308. 8008d24: 4a71 ldr r2, [pc, #452] @ (8008eec <HAL_DMA_IRQHandler+0xa20>)
  20309. 8008d26: 4293 cmp r3, r2
  20310. 8008d28: d02c beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20311. 8008d2a: 687b ldr r3, [r7, #4]
  20312. 8008d2c: 681b ldr r3, [r3, #0]
  20313. 8008d2e: 4a70 ldr r2, [pc, #448] @ (8008ef0 <HAL_DMA_IRQHandler+0xa24>)
  20314. 8008d30: 4293 cmp r3, r2
  20315. 8008d32: d027 beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20316. 8008d34: 687b ldr r3, [r7, #4]
  20317. 8008d36: 681b ldr r3, [r3, #0]
  20318. 8008d38: 4a6e ldr r2, [pc, #440] @ (8008ef4 <HAL_DMA_IRQHandler+0xa28>)
  20319. 8008d3a: 4293 cmp r3, r2
  20320. 8008d3c: d022 beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20321. 8008d3e: 687b ldr r3, [r7, #4]
  20322. 8008d40: 681b ldr r3, [r3, #0]
  20323. 8008d42: 4a6d ldr r2, [pc, #436] @ (8008ef8 <HAL_DMA_IRQHandler+0xa2c>)
  20324. 8008d44: 4293 cmp r3, r2
  20325. 8008d46: d01d beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20326. 8008d48: 687b ldr r3, [r7, #4]
  20327. 8008d4a: 681b ldr r3, [r3, #0]
  20328. 8008d4c: 4a6b ldr r2, [pc, #428] @ (8008efc <HAL_DMA_IRQHandler+0xa30>)
  20329. 8008d4e: 4293 cmp r3, r2
  20330. 8008d50: d018 beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20331. 8008d52: 687b ldr r3, [r7, #4]
  20332. 8008d54: 681b ldr r3, [r3, #0]
  20333. 8008d56: 4a6a ldr r2, [pc, #424] @ (8008f00 <HAL_DMA_IRQHandler+0xa34>)
  20334. 8008d58: 4293 cmp r3, r2
  20335. 8008d5a: d013 beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20336. 8008d5c: 687b ldr r3, [r7, #4]
  20337. 8008d5e: 681b ldr r3, [r3, #0]
  20338. 8008d60: 4a68 ldr r2, [pc, #416] @ (8008f04 <HAL_DMA_IRQHandler+0xa38>)
  20339. 8008d62: 4293 cmp r3, r2
  20340. 8008d64: d00e beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20341. 8008d66: 687b ldr r3, [r7, #4]
  20342. 8008d68: 681b ldr r3, [r3, #0]
  20343. 8008d6a: 4a67 ldr r2, [pc, #412] @ (8008f08 <HAL_DMA_IRQHandler+0xa3c>)
  20344. 8008d6c: 4293 cmp r3, r2
  20345. 8008d6e: d009 beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20346. 8008d70: 687b ldr r3, [r7, #4]
  20347. 8008d72: 681b ldr r3, [r3, #0]
  20348. 8008d74: 4a65 ldr r2, [pc, #404] @ (8008f0c <HAL_DMA_IRQHandler+0xa40>)
  20349. 8008d76: 4293 cmp r3, r2
  20350. 8008d78: d004 beq.n 8008d84 <HAL_DMA_IRQHandler+0x8b8>
  20351. 8008d7a: 687b ldr r3, [r7, #4]
  20352. 8008d7c: 681b ldr r3, [r3, #0]
  20353. 8008d7e: 4a64 ldr r2, [pc, #400] @ (8008f10 <HAL_DMA_IRQHandler+0xa44>)
  20354. 8008d80: 4293 cmp r3, r2
  20355. 8008d82: d108 bne.n 8008d96 <HAL_DMA_IRQHandler+0x8ca>
  20356. 8008d84: 687b ldr r3, [r7, #4]
  20357. 8008d86: 681b ldr r3, [r3, #0]
  20358. 8008d88: 681a ldr r2, [r3, #0]
  20359. 8008d8a: 687b ldr r3, [r7, #4]
  20360. 8008d8c: 681b ldr r3, [r3, #0]
  20361. 8008d8e: f022 0201 bic.w r2, r2, #1
  20362. 8008d92: 601a str r2, [r3, #0]
  20363. 8008d94: e007 b.n 8008da6 <HAL_DMA_IRQHandler+0x8da>
  20364. 8008d96: 687b ldr r3, [r7, #4]
  20365. 8008d98: 681b ldr r3, [r3, #0]
  20366. 8008d9a: 681a ldr r2, [r3, #0]
  20367. 8008d9c: 687b ldr r3, [r7, #4]
  20368. 8008d9e: 681b ldr r3, [r3, #0]
  20369. 8008da0: f022 0201 bic.w r2, r2, #1
  20370. 8008da4: 601a str r2, [r3, #0]
  20371. do
  20372. {
  20373. if (++count > timeout)
  20374. 8008da6: 68fb ldr r3, [r7, #12]
  20375. 8008da8: 3301 adds r3, #1
  20376. 8008daa: 60fb str r3, [r7, #12]
  20377. 8008dac: 6a7a ldr r2, [r7, #36] @ 0x24
  20378. 8008dae: 429a cmp r2, r3
  20379. 8008db0: d307 bcc.n 8008dc2 <HAL_DMA_IRQHandler+0x8f6>
  20380. {
  20381. break;
  20382. }
  20383. }
  20384. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U);
  20385. 8008db2: 687b ldr r3, [r7, #4]
  20386. 8008db4: 681b ldr r3, [r3, #0]
  20387. 8008db6: 681b ldr r3, [r3, #0]
  20388. 8008db8: f003 0301 and.w r3, r3, #1
  20389. 8008dbc: 2b00 cmp r3, #0
  20390. 8008dbe: d1f2 bne.n 8008da6 <HAL_DMA_IRQHandler+0x8da>
  20391. 8008dc0: e000 b.n 8008dc4 <HAL_DMA_IRQHandler+0x8f8>
  20392. break;
  20393. 8008dc2: bf00 nop
  20394. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  20395. 8008dc4: 687b ldr r3, [r7, #4]
  20396. 8008dc6: 681b ldr r3, [r3, #0]
  20397. 8008dc8: 681b ldr r3, [r3, #0]
  20398. 8008dca: f003 0301 and.w r3, r3, #1
  20399. 8008dce: 2b00 cmp r3, #0
  20400. 8008dd0: d004 beq.n 8008ddc <HAL_DMA_IRQHandler+0x910>
  20401. {
  20402. /* Change the DMA state to error if DMA disable fails */
  20403. hdma->State = HAL_DMA_STATE_ERROR;
  20404. 8008dd2: 687b ldr r3, [r7, #4]
  20405. 8008dd4: 2203 movs r2, #3
  20406. 8008dd6: f883 2035 strb.w r2, [r3, #53] @ 0x35
  20407. 8008dda: e003 b.n 8008de4 <HAL_DMA_IRQHandler+0x918>
  20408. }
  20409. else
  20410. {
  20411. /* Change the DMA state to Ready if DMA disable success */
  20412. hdma->State = HAL_DMA_STATE_READY;
  20413. 8008ddc: 687b ldr r3, [r7, #4]
  20414. 8008dde: 2201 movs r2, #1
  20415. 8008de0: f883 2035 strb.w r2, [r3, #53] @ 0x35
  20416. }
  20417. /* Process Unlocked */
  20418. __HAL_UNLOCK(hdma);
  20419. 8008de4: 687b ldr r3, [r7, #4]
  20420. 8008de6: 2200 movs r2, #0
  20421. 8008de8: f883 2034 strb.w r2, [r3, #52] @ 0x34
  20422. }
  20423. if(hdma->XferErrorCallback != NULL)
  20424. 8008dec: 687b ldr r3, [r7, #4]
  20425. 8008dee: 6cdb ldr r3, [r3, #76] @ 0x4c
  20426. 8008df0: 2b00 cmp r3, #0
  20427. 8008df2: f000 8272 beq.w 80092da <HAL_DMA_IRQHandler+0xe0e>
  20428. {
  20429. /* Transfer error callback */
  20430. hdma->XferErrorCallback(hdma);
  20431. 8008df6: 687b ldr r3, [r7, #4]
  20432. 8008df8: 6cdb ldr r3, [r3, #76] @ 0x4c
  20433. 8008dfa: 6878 ldr r0, [r7, #4]
  20434. 8008dfc: 4798 blx r3
  20435. 8008dfe: e26c b.n 80092da <HAL_DMA_IRQHandler+0xe0e>
  20436. }
  20437. }
  20438. }
  20439. else if(IS_BDMA_CHANNEL_INSTANCE(hdma->Instance) != 0U) /* BDMA instance(s) */
  20440. 8008e00: 687b ldr r3, [r7, #4]
  20441. 8008e02: 681b ldr r3, [r3, #0]
  20442. 8008e04: 4a43 ldr r2, [pc, #268] @ (8008f14 <HAL_DMA_IRQHandler+0xa48>)
  20443. 8008e06: 4293 cmp r3, r2
  20444. 8008e08: d022 beq.n 8008e50 <HAL_DMA_IRQHandler+0x984>
  20445. 8008e0a: 687b ldr r3, [r7, #4]
  20446. 8008e0c: 681b ldr r3, [r3, #0]
  20447. 8008e0e: 4a42 ldr r2, [pc, #264] @ (8008f18 <HAL_DMA_IRQHandler+0xa4c>)
  20448. 8008e10: 4293 cmp r3, r2
  20449. 8008e12: d01d beq.n 8008e50 <HAL_DMA_IRQHandler+0x984>
  20450. 8008e14: 687b ldr r3, [r7, #4]
  20451. 8008e16: 681b ldr r3, [r3, #0]
  20452. 8008e18: 4a40 ldr r2, [pc, #256] @ (8008f1c <HAL_DMA_IRQHandler+0xa50>)
  20453. 8008e1a: 4293 cmp r3, r2
  20454. 8008e1c: d018 beq.n 8008e50 <HAL_DMA_IRQHandler+0x984>
  20455. 8008e1e: 687b ldr r3, [r7, #4]
  20456. 8008e20: 681b ldr r3, [r3, #0]
  20457. 8008e22: 4a3f ldr r2, [pc, #252] @ (8008f20 <HAL_DMA_IRQHandler+0xa54>)
  20458. 8008e24: 4293 cmp r3, r2
  20459. 8008e26: d013 beq.n 8008e50 <HAL_DMA_IRQHandler+0x984>
  20460. 8008e28: 687b ldr r3, [r7, #4]
  20461. 8008e2a: 681b ldr r3, [r3, #0]
  20462. 8008e2c: 4a3d ldr r2, [pc, #244] @ (8008f24 <HAL_DMA_IRQHandler+0xa58>)
  20463. 8008e2e: 4293 cmp r3, r2
  20464. 8008e30: d00e beq.n 8008e50 <HAL_DMA_IRQHandler+0x984>
  20465. 8008e32: 687b ldr r3, [r7, #4]
  20466. 8008e34: 681b ldr r3, [r3, #0]
  20467. 8008e36: 4a3c ldr r2, [pc, #240] @ (8008f28 <HAL_DMA_IRQHandler+0xa5c>)
  20468. 8008e38: 4293 cmp r3, r2
  20469. 8008e3a: d009 beq.n 8008e50 <HAL_DMA_IRQHandler+0x984>
  20470. 8008e3c: 687b ldr r3, [r7, #4]
  20471. 8008e3e: 681b ldr r3, [r3, #0]
  20472. 8008e40: 4a3a ldr r2, [pc, #232] @ (8008f2c <HAL_DMA_IRQHandler+0xa60>)
  20473. 8008e42: 4293 cmp r3, r2
  20474. 8008e44: d004 beq.n 8008e50 <HAL_DMA_IRQHandler+0x984>
  20475. 8008e46: 687b ldr r3, [r7, #4]
  20476. 8008e48: 681b ldr r3, [r3, #0]
  20477. 8008e4a: 4a39 ldr r2, [pc, #228] @ (8008f30 <HAL_DMA_IRQHandler+0xa64>)
  20478. 8008e4c: 4293 cmp r3, r2
  20479. 8008e4e: d101 bne.n 8008e54 <HAL_DMA_IRQHandler+0x988>
  20480. 8008e50: 2301 movs r3, #1
  20481. 8008e52: e000 b.n 8008e56 <HAL_DMA_IRQHandler+0x98a>
  20482. 8008e54: 2300 movs r3, #0
  20483. 8008e56: 2b00 cmp r3, #0
  20484. 8008e58: f000 823f beq.w 80092da <HAL_DMA_IRQHandler+0xe0e>
  20485. {
  20486. ccr_reg = (((BDMA_Channel_TypeDef *)hdma->Instance)->CCR);
  20487. 8008e5c: 687b ldr r3, [r7, #4]
  20488. 8008e5e: 681b ldr r3, [r3, #0]
  20489. 8008e60: 681b ldr r3, [r3, #0]
  20490. 8008e62: 613b str r3, [r7, #16]
  20491. /* Half Transfer Complete Interrupt management ******************************/
  20492. if (((tmpisr_bdma & (BDMA_FLAG_HT0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_HTIE) != 0U))
  20493. 8008e64: 687b ldr r3, [r7, #4]
  20494. 8008e66: 6ddb ldr r3, [r3, #92] @ 0x5c
  20495. 8008e68: f003 031f and.w r3, r3, #31
  20496. 8008e6c: 2204 movs r2, #4
  20497. 8008e6e: 409a lsls r2, r3
  20498. 8008e70: 697b ldr r3, [r7, #20]
  20499. 8008e72: 4013 ands r3, r2
  20500. 8008e74: 2b00 cmp r3, #0
  20501. 8008e76: f000 80cd beq.w 8009014 <HAL_DMA_IRQHandler+0xb48>
  20502. 8008e7a: 693b ldr r3, [r7, #16]
  20503. 8008e7c: f003 0304 and.w r3, r3, #4
  20504. 8008e80: 2b00 cmp r3, #0
  20505. 8008e82: f000 80c7 beq.w 8009014 <HAL_DMA_IRQHandler+0xb48>
  20506. {
  20507. /* Clear the half transfer complete flag */
  20508. regs_bdma->IFCR = (BDMA_ISR_HTIF0 << (hdma->StreamIndex & 0x1FU));
  20509. 8008e86: 687b ldr r3, [r7, #4]
  20510. 8008e88: 6ddb ldr r3, [r3, #92] @ 0x5c
  20511. 8008e8a: f003 031f and.w r3, r3, #31
  20512. 8008e8e: 2204 movs r2, #4
  20513. 8008e90: 409a lsls r2, r3
  20514. 8008e92: 69fb ldr r3, [r7, #28]
  20515. 8008e94: 605a str r2, [r3, #4]
  20516. /* Disable the transfer complete interrupt if the DMA mode is Double Buffering */
  20517. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  20518. 8008e96: 693b ldr r3, [r7, #16]
  20519. 8008e98: f403 4300 and.w r3, r3, #32768 @ 0x8000
  20520. 8008e9c: 2b00 cmp r3, #0
  20521. 8008e9e: d049 beq.n 8008f34 <HAL_DMA_IRQHandler+0xa68>
  20522. {
  20523. /* Current memory buffer used is Memory 0 */
  20524. if((ccr_reg & BDMA_CCR_CT) == 0U)
  20525. 8008ea0: 693b ldr r3, [r7, #16]
  20526. 8008ea2: f403 3380 and.w r3, r3, #65536 @ 0x10000
  20527. 8008ea6: 2b00 cmp r3, #0
  20528. 8008ea8: d109 bne.n 8008ebe <HAL_DMA_IRQHandler+0x9f2>
  20529. {
  20530. if(hdma->XferM1HalfCpltCallback != NULL)
  20531. 8008eaa: 687b ldr r3, [r7, #4]
  20532. 8008eac: 6c9b ldr r3, [r3, #72] @ 0x48
  20533. 8008eae: 2b00 cmp r3, #0
  20534. 8008eb0: f000 8210 beq.w 80092d4 <HAL_DMA_IRQHandler+0xe08>
  20535. {
  20536. /* Half transfer Callback for Memory 1 */
  20537. hdma->XferM1HalfCpltCallback(hdma);
  20538. 8008eb4: 687b ldr r3, [r7, #4]
  20539. 8008eb6: 6c9b ldr r3, [r3, #72] @ 0x48
  20540. 8008eb8: 6878 ldr r0, [r7, #4]
  20541. 8008eba: 4798 blx r3
  20542. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  20543. 8008ebc: e20a b.n 80092d4 <HAL_DMA_IRQHandler+0xe08>
  20544. }
  20545. }
  20546. /* Current memory buffer used is Memory 1 */
  20547. else
  20548. {
  20549. if(hdma->XferHalfCpltCallback != NULL)
  20550. 8008ebe: 687b ldr r3, [r7, #4]
  20551. 8008ec0: 6c1b ldr r3, [r3, #64] @ 0x40
  20552. 8008ec2: 2b00 cmp r3, #0
  20553. 8008ec4: f000 8206 beq.w 80092d4 <HAL_DMA_IRQHandler+0xe08>
  20554. {
  20555. /* Half transfer Callback for Memory 0 */
  20556. hdma->XferHalfCpltCallback(hdma);
  20557. 8008ec8: 687b ldr r3, [r7, #4]
  20558. 8008eca: 6c1b ldr r3, [r3, #64] @ 0x40
  20559. 8008ecc: 6878 ldr r0, [r7, #4]
  20560. 8008ece: 4798 blx r3
  20561. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  20562. 8008ed0: e200 b.n 80092d4 <HAL_DMA_IRQHandler+0xe08>
  20563. 8008ed2: bf00 nop
  20564. 8008ed4: 40020010 .word 0x40020010
  20565. 8008ed8: 40020028 .word 0x40020028
  20566. 8008edc: 40020040 .word 0x40020040
  20567. 8008ee0: 40020058 .word 0x40020058
  20568. 8008ee4: 40020070 .word 0x40020070
  20569. 8008ee8: 40020088 .word 0x40020088
  20570. 8008eec: 400200a0 .word 0x400200a0
  20571. 8008ef0: 400200b8 .word 0x400200b8
  20572. 8008ef4: 40020410 .word 0x40020410
  20573. 8008ef8: 40020428 .word 0x40020428
  20574. 8008efc: 40020440 .word 0x40020440
  20575. 8008f00: 40020458 .word 0x40020458
  20576. 8008f04: 40020470 .word 0x40020470
  20577. 8008f08: 40020488 .word 0x40020488
  20578. 8008f0c: 400204a0 .word 0x400204a0
  20579. 8008f10: 400204b8 .word 0x400204b8
  20580. 8008f14: 58025408 .word 0x58025408
  20581. 8008f18: 5802541c .word 0x5802541c
  20582. 8008f1c: 58025430 .word 0x58025430
  20583. 8008f20: 58025444 .word 0x58025444
  20584. 8008f24: 58025458 .word 0x58025458
  20585. 8008f28: 5802546c .word 0x5802546c
  20586. 8008f2c: 58025480 .word 0x58025480
  20587. 8008f30: 58025494 .word 0x58025494
  20588. }
  20589. }
  20590. }
  20591. else
  20592. {
  20593. if((ccr_reg & BDMA_CCR_CIRC) == 0U)
  20594. 8008f34: 693b ldr r3, [r7, #16]
  20595. 8008f36: f003 0320 and.w r3, r3, #32
  20596. 8008f3a: 2b00 cmp r3, #0
  20597. 8008f3c: d160 bne.n 8009000 <HAL_DMA_IRQHandler+0xb34>
  20598. {
  20599. /* Disable the half transfer interrupt */
  20600. __HAL_DMA_DISABLE_IT(hdma, DMA_IT_HT);
  20601. 8008f3e: 687b ldr r3, [r7, #4]
  20602. 8008f40: 681b ldr r3, [r3, #0]
  20603. 8008f42: 4a7f ldr r2, [pc, #508] @ (8009140 <HAL_DMA_IRQHandler+0xc74>)
  20604. 8008f44: 4293 cmp r3, r2
  20605. 8008f46: d04a beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20606. 8008f48: 687b ldr r3, [r7, #4]
  20607. 8008f4a: 681b ldr r3, [r3, #0]
  20608. 8008f4c: 4a7d ldr r2, [pc, #500] @ (8009144 <HAL_DMA_IRQHandler+0xc78>)
  20609. 8008f4e: 4293 cmp r3, r2
  20610. 8008f50: d045 beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20611. 8008f52: 687b ldr r3, [r7, #4]
  20612. 8008f54: 681b ldr r3, [r3, #0]
  20613. 8008f56: 4a7c ldr r2, [pc, #496] @ (8009148 <HAL_DMA_IRQHandler+0xc7c>)
  20614. 8008f58: 4293 cmp r3, r2
  20615. 8008f5a: d040 beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20616. 8008f5c: 687b ldr r3, [r7, #4]
  20617. 8008f5e: 681b ldr r3, [r3, #0]
  20618. 8008f60: 4a7a ldr r2, [pc, #488] @ (800914c <HAL_DMA_IRQHandler+0xc80>)
  20619. 8008f62: 4293 cmp r3, r2
  20620. 8008f64: d03b beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20621. 8008f66: 687b ldr r3, [r7, #4]
  20622. 8008f68: 681b ldr r3, [r3, #0]
  20623. 8008f6a: 4a79 ldr r2, [pc, #484] @ (8009150 <HAL_DMA_IRQHandler+0xc84>)
  20624. 8008f6c: 4293 cmp r3, r2
  20625. 8008f6e: d036 beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20626. 8008f70: 687b ldr r3, [r7, #4]
  20627. 8008f72: 681b ldr r3, [r3, #0]
  20628. 8008f74: 4a77 ldr r2, [pc, #476] @ (8009154 <HAL_DMA_IRQHandler+0xc88>)
  20629. 8008f76: 4293 cmp r3, r2
  20630. 8008f78: d031 beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20631. 8008f7a: 687b ldr r3, [r7, #4]
  20632. 8008f7c: 681b ldr r3, [r3, #0]
  20633. 8008f7e: 4a76 ldr r2, [pc, #472] @ (8009158 <HAL_DMA_IRQHandler+0xc8c>)
  20634. 8008f80: 4293 cmp r3, r2
  20635. 8008f82: d02c beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20636. 8008f84: 687b ldr r3, [r7, #4]
  20637. 8008f86: 681b ldr r3, [r3, #0]
  20638. 8008f88: 4a74 ldr r2, [pc, #464] @ (800915c <HAL_DMA_IRQHandler+0xc90>)
  20639. 8008f8a: 4293 cmp r3, r2
  20640. 8008f8c: d027 beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20641. 8008f8e: 687b ldr r3, [r7, #4]
  20642. 8008f90: 681b ldr r3, [r3, #0]
  20643. 8008f92: 4a73 ldr r2, [pc, #460] @ (8009160 <HAL_DMA_IRQHandler+0xc94>)
  20644. 8008f94: 4293 cmp r3, r2
  20645. 8008f96: d022 beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20646. 8008f98: 687b ldr r3, [r7, #4]
  20647. 8008f9a: 681b ldr r3, [r3, #0]
  20648. 8008f9c: 4a71 ldr r2, [pc, #452] @ (8009164 <HAL_DMA_IRQHandler+0xc98>)
  20649. 8008f9e: 4293 cmp r3, r2
  20650. 8008fa0: d01d beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20651. 8008fa2: 687b ldr r3, [r7, #4]
  20652. 8008fa4: 681b ldr r3, [r3, #0]
  20653. 8008fa6: 4a70 ldr r2, [pc, #448] @ (8009168 <HAL_DMA_IRQHandler+0xc9c>)
  20654. 8008fa8: 4293 cmp r3, r2
  20655. 8008faa: d018 beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20656. 8008fac: 687b ldr r3, [r7, #4]
  20657. 8008fae: 681b ldr r3, [r3, #0]
  20658. 8008fb0: 4a6e ldr r2, [pc, #440] @ (800916c <HAL_DMA_IRQHandler+0xca0>)
  20659. 8008fb2: 4293 cmp r3, r2
  20660. 8008fb4: d013 beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20661. 8008fb6: 687b ldr r3, [r7, #4]
  20662. 8008fb8: 681b ldr r3, [r3, #0]
  20663. 8008fba: 4a6d ldr r2, [pc, #436] @ (8009170 <HAL_DMA_IRQHandler+0xca4>)
  20664. 8008fbc: 4293 cmp r3, r2
  20665. 8008fbe: d00e beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20666. 8008fc0: 687b ldr r3, [r7, #4]
  20667. 8008fc2: 681b ldr r3, [r3, #0]
  20668. 8008fc4: 4a6b ldr r2, [pc, #428] @ (8009174 <HAL_DMA_IRQHandler+0xca8>)
  20669. 8008fc6: 4293 cmp r3, r2
  20670. 8008fc8: d009 beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20671. 8008fca: 687b ldr r3, [r7, #4]
  20672. 8008fcc: 681b ldr r3, [r3, #0]
  20673. 8008fce: 4a6a ldr r2, [pc, #424] @ (8009178 <HAL_DMA_IRQHandler+0xcac>)
  20674. 8008fd0: 4293 cmp r3, r2
  20675. 8008fd2: d004 beq.n 8008fde <HAL_DMA_IRQHandler+0xb12>
  20676. 8008fd4: 687b ldr r3, [r7, #4]
  20677. 8008fd6: 681b ldr r3, [r3, #0]
  20678. 8008fd8: 4a68 ldr r2, [pc, #416] @ (800917c <HAL_DMA_IRQHandler+0xcb0>)
  20679. 8008fda: 4293 cmp r3, r2
  20680. 8008fdc: d108 bne.n 8008ff0 <HAL_DMA_IRQHandler+0xb24>
  20681. 8008fde: 687b ldr r3, [r7, #4]
  20682. 8008fe0: 681b ldr r3, [r3, #0]
  20683. 8008fe2: 681a ldr r2, [r3, #0]
  20684. 8008fe4: 687b ldr r3, [r7, #4]
  20685. 8008fe6: 681b ldr r3, [r3, #0]
  20686. 8008fe8: f022 0208 bic.w r2, r2, #8
  20687. 8008fec: 601a str r2, [r3, #0]
  20688. 8008fee: e007 b.n 8009000 <HAL_DMA_IRQHandler+0xb34>
  20689. 8008ff0: 687b ldr r3, [r7, #4]
  20690. 8008ff2: 681b ldr r3, [r3, #0]
  20691. 8008ff4: 681a ldr r2, [r3, #0]
  20692. 8008ff6: 687b ldr r3, [r7, #4]
  20693. 8008ff8: 681b ldr r3, [r3, #0]
  20694. 8008ffa: f022 0204 bic.w r2, r2, #4
  20695. 8008ffe: 601a str r2, [r3, #0]
  20696. }
  20697. /* DMA peripheral state is not updated in Half Transfer */
  20698. /* but in Transfer Complete case */
  20699. if(hdma->XferHalfCpltCallback != NULL)
  20700. 8009000: 687b ldr r3, [r7, #4]
  20701. 8009002: 6c1b ldr r3, [r3, #64] @ 0x40
  20702. 8009004: 2b00 cmp r3, #0
  20703. 8009006: f000 8165 beq.w 80092d4 <HAL_DMA_IRQHandler+0xe08>
  20704. {
  20705. /* Half transfer callback */
  20706. hdma->XferHalfCpltCallback(hdma);
  20707. 800900a: 687b ldr r3, [r7, #4]
  20708. 800900c: 6c1b ldr r3, [r3, #64] @ 0x40
  20709. 800900e: 6878 ldr r0, [r7, #4]
  20710. 8009010: 4798 blx r3
  20711. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  20712. 8009012: e15f b.n 80092d4 <HAL_DMA_IRQHandler+0xe08>
  20713. }
  20714. }
  20715. }
  20716. /* Transfer Complete Interrupt management ***********************************/
  20717. else if (((tmpisr_bdma & (BDMA_FLAG_TC0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_TCIE) != 0U))
  20718. 8009014: 687b ldr r3, [r7, #4]
  20719. 8009016: 6ddb ldr r3, [r3, #92] @ 0x5c
  20720. 8009018: f003 031f and.w r3, r3, #31
  20721. 800901c: 2202 movs r2, #2
  20722. 800901e: 409a lsls r2, r3
  20723. 8009020: 697b ldr r3, [r7, #20]
  20724. 8009022: 4013 ands r3, r2
  20725. 8009024: 2b00 cmp r3, #0
  20726. 8009026: f000 80c5 beq.w 80091b4 <HAL_DMA_IRQHandler+0xce8>
  20727. 800902a: 693b ldr r3, [r7, #16]
  20728. 800902c: f003 0302 and.w r3, r3, #2
  20729. 8009030: 2b00 cmp r3, #0
  20730. 8009032: f000 80bf beq.w 80091b4 <HAL_DMA_IRQHandler+0xce8>
  20731. {
  20732. /* Clear the transfer complete flag */
  20733. regs_bdma->IFCR = (BDMA_ISR_TCIF0) << (hdma->StreamIndex & 0x1FU);
  20734. 8009036: 687b ldr r3, [r7, #4]
  20735. 8009038: 6ddb ldr r3, [r3, #92] @ 0x5c
  20736. 800903a: f003 031f and.w r3, r3, #31
  20737. 800903e: 2202 movs r2, #2
  20738. 8009040: 409a lsls r2, r3
  20739. 8009042: 69fb ldr r3, [r7, #28]
  20740. 8009044: 605a str r2, [r3, #4]
  20741. /* Disable the transfer complete interrupt if the DMA mode is Double Buffering */
  20742. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  20743. 8009046: 693b ldr r3, [r7, #16]
  20744. 8009048: f403 4300 and.w r3, r3, #32768 @ 0x8000
  20745. 800904c: 2b00 cmp r3, #0
  20746. 800904e: d018 beq.n 8009082 <HAL_DMA_IRQHandler+0xbb6>
  20747. {
  20748. /* Current memory buffer used is Memory 0 */
  20749. if((ccr_reg & BDMA_CCR_CT) == 0U)
  20750. 8009050: 693b ldr r3, [r7, #16]
  20751. 8009052: f403 3380 and.w r3, r3, #65536 @ 0x10000
  20752. 8009056: 2b00 cmp r3, #0
  20753. 8009058: d109 bne.n 800906e <HAL_DMA_IRQHandler+0xba2>
  20754. {
  20755. if(hdma->XferM1CpltCallback != NULL)
  20756. 800905a: 687b ldr r3, [r7, #4]
  20757. 800905c: 6c5b ldr r3, [r3, #68] @ 0x44
  20758. 800905e: 2b00 cmp r3, #0
  20759. 8009060: f000 813a beq.w 80092d8 <HAL_DMA_IRQHandler+0xe0c>
  20760. {
  20761. /* Transfer complete Callback for Memory 1 */
  20762. hdma->XferM1CpltCallback(hdma);
  20763. 8009064: 687b ldr r3, [r7, #4]
  20764. 8009066: 6c5b ldr r3, [r3, #68] @ 0x44
  20765. 8009068: 6878 ldr r0, [r7, #4]
  20766. 800906a: 4798 blx r3
  20767. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  20768. 800906c: e134 b.n 80092d8 <HAL_DMA_IRQHandler+0xe0c>
  20769. }
  20770. }
  20771. /* Current memory buffer used is Memory 1 */
  20772. else
  20773. {
  20774. if(hdma->XferCpltCallback != NULL)
  20775. 800906e: 687b ldr r3, [r7, #4]
  20776. 8009070: 6bdb ldr r3, [r3, #60] @ 0x3c
  20777. 8009072: 2b00 cmp r3, #0
  20778. 8009074: f000 8130 beq.w 80092d8 <HAL_DMA_IRQHandler+0xe0c>
  20779. {
  20780. /* Transfer complete Callback for Memory 0 */
  20781. hdma->XferCpltCallback(hdma);
  20782. 8009078: 687b ldr r3, [r7, #4]
  20783. 800907a: 6bdb ldr r3, [r3, #60] @ 0x3c
  20784. 800907c: 6878 ldr r0, [r7, #4]
  20785. 800907e: 4798 blx r3
  20786. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  20787. 8009080: e12a b.n 80092d8 <HAL_DMA_IRQHandler+0xe0c>
  20788. }
  20789. }
  20790. }
  20791. else
  20792. {
  20793. if((ccr_reg & BDMA_CCR_CIRC) == 0U)
  20794. 8009082: 693b ldr r3, [r7, #16]
  20795. 8009084: f003 0320 and.w r3, r3, #32
  20796. 8009088: 2b00 cmp r3, #0
  20797. 800908a: f040 8089 bne.w 80091a0 <HAL_DMA_IRQHandler+0xcd4>
  20798. {
  20799. /* Disable the transfer complete and error interrupt, if the DMA mode is not CIRCULAR */
  20800. __HAL_DMA_DISABLE_IT(hdma, DMA_IT_TE | DMA_IT_TC);
  20801. 800908e: 687b ldr r3, [r7, #4]
  20802. 8009090: 681b ldr r3, [r3, #0]
  20803. 8009092: 4a2b ldr r2, [pc, #172] @ (8009140 <HAL_DMA_IRQHandler+0xc74>)
  20804. 8009094: 4293 cmp r3, r2
  20805. 8009096: d04a beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20806. 8009098: 687b ldr r3, [r7, #4]
  20807. 800909a: 681b ldr r3, [r3, #0]
  20808. 800909c: 4a29 ldr r2, [pc, #164] @ (8009144 <HAL_DMA_IRQHandler+0xc78>)
  20809. 800909e: 4293 cmp r3, r2
  20810. 80090a0: d045 beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20811. 80090a2: 687b ldr r3, [r7, #4]
  20812. 80090a4: 681b ldr r3, [r3, #0]
  20813. 80090a6: 4a28 ldr r2, [pc, #160] @ (8009148 <HAL_DMA_IRQHandler+0xc7c>)
  20814. 80090a8: 4293 cmp r3, r2
  20815. 80090aa: d040 beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20816. 80090ac: 687b ldr r3, [r7, #4]
  20817. 80090ae: 681b ldr r3, [r3, #0]
  20818. 80090b0: 4a26 ldr r2, [pc, #152] @ (800914c <HAL_DMA_IRQHandler+0xc80>)
  20819. 80090b2: 4293 cmp r3, r2
  20820. 80090b4: d03b beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20821. 80090b6: 687b ldr r3, [r7, #4]
  20822. 80090b8: 681b ldr r3, [r3, #0]
  20823. 80090ba: 4a25 ldr r2, [pc, #148] @ (8009150 <HAL_DMA_IRQHandler+0xc84>)
  20824. 80090bc: 4293 cmp r3, r2
  20825. 80090be: d036 beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20826. 80090c0: 687b ldr r3, [r7, #4]
  20827. 80090c2: 681b ldr r3, [r3, #0]
  20828. 80090c4: 4a23 ldr r2, [pc, #140] @ (8009154 <HAL_DMA_IRQHandler+0xc88>)
  20829. 80090c6: 4293 cmp r3, r2
  20830. 80090c8: d031 beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20831. 80090ca: 687b ldr r3, [r7, #4]
  20832. 80090cc: 681b ldr r3, [r3, #0]
  20833. 80090ce: 4a22 ldr r2, [pc, #136] @ (8009158 <HAL_DMA_IRQHandler+0xc8c>)
  20834. 80090d0: 4293 cmp r3, r2
  20835. 80090d2: d02c beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20836. 80090d4: 687b ldr r3, [r7, #4]
  20837. 80090d6: 681b ldr r3, [r3, #0]
  20838. 80090d8: 4a20 ldr r2, [pc, #128] @ (800915c <HAL_DMA_IRQHandler+0xc90>)
  20839. 80090da: 4293 cmp r3, r2
  20840. 80090dc: d027 beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20841. 80090de: 687b ldr r3, [r7, #4]
  20842. 80090e0: 681b ldr r3, [r3, #0]
  20843. 80090e2: 4a1f ldr r2, [pc, #124] @ (8009160 <HAL_DMA_IRQHandler+0xc94>)
  20844. 80090e4: 4293 cmp r3, r2
  20845. 80090e6: d022 beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20846. 80090e8: 687b ldr r3, [r7, #4]
  20847. 80090ea: 681b ldr r3, [r3, #0]
  20848. 80090ec: 4a1d ldr r2, [pc, #116] @ (8009164 <HAL_DMA_IRQHandler+0xc98>)
  20849. 80090ee: 4293 cmp r3, r2
  20850. 80090f0: d01d beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20851. 80090f2: 687b ldr r3, [r7, #4]
  20852. 80090f4: 681b ldr r3, [r3, #0]
  20853. 80090f6: 4a1c ldr r2, [pc, #112] @ (8009168 <HAL_DMA_IRQHandler+0xc9c>)
  20854. 80090f8: 4293 cmp r3, r2
  20855. 80090fa: d018 beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20856. 80090fc: 687b ldr r3, [r7, #4]
  20857. 80090fe: 681b ldr r3, [r3, #0]
  20858. 8009100: 4a1a ldr r2, [pc, #104] @ (800916c <HAL_DMA_IRQHandler+0xca0>)
  20859. 8009102: 4293 cmp r3, r2
  20860. 8009104: d013 beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20861. 8009106: 687b ldr r3, [r7, #4]
  20862. 8009108: 681b ldr r3, [r3, #0]
  20863. 800910a: 4a19 ldr r2, [pc, #100] @ (8009170 <HAL_DMA_IRQHandler+0xca4>)
  20864. 800910c: 4293 cmp r3, r2
  20865. 800910e: d00e beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20866. 8009110: 687b ldr r3, [r7, #4]
  20867. 8009112: 681b ldr r3, [r3, #0]
  20868. 8009114: 4a17 ldr r2, [pc, #92] @ (8009174 <HAL_DMA_IRQHandler+0xca8>)
  20869. 8009116: 4293 cmp r3, r2
  20870. 8009118: d009 beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20871. 800911a: 687b ldr r3, [r7, #4]
  20872. 800911c: 681b ldr r3, [r3, #0]
  20873. 800911e: 4a16 ldr r2, [pc, #88] @ (8009178 <HAL_DMA_IRQHandler+0xcac>)
  20874. 8009120: 4293 cmp r3, r2
  20875. 8009122: d004 beq.n 800912e <HAL_DMA_IRQHandler+0xc62>
  20876. 8009124: 687b ldr r3, [r7, #4]
  20877. 8009126: 681b ldr r3, [r3, #0]
  20878. 8009128: 4a14 ldr r2, [pc, #80] @ (800917c <HAL_DMA_IRQHandler+0xcb0>)
  20879. 800912a: 4293 cmp r3, r2
  20880. 800912c: d128 bne.n 8009180 <HAL_DMA_IRQHandler+0xcb4>
  20881. 800912e: 687b ldr r3, [r7, #4]
  20882. 8009130: 681b ldr r3, [r3, #0]
  20883. 8009132: 681a ldr r2, [r3, #0]
  20884. 8009134: 687b ldr r3, [r7, #4]
  20885. 8009136: 681b ldr r3, [r3, #0]
  20886. 8009138: f022 0214 bic.w r2, r2, #20
  20887. 800913c: 601a str r2, [r3, #0]
  20888. 800913e: e027 b.n 8009190 <HAL_DMA_IRQHandler+0xcc4>
  20889. 8009140: 40020010 .word 0x40020010
  20890. 8009144: 40020028 .word 0x40020028
  20891. 8009148: 40020040 .word 0x40020040
  20892. 800914c: 40020058 .word 0x40020058
  20893. 8009150: 40020070 .word 0x40020070
  20894. 8009154: 40020088 .word 0x40020088
  20895. 8009158: 400200a0 .word 0x400200a0
  20896. 800915c: 400200b8 .word 0x400200b8
  20897. 8009160: 40020410 .word 0x40020410
  20898. 8009164: 40020428 .word 0x40020428
  20899. 8009168: 40020440 .word 0x40020440
  20900. 800916c: 40020458 .word 0x40020458
  20901. 8009170: 40020470 .word 0x40020470
  20902. 8009174: 40020488 .word 0x40020488
  20903. 8009178: 400204a0 .word 0x400204a0
  20904. 800917c: 400204b8 .word 0x400204b8
  20905. 8009180: 687b ldr r3, [r7, #4]
  20906. 8009182: 681b ldr r3, [r3, #0]
  20907. 8009184: 681a ldr r2, [r3, #0]
  20908. 8009186: 687b ldr r3, [r7, #4]
  20909. 8009188: 681b ldr r3, [r3, #0]
  20910. 800918a: f022 020a bic.w r2, r2, #10
  20911. 800918e: 601a str r2, [r3, #0]
  20912. /* Change the DMA state */
  20913. hdma->State = HAL_DMA_STATE_READY;
  20914. 8009190: 687b ldr r3, [r7, #4]
  20915. 8009192: 2201 movs r2, #1
  20916. 8009194: f883 2035 strb.w r2, [r3, #53] @ 0x35
  20917. /* Process Unlocked */
  20918. __HAL_UNLOCK(hdma);
  20919. 8009198: 687b ldr r3, [r7, #4]
  20920. 800919a: 2200 movs r2, #0
  20921. 800919c: f883 2034 strb.w r2, [r3, #52] @ 0x34
  20922. }
  20923. if(hdma->XferCpltCallback != NULL)
  20924. 80091a0: 687b ldr r3, [r7, #4]
  20925. 80091a2: 6bdb ldr r3, [r3, #60] @ 0x3c
  20926. 80091a4: 2b00 cmp r3, #0
  20927. 80091a6: f000 8097 beq.w 80092d8 <HAL_DMA_IRQHandler+0xe0c>
  20928. {
  20929. /* Transfer complete callback */
  20930. hdma->XferCpltCallback(hdma);
  20931. 80091aa: 687b ldr r3, [r7, #4]
  20932. 80091ac: 6bdb ldr r3, [r3, #60] @ 0x3c
  20933. 80091ae: 6878 ldr r0, [r7, #4]
  20934. 80091b0: 4798 blx r3
  20935. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  20936. 80091b2: e091 b.n 80092d8 <HAL_DMA_IRQHandler+0xe0c>
  20937. }
  20938. }
  20939. }
  20940. /* Transfer Error Interrupt management **************************************/
  20941. else if (((tmpisr_bdma & (BDMA_FLAG_TE0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_TEIE) != 0U))
  20942. 80091b4: 687b ldr r3, [r7, #4]
  20943. 80091b6: 6ddb ldr r3, [r3, #92] @ 0x5c
  20944. 80091b8: f003 031f and.w r3, r3, #31
  20945. 80091bc: 2208 movs r2, #8
  20946. 80091be: 409a lsls r2, r3
  20947. 80091c0: 697b ldr r3, [r7, #20]
  20948. 80091c2: 4013 ands r3, r2
  20949. 80091c4: 2b00 cmp r3, #0
  20950. 80091c6: f000 8088 beq.w 80092da <HAL_DMA_IRQHandler+0xe0e>
  20951. 80091ca: 693b ldr r3, [r7, #16]
  20952. 80091cc: f003 0308 and.w r3, r3, #8
  20953. 80091d0: 2b00 cmp r3, #0
  20954. 80091d2: f000 8082 beq.w 80092da <HAL_DMA_IRQHandler+0xe0e>
  20955. {
  20956. /* When a DMA transfer error occurs */
  20957. /* A hardware clear of its EN bits is performed */
  20958. /* Disable ALL DMA IT */
  20959. __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));
  20960. 80091d6: 687b ldr r3, [r7, #4]
  20961. 80091d8: 681b ldr r3, [r3, #0]
  20962. 80091da: 4a41 ldr r2, [pc, #260] @ (80092e0 <HAL_DMA_IRQHandler+0xe14>)
  20963. 80091dc: 4293 cmp r3, r2
  20964. 80091de: d04a beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  20965. 80091e0: 687b ldr r3, [r7, #4]
  20966. 80091e2: 681b ldr r3, [r3, #0]
  20967. 80091e4: 4a3f ldr r2, [pc, #252] @ (80092e4 <HAL_DMA_IRQHandler+0xe18>)
  20968. 80091e6: 4293 cmp r3, r2
  20969. 80091e8: d045 beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  20970. 80091ea: 687b ldr r3, [r7, #4]
  20971. 80091ec: 681b ldr r3, [r3, #0]
  20972. 80091ee: 4a3e ldr r2, [pc, #248] @ (80092e8 <HAL_DMA_IRQHandler+0xe1c>)
  20973. 80091f0: 4293 cmp r3, r2
  20974. 80091f2: d040 beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  20975. 80091f4: 687b ldr r3, [r7, #4]
  20976. 80091f6: 681b ldr r3, [r3, #0]
  20977. 80091f8: 4a3c ldr r2, [pc, #240] @ (80092ec <HAL_DMA_IRQHandler+0xe20>)
  20978. 80091fa: 4293 cmp r3, r2
  20979. 80091fc: d03b beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  20980. 80091fe: 687b ldr r3, [r7, #4]
  20981. 8009200: 681b ldr r3, [r3, #0]
  20982. 8009202: 4a3b ldr r2, [pc, #236] @ (80092f0 <HAL_DMA_IRQHandler+0xe24>)
  20983. 8009204: 4293 cmp r3, r2
  20984. 8009206: d036 beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  20985. 8009208: 687b ldr r3, [r7, #4]
  20986. 800920a: 681b ldr r3, [r3, #0]
  20987. 800920c: 4a39 ldr r2, [pc, #228] @ (80092f4 <HAL_DMA_IRQHandler+0xe28>)
  20988. 800920e: 4293 cmp r3, r2
  20989. 8009210: d031 beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  20990. 8009212: 687b ldr r3, [r7, #4]
  20991. 8009214: 681b ldr r3, [r3, #0]
  20992. 8009216: 4a38 ldr r2, [pc, #224] @ (80092f8 <HAL_DMA_IRQHandler+0xe2c>)
  20993. 8009218: 4293 cmp r3, r2
  20994. 800921a: d02c beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  20995. 800921c: 687b ldr r3, [r7, #4]
  20996. 800921e: 681b ldr r3, [r3, #0]
  20997. 8009220: 4a36 ldr r2, [pc, #216] @ (80092fc <HAL_DMA_IRQHandler+0xe30>)
  20998. 8009222: 4293 cmp r3, r2
  20999. 8009224: d027 beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  21000. 8009226: 687b ldr r3, [r7, #4]
  21001. 8009228: 681b ldr r3, [r3, #0]
  21002. 800922a: 4a35 ldr r2, [pc, #212] @ (8009300 <HAL_DMA_IRQHandler+0xe34>)
  21003. 800922c: 4293 cmp r3, r2
  21004. 800922e: d022 beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  21005. 8009230: 687b ldr r3, [r7, #4]
  21006. 8009232: 681b ldr r3, [r3, #0]
  21007. 8009234: 4a33 ldr r2, [pc, #204] @ (8009304 <HAL_DMA_IRQHandler+0xe38>)
  21008. 8009236: 4293 cmp r3, r2
  21009. 8009238: d01d beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  21010. 800923a: 687b ldr r3, [r7, #4]
  21011. 800923c: 681b ldr r3, [r3, #0]
  21012. 800923e: 4a32 ldr r2, [pc, #200] @ (8009308 <HAL_DMA_IRQHandler+0xe3c>)
  21013. 8009240: 4293 cmp r3, r2
  21014. 8009242: d018 beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  21015. 8009244: 687b ldr r3, [r7, #4]
  21016. 8009246: 681b ldr r3, [r3, #0]
  21017. 8009248: 4a30 ldr r2, [pc, #192] @ (800930c <HAL_DMA_IRQHandler+0xe40>)
  21018. 800924a: 4293 cmp r3, r2
  21019. 800924c: d013 beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  21020. 800924e: 687b ldr r3, [r7, #4]
  21021. 8009250: 681b ldr r3, [r3, #0]
  21022. 8009252: 4a2f ldr r2, [pc, #188] @ (8009310 <HAL_DMA_IRQHandler+0xe44>)
  21023. 8009254: 4293 cmp r3, r2
  21024. 8009256: d00e beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  21025. 8009258: 687b ldr r3, [r7, #4]
  21026. 800925a: 681b ldr r3, [r3, #0]
  21027. 800925c: 4a2d ldr r2, [pc, #180] @ (8009314 <HAL_DMA_IRQHandler+0xe48>)
  21028. 800925e: 4293 cmp r3, r2
  21029. 8009260: d009 beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  21030. 8009262: 687b ldr r3, [r7, #4]
  21031. 8009264: 681b ldr r3, [r3, #0]
  21032. 8009266: 4a2c ldr r2, [pc, #176] @ (8009318 <HAL_DMA_IRQHandler+0xe4c>)
  21033. 8009268: 4293 cmp r3, r2
  21034. 800926a: d004 beq.n 8009276 <HAL_DMA_IRQHandler+0xdaa>
  21035. 800926c: 687b ldr r3, [r7, #4]
  21036. 800926e: 681b ldr r3, [r3, #0]
  21037. 8009270: 4a2a ldr r2, [pc, #168] @ (800931c <HAL_DMA_IRQHandler+0xe50>)
  21038. 8009272: 4293 cmp r3, r2
  21039. 8009274: d108 bne.n 8009288 <HAL_DMA_IRQHandler+0xdbc>
  21040. 8009276: 687b ldr r3, [r7, #4]
  21041. 8009278: 681b ldr r3, [r3, #0]
  21042. 800927a: 681a ldr r2, [r3, #0]
  21043. 800927c: 687b ldr r3, [r7, #4]
  21044. 800927e: 681b ldr r3, [r3, #0]
  21045. 8009280: f022 021c bic.w r2, r2, #28
  21046. 8009284: 601a str r2, [r3, #0]
  21047. 8009286: e007 b.n 8009298 <HAL_DMA_IRQHandler+0xdcc>
  21048. 8009288: 687b ldr r3, [r7, #4]
  21049. 800928a: 681b ldr r3, [r3, #0]
  21050. 800928c: 681a ldr r2, [r3, #0]
  21051. 800928e: 687b ldr r3, [r7, #4]
  21052. 8009290: 681b ldr r3, [r3, #0]
  21053. 8009292: f022 020e bic.w r2, r2, #14
  21054. 8009296: 601a str r2, [r3, #0]
  21055. /* Clear all flags */
  21056. regs_bdma->IFCR = (BDMA_ISR_GIF0) << (hdma->StreamIndex & 0x1FU);
  21057. 8009298: 687b ldr r3, [r7, #4]
  21058. 800929a: 6ddb ldr r3, [r3, #92] @ 0x5c
  21059. 800929c: f003 031f and.w r3, r3, #31
  21060. 80092a0: 2201 movs r2, #1
  21061. 80092a2: 409a lsls r2, r3
  21062. 80092a4: 69fb ldr r3, [r7, #28]
  21063. 80092a6: 605a str r2, [r3, #4]
  21064. /* Update error code */
  21065. hdma->ErrorCode = HAL_DMA_ERROR_TE;
  21066. 80092a8: 687b ldr r3, [r7, #4]
  21067. 80092aa: 2201 movs r2, #1
  21068. 80092ac: 655a str r2, [r3, #84] @ 0x54
  21069. /* Change the DMA state */
  21070. hdma->State = HAL_DMA_STATE_READY;
  21071. 80092ae: 687b ldr r3, [r7, #4]
  21072. 80092b0: 2201 movs r2, #1
  21073. 80092b2: f883 2035 strb.w r2, [r3, #53] @ 0x35
  21074. /* Process Unlocked */
  21075. __HAL_UNLOCK(hdma);
  21076. 80092b6: 687b ldr r3, [r7, #4]
  21077. 80092b8: 2200 movs r2, #0
  21078. 80092ba: f883 2034 strb.w r2, [r3, #52] @ 0x34
  21079. if (hdma->XferErrorCallback != NULL)
  21080. 80092be: 687b ldr r3, [r7, #4]
  21081. 80092c0: 6cdb ldr r3, [r3, #76] @ 0x4c
  21082. 80092c2: 2b00 cmp r3, #0
  21083. 80092c4: d009 beq.n 80092da <HAL_DMA_IRQHandler+0xe0e>
  21084. {
  21085. /* Transfer error callback */
  21086. hdma->XferErrorCallback(hdma);
  21087. 80092c6: 687b ldr r3, [r7, #4]
  21088. 80092c8: 6cdb ldr r3, [r3, #76] @ 0x4c
  21089. 80092ca: 6878 ldr r0, [r7, #4]
  21090. 80092cc: 4798 blx r3
  21091. 80092ce: e004 b.n 80092da <HAL_DMA_IRQHandler+0xe0e>
  21092. return;
  21093. 80092d0: bf00 nop
  21094. 80092d2: e002 b.n 80092da <HAL_DMA_IRQHandler+0xe0e>
  21095. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  21096. 80092d4: bf00 nop
  21097. 80092d6: e000 b.n 80092da <HAL_DMA_IRQHandler+0xe0e>
  21098. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  21099. 80092d8: bf00 nop
  21100. }
  21101. else
  21102. {
  21103. /* Nothing To Do */
  21104. }
  21105. }
  21106. 80092da: 3728 adds r7, #40 @ 0x28
  21107. 80092dc: 46bd mov sp, r7
  21108. 80092de: bd80 pop {r7, pc}
  21109. 80092e0: 40020010 .word 0x40020010
  21110. 80092e4: 40020028 .word 0x40020028
  21111. 80092e8: 40020040 .word 0x40020040
  21112. 80092ec: 40020058 .word 0x40020058
  21113. 80092f0: 40020070 .word 0x40020070
  21114. 80092f4: 40020088 .word 0x40020088
  21115. 80092f8: 400200a0 .word 0x400200a0
  21116. 80092fc: 400200b8 .word 0x400200b8
  21117. 8009300: 40020410 .word 0x40020410
  21118. 8009304: 40020428 .word 0x40020428
  21119. 8009308: 40020440 .word 0x40020440
  21120. 800930c: 40020458 .word 0x40020458
  21121. 8009310: 40020470 .word 0x40020470
  21122. 8009314: 40020488 .word 0x40020488
  21123. 8009318: 400204a0 .word 0x400204a0
  21124. 800931c: 400204b8 .word 0x400204b8
  21125. 08009320 <DMA_SetConfig>:
  21126. * @param DstAddress: The destination memory Buffer address
  21127. * @param DataLength: The length of data to be transferred from source to destination
  21128. * @retval None
  21129. */
  21130. static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
  21131. {
  21132. 8009320: b480 push {r7}
  21133. 8009322: b087 sub sp, #28
  21134. 8009324: af00 add r7, sp, #0
  21135. 8009326: 60f8 str r0, [r7, #12]
  21136. 8009328: 60b9 str r1, [r7, #8]
  21137. 800932a: 607a str r2, [r7, #4]
  21138. 800932c: 603b str r3, [r7, #0]
  21139. /* calculate DMA base and stream number */
  21140. DMA_Base_Registers *regs_dma = (DMA_Base_Registers *)hdma->StreamBaseAddress;
  21141. 800932e: 68fb ldr r3, [r7, #12]
  21142. 8009330: 6d9b ldr r3, [r3, #88] @ 0x58
  21143. 8009332: 617b str r3, [r7, #20]
  21144. BDMA_Base_Registers *regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  21145. 8009334: 68fb ldr r3, [r7, #12]
  21146. 8009336: 6d9b ldr r3, [r3, #88] @ 0x58
  21147. 8009338: 613b str r3, [r7, #16]
  21148. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  21149. 800933a: 68fb ldr r3, [r7, #12]
  21150. 800933c: 681b ldr r3, [r3, #0]
  21151. 800933e: 4a7f ldr r2, [pc, #508] @ (800953c <DMA_SetConfig+0x21c>)
  21152. 8009340: 4293 cmp r3, r2
  21153. 8009342: d072 beq.n 800942a <DMA_SetConfig+0x10a>
  21154. 8009344: 68fb ldr r3, [r7, #12]
  21155. 8009346: 681b ldr r3, [r3, #0]
  21156. 8009348: 4a7d ldr r2, [pc, #500] @ (8009540 <DMA_SetConfig+0x220>)
  21157. 800934a: 4293 cmp r3, r2
  21158. 800934c: d06d beq.n 800942a <DMA_SetConfig+0x10a>
  21159. 800934e: 68fb ldr r3, [r7, #12]
  21160. 8009350: 681b ldr r3, [r3, #0]
  21161. 8009352: 4a7c ldr r2, [pc, #496] @ (8009544 <DMA_SetConfig+0x224>)
  21162. 8009354: 4293 cmp r3, r2
  21163. 8009356: d068 beq.n 800942a <DMA_SetConfig+0x10a>
  21164. 8009358: 68fb ldr r3, [r7, #12]
  21165. 800935a: 681b ldr r3, [r3, #0]
  21166. 800935c: 4a7a ldr r2, [pc, #488] @ (8009548 <DMA_SetConfig+0x228>)
  21167. 800935e: 4293 cmp r3, r2
  21168. 8009360: d063 beq.n 800942a <DMA_SetConfig+0x10a>
  21169. 8009362: 68fb ldr r3, [r7, #12]
  21170. 8009364: 681b ldr r3, [r3, #0]
  21171. 8009366: 4a79 ldr r2, [pc, #484] @ (800954c <DMA_SetConfig+0x22c>)
  21172. 8009368: 4293 cmp r3, r2
  21173. 800936a: d05e beq.n 800942a <DMA_SetConfig+0x10a>
  21174. 800936c: 68fb ldr r3, [r7, #12]
  21175. 800936e: 681b ldr r3, [r3, #0]
  21176. 8009370: 4a77 ldr r2, [pc, #476] @ (8009550 <DMA_SetConfig+0x230>)
  21177. 8009372: 4293 cmp r3, r2
  21178. 8009374: d059 beq.n 800942a <DMA_SetConfig+0x10a>
  21179. 8009376: 68fb ldr r3, [r7, #12]
  21180. 8009378: 681b ldr r3, [r3, #0]
  21181. 800937a: 4a76 ldr r2, [pc, #472] @ (8009554 <DMA_SetConfig+0x234>)
  21182. 800937c: 4293 cmp r3, r2
  21183. 800937e: d054 beq.n 800942a <DMA_SetConfig+0x10a>
  21184. 8009380: 68fb ldr r3, [r7, #12]
  21185. 8009382: 681b ldr r3, [r3, #0]
  21186. 8009384: 4a74 ldr r2, [pc, #464] @ (8009558 <DMA_SetConfig+0x238>)
  21187. 8009386: 4293 cmp r3, r2
  21188. 8009388: d04f beq.n 800942a <DMA_SetConfig+0x10a>
  21189. 800938a: 68fb ldr r3, [r7, #12]
  21190. 800938c: 681b ldr r3, [r3, #0]
  21191. 800938e: 4a73 ldr r2, [pc, #460] @ (800955c <DMA_SetConfig+0x23c>)
  21192. 8009390: 4293 cmp r3, r2
  21193. 8009392: d04a beq.n 800942a <DMA_SetConfig+0x10a>
  21194. 8009394: 68fb ldr r3, [r7, #12]
  21195. 8009396: 681b ldr r3, [r3, #0]
  21196. 8009398: 4a71 ldr r2, [pc, #452] @ (8009560 <DMA_SetConfig+0x240>)
  21197. 800939a: 4293 cmp r3, r2
  21198. 800939c: d045 beq.n 800942a <DMA_SetConfig+0x10a>
  21199. 800939e: 68fb ldr r3, [r7, #12]
  21200. 80093a0: 681b ldr r3, [r3, #0]
  21201. 80093a2: 4a70 ldr r2, [pc, #448] @ (8009564 <DMA_SetConfig+0x244>)
  21202. 80093a4: 4293 cmp r3, r2
  21203. 80093a6: d040 beq.n 800942a <DMA_SetConfig+0x10a>
  21204. 80093a8: 68fb ldr r3, [r7, #12]
  21205. 80093aa: 681b ldr r3, [r3, #0]
  21206. 80093ac: 4a6e ldr r2, [pc, #440] @ (8009568 <DMA_SetConfig+0x248>)
  21207. 80093ae: 4293 cmp r3, r2
  21208. 80093b0: d03b beq.n 800942a <DMA_SetConfig+0x10a>
  21209. 80093b2: 68fb ldr r3, [r7, #12]
  21210. 80093b4: 681b ldr r3, [r3, #0]
  21211. 80093b6: 4a6d ldr r2, [pc, #436] @ (800956c <DMA_SetConfig+0x24c>)
  21212. 80093b8: 4293 cmp r3, r2
  21213. 80093ba: d036 beq.n 800942a <DMA_SetConfig+0x10a>
  21214. 80093bc: 68fb ldr r3, [r7, #12]
  21215. 80093be: 681b ldr r3, [r3, #0]
  21216. 80093c0: 4a6b ldr r2, [pc, #428] @ (8009570 <DMA_SetConfig+0x250>)
  21217. 80093c2: 4293 cmp r3, r2
  21218. 80093c4: d031 beq.n 800942a <DMA_SetConfig+0x10a>
  21219. 80093c6: 68fb ldr r3, [r7, #12]
  21220. 80093c8: 681b ldr r3, [r3, #0]
  21221. 80093ca: 4a6a ldr r2, [pc, #424] @ (8009574 <DMA_SetConfig+0x254>)
  21222. 80093cc: 4293 cmp r3, r2
  21223. 80093ce: d02c beq.n 800942a <DMA_SetConfig+0x10a>
  21224. 80093d0: 68fb ldr r3, [r7, #12]
  21225. 80093d2: 681b ldr r3, [r3, #0]
  21226. 80093d4: 4a68 ldr r2, [pc, #416] @ (8009578 <DMA_SetConfig+0x258>)
  21227. 80093d6: 4293 cmp r3, r2
  21228. 80093d8: d027 beq.n 800942a <DMA_SetConfig+0x10a>
  21229. 80093da: 68fb ldr r3, [r7, #12]
  21230. 80093dc: 681b ldr r3, [r3, #0]
  21231. 80093de: 4a67 ldr r2, [pc, #412] @ (800957c <DMA_SetConfig+0x25c>)
  21232. 80093e0: 4293 cmp r3, r2
  21233. 80093e2: d022 beq.n 800942a <DMA_SetConfig+0x10a>
  21234. 80093e4: 68fb ldr r3, [r7, #12]
  21235. 80093e6: 681b ldr r3, [r3, #0]
  21236. 80093e8: 4a65 ldr r2, [pc, #404] @ (8009580 <DMA_SetConfig+0x260>)
  21237. 80093ea: 4293 cmp r3, r2
  21238. 80093ec: d01d beq.n 800942a <DMA_SetConfig+0x10a>
  21239. 80093ee: 68fb ldr r3, [r7, #12]
  21240. 80093f0: 681b ldr r3, [r3, #0]
  21241. 80093f2: 4a64 ldr r2, [pc, #400] @ (8009584 <DMA_SetConfig+0x264>)
  21242. 80093f4: 4293 cmp r3, r2
  21243. 80093f6: d018 beq.n 800942a <DMA_SetConfig+0x10a>
  21244. 80093f8: 68fb ldr r3, [r7, #12]
  21245. 80093fa: 681b ldr r3, [r3, #0]
  21246. 80093fc: 4a62 ldr r2, [pc, #392] @ (8009588 <DMA_SetConfig+0x268>)
  21247. 80093fe: 4293 cmp r3, r2
  21248. 8009400: d013 beq.n 800942a <DMA_SetConfig+0x10a>
  21249. 8009402: 68fb ldr r3, [r7, #12]
  21250. 8009404: 681b ldr r3, [r3, #0]
  21251. 8009406: 4a61 ldr r2, [pc, #388] @ (800958c <DMA_SetConfig+0x26c>)
  21252. 8009408: 4293 cmp r3, r2
  21253. 800940a: d00e beq.n 800942a <DMA_SetConfig+0x10a>
  21254. 800940c: 68fb ldr r3, [r7, #12]
  21255. 800940e: 681b ldr r3, [r3, #0]
  21256. 8009410: 4a5f ldr r2, [pc, #380] @ (8009590 <DMA_SetConfig+0x270>)
  21257. 8009412: 4293 cmp r3, r2
  21258. 8009414: d009 beq.n 800942a <DMA_SetConfig+0x10a>
  21259. 8009416: 68fb ldr r3, [r7, #12]
  21260. 8009418: 681b ldr r3, [r3, #0]
  21261. 800941a: 4a5e ldr r2, [pc, #376] @ (8009594 <DMA_SetConfig+0x274>)
  21262. 800941c: 4293 cmp r3, r2
  21263. 800941e: d004 beq.n 800942a <DMA_SetConfig+0x10a>
  21264. 8009420: 68fb ldr r3, [r7, #12]
  21265. 8009422: 681b ldr r3, [r3, #0]
  21266. 8009424: 4a5c ldr r2, [pc, #368] @ (8009598 <DMA_SetConfig+0x278>)
  21267. 8009426: 4293 cmp r3, r2
  21268. 8009428: d101 bne.n 800942e <DMA_SetConfig+0x10e>
  21269. 800942a: 2301 movs r3, #1
  21270. 800942c: e000 b.n 8009430 <DMA_SetConfig+0x110>
  21271. 800942e: 2300 movs r3, #0
  21272. 8009430: 2b00 cmp r3, #0
  21273. 8009432: d00d beq.n 8009450 <DMA_SetConfig+0x130>
  21274. {
  21275. /* Clear the DMAMUX synchro overrun flag */
  21276. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  21277. 8009434: 68fb ldr r3, [r7, #12]
  21278. 8009436: 6e5b ldr r3, [r3, #100] @ 0x64
  21279. 8009438: 68fa ldr r2, [r7, #12]
  21280. 800943a: 6e92 ldr r2, [r2, #104] @ 0x68
  21281. 800943c: 605a str r2, [r3, #4]
  21282. if(hdma->DMAmuxRequestGen != 0U)
  21283. 800943e: 68fb ldr r3, [r7, #12]
  21284. 8009440: 6edb ldr r3, [r3, #108] @ 0x6c
  21285. 8009442: 2b00 cmp r3, #0
  21286. 8009444: d004 beq.n 8009450 <DMA_SetConfig+0x130>
  21287. {
  21288. /* Clear the DMAMUX request generator overrun flag */
  21289. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  21290. 8009446: 68fb ldr r3, [r7, #12]
  21291. 8009448: 6f1b ldr r3, [r3, #112] @ 0x70
  21292. 800944a: 68fa ldr r2, [r7, #12]
  21293. 800944c: 6f52 ldr r2, [r2, #116] @ 0x74
  21294. 800944e: 605a str r2, [r3, #4]
  21295. }
  21296. }
  21297. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  21298. 8009450: 68fb ldr r3, [r7, #12]
  21299. 8009452: 681b ldr r3, [r3, #0]
  21300. 8009454: 4a39 ldr r2, [pc, #228] @ (800953c <DMA_SetConfig+0x21c>)
  21301. 8009456: 4293 cmp r3, r2
  21302. 8009458: d04a beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21303. 800945a: 68fb ldr r3, [r7, #12]
  21304. 800945c: 681b ldr r3, [r3, #0]
  21305. 800945e: 4a38 ldr r2, [pc, #224] @ (8009540 <DMA_SetConfig+0x220>)
  21306. 8009460: 4293 cmp r3, r2
  21307. 8009462: d045 beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21308. 8009464: 68fb ldr r3, [r7, #12]
  21309. 8009466: 681b ldr r3, [r3, #0]
  21310. 8009468: 4a36 ldr r2, [pc, #216] @ (8009544 <DMA_SetConfig+0x224>)
  21311. 800946a: 4293 cmp r3, r2
  21312. 800946c: d040 beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21313. 800946e: 68fb ldr r3, [r7, #12]
  21314. 8009470: 681b ldr r3, [r3, #0]
  21315. 8009472: 4a35 ldr r2, [pc, #212] @ (8009548 <DMA_SetConfig+0x228>)
  21316. 8009474: 4293 cmp r3, r2
  21317. 8009476: d03b beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21318. 8009478: 68fb ldr r3, [r7, #12]
  21319. 800947a: 681b ldr r3, [r3, #0]
  21320. 800947c: 4a33 ldr r2, [pc, #204] @ (800954c <DMA_SetConfig+0x22c>)
  21321. 800947e: 4293 cmp r3, r2
  21322. 8009480: d036 beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21323. 8009482: 68fb ldr r3, [r7, #12]
  21324. 8009484: 681b ldr r3, [r3, #0]
  21325. 8009486: 4a32 ldr r2, [pc, #200] @ (8009550 <DMA_SetConfig+0x230>)
  21326. 8009488: 4293 cmp r3, r2
  21327. 800948a: d031 beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21328. 800948c: 68fb ldr r3, [r7, #12]
  21329. 800948e: 681b ldr r3, [r3, #0]
  21330. 8009490: 4a30 ldr r2, [pc, #192] @ (8009554 <DMA_SetConfig+0x234>)
  21331. 8009492: 4293 cmp r3, r2
  21332. 8009494: d02c beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21333. 8009496: 68fb ldr r3, [r7, #12]
  21334. 8009498: 681b ldr r3, [r3, #0]
  21335. 800949a: 4a2f ldr r2, [pc, #188] @ (8009558 <DMA_SetConfig+0x238>)
  21336. 800949c: 4293 cmp r3, r2
  21337. 800949e: d027 beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21338. 80094a0: 68fb ldr r3, [r7, #12]
  21339. 80094a2: 681b ldr r3, [r3, #0]
  21340. 80094a4: 4a2d ldr r2, [pc, #180] @ (800955c <DMA_SetConfig+0x23c>)
  21341. 80094a6: 4293 cmp r3, r2
  21342. 80094a8: d022 beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21343. 80094aa: 68fb ldr r3, [r7, #12]
  21344. 80094ac: 681b ldr r3, [r3, #0]
  21345. 80094ae: 4a2c ldr r2, [pc, #176] @ (8009560 <DMA_SetConfig+0x240>)
  21346. 80094b0: 4293 cmp r3, r2
  21347. 80094b2: d01d beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21348. 80094b4: 68fb ldr r3, [r7, #12]
  21349. 80094b6: 681b ldr r3, [r3, #0]
  21350. 80094b8: 4a2a ldr r2, [pc, #168] @ (8009564 <DMA_SetConfig+0x244>)
  21351. 80094ba: 4293 cmp r3, r2
  21352. 80094bc: d018 beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21353. 80094be: 68fb ldr r3, [r7, #12]
  21354. 80094c0: 681b ldr r3, [r3, #0]
  21355. 80094c2: 4a29 ldr r2, [pc, #164] @ (8009568 <DMA_SetConfig+0x248>)
  21356. 80094c4: 4293 cmp r3, r2
  21357. 80094c6: d013 beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21358. 80094c8: 68fb ldr r3, [r7, #12]
  21359. 80094ca: 681b ldr r3, [r3, #0]
  21360. 80094cc: 4a27 ldr r2, [pc, #156] @ (800956c <DMA_SetConfig+0x24c>)
  21361. 80094ce: 4293 cmp r3, r2
  21362. 80094d0: d00e beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21363. 80094d2: 68fb ldr r3, [r7, #12]
  21364. 80094d4: 681b ldr r3, [r3, #0]
  21365. 80094d6: 4a26 ldr r2, [pc, #152] @ (8009570 <DMA_SetConfig+0x250>)
  21366. 80094d8: 4293 cmp r3, r2
  21367. 80094da: d009 beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21368. 80094dc: 68fb ldr r3, [r7, #12]
  21369. 80094de: 681b ldr r3, [r3, #0]
  21370. 80094e0: 4a24 ldr r2, [pc, #144] @ (8009574 <DMA_SetConfig+0x254>)
  21371. 80094e2: 4293 cmp r3, r2
  21372. 80094e4: d004 beq.n 80094f0 <DMA_SetConfig+0x1d0>
  21373. 80094e6: 68fb ldr r3, [r7, #12]
  21374. 80094e8: 681b ldr r3, [r3, #0]
  21375. 80094ea: 4a23 ldr r2, [pc, #140] @ (8009578 <DMA_SetConfig+0x258>)
  21376. 80094ec: 4293 cmp r3, r2
  21377. 80094ee: d101 bne.n 80094f4 <DMA_SetConfig+0x1d4>
  21378. 80094f0: 2301 movs r3, #1
  21379. 80094f2: e000 b.n 80094f6 <DMA_SetConfig+0x1d6>
  21380. 80094f4: 2300 movs r3, #0
  21381. 80094f6: 2b00 cmp r3, #0
  21382. 80094f8: d059 beq.n 80095ae <DMA_SetConfig+0x28e>
  21383. {
  21384. /* Clear all interrupt flags at correct offset within the register */
  21385. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  21386. 80094fa: 68fb ldr r3, [r7, #12]
  21387. 80094fc: 6ddb ldr r3, [r3, #92] @ 0x5c
  21388. 80094fe: f003 031f and.w r3, r3, #31
  21389. 8009502: 223f movs r2, #63 @ 0x3f
  21390. 8009504: 409a lsls r2, r3
  21391. 8009506: 697b ldr r3, [r7, #20]
  21392. 8009508: 609a str r2, [r3, #8]
  21393. /* Clear DBM bit */
  21394. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= (uint32_t)(~DMA_SxCR_DBM);
  21395. 800950a: 68fb ldr r3, [r7, #12]
  21396. 800950c: 681b ldr r3, [r3, #0]
  21397. 800950e: 681a ldr r2, [r3, #0]
  21398. 8009510: 68fb ldr r3, [r7, #12]
  21399. 8009512: 681b ldr r3, [r3, #0]
  21400. 8009514: f422 2280 bic.w r2, r2, #262144 @ 0x40000
  21401. 8009518: 601a str r2, [r3, #0]
  21402. /* Configure DMA Stream data length */
  21403. ((DMA_Stream_TypeDef *)hdma->Instance)->NDTR = DataLength;
  21404. 800951a: 68fb ldr r3, [r7, #12]
  21405. 800951c: 681b ldr r3, [r3, #0]
  21406. 800951e: 683a ldr r2, [r7, #0]
  21407. 8009520: 605a str r2, [r3, #4]
  21408. /* Peripheral to Memory */
  21409. if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH)
  21410. 8009522: 68fb ldr r3, [r7, #12]
  21411. 8009524: 689b ldr r3, [r3, #8]
  21412. 8009526: 2b40 cmp r3, #64 @ 0x40
  21413. 8009528: d138 bne.n 800959c <DMA_SetConfig+0x27c>
  21414. {
  21415. /* Configure DMA Stream destination address */
  21416. ((DMA_Stream_TypeDef *)hdma->Instance)->PAR = DstAddress;
  21417. 800952a: 68fb ldr r3, [r7, #12]
  21418. 800952c: 681b ldr r3, [r3, #0]
  21419. 800952e: 687a ldr r2, [r7, #4]
  21420. 8009530: 609a str r2, [r3, #8]
  21421. /* Configure DMA Stream source address */
  21422. ((DMA_Stream_TypeDef *)hdma->Instance)->M0AR = SrcAddress;
  21423. 8009532: 68fb ldr r3, [r7, #12]
  21424. 8009534: 681b ldr r3, [r3, #0]
  21425. 8009536: 68ba ldr r2, [r7, #8]
  21426. 8009538: 60da str r2, [r3, #12]
  21427. }
  21428. else
  21429. {
  21430. /* Nothing To Do */
  21431. }
  21432. }
  21433. 800953a: e086 b.n 800964a <DMA_SetConfig+0x32a>
  21434. 800953c: 40020010 .word 0x40020010
  21435. 8009540: 40020028 .word 0x40020028
  21436. 8009544: 40020040 .word 0x40020040
  21437. 8009548: 40020058 .word 0x40020058
  21438. 800954c: 40020070 .word 0x40020070
  21439. 8009550: 40020088 .word 0x40020088
  21440. 8009554: 400200a0 .word 0x400200a0
  21441. 8009558: 400200b8 .word 0x400200b8
  21442. 800955c: 40020410 .word 0x40020410
  21443. 8009560: 40020428 .word 0x40020428
  21444. 8009564: 40020440 .word 0x40020440
  21445. 8009568: 40020458 .word 0x40020458
  21446. 800956c: 40020470 .word 0x40020470
  21447. 8009570: 40020488 .word 0x40020488
  21448. 8009574: 400204a0 .word 0x400204a0
  21449. 8009578: 400204b8 .word 0x400204b8
  21450. 800957c: 58025408 .word 0x58025408
  21451. 8009580: 5802541c .word 0x5802541c
  21452. 8009584: 58025430 .word 0x58025430
  21453. 8009588: 58025444 .word 0x58025444
  21454. 800958c: 58025458 .word 0x58025458
  21455. 8009590: 5802546c .word 0x5802546c
  21456. 8009594: 58025480 .word 0x58025480
  21457. 8009598: 58025494 .word 0x58025494
  21458. ((DMA_Stream_TypeDef *)hdma->Instance)->PAR = SrcAddress;
  21459. 800959c: 68fb ldr r3, [r7, #12]
  21460. 800959e: 681b ldr r3, [r3, #0]
  21461. 80095a0: 68ba ldr r2, [r7, #8]
  21462. 80095a2: 609a str r2, [r3, #8]
  21463. ((DMA_Stream_TypeDef *)hdma->Instance)->M0AR = DstAddress;
  21464. 80095a4: 68fb ldr r3, [r7, #12]
  21465. 80095a6: 681b ldr r3, [r3, #0]
  21466. 80095a8: 687a ldr r2, [r7, #4]
  21467. 80095aa: 60da str r2, [r3, #12]
  21468. }
  21469. 80095ac: e04d b.n 800964a <DMA_SetConfig+0x32a>
  21470. else if(IS_BDMA_CHANNEL_INSTANCE(hdma->Instance) != 0U) /* BDMA instance(s) */
  21471. 80095ae: 68fb ldr r3, [r7, #12]
  21472. 80095b0: 681b ldr r3, [r3, #0]
  21473. 80095b2: 4a29 ldr r2, [pc, #164] @ (8009658 <DMA_SetConfig+0x338>)
  21474. 80095b4: 4293 cmp r3, r2
  21475. 80095b6: d022 beq.n 80095fe <DMA_SetConfig+0x2de>
  21476. 80095b8: 68fb ldr r3, [r7, #12]
  21477. 80095ba: 681b ldr r3, [r3, #0]
  21478. 80095bc: 4a27 ldr r2, [pc, #156] @ (800965c <DMA_SetConfig+0x33c>)
  21479. 80095be: 4293 cmp r3, r2
  21480. 80095c0: d01d beq.n 80095fe <DMA_SetConfig+0x2de>
  21481. 80095c2: 68fb ldr r3, [r7, #12]
  21482. 80095c4: 681b ldr r3, [r3, #0]
  21483. 80095c6: 4a26 ldr r2, [pc, #152] @ (8009660 <DMA_SetConfig+0x340>)
  21484. 80095c8: 4293 cmp r3, r2
  21485. 80095ca: d018 beq.n 80095fe <DMA_SetConfig+0x2de>
  21486. 80095cc: 68fb ldr r3, [r7, #12]
  21487. 80095ce: 681b ldr r3, [r3, #0]
  21488. 80095d0: 4a24 ldr r2, [pc, #144] @ (8009664 <DMA_SetConfig+0x344>)
  21489. 80095d2: 4293 cmp r3, r2
  21490. 80095d4: d013 beq.n 80095fe <DMA_SetConfig+0x2de>
  21491. 80095d6: 68fb ldr r3, [r7, #12]
  21492. 80095d8: 681b ldr r3, [r3, #0]
  21493. 80095da: 4a23 ldr r2, [pc, #140] @ (8009668 <DMA_SetConfig+0x348>)
  21494. 80095dc: 4293 cmp r3, r2
  21495. 80095de: d00e beq.n 80095fe <DMA_SetConfig+0x2de>
  21496. 80095e0: 68fb ldr r3, [r7, #12]
  21497. 80095e2: 681b ldr r3, [r3, #0]
  21498. 80095e4: 4a21 ldr r2, [pc, #132] @ (800966c <DMA_SetConfig+0x34c>)
  21499. 80095e6: 4293 cmp r3, r2
  21500. 80095e8: d009 beq.n 80095fe <DMA_SetConfig+0x2de>
  21501. 80095ea: 68fb ldr r3, [r7, #12]
  21502. 80095ec: 681b ldr r3, [r3, #0]
  21503. 80095ee: 4a20 ldr r2, [pc, #128] @ (8009670 <DMA_SetConfig+0x350>)
  21504. 80095f0: 4293 cmp r3, r2
  21505. 80095f2: d004 beq.n 80095fe <DMA_SetConfig+0x2de>
  21506. 80095f4: 68fb ldr r3, [r7, #12]
  21507. 80095f6: 681b ldr r3, [r3, #0]
  21508. 80095f8: 4a1e ldr r2, [pc, #120] @ (8009674 <DMA_SetConfig+0x354>)
  21509. 80095fa: 4293 cmp r3, r2
  21510. 80095fc: d101 bne.n 8009602 <DMA_SetConfig+0x2e2>
  21511. 80095fe: 2301 movs r3, #1
  21512. 8009600: e000 b.n 8009604 <DMA_SetConfig+0x2e4>
  21513. 8009602: 2300 movs r3, #0
  21514. 8009604: 2b00 cmp r3, #0
  21515. 8009606: d020 beq.n 800964a <DMA_SetConfig+0x32a>
  21516. regs_bdma->IFCR = (BDMA_ISR_GIF0) << (hdma->StreamIndex & 0x1FU);
  21517. 8009608: 68fb ldr r3, [r7, #12]
  21518. 800960a: 6ddb ldr r3, [r3, #92] @ 0x5c
  21519. 800960c: f003 031f and.w r3, r3, #31
  21520. 8009610: 2201 movs r2, #1
  21521. 8009612: 409a lsls r2, r3
  21522. 8009614: 693b ldr r3, [r7, #16]
  21523. 8009616: 605a str r2, [r3, #4]
  21524. ((BDMA_Channel_TypeDef *)hdma->Instance)->CNDTR = DataLength;
  21525. 8009618: 68fb ldr r3, [r7, #12]
  21526. 800961a: 681b ldr r3, [r3, #0]
  21527. 800961c: 683a ldr r2, [r7, #0]
  21528. 800961e: 605a str r2, [r3, #4]
  21529. if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH)
  21530. 8009620: 68fb ldr r3, [r7, #12]
  21531. 8009622: 689b ldr r3, [r3, #8]
  21532. 8009624: 2b40 cmp r3, #64 @ 0x40
  21533. 8009626: d108 bne.n 800963a <DMA_SetConfig+0x31a>
  21534. ((BDMA_Channel_TypeDef *)hdma->Instance)->CPAR = DstAddress;
  21535. 8009628: 68fb ldr r3, [r7, #12]
  21536. 800962a: 681b ldr r3, [r3, #0]
  21537. 800962c: 687a ldr r2, [r7, #4]
  21538. 800962e: 609a str r2, [r3, #8]
  21539. ((BDMA_Channel_TypeDef *)hdma->Instance)->CM0AR = SrcAddress;
  21540. 8009630: 68fb ldr r3, [r7, #12]
  21541. 8009632: 681b ldr r3, [r3, #0]
  21542. 8009634: 68ba ldr r2, [r7, #8]
  21543. 8009636: 60da str r2, [r3, #12]
  21544. }
  21545. 8009638: e007 b.n 800964a <DMA_SetConfig+0x32a>
  21546. ((BDMA_Channel_TypeDef *)hdma->Instance)->CPAR = SrcAddress;
  21547. 800963a: 68fb ldr r3, [r7, #12]
  21548. 800963c: 681b ldr r3, [r3, #0]
  21549. 800963e: 68ba ldr r2, [r7, #8]
  21550. 8009640: 609a str r2, [r3, #8]
  21551. ((BDMA_Channel_TypeDef *)hdma->Instance)->CM0AR = DstAddress;
  21552. 8009642: 68fb ldr r3, [r7, #12]
  21553. 8009644: 681b ldr r3, [r3, #0]
  21554. 8009646: 687a ldr r2, [r7, #4]
  21555. 8009648: 60da str r2, [r3, #12]
  21556. }
  21557. 800964a: bf00 nop
  21558. 800964c: 371c adds r7, #28
  21559. 800964e: 46bd mov sp, r7
  21560. 8009650: f85d 7b04 ldr.w r7, [sp], #4
  21561. 8009654: 4770 bx lr
  21562. 8009656: bf00 nop
  21563. 8009658: 58025408 .word 0x58025408
  21564. 800965c: 5802541c .word 0x5802541c
  21565. 8009660: 58025430 .word 0x58025430
  21566. 8009664: 58025444 .word 0x58025444
  21567. 8009668: 58025458 .word 0x58025458
  21568. 800966c: 5802546c .word 0x5802546c
  21569. 8009670: 58025480 .word 0x58025480
  21570. 8009674: 58025494 .word 0x58025494
  21571. 08009678 <DMA_CalcBaseAndBitshift>:
  21572. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  21573. * the configuration information for the specified DMA Stream.
  21574. * @retval Stream base address
  21575. */
  21576. static uint32_t DMA_CalcBaseAndBitshift(DMA_HandleTypeDef *hdma)
  21577. {
  21578. 8009678: b480 push {r7}
  21579. 800967a: b085 sub sp, #20
  21580. 800967c: af00 add r7, sp, #0
  21581. 800967e: 6078 str r0, [r7, #4]
  21582. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  21583. 8009680: 687b ldr r3, [r7, #4]
  21584. 8009682: 681b ldr r3, [r3, #0]
  21585. 8009684: 4a42 ldr r2, [pc, #264] @ (8009790 <DMA_CalcBaseAndBitshift+0x118>)
  21586. 8009686: 4293 cmp r3, r2
  21587. 8009688: d04a beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21588. 800968a: 687b ldr r3, [r7, #4]
  21589. 800968c: 681b ldr r3, [r3, #0]
  21590. 800968e: 4a41 ldr r2, [pc, #260] @ (8009794 <DMA_CalcBaseAndBitshift+0x11c>)
  21591. 8009690: 4293 cmp r3, r2
  21592. 8009692: d045 beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21593. 8009694: 687b ldr r3, [r7, #4]
  21594. 8009696: 681b ldr r3, [r3, #0]
  21595. 8009698: 4a3f ldr r2, [pc, #252] @ (8009798 <DMA_CalcBaseAndBitshift+0x120>)
  21596. 800969a: 4293 cmp r3, r2
  21597. 800969c: d040 beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21598. 800969e: 687b ldr r3, [r7, #4]
  21599. 80096a0: 681b ldr r3, [r3, #0]
  21600. 80096a2: 4a3e ldr r2, [pc, #248] @ (800979c <DMA_CalcBaseAndBitshift+0x124>)
  21601. 80096a4: 4293 cmp r3, r2
  21602. 80096a6: d03b beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21603. 80096a8: 687b ldr r3, [r7, #4]
  21604. 80096aa: 681b ldr r3, [r3, #0]
  21605. 80096ac: 4a3c ldr r2, [pc, #240] @ (80097a0 <DMA_CalcBaseAndBitshift+0x128>)
  21606. 80096ae: 4293 cmp r3, r2
  21607. 80096b0: d036 beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21608. 80096b2: 687b ldr r3, [r7, #4]
  21609. 80096b4: 681b ldr r3, [r3, #0]
  21610. 80096b6: 4a3b ldr r2, [pc, #236] @ (80097a4 <DMA_CalcBaseAndBitshift+0x12c>)
  21611. 80096b8: 4293 cmp r3, r2
  21612. 80096ba: d031 beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21613. 80096bc: 687b ldr r3, [r7, #4]
  21614. 80096be: 681b ldr r3, [r3, #0]
  21615. 80096c0: 4a39 ldr r2, [pc, #228] @ (80097a8 <DMA_CalcBaseAndBitshift+0x130>)
  21616. 80096c2: 4293 cmp r3, r2
  21617. 80096c4: d02c beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21618. 80096c6: 687b ldr r3, [r7, #4]
  21619. 80096c8: 681b ldr r3, [r3, #0]
  21620. 80096ca: 4a38 ldr r2, [pc, #224] @ (80097ac <DMA_CalcBaseAndBitshift+0x134>)
  21621. 80096cc: 4293 cmp r3, r2
  21622. 80096ce: d027 beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21623. 80096d0: 687b ldr r3, [r7, #4]
  21624. 80096d2: 681b ldr r3, [r3, #0]
  21625. 80096d4: 4a36 ldr r2, [pc, #216] @ (80097b0 <DMA_CalcBaseAndBitshift+0x138>)
  21626. 80096d6: 4293 cmp r3, r2
  21627. 80096d8: d022 beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21628. 80096da: 687b ldr r3, [r7, #4]
  21629. 80096dc: 681b ldr r3, [r3, #0]
  21630. 80096de: 4a35 ldr r2, [pc, #212] @ (80097b4 <DMA_CalcBaseAndBitshift+0x13c>)
  21631. 80096e0: 4293 cmp r3, r2
  21632. 80096e2: d01d beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21633. 80096e4: 687b ldr r3, [r7, #4]
  21634. 80096e6: 681b ldr r3, [r3, #0]
  21635. 80096e8: 4a33 ldr r2, [pc, #204] @ (80097b8 <DMA_CalcBaseAndBitshift+0x140>)
  21636. 80096ea: 4293 cmp r3, r2
  21637. 80096ec: d018 beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21638. 80096ee: 687b ldr r3, [r7, #4]
  21639. 80096f0: 681b ldr r3, [r3, #0]
  21640. 80096f2: 4a32 ldr r2, [pc, #200] @ (80097bc <DMA_CalcBaseAndBitshift+0x144>)
  21641. 80096f4: 4293 cmp r3, r2
  21642. 80096f6: d013 beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21643. 80096f8: 687b ldr r3, [r7, #4]
  21644. 80096fa: 681b ldr r3, [r3, #0]
  21645. 80096fc: 4a30 ldr r2, [pc, #192] @ (80097c0 <DMA_CalcBaseAndBitshift+0x148>)
  21646. 80096fe: 4293 cmp r3, r2
  21647. 8009700: d00e beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21648. 8009702: 687b ldr r3, [r7, #4]
  21649. 8009704: 681b ldr r3, [r3, #0]
  21650. 8009706: 4a2f ldr r2, [pc, #188] @ (80097c4 <DMA_CalcBaseAndBitshift+0x14c>)
  21651. 8009708: 4293 cmp r3, r2
  21652. 800970a: d009 beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21653. 800970c: 687b ldr r3, [r7, #4]
  21654. 800970e: 681b ldr r3, [r3, #0]
  21655. 8009710: 4a2d ldr r2, [pc, #180] @ (80097c8 <DMA_CalcBaseAndBitshift+0x150>)
  21656. 8009712: 4293 cmp r3, r2
  21657. 8009714: d004 beq.n 8009720 <DMA_CalcBaseAndBitshift+0xa8>
  21658. 8009716: 687b ldr r3, [r7, #4]
  21659. 8009718: 681b ldr r3, [r3, #0]
  21660. 800971a: 4a2c ldr r2, [pc, #176] @ (80097cc <DMA_CalcBaseAndBitshift+0x154>)
  21661. 800971c: 4293 cmp r3, r2
  21662. 800971e: d101 bne.n 8009724 <DMA_CalcBaseAndBitshift+0xac>
  21663. 8009720: 2301 movs r3, #1
  21664. 8009722: e000 b.n 8009726 <DMA_CalcBaseAndBitshift+0xae>
  21665. 8009724: 2300 movs r3, #0
  21666. 8009726: 2b00 cmp r3, #0
  21667. 8009728: d024 beq.n 8009774 <DMA_CalcBaseAndBitshift+0xfc>
  21668. {
  21669. uint32_t stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 16U) / 24U;
  21670. 800972a: 687b ldr r3, [r7, #4]
  21671. 800972c: 681b ldr r3, [r3, #0]
  21672. 800972e: b2db uxtb r3, r3
  21673. 8009730: 3b10 subs r3, #16
  21674. 8009732: 4a27 ldr r2, [pc, #156] @ (80097d0 <DMA_CalcBaseAndBitshift+0x158>)
  21675. 8009734: fba2 2303 umull r2, r3, r2, r3
  21676. 8009738: 091b lsrs r3, r3, #4
  21677. 800973a: 60fb str r3, [r7, #12]
  21678. /* lookup table for necessary bitshift of flags within status registers */
  21679. static const uint8_t flagBitshiftOffset[8U] = {0U, 6U, 16U, 22U, 0U, 6U, 16U, 22U};
  21680. hdma->StreamIndex = flagBitshiftOffset[stream_number & 0x7U];
  21681. 800973c: 68fb ldr r3, [r7, #12]
  21682. 800973e: f003 0307 and.w r3, r3, #7
  21683. 8009742: 4a24 ldr r2, [pc, #144] @ (80097d4 <DMA_CalcBaseAndBitshift+0x15c>)
  21684. 8009744: 5cd3 ldrb r3, [r2, r3]
  21685. 8009746: 461a mov r2, r3
  21686. 8009748: 687b ldr r3, [r7, #4]
  21687. 800974a: 65da str r2, [r3, #92] @ 0x5c
  21688. if (stream_number > 3U)
  21689. 800974c: 68fb ldr r3, [r7, #12]
  21690. 800974e: 2b03 cmp r3, #3
  21691. 8009750: d908 bls.n 8009764 <DMA_CalcBaseAndBitshift+0xec>
  21692. {
  21693. /* return pointer to HISR and HIFCR */
  21694. hdma->StreamBaseAddress = (((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0x3FFU)) + 4U);
  21695. 8009752: 687b ldr r3, [r7, #4]
  21696. 8009754: 681b ldr r3, [r3, #0]
  21697. 8009756: 461a mov r2, r3
  21698. 8009758: 4b1f ldr r3, [pc, #124] @ (80097d8 <DMA_CalcBaseAndBitshift+0x160>)
  21699. 800975a: 4013 ands r3, r2
  21700. 800975c: 1d1a adds r2, r3, #4
  21701. 800975e: 687b ldr r3, [r7, #4]
  21702. 8009760: 659a str r2, [r3, #88] @ 0x58
  21703. 8009762: e00d b.n 8009780 <DMA_CalcBaseAndBitshift+0x108>
  21704. }
  21705. else
  21706. {
  21707. /* return pointer to LISR and LIFCR */
  21708. hdma->StreamBaseAddress = ((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0x3FFU));
  21709. 8009764: 687b ldr r3, [r7, #4]
  21710. 8009766: 681b ldr r3, [r3, #0]
  21711. 8009768: 461a mov r2, r3
  21712. 800976a: 4b1b ldr r3, [pc, #108] @ (80097d8 <DMA_CalcBaseAndBitshift+0x160>)
  21713. 800976c: 4013 ands r3, r2
  21714. 800976e: 687a ldr r2, [r7, #4]
  21715. 8009770: 6593 str r3, [r2, #88] @ 0x58
  21716. 8009772: e005 b.n 8009780 <DMA_CalcBaseAndBitshift+0x108>
  21717. }
  21718. }
  21719. else /* BDMA instance(s) */
  21720. {
  21721. /* return pointer to ISR and IFCR */
  21722. hdma->StreamBaseAddress = ((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0xFFU));
  21723. 8009774: 687b ldr r3, [r7, #4]
  21724. 8009776: 681b ldr r3, [r3, #0]
  21725. 8009778: f023 02ff bic.w r2, r3, #255 @ 0xff
  21726. 800977c: 687b ldr r3, [r7, #4]
  21727. 800977e: 659a str r2, [r3, #88] @ 0x58
  21728. }
  21729. return hdma->StreamBaseAddress;
  21730. 8009780: 687b ldr r3, [r7, #4]
  21731. 8009782: 6d9b ldr r3, [r3, #88] @ 0x58
  21732. }
  21733. 8009784: 4618 mov r0, r3
  21734. 8009786: 3714 adds r7, #20
  21735. 8009788: 46bd mov sp, r7
  21736. 800978a: f85d 7b04 ldr.w r7, [sp], #4
  21737. 800978e: 4770 bx lr
  21738. 8009790: 40020010 .word 0x40020010
  21739. 8009794: 40020028 .word 0x40020028
  21740. 8009798: 40020040 .word 0x40020040
  21741. 800979c: 40020058 .word 0x40020058
  21742. 80097a0: 40020070 .word 0x40020070
  21743. 80097a4: 40020088 .word 0x40020088
  21744. 80097a8: 400200a0 .word 0x400200a0
  21745. 80097ac: 400200b8 .word 0x400200b8
  21746. 80097b0: 40020410 .word 0x40020410
  21747. 80097b4: 40020428 .word 0x40020428
  21748. 80097b8: 40020440 .word 0x40020440
  21749. 80097bc: 40020458 .word 0x40020458
  21750. 80097c0: 40020470 .word 0x40020470
  21751. 80097c4: 40020488 .word 0x40020488
  21752. 80097c8: 400204a0 .word 0x400204a0
  21753. 80097cc: 400204b8 .word 0x400204b8
  21754. 80097d0: aaaaaaab .word 0xaaaaaaab
  21755. 80097d4: 080175d8 .word 0x080175d8
  21756. 80097d8: fffffc00 .word 0xfffffc00
  21757. 080097dc <DMA_CheckFifoParam>:
  21758. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  21759. * the configuration information for the specified DMA Stream.
  21760. * @retval HAL status
  21761. */
  21762. static HAL_StatusTypeDef DMA_CheckFifoParam(DMA_HandleTypeDef *hdma)
  21763. {
  21764. 80097dc: b480 push {r7}
  21765. 80097de: b085 sub sp, #20
  21766. 80097e0: af00 add r7, sp, #0
  21767. 80097e2: 6078 str r0, [r7, #4]
  21768. HAL_StatusTypeDef status = HAL_OK;
  21769. 80097e4: 2300 movs r3, #0
  21770. 80097e6: 73fb strb r3, [r7, #15]
  21771. /* Memory Data size equal to Byte */
  21772. if (hdma->Init.MemDataAlignment == DMA_MDATAALIGN_BYTE)
  21773. 80097e8: 687b ldr r3, [r7, #4]
  21774. 80097ea: 699b ldr r3, [r3, #24]
  21775. 80097ec: 2b00 cmp r3, #0
  21776. 80097ee: d120 bne.n 8009832 <DMA_CheckFifoParam+0x56>
  21777. {
  21778. switch (hdma->Init.FIFOThreshold)
  21779. 80097f0: 687b ldr r3, [r7, #4]
  21780. 80097f2: 6a9b ldr r3, [r3, #40] @ 0x28
  21781. 80097f4: 2b03 cmp r3, #3
  21782. 80097f6: d858 bhi.n 80098aa <DMA_CheckFifoParam+0xce>
  21783. 80097f8: a201 add r2, pc, #4 @ (adr r2, 8009800 <DMA_CheckFifoParam+0x24>)
  21784. 80097fa: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  21785. 80097fe: bf00 nop
  21786. 8009800: 08009811 .word 0x08009811
  21787. 8009804: 08009823 .word 0x08009823
  21788. 8009808: 08009811 .word 0x08009811
  21789. 800980c: 080098ab .word 0x080098ab
  21790. {
  21791. case DMA_FIFO_THRESHOLD_1QUARTERFULL:
  21792. case DMA_FIFO_THRESHOLD_3QUARTERSFULL:
  21793. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  21794. 8009810: 687b ldr r3, [r7, #4]
  21795. 8009812: 6adb ldr r3, [r3, #44] @ 0x2c
  21796. 8009814: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  21797. 8009818: 2b00 cmp r3, #0
  21798. 800981a: d048 beq.n 80098ae <DMA_CheckFifoParam+0xd2>
  21799. {
  21800. status = HAL_ERROR;
  21801. 800981c: 2301 movs r3, #1
  21802. 800981e: 73fb strb r3, [r7, #15]
  21803. }
  21804. break;
  21805. 8009820: e045 b.n 80098ae <DMA_CheckFifoParam+0xd2>
  21806. case DMA_FIFO_THRESHOLD_HALFFULL:
  21807. if (hdma->Init.MemBurst == DMA_MBURST_INC16)
  21808. 8009822: 687b ldr r3, [r7, #4]
  21809. 8009824: 6adb ldr r3, [r3, #44] @ 0x2c
  21810. 8009826: f1b3 7fc0 cmp.w r3, #25165824 @ 0x1800000
  21811. 800982a: d142 bne.n 80098b2 <DMA_CheckFifoParam+0xd6>
  21812. {
  21813. status = HAL_ERROR;
  21814. 800982c: 2301 movs r3, #1
  21815. 800982e: 73fb strb r3, [r7, #15]
  21816. }
  21817. break;
  21818. 8009830: e03f b.n 80098b2 <DMA_CheckFifoParam+0xd6>
  21819. break;
  21820. }
  21821. }
  21822. /* Memory Data size equal to Half-Word */
  21823. else if (hdma->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD)
  21824. 8009832: 687b ldr r3, [r7, #4]
  21825. 8009834: 699b ldr r3, [r3, #24]
  21826. 8009836: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  21827. 800983a: d123 bne.n 8009884 <DMA_CheckFifoParam+0xa8>
  21828. {
  21829. switch (hdma->Init.FIFOThreshold)
  21830. 800983c: 687b ldr r3, [r7, #4]
  21831. 800983e: 6a9b ldr r3, [r3, #40] @ 0x28
  21832. 8009840: 2b03 cmp r3, #3
  21833. 8009842: d838 bhi.n 80098b6 <DMA_CheckFifoParam+0xda>
  21834. 8009844: a201 add r2, pc, #4 @ (adr r2, 800984c <DMA_CheckFifoParam+0x70>)
  21835. 8009846: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  21836. 800984a: bf00 nop
  21837. 800984c: 0800985d .word 0x0800985d
  21838. 8009850: 08009863 .word 0x08009863
  21839. 8009854: 0800985d .word 0x0800985d
  21840. 8009858: 08009875 .word 0x08009875
  21841. {
  21842. case DMA_FIFO_THRESHOLD_1QUARTERFULL:
  21843. case DMA_FIFO_THRESHOLD_3QUARTERSFULL:
  21844. status = HAL_ERROR;
  21845. 800985c: 2301 movs r3, #1
  21846. 800985e: 73fb strb r3, [r7, #15]
  21847. break;
  21848. 8009860: e030 b.n 80098c4 <DMA_CheckFifoParam+0xe8>
  21849. case DMA_FIFO_THRESHOLD_HALFFULL:
  21850. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  21851. 8009862: 687b ldr r3, [r7, #4]
  21852. 8009864: 6adb ldr r3, [r3, #44] @ 0x2c
  21853. 8009866: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  21854. 800986a: 2b00 cmp r3, #0
  21855. 800986c: d025 beq.n 80098ba <DMA_CheckFifoParam+0xde>
  21856. {
  21857. status = HAL_ERROR;
  21858. 800986e: 2301 movs r3, #1
  21859. 8009870: 73fb strb r3, [r7, #15]
  21860. }
  21861. break;
  21862. 8009872: e022 b.n 80098ba <DMA_CheckFifoParam+0xde>
  21863. case DMA_FIFO_THRESHOLD_FULL:
  21864. if (hdma->Init.MemBurst == DMA_MBURST_INC16)
  21865. 8009874: 687b ldr r3, [r7, #4]
  21866. 8009876: 6adb ldr r3, [r3, #44] @ 0x2c
  21867. 8009878: f1b3 7fc0 cmp.w r3, #25165824 @ 0x1800000
  21868. 800987c: d11f bne.n 80098be <DMA_CheckFifoParam+0xe2>
  21869. {
  21870. status = HAL_ERROR;
  21871. 800987e: 2301 movs r3, #1
  21872. 8009880: 73fb strb r3, [r7, #15]
  21873. }
  21874. break;
  21875. 8009882: e01c b.n 80098be <DMA_CheckFifoParam+0xe2>
  21876. }
  21877. /* Memory Data size equal to Word */
  21878. else
  21879. {
  21880. switch (hdma->Init.FIFOThreshold)
  21881. 8009884: 687b ldr r3, [r7, #4]
  21882. 8009886: 6a9b ldr r3, [r3, #40] @ 0x28
  21883. 8009888: 2b02 cmp r3, #2
  21884. 800988a: d902 bls.n 8009892 <DMA_CheckFifoParam+0xb6>
  21885. 800988c: 2b03 cmp r3, #3
  21886. 800988e: d003 beq.n 8009898 <DMA_CheckFifoParam+0xbc>
  21887. status = HAL_ERROR;
  21888. }
  21889. break;
  21890. default:
  21891. break;
  21892. 8009890: e018 b.n 80098c4 <DMA_CheckFifoParam+0xe8>
  21893. status = HAL_ERROR;
  21894. 8009892: 2301 movs r3, #1
  21895. 8009894: 73fb strb r3, [r7, #15]
  21896. break;
  21897. 8009896: e015 b.n 80098c4 <DMA_CheckFifoParam+0xe8>
  21898. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  21899. 8009898: 687b ldr r3, [r7, #4]
  21900. 800989a: 6adb ldr r3, [r3, #44] @ 0x2c
  21901. 800989c: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  21902. 80098a0: 2b00 cmp r3, #0
  21903. 80098a2: d00e beq.n 80098c2 <DMA_CheckFifoParam+0xe6>
  21904. status = HAL_ERROR;
  21905. 80098a4: 2301 movs r3, #1
  21906. 80098a6: 73fb strb r3, [r7, #15]
  21907. break;
  21908. 80098a8: e00b b.n 80098c2 <DMA_CheckFifoParam+0xe6>
  21909. break;
  21910. 80098aa: bf00 nop
  21911. 80098ac: e00a b.n 80098c4 <DMA_CheckFifoParam+0xe8>
  21912. break;
  21913. 80098ae: bf00 nop
  21914. 80098b0: e008 b.n 80098c4 <DMA_CheckFifoParam+0xe8>
  21915. break;
  21916. 80098b2: bf00 nop
  21917. 80098b4: e006 b.n 80098c4 <DMA_CheckFifoParam+0xe8>
  21918. break;
  21919. 80098b6: bf00 nop
  21920. 80098b8: e004 b.n 80098c4 <DMA_CheckFifoParam+0xe8>
  21921. break;
  21922. 80098ba: bf00 nop
  21923. 80098bc: e002 b.n 80098c4 <DMA_CheckFifoParam+0xe8>
  21924. break;
  21925. 80098be: bf00 nop
  21926. 80098c0: e000 b.n 80098c4 <DMA_CheckFifoParam+0xe8>
  21927. break;
  21928. 80098c2: bf00 nop
  21929. }
  21930. }
  21931. return status;
  21932. 80098c4: 7bfb ldrb r3, [r7, #15]
  21933. }
  21934. 80098c6: 4618 mov r0, r3
  21935. 80098c8: 3714 adds r7, #20
  21936. 80098ca: 46bd mov sp, r7
  21937. 80098cc: f85d 7b04 ldr.w r7, [sp], #4
  21938. 80098d0: 4770 bx lr
  21939. 80098d2: bf00 nop
  21940. 080098d4 <DMA_CalcDMAMUXChannelBaseAndMask>:
  21941. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  21942. * the configuration information for the specified DMA Stream.
  21943. * @retval HAL status
  21944. */
  21945. static void DMA_CalcDMAMUXChannelBaseAndMask(DMA_HandleTypeDef *hdma)
  21946. {
  21947. 80098d4: b480 push {r7}
  21948. 80098d6: b085 sub sp, #20
  21949. 80098d8: af00 add r7, sp, #0
  21950. 80098da: 6078 str r0, [r7, #4]
  21951. uint32_t stream_number;
  21952. uint32_t stream_baseaddress = (uint32_t)((uint32_t*)hdma->Instance);
  21953. 80098dc: 687b ldr r3, [r7, #4]
  21954. 80098de: 681b ldr r3, [r3, #0]
  21955. 80098e0: 60bb str r3, [r7, #8]
  21956. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  21957. 80098e2: 687b ldr r3, [r7, #4]
  21958. 80098e4: 681b ldr r3, [r3, #0]
  21959. 80098e6: 4a38 ldr r2, [pc, #224] @ (80099c8 <DMA_CalcDMAMUXChannelBaseAndMask+0xf4>)
  21960. 80098e8: 4293 cmp r3, r2
  21961. 80098ea: d022 beq.n 8009932 <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  21962. 80098ec: 687b ldr r3, [r7, #4]
  21963. 80098ee: 681b ldr r3, [r3, #0]
  21964. 80098f0: 4a36 ldr r2, [pc, #216] @ (80099cc <DMA_CalcDMAMUXChannelBaseAndMask+0xf8>)
  21965. 80098f2: 4293 cmp r3, r2
  21966. 80098f4: d01d beq.n 8009932 <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  21967. 80098f6: 687b ldr r3, [r7, #4]
  21968. 80098f8: 681b ldr r3, [r3, #0]
  21969. 80098fa: 4a35 ldr r2, [pc, #212] @ (80099d0 <DMA_CalcDMAMUXChannelBaseAndMask+0xfc>)
  21970. 80098fc: 4293 cmp r3, r2
  21971. 80098fe: d018 beq.n 8009932 <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  21972. 8009900: 687b ldr r3, [r7, #4]
  21973. 8009902: 681b ldr r3, [r3, #0]
  21974. 8009904: 4a33 ldr r2, [pc, #204] @ (80099d4 <DMA_CalcDMAMUXChannelBaseAndMask+0x100>)
  21975. 8009906: 4293 cmp r3, r2
  21976. 8009908: d013 beq.n 8009932 <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  21977. 800990a: 687b ldr r3, [r7, #4]
  21978. 800990c: 681b ldr r3, [r3, #0]
  21979. 800990e: 4a32 ldr r2, [pc, #200] @ (80099d8 <DMA_CalcDMAMUXChannelBaseAndMask+0x104>)
  21980. 8009910: 4293 cmp r3, r2
  21981. 8009912: d00e beq.n 8009932 <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  21982. 8009914: 687b ldr r3, [r7, #4]
  21983. 8009916: 681b ldr r3, [r3, #0]
  21984. 8009918: 4a30 ldr r2, [pc, #192] @ (80099dc <DMA_CalcDMAMUXChannelBaseAndMask+0x108>)
  21985. 800991a: 4293 cmp r3, r2
  21986. 800991c: d009 beq.n 8009932 <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  21987. 800991e: 687b ldr r3, [r7, #4]
  21988. 8009920: 681b ldr r3, [r3, #0]
  21989. 8009922: 4a2f ldr r2, [pc, #188] @ (80099e0 <DMA_CalcDMAMUXChannelBaseAndMask+0x10c>)
  21990. 8009924: 4293 cmp r3, r2
  21991. 8009926: d004 beq.n 8009932 <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  21992. 8009928: 687b ldr r3, [r7, #4]
  21993. 800992a: 681b ldr r3, [r3, #0]
  21994. 800992c: 4a2d ldr r2, [pc, #180] @ (80099e4 <DMA_CalcDMAMUXChannelBaseAndMask+0x110>)
  21995. 800992e: 4293 cmp r3, r2
  21996. 8009930: d101 bne.n 8009936 <DMA_CalcDMAMUXChannelBaseAndMask+0x62>
  21997. 8009932: 2301 movs r3, #1
  21998. 8009934: e000 b.n 8009938 <DMA_CalcDMAMUXChannelBaseAndMask+0x64>
  21999. 8009936: 2300 movs r3, #0
  22000. 8009938: 2b00 cmp r3, #0
  22001. 800993a: d01a beq.n 8009972 <DMA_CalcDMAMUXChannelBaseAndMask+0x9e>
  22002. {
  22003. /* BDMA Channels are connected to DMAMUX2 channels */
  22004. stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 8U) / 20U;
  22005. 800993c: 687b ldr r3, [r7, #4]
  22006. 800993e: 681b ldr r3, [r3, #0]
  22007. 8009940: b2db uxtb r3, r3
  22008. 8009942: 3b08 subs r3, #8
  22009. 8009944: 4a28 ldr r2, [pc, #160] @ (80099e8 <DMA_CalcDMAMUXChannelBaseAndMask+0x114>)
  22010. 8009946: fba2 2303 umull r2, r3, r2, r3
  22011. 800994a: 091b lsrs r3, r3, #4
  22012. 800994c: 60fb str r3, [r7, #12]
  22013. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX2_Channel0) + (stream_number * 4U)));
  22014. 800994e: 68fa ldr r2, [r7, #12]
  22015. 8009950: 4b26 ldr r3, [pc, #152] @ (80099ec <DMA_CalcDMAMUXChannelBaseAndMask+0x118>)
  22016. 8009952: 4413 add r3, r2
  22017. 8009954: 009b lsls r3, r3, #2
  22018. 8009956: 461a mov r2, r3
  22019. 8009958: 687b ldr r3, [r7, #4]
  22020. 800995a: 661a str r2, [r3, #96] @ 0x60
  22021. hdma->DMAmuxChannelStatus = DMAMUX2_ChannelStatus;
  22022. 800995c: 687b ldr r3, [r7, #4]
  22023. 800995e: 4a24 ldr r2, [pc, #144] @ (80099f0 <DMA_CalcDMAMUXChannelBaseAndMask+0x11c>)
  22024. 8009960: 665a str r2, [r3, #100] @ 0x64
  22025. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  22026. 8009962: 68fb ldr r3, [r7, #12]
  22027. 8009964: f003 031f and.w r3, r3, #31
  22028. 8009968: 2201 movs r2, #1
  22029. 800996a: 409a lsls r2, r3
  22030. 800996c: 687b ldr r3, [r7, #4]
  22031. 800996e: 669a str r2, [r3, #104] @ 0x68
  22032. }
  22033. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_Channel0) + (stream_number * 4U)));
  22034. hdma->DMAmuxChannelStatus = DMAMUX1_ChannelStatus;
  22035. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  22036. }
  22037. }
  22038. 8009970: e024 b.n 80099bc <DMA_CalcDMAMUXChannelBaseAndMask+0xe8>
  22039. stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 16U) / 24U;
  22040. 8009972: 687b ldr r3, [r7, #4]
  22041. 8009974: 681b ldr r3, [r3, #0]
  22042. 8009976: b2db uxtb r3, r3
  22043. 8009978: 3b10 subs r3, #16
  22044. 800997a: 4a1e ldr r2, [pc, #120] @ (80099f4 <DMA_CalcDMAMUXChannelBaseAndMask+0x120>)
  22045. 800997c: fba2 2303 umull r2, r3, r2, r3
  22046. 8009980: 091b lsrs r3, r3, #4
  22047. 8009982: 60fb str r3, [r7, #12]
  22048. if((stream_baseaddress <= ((uint32_t)DMA2_Stream7) ) && \
  22049. 8009984: 68bb ldr r3, [r7, #8]
  22050. 8009986: 4a1c ldr r2, [pc, #112] @ (80099f8 <DMA_CalcDMAMUXChannelBaseAndMask+0x124>)
  22051. 8009988: 4293 cmp r3, r2
  22052. 800998a: d806 bhi.n 800999a <DMA_CalcDMAMUXChannelBaseAndMask+0xc6>
  22053. 800998c: 68bb ldr r3, [r7, #8]
  22054. 800998e: 4a1b ldr r2, [pc, #108] @ (80099fc <DMA_CalcDMAMUXChannelBaseAndMask+0x128>)
  22055. 8009990: 4293 cmp r3, r2
  22056. 8009992: d902 bls.n 800999a <DMA_CalcDMAMUXChannelBaseAndMask+0xc6>
  22057. stream_number += 8U;
  22058. 8009994: 68fb ldr r3, [r7, #12]
  22059. 8009996: 3308 adds r3, #8
  22060. 8009998: 60fb str r3, [r7, #12]
  22061. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_Channel0) + (stream_number * 4U)));
  22062. 800999a: 68fa ldr r2, [r7, #12]
  22063. 800999c: 4b18 ldr r3, [pc, #96] @ (8009a00 <DMA_CalcDMAMUXChannelBaseAndMask+0x12c>)
  22064. 800999e: 4413 add r3, r2
  22065. 80099a0: 009b lsls r3, r3, #2
  22066. 80099a2: 461a mov r2, r3
  22067. 80099a4: 687b ldr r3, [r7, #4]
  22068. 80099a6: 661a str r2, [r3, #96] @ 0x60
  22069. hdma->DMAmuxChannelStatus = DMAMUX1_ChannelStatus;
  22070. 80099a8: 687b ldr r3, [r7, #4]
  22071. 80099aa: 4a16 ldr r2, [pc, #88] @ (8009a04 <DMA_CalcDMAMUXChannelBaseAndMask+0x130>)
  22072. 80099ac: 665a str r2, [r3, #100] @ 0x64
  22073. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  22074. 80099ae: 68fb ldr r3, [r7, #12]
  22075. 80099b0: f003 031f and.w r3, r3, #31
  22076. 80099b4: 2201 movs r2, #1
  22077. 80099b6: 409a lsls r2, r3
  22078. 80099b8: 687b ldr r3, [r7, #4]
  22079. 80099ba: 669a str r2, [r3, #104] @ 0x68
  22080. }
  22081. 80099bc: bf00 nop
  22082. 80099be: 3714 adds r7, #20
  22083. 80099c0: 46bd mov sp, r7
  22084. 80099c2: f85d 7b04 ldr.w r7, [sp], #4
  22085. 80099c6: 4770 bx lr
  22086. 80099c8: 58025408 .word 0x58025408
  22087. 80099cc: 5802541c .word 0x5802541c
  22088. 80099d0: 58025430 .word 0x58025430
  22089. 80099d4: 58025444 .word 0x58025444
  22090. 80099d8: 58025458 .word 0x58025458
  22091. 80099dc: 5802546c .word 0x5802546c
  22092. 80099e0: 58025480 .word 0x58025480
  22093. 80099e4: 58025494 .word 0x58025494
  22094. 80099e8: cccccccd .word 0xcccccccd
  22095. 80099ec: 16009600 .word 0x16009600
  22096. 80099f0: 58025880 .word 0x58025880
  22097. 80099f4: aaaaaaab .word 0xaaaaaaab
  22098. 80099f8: 400204b8 .word 0x400204b8
  22099. 80099fc: 4002040f .word 0x4002040f
  22100. 8009a00: 10008200 .word 0x10008200
  22101. 8009a04: 40020880 .word 0x40020880
  22102. 08009a08 <DMA_CalcDMAMUXRequestGenBaseAndMask>:
  22103. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  22104. * the configuration information for the specified DMA Stream.
  22105. * @retval HAL status
  22106. */
  22107. static void DMA_CalcDMAMUXRequestGenBaseAndMask(DMA_HandleTypeDef *hdma)
  22108. {
  22109. 8009a08: b480 push {r7}
  22110. 8009a0a: b085 sub sp, #20
  22111. 8009a0c: af00 add r7, sp, #0
  22112. 8009a0e: 6078 str r0, [r7, #4]
  22113. uint32_t request = hdma->Init.Request & DMAMUX_CxCR_DMAREQ_ID;
  22114. 8009a10: 687b ldr r3, [r7, #4]
  22115. 8009a12: 685b ldr r3, [r3, #4]
  22116. 8009a14: b2db uxtb r3, r3
  22117. 8009a16: 60fb str r3, [r7, #12]
  22118. if((request >= DMA_REQUEST_GENERATOR0) && (request <= DMA_REQUEST_GENERATOR7))
  22119. 8009a18: 68fb ldr r3, [r7, #12]
  22120. 8009a1a: 2b00 cmp r3, #0
  22121. 8009a1c: d04a beq.n 8009ab4 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xac>
  22122. 8009a1e: 68fb ldr r3, [r7, #12]
  22123. 8009a20: 2b08 cmp r3, #8
  22124. 8009a22: d847 bhi.n 8009ab4 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xac>
  22125. {
  22126. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  22127. 8009a24: 687b ldr r3, [r7, #4]
  22128. 8009a26: 681b ldr r3, [r3, #0]
  22129. 8009a28: 4a25 ldr r2, [pc, #148] @ (8009ac0 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xb8>)
  22130. 8009a2a: 4293 cmp r3, r2
  22131. 8009a2c: d022 beq.n 8009a74 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  22132. 8009a2e: 687b ldr r3, [r7, #4]
  22133. 8009a30: 681b ldr r3, [r3, #0]
  22134. 8009a32: 4a24 ldr r2, [pc, #144] @ (8009ac4 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xbc>)
  22135. 8009a34: 4293 cmp r3, r2
  22136. 8009a36: d01d beq.n 8009a74 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  22137. 8009a38: 687b ldr r3, [r7, #4]
  22138. 8009a3a: 681b ldr r3, [r3, #0]
  22139. 8009a3c: 4a22 ldr r2, [pc, #136] @ (8009ac8 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc0>)
  22140. 8009a3e: 4293 cmp r3, r2
  22141. 8009a40: d018 beq.n 8009a74 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  22142. 8009a42: 687b ldr r3, [r7, #4]
  22143. 8009a44: 681b ldr r3, [r3, #0]
  22144. 8009a46: 4a21 ldr r2, [pc, #132] @ (8009acc <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc4>)
  22145. 8009a48: 4293 cmp r3, r2
  22146. 8009a4a: d013 beq.n 8009a74 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  22147. 8009a4c: 687b ldr r3, [r7, #4]
  22148. 8009a4e: 681b ldr r3, [r3, #0]
  22149. 8009a50: 4a1f ldr r2, [pc, #124] @ (8009ad0 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc8>)
  22150. 8009a52: 4293 cmp r3, r2
  22151. 8009a54: d00e beq.n 8009a74 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  22152. 8009a56: 687b ldr r3, [r7, #4]
  22153. 8009a58: 681b ldr r3, [r3, #0]
  22154. 8009a5a: 4a1e ldr r2, [pc, #120] @ (8009ad4 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xcc>)
  22155. 8009a5c: 4293 cmp r3, r2
  22156. 8009a5e: d009 beq.n 8009a74 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  22157. 8009a60: 687b ldr r3, [r7, #4]
  22158. 8009a62: 681b ldr r3, [r3, #0]
  22159. 8009a64: 4a1c ldr r2, [pc, #112] @ (8009ad8 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd0>)
  22160. 8009a66: 4293 cmp r3, r2
  22161. 8009a68: d004 beq.n 8009a74 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  22162. 8009a6a: 687b ldr r3, [r7, #4]
  22163. 8009a6c: 681b ldr r3, [r3, #0]
  22164. 8009a6e: 4a1b ldr r2, [pc, #108] @ (8009adc <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd4>)
  22165. 8009a70: 4293 cmp r3, r2
  22166. 8009a72: d101 bne.n 8009a78 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x70>
  22167. 8009a74: 2301 movs r3, #1
  22168. 8009a76: e000 b.n 8009a7a <DMA_CalcDMAMUXRequestGenBaseAndMask+0x72>
  22169. 8009a78: 2300 movs r3, #0
  22170. 8009a7a: 2b00 cmp r3, #0
  22171. 8009a7c: d00a beq.n 8009a94 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x8c>
  22172. {
  22173. /* BDMA Channels are connected to DMAMUX2 request generator blocks */
  22174. hdma->DMAmuxRequestGen = (DMAMUX_RequestGen_TypeDef *)((uint32_t)(((uint32_t)DMAMUX2_RequestGenerator0) + ((request - 1U) * 4U)));
  22175. 8009a7e: 68fa ldr r2, [r7, #12]
  22176. 8009a80: 4b17 ldr r3, [pc, #92] @ (8009ae0 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd8>)
  22177. 8009a82: 4413 add r3, r2
  22178. 8009a84: 009b lsls r3, r3, #2
  22179. 8009a86: 461a mov r2, r3
  22180. 8009a88: 687b ldr r3, [r7, #4]
  22181. 8009a8a: 66da str r2, [r3, #108] @ 0x6c
  22182. hdma->DMAmuxRequestGenStatus = DMAMUX2_RequestGenStatus;
  22183. 8009a8c: 687b ldr r3, [r7, #4]
  22184. 8009a8e: 4a15 ldr r2, [pc, #84] @ (8009ae4 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xdc>)
  22185. 8009a90: 671a str r2, [r3, #112] @ 0x70
  22186. 8009a92: e009 b.n 8009aa8 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xa0>
  22187. }
  22188. else
  22189. {
  22190. /* DMA1 and DMA2 Streams use DMAMUX1 request generator blocks */
  22191. hdma->DMAmuxRequestGen = (DMAMUX_RequestGen_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_RequestGenerator0) + ((request - 1U) * 4U)));
  22192. 8009a94: 68fa ldr r2, [r7, #12]
  22193. 8009a96: 4b14 ldr r3, [pc, #80] @ (8009ae8 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xe0>)
  22194. 8009a98: 4413 add r3, r2
  22195. 8009a9a: 009b lsls r3, r3, #2
  22196. 8009a9c: 461a mov r2, r3
  22197. 8009a9e: 687b ldr r3, [r7, #4]
  22198. 8009aa0: 66da str r2, [r3, #108] @ 0x6c
  22199. hdma->DMAmuxRequestGenStatus = DMAMUX1_RequestGenStatus;
  22200. 8009aa2: 687b ldr r3, [r7, #4]
  22201. 8009aa4: 4a11 ldr r2, [pc, #68] @ (8009aec <DMA_CalcDMAMUXRequestGenBaseAndMask+0xe4>)
  22202. 8009aa6: 671a str r2, [r3, #112] @ 0x70
  22203. }
  22204. hdma->DMAmuxRequestGenStatusMask = 1UL << (request - 1U);
  22205. 8009aa8: 68fb ldr r3, [r7, #12]
  22206. 8009aaa: 3b01 subs r3, #1
  22207. 8009aac: 2201 movs r2, #1
  22208. 8009aae: 409a lsls r2, r3
  22209. 8009ab0: 687b ldr r3, [r7, #4]
  22210. 8009ab2: 675a str r2, [r3, #116] @ 0x74
  22211. }
  22212. }
  22213. 8009ab4: bf00 nop
  22214. 8009ab6: 3714 adds r7, #20
  22215. 8009ab8: 46bd mov sp, r7
  22216. 8009aba: f85d 7b04 ldr.w r7, [sp], #4
  22217. 8009abe: 4770 bx lr
  22218. 8009ac0: 58025408 .word 0x58025408
  22219. 8009ac4: 5802541c .word 0x5802541c
  22220. 8009ac8: 58025430 .word 0x58025430
  22221. 8009acc: 58025444 .word 0x58025444
  22222. 8009ad0: 58025458 .word 0x58025458
  22223. 8009ad4: 5802546c .word 0x5802546c
  22224. 8009ad8: 58025480 .word 0x58025480
  22225. 8009adc: 58025494 .word 0x58025494
  22226. 8009ae0: 1600963f .word 0x1600963f
  22227. 8009ae4: 58025940 .word 0x58025940
  22228. 8009ae8: 1000823f .word 0x1000823f
  22229. 8009aec: 40020940 .word 0x40020940
  22230. 08009af0 <HAL_GPIO_Init>:
  22231. * @param GPIO_Init: pointer to a GPIO_InitTypeDef structure that contains
  22232. * the configuration information for the specified GPIO peripheral.
  22233. * @retval None
  22234. */
  22235. void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
  22236. {
  22237. 8009af0: b480 push {r7}
  22238. 8009af2: b089 sub sp, #36 @ 0x24
  22239. 8009af4: af00 add r7, sp, #0
  22240. 8009af6: 6078 str r0, [r7, #4]
  22241. 8009af8: 6039 str r1, [r7, #0]
  22242. uint32_t position = 0x00U;
  22243. 8009afa: 2300 movs r3, #0
  22244. 8009afc: 61fb str r3, [r7, #28]
  22245. EXTI_Core_TypeDef *EXTI_CurrentCPU;
  22246. #if defined(DUAL_CORE) && defined(CORE_CM4)
  22247. EXTI_CurrentCPU = EXTI_D2; /* EXTI for CM4 CPU */
  22248. #else
  22249. EXTI_CurrentCPU = EXTI_D1; /* EXTI for CM7 CPU */
  22250. 8009afe: 4b89 ldr r3, [pc, #548] @ (8009d24 <HAL_GPIO_Init+0x234>)
  22251. 8009b00: 617b str r3, [r7, #20]
  22252. assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
  22253. assert_param(IS_GPIO_PIN(GPIO_Init->Pin));
  22254. assert_param(IS_GPIO_MODE(GPIO_Init->Mode));
  22255. /* Configure the port pins */
  22256. while (((GPIO_Init->Pin) >> position) != 0x00U)
  22257. 8009b02: e194 b.n 8009e2e <HAL_GPIO_Init+0x33e>
  22258. {
  22259. /* Get current io position */
  22260. iocurrent = (GPIO_Init->Pin) & (1UL << position);
  22261. 8009b04: 683b ldr r3, [r7, #0]
  22262. 8009b06: 681a ldr r2, [r3, #0]
  22263. 8009b08: 2101 movs r1, #1
  22264. 8009b0a: 69fb ldr r3, [r7, #28]
  22265. 8009b0c: fa01 f303 lsl.w r3, r1, r3
  22266. 8009b10: 4013 ands r3, r2
  22267. 8009b12: 613b str r3, [r7, #16]
  22268. if (iocurrent != 0x00U)
  22269. 8009b14: 693b ldr r3, [r7, #16]
  22270. 8009b16: 2b00 cmp r3, #0
  22271. 8009b18: f000 8186 beq.w 8009e28 <HAL_GPIO_Init+0x338>
  22272. {
  22273. /*--------------------- GPIO Mode Configuration ------------------------*/
  22274. /* In case of Output or Alternate function mode selection */
  22275. if (((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF))
  22276. 8009b1c: 683b ldr r3, [r7, #0]
  22277. 8009b1e: 685b ldr r3, [r3, #4]
  22278. 8009b20: f003 0303 and.w r3, r3, #3
  22279. 8009b24: 2b01 cmp r3, #1
  22280. 8009b26: d005 beq.n 8009b34 <HAL_GPIO_Init+0x44>
  22281. 8009b28: 683b ldr r3, [r7, #0]
  22282. 8009b2a: 685b ldr r3, [r3, #4]
  22283. 8009b2c: f003 0303 and.w r3, r3, #3
  22284. 8009b30: 2b02 cmp r3, #2
  22285. 8009b32: d130 bne.n 8009b96 <HAL_GPIO_Init+0xa6>
  22286. {
  22287. /* Check the Speed parameter */
  22288. assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));
  22289. /* Configure the IO Speed */
  22290. temp = GPIOx->OSPEEDR;
  22291. 8009b34: 687b ldr r3, [r7, #4]
  22292. 8009b36: 689b ldr r3, [r3, #8]
  22293. 8009b38: 61bb str r3, [r7, #24]
  22294. temp &= ~(GPIO_OSPEEDR_OSPEED0 << (position * 2U));
  22295. 8009b3a: 69fb ldr r3, [r7, #28]
  22296. 8009b3c: 005b lsls r3, r3, #1
  22297. 8009b3e: 2203 movs r2, #3
  22298. 8009b40: fa02 f303 lsl.w r3, r2, r3
  22299. 8009b44: 43db mvns r3, r3
  22300. 8009b46: 69ba ldr r2, [r7, #24]
  22301. 8009b48: 4013 ands r3, r2
  22302. 8009b4a: 61bb str r3, [r7, #24]
  22303. temp |= (GPIO_Init->Speed << (position * 2U));
  22304. 8009b4c: 683b ldr r3, [r7, #0]
  22305. 8009b4e: 68da ldr r2, [r3, #12]
  22306. 8009b50: 69fb ldr r3, [r7, #28]
  22307. 8009b52: 005b lsls r3, r3, #1
  22308. 8009b54: fa02 f303 lsl.w r3, r2, r3
  22309. 8009b58: 69ba ldr r2, [r7, #24]
  22310. 8009b5a: 4313 orrs r3, r2
  22311. 8009b5c: 61bb str r3, [r7, #24]
  22312. GPIOx->OSPEEDR = temp;
  22313. 8009b5e: 687b ldr r3, [r7, #4]
  22314. 8009b60: 69ba ldr r2, [r7, #24]
  22315. 8009b62: 609a str r2, [r3, #8]
  22316. /* Configure the IO Output Type */
  22317. temp = GPIOx->OTYPER;
  22318. 8009b64: 687b ldr r3, [r7, #4]
  22319. 8009b66: 685b ldr r3, [r3, #4]
  22320. 8009b68: 61bb str r3, [r7, #24]
  22321. temp &= ~(GPIO_OTYPER_OT0 << position) ;
  22322. 8009b6a: 2201 movs r2, #1
  22323. 8009b6c: 69fb ldr r3, [r7, #28]
  22324. 8009b6e: fa02 f303 lsl.w r3, r2, r3
  22325. 8009b72: 43db mvns r3, r3
  22326. 8009b74: 69ba ldr r2, [r7, #24]
  22327. 8009b76: 4013 ands r3, r2
  22328. 8009b78: 61bb str r3, [r7, #24]
  22329. temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position);
  22330. 8009b7a: 683b ldr r3, [r7, #0]
  22331. 8009b7c: 685b ldr r3, [r3, #4]
  22332. 8009b7e: 091b lsrs r3, r3, #4
  22333. 8009b80: f003 0201 and.w r2, r3, #1
  22334. 8009b84: 69fb ldr r3, [r7, #28]
  22335. 8009b86: fa02 f303 lsl.w r3, r2, r3
  22336. 8009b8a: 69ba ldr r2, [r7, #24]
  22337. 8009b8c: 4313 orrs r3, r2
  22338. 8009b8e: 61bb str r3, [r7, #24]
  22339. GPIOx->OTYPER = temp;
  22340. 8009b90: 687b ldr r3, [r7, #4]
  22341. 8009b92: 69ba ldr r2, [r7, #24]
  22342. 8009b94: 605a str r2, [r3, #4]
  22343. }
  22344. if ((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG)
  22345. 8009b96: 683b ldr r3, [r7, #0]
  22346. 8009b98: 685b ldr r3, [r3, #4]
  22347. 8009b9a: f003 0303 and.w r3, r3, #3
  22348. 8009b9e: 2b03 cmp r3, #3
  22349. 8009ba0: d017 beq.n 8009bd2 <HAL_GPIO_Init+0xe2>
  22350. {
  22351. /* Check the Pull parameter */
  22352. assert_param(IS_GPIO_PULL(GPIO_Init->Pull));
  22353. /* Activate the Pull-up or Pull down resistor for the current IO */
  22354. temp = GPIOx->PUPDR;
  22355. 8009ba2: 687b ldr r3, [r7, #4]
  22356. 8009ba4: 68db ldr r3, [r3, #12]
  22357. 8009ba6: 61bb str r3, [r7, #24]
  22358. temp &= ~(GPIO_PUPDR_PUPD0 << (position * 2U));
  22359. 8009ba8: 69fb ldr r3, [r7, #28]
  22360. 8009baa: 005b lsls r3, r3, #1
  22361. 8009bac: 2203 movs r2, #3
  22362. 8009bae: fa02 f303 lsl.w r3, r2, r3
  22363. 8009bb2: 43db mvns r3, r3
  22364. 8009bb4: 69ba ldr r2, [r7, #24]
  22365. 8009bb6: 4013 ands r3, r2
  22366. 8009bb8: 61bb str r3, [r7, #24]
  22367. temp |= ((GPIO_Init->Pull) << (position * 2U));
  22368. 8009bba: 683b ldr r3, [r7, #0]
  22369. 8009bbc: 689a ldr r2, [r3, #8]
  22370. 8009bbe: 69fb ldr r3, [r7, #28]
  22371. 8009bc0: 005b lsls r3, r3, #1
  22372. 8009bc2: fa02 f303 lsl.w r3, r2, r3
  22373. 8009bc6: 69ba ldr r2, [r7, #24]
  22374. 8009bc8: 4313 orrs r3, r2
  22375. 8009bca: 61bb str r3, [r7, #24]
  22376. GPIOx->PUPDR = temp;
  22377. 8009bcc: 687b ldr r3, [r7, #4]
  22378. 8009bce: 69ba ldr r2, [r7, #24]
  22379. 8009bd0: 60da str r2, [r3, #12]
  22380. }
  22381. /* In case of Alternate function mode selection */
  22382. if ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)
  22383. 8009bd2: 683b ldr r3, [r7, #0]
  22384. 8009bd4: 685b ldr r3, [r3, #4]
  22385. 8009bd6: f003 0303 and.w r3, r3, #3
  22386. 8009bda: 2b02 cmp r3, #2
  22387. 8009bdc: d123 bne.n 8009c26 <HAL_GPIO_Init+0x136>
  22388. /* Check the Alternate function parameters */
  22389. assert_param(IS_GPIO_AF_INSTANCE(GPIOx));
  22390. assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
  22391. /* Configure Alternate function mapped with the current IO */
  22392. temp = GPIOx->AFR[position >> 3U];
  22393. 8009bde: 69fb ldr r3, [r7, #28]
  22394. 8009be0: 08da lsrs r2, r3, #3
  22395. 8009be2: 687b ldr r3, [r7, #4]
  22396. 8009be4: 3208 adds r2, #8
  22397. 8009be6: f853 3022 ldr.w r3, [r3, r2, lsl #2]
  22398. 8009bea: 61bb str r3, [r7, #24]
  22399. temp &= ~(0xFU << ((position & 0x07U) * 4U));
  22400. 8009bec: 69fb ldr r3, [r7, #28]
  22401. 8009bee: f003 0307 and.w r3, r3, #7
  22402. 8009bf2: 009b lsls r3, r3, #2
  22403. 8009bf4: 220f movs r2, #15
  22404. 8009bf6: fa02 f303 lsl.w r3, r2, r3
  22405. 8009bfa: 43db mvns r3, r3
  22406. 8009bfc: 69ba ldr r2, [r7, #24]
  22407. 8009bfe: 4013 ands r3, r2
  22408. 8009c00: 61bb str r3, [r7, #24]
  22409. temp |= ((GPIO_Init->Alternate) << ((position & 0x07U) * 4U));
  22410. 8009c02: 683b ldr r3, [r7, #0]
  22411. 8009c04: 691a ldr r2, [r3, #16]
  22412. 8009c06: 69fb ldr r3, [r7, #28]
  22413. 8009c08: f003 0307 and.w r3, r3, #7
  22414. 8009c0c: 009b lsls r3, r3, #2
  22415. 8009c0e: fa02 f303 lsl.w r3, r2, r3
  22416. 8009c12: 69ba ldr r2, [r7, #24]
  22417. 8009c14: 4313 orrs r3, r2
  22418. 8009c16: 61bb str r3, [r7, #24]
  22419. GPIOx->AFR[position >> 3U] = temp;
  22420. 8009c18: 69fb ldr r3, [r7, #28]
  22421. 8009c1a: 08da lsrs r2, r3, #3
  22422. 8009c1c: 687b ldr r3, [r7, #4]
  22423. 8009c1e: 3208 adds r2, #8
  22424. 8009c20: 69b9 ldr r1, [r7, #24]
  22425. 8009c22: f843 1022 str.w r1, [r3, r2, lsl #2]
  22426. }
  22427. /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
  22428. temp = GPIOx->MODER;
  22429. 8009c26: 687b ldr r3, [r7, #4]
  22430. 8009c28: 681b ldr r3, [r3, #0]
  22431. 8009c2a: 61bb str r3, [r7, #24]
  22432. temp &= ~(GPIO_MODER_MODE0 << (position * 2U));
  22433. 8009c2c: 69fb ldr r3, [r7, #28]
  22434. 8009c2e: 005b lsls r3, r3, #1
  22435. 8009c30: 2203 movs r2, #3
  22436. 8009c32: fa02 f303 lsl.w r3, r2, r3
  22437. 8009c36: 43db mvns r3, r3
  22438. 8009c38: 69ba ldr r2, [r7, #24]
  22439. 8009c3a: 4013 ands r3, r2
  22440. 8009c3c: 61bb str r3, [r7, #24]
  22441. temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2U));
  22442. 8009c3e: 683b ldr r3, [r7, #0]
  22443. 8009c40: 685b ldr r3, [r3, #4]
  22444. 8009c42: f003 0203 and.w r2, r3, #3
  22445. 8009c46: 69fb ldr r3, [r7, #28]
  22446. 8009c48: 005b lsls r3, r3, #1
  22447. 8009c4a: fa02 f303 lsl.w r3, r2, r3
  22448. 8009c4e: 69ba ldr r2, [r7, #24]
  22449. 8009c50: 4313 orrs r3, r2
  22450. 8009c52: 61bb str r3, [r7, #24]
  22451. GPIOx->MODER = temp;
  22452. 8009c54: 687b ldr r3, [r7, #4]
  22453. 8009c56: 69ba ldr r2, [r7, #24]
  22454. 8009c58: 601a str r2, [r3, #0]
  22455. /*--------------------- EXTI Mode Configuration ------------------------*/
  22456. /* Configure the External Interrupt or event for the current IO */
  22457. if ((GPIO_Init->Mode & EXTI_MODE) != 0x00U)
  22458. 8009c5a: 683b ldr r3, [r7, #0]
  22459. 8009c5c: 685b ldr r3, [r3, #4]
  22460. 8009c5e: f403 3340 and.w r3, r3, #196608 @ 0x30000
  22461. 8009c62: 2b00 cmp r3, #0
  22462. 8009c64: f000 80e0 beq.w 8009e28 <HAL_GPIO_Init+0x338>
  22463. {
  22464. /* Enable SYSCFG Clock */
  22465. __HAL_RCC_SYSCFG_CLK_ENABLE();
  22466. 8009c68: 4b2f ldr r3, [pc, #188] @ (8009d28 <HAL_GPIO_Init+0x238>)
  22467. 8009c6a: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  22468. 8009c6e: 4a2e ldr r2, [pc, #184] @ (8009d28 <HAL_GPIO_Init+0x238>)
  22469. 8009c70: f043 0302 orr.w r3, r3, #2
  22470. 8009c74: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  22471. 8009c78: 4b2b ldr r3, [pc, #172] @ (8009d28 <HAL_GPIO_Init+0x238>)
  22472. 8009c7a: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  22473. 8009c7e: f003 0302 and.w r3, r3, #2
  22474. 8009c82: 60fb str r3, [r7, #12]
  22475. 8009c84: 68fb ldr r3, [r7, #12]
  22476. temp = SYSCFG->EXTICR[position >> 2U];
  22477. 8009c86: 4a29 ldr r2, [pc, #164] @ (8009d2c <HAL_GPIO_Init+0x23c>)
  22478. 8009c88: 69fb ldr r3, [r7, #28]
  22479. 8009c8a: 089b lsrs r3, r3, #2
  22480. 8009c8c: 3302 adds r3, #2
  22481. 8009c8e: f852 3023 ldr.w r3, [r2, r3, lsl #2]
  22482. 8009c92: 61bb str r3, [r7, #24]
  22483. temp &= ~(0x0FUL << (4U * (position & 0x03U)));
  22484. 8009c94: 69fb ldr r3, [r7, #28]
  22485. 8009c96: f003 0303 and.w r3, r3, #3
  22486. 8009c9a: 009b lsls r3, r3, #2
  22487. 8009c9c: 220f movs r2, #15
  22488. 8009c9e: fa02 f303 lsl.w r3, r2, r3
  22489. 8009ca2: 43db mvns r3, r3
  22490. 8009ca4: 69ba ldr r2, [r7, #24]
  22491. 8009ca6: 4013 ands r3, r2
  22492. 8009ca8: 61bb str r3, [r7, #24]
  22493. temp |= (GPIO_GET_INDEX(GPIOx) << (4U * (position & 0x03U)));
  22494. 8009caa: 687b ldr r3, [r7, #4]
  22495. 8009cac: 4a20 ldr r2, [pc, #128] @ (8009d30 <HAL_GPIO_Init+0x240>)
  22496. 8009cae: 4293 cmp r3, r2
  22497. 8009cb0: d052 beq.n 8009d58 <HAL_GPIO_Init+0x268>
  22498. 8009cb2: 687b ldr r3, [r7, #4]
  22499. 8009cb4: 4a1f ldr r2, [pc, #124] @ (8009d34 <HAL_GPIO_Init+0x244>)
  22500. 8009cb6: 4293 cmp r3, r2
  22501. 8009cb8: d031 beq.n 8009d1e <HAL_GPIO_Init+0x22e>
  22502. 8009cba: 687b ldr r3, [r7, #4]
  22503. 8009cbc: 4a1e ldr r2, [pc, #120] @ (8009d38 <HAL_GPIO_Init+0x248>)
  22504. 8009cbe: 4293 cmp r3, r2
  22505. 8009cc0: d02b beq.n 8009d1a <HAL_GPIO_Init+0x22a>
  22506. 8009cc2: 687b ldr r3, [r7, #4]
  22507. 8009cc4: 4a1d ldr r2, [pc, #116] @ (8009d3c <HAL_GPIO_Init+0x24c>)
  22508. 8009cc6: 4293 cmp r3, r2
  22509. 8009cc8: d025 beq.n 8009d16 <HAL_GPIO_Init+0x226>
  22510. 8009cca: 687b ldr r3, [r7, #4]
  22511. 8009ccc: 4a1c ldr r2, [pc, #112] @ (8009d40 <HAL_GPIO_Init+0x250>)
  22512. 8009cce: 4293 cmp r3, r2
  22513. 8009cd0: d01f beq.n 8009d12 <HAL_GPIO_Init+0x222>
  22514. 8009cd2: 687b ldr r3, [r7, #4]
  22515. 8009cd4: 4a1b ldr r2, [pc, #108] @ (8009d44 <HAL_GPIO_Init+0x254>)
  22516. 8009cd6: 4293 cmp r3, r2
  22517. 8009cd8: d019 beq.n 8009d0e <HAL_GPIO_Init+0x21e>
  22518. 8009cda: 687b ldr r3, [r7, #4]
  22519. 8009cdc: 4a1a ldr r2, [pc, #104] @ (8009d48 <HAL_GPIO_Init+0x258>)
  22520. 8009cde: 4293 cmp r3, r2
  22521. 8009ce0: d013 beq.n 8009d0a <HAL_GPIO_Init+0x21a>
  22522. 8009ce2: 687b ldr r3, [r7, #4]
  22523. 8009ce4: 4a19 ldr r2, [pc, #100] @ (8009d4c <HAL_GPIO_Init+0x25c>)
  22524. 8009ce6: 4293 cmp r3, r2
  22525. 8009ce8: d00d beq.n 8009d06 <HAL_GPIO_Init+0x216>
  22526. 8009cea: 687b ldr r3, [r7, #4]
  22527. 8009cec: 4a18 ldr r2, [pc, #96] @ (8009d50 <HAL_GPIO_Init+0x260>)
  22528. 8009cee: 4293 cmp r3, r2
  22529. 8009cf0: d007 beq.n 8009d02 <HAL_GPIO_Init+0x212>
  22530. 8009cf2: 687b ldr r3, [r7, #4]
  22531. 8009cf4: 4a17 ldr r2, [pc, #92] @ (8009d54 <HAL_GPIO_Init+0x264>)
  22532. 8009cf6: 4293 cmp r3, r2
  22533. 8009cf8: d101 bne.n 8009cfe <HAL_GPIO_Init+0x20e>
  22534. 8009cfa: 2309 movs r3, #9
  22535. 8009cfc: e02d b.n 8009d5a <HAL_GPIO_Init+0x26a>
  22536. 8009cfe: 230a movs r3, #10
  22537. 8009d00: e02b b.n 8009d5a <HAL_GPIO_Init+0x26a>
  22538. 8009d02: 2308 movs r3, #8
  22539. 8009d04: e029 b.n 8009d5a <HAL_GPIO_Init+0x26a>
  22540. 8009d06: 2307 movs r3, #7
  22541. 8009d08: e027 b.n 8009d5a <HAL_GPIO_Init+0x26a>
  22542. 8009d0a: 2306 movs r3, #6
  22543. 8009d0c: e025 b.n 8009d5a <HAL_GPIO_Init+0x26a>
  22544. 8009d0e: 2305 movs r3, #5
  22545. 8009d10: e023 b.n 8009d5a <HAL_GPIO_Init+0x26a>
  22546. 8009d12: 2304 movs r3, #4
  22547. 8009d14: e021 b.n 8009d5a <HAL_GPIO_Init+0x26a>
  22548. 8009d16: 2303 movs r3, #3
  22549. 8009d18: e01f b.n 8009d5a <HAL_GPIO_Init+0x26a>
  22550. 8009d1a: 2302 movs r3, #2
  22551. 8009d1c: e01d b.n 8009d5a <HAL_GPIO_Init+0x26a>
  22552. 8009d1e: 2301 movs r3, #1
  22553. 8009d20: e01b b.n 8009d5a <HAL_GPIO_Init+0x26a>
  22554. 8009d22: bf00 nop
  22555. 8009d24: 58000080 .word 0x58000080
  22556. 8009d28: 58024400 .word 0x58024400
  22557. 8009d2c: 58000400 .word 0x58000400
  22558. 8009d30: 58020000 .word 0x58020000
  22559. 8009d34: 58020400 .word 0x58020400
  22560. 8009d38: 58020800 .word 0x58020800
  22561. 8009d3c: 58020c00 .word 0x58020c00
  22562. 8009d40: 58021000 .word 0x58021000
  22563. 8009d44: 58021400 .word 0x58021400
  22564. 8009d48: 58021800 .word 0x58021800
  22565. 8009d4c: 58021c00 .word 0x58021c00
  22566. 8009d50: 58022000 .word 0x58022000
  22567. 8009d54: 58022400 .word 0x58022400
  22568. 8009d58: 2300 movs r3, #0
  22569. 8009d5a: 69fa ldr r2, [r7, #28]
  22570. 8009d5c: f002 0203 and.w r2, r2, #3
  22571. 8009d60: 0092 lsls r2, r2, #2
  22572. 8009d62: 4093 lsls r3, r2
  22573. 8009d64: 69ba ldr r2, [r7, #24]
  22574. 8009d66: 4313 orrs r3, r2
  22575. 8009d68: 61bb str r3, [r7, #24]
  22576. SYSCFG->EXTICR[position >> 2U] = temp;
  22577. 8009d6a: 4938 ldr r1, [pc, #224] @ (8009e4c <HAL_GPIO_Init+0x35c>)
  22578. 8009d6c: 69fb ldr r3, [r7, #28]
  22579. 8009d6e: 089b lsrs r3, r3, #2
  22580. 8009d70: 3302 adds r3, #2
  22581. 8009d72: 69ba ldr r2, [r7, #24]
  22582. 8009d74: f841 2023 str.w r2, [r1, r3, lsl #2]
  22583. /* Clear Rising Falling edge configuration */
  22584. temp = EXTI->RTSR1;
  22585. 8009d78: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  22586. 8009d7c: 681b ldr r3, [r3, #0]
  22587. 8009d7e: 61bb str r3, [r7, #24]
  22588. temp &= ~(iocurrent);
  22589. 8009d80: 693b ldr r3, [r7, #16]
  22590. 8009d82: 43db mvns r3, r3
  22591. 8009d84: 69ba ldr r2, [r7, #24]
  22592. 8009d86: 4013 ands r3, r2
  22593. 8009d88: 61bb str r3, [r7, #24]
  22594. if ((GPIO_Init->Mode & TRIGGER_RISING) != 0x00U)
  22595. 8009d8a: 683b ldr r3, [r7, #0]
  22596. 8009d8c: 685b ldr r3, [r3, #4]
  22597. 8009d8e: f403 1380 and.w r3, r3, #1048576 @ 0x100000
  22598. 8009d92: 2b00 cmp r3, #0
  22599. 8009d94: d003 beq.n 8009d9e <HAL_GPIO_Init+0x2ae>
  22600. {
  22601. temp |= iocurrent;
  22602. 8009d96: 69ba ldr r2, [r7, #24]
  22603. 8009d98: 693b ldr r3, [r7, #16]
  22604. 8009d9a: 4313 orrs r3, r2
  22605. 8009d9c: 61bb str r3, [r7, #24]
  22606. }
  22607. EXTI->RTSR1 = temp;
  22608. 8009d9e: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  22609. 8009da2: 69bb ldr r3, [r7, #24]
  22610. 8009da4: 6013 str r3, [r2, #0]
  22611. temp = EXTI->FTSR1;
  22612. 8009da6: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  22613. 8009daa: 685b ldr r3, [r3, #4]
  22614. 8009dac: 61bb str r3, [r7, #24]
  22615. temp &= ~(iocurrent);
  22616. 8009dae: 693b ldr r3, [r7, #16]
  22617. 8009db0: 43db mvns r3, r3
  22618. 8009db2: 69ba ldr r2, [r7, #24]
  22619. 8009db4: 4013 ands r3, r2
  22620. 8009db6: 61bb str r3, [r7, #24]
  22621. if ((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00U)
  22622. 8009db8: 683b ldr r3, [r7, #0]
  22623. 8009dba: 685b ldr r3, [r3, #4]
  22624. 8009dbc: f403 1300 and.w r3, r3, #2097152 @ 0x200000
  22625. 8009dc0: 2b00 cmp r3, #0
  22626. 8009dc2: d003 beq.n 8009dcc <HAL_GPIO_Init+0x2dc>
  22627. {
  22628. temp |= iocurrent;
  22629. 8009dc4: 69ba ldr r2, [r7, #24]
  22630. 8009dc6: 693b ldr r3, [r7, #16]
  22631. 8009dc8: 4313 orrs r3, r2
  22632. 8009dca: 61bb str r3, [r7, #24]
  22633. }
  22634. EXTI->FTSR1 = temp;
  22635. 8009dcc: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  22636. 8009dd0: 69bb ldr r3, [r7, #24]
  22637. 8009dd2: 6053 str r3, [r2, #4]
  22638. temp = EXTI_CurrentCPU->EMR1;
  22639. 8009dd4: 697b ldr r3, [r7, #20]
  22640. 8009dd6: 685b ldr r3, [r3, #4]
  22641. 8009dd8: 61bb str r3, [r7, #24]
  22642. temp &= ~(iocurrent);
  22643. 8009dda: 693b ldr r3, [r7, #16]
  22644. 8009ddc: 43db mvns r3, r3
  22645. 8009dde: 69ba ldr r2, [r7, #24]
  22646. 8009de0: 4013 ands r3, r2
  22647. 8009de2: 61bb str r3, [r7, #24]
  22648. if ((GPIO_Init->Mode & EXTI_EVT) != 0x00U)
  22649. 8009de4: 683b ldr r3, [r7, #0]
  22650. 8009de6: 685b ldr r3, [r3, #4]
  22651. 8009de8: f403 3300 and.w r3, r3, #131072 @ 0x20000
  22652. 8009dec: 2b00 cmp r3, #0
  22653. 8009dee: d003 beq.n 8009df8 <HAL_GPIO_Init+0x308>
  22654. {
  22655. temp |= iocurrent;
  22656. 8009df0: 69ba ldr r2, [r7, #24]
  22657. 8009df2: 693b ldr r3, [r7, #16]
  22658. 8009df4: 4313 orrs r3, r2
  22659. 8009df6: 61bb str r3, [r7, #24]
  22660. }
  22661. EXTI_CurrentCPU->EMR1 = temp;
  22662. 8009df8: 697b ldr r3, [r7, #20]
  22663. 8009dfa: 69ba ldr r2, [r7, #24]
  22664. 8009dfc: 605a str r2, [r3, #4]
  22665. /* Clear EXTI line configuration */
  22666. temp = EXTI_CurrentCPU->IMR1;
  22667. 8009dfe: 697b ldr r3, [r7, #20]
  22668. 8009e00: 681b ldr r3, [r3, #0]
  22669. 8009e02: 61bb str r3, [r7, #24]
  22670. temp &= ~(iocurrent);
  22671. 8009e04: 693b ldr r3, [r7, #16]
  22672. 8009e06: 43db mvns r3, r3
  22673. 8009e08: 69ba ldr r2, [r7, #24]
  22674. 8009e0a: 4013 ands r3, r2
  22675. 8009e0c: 61bb str r3, [r7, #24]
  22676. if ((GPIO_Init->Mode & EXTI_IT) != 0x00U)
  22677. 8009e0e: 683b ldr r3, [r7, #0]
  22678. 8009e10: 685b ldr r3, [r3, #4]
  22679. 8009e12: f403 3380 and.w r3, r3, #65536 @ 0x10000
  22680. 8009e16: 2b00 cmp r3, #0
  22681. 8009e18: d003 beq.n 8009e22 <HAL_GPIO_Init+0x332>
  22682. {
  22683. temp |= iocurrent;
  22684. 8009e1a: 69ba ldr r2, [r7, #24]
  22685. 8009e1c: 693b ldr r3, [r7, #16]
  22686. 8009e1e: 4313 orrs r3, r2
  22687. 8009e20: 61bb str r3, [r7, #24]
  22688. }
  22689. EXTI_CurrentCPU->IMR1 = temp;
  22690. 8009e22: 697b ldr r3, [r7, #20]
  22691. 8009e24: 69ba ldr r2, [r7, #24]
  22692. 8009e26: 601a str r2, [r3, #0]
  22693. }
  22694. }
  22695. position++;
  22696. 8009e28: 69fb ldr r3, [r7, #28]
  22697. 8009e2a: 3301 adds r3, #1
  22698. 8009e2c: 61fb str r3, [r7, #28]
  22699. while (((GPIO_Init->Pin) >> position) != 0x00U)
  22700. 8009e2e: 683b ldr r3, [r7, #0]
  22701. 8009e30: 681a ldr r2, [r3, #0]
  22702. 8009e32: 69fb ldr r3, [r7, #28]
  22703. 8009e34: fa22 f303 lsr.w r3, r2, r3
  22704. 8009e38: 2b00 cmp r3, #0
  22705. 8009e3a: f47f ae63 bne.w 8009b04 <HAL_GPIO_Init+0x14>
  22706. }
  22707. }
  22708. 8009e3e: bf00 nop
  22709. 8009e40: bf00 nop
  22710. 8009e42: 3724 adds r7, #36 @ 0x24
  22711. 8009e44: 46bd mov sp, r7
  22712. 8009e46: f85d 7b04 ldr.w r7, [sp], #4
  22713. 8009e4a: 4770 bx lr
  22714. 8009e4c: 58000400 .word 0x58000400
  22715. 08009e50 <HAL_GPIO_ReadPin>:
  22716. * @param GPIO_Pin: specifies the port bit to read.
  22717. * This parameter can be GPIO_PIN_x where x can be (0..15).
  22718. * @retval The input port pin value.
  22719. */
  22720. GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
  22721. {
  22722. 8009e50: b480 push {r7}
  22723. 8009e52: b085 sub sp, #20
  22724. 8009e54: af00 add r7, sp, #0
  22725. 8009e56: 6078 str r0, [r7, #4]
  22726. 8009e58: 460b mov r3, r1
  22727. 8009e5a: 807b strh r3, [r7, #2]
  22728. GPIO_PinState bitstatus;
  22729. /* Check the parameters */
  22730. assert_param(IS_GPIO_PIN(GPIO_Pin));
  22731. if ((GPIOx->IDR & GPIO_Pin) != 0x00U)
  22732. 8009e5c: 687b ldr r3, [r7, #4]
  22733. 8009e5e: 691a ldr r2, [r3, #16]
  22734. 8009e60: 887b ldrh r3, [r7, #2]
  22735. 8009e62: 4013 ands r3, r2
  22736. 8009e64: 2b00 cmp r3, #0
  22737. 8009e66: d002 beq.n 8009e6e <HAL_GPIO_ReadPin+0x1e>
  22738. {
  22739. bitstatus = GPIO_PIN_SET;
  22740. 8009e68: 2301 movs r3, #1
  22741. 8009e6a: 73fb strb r3, [r7, #15]
  22742. 8009e6c: e001 b.n 8009e72 <HAL_GPIO_ReadPin+0x22>
  22743. }
  22744. else
  22745. {
  22746. bitstatus = GPIO_PIN_RESET;
  22747. 8009e6e: 2300 movs r3, #0
  22748. 8009e70: 73fb strb r3, [r7, #15]
  22749. }
  22750. return bitstatus;
  22751. 8009e72: 7bfb ldrb r3, [r7, #15]
  22752. }
  22753. 8009e74: 4618 mov r0, r3
  22754. 8009e76: 3714 adds r7, #20
  22755. 8009e78: 46bd mov sp, r7
  22756. 8009e7a: f85d 7b04 ldr.w r7, [sp], #4
  22757. 8009e7e: 4770 bx lr
  22758. 08009e80 <HAL_GPIO_WritePin>:
  22759. * @arg GPIO_PIN_RESET: to clear the port pin
  22760. * @arg GPIO_PIN_SET: to set the port pin
  22761. * @retval None
  22762. */
  22763. void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
  22764. {
  22765. 8009e80: b480 push {r7}
  22766. 8009e82: b083 sub sp, #12
  22767. 8009e84: af00 add r7, sp, #0
  22768. 8009e86: 6078 str r0, [r7, #4]
  22769. 8009e88: 460b mov r3, r1
  22770. 8009e8a: 807b strh r3, [r7, #2]
  22771. 8009e8c: 4613 mov r3, r2
  22772. 8009e8e: 707b strb r3, [r7, #1]
  22773. /* Check the parameters */
  22774. assert_param(IS_GPIO_PIN(GPIO_Pin));
  22775. assert_param(IS_GPIO_PIN_ACTION(PinState));
  22776. if (PinState != GPIO_PIN_RESET)
  22777. 8009e90: 787b ldrb r3, [r7, #1]
  22778. 8009e92: 2b00 cmp r3, #0
  22779. 8009e94: d003 beq.n 8009e9e <HAL_GPIO_WritePin+0x1e>
  22780. {
  22781. GPIOx->BSRR = GPIO_Pin;
  22782. 8009e96: 887a ldrh r2, [r7, #2]
  22783. 8009e98: 687b ldr r3, [r7, #4]
  22784. 8009e9a: 619a str r2, [r3, #24]
  22785. }
  22786. else
  22787. {
  22788. GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
  22789. }
  22790. }
  22791. 8009e9c: e003 b.n 8009ea6 <HAL_GPIO_WritePin+0x26>
  22792. GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
  22793. 8009e9e: 887b ldrh r3, [r7, #2]
  22794. 8009ea0: 041a lsls r2, r3, #16
  22795. 8009ea2: 687b ldr r3, [r7, #4]
  22796. 8009ea4: 619a str r2, [r3, #24]
  22797. }
  22798. 8009ea6: bf00 nop
  22799. 8009ea8: 370c adds r7, #12
  22800. 8009eaa: 46bd mov sp, r7
  22801. 8009eac: f85d 7b04 ldr.w r7, [sp], #4
  22802. 8009eb0: 4770 bx lr
  22803. 08009eb2 <HAL_GPIO_TogglePin>:
  22804. * @param GPIOx: Where x can be (A..K) to select the GPIO peripheral.
  22805. * @param GPIO_Pin: Specifies the pins to be toggled.
  22806. * @retval None
  22807. */
  22808. void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
  22809. {
  22810. 8009eb2: b480 push {r7}
  22811. 8009eb4: b085 sub sp, #20
  22812. 8009eb6: af00 add r7, sp, #0
  22813. 8009eb8: 6078 str r0, [r7, #4]
  22814. 8009eba: 460b mov r3, r1
  22815. 8009ebc: 807b strh r3, [r7, #2]
  22816. /* Check the parameters */
  22817. assert_param(IS_GPIO_PIN(GPIO_Pin));
  22818. /* get current Output Data Register value */
  22819. odr = GPIOx->ODR;
  22820. 8009ebe: 687b ldr r3, [r7, #4]
  22821. 8009ec0: 695b ldr r3, [r3, #20]
  22822. 8009ec2: 60fb str r3, [r7, #12]
  22823. /* Set selected pins that were at low level, and reset ones that were high */
  22824. GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
  22825. 8009ec4: 887a ldrh r2, [r7, #2]
  22826. 8009ec6: 68fb ldr r3, [r7, #12]
  22827. 8009ec8: 4013 ands r3, r2
  22828. 8009eca: 041a lsls r2, r3, #16
  22829. 8009ecc: 68fb ldr r3, [r7, #12]
  22830. 8009ece: 43d9 mvns r1, r3
  22831. 8009ed0: 887b ldrh r3, [r7, #2]
  22832. 8009ed2: 400b ands r3, r1
  22833. 8009ed4: 431a orrs r2, r3
  22834. 8009ed6: 687b ldr r3, [r7, #4]
  22835. 8009ed8: 619a str r2, [r3, #24]
  22836. }
  22837. 8009eda: bf00 nop
  22838. 8009edc: 3714 adds r7, #20
  22839. 8009ede: 46bd mov sp, r7
  22840. 8009ee0: f85d 7b04 ldr.w r7, [sp], #4
  22841. 8009ee4: 4770 bx lr
  22842. 08009ee6 <HAL_GPIO_EXTI_IRQHandler>:
  22843. * @brief Handle EXTI interrupt request.
  22844. * @param GPIO_Pin: Specifies the port pin connected to corresponding EXTI line.
  22845. * @retval None
  22846. */
  22847. void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
  22848. {
  22849. 8009ee6: b580 push {r7, lr}
  22850. 8009ee8: b082 sub sp, #8
  22851. 8009eea: af00 add r7, sp, #0
  22852. 8009eec: 4603 mov r3, r0
  22853. 8009eee: 80fb strh r3, [r7, #6]
  22854. __HAL_GPIO_EXTID2_CLEAR_IT(GPIO_Pin);
  22855. HAL_GPIO_EXTI_Callback(GPIO_Pin);
  22856. }
  22857. #else
  22858. /* EXTI line interrupt detected */
  22859. if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00U)
  22860. 8009ef0: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  22861. 8009ef4: f8d3 2088 ldr.w r2, [r3, #136] @ 0x88
  22862. 8009ef8: 88fb ldrh r3, [r7, #6]
  22863. 8009efa: 4013 ands r3, r2
  22864. 8009efc: 2b00 cmp r3, #0
  22865. 8009efe: d008 beq.n 8009f12 <HAL_GPIO_EXTI_IRQHandler+0x2c>
  22866. {
  22867. __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
  22868. 8009f00: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  22869. 8009f04: 88fb ldrh r3, [r7, #6]
  22870. 8009f06: f8c2 3088 str.w r3, [r2, #136] @ 0x88
  22871. HAL_GPIO_EXTI_Callback(GPIO_Pin);
  22872. 8009f0a: 88fb ldrh r3, [r7, #6]
  22873. 8009f0c: 4618 mov r0, r3
  22874. 8009f0e: f7f6 fbcd bl 80006ac <HAL_GPIO_EXTI_Callback>
  22875. }
  22876. #endif
  22877. }
  22878. 8009f12: bf00 nop
  22879. 8009f14: 3708 adds r7, #8
  22880. 8009f16: 46bd mov sp, r7
  22881. 8009f18: bd80 pop {r7, pc}
  22882. ...
  22883. 08009f1c <HAL_PWR_ConfigPVD>:
  22884. * driver. All combination are allowed: wake up only Cortex-M7, wake up
  22885. * only Cortex-M4 or wake up Cortex-M7 and Cortex-M4.
  22886. * @retval None.
  22887. */
  22888. void HAL_PWR_ConfigPVD (PWR_PVDTypeDef *sConfigPVD)
  22889. {
  22890. 8009f1c: b480 push {r7}
  22891. 8009f1e: b083 sub sp, #12
  22892. 8009f20: af00 add r7, sp, #0
  22893. 8009f22: 6078 str r0, [r7, #4]
  22894. /* Check the PVD configuration parameter */
  22895. if (sConfigPVD == NULL)
  22896. 8009f24: 687b ldr r3, [r7, #4]
  22897. 8009f26: 2b00 cmp r3, #0
  22898. 8009f28: d069 beq.n 8009ffe <HAL_PWR_ConfigPVD+0xe2>
  22899. /* Check the parameters */
  22900. assert_param (IS_PWR_PVD_LEVEL (sConfigPVD->PVDLevel));
  22901. assert_param (IS_PWR_PVD_MODE (sConfigPVD->Mode));
  22902. /* Set PLS[7:5] bits according to PVDLevel value */
  22903. MODIFY_REG (PWR->CR1, PWR_CR1_PLS, sConfigPVD->PVDLevel);
  22904. 8009f2a: 4b38 ldr r3, [pc, #224] @ (800a00c <HAL_PWR_ConfigPVD+0xf0>)
  22905. 8009f2c: 681b ldr r3, [r3, #0]
  22906. 8009f2e: f023 02e0 bic.w r2, r3, #224 @ 0xe0
  22907. 8009f32: 687b ldr r3, [r7, #4]
  22908. 8009f34: 681b ldr r3, [r3, #0]
  22909. 8009f36: 4935 ldr r1, [pc, #212] @ (800a00c <HAL_PWR_ConfigPVD+0xf0>)
  22910. 8009f38: 4313 orrs r3, r2
  22911. 8009f3a: 600b str r3, [r1, #0]
  22912. /* Clear previous config */
  22913. #if !defined (DUAL_CORE)
  22914. __HAL_PWR_PVD_EXTI_DISABLE_EVENT ();
  22915. 8009f3c: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  22916. 8009f40: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  22917. 8009f44: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  22918. 8009f48: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  22919. 8009f4c: f8c2 3084 str.w r3, [r2, #132] @ 0x84
  22920. __HAL_PWR_PVD_EXTI_DISABLE_IT ();
  22921. 8009f50: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  22922. 8009f54: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  22923. 8009f58: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  22924. 8009f5c: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  22925. 8009f60: f8c2 3080 str.w r3, [r2, #128] @ 0x80
  22926. #endif /* !defined (DUAL_CORE) */
  22927. __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE ();
  22928. 8009f64: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  22929. 8009f68: 681b ldr r3, [r3, #0]
  22930. 8009f6a: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  22931. 8009f6e: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  22932. 8009f72: 6013 str r3, [r2, #0]
  22933. __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE ();
  22934. 8009f74: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  22935. 8009f78: 685b ldr r3, [r3, #4]
  22936. 8009f7a: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  22937. 8009f7e: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  22938. 8009f82: 6053 str r3, [r2, #4]
  22939. #if !defined (DUAL_CORE)
  22940. /* Interrupt mode configuration */
  22941. if ((sConfigPVD->Mode & PVD_MODE_IT) == PVD_MODE_IT)
  22942. 8009f84: 687b ldr r3, [r7, #4]
  22943. 8009f86: 685b ldr r3, [r3, #4]
  22944. 8009f88: f403 3380 and.w r3, r3, #65536 @ 0x10000
  22945. 8009f8c: 2b00 cmp r3, #0
  22946. 8009f8e: d009 beq.n 8009fa4 <HAL_PWR_ConfigPVD+0x88>
  22947. {
  22948. __HAL_PWR_PVD_EXTI_ENABLE_IT ();
  22949. 8009f90: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  22950. 8009f94: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  22951. 8009f98: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  22952. 8009f9c: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  22953. 8009fa0: f8c2 3080 str.w r3, [r2, #128] @ 0x80
  22954. }
  22955. /* Event mode configuration */
  22956. if ((sConfigPVD->Mode & PVD_MODE_EVT) == PVD_MODE_EVT)
  22957. 8009fa4: 687b ldr r3, [r7, #4]
  22958. 8009fa6: 685b ldr r3, [r3, #4]
  22959. 8009fa8: f403 3300 and.w r3, r3, #131072 @ 0x20000
  22960. 8009fac: 2b00 cmp r3, #0
  22961. 8009fae: d009 beq.n 8009fc4 <HAL_PWR_ConfigPVD+0xa8>
  22962. {
  22963. __HAL_PWR_PVD_EXTI_ENABLE_EVENT ();
  22964. 8009fb0: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  22965. 8009fb4: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  22966. 8009fb8: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  22967. 8009fbc: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  22968. 8009fc0: f8c2 3084 str.w r3, [r2, #132] @ 0x84
  22969. }
  22970. #endif /* !defined (DUAL_CORE) */
  22971. /* Rising edge configuration */
  22972. if ((sConfigPVD->Mode & PVD_RISING_EDGE) == PVD_RISING_EDGE)
  22973. 8009fc4: 687b ldr r3, [r7, #4]
  22974. 8009fc6: 685b ldr r3, [r3, #4]
  22975. 8009fc8: f003 0301 and.w r3, r3, #1
  22976. 8009fcc: 2b00 cmp r3, #0
  22977. 8009fce: d007 beq.n 8009fe0 <HAL_PWR_ConfigPVD+0xc4>
  22978. {
  22979. __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE ();
  22980. 8009fd0: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  22981. 8009fd4: 681b ldr r3, [r3, #0]
  22982. 8009fd6: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  22983. 8009fda: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  22984. 8009fde: 6013 str r3, [r2, #0]
  22985. }
  22986. /* Falling edge configuration */
  22987. if ((sConfigPVD->Mode & PVD_FALLING_EDGE) == PVD_FALLING_EDGE)
  22988. 8009fe0: 687b ldr r3, [r7, #4]
  22989. 8009fe2: 685b ldr r3, [r3, #4]
  22990. 8009fe4: f003 0302 and.w r3, r3, #2
  22991. 8009fe8: 2b00 cmp r3, #0
  22992. 8009fea: d009 beq.n 800a000 <HAL_PWR_ConfigPVD+0xe4>
  22993. {
  22994. __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE ();
  22995. 8009fec: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  22996. 8009ff0: 685b ldr r3, [r3, #4]
  22997. 8009ff2: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  22998. 8009ff6: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  22999. 8009ffa: 6053 str r3, [r2, #4]
  23000. 8009ffc: e000 b.n 800a000 <HAL_PWR_ConfigPVD+0xe4>
  23001. return;
  23002. 8009ffe: bf00 nop
  23003. }
  23004. }
  23005. 800a000: 370c adds r7, #12
  23006. 800a002: 46bd mov sp, r7
  23007. 800a004: f85d 7b04 ldr.w r7, [sp], #4
  23008. 800a008: 4770 bx lr
  23009. 800a00a: bf00 nop
  23010. 800a00c: 58024800 .word 0x58024800
  23011. 0800a010 <HAL_PWR_EnablePVD>:
  23012. /**
  23013. * @brief Enable the Programmable Voltage Detector (PVD).
  23014. * @retval None.
  23015. */
  23016. void HAL_PWR_EnablePVD (void)
  23017. {
  23018. 800a010: b480 push {r7}
  23019. 800a012: af00 add r7, sp, #0
  23020. /* Enable the power voltage detector */
  23021. SET_BIT (PWR->CR1, PWR_CR1_PVDEN);
  23022. 800a014: 4b05 ldr r3, [pc, #20] @ (800a02c <HAL_PWR_EnablePVD+0x1c>)
  23023. 800a016: 681b ldr r3, [r3, #0]
  23024. 800a018: 4a04 ldr r2, [pc, #16] @ (800a02c <HAL_PWR_EnablePVD+0x1c>)
  23025. 800a01a: f043 0310 orr.w r3, r3, #16
  23026. 800a01e: 6013 str r3, [r2, #0]
  23027. }
  23028. 800a020: bf00 nop
  23029. 800a022: 46bd mov sp, r7
  23030. 800a024: f85d 7b04 ldr.w r7, [sp], #4
  23031. 800a028: 4770 bx lr
  23032. 800a02a: bf00 nop
  23033. 800a02c: 58024800 .word 0x58024800
  23034. 0800a030 <HAL_PWREx_ConfigSupply>:
  23035. * PWR_SMPS_2V5_SUPPLIES_EXT are used only for lines that supports SMPS
  23036. * regulator.
  23037. * @retval HAL status.
  23038. */
  23039. HAL_StatusTypeDef HAL_PWREx_ConfigSupply (uint32_t SupplySource)
  23040. {
  23041. 800a030: b580 push {r7, lr}
  23042. 800a032: b084 sub sp, #16
  23043. 800a034: af00 add r7, sp, #0
  23044. 800a036: 6078 str r0, [r7, #4]
  23045. /* Check the parameters */
  23046. assert_param (IS_PWR_SUPPLY (SupplySource));
  23047. /* Check if supply source was configured */
  23048. #if defined (PWR_FLAG_SCUEN)
  23049. if (__HAL_PWR_GET_FLAG (PWR_FLAG_SCUEN) == 0U)
  23050. 800a038: 4b19 ldr r3, [pc, #100] @ (800a0a0 <HAL_PWREx_ConfigSupply+0x70>)
  23051. 800a03a: 68db ldr r3, [r3, #12]
  23052. 800a03c: f003 0304 and.w r3, r3, #4
  23053. 800a040: 2b04 cmp r3, #4
  23054. 800a042: d00a beq.n 800a05a <HAL_PWREx_ConfigSupply+0x2a>
  23055. #else
  23056. if ((PWR->CR3 & (PWR_CR3_SMPSEN | PWR_CR3_LDOEN | PWR_CR3_BYPASS)) != (PWR_CR3_SMPSEN | PWR_CR3_LDOEN))
  23057. #endif /* defined (PWR_FLAG_SCUEN) */
  23058. {
  23059. /* Check supply configuration */
  23060. if ((PWR->CR3 & PWR_SUPPLY_CONFIG_MASK) != SupplySource)
  23061. 800a044: 4b16 ldr r3, [pc, #88] @ (800a0a0 <HAL_PWREx_ConfigSupply+0x70>)
  23062. 800a046: 68db ldr r3, [r3, #12]
  23063. 800a048: f003 0307 and.w r3, r3, #7
  23064. 800a04c: 687a ldr r2, [r7, #4]
  23065. 800a04e: 429a cmp r2, r3
  23066. 800a050: d001 beq.n 800a056 <HAL_PWREx_ConfigSupply+0x26>
  23067. {
  23068. /* Supply configuration update locked, can't apply a new supply config */
  23069. return HAL_ERROR;
  23070. 800a052: 2301 movs r3, #1
  23071. 800a054: e01f b.n 800a096 <HAL_PWREx_ConfigSupply+0x66>
  23072. else
  23073. {
  23074. /* Supply configuration update locked, but new supply configuration
  23075. matches with old supply configuration : nothing to do
  23076. */
  23077. return HAL_OK;
  23078. 800a056: 2300 movs r3, #0
  23079. 800a058: e01d b.n 800a096 <HAL_PWREx_ConfigSupply+0x66>
  23080. }
  23081. }
  23082. /* Set the power supply configuration */
  23083. MODIFY_REG (PWR->CR3, PWR_SUPPLY_CONFIG_MASK, SupplySource);
  23084. 800a05a: 4b11 ldr r3, [pc, #68] @ (800a0a0 <HAL_PWREx_ConfigSupply+0x70>)
  23085. 800a05c: 68db ldr r3, [r3, #12]
  23086. 800a05e: f023 0207 bic.w r2, r3, #7
  23087. 800a062: 490f ldr r1, [pc, #60] @ (800a0a0 <HAL_PWREx_ConfigSupply+0x70>)
  23088. 800a064: 687b ldr r3, [r7, #4]
  23089. 800a066: 4313 orrs r3, r2
  23090. 800a068: 60cb str r3, [r1, #12]
  23091. /* Get tick */
  23092. tickstart = HAL_GetTick ();
  23093. 800a06a: f7fa fcfb bl 8004a64 <HAL_GetTick>
  23094. 800a06e: 60f8 str r0, [r7, #12]
  23095. /* Wait till voltage level flag is set */
  23096. while (__HAL_PWR_GET_FLAG (PWR_FLAG_ACTVOSRDY) == 0U)
  23097. 800a070: e009 b.n 800a086 <HAL_PWREx_ConfigSupply+0x56>
  23098. {
  23099. if ((HAL_GetTick () - tickstart) > PWR_FLAG_SETTING_DELAY)
  23100. 800a072: f7fa fcf7 bl 8004a64 <HAL_GetTick>
  23101. 800a076: 4602 mov r2, r0
  23102. 800a078: 68fb ldr r3, [r7, #12]
  23103. 800a07a: 1ad3 subs r3, r2, r3
  23104. 800a07c: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8
  23105. 800a080: d901 bls.n 800a086 <HAL_PWREx_ConfigSupply+0x56>
  23106. {
  23107. return HAL_ERROR;
  23108. 800a082: 2301 movs r3, #1
  23109. 800a084: e007 b.n 800a096 <HAL_PWREx_ConfigSupply+0x66>
  23110. while (__HAL_PWR_GET_FLAG (PWR_FLAG_ACTVOSRDY) == 0U)
  23111. 800a086: 4b06 ldr r3, [pc, #24] @ (800a0a0 <HAL_PWREx_ConfigSupply+0x70>)
  23112. 800a088: 685b ldr r3, [r3, #4]
  23113. 800a08a: f403 5300 and.w r3, r3, #8192 @ 0x2000
  23114. 800a08e: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  23115. 800a092: d1ee bne.n 800a072 <HAL_PWREx_ConfigSupply+0x42>
  23116. }
  23117. }
  23118. }
  23119. #endif /* defined (SMPS) */
  23120. return HAL_OK;
  23121. 800a094: 2300 movs r3, #0
  23122. }
  23123. 800a096: 4618 mov r0, r3
  23124. 800a098: 3710 adds r7, #16
  23125. 800a09a: 46bd mov sp, r7
  23126. 800a09c: bd80 pop {r7, pc}
  23127. 800a09e: bf00 nop
  23128. 800a0a0: 58024800 .word 0x58024800
  23129. 0800a0a4 <HAL_PWREx_ConfigAVD>:
  23130. * driver. All combination are allowed: wake up only Cortex-M7, wake up
  23131. * only Cortex-M4 and wake up Cortex-M7 and Cortex-M4.
  23132. * @retval None.
  23133. */
  23134. void HAL_PWREx_ConfigAVD (PWREx_AVDTypeDef *sConfigAVD)
  23135. {
  23136. 800a0a4: b480 push {r7}
  23137. 800a0a6: b083 sub sp, #12
  23138. 800a0a8: af00 add r7, sp, #0
  23139. 800a0aa: 6078 str r0, [r7, #4]
  23140. /* Check the parameters */
  23141. assert_param (IS_PWR_AVD_LEVEL (sConfigAVD->AVDLevel));
  23142. assert_param (IS_PWR_AVD_MODE (sConfigAVD->Mode));
  23143. /* Set the ALS[18:17] bits according to AVDLevel value */
  23144. MODIFY_REG (PWR->CR1, PWR_CR1_ALS, sConfigAVD->AVDLevel);
  23145. 800a0ac: 4b37 ldr r3, [pc, #220] @ (800a18c <HAL_PWREx_ConfigAVD+0xe8>)
  23146. 800a0ae: 681b ldr r3, [r3, #0]
  23147. 800a0b0: f423 22c0 bic.w r2, r3, #393216 @ 0x60000
  23148. 800a0b4: 687b ldr r3, [r7, #4]
  23149. 800a0b6: 681b ldr r3, [r3, #0]
  23150. 800a0b8: 4934 ldr r1, [pc, #208] @ (800a18c <HAL_PWREx_ConfigAVD+0xe8>)
  23151. 800a0ba: 4313 orrs r3, r2
  23152. 800a0bc: 600b str r3, [r1, #0]
  23153. /* Clear any previous config */
  23154. #if !defined (DUAL_CORE)
  23155. __HAL_PWR_AVD_EXTI_DISABLE_EVENT ();
  23156. 800a0be: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  23157. 800a0c2: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  23158. 800a0c6: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  23159. 800a0ca: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  23160. 800a0ce: f8c2 3084 str.w r3, [r2, #132] @ 0x84
  23161. __HAL_PWR_AVD_EXTI_DISABLE_IT ();
  23162. 800a0d2: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  23163. 800a0d6: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  23164. 800a0da: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  23165. 800a0de: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  23166. 800a0e2: f8c2 3080 str.w r3, [r2, #128] @ 0x80
  23167. #endif /* !defined (DUAL_CORE) */
  23168. __HAL_PWR_AVD_EXTI_DISABLE_RISING_EDGE ();
  23169. 800a0e6: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  23170. 800a0ea: 681b ldr r3, [r3, #0]
  23171. 800a0ec: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  23172. 800a0f0: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  23173. 800a0f4: 6013 str r3, [r2, #0]
  23174. __HAL_PWR_AVD_EXTI_DISABLE_FALLING_EDGE ();
  23175. 800a0f6: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  23176. 800a0fa: 685b ldr r3, [r3, #4]
  23177. 800a0fc: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  23178. 800a100: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  23179. 800a104: 6053 str r3, [r2, #4]
  23180. #if !defined (DUAL_CORE)
  23181. /* Configure the interrupt mode */
  23182. if ((sConfigAVD->Mode & AVD_MODE_IT) == AVD_MODE_IT)
  23183. 800a106: 687b ldr r3, [r7, #4]
  23184. 800a108: 685b ldr r3, [r3, #4]
  23185. 800a10a: f403 3380 and.w r3, r3, #65536 @ 0x10000
  23186. 800a10e: 2b00 cmp r3, #0
  23187. 800a110: d009 beq.n 800a126 <HAL_PWREx_ConfigAVD+0x82>
  23188. {
  23189. __HAL_PWR_AVD_EXTI_ENABLE_IT ();
  23190. 800a112: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  23191. 800a116: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  23192. 800a11a: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  23193. 800a11e: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  23194. 800a122: f8c2 3080 str.w r3, [r2, #128] @ 0x80
  23195. }
  23196. /* Configure the event mode */
  23197. if ((sConfigAVD->Mode & AVD_MODE_EVT) == AVD_MODE_EVT)
  23198. 800a126: 687b ldr r3, [r7, #4]
  23199. 800a128: 685b ldr r3, [r3, #4]
  23200. 800a12a: f403 3300 and.w r3, r3, #131072 @ 0x20000
  23201. 800a12e: 2b00 cmp r3, #0
  23202. 800a130: d009 beq.n 800a146 <HAL_PWREx_ConfigAVD+0xa2>
  23203. {
  23204. __HAL_PWR_AVD_EXTI_ENABLE_EVENT ();
  23205. 800a132: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  23206. 800a136: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  23207. 800a13a: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  23208. 800a13e: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  23209. 800a142: f8c2 3084 str.w r3, [r2, #132] @ 0x84
  23210. }
  23211. #endif /* !defined (DUAL_CORE) */
  23212. /* Rising edge configuration */
  23213. if ((sConfigAVD->Mode & AVD_RISING_EDGE) == AVD_RISING_EDGE)
  23214. 800a146: 687b ldr r3, [r7, #4]
  23215. 800a148: 685b ldr r3, [r3, #4]
  23216. 800a14a: f003 0301 and.w r3, r3, #1
  23217. 800a14e: 2b00 cmp r3, #0
  23218. 800a150: d007 beq.n 800a162 <HAL_PWREx_ConfigAVD+0xbe>
  23219. {
  23220. __HAL_PWR_AVD_EXTI_ENABLE_RISING_EDGE ();
  23221. 800a152: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  23222. 800a156: 681b ldr r3, [r3, #0]
  23223. 800a158: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  23224. 800a15c: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  23225. 800a160: 6013 str r3, [r2, #0]
  23226. }
  23227. /* Falling edge configuration */
  23228. if ((sConfigAVD->Mode & AVD_FALLING_EDGE) == AVD_FALLING_EDGE)
  23229. 800a162: 687b ldr r3, [r7, #4]
  23230. 800a164: 685b ldr r3, [r3, #4]
  23231. 800a166: f003 0302 and.w r3, r3, #2
  23232. 800a16a: 2b00 cmp r3, #0
  23233. 800a16c: d007 beq.n 800a17e <HAL_PWREx_ConfigAVD+0xda>
  23234. {
  23235. __HAL_PWR_AVD_EXTI_ENABLE_FALLING_EDGE ();
  23236. 800a16e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  23237. 800a172: 685b ldr r3, [r3, #4]
  23238. 800a174: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  23239. 800a178: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  23240. 800a17c: 6053 str r3, [r2, #4]
  23241. }
  23242. }
  23243. 800a17e: bf00 nop
  23244. 800a180: 370c adds r7, #12
  23245. 800a182: 46bd mov sp, r7
  23246. 800a184: f85d 7b04 ldr.w r7, [sp], #4
  23247. 800a188: 4770 bx lr
  23248. 800a18a: bf00 nop
  23249. 800a18c: 58024800 .word 0x58024800
  23250. 0800a190 <HAL_PWREx_EnableAVD>:
  23251. /**
  23252. * @brief Enable the Analog Voltage Detector (AVD).
  23253. * @retval None.
  23254. */
  23255. void HAL_PWREx_EnableAVD (void)
  23256. {
  23257. 800a190: b480 push {r7}
  23258. 800a192: af00 add r7, sp, #0
  23259. /* Enable the Analog Voltage Detector */
  23260. SET_BIT (PWR->CR1, PWR_CR1_AVDEN);
  23261. 800a194: 4b05 ldr r3, [pc, #20] @ (800a1ac <HAL_PWREx_EnableAVD+0x1c>)
  23262. 800a196: 681b ldr r3, [r3, #0]
  23263. 800a198: 4a04 ldr r2, [pc, #16] @ (800a1ac <HAL_PWREx_EnableAVD+0x1c>)
  23264. 800a19a: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  23265. 800a19e: 6013 str r3, [r2, #0]
  23266. }
  23267. 800a1a0: bf00 nop
  23268. 800a1a2: 46bd mov sp, r7
  23269. 800a1a4: f85d 7b04 ldr.w r7, [sp], #4
  23270. 800a1a8: 4770 bx lr
  23271. 800a1aa: bf00 nop
  23272. 800a1ac: 58024800 .word 0x58024800
  23273. 0800a1b0 <HAL_RCC_OscConfig>:
  23274. * supported by this function. User should request a transition to HSE Off
  23275. * first and then HSE On or HSE Bypass.
  23276. * @retval HAL status
  23277. */
  23278. __weak HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
  23279. {
  23280. 800a1b0: b580 push {r7, lr}
  23281. 800a1b2: b08c sub sp, #48 @ 0x30
  23282. 800a1b4: af00 add r7, sp, #0
  23283. 800a1b6: 6078 str r0, [r7, #4]
  23284. uint32_t tickstart;
  23285. uint32_t temp1_pllckcfg, temp2_pllckcfg;
  23286. /* Check Null pointer */
  23287. if (RCC_OscInitStruct == NULL)
  23288. 800a1b8: 687b ldr r3, [r7, #4]
  23289. 800a1ba: 2b00 cmp r3, #0
  23290. 800a1bc: d102 bne.n 800a1c4 <HAL_RCC_OscConfig+0x14>
  23291. {
  23292. return HAL_ERROR;
  23293. 800a1be: 2301 movs r3, #1
  23294. 800a1c0: f000 bc48 b.w 800aa54 <HAL_RCC_OscConfig+0x8a4>
  23295. }
  23296. /* Check the parameters */
  23297. assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
  23298. /*------------------------------- HSE Configuration ------------------------*/
  23299. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
  23300. 800a1c4: 687b ldr r3, [r7, #4]
  23301. 800a1c6: 681b ldr r3, [r3, #0]
  23302. 800a1c8: f003 0301 and.w r3, r3, #1
  23303. 800a1cc: 2b00 cmp r3, #0
  23304. 800a1ce: f000 8088 beq.w 800a2e2 <HAL_RCC_OscConfig+0x132>
  23305. {
  23306. /* Check the parameters */
  23307. assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
  23308. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  23309. 800a1d2: 4b99 ldr r3, [pc, #612] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23310. 800a1d4: 691b ldr r3, [r3, #16]
  23311. 800a1d6: f003 0338 and.w r3, r3, #56 @ 0x38
  23312. 800a1da: 62fb str r3, [r7, #44] @ 0x2c
  23313. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  23314. 800a1dc: 4b96 ldr r3, [pc, #600] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23315. 800a1de: 6a9b ldr r3, [r3, #40] @ 0x28
  23316. 800a1e0: 62bb str r3, [r7, #40] @ 0x28
  23317. /* When the HSE is used as system clock or clock source for PLL in these cases HSE will not disabled */
  23318. if ((temp_sysclksrc == RCC_CFGR_SWS_HSE) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_HSE)))
  23319. 800a1e2: 6afb ldr r3, [r7, #44] @ 0x2c
  23320. 800a1e4: 2b10 cmp r3, #16
  23321. 800a1e6: d007 beq.n 800a1f8 <HAL_RCC_OscConfig+0x48>
  23322. 800a1e8: 6afb ldr r3, [r7, #44] @ 0x2c
  23323. 800a1ea: 2b18 cmp r3, #24
  23324. 800a1ec: d111 bne.n 800a212 <HAL_RCC_OscConfig+0x62>
  23325. 800a1ee: 6abb ldr r3, [r7, #40] @ 0x28
  23326. 800a1f0: f003 0303 and.w r3, r3, #3
  23327. 800a1f4: 2b02 cmp r3, #2
  23328. 800a1f6: d10c bne.n 800a212 <HAL_RCC_OscConfig+0x62>
  23329. {
  23330. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
  23331. 800a1f8: 4b8f ldr r3, [pc, #572] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23332. 800a1fa: 681b ldr r3, [r3, #0]
  23333. 800a1fc: f403 3300 and.w r3, r3, #131072 @ 0x20000
  23334. 800a200: 2b00 cmp r3, #0
  23335. 800a202: d06d beq.n 800a2e0 <HAL_RCC_OscConfig+0x130>
  23336. 800a204: 687b ldr r3, [r7, #4]
  23337. 800a206: 685b ldr r3, [r3, #4]
  23338. 800a208: 2b00 cmp r3, #0
  23339. 800a20a: d169 bne.n 800a2e0 <HAL_RCC_OscConfig+0x130>
  23340. {
  23341. return HAL_ERROR;
  23342. 800a20c: 2301 movs r3, #1
  23343. 800a20e: f000 bc21 b.w 800aa54 <HAL_RCC_OscConfig+0x8a4>
  23344. }
  23345. }
  23346. else
  23347. {
  23348. /* Set the new HSE configuration ---------------------------------------*/
  23349. __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
  23350. 800a212: 687b ldr r3, [r7, #4]
  23351. 800a214: 685b ldr r3, [r3, #4]
  23352. 800a216: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  23353. 800a21a: d106 bne.n 800a22a <HAL_RCC_OscConfig+0x7a>
  23354. 800a21c: 4b86 ldr r3, [pc, #536] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23355. 800a21e: 681b ldr r3, [r3, #0]
  23356. 800a220: 4a85 ldr r2, [pc, #532] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23357. 800a222: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  23358. 800a226: 6013 str r3, [r2, #0]
  23359. 800a228: e02e b.n 800a288 <HAL_RCC_OscConfig+0xd8>
  23360. 800a22a: 687b ldr r3, [r7, #4]
  23361. 800a22c: 685b ldr r3, [r3, #4]
  23362. 800a22e: 2b00 cmp r3, #0
  23363. 800a230: d10c bne.n 800a24c <HAL_RCC_OscConfig+0x9c>
  23364. 800a232: 4b81 ldr r3, [pc, #516] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23365. 800a234: 681b ldr r3, [r3, #0]
  23366. 800a236: 4a80 ldr r2, [pc, #512] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23367. 800a238: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  23368. 800a23c: 6013 str r3, [r2, #0]
  23369. 800a23e: 4b7e ldr r3, [pc, #504] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23370. 800a240: 681b ldr r3, [r3, #0]
  23371. 800a242: 4a7d ldr r2, [pc, #500] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23372. 800a244: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  23373. 800a248: 6013 str r3, [r2, #0]
  23374. 800a24a: e01d b.n 800a288 <HAL_RCC_OscConfig+0xd8>
  23375. 800a24c: 687b ldr r3, [r7, #4]
  23376. 800a24e: 685b ldr r3, [r3, #4]
  23377. 800a250: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  23378. 800a254: d10c bne.n 800a270 <HAL_RCC_OscConfig+0xc0>
  23379. 800a256: 4b78 ldr r3, [pc, #480] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23380. 800a258: 681b ldr r3, [r3, #0]
  23381. 800a25a: 4a77 ldr r2, [pc, #476] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23382. 800a25c: f443 2380 orr.w r3, r3, #262144 @ 0x40000
  23383. 800a260: 6013 str r3, [r2, #0]
  23384. 800a262: 4b75 ldr r3, [pc, #468] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23385. 800a264: 681b ldr r3, [r3, #0]
  23386. 800a266: 4a74 ldr r2, [pc, #464] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23387. 800a268: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  23388. 800a26c: 6013 str r3, [r2, #0]
  23389. 800a26e: e00b b.n 800a288 <HAL_RCC_OscConfig+0xd8>
  23390. 800a270: 4b71 ldr r3, [pc, #452] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23391. 800a272: 681b ldr r3, [r3, #0]
  23392. 800a274: 4a70 ldr r2, [pc, #448] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23393. 800a276: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  23394. 800a27a: 6013 str r3, [r2, #0]
  23395. 800a27c: 4b6e ldr r3, [pc, #440] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23396. 800a27e: 681b ldr r3, [r3, #0]
  23397. 800a280: 4a6d ldr r2, [pc, #436] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23398. 800a282: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  23399. 800a286: 6013 str r3, [r2, #0]
  23400. /* Check the HSE State */
  23401. if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
  23402. 800a288: 687b ldr r3, [r7, #4]
  23403. 800a28a: 685b ldr r3, [r3, #4]
  23404. 800a28c: 2b00 cmp r3, #0
  23405. 800a28e: d013 beq.n 800a2b8 <HAL_RCC_OscConfig+0x108>
  23406. {
  23407. /* Get Start Tick*/
  23408. tickstart = HAL_GetTick();
  23409. 800a290: f7fa fbe8 bl 8004a64 <HAL_GetTick>
  23410. 800a294: 6278 str r0, [r7, #36] @ 0x24
  23411. /* Wait till HSE is ready */
  23412. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  23413. 800a296: e008 b.n 800a2aa <HAL_RCC_OscConfig+0xfa>
  23414. {
  23415. if ((uint32_t)(HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
  23416. 800a298: f7fa fbe4 bl 8004a64 <HAL_GetTick>
  23417. 800a29c: 4602 mov r2, r0
  23418. 800a29e: 6a7b ldr r3, [r7, #36] @ 0x24
  23419. 800a2a0: 1ad3 subs r3, r2, r3
  23420. 800a2a2: 2b64 cmp r3, #100 @ 0x64
  23421. 800a2a4: d901 bls.n 800a2aa <HAL_RCC_OscConfig+0xfa>
  23422. {
  23423. return HAL_TIMEOUT;
  23424. 800a2a6: 2303 movs r3, #3
  23425. 800a2a8: e3d4 b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  23426. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  23427. 800a2aa: 4b63 ldr r3, [pc, #396] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23428. 800a2ac: 681b ldr r3, [r3, #0]
  23429. 800a2ae: f403 3300 and.w r3, r3, #131072 @ 0x20000
  23430. 800a2b2: 2b00 cmp r3, #0
  23431. 800a2b4: d0f0 beq.n 800a298 <HAL_RCC_OscConfig+0xe8>
  23432. 800a2b6: e014 b.n 800a2e2 <HAL_RCC_OscConfig+0x132>
  23433. }
  23434. }
  23435. else
  23436. {
  23437. /* Get Start Tick*/
  23438. tickstart = HAL_GetTick();
  23439. 800a2b8: f7fa fbd4 bl 8004a64 <HAL_GetTick>
  23440. 800a2bc: 6278 str r0, [r7, #36] @ 0x24
  23441. /* Wait till HSE is disabled */
  23442. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U)
  23443. 800a2be: e008 b.n 800a2d2 <HAL_RCC_OscConfig+0x122>
  23444. {
  23445. if ((uint32_t)(HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
  23446. 800a2c0: f7fa fbd0 bl 8004a64 <HAL_GetTick>
  23447. 800a2c4: 4602 mov r2, r0
  23448. 800a2c6: 6a7b ldr r3, [r7, #36] @ 0x24
  23449. 800a2c8: 1ad3 subs r3, r2, r3
  23450. 800a2ca: 2b64 cmp r3, #100 @ 0x64
  23451. 800a2cc: d901 bls.n 800a2d2 <HAL_RCC_OscConfig+0x122>
  23452. {
  23453. return HAL_TIMEOUT;
  23454. 800a2ce: 2303 movs r3, #3
  23455. 800a2d0: e3c0 b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  23456. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U)
  23457. 800a2d2: 4b59 ldr r3, [pc, #356] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23458. 800a2d4: 681b ldr r3, [r3, #0]
  23459. 800a2d6: f403 3300 and.w r3, r3, #131072 @ 0x20000
  23460. 800a2da: 2b00 cmp r3, #0
  23461. 800a2dc: d1f0 bne.n 800a2c0 <HAL_RCC_OscConfig+0x110>
  23462. 800a2de: e000 b.n 800a2e2 <HAL_RCC_OscConfig+0x132>
  23463. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
  23464. 800a2e0: bf00 nop
  23465. }
  23466. }
  23467. }
  23468. }
  23469. /*----------------------------- HSI Configuration --------------------------*/
  23470. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
  23471. 800a2e2: 687b ldr r3, [r7, #4]
  23472. 800a2e4: 681b ldr r3, [r3, #0]
  23473. 800a2e6: f003 0302 and.w r3, r3, #2
  23474. 800a2ea: 2b00 cmp r3, #0
  23475. 800a2ec: f000 80ca beq.w 800a484 <HAL_RCC_OscConfig+0x2d4>
  23476. /* Check the parameters */
  23477. assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
  23478. assert_param(IS_RCC_HSICALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
  23479. /* When the HSI is used as system clock it will not be disabled */
  23480. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  23481. 800a2f0: 4b51 ldr r3, [pc, #324] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23482. 800a2f2: 691b ldr r3, [r3, #16]
  23483. 800a2f4: f003 0338 and.w r3, r3, #56 @ 0x38
  23484. 800a2f8: 623b str r3, [r7, #32]
  23485. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  23486. 800a2fa: 4b4f ldr r3, [pc, #316] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23487. 800a2fc: 6a9b ldr r3, [r3, #40] @ 0x28
  23488. 800a2fe: 61fb str r3, [r7, #28]
  23489. if ((temp_sysclksrc == RCC_CFGR_SWS_HSI) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_HSI)))
  23490. 800a300: 6a3b ldr r3, [r7, #32]
  23491. 800a302: 2b00 cmp r3, #0
  23492. 800a304: d007 beq.n 800a316 <HAL_RCC_OscConfig+0x166>
  23493. 800a306: 6a3b ldr r3, [r7, #32]
  23494. 800a308: 2b18 cmp r3, #24
  23495. 800a30a: d156 bne.n 800a3ba <HAL_RCC_OscConfig+0x20a>
  23496. 800a30c: 69fb ldr r3, [r7, #28]
  23497. 800a30e: f003 0303 and.w r3, r3, #3
  23498. 800a312: 2b00 cmp r3, #0
  23499. 800a314: d151 bne.n 800a3ba <HAL_RCC_OscConfig+0x20a>
  23500. {
  23501. /* When HSI is used as system clock it will not be disabled */
  23502. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  23503. 800a316: 4b48 ldr r3, [pc, #288] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23504. 800a318: 681b ldr r3, [r3, #0]
  23505. 800a31a: f003 0304 and.w r3, r3, #4
  23506. 800a31e: 2b00 cmp r3, #0
  23507. 800a320: d005 beq.n 800a32e <HAL_RCC_OscConfig+0x17e>
  23508. 800a322: 687b ldr r3, [r7, #4]
  23509. 800a324: 68db ldr r3, [r3, #12]
  23510. 800a326: 2b00 cmp r3, #0
  23511. 800a328: d101 bne.n 800a32e <HAL_RCC_OscConfig+0x17e>
  23512. {
  23513. return HAL_ERROR;
  23514. 800a32a: 2301 movs r3, #1
  23515. 800a32c: e392 b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  23516. }
  23517. /* Otherwise, only HSI division and calibration are allowed */
  23518. else
  23519. {
  23520. /* Enable the Internal High Speed oscillator (HSI, HSIDIV2, HSIDIV4, or HSIDIV8) */
  23521. __HAL_RCC_HSI_CONFIG(RCC_OscInitStruct->HSIState);
  23522. 800a32e: 4b42 ldr r3, [pc, #264] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23523. 800a330: 681b ldr r3, [r3, #0]
  23524. 800a332: f023 0219 bic.w r2, r3, #25
  23525. 800a336: 687b ldr r3, [r7, #4]
  23526. 800a338: 68db ldr r3, [r3, #12]
  23527. 800a33a: 493f ldr r1, [pc, #252] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23528. 800a33c: 4313 orrs r3, r2
  23529. 800a33e: 600b str r3, [r1, #0]
  23530. /* Get Start Tick*/
  23531. tickstart = HAL_GetTick();
  23532. 800a340: f7fa fb90 bl 8004a64 <HAL_GetTick>
  23533. 800a344: 6278 str r0, [r7, #36] @ 0x24
  23534. /* Wait till HSI is ready */
  23535. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  23536. 800a346: e008 b.n 800a35a <HAL_RCC_OscConfig+0x1aa>
  23537. {
  23538. if ((uint32_t)(HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  23539. 800a348: f7fa fb8c bl 8004a64 <HAL_GetTick>
  23540. 800a34c: 4602 mov r2, r0
  23541. 800a34e: 6a7b ldr r3, [r7, #36] @ 0x24
  23542. 800a350: 1ad3 subs r3, r2, r3
  23543. 800a352: 2b02 cmp r3, #2
  23544. 800a354: d901 bls.n 800a35a <HAL_RCC_OscConfig+0x1aa>
  23545. {
  23546. return HAL_TIMEOUT;
  23547. 800a356: 2303 movs r3, #3
  23548. 800a358: e37c b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  23549. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  23550. 800a35a: 4b37 ldr r3, [pc, #220] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23551. 800a35c: 681b ldr r3, [r3, #0]
  23552. 800a35e: f003 0304 and.w r3, r3, #4
  23553. 800a362: 2b00 cmp r3, #0
  23554. 800a364: d0f0 beq.n 800a348 <HAL_RCC_OscConfig+0x198>
  23555. }
  23556. }
  23557. /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/
  23558. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  23559. 800a366: f7fa fb89 bl 8004a7c <HAL_GetREVID>
  23560. 800a36a: 4603 mov r3, r0
  23561. 800a36c: f241 0203 movw r2, #4099 @ 0x1003
  23562. 800a370: 4293 cmp r3, r2
  23563. 800a372: d817 bhi.n 800a3a4 <HAL_RCC_OscConfig+0x1f4>
  23564. 800a374: 687b ldr r3, [r7, #4]
  23565. 800a376: 691b ldr r3, [r3, #16]
  23566. 800a378: 2b40 cmp r3, #64 @ 0x40
  23567. 800a37a: d108 bne.n 800a38e <HAL_RCC_OscConfig+0x1de>
  23568. 800a37c: 4b2e ldr r3, [pc, #184] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23569. 800a37e: 685b ldr r3, [r3, #4]
  23570. 800a380: f423 337c bic.w r3, r3, #258048 @ 0x3f000
  23571. 800a384: 4a2c ldr r2, [pc, #176] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23572. 800a386: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  23573. 800a38a: 6053 str r3, [r2, #4]
  23574. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  23575. 800a38c: e07a b.n 800a484 <HAL_RCC_OscConfig+0x2d4>
  23576. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  23577. 800a38e: 4b2a ldr r3, [pc, #168] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23578. 800a390: 685b ldr r3, [r3, #4]
  23579. 800a392: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  23580. 800a396: 687b ldr r3, [r7, #4]
  23581. 800a398: 691b ldr r3, [r3, #16]
  23582. 800a39a: 031b lsls r3, r3, #12
  23583. 800a39c: 4926 ldr r1, [pc, #152] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23584. 800a39e: 4313 orrs r3, r2
  23585. 800a3a0: 604b str r3, [r1, #4]
  23586. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  23587. 800a3a2: e06f b.n 800a484 <HAL_RCC_OscConfig+0x2d4>
  23588. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  23589. 800a3a4: 4b24 ldr r3, [pc, #144] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23590. 800a3a6: 685b ldr r3, [r3, #4]
  23591. 800a3a8: f023 42fe bic.w r2, r3, #2130706432 @ 0x7f000000
  23592. 800a3ac: 687b ldr r3, [r7, #4]
  23593. 800a3ae: 691b ldr r3, [r3, #16]
  23594. 800a3b0: 061b lsls r3, r3, #24
  23595. 800a3b2: 4921 ldr r1, [pc, #132] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23596. 800a3b4: 4313 orrs r3, r2
  23597. 800a3b6: 604b str r3, [r1, #4]
  23598. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  23599. 800a3b8: e064 b.n 800a484 <HAL_RCC_OscConfig+0x2d4>
  23600. }
  23601. else
  23602. {
  23603. /* Check the HSI State */
  23604. if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF)
  23605. 800a3ba: 687b ldr r3, [r7, #4]
  23606. 800a3bc: 68db ldr r3, [r3, #12]
  23607. 800a3be: 2b00 cmp r3, #0
  23608. 800a3c0: d047 beq.n 800a452 <HAL_RCC_OscConfig+0x2a2>
  23609. {
  23610. /* Enable the Internal High Speed oscillator (HSI, HSIDIV2,HSIDIV4, or HSIDIV8) */
  23611. __HAL_RCC_HSI_CONFIG(RCC_OscInitStruct->HSIState);
  23612. 800a3c2: 4b1d ldr r3, [pc, #116] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23613. 800a3c4: 681b ldr r3, [r3, #0]
  23614. 800a3c6: f023 0219 bic.w r2, r3, #25
  23615. 800a3ca: 687b ldr r3, [r7, #4]
  23616. 800a3cc: 68db ldr r3, [r3, #12]
  23617. 800a3ce: 491a ldr r1, [pc, #104] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23618. 800a3d0: 4313 orrs r3, r2
  23619. 800a3d2: 600b str r3, [r1, #0]
  23620. /* Get Start Tick*/
  23621. tickstart = HAL_GetTick();
  23622. 800a3d4: f7fa fb46 bl 8004a64 <HAL_GetTick>
  23623. 800a3d8: 6278 str r0, [r7, #36] @ 0x24
  23624. /* Wait till HSI is ready */
  23625. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  23626. 800a3da: e008 b.n 800a3ee <HAL_RCC_OscConfig+0x23e>
  23627. {
  23628. if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  23629. 800a3dc: f7fa fb42 bl 8004a64 <HAL_GetTick>
  23630. 800a3e0: 4602 mov r2, r0
  23631. 800a3e2: 6a7b ldr r3, [r7, #36] @ 0x24
  23632. 800a3e4: 1ad3 subs r3, r2, r3
  23633. 800a3e6: 2b02 cmp r3, #2
  23634. 800a3e8: d901 bls.n 800a3ee <HAL_RCC_OscConfig+0x23e>
  23635. {
  23636. return HAL_TIMEOUT;
  23637. 800a3ea: 2303 movs r3, #3
  23638. 800a3ec: e332 b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  23639. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  23640. 800a3ee: 4b12 ldr r3, [pc, #72] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23641. 800a3f0: 681b ldr r3, [r3, #0]
  23642. 800a3f2: f003 0304 and.w r3, r3, #4
  23643. 800a3f6: 2b00 cmp r3, #0
  23644. 800a3f8: d0f0 beq.n 800a3dc <HAL_RCC_OscConfig+0x22c>
  23645. }
  23646. }
  23647. /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/
  23648. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  23649. 800a3fa: f7fa fb3f bl 8004a7c <HAL_GetREVID>
  23650. 800a3fe: 4603 mov r3, r0
  23651. 800a400: f241 0203 movw r2, #4099 @ 0x1003
  23652. 800a404: 4293 cmp r3, r2
  23653. 800a406: d819 bhi.n 800a43c <HAL_RCC_OscConfig+0x28c>
  23654. 800a408: 687b ldr r3, [r7, #4]
  23655. 800a40a: 691b ldr r3, [r3, #16]
  23656. 800a40c: 2b40 cmp r3, #64 @ 0x40
  23657. 800a40e: d108 bne.n 800a422 <HAL_RCC_OscConfig+0x272>
  23658. 800a410: 4b09 ldr r3, [pc, #36] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23659. 800a412: 685b ldr r3, [r3, #4]
  23660. 800a414: f423 337c bic.w r3, r3, #258048 @ 0x3f000
  23661. 800a418: 4a07 ldr r2, [pc, #28] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23662. 800a41a: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  23663. 800a41e: 6053 str r3, [r2, #4]
  23664. 800a420: e030 b.n 800a484 <HAL_RCC_OscConfig+0x2d4>
  23665. 800a422: 4b05 ldr r3, [pc, #20] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23666. 800a424: 685b ldr r3, [r3, #4]
  23667. 800a426: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  23668. 800a42a: 687b ldr r3, [r7, #4]
  23669. 800a42c: 691b ldr r3, [r3, #16]
  23670. 800a42e: 031b lsls r3, r3, #12
  23671. 800a430: 4901 ldr r1, [pc, #4] @ (800a438 <HAL_RCC_OscConfig+0x288>)
  23672. 800a432: 4313 orrs r3, r2
  23673. 800a434: 604b str r3, [r1, #4]
  23674. 800a436: e025 b.n 800a484 <HAL_RCC_OscConfig+0x2d4>
  23675. 800a438: 58024400 .word 0x58024400
  23676. 800a43c: 4b9a ldr r3, [pc, #616] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23677. 800a43e: 685b ldr r3, [r3, #4]
  23678. 800a440: f023 42fe bic.w r2, r3, #2130706432 @ 0x7f000000
  23679. 800a444: 687b ldr r3, [r7, #4]
  23680. 800a446: 691b ldr r3, [r3, #16]
  23681. 800a448: 061b lsls r3, r3, #24
  23682. 800a44a: 4997 ldr r1, [pc, #604] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23683. 800a44c: 4313 orrs r3, r2
  23684. 800a44e: 604b str r3, [r1, #4]
  23685. 800a450: e018 b.n 800a484 <HAL_RCC_OscConfig+0x2d4>
  23686. }
  23687. else
  23688. {
  23689. /* Disable the Internal High Speed oscillator (HSI). */
  23690. __HAL_RCC_HSI_DISABLE();
  23691. 800a452: 4b95 ldr r3, [pc, #596] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23692. 800a454: 681b ldr r3, [r3, #0]
  23693. 800a456: 4a94 ldr r2, [pc, #592] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23694. 800a458: f023 0301 bic.w r3, r3, #1
  23695. 800a45c: 6013 str r3, [r2, #0]
  23696. /* Get Start Tick*/
  23697. tickstart = HAL_GetTick();
  23698. 800a45e: f7fa fb01 bl 8004a64 <HAL_GetTick>
  23699. 800a462: 6278 str r0, [r7, #36] @ 0x24
  23700. /* Wait till HSI is disabled */
  23701. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U)
  23702. 800a464: e008 b.n 800a478 <HAL_RCC_OscConfig+0x2c8>
  23703. {
  23704. if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  23705. 800a466: f7fa fafd bl 8004a64 <HAL_GetTick>
  23706. 800a46a: 4602 mov r2, r0
  23707. 800a46c: 6a7b ldr r3, [r7, #36] @ 0x24
  23708. 800a46e: 1ad3 subs r3, r2, r3
  23709. 800a470: 2b02 cmp r3, #2
  23710. 800a472: d901 bls.n 800a478 <HAL_RCC_OscConfig+0x2c8>
  23711. {
  23712. return HAL_TIMEOUT;
  23713. 800a474: 2303 movs r3, #3
  23714. 800a476: e2ed b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  23715. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U)
  23716. 800a478: 4b8b ldr r3, [pc, #556] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23717. 800a47a: 681b ldr r3, [r3, #0]
  23718. 800a47c: f003 0304 and.w r3, r3, #4
  23719. 800a480: 2b00 cmp r3, #0
  23720. 800a482: d1f0 bne.n 800a466 <HAL_RCC_OscConfig+0x2b6>
  23721. }
  23722. }
  23723. }
  23724. }
  23725. /*----------------------------- CSI Configuration --------------------------*/
  23726. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_CSI) == RCC_OSCILLATORTYPE_CSI)
  23727. 800a484: 687b ldr r3, [r7, #4]
  23728. 800a486: 681b ldr r3, [r3, #0]
  23729. 800a488: f003 0310 and.w r3, r3, #16
  23730. 800a48c: 2b00 cmp r3, #0
  23731. 800a48e: f000 80a9 beq.w 800a5e4 <HAL_RCC_OscConfig+0x434>
  23732. /* Check the parameters */
  23733. assert_param(IS_RCC_CSI(RCC_OscInitStruct->CSIState));
  23734. assert_param(IS_RCC_CSICALIBRATION_VALUE(RCC_OscInitStruct->CSICalibrationValue));
  23735. /* When the CSI is used as system clock it will not disabled */
  23736. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  23737. 800a492: 4b85 ldr r3, [pc, #532] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23738. 800a494: 691b ldr r3, [r3, #16]
  23739. 800a496: f003 0338 and.w r3, r3, #56 @ 0x38
  23740. 800a49a: 61bb str r3, [r7, #24]
  23741. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  23742. 800a49c: 4b82 ldr r3, [pc, #520] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23743. 800a49e: 6a9b ldr r3, [r3, #40] @ 0x28
  23744. 800a4a0: 617b str r3, [r7, #20]
  23745. if ((temp_sysclksrc == RCC_CFGR_SWS_CSI) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_CSI)))
  23746. 800a4a2: 69bb ldr r3, [r7, #24]
  23747. 800a4a4: 2b08 cmp r3, #8
  23748. 800a4a6: d007 beq.n 800a4b8 <HAL_RCC_OscConfig+0x308>
  23749. 800a4a8: 69bb ldr r3, [r7, #24]
  23750. 800a4aa: 2b18 cmp r3, #24
  23751. 800a4ac: d13a bne.n 800a524 <HAL_RCC_OscConfig+0x374>
  23752. 800a4ae: 697b ldr r3, [r7, #20]
  23753. 800a4b0: f003 0303 and.w r3, r3, #3
  23754. 800a4b4: 2b01 cmp r3, #1
  23755. 800a4b6: d135 bne.n 800a524 <HAL_RCC_OscConfig+0x374>
  23756. {
  23757. /* When CSI is used as system clock it will not disabled */
  23758. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  23759. 800a4b8: 4b7b ldr r3, [pc, #492] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23760. 800a4ba: 681b ldr r3, [r3, #0]
  23761. 800a4bc: f403 7380 and.w r3, r3, #256 @ 0x100
  23762. 800a4c0: 2b00 cmp r3, #0
  23763. 800a4c2: d005 beq.n 800a4d0 <HAL_RCC_OscConfig+0x320>
  23764. 800a4c4: 687b ldr r3, [r7, #4]
  23765. 800a4c6: 69db ldr r3, [r3, #28]
  23766. 800a4c8: 2b80 cmp r3, #128 @ 0x80
  23767. 800a4ca: d001 beq.n 800a4d0 <HAL_RCC_OscConfig+0x320>
  23768. {
  23769. return HAL_ERROR;
  23770. 800a4cc: 2301 movs r3, #1
  23771. 800a4ce: e2c1 b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  23772. }
  23773. /* Otherwise, just the calibration is allowed */
  23774. else
  23775. {
  23776. /* Adjusts the Internal High Speed oscillator (CSI) calibration value.*/
  23777. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  23778. 800a4d0: f7fa fad4 bl 8004a7c <HAL_GetREVID>
  23779. 800a4d4: 4603 mov r3, r0
  23780. 800a4d6: f241 0203 movw r2, #4099 @ 0x1003
  23781. 800a4da: 4293 cmp r3, r2
  23782. 800a4dc: d817 bhi.n 800a50e <HAL_RCC_OscConfig+0x35e>
  23783. 800a4de: 687b ldr r3, [r7, #4]
  23784. 800a4e0: 6a1b ldr r3, [r3, #32]
  23785. 800a4e2: 2b20 cmp r3, #32
  23786. 800a4e4: d108 bne.n 800a4f8 <HAL_RCC_OscConfig+0x348>
  23787. 800a4e6: 4b70 ldr r3, [pc, #448] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23788. 800a4e8: 685b ldr r3, [r3, #4]
  23789. 800a4ea: f023 43f8 bic.w r3, r3, #2080374784 @ 0x7c000000
  23790. 800a4ee: 4a6e ldr r2, [pc, #440] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23791. 800a4f0: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000
  23792. 800a4f4: 6053 str r3, [r2, #4]
  23793. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  23794. 800a4f6: e075 b.n 800a5e4 <HAL_RCC_OscConfig+0x434>
  23795. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  23796. 800a4f8: 4b6b ldr r3, [pc, #428] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23797. 800a4fa: 685b ldr r3, [r3, #4]
  23798. 800a4fc: f023 42f8 bic.w r2, r3, #2080374784 @ 0x7c000000
  23799. 800a500: 687b ldr r3, [r7, #4]
  23800. 800a502: 6a1b ldr r3, [r3, #32]
  23801. 800a504: 069b lsls r3, r3, #26
  23802. 800a506: 4968 ldr r1, [pc, #416] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23803. 800a508: 4313 orrs r3, r2
  23804. 800a50a: 604b str r3, [r1, #4]
  23805. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  23806. 800a50c: e06a b.n 800a5e4 <HAL_RCC_OscConfig+0x434>
  23807. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  23808. 800a50e: 4b66 ldr r3, [pc, #408] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23809. 800a510: 68db ldr r3, [r3, #12]
  23810. 800a512: f023 527c bic.w r2, r3, #1056964608 @ 0x3f000000
  23811. 800a516: 687b ldr r3, [r7, #4]
  23812. 800a518: 6a1b ldr r3, [r3, #32]
  23813. 800a51a: 061b lsls r3, r3, #24
  23814. 800a51c: 4962 ldr r1, [pc, #392] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23815. 800a51e: 4313 orrs r3, r2
  23816. 800a520: 60cb str r3, [r1, #12]
  23817. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  23818. 800a522: e05f b.n 800a5e4 <HAL_RCC_OscConfig+0x434>
  23819. }
  23820. }
  23821. else
  23822. {
  23823. /* Check the CSI State */
  23824. if ((RCC_OscInitStruct->CSIState) != RCC_CSI_OFF)
  23825. 800a524: 687b ldr r3, [r7, #4]
  23826. 800a526: 69db ldr r3, [r3, #28]
  23827. 800a528: 2b00 cmp r3, #0
  23828. 800a52a: d042 beq.n 800a5b2 <HAL_RCC_OscConfig+0x402>
  23829. {
  23830. /* Enable the Internal High Speed oscillator (CSI). */
  23831. __HAL_RCC_CSI_ENABLE();
  23832. 800a52c: 4b5e ldr r3, [pc, #376] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23833. 800a52e: 681b ldr r3, [r3, #0]
  23834. 800a530: 4a5d ldr r2, [pc, #372] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23835. 800a532: f043 0380 orr.w r3, r3, #128 @ 0x80
  23836. 800a536: 6013 str r3, [r2, #0]
  23837. /* Get Start Tick*/
  23838. tickstart = HAL_GetTick();
  23839. 800a538: f7fa fa94 bl 8004a64 <HAL_GetTick>
  23840. 800a53c: 6278 str r0, [r7, #36] @ 0x24
  23841. /* Wait till CSI is ready */
  23842. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  23843. 800a53e: e008 b.n 800a552 <HAL_RCC_OscConfig+0x3a2>
  23844. {
  23845. if ((HAL_GetTick() - tickstart) > CSI_TIMEOUT_VALUE)
  23846. 800a540: f7fa fa90 bl 8004a64 <HAL_GetTick>
  23847. 800a544: 4602 mov r2, r0
  23848. 800a546: 6a7b ldr r3, [r7, #36] @ 0x24
  23849. 800a548: 1ad3 subs r3, r2, r3
  23850. 800a54a: 2b02 cmp r3, #2
  23851. 800a54c: d901 bls.n 800a552 <HAL_RCC_OscConfig+0x3a2>
  23852. {
  23853. return HAL_TIMEOUT;
  23854. 800a54e: 2303 movs r3, #3
  23855. 800a550: e280 b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  23856. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  23857. 800a552: 4b55 ldr r3, [pc, #340] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23858. 800a554: 681b ldr r3, [r3, #0]
  23859. 800a556: f403 7380 and.w r3, r3, #256 @ 0x100
  23860. 800a55a: 2b00 cmp r3, #0
  23861. 800a55c: d0f0 beq.n 800a540 <HAL_RCC_OscConfig+0x390>
  23862. }
  23863. }
  23864. /* Adjusts the Internal High Speed oscillator (CSI) calibration value.*/
  23865. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  23866. 800a55e: f7fa fa8d bl 8004a7c <HAL_GetREVID>
  23867. 800a562: 4603 mov r3, r0
  23868. 800a564: f241 0203 movw r2, #4099 @ 0x1003
  23869. 800a568: 4293 cmp r3, r2
  23870. 800a56a: d817 bhi.n 800a59c <HAL_RCC_OscConfig+0x3ec>
  23871. 800a56c: 687b ldr r3, [r7, #4]
  23872. 800a56e: 6a1b ldr r3, [r3, #32]
  23873. 800a570: 2b20 cmp r3, #32
  23874. 800a572: d108 bne.n 800a586 <HAL_RCC_OscConfig+0x3d6>
  23875. 800a574: 4b4c ldr r3, [pc, #304] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23876. 800a576: 685b ldr r3, [r3, #4]
  23877. 800a578: f023 43f8 bic.w r3, r3, #2080374784 @ 0x7c000000
  23878. 800a57c: 4a4a ldr r2, [pc, #296] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23879. 800a57e: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000
  23880. 800a582: 6053 str r3, [r2, #4]
  23881. 800a584: e02e b.n 800a5e4 <HAL_RCC_OscConfig+0x434>
  23882. 800a586: 4b48 ldr r3, [pc, #288] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23883. 800a588: 685b ldr r3, [r3, #4]
  23884. 800a58a: f023 42f8 bic.w r2, r3, #2080374784 @ 0x7c000000
  23885. 800a58e: 687b ldr r3, [r7, #4]
  23886. 800a590: 6a1b ldr r3, [r3, #32]
  23887. 800a592: 069b lsls r3, r3, #26
  23888. 800a594: 4944 ldr r1, [pc, #272] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23889. 800a596: 4313 orrs r3, r2
  23890. 800a598: 604b str r3, [r1, #4]
  23891. 800a59a: e023 b.n 800a5e4 <HAL_RCC_OscConfig+0x434>
  23892. 800a59c: 4b42 ldr r3, [pc, #264] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23893. 800a59e: 68db ldr r3, [r3, #12]
  23894. 800a5a0: f023 527c bic.w r2, r3, #1056964608 @ 0x3f000000
  23895. 800a5a4: 687b ldr r3, [r7, #4]
  23896. 800a5a6: 6a1b ldr r3, [r3, #32]
  23897. 800a5a8: 061b lsls r3, r3, #24
  23898. 800a5aa: 493f ldr r1, [pc, #252] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23899. 800a5ac: 4313 orrs r3, r2
  23900. 800a5ae: 60cb str r3, [r1, #12]
  23901. 800a5b0: e018 b.n 800a5e4 <HAL_RCC_OscConfig+0x434>
  23902. }
  23903. else
  23904. {
  23905. /* Disable the Internal High Speed oscillator (CSI). */
  23906. __HAL_RCC_CSI_DISABLE();
  23907. 800a5b2: 4b3d ldr r3, [pc, #244] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23908. 800a5b4: 681b ldr r3, [r3, #0]
  23909. 800a5b6: 4a3c ldr r2, [pc, #240] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23910. 800a5b8: f023 0380 bic.w r3, r3, #128 @ 0x80
  23911. 800a5bc: 6013 str r3, [r2, #0]
  23912. /* Get Start Tick*/
  23913. tickstart = HAL_GetTick();
  23914. 800a5be: f7fa fa51 bl 8004a64 <HAL_GetTick>
  23915. 800a5c2: 6278 str r0, [r7, #36] @ 0x24
  23916. /* Wait till CSI is disabled */
  23917. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U)
  23918. 800a5c4: e008 b.n 800a5d8 <HAL_RCC_OscConfig+0x428>
  23919. {
  23920. if ((HAL_GetTick() - tickstart) > CSI_TIMEOUT_VALUE)
  23921. 800a5c6: f7fa fa4d bl 8004a64 <HAL_GetTick>
  23922. 800a5ca: 4602 mov r2, r0
  23923. 800a5cc: 6a7b ldr r3, [r7, #36] @ 0x24
  23924. 800a5ce: 1ad3 subs r3, r2, r3
  23925. 800a5d0: 2b02 cmp r3, #2
  23926. 800a5d2: d901 bls.n 800a5d8 <HAL_RCC_OscConfig+0x428>
  23927. {
  23928. return HAL_TIMEOUT;
  23929. 800a5d4: 2303 movs r3, #3
  23930. 800a5d6: e23d b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  23931. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U)
  23932. 800a5d8: 4b33 ldr r3, [pc, #204] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23933. 800a5da: 681b ldr r3, [r3, #0]
  23934. 800a5dc: f403 7380 and.w r3, r3, #256 @ 0x100
  23935. 800a5e0: 2b00 cmp r3, #0
  23936. 800a5e2: d1f0 bne.n 800a5c6 <HAL_RCC_OscConfig+0x416>
  23937. }
  23938. }
  23939. }
  23940. }
  23941. /*------------------------------ LSI Configuration -------------------------*/
  23942. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
  23943. 800a5e4: 687b ldr r3, [r7, #4]
  23944. 800a5e6: 681b ldr r3, [r3, #0]
  23945. 800a5e8: f003 0308 and.w r3, r3, #8
  23946. 800a5ec: 2b00 cmp r3, #0
  23947. 800a5ee: d036 beq.n 800a65e <HAL_RCC_OscConfig+0x4ae>
  23948. {
  23949. /* Check the parameters */
  23950. assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
  23951. /* Check the LSI State */
  23952. if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF)
  23953. 800a5f0: 687b ldr r3, [r7, #4]
  23954. 800a5f2: 695b ldr r3, [r3, #20]
  23955. 800a5f4: 2b00 cmp r3, #0
  23956. 800a5f6: d019 beq.n 800a62c <HAL_RCC_OscConfig+0x47c>
  23957. {
  23958. /* Enable the Internal Low Speed oscillator (LSI). */
  23959. __HAL_RCC_LSI_ENABLE();
  23960. 800a5f8: 4b2b ldr r3, [pc, #172] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23961. 800a5fa: 6f5b ldr r3, [r3, #116] @ 0x74
  23962. 800a5fc: 4a2a ldr r2, [pc, #168] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23963. 800a5fe: f043 0301 orr.w r3, r3, #1
  23964. 800a602: 6753 str r3, [r2, #116] @ 0x74
  23965. /* Get Start Tick*/
  23966. tickstart = HAL_GetTick();
  23967. 800a604: f7fa fa2e bl 8004a64 <HAL_GetTick>
  23968. 800a608: 6278 str r0, [r7, #36] @ 0x24
  23969. /* Wait till LSI is ready */
  23970. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == 0U)
  23971. 800a60a: e008 b.n 800a61e <HAL_RCC_OscConfig+0x46e>
  23972. {
  23973. if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
  23974. 800a60c: f7fa fa2a bl 8004a64 <HAL_GetTick>
  23975. 800a610: 4602 mov r2, r0
  23976. 800a612: 6a7b ldr r3, [r7, #36] @ 0x24
  23977. 800a614: 1ad3 subs r3, r2, r3
  23978. 800a616: 2b02 cmp r3, #2
  23979. 800a618: d901 bls.n 800a61e <HAL_RCC_OscConfig+0x46e>
  23980. {
  23981. return HAL_TIMEOUT;
  23982. 800a61a: 2303 movs r3, #3
  23983. 800a61c: e21a b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  23984. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == 0U)
  23985. 800a61e: 4b22 ldr r3, [pc, #136] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23986. 800a620: 6f5b ldr r3, [r3, #116] @ 0x74
  23987. 800a622: f003 0302 and.w r3, r3, #2
  23988. 800a626: 2b00 cmp r3, #0
  23989. 800a628: d0f0 beq.n 800a60c <HAL_RCC_OscConfig+0x45c>
  23990. 800a62a: e018 b.n 800a65e <HAL_RCC_OscConfig+0x4ae>
  23991. }
  23992. }
  23993. else
  23994. {
  23995. /* Disable the Internal Low Speed oscillator (LSI). */
  23996. __HAL_RCC_LSI_DISABLE();
  23997. 800a62c: 4b1e ldr r3, [pc, #120] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  23998. 800a62e: 6f5b ldr r3, [r3, #116] @ 0x74
  23999. 800a630: 4a1d ldr r2, [pc, #116] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  24000. 800a632: f023 0301 bic.w r3, r3, #1
  24001. 800a636: 6753 str r3, [r2, #116] @ 0x74
  24002. /* Get Start Tick*/
  24003. tickstart = HAL_GetTick();
  24004. 800a638: f7fa fa14 bl 8004a64 <HAL_GetTick>
  24005. 800a63c: 6278 str r0, [r7, #36] @ 0x24
  24006. /* Wait till LSI is ready */
  24007. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != 0U)
  24008. 800a63e: e008 b.n 800a652 <HAL_RCC_OscConfig+0x4a2>
  24009. {
  24010. if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
  24011. 800a640: f7fa fa10 bl 8004a64 <HAL_GetTick>
  24012. 800a644: 4602 mov r2, r0
  24013. 800a646: 6a7b ldr r3, [r7, #36] @ 0x24
  24014. 800a648: 1ad3 subs r3, r2, r3
  24015. 800a64a: 2b02 cmp r3, #2
  24016. 800a64c: d901 bls.n 800a652 <HAL_RCC_OscConfig+0x4a2>
  24017. {
  24018. return HAL_TIMEOUT;
  24019. 800a64e: 2303 movs r3, #3
  24020. 800a650: e200 b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  24021. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != 0U)
  24022. 800a652: 4b15 ldr r3, [pc, #84] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  24023. 800a654: 6f5b ldr r3, [r3, #116] @ 0x74
  24024. 800a656: f003 0302 and.w r3, r3, #2
  24025. 800a65a: 2b00 cmp r3, #0
  24026. 800a65c: d1f0 bne.n 800a640 <HAL_RCC_OscConfig+0x490>
  24027. }
  24028. }
  24029. }
  24030. /*------------------------------ HSI48 Configuration -------------------------*/
  24031. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI48) == RCC_OSCILLATORTYPE_HSI48)
  24032. 800a65e: 687b ldr r3, [r7, #4]
  24033. 800a660: 681b ldr r3, [r3, #0]
  24034. 800a662: f003 0320 and.w r3, r3, #32
  24035. 800a666: 2b00 cmp r3, #0
  24036. 800a668: d039 beq.n 800a6de <HAL_RCC_OscConfig+0x52e>
  24037. {
  24038. /* Check the parameters */
  24039. assert_param(IS_RCC_HSI48(RCC_OscInitStruct->HSI48State));
  24040. /* Check the HSI48 State */
  24041. if ((RCC_OscInitStruct->HSI48State) != RCC_HSI48_OFF)
  24042. 800a66a: 687b ldr r3, [r7, #4]
  24043. 800a66c: 699b ldr r3, [r3, #24]
  24044. 800a66e: 2b00 cmp r3, #0
  24045. 800a670: d01c beq.n 800a6ac <HAL_RCC_OscConfig+0x4fc>
  24046. {
  24047. /* Enable the Internal Low Speed oscillator (HSI48). */
  24048. __HAL_RCC_HSI48_ENABLE();
  24049. 800a672: 4b0d ldr r3, [pc, #52] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  24050. 800a674: 681b ldr r3, [r3, #0]
  24051. 800a676: 4a0c ldr r2, [pc, #48] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  24052. 800a678: f443 5380 orr.w r3, r3, #4096 @ 0x1000
  24053. 800a67c: 6013 str r3, [r2, #0]
  24054. /* Get time-out */
  24055. tickstart = HAL_GetTick();
  24056. 800a67e: f7fa f9f1 bl 8004a64 <HAL_GetTick>
  24057. 800a682: 6278 str r0, [r7, #36] @ 0x24
  24058. /* Wait till HSI48 is ready */
  24059. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) == 0U)
  24060. 800a684: e008 b.n 800a698 <HAL_RCC_OscConfig+0x4e8>
  24061. {
  24062. if ((HAL_GetTick() - tickstart) > HSI48_TIMEOUT_VALUE)
  24063. 800a686: f7fa f9ed bl 8004a64 <HAL_GetTick>
  24064. 800a68a: 4602 mov r2, r0
  24065. 800a68c: 6a7b ldr r3, [r7, #36] @ 0x24
  24066. 800a68e: 1ad3 subs r3, r2, r3
  24067. 800a690: 2b02 cmp r3, #2
  24068. 800a692: d901 bls.n 800a698 <HAL_RCC_OscConfig+0x4e8>
  24069. {
  24070. return HAL_TIMEOUT;
  24071. 800a694: 2303 movs r3, #3
  24072. 800a696: e1dd b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  24073. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) == 0U)
  24074. 800a698: 4b03 ldr r3, [pc, #12] @ (800a6a8 <HAL_RCC_OscConfig+0x4f8>)
  24075. 800a69a: 681b ldr r3, [r3, #0]
  24076. 800a69c: f403 5300 and.w r3, r3, #8192 @ 0x2000
  24077. 800a6a0: 2b00 cmp r3, #0
  24078. 800a6a2: d0f0 beq.n 800a686 <HAL_RCC_OscConfig+0x4d6>
  24079. 800a6a4: e01b b.n 800a6de <HAL_RCC_OscConfig+0x52e>
  24080. 800a6a6: bf00 nop
  24081. 800a6a8: 58024400 .word 0x58024400
  24082. }
  24083. }
  24084. else
  24085. {
  24086. /* Disable the Internal Low Speed oscillator (HSI48). */
  24087. __HAL_RCC_HSI48_DISABLE();
  24088. 800a6ac: 4b9b ldr r3, [pc, #620] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24089. 800a6ae: 681b ldr r3, [r3, #0]
  24090. 800a6b0: 4a9a ldr r2, [pc, #616] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24091. 800a6b2: f423 5380 bic.w r3, r3, #4096 @ 0x1000
  24092. 800a6b6: 6013 str r3, [r2, #0]
  24093. /* Get time-out */
  24094. tickstart = HAL_GetTick();
  24095. 800a6b8: f7fa f9d4 bl 8004a64 <HAL_GetTick>
  24096. 800a6bc: 6278 str r0, [r7, #36] @ 0x24
  24097. /* Wait till HSI48 is ready */
  24098. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) != 0U)
  24099. 800a6be: e008 b.n 800a6d2 <HAL_RCC_OscConfig+0x522>
  24100. {
  24101. if ((HAL_GetTick() - tickstart) > HSI48_TIMEOUT_VALUE)
  24102. 800a6c0: f7fa f9d0 bl 8004a64 <HAL_GetTick>
  24103. 800a6c4: 4602 mov r2, r0
  24104. 800a6c6: 6a7b ldr r3, [r7, #36] @ 0x24
  24105. 800a6c8: 1ad3 subs r3, r2, r3
  24106. 800a6ca: 2b02 cmp r3, #2
  24107. 800a6cc: d901 bls.n 800a6d2 <HAL_RCC_OscConfig+0x522>
  24108. {
  24109. return HAL_TIMEOUT;
  24110. 800a6ce: 2303 movs r3, #3
  24111. 800a6d0: e1c0 b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  24112. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) != 0U)
  24113. 800a6d2: 4b92 ldr r3, [pc, #584] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24114. 800a6d4: 681b ldr r3, [r3, #0]
  24115. 800a6d6: f403 5300 and.w r3, r3, #8192 @ 0x2000
  24116. 800a6da: 2b00 cmp r3, #0
  24117. 800a6dc: d1f0 bne.n 800a6c0 <HAL_RCC_OscConfig+0x510>
  24118. }
  24119. }
  24120. }
  24121. }
  24122. /*------------------------------ LSE Configuration -------------------------*/
  24123. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
  24124. 800a6de: 687b ldr r3, [r7, #4]
  24125. 800a6e0: 681b ldr r3, [r3, #0]
  24126. 800a6e2: f003 0304 and.w r3, r3, #4
  24127. 800a6e6: 2b00 cmp r3, #0
  24128. 800a6e8: f000 8081 beq.w 800a7ee <HAL_RCC_OscConfig+0x63e>
  24129. {
  24130. /* Check the parameters */
  24131. assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
  24132. /* Enable write access to Backup domain */
  24133. PWR->CR1 |= PWR_CR1_DBP;
  24134. 800a6ec: 4b8c ldr r3, [pc, #560] @ (800a920 <HAL_RCC_OscConfig+0x770>)
  24135. 800a6ee: 681b ldr r3, [r3, #0]
  24136. 800a6f0: 4a8b ldr r2, [pc, #556] @ (800a920 <HAL_RCC_OscConfig+0x770>)
  24137. 800a6f2: f443 7380 orr.w r3, r3, #256 @ 0x100
  24138. 800a6f6: 6013 str r3, [r2, #0]
  24139. /* Wait for Backup domain Write protection disable */
  24140. tickstart = HAL_GetTick();
  24141. 800a6f8: f7fa f9b4 bl 8004a64 <HAL_GetTick>
  24142. 800a6fc: 6278 str r0, [r7, #36] @ 0x24
  24143. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  24144. 800a6fe: e008 b.n 800a712 <HAL_RCC_OscConfig+0x562>
  24145. {
  24146. if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
  24147. 800a700: f7fa f9b0 bl 8004a64 <HAL_GetTick>
  24148. 800a704: 4602 mov r2, r0
  24149. 800a706: 6a7b ldr r3, [r7, #36] @ 0x24
  24150. 800a708: 1ad3 subs r3, r2, r3
  24151. 800a70a: 2b64 cmp r3, #100 @ 0x64
  24152. 800a70c: d901 bls.n 800a712 <HAL_RCC_OscConfig+0x562>
  24153. {
  24154. return HAL_TIMEOUT;
  24155. 800a70e: 2303 movs r3, #3
  24156. 800a710: e1a0 b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  24157. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  24158. 800a712: 4b83 ldr r3, [pc, #524] @ (800a920 <HAL_RCC_OscConfig+0x770>)
  24159. 800a714: 681b ldr r3, [r3, #0]
  24160. 800a716: f403 7380 and.w r3, r3, #256 @ 0x100
  24161. 800a71a: 2b00 cmp r3, #0
  24162. 800a71c: d0f0 beq.n 800a700 <HAL_RCC_OscConfig+0x550>
  24163. }
  24164. }
  24165. /* Set the new LSE configuration -----------------------------------------*/
  24166. __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
  24167. 800a71e: 687b ldr r3, [r7, #4]
  24168. 800a720: 689b ldr r3, [r3, #8]
  24169. 800a722: 2b01 cmp r3, #1
  24170. 800a724: d106 bne.n 800a734 <HAL_RCC_OscConfig+0x584>
  24171. 800a726: 4b7d ldr r3, [pc, #500] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24172. 800a728: 6f1b ldr r3, [r3, #112] @ 0x70
  24173. 800a72a: 4a7c ldr r2, [pc, #496] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24174. 800a72c: f043 0301 orr.w r3, r3, #1
  24175. 800a730: 6713 str r3, [r2, #112] @ 0x70
  24176. 800a732: e02d b.n 800a790 <HAL_RCC_OscConfig+0x5e0>
  24177. 800a734: 687b ldr r3, [r7, #4]
  24178. 800a736: 689b ldr r3, [r3, #8]
  24179. 800a738: 2b00 cmp r3, #0
  24180. 800a73a: d10c bne.n 800a756 <HAL_RCC_OscConfig+0x5a6>
  24181. 800a73c: 4b77 ldr r3, [pc, #476] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24182. 800a73e: 6f1b ldr r3, [r3, #112] @ 0x70
  24183. 800a740: 4a76 ldr r2, [pc, #472] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24184. 800a742: f023 0301 bic.w r3, r3, #1
  24185. 800a746: 6713 str r3, [r2, #112] @ 0x70
  24186. 800a748: 4b74 ldr r3, [pc, #464] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24187. 800a74a: 6f1b ldr r3, [r3, #112] @ 0x70
  24188. 800a74c: 4a73 ldr r2, [pc, #460] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24189. 800a74e: f023 0304 bic.w r3, r3, #4
  24190. 800a752: 6713 str r3, [r2, #112] @ 0x70
  24191. 800a754: e01c b.n 800a790 <HAL_RCC_OscConfig+0x5e0>
  24192. 800a756: 687b ldr r3, [r7, #4]
  24193. 800a758: 689b ldr r3, [r3, #8]
  24194. 800a75a: 2b05 cmp r3, #5
  24195. 800a75c: d10c bne.n 800a778 <HAL_RCC_OscConfig+0x5c8>
  24196. 800a75e: 4b6f ldr r3, [pc, #444] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24197. 800a760: 6f1b ldr r3, [r3, #112] @ 0x70
  24198. 800a762: 4a6e ldr r2, [pc, #440] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24199. 800a764: f043 0304 orr.w r3, r3, #4
  24200. 800a768: 6713 str r3, [r2, #112] @ 0x70
  24201. 800a76a: 4b6c ldr r3, [pc, #432] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24202. 800a76c: 6f1b ldr r3, [r3, #112] @ 0x70
  24203. 800a76e: 4a6b ldr r2, [pc, #428] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24204. 800a770: f043 0301 orr.w r3, r3, #1
  24205. 800a774: 6713 str r3, [r2, #112] @ 0x70
  24206. 800a776: e00b b.n 800a790 <HAL_RCC_OscConfig+0x5e0>
  24207. 800a778: 4b68 ldr r3, [pc, #416] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24208. 800a77a: 6f1b ldr r3, [r3, #112] @ 0x70
  24209. 800a77c: 4a67 ldr r2, [pc, #412] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24210. 800a77e: f023 0301 bic.w r3, r3, #1
  24211. 800a782: 6713 str r3, [r2, #112] @ 0x70
  24212. 800a784: 4b65 ldr r3, [pc, #404] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24213. 800a786: 6f1b ldr r3, [r3, #112] @ 0x70
  24214. 800a788: 4a64 ldr r2, [pc, #400] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24215. 800a78a: f023 0304 bic.w r3, r3, #4
  24216. 800a78e: 6713 str r3, [r2, #112] @ 0x70
  24217. /* Check the LSE State */
  24218. if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
  24219. 800a790: 687b ldr r3, [r7, #4]
  24220. 800a792: 689b ldr r3, [r3, #8]
  24221. 800a794: 2b00 cmp r3, #0
  24222. 800a796: d015 beq.n 800a7c4 <HAL_RCC_OscConfig+0x614>
  24223. {
  24224. /* Get Start Tick*/
  24225. tickstart = HAL_GetTick();
  24226. 800a798: f7fa f964 bl 8004a64 <HAL_GetTick>
  24227. 800a79c: 6278 str r0, [r7, #36] @ 0x24
  24228. /* Wait till LSE is ready */
  24229. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  24230. 800a79e: e00a b.n 800a7b6 <HAL_RCC_OscConfig+0x606>
  24231. {
  24232. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  24233. 800a7a0: f7fa f960 bl 8004a64 <HAL_GetTick>
  24234. 800a7a4: 4602 mov r2, r0
  24235. 800a7a6: 6a7b ldr r3, [r7, #36] @ 0x24
  24236. 800a7a8: 1ad3 subs r3, r2, r3
  24237. 800a7aa: f241 3288 movw r2, #5000 @ 0x1388
  24238. 800a7ae: 4293 cmp r3, r2
  24239. 800a7b0: d901 bls.n 800a7b6 <HAL_RCC_OscConfig+0x606>
  24240. {
  24241. return HAL_TIMEOUT;
  24242. 800a7b2: 2303 movs r3, #3
  24243. 800a7b4: e14e b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  24244. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  24245. 800a7b6: 4b59 ldr r3, [pc, #356] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24246. 800a7b8: 6f1b ldr r3, [r3, #112] @ 0x70
  24247. 800a7ba: f003 0302 and.w r3, r3, #2
  24248. 800a7be: 2b00 cmp r3, #0
  24249. 800a7c0: d0ee beq.n 800a7a0 <HAL_RCC_OscConfig+0x5f0>
  24250. 800a7c2: e014 b.n 800a7ee <HAL_RCC_OscConfig+0x63e>
  24251. }
  24252. }
  24253. else
  24254. {
  24255. /* Get Start Tick*/
  24256. tickstart = HAL_GetTick();
  24257. 800a7c4: f7fa f94e bl 8004a64 <HAL_GetTick>
  24258. 800a7c8: 6278 str r0, [r7, #36] @ 0x24
  24259. /* Wait till LSE is disabled */
  24260. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != 0U)
  24261. 800a7ca: e00a b.n 800a7e2 <HAL_RCC_OscConfig+0x632>
  24262. {
  24263. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  24264. 800a7cc: f7fa f94a bl 8004a64 <HAL_GetTick>
  24265. 800a7d0: 4602 mov r2, r0
  24266. 800a7d2: 6a7b ldr r3, [r7, #36] @ 0x24
  24267. 800a7d4: 1ad3 subs r3, r2, r3
  24268. 800a7d6: f241 3288 movw r2, #5000 @ 0x1388
  24269. 800a7da: 4293 cmp r3, r2
  24270. 800a7dc: d901 bls.n 800a7e2 <HAL_RCC_OscConfig+0x632>
  24271. {
  24272. return HAL_TIMEOUT;
  24273. 800a7de: 2303 movs r3, #3
  24274. 800a7e0: e138 b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  24275. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != 0U)
  24276. 800a7e2: 4b4e ldr r3, [pc, #312] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24277. 800a7e4: 6f1b ldr r3, [r3, #112] @ 0x70
  24278. 800a7e6: f003 0302 and.w r3, r3, #2
  24279. 800a7ea: 2b00 cmp r3, #0
  24280. 800a7ec: d1ee bne.n 800a7cc <HAL_RCC_OscConfig+0x61c>
  24281. }
  24282. }
  24283. /*-------------------------------- PLL Configuration -----------------------*/
  24284. /* Check the parameters */
  24285. assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState));
  24286. if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
  24287. 800a7ee: 687b ldr r3, [r7, #4]
  24288. 800a7f0: 6a5b ldr r3, [r3, #36] @ 0x24
  24289. 800a7f2: 2b00 cmp r3, #0
  24290. 800a7f4: f000 812d beq.w 800aa52 <HAL_RCC_OscConfig+0x8a2>
  24291. {
  24292. /* Check if the PLL is used as system clock or not */
  24293. if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL1)
  24294. 800a7f8: 4b48 ldr r3, [pc, #288] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24295. 800a7fa: 691b ldr r3, [r3, #16]
  24296. 800a7fc: f003 0338 and.w r3, r3, #56 @ 0x38
  24297. 800a800: 2b18 cmp r3, #24
  24298. 800a802: f000 80bd beq.w 800a980 <HAL_RCC_OscConfig+0x7d0>
  24299. {
  24300. if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
  24301. 800a806: 687b ldr r3, [r7, #4]
  24302. 800a808: 6a5b ldr r3, [r3, #36] @ 0x24
  24303. 800a80a: 2b02 cmp r3, #2
  24304. 800a80c: f040 809e bne.w 800a94c <HAL_RCC_OscConfig+0x79c>
  24305. assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ));
  24306. assert_param(IS_RCC_PLLR_VALUE(RCC_OscInitStruct->PLL.PLLR));
  24307. assert_param(IS_RCC_PLLFRACN_VALUE(RCC_OscInitStruct->PLL.PLLFRACN));
  24308. /* Disable the main PLL. */
  24309. __HAL_RCC_PLL_DISABLE();
  24310. 800a810: 4b42 ldr r3, [pc, #264] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24311. 800a812: 681b ldr r3, [r3, #0]
  24312. 800a814: 4a41 ldr r2, [pc, #260] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24313. 800a816: f023 7380 bic.w r3, r3, #16777216 @ 0x1000000
  24314. 800a81a: 6013 str r3, [r2, #0]
  24315. /* Get Start Tick*/
  24316. tickstart = HAL_GetTick();
  24317. 800a81c: f7fa f922 bl 8004a64 <HAL_GetTick>
  24318. 800a820: 6278 str r0, [r7, #36] @ 0x24
  24319. /* Wait till PLL is disabled */
  24320. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  24321. 800a822: e008 b.n 800a836 <HAL_RCC_OscConfig+0x686>
  24322. {
  24323. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  24324. 800a824: f7fa f91e bl 8004a64 <HAL_GetTick>
  24325. 800a828: 4602 mov r2, r0
  24326. 800a82a: 6a7b ldr r3, [r7, #36] @ 0x24
  24327. 800a82c: 1ad3 subs r3, r2, r3
  24328. 800a82e: 2b02 cmp r3, #2
  24329. 800a830: d901 bls.n 800a836 <HAL_RCC_OscConfig+0x686>
  24330. {
  24331. return HAL_TIMEOUT;
  24332. 800a832: 2303 movs r3, #3
  24333. 800a834: e10e b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  24334. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  24335. 800a836: 4b39 ldr r3, [pc, #228] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24336. 800a838: 681b ldr r3, [r3, #0]
  24337. 800a83a: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  24338. 800a83e: 2b00 cmp r3, #0
  24339. 800a840: d1f0 bne.n 800a824 <HAL_RCC_OscConfig+0x674>
  24340. }
  24341. }
  24342. /* Configure the main PLL clock source, multiplication and division factors. */
  24343. __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource,
  24344. 800a842: 4b36 ldr r3, [pc, #216] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24345. 800a844: 6a9a ldr r2, [r3, #40] @ 0x28
  24346. 800a846: 4b37 ldr r3, [pc, #220] @ (800a924 <HAL_RCC_OscConfig+0x774>)
  24347. 800a848: 4013 ands r3, r2
  24348. 800a84a: 687a ldr r2, [r7, #4]
  24349. 800a84c: 6a91 ldr r1, [r2, #40] @ 0x28
  24350. 800a84e: 687a ldr r2, [r7, #4]
  24351. 800a850: 6ad2 ldr r2, [r2, #44] @ 0x2c
  24352. 800a852: 0112 lsls r2, r2, #4
  24353. 800a854: 430a orrs r2, r1
  24354. 800a856: 4931 ldr r1, [pc, #196] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24355. 800a858: 4313 orrs r3, r2
  24356. 800a85a: 628b str r3, [r1, #40] @ 0x28
  24357. 800a85c: 687b ldr r3, [r7, #4]
  24358. 800a85e: 6b1b ldr r3, [r3, #48] @ 0x30
  24359. 800a860: 3b01 subs r3, #1
  24360. 800a862: f3c3 0208 ubfx r2, r3, #0, #9
  24361. 800a866: 687b ldr r3, [r7, #4]
  24362. 800a868: 6b5b ldr r3, [r3, #52] @ 0x34
  24363. 800a86a: 3b01 subs r3, #1
  24364. 800a86c: 025b lsls r3, r3, #9
  24365. 800a86e: b29b uxth r3, r3
  24366. 800a870: 431a orrs r2, r3
  24367. 800a872: 687b ldr r3, [r7, #4]
  24368. 800a874: 6b9b ldr r3, [r3, #56] @ 0x38
  24369. 800a876: 3b01 subs r3, #1
  24370. 800a878: 041b lsls r3, r3, #16
  24371. 800a87a: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  24372. 800a87e: 431a orrs r2, r3
  24373. 800a880: 687b ldr r3, [r7, #4]
  24374. 800a882: 6bdb ldr r3, [r3, #60] @ 0x3c
  24375. 800a884: 3b01 subs r3, #1
  24376. 800a886: 061b lsls r3, r3, #24
  24377. 800a888: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  24378. 800a88c: 4923 ldr r1, [pc, #140] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24379. 800a88e: 4313 orrs r3, r2
  24380. 800a890: 630b str r3, [r1, #48] @ 0x30
  24381. RCC_OscInitStruct->PLL.PLLP,
  24382. RCC_OscInitStruct->PLL.PLLQ,
  24383. RCC_OscInitStruct->PLL.PLLR);
  24384. /* Disable PLLFRACN . */
  24385. __HAL_RCC_PLLFRACN_DISABLE();
  24386. 800a892: 4b22 ldr r3, [pc, #136] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24387. 800a894: 6adb ldr r3, [r3, #44] @ 0x2c
  24388. 800a896: 4a21 ldr r2, [pc, #132] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24389. 800a898: f023 0301 bic.w r3, r3, #1
  24390. 800a89c: 62d3 str r3, [r2, #44] @ 0x2c
  24391. /* Configure PLL PLL1FRACN */
  24392. __HAL_RCC_PLLFRACN_CONFIG(RCC_OscInitStruct->PLL.PLLFRACN);
  24393. 800a89e: 4b1f ldr r3, [pc, #124] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24394. 800a8a0: 6b5a ldr r2, [r3, #52] @ 0x34
  24395. 800a8a2: 4b21 ldr r3, [pc, #132] @ (800a928 <HAL_RCC_OscConfig+0x778>)
  24396. 800a8a4: 4013 ands r3, r2
  24397. 800a8a6: 687a ldr r2, [r7, #4]
  24398. 800a8a8: 6c92 ldr r2, [r2, #72] @ 0x48
  24399. 800a8aa: 00d2 lsls r2, r2, #3
  24400. 800a8ac: 491b ldr r1, [pc, #108] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24401. 800a8ae: 4313 orrs r3, r2
  24402. 800a8b0: 634b str r3, [r1, #52] @ 0x34
  24403. /* Select PLL1 input reference frequency range: VCI */
  24404. __HAL_RCC_PLL_VCIRANGE(RCC_OscInitStruct->PLL.PLLRGE) ;
  24405. 800a8b2: 4b1a ldr r3, [pc, #104] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24406. 800a8b4: 6adb ldr r3, [r3, #44] @ 0x2c
  24407. 800a8b6: f023 020c bic.w r2, r3, #12
  24408. 800a8ba: 687b ldr r3, [r7, #4]
  24409. 800a8bc: 6c1b ldr r3, [r3, #64] @ 0x40
  24410. 800a8be: 4917 ldr r1, [pc, #92] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24411. 800a8c0: 4313 orrs r3, r2
  24412. 800a8c2: 62cb str r3, [r1, #44] @ 0x2c
  24413. /* Select PLL1 output frequency range : VCO */
  24414. __HAL_RCC_PLL_VCORANGE(RCC_OscInitStruct->PLL.PLLVCOSEL) ;
  24415. 800a8c4: 4b15 ldr r3, [pc, #84] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24416. 800a8c6: 6adb ldr r3, [r3, #44] @ 0x2c
  24417. 800a8c8: f023 0202 bic.w r2, r3, #2
  24418. 800a8cc: 687b ldr r3, [r7, #4]
  24419. 800a8ce: 6c5b ldr r3, [r3, #68] @ 0x44
  24420. 800a8d0: 4912 ldr r1, [pc, #72] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24421. 800a8d2: 4313 orrs r3, r2
  24422. 800a8d4: 62cb str r3, [r1, #44] @ 0x2c
  24423. /* Enable PLL System Clock output. */
  24424. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVP);
  24425. 800a8d6: 4b11 ldr r3, [pc, #68] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24426. 800a8d8: 6adb ldr r3, [r3, #44] @ 0x2c
  24427. 800a8da: 4a10 ldr r2, [pc, #64] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24428. 800a8dc: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  24429. 800a8e0: 62d3 str r3, [r2, #44] @ 0x2c
  24430. /* Enable PLL1Q Clock output. */
  24431. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  24432. 800a8e2: 4b0e ldr r3, [pc, #56] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24433. 800a8e4: 6adb ldr r3, [r3, #44] @ 0x2c
  24434. 800a8e6: 4a0d ldr r2, [pc, #52] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24435. 800a8e8: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  24436. 800a8ec: 62d3 str r3, [r2, #44] @ 0x2c
  24437. /* Enable PLL1R Clock output. */
  24438. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVR);
  24439. 800a8ee: 4b0b ldr r3, [pc, #44] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24440. 800a8f0: 6adb ldr r3, [r3, #44] @ 0x2c
  24441. 800a8f2: 4a0a ldr r2, [pc, #40] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24442. 800a8f4: f443 2380 orr.w r3, r3, #262144 @ 0x40000
  24443. 800a8f8: 62d3 str r3, [r2, #44] @ 0x2c
  24444. /* Enable PLL1FRACN . */
  24445. __HAL_RCC_PLLFRACN_ENABLE();
  24446. 800a8fa: 4b08 ldr r3, [pc, #32] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24447. 800a8fc: 6adb ldr r3, [r3, #44] @ 0x2c
  24448. 800a8fe: 4a07 ldr r2, [pc, #28] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24449. 800a900: f043 0301 orr.w r3, r3, #1
  24450. 800a904: 62d3 str r3, [r2, #44] @ 0x2c
  24451. /* Enable the main PLL. */
  24452. __HAL_RCC_PLL_ENABLE();
  24453. 800a906: 4b05 ldr r3, [pc, #20] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24454. 800a908: 681b ldr r3, [r3, #0]
  24455. 800a90a: 4a04 ldr r2, [pc, #16] @ (800a91c <HAL_RCC_OscConfig+0x76c>)
  24456. 800a90c: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  24457. 800a910: 6013 str r3, [r2, #0]
  24458. /* Get Start Tick*/
  24459. tickstart = HAL_GetTick();
  24460. 800a912: f7fa f8a7 bl 8004a64 <HAL_GetTick>
  24461. 800a916: 6278 str r0, [r7, #36] @ 0x24
  24462. /* Wait till PLL is ready */
  24463. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  24464. 800a918: e011 b.n 800a93e <HAL_RCC_OscConfig+0x78e>
  24465. 800a91a: bf00 nop
  24466. 800a91c: 58024400 .word 0x58024400
  24467. 800a920: 58024800 .word 0x58024800
  24468. 800a924: fffffc0c .word 0xfffffc0c
  24469. 800a928: ffff0007 .word 0xffff0007
  24470. {
  24471. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  24472. 800a92c: f7fa f89a bl 8004a64 <HAL_GetTick>
  24473. 800a930: 4602 mov r2, r0
  24474. 800a932: 6a7b ldr r3, [r7, #36] @ 0x24
  24475. 800a934: 1ad3 subs r3, r2, r3
  24476. 800a936: 2b02 cmp r3, #2
  24477. 800a938: d901 bls.n 800a93e <HAL_RCC_OscConfig+0x78e>
  24478. {
  24479. return HAL_TIMEOUT;
  24480. 800a93a: 2303 movs r3, #3
  24481. 800a93c: e08a b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  24482. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  24483. 800a93e: 4b47 ldr r3, [pc, #284] @ (800aa5c <HAL_RCC_OscConfig+0x8ac>)
  24484. 800a940: 681b ldr r3, [r3, #0]
  24485. 800a942: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  24486. 800a946: 2b00 cmp r3, #0
  24487. 800a948: d0f0 beq.n 800a92c <HAL_RCC_OscConfig+0x77c>
  24488. 800a94a: e082 b.n 800aa52 <HAL_RCC_OscConfig+0x8a2>
  24489. }
  24490. }
  24491. else
  24492. {
  24493. /* Disable the main PLL. */
  24494. __HAL_RCC_PLL_DISABLE();
  24495. 800a94c: 4b43 ldr r3, [pc, #268] @ (800aa5c <HAL_RCC_OscConfig+0x8ac>)
  24496. 800a94e: 681b ldr r3, [r3, #0]
  24497. 800a950: 4a42 ldr r2, [pc, #264] @ (800aa5c <HAL_RCC_OscConfig+0x8ac>)
  24498. 800a952: f023 7380 bic.w r3, r3, #16777216 @ 0x1000000
  24499. 800a956: 6013 str r3, [r2, #0]
  24500. /* Get Start Tick*/
  24501. tickstart = HAL_GetTick();
  24502. 800a958: f7fa f884 bl 8004a64 <HAL_GetTick>
  24503. 800a95c: 6278 str r0, [r7, #36] @ 0x24
  24504. /* Wait till PLL is disabled */
  24505. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  24506. 800a95e: e008 b.n 800a972 <HAL_RCC_OscConfig+0x7c2>
  24507. {
  24508. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  24509. 800a960: f7fa f880 bl 8004a64 <HAL_GetTick>
  24510. 800a964: 4602 mov r2, r0
  24511. 800a966: 6a7b ldr r3, [r7, #36] @ 0x24
  24512. 800a968: 1ad3 subs r3, r2, r3
  24513. 800a96a: 2b02 cmp r3, #2
  24514. 800a96c: d901 bls.n 800a972 <HAL_RCC_OscConfig+0x7c2>
  24515. {
  24516. return HAL_TIMEOUT;
  24517. 800a96e: 2303 movs r3, #3
  24518. 800a970: e070 b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  24519. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  24520. 800a972: 4b3a ldr r3, [pc, #232] @ (800aa5c <HAL_RCC_OscConfig+0x8ac>)
  24521. 800a974: 681b ldr r3, [r3, #0]
  24522. 800a976: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  24523. 800a97a: 2b00 cmp r3, #0
  24524. 800a97c: d1f0 bne.n 800a960 <HAL_RCC_OscConfig+0x7b0>
  24525. 800a97e: e068 b.n 800aa52 <HAL_RCC_OscConfig+0x8a2>
  24526. }
  24527. }
  24528. else
  24529. {
  24530. /* Do not return HAL_ERROR if request repeats the current configuration */
  24531. temp1_pllckcfg = RCC->PLLCKSELR;
  24532. 800a980: 4b36 ldr r3, [pc, #216] @ (800aa5c <HAL_RCC_OscConfig+0x8ac>)
  24533. 800a982: 6a9b ldr r3, [r3, #40] @ 0x28
  24534. 800a984: 613b str r3, [r7, #16]
  24535. temp2_pllckcfg = RCC->PLL1DIVR;
  24536. 800a986: 4b35 ldr r3, [pc, #212] @ (800aa5c <HAL_RCC_OscConfig+0x8ac>)
  24537. 800a988: 6b1b ldr r3, [r3, #48] @ 0x30
  24538. 800a98a: 60fb str r3, [r7, #12]
  24539. if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
  24540. 800a98c: 687b ldr r3, [r7, #4]
  24541. 800a98e: 6a5b ldr r3, [r3, #36] @ 0x24
  24542. 800a990: 2b01 cmp r3, #1
  24543. 800a992: d031 beq.n 800a9f8 <HAL_RCC_OscConfig+0x848>
  24544. (READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
  24545. 800a994: 693b ldr r3, [r7, #16]
  24546. 800a996: f003 0203 and.w r2, r3, #3
  24547. 800a99a: 687b ldr r3, [r7, #4]
  24548. 800a99c: 6a9b ldr r3, [r3, #40] @ 0x28
  24549. if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
  24550. 800a99e: 429a cmp r2, r3
  24551. 800a9a0: d12a bne.n 800a9f8 <HAL_RCC_OscConfig+0x848>
  24552. ((READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_DIVM1) >> RCC_PLLCKSELR_DIVM1_Pos) != RCC_OscInitStruct->PLL.PLLM) ||
  24553. 800a9a2: 693b ldr r3, [r7, #16]
  24554. 800a9a4: 091b lsrs r3, r3, #4
  24555. 800a9a6: f003 023f and.w r2, r3, #63 @ 0x3f
  24556. 800a9aa: 687b ldr r3, [r7, #4]
  24557. 800a9ac: 6adb ldr r3, [r3, #44] @ 0x2c
  24558. (READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
  24559. 800a9ae: 429a cmp r2, r3
  24560. 800a9b0: d122 bne.n 800a9f8 <HAL_RCC_OscConfig+0x848>
  24561. (READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_N1) != (RCC_OscInitStruct->PLL.PLLN - 1U)) ||
  24562. 800a9b2: 68fb ldr r3, [r7, #12]
  24563. 800a9b4: f3c3 0208 ubfx r2, r3, #0, #9
  24564. 800a9b8: 687b ldr r3, [r7, #4]
  24565. 800a9ba: 6b1b ldr r3, [r3, #48] @ 0x30
  24566. 800a9bc: 3b01 subs r3, #1
  24567. ((READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_DIVM1) >> RCC_PLLCKSELR_DIVM1_Pos) != RCC_OscInitStruct->PLL.PLLM) ||
  24568. 800a9be: 429a cmp r2, r3
  24569. 800a9c0: d11a bne.n 800a9f8 <HAL_RCC_OscConfig+0x848>
  24570. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_P1) >> RCC_PLL1DIVR_P1_Pos) != (RCC_OscInitStruct->PLL.PLLP - 1U)) ||
  24571. 800a9c2: 68fb ldr r3, [r7, #12]
  24572. 800a9c4: 0a5b lsrs r3, r3, #9
  24573. 800a9c6: f003 027f and.w r2, r3, #127 @ 0x7f
  24574. 800a9ca: 687b ldr r3, [r7, #4]
  24575. 800a9cc: 6b5b ldr r3, [r3, #52] @ 0x34
  24576. 800a9ce: 3b01 subs r3, #1
  24577. (READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_N1) != (RCC_OscInitStruct->PLL.PLLN - 1U)) ||
  24578. 800a9d0: 429a cmp r2, r3
  24579. 800a9d2: d111 bne.n 800a9f8 <HAL_RCC_OscConfig+0x848>
  24580. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_Q1) >> RCC_PLL1DIVR_Q1_Pos) != (RCC_OscInitStruct->PLL.PLLQ - 1U)) ||
  24581. 800a9d4: 68fb ldr r3, [r7, #12]
  24582. 800a9d6: 0c1b lsrs r3, r3, #16
  24583. 800a9d8: f003 027f and.w r2, r3, #127 @ 0x7f
  24584. 800a9dc: 687b ldr r3, [r7, #4]
  24585. 800a9de: 6b9b ldr r3, [r3, #56] @ 0x38
  24586. 800a9e0: 3b01 subs r3, #1
  24587. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_P1) >> RCC_PLL1DIVR_P1_Pos) != (RCC_OscInitStruct->PLL.PLLP - 1U)) ||
  24588. 800a9e2: 429a cmp r2, r3
  24589. 800a9e4: d108 bne.n 800a9f8 <HAL_RCC_OscConfig+0x848>
  24590. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_R1) >> RCC_PLL1DIVR_R1_Pos) != (RCC_OscInitStruct->PLL.PLLR - 1U)))
  24591. 800a9e6: 68fb ldr r3, [r7, #12]
  24592. 800a9e8: 0e1b lsrs r3, r3, #24
  24593. 800a9ea: f003 027f and.w r2, r3, #127 @ 0x7f
  24594. 800a9ee: 687b ldr r3, [r7, #4]
  24595. 800a9f0: 6bdb ldr r3, [r3, #60] @ 0x3c
  24596. 800a9f2: 3b01 subs r3, #1
  24597. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_Q1) >> RCC_PLL1DIVR_Q1_Pos) != (RCC_OscInitStruct->PLL.PLLQ - 1U)) ||
  24598. 800a9f4: 429a cmp r2, r3
  24599. 800a9f6: d001 beq.n 800a9fc <HAL_RCC_OscConfig+0x84c>
  24600. {
  24601. return HAL_ERROR;
  24602. 800a9f8: 2301 movs r3, #1
  24603. 800a9fa: e02b b.n 800aa54 <HAL_RCC_OscConfig+0x8a4>
  24604. }
  24605. else
  24606. {
  24607. /* Check if only fractional part needs to be updated */
  24608. temp1_pllckcfg = ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> RCC_PLL1FRACR_FRACN1_Pos);
  24609. 800a9fc: 4b17 ldr r3, [pc, #92] @ (800aa5c <HAL_RCC_OscConfig+0x8ac>)
  24610. 800a9fe: 6b5b ldr r3, [r3, #52] @ 0x34
  24611. 800aa00: 08db lsrs r3, r3, #3
  24612. 800aa02: f3c3 030c ubfx r3, r3, #0, #13
  24613. 800aa06: 613b str r3, [r7, #16]
  24614. if (RCC_OscInitStruct->PLL.PLLFRACN != temp1_pllckcfg)
  24615. 800aa08: 687b ldr r3, [r7, #4]
  24616. 800aa0a: 6c9b ldr r3, [r3, #72] @ 0x48
  24617. 800aa0c: 693a ldr r2, [r7, #16]
  24618. 800aa0e: 429a cmp r2, r3
  24619. 800aa10: d01f beq.n 800aa52 <HAL_RCC_OscConfig+0x8a2>
  24620. {
  24621. assert_param(IS_RCC_PLLFRACN_VALUE(RCC_OscInitStruct->PLL.PLLFRACN));
  24622. /* Disable PLL1FRACEN */
  24623. __HAL_RCC_PLLFRACN_DISABLE();
  24624. 800aa12: 4b12 ldr r3, [pc, #72] @ (800aa5c <HAL_RCC_OscConfig+0x8ac>)
  24625. 800aa14: 6adb ldr r3, [r3, #44] @ 0x2c
  24626. 800aa16: 4a11 ldr r2, [pc, #68] @ (800aa5c <HAL_RCC_OscConfig+0x8ac>)
  24627. 800aa18: f023 0301 bic.w r3, r3, #1
  24628. 800aa1c: 62d3 str r3, [r2, #44] @ 0x2c
  24629. /* Get Start Tick*/
  24630. tickstart = HAL_GetTick();
  24631. 800aa1e: f7fa f821 bl 8004a64 <HAL_GetTick>
  24632. 800aa22: 6278 str r0, [r7, #36] @ 0x24
  24633. /* Wait at least 2 CK_REF (PLL input source divided by M) period to make sure next latched value will be taken into account. */
  24634. while ((HAL_GetTick() - tickstart) < PLL_FRAC_TIMEOUT_VALUE)
  24635. 800aa24: bf00 nop
  24636. 800aa26: f7fa f81d bl 8004a64 <HAL_GetTick>
  24637. 800aa2a: 4602 mov r2, r0
  24638. 800aa2c: 6a7b ldr r3, [r7, #36] @ 0x24
  24639. 800aa2e: 4293 cmp r3, r2
  24640. 800aa30: d0f9 beq.n 800aa26 <HAL_RCC_OscConfig+0x876>
  24641. {
  24642. }
  24643. /* Configure PLL1 PLL1FRACN */
  24644. __HAL_RCC_PLLFRACN_CONFIG(RCC_OscInitStruct->PLL.PLLFRACN);
  24645. 800aa32: 4b0a ldr r3, [pc, #40] @ (800aa5c <HAL_RCC_OscConfig+0x8ac>)
  24646. 800aa34: 6b5a ldr r2, [r3, #52] @ 0x34
  24647. 800aa36: 4b0a ldr r3, [pc, #40] @ (800aa60 <HAL_RCC_OscConfig+0x8b0>)
  24648. 800aa38: 4013 ands r3, r2
  24649. 800aa3a: 687a ldr r2, [r7, #4]
  24650. 800aa3c: 6c92 ldr r2, [r2, #72] @ 0x48
  24651. 800aa3e: 00d2 lsls r2, r2, #3
  24652. 800aa40: 4906 ldr r1, [pc, #24] @ (800aa5c <HAL_RCC_OscConfig+0x8ac>)
  24653. 800aa42: 4313 orrs r3, r2
  24654. 800aa44: 634b str r3, [r1, #52] @ 0x34
  24655. /* Enable PLL1FRACEN to latch new value. */
  24656. __HAL_RCC_PLLFRACN_ENABLE();
  24657. 800aa46: 4b05 ldr r3, [pc, #20] @ (800aa5c <HAL_RCC_OscConfig+0x8ac>)
  24658. 800aa48: 6adb ldr r3, [r3, #44] @ 0x2c
  24659. 800aa4a: 4a04 ldr r2, [pc, #16] @ (800aa5c <HAL_RCC_OscConfig+0x8ac>)
  24660. 800aa4c: f043 0301 orr.w r3, r3, #1
  24661. 800aa50: 62d3 str r3, [r2, #44] @ 0x2c
  24662. }
  24663. }
  24664. }
  24665. }
  24666. return HAL_OK;
  24667. 800aa52: 2300 movs r3, #0
  24668. }
  24669. 800aa54: 4618 mov r0, r3
  24670. 800aa56: 3730 adds r7, #48 @ 0x30
  24671. 800aa58: 46bd mov sp, r7
  24672. 800aa5a: bd80 pop {r7, pc}
  24673. 800aa5c: 58024400 .word 0x58024400
  24674. 800aa60: ffff0007 .word 0xffff0007
  24675. 0800aa64 <HAL_RCC_ClockConfig>:
  24676. * D1CPRE[3:0] bits to ensure that Domain1 core clock not exceed the maximum allowed frequency
  24677. * (for more details refer to section above "Initialization/de-initialization functions")
  24678. * @retval None
  24679. */
  24680. HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency)
  24681. {
  24682. 800aa64: b580 push {r7, lr}
  24683. 800aa66: b086 sub sp, #24
  24684. 800aa68: af00 add r7, sp, #0
  24685. 800aa6a: 6078 str r0, [r7, #4]
  24686. 800aa6c: 6039 str r1, [r7, #0]
  24687. HAL_StatusTypeDef halstatus;
  24688. uint32_t tickstart;
  24689. uint32_t common_system_clock;
  24690. /* Check Null pointer */
  24691. if (RCC_ClkInitStruct == NULL)
  24692. 800aa6e: 687b ldr r3, [r7, #4]
  24693. 800aa70: 2b00 cmp r3, #0
  24694. 800aa72: d101 bne.n 800aa78 <HAL_RCC_ClockConfig+0x14>
  24695. {
  24696. return HAL_ERROR;
  24697. 800aa74: 2301 movs r3, #1
  24698. 800aa76: e19c b.n 800adb2 <HAL_RCC_ClockConfig+0x34e>
  24699. /* To correctly read data from FLASH memory, the number of wait states (LATENCY)
  24700. must be correctly programmed according to the frequency of the CPU clock
  24701. (HCLK) and the supply voltage of the device. */
  24702. /* Increasing the CPU frequency */
  24703. if (FLatency > __HAL_FLASH_GET_LATENCY())
  24704. 800aa78: 4b8a ldr r3, [pc, #552] @ (800aca4 <HAL_RCC_ClockConfig+0x240>)
  24705. 800aa7a: 681b ldr r3, [r3, #0]
  24706. 800aa7c: f003 030f and.w r3, r3, #15
  24707. 800aa80: 683a ldr r2, [r7, #0]
  24708. 800aa82: 429a cmp r2, r3
  24709. 800aa84: d910 bls.n 800aaa8 <HAL_RCC_ClockConfig+0x44>
  24710. {
  24711. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  24712. __HAL_FLASH_SET_LATENCY(FLatency);
  24713. 800aa86: 4b87 ldr r3, [pc, #540] @ (800aca4 <HAL_RCC_ClockConfig+0x240>)
  24714. 800aa88: 681b ldr r3, [r3, #0]
  24715. 800aa8a: f023 020f bic.w r2, r3, #15
  24716. 800aa8e: 4985 ldr r1, [pc, #532] @ (800aca4 <HAL_RCC_ClockConfig+0x240>)
  24717. 800aa90: 683b ldr r3, [r7, #0]
  24718. 800aa92: 4313 orrs r3, r2
  24719. 800aa94: 600b str r3, [r1, #0]
  24720. /* Check that the new number of wait states is taken into account to access the Flash
  24721. memory by reading the FLASH_ACR register */
  24722. if (__HAL_FLASH_GET_LATENCY() != FLatency)
  24723. 800aa96: 4b83 ldr r3, [pc, #524] @ (800aca4 <HAL_RCC_ClockConfig+0x240>)
  24724. 800aa98: 681b ldr r3, [r3, #0]
  24725. 800aa9a: f003 030f and.w r3, r3, #15
  24726. 800aa9e: 683a ldr r2, [r7, #0]
  24727. 800aaa0: 429a cmp r2, r3
  24728. 800aaa2: d001 beq.n 800aaa8 <HAL_RCC_ClockConfig+0x44>
  24729. {
  24730. return HAL_ERROR;
  24731. 800aaa4: 2301 movs r3, #1
  24732. 800aaa6: e184 b.n 800adb2 <HAL_RCC_ClockConfig+0x34e>
  24733. }
  24734. /* Increasing the BUS frequency divider */
  24735. /*-------------------------- D1PCLK1/CDPCLK1 Configuration ---------------------------*/
  24736. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D1PCLK1) == RCC_CLOCKTYPE_D1PCLK1)
  24737. 800aaa8: 687b ldr r3, [r7, #4]
  24738. 800aaaa: 681b ldr r3, [r3, #0]
  24739. 800aaac: f003 0304 and.w r3, r3, #4
  24740. 800aab0: 2b00 cmp r3, #0
  24741. 800aab2: d010 beq.n 800aad6 <HAL_RCC_ClockConfig+0x72>
  24742. {
  24743. #if defined (RCC_D1CFGR_D1PPRE)
  24744. if ((RCC_ClkInitStruct->APB3CLKDivider) > (RCC->D1CFGR & RCC_D1CFGR_D1PPRE))
  24745. 800aab4: 687b ldr r3, [r7, #4]
  24746. 800aab6: 691a ldr r2, [r3, #16]
  24747. 800aab8: 4b7b ldr r3, [pc, #492] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24748. 800aaba: 699b ldr r3, [r3, #24]
  24749. 800aabc: f003 0370 and.w r3, r3, #112 @ 0x70
  24750. 800aac0: 429a cmp r2, r3
  24751. 800aac2: d908 bls.n 800aad6 <HAL_RCC_ClockConfig+0x72>
  24752. {
  24753. assert_param(IS_RCC_D1PCLK1(RCC_ClkInitStruct->APB3CLKDivider));
  24754. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1PPRE, RCC_ClkInitStruct->APB3CLKDivider);
  24755. 800aac4: 4b78 ldr r3, [pc, #480] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24756. 800aac6: 699b ldr r3, [r3, #24]
  24757. 800aac8: f023 0270 bic.w r2, r3, #112 @ 0x70
  24758. 800aacc: 687b ldr r3, [r7, #4]
  24759. 800aace: 691b ldr r3, [r3, #16]
  24760. 800aad0: 4975 ldr r1, [pc, #468] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24761. 800aad2: 4313 orrs r3, r2
  24762. 800aad4: 618b str r3, [r1, #24]
  24763. }
  24764. #endif
  24765. }
  24766. /*-------------------------- PCLK1 Configuration ---------------------------*/
  24767. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
  24768. 800aad6: 687b ldr r3, [r7, #4]
  24769. 800aad8: 681b ldr r3, [r3, #0]
  24770. 800aada: f003 0308 and.w r3, r3, #8
  24771. 800aade: 2b00 cmp r3, #0
  24772. 800aae0: d010 beq.n 800ab04 <HAL_RCC_ClockConfig+0xa0>
  24773. {
  24774. #if defined (RCC_D2CFGR_D2PPRE1)
  24775. if ((RCC_ClkInitStruct->APB1CLKDivider) > (RCC->D2CFGR & RCC_D2CFGR_D2PPRE1))
  24776. 800aae2: 687b ldr r3, [r7, #4]
  24777. 800aae4: 695a ldr r2, [r3, #20]
  24778. 800aae6: 4b70 ldr r3, [pc, #448] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24779. 800aae8: 69db ldr r3, [r3, #28]
  24780. 800aaea: f003 0370 and.w r3, r3, #112 @ 0x70
  24781. 800aaee: 429a cmp r2, r3
  24782. 800aaf0: d908 bls.n 800ab04 <HAL_RCC_ClockConfig+0xa0>
  24783. {
  24784. assert_param(IS_RCC_PCLK1(RCC_ClkInitStruct->APB1CLKDivider));
  24785. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  24786. 800aaf2: 4b6d ldr r3, [pc, #436] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24787. 800aaf4: 69db ldr r3, [r3, #28]
  24788. 800aaf6: f023 0270 bic.w r2, r3, #112 @ 0x70
  24789. 800aafa: 687b ldr r3, [r7, #4]
  24790. 800aafc: 695b ldr r3, [r3, #20]
  24791. 800aafe: 496a ldr r1, [pc, #424] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24792. 800ab00: 4313 orrs r3, r2
  24793. 800ab02: 61cb str r3, [r1, #28]
  24794. MODIFY_REG(RCC->CDCFGR2, RCC_CDCFGR2_CDPPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  24795. }
  24796. #endif
  24797. }
  24798. /*-------------------------- PCLK2 Configuration ---------------------------*/
  24799. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
  24800. 800ab04: 687b ldr r3, [r7, #4]
  24801. 800ab06: 681b ldr r3, [r3, #0]
  24802. 800ab08: f003 0310 and.w r3, r3, #16
  24803. 800ab0c: 2b00 cmp r3, #0
  24804. 800ab0e: d010 beq.n 800ab32 <HAL_RCC_ClockConfig+0xce>
  24805. {
  24806. #if defined(RCC_D2CFGR_D2PPRE2)
  24807. if ((RCC_ClkInitStruct->APB2CLKDivider) > (RCC->D2CFGR & RCC_D2CFGR_D2PPRE2))
  24808. 800ab10: 687b ldr r3, [r7, #4]
  24809. 800ab12: 699a ldr r2, [r3, #24]
  24810. 800ab14: 4b64 ldr r3, [pc, #400] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24811. 800ab16: 69db ldr r3, [r3, #28]
  24812. 800ab18: f403 63e0 and.w r3, r3, #1792 @ 0x700
  24813. 800ab1c: 429a cmp r2, r3
  24814. 800ab1e: d908 bls.n 800ab32 <HAL_RCC_ClockConfig+0xce>
  24815. {
  24816. assert_param(IS_RCC_PCLK2(RCC_ClkInitStruct->APB2CLKDivider));
  24817. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2, (RCC_ClkInitStruct->APB2CLKDivider));
  24818. 800ab20: 4b61 ldr r3, [pc, #388] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24819. 800ab22: 69db ldr r3, [r3, #28]
  24820. 800ab24: f423 62e0 bic.w r2, r3, #1792 @ 0x700
  24821. 800ab28: 687b ldr r3, [r7, #4]
  24822. 800ab2a: 699b ldr r3, [r3, #24]
  24823. 800ab2c: 495e ldr r1, [pc, #376] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24824. 800ab2e: 4313 orrs r3, r2
  24825. 800ab30: 61cb str r3, [r1, #28]
  24826. }
  24827. #endif
  24828. }
  24829. /*-------------------------- D3PCLK1 Configuration ---------------------------*/
  24830. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D3PCLK1) == RCC_CLOCKTYPE_D3PCLK1)
  24831. 800ab32: 687b ldr r3, [r7, #4]
  24832. 800ab34: 681b ldr r3, [r3, #0]
  24833. 800ab36: f003 0320 and.w r3, r3, #32
  24834. 800ab3a: 2b00 cmp r3, #0
  24835. 800ab3c: d010 beq.n 800ab60 <HAL_RCC_ClockConfig+0xfc>
  24836. {
  24837. #if defined(RCC_D3CFGR_D3PPRE)
  24838. if ((RCC_ClkInitStruct->APB4CLKDivider) > (RCC->D3CFGR & RCC_D3CFGR_D3PPRE))
  24839. 800ab3e: 687b ldr r3, [r7, #4]
  24840. 800ab40: 69da ldr r2, [r3, #28]
  24841. 800ab42: 4b59 ldr r3, [pc, #356] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24842. 800ab44: 6a1b ldr r3, [r3, #32]
  24843. 800ab46: f003 0370 and.w r3, r3, #112 @ 0x70
  24844. 800ab4a: 429a cmp r2, r3
  24845. 800ab4c: d908 bls.n 800ab60 <HAL_RCC_ClockConfig+0xfc>
  24846. {
  24847. assert_param(IS_RCC_D3PCLK1(RCC_ClkInitStruct->APB4CLKDivider));
  24848. MODIFY_REG(RCC->D3CFGR, RCC_D3CFGR_D3PPRE, (RCC_ClkInitStruct->APB4CLKDivider));
  24849. 800ab4e: 4b56 ldr r3, [pc, #344] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24850. 800ab50: 6a1b ldr r3, [r3, #32]
  24851. 800ab52: f023 0270 bic.w r2, r3, #112 @ 0x70
  24852. 800ab56: 687b ldr r3, [r7, #4]
  24853. 800ab58: 69db ldr r3, [r3, #28]
  24854. 800ab5a: 4953 ldr r1, [pc, #332] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24855. 800ab5c: 4313 orrs r3, r2
  24856. 800ab5e: 620b str r3, [r1, #32]
  24857. }
  24858. #endif
  24859. }
  24860. /*-------------------------- HCLK Configuration --------------------------*/
  24861. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
  24862. 800ab60: 687b ldr r3, [r7, #4]
  24863. 800ab62: 681b ldr r3, [r3, #0]
  24864. 800ab64: f003 0302 and.w r3, r3, #2
  24865. 800ab68: 2b00 cmp r3, #0
  24866. 800ab6a: d010 beq.n 800ab8e <HAL_RCC_ClockConfig+0x12a>
  24867. {
  24868. #if defined (RCC_D1CFGR_HPRE)
  24869. if ((RCC_ClkInitStruct->AHBCLKDivider) > (RCC->D1CFGR & RCC_D1CFGR_HPRE))
  24870. 800ab6c: 687b ldr r3, [r7, #4]
  24871. 800ab6e: 68da ldr r2, [r3, #12]
  24872. 800ab70: 4b4d ldr r3, [pc, #308] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24873. 800ab72: 699b ldr r3, [r3, #24]
  24874. 800ab74: f003 030f and.w r3, r3, #15
  24875. 800ab78: 429a cmp r2, r3
  24876. 800ab7a: d908 bls.n 800ab8e <HAL_RCC_ClockConfig+0x12a>
  24877. {
  24878. /* Set the new HCLK clock divider */
  24879. assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));
  24880. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);
  24881. 800ab7c: 4b4a ldr r3, [pc, #296] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24882. 800ab7e: 699b ldr r3, [r3, #24]
  24883. 800ab80: f023 020f bic.w r2, r3, #15
  24884. 800ab84: 687b ldr r3, [r7, #4]
  24885. 800ab86: 68db ldr r3, [r3, #12]
  24886. 800ab88: 4947 ldr r1, [pc, #284] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24887. 800ab8a: 4313 orrs r3, r2
  24888. 800ab8c: 618b str r3, [r1, #24]
  24889. }
  24890. #endif
  24891. }
  24892. /*------------------------- SYSCLK Configuration -------------------------*/
  24893. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
  24894. 800ab8e: 687b ldr r3, [r7, #4]
  24895. 800ab90: 681b ldr r3, [r3, #0]
  24896. 800ab92: f003 0301 and.w r3, r3, #1
  24897. 800ab96: 2b00 cmp r3, #0
  24898. 800ab98: d055 beq.n 800ac46 <HAL_RCC_ClockConfig+0x1e2>
  24899. {
  24900. assert_param(IS_RCC_SYSCLK(RCC_ClkInitStruct->SYSCLKDivider));
  24901. assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
  24902. #if defined(RCC_D1CFGR_D1CPRE)
  24903. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1CPRE, RCC_ClkInitStruct->SYSCLKDivider);
  24904. 800ab9a: 4b43 ldr r3, [pc, #268] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24905. 800ab9c: 699b ldr r3, [r3, #24]
  24906. 800ab9e: f423 6270 bic.w r2, r3, #3840 @ 0xf00
  24907. 800aba2: 687b ldr r3, [r7, #4]
  24908. 800aba4: 689b ldr r3, [r3, #8]
  24909. 800aba6: 4940 ldr r1, [pc, #256] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24910. 800aba8: 4313 orrs r3, r2
  24911. 800abaa: 618b str r3, [r1, #24]
  24912. #else
  24913. MODIFY_REG(RCC->CDCFGR1, RCC_CDCFGR1_CDCPRE, RCC_ClkInitStruct->SYSCLKDivider);
  24914. #endif
  24915. /* HSE is selected as System Clock Source */
  24916. if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
  24917. 800abac: 687b ldr r3, [r7, #4]
  24918. 800abae: 685b ldr r3, [r3, #4]
  24919. 800abb0: 2b02 cmp r3, #2
  24920. 800abb2: d107 bne.n 800abc4 <HAL_RCC_ClockConfig+0x160>
  24921. {
  24922. /* Check the HSE ready flag */
  24923. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  24924. 800abb4: 4b3c ldr r3, [pc, #240] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24925. 800abb6: 681b ldr r3, [r3, #0]
  24926. 800abb8: f403 3300 and.w r3, r3, #131072 @ 0x20000
  24927. 800abbc: 2b00 cmp r3, #0
  24928. 800abbe: d121 bne.n 800ac04 <HAL_RCC_ClockConfig+0x1a0>
  24929. {
  24930. return HAL_ERROR;
  24931. 800abc0: 2301 movs r3, #1
  24932. 800abc2: e0f6 b.n 800adb2 <HAL_RCC_ClockConfig+0x34e>
  24933. }
  24934. }
  24935. /* PLL is selected as System Clock Source */
  24936. else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
  24937. 800abc4: 687b ldr r3, [r7, #4]
  24938. 800abc6: 685b ldr r3, [r3, #4]
  24939. 800abc8: 2b03 cmp r3, #3
  24940. 800abca: d107 bne.n 800abdc <HAL_RCC_ClockConfig+0x178>
  24941. {
  24942. /* Check the PLL ready flag */
  24943. if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  24944. 800abcc: 4b36 ldr r3, [pc, #216] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24945. 800abce: 681b ldr r3, [r3, #0]
  24946. 800abd0: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  24947. 800abd4: 2b00 cmp r3, #0
  24948. 800abd6: d115 bne.n 800ac04 <HAL_RCC_ClockConfig+0x1a0>
  24949. {
  24950. return HAL_ERROR;
  24951. 800abd8: 2301 movs r3, #1
  24952. 800abda: e0ea b.n 800adb2 <HAL_RCC_ClockConfig+0x34e>
  24953. }
  24954. }
  24955. /* CSI is selected as System Clock Source */
  24956. else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_CSI)
  24957. 800abdc: 687b ldr r3, [r7, #4]
  24958. 800abde: 685b ldr r3, [r3, #4]
  24959. 800abe0: 2b01 cmp r3, #1
  24960. 800abe2: d107 bne.n 800abf4 <HAL_RCC_ClockConfig+0x190>
  24961. {
  24962. /* Check the PLL ready flag */
  24963. if (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  24964. 800abe4: 4b30 ldr r3, [pc, #192] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24965. 800abe6: 681b ldr r3, [r3, #0]
  24966. 800abe8: f403 7380 and.w r3, r3, #256 @ 0x100
  24967. 800abec: 2b00 cmp r3, #0
  24968. 800abee: d109 bne.n 800ac04 <HAL_RCC_ClockConfig+0x1a0>
  24969. {
  24970. return HAL_ERROR;
  24971. 800abf0: 2301 movs r3, #1
  24972. 800abf2: e0de b.n 800adb2 <HAL_RCC_ClockConfig+0x34e>
  24973. }
  24974. /* HSI is selected as System Clock Source */
  24975. else
  24976. {
  24977. /* Check the HSI ready flag */
  24978. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  24979. 800abf4: 4b2c ldr r3, [pc, #176] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24980. 800abf6: 681b ldr r3, [r3, #0]
  24981. 800abf8: f003 0304 and.w r3, r3, #4
  24982. 800abfc: 2b00 cmp r3, #0
  24983. 800abfe: d101 bne.n 800ac04 <HAL_RCC_ClockConfig+0x1a0>
  24984. {
  24985. return HAL_ERROR;
  24986. 800ac00: 2301 movs r3, #1
  24987. 800ac02: e0d6 b.n 800adb2 <HAL_RCC_ClockConfig+0x34e>
  24988. }
  24989. }
  24990. MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, RCC_ClkInitStruct->SYSCLKSource);
  24991. 800ac04: 4b28 ldr r3, [pc, #160] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24992. 800ac06: 691b ldr r3, [r3, #16]
  24993. 800ac08: f023 0207 bic.w r2, r3, #7
  24994. 800ac0c: 687b ldr r3, [r7, #4]
  24995. 800ac0e: 685b ldr r3, [r3, #4]
  24996. 800ac10: 4925 ldr r1, [pc, #148] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  24997. 800ac12: 4313 orrs r3, r2
  24998. 800ac14: 610b str r3, [r1, #16]
  24999. /* Get Start Tick*/
  25000. tickstart = HAL_GetTick();
  25001. 800ac16: f7f9 ff25 bl 8004a64 <HAL_GetTick>
  25002. 800ac1a: 6178 str r0, [r7, #20]
  25003. while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
  25004. 800ac1c: e00a b.n 800ac34 <HAL_RCC_ClockConfig+0x1d0>
  25005. {
  25006. if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE)
  25007. 800ac1e: f7f9 ff21 bl 8004a64 <HAL_GetTick>
  25008. 800ac22: 4602 mov r2, r0
  25009. 800ac24: 697b ldr r3, [r7, #20]
  25010. 800ac26: 1ad3 subs r3, r2, r3
  25011. 800ac28: f241 3288 movw r2, #5000 @ 0x1388
  25012. 800ac2c: 4293 cmp r3, r2
  25013. 800ac2e: d901 bls.n 800ac34 <HAL_RCC_ClockConfig+0x1d0>
  25014. {
  25015. return HAL_TIMEOUT;
  25016. 800ac30: 2303 movs r3, #3
  25017. 800ac32: e0be b.n 800adb2 <HAL_RCC_ClockConfig+0x34e>
  25018. while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
  25019. 800ac34: 4b1c ldr r3, [pc, #112] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  25020. 800ac36: 691b ldr r3, [r3, #16]
  25021. 800ac38: f003 0238 and.w r2, r3, #56 @ 0x38
  25022. 800ac3c: 687b ldr r3, [r7, #4]
  25023. 800ac3e: 685b ldr r3, [r3, #4]
  25024. 800ac40: 00db lsls r3, r3, #3
  25025. 800ac42: 429a cmp r2, r3
  25026. 800ac44: d1eb bne.n 800ac1e <HAL_RCC_ClockConfig+0x1ba>
  25027. }
  25028. /* Decreasing the BUS frequency divider */
  25029. /*-------------------------- HCLK Configuration --------------------------*/
  25030. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
  25031. 800ac46: 687b ldr r3, [r7, #4]
  25032. 800ac48: 681b ldr r3, [r3, #0]
  25033. 800ac4a: f003 0302 and.w r3, r3, #2
  25034. 800ac4e: 2b00 cmp r3, #0
  25035. 800ac50: d010 beq.n 800ac74 <HAL_RCC_ClockConfig+0x210>
  25036. {
  25037. #if defined(RCC_D1CFGR_HPRE)
  25038. if ((RCC_ClkInitStruct->AHBCLKDivider) < (RCC->D1CFGR & RCC_D1CFGR_HPRE))
  25039. 800ac52: 687b ldr r3, [r7, #4]
  25040. 800ac54: 68da ldr r2, [r3, #12]
  25041. 800ac56: 4b14 ldr r3, [pc, #80] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  25042. 800ac58: 699b ldr r3, [r3, #24]
  25043. 800ac5a: f003 030f and.w r3, r3, #15
  25044. 800ac5e: 429a cmp r2, r3
  25045. 800ac60: d208 bcs.n 800ac74 <HAL_RCC_ClockConfig+0x210>
  25046. {
  25047. /* Set the new HCLK clock divider */
  25048. assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));
  25049. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);
  25050. 800ac62: 4b11 ldr r3, [pc, #68] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  25051. 800ac64: 699b ldr r3, [r3, #24]
  25052. 800ac66: f023 020f bic.w r2, r3, #15
  25053. 800ac6a: 687b ldr r3, [r7, #4]
  25054. 800ac6c: 68db ldr r3, [r3, #12]
  25055. 800ac6e: 490e ldr r1, [pc, #56] @ (800aca8 <HAL_RCC_ClockConfig+0x244>)
  25056. 800ac70: 4313 orrs r3, r2
  25057. 800ac72: 618b str r3, [r1, #24]
  25058. }
  25059. #endif
  25060. }
  25061. /* Decreasing the number of wait states because of lower CPU frequency */
  25062. if (FLatency < __HAL_FLASH_GET_LATENCY())
  25063. 800ac74: 4b0b ldr r3, [pc, #44] @ (800aca4 <HAL_RCC_ClockConfig+0x240>)
  25064. 800ac76: 681b ldr r3, [r3, #0]
  25065. 800ac78: f003 030f and.w r3, r3, #15
  25066. 800ac7c: 683a ldr r2, [r7, #0]
  25067. 800ac7e: 429a cmp r2, r3
  25068. 800ac80: d214 bcs.n 800acac <HAL_RCC_ClockConfig+0x248>
  25069. {
  25070. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  25071. __HAL_FLASH_SET_LATENCY(FLatency);
  25072. 800ac82: 4b08 ldr r3, [pc, #32] @ (800aca4 <HAL_RCC_ClockConfig+0x240>)
  25073. 800ac84: 681b ldr r3, [r3, #0]
  25074. 800ac86: f023 020f bic.w r2, r3, #15
  25075. 800ac8a: 4906 ldr r1, [pc, #24] @ (800aca4 <HAL_RCC_ClockConfig+0x240>)
  25076. 800ac8c: 683b ldr r3, [r7, #0]
  25077. 800ac8e: 4313 orrs r3, r2
  25078. 800ac90: 600b str r3, [r1, #0]
  25079. /* Check that the new number of wait states is taken into account to access the Flash
  25080. memory by reading the FLASH_ACR register */
  25081. if (__HAL_FLASH_GET_LATENCY() != FLatency)
  25082. 800ac92: 4b04 ldr r3, [pc, #16] @ (800aca4 <HAL_RCC_ClockConfig+0x240>)
  25083. 800ac94: 681b ldr r3, [r3, #0]
  25084. 800ac96: f003 030f and.w r3, r3, #15
  25085. 800ac9a: 683a ldr r2, [r7, #0]
  25086. 800ac9c: 429a cmp r2, r3
  25087. 800ac9e: d005 beq.n 800acac <HAL_RCC_ClockConfig+0x248>
  25088. {
  25089. return HAL_ERROR;
  25090. 800aca0: 2301 movs r3, #1
  25091. 800aca2: e086 b.n 800adb2 <HAL_RCC_ClockConfig+0x34e>
  25092. 800aca4: 52002000 .word 0x52002000
  25093. 800aca8: 58024400 .word 0x58024400
  25094. }
  25095. }
  25096. /*-------------------------- D1PCLK1/CDPCLK Configuration ---------------------------*/
  25097. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D1PCLK1) == RCC_CLOCKTYPE_D1PCLK1)
  25098. 800acac: 687b ldr r3, [r7, #4]
  25099. 800acae: 681b ldr r3, [r3, #0]
  25100. 800acb0: f003 0304 and.w r3, r3, #4
  25101. 800acb4: 2b00 cmp r3, #0
  25102. 800acb6: d010 beq.n 800acda <HAL_RCC_ClockConfig+0x276>
  25103. {
  25104. #if defined(RCC_D1CFGR_D1PPRE)
  25105. if ((RCC_ClkInitStruct->APB3CLKDivider) < (RCC->D1CFGR & RCC_D1CFGR_D1PPRE))
  25106. 800acb8: 687b ldr r3, [r7, #4]
  25107. 800acba: 691a ldr r2, [r3, #16]
  25108. 800acbc: 4b3f ldr r3, [pc, #252] @ (800adbc <HAL_RCC_ClockConfig+0x358>)
  25109. 800acbe: 699b ldr r3, [r3, #24]
  25110. 800acc0: f003 0370 and.w r3, r3, #112 @ 0x70
  25111. 800acc4: 429a cmp r2, r3
  25112. 800acc6: d208 bcs.n 800acda <HAL_RCC_ClockConfig+0x276>
  25113. {
  25114. assert_param(IS_RCC_D1PCLK1(RCC_ClkInitStruct->APB3CLKDivider));
  25115. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1PPRE, RCC_ClkInitStruct->APB3CLKDivider);
  25116. 800acc8: 4b3c ldr r3, [pc, #240] @ (800adbc <HAL_RCC_ClockConfig+0x358>)
  25117. 800acca: 699b ldr r3, [r3, #24]
  25118. 800accc: f023 0270 bic.w r2, r3, #112 @ 0x70
  25119. 800acd0: 687b ldr r3, [r7, #4]
  25120. 800acd2: 691b ldr r3, [r3, #16]
  25121. 800acd4: 4939 ldr r1, [pc, #228] @ (800adbc <HAL_RCC_ClockConfig+0x358>)
  25122. 800acd6: 4313 orrs r3, r2
  25123. 800acd8: 618b str r3, [r1, #24]
  25124. }
  25125. #endif
  25126. }
  25127. /*-------------------------- PCLK1 Configuration ---------------------------*/
  25128. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
  25129. 800acda: 687b ldr r3, [r7, #4]
  25130. 800acdc: 681b ldr r3, [r3, #0]
  25131. 800acde: f003 0308 and.w r3, r3, #8
  25132. 800ace2: 2b00 cmp r3, #0
  25133. 800ace4: d010 beq.n 800ad08 <HAL_RCC_ClockConfig+0x2a4>
  25134. {
  25135. #if defined(RCC_D2CFGR_D2PPRE1)
  25136. if ((RCC_ClkInitStruct->APB1CLKDivider) < (RCC->D2CFGR & RCC_D2CFGR_D2PPRE1))
  25137. 800ace6: 687b ldr r3, [r7, #4]
  25138. 800ace8: 695a ldr r2, [r3, #20]
  25139. 800acea: 4b34 ldr r3, [pc, #208] @ (800adbc <HAL_RCC_ClockConfig+0x358>)
  25140. 800acec: 69db ldr r3, [r3, #28]
  25141. 800acee: f003 0370 and.w r3, r3, #112 @ 0x70
  25142. 800acf2: 429a cmp r2, r3
  25143. 800acf4: d208 bcs.n 800ad08 <HAL_RCC_ClockConfig+0x2a4>
  25144. {
  25145. assert_param(IS_RCC_PCLK1(RCC_ClkInitStruct->APB1CLKDivider));
  25146. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  25147. 800acf6: 4b31 ldr r3, [pc, #196] @ (800adbc <HAL_RCC_ClockConfig+0x358>)
  25148. 800acf8: 69db ldr r3, [r3, #28]
  25149. 800acfa: f023 0270 bic.w r2, r3, #112 @ 0x70
  25150. 800acfe: 687b ldr r3, [r7, #4]
  25151. 800ad00: 695b ldr r3, [r3, #20]
  25152. 800ad02: 492e ldr r1, [pc, #184] @ (800adbc <HAL_RCC_ClockConfig+0x358>)
  25153. 800ad04: 4313 orrs r3, r2
  25154. 800ad06: 61cb str r3, [r1, #28]
  25155. }
  25156. #endif
  25157. }
  25158. /*-------------------------- PCLK2 Configuration ---------------------------*/
  25159. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
  25160. 800ad08: 687b ldr r3, [r7, #4]
  25161. 800ad0a: 681b ldr r3, [r3, #0]
  25162. 800ad0c: f003 0310 and.w r3, r3, #16
  25163. 800ad10: 2b00 cmp r3, #0
  25164. 800ad12: d010 beq.n 800ad36 <HAL_RCC_ClockConfig+0x2d2>
  25165. {
  25166. #if defined (RCC_D2CFGR_D2PPRE2)
  25167. if ((RCC_ClkInitStruct->APB2CLKDivider) < (RCC->D2CFGR & RCC_D2CFGR_D2PPRE2))
  25168. 800ad14: 687b ldr r3, [r7, #4]
  25169. 800ad16: 699a ldr r2, [r3, #24]
  25170. 800ad18: 4b28 ldr r3, [pc, #160] @ (800adbc <HAL_RCC_ClockConfig+0x358>)
  25171. 800ad1a: 69db ldr r3, [r3, #28]
  25172. 800ad1c: f403 63e0 and.w r3, r3, #1792 @ 0x700
  25173. 800ad20: 429a cmp r2, r3
  25174. 800ad22: d208 bcs.n 800ad36 <HAL_RCC_ClockConfig+0x2d2>
  25175. {
  25176. assert_param(IS_RCC_PCLK2(RCC_ClkInitStruct->APB2CLKDivider));
  25177. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2, (RCC_ClkInitStruct->APB2CLKDivider));
  25178. 800ad24: 4b25 ldr r3, [pc, #148] @ (800adbc <HAL_RCC_ClockConfig+0x358>)
  25179. 800ad26: 69db ldr r3, [r3, #28]
  25180. 800ad28: f423 62e0 bic.w r2, r3, #1792 @ 0x700
  25181. 800ad2c: 687b ldr r3, [r7, #4]
  25182. 800ad2e: 699b ldr r3, [r3, #24]
  25183. 800ad30: 4922 ldr r1, [pc, #136] @ (800adbc <HAL_RCC_ClockConfig+0x358>)
  25184. 800ad32: 4313 orrs r3, r2
  25185. 800ad34: 61cb str r3, [r1, #28]
  25186. }
  25187. #endif
  25188. }
  25189. /*-------------------------- D3PCLK1/SRDPCLK1 Configuration ---------------------------*/
  25190. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D3PCLK1) == RCC_CLOCKTYPE_D3PCLK1)
  25191. 800ad36: 687b ldr r3, [r7, #4]
  25192. 800ad38: 681b ldr r3, [r3, #0]
  25193. 800ad3a: f003 0320 and.w r3, r3, #32
  25194. 800ad3e: 2b00 cmp r3, #0
  25195. 800ad40: d010 beq.n 800ad64 <HAL_RCC_ClockConfig+0x300>
  25196. {
  25197. #if defined(RCC_D3CFGR_D3PPRE)
  25198. if ((RCC_ClkInitStruct->APB4CLKDivider) < (RCC->D3CFGR & RCC_D3CFGR_D3PPRE))
  25199. 800ad42: 687b ldr r3, [r7, #4]
  25200. 800ad44: 69da ldr r2, [r3, #28]
  25201. 800ad46: 4b1d ldr r3, [pc, #116] @ (800adbc <HAL_RCC_ClockConfig+0x358>)
  25202. 800ad48: 6a1b ldr r3, [r3, #32]
  25203. 800ad4a: f003 0370 and.w r3, r3, #112 @ 0x70
  25204. 800ad4e: 429a cmp r2, r3
  25205. 800ad50: d208 bcs.n 800ad64 <HAL_RCC_ClockConfig+0x300>
  25206. {
  25207. assert_param(IS_RCC_D3PCLK1(RCC_ClkInitStruct->APB4CLKDivider));
  25208. MODIFY_REG(RCC->D3CFGR, RCC_D3CFGR_D3PPRE, (RCC_ClkInitStruct->APB4CLKDivider));
  25209. 800ad52: 4b1a ldr r3, [pc, #104] @ (800adbc <HAL_RCC_ClockConfig+0x358>)
  25210. 800ad54: 6a1b ldr r3, [r3, #32]
  25211. 800ad56: f023 0270 bic.w r2, r3, #112 @ 0x70
  25212. 800ad5a: 687b ldr r3, [r7, #4]
  25213. 800ad5c: 69db ldr r3, [r3, #28]
  25214. 800ad5e: 4917 ldr r1, [pc, #92] @ (800adbc <HAL_RCC_ClockConfig+0x358>)
  25215. 800ad60: 4313 orrs r3, r2
  25216. 800ad62: 620b str r3, [r1, #32]
  25217. #endif
  25218. }
  25219. /* Update the SystemCoreClock global variable */
  25220. #if defined(RCC_D1CFGR_D1CPRE)
  25221. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE) >> RCC_D1CFGR_D1CPRE_Pos]) & 0x1FU);
  25222. 800ad64: f000 f834 bl 800add0 <HAL_RCC_GetSysClockFreq>
  25223. 800ad68: 4602 mov r2, r0
  25224. 800ad6a: 4b14 ldr r3, [pc, #80] @ (800adbc <HAL_RCC_ClockConfig+0x358>)
  25225. 800ad6c: 699b ldr r3, [r3, #24]
  25226. 800ad6e: 0a1b lsrs r3, r3, #8
  25227. 800ad70: f003 030f and.w r3, r3, #15
  25228. 800ad74: 4912 ldr r1, [pc, #72] @ (800adc0 <HAL_RCC_ClockConfig+0x35c>)
  25229. 800ad76: 5ccb ldrb r3, [r1, r3]
  25230. 800ad78: f003 031f and.w r3, r3, #31
  25231. 800ad7c: fa22 f303 lsr.w r3, r2, r3
  25232. 800ad80: 613b str r3, [r7, #16]
  25233. #else
  25234. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE) >> RCC_CDCFGR1_CDCPRE_Pos]) & 0x1FU);
  25235. #endif
  25236. #if defined(RCC_D1CFGR_HPRE)
  25237. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE) >> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  25238. 800ad82: 4b0e ldr r3, [pc, #56] @ (800adbc <HAL_RCC_ClockConfig+0x358>)
  25239. 800ad84: 699b ldr r3, [r3, #24]
  25240. 800ad86: f003 030f and.w r3, r3, #15
  25241. 800ad8a: 4a0d ldr r2, [pc, #52] @ (800adc0 <HAL_RCC_ClockConfig+0x35c>)
  25242. 800ad8c: 5cd3 ldrb r3, [r2, r3]
  25243. 800ad8e: f003 031f and.w r3, r3, #31
  25244. 800ad92: 693a ldr r2, [r7, #16]
  25245. 800ad94: fa22 f303 lsr.w r3, r2, r3
  25246. 800ad98: 4a0a ldr r2, [pc, #40] @ (800adc4 <HAL_RCC_ClockConfig+0x360>)
  25247. 800ad9a: 6013 str r3, [r2, #0]
  25248. #endif
  25249. #if defined(DUAL_CORE) && defined(CORE_CM4)
  25250. SystemCoreClock = SystemD2Clock;
  25251. #else
  25252. SystemCoreClock = common_system_clock;
  25253. 800ad9c: 4a0a ldr r2, [pc, #40] @ (800adc8 <HAL_RCC_ClockConfig+0x364>)
  25254. 800ad9e: 693b ldr r3, [r7, #16]
  25255. 800ada0: 6013 str r3, [r2, #0]
  25256. #endif /* DUAL_CORE && CORE_CM4 */
  25257. /* Configure the source of time base considering new system clocks settings*/
  25258. halstatus = HAL_InitTick(uwTickPrio);
  25259. 800ada2: 4b0a ldr r3, [pc, #40] @ (800adcc <HAL_RCC_ClockConfig+0x368>)
  25260. 800ada4: 681b ldr r3, [r3, #0]
  25261. 800ada6: 4618 mov r0, r3
  25262. 800ada8: f7f8 fc9c bl 80036e4 <HAL_InitTick>
  25263. 800adac: 4603 mov r3, r0
  25264. 800adae: 73fb strb r3, [r7, #15]
  25265. return halstatus;
  25266. 800adb0: 7bfb ldrb r3, [r7, #15]
  25267. }
  25268. 800adb2: 4618 mov r0, r3
  25269. 800adb4: 3718 adds r7, #24
  25270. 800adb6: 46bd mov sp, r7
  25271. 800adb8: bd80 pop {r7, pc}
  25272. 800adba: bf00 nop
  25273. 800adbc: 58024400 .word 0x58024400
  25274. 800adc0: 080175c8 .word 0x080175c8
  25275. 800adc4: 24000038 .word 0x24000038
  25276. 800adc8: 24000034 .word 0x24000034
  25277. 800adcc: 2400003c .word 0x2400003c
  25278. 0800add0 <HAL_RCC_GetSysClockFreq>:
  25279. *
  25280. *
  25281. * @retval SYSCLK frequency
  25282. */
  25283. uint32_t HAL_RCC_GetSysClockFreq(void)
  25284. {
  25285. 800add0: b480 push {r7}
  25286. 800add2: b089 sub sp, #36 @ 0x24
  25287. 800add4: af00 add r7, sp, #0
  25288. float_t fracn1, pllvco;
  25289. uint32_t sysclockfreq;
  25290. /* Get SYSCLK source -------------------------------------------------------*/
  25291. switch (RCC->CFGR & RCC_CFGR_SWS)
  25292. 800add6: 4bb3 ldr r3, [pc, #716] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25293. 800add8: 691b ldr r3, [r3, #16]
  25294. 800adda: f003 0338 and.w r3, r3, #56 @ 0x38
  25295. 800adde: 2b18 cmp r3, #24
  25296. 800ade0: f200 8155 bhi.w 800b08e <HAL_RCC_GetSysClockFreq+0x2be>
  25297. 800ade4: a201 add r2, pc, #4 @ (adr r2, 800adec <HAL_RCC_GetSysClockFreq+0x1c>)
  25298. 800ade6: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  25299. 800adea: bf00 nop
  25300. 800adec: 0800ae51 .word 0x0800ae51
  25301. 800adf0: 0800b08f .word 0x0800b08f
  25302. 800adf4: 0800b08f .word 0x0800b08f
  25303. 800adf8: 0800b08f .word 0x0800b08f
  25304. 800adfc: 0800b08f .word 0x0800b08f
  25305. 800ae00: 0800b08f .word 0x0800b08f
  25306. 800ae04: 0800b08f .word 0x0800b08f
  25307. 800ae08: 0800b08f .word 0x0800b08f
  25308. 800ae0c: 0800ae77 .word 0x0800ae77
  25309. 800ae10: 0800b08f .word 0x0800b08f
  25310. 800ae14: 0800b08f .word 0x0800b08f
  25311. 800ae18: 0800b08f .word 0x0800b08f
  25312. 800ae1c: 0800b08f .word 0x0800b08f
  25313. 800ae20: 0800b08f .word 0x0800b08f
  25314. 800ae24: 0800b08f .word 0x0800b08f
  25315. 800ae28: 0800b08f .word 0x0800b08f
  25316. 800ae2c: 0800ae7d .word 0x0800ae7d
  25317. 800ae30: 0800b08f .word 0x0800b08f
  25318. 800ae34: 0800b08f .word 0x0800b08f
  25319. 800ae38: 0800b08f .word 0x0800b08f
  25320. 800ae3c: 0800b08f .word 0x0800b08f
  25321. 800ae40: 0800b08f .word 0x0800b08f
  25322. 800ae44: 0800b08f .word 0x0800b08f
  25323. 800ae48: 0800b08f .word 0x0800b08f
  25324. 800ae4c: 0800ae83 .word 0x0800ae83
  25325. {
  25326. case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */
  25327. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  25328. 800ae50: 4b94 ldr r3, [pc, #592] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25329. 800ae52: 681b ldr r3, [r3, #0]
  25330. 800ae54: f003 0320 and.w r3, r3, #32
  25331. 800ae58: 2b00 cmp r3, #0
  25332. 800ae5a: d009 beq.n 800ae70 <HAL_RCC_GetSysClockFreq+0xa0>
  25333. {
  25334. sysclockfreq = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  25335. 800ae5c: 4b91 ldr r3, [pc, #580] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25336. 800ae5e: 681b ldr r3, [r3, #0]
  25337. 800ae60: 08db lsrs r3, r3, #3
  25338. 800ae62: f003 0303 and.w r3, r3, #3
  25339. 800ae66: 4a90 ldr r2, [pc, #576] @ (800b0a8 <HAL_RCC_GetSysClockFreq+0x2d8>)
  25340. 800ae68: fa22 f303 lsr.w r3, r2, r3
  25341. 800ae6c: 61bb str r3, [r7, #24]
  25342. else
  25343. {
  25344. sysclockfreq = (uint32_t) HSI_VALUE;
  25345. }
  25346. break;
  25347. 800ae6e: e111 b.n 800b094 <HAL_RCC_GetSysClockFreq+0x2c4>
  25348. sysclockfreq = (uint32_t) HSI_VALUE;
  25349. 800ae70: 4b8d ldr r3, [pc, #564] @ (800b0a8 <HAL_RCC_GetSysClockFreq+0x2d8>)
  25350. 800ae72: 61bb str r3, [r7, #24]
  25351. break;
  25352. 800ae74: e10e b.n 800b094 <HAL_RCC_GetSysClockFreq+0x2c4>
  25353. case RCC_CFGR_SWS_CSI: /* CSI used as system clock source */
  25354. sysclockfreq = CSI_VALUE;
  25355. 800ae76: 4b8d ldr r3, [pc, #564] @ (800b0ac <HAL_RCC_GetSysClockFreq+0x2dc>)
  25356. 800ae78: 61bb str r3, [r7, #24]
  25357. break;
  25358. 800ae7a: e10b b.n 800b094 <HAL_RCC_GetSysClockFreq+0x2c4>
  25359. case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */
  25360. sysclockfreq = HSE_VALUE;
  25361. 800ae7c: 4b8c ldr r3, [pc, #560] @ (800b0b0 <HAL_RCC_GetSysClockFreq+0x2e0>)
  25362. 800ae7e: 61bb str r3, [r7, #24]
  25363. break;
  25364. 800ae80: e108 b.n 800b094 <HAL_RCC_GetSysClockFreq+0x2c4>
  25365. case RCC_CFGR_SWS_PLL1: /* PLL1 used as system clock source */
  25366. /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLLM) * PLLN
  25367. SYSCLK = PLL_VCO / PLLR
  25368. */
  25369. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  25370. 800ae82: 4b88 ldr r3, [pc, #544] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25371. 800ae84: 6a9b ldr r3, [r3, #40] @ 0x28
  25372. 800ae86: f003 0303 and.w r3, r3, #3
  25373. 800ae8a: 617b str r3, [r7, #20]
  25374. pllm = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1) >> 4) ;
  25375. 800ae8c: 4b85 ldr r3, [pc, #532] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25376. 800ae8e: 6a9b ldr r3, [r3, #40] @ 0x28
  25377. 800ae90: 091b lsrs r3, r3, #4
  25378. 800ae92: f003 033f and.w r3, r3, #63 @ 0x3f
  25379. 800ae96: 613b str r3, [r7, #16]
  25380. pllfracen = ((RCC-> PLLCFGR & RCC_PLLCFGR_PLL1FRACEN) >> RCC_PLLCFGR_PLL1FRACEN_Pos);
  25381. 800ae98: 4b82 ldr r3, [pc, #520] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25382. 800ae9a: 6adb ldr r3, [r3, #44] @ 0x2c
  25383. 800ae9c: f003 0301 and.w r3, r3, #1
  25384. 800aea0: 60fb str r3, [r7, #12]
  25385. fracn1 = (float_t)(uint32_t)(pllfracen * ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> 3));
  25386. 800aea2: 4b80 ldr r3, [pc, #512] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25387. 800aea4: 6b5b ldr r3, [r3, #52] @ 0x34
  25388. 800aea6: 08db lsrs r3, r3, #3
  25389. 800aea8: f3c3 030c ubfx r3, r3, #0, #13
  25390. 800aeac: 68fa ldr r2, [r7, #12]
  25391. 800aeae: fb02 f303 mul.w r3, r2, r3
  25392. 800aeb2: ee07 3a90 vmov s15, r3
  25393. 800aeb6: eef8 7a67 vcvt.f32.u32 s15, s15
  25394. 800aeba: edc7 7a02 vstr s15, [r7, #8]
  25395. if (pllm != 0U)
  25396. 800aebe: 693b ldr r3, [r7, #16]
  25397. 800aec0: 2b00 cmp r3, #0
  25398. 800aec2: f000 80e1 beq.w 800b088 <HAL_RCC_GetSysClockFreq+0x2b8>
  25399. 800aec6: 697b ldr r3, [r7, #20]
  25400. 800aec8: 2b02 cmp r3, #2
  25401. 800aeca: f000 8083 beq.w 800afd4 <HAL_RCC_GetSysClockFreq+0x204>
  25402. 800aece: 697b ldr r3, [r7, #20]
  25403. 800aed0: 2b02 cmp r3, #2
  25404. 800aed2: f200 80a1 bhi.w 800b018 <HAL_RCC_GetSysClockFreq+0x248>
  25405. 800aed6: 697b ldr r3, [r7, #20]
  25406. 800aed8: 2b00 cmp r3, #0
  25407. 800aeda: d003 beq.n 800aee4 <HAL_RCC_GetSysClockFreq+0x114>
  25408. 800aedc: 697b ldr r3, [r7, #20]
  25409. 800aede: 2b01 cmp r3, #1
  25410. 800aee0: d056 beq.n 800af90 <HAL_RCC_GetSysClockFreq+0x1c0>
  25411. 800aee2: e099 b.n 800b018 <HAL_RCC_GetSysClockFreq+0x248>
  25412. {
  25413. switch (pllsource)
  25414. {
  25415. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  25416. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  25417. 800aee4: 4b6f ldr r3, [pc, #444] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25418. 800aee6: 681b ldr r3, [r3, #0]
  25419. 800aee8: f003 0320 and.w r3, r3, #32
  25420. 800aeec: 2b00 cmp r3, #0
  25421. 800aeee: d02d beq.n 800af4c <HAL_RCC_GetSysClockFreq+0x17c>
  25422. {
  25423. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  25424. 800aef0: 4b6c ldr r3, [pc, #432] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25425. 800aef2: 681b ldr r3, [r3, #0]
  25426. 800aef4: 08db lsrs r3, r3, #3
  25427. 800aef6: f003 0303 and.w r3, r3, #3
  25428. 800aefa: 4a6b ldr r2, [pc, #428] @ (800b0a8 <HAL_RCC_GetSysClockFreq+0x2d8>)
  25429. 800aefc: fa22 f303 lsr.w r3, r2, r3
  25430. 800af00: 607b str r3, [r7, #4]
  25431. pllvco = ((float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  25432. 800af02: 687b ldr r3, [r7, #4]
  25433. 800af04: ee07 3a90 vmov s15, r3
  25434. 800af08: eef8 6a67 vcvt.f32.u32 s13, s15
  25435. 800af0c: 693b ldr r3, [r7, #16]
  25436. 800af0e: ee07 3a90 vmov s15, r3
  25437. 800af12: eef8 7a67 vcvt.f32.u32 s15, s15
  25438. 800af16: ee86 7aa7 vdiv.f32 s14, s13, s15
  25439. 800af1a: 4b62 ldr r3, [pc, #392] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25440. 800af1c: 6b1b ldr r3, [r3, #48] @ 0x30
  25441. 800af1e: f3c3 0308 ubfx r3, r3, #0, #9
  25442. 800af22: ee07 3a90 vmov s15, r3
  25443. 800af26: eef8 6a67 vcvt.f32.u32 s13, s15
  25444. 800af2a: ed97 6a02 vldr s12, [r7, #8]
  25445. 800af2e: eddf 5a61 vldr s11, [pc, #388] @ 800b0b4 <HAL_RCC_GetSysClockFreq+0x2e4>
  25446. 800af32: eec6 7a25 vdiv.f32 s15, s12, s11
  25447. 800af36: ee76 7aa7 vadd.f32 s15, s13, s15
  25448. 800af3a: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  25449. 800af3e: ee77 7aa6 vadd.f32 s15, s15, s13
  25450. 800af42: ee67 7a27 vmul.f32 s15, s14, s15
  25451. 800af46: edc7 7a07 vstr s15, [r7, #28]
  25452. }
  25453. else
  25454. {
  25455. pllvco = ((float_t)HSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  25456. }
  25457. break;
  25458. 800af4a: e087 b.n 800b05c <HAL_RCC_GetSysClockFreq+0x28c>
  25459. pllvco = ((float_t)HSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  25460. 800af4c: 693b ldr r3, [r7, #16]
  25461. 800af4e: ee07 3a90 vmov s15, r3
  25462. 800af52: eef8 7a67 vcvt.f32.u32 s15, s15
  25463. 800af56: eddf 6a58 vldr s13, [pc, #352] @ 800b0b8 <HAL_RCC_GetSysClockFreq+0x2e8>
  25464. 800af5a: ee86 7aa7 vdiv.f32 s14, s13, s15
  25465. 800af5e: 4b51 ldr r3, [pc, #324] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25466. 800af60: 6b1b ldr r3, [r3, #48] @ 0x30
  25467. 800af62: f3c3 0308 ubfx r3, r3, #0, #9
  25468. 800af66: ee07 3a90 vmov s15, r3
  25469. 800af6a: eef8 6a67 vcvt.f32.u32 s13, s15
  25470. 800af6e: ed97 6a02 vldr s12, [r7, #8]
  25471. 800af72: eddf 5a50 vldr s11, [pc, #320] @ 800b0b4 <HAL_RCC_GetSysClockFreq+0x2e4>
  25472. 800af76: eec6 7a25 vdiv.f32 s15, s12, s11
  25473. 800af7a: ee76 7aa7 vadd.f32 s15, s13, s15
  25474. 800af7e: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  25475. 800af82: ee77 7aa6 vadd.f32 s15, s15, s13
  25476. 800af86: ee67 7a27 vmul.f32 s15, s14, s15
  25477. 800af8a: edc7 7a07 vstr s15, [r7, #28]
  25478. break;
  25479. 800af8e: e065 b.n 800b05c <HAL_RCC_GetSysClockFreq+0x28c>
  25480. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  25481. pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  25482. 800af90: 693b ldr r3, [r7, #16]
  25483. 800af92: ee07 3a90 vmov s15, r3
  25484. 800af96: eef8 7a67 vcvt.f32.u32 s15, s15
  25485. 800af9a: eddf 6a48 vldr s13, [pc, #288] @ 800b0bc <HAL_RCC_GetSysClockFreq+0x2ec>
  25486. 800af9e: ee86 7aa7 vdiv.f32 s14, s13, s15
  25487. 800afa2: 4b40 ldr r3, [pc, #256] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25488. 800afa4: 6b1b ldr r3, [r3, #48] @ 0x30
  25489. 800afa6: f3c3 0308 ubfx r3, r3, #0, #9
  25490. 800afaa: ee07 3a90 vmov s15, r3
  25491. 800afae: eef8 6a67 vcvt.f32.u32 s13, s15
  25492. 800afb2: ed97 6a02 vldr s12, [r7, #8]
  25493. 800afb6: eddf 5a3f vldr s11, [pc, #252] @ 800b0b4 <HAL_RCC_GetSysClockFreq+0x2e4>
  25494. 800afba: eec6 7a25 vdiv.f32 s15, s12, s11
  25495. 800afbe: ee76 7aa7 vadd.f32 s15, s13, s15
  25496. 800afc2: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  25497. 800afc6: ee77 7aa6 vadd.f32 s15, s15, s13
  25498. 800afca: ee67 7a27 vmul.f32 s15, s14, s15
  25499. 800afce: edc7 7a07 vstr s15, [r7, #28]
  25500. break;
  25501. 800afd2: e043 b.n 800b05c <HAL_RCC_GetSysClockFreq+0x28c>
  25502. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  25503. pllvco = ((float_t)HSE_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  25504. 800afd4: 693b ldr r3, [r7, #16]
  25505. 800afd6: ee07 3a90 vmov s15, r3
  25506. 800afda: eef8 7a67 vcvt.f32.u32 s15, s15
  25507. 800afde: eddf 6a38 vldr s13, [pc, #224] @ 800b0c0 <HAL_RCC_GetSysClockFreq+0x2f0>
  25508. 800afe2: ee86 7aa7 vdiv.f32 s14, s13, s15
  25509. 800afe6: 4b2f ldr r3, [pc, #188] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25510. 800afe8: 6b1b ldr r3, [r3, #48] @ 0x30
  25511. 800afea: f3c3 0308 ubfx r3, r3, #0, #9
  25512. 800afee: ee07 3a90 vmov s15, r3
  25513. 800aff2: eef8 6a67 vcvt.f32.u32 s13, s15
  25514. 800aff6: ed97 6a02 vldr s12, [r7, #8]
  25515. 800affa: eddf 5a2e vldr s11, [pc, #184] @ 800b0b4 <HAL_RCC_GetSysClockFreq+0x2e4>
  25516. 800affe: eec6 7a25 vdiv.f32 s15, s12, s11
  25517. 800b002: ee76 7aa7 vadd.f32 s15, s13, s15
  25518. 800b006: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  25519. 800b00a: ee77 7aa6 vadd.f32 s15, s15, s13
  25520. 800b00e: ee67 7a27 vmul.f32 s15, s14, s15
  25521. 800b012: edc7 7a07 vstr s15, [r7, #28]
  25522. break;
  25523. 800b016: e021 b.n 800b05c <HAL_RCC_GetSysClockFreq+0x28c>
  25524. default:
  25525. pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  25526. 800b018: 693b ldr r3, [r7, #16]
  25527. 800b01a: ee07 3a90 vmov s15, r3
  25528. 800b01e: eef8 7a67 vcvt.f32.u32 s15, s15
  25529. 800b022: eddf 6a26 vldr s13, [pc, #152] @ 800b0bc <HAL_RCC_GetSysClockFreq+0x2ec>
  25530. 800b026: ee86 7aa7 vdiv.f32 s14, s13, s15
  25531. 800b02a: 4b1e ldr r3, [pc, #120] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25532. 800b02c: 6b1b ldr r3, [r3, #48] @ 0x30
  25533. 800b02e: f3c3 0308 ubfx r3, r3, #0, #9
  25534. 800b032: ee07 3a90 vmov s15, r3
  25535. 800b036: eef8 6a67 vcvt.f32.u32 s13, s15
  25536. 800b03a: ed97 6a02 vldr s12, [r7, #8]
  25537. 800b03e: eddf 5a1d vldr s11, [pc, #116] @ 800b0b4 <HAL_RCC_GetSysClockFreq+0x2e4>
  25538. 800b042: eec6 7a25 vdiv.f32 s15, s12, s11
  25539. 800b046: ee76 7aa7 vadd.f32 s15, s13, s15
  25540. 800b04a: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  25541. 800b04e: ee77 7aa6 vadd.f32 s15, s15, s13
  25542. 800b052: ee67 7a27 vmul.f32 s15, s14, s15
  25543. 800b056: edc7 7a07 vstr s15, [r7, #28]
  25544. break;
  25545. 800b05a: bf00 nop
  25546. }
  25547. pllp = (((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >> 9) + 1U) ;
  25548. 800b05c: 4b11 ldr r3, [pc, #68] @ (800b0a4 <HAL_RCC_GetSysClockFreq+0x2d4>)
  25549. 800b05e: 6b1b ldr r3, [r3, #48] @ 0x30
  25550. 800b060: 0a5b lsrs r3, r3, #9
  25551. 800b062: f003 037f and.w r3, r3, #127 @ 0x7f
  25552. 800b066: 3301 adds r3, #1
  25553. 800b068: 603b str r3, [r7, #0]
  25554. sysclockfreq = (uint32_t)(float_t)(pllvco / (float_t)pllp);
  25555. 800b06a: 683b ldr r3, [r7, #0]
  25556. 800b06c: ee07 3a90 vmov s15, r3
  25557. 800b070: eeb8 7a67 vcvt.f32.u32 s14, s15
  25558. 800b074: edd7 6a07 vldr s13, [r7, #28]
  25559. 800b078: eec6 7a87 vdiv.f32 s15, s13, s14
  25560. 800b07c: eefc 7ae7 vcvt.u32.f32 s15, s15
  25561. 800b080: ee17 3a90 vmov r3, s15
  25562. 800b084: 61bb str r3, [r7, #24]
  25563. }
  25564. else
  25565. {
  25566. sysclockfreq = 0U;
  25567. }
  25568. break;
  25569. 800b086: e005 b.n 800b094 <HAL_RCC_GetSysClockFreq+0x2c4>
  25570. sysclockfreq = 0U;
  25571. 800b088: 2300 movs r3, #0
  25572. 800b08a: 61bb str r3, [r7, #24]
  25573. break;
  25574. 800b08c: e002 b.n 800b094 <HAL_RCC_GetSysClockFreq+0x2c4>
  25575. default:
  25576. sysclockfreq = CSI_VALUE;
  25577. 800b08e: 4b07 ldr r3, [pc, #28] @ (800b0ac <HAL_RCC_GetSysClockFreq+0x2dc>)
  25578. 800b090: 61bb str r3, [r7, #24]
  25579. break;
  25580. 800b092: bf00 nop
  25581. }
  25582. return sysclockfreq;
  25583. 800b094: 69bb ldr r3, [r7, #24]
  25584. }
  25585. 800b096: 4618 mov r0, r3
  25586. 800b098: 3724 adds r7, #36 @ 0x24
  25587. 800b09a: 46bd mov sp, r7
  25588. 800b09c: f85d 7b04 ldr.w r7, [sp], #4
  25589. 800b0a0: 4770 bx lr
  25590. 800b0a2: bf00 nop
  25591. 800b0a4: 58024400 .word 0x58024400
  25592. 800b0a8: 03d09000 .word 0x03d09000
  25593. 800b0ac: 003d0900 .word 0x003d0900
  25594. 800b0b0: 017d7840 .word 0x017d7840
  25595. 800b0b4: 46000000 .word 0x46000000
  25596. 800b0b8: 4c742400 .word 0x4c742400
  25597. 800b0bc: 4a742400 .word 0x4a742400
  25598. 800b0c0: 4bbebc20 .word 0x4bbebc20
  25599. 0800b0c4 <HAL_RCC_GetHCLKFreq>:
  25600. * @note The SystemD2Clock CMSIS variable is used to store System domain2 Clock Frequency
  25601. * and updated within this function
  25602. * @retval HCLK frequency
  25603. */
  25604. uint32_t HAL_RCC_GetHCLKFreq(void)
  25605. {
  25606. 800b0c4: b580 push {r7, lr}
  25607. 800b0c6: b082 sub sp, #8
  25608. 800b0c8: af00 add r7, sp, #0
  25609. uint32_t common_system_clock;
  25610. #if defined(RCC_D1CFGR_D1CPRE)
  25611. common_system_clock = HAL_RCC_GetSysClockFreq() >> (D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE) >> RCC_D1CFGR_D1CPRE_Pos] & 0x1FU);
  25612. 800b0ca: f7ff fe81 bl 800add0 <HAL_RCC_GetSysClockFreq>
  25613. 800b0ce: 4602 mov r2, r0
  25614. 800b0d0: 4b10 ldr r3, [pc, #64] @ (800b114 <HAL_RCC_GetHCLKFreq+0x50>)
  25615. 800b0d2: 699b ldr r3, [r3, #24]
  25616. 800b0d4: 0a1b lsrs r3, r3, #8
  25617. 800b0d6: f003 030f and.w r3, r3, #15
  25618. 800b0da: 490f ldr r1, [pc, #60] @ (800b118 <HAL_RCC_GetHCLKFreq+0x54>)
  25619. 800b0dc: 5ccb ldrb r3, [r1, r3]
  25620. 800b0de: f003 031f and.w r3, r3, #31
  25621. 800b0e2: fa22 f303 lsr.w r3, r2, r3
  25622. 800b0e6: 607b str r3, [r7, #4]
  25623. #else
  25624. common_system_clock = HAL_RCC_GetSysClockFreq() >> (D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE) >> RCC_CDCFGR1_CDCPRE_Pos] & 0x1FU);
  25625. #endif
  25626. #if defined(RCC_D1CFGR_HPRE)
  25627. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE) >> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  25628. 800b0e8: 4b0a ldr r3, [pc, #40] @ (800b114 <HAL_RCC_GetHCLKFreq+0x50>)
  25629. 800b0ea: 699b ldr r3, [r3, #24]
  25630. 800b0ec: f003 030f and.w r3, r3, #15
  25631. 800b0f0: 4a09 ldr r2, [pc, #36] @ (800b118 <HAL_RCC_GetHCLKFreq+0x54>)
  25632. 800b0f2: 5cd3 ldrb r3, [r2, r3]
  25633. 800b0f4: f003 031f and.w r3, r3, #31
  25634. 800b0f8: 687a ldr r2, [r7, #4]
  25635. 800b0fa: fa22 f303 lsr.w r3, r2, r3
  25636. 800b0fe: 4a07 ldr r2, [pc, #28] @ (800b11c <HAL_RCC_GetHCLKFreq+0x58>)
  25637. 800b100: 6013 str r3, [r2, #0]
  25638. #endif
  25639. #if defined(DUAL_CORE) && defined(CORE_CM4)
  25640. SystemCoreClock = SystemD2Clock;
  25641. #else
  25642. SystemCoreClock = common_system_clock;
  25643. 800b102: 4a07 ldr r2, [pc, #28] @ (800b120 <HAL_RCC_GetHCLKFreq+0x5c>)
  25644. 800b104: 687b ldr r3, [r7, #4]
  25645. 800b106: 6013 str r3, [r2, #0]
  25646. #endif /* DUAL_CORE && CORE_CM4 */
  25647. return SystemD2Clock;
  25648. 800b108: 4b04 ldr r3, [pc, #16] @ (800b11c <HAL_RCC_GetHCLKFreq+0x58>)
  25649. 800b10a: 681b ldr r3, [r3, #0]
  25650. }
  25651. 800b10c: 4618 mov r0, r3
  25652. 800b10e: 3708 adds r7, #8
  25653. 800b110: 46bd mov sp, r7
  25654. 800b112: bd80 pop {r7, pc}
  25655. 800b114: 58024400 .word 0x58024400
  25656. 800b118: 080175c8 .word 0x080175c8
  25657. 800b11c: 24000038 .word 0x24000038
  25658. 800b120: 24000034 .word 0x24000034
  25659. 0800b124 <HAL_RCC_GetPCLK1Freq>:
  25660. * @note Each time PCLK1 changes, this function must be called to update the
  25661. * right PCLK1 value. Otherwise, any configuration based on this function will be incorrect.
  25662. * @retval PCLK1 frequency
  25663. */
  25664. uint32_t HAL_RCC_GetPCLK1Freq(void)
  25665. {
  25666. 800b124: b580 push {r7, lr}
  25667. 800b126: af00 add r7, sp, #0
  25668. #if defined (RCC_D2CFGR_D2PPRE1)
  25669. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  25670. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->D2CFGR & RCC_D2CFGR_D2PPRE1) >> RCC_D2CFGR_D2PPRE1_Pos]) & 0x1FU));
  25671. 800b128: f7ff ffcc bl 800b0c4 <HAL_RCC_GetHCLKFreq>
  25672. 800b12c: 4602 mov r2, r0
  25673. 800b12e: 4b06 ldr r3, [pc, #24] @ (800b148 <HAL_RCC_GetPCLK1Freq+0x24>)
  25674. 800b130: 69db ldr r3, [r3, #28]
  25675. 800b132: 091b lsrs r3, r3, #4
  25676. 800b134: f003 0307 and.w r3, r3, #7
  25677. 800b138: 4904 ldr r1, [pc, #16] @ (800b14c <HAL_RCC_GetPCLK1Freq+0x28>)
  25678. 800b13a: 5ccb ldrb r3, [r1, r3]
  25679. 800b13c: f003 031f and.w r3, r3, #31
  25680. 800b140: fa22 f303 lsr.w r3, r2, r3
  25681. #else
  25682. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  25683. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->CDCFGR2 & RCC_CDCFGR2_CDPPRE1) >> RCC_CDCFGR2_CDPPRE1_Pos]) & 0x1FU));
  25684. #endif
  25685. }
  25686. 800b144: 4618 mov r0, r3
  25687. 800b146: bd80 pop {r7, pc}
  25688. 800b148: 58024400 .word 0x58024400
  25689. 800b14c: 080175c8 .word 0x080175c8
  25690. 0800b150 <HAL_RCC_GetPCLK2Freq>:
  25691. * @note Each time PCLK2 changes, this function must be called to update the
  25692. * right PCLK2 value. Otherwise, any configuration based on this function will be incorrect.
  25693. * @retval PCLK1 frequency
  25694. */
  25695. uint32_t HAL_RCC_GetPCLK2Freq(void)
  25696. {
  25697. 800b150: b580 push {r7, lr}
  25698. 800b152: af00 add r7, sp, #0
  25699. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  25700. #if defined(RCC_D2CFGR_D2PPRE2)
  25701. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->D2CFGR & RCC_D2CFGR_D2PPRE2) >> RCC_D2CFGR_D2PPRE2_Pos]) & 0x1FU));
  25702. 800b154: f7ff ffb6 bl 800b0c4 <HAL_RCC_GetHCLKFreq>
  25703. 800b158: 4602 mov r2, r0
  25704. 800b15a: 4b06 ldr r3, [pc, #24] @ (800b174 <HAL_RCC_GetPCLK2Freq+0x24>)
  25705. 800b15c: 69db ldr r3, [r3, #28]
  25706. 800b15e: 0a1b lsrs r3, r3, #8
  25707. 800b160: f003 0307 and.w r3, r3, #7
  25708. 800b164: 4904 ldr r1, [pc, #16] @ (800b178 <HAL_RCC_GetPCLK2Freq+0x28>)
  25709. 800b166: 5ccb ldrb r3, [r1, r3]
  25710. 800b168: f003 031f and.w r3, r3, #31
  25711. 800b16c: fa22 f303 lsr.w r3, r2, r3
  25712. #else
  25713. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->CDCFGR2 & RCC_CDCFGR2_CDPPRE2) >> RCC_CDCFGR2_CDPPRE2_Pos]) & 0x1FU));
  25714. #endif
  25715. }
  25716. 800b170: 4618 mov r0, r3
  25717. 800b172: bd80 pop {r7, pc}
  25718. 800b174: 58024400 .word 0x58024400
  25719. 800b178: 080175c8 .word 0x080175c8
  25720. 0800b17c <HAL_RCC_GetClockConfig>:
  25721. * will be configured.
  25722. * @param pFLatency: Pointer on the Flash Latency.
  25723. * @retval None
  25724. */
  25725. void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency)
  25726. {
  25727. 800b17c: b480 push {r7}
  25728. 800b17e: b083 sub sp, #12
  25729. 800b180: af00 add r7, sp, #0
  25730. 800b182: 6078 str r0, [r7, #4]
  25731. 800b184: 6039 str r1, [r7, #0]
  25732. /* Set all possible values for the Clock type parameter --------------------*/
  25733. RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 |
  25734. 800b186: 687b ldr r3, [r7, #4]
  25735. 800b188: 223f movs r2, #63 @ 0x3f
  25736. 800b18a: 601a str r2, [r3, #0]
  25737. RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_D3PCLK1 ;
  25738. /* Get the SYSCLK configuration --------------------------------------------*/
  25739. RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW);
  25740. 800b18c: 4b1a ldr r3, [pc, #104] @ (800b1f8 <HAL_RCC_GetClockConfig+0x7c>)
  25741. 800b18e: 691b ldr r3, [r3, #16]
  25742. 800b190: f003 0207 and.w r2, r3, #7
  25743. 800b194: 687b ldr r3, [r7, #4]
  25744. 800b196: 605a str r2, [r3, #4]
  25745. #if defined(RCC_D1CFGR_D1CPRE)
  25746. /* Get the SYSCLK configuration ----------------------------------------------*/
  25747. RCC_ClkInitStruct->SYSCLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_D1CPRE);
  25748. 800b198: 4b17 ldr r3, [pc, #92] @ (800b1f8 <HAL_RCC_GetClockConfig+0x7c>)
  25749. 800b19a: 699b ldr r3, [r3, #24]
  25750. 800b19c: f403 6270 and.w r2, r3, #3840 @ 0xf00
  25751. 800b1a0: 687b ldr r3, [r7, #4]
  25752. 800b1a2: 609a str r2, [r3, #8]
  25753. /* Get the D1HCLK configuration ----------------------------------------------*/
  25754. RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_HPRE);
  25755. 800b1a4: 4b14 ldr r3, [pc, #80] @ (800b1f8 <HAL_RCC_GetClockConfig+0x7c>)
  25756. 800b1a6: 699b ldr r3, [r3, #24]
  25757. 800b1a8: f003 020f and.w r2, r3, #15
  25758. 800b1ac: 687b ldr r3, [r7, #4]
  25759. 800b1ae: 60da str r2, [r3, #12]
  25760. /* Get the APB3 configuration ----------------------------------------------*/
  25761. RCC_ClkInitStruct->APB3CLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_D1PPRE);
  25762. 800b1b0: 4b11 ldr r3, [pc, #68] @ (800b1f8 <HAL_RCC_GetClockConfig+0x7c>)
  25763. 800b1b2: 699b ldr r3, [r3, #24]
  25764. 800b1b4: f003 0270 and.w r2, r3, #112 @ 0x70
  25765. 800b1b8: 687b ldr r3, [r7, #4]
  25766. 800b1ba: 611a str r2, [r3, #16]
  25767. /* Get the APB1 configuration ----------------------------------------------*/
  25768. RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->D2CFGR & RCC_D2CFGR_D2PPRE1);
  25769. 800b1bc: 4b0e ldr r3, [pc, #56] @ (800b1f8 <HAL_RCC_GetClockConfig+0x7c>)
  25770. 800b1be: 69db ldr r3, [r3, #28]
  25771. 800b1c0: f003 0270 and.w r2, r3, #112 @ 0x70
  25772. 800b1c4: 687b ldr r3, [r7, #4]
  25773. 800b1c6: 615a str r2, [r3, #20]
  25774. /* Get the APB2 configuration ----------------------------------------------*/
  25775. RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)(RCC->D2CFGR & RCC_D2CFGR_D2PPRE2);
  25776. 800b1c8: 4b0b ldr r3, [pc, #44] @ (800b1f8 <HAL_RCC_GetClockConfig+0x7c>)
  25777. 800b1ca: 69db ldr r3, [r3, #28]
  25778. 800b1cc: f403 62e0 and.w r2, r3, #1792 @ 0x700
  25779. 800b1d0: 687b ldr r3, [r7, #4]
  25780. 800b1d2: 619a str r2, [r3, #24]
  25781. /* Get the APB4 configuration ----------------------------------------------*/
  25782. RCC_ClkInitStruct->APB4CLKDivider = (uint32_t)(RCC->D3CFGR & RCC_D3CFGR_D3PPRE);
  25783. 800b1d4: 4b08 ldr r3, [pc, #32] @ (800b1f8 <HAL_RCC_GetClockConfig+0x7c>)
  25784. 800b1d6: 6a1b ldr r3, [r3, #32]
  25785. 800b1d8: f003 0270 and.w r2, r3, #112 @ 0x70
  25786. 800b1dc: 687b ldr r3, [r7, #4]
  25787. 800b1de: 61da str r2, [r3, #28]
  25788. /* Get the APB4 configuration ----------------------------------------------*/
  25789. RCC_ClkInitStruct->APB4CLKDivider = (uint32_t)(RCC->SRDCFGR & RCC_SRDCFGR_SRDPPRE);
  25790. #endif
  25791. /* Get the Flash Wait State (Latency) configuration ------------------------*/
  25792. *pFLatency = (uint32_t)(FLASH->ACR & FLASH_ACR_LATENCY);
  25793. 800b1e0: 4b06 ldr r3, [pc, #24] @ (800b1fc <HAL_RCC_GetClockConfig+0x80>)
  25794. 800b1e2: 681b ldr r3, [r3, #0]
  25795. 800b1e4: f003 020f and.w r2, r3, #15
  25796. 800b1e8: 683b ldr r3, [r7, #0]
  25797. 800b1ea: 601a str r2, [r3, #0]
  25798. }
  25799. 800b1ec: bf00 nop
  25800. 800b1ee: 370c adds r7, #12
  25801. 800b1f0: 46bd mov sp, r7
  25802. 800b1f2: f85d 7b04 ldr.w r7, [sp], #4
  25803. 800b1f6: 4770 bx lr
  25804. 800b1f8: 58024400 .word 0x58024400
  25805. 800b1fc: 52002000 .word 0x52002000
  25806. 0800b200 <HAL_RCCEx_PeriphCLKConfig>:
  25807. * (*) : Available on some STM32H7 lines only.
  25808. *
  25809. * @retval HAL status
  25810. */
  25811. HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
  25812. {
  25813. 800b200: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr}
  25814. 800b204: b0c8 sub sp, #288 @ 0x120
  25815. 800b206: af00 add r7, sp, #0
  25816. 800b208: f8c7 010c str.w r0, [r7, #268] @ 0x10c
  25817. uint32_t tmpreg;
  25818. uint32_t tickstart;
  25819. HAL_StatusTypeDef ret = HAL_OK; /* Intermediate status */
  25820. 800b20c: 2300 movs r3, #0
  25821. 800b20e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  25822. HAL_StatusTypeDef status = HAL_OK; /* Final status */
  25823. 800b212: 2300 movs r3, #0
  25824. 800b214: f887 311e strb.w r3, [r7, #286] @ 0x11e
  25825. /*---------------------------- SPDIFRX configuration -------------------------------*/
  25826. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPDIFRX) == RCC_PERIPHCLK_SPDIFRX)
  25827. 800b218: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  25828. 800b21c: e9d3 2300 ldrd r2, r3, [r3]
  25829. 800b220: f002 6400 and.w r4, r2, #134217728 @ 0x8000000
  25830. 800b224: 2500 movs r5, #0
  25831. 800b226: ea54 0305 orrs.w r3, r4, r5
  25832. 800b22a: d049 beq.n 800b2c0 <HAL_RCCEx_PeriphCLKConfig+0xc0>
  25833. {
  25834. switch (PeriphClkInit->SpdifrxClockSelection)
  25835. 800b22c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  25836. 800b230: 6e9b ldr r3, [r3, #104] @ 0x68
  25837. 800b232: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  25838. 800b236: d02f beq.n 800b298 <HAL_RCCEx_PeriphCLKConfig+0x98>
  25839. 800b238: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  25840. 800b23c: d828 bhi.n 800b290 <HAL_RCCEx_PeriphCLKConfig+0x90>
  25841. 800b23e: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  25842. 800b242: d01a beq.n 800b27a <HAL_RCCEx_PeriphCLKConfig+0x7a>
  25843. 800b244: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  25844. 800b248: d822 bhi.n 800b290 <HAL_RCCEx_PeriphCLKConfig+0x90>
  25845. 800b24a: 2b00 cmp r3, #0
  25846. 800b24c: d003 beq.n 800b256 <HAL_RCCEx_PeriphCLKConfig+0x56>
  25847. 800b24e: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  25848. 800b252: d007 beq.n 800b264 <HAL_RCCEx_PeriphCLKConfig+0x64>
  25849. 800b254: e01c b.n 800b290 <HAL_RCCEx_PeriphCLKConfig+0x90>
  25850. {
  25851. case RCC_SPDIFRXCLKSOURCE_PLL: /* PLL is used as clock source for SPDIFRX*/
  25852. /* Enable PLL1Q Clock output generated form System PLL . */
  25853. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  25854. 800b256: 4bb8 ldr r3, [pc, #736] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  25855. 800b258: 6adb ldr r3, [r3, #44] @ 0x2c
  25856. 800b25a: 4ab7 ldr r2, [pc, #732] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  25857. 800b25c: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  25858. 800b260: 62d3 str r3, [r2, #44] @ 0x2c
  25859. /* SPDIFRX clock source configuration done later after clock selection check */
  25860. break;
  25861. 800b262: e01a b.n 800b29a <HAL_RCCEx_PeriphCLKConfig+0x9a>
  25862. case RCC_SPDIFRXCLKSOURCE_PLL2: /* PLL2 is used as clock source for SPDIFRX*/
  25863. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  25864. 800b264: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  25865. 800b268: 3308 adds r3, #8
  25866. 800b26a: 2102 movs r1, #2
  25867. 800b26c: 4618 mov r0, r3
  25868. 800b26e: f002 fb45 bl 800d8fc <RCCEx_PLL2_Config>
  25869. 800b272: 4603 mov r3, r0
  25870. 800b274: f887 311f strb.w r3, [r7, #287] @ 0x11f
  25871. /* SPDIFRX clock source configuration done later after clock selection check */
  25872. break;
  25873. 800b278: e00f b.n 800b29a <HAL_RCCEx_PeriphCLKConfig+0x9a>
  25874. case RCC_SPDIFRXCLKSOURCE_PLL3: /* PLL3 is used as clock source for SPDIFRX*/
  25875. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  25876. 800b27a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  25877. 800b27e: 3328 adds r3, #40 @ 0x28
  25878. 800b280: 2102 movs r1, #2
  25879. 800b282: 4618 mov r0, r3
  25880. 800b284: f002 fbec bl 800da60 <RCCEx_PLL3_Config>
  25881. 800b288: 4603 mov r3, r0
  25882. 800b28a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  25883. /* SPDIFRX clock source configuration done later after clock selection check */
  25884. break;
  25885. 800b28e: e004 b.n 800b29a <HAL_RCCEx_PeriphCLKConfig+0x9a>
  25886. /* Internal OSC clock is used as source of SPDIFRX clock*/
  25887. /* SPDIFRX clock source configuration done later after clock selection check */
  25888. break;
  25889. default:
  25890. ret = HAL_ERROR;
  25891. 800b290: 2301 movs r3, #1
  25892. 800b292: f887 311f strb.w r3, [r7, #287] @ 0x11f
  25893. break;
  25894. 800b296: e000 b.n 800b29a <HAL_RCCEx_PeriphCLKConfig+0x9a>
  25895. break;
  25896. 800b298: bf00 nop
  25897. }
  25898. if (ret == HAL_OK)
  25899. 800b29a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  25900. 800b29e: 2b00 cmp r3, #0
  25901. 800b2a0: d10a bne.n 800b2b8 <HAL_RCCEx_PeriphCLKConfig+0xb8>
  25902. {
  25903. /* Set the source of SPDIFRX clock*/
  25904. __HAL_RCC_SPDIFRX_CONFIG(PeriphClkInit->SpdifrxClockSelection);
  25905. 800b2a2: 4ba5 ldr r3, [pc, #660] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  25906. 800b2a4: 6d1b ldr r3, [r3, #80] @ 0x50
  25907. 800b2a6: f423 1140 bic.w r1, r3, #3145728 @ 0x300000
  25908. 800b2aa: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  25909. 800b2ae: 6e9b ldr r3, [r3, #104] @ 0x68
  25910. 800b2b0: 4aa1 ldr r2, [pc, #644] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  25911. 800b2b2: 430b orrs r3, r1
  25912. 800b2b4: 6513 str r3, [r2, #80] @ 0x50
  25913. 800b2b6: e003 b.n 800b2c0 <HAL_RCCEx_PeriphCLKConfig+0xc0>
  25914. }
  25915. else
  25916. {
  25917. /* set overall return value */
  25918. status = ret;
  25919. 800b2b8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  25920. 800b2bc: f887 311e strb.w r3, [r7, #286] @ 0x11e
  25921. }
  25922. }
  25923. /*---------------------------- SAI1 configuration -------------------------------*/
  25924. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1)
  25925. 800b2c0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  25926. 800b2c4: e9d3 2300 ldrd r2, r3, [r3]
  25927. 800b2c8: f402 7880 and.w r8, r2, #256 @ 0x100
  25928. 800b2cc: f04f 0900 mov.w r9, #0
  25929. 800b2d0: ea58 0309 orrs.w r3, r8, r9
  25930. 800b2d4: d047 beq.n 800b366 <HAL_RCCEx_PeriphCLKConfig+0x166>
  25931. {
  25932. switch (PeriphClkInit->Sai1ClockSelection)
  25933. 800b2d6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  25934. 800b2da: 6d9b ldr r3, [r3, #88] @ 0x58
  25935. 800b2dc: 2b04 cmp r3, #4
  25936. 800b2de: d82a bhi.n 800b336 <HAL_RCCEx_PeriphCLKConfig+0x136>
  25937. 800b2e0: a201 add r2, pc, #4 @ (adr r2, 800b2e8 <HAL_RCCEx_PeriphCLKConfig+0xe8>)
  25938. 800b2e2: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  25939. 800b2e6: bf00 nop
  25940. 800b2e8: 0800b2fd .word 0x0800b2fd
  25941. 800b2ec: 0800b30b .word 0x0800b30b
  25942. 800b2f0: 0800b321 .word 0x0800b321
  25943. 800b2f4: 0800b33f .word 0x0800b33f
  25944. 800b2f8: 0800b33f .word 0x0800b33f
  25945. {
  25946. case RCC_SAI1CLKSOURCE_PLL: /* PLL is used as clock source for SAI1*/
  25947. /* Enable SAI Clock output generated form System PLL . */
  25948. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  25949. 800b2fc: 4b8e ldr r3, [pc, #568] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  25950. 800b2fe: 6adb ldr r3, [r3, #44] @ 0x2c
  25951. 800b300: 4a8d ldr r2, [pc, #564] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  25952. 800b302: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  25953. 800b306: 62d3 str r3, [r2, #44] @ 0x2c
  25954. /* SAI1 clock source configuration done later after clock selection check */
  25955. break;
  25956. 800b308: e01a b.n 800b340 <HAL_RCCEx_PeriphCLKConfig+0x140>
  25957. case RCC_SAI1CLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI1*/
  25958. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  25959. 800b30a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  25960. 800b30e: 3308 adds r3, #8
  25961. 800b310: 2100 movs r1, #0
  25962. 800b312: 4618 mov r0, r3
  25963. 800b314: f002 faf2 bl 800d8fc <RCCEx_PLL2_Config>
  25964. 800b318: 4603 mov r3, r0
  25965. 800b31a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  25966. /* SAI1 clock source configuration done later after clock selection check */
  25967. break;
  25968. 800b31e: e00f b.n 800b340 <HAL_RCCEx_PeriphCLKConfig+0x140>
  25969. case RCC_SAI1CLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI1*/
  25970. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  25971. 800b320: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  25972. 800b324: 3328 adds r3, #40 @ 0x28
  25973. 800b326: 2100 movs r1, #0
  25974. 800b328: 4618 mov r0, r3
  25975. 800b32a: f002 fb99 bl 800da60 <RCCEx_PLL3_Config>
  25976. 800b32e: 4603 mov r3, r0
  25977. 800b330: f887 311f strb.w r3, [r7, #287] @ 0x11f
  25978. /* SAI1 clock source configuration done later after clock selection check */
  25979. break;
  25980. 800b334: e004 b.n 800b340 <HAL_RCCEx_PeriphCLKConfig+0x140>
  25981. /* HSI, HSE, or CSI oscillator is used as source of SAI1 clock */
  25982. /* SAI1 clock source configuration done later after clock selection check */
  25983. break;
  25984. default:
  25985. ret = HAL_ERROR;
  25986. 800b336: 2301 movs r3, #1
  25987. 800b338: f887 311f strb.w r3, [r7, #287] @ 0x11f
  25988. break;
  25989. 800b33c: e000 b.n 800b340 <HAL_RCCEx_PeriphCLKConfig+0x140>
  25990. break;
  25991. 800b33e: bf00 nop
  25992. }
  25993. if (ret == HAL_OK)
  25994. 800b340: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  25995. 800b344: 2b00 cmp r3, #0
  25996. 800b346: d10a bne.n 800b35e <HAL_RCCEx_PeriphCLKConfig+0x15e>
  25997. {
  25998. /* Set the source of SAI1 clock*/
  25999. __HAL_RCC_SAI1_CONFIG(PeriphClkInit->Sai1ClockSelection);
  26000. 800b348: 4b7b ldr r3, [pc, #492] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  26001. 800b34a: 6d1b ldr r3, [r3, #80] @ 0x50
  26002. 800b34c: f023 0107 bic.w r1, r3, #7
  26003. 800b350: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26004. 800b354: 6d9b ldr r3, [r3, #88] @ 0x58
  26005. 800b356: 4a78 ldr r2, [pc, #480] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  26006. 800b358: 430b orrs r3, r1
  26007. 800b35a: 6513 str r3, [r2, #80] @ 0x50
  26008. 800b35c: e003 b.n 800b366 <HAL_RCCEx_PeriphCLKConfig+0x166>
  26009. }
  26010. else
  26011. {
  26012. /* set overall return value */
  26013. status = ret;
  26014. 800b35e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26015. 800b362: f887 311e strb.w r3, [r7, #286] @ 0x11e
  26016. }
  26017. }
  26018. #if defined(SAI3)
  26019. /*---------------------------- SAI2/3 configuration -------------------------------*/
  26020. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI23) == RCC_PERIPHCLK_SAI23)
  26021. 800b366: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26022. 800b36a: e9d3 2300 ldrd r2, r3, [r3]
  26023. 800b36e: f402 7a00 and.w sl, r2, #512 @ 0x200
  26024. 800b372: f04f 0b00 mov.w fp, #0
  26025. 800b376: ea5a 030b orrs.w r3, sl, fp
  26026. 800b37a: d04c beq.n 800b416 <HAL_RCCEx_PeriphCLKConfig+0x216>
  26027. {
  26028. switch (PeriphClkInit->Sai23ClockSelection)
  26029. 800b37c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26030. 800b380: 6ddb ldr r3, [r3, #92] @ 0x5c
  26031. 800b382: f5b3 7f80 cmp.w r3, #256 @ 0x100
  26032. 800b386: d030 beq.n 800b3ea <HAL_RCCEx_PeriphCLKConfig+0x1ea>
  26033. 800b388: f5b3 7f80 cmp.w r3, #256 @ 0x100
  26034. 800b38c: d829 bhi.n 800b3e2 <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  26035. 800b38e: 2bc0 cmp r3, #192 @ 0xc0
  26036. 800b390: d02d beq.n 800b3ee <HAL_RCCEx_PeriphCLKConfig+0x1ee>
  26037. 800b392: 2bc0 cmp r3, #192 @ 0xc0
  26038. 800b394: d825 bhi.n 800b3e2 <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  26039. 800b396: 2b80 cmp r3, #128 @ 0x80
  26040. 800b398: d018 beq.n 800b3cc <HAL_RCCEx_PeriphCLKConfig+0x1cc>
  26041. 800b39a: 2b80 cmp r3, #128 @ 0x80
  26042. 800b39c: d821 bhi.n 800b3e2 <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  26043. 800b39e: 2b00 cmp r3, #0
  26044. 800b3a0: d002 beq.n 800b3a8 <HAL_RCCEx_PeriphCLKConfig+0x1a8>
  26045. 800b3a2: 2b40 cmp r3, #64 @ 0x40
  26046. 800b3a4: d007 beq.n 800b3b6 <HAL_RCCEx_PeriphCLKConfig+0x1b6>
  26047. 800b3a6: e01c b.n 800b3e2 <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  26048. {
  26049. case RCC_SAI23CLKSOURCE_PLL: /* PLL is used as clock source for SAI2/3 */
  26050. /* Enable SAI Clock output generated form System PLL . */
  26051. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  26052. 800b3a8: 4b63 ldr r3, [pc, #396] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  26053. 800b3aa: 6adb ldr r3, [r3, #44] @ 0x2c
  26054. 800b3ac: 4a62 ldr r2, [pc, #392] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  26055. 800b3ae: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  26056. 800b3b2: 62d3 str r3, [r2, #44] @ 0x2c
  26057. /* SAI2/3 clock source configuration done later after clock selection check */
  26058. break;
  26059. 800b3b4: e01c b.n 800b3f0 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  26060. case RCC_SAI23CLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2/3 */
  26061. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  26062. 800b3b6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26063. 800b3ba: 3308 adds r3, #8
  26064. 800b3bc: 2100 movs r1, #0
  26065. 800b3be: 4618 mov r0, r3
  26066. 800b3c0: f002 fa9c bl 800d8fc <RCCEx_PLL2_Config>
  26067. 800b3c4: 4603 mov r3, r0
  26068. 800b3c6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26069. /* SAI2/3 clock source configuration done later after clock selection check */
  26070. break;
  26071. 800b3ca: e011 b.n 800b3f0 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  26072. case RCC_SAI23CLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2/3 */
  26073. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  26074. 800b3cc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26075. 800b3d0: 3328 adds r3, #40 @ 0x28
  26076. 800b3d2: 2100 movs r1, #0
  26077. 800b3d4: 4618 mov r0, r3
  26078. 800b3d6: f002 fb43 bl 800da60 <RCCEx_PLL3_Config>
  26079. 800b3da: 4603 mov r3, r0
  26080. 800b3dc: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26081. /* SAI2/3 clock source configuration done later after clock selection check */
  26082. break;
  26083. 800b3e0: e006 b.n 800b3f0 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  26084. /* HSI, HSE, or CSI oscillator is used as source of SAI2/3 clock */
  26085. /* SAI2/3 clock source configuration done later after clock selection check */
  26086. break;
  26087. default:
  26088. ret = HAL_ERROR;
  26089. 800b3e2: 2301 movs r3, #1
  26090. 800b3e4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26091. break;
  26092. 800b3e8: e002 b.n 800b3f0 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  26093. break;
  26094. 800b3ea: bf00 nop
  26095. 800b3ec: e000 b.n 800b3f0 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  26096. break;
  26097. 800b3ee: bf00 nop
  26098. }
  26099. if (ret == HAL_OK)
  26100. 800b3f0: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26101. 800b3f4: 2b00 cmp r3, #0
  26102. 800b3f6: d10a bne.n 800b40e <HAL_RCCEx_PeriphCLKConfig+0x20e>
  26103. {
  26104. /* Set the source of SAI2/3 clock*/
  26105. __HAL_RCC_SAI23_CONFIG(PeriphClkInit->Sai23ClockSelection);
  26106. 800b3f8: 4b4f ldr r3, [pc, #316] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  26107. 800b3fa: 6d1b ldr r3, [r3, #80] @ 0x50
  26108. 800b3fc: f423 71e0 bic.w r1, r3, #448 @ 0x1c0
  26109. 800b400: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26110. 800b404: 6ddb ldr r3, [r3, #92] @ 0x5c
  26111. 800b406: 4a4c ldr r2, [pc, #304] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  26112. 800b408: 430b orrs r3, r1
  26113. 800b40a: 6513 str r3, [r2, #80] @ 0x50
  26114. 800b40c: e003 b.n 800b416 <HAL_RCCEx_PeriphCLKConfig+0x216>
  26115. }
  26116. else
  26117. {
  26118. /* set overall return value */
  26119. status = ret;
  26120. 800b40e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26121. 800b412: f887 311e strb.w r3, [r7, #286] @ 0x11e
  26122. }
  26123. #endif /*SAI2B*/
  26124. #if defined(SAI4)
  26125. /*---------------------------- SAI4A configuration -------------------------------*/
  26126. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI4A) == RCC_PERIPHCLK_SAI4A)
  26127. 800b416: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26128. 800b41a: e9d3 2300 ldrd r2, r3, [r3]
  26129. 800b41e: f402 6380 and.w r3, r2, #1024 @ 0x400
  26130. 800b422: f8c7 3100 str.w r3, [r7, #256] @ 0x100
  26131. 800b426: 2300 movs r3, #0
  26132. 800b428: f8c7 3104 str.w r3, [r7, #260] @ 0x104
  26133. 800b42c: e9d7 1240 ldrd r1, r2, [r7, #256] @ 0x100
  26134. 800b430: 460b mov r3, r1
  26135. 800b432: 4313 orrs r3, r2
  26136. 800b434: d053 beq.n 800b4de <HAL_RCCEx_PeriphCLKConfig+0x2de>
  26137. {
  26138. switch (PeriphClkInit->Sai4AClockSelection)
  26139. 800b436: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26140. 800b43a: f8d3 30a8 ldr.w r3, [r3, #168] @ 0xa8
  26141. 800b43e: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  26142. 800b442: d035 beq.n 800b4b0 <HAL_RCCEx_PeriphCLKConfig+0x2b0>
  26143. 800b444: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  26144. 800b448: d82e bhi.n 800b4a8 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  26145. 800b44a: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  26146. 800b44e: d031 beq.n 800b4b4 <HAL_RCCEx_PeriphCLKConfig+0x2b4>
  26147. 800b450: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  26148. 800b454: d828 bhi.n 800b4a8 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  26149. 800b456: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  26150. 800b45a: d01a beq.n 800b492 <HAL_RCCEx_PeriphCLKConfig+0x292>
  26151. 800b45c: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  26152. 800b460: d822 bhi.n 800b4a8 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  26153. 800b462: 2b00 cmp r3, #0
  26154. 800b464: d003 beq.n 800b46e <HAL_RCCEx_PeriphCLKConfig+0x26e>
  26155. 800b466: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  26156. 800b46a: d007 beq.n 800b47c <HAL_RCCEx_PeriphCLKConfig+0x27c>
  26157. 800b46c: e01c b.n 800b4a8 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  26158. {
  26159. case RCC_SAI4ACLKSOURCE_PLL: /* PLL is used as clock source for SAI2*/
  26160. /* Enable SAI Clock output generated form System PLL . */
  26161. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  26162. 800b46e: 4b32 ldr r3, [pc, #200] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  26163. 800b470: 6adb ldr r3, [r3, #44] @ 0x2c
  26164. 800b472: 4a31 ldr r2, [pc, #196] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  26165. 800b474: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  26166. 800b478: 62d3 str r3, [r2, #44] @ 0x2c
  26167. /* SAI1 clock source configuration done later after clock selection check */
  26168. break;
  26169. 800b47a: e01c b.n 800b4b6 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  26170. case RCC_SAI4ACLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2*/
  26171. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  26172. 800b47c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26173. 800b480: 3308 adds r3, #8
  26174. 800b482: 2100 movs r1, #0
  26175. 800b484: 4618 mov r0, r3
  26176. 800b486: f002 fa39 bl 800d8fc <RCCEx_PLL2_Config>
  26177. 800b48a: 4603 mov r3, r0
  26178. 800b48c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26179. /* SAI2 clock source configuration done later after clock selection check */
  26180. break;
  26181. 800b490: e011 b.n 800b4b6 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  26182. case RCC_SAI4ACLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2*/
  26183. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  26184. 800b492: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26185. 800b496: 3328 adds r3, #40 @ 0x28
  26186. 800b498: 2100 movs r1, #0
  26187. 800b49a: 4618 mov r0, r3
  26188. 800b49c: f002 fae0 bl 800da60 <RCCEx_PLL3_Config>
  26189. 800b4a0: 4603 mov r3, r0
  26190. 800b4a2: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26191. /* SAI1 clock source configuration done later after clock selection check */
  26192. break;
  26193. 800b4a6: e006 b.n 800b4b6 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  26194. /* SAI4A clock source configuration done later after clock selection check */
  26195. break;
  26196. #endif /* RCC_VER_3_0 */
  26197. default:
  26198. ret = HAL_ERROR;
  26199. 800b4a8: 2301 movs r3, #1
  26200. 800b4aa: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26201. break;
  26202. 800b4ae: e002 b.n 800b4b6 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  26203. break;
  26204. 800b4b0: bf00 nop
  26205. 800b4b2: e000 b.n 800b4b6 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  26206. break;
  26207. 800b4b4: bf00 nop
  26208. }
  26209. if (ret == HAL_OK)
  26210. 800b4b6: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26211. 800b4ba: 2b00 cmp r3, #0
  26212. 800b4bc: d10b bne.n 800b4d6 <HAL_RCCEx_PeriphCLKConfig+0x2d6>
  26213. {
  26214. /* Set the source of SAI4A clock*/
  26215. __HAL_RCC_SAI4A_CONFIG(PeriphClkInit->Sai4AClockSelection);
  26216. 800b4be: 4b1e ldr r3, [pc, #120] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  26217. 800b4c0: 6d9b ldr r3, [r3, #88] @ 0x58
  26218. 800b4c2: f423 0160 bic.w r1, r3, #14680064 @ 0xe00000
  26219. 800b4c6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26220. 800b4ca: f8d3 30a8 ldr.w r3, [r3, #168] @ 0xa8
  26221. 800b4ce: 4a1a ldr r2, [pc, #104] @ (800b538 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  26222. 800b4d0: 430b orrs r3, r1
  26223. 800b4d2: 6593 str r3, [r2, #88] @ 0x58
  26224. 800b4d4: e003 b.n 800b4de <HAL_RCCEx_PeriphCLKConfig+0x2de>
  26225. }
  26226. else
  26227. {
  26228. /* set overall return value */
  26229. status = ret;
  26230. 800b4d6: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26231. 800b4da: f887 311e strb.w r3, [r7, #286] @ 0x11e
  26232. }
  26233. }
  26234. /*---------------------------- SAI4B configuration -------------------------------*/
  26235. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI4B) == RCC_PERIPHCLK_SAI4B)
  26236. 800b4de: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26237. 800b4e2: e9d3 2300 ldrd r2, r3, [r3]
  26238. 800b4e6: f402 6300 and.w r3, r2, #2048 @ 0x800
  26239. 800b4ea: f8c7 30f8 str.w r3, [r7, #248] @ 0xf8
  26240. 800b4ee: 2300 movs r3, #0
  26241. 800b4f0: f8c7 30fc str.w r3, [r7, #252] @ 0xfc
  26242. 800b4f4: e9d7 123e ldrd r1, r2, [r7, #248] @ 0xf8
  26243. 800b4f8: 460b mov r3, r1
  26244. 800b4fa: 4313 orrs r3, r2
  26245. 800b4fc: d056 beq.n 800b5ac <HAL_RCCEx_PeriphCLKConfig+0x3ac>
  26246. {
  26247. switch (PeriphClkInit->Sai4BClockSelection)
  26248. 800b4fe: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26249. 800b502: f8d3 30ac ldr.w r3, [r3, #172] @ 0xac
  26250. 800b506: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  26251. 800b50a: d038 beq.n 800b57e <HAL_RCCEx_PeriphCLKConfig+0x37e>
  26252. 800b50c: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  26253. 800b510: d831 bhi.n 800b576 <HAL_RCCEx_PeriphCLKConfig+0x376>
  26254. 800b512: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  26255. 800b516: d034 beq.n 800b582 <HAL_RCCEx_PeriphCLKConfig+0x382>
  26256. 800b518: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  26257. 800b51c: d82b bhi.n 800b576 <HAL_RCCEx_PeriphCLKConfig+0x376>
  26258. 800b51e: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  26259. 800b522: d01d beq.n 800b560 <HAL_RCCEx_PeriphCLKConfig+0x360>
  26260. 800b524: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  26261. 800b528: d825 bhi.n 800b576 <HAL_RCCEx_PeriphCLKConfig+0x376>
  26262. 800b52a: 2b00 cmp r3, #0
  26263. 800b52c: d006 beq.n 800b53c <HAL_RCCEx_PeriphCLKConfig+0x33c>
  26264. 800b52e: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000
  26265. 800b532: d00a beq.n 800b54a <HAL_RCCEx_PeriphCLKConfig+0x34a>
  26266. 800b534: e01f b.n 800b576 <HAL_RCCEx_PeriphCLKConfig+0x376>
  26267. 800b536: bf00 nop
  26268. 800b538: 58024400 .word 0x58024400
  26269. {
  26270. case RCC_SAI4BCLKSOURCE_PLL: /* PLL is used as clock source for SAI2*/
  26271. /* Enable SAI Clock output generated form System PLL . */
  26272. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  26273. 800b53c: 4ba2 ldr r3, [pc, #648] @ (800b7c8 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  26274. 800b53e: 6adb ldr r3, [r3, #44] @ 0x2c
  26275. 800b540: 4aa1 ldr r2, [pc, #644] @ (800b7c8 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  26276. 800b542: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  26277. 800b546: 62d3 str r3, [r2, #44] @ 0x2c
  26278. /* SAI1 clock source configuration done later after clock selection check */
  26279. break;
  26280. 800b548: e01c b.n 800b584 <HAL_RCCEx_PeriphCLKConfig+0x384>
  26281. case RCC_SAI4BCLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2*/
  26282. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  26283. 800b54a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26284. 800b54e: 3308 adds r3, #8
  26285. 800b550: 2100 movs r1, #0
  26286. 800b552: 4618 mov r0, r3
  26287. 800b554: f002 f9d2 bl 800d8fc <RCCEx_PLL2_Config>
  26288. 800b558: 4603 mov r3, r0
  26289. 800b55a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26290. /* SAI2 clock source configuration done later after clock selection check */
  26291. break;
  26292. 800b55e: e011 b.n 800b584 <HAL_RCCEx_PeriphCLKConfig+0x384>
  26293. case RCC_SAI4BCLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2*/
  26294. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  26295. 800b560: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26296. 800b564: 3328 adds r3, #40 @ 0x28
  26297. 800b566: 2100 movs r1, #0
  26298. 800b568: 4618 mov r0, r3
  26299. 800b56a: f002 fa79 bl 800da60 <RCCEx_PLL3_Config>
  26300. 800b56e: 4603 mov r3, r0
  26301. 800b570: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26302. /* SAI1 clock source configuration done later after clock selection check */
  26303. break;
  26304. 800b574: e006 b.n 800b584 <HAL_RCCEx_PeriphCLKConfig+0x384>
  26305. /* SAI4B clock source configuration done later after clock selection check */
  26306. break;
  26307. #endif /* RCC_VER_3_0 */
  26308. default:
  26309. ret = HAL_ERROR;
  26310. 800b576: 2301 movs r3, #1
  26311. 800b578: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26312. break;
  26313. 800b57c: e002 b.n 800b584 <HAL_RCCEx_PeriphCLKConfig+0x384>
  26314. break;
  26315. 800b57e: bf00 nop
  26316. 800b580: e000 b.n 800b584 <HAL_RCCEx_PeriphCLKConfig+0x384>
  26317. break;
  26318. 800b582: bf00 nop
  26319. }
  26320. if (ret == HAL_OK)
  26321. 800b584: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26322. 800b588: 2b00 cmp r3, #0
  26323. 800b58a: d10b bne.n 800b5a4 <HAL_RCCEx_PeriphCLKConfig+0x3a4>
  26324. {
  26325. /* Set the source of SAI4B clock*/
  26326. __HAL_RCC_SAI4B_CONFIG(PeriphClkInit->Sai4BClockSelection);
  26327. 800b58c: 4b8e ldr r3, [pc, #568] @ (800b7c8 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  26328. 800b58e: 6d9b ldr r3, [r3, #88] @ 0x58
  26329. 800b590: f023 61e0 bic.w r1, r3, #117440512 @ 0x7000000
  26330. 800b594: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26331. 800b598: f8d3 30ac ldr.w r3, [r3, #172] @ 0xac
  26332. 800b59c: 4a8a ldr r2, [pc, #552] @ (800b7c8 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  26333. 800b59e: 430b orrs r3, r1
  26334. 800b5a0: 6593 str r3, [r2, #88] @ 0x58
  26335. 800b5a2: e003 b.n 800b5ac <HAL_RCCEx_PeriphCLKConfig+0x3ac>
  26336. }
  26337. else
  26338. {
  26339. /* set overall return value */
  26340. status = ret;
  26341. 800b5a4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26342. 800b5a8: f887 311e strb.w r3, [r7, #286] @ 0x11e
  26343. }
  26344. #endif /*SAI4*/
  26345. #if defined(QUADSPI)
  26346. /*---------------------------- QSPI configuration -------------------------------*/
  26347. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_QSPI) == RCC_PERIPHCLK_QSPI)
  26348. 800b5ac: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26349. 800b5b0: e9d3 2300 ldrd r2, r3, [r3]
  26350. 800b5b4: f002 7300 and.w r3, r2, #33554432 @ 0x2000000
  26351. 800b5b8: f8c7 30f0 str.w r3, [r7, #240] @ 0xf0
  26352. 800b5bc: 2300 movs r3, #0
  26353. 800b5be: f8c7 30f4 str.w r3, [r7, #244] @ 0xf4
  26354. 800b5c2: e9d7 123c ldrd r1, r2, [r7, #240] @ 0xf0
  26355. 800b5c6: 460b mov r3, r1
  26356. 800b5c8: 4313 orrs r3, r2
  26357. 800b5ca: d03a beq.n 800b642 <HAL_RCCEx_PeriphCLKConfig+0x442>
  26358. {
  26359. switch (PeriphClkInit->QspiClockSelection)
  26360. 800b5cc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26361. 800b5d0: 6cdb ldr r3, [r3, #76] @ 0x4c
  26362. 800b5d2: 2b30 cmp r3, #48 @ 0x30
  26363. 800b5d4: d01f beq.n 800b616 <HAL_RCCEx_PeriphCLKConfig+0x416>
  26364. 800b5d6: 2b30 cmp r3, #48 @ 0x30
  26365. 800b5d8: d819 bhi.n 800b60e <HAL_RCCEx_PeriphCLKConfig+0x40e>
  26366. 800b5da: 2b20 cmp r3, #32
  26367. 800b5dc: d00c beq.n 800b5f8 <HAL_RCCEx_PeriphCLKConfig+0x3f8>
  26368. 800b5de: 2b20 cmp r3, #32
  26369. 800b5e0: d815 bhi.n 800b60e <HAL_RCCEx_PeriphCLKConfig+0x40e>
  26370. 800b5e2: 2b00 cmp r3, #0
  26371. 800b5e4: d019 beq.n 800b61a <HAL_RCCEx_PeriphCLKConfig+0x41a>
  26372. 800b5e6: 2b10 cmp r3, #16
  26373. 800b5e8: d111 bne.n 800b60e <HAL_RCCEx_PeriphCLKConfig+0x40e>
  26374. {
  26375. case RCC_QSPICLKSOURCE_PLL: /* PLL is used as clock source for QSPI*/
  26376. /* Enable QSPI Clock output generated form System PLL . */
  26377. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  26378. 800b5ea: 4b77 ldr r3, [pc, #476] @ (800b7c8 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  26379. 800b5ec: 6adb ldr r3, [r3, #44] @ 0x2c
  26380. 800b5ee: 4a76 ldr r2, [pc, #472] @ (800b7c8 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  26381. 800b5f0: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  26382. 800b5f4: 62d3 str r3, [r2, #44] @ 0x2c
  26383. /* QSPI clock source configuration done later after clock selection check */
  26384. break;
  26385. 800b5f6: e011 b.n 800b61c <HAL_RCCEx_PeriphCLKConfig+0x41c>
  26386. case RCC_QSPICLKSOURCE_PLL2: /* PLL2 is used as clock source for QSPI*/
  26387. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  26388. 800b5f8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26389. 800b5fc: 3308 adds r3, #8
  26390. 800b5fe: 2102 movs r1, #2
  26391. 800b600: 4618 mov r0, r3
  26392. 800b602: f002 f97b bl 800d8fc <RCCEx_PLL2_Config>
  26393. 800b606: 4603 mov r3, r0
  26394. 800b608: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26395. /* QSPI clock source configuration done later after clock selection check */
  26396. break;
  26397. 800b60c: e006 b.n 800b61c <HAL_RCCEx_PeriphCLKConfig+0x41c>
  26398. case RCC_QSPICLKSOURCE_D1HCLK:
  26399. /* Domain1 HCLK clock selected as QSPI kernel peripheral clock */
  26400. break;
  26401. default:
  26402. ret = HAL_ERROR;
  26403. 800b60e: 2301 movs r3, #1
  26404. 800b610: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26405. break;
  26406. 800b614: e002 b.n 800b61c <HAL_RCCEx_PeriphCLKConfig+0x41c>
  26407. break;
  26408. 800b616: bf00 nop
  26409. 800b618: e000 b.n 800b61c <HAL_RCCEx_PeriphCLKConfig+0x41c>
  26410. break;
  26411. 800b61a: bf00 nop
  26412. }
  26413. if (ret == HAL_OK)
  26414. 800b61c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26415. 800b620: 2b00 cmp r3, #0
  26416. 800b622: d10a bne.n 800b63a <HAL_RCCEx_PeriphCLKConfig+0x43a>
  26417. {
  26418. /* Set the source of QSPI clock*/
  26419. __HAL_RCC_QSPI_CONFIG(PeriphClkInit->QspiClockSelection);
  26420. 800b624: 4b68 ldr r3, [pc, #416] @ (800b7c8 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  26421. 800b626: 6cdb ldr r3, [r3, #76] @ 0x4c
  26422. 800b628: f023 0130 bic.w r1, r3, #48 @ 0x30
  26423. 800b62c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26424. 800b630: 6cdb ldr r3, [r3, #76] @ 0x4c
  26425. 800b632: 4a65 ldr r2, [pc, #404] @ (800b7c8 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  26426. 800b634: 430b orrs r3, r1
  26427. 800b636: 64d3 str r3, [r2, #76] @ 0x4c
  26428. 800b638: e003 b.n 800b642 <HAL_RCCEx_PeriphCLKConfig+0x442>
  26429. }
  26430. else
  26431. {
  26432. /* set overall return value */
  26433. status = ret;
  26434. 800b63a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26435. 800b63e: f887 311e strb.w r3, [r7, #286] @ 0x11e
  26436. }
  26437. }
  26438. #endif /*OCTOSPI*/
  26439. /*---------------------------- SPI1/2/3 configuration -------------------------------*/
  26440. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI123) == RCC_PERIPHCLK_SPI123)
  26441. 800b642: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26442. 800b646: e9d3 2300 ldrd r2, r3, [r3]
  26443. 800b64a: f402 5380 and.w r3, r2, #4096 @ 0x1000
  26444. 800b64e: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  26445. 800b652: 2300 movs r3, #0
  26446. 800b654: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  26447. 800b658: e9d7 123a ldrd r1, r2, [r7, #232] @ 0xe8
  26448. 800b65c: 460b mov r3, r1
  26449. 800b65e: 4313 orrs r3, r2
  26450. 800b660: d051 beq.n 800b706 <HAL_RCCEx_PeriphCLKConfig+0x506>
  26451. {
  26452. switch (PeriphClkInit->Spi123ClockSelection)
  26453. 800b662: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26454. 800b666: 6e1b ldr r3, [r3, #96] @ 0x60
  26455. 800b668: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  26456. 800b66c: d035 beq.n 800b6da <HAL_RCCEx_PeriphCLKConfig+0x4da>
  26457. 800b66e: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  26458. 800b672: d82e bhi.n 800b6d2 <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  26459. 800b674: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  26460. 800b678: d031 beq.n 800b6de <HAL_RCCEx_PeriphCLKConfig+0x4de>
  26461. 800b67a: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  26462. 800b67e: d828 bhi.n 800b6d2 <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  26463. 800b680: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  26464. 800b684: d01a beq.n 800b6bc <HAL_RCCEx_PeriphCLKConfig+0x4bc>
  26465. 800b686: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  26466. 800b68a: d822 bhi.n 800b6d2 <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  26467. 800b68c: 2b00 cmp r3, #0
  26468. 800b68e: d003 beq.n 800b698 <HAL_RCCEx_PeriphCLKConfig+0x498>
  26469. 800b690: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  26470. 800b694: d007 beq.n 800b6a6 <HAL_RCCEx_PeriphCLKConfig+0x4a6>
  26471. 800b696: e01c b.n 800b6d2 <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  26472. {
  26473. case RCC_SPI123CLKSOURCE_PLL: /* PLL is used as clock source for SPI1/2/3 */
  26474. /* Enable SPI Clock output generated form System PLL . */
  26475. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  26476. 800b698: 4b4b ldr r3, [pc, #300] @ (800b7c8 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  26477. 800b69a: 6adb ldr r3, [r3, #44] @ 0x2c
  26478. 800b69c: 4a4a ldr r2, [pc, #296] @ (800b7c8 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  26479. 800b69e: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  26480. 800b6a2: 62d3 str r3, [r2, #44] @ 0x2c
  26481. /* SPI1/2/3 clock source configuration done later after clock selection check */
  26482. break;
  26483. 800b6a4: e01c b.n 800b6e0 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  26484. case RCC_SPI123CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI1/2/3 */
  26485. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  26486. 800b6a6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26487. 800b6aa: 3308 adds r3, #8
  26488. 800b6ac: 2100 movs r1, #0
  26489. 800b6ae: 4618 mov r0, r3
  26490. 800b6b0: f002 f924 bl 800d8fc <RCCEx_PLL2_Config>
  26491. 800b6b4: 4603 mov r3, r0
  26492. 800b6b6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26493. /* SPI1/2/3 clock source configuration done later after clock selection check */
  26494. break;
  26495. 800b6ba: e011 b.n 800b6e0 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  26496. case RCC_SPI123CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI1/2/3 */
  26497. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  26498. 800b6bc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26499. 800b6c0: 3328 adds r3, #40 @ 0x28
  26500. 800b6c2: 2100 movs r1, #0
  26501. 800b6c4: 4618 mov r0, r3
  26502. 800b6c6: f002 f9cb bl 800da60 <RCCEx_PLL3_Config>
  26503. 800b6ca: 4603 mov r3, r0
  26504. 800b6cc: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26505. /* SPI1/2/3 clock source configuration done later after clock selection check */
  26506. break;
  26507. 800b6d0: e006 b.n 800b6e0 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  26508. /* HSI, HSE, or CSI oscillator is used as source of SPI1/2/3 clock */
  26509. /* SPI1/2/3 clock source configuration done later after clock selection check */
  26510. break;
  26511. default:
  26512. ret = HAL_ERROR;
  26513. 800b6d2: 2301 movs r3, #1
  26514. 800b6d4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26515. break;
  26516. 800b6d8: e002 b.n 800b6e0 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  26517. break;
  26518. 800b6da: bf00 nop
  26519. 800b6dc: e000 b.n 800b6e0 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  26520. break;
  26521. 800b6de: bf00 nop
  26522. }
  26523. if (ret == HAL_OK)
  26524. 800b6e0: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26525. 800b6e4: 2b00 cmp r3, #0
  26526. 800b6e6: d10a bne.n 800b6fe <HAL_RCCEx_PeriphCLKConfig+0x4fe>
  26527. {
  26528. /* Set the source of SPI1/2/3 clock*/
  26529. __HAL_RCC_SPI123_CONFIG(PeriphClkInit->Spi123ClockSelection);
  26530. 800b6e8: 4b37 ldr r3, [pc, #220] @ (800b7c8 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  26531. 800b6ea: 6d1b ldr r3, [r3, #80] @ 0x50
  26532. 800b6ec: f423 41e0 bic.w r1, r3, #28672 @ 0x7000
  26533. 800b6f0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26534. 800b6f4: 6e1b ldr r3, [r3, #96] @ 0x60
  26535. 800b6f6: 4a34 ldr r2, [pc, #208] @ (800b7c8 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  26536. 800b6f8: 430b orrs r3, r1
  26537. 800b6fa: 6513 str r3, [r2, #80] @ 0x50
  26538. 800b6fc: e003 b.n 800b706 <HAL_RCCEx_PeriphCLKConfig+0x506>
  26539. }
  26540. else
  26541. {
  26542. /* set overall return value */
  26543. status = ret;
  26544. 800b6fe: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26545. 800b702: f887 311e strb.w r3, [r7, #286] @ 0x11e
  26546. }
  26547. }
  26548. /*---------------------------- SPI4/5 configuration -------------------------------*/
  26549. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI45) == RCC_PERIPHCLK_SPI45)
  26550. 800b706: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26551. 800b70a: e9d3 2300 ldrd r2, r3, [r3]
  26552. 800b70e: f402 5300 and.w r3, r2, #8192 @ 0x2000
  26553. 800b712: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  26554. 800b716: 2300 movs r3, #0
  26555. 800b718: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  26556. 800b71c: e9d7 1238 ldrd r1, r2, [r7, #224] @ 0xe0
  26557. 800b720: 460b mov r3, r1
  26558. 800b722: 4313 orrs r3, r2
  26559. 800b724: d056 beq.n 800b7d4 <HAL_RCCEx_PeriphCLKConfig+0x5d4>
  26560. {
  26561. switch (PeriphClkInit->Spi45ClockSelection)
  26562. 800b726: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26563. 800b72a: 6e5b ldr r3, [r3, #100] @ 0x64
  26564. 800b72c: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  26565. 800b730: d033 beq.n 800b79a <HAL_RCCEx_PeriphCLKConfig+0x59a>
  26566. 800b732: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  26567. 800b736: d82c bhi.n 800b792 <HAL_RCCEx_PeriphCLKConfig+0x592>
  26568. 800b738: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  26569. 800b73c: d02f beq.n 800b79e <HAL_RCCEx_PeriphCLKConfig+0x59e>
  26570. 800b73e: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  26571. 800b742: d826 bhi.n 800b792 <HAL_RCCEx_PeriphCLKConfig+0x592>
  26572. 800b744: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  26573. 800b748: d02b beq.n 800b7a2 <HAL_RCCEx_PeriphCLKConfig+0x5a2>
  26574. 800b74a: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  26575. 800b74e: d820 bhi.n 800b792 <HAL_RCCEx_PeriphCLKConfig+0x592>
  26576. 800b750: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  26577. 800b754: d012 beq.n 800b77c <HAL_RCCEx_PeriphCLKConfig+0x57c>
  26578. 800b756: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  26579. 800b75a: d81a bhi.n 800b792 <HAL_RCCEx_PeriphCLKConfig+0x592>
  26580. 800b75c: 2b00 cmp r3, #0
  26581. 800b75e: d022 beq.n 800b7a6 <HAL_RCCEx_PeriphCLKConfig+0x5a6>
  26582. 800b760: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  26583. 800b764: d115 bne.n 800b792 <HAL_RCCEx_PeriphCLKConfig+0x592>
  26584. /* SPI4/5 clock source configuration done later after clock selection check */
  26585. break;
  26586. case RCC_SPI45CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI4/5 */
  26587. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  26588. 800b766: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26589. 800b76a: 3308 adds r3, #8
  26590. 800b76c: 2101 movs r1, #1
  26591. 800b76e: 4618 mov r0, r3
  26592. 800b770: f002 f8c4 bl 800d8fc <RCCEx_PLL2_Config>
  26593. 800b774: 4603 mov r3, r0
  26594. 800b776: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26595. /* SPI4/5 clock source configuration done later after clock selection check */
  26596. break;
  26597. 800b77a: e015 b.n 800b7a8 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  26598. case RCC_SPI45CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI4/5 */
  26599. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  26600. 800b77c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26601. 800b780: 3328 adds r3, #40 @ 0x28
  26602. 800b782: 2101 movs r1, #1
  26603. 800b784: 4618 mov r0, r3
  26604. 800b786: f002 f96b bl 800da60 <RCCEx_PLL3_Config>
  26605. 800b78a: 4603 mov r3, r0
  26606. 800b78c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26607. /* SPI4/5 clock source configuration done later after clock selection check */
  26608. break;
  26609. 800b790: e00a b.n 800b7a8 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  26610. /* HSE, oscillator is used as source of SPI4/5 clock */
  26611. /* SPI4/5 clock source configuration done later after clock selection check */
  26612. break;
  26613. default:
  26614. ret = HAL_ERROR;
  26615. 800b792: 2301 movs r3, #1
  26616. 800b794: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26617. break;
  26618. 800b798: e006 b.n 800b7a8 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  26619. break;
  26620. 800b79a: bf00 nop
  26621. 800b79c: e004 b.n 800b7a8 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  26622. break;
  26623. 800b79e: bf00 nop
  26624. 800b7a0: e002 b.n 800b7a8 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  26625. break;
  26626. 800b7a2: bf00 nop
  26627. 800b7a4: e000 b.n 800b7a8 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  26628. break;
  26629. 800b7a6: bf00 nop
  26630. }
  26631. if (ret == HAL_OK)
  26632. 800b7a8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26633. 800b7ac: 2b00 cmp r3, #0
  26634. 800b7ae: d10d bne.n 800b7cc <HAL_RCCEx_PeriphCLKConfig+0x5cc>
  26635. {
  26636. /* Set the source of SPI4/5 clock*/
  26637. __HAL_RCC_SPI45_CONFIG(PeriphClkInit->Spi45ClockSelection);
  26638. 800b7b0: 4b05 ldr r3, [pc, #20] @ (800b7c8 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  26639. 800b7b2: 6d1b ldr r3, [r3, #80] @ 0x50
  26640. 800b7b4: f423 21e0 bic.w r1, r3, #458752 @ 0x70000
  26641. 800b7b8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26642. 800b7bc: 6e5b ldr r3, [r3, #100] @ 0x64
  26643. 800b7be: 4a02 ldr r2, [pc, #8] @ (800b7c8 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  26644. 800b7c0: 430b orrs r3, r1
  26645. 800b7c2: 6513 str r3, [r2, #80] @ 0x50
  26646. 800b7c4: e006 b.n 800b7d4 <HAL_RCCEx_PeriphCLKConfig+0x5d4>
  26647. 800b7c6: bf00 nop
  26648. 800b7c8: 58024400 .word 0x58024400
  26649. }
  26650. else
  26651. {
  26652. /* set overall return value */
  26653. status = ret;
  26654. 800b7cc: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26655. 800b7d0: f887 311e strb.w r3, [r7, #286] @ 0x11e
  26656. }
  26657. }
  26658. /*---------------------------- SPI6 configuration -------------------------------*/
  26659. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI6) == RCC_PERIPHCLK_SPI6)
  26660. 800b7d4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26661. 800b7d8: e9d3 2300 ldrd r2, r3, [r3]
  26662. 800b7dc: f402 4380 and.w r3, r2, #16384 @ 0x4000
  26663. 800b7e0: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8
  26664. 800b7e4: 2300 movs r3, #0
  26665. 800b7e6: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  26666. 800b7ea: e9d7 1236 ldrd r1, r2, [r7, #216] @ 0xd8
  26667. 800b7ee: 460b mov r3, r1
  26668. 800b7f0: 4313 orrs r3, r2
  26669. 800b7f2: d055 beq.n 800b8a0 <HAL_RCCEx_PeriphCLKConfig+0x6a0>
  26670. {
  26671. switch (PeriphClkInit->Spi6ClockSelection)
  26672. 800b7f4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26673. 800b7f8: f8d3 30b0 ldr.w r3, [r3, #176] @ 0xb0
  26674. 800b7fc: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  26675. 800b800: d033 beq.n 800b86a <HAL_RCCEx_PeriphCLKConfig+0x66a>
  26676. 800b802: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  26677. 800b806: d82c bhi.n 800b862 <HAL_RCCEx_PeriphCLKConfig+0x662>
  26678. 800b808: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  26679. 800b80c: d02f beq.n 800b86e <HAL_RCCEx_PeriphCLKConfig+0x66e>
  26680. 800b80e: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  26681. 800b812: d826 bhi.n 800b862 <HAL_RCCEx_PeriphCLKConfig+0x662>
  26682. 800b814: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  26683. 800b818: d02b beq.n 800b872 <HAL_RCCEx_PeriphCLKConfig+0x672>
  26684. 800b81a: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  26685. 800b81e: d820 bhi.n 800b862 <HAL_RCCEx_PeriphCLKConfig+0x662>
  26686. 800b820: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  26687. 800b824: d012 beq.n 800b84c <HAL_RCCEx_PeriphCLKConfig+0x64c>
  26688. 800b826: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  26689. 800b82a: d81a bhi.n 800b862 <HAL_RCCEx_PeriphCLKConfig+0x662>
  26690. 800b82c: 2b00 cmp r3, #0
  26691. 800b82e: d022 beq.n 800b876 <HAL_RCCEx_PeriphCLKConfig+0x676>
  26692. 800b830: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  26693. 800b834: d115 bne.n 800b862 <HAL_RCCEx_PeriphCLKConfig+0x662>
  26694. /* SPI6 clock source configuration done later after clock selection check */
  26695. break;
  26696. case RCC_SPI6CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI6*/
  26697. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  26698. 800b836: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26699. 800b83a: 3308 adds r3, #8
  26700. 800b83c: 2101 movs r1, #1
  26701. 800b83e: 4618 mov r0, r3
  26702. 800b840: f002 f85c bl 800d8fc <RCCEx_PLL2_Config>
  26703. 800b844: 4603 mov r3, r0
  26704. 800b846: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26705. /* SPI6 clock source configuration done later after clock selection check */
  26706. break;
  26707. 800b84a: e015 b.n 800b878 <HAL_RCCEx_PeriphCLKConfig+0x678>
  26708. case RCC_SPI6CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI6*/
  26709. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  26710. 800b84c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26711. 800b850: 3328 adds r3, #40 @ 0x28
  26712. 800b852: 2101 movs r1, #1
  26713. 800b854: 4618 mov r0, r3
  26714. 800b856: f002 f903 bl 800da60 <RCCEx_PLL3_Config>
  26715. 800b85a: 4603 mov r3, r0
  26716. 800b85c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26717. /* SPI6 clock source configuration done later after clock selection check */
  26718. break;
  26719. 800b860: e00a b.n 800b878 <HAL_RCCEx_PeriphCLKConfig+0x678>
  26720. /* SPI6 clock source configuration done later after clock selection check */
  26721. break;
  26722. #endif
  26723. default:
  26724. ret = HAL_ERROR;
  26725. 800b862: 2301 movs r3, #1
  26726. 800b864: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26727. break;
  26728. 800b868: e006 b.n 800b878 <HAL_RCCEx_PeriphCLKConfig+0x678>
  26729. break;
  26730. 800b86a: bf00 nop
  26731. 800b86c: e004 b.n 800b878 <HAL_RCCEx_PeriphCLKConfig+0x678>
  26732. break;
  26733. 800b86e: bf00 nop
  26734. 800b870: e002 b.n 800b878 <HAL_RCCEx_PeriphCLKConfig+0x678>
  26735. break;
  26736. 800b872: bf00 nop
  26737. 800b874: e000 b.n 800b878 <HAL_RCCEx_PeriphCLKConfig+0x678>
  26738. break;
  26739. 800b876: bf00 nop
  26740. }
  26741. if (ret == HAL_OK)
  26742. 800b878: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26743. 800b87c: 2b00 cmp r3, #0
  26744. 800b87e: d10b bne.n 800b898 <HAL_RCCEx_PeriphCLKConfig+0x698>
  26745. {
  26746. /* Set the source of SPI6 clock*/
  26747. __HAL_RCC_SPI6_CONFIG(PeriphClkInit->Spi6ClockSelection);
  26748. 800b880: 4ba3 ldr r3, [pc, #652] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  26749. 800b882: 6d9b ldr r3, [r3, #88] @ 0x58
  26750. 800b884: f023 41e0 bic.w r1, r3, #1879048192 @ 0x70000000
  26751. 800b888: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26752. 800b88c: f8d3 30b0 ldr.w r3, [r3, #176] @ 0xb0
  26753. 800b890: 4a9f ldr r2, [pc, #636] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  26754. 800b892: 430b orrs r3, r1
  26755. 800b894: 6593 str r3, [r2, #88] @ 0x58
  26756. 800b896: e003 b.n 800b8a0 <HAL_RCCEx_PeriphCLKConfig+0x6a0>
  26757. }
  26758. else
  26759. {
  26760. /* set overall return value */
  26761. status = ret;
  26762. 800b898: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26763. 800b89c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  26764. }
  26765. #endif /*DSI*/
  26766. #if defined(FDCAN1) || defined(FDCAN2)
  26767. /*---------------------------- FDCAN configuration -------------------------------*/
  26768. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FDCAN) == RCC_PERIPHCLK_FDCAN)
  26769. 800b8a0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26770. 800b8a4: e9d3 2300 ldrd r2, r3, [r3]
  26771. 800b8a8: f402 4300 and.w r3, r2, #32768 @ 0x8000
  26772. 800b8ac: f8c7 30d0 str.w r3, [r7, #208] @ 0xd0
  26773. 800b8b0: 2300 movs r3, #0
  26774. 800b8b2: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4
  26775. 800b8b6: e9d7 1234 ldrd r1, r2, [r7, #208] @ 0xd0
  26776. 800b8ba: 460b mov r3, r1
  26777. 800b8bc: 4313 orrs r3, r2
  26778. 800b8be: d037 beq.n 800b930 <HAL_RCCEx_PeriphCLKConfig+0x730>
  26779. {
  26780. switch (PeriphClkInit->FdcanClockSelection)
  26781. 800b8c0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26782. 800b8c4: 6f1b ldr r3, [r3, #112] @ 0x70
  26783. 800b8c6: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  26784. 800b8ca: d00e beq.n 800b8ea <HAL_RCCEx_PeriphCLKConfig+0x6ea>
  26785. 800b8cc: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  26786. 800b8d0: d816 bhi.n 800b900 <HAL_RCCEx_PeriphCLKConfig+0x700>
  26787. 800b8d2: 2b00 cmp r3, #0
  26788. 800b8d4: d018 beq.n 800b908 <HAL_RCCEx_PeriphCLKConfig+0x708>
  26789. 800b8d6: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  26790. 800b8da: d111 bne.n 800b900 <HAL_RCCEx_PeriphCLKConfig+0x700>
  26791. {
  26792. case RCC_FDCANCLKSOURCE_PLL: /* PLL is used as clock source for FDCAN*/
  26793. /* Enable FDCAN Clock output generated form System PLL . */
  26794. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  26795. 800b8dc: 4b8c ldr r3, [pc, #560] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  26796. 800b8de: 6adb ldr r3, [r3, #44] @ 0x2c
  26797. 800b8e0: 4a8b ldr r2, [pc, #556] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  26798. 800b8e2: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  26799. 800b8e6: 62d3 str r3, [r2, #44] @ 0x2c
  26800. /* FDCAN clock source configuration done later after clock selection check */
  26801. break;
  26802. 800b8e8: e00f b.n 800b90a <HAL_RCCEx_PeriphCLKConfig+0x70a>
  26803. case RCC_FDCANCLKSOURCE_PLL2: /* PLL2 is used as clock source for FDCAN*/
  26804. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  26805. 800b8ea: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26806. 800b8ee: 3308 adds r3, #8
  26807. 800b8f0: 2101 movs r1, #1
  26808. 800b8f2: 4618 mov r0, r3
  26809. 800b8f4: f002 f802 bl 800d8fc <RCCEx_PLL2_Config>
  26810. 800b8f8: 4603 mov r3, r0
  26811. 800b8fa: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26812. /* FDCAN clock source configuration done later after clock selection check */
  26813. break;
  26814. 800b8fe: e004 b.n 800b90a <HAL_RCCEx_PeriphCLKConfig+0x70a>
  26815. /* HSE is used as clock source for FDCAN*/
  26816. /* FDCAN clock source configuration done later after clock selection check */
  26817. break;
  26818. default:
  26819. ret = HAL_ERROR;
  26820. 800b900: 2301 movs r3, #1
  26821. 800b902: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26822. break;
  26823. 800b906: e000 b.n 800b90a <HAL_RCCEx_PeriphCLKConfig+0x70a>
  26824. break;
  26825. 800b908: bf00 nop
  26826. }
  26827. if (ret == HAL_OK)
  26828. 800b90a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26829. 800b90e: 2b00 cmp r3, #0
  26830. 800b910: d10a bne.n 800b928 <HAL_RCCEx_PeriphCLKConfig+0x728>
  26831. {
  26832. /* Set the source of FDCAN clock*/
  26833. __HAL_RCC_FDCAN_CONFIG(PeriphClkInit->FdcanClockSelection);
  26834. 800b912: 4b7f ldr r3, [pc, #508] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  26835. 800b914: 6d1b ldr r3, [r3, #80] @ 0x50
  26836. 800b916: f023 5140 bic.w r1, r3, #805306368 @ 0x30000000
  26837. 800b91a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26838. 800b91e: 6f1b ldr r3, [r3, #112] @ 0x70
  26839. 800b920: 4a7b ldr r2, [pc, #492] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  26840. 800b922: 430b orrs r3, r1
  26841. 800b924: 6513 str r3, [r2, #80] @ 0x50
  26842. 800b926: e003 b.n 800b930 <HAL_RCCEx_PeriphCLKConfig+0x730>
  26843. }
  26844. else
  26845. {
  26846. /* set overall return value */
  26847. status = ret;
  26848. 800b928: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26849. 800b92c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  26850. }
  26851. }
  26852. #endif /*FDCAN1 || FDCAN2*/
  26853. /*---------------------------- FMC configuration -------------------------------*/
  26854. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FMC) == RCC_PERIPHCLK_FMC)
  26855. 800b930: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26856. 800b934: e9d3 2300 ldrd r2, r3, [r3]
  26857. 800b938: f002 7380 and.w r3, r2, #16777216 @ 0x1000000
  26858. 800b93c: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8
  26859. 800b940: 2300 movs r3, #0
  26860. 800b942: f8c7 30cc str.w r3, [r7, #204] @ 0xcc
  26861. 800b946: e9d7 1232 ldrd r1, r2, [r7, #200] @ 0xc8
  26862. 800b94a: 460b mov r3, r1
  26863. 800b94c: 4313 orrs r3, r2
  26864. 800b94e: d039 beq.n 800b9c4 <HAL_RCCEx_PeriphCLKConfig+0x7c4>
  26865. {
  26866. switch (PeriphClkInit->FmcClockSelection)
  26867. 800b950: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26868. 800b954: 6c9b ldr r3, [r3, #72] @ 0x48
  26869. 800b956: 2b03 cmp r3, #3
  26870. 800b958: d81c bhi.n 800b994 <HAL_RCCEx_PeriphCLKConfig+0x794>
  26871. 800b95a: a201 add r2, pc, #4 @ (adr r2, 800b960 <HAL_RCCEx_PeriphCLKConfig+0x760>)
  26872. 800b95c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  26873. 800b960: 0800b99d .word 0x0800b99d
  26874. 800b964: 0800b971 .word 0x0800b971
  26875. 800b968: 0800b97f .word 0x0800b97f
  26876. 800b96c: 0800b99d .word 0x0800b99d
  26877. {
  26878. case RCC_FMCCLKSOURCE_PLL: /* PLL is used as clock source for FMC*/
  26879. /* Enable FMC Clock output generated form System PLL . */
  26880. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  26881. 800b970: 4b67 ldr r3, [pc, #412] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  26882. 800b972: 6adb ldr r3, [r3, #44] @ 0x2c
  26883. 800b974: 4a66 ldr r2, [pc, #408] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  26884. 800b976: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  26885. 800b97a: 62d3 str r3, [r2, #44] @ 0x2c
  26886. /* FMC clock source configuration done later after clock selection check */
  26887. break;
  26888. 800b97c: e00f b.n 800b99e <HAL_RCCEx_PeriphCLKConfig+0x79e>
  26889. case RCC_FMCCLKSOURCE_PLL2: /* PLL2 is used as clock source for FMC*/
  26890. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  26891. 800b97e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26892. 800b982: 3308 adds r3, #8
  26893. 800b984: 2102 movs r1, #2
  26894. 800b986: 4618 mov r0, r3
  26895. 800b988: f001 ffb8 bl 800d8fc <RCCEx_PLL2_Config>
  26896. 800b98c: 4603 mov r3, r0
  26897. 800b98e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26898. /* FMC clock source configuration done later after clock selection check */
  26899. break;
  26900. 800b992: e004 b.n 800b99e <HAL_RCCEx_PeriphCLKConfig+0x79e>
  26901. case RCC_FMCCLKSOURCE_HCLK:
  26902. /* D1/CD HCLK clock selected as FMC kernel peripheral clock */
  26903. break;
  26904. default:
  26905. ret = HAL_ERROR;
  26906. 800b994: 2301 movs r3, #1
  26907. 800b996: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26908. break;
  26909. 800b99a: e000 b.n 800b99e <HAL_RCCEx_PeriphCLKConfig+0x79e>
  26910. break;
  26911. 800b99c: bf00 nop
  26912. }
  26913. if (ret == HAL_OK)
  26914. 800b99e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26915. 800b9a2: 2b00 cmp r3, #0
  26916. 800b9a4: d10a bne.n 800b9bc <HAL_RCCEx_PeriphCLKConfig+0x7bc>
  26917. {
  26918. /* Set the source of FMC clock*/
  26919. __HAL_RCC_FMC_CONFIG(PeriphClkInit->FmcClockSelection);
  26920. 800b9a6: 4b5a ldr r3, [pc, #360] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  26921. 800b9a8: 6cdb ldr r3, [r3, #76] @ 0x4c
  26922. 800b9aa: f023 0103 bic.w r1, r3, #3
  26923. 800b9ae: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26924. 800b9b2: 6c9b ldr r3, [r3, #72] @ 0x48
  26925. 800b9b4: 4a56 ldr r2, [pc, #344] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  26926. 800b9b6: 430b orrs r3, r1
  26927. 800b9b8: 64d3 str r3, [r2, #76] @ 0x4c
  26928. 800b9ba: e003 b.n 800b9c4 <HAL_RCCEx_PeriphCLKConfig+0x7c4>
  26929. }
  26930. else
  26931. {
  26932. /* set overall return value */
  26933. status = ret;
  26934. 800b9bc: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26935. 800b9c0: f887 311e strb.w r3, [r7, #286] @ 0x11e
  26936. }
  26937. }
  26938. /*---------------------------- RTC configuration -------------------------------*/
  26939. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)
  26940. 800b9c4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26941. 800b9c8: e9d3 2300 ldrd r2, r3, [r3]
  26942. 800b9cc: f402 0380 and.w r3, r2, #4194304 @ 0x400000
  26943. 800b9d0: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0
  26944. 800b9d4: 2300 movs r3, #0
  26945. 800b9d6: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4
  26946. 800b9da: e9d7 1230 ldrd r1, r2, [r7, #192] @ 0xc0
  26947. 800b9de: 460b mov r3, r1
  26948. 800b9e0: 4313 orrs r3, r2
  26949. 800b9e2: f000 809f beq.w 800bb24 <HAL_RCCEx_PeriphCLKConfig+0x924>
  26950. {
  26951. /* check for RTC Parameters used to output RTCCLK */
  26952. assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection));
  26953. /* Enable write access to Backup domain */
  26954. SET_BIT(PWR->CR1, PWR_CR1_DBP);
  26955. 800b9e6: 4b4b ldr r3, [pc, #300] @ (800bb14 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  26956. 800b9e8: 681b ldr r3, [r3, #0]
  26957. 800b9ea: 4a4a ldr r2, [pc, #296] @ (800bb14 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  26958. 800b9ec: f443 7380 orr.w r3, r3, #256 @ 0x100
  26959. 800b9f0: 6013 str r3, [r2, #0]
  26960. /* Wait for Backup domain Write protection disable */
  26961. tickstart = HAL_GetTick();
  26962. 800b9f2: f7f9 f837 bl 8004a64 <HAL_GetTick>
  26963. 800b9f6: f8c7 0118 str.w r0, [r7, #280] @ 0x118
  26964. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  26965. 800b9fa: e00b b.n 800ba14 <HAL_RCCEx_PeriphCLKConfig+0x814>
  26966. {
  26967. if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
  26968. 800b9fc: f7f9 f832 bl 8004a64 <HAL_GetTick>
  26969. 800ba00: 4602 mov r2, r0
  26970. 800ba02: f8d7 3118 ldr.w r3, [r7, #280] @ 0x118
  26971. 800ba06: 1ad3 subs r3, r2, r3
  26972. 800ba08: 2b64 cmp r3, #100 @ 0x64
  26973. 800ba0a: d903 bls.n 800ba14 <HAL_RCCEx_PeriphCLKConfig+0x814>
  26974. {
  26975. ret = HAL_TIMEOUT;
  26976. 800ba0c: 2303 movs r3, #3
  26977. 800ba0e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  26978. break;
  26979. 800ba12: e005 b.n 800ba20 <HAL_RCCEx_PeriphCLKConfig+0x820>
  26980. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  26981. 800ba14: 4b3f ldr r3, [pc, #252] @ (800bb14 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  26982. 800ba16: 681b ldr r3, [r3, #0]
  26983. 800ba18: f403 7380 and.w r3, r3, #256 @ 0x100
  26984. 800ba1c: 2b00 cmp r3, #0
  26985. 800ba1e: d0ed beq.n 800b9fc <HAL_RCCEx_PeriphCLKConfig+0x7fc>
  26986. }
  26987. }
  26988. if (ret == HAL_OK)
  26989. 800ba20: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  26990. 800ba24: 2b00 cmp r3, #0
  26991. 800ba26: d179 bne.n 800bb1c <HAL_RCCEx_PeriphCLKConfig+0x91c>
  26992. {
  26993. /* Reset the Backup domain only if the RTC Clock source selection is modified */
  26994. if ((RCC->BDCR & RCC_BDCR_RTCSEL) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))
  26995. 800ba28: 4b39 ldr r3, [pc, #228] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  26996. 800ba2a: 6f1a ldr r2, [r3, #112] @ 0x70
  26997. 800ba2c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  26998. 800ba30: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  26999. 800ba34: 4053 eors r3, r2
  27000. 800ba36: f403 7340 and.w r3, r3, #768 @ 0x300
  27001. 800ba3a: 2b00 cmp r3, #0
  27002. 800ba3c: d015 beq.n 800ba6a <HAL_RCCEx_PeriphCLKConfig+0x86a>
  27003. {
  27004. /* Store the content of BDCR register before the reset of Backup Domain */
  27005. tmpreg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL));
  27006. 800ba3e: 4b34 ldr r3, [pc, #208] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  27007. 800ba40: 6f1b ldr r3, [r3, #112] @ 0x70
  27008. 800ba42: f423 7340 bic.w r3, r3, #768 @ 0x300
  27009. 800ba46: f8c7 3114 str.w r3, [r7, #276] @ 0x114
  27010. /* RTC Clock selection can be changed only if the Backup Domain is reset */
  27011. __HAL_RCC_BACKUPRESET_FORCE();
  27012. 800ba4a: 4b31 ldr r3, [pc, #196] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  27013. 800ba4c: 6f1b ldr r3, [r3, #112] @ 0x70
  27014. 800ba4e: 4a30 ldr r2, [pc, #192] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  27015. 800ba50: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  27016. 800ba54: 6713 str r3, [r2, #112] @ 0x70
  27017. __HAL_RCC_BACKUPRESET_RELEASE();
  27018. 800ba56: 4b2e ldr r3, [pc, #184] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  27019. 800ba58: 6f1b ldr r3, [r3, #112] @ 0x70
  27020. 800ba5a: 4a2d ldr r2, [pc, #180] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  27021. 800ba5c: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  27022. 800ba60: 6713 str r3, [r2, #112] @ 0x70
  27023. /* Restore the Content of BDCR register */
  27024. RCC->BDCR = tmpreg;
  27025. 800ba62: 4a2b ldr r2, [pc, #172] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  27026. 800ba64: f8d7 3114 ldr.w r3, [r7, #276] @ 0x114
  27027. 800ba68: 6713 str r3, [r2, #112] @ 0x70
  27028. }
  27029. /* If LSE is selected as RTC clock source (and enabled prior to Backup Domain reset), wait for LSE reactivation */
  27030. if (PeriphClkInit->RTCClockSelection == RCC_RTCCLKSOURCE_LSE)
  27031. 800ba6a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27032. 800ba6e: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  27033. 800ba72: f5b3 7f80 cmp.w r3, #256 @ 0x100
  27034. 800ba76: d118 bne.n 800baaa <HAL_RCCEx_PeriphCLKConfig+0x8aa>
  27035. {
  27036. /* Get Start Tick*/
  27037. tickstart = HAL_GetTick();
  27038. 800ba78: f7f8 fff4 bl 8004a64 <HAL_GetTick>
  27039. 800ba7c: f8c7 0118 str.w r0, [r7, #280] @ 0x118
  27040. /* Wait till LSE is ready */
  27041. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  27042. 800ba80: e00d b.n 800ba9e <HAL_RCCEx_PeriphCLKConfig+0x89e>
  27043. {
  27044. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  27045. 800ba82: f7f8 ffef bl 8004a64 <HAL_GetTick>
  27046. 800ba86: 4602 mov r2, r0
  27047. 800ba88: f8d7 3118 ldr.w r3, [r7, #280] @ 0x118
  27048. 800ba8c: 1ad2 subs r2, r2, r3
  27049. 800ba8e: f241 3388 movw r3, #5000 @ 0x1388
  27050. 800ba92: 429a cmp r2, r3
  27051. 800ba94: d903 bls.n 800ba9e <HAL_RCCEx_PeriphCLKConfig+0x89e>
  27052. {
  27053. ret = HAL_TIMEOUT;
  27054. 800ba96: 2303 movs r3, #3
  27055. 800ba98: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27056. break;
  27057. 800ba9c: e005 b.n 800baaa <HAL_RCCEx_PeriphCLKConfig+0x8aa>
  27058. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  27059. 800ba9e: 4b1c ldr r3, [pc, #112] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  27060. 800baa0: 6f1b ldr r3, [r3, #112] @ 0x70
  27061. 800baa2: f003 0302 and.w r3, r3, #2
  27062. 800baa6: 2b00 cmp r3, #0
  27063. 800baa8: d0eb beq.n 800ba82 <HAL_RCCEx_PeriphCLKConfig+0x882>
  27064. }
  27065. }
  27066. }
  27067. if (ret == HAL_OK)
  27068. 800baaa: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27069. 800baae: 2b00 cmp r3, #0
  27070. 800bab0: d129 bne.n 800bb06 <HAL_RCCEx_PeriphCLKConfig+0x906>
  27071. {
  27072. __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection);
  27073. 800bab2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27074. 800bab6: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  27075. 800baba: f403 7340 and.w r3, r3, #768 @ 0x300
  27076. 800babe: f5b3 7f40 cmp.w r3, #768 @ 0x300
  27077. 800bac2: d10e bne.n 800bae2 <HAL_RCCEx_PeriphCLKConfig+0x8e2>
  27078. 800bac4: 4b12 ldr r3, [pc, #72] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  27079. 800bac6: 691b ldr r3, [r3, #16]
  27080. 800bac8: f423 517c bic.w r1, r3, #16128 @ 0x3f00
  27081. 800bacc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27082. 800bad0: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  27083. 800bad4: 091a lsrs r2, r3, #4
  27084. 800bad6: 4b10 ldr r3, [pc, #64] @ (800bb18 <HAL_RCCEx_PeriphCLKConfig+0x918>)
  27085. 800bad8: 4013 ands r3, r2
  27086. 800bada: 4a0d ldr r2, [pc, #52] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  27087. 800badc: 430b orrs r3, r1
  27088. 800bade: 6113 str r3, [r2, #16]
  27089. 800bae0: e005 b.n 800baee <HAL_RCCEx_PeriphCLKConfig+0x8ee>
  27090. 800bae2: 4b0b ldr r3, [pc, #44] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  27091. 800bae4: 691b ldr r3, [r3, #16]
  27092. 800bae6: 4a0a ldr r2, [pc, #40] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  27093. 800bae8: f423 537c bic.w r3, r3, #16128 @ 0x3f00
  27094. 800baec: 6113 str r3, [r2, #16]
  27095. 800baee: 4b08 ldr r3, [pc, #32] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  27096. 800baf0: 6f19 ldr r1, [r3, #112] @ 0x70
  27097. 800baf2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27098. 800baf6: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  27099. 800bafa: f3c3 030b ubfx r3, r3, #0, #12
  27100. 800bafe: 4a04 ldr r2, [pc, #16] @ (800bb10 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  27101. 800bb00: 430b orrs r3, r1
  27102. 800bb02: 6713 str r3, [r2, #112] @ 0x70
  27103. 800bb04: e00e b.n 800bb24 <HAL_RCCEx_PeriphCLKConfig+0x924>
  27104. }
  27105. else
  27106. {
  27107. /* set overall return value */
  27108. status = ret;
  27109. 800bb06: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27110. 800bb0a: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27111. 800bb0e: e009 b.n 800bb24 <HAL_RCCEx_PeriphCLKConfig+0x924>
  27112. 800bb10: 58024400 .word 0x58024400
  27113. 800bb14: 58024800 .word 0x58024800
  27114. 800bb18: 00ffffcf .word 0x00ffffcf
  27115. }
  27116. }
  27117. else
  27118. {
  27119. /* set overall return value */
  27120. status = ret;
  27121. 800bb1c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27122. 800bb20: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27123. }
  27124. }
  27125. /*-------------------------- USART1/6 configuration --------------------------*/
  27126. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART16) == RCC_PERIPHCLK_USART16)
  27127. 800bb24: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27128. 800bb28: e9d3 2300 ldrd r2, r3, [r3]
  27129. 800bb2c: f002 0301 and.w r3, r2, #1
  27130. 800bb30: f8c7 30b8 str.w r3, [r7, #184] @ 0xb8
  27131. 800bb34: 2300 movs r3, #0
  27132. 800bb36: f8c7 30bc str.w r3, [r7, #188] @ 0xbc
  27133. 800bb3a: e9d7 122e ldrd r1, r2, [r7, #184] @ 0xb8
  27134. 800bb3e: 460b mov r3, r1
  27135. 800bb40: 4313 orrs r3, r2
  27136. 800bb42: f000 8089 beq.w 800bc58 <HAL_RCCEx_PeriphCLKConfig+0xa58>
  27137. {
  27138. switch (PeriphClkInit->Usart16ClockSelection)
  27139. 800bb46: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27140. 800bb4a: 6fdb ldr r3, [r3, #124] @ 0x7c
  27141. 800bb4c: 2b28 cmp r3, #40 @ 0x28
  27142. 800bb4e: d86b bhi.n 800bc28 <HAL_RCCEx_PeriphCLKConfig+0xa28>
  27143. 800bb50: a201 add r2, pc, #4 @ (adr r2, 800bb58 <HAL_RCCEx_PeriphCLKConfig+0x958>)
  27144. 800bb52: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  27145. 800bb56: bf00 nop
  27146. 800bb58: 0800bc31 .word 0x0800bc31
  27147. 800bb5c: 0800bc29 .word 0x0800bc29
  27148. 800bb60: 0800bc29 .word 0x0800bc29
  27149. 800bb64: 0800bc29 .word 0x0800bc29
  27150. 800bb68: 0800bc29 .word 0x0800bc29
  27151. 800bb6c: 0800bc29 .word 0x0800bc29
  27152. 800bb70: 0800bc29 .word 0x0800bc29
  27153. 800bb74: 0800bc29 .word 0x0800bc29
  27154. 800bb78: 0800bbfd .word 0x0800bbfd
  27155. 800bb7c: 0800bc29 .word 0x0800bc29
  27156. 800bb80: 0800bc29 .word 0x0800bc29
  27157. 800bb84: 0800bc29 .word 0x0800bc29
  27158. 800bb88: 0800bc29 .word 0x0800bc29
  27159. 800bb8c: 0800bc29 .word 0x0800bc29
  27160. 800bb90: 0800bc29 .word 0x0800bc29
  27161. 800bb94: 0800bc29 .word 0x0800bc29
  27162. 800bb98: 0800bc13 .word 0x0800bc13
  27163. 800bb9c: 0800bc29 .word 0x0800bc29
  27164. 800bba0: 0800bc29 .word 0x0800bc29
  27165. 800bba4: 0800bc29 .word 0x0800bc29
  27166. 800bba8: 0800bc29 .word 0x0800bc29
  27167. 800bbac: 0800bc29 .word 0x0800bc29
  27168. 800bbb0: 0800bc29 .word 0x0800bc29
  27169. 800bbb4: 0800bc29 .word 0x0800bc29
  27170. 800bbb8: 0800bc31 .word 0x0800bc31
  27171. 800bbbc: 0800bc29 .word 0x0800bc29
  27172. 800bbc0: 0800bc29 .word 0x0800bc29
  27173. 800bbc4: 0800bc29 .word 0x0800bc29
  27174. 800bbc8: 0800bc29 .word 0x0800bc29
  27175. 800bbcc: 0800bc29 .word 0x0800bc29
  27176. 800bbd0: 0800bc29 .word 0x0800bc29
  27177. 800bbd4: 0800bc29 .word 0x0800bc29
  27178. 800bbd8: 0800bc31 .word 0x0800bc31
  27179. 800bbdc: 0800bc29 .word 0x0800bc29
  27180. 800bbe0: 0800bc29 .word 0x0800bc29
  27181. 800bbe4: 0800bc29 .word 0x0800bc29
  27182. 800bbe8: 0800bc29 .word 0x0800bc29
  27183. 800bbec: 0800bc29 .word 0x0800bc29
  27184. 800bbf0: 0800bc29 .word 0x0800bc29
  27185. 800bbf4: 0800bc29 .word 0x0800bc29
  27186. 800bbf8: 0800bc31 .word 0x0800bc31
  27187. case RCC_USART16CLKSOURCE_PCLK2: /* CD/D2 PCLK2 as clock source for USART1/6 */
  27188. /* USART1/6 clock source configuration done later after clock selection check */
  27189. break;
  27190. case RCC_USART16CLKSOURCE_PLL2: /* PLL2 is used as clock source for USART1/6 */
  27191. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  27192. 800bbfc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27193. 800bc00: 3308 adds r3, #8
  27194. 800bc02: 2101 movs r1, #1
  27195. 800bc04: 4618 mov r0, r3
  27196. 800bc06: f001 fe79 bl 800d8fc <RCCEx_PLL2_Config>
  27197. 800bc0a: 4603 mov r3, r0
  27198. 800bc0c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27199. /* USART1/6 clock source configuration done later after clock selection check */
  27200. break;
  27201. 800bc10: e00f b.n 800bc32 <HAL_RCCEx_PeriphCLKConfig+0xa32>
  27202. case RCC_USART16CLKSOURCE_PLL3: /* PLL3 is used as clock source for USART1/6 */
  27203. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  27204. 800bc12: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27205. 800bc16: 3328 adds r3, #40 @ 0x28
  27206. 800bc18: 2101 movs r1, #1
  27207. 800bc1a: 4618 mov r0, r3
  27208. 800bc1c: f001 ff20 bl 800da60 <RCCEx_PLL3_Config>
  27209. 800bc20: 4603 mov r3, r0
  27210. 800bc22: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27211. /* USART1/6 clock source configuration done later after clock selection check */
  27212. break;
  27213. 800bc26: e004 b.n 800bc32 <HAL_RCCEx_PeriphCLKConfig+0xa32>
  27214. /* LSE, oscillator is used as source of USART1/6 clock */
  27215. /* USART1/6 clock source configuration done later after clock selection check */
  27216. break;
  27217. default:
  27218. ret = HAL_ERROR;
  27219. 800bc28: 2301 movs r3, #1
  27220. 800bc2a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27221. break;
  27222. 800bc2e: e000 b.n 800bc32 <HAL_RCCEx_PeriphCLKConfig+0xa32>
  27223. break;
  27224. 800bc30: bf00 nop
  27225. }
  27226. if (ret == HAL_OK)
  27227. 800bc32: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27228. 800bc36: 2b00 cmp r3, #0
  27229. 800bc38: d10a bne.n 800bc50 <HAL_RCCEx_PeriphCLKConfig+0xa50>
  27230. {
  27231. /* Set the source of USART1/6 clock */
  27232. __HAL_RCC_USART16_CONFIG(PeriphClkInit->Usart16ClockSelection);
  27233. 800bc3a: 4bbf ldr r3, [pc, #764] @ (800bf38 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  27234. 800bc3c: 6d5b ldr r3, [r3, #84] @ 0x54
  27235. 800bc3e: f023 0138 bic.w r1, r3, #56 @ 0x38
  27236. 800bc42: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27237. 800bc46: 6fdb ldr r3, [r3, #124] @ 0x7c
  27238. 800bc48: 4abb ldr r2, [pc, #748] @ (800bf38 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  27239. 800bc4a: 430b orrs r3, r1
  27240. 800bc4c: 6553 str r3, [r2, #84] @ 0x54
  27241. 800bc4e: e003 b.n 800bc58 <HAL_RCCEx_PeriphCLKConfig+0xa58>
  27242. }
  27243. else
  27244. {
  27245. /* set overall return value */
  27246. status = ret;
  27247. 800bc50: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27248. 800bc54: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27249. }
  27250. }
  27251. /*-------------------------- USART2/3/4/5/7/8 Configuration --------------------------*/
  27252. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART234578) == RCC_PERIPHCLK_USART234578)
  27253. 800bc58: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27254. 800bc5c: e9d3 2300 ldrd r2, r3, [r3]
  27255. 800bc60: f002 0302 and.w r3, r2, #2
  27256. 800bc64: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0
  27257. 800bc68: 2300 movs r3, #0
  27258. 800bc6a: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  27259. 800bc6e: e9d7 122c ldrd r1, r2, [r7, #176] @ 0xb0
  27260. 800bc72: 460b mov r3, r1
  27261. 800bc74: 4313 orrs r3, r2
  27262. 800bc76: d041 beq.n 800bcfc <HAL_RCCEx_PeriphCLKConfig+0xafc>
  27263. {
  27264. switch (PeriphClkInit->Usart234578ClockSelection)
  27265. 800bc78: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27266. 800bc7c: 6f9b ldr r3, [r3, #120] @ 0x78
  27267. 800bc7e: 2b05 cmp r3, #5
  27268. 800bc80: d824 bhi.n 800bccc <HAL_RCCEx_PeriphCLKConfig+0xacc>
  27269. 800bc82: a201 add r2, pc, #4 @ (adr r2, 800bc88 <HAL_RCCEx_PeriphCLKConfig+0xa88>)
  27270. 800bc84: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  27271. 800bc88: 0800bcd5 .word 0x0800bcd5
  27272. 800bc8c: 0800bca1 .word 0x0800bca1
  27273. 800bc90: 0800bcb7 .word 0x0800bcb7
  27274. 800bc94: 0800bcd5 .word 0x0800bcd5
  27275. 800bc98: 0800bcd5 .word 0x0800bcd5
  27276. 800bc9c: 0800bcd5 .word 0x0800bcd5
  27277. case RCC_USART234578CLKSOURCE_PCLK1: /* CD/D2 PCLK1 as clock source for USART2/3/4/5/7/8 */
  27278. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  27279. break;
  27280. case RCC_USART234578CLKSOURCE_PLL2: /* PLL2 is used as clock source for USART2/3/4/5/7/8 */
  27281. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  27282. 800bca0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27283. 800bca4: 3308 adds r3, #8
  27284. 800bca6: 2101 movs r1, #1
  27285. 800bca8: 4618 mov r0, r3
  27286. 800bcaa: f001 fe27 bl 800d8fc <RCCEx_PLL2_Config>
  27287. 800bcae: 4603 mov r3, r0
  27288. 800bcb0: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27289. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  27290. break;
  27291. 800bcb4: e00f b.n 800bcd6 <HAL_RCCEx_PeriphCLKConfig+0xad6>
  27292. case RCC_USART234578CLKSOURCE_PLL3: /* PLL3 is used as clock source for USART2/3/4/5/7/8 */
  27293. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  27294. 800bcb6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27295. 800bcba: 3328 adds r3, #40 @ 0x28
  27296. 800bcbc: 2101 movs r1, #1
  27297. 800bcbe: 4618 mov r0, r3
  27298. 800bcc0: f001 fece bl 800da60 <RCCEx_PLL3_Config>
  27299. 800bcc4: 4603 mov r3, r0
  27300. 800bcc6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27301. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  27302. break;
  27303. 800bcca: e004 b.n 800bcd6 <HAL_RCCEx_PeriphCLKConfig+0xad6>
  27304. /* LSE, oscillator is used as source of USART2/3/4/5/7/8 clock */
  27305. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  27306. break;
  27307. default:
  27308. ret = HAL_ERROR;
  27309. 800bccc: 2301 movs r3, #1
  27310. 800bcce: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27311. break;
  27312. 800bcd2: e000 b.n 800bcd6 <HAL_RCCEx_PeriphCLKConfig+0xad6>
  27313. break;
  27314. 800bcd4: bf00 nop
  27315. }
  27316. if (ret == HAL_OK)
  27317. 800bcd6: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27318. 800bcda: 2b00 cmp r3, #0
  27319. 800bcdc: d10a bne.n 800bcf4 <HAL_RCCEx_PeriphCLKConfig+0xaf4>
  27320. {
  27321. /* Set the source of USART2/3/4/5/7/8 clock */
  27322. __HAL_RCC_USART234578_CONFIG(PeriphClkInit->Usart234578ClockSelection);
  27323. 800bcde: 4b96 ldr r3, [pc, #600] @ (800bf38 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  27324. 800bce0: 6d5b ldr r3, [r3, #84] @ 0x54
  27325. 800bce2: f023 0107 bic.w r1, r3, #7
  27326. 800bce6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27327. 800bcea: 6f9b ldr r3, [r3, #120] @ 0x78
  27328. 800bcec: 4a92 ldr r2, [pc, #584] @ (800bf38 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  27329. 800bcee: 430b orrs r3, r1
  27330. 800bcf0: 6553 str r3, [r2, #84] @ 0x54
  27331. 800bcf2: e003 b.n 800bcfc <HAL_RCCEx_PeriphCLKConfig+0xafc>
  27332. }
  27333. else
  27334. {
  27335. /* set overall return value */
  27336. status = ret;
  27337. 800bcf4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27338. 800bcf8: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27339. }
  27340. }
  27341. /*-------------------------- LPUART1 Configuration -------------------------*/
  27342. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1)
  27343. 800bcfc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27344. 800bd00: e9d3 2300 ldrd r2, r3, [r3]
  27345. 800bd04: f002 0304 and.w r3, r2, #4
  27346. 800bd08: f8c7 30a8 str.w r3, [r7, #168] @ 0xa8
  27347. 800bd0c: 2300 movs r3, #0
  27348. 800bd0e: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  27349. 800bd12: e9d7 122a ldrd r1, r2, [r7, #168] @ 0xa8
  27350. 800bd16: 460b mov r3, r1
  27351. 800bd18: 4313 orrs r3, r2
  27352. 800bd1a: d044 beq.n 800bda6 <HAL_RCCEx_PeriphCLKConfig+0xba6>
  27353. {
  27354. switch (PeriphClkInit->Lpuart1ClockSelection)
  27355. 800bd1c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27356. 800bd20: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
  27357. 800bd24: 2b05 cmp r3, #5
  27358. 800bd26: d825 bhi.n 800bd74 <HAL_RCCEx_PeriphCLKConfig+0xb74>
  27359. 800bd28: a201 add r2, pc, #4 @ (adr r2, 800bd30 <HAL_RCCEx_PeriphCLKConfig+0xb30>)
  27360. 800bd2a: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  27361. 800bd2e: bf00 nop
  27362. 800bd30: 0800bd7d .word 0x0800bd7d
  27363. 800bd34: 0800bd49 .word 0x0800bd49
  27364. 800bd38: 0800bd5f .word 0x0800bd5f
  27365. 800bd3c: 0800bd7d .word 0x0800bd7d
  27366. 800bd40: 0800bd7d .word 0x0800bd7d
  27367. 800bd44: 0800bd7d .word 0x0800bd7d
  27368. case RCC_LPUART1CLKSOURCE_PCLK4: /* SRD/D3 PCLK1 (PCLK4) as clock source for LPUART1 */
  27369. /* LPUART1 clock source configuration done later after clock selection check */
  27370. break;
  27371. case RCC_LPUART1CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPUART1 */
  27372. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  27373. 800bd48: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27374. 800bd4c: 3308 adds r3, #8
  27375. 800bd4e: 2101 movs r1, #1
  27376. 800bd50: 4618 mov r0, r3
  27377. 800bd52: f001 fdd3 bl 800d8fc <RCCEx_PLL2_Config>
  27378. 800bd56: 4603 mov r3, r0
  27379. 800bd58: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27380. /* LPUART1 clock source configuration done later after clock selection check */
  27381. break;
  27382. 800bd5c: e00f b.n 800bd7e <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  27383. case RCC_LPUART1CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPUART1 */
  27384. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  27385. 800bd5e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27386. 800bd62: 3328 adds r3, #40 @ 0x28
  27387. 800bd64: 2101 movs r1, #1
  27388. 800bd66: 4618 mov r0, r3
  27389. 800bd68: f001 fe7a bl 800da60 <RCCEx_PLL3_Config>
  27390. 800bd6c: 4603 mov r3, r0
  27391. 800bd6e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27392. /* LPUART1 clock source configuration done later after clock selection check */
  27393. break;
  27394. 800bd72: e004 b.n 800bd7e <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  27395. /* LSE, oscillator is used as source of LPUART1 clock */
  27396. /* LPUART1 clock source configuration done later after clock selection check */
  27397. break;
  27398. default:
  27399. ret = HAL_ERROR;
  27400. 800bd74: 2301 movs r3, #1
  27401. 800bd76: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27402. break;
  27403. 800bd7a: e000 b.n 800bd7e <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  27404. break;
  27405. 800bd7c: bf00 nop
  27406. }
  27407. if (ret == HAL_OK)
  27408. 800bd7e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27409. 800bd82: 2b00 cmp r3, #0
  27410. 800bd84: d10b bne.n 800bd9e <HAL_RCCEx_PeriphCLKConfig+0xb9e>
  27411. {
  27412. /* Set the source of LPUART1 clock */
  27413. __HAL_RCC_LPUART1_CONFIG(PeriphClkInit->Lpuart1ClockSelection);
  27414. 800bd86: 4b6c ldr r3, [pc, #432] @ (800bf38 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  27415. 800bd88: 6d9b ldr r3, [r3, #88] @ 0x58
  27416. 800bd8a: f023 0107 bic.w r1, r3, #7
  27417. 800bd8e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27418. 800bd92: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
  27419. 800bd96: 4a68 ldr r2, [pc, #416] @ (800bf38 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  27420. 800bd98: 430b orrs r3, r1
  27421. 800bd9a: 6593 str r3, [r2, #88] @ 0x58
  27422. 800bd9c: e003 b.n 800bda6 <HAL_RCCEx_PeriphCLKConfig+0xba6>
  27423. }
  27424. else
  27425. {
  27426. /* set overall return value */
  27427. status = ret;
  27428. 800bd9e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27429. 800bda2: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27430. }
  27431. }
  27432. /*---------------------------- LPTIM1 configuration -------------------------------*/
  27433. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1)
  27434. 800bda6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27435. 800bdaa: e9d3 2300 ldrd r2, r3, [r3]
  27436. 800bdae: f002 0320 and.w r3, r2, #32
  27437. 800bdb2: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  27438. 800bdb6: 2300 movs r3, #0
  27439. 800bdb8: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  27440. 800bdbc: e9d7 1228 ldrd r1, r2, [r7, #160] @ 0xa0
  27441. 800bdc0: 460b mov r3, r1
  27442. 800bdc2: 4313 orrs r3, r2
  27443. 800bdc4: d055 beq.n 800be72 <HAL_RCCEx_PeriphCLKConfig+0xc72>
  27444. {
  27445. switch (PeriphClkInit->Lptim1ClockSelection)
  27446. 800bdc6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27447. 800bdca: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  27448. 800bdce: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  27449. 800bdd2: d033 beq.n 800be3c <HAL_RCCEx_PeriphCLKConfig+0xc3c>
  27450. 800bdd4: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  27451. 800bdd8: d82c bhi.n 800be34 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  27452. 800bdda: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  27453. 800bdde: d02f beq.n 800be40 <HAL_RCCEx_PeriphCLKConfig+0xc40>
  27454. 800bde0: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  27455. 800bde4: d826 bhi.n 800be34 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  27456. 800bde6: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  27457. 800bdea: d02b beq.n 800be44 <HAL_RCCEx_PeriphCLKConfig+0xc44>
  27458. 800bdec: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  27459. 800bdf0: d820 bhi.n 800be34 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  27460. 800bdf2: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  27461. 800bdf6: d012 beq.n 800be1e <HAL_RCCEx_PeriphCLKConfig+0xc1e>
  27462. 800bdf8: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  27463. 800bdfc: d81a bhi.n 800be34 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  27464. 800bdfe: 2b00 cmp r3, #0
  27465. 800be00: d022 beq.n 800be48 <HAL_RCCEx_PeriphCLKConfig+0xc48>
  27466. 800be02: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  27467. 800be06: d115 bne.n 800be34 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  27468. /* LPTIM1 clock source configuration done later after clock selection check */
  27469. break;
  27470. case RCC_LPTIM1CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM1*/
  27471. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  27472. 800be08: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27473. 800be0c: 3308 adds r3, #8
  27474. 800be0e: 2100 movs r1, #0
  27475. 800be10: 4618 mov r0, r3
  27476. 800be12: f001 fd73 bl 800d8fc <RCCEx_PLL2_Config>
  27477. 800be16: 4603 mov r3, r0
  27478. 800be18: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27479. /* LPTIM1 clock source configuration done later after clock selection check */
  27480. break;
  27481. 800be1c: e015 b.n 800be4a <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  27482. case RCC_LPTIM1CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM1*/
  27483. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  27484. 800be1e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27485. 800be22: 3328 adds r3, #40 @ 0x28
  27486. 800be24: 2102 movs r1, #2
  27487. 800be26: 4618 mov r0, r3
  27488. 800be28: f001 fe1a bl 800da60 <RCCEx_PLL3_Config>
  27489. 800be2c: 4603 mov r3, r0
  27490. 800be2e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27491. /* LPTIM1 clock source configuration done later after clock selection check */
  27492. break;
  27493. 800be32: e00a b.n 800be4a <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  27494. /* HSI, HSE, or CSI oscillator is used as source of LPTIM1 clock */
  27495. /* LPTIM1 clock source configuration done later after clock selection check */
  27496. break;
  27497. default:
  27498. ret = HAL_ERROR;
  27499. 800be34: 2301 movs r3, #1
  27500. 800be36: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27501. break;
  27502. 800be3a: e006 b.n 800be4a <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  27503. break;
  27504. 800be3c: bf00 nop
  27505. 800be3e: e004 b.n 800be4a <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  27506. break;
  27507. 800be40: bf00 nop
  27508. 800be42: e002 b.n 800be4a <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  27509. break;
  27510. 800be44: bf00 nop
  27511. 800be46: e000 b.n 800be4a <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  27512. break;
  27513. 800be48: bf00 nop
  27514. }
  27515. if (ret == HAL_OK)
  27516. 800be4a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27517. 800be4e: 2b00 cmp r3, #0
  27518. 800be50: d10b bne.n 800be6a <HAL_RCCEx_PeriphCLKConfig+0xc6a>
  27519. {
  27520. /* Set the source of LPTIM1 clock*/
  27521. __HAL_RCC_LPTIM1_CONFIG(PeriphClkInit->Lptim1ClockSelection);
  27522. 800be52: 4b39 ldr r3, [pc, #228] @ (800bf38 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  27523. 800be54: 6d5b ldr r3, [r3, #84] @ 0x54
  27524. 800be56: f023 41e0 bic.w r1, r3, #1879048192 @ 0x70000000
  27525. 800be5a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27526. 800be5e: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  27527. 800be62: 4a35 ldr r2, [pc, #212] @ (800bf38 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  27528. 800be64: 430b orrs r3, r1
  27529. 800be66: 6553 str r3, [r2, #84] @ 0x54
  27530. 800be68: e003 b.n 800be72 <HAL_RCCEx_PeriphCLKConfig+0xc72>
  27531. }
  27532. else
  27533. {
  27534. /* set overall return value */
  27535. status = ret;
  27536. 800be6a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27537. 800be6e: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27538. }
  27539. }
  27540. /*---------------------------- LPTIM2 configuration -------------------------------*/
  27541. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2)
  27542. 800be72: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27543. 800be76: e9d3 2300 ldrd r2, r3, [r3]
  27544. 800be7a: f002 0340 and.w r3, r2, #64 @ 0x40
  27545. 800be7e: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  27546. 800be82: 2300 movs r3, #0
  27547. 800be84: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  27548. 800be88: e9d7 1226 ldrd r1, r2, [r7, #152] @ 0x98
  27549. 800be8c: 460b mov r3, r1
  27550. 800be8e: 4313 orrs r3, r2
  27551. 800be90: d058 beq.n 800bf44 <HAL_RCCEx_PeriphCLKConfig+0xd44>
  27552. {
  27553. switch (PeriphClkInit->Lptim2ClockSelection)
  27554. 800be92: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27555. 800be96: f8d3 309c ldr.w r3, [r3, #156] @ 0x9c
  27556. 800be9a: f5b3 5fa0 cmp.w r3, #5120 @ 0x1400
  27557. 800be9e: d033 beq.n 800bf08 <HAL_RCCEx_PeriphCLKConfig+0xd08>
  27558. 800bea0: f5b3 5fa0 cmp.w r3, #5120 @ 0x1400
  27559. 800bea4: d82c bhi.n 800bf00 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  27560. 800bea6: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  27561. 800beaa: d02f beq.n 800bf0c <HAL_RCCEx_PeriphCLKConfig+0xd0c>
  27562. 800beac: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  27563. 800beb0: d826 bhi.n 800bf00 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  27564. 800beb2: f5b3 6f40 cmp.w r3, #3072 @ 0xc00
  27565. 800beb6: d02b beq.n 800bf10 <HAL_RCCEx_PeriphCLKConfig+0xd10>
  27566. 800beb8: f5b3 6f40 cmp.w r3, #3072 @ 0xc00
  27567. 800bebc: d820 bhi.n 800bf00 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  27568. 800bebe: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  27569. 800bec2: d012 beq.n 800beea <HAL_RCCEx_PeriphCLKConfig+0xcea>
  27570. 800bec4: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  27571. 800bec8: d81a bhi.n 800bf00 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  27572. 800beca: 2b00 cmp r3, #0
  27573. 800becc: d022 beq.n 800bf14 <HAL_RCCEx_PeriphCLKConfig+0xd14>
  27574. 800bece: f5b3 6f80 cmp.w r3, #1024 @ 0x400
  27575. 800bed2: d115 bne.n 800bf00 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  27576. /* LPTIM2 clock source configuration done later after clock selection check */
  27577. break;
  27578. case RCC_LPTIM2CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM2*/
  27579. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  27580. 800bed4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27581. 800bed8: 3308 adds r3, #8
  27582. 800beda: 2100 movs r1, #0
  27583. 800bedc: 4618 mov r0, r3
  27584. 800bede: f001 fd0d bl 800d8fc <RCCEx_PLL2_Config>
  27585. 800bee2: 4603 mov r3, r0
  27586. 800bee4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27587. /* LPTIM2 clock source configuration done later after clock selection check */
  27588. break;
  27589. 800bee8: e015 b.n 800bf16 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  27590. case RCC_LPTIM2CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM2*/
  27591. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  27592. 800beea: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27593. 800beee: 3328 adds r3, #40 @ 0x28
  27594. 800bef0: 2102 movs r1, #2
  27595. 800bef2: 4618 mov r0, r3
  27596. 800bef4: f001 fdb4 bl 800da60 <RCCEx_PLL3_Config>
  27597. 800bef8: 4603 mov r3, r0
  27598. 800befa: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27599. /* LPTIM2 clock source configuration done later after clock selection check */
  27600. break;
  27601. 800befe: e00a b.n 800bf16 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  27602. /* HSI, HSE, or CSI oscillator is used as source of LPTIM2 clock */
  27603. /* LPTIM2 clock source configuration done later after clock selection check */
  27604. break;
  27605. default:
  27606. ret = HAL_ERROR;
  27607. 800bf00: 2301 movs r3, #1
  27608. 800bf02: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27609. break;
  27610. 800bf06: e006 b.n 800bf16 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  27611. break;
  27612. 800bf08: bf00 nop
  27613. 800bf0a: e004 b.n 800bf16 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  27614. break;
  27615. 800bf0c: bf00 nop
  27616. 800bf0e: e002 b.n 800bf16 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  27617. break;
  27618. 800bf10: bf00 nop
  27619. 800bf12: e000 b.n 800bf16 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  27620. break;
  27621. 800bf14: bf00 nop
  27622. }
  27623. if (ret == HAL_OK)
  27624. 800bf16: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27625. 800bf1a: 2b00 cmp r3, #0
  27626. 800bf1c: d10e bne.n 800bf3c <HAL_RCCEx_PeriphCLKConfig+0xd3c>
  27627. {
  27628. /* Set the source of LPTIM2 clock*/
  27629. __HAL_RCC_LPTIM2_CONFIG(PeriphClkInit->Lptim2ClockSelection);
  27630. 800bf1e: 4b06 ldr r3, [pc, #24] @ (800bf38 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  27631. 800bf20: 6d9b ldr r3, [r3, #88] @ 0x58
  27632. 800bf22: f423 51e0 bic.w r1, r3, #7168 @ 0x1c00
  27633. 800bf26: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27634. 800bf2a: f8d3 309c ldr.w r3, [r3, #156] @ 0x9c
  27635. 800bf2e: 4a02 ldr r2, [pc, #8] @ (800bf38 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  27636. 800bf30: 430b orrs r3, r1
  27637. 800bf32: 6593 str r3, [r2, #88] @ 0x58
  27638. 800bf34: e006 b.n 800bf44 <HAL_RCCEx_PeriphCLKConfig+0xd44>
  27639. 800bf36: bf00 nop
  27640. 800bf38: 58024400 .word 0x58024400
  27641. }
  27642. else
  27643. {
  27644. /* set overall return value */
  27645. status = ret;
  27646. 800bf3c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27647. 800bf40: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27648. }
  27649. }
  27650. /*---------------------------- LPTIM345 configuration -------------------------------*/
  27651. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM345) == RCC_PERIPHCLK_LPTIM345)
  27652. 800bf44: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27653. 800bf48: e9d3 2300 ldrd r2, r3, [r3]
  27654. 800bf4c: f002 0380 and.w r3, r2, #128 @ 0x80
  27655. 800bf50: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  27656. 800bf54: 2300 movs r3, #0
  27657. 800bf56: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  27658. 800bf5a: e9d7 1224 ldrd r1, r2, [r7, #144] @ 0x90
  27659. 800bf5e: 460b mov r3, r1
  27660. 800bf60: 4313 orrs r3, r2
  27661. 800bf62: d055 beq.n 800c010 <HAL_RCCEx_PeriphCLKConfig+0xe10>
  27662. {
  27663. switch (PeriphClkInit->Lptim345ClockSelection)
  27664. 800bf64: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27665. 800bf68: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  27666. 800bf6c: f5b3 4f20 cmp.w r3, #40960 @ 0xa000
  27667. 800bf70: d033 beq.n 800bfda <HAL_RCCEx_PeriphCLKConfig+0xdda>
  27668. 800bf72: f5b3 4f20 cmp.w r3, #40960 @ 0xa000
  27669. 800bf76: d82c bhi.n 800bfd2 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  27670. 800bf78: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  27671. 800bf7c: d02f beq.n 800bfde <HAL_RCCEx_PeriphCLKConfig+0xdde>
  27672. 800bf7e: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  27673. 800bf82: d826 bhi.n 800bfd2 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  27674. 800bf84: f5b3 4fc0 cmp.w r3, #24576 @ 0x6000
  27675. 800bf88: d02b beq.n 800bfe2 <HAL_RCCEx_PeriphCLKConfig+0xde2>
  27676. 800bf8a: f5b3 4fc0 cmp.w r3, #24576 @ 0x6000
  27677. 800bf8e: d820 bhi.n 800bfd2 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  27678. 800bf90: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  27679. 800bf94: d012 beq.n 800bfbc <HAL_RCCEx_PeriphCLKConfig+0xdbc>
  27680. 800bf96: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  27681. 800bf9a: d81a bhi.n 800bfd2 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  27682. 800bf9c: 2b00 cmp r3, #0
  27683. 800bf9e: d022 beq.n 800bfe6 <HAL_RCCEx_PeriphCLKConfig+0xde6>
  27684. 800bfa0: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  27685. 800bfa4: d115 bne.n 800bfd2 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  27686. case RCC_LPTIM345CLKSOURCE_PCLK4: /* SRD/D3 PCLK1 (PCLK4) as clock source for LPTIM3/4/5 */
  27687. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  27688. break;
  27689. case RCC_LPTIM345CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM3/4/5 */
  27690. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  27691. 800bfa6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27692. 800bfaa: 3308 adds r3, #8
  27693. 800bfac: 2100 movs r1, #0
  27694. 800bfae: 4618 mov r0, r3
  27695. 800bfb0: f001 fca4 bl 800d8fc <RCCEx_PLL2_Config>
  27696. 800bfb4: 4603 mov r3, r0
  27697. 800bfb6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27698. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  27699. break;
  27700. 800bfba: e015 b.n 800bfe8 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  27701. case RCC_LPTIM345CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM3/4/5 */
  27702. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  27703. 800bfbc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27704. 800bfc0: 3328 adds r3, #40 @ 0x28
  27705. 800bfc2: 2102 movs r1, #2
  27706. 800bfc4: 4618 mov r0, r3
  27707. 800bfc6: f001 fd4b bl 800da60 <RCCEx_PLL3_Config>
  27708. 800bfca: 4603 mov r3, r0
  27709. 800bfcc: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27710. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  27711. break;
  27712. 800bfd0: e00a b.n 800bfe8 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  27713. /* HSI, HSE, or CSI oscillator is used as source of LPTIM3/4/5 clock */
  27714. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  27715. break;
  27716. default:
  27717. ret = HAL_ERROR;
  27718. 800bfd2: 2301 movs r3, #1
  27719. 800bfd4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27720. break;
  27721. 800bfd8: e006 b.n 800bfe8 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  27722. break;
  27723. 800bfda: bf00 nop
  27724. 800bfdc: e004 b.n 800bfe8 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  27725. break;
  27726. 800bfde: bf00 nop
  27727. 800bfe0: e002 b.n 800bfe8 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  27728. break;
  27729. 800bfe2: bf00 nop
  27730. 800bfe4: e000 b.n 800bfe8 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  27731. break;
  27732. 800bfe6: bf00 nop
  27733. }
  27734. if (ret == HAL_OK)
  27735. 800bfe8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27736. 800bfec: 2b00 cmp r3, #0
  27737. 800bfee: d10b bne.n 800c008 <HAL_RCCEx_PeriphCLKConfig+0xe08>
  27738. {
  27739. /* Set the source of LPTIM3/4/5 clock */
  27740. __HAL_RCC_LPTIM345_CONFIG(PeriphClkInit->Lptim345ClockSelection);
  27741. 800bff0: 4bbb ldr r3, [pc, #748] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  27742. 800bff2: 6d9b ldr r3, [r3, #88] @ 0x58
  27743. 800bff4: f423 4160 bic.w r1, r3, #57344 @ 0xe000
  27744. 800bff8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27745. 800bffc: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  27746. 800c000: 4ab7 ldr r2, [pc, #732] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  27747. 800c002: 430b orrs r3, r1
  27748. 800c004: 6593 str r3, [r2, #88] @ 0x58
  27749. 800c006: e003 b.n 800c010 <HAL_RCCEx_PeriphCLKConfig+0xe10>
  27750. }
  27751. else
  27752. {
  27753. /* set overall return value */
  27754. status = ret;
  27755. 800c008: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27756. 800c00c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27757. __HAL_RCC_I2C1235_CONFIG(PeriphClkInit->I2c1235ClockSelection);
  27758. }
  27759. #else
  27760. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C123) == RCC_PERIPHCLK_I2C123)
  27761. 800c010: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27762. 800c014: e9d3 2300 ldrd r2, r3, [r3]
  27763. 800c018: f002 0308 and.w r3, r2, #8
  27764. 800c01c: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  27765. 800c020: 2300 movs r3, #0
  27766. 800c022: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  27767. 800c026: e9d7 1222 ldrd r1, r2, [r7, #136] @ 0x88
  27768. 800c02a: 460b mov r3, r1
  27769. 800c02c: 4313 orrs r3, r2
  27770. 800c02e: d01e beq.n 800c06e <HAL_RCCEx_PeriphCLKConfig+0xe6e>
  27771. {
  27772. /* Check the parameters */
  27773. assert_param(IS_RCC_I2C123CLKSOURCE(PeriphClkInit->I2c123ClockSelection));
  27774. if ((PeriphClkInit->I2c123ClockSelection) == RCC_I2C123CLKSOURCE_PLL3)
  27775. 800c030: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27776. 800c034: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  27777. 800c038: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  27778. 800c03c: d10c bne.n 800c058 <HAL_RCCEx_PeriphCLKConfig+0xe58>
  27779. {
  27780. if (RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE) != HAL_OK)
  27781. 800c03e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27782. 800c042: 3328 adds r3, #40 @ 0x28
  27783. 800c044: 2102 movs r1, #2
  27784. 800c046: 4618 mov r0, r3
  27785. 800c048: f001 fd0a bl 800da60 <RCCEx_PLL3_Config>
  27786. 800c04c: 4603 mov r3, r0
  27787. 800c04e: 2b00 cmp r3, #0
  27788. 800c050: d002 beq.n 800c058 <HAL_RCCEx_PeriphCLKConfig+0xe58>
  27789. {
  27790. status = HAL_ERROR;
  27791. 800c052: 2301 movs r3, #1
  27792. 800c054: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27793. }
  27794. }
  27795. __HAL_RCC_I2C123_CONFIG(PeriphClkInit->I2c123ClockSelection);
  27796. 800c058: 4ba1 ldr r3, [pc, #644] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  27797. 800c05a: 6d5b ldr r3, [r3, #84] @ 0x54
  27798. 800c05c: f423 5140 bic.w r1, r3, #12288 @ 0x3000
  27799. 800c060: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27800. 800c064: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  27801. 800c068: 4a9d ldr r2, [pc, #628] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  27802. 800c06a: 430b orrs r3, r1
  27803. 800c06c: 6553 str r3, [r2, #84] @ 0x54
  27804. }
  27805. #endif /* I2C5 */
  27806. /*------------------------------ I2C4 Configuration ------------------------*/
  27807. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C4) == RCC_PERIPHCLK_I2C4)
  27808. 800c06e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27809. 800c072: e9d3 2300 ldrd r2, r3, [r3]
  27810. 800c076: f002 0310 and.w r3, r2, #16
  27811. 800c07a: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  27812. 800c07e: 2300 movs r3, #0
  27813. 800c080: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  27814. 800c084: e9d7 1220 ldrd r1, r2, [r7, #128] @ 0x80
  27815. 800c088: 460b mov r3, r1
  27816. 800c08a: 4313 orrs r3, r2
  27817. 800c08c: d01e beq.n 800c0cc <HAL_RCCEx_PeriphCLKConfig+0xecc>
  27818. {
  27819. /* Check the parameters */
  27820. assert_param(IS_RCC_I2C4CLKSOURCE(PeriphClkInit->I2c4ClockSelection));
  27821. if ((PeriphClkInit->I2c4ClockSelection) == RCC_I2C4CLKSOURCE_PLL3)
  27822. 800c08e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27823. 800c092: f8d3 3098 ldr.w r3, [r3, #152] @ 0x98
  27824. 800c096: f5b3 7f80 cmp.w r3, #256 @ 0x100
  27825. 800c09a: d10c bne.n 800c0b6 <HAL_RCCEx_PeriphCLKConfig+0xeb6>
  27826. {
  27827. if (RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE) != HAL_OK)
  27828. 800c09c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27829. 800c0a0: 3328 adds r3, #40 @ 0x28
  27830. 800c0a2: 2102 movs r1, #2
  27831. 800c0a4: 4618 mov r0, r3
  27832. 800c0a6: f001 fcdb bl 800da60 <RCCEx_PLL3_Config>
  27833. 800c0aa: 4603 mov r3, r0
  27834. 800c0ac: 2b00 cmp r3, #0
  27835. 800c0ae: d002 beq.n 800c0b6 <HAL_RCCEx_PeriphCLKConfig+0xeb6>
  27836. {
  27837. status = HAL_ERROR;
  27838. 800c0b0: 2301 movs r3, #1
  27839. 800c0b2: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27840. }
  27841. }
  27842. __HAL_RCC_I2C4_CONFIG(PeriphClkInit->I2c4ClockSelection);
  27843. 800c0b6: 4b8a ldr r3, [pc, #552] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  27844. 800c0b8: 6d9b ldr r3, [r3, #88] @ 0x58
  27845. 800c0ba: f423 7140 bic.w r1, r3, #768 @ 0x300
  27846. 800c0be: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27847. 800c0c2: f8d3 3098 ldr.w r3, [r3, #152] @ 0x98
  27848. 800c0c6: 4a86 ldr r2, [pc, #536] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  27849. 800c0c8: 430b orrs r3, r1
  27850. 800c0ca: 6593 str r3, [r2, #88] @ 0x58
  27851. }
  27852. /*---------------------------- ADC configuration -------------------------------*/
  27853. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC)
  27854. 800c0cc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27855. 800c0d0: e9d3 2300 ldrd r2, r3, [r3]
  27856. 800c0d4: f402 2300 and.w r3, r2, #524288 @ 0x80000
  27857. 800c0d8: 67bb str r3, [r7, #120] @ 0x78
  27858. 800c0da: 2300 movs r3, #0
  27859. 800c0dc: 67fb str r3, [r7, #124] @ 0x7c
  27860. 800c0de: e9d7 121e ldrd r1, r2, [r7, #120] @ 0x78
  27861. 800c0e2: 460b mov r3, r1
  27862. 800c0e4: 4313 orrs r3, r2
  27863. 800c0e6: d03e beq.n 800c166 <HAL_RCCEx_PeriphCLKConfig+0xf66>
  27864. {
  27865. switch (PeriphClkInit->AdcClockSelection)
  27866. 800c0e8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27867. 800c0ec: f8d3 30a4 ldr.w r3, [r3, #164] @ 0xa4
  27868. 800c0f0: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  27869. 800c0f4: d022 beq.n 800c13c <HAL_RCCEx_PeriphCLKConfig+0xf3c>
  27870. 800c0f6: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  27871. 800c0fa: d81b bhi.n 800c134 <HAL_RCCEx_PeriphCLKConfig+0xf34>
  27872. 800c0fc: 2b00 cmp r3, #0
  27873. 800c0fe: d003 beq.n 800c108 <HAL_RCCEx_PeriphCLKConfig+0xf08>
  27874. 800c100: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  27875. 800c104: d00b beq.n 800c11e <HAL_RCCEx_PeriphCLKConfig+0xf1e>
  27876. 800c106: e015 b.n 800c134 <HAL_RCCEx_PeriphCLKConfig+0xf34>
  27877. {
  27878. case RCC_ADCCLKSOURCE_PLL2: /* PLL2 is used as clock source for ADC*/
  27879. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  27880. 800c108: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27881. 800c10c: 3308 adds r3, #8
  27882. 800c10e: 2100 movs r1, #0
  27883. 800c110: 4618 mov r0, r3
  27884. 800c112: f001 fbf3 bl 800d8fc <RCCEx_PLL2_Config>
  27885. 800c116: 4603 mov r3, r0
  27886. 800c118: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27887. /* ADC clock source configuration done later after clock selection check */
  27888. break;
  27889. 800c11c: e00f b.n 800c13e <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  27890. case RCC_ADCCLKSOURCE_PLL3: /* PLL3 is used as clock source for ADC*/
  27891. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  27892. 800c11e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27893. 800c122: 3328 adds r3, #40 @ 0x28
  27894. 800c124: 2102 movs r1, #2
  27895. 800c126: 4618 mov r0, r3
  27896. 800c128: f001 fc9a bl 800da60 <RCCEx_PLL3_Config>
  27897. 800c12c: 4603 mov r3, r0
  27898. 800c12e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27899. /* ADC clock source configuration done later after clock selection check */
  27900. break;
  27901. 800c132: e004 b.n 800c13e <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  27902. /* HSI, HSE, or CSI oscillator is used as source of ADC clock */
  27903. /* ADC clock source configuration done later after clock selection check */
  27904. break;
  27905. default:
  27906. ret = HAL_ERROR;
  27907. 800c134: 2301 movs r3, #1
  27908. 800c136: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27909. break;
  27910. 800c13a: e000 b.n 800c13e <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  27911. break;
  27912. 800c13c: bf00 nop
  27913. }
  27914. if (ret == HAL_OK)
  27915. 800c13e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27916. 800c142: 2b00 cmp r3, #0
  27917. 800c144: d10b bne.n 800c15e <HAL_RCCEx_PeriphCLKConfig+0xf5e>
  27918. {
  27919. /* Set the source of ADC clock*/
  27920. __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection);
  27921. 800c146: 4b66 ldr r3, [pc, #408] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  27922. 800c148: 6d9b ldr r3, [r3, #88] @ 0x58
  27923. 800c14a: f423 3140 bic.w r1, r3, #196608 @ 0x30000
  27924. 800c14e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27925. 800c152: f8d3 30a4 ldr.w r3, [r3, #164] @ 0xa4
  27926. 800c156: 4a62 ldr r2, [pc, #392] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  27927. 800c158: 430b orrs r3, r1
  27928. 800c15a: 6593 str r3, [r2, #88] @ 0x58
  27929. 800c15c: e003 b.n 800c166 <HAL_RCCEx_PeriphCLKConfig+0xf66>
  27930. }
  27931. else
  27932. {
  27933. /* set overall return value */
  27934. status = ret;
  27935. 800c15e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27936. 800c162: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27937. }
  27938. }
  27939. /*------------------------------ USB Configuration -------------------------*/
  27940. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB)
  27941. 800c166: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27942. 800c16a: e9d3 2300 ldrd r2, r3, [r3]
  27943. 800c16e: f402 2380 and.w r3, r2, #262144 @ 0x40000
  27944. 800c172: 673b str r3, [r7, #112] @ 0x70
  27945. 800c174: 2300 movs r3, #0
  27946. 800c176: 677b str r3, [r7, #116] @ 0x74
  27947. 800c178: e9d7 121c ldrd r1, r2, [r7, #112] @ 0x70
  27948. 800c17c: 460b mov r3, r1
  27949. 800c17e: 4313 orrs r3, r2
  27950. 800c180: d03b beq.n 800c1fa <HAL_RCCEx_PeriphCLKConfig+0xffa>
  27951. {
  27952. switch (PeriphClkInit->UsbClockSelection)
  27953. 800c182: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27954. 800c186: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  27955. 800c18a: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  27956. 800c18e: d01f beq.n 800c1d0 <HAL_RCCEx_PeriphCLKConfig+0xfd0>
  27957. 800c190: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  27958. 800c194: d818 bhi.n 800c1c8 <HAL_RCCEx_PeriphCLKConfig+0xfc8>
  27959. 800c196: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  27960. 800c19a: d003 beq.n 800c1a4 <HAL_RCCEx_PeriphCLKConfig+0xfa4>
  27961. 800c19c: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  27962. 800c1a0: d007 beq.n 800c1b2 <HAL_RCCEx_PeriphCLKConfig+0xfb2>
  27963. 800c1a2: e011 b.n 800c1c8 <HAL_RCCEx_PeriphCLKConfig+0xfc8>
  27964. {
  27965. case RCC_USBCLKSOURCE_PLL: /* PLL is used as clock source for USB*/
  27966. /* Enable USB Clock output generated form System USB . */
  27967. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  27968. 800c1a4: 4b4e ldr r3, [pc, #312] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  27969. 800c1a6: 6adb ldr r3, [r3, #44] @ 0x2c
  27970. 800c1a8: 4a4d ldr r2, [pc, #308] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  27971. 800c1aa: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  27972. 800c1ae: 62d3 str r3, [r2, #44] @ 0x2c
  27973. /* USB clock source configuration done later after clock selection check */
  27974. break;
  27975. 800c1b0: e00f b.n 800c1d2 <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  27976. case RCC_USBCLKSOURCE_PLL3: /* PLL3 is used as clock source for USB*/
  27977. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  27978. 800c1b2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27979. 800c1b6: 3328 adds r3, #40 @ 0x28
  27980. 800c1b8: 2101 movs r1, #1
  27981. 800c1ba: 4618 mov r0, r3
  27982. 800c1bc: f001 fc50 bl 800da60 <RCCEx_PLL3_Config>
  27983. 800c1c0: 4603 mov r3, r0
  27984. 800c1c2: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27985. /* USB clock source configuration done later after clock selection check */
  27986. break;
  27987. 800c1c6: e004 b.n 800c1d2 <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  27988. /* HSI48 oscillator is used as source of USB clock */
  27989. /* USB clock source configuration done later after clock selection check */
  27990. break;
  27991. default:
  27992. ret = HAL_ERROR;
  27993. 800c1c8: 2301 movs r3, #1
  27994. 800c1ca: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27995. break;
  27996. 800c1ce: e000 b.n 800c1d2 <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  27997. break;
  27998. 800c1d0: bf00 nop
  27999. }
  28000. if (ret == HAL_OK)
  28001. 800c1d2: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28002. 800c1d6: 2b00 cmp r3, #0
  28003. 800c1d8: d10b bne.n 800c1f2 <HAL_RCCEx_PeriphCLKConfig+0xff2>
  28004. {
  28005. /* Set the source of USB clock*/
  28006. __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection);
  28007. 800c1da: 4b41 ldr r3, [pc, #260] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  28008. 800c1dc: 6d5b ldr r3, [r3, #84] @ 0x54
  28009. 800c1de: f423 1140 bic.w r1, r3, #3145728 @ 0x300000
  28010. 800c1e2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28011. 800c1e6: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  28012. 800c1ea: 4a3d ldr r2, [pc, #244] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  28013. 800c1ec: 430b orrs r3, r1
  28014. 800c1ee: 6553 str r3, [r2, #84] @ 0x54
  28015. 800c1f0: e003 b.n 800c1fa <HAL_RCCEx_PeriphCLKConfig+0xffa>
  28016. }
  28017. else
  28018. {
  28019. /* set overall return value */
  28020. status = ret;
  28021. 800c1f2: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28022. 800c1f6: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28023. }
  28024. }
  28025. /*------------------------------------- SDMMC Configuration ------------------------------------*/
  28026. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDMMC) == RCC_PERIPHCLK_SDMMC)
  28027. 800c1fa: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28028. 800c1fe: e9d3 2300 ldrd r2, r3, [r3]
  28029. 800c202: f402 3380 and.w r3, r2, #65536 @ 0x10000
  28030. 800c206: 66bb str r3, [r7, #104] @ 0x68
  28031. 800c208: 2300 movs r3, #0
  28032. 800c20a: 66fb str r3, [r7, #108] @ 0x6c
  28033. 800c20c: e9d7 121a ldrd r1, r2, [r7, #104] @ 0x68
  28034. 800c210: 460b mov r3, r1
  28035. 800c212: 4313 orrs r3, r2
  28036. 800c214: d031 beq.n 800c27a <HAL_RCCEx_PeriphCLKConfig+0x107a>
  28037. {
  28038. /* Check the parameters */
  28039. assert_param(IS_RCC_SDMMC(PeriphClkInit->SdmmcClockSelection));
  28040. switch (PeriphClkInit->SdmmcClockSelection)
  28041. 800c216: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28042. 800c21a: 6d1b ldr r3, [r3, #80] @ 0x50
  28043. 800c21c: 2b00 cmp r3, #0
  28044. 800c21e: d003 beq.n 800c228 <HAL_RCCEx_PeriphCLKConfig+0x1028>
  28045. 800c220: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  28046. 800c224: d007 beq.n 800c236 <HAL_RCCEx_PeriphCLKConfig+0x1036>
  28047. 800c226: e011 b.n 800c24c <HAL_RCCEx_PeriphCLKConfig+0x104c>
  28048. {
  28049. case RCC_SDMMCCLKSOURCE_PLL: /* PLL is used as clock source for SDMMC*/
  28050. /* Enable SDMMC Clock output generated form System PLL . */
  28051. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  28052. 800c228: 4b2d ldr r3, [pc, #180] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  28053. 800c22a: 6adb ldr r3, [r3, #44] @ 0x2c
  28054. 800c22c: 4a2c ldr r2, [pc, #176] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  28055. 800c22e: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  28056. 800c232: 62d3 str r3, [r2, #44] @ 0x2c
  28057. /* SDMMC clock source configuration done later after clock selection check */
  28058. break;
  28059. 800c234: e00e b.n 800c254 <HAL_RCCEx_PeriphCLKConfig+0x1054>
  28060. case RCC_SDMMCCLKSOURCE_PLL2: /* PLL2 is used as clock source for SDMMC*/
  28061. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  28062. 800c236: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28063. 800c23a: 3308 adds r3, #8
  28064. 800c23c: 2102 movs r1, #2
  28065. 800c23e: 4618 mov r0, r3
  28066. 800c240: f001 fb5c bl 800d8fc <RCCEx_PLL2_Config>
  28067. 800c244: 4603 mov r3, r0
  28068. 800c246: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28069. /* SDMMC clock source configuration done later after clock selection check */
  28070. break;
  28071. 800c24a: e003 b.n 800c254 <HAL_RCCEx_PeriphCLKConfig+0x1054>
  28072. default:
  28073. ret = HAL_ERROR;
  28074. 800c24c: 2301 movs r3, #1
  28075. 800c24e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28076. break;
  28077. 800c252: bf00 nop
  28078. }
  28079. if (ret == HAL_OK)
  28080. 800c254: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28081. 800c258: 2b00 cmp r3, #0
  28082. 800c25a: d10a bne.n 800c272 <HAL_RCCEx_PeriphCLKConfig+0x1072>
  28083. {
  28084. /* Set the source of SDMMC clock*/
  28085. __HAL_RCC_SDMMC_CONFIG(PeriphClkInit->SdmmcClockSelection);
  28086. 800c25c: 4b20 ldr r3, [pc, #128] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  28087. 800c25e: 6cdb ldr r3, [r3, #76] @ 0x4c
  28088. 800c260: f423 3180 bic.w r1, r3, #65536 @ 0x10000
  28089. 800c264: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28090. 800c268: 6d1b ldr r3, [r3, #80] @ 0x50
  28091. 800c26a: 4a1d ldr r2, [pc, #116] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  28092. 800c26c: 430b orrs r3, r1
  28093. 800c26e: 64d3 str r3, [r2, #76] @ 0x4c
  28094. 800c270: e003 b.n 800c27a <HAL_RCCEx_PeriphCLKConfig+0x107a>
  28095. }
  28096. else
  28097. {
  28098. /* set overall return value */
  28099. status = ret;
  28100. 800c272: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28101. 800c276: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28102. }
  28103. }
  28104. #endif /* LTDC */
  28105. /*------------------------------ RNG Configuration -------------------------*/
  28106. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG)
  28107. 800c27a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28108. 800c27e: e9d3 2300 ldrd r2, r3, [r3]
  28109. 800c282: f402 3300 and.w r3, r2, #131072 @ 0x20000
  28110. 800c286: 663b str r3, [r7, #96] @ 0x60
  28111. 800c288: 2300 movs r3, #0
  28112. 800c28a: 667b str r3, [r7, #100] @ 0x64
  28113. 800c28c: e9d7 1218 ldrd r1, r2, [r7, #96] @ 0x60
  28114. 800c290: 460b mov r3, r1
  28115. 800c292: 4313 orrs r3, r2
  28116. 800c294: d03b beq.n 800c30e <HAL_RCCEx_PeriphCLKConfig+0x110e>
  28117. {
  28118. switch (PeriphClkInit->RngClockSelection)
  28119. 800c296: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28120. 800c29a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  28121. 800c29e: f5b3 7f40 cmp.w r3, #768 @ 0x300
  28122. 800c2a2: d018 beq.n 800c2d6 <HAL_RCCEx_PeriphCLKConfig+0x10d6>
  28123. 800c2a4: f5b3 7f40 cmp.w r3, #768 @ 0x300
  28124. 800c2a8: d811 bhi.n 800c2ce <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  28125. 800c2aa: f5b3 7f00 cmp.w r3, #512 @ 0x200
  28126. 800c2ae: d014 beq.n 800c2da <HAL_RCCEx_PeriphCLKConfig+0x10da>
  28127. 800c2b0: f5b3 7f00 cmp.w r3, #512 @ 0x200
  28128. 800c2b4: d80b bhi.n 800c2ce <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  28129. 800c2b6: 2b00 cmp r3, #0
  28130. 800c2b8: d014 beq.n 800c2e4 <HAL_RCCEx_PeriphCLKConfig+0x10e4>
  28131. 800c2ba: f5b3 7f80 cmp.w r3, #256 @ 0x100
  28132. 800c2be: d106 bne.n 800c2ce <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  28133. {
  28134. case RCC_RNGCLKSOURCE_PLL: /* PLL is used as clock source for RNG*/
  28135. /* Enable RNG Clock output generated form System RNG . */
  28136. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  28137. 800c2c0: 4b07 ldr r3, [pc, #28] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  28138. 800c2c2: 6adb ldr r3, [r3, #44] @ 0x2c
  28139. 800c2c4: 4a06 ldr r2, [pc, #24] @ (800c2e0 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  28140. 800c2c6: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  28141. 800c2ca: 62d3 str r3, [r2, #44] @ 0x2c
  28142. /* RNG clock source configuration done later after clock selection check */
  28143. break;
  28144. 800c2cc: e00b b.n 800c2e6 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  28145. /* HSI48 oscillator is used as source of RNG clock */
  28146. /* RNG clock source configuration done later after clock selection check */
  28147. break;
  28148. default:
  28149. ret = HAL_ERROR;
  28150. 800c2ce: 2301 movs r3, #1
  28151. 800c2d0: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28152. break;
  28153. 800c2d4: e007 b.n 800c2e6 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  28154. break;
  28155. 800c2d6: bf00 nop
  28156. 800c2d8: e005 b.n 800c2e6 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  28157. break;
  28158. 800c2da: bf00 nop
  28159. 800c2dc: e003 b.n 800c2e6 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  28160. 800c2de: bf00 nop
  28161. 800c2e0: 58024400 .word 0x58024400
  28162. break;
  28163. 800c2e4: bf00 nop
  28164. }
  28165. if (ret == HAL_OK)
  28166. 800c2e6: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28167. 800c2ea: 2b00 cmp r3, #0
  28168. 800c2ec: d10b bne.n 800c306 <HAL_RCCEx_PeriphCLKConfig+0x1106>
  28169. {
  28170. /* Set the source of RNG clock*/
  28171. __HAL_RCC_RNG_CONFIG(PeriphClkInit->RngClockSelection);
  28172. 800c2ee: 4bba ldr r3, [pc, #744] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28173. 800c2f0: 6d5b ldr r3, [r3, #84] @ 0x54
  28174. 800c2f2: f423 7140 bic.w r1, r3, #768 @ 0x300
  28175. 800c2f6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28176. 800c2fa: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  28177. 800c2fe: 4ab6 ldr r2, [pc, #728] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28178. 800c300: 430b orrs r3, r1
  28179. 800c302: 6553 str r3, [r2, #84] @ 0x54
  28180. 800c304: e003 b.n 800c30e <HAL_RCCEx_PeriphCLKConfig+0x110e>
  28181. }
  28182. else
  28183. {
  28184. /* set overall return value */
  28185. status = ret;
  28186. 800c306: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28187. 800c30a: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28188. }
  28189. }
  28190. /*------------------------------ SWPMI1 Configuration ------------------------*/
  28191. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SWPMI1) == RCC_PERIPHCLK_SWPMI1)
  28192. 800c30e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28193. 800c312: e9d3 2300 ldrd r2, r3, [r3]
  28194. 800c316: f402 1380 and.w r3, r2, #1048576 @ 0x100000
  28195. 800c31a: 65bb str r3, [r7, #88] @ 0x58
  28196. 800c31c: 2300 movs r3, #0
  28197. 800c31e: 65fb str r3, [r7, #92] @ 0x5c
  28198. 800c320: e9d7 1216 ldrd r1, r2, [r7, #88] @ 0x58
  28199. 800c324: 460b mov r3, r1
  28200. 800c326: 4313 orrs r3, r2
  28201. 800c328: d009 beq.n 800c33e <HAL_RCCEx_PeriphCLKConfig+0x113e>
  28202. {
  28203. /* Check the parameters */
  28204. assert_param(IS_RCC_SWPMI1CLKSOURCE(PeriphClkInit->Swpmi1ClockSelection));
  28205. /* Configure the SWPMI1 interface clock source */
  28206. __HAL_RCC_SWPMI1_CONFIG(PeriphClkInit->Swpmi1ClockSelection);
  28207. 800c32a: 4bab ldr r3, [pc, #684] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28208. 800c32c: 6d1b ldr r3, [r3, #80] @ 0x50
  28209. 800c32e: f023 4100 bic.w r1, r3, #2147483648 @ 0x80000000
  28210. 800c332: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28211. 800c336: 6f5b ldr r3, [r3, #116] @ 0x74
  28212. 800c338: 4aa7 ldr r2, [pc, #668] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28213. 800c33a: 430b orrs r3, r1
  28214. 800c33c: 6513 str r3, [r2, #80] @ 0x50
  28215. }
  28216. #if defined(HRTIM1)
  28217. /*------------------------------ HRTIM1 clock Configuration ----------------*/
  28218. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_HRTIM1) == RCC_PERIPHCLK_HRTIM1)
  28219. 800c33e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28220. 800c342: e9d3 2300 ldrd r2, r3, [r3]
  28221. 800c346: f002 5380 and.w r3, r2, #268435456 @ 0x10000000
  28222. 800c34a: 653b str r3, [r7, #80] @ 0x50
  28223. 800c34c: 2300 movs r3, #0
  28224. 800c34e: 657b str r3, [r7, #84] @ 0x54
  28225. 800c350: e9d7 1214 ldrd r1, r2, [r7, #80] @ 0x50
  28226. 800c354: 460b mov r3, r1
  28227. 800c356: 4313 orrs r3, r2
  28228. 800c358: d00a beq.n 800c370 <HAL_RCCEx_PeriphCLKConfig+0x1170>
  28229. {
  28230. /* Check the parameters */
  28231. assert_param(IS_RCC_HRTIM1CLKSOURCE(PeriphClkInit->Hrtim1ClockSelection));
  28232. /* Configure the HRTIM1 clock source */
  28233. __HAL_RCC_HRTIM1_CONFIG(PeriphClkInit->Hrtim1ClockSelection);
  28234. 800c35a: 4b9f ldr r3, [pc, #636] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28235. 800c35c: 691b ldr r3, [r3, #16]
  28236. 800c35e: f423 4180 bic.w r1, r3, #16384 @ 0x4000
  28237. 800c362: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28238. 800c366: f8d3 30b8 ldr.w r3, [r3, #184] @ 0xb8
  28239. 800c36a: 4a9b ldr r2, [pc, #620] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28240. 800c36c: 430b orrs r3, r1
  28241. 800c36e: 6113 str r3, [r2, #16]
  28242. }
  28243. #endif /*HRTIM1*/
  28244. /*------------------------------ DFSDM1 Configuration ------------------------*/
  28245. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1)
  28246. 800c370: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28247. 800c374: e9d3 2300 ldrd r2, r3, [r3]
  28248. 800c378: f402 1300 and.w r3, r2, #2097152 @ 0x200000
  28249. 800c37c: 64bb str r3, [r7, #72] @ 0x48
  28250. 800c37e: 2300 movs r3, #0
  28251. 800c380: 64fb str r3, [r7, #76] @ 0x4c
  28252. 800c382: e9d7 1212 ldrd r1, r2, [r7, #72] @ 0x48
  28253. 800c386: 460b mov r3, r1
  28254. 800c388: 4313 orrs r3, r2
  28255. 800c38a: d009 beq.n 800c3a0 <HAL_RCCEx_PeriphCLKConfig+0x11a0>
  28256. {
  28257. /* Check the parameters */
  28258. assert_param(IS_RCC_DFSDM1CLKSOURCE(PeriphClkInit->Dfsdm1ClockSelection));
  28259. /* Configure the DFSDM1 interface clock source */
  28260. __HAL_RCC_DFSDM1_CONFIG(PeriphClkInit->Dfsdm1ClockSelection);
  28261. 800c38c: 4b92 ldr r3, [pc, #584] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28262. 800c38e: 6d1b ldr r3, [r3, #80] @ 0x50
  28263. 800c390: f023 7180 bic.w r1, r3, #16777216 @ 0x1000000
  28264. 800c394: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28265. 800c398: 6edb ldr r3, [r3, #108] @ 0x6c
  28266. 800c39a: 4a8f ldr r2, [pc, #572] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28267. 800c39c: 430b orrs r3, r1
  28268. 800c39e: 6513 str r3, [r2, #80] @ 0x50
  28269. __HAL_RCC_DFSDM2_CONFIG(PeriphClkInit->Dfsdm2ClockSelection);
  28270. }
  28271. #endif /* DFSDM2 */
  28272. /*------------------------------------ TIM configuration --------------------------------------*/
  28273. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == RCC_PERIPHCLK_TIM)
  28274. 800c3a0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28275. 800c3a4: e9d3 2300 ldrd r2, r3, [r3]
  28276. 800c3a8: f002 4380 and.w r3, r2, #1073741824 @ 0x40000000
  28277. 800c3ac: 643b str r3, [r7, #64] @ 0x40
  28278. 800c3ae: 2300 movs r3, #0
  28279. 800c3b0: 647b str r3, [r7, #68] @ 0x44
  28280. 800c3b2: e9d7 1210 ldrd r1, r2, [r7, #64] @ 0x40
  28281. 800c3b6: 460b mov r3, r1
  28282. 800c3b8: 4313 orrs r3, r2
  28283. 800c3ba: d00e beq.n 800c3da <HAL_RCCEx_PeriphCLKConfig+0x11da>
  28284. {
  28285. /* Check the parameters */
  28286. assert_param(IS_RCC_TIMPRES(PeriphClkInit->TIMPresSelection));
  28287. /* Configure Timer Prescaler */
  28288. __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection);
  28289. 800c3bc: 4b86 ldr r3, [pc, #536] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28290. 800c3be: 691b ldr r3, [r3, #16]
  28291. 800c3c0: 4a85 ldr r2, [pc, #532] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28292. 800c3c2: f423 4300 bic.w r3, r3, #32768 @ 0x8000
  28293. 800c3c6: 6113 str r3, [r2, #16]
  28294. 800c3c8: 4b83 ldr r3, [pc, #524] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28295. 800c3ca: 6919 ldr r1, [r3, #16]
  28296. 800c3cc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28297. 800c3d0: f8d3 30bc ldr.w r3, [r3, #188] @ 0xbc
  28298. 800c3d4: 4a80 ldr r2, [pc, #512] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28299. 800c3d6: 430b orrs r3, r1
  28300. 800c3d8: 6113 str r3, [r2, #16]
  28301. }
  28302. /*------------------------------------ CKPER configuration --------------------------------------*/
  28303. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CKPER) == RCC_PERIPHCLK_CKPER)
  28304. 800c3da: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28305. 800c3de: e9d3 2300 ldrd r2, r3, [r3]
  28306. 800c3e2: f002 4300 and.w r3, r2, #2147483648 @ 0x80000000
  28307. 800c3e6: 63bb str r3, [r7, #56] @ 0x38
  28308. 800c3e8: 2300 movs r3, #0
  28309. 800c3ea: 63fb str r3, [r7, #60] @ 0x3c
  28310. 800c3ec: e9d7 120e ldrd r1, r2, [r7, #56] @ 0x38
  28311. 800c3f0: 460b mov r3, r1
  28312. 800c3f2: 4313 orrs r3, r2
  28313. 800c3f4: d009 beq.n 800c40a <HAL_RCCEx_PeriphCLKConfig+0x120a>
  28314. {
  28315. /* Check the parameters */
  28316. assert_param(IS_RCC_CLKPSOURCE(PeriphClkInit->CkperClockSelection));
  28317. /* Configure the CKPER clock source */
  28318. __HAL_RCC_CLKP_CONFIG(PeriphClkInit->CkperClockSelection);
  28319. 800c3f6: 4b78 ldr r3, [pc, #480] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28320. 800c3f8: 6cdb ldr r3, [r3, #76] @ 0x4c
  28321. 800c3fa: f023 5140 bic.w r1, r3, #805306368 @ 0x30000000
  28322. 800c3fe: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28323. 800c402: 6d5b ldr r3, [r3, #84] @ 0x54
  28324. 800c404: 4a74 ldr r2, [pc, #464] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28325. 800c406: 430b orrs r3, r1
  28326. 800c408: 64d3 str r3, [r2, #76] @ 0x4c
  28327. }
  28328. /*------------------------------ CEC Configuration ------------------------*/
  28329. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CEC) == RCC_PERIPHCLK_CEC)
  28330. 800c40a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28331. 800c40e: e9d3 2300 ldrd r2, r3, [r3]
  28332. 800c412: f402 0300 and.w r3, r2, #8388608 @ 0x800000
  28333. 800c416: 633b str r3, [r7, #48] @ 0x30
  28334. 800c418: 2300 movs r3, #0
  28335. 800c41a: 637b str r3, [r7, #52] @ 0x34
  28336. 800c41c: e9d7 120c ldrd r1, r2, [r7, #48] @ 0x30
  28337. 800c420: 460b mov r3, r1
  28338. 800c422: 4313 orrs r3, r2
  28339. 800c424: d00a beq.n 800c43c <HAL_RCCEx_PeriphCLKConfig+0x123c>
  28340. {
  28341. /* Check the parameters */
  28342. assert_param(IS_RCC_CECCLKSOURCE(PeriphClkInit->CecClockSelection));
  28343. /* Configure the CEC interface clock source */
  28344. __HAL_RCC_CEC_CONFIG(PeriphClkInit->CecClockSelection);
  28345. 800c426: 4b6c ldr r3, [pc, #432] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28346. 800c428: 6d5b ldr r3, [r3, #84] @ 0x54
  28347. 800c42a: f423 0140 bic.w r1, r3, #12582912 @ 0xc00000
  28348. 800c42e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28349. 800c432: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  28350. 800c436: 4a68 ldr r2, [pc, #416] @ (800c5d8 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  28351. 800c438: 430b orrs r3, r1
  28352. 800c43a: 6553 str r3, [r2, #84] @ 0x54
  28353. }
  28354. /*---------------------------- PLL2 configuration -------------------------------*/
  28355. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVP) == RCC_PERIPHCLK_PLL2_DIVP)
  28356. 800c43c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28357. 800c440: e9d3 2300 ldrd r2, r3, [r3]
  28358. 800c444: 2100 movs r1, #0
  28359. 800c446: 62b9 str r1, [r7, #40] @ 0x28
  28360. 800c448: f003 0301 and.w r3, r3, #1
  28361. 800c44c: 62fb str r3, [r7, #44] @ 0x2c
  28362. 800c44e: e9d7 120a ldrd r1, r2, [r7, #40] @ 0x28
  28363. 800c452: 460b mov r3, r1
  28364. 800c454: 4313 orrs r3, r2
  28365. 800c456: d011 beq.n 800c47c <HAL_RCCEx_PeriphCLKConfig+0x127c>
  28366. {
  28367. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  28368. 800c458: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28369. 800c45c: 3308 adds r3, #8
  28370. 800c45e: 2100 movs r1, #0
  28371. 800c460: 4618 mov r0, r3
  28372. 800c462: f001 fa4b bl 800d8fc <RCCEx_PLL2_Config>
  28373. 800c466: 4603 mov r3, r0
  28374. 800c468: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28375. if (ret == HAL_OK)
  28376. 800c46c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28377. 800c470: 2b00 cmp r3, #0
  28378. 800c472: d003 beq.n 800c47c <HAL_RCCEx_PeriphCLKConfig+0x127c>
  28379. /*Nothing to do*/
  28380. }
  28381. else
  28382. {
  28383. /* set overall return value */
  28384. status = ret;
  28385. 800c474: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28386. 800c478: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28387. }
  28388. }
  28389. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVQ) == RCC_PERIPHCLK_PLL2_DIVQ)
  28390. 800c47c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28391. 800c480: e9d3 2300 ldrd r2, r3, [r3]
  28392. 800c484: 2100 movs r1, #0
  28393. 800c486: 6239 str r1, [r7, #32]
  28394. 800c488: f003 0302 and.w r3, r3, #2
  28395. 800c48c: 627b str r3, [r7, #36] @ 0x24
  28396. 800c48e: e9d7 1208 ldrd r1, r2, [r7, #32]
  28397. 800c492: 460b mov r3, r1
  28398. 800c494: 4313 orrs r3, r2
  28399. 800c496: d011 beq.n 800c4bc <HAL_RCCEx_PeriphCLKConfig+0x12bc>
  28400. {
  28401. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  28402. 800c498: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28403. 800c49c: 3308 adds r3, #8
  28404. 800c49e: 2101 movs r1, #1
  28405. 800c4a0: 4618 mov r0, r3
  28406. 800c4a2: f001 fa2b bl 800d8fc <RCCEx_PLL2_Config>
  28407. 800c4a6: 4603 mov r3, r0
  28408. 800c4a8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28409. if (ret == HAL_OK)
  28410. 800c4ac: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28411. 800c4b0: 2b00 cmp r3, #0
  28412. 800c4b2: d003 beq.n 800c4bc <HAL_RCCEx_PeriphCLKConfig+0x12bc>
  28413. /*Nothing to do*/
  28414. }
  28415. else
  28416. {
  28417. /* set overall return value */
  28418. status = ret;
  28419. 800c4b4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28420. 800c4b8: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28421. }
  28422. }
  28423. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVR) == RCC_PERIPHCLK_PLL2_DIVR)
  28424. 800c4bc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28425. 800c4c0: e9d3 2300 ldrd r2, r3, [r3]
  28426. 800c4c4: 2100 movs r1, #0
  28427. 800c4c6: 61b9 str r1, [r7, #24]
  28428. 800c4c8: f003 0304 and.w r3, r3, #4
  28429. 800c4cc: 61fb str r3, [r7, #28]
  28430. 800c4ce: e9d7 1206 ldrd r1, r2, [r7, #24]
  28431. 800c4d2: 460b mov r3, r1
  28432. 800c4d4: 4313 orrs r3, r2
  28433. 800c4d6: d011 beq.n 800c4fc <HAL_RCCEx_PeriphCLKConfig+0x12fc>
  28434. {
  28435. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  28436. 800c4d8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28437. 800c4dc: 3308 adds r3, #8
  28438. 800c4de: 2102 movs r1, #2
  28439. 800c4e0: 4618 mov r0, r3
  28440. 800c4e2: f001 fa0b bl 800d8fc <RCCEx_PLL2_Config>
  28441. 800c4e6: 4603 mov r3, r0
  28442. 800c4e8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28443. if (ret == HAL_OK)
  28444. 800c4ec: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28445. 800c4f0: 2b00 cmp r3, #0
  28446. 800c4f2: d003 beq.n 800c4fc <HAL_RCCEx_PeriphCLKConfig+0x12fc>
  28447. /*Nothing to do*/
  28448. }
  28449. else
  28450. {
  28451. /* set overall return value */
  28452. status = ret;
  28453. 800c4f4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28454. 800c4f8: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28455. }
  28456. }
  28457. /*---------------------------- PLL3 configuration -------------------------------*/
  28458. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVP) == RCC_PERIPHCLK_PLL3_DIVP)
  28459. 800c4fc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28460. 800c500: e9d3 2300 ldrd r2, r3, [r3]
  28461. 800c504: 2100 movs r1, #0
  28462. 800c506: 6139 str r1, [r7, #16]
  28463. 800c508: f003 0308 and.w r3, r3, #8
  28464. 800c50c: 617b str r3, [r7, #20]
  28465. 800c50e: e9d7 1204 ldrd r1, r2, [r7, #16]
  28466. 800c512: 460b mov r3, r1
  28467. 800c514: 4313 orrs r3, r2
  28468. 800c516: d011 beq.n 800c53c <HAL_RCCEx_PeriphCLKConfig+0x133c>
  28469. {
  28470. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  28471. 800c518: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28472. 800c51c: 3328 adds r3, #40 @ 0x28
  28473. 800c51e: 2100 movs r1, #0
  28474. 800c520: 4618 mov r0, r3
  28475. 800c522: f001 fa9d bl 800da60 <RCCEx_PLL3_Config>
  28476. 800c526: 4603 mov r3, r0
  28477. 800c528: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28478. if (ret == HAL_OK)
  28479. 800c52c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28480. 800c530: 2b00 cmp r3, #0
  28481. 800c532: d003 beq.n 800c53c <HAL_RCCEx_PeriphCLKConfig+0x133c>
  28482. /*Nothing to do*/
  28483. }
  28484. else
  28485. {
  28486. /* set overall return value */
  28487. status = ret;
  28488. 800c534: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28489. 800c538: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28490. }
  28491. }
  28492. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVQ) == RCC_PERIPHCLK_PLL3_DIVQ)
  28493. 800c53c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28494. 800c540: e9d3 2300 ldrd r2, r3, [r3]
  28495. 800c544: 2100 movs r1, #0
  28496. 800c546: 60b9 str r1, [r7, #8]
  28497. 800c548: f003 0310 and.w r3, r3, #16
  28498. 800c54c: 60fb str r3, [r7, #12]
  28499. 800c54e: e9d7 1202 ldrd r1, r2, [r7, #8]
  28500. 800c552: 460b mov r3, r1
  28501. 800c554: 4313 orrs r3, r2
  28502. 800c556: d011 beq.n 800c57c <HAL_RCCEx_PeriphCLKConfig+0x137c>
  28503. {
  28504. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  28505. 800c558: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28506. 800c55c: 3328 adds r3, #40 @ 0x28
  28507. 800c55e: 2101 movs r1, #1
  28508. 800c560: 4618 mov r0, r3
  28509. 800c562: f001 fa7d bl 800da60 <RCCEx_PLL3_Config>
  28510. 800c566: 4603 mov r3, r0
  28511. 800c568: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28512. if (ret == HAL_OK)
  28513. 800c56c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28514. 800c570: 2b00 cmp r3, #0
  28515. 800c572: d003 beq.n 800c57c <HAL_RCCEx_PeriphCLKConfig+0x137c>
  28516. /*Nothing to do*/
  28517. }
  28518. else
  28519. {
  28520. /* set overall return value */
  28521. status = ret;
  28522. 800c574: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28523. 800c578: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28524. }
  28525. }
  28526. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVR) == RCC_PERIPHCLK_PLL3_DIVR)
  28527. 800c57c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28528. 800c580: e9d3 2300 ldrd r2, r3, [r3]
  28529. 800c584: 2100 movs r1, #0
  28530. 800c586: 6039 str r1, [r7, #0]
  28531. 800c588: f003 0320 and.w r3, r3, #32
  28532. 800c58c: 607b str r3, [r7, #4]
  28533. 800c58e: e9d7 1200 ldrd r1, r2, [r7]
  28534. 800c592: 460b mov r3, r1
  28535. 800c594: 4313 orrs r3, r2
  28536. 800c596: d011 beq.n 800c5bc <HAL_RCCEx_PeriphCLKConfig+0x13bc>
  28537. {
  28538. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  28539. 800c598: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28540. 800c59c: 3328 adds r3, #40 @ 0x28
  28541. 800c59e: 2102 movs r1, #2
  28542. 800c5a0: 4618 mov r0, r3
  28543. 800c5a2: f001 fa5d bl 800da60 <RCCEx_PLL3_Config>
  28544. 800c5a6: 4603 mov r3, r0
  28545. 800c5a8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28546. if (ret == HAL_OK)
  28547. 800c5ac: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28548. 800c5b0: 2b00 cmp r3, #0
  28549. 800c5b2: d003 beq.n 800c5bc <HAL_RCCEx_PeriphCLKConfig+0x13bc>
  28550. /*Nothing to do*/
  28551. }
  28552. else
  28553. {
  28554. /* set overall return value */
  28555. status = ret;
  28556. 800c5b4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28557. 800c5b8: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28558. }
  28559. }
  28560. if (status == HAL_OK)
  28561. 800c5bc: f897 311e ldrb.w r3, [r7, #286] @ 0x11e
  28562. 800c5c0: 2b00 cmp r3, #0
  28563. 800c5c2: d101 bne.n 800c5c8 <HAL_RCCEx_PeriphCLKConfig+0x13c8>
  28564. {
  28565. return HAL_OK;
  28566. 800c5c4: 2300 movs r3, #0
  28567. 800c5c6: e000 b.n 800c5ca <HAL_RCCEx_PeriphCLKConfig+0x13ca>
  28568. }
  28569. return HAL_ERROR;
  28570. 800c5c8: 2301 movs r3, #1
  28571. }
  28572. 800c5ca: 4618 mov r0, r3
  28573. 800c5cc: f507 7790 add.w r7, r7, #288 @ 0x120
  28574. 800c5d0: 46bd mov sp, r7
  28575. 800c5d2: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc}
  28576. 800c5d6: bf00 nop
  28577. 800c5d8: 58024400 .word 0x58024400
  28578. 0800c5dc <HAL_RCCEx_GetPeriphCLKFreq>:
  28579. * @retval Frequency in KHz
  28580. *
  28581. * (*) : Available on some STM32H7 lines only.
  28582. */
  28583. uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint64_t PeriphClk)
  28584. {
  28585. 800c5dc: b580 push {r7, lr}
  28586. 800c5de: b090 sub sp, #64 @ 0x40
  28587. 800c5e0: af00 add r7, sp, #0
  28588. 800c5e2: e9c7 0100 strd r0, r1, [r7]
  28589. /* This variable is used to store the SAI and CKP clock source */
  28590. uint32_t saiclocksource;
  28591. uint32_t ckpclocksource;
  28592. uint32_t srcclk;
  28593. if (PeriphClk == RCC_PERIPHCLK_SAI1)
  28594. 800c5e6: e9d7 2300 ldrd r2, r3, [r7]
  28595. 800c5ea: f5a2 7180 sub.w r1, r2, #256 @ 0x100
  28596. 800c5ee: 430b orrs r3, r1
  28597. 800c5f0: f040 8094 bne.w 800c71c <HAL_RCCEx_GetPeriphCLKFreq+0x140>
  28598. {
  28599. saiclocksource = __HAL_RCC_GET_SAI1_SOURCE();
  28600. 800c5f4: 4b9e ldr r3, [pc, #632] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28601. 800c5f6: 6d1b ldr r3, [r3, #80] @ 0x50
  28602. 800c5f8: f003 0307 and.w r3, r3, #7
  28603. 800c5fc: 633b str r3, [r7, #48] @ 0x30
  28604. switch (saiclocksource)
  28605. 800c5fe: 6b3b ldr r3, [r7, #48] @ 0x30
  28606. 800c600: 2b04 cmp r3, #4
  28607. 800c602: f200 8087 bhi.w 800c714 <HAL_RCCEx_GetPeriphCLKFreq+0x138>
  28608. 800c606: a201 add r2, pc, #4 @ (adr r2, 800c60c <HAL_RCCEx_GetPeriphCLKFreq+0x30>)
  28609. 800c608: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  28610. 800c60c: 0800c621 .word 0x0800c621
  28611. 800c610: 0800c649 .word 0x0800c649
  28612. 800c614: 0800c671 .word 0x0800c671
  28613. 800c618: 0800c70d .word 0x0800c70d
  28614. 800c61c: 0800c699 .word 0x0800c699
  28615. {
  28616. case RCC_SAI1CLKSOURCE_PLL: /* PLL1 is the clock source for SAI1 */
  28617. {
  28618. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  28619. 800c620: 4b93 ldr r3, [pc, #588] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28620. 800c622: 681b ldr r3, [r3, #0]
  28621. 800c624: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  28622. 800c628: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  28623. 800c62c: d108 bne.n 800c640 <HAL_RCCEx_GetPeriphCLKFreq+0x64>
  28624. {
  28625. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  28626. 800c62e: f107 0324 add.w r3, r7, #36 @ 0x24
  28627. 800c632: 4618 mov r0, r3
  28628. 800c634: f001 f810 bl 800d658 <HAL_RCCEx_GetPLL1ClockFreq>
  28629. frequency = pll1_clocks.PLL1_Q_Frequency;
  28630. 800c638: 6abb ldr r3, [r7, #40] @ 0x28
  28631. 800c63a: 63fb str r3, [r7, #60] @ 0x3c
  28632. }
  28633. else
  28634. {
  28635. frequency = 0;
  28636. }
  28637. break;
  28638. 800c63c: f000 bd45 b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28639. frequency = 0;
  28640. 800c640: 2300 movs r3, #0
  28641. 800c642: 63fb str r3, [r7, #60] @ 0x3c
  28642. break;
  28643. 800c644: f000 bd41 b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28644. }
  28645. case RCC_SAI1CLKSOURCE_PLL2: /* PLL2 is the clock source for SAI1 */
  28646. {
  28647. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  28648. 800c648: 4b89 ldr r3, [pc, #548] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28649. 800c64a: 681b ldr r3, [r3, #0]
  28650. 800c64c: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  28651. 800c650: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  28652. 800c654: d108 bne.n 800c668 <HAL_RCCEx_GetPeriphCLKFreq+0x8c>
  28653. {
  28654. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  28655. 800c656: f107 0318 add.w r3, r7, #24
  28656. 800c65a: 4618 mov r0, r3
  28657. 800c65c: f000 fd54 bl 800d108 <HAL_RCCEx_GetPLL2ClockFreq>
  28658. frequency = pll2_clocks.PLL2_P_Frequency;
  28659. 800c660: 69bb ldr r3, [r7, #24]
  28660. 800c662: 63fb str r3, [r7, #60] @ 0x3c
  28661. }
  28662. else
  28663. {
  28664. frequency = 0;
  28665. }
  28666. break;
  28667. 800c664: f000 bd31 b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28668. frequency = 0;
  28669. 800c668: 2300 movs r3, #0
  28670. 800c66a: 63fb str r3, [r7, #60] @ 0x3c
  28671. break;
  28672. 800c66c: f000 bd2d b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28673. }
  28674. case RCC_SAI1CLKSOURCE_PLL3: /* PLL3 is the clock source for SAI1 */
  28675. {
  28676. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  28677. 800c670: 4b7f ldr r3, [pc, #508] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28678. 800c672: 681b ldr r3, [r3, #0]
  28679. 800c674: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  28680. 800c678: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  28681. 800c67c: d108 bne.n 800c690 <HAL_RCCEx_GetPeriphCLKFreq+0xb4>
  28682. {
  28683. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  28684. 800c67e: f107 030c add.w r3, r7, #12
  28685. 800c682: 4618 mov r0, r3
  28686. 800c684: f000 fe94 bl 800d3b0 <HAL_RCCEx_GetPLL3ClockFreq>
  28687. frequency = pll3_clocks.PLL3_P_Frequency;
  28688. 800c688: 68fb ldr r3, [r7, #12]
  28689. 800c68a: 63fb str r3, [r7, #60] @ 0x3c
  28690. }
  28691. else
  28692. {
  28693. frequency = 0;
  28694. }
  28695. break;
  28696. 800c68c: f000 bd1d b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28697. frequency = 0;
  28698. 800c690: 2300 movs r3, #0
  28699. 800c692: 63fb str r3, [r7, #60] @ 0x3c
  28700. break;
  28701. 800c694: f000 bd19 b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28702. }
  28703. case RCC_SAI1CLKSOURCE_CLKP: /* CKPER is the clock source for SAI1*/
  28704. {
  28705. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  28706. 800c698: 4b75 ldr r3, [pc, #468] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28707. 800c69a: 6cdb ldr r3, [r3, #76] @ 0x4c
  28708. 800c69c: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  28709. 800c6a0: 637b str r3, [r7, #52] @ 0x34
  28710. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  28711. 800c6a2: 4b73 ldr r3, [pc, #460] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28712. 800c6a4: 681b ldr r3, [r3, #0]
  28713. 800c6a6: f003 0304 and.w r3, r3, #4
  28714. 800c6aa: 2b04 cmp r3, #4
  28715. 800c6ac: d10c bne.n 800c6c8 <HAL_RCCEx_GetPeriphCLKFreq+0xec>
  28716. 800c6ae: 6b7b ldr r3, [r7, #52] @ 0x34
  28717. 800c6b0: 2b00 cmp r3, #0
  28718. 800c6b2: d109 bne.n 800c6c8 <HAL_RCCEx_GetPeriphCLKFreq+0xec>
  28719. {
  28720. /* In Case the CKPER Source is HSI */
  28721. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  28722. 800c6b4: 4b6e ldr r3, [pc, #440] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28723. 800c6b6: 681b ldr r3, [r3, #0]
  28724. 800c6b8: 08db lsrs r3, r3, #3
  28725. 800c6ba: f003 0303 and.w r3, r3, #3
  28726. 800c6be: 4a6d ldr r2, [pc, #436] @ (800c874 <HAL_RCCEx_GetPeriphCLKFreq+0x298>)
  28727. 800c6c0: fa22 f303 lsr.w r3, r2, r3
  28728. 800c6c4: 63fb str r3, [r7, #60] @ 0x3c
  28729. 800c6c6: e01f b.n 800c708 <HAL_RCCEx_GetPeriphCLKFreq+0x12c>
  28730. }
  28731. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  28732. 800c6c8: 4b69 ldr r3, [pc, #420] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28733. 800c6ca: 681b ldr r3, [r3, #0]
  28734. 800c6cc: f403 7380 and.w r3, r3, #256 @ 0x100
  28735. 800c6d0: f5b3 7f80 cmp.w r3, #256 @ 0x100
  28736. 800c6d4: d106 bne.n 800c6e4 <HAL_RCCEx_GetPeriphCLKFreq+0x108>
  28737. 800c6d6: 6b7b ldr r3, [r7, #52] @ 0x34
  28738. 800c6d8: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  28739. 800c6dc: d102 bne.n 800c6e4 <HAL_RCCEx_GetPeriphCLKFreq+0x108>
  28740. {
  28741. /* In Case the CKPER Source is CSI */
  28742. frequency = CSI_VALUE;
  28743. 800c6de: 4b66 ldr r3, [pc, #408] @ (800c878 <HAL_RCCEx_GetPeriphCLKFreq+0x29c>)
  28744. 800c6e0: 63fb str r3, [r7, #60] @ 0x3c
  28745. 800c6e2: e011 b.n 800c708 <HAL_RCCEx_GetPeriphCLKFreq+0x12c>
  28746. }
  28747. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  28748. 800c6e4: 4b62 ldr r3, [pc, #392] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28749. 800c6e6: 681b ldr r3, [r3, #0]
  28750. 800c6e8: f403 3300 and.w r3, r3, #131072 @ 0x20000
  28751. 800c6ec: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  28752. 800c6f0: d106 bne.n 800c700 <HAL_RCCEx_GetPeriphCLKFreq+0x124>
  28753. 800c6f2: 6b7b ldr r3, [r7, #52] @ 0x34
  28754. 800c6f4: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  28755. 800c6f8: d102 bne.n 800c700 <HAL_RCCEx_GetPeriphCLKFreq+0x124>
  28756. {
  28757. /* In Case the CKPER Source is HSE */
  28758. frequency = HSE_VALUE;
  28759. 800c6fa: 4b60 ldr r3, [pc, #384] @ (800c87c <HAL_RCCEx_GetPeriphCLKFreq+0x2a0>)
  28760. 800c6fc: 63fb str r3, [r7, #60] @ 0x3c
  28761. 800c6fe: e003 b.n 800c708 <HAL_RCCEx_GetPeriphCLKFreq+0x12c>
  28762. }
  28763. else
  28764. {
  28765. /* In Case the CKPER is disabled*/
  28766. frequency = 0;
  28767. 800c700: 2300 movs r3, #0
  28768. 800c702: 63fb str r3, [r7, #60] @ 0x3c
  28769. }
  28770. break;
  28771. 800c704: f000 bce1 b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28772. 800c708: f000 bcdf b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28773. }
  28774. case (RCC_SAI1CLKSOURCE_PIN): /* External clock is the clock source for SAI1 */
  28775. {
  28776. frequency = EXTERNAL_CLOCK_VALUE;
  28777. 800c70c: 4b5c ldr r3, [pc, #368] @ (800c880 <HAL_RCCEx_GetPeriphCLKFreq+0x2a4>)
  28778. 800c70e: 63fb str r3, [r7, #60] @ 0x3c
  28779. break;
  28780. 800c710: f000 bcdb b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28781. }
  28782. default :
  28783. {
  28784. frequency = 0;
  28785. 800c714: 2300 movs r3, #0
  28786. 800c716: 63fb str r3, [r7, #60] @ 0x3c
  28787. break;
  28788. 800c718: f000 bcd7 b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28789. }
  28790. }
  28791. }
  28792. #if defined(SAI3)
  28793. else if (PeriphClk == RCC_PERIPHCLK_SAI23)
  28794. 800c71c: e9d7 2300 ldrd r2, r3, [r7]
  28795. 800c720: f5a2 7100 sub.w r1, r2, #512 @ 0x200
  28796. 800c724: 430b orrs r3, r1
  28797. 800c726: f040 80ad bne.w 800c884 <HAL_RCCEx_GetPeriphCLKFreq+0x2a8>
  28798. {
  28799. saiclocksource = __HAL_RCC_GET_SAI23_SOURCE();
  28800. 800c72a: 4b51 ldr r3, [pc, #324] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28801. 800c72c: 6d1b ldr r3, [r3, #80] @ 0x50
  28802. 800c72e: f403 73e0 and.w r3, r3, #448 @ 0x1c0
  28803. 800c732: 633b str r3, [r7, #48] @ 0x30
  28804. switch (saiclocksource)
  28805. 800c734: 6b3b ldr r3, [r7, #48] @ 0x30
  28806. 800c736: f5b3 7f80 cmp.w r3, #256 @ 0x100
  28807. 800c73a: d056 beq.n 800c7ea <HAL_RCCEx_GetPeriphCLKFreq+0x20e>
  28808. 800c73c: 6b3b ldr r3, [r7, #48] @ 0x30
  28809. 800c73e: f5b3 7f80 cmp.w r3, #256 @ 0x100
  28810. 800c742: f200 8090 bhi.w 800c866 <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  28811. 800c746: 6b3b ldr r3, [r7, #48] @ 0x30
  28812. 800c748: 2bc0 cmp r3, #192 @ 0xc0
  28813. 800c74a: f000 8088 beq.w 800c85e <HAL_RCCEx_GetPeriphCLKFreq+0x282>
  28814. 800c74e: 6b3b ldr r3, [r7, #48] @ 0x30
  28815. 800c750: 2bc0 cmp r3, #192 @ 0xc0
  28816. 800c752: f200 8088 bhi.w 800c866 <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  28817. 800c756: 6b3b ldr r3, [r7, #48] @ 0x30
  28818. 800c758: 2b80 cmp r3, #128 @ 0x80
  28819. 800c75a: d032 beq.n 800c7c2 <HAL_RCCEx_GetPeriphCLKFreq+0x1e6>
  28820. 800c75c: 6b3b ldr r3, [r7, #48] @ 0x30
  28821. 800c75e: 2b80 cmp r3, #128 @ 0x80
  28822. 800c760: f200 8081 bhi.w 800c866 <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  28823. 800c764: 6b3b ldr r3, [r7, #48] @ 0x30
  28824. 800c766: 2b00 cmp r3, #0
  28825. 800c768: d003 beq.n 800c772 <HAL_RCCEx_GetPeriphCLKFreq+0x196>
  28826. 800c76a: 6b3b ldr r3, [r7, #48] @ 0x30
  28827. 800c76c: 2b40 cmp r3, #64 @ 0x40
  28828. 800c76e: d014 beq.n 800c79a <HAL_RCCEx_GetPeriphCLKFreq+0x1be>
  28829. 800c770: e079 b.n 800c866 <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  28830. {
  28831. case RCC_SAI23CLKSOURCE_PLL: /* PLL1 is the clock source for SAI2/3 */
  28832. {
  28833. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  28834. 800c772: 4b3f ldr r3, [pc, #252] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28835. 800c774: 681b ldr r3, [r3, #0]
  28836. 800c776: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  28837. 800c77a: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  28838. 800c77e: d108 bne.n 800c792 <HAL_RCCEx_GetPeriphCLKFreq+0x1b6>
  28839. {
  28840. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  28841. 800c780: f107 0324 add.w r3, r7, #36 @ 0x24
  28842. 800c784: 4618 mov r0, r3
  28843. 800c786: f000 ff67 bl 800d658 <HAL_RCCEx_GetPLL1ClockFreq>
  28844. frequency = pll1_clocks.PLL1_Q_Frequency;
  28845. 800c78a: 6abb ldr r3, [r7, #40] @ 0x28
  28846. 800c78c: 63fb str r3, [r7, #60] @ 0x3c
  28847. }
  28848. else
  28849. {
  28850. frequency = 0;
  28851. }
  28852. break;
  28853. 800c78e: f000 bc9c b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28854. frequency = 0;
  28855. 800c792: 2300 movs r3, #0
  28856. 800c794: 63fb str r3, [r7, #60] @ 0x3c
  28857. break;
  28858. 800c796: f000 bc98 b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28859. }
  28860. case RCC_SAI23CLKSOURCE_PLL2: /* PLL2 is the clock source for SAI2/3 */
  28861. {
  28862. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  28863. 800c79a: 4b35 ldr r3, [pc, #212] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28864. 800c79c: 681b ldr r3, [r3, #0]
  28865. 800c79e: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  28866. 800c7a2: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  28867. 800c7a6: d108 bne.n 800c7ba <HAL_RCCEx_GetPeriphCLKFreq+0x1de>
  28868. {
  28869. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  28870. 800c7a8: f107 0318 add.w r3, r7, #24
  28871. 800c7ac: 4618 mov r0, r3
  28872. 800c7ae: f000 fcab bl 800d108 <HAL_RCCEx_GetPLL2ClockFreq>
  28873. frequency = pll2_clocks.PLL2_P_Frequency;
  28874. 800c7b2: 69bb ldr r3, [r7, #24]
  28875. 800c7b4: 63fb str r3, [r7, #60] @ 0x3c
  28876. }
  28877. else
  28878. {
  28879. frequency = 0;
  28880. }
  28881. break;
  28882. 800c7b6: f000 bc88 b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28883. frequency = 0;
  28884. 800c7ba: 2300 movs r3, #0
  28885. 800c7bc: 63fb str r3, [r7, #60] @ 0x3c
  28886. break;
  28887. 800c7be: f000 bc84 b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28888. }
  28889. case RCC_SAI23CLKSOURCE_PLL3: /* PLL3 is the clock source for SAI2/3 */
  28890. {
  28891. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  28892. 800c7c2: 4b2b ldr r3, [pc, #172] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28893. 800c7c4: 681b ldr r3, [r3, #0]
  28894. 800c7c6: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  28895. 800c7ca: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  28896. 800c7ce: d108 bne.n 800c7e2 <HAL_RCCEx_GetPeriphCLKFreq+0x206>
  28897. {
  28898. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  28899. 800c7d0: f107 030c add.w r3, r7, #12
  28900. 800c7d4: 4618 mov r0, r3
  28901. 800c7d6: f000 fdeb bl 800d3b0 <HAL_RCCEx_GetPLL3ClockFreq>
  28902. frequency = pll3_clocks.PLL3_P_Frequency;
  28903. 800c7da: 68fb ldr r3, [r7, #12]
  28904. 800c7dc: 63fb str r3, [r7, #60] @ 0x3c
  28905. }
  28906. else
  28907. {
  28908. frequency = 0;
  28909. }
  28910. break;
  28911. 800c7de: f000 bc74 b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28912. frequency = 0;
  28913. 800c7e2: 2300 movs r3, #0
  28914. 800c7e4: 63fb str r3, [r7, #60] @ 0x3c
  28915. break;
  28916. 800c7e6: f000 bc70 b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28917. }
  28918. case RCC_SAI23CLKSOURCE_CLKP: /* CKPER is the clock source for SAI2/3 */
  28919. {
  28920. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  28921. 800c7ea: 4b21 ldr r3, [pc, #132] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28922. 800c7ec: 6cdb ldr r3, [r3, #76] @ 0x4c
  28923. 800c7ee: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  28924. 800c7f2: 637b str r3, [r7, #52] @ 0x34
  28925. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  28926. 800c7f4: 4b1e ldr r3, [pc, #120] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28927. 800c7f6: 681b ldr r3, [r3, #0]
  28928. 800c7f8: f003 0304 and.w r3, r3, #4
  28929. 800c7fc: 2b04 cmp r3, #4
  28930. 800c7fe: d10c bne.n 800c81a <HAL_RCCEx_GetPeriphCLKFreq+0x23e>
  28931. 800c800: 6b7b ldr r3, [r7, #52] @ 0x34
  28932. 800c802: 2b00 cmp r3, #0
  28933. 800c804: d109 bne.n 800c81a <HAL_RCCEx_GetPeriphCLKFreq+0x23e>
  28934. {
  28935. /* In Case the CKPER Source is HSI */
  28936. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  28937. 800c806: 4b1a ldr r3, [pc, #104] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28938. 800c808: 681b ldr r3, [r3, #0]
  28939. 800c80a: 08db lsrs r3, r3, #3
  28940. 800c80c: f003 0303 and.w r3, r3, #3
  28941. 800c810: 4a18 ldr r2, [pc, #96] @ (800c874 <HAL_RCCEx_GetPeriphCLKFreq+0x298>)
  28942. 800c812: fa22 f303 lsr.w r3, r2, r3
  28943. 800c816: 63fb str r3, [r7, #60] @ 0x3c
  28944. 800c818: e01f b.n 800c85a <HAL_RCCEx_GetPeriphCLKFreq+0x27e>
  28945. }
  28946. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  28947. 800c81a: 4b15 ldr r3, [pc, #84] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28948. 800c81c: 681b ldr r3, [r3, #0]
  28949. 800c81e: f403 7380 and.w r3, r3, #256 @ 0x100
  28950. 800c822: f5b3 7f80 cmp.w r3, #256 @ 0x100
  28951. 800c826: d106 bne.n 800c836 <HAL_RCCEx_GetPeriphCLKFreq+0x25a>
  28952. 800c828: 6b7b ldr r3, [r7, #52] @ 0x34
  28953. 800c82a: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  28954. 800c82e: d102 bne.n 800c836 <HAL_RCCEx_GetPeriphCLKFreq+0x25a>
  28955. {
  28956. /* In Case the CKPER Source is CSI */
  28957. frequency = CSI_VALUE;
  28958. 800c830: 4b11 ldr r3, [pc, #68] @ (800c878 <HAL_RCCEx_GetPeriphCLKFreq+0x29c>)
  28959. 800c832: 63fb str r3, [r7, #60] @ 0x3c
  28960. 800c834: e011 b.n 800c85a <HAL_RCCEx_GetPeriphCLKFreq+0x27e>
  28961. }
  28962. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  28963. 800c836: 4b0e ldr r3, [pc, #56] @ (800c870 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  28964. 800c838: 681b ldr r3, [r3, #0]
  28965. 800c83a: f403 3300 and.w r3, r3, #131072 @ 0x20000
  28966. 800c83e: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  28967. 800c842: d106 bne.n 800c852 <HAL_RCCEx_GetPeriphCLKFreq+0x276>
  28968. 800c844: 6b7b ldr r3, [r7, #52] @ 0x34
  28969. 800c846: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  28970. 800c84a: d102 bne.n 800c852 <HAL_RCCEx_GetPeriphCLKFreq+0x276>
  28971. {
  28972. /* In Case the CKPER Source is HSE */
  28973. frequency = HSE_VALUE;
  28974. 800c84c: 4b0b ldr r3, [pc, #44] @ (800c87c <HAL_RCCEx_GetPeriphCLKFreq+0x2a0>)
  28975. 800c84e: 63fb str r3, [r7, #60] @ 0x3c
  28976. 800c850: e003 b.n 800c85a <HAL_RCCEx_GetPeriphCLKFreq+0x27e>
  28977. }
  28978. else
  28979. {
  28980. /* In Case the CKPER is disabled*/
  28981. frequency = 0;
  28982. 800c852: 2300 movs r3, #0
  28983. 800c854: 63fb str r3, [r7, #60] @ 0x3c
  28984. }
  28985. break;
  28986. 800c856: f000 bc38 b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28987. 800c85a: f000 bc36 b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28988. }
  28989. case (RCC_SAI23CLKSOURCE_PIN): /* External clock is the clock source for SAI2/3 */
  28990. {
  28991. frequency = EXTERNAL_CLOCK_VALUE;
  28992. 800c85e: 4b08 ldr r3, [pc, #32] @ (800c880 <HAL_RCCEx_GetPeriphCLKFreq+0x2a4>)
  28993. 800c860: 63fb str r3, [r7, #60] @ 0x3c
  28994. break;
  28995. 800c862: f000 bc32 b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  28996. }
  28997. default :
  28998. {
  28999. frequency = 0;
  29000. 800c866: 2300 movs r3, #0
  29001. 800c868: 63fb str r3, [r7, #60] @ 0x3c
  29002. break;
  29003. 800c86a: f000 bc2e b.w 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29004. 800c86e: bf00 nop
  29005. 800c870: 58024400 .word 0x58024400
  29006. 800c874: 03d09000 .word 0x03d09000
  29007. 800c878: 003d0900 .word 0x003d0900
  29008. 800c87c: 017d7840 .word 0x017d7840
  29009. 800c880: 00bb8000 .word 0x00bb8000
  29010. }
  29011. }
  29012. #endif
  29013. #if defined(SAI4)
  29014. else if (PeriphClk == RCC_PERIPHCLK_SAI4A)
  29015. 800c884: e9d7 2300 ldrd r2, r3, [r7]
  29016. 800c888: f5a2 6180 sub.w r1, r2, #1024 @ 0x400
  29017. 800c88c: 430b orrs r3, r1
  29018. 800c88e: f040 809c bne.w 800c9ca <HAL_RCCEx_GetPeriphCLKFreq+0x3ee>
  29019. {
  29020. saiclocksource = __HAL_RCC_GET_SAI4A_SOURCE();
  29021. 800c892: 4b9e ldr r3, [pc, #632] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29022. 800c894: 6d9b ldr r3, [r3, #88] @ 0x58
  29023. 800c896: f403 0360 and.w r3, r3, #14680064 @ 0xe00000
  29024. 800c89a: 633b str r3, [r7, #48] @ 0x30
  29025. switch (saiclocksource)
  29026. 800c89c: 6b3b ldr r3, [r7, #48] @ 0x30
  29027. 800c89e: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  29028. 800c8a2: d054 beq.n 800c94e <HAL_RCCEx_GetPeriphCLKFreq+0x372>
  29029. 800c8a4: 6b3b ldr r3, [r7, #48] @ 0x30
  29030. 800c8a6: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  29031. 800c8aa: f200 808b bhi.w 800c9c4 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  29032. 800c8ae: 6b3b ldr r3, [r7, #48] @ 0x30
  29033. 800c8b0: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  29034. 800c8b4: f000 8083 beq.w 800c9be <HAL_RCCEx_GetPeriphCLKFreq+0x3e2>
  29035. 800c8b8: 6b3b ldr r3, [r7, #48] @ 0x30
  29036. 800c8ba: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  29037. 800c8be: f200 8081 bhi.w 800c9c4 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  29038. 800c8c2: 6b3b ldr r3, [r7, #48] @ 0x30
  29039. 800c8c4: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  29040. 800c8c8: d02f beq.n 800c92a <HAL_RCCEx_GetPeriphCLKFreq+0x34e>
  29041. 800c8ca: 6b3b ldr r3, [r7, #48] @ 0x30
  29042. 800c8cc: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  29043. 800c8d0: d878 bhi.n 800c9c4 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  29044. 800c8d2: 6b3b ldr r3, [r7, #48] @ 0x30
  29045. 800c8d4: 2b00 cmp r3, #0
  29046. 800c8d6: d004 beq.n 800c8e2 <HAL_RCCEx_GetPeriphCLKFreq+0x306>
  29047. 800c8d8: 6b3b ldr r3, [r7, #48] @ 0x30
  29048. 800c8da: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  29049. 800c8de: d012 beq.n 800c906 <HAL_RCCEx_GetPeriphCLKFreq+0x32a>
  29050. 800c8e0: e070 b.n 800c9c4 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  29051. {
  29052. case RCC_SAI4ACLKSOURCE_PLL: /* PLL1 is the clock source for SAI4A */
  29053. {
  29054. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  29055. 800c8e2: 4b8a ldr r3, [pc, #552] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29056. 800c8e4: 681b ldr r3, [r3, #0]
  29057. 800c8e6: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  29058. 800c8ea: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  29059. 800c8ee: d107 bne.n 800c900 <HAL_RCCEx_GetPeriphCLKFreq+0x324>
  29060. {
  29061. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  29062. 800c8f0: f107 0324 add.w r3, r7, #36 @ 0x24
  29063. 800c8f4: 4618 mov r0, r3
  29064. 800c8f6: f000 feaf bl 800d658 <HAL_RCCEx_GetPLL1ClockFreq>
  29065. frequency = pll1_clocks.PLL1_Q_Frequency;
  29066. 800c8fa: 6abb ldr r3, [r7, #40] @ 0x28
  29067. 800c8fc: 63fb str r3, [r7, #60] @ 0x3c
  29068. }
  29069. else
  29070. {
  29071. frequency = 0;
  29072. }
  29073. break;
  29074. 800c8fe: e3e4 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29075. frequency = 0;
  29076. 800c900: 2300 movs r3, #0
  29077. 800c902: 63fb str r3, [r7, #60] @ 0x3c
  29078. break;
  29079. 800c904: e3e1 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29080. }
  29081. case RCC_SAI4ACLKSOURCE_PLL2: /* PLLI2 is the clock source for SAI4A */
  29082. {
  29083. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  29084. 800c906: 4b81 ldr r3, [pc, #516] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29085. 800c908: 681b ldr r3, [r3, #0]
  29086. 800c90a: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  29087. 800c90e: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  29088. 800c912: d107 bne.n 800c924 <HAL_RCCEx_GetPeriphCLKFreq+0x348>
  29089. {
  29090. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  29091. 800c914: f107 0318 add.w r3, r7, #24
  29092. 800c918: 4618 mov r0, r3
  29093. 800c91a: f000 fbf5 bl 800d108 <HAL_RCCEx_GetPLL2ClockFreq>
  29094. frequency = pll2_clocks.PLL2_P_Frequency;
  29095. 800c91e: 69bb ldr r3, [r7, #24]
  29096. 800c920: 63fb str r3, [r7, #60] @ 0x3c
  29097. }
  29098. else
  29099. {
  29100. frequency = 0;
  29101. }
  29102. break;
  29103. 800c922: e3d2 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29104. frequency = 0;
  29105. 800c924: 2300 movs r3, #0
  29106. 800c926: 63fb str r3, [r7, #60] @ 0x3c
  29107. break;
  29108. 800c928: e3cf b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29109. }
  29110. case RCC_SAI4ACLKSOURCE_PLL3: /* PLLI3 is the clock source for SAI4A */
  29111. {
  29112. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  29113. 800c92a: 4b78 ldr r3, [pc, #480] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29114. 800c92c: 681b ldr r3, [r3, #0]
  29115. 800c92e: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  29116. 800c932: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29117. 800c936: d107 bne.n 800c948 <HAL_RCCEx_GetPeriphCLKFreq+0x36c>
  29118. {
  29119. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  29120. 800c938: f107 030c add.w r3, r7, #12
  29121. 800c93c: 4618 mov r0, r3
  29122. 800c93e: f000 fd37 bl 800d3b0 <HAL_RCCEx_GetPLL3ClockFreq>
  29123. frequency = pll3_clocks.PLL3_P_Frequency;
  29124. 800c942: 68fb ldr r3, [r7, #12]
  29125. 800c944: 63fb str r3, [r7, #60] @ 0x3c
  29126. }
  29127. else
  29128. {
  29129. frequency = 0;
  29130. }
  29131. break;
  29132. 800c946: e3c0 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29133. frequency = 0;
  29134. 800c948: 2300 movs r3, #0
  29135. 800c94a: 63fb str r3, [r7, #60] @ 0x3c
  29136. break;
  29137. 800c94c: e3bd b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29138. }
  29139. case RCC_SAI4ACLKSOURCE_CLKP: /* CKPER is the clock source for SAI4A*/
  29140. {
  29141. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  29142. 800c94e: 4b6f ldr r3, [pc, #444] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29143. 800c950: 6cdb ldr r3, [r3, #76] @ 0x4c
  29144. 800c952: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  29145. 800c956: 637b str r3, [r7, #52] @ 0x34
  29146. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  29147. 800c958: 4b6c ldr r3, [pc, #432] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29148. 800c95a: 681b ldr r3, [r3, #0]
  29149. 800c95c: f003 0304 and.w r3, r3, #4
  29150. 800c960: 2b04 cmp r3, #4
  29151. 800c962: d10c bne.n 800c97e <HAL_RCCEx_GetPeriphCLKFreq+0x3a2>
  29152. 800c964: 6b7b ldr r3, [r7, #52] @ 0x34
  29153. 800c966: 2b00 cmp r3, #0
  29154. 800c968: d109 bne.n 800c97e <HAL_RCCEx_GetPeriphCLKFreq+0x3a2>
  29155. {
  29156. /* In Case the CKPER Source is HSI */
  29157. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  29158. 800c96a: 4b68 ldr r3, [pc, #416] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29159. 800c96c: 681b ldr r3, [r3, #0]
  29160. 800c96e: 08db lsrs r3, r3, #3
  29161. 800c970: f003 0303 and.w r3, r3, #3
  29162. 800c974: 4a66 ldr r2, [pc, #408] @ (800cb10 <HAL_RCCEx_GetPeriphCLKFreq+0x534>)
  29163. 800c976: fa22 f303 lsr.w r3, r2, r3
  29164. 800c97a: 63fb str r3, [r7, #60] @ 0x3c
  29165. 800c97c: e01e b.n 800c9bc <HAL_RCCEx_GetPeriphCLKFreq+0x3e0>
  29166. }
  29167. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  29168. 800c97e: 4b63 ldr r3, [pc, #396] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29169. 800c980: 681b ldr r3, [r3, #0]
  29170. 800c982: f403 7380 and.w r3, r3, #256 @ 0x100
  29171. 800c986: f5b3 7f80 cmp.w r3, #256 @ 0x100
  29172. 800c98a: d106 bne.n 800c99a <HAL_RCCEx_GetPeriphCLKFreq+0x3be>
  29173. 800c98c: 6b7b ldr r3, [r7, #52] @ 0x34
  29174. 800c98e: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  29175. 800c992: d102 bne.n 800c99a <HAL_RCCEx_GetPeriphCLKFreq+0x3be>
  29176. {
  29177. /* In Case the CKPER Source is CSI */
  29178. frequency = CSI_VALUE;
  29179. 800c994: 4b5f ldr r3, [pc, #380] @ (800cb14 <HAL_RCCEx_GetPeriphCLKFreq+0x538>)
  29180. 800c996: 63fb str r3, [r7, #60] @ 0x3c
  29181. 800c998: e010 b.n 800c9bc <HAL_RCCEx_GetPeriphCLKFreq+0x3e0>
  29182. }
  29183. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  29184. 800c99a: 4b5c ldr r3, [pc, #368] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29185. 800c99c: 681b ldr r3, [r3, #0]
  29186. 800c99e: f403 3300 and.w r3, r3, #131072 @ 0x20000
  29187. 800c9a2: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  29188. 800c9a6: d106 bne.n 800c9b6 <HAL_RCCEx_GetPeriphCLKFreq+0x3da>
  29189. 800c9a8: 6b7b ldr r3, [r7, #52] @ 0x34
  29190. 800c9aa: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29191. 800c9ae: d102 bne.n 800c9b6 <HAL_RCCEx_GetPeriphCLKFreq+0x3da>
  29192. {
  29193. /* In Case the CKPER Source is HSE */
  29194. frequency = HSE_VALUE;
  29195. 800c9b0: 4b59 ldr r3, [pc, #356] @ (800cb18 <HAL_RCCEx_GetPeriphCLKFreq+0x53c>)
  29196. 800c9b2: 63fb str r3, [r7, #60] @ 0x3c
  29197. 800c9b4: e002 b.n 800c9bc <HAL_RCCEx_GetPeriphCLKFreq+0x3e0>
  29198. }
  29199. else
  29200. {
  29201. /* In Case the CKPER is disabled*/
  29202. frequency = 0;
  29203. 800c9b6: 2300 movs r3, #0
  29204. 800c9b8: 63fb str r3, [r7, #60] @ 0x3c
  29205. }
  29206. break;
  29207. 800c9ba: e386 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29208. 800c9bc: e385 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29209. }
  29210. case RCC_SAI4ACLKSOURCE_PIN: /* External clock is the clock source for SAI4A */
  29211. {
  29212. frequency = EXTERNAL_CLOCK_VALUE;
  29213. 800c9be: 4b57 ldr r3, [pc, #348] @ (800cb1c <HAL_RCCEx_GetPeriphCLKFreq+0x540>)
  29214. 800c9c0: 63fb str r3, [r7, #60] @ 0x3c
  29215. break;
  29216. 800c9c2: e382 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29217. }
  29218. default :
  29219. {
  29220. frequency = 0;
  29221. 800c9c4: 2300 movs r3, #0
  29222. 800c9c6: 63fb str r3, [r7, #60] @ 0x3c
  29223. break;
  29224. 800c9c8: e37f b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29225. }
  29226. }
  29227. }
  29228. else if (PeriphClk == RCC_PERIPHCLK_SAI4B)
  29229. 800c9ca: e9d7 2300 ldrd r2, r3, [r7]
  29230. 800c9ce: f5a2 6100 sub.w r1, r2, #2048 @ 0x800
  29231. 800c9d2: 430b orrs r3, r1
  29232. 800c9d4: f040 80a7 bne.w 800cb26 <HAL_RCCEx_GetPeriphCLKFreq+0x54a>
  29233. {
  29234. saiclocksource = __HAL_RCC_GET_SAI4B_SOURCE();
  29235. 800c9d8: 4b4c ldr r3, [pc, #304] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29236. 800c9da: 6d9b ldr r3, [r3, #88] @ 0x58
  29237. 800c9dc: f003 63e0 and.w r3, r3, #117440512 @ 0x7000000
  29238. 800c9e0: 633b str r3, [r7, #48] @ 0x30
  29239. switch (saiclocksource)
  29240. 800c9e2: 6b3b ldr r3, [r7, #48] @ 0x30
  29241. 800c9e4: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  29242. 800c9e8: d055 beq.n 800ca96 <HAL_RCCEx_GetPeriphCLKFreq+0x4ba>
  29243. 800c9ea: 6b3b ldr r3, [r7, #48] @ 0x30
  29244. 800c9ec: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  29245. 800c9f0: f200 8096 bhi.w 800cb20 <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  29246. 800c9f4: 6b3b ldr r3, [r7, #48] @ 0x30
  29247. 800c9f6: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  29248. 800c9fa: f000 8084 beq.w 800cb06 <HAL_RCCEx_GetPeriphCLKFreq+0x52a>
  29249. 800c9fe: 6b3b ldr r3, [r7, #48] @ 0x30
  29250. 800ca00: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  29251. 800ca04: f200 808c bhi.w 800cb20 <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  29252. 800ca08: 6b3b ldr r3, [r7, #48] @ 0x30
  29253. 800ca0a: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  29254. 800ca0e: d030 beq.n 800ca72 <HAL_RCCEx_GetPeriphCLKFreq+0x496>
  29255. 800ca10: 6b3b ldr r3, [r7, #48] @ 0x30
  29256. 800ca12: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  29257. 800ca16: f200 8083 bhi.w 800cb20 <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  29258. 800ca1a: 6b3b ldr r3, [r7, #48] @ 0x30
  29259. 800ca1c: 2b00 cmp r3, #0
  29260. 800ca1e: d004 beq.n 800ca2a <HAL_RCCEx_GetPeriphCLKFreq+0x44e>
  29261. 800ca20: 6b3b ldr r3, [r7, #48] @ 0x30
  29262. 800ca22: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000
  29263. 800ca26: d012 beq.n 800ca4e <HAL_RCCEx_GetPeriphCLKFreq+0x472>
  29264. 800ca28: e07a b.n 800cb20 <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  29265. {
  29266. case RCC_SAI4BCLKSOURCE_PLL: /* PLL1 is the clock source for SAI4B */
  29267. {
  29268. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  29269. 800ca2a: 4b38 ldr r3, [pc, #224] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29270. 800ca2c: 681b ldr r3, [r3, #0]
  29271. 800ca2e: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  29272. 800ca32: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  29273. 800ca36: d107 bne.n 800ca48 <HAL_RCCEx_GetPeriphCLKFreq+0x46c>
  29274. {
  29275. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  29276. 800ca38: f107 0324 add.w r3, r7, #36 @ 0x24
  29277. 800ca3c: 4618 mov r0, r3
  29278. 800ca3e: f000 fe0b bl 800d658 <HAL_RCCEx_GetPLL1ClockFreq>
  29279. frequency = pll1_clocks.PLL1_Q_Frequency;
  29280. 800ca42: 6abb ldr r3, [r7, #40] @ 0x28
  29281. 800ca44: 63fb str r3, [r7, #60] @ 0x3c
  29282. }
  29283. else
  29284. {
  29285. frequency = 0;
  29286. }
  29287. break;
  29288. 800ca46: e340 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29289. frequency = 0;
  29290. 800ca48: 2300 movs r3, #0
  29291. 800ca4a: 63fb str r3, [r7, #60] @ 0x3c
  29292. break;
  29293. 800ca4c: e33d b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29294. }
  29295. case RCC_SAI4BCLKSOURCE_PLL2: /* PLLI2 is the clock source for SAI4B */
  29296. {
  29297. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  29298. 800ca4e: 4b2f ldr r3, [pc, #188] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29299. 800ca50: 681b ldr r3, [r3, #0]
  29300. 800ca52: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  29301. 800ca56: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  29302. 800ca5a: d107 bne.n 800ca6c <HAL_RCCEx_GetPeriphCLKFreq+0x490>
  29303. {
  29304. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  29305. 800ca5c: f107 0318 add.w r3, r7, #24
  29306. 800ca60: 4618 mov r0, r3
  29307. 800ca62: f000 fb51 bl 800d108 <HAL_RCCEx_GetPLL2ClockFreq>
  29308. frequency = pll2_clocks.PLL2_P_Frequency;
  29309. 800ca66: 69bb ldr r3, [r7, #24]
  29310. 800ca68: 63fb str r3, [r7, #60] @ 0x3c
  29311. }
  29312. else
  29313. {
  29314. frequency = 0;
  29315. }
  29316. break;
  29317. 800ca6a: e32e b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29318. frequency = 0;
  29319. 800ca6c: 2300 movs r3, #0
  29320. 800ca6e: 63fb str r3, [r7, #60] @ 0x3c
  29321. break;
  29322. 800ca70: e32b b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29323. }
  29324. case RCC_SAI4BCLKSOURCE_PLL3: /* PLLI3 is the clock source for SAI4B */
  29325. {
  29326. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  29327. 800ca72: 4b26 ldr r3, [pc, #152] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29328. 800ca74: 681b ldr r3, [r3, #0]
  29329. 800ca76: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  29330. 800ca7a: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29331. 800ca7e: d107 bne.n 800ca90 <HAL_RCCEx_GetPeriphCLKFreq+0x4b4>
  29332. {
  29333. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  29334. 800ca80: f107 030c add.w r3, r7, #12
  29335. 800ca84: 4618 mov r0, r3
  29336. 800ca86: f000 fc93 bl 800d3b0 <HAL_RCCEx_GetPLL3ClockFreq>
  29337. frequency = pll3_clocks.PLL3_P_Frequency;
  29338. 800ca8a: 68fb ldr r3, [r7, #12]
  29339. 800ca8c: 63fb str r3, [r7, #60] @ 0x3c
  29340. }
  29341. else
  29342. {
  29343. frequency = 0;
  29344. }
  29345. break;
  29346. 800ca8e: e31c b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29347. frequency = 0;
  29348. 800ca90: 2300 movs r3, #0
  29349. 800ca92: 63fb str r3, [r7, #60] @ 0x3c
  29350. break;
  29351. 800ca94: e319 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29352. }
  29353. case RCC_SAI4BCLKSOURCE_CLKP: /* CKPER is the clock source for SAI4B*/
  29354. {
  29355. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  29356. 800ca96: 4b1d ldr r3, [pc, #116] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29357. 800ca98: 6cdb ldr r3, [r3, #76] @ 0x4c
  29358. 800ca9a: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  29359. 800ca9e: 637b str r3, [r7, #52] @ 0x34
  29360. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  29361. 800caa0: 4b1a ldr r3, [pc, #104] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29362. 800caa2: 681b ldr r3, [r3, #0]
  29363. 800caa4: f003 0304 and.w r3, r3, #4
  29364. 800caa8: 2b04 cmp r3, #4
  29365. 800caaa: d10c bne.n 800cac6 <HAL_RCCEx_GetPeriphCLKFreq+0x4ea>
  29366. 800caac: 6b7b ldr r3, [r7, #52] @ 0x34
  29367. 800caae: 2b00 cmp r3, #0
  29368. 800cab0: d109 bne.n 800cac6 <HAL_RCCEx_GetPeriphCLKFreq+0x4ea>
  29369. {
  29370. /* In Case the CKPER Source is HSI */
  29371. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  29372. 800cab2: 4b16 ldr r3, [pc, #88] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29373. 800cab4: 681b ldr r3, [r3, #0]
  29374. 800cab6: 08db lsrs r3, r3, #3
  29375. 800cab8: f003 0303 and.w r3, r3, #3
  29376. 800cabc: 4a14 ldr r2, [pc, #80] @ (800cb10 <HAL_RCCEx_GetPeriphCLKFreq+0x534>)
  29377. 800cabe: fa22 f303 lsr.w r3, r2, r3
  29378. 800cac2: 63fb str r3, [r7, #60] @ 0x3c
  29379. 800cac4: e01e b.n 800cb04 <HAL_RCCEx_GetPeriphCLKFreq+0x528>
  29380. }
  29381. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  29382. 800cac6: 4b11 ldr r3, [pc, #68] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29383. 800cac8: 681b ldr r3, [r3, #0]
  29384. 800caca: f403 7380 and.w r3, r3, #256 @ 0x100
  29385. 800cace: f5b3 7f80 cmp.w r3, #256 @ 0x100
  29386. 800cad2: d106 bne.n 800cae2 <HAL_RCCEx_GetPeriphCLKFreq+0x506>
  29387. 800cad4: 6b7b ldr r3, [r7, #52] @ 0x34
  29388. 800cad6: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  29389. 800cada: d102 bne.n 800cae2 <HAL_RCCEx_GetPeriphCLKFreq+0x506>
  29390. {
  29391. /* In Case the CKPER Source is CSI */
  29392. frequency = CSI_VALUE;
  29393. 800cadc: 4b0d ldr r3, [pc, #52] @ (800cb14 <HAL_RCCEx_GetPeriphCLKFreq+0x538>)
  29394. 800cade: 63fb str r3, [r7, #60] @ 0x3c
  29395. 800cae0: e010 b.n 800cb04 <HAL_RCCEx_GetPeriphCLKFreq+0x528>
  29396. }
  29397. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  29398. 800cae2: 4b0a ldr r3, [pc, #40] @ (800cb0c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  29399. 800cae4: 681b ldr r3, [r3, #0]
  29400. 800cae6: f403 3300 and.w r3, r3, #131072 @ 0x20000
  29401. 800caea: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  29402. 800caee: d106 bne.n 800cafe <HAL_RCCEx_GetPeriphCLKFreq+0x522>
  29403. 800caf0: 6b7b ldr r3, [r7, #52] @ 0x34
  29404. 800caf2: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29405. 800caf6: d102 bne.n 800cafe <HAL_RCCEx_GetPeriphCLKFreq+0x522>
  29406. {
  29407. /* In Case the CKPER Source is HSE */
  29408. frequency = HSE_VALUE;
  29409. 800caf8: 4b07 ldr r3, [pc, #28] @ (800cb18 <HAL_RCCEx_GetPeriphCLKFreq+0x53c>)
  29410. 800cafa: 63fb str r3, [r7, #60] @ 0x3c
  29411. 800cafc: e002 b.n 800cb04 <HAL_RCCEx_GetPeriphCLKFreq+0x528>
  29412. }
  29413. else
  29414. {
  29415. /* In Case the CKPER is disabled*/
  29416. frequency = 0;
  29417. 800cafe: 2300 movs r3, #0
  29418. 800cb00: 63fb str r3, [r7, #60] @ 0x3c
  29419. }
  29420. break;
  29421. 800cb02: e2e2 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29422. 800cb04: e2e1 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29423. }
  29424. case RCC_SAI4BCLKSOURCE_PIN: /* External clock is the clock source for SAI4B */
  29425. {
  29426. frequency = EXTERNAL_CLOCK_VALUE;
  29427. 800cb06: 4b05 ldr r3, [pc, #20] @ (800cb1c <HAL_RCCEx_GetPeriphCLKFreq+0x540>)
  29428. 800cb08: 63fb str r3, [r7, #60] @ 0x3c
  29429. break;
  29430. 800cb0a: e2de b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29431. 800cb0c: 58024400 .word 0x58024400
  29432. 800cb10: 03d09000 .word 0x03d09000
  29433. 800cb14: 003d0900 .word 0x003d0900
  29434. 800cb18: 017d7840 .word 0x017d7840
  29435. 800cb1c: 00bb8000 .word 0x00bb8000
  29436. }
  29437. default :
  29438. {
  29439. frequency = 0;
  29440. 800cb20: 2300 movs r3, #0
  29441. 800cb22: 63fb str r3, [r7, #60] @ 0x3c
  29442. break;
  29443. 800cb24: e2d1 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29444. }
  29445. }
  29446. }
  29447. #endif /*SAI4*/
  29448. else if (PeriphClk == RCC_PERIPHCLK_SPI123)
  29449. 800cb26: e9d7 2300 ldrd r2, r3, [r7]
  29450. 800cb2a: f5a2 5180 sub.w r1, r2, #4096 @ 0x1000
  29451. 800cb2e: 430b orrs r3, r1
  29452. 800cb30: f040 809c bne.w 800cc6c <HAL_RCCEx_GetPeriphCLKFreq+0x690>
  29453. {
  29454. /* Get SPI1/2/3 clock source */
  29455. srcclk = __HAL_RCC_GET_SPI123_SOURCE();
  29456. 800cb34: 4b93 ldr r3, [pc, #588] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29457. 800cb36: 6d1b ldr r3, [r3, #80] @ 0x50
  29458. 800cb38: f403 43e0 and.w r3, r3, #28672 @ 0x7000
  29459. 800cb3c: 63bb str r3, [r7, #56] @ 0x38
  29460. switch (srcclk)
  29461. 800cb3e: 6bbb ldr r3, [r7, #56] @ 0x38
  29462. 800cb40: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  29463. 800cb44: d054 beq.n 800cbf0 <HAL_RCCEx_GetPeriphCLKFreq+0x614>
  29464. 800cb46: 6bbb ldr r3, [r7, #56] @ 0x38
  29465. 800cb48: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  29466. 800cb4c: f200 808b bhi.w 800cc66 <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  29467. 800cb50: 6bbb ldr r3, [r7, #56] @ 0x38
  29468. 800cb52: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  29469. 800cb56: f000 8083 beq.w 800cc60 <HAL_RCCEx_GetPeriphCLKFreq+0x684>
  29470. 800cb5a: 6bbb ldr r3, [r7, #56] @ 0x38
  29471. 800cb5c: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  29472. 800cb60: f200 8081 bhi.w 800cc66 <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  29473. 800cb64: 6bbb ldr r3, [r7, #56] @ 0x38
  29474. 800cb66: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  29475. 800cb6a: d02f beq.n 800cbcc <HAL_RCCEx_GetPeriphCLKFreq+0x5f0>
  29476. 800cb6c: 6bbb ldr r3, [r7, #56] @ 0x38
  29477. 800cb6e: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  29478. 800cb72: d878 bhi.n 800cc66 <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  29479. 800cb74: 6bbb ldr r3, [r7, #56] @ 0x38
  29480. 800cb76: 2b00 cmp r3, #0
  29481. 800cb78: d004 beq.n 800cb84 <HAL_RCCEx_GetPeriphCLKFreq+0x5a8>
  29482. 800cb7a: 6bbb ldr r3, [r7, #56] @ 0x38
  29483. 800cb7c: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  29484. 800cb80: d012 beq.n 800cba8 <HAL_RCCEx_GetPeriphCLKFreq+0x5cc>
  29485. 800cb82: e070 b.n 800cc66 <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  29486. {
  29487. case RCC_SPI123CLKSOURCE_PLL: /* PLL1 is the clock source for SPI123 */
  29488. {
  29489. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  29490. 800cb84: 4b7f ldr r3, [pc, #508] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29491. 800cb86: 681b ldr r3, [r3, #0]
  29492. 800cb88: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  29493. 800cb8c: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  29494. 800cb90: d107 bne.n 800cba2 <HAL_RCCEx_GetPeriphCLKFreq+0x5c6>
  29495. {
  29496. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  29497. 800cb92: f107 0324 add.w r3, r7, #36 @ 0x24
  29498. 800cb96: 4618 mov r0, r3
  29499. 800cb98: f000 fd5e bl 800d658 <HAL_RCCEx_GetPLL1ClockFreq>
  29500. frequency = pll1_clocks.PLL1_Q_Frequency;
  29501. 800cb9c: 6abb ldr r3, [r7, #40] @ 0x28
  29502. 800cb9e: 63fb str r3, [r7, #60] @ 0x3c
  29503. }
  29504. else
  29505. {
  29506. frequency = 0;
  29507. }
  29508. break;
  29509. 800cba0: e293 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29510. frequency = 0;
  29511. 800cba2: 2300 movs r3, #0
  29512. 800cba4: 63fb str r3, [r7, #60] @ 0x3c
  29513. break;
  29514. 800cba6: e290 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29515. }
  29516. case RCC_SPI123CLKSOURCE_PLL2: /* PLL2 is the clock source for SPI123 */
  29517. {
  29518. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  29519. 800cba8: 4b76 ldr r3, [pc, #472] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29520. 800cbaa: 681b ldr r3, [r3, #0]
  29521. 800cbac: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  29522. 800cbb0: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  29523. 800cbb4: d107 bne.n 800cbc6 <HAL_RCCEx_GetPeriphCLKFreq+0x5ea>
  29524. {
  29525. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  29526. 800cbb6: f107 0318 add.w r3, r7, #24
  29527. 800cbba: 4618 mov r0, r3
  29528. 800cbbc: f000 faa4 bl 800d108 <HAL_RCCEx_GetPLL2ClockFreq>
  29529. frequency = pll2_clocks.PLL2_P_Frequency;
  29530. 800cbc0: 69bb ldr r3, [r7, #24]
  29531. 800cbc2: 63fb str r3, [r7, #60] @ 0x3c
  29532. }
  29533. else
  29534. {
  29535. frequency = 0;
  29536. }
  29537. break;
  29538. 800cbc4: e281 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29539. frequency = 0;
  29540. 800cbc6: 2300 movs r3, #0
  29541. 800cbc8: 63fb str r3, [r7, #60] @ 0x3c
  29542. break;
  29543. 800cbca: e27e b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29544. }
  29545. case RCC_SPI123CLKSOURCE_PLL3: /* PLL3 is the clock source for SPI123 */
  29546. {
  29547. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  29548. 800cbcc: 4b6d ldr r3, [pc, #436] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29549. 800cbce: 681b ldr r3, [r3, #0]
  29550. 800cbd0: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  29551. 800cbd4: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29552. 800cbd8: d107 bne.n 800cbea <HAL_RCCEx_GetPeriphCLKFreq+0x60e>
  29553. {
  29554. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  29555. 800cbda: f107 030c add.w r3, r7, #12
  29556. 800cbde: 4618 mov r0, r3
  29557. 800cbe0: f000 fbe6 bl 800d3b0 <HAL_RCCEx_GetPLL3ClockFreq>
  29558. frequency = pll3_clocks.PLL3_P_Frequency;
  29559. 800cbe4: 68fb ldr r3, [r7, #12]
  29560. 800cbe6: 63fb str r3, [r7, #60] @ 0x3c
  29561. }
  29562. else
  29563. {
  29564. frequency = 0;
  29565. }
  29566. break;
  29567. 800cbe8: e26f b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29568. frequency = 0;
  29569. 800cbea: 2300 movs r3, #0
  29570. 800cbec: 63fb str r3, [r7, #60] @ 0x3c
  29571. break;
  29572. 800cbee: e26c b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29573. }
  29574. case RCC_SPI123CLKSOURCE_CLKP: /* CKPER is the clock source for SPI123 */
  29575. {
  29576. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  29577. 800cbf0: 4b64 ldr r3, [pc, #400] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29578. 800cbf2: 6cdb ldr r3, [r3, #76] @ 0x4c
  29579. 800cbf4: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  29580. 800cbf8: 637b str r3, [r7, #52] @ 0x34
  29581. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  29582. 800cbfa: 4b62 ldr r3, [pc, #392] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29583. 800cbfc: 681b ldr r3, [r3, #0]
  29584. 800cbfe: f003 0304 and.w r3, r3, #4
  29585. 800cc02: 2b04 cmp r3, #4
  29586. 800cc04: d10c bne.n 800cc20 <HAL_RCCEx_GetPeriphCLKFreq+0x644>
  29587. 800cc06: 6b7b ldr r3, [r7, #52] @ 0x34
  29588. 800cc08: 2b00 cmp r3, #0
  29589. 800cc0a: d109 bne.n 800cc20 <HAL_RCCEx_GetPeriphCLKFreq+0x644>
  29590. {
  29591. /* In Case the CKPER Source is HSI */
  29592. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  29593. 800cc0c: 4b5d ldr r3, [pc, #372] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29594. 800cc0e: 681b ldr r3, [r3, #0]
  29595. 800cc10: 08db lsrs r3, r3, #3
  29596. 800cc12: f003 0303 and.w r3, r3, #3
  29597. 800cc16: 4a5c ldr r2, [pc, #368] @ (800cd88 <HAL_RCCEx_GetPeriphCLKFreq+0x7ac>)
  29598. 800cc18: fa22 f303 lsr.w r3, r2, r3
  29599. 800cc1c: 63fb str r3, [r7, #60] @ 0x3c
  29600. 800cc1e: e01e b.n 800cc5e <HAL_RCCEx_GetPeriphCLKFreq+0x682>
  29601. }
  29602. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  29603. 800cc20: 4b58 ldr r3, [pc, #352] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29604. 800cc22: 681b ldr r3, [r3, #0]
  29605. 800cc24: f403 7380 and.w r3, r3, #256 @ 0x100
  29606. 800cc28: f5b3 7f80 cmp.w r3, #256 @ 0x100
  29607. 800cc2c: d106 bne.n 800cc3c <HAL_RCCEx_GetPeriphCLKFreq+0x660>
  29608. 800cc2e: 6b7b ldr r3, [r7, #52] @ 0x34
  29609. 800cc30: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  29610. 800cc34: d102 bne.n 800cc3c <HAL_RCCEx_GetPeriphCLKFreq+0x660>
  29611. {
  29612. /* In Case the CKPER Source is CSI */
  29613. frequency = CSI_VALUE;
  29614. 800cc36: 4b55 ldr r3, [pc, #340] @ (800cd8c <HAL_RCCEx_GetPeriphCLKFreq+0x7b0>)
  29615. 800cc38: 63fb str r3, [r7, #60] @ 0x3c
  29616. 800cc3a: e010 b.n 800cc5e <HAL_RCCEx_GetPeriphCLKFreq+0x682>
  29617. }
  29618. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  29619. 800cc3c: 4b51 ldr r3, [pc, #324] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29620. 800cc3e: 681b ldr r3, [r3, #0]
  29621. 800cc40: f403 3300 and.w r3, r3, #131072 @ 0x20000
  29622. 800cc44: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  29623. 800cc48: d106 bne.n 800cc58 <HAL_RCCEx_GetPeriphCLKFreq+0x67c>
  29624. 800cc4a: 6b7b ldr r3, [r7, #52] @ 0x34
  29625. 800cc4c: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29626. 800cc50: d102 bne.n 800cc58 <HAL_RCCEx_GetPeriphCLKFreq+0x67c>
  29627. {
  29628. /* In Case the CKPER Source is HSE */
  29629. frequency = HSE_VALUE;
  29630. 800cc52: 4b4f ldr r3, [pc, #316] @ (800cd90 <HAL_RCCEx_GetPeriphCLKFreq+0x7b4>)
  29631. 800cc54: 63fb str r3, [r7, #60] @ 0x3c
  29632. 800cc56: e002 b.n 800cc5e <HAL_RCCEx_GetPeriphCLKFreq+0x682>
  29633. }
  29634. else
  29635. {
  29636. /* In Case the CKPER is disabled*/
  29637. frequency = 0;
  29638. 800cc58: 2300 movs r3, #0
  29639. 800cc5a: 63fb str r3, [r7, #60] @ 0x3c
  29640. }
  29641. break;
  29642. 800cc5c: e235 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29643. 800cc5e: e234 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29644. }
  29645. case (RCC_SPI123CLKSOURCE_PIN): /* External clock is the clock source for I2S */
  29646. {
  29647. frequency = EXTERNAL_CLOCK_VALUE;
  29648. 800cc60: 4b4c ldr r3, [pc, #304] @ (800cd94 <HAL_RCCEx_GetPeriphCLKFreq+0x7b8>)
  29649. 800cc62: 63fb str r3, [r7, #60] @ 0x3c
  29650. break;
  29651. 800cc64: e231 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29652. }
  29653. default :
  29654. {
  29655. frequency = 0;
  29656. 800cc66: 2300 movs r3, #0
  29657. 800cc68: 63fb str r3, [r7, #60] @ 0x3c
  29658. break;
  29659. 800cc6a: e22e b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29660. }
  29661. }
  29662. }
  29663. else if (PeriphClk == RCC_PERIPHCLK_SPI45)
  29664. 800cc6c: e9d7 2300 ldrd r2, r3, [r7]
  29665. 800cc70: f5a2 5100 sub.w r1, r2, #8192 @ 0x2000
  29666. 800cc74: 430b orrs r3, r1
  29667. 800cc76: f040 808f bne.w 800cd98 <HAL_RCCEx_GetPeriphCLKFreq+0x7bc>
  29668. {
  29669. /* Get SPI45 clock source */
  29670. srcclk = __HAL_RCC_GET_SPI45_SOURCE();
  29671. 800cc7a: 4b42 ldr r3, [pc, #264] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29672. 800cc7c: 6d1b ldr r3, [r3, #80] @ 0x50
  29673. 800cc7e: f403 23e0 and.w r3, r3, #458752 @ 0x70000
  29674. 800cc82: 63bb str r3, [r7, #56] @ 0x38
  29675. switch (srcclk)
  29676. 800cc84: 6bbb ldr r3, [r7, #56] @ 0x38
  29677. 800cc86: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  29678. 800cc8a: d06b beq.n 800cd64 <HAL_RCCEx_GetPeriphCLKFreq+0x788>
  29679. 800cc8c: 6bbb ldr r3, [r7, #56] @ 0x38
  29680. 800cc8e: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  29681. 800cc92: d874 bhi.n 800cd7e <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  29682. 800cc94: 6bbb ldr r3, [r7, #56] @ 0x38
  29683. 800cc96: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  29684. 800cc9a: d056 beq.n 800cd4a <HAL_RCCEx_GetPeriphCLKFreq+0x76e>
  29685. 800cc9c: 6bbb ldr r3, [r7, #56] @ 0x38
  29686. 800cc9e: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  29687. 800cca2: d86c bhi.n 800cd7e <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  29688. 800cca4: 6bbb ldr r3, [r7, #56] @ 0x38
  29689. 800cca6: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  29690. 800ccaa: d03b beq.n 800cd24 <HAL_RCCEx_GetPeriphCLKFreq+0x748>
  29691. 800ccac: 6bbb ldr r3, [r7, #56] @ 0x38
  29692. 800ccae: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  29693. 800ccb2: d864 bhi.n 800cd7e <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  29694. 800ccb4: 6bbb ldr r3, [r7, #56] @ 0x38
  29695. 800ccb6: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  29696. 800ccba: d021 beq.n 800cd00 <HAL_RCCEx_GetPeriphCLKFreq+0x724>
  29697. 800ccbc: 6bbb ldr r3, [r7, #56] @ 0x38
  29698. 800ccbe: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  29699. 800ccc2: d85c bhi.n 800cd7e <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  29700. 800ccc4: 6bbb ldr r3, [r7, #56] @ 0x38
  29701. 800ccc6: 2b00 cmp r3, #0
  29702. 800ccc8: d004 beq.n 800ccd4 <HAL_RCCEx_GetPeriphCLKFreq+0x6f8>
  29703. 800ccca: 6bbb ldr r3, [r7, #56] @ 0x38
  29704. 800cccc: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  29705. 800ccd0: d004 beq.n 800ccdc <HAL_RCCEx_GetPeriphCLKFreq+0x700>
  29706. 800ccd2: e054 b.n 800cd7e <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  29707. {
  29708. case RCC_SPI45CLKSOURCE_PCLK2: /* CD/D2 PCLK2 is the clock source for SPI4/5 */
  29709. {
  29710. frequency = HAL_RCC_GetPCLK1Freq();
  29711. 800ccd4: f7fe fa26 bl 800b124 <HAL_RCC_GetPCLK1Freq>
  29712. 800ccd8: 63f8 str r0, [r7, #60] @ 0x3c
  29713. break;
  29714. 800ccda: e1f6 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29715. }
  29716. case RCC_SPI45CLKSOURCE_PLL2: /* PLL2 is the clock source for SPI45 */
  29717. {
  29718. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  29719. 800ccdc: 4b29 ldr r3, [pc, #164] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29720. 800ccde: 681b ldr r3, [r3, #0]
  29721. 800cce0: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  29722. 800cce4: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  29723. 800cce8: d107 bne.n 800ccfa <HAL_RCCEx_GetPeriphCLKFreq+0x71e>
  29724. {
  29725. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  29726. 800ccea: f107 0318 add.w r3, r7, #24
  29727. 800ccee: 4618 mov r0, r3
  29728. 800ccf0: f000 fa0a bl 800d108 <HAL_RCCEx_GetPLL2ClockFreq>
  29729. frequency = pll2_clocks.PLL2_Q_Frequency;
  29730. 800ccf4: 69fb ldr r3, [r7, #28]
  29731. 800ccf6: 63fb str r3, [r7, #60] @ 0x3c
  29732. }
  29733. else
  29734. {
  29735. frequency = 0;
  29736. }
  29737. break;
  29738. 800ccf8: e1e7 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29739. frequency = 0;
  29740. 800ccfa: 2300 movs r3, #0
  29741. 800ccfc: 63fb str r3, [r7, #60] @ 0x3c
  29742. break;
  29743. 800ccfe: e1e4 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29744. }
  29745. case RCC_SPI45CLKSOURCE_PLL3: /* PLL3 is the clock source for SPI45 */
  29746. {
  29747. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  29748. 800cd00: 4b20 ldr r3, [pc, #128] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29749. 800cd02: 681b ldr r3, [r3, #0]
  29750. 800cd04: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  29751. 800cd08: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29752. 800cd0c: d107 bne.n 800cd1e <HAL_RCCEx_GetPeriphCLKFreq+0x742>
  29753. {
  29754. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  29755. 800cd0e: f107 030c add.w r3, r7, #12
  29756. 800cd12: 4618 mov r0, r3
  29757. 800cd14: f000 fb4c bl 800d3b0 <HAL_RCCEx_GetPLL3ClockFreq>
  29758. frequency = pll3_clocks.PLL3_Q_Frequency;
  29759. 800cd18: 693b ldr r3, [r7, #16]
  29760. 800cd1a: 63fb str r3, [r7, #60] @ 0x3c
  29761. }
  29762. else
  29763. {
  29764. frequency = 0;
  29765. }
  29766. break;
  29767. 800cd1c: e1d5 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29768. frequency = 0;
  29769. 800cd1e: 2300 movs r3, #0
  29770. 800cd20: 63fb str r3, [r7, #60] @ 0x3c
  29771. break;
  29772. 800cd22: e1d2 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29773. }
  29774. case RCC_SPI45CLKSOURCE_HSI: /* HSI is the clock source for SPI45 */
  29775. {
  29776. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))
  29777. 800cd24: 4b17 ldr r3, [pc, #92] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29778. 800cd26: 681b ldr r3, [r3, #0]
  29779. 800cd28: f003 0304 and.w r3, r3, #4
  29780. 800cd2c: 2b04 cmp r3, #4
  29781. 800cd2e: d109 bne.n 800cd44 <HAL_RCCEx_GetPeriphCLKFreq+0x768>
  29782. {
  29783. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  29784. 800cd30: 4b14 ldr r3, [pc, #80] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29785. 800cd32: 681b ldr r3, [r3, #0]
  29786. 800cd34: 08db lsrs r3, r3, #3
  29787. 800cd36: f003 0303 and.w r3, r3, #3
  29788. 800cd3a: 4a13 ldr r2, [pc, #76] @ (800cd88 <HAL_RCCEx_GetPeriphCLKFreq+0x7ac>)
  29789. 800cd3c: fa22 f303 lsr.w r3, r2, r3
  29790. 800cd40: 63fb str r3, [r7, #60] @ 0x3c
  29791. }
  29792. else
  29793. {
  29794. frequency = 0;
  29795. }
  29796. break;
  29797. 800cd42: e1c2 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29798. frequency = 0;
  29799. 800cd44: 2300 movs r3, #0
  29800. 800cd46: 63fb str r3, [r7, #60] @ 0x3c
  29801. break;
  29802. 800cd48: e1bf b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29803. }
  29804. case RCC_SPI45CLKSOURCE_CSI: /* CSI is the clock source for SPI45 */
  29805. {
  29806. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY))
  29807. 800cd4a: 4b0e ldr r3, [pc, #56] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29808. 800cd4c: 681b ldr r3, [r3, #0]
  29809. 800cd4e: f403 7380 and.w r3, r3, #256 @ 0x100
  29810. 800cd52: f5b3 7f80 cmp.w r3, #256 @ 0x100
  29811. 800cd56: d102 bne.n 800cd5e <HAL_RCCEx_GetPeriphCLKFreq+0x782>
  29812. {
  29813. frequency = CSI_VALUE;
  29814. 800cd58: 4b0c ldr r3, [pc, #48] @ (800cd8c <HAL_RCCEx_GetPeriphCLKFreq+0x7b0>)
  29815. 800cd5a: 63fb str r3, [r7, #60] @ 0x3c
  29816. }
  29817. else
  29818. {
  29819. frequency = 0;
  29820. }
  29821. break;
  29822. 800cd5c: e1b5 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29823. frequency = 0;
  29824. 800cd5e: 2300 movs r3, #0
  29825. 800cd60: 63fb str r3, [r7, #60] @ 0x3c
  29826. break;
  29827. 800cd62: e1b2 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29828. }
  29829. case RCC_SPI45CLKSOURCE_HSE: /* HSE is the clock source for SPI45 */
  29830. {
  29831. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
  29832. 800cd64: 4b07 ldr r3, [pc, #28] @ (800cd84 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  29833. 800cd66: 681b ldr r3, [r3, #0]
  29834. 800cd68: f403 3300 and.w r3, r3, #131072 @ 0x20000
  29835. 800cd6c: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  29836. 800cd70: d102 bne.n 800cd78 <HAL_RCCEx_GetPeriphCLKFreq+0x79c>
  29837. {
  29838. frequency = HSE_VALUE;
  29839. 800cd72: 4b07 ldr r3, [pc, #28] @ (800cd90 <HAL_RCCEx_GetPeriphCLKFreq+0x7b4>)
  29840. 800cd74: 63fb str r3, [r7, #60] @ 0x3c
  29841. }
  29842. else
  29843. {
  29844. frequency = 0;
  29845. }
  29846. break;
  29847. 800cd76: e1a8 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29848. frequency = 0;
  29849. 800cd78: 2300 movs r3, #0
  29850. 800cd7a: 63fb str r3, [r7, #60] @ 0x3c
  29851. break;
  29852. 800cd7c: e1a5 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29853. }
  29854. default :
  29855. {
  29856. frequency = 0;
  29857. 800cd7e: 2300 movs r3, #0
  29858. 800cd80: 63fb str r3, [r7, #60] @ 0x3c
  29859. break;
  29860. 800cd82: e1a2 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29861. 800cd84: 58024400 .word 0x58024400
  29862. 800cd88: 03d09000 .word 0x03d09000
  29863. 800cd8c: 003d0900 .word 0x003d0900
  29864. 800cd90: 017d7840 .word 0x017d7840
  29865. 800cd94: 00bb8000 .word 0x00bb8000
  29866. }
  29867. }
  29868. }
  29869. else if (PeriphClk == RCC_PERIPHCLK_ADC)
  29870. 800cd98: e9d7 2300 ldrd r2, r3, [r7]
  29871. 800cd9c: f5a2 2100 sub.w r1, r2, #524288 @ 0x80000
  29872. 800cda0: 430b orrs r3, r1
  29873. 800cda2: d173 bne.n 800ce8c <HAL_RCCEx_GetPeriphCLKFreq+0x8b0>
  29874. {
  29875. /* Get ADC clock source */
  29876. srcclk = __HAL_RCC_GET_ADC_SOURCE();
  29877. 800cda4: 4b9c ldr r3, [pc, #624] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  29878. 800cda6: 6d9b ldr r3, [r3, #88] @ 0x58
  29879. 800cda8: f403 3340 and.w r3, r3, #196608 @ 0x30000
  29880. 800cdac: 63bb str r3, [r7, #56] @ 0x38
  29881. switch (srcclk)
  29882. 800cdae: 6bbb ldr r3, [r7, #56] @ 0x38
  29883. 800cdb0: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  29884. 800cdb4: d02f beq.n 800ce16 <HAL_RCCEx_GetPeriphCLKFreq+0x83a>
  29885. 800cdb6: 6bbb ldr r3, [r7, #56] @ 0x38
  29886. 800cdb8: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  29887. 800cdbc: d863 bhi.n 800ce86 <HAL_RCCEx_GetPeriphCLKFreq+0x8aa>
  29888. 800cdbe: 6bbb ldr r3, [r7, #56] @ 0x38
  29889. 800cdc0: 2b00 cmp r3, #0
  29890. 800cdc2: d004 beq.n 800cdce <HAL_RCCEx_GetPeriphCLKFreq+0x7f2>
  29891. 800cdc4: 6bbb ldr r3, [r7, #56] @ 0x38
  29892. 800cdc6: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  29893. 800cdca: d012 beq.n 800cdf2 <HAL_RCCEx_GetPeriphCLKFreq+0x816>
  29894. 800cdcc: e05b b.n 800ce86 <HAL_RCCEx_GetPeriphCLKFreq+0x8aa>
  29895. {
  29896. case RCC_ADCCLKSOURCE_PLL2:
  29897. {
  29898. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  29899. 800cdce: 4b92 ldr r3, [pc, #584] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  29900. 800cdd0: 681b ldr r3, [r3, #0]
  29901. 800cdd2: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  29902. 800cdd6: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  29903. 800cdda: d107 bne.n 800cdec <HAL_RCCEx_GetPeriphCLKFreq+0x810>
  29904. {
  29905. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  29906. 800cddc: f107 0318 add.w r3, r7, #24
  29907. 800cde0: 4618 mov r0, r3
  29908. 800cde2: f000 f991 bl 800d108 <HAL_RCCEx_GetPLL2ClockFreq>
  29909. frequency = pll2_clocks.PLL2_P_Frequency;
  29910. 800cde6: 69bb ldr r3, [r7, #24]
  29911. 800cde8: 63fb str r3, [r7, #60] @ 0x3c
  29912. }
  29913. else
  29914. {
  29915. frequency = 0;
  29916. }
  29917. break;
  29918. 800cdea: e16e b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29919. frequency = 0;
  29920. 800cdec: 2300 movs r3, #0
  29921. 800cdee: 63fb str r3, [r7, #60] @ 0x3c
  29922. break;
  29923. 800cdf0: e16b b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29924. }
  29925. case RCC_ADCCLKSOURCE_PLL3:
  29926. {
  29927. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  29928. 800cdf2: 4b89 ldr r3, [pc, #548] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  29929. 800cdf4: 681b ldr r3, [r3, #0]
  29930. 800cdf6: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  29931. 800cdfa: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29932. 800cdfe: d107 bne.n 800ce10 <HAL_RCCEx_GetPeriphCLKFreq+0x834>
  29933. {
  29934. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  29935. 800ce00: f107 030c add.w r3, r7, #12
  29936. 800ce04: 4618 mov r0, r3
  29937. 800ce06: f000 fad3 bl 800d3b0 <HAL_RCCEx_GetPLL3ClockFreq>
  29938. frequency = pll3_clocks.PLL3_R_Frequency;
  29939. 800ce0a: 697b ldr r3, [r7, #20]
  29940. 800ce0c: 63fb str r3, [r7, #60] @ 0x3c
  29941. }
  29942. else
  29943. {
  29944. frequency = 0;
  29945. }
  29946. break;
  29947. 800ce0e: e15c b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29948. frequency = 0;
  29949. 800ce10: 2300 movs r3, #0
  29950. 800ce12: 63fb str r3, [r7, #60] @ 0x3c
  29951. break;
  29952. 800ce14: e159 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  29953. }
  29954. case RCC_ADCCLKSOURCE_CLKP:
  29955. {
  29956. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  29957. 800ce16: 4b80 ldr r3, [pc, #512] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  29958. 800ce18: 6cdb ldr r3, [r3, #76] @ 0x4c
  29959. 800ce1a: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  29960. 800ce1e: 637b str r3, [r7, #52] @ 0x34
  29961. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  29962. 800ce20: 4b7d ldr r3, [pc, #500] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  29963. 800ce22: 681b ldr r3, [r3, #0]
  29964. 800ce24: f003 0304 and.w r3, r3, #4
  29965. 800ce28: 2b04 cmp r3, #4
  29966. 800ce2a: d10c bne.n 800ce46 <HAL_RCCEx_GetPeriphCLKFreq+0x86a>
  29967. 800ce2c: 6b7b ldr r3, [r7, #52] @ 0x34
  29968. 800ce2e: 2b00 cmp r3, #0
  29969. 800ce30: d109 bne.n 800ce46 <HAL_RCCEx_GetPeriphCLKFreq+0x86a>
  29970. {
  29971. /* In Case the CKPER Source is HSI */
  29972. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  29973. 800ce32: 4b79 ldr r3, [pc, #484] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  29974. 800ce34: 681b ldr r3, [r3, #0]
  29975. 800ce36: 08db lsrs r3, r3, #3
  29976. 800ce38: f003 0303 and.w r3, r3, #3
  29977. 800ce3c: 4a77 ldr r2, [pc, #476] @ (800d01c <HAL_RCCEx_GetPeriphCLKFreq+0xa40>)
  29978. 800ce3e: fa22 f303 lsr.w r3, r2, r3
  29979. 800ce42: 63fb str r3, [r7, #60] @ 0x3c
  29980. 800ce44: e01e b.n 800ce84 <HAL_RCCEx_GetPeriphCLKFreq+0x8a8>
  29981. }
  29982. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  29983. 800ce46: 4b74 ldr r3, [pc, #464] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  29984. 800ce48: 681b ldr r3, [r3, #0]
  29985. 800ce4a: f403 7380 and.w r3, r3, #256 @ 0x100
  29986. 800ce4e: f5b3 7f80 cmp.w r3, #256 @ 0x100
  29987. 800ce52: d106 bne.n 800ce62 <HAL_RCCEx_GetPeriphCLKFreq+0x886>
  29988. 800ce54: 6b7b ldr r3, [r7, #52] @ 0x34
  29989. 800ce56: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  29990. 800ce5a: d102 bne.n 800ce62 <HAL_RCCEx_GetPeriphCLKFreq+0x886>
  29991. {
  29992. /* In Case the CKPER Source is CSI */
  29993. frequency = CSI_VALUE;
  29994. 800ce5c: 4b70 ldr r3, [pc, #448] @ (800d020 <HAL_RCCEx_GetPeriphCLKFreq+0xa44>)
  29995. 800ce5e: 63fb str r3, [r7, #60] @ 0x3c
  29996. 800ce60: e010 b.n 800ce84 <HAL_RCCEx_GetPeriphCLKFreq+0x8a8>
  29997. }
  29998. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  29999. 800ce62: 4b6d ldr r3, [pc, #436] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  30000. 800ce64: 681b ldr r3, [r3, #0]
  30001. 800ce66: f403 3300 and.w r3, r3, #131072 @ 0x20000
  30002. 800ce6a: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  30003. 800ce6e: d106 bne.n 800ce7e <HAL_RCCEx_GetPeriphCLKFreq+0x8a2>
  30004. 800ce70: 6b7b ldr r3, [r7, #52] @ 0x34
  30005. 800ce72: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  30006. 800ce76: d102 bne.n 800ce7e <HAL_RCCEx_GetPeriphCLKFreq+0x8a2>
  30007. {
  30008. /* In Case the CKPER Source is HSE */
  30009. frequency = HSE_VALUE;
  30010. 800ce78: 4b6a ldr r3, [pc, #424] @ (800d024 <HAL_RCCEx_GetPeriphCLKFreq+0xa48>)
  30011. 800ce7a: 63fb str r3, [r7, #60] @ 0x3c
  30012. 800ce7c: e002 b.n 800ce84 <HAL_RCCEx_GetPeriphCLKFreq+0x8a8>
  30013. }
  30014. else
  30015. {
  30016. /* In Case the CKPER is disabled*/
  30017. frequency = 0;
  30018. 800ce7e: 2300 movs r3, #0
  30019. 800ce80: 63fb str r3, [r7, #60] @ 0x3c
  30020. }
  30021. break;
  30022. 800ce82: e122 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30023. 800ce84: e121 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30024. }
  30025. default :
  30026. {
  30027. frequency = 0;
  30028. 800ce86: 2300 movs r3, #0
  30029. 800ce88: 63fb str r3, [r7, #60] @ 0x3c
  30030. break;
  30031. 800ce8a: e11e b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30032. }
  30033. }
  30034. }
  30035. else if (PeriphClk == RCC_PERIPHCLK_SDMMC)
  30036. 800ce8c: e9d7 2300 ldrd r2, r3, [r7]
  30037. 800ce90: f5a2 3180 sub.w r1, r2, #65536 @ 0x10000
  30038. 800ce94: 430b orrs r3, r1
  30039. 800ce96: d133 bne.n 800cf00 <HAL_RCCEx_GetPeriphCLKFreq+0x924>
  30040. {
  30041. /* Get SDMMC clock source */
  30042. srcclk = __HAL_RCC_GET_SDMMC_SOURCE();
  30043. 800ce98: 4b5f ldr r3, [pc, #380] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  30044. 800ce9a: 6cdb ldr r3, [r3, #76] @ 0x4c
  30045. 800ce9c: f403 3380 and.w r3, r3, #65536 @ 0x10000
  30046. 800cea0: 63bb str r3, [r7, #56] @ 0x38
  30047. switch (srcclk)
  30048. 800cea2: 6bbb ldr r3, [r7, #56] @ 0x38
  30049. 800cea4: 2b00 cmp r3, #0
  30050. 800cea6: d004 beq.n 800ceb2 <HAL_RCCEx_GetPeriphCLKFreq+0x8d6>
  30051. 800cea8: 6bbb ldr r3, [r7, #56] @ 0x38
  30052. 800ceaa: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  30053. 800ceae: d012 beq.n 800ced6 <HAL_RCCEx_GetPeriphCLKFreq+0x8fa>
  30054. 800ceb0: e023 b.n 800cefa <HAL_RCCEx_GetPeriphCLKFreq+0x91e>
  30055. {
  30056. case RCC_SDMMCCLKSOURCE_PLL: /* PLL1 is the clock source for SDMMC */
  30057. {
  30058. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  30059. 800ceb2: 4b59 ldr r3, [pc, #356] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  30060. 800ceb4: 681b ldr r3, [r3, #0]
  30061. 800ceb6: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  30062. 800ceba: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  30063. 800cebe: d107 bne.n 800ced0 <HAL_RCCEx_GetPeriphCLKFreq+0x8f4>
  30064. {
  30065. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  30066. 800cec0: f107 0324 add.w r3, r7, #36 @ 0x24
  30067. 800cec4: 4618 mov r0, r3
  30068. 800cec6: f000 fbc7 bl 800d658 <HAL_RCCEx_GetPLL1ClockFreq>
  30069. frequency = pll1_clocks.PLL1_Q_Frequency;
  30070. 800ceca: 6abb ldr r3, [r7, #40] @ 0x28
  30071. 800cecc: 63fb str r3, [r7, #60] @ 0x3c
  30072. }
  30073. else
  30074. {
  30075. frequency = 0;
  30076. }
  30077. break;
  30078. 800cece: e0fc b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30079. frequency = 0;
  30080. 800ced0: 2300 movs r3, #0
  30081. 800ced2: 63fb str r3, [r7, #60] @ 0x3c
  30082. break;
  30083. 800ced4: e0f9 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30084. }
  30085. case RCC_SDMMCCLKSOURCE_PLL2: /* PLL2 is the clock source for SDMMC */
  30086. {
  30087. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  30088. 800ced6: 4b50 ldr r3, [pc, #320] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  30089. 800ced8: 681b ldr r3, [r3, #0]
  30090. 800ceda: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  30091. 800cede: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  30092. 800cee2: d107 bne.n 800cef4 <HAL_RCCEx_GetPeriphCLKFreq+0x918>
  30093. {
  30094. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  30095. 800cee4: f107 0318 add.w r3, r7, #24
  30096. 800cee8: 4618 mov r0, r3
  30097. 800ceea: f000 f90d bl 800d108 <HAL_RCCEx_GetPLL2ClockFreq>
  30098. frequency = pll2_clocks.PLL2_R_Frequency;
  30099. 800ceee: 6a3b ldr r3, [r7, #32]
  30100. 800cef0: 63fb str r3, [r7, #60] @ 0x3c
  30101. }
  30102. else
  30103. {
  30104. frequency = 0;
  30105. }
  30106. break;
  30107. 800cef2: e0ea b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30108. frequency = 0;
  30109. 800cef4: 2300 movs r3, #0
  30110. 800cef6: 63fb str r3, [r7, #60] @ 0x3c
  30111. break;
  30112. 800cef8: e0e7 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30113. }
  30114. default :
  30115. {
  30116. frequency = 0;
  30117. 800cefa: 2300 movs r3, #0
  30118. 800cefc: 63fb str r3, [r7, #60] @ 0x3c
  30119. break;
  30120. 800cefe: e0e4 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30121. }
  30122. }
  30123. }
  30124. else if (PeriphClk == RCC_PERIPHCLK_SPI6)
  30125. 800cf00: e9d7 2300 ldrd r2, r3, [r7]
  30126. 800cf04: f5a2 4180 sub.w r1, r2, #16384 @ 0x4000
  30127. 800cf08: 430b orrs r3, r1
  30128. 800cf0a: f040 808d bne.w 800d028 <HAL_RCCEx_GetPeriphCLKFreq+0xa4c>
  30129. {
  30130. /* Get SPI6 clock source */
  30131. srcclk = __HAL_RCC_GET_SPI6_SOURCE();
  30132. 800cf0e: 4b42 ldr r3, [pc, #264] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  30133. 800cf10: 6d9b ldr r3, [r3, #88] @ 0x58
  30134. 800cf12: f003 43e0 and.w r3, r3, #1879048192 @ 0x70000000
  30135. 800cf16: 63bb str r3, [r7, #56] @ 0x38
  30136. switch (srcclk)
  30137. 800cf18: 6bbb ldr r3, [r7, #56] @ 0x38
  30138. 800cf1a: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  30139. 800cf1e: d06b beq.n 800cff8 <HAL_RCCEx_GetPeriphCLKFreq+0xa1c>
  30140. 800cf20: 6bbb ldr r3, [r7, #56] @ 0x38
  30141. 800cf22: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  30142. 800cf26: d874 bhi.n 800d012 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  30143. 800cf28: 6bbb ldr r3, [r7, #56] @ 0x38
  30144. 800cf2a: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  30145. 800cf2e: d056 beq.n 800cfde <HAL_RCCEx_GetPeriphCLKFreq+0xa02>
  30146. 800cf30: 6bbb ldr r3, [r7, #56] @ 0x38
  30147. 800cf32: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  30148. 800cf36: d86c bhi.n 800d012 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  30149. 800cf38: 6bbb ldr r3, [r7, #56] @ 0x38
  30150. 800cf3a: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  30151. 800cf3e: d03b beq.n 800cfb8 <HAL_RCCEx_GetPeriphCLKFreq+0x9dc>
  30152. 800cf40: 6bbb ldr r3, [r7, #56] @ 0x38
  30153. 800cf42: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  30154. 800cf46: d864 bhi.n 800d012 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  30155. 800cf48: 6bbb ldr r3, [r7, #56] @ 0x38
  30156. 800cf4a: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  30157. 800cf4e: d021 beq.n 800cf94 <HAL_RCCEx_GetPeriphCLKFreq+0x9b8>
  30158. 800cf50: 6bbb ldr r3, [r7, #56] @ 0x38
  30159. 800cf52: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  30160. 800cf56: d85c bhi.n 800d012 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  30161. 800cf58: 6bbb ldr r3, [r7, #56] @ 0x38
  30162. 800cf5a: 2b00 cmp r3, #0
  30163. 800cf5c: d004 beq.n 800cf68 <HAL_RCCEx_GetPeriphCLKFreq+0x98c>
  30164. 800cf5e: 6bbb ldr r3, [r7, #56] @ 0x38
  30165. 800cf60: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  30166. 800cf64: d004 beq.n 800cf70 <HAL_RCCEx_GetPeriphCLKFreq+0x994>
  30167. 800cf66: e054 b.n 800d012 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  30168. {
  30169. case RCC_SPI6CLKSOURCE_D3PCLK1: /* D3PCLK1 (PCLK4) is the clock source for SPI6 */
  30170. {
  30171. frequency = HAL_RCCEx_GetD3PCLK1Freq();
  30172. 800cf68: f000 f8b8 bl 800d0dc <HAL_RCCEx_GetD3PCLK1Freq>
  30173. 800cf6c: 63f8 str r0, [r7, #60] @ 0x3c
  30174. break;
  30175. 800cf6e: e0ac b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30176. }
  30177. case RCC_SPI6CLKSOURCE_PLL2: /* PLL2 is the clock source for SPI6 */
  30178. {
  30179. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  30180. 800cf70: 4b29 ldr r3, [pc, #164] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  30181. 800cf72: 681b ldr r3, [r3, #0]
  30182. 800cf74: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  30183. 800cf78: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  30184. 800cf7c: d107 bne.n 800cf8e <HAL_RCCEx_GetPeriphCLKFreq+0x9b2>
  30185. {
  30186. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  30187. 800cf7e: f107 0318 add.w r3, r7, #24
  30188. 800cf82: 4618 mov r0, r3
  30189. 800cf84: f000 f8c0 bl 800d108 <HAL_RCCEx_GetPLL2ClockFreq>
  30190. frequency = pll2_clocks.PLL2_Q_Frequency;
  30191. 800cf88: 69fb ldr r3, [r7, #28]
  30192. 800cf8a: 63fb str r3, [r7, #60] @ 0x3c
  30193. }
  30194. else
  30195. {
  30196. frequency = 0;
  30197. }
  30198. break;
  30199. 800cf8c: e09d b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30200. frequency = 0;
  30201. 800cf8e: 2300 movs r3, #0
  30202. 800cf90: 63fb str r3, [r7, #60] @ 0x3c
  30203. break;
  30204. 800cf92: e09a b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30205. }
  30206. case RCC_SPI6CLKSOURCE_PLL3: /* PLL3 is the clock source for SPI6 */
  30207. {
  30208. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  30209. 800cf94: 4b20 ldr r3, [pc, #128] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  30210. 800cf96: 681b ldr r3, [r3, #0]
  30211. 800cf98: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  30212. 800cf9c: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  30213. 800cfa0: d107 bne.n 800cfb2 <HAL_RCCEx_GetPeriphCLKFreq+0x9d6>
  30214. {
  30215. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  30216. 800cfa2: f107 030c add.w r3, r7, #12
  30217. 800cfa6: 4618 mov r0, r3
  30218. 800cfa8: f000 fa02 bl 800d3b0 <HAL_RCCEx_GetPLL3ClockFreq>
  30219. frequency = pll3_clocks.PLL3_Q_Frequency;
  30220. 800cfac: 693b ldr r3, [r7, #16]
  30221. 800cfae: 63fb str r3, [r7, #60] @ 0x3c
  30222. }
  30223. else
  30224. {
  30225. frequency = 0;
  30226. }
  30227. break;
  30228. 800cfb0: e08b b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30229. frequency = 0;
  30230. 800cfb2: 2300 movs r3, #0
  30231. 800cfb4: 63fb str r3, [r7, #60] @ 0x3c
  30232. break;
  30233. 800cfb6: e088 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30234. }
  30235. case RCC_SPI6CLKSOURCE_HSI: /* HSI is the clock source for SPI6 */
  30236. {
  30237. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))
  30238. 800cfb8: 4b17 ldr r3, [pc, #92] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  30239. 800cfba: 681b ldr r3, [r3, #0]
  30240. 800cfbc: f003 0304 and.w r3, r3, #4
  30241. 800cfc0: 2b04 cmp r3, #4
  30242. 800cfc2: d109 bne.n 800cfd8 <HAL_RCCEx_GetPeriphCLKFreq+0x9fc>
  30243. {
  30244. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  30245. 800cfc4: 4b14 ldr r3, [pc, #80] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  30246. 800cfc6: 681b ldr r3, [r3, #0]
  30247. 800cfc8: 08db lsrs r3, r3, #3
  30248. 800cfca: f003 0303 and.w r3, r3, #3
  30249. 800cfce: 4a13 ldr r2, [pc, #76] @ (800d01c <HAL_RCCEx_GetPeriphCLKFreq+0xa40>)
  30250. 800cfd0: fa22 f303 lsr.w r3, r2, r3
  30251. 800cfd4: 63fb str r3, [r7, #60] @ 0x3c
  30252. }
  30253. else
  30254. {
  30255. frequency = 0;
  30256. }
  30257. break;
  30258. 800cfd6: e078 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30259. frequency = 0;
  30260. 800cfd8: 2300 movs r3, #0
  30261. 800cfda: 63fb str r3, [r7, #60] @ 0x3c
  30262. break;
  30263. 800cfdc: e075 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30264. }
  30265. case RCC_SPI6CLKSOURCE_CSI: /* CSI is the clock source for SPI6 */
  30266. {
  30267. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY))
  30268. 800cfde: 4b0e ldr r3, [pc, #56] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  30269. 800cfe0: 681b ldr r3, [r3, #0]
  30270. 800cfe2: f403 7380 and.w r3, r3, #256 @ 0x100
  30271. 800cfe6: f5b3 7f80 cmp.w r3, #256 @ 0x100
  30272. 800cfea: d102 bne.n 800cff2 <HAL_RCCEx_GetPeriphCLKFreq+0xa16>
  30273. {
  30274. frequency = CSI_VALUE;
  30275. 800cfec: 4b0c ldr r3, [pc, #48] @ (800d020 <HAL_RCCEx_GetPeriphCLKFreq+0xa44>)
  30276. 800cfee: 63fb str r3, [r7, #60] @ 0x3c
  30277. }
  30278. else
  30279. {
  30280. frequency = 0;
  30281. }
  30282. break;
  30283. 800cff0: e06b b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30284. frequency = 0;
  30285. 800cff2: 2300 movs r3, #0
  30286. 800cff4: 63fb str r3, [r7, #60] @ 0x3c
  30287. break;
  30288. 800cff6: e068 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30289. }
  30290. case RCC_SPI6CLKSOURCE_HSE: /* HSE is the clock source for SPI6 */
  30291. {
  30292. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
  30293. 800cff8: 4b07 ldr r3, [pc, #28] @ (800d018 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  30294. 800cffa: 681b ldr r3, [r3, #0]
  30295. 800cffc: f403 3300 and.w r3, r3, #131072 @ 0x20000
  30296. 800d000: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  30297. 800d004: d102 bne.n 800d00c <HAL_RCCEx_GetPeriphCLKFreq+0xa30>
  30298. {
  30299. frequency = HSE_VALUE;
  30300. 800d006: 4b07 ldr r3, [pc, #28] @ (800d024 <HAL_RCCEx_GetPeriphCLKFreq+0xa48>)
  30301. 800d008: 63fb str r3, [r7, #60] @ 0x3c
  30302. }
  30303. else
  30304. {
  30305. frequency = 0;
  30306. }
  30307. break;
  30308. 800d00a: e05e b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30309. frequency = 0;
  30310. 800d00c: 2300 movs r3, #0
  30311. 800d00e: 63fb str r3, [r7, #60] @ 0x3c
  30312. break;
  30313. 800d010: e05b b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30314. break;
  30315. }
  30316. #endif /* RCC_SPI6CLKSOURCE_PIN */
  30317. default :
  30318. {
  30319. frequency = 0;
  30320. 800d012: 2300 movs r3, #0
  30321. 800d014: 63fb str r3, [r7, #60] @ 0x3c
  30322. break;
  30323. 800d016: e058 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30324. 800d018: 58024400 .word 0x58024400
  30325. 800d01c: 03d09000 .word 0x03d09000
  30326. 800d020: 003d0900 .word 0x003d0900
  30327. 800d024: 017d7840 .word 0x017d7840
  30328. }
  30329. }
  30330. }
  30331. else if (PeriphClk == RCC_PERIPHCLK_FDCAN)
  30332. 800d028: e9d7 2300 ldrd r2, r3, [r7]
  30333. 800d02c: f5a2 4100 sub.w r1, r2, #32768 @ 0x8000
  30334. 800d030: 430b orrs r3, r1
  30335. 800d032: d148 bne.n 800d0c6 <HAL_RCCEx_GetPeriphCLKFreq+0xaea>
  30336. {
  30337. /* Get FDCAN clock source */
  30338. srcclk = __HAL_RCC_GET_FDCAN_SOURCE();
  30339. 800d034: 4b27 ldr r3, [pc, #156] @ (800d0d4 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  30340. 800d036: 6d1b ldr r3, [r3, #80] @ 0x50
  30341. 800d038: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  30342. 800d03c: 63bb str r3, [r7, #56] @ 0x38
  30343. switch (srcclk)
  30344. 800d03e: 6bbb ldr r3, [r7, #56] @ 0x38
  30345. 800d040: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  30346. 800d044: d02a beq.n 800d09c <HAL_RCCEx_GetPeriphCLKFreq+0xac0>
  30347. 800d046: 6bbb ldr r3, [r7, #56] @ 0x38
  30348. 800d048: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  30349. 800d04c: d838 bhi.n 800d0c0 <HAL_RCCEx_GetPeriphCLKFreq+0xae4>
  30350. 800d04e: 6bbb ldr r3, [r7, #56] @ 0x38
  30351. 800d050: 2b00 cmp r3, #0
  30352. 800d052: d004 beq.n 800d05e <HAL_RCCEx_GetPeriphCLKFreq+0xa82>
  30353. 800d054: 6bbb ldr r3, [r7, #56] @ 0x38
  30354. 800d056: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  30355. 800d05a: d00d beq.n 800d078 <HAL_RCCEx_GetPeriphCLKFreq+0xa9c>
  30356. 800d05c: e030 b.n 800d0c0 <HAL_RCCEx_GetPeriphCLKFreq+0xae4>
  30357. {
  30358. case RCC_FDCANCLKSOURCE_HSE: /* HSE is the clock source for FDCAN */
  30359. {
  30360. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
  30361. 800d05e: 4b1d ldr r3, [pc, #116] @ (800d0d4 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  30362. 800d060: 681b ldr r3, [r3, #0]
  30363. 800d062: f403 3300 and.w r3, r3, #131072 @ 0x20000
  30364. 800d066: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  30365. 800d06a: d102 bne.n 800d072 <HAL_RCCEx_GetPeriphCLKFreq+0xa96>
  30366. {
  30367. frequency = HSE_VALUE;
  30368. 800d06c: 4b1a ldr r3, [pc, #104] @ (800d0d8 <HAL_RCCEx_GetPeriphCLKFreq+0xafc>)
  30369. 800d06e: 63fb str r3, [r7, #60] @ 0x3c
  30370. }
  30371. else
  30372. {
  30373. frequency = 0;
  30374. }
  30375. break;
  30376. 800d070: e02b b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30377. frequency = 0;
  30378. 800d072: 2300 movs r3, #0
  30379. 800d074: 63fb str r3, [r7, #60] @ 0x3c
  30380. break;
  30381. 800d076: e028 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30382. }
  30383. case RCC_FDCANCLKSOURCE_PLL: /* PLL is the clock source for FDCAN */
  30384. {
  30385. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  30386. 800d078: 4b16 ldr r3, [pc, #88] @ (800d0d4 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  30387. 800d07a: 681b ldr r3, [r3, #0]
  30388. 800d07c: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  30389. 800d080: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  30390. 800d084: d107 bne.n 800d096 <HAL_RCCEx_GetPeriphCLKFreq+0xaba>
  30391. {
  30392. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  30393. 800d086: f107 0324 add.w r3, r7, #36 @ 0x24
  30394. 800d08a: 4618 mov r0, r3
  30395. 800d08c: f000 fae4 bl 800d658 <HAL_RCCEx_GetPLL1ClockFreq>
  30396. frequency = pll1_clocks.PLL1_Q_Frequency;
  30397. 800d090: 6abb ldr r3, [r7, #40] @ 0x28
  30398. 800d092: 63fb str r3, [r7, #60] @ 0x3c
  30399. }
  30400. else
  30401. {
  30402. frequency = 0;
  30403. }
  30404. break;
  30405. 800d094: e019 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30406. frequency = 0;
  30407. 800d096: 2300 movs r3, #0
  30408. 800d098: 63fb str r3, [r7, #60] @ 0x3c
  30409. break;
  30410. 800d09a: e016 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30411. }
  30412. case RCC_FDCANCLKSOURCE_PLL2: /* PLL2 is the clock source for FDCAN */
  30413. {
  30414. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  30415. 800d09c: 4b0d ldr r3, [pc, #52] @ (800d0d4 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  30416. 800d09e: 681b ldr r3, [r3, #0]
  30417. 800d0a0: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  30418. 800d0a4: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  30419. 800d0a8: d107 bne.n 800d0ba <HAL_RCCEx_GetPeriphCLKFreq+0xade>
  30420. {
  30421. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  30422. 800d0aa: f107 0318 add.w r3, r7, #24
  30423. 800d0ae: 4618 mov r0, r3
  30424. 800d0b0: f000 f82a bl 800d108 <HAL_RCCEx_GetPLL2ClockFreq>
  30425. frequency = pll2_clocks.PLL2_Q_Frequency;
  30426. 800d0b4: 69fb ldr r3, [r7, #28]
  30427. 800d0b6: 63fb str r3, [r7, #60] @ 0x3c
  30428. }
  30429. else
  30430. {
  30431. frequency = 0;
  30432. }
  30433. break;
  30434. 800d0b8: e007 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30435. frequency = 0;
  30436. 800d0ba: 2300 movs r3, #0
  30437. 800d0bc: 63fb str r3, [r7, #60] @ 0x3c
  30438. break;
  30439. 800d0be: e004 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30440. }
  30441. default :
  30442. {
  30443. frequency = 0;
  30444. 800d0c0: 2300 movs r3, #0
  30445. 800d0c2: 63fb str r3, [r7, #60] @ 0x3c
  30446. break;
  30447. 800d0c4: e001 b.n 800d0ca <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30448. }
  30449. }
  30450. }
  30451. else
  30452. {
  30453. frequency = 0;
  30454. 800d0c6: 2300 movs r3, #0
  30455. 800d0c8: 63fb str r3, [r7, #60] @ 0x3c
  30456. }
  30457. return frequency;
  30458. 800d0ca: 6bfb ldr r3, [r7, #60] @ 0x3c
  30459. }
  30460. 800d0cc: 4618 mov r0, r3
  30461. 800d0ce: 3740 adds r7, #64 @ 0x40
  30462. 800d0d0: 46bd mov sp, r7
  30463. 800d0d2: bd80 pop {r7, pc}
  30464. 800d0d4: 58024400 .word 0x58024400
  30465. 800d0d8: 017d7840 .word 0x017d7840
  30466. 0800d0dc <HAL_RCCEx_GetD3PCLK1Freq>:
  30467. * @note Each time D3PCLK1 changes, this function must be called to update the
  30468. * right D3PCLK1 value. Otherwise, any configuration based on this function will be incorrect.
  30469. * @retval D3PCLK1 frequency
  30470. */
  30471. uint32_t HAL_RCCEx_GetD3PCLK1Freq(void)
  30472. {
  30473. 800d0dc: b580 push {r7, lr}
  30474. 800d0de: af00 add r7, sp, #0
  30475. #if defined(RCC_D3CFGR_D3PPRE)
  30476. /* Get HCLK source and Compute D3PCLK1 frequency ---------------------------*/
  30477. return (HAL_RCC_GetHCLKFreq() >> (D1CorePrescTable[(RCC->D3CFGR & RCC_D3CFGR_D3PPRE) >> RCC_D3CFGR_D3PPRE_Pos] & 0x1FU));
  30478. 800d0e0: f7fd fff0 bl 800b0c4 <HAL_RCC_GetHCLKFreq>
  30479. 800d0e4: 4602 mov r2, r0
  30480. 800d0e6: 4b06 ldr r3, [pc, #24] @ (800d100 <HAL_RCCEx_GetD3PCLK1Freq+0x24>)
  30481. 800d0e8: 6a1b ldr r3, [r3, #32]
  30482. 800d0ea: 091b lsrs r3, r3, #4
  30483. 800d0ec: f003 0307 and.w r3, r3, #7
  30484. 800d0f0: 4904 ldr r1, [pc, #16] @ (800d104 <HAL_RCCEx_GetD3PCLK1Freq+0x28>)
  30485. 800d0f2: 5ccb ldrb r3, [r1, r3]
  30486. 800d0f4: f003 031f and.w r3, r3, #31
  30487. 800d0f8: fa22 f303 lsr.w r3, r2, r3
  30488. #else
  30489. /* Get HCLK source and Compute D3PCLK1 frequency ---------------------------*/
  30490. return (HAL_RCC_GetHCLKFreq() >> (D1CorePrescTable[(RCC->SRDCFGR & RCC_SRDCFGR_SRDPPRE) >> RCC_SRDCFGR_SRDPPRE_Pos] & 0x1FU));
  30491. #endif
  30492. }
  30493. 800d0fc: 4618 mov r0, r3
  30494. 800d0fe: bd80 pop {r7, pc}
  30495. 800d100: 58024400 .word 0x58024400
  30496. 800d104: 080175c8 .word 0x080175c8
  30497. 0800d108 <HAL_RCCEx_GetPLL2ClockFreq>:
  30498. * right PLL2CLK value. Otherwise, any configuration based on this function will be incorrect.
  30499. * @param PLL2_Clocks structure.
  30500. * @retval None
  30501. */
  30502. void HAL_RCCEx_GetPLL2ClockFreq(PLL2_ClocksTypeDef *PLL2_Clocks)
  30503. {
  30504. 800d108: b480 push {r7}
  30505. 800d10a: b089 sub sp, #36 @ 0x24
  30506. 800d10c: af00 add r7, sp, #0
  30507. 800d10e: 6078 str r0, [r7, #4]
  30508. float_t fracn2, pll2vco;
  30509. /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLL2M) * PLL2N
  30510. PLL2xCLK = PLL2_VCO / PLL2x
  30511. */
  30512. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  30513. 800d110: 4ba1 ldr r3, [pc, #644] @ (800d398 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  30514. 800d112: 6a9b ldr r3, [r3, #40] @ 0x28
  30515. 800d114: f003 0303 and.w r3, r3, #3
  30516. 800d118: 61bb str r3, [r7, #24]
  30517. pll2m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM2) >> 12);
  30518. 800d11a: 4b9f ldr r3, [pc, #636] @ (800d398 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  30519. 800d11c: 6a9b ldr r3, [r3, #40] @ 0x28
  30520. 800d11e: 0b1b lsrs r3, r3, #12
  30521. 800d120: f003 033f and.w r3, r3, #63 @ 0x3f
  30522. 800d124: 617b str r3, [r7, #20]
  30523. pll2fracen = (RCC->PLLCFGR & RCC_PLLCFGR_PLL2FRACEN) >> RCC_PLLCFGR_PLL2FRACEN_Pos;
  30524. 800d126: 4b9c ldr r3, [pc, #624] @ (800d398 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  30525. 800d128: 6adb ldr r3, [r3, #44] @ 0x2c
  30526. 800d12a: 091b lsrs r3, r3, #4
  30527. 800d12c: f003 0301 and.w r3, r3, #1
  30528. 800d130: 613b str r3, [r7, #16]
  30529. fracn2 = (float_t)(uint32_t)(pll2fracen * ((RCC->PLL2FRACR & RCC_PLL2FRACR_FRACN2) >> 3));
  30530. 800d132: 4b99 ldr r3, [pc, #612] @ (800d398 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  30531. 800d134: 6bdb ldr r3, [r3, #60] @ 0x3c
  30532. 800d136: 08db lsrs r3, r3, #3
  30533. 800d138: f3c3 030c ubfx r3, r3, #0, #13
  30534. 800d13c: 693a ldr r2, [r7, #16]
  30535. 800d13e: fb02 f303 mul.w r3, r2, r3
  30536. 800d142: ee07 3a90 vmov s15, r3
  30537. 800d146: eef8 7a67 vcvt.f32.u32 s15, s15
  30538. 800d14a: edc7 7a03 vstr s15, [r7, #12]
  30539. if (pll2m != 0U)
  30540. 800d14e: 697b ldr r3, [r7, #20]
  30541. 800d150: 2b00 cmp r3, #0
  30542. 800d152: f000 8111 beq.w 800d378 <HAL_RCCEx_GetPLL2ClockFreq+0x270>
  30543. {
  30544. switch (pllsource)
  30545. 800d156: 69bb ldr r3, [r7, #24]
  30546. 800d158: 2b02 cmp r3, #2
  30547. 800d15a: f000 8083 beq.w 800d264 <HAL_RCCEx_GetPLL2ClockFreq+0x15c>
  30548. 800d15e: 69bb ldr r3, [r7, #24]
  30549. 800d160: 2b02 cmp r3, #2
  30550. 800d162: f200 80a1 bhi.w 800d2a8 <HAL_RCCEx_GetPLL2ClockFreq+0x1a0>
  30551. 800d166: 69bb ldr r3, [r7, #24]
  30552. 800d168: 2b00 cmp r3, #0
  30553. 800d16a: d003 beq.n 800d174 <HAL_RCCEx_GetPLL2ClockFreq+0x6c>
  30554. 800d16c: 69bb ldr r3, [r7, #24]
  30555. 800d16e: 2b01 cmp r3, #1
  30556. 800d170: d056 beq.n 800d220 <HAL_RCCEx_GetPLL2ClockFreq+0x118>
  30557. 800d172: e099 b.n 800d2a8 <HAL_RCCEx_GetPLL2ClockFreq+0x1a0>
  30558. {
  30559. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  30560. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  30561. 800d174: 4b88 ldr r3, [pc, #544] @ (800d398 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  30562. 800d176: 681b ldr r3, [r3, #0]
  30563. 800d178: f003 0320 and.w r3, r3, #32
  30564. 800d17c: 2b00 cmp r3, #0
  30565. 800d17e: d02d beq.n 800d1dc <HAL_RCCEx_GetPLL2ClockFreq+0xd4>
  30566. {
  30567. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  30568. 800d180: 4b85 ldr r3, [pc, #532] @ (800d398 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  30569. 800d182: 681b ldr r3, [r3, #0]
  30570. 800d184: 08db lsrs r3, r3, #3
  30571. 800d186: f003 0303 and.w r3, r3, #3
  30572. 800d18a: 4a84 ldr r2, [pc, #528] @ (800d39c <HAL_RCCEx_GetPLL2ClockFreq+0x294>)
  30573. 800d18c: fa22 f303 lsr.w r3, r2, r3
  30574. 800d190: 60bb str r3, [r7, #8]
  30575. pll2vco = ((float_t)hsivalue / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  30576. 800d192: 68bb ldr r3, [r7, #8]
  30577. 800d194: ee07 3a90 vmov s15, r3
  30578. 800d198: eef8 6a67 vcvt.f32.u32 s13, s15
  30579. 800d19c: 697b ldr r3, [r7, #20]
  30580. 800d19e: ee07 3a90 vmov s15, r3
  30581. 800d1a2: eef8 7a67 vcvt.f32.u32 s15, s15
  30582. 800d1a6: ee86 7aa7 vdiv.f32 s14, s13, s15
  30583. 800d1aa: 4b7b ldr r3, [pc, #492] @ (800d398 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  30584. 800d1ac: 6b9b ldr r3, [r3, #56] @ 0x38
  30585. 800d1ae: f3c3 0308 ubfx r3, r3, #0, #9
  30586. 800d1b2: ee07 3a90 vmov s15, r3
  30587. 800d1b6: eef8 6a67 vcvt.f32.u32 s13, s15
  30588. 800d1ba: ed97 6a03 vldr s12, [r7, #12]
  30589. 800d1be: eddf 5a78 vldr s11, [pc, #480] @ 800d3a0 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  30590. 800d1c2: eec6 7a25 vdiv.f32 s15, s12, s11
  30591. 800d1c6: ee76 7aa7 vadd.f32 s15, s13, s15
  30592. 800d1ca: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  30593. 800d1ce: ee77 7aa6 vadd.f32 s15, s15, s13
  30594. 800d1d2: ee67 7a27 vmul.f32 s15, s14, s15
  30595. 800d1d6: edc7 7a07 vstr s15, [r7, #28]
  30596. }
  30597. else
  30598. {
  30599. pll2vco = ((float_t)HSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  30600. }
  30601. break;
  30602. 800d1da: e087 b.n 800d2ec <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  30603. pll2vco = ((float_t)HSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  30604. 800d1dc: 697b ldr r3, [r7, #20]
  30605. 800d1de: ee07 3a90 vmov s15, r3
  30606. 800d1e2: eef8 7a67 vcvt.f32.u32 s15, s15
  30607. 800d1e6: eddf 6a6f vldr s13, [pc, #444] @ 800d3a4 <HAL_RCCEx_GetPLL2ClockFreq+0x29c>
  30608. 800d1ea: ee86 7aa7 vdiv.f32 s14, s13, s15
  30609. 800d1ee: 4b6a ldr r3, [pc, #424] @ (800d398 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  30610. 800d1f0: 6b9b ldr r3, [r3, #56] @ 0x38
  30611. 800d1f2: f3c3 0308 ubfx r3, r3, #0, #9
  30612. 800d1f6: ee07 3a90 vmov s15, r3
  30613. 800d1fa: eef8 6a67 vcvt.f32.u32 s13, s15
  30614. 800d1fe: ed97 6a03 vldr s12, [r7, #12]
  30615. 800d202: eddf 5a67 vldr s11, [pc, #412] @ 800d3a0 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  30616. 800d206: eec6 7a25 vdiv.f32 s15, s12, s11
  30617. 800d20a: ee76 7aa7 vadd.f32 s15, s13, s15
  30618. 800d20e: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  30619. 800d212: ee77 7aa6 vadd.f32 s15, s15, s13
  30620. 800d216: ee67 7a27 vmul.f32 s15, s14, s15
  30621. 800d21a: edc7 7a07 vstr s15, [r7, #28]
  30622. break;
  30623. 800d21e: e065 b.n 800d2ec <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  30624. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  30625. pll2vco = ((float_t)CSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  30626. 800d220: 697b ldr r3, [r7, #20]
  30627. 800d222: ee07 3a90 vmov s15, r3
  30628. 800d226: eef8 7a67 vcvt.f32.u32 s15, s15
  30629. 800d22a: eddf 6a5f vldr s13, [pc, #380] @ 800d3a8 <HAL_RCCEx_GetPLL2ClockFreq+0x2a0>
  30630. 800d22e: ee86 7aa7 vdiv.f32 s14, s13, s15
  30631. 800d232: 4b59 ldr r3, [pc, #356] @ (800d398 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  30632. 800d234: 6b9b ldr r3, [r3, #56] @ 0x38
  30633. 800d236: f3c3 0308 ubfx r3, r3, #0, #9
  30634. 800d23a: ee07 3a90 vmov s15, r3
  30635. 800d23e: eef8 6a67 vcvt.f32.u32 s13, s15
  30636. 800d242: ed97 6a03 vldr s12, [r7, #12]
  30637. 800d246: eddf 5a56 vldr s11, [pc, #344] @ 800d3a0 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  30638. 800d24a: eec6 7a25 vdiv.f32 s15, s12, s11
  30639. 800d24e: ee76 7aa7 vadd.f32 s15, s13, s15
  30640. 800d252: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  30641. 800d256: ee77 7aa6 vadd.f32 s15, s15, s13
  30642. 800d25a: ee67 7a27 vmul.f32 s15, s14, s15
  30643. 800d25e: edc7 7a07 vstr s15, [r7, #28]
  30644. break;
  30645. 800d262: e043 b.n 800d2ec <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  30646. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  30647. pll2vco = ((float_t)HSE_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  30648. 800d264: 697b ldr r3, [r7, #20]
  30649. 800d266: ee07 3a90 vmov s15, r3
  30650. 800d26a: eef8 7a67 vcvt.f32.u32 s15, s15
  30651. 800d26e: eddf 6a4f vldr s13, [pc, #316] @ 800d3ac <HAL_RCCEx_GetPLL2ClockFreq+0x2a4>
  30652. 800d272: ee86 7aa7 vdiv.f32 s14, s13, s15
  30653. 800d276: 4b48 ldr r3, [pc, #288] @ (800d398 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  30654. 800d278: 6b9b ldr r3, [r3, #56] @ 0x38
  30655. 800d27a: f3c3 0308 ubfx r3, r3, #0, #9
  30656. 800d27e: ee07 3a90 vmov s15, r3
  30657. 800d282: eef8 6a67 vcvt.f32.u32 s13, s15
  30658. 800d286: ed97 6a03 vldr s12, [r7, #12]
  30659. 800d28a: eddf 5a45 vldr s11, [pc, #276] @ 800d3a0 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  30660. 800d28e: eec6 7a25 vdiv.f32 s15, s12, s11
  30661. 800d292: ee76 7aa7 vadd.f32 s15, s13, s15
  30662. 800d296: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  30663. 800d29a: ee77 7aa6 vadd.f32 s15, s15, s13
  30664. 800d29e: ee67 7a27 vmul.f32 s15, s14, s15
  30665. 800d2a2: edc7 7a07 vstr s15, [r7, #28]
  30666. break;
  30667. 800d2a6: e021 b.n 800d2ec <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  30668. default:
  30669. pll2vco = ((float_t)CSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  30670. 800d2a8: 697b ldr r3, [r7, #20]
  30671. 800d2aa: ee07 3a90 vmov s15, r3
  30672. 800d2ae: eef8 7a67 vcvt.f32.u32 s15, s15
  30673. 800d2b2: eddf 6a3d vldr s13, [pc, #244] @ 800d3a8 <HAL_RCCEx_GetPLL2ClockFreq+0x2a0>
  30674. 800d2b6: ee86 7aa7 vdiv.f32 s14, s13, s15
  30675. 800d2ba: 4b37 ldr r3, [pc, #220] @ (800d398 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  30676. 800d2bc: 6b9b ldr r3, [r3, #56] @ 0x38
  30677. 800d2be: f3c3 0308 ubfx r3, r3, #0, #9
  30678. 800d2c2: ee07 3a90 vmov s15, r3
  30679. 800d2c6: eef8 6a67 vcvt.f32.u32 s13, s15
  30680. 800d2ca: ed97 6a03 vldr s12, [r7, #12]
  30681. 800d2ce: eddf 5a34 vldr s11, [pc, #208] @ 800d3a0 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  30682. 800d2d2: eec6 7a25 vdiv.f32 s15, s12, s11
  30683. 800d2d6: ee76 7aa7 vadd.f32 s15, s13, s15
  30684. 800d2da: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  30685. 800d2de: ee77 7aa6 vadd.f32 s15, s15, s13
  30686. 800d2e2: ee67 7a27 vmul.f32 s15, s14, s15
  30687. 800d2e6: edc7 7a07 vstr s15, [r7, #28]
  30688. break;
  30689. 800d2ea: bf00 nop
  30690. }
  30691. PLL2_Clocks->PLL2_P_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_P2) >> 9) + (float_t)1)) ;
  30692. 800d2ec: 4b2a ldr r3, [pc, #168] @ (800d398 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  30693. 800d2ee: 6b9b ldr r3, [r3, #56] @ 0x38
  30694. 800d2f0: 0a5b lsrs r3, r3, #9
  30695. 800d2f2: f003 037f and.w r3, r3, #127 @ 0x7f
  30696. 800d2f6: ee07 3a90 vmov s15, r3
  30697. 800d2fa: eef8 7a67 vcvt.f32.u32 s15, s15
  30698. 800d2fe: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  30699. 800d302: ee37 7a87 vadd.f32 s14, s15, s14
  30700. 800d306: edd7 6a07 vldr s13, [r7, #28]
  30701. 800d30a: eec6 7a87 vdiv.f32 s15, s13, s14
  30702. 800d30e: eefc 7ae7 vcvt.u32.f32 s15, s15
  30703. 800d312: ee17 2a90 vmov r2, s15
  30704. 800d316: 687b ldr r3, [r7, #4]
  30705. 800d318: 601a str r2, [r3, #0]
  30706. PLL2_Clocks->PLL2_Q_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_Q2) >> 16) + (float_t)1)) ;
  30707. 800d31a: 4b1f ldr r3, [pc, #124] @ (800d398 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  30708. 800d31c: 6b9b ldr r3, [r3, #56] @ 0x38
  30709. 800d31e: 0c1b lsrs r3, r3, #16
  30710. 800d320: f003 037f and.w r3, r3, #127 @ 0x7f
  30711. 800d324: ee07 3a90 vmov s15, r3
  30712. 800d328: eef8 7a67 vcvt.f32.u32 s15, s15
  30713. 800d32c: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  30714. 800d330: ee37 7a87 vadd.f32 s14, s15, s14
  30715. 800d334: edd7 6a07 vldr s13, [r7, #28]
  30716. 800d338: eec6 7a87 vdiv.f32 s15, s13, s14
  30717. 800d33c: eefc 7ae7 vcvt.u32.f32 s15, s15
  30718. 800d340: ee17 2a90 vmov r2, s15
  30719. 800d344: 687b ldr r3, [r7, #4]
  30720. 800d346: 605a str r2, [r3, #4]
  30721. PLL2_Clocks->PLL2_R_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_R2) >> 24) + (float_t)1)) ;
  30722. 800d348: 4b13 ldr r3, [pc, #76] @ (800d398 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  30723. 800d34a: 6b9b ldr r3, [r3, #56] @ 0x38
  30724. 800d34c: 0e1b lsrs r3, r3, #24
  30725. 800d34e: f003 037f and.w r3, r3, #127 @ 0x7f
  30726. 800d352: ee07 3a90 vmov s15, r3
  30727. 800d356: eef8 7a67 vcvt.f32.u32 s15, s15
  30728. 800d35a: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  30729. 800d35e: ee37 7a87 vadd.f32 s14, s15, s14
  30730. 800d362: edd7 6a07 vldr s13, [r7, #28]
  30731. 800d366: eec6 7a87 vdiv.f32 s15, s13, s14
  30732. 800d36a: eefc 7ae7 vcvt.u32.f32 s15, s15
  30733. 800d36e: ee17 2a90 vmov r2, s15
  30734. 800d372: 687b ldr r3, [r7, #4]
  30735. 800d374: 609a str r2, [r3, #8]
  30736. {
  30737. PLL2_Clocks->PLL2_P_Frequency = 0U;
  30738. PLL2_Clocks->PLL2_Q_Frequency = 0U;
  30739. PLL2_Clocks->PLL2_R_Frequency = 0U;
  30740. }
  30741. }
  30742. 800d376: e008 b.n 800d38a <HAL_RCCEx_GetPLL2ClockFreq+0x282>
  30743. PLL2_Clocks->PLL2_P_Frequency = 0U;
  30744. 800d378: 687b ldr r3, [r7, #4]
  30745. 800d37a: 2200 movs r2, #0
  30746. 800d37c: 601a str r2, [r3, #0]
  30747. PLL2_Clocks->PLL2_Q_Frequency = 0U;
  30748. 800d37e: 687b ldr r3, [r7, #4]
  30749. 800d380: 2200 movs r2, #0
  30750. 800d382: 605a str r2, [r3, #4]
  30751. PLL2_Clocks->PLL2_R_Frequency = 0U;
  30752. 800d384: 687b ldr r3, [r7, #4]
  30753. 800d386: 2200 movs r2, #0
  30754. 800d388: 609a str r2, [r3, #8]
  30755. }
  30756. 800d38a: bf00 nop
  30757. 800d38c: 3724 adds r7, #36 @ 0x24
  30758. 800d38e: 46bd mov sp, r7
  30759. 800d390: f85d 7b04 ldr.w r7, [sp], #4
  30760. 800d394: 4770 bx lr
  30761. 800d396: bf00 nop
  30762. 800d398: 58024400 .word 0x58024400
  30763. 800d39c: 03d09000 .word 0x03d09000
  30764. 800d3a0: 46000000 .word 0x46000000
  30765. 800d3a4: 4c742400 .word 0x4c742400
  30766. 800d3a8: 4a742400 .word 0x4a742400
  30767. 800d3ac: 4bbebc20 .word 0x4bbebc20
  30768. 0800d3b0 <HAL_RCCEx_GetPLL3ClockFreq>:
  30769. * right PLL3CLK value. Otherwise, any configuration based on this function will be incorrect.
  30770. * @param PLL3_Clocks structure.
  30771. * @retval None
  30772. */
  30773. void HAL_RCCEx_GetPLL3ClockFreq(PLL3_ClocksTypeDef *PLL3_Clocks)
  30774. {
  30775. 800d3b0: b480 push {r7}
  30776. 800d3b2: b089 sub sp, #36 @ 0x24
  30777. 800d3b4: af00 add r7, sp, #0
  30778. 800d3b6: 6078 str r0, [r7, #4]
  30779. float_t fracn3, pll3vco;
  30780. /* PLL3_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLL3M) * PLL3N
  30781. PLL3xCLK = PLL3_VCO / PLLxR
  30782. */
  30783. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  30784. 800d3b8: 4ba1 ldr r3, [pc, #644] @ (800d640 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  30785. 800d3ba: 6a9b ldr r3, [r3, #40] @ 0x28
  30786. 800d3bc: f003 0303 and.w r3, r3, #3
  30787. 800d3c0: 61bb str r3, [r7, #24]
  30788. pll3m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM3) >> 20) ;
  30789. 800d3c2: 4b9f ldr r3, [pc, #636] @ (800d640 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  30790. 800d3c4: 6a9b ldr r3, [r3, #40] @ 0x28
  30791. 800d3c6: 0d1b lsrs r3, r3, #20
  30792. 800d3c8: f003 033f and.w r3, r3, #63 @ 0x3f
  30793. 800d3cc: 617b str r3, [r7, #20]
  30794. pll3fracen = (RCC->PLLCFGR & RCC_PLLCFGR_PLL3FRACEN) >> RCC_PLLCFGR_PLL3FRACEN_Pos;
  30795. 800d3ce: 4b9c ldr r3, [pc, #624] @ (800d640 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  30796. 800d3d0: 6adb ldr r3, [r3, #44] @ 0x2c
  30797. 800d3d2: 0a1b lsrs r3, r3, #8
  30798. 800d3d4: f003 0301 and.w r3, r3, #1
  30799. 800d3d8: 613b str r3, [r7, #16]
  30800. fracn3 = (float_t)(uint32_t)(pll3fracen * ((RCC->PLL3FRACR & RCC_PLL3FRACR_FRACN3) >> 3));
  30801. 800d3da: 4b99 ldr r3, [pc, #612] @ (800d640 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  30802. 800d3dc: 6c5b ldr r3, [r3, #68] @ 0x44
  30803. 800d3de: 08db lsrs r3, r3, #3
  30804. 800d3e0: f3c3 030c ubfx r3, r3, #0, #13
  30805. 800d3e4: 693a ldr r2, [r7, #16]
  30806. 800d3e6: fb02 f303 mul.w r3, r2, r3
  30807. 800d3ea: ee07 3a90 vmov s15, r3
  30808. 800d3ee: eef8 7a67 vcvt.f32.u32 s15, s15
  30809. 800d3f2: edc7 7a03 vstr s15, [r7, #12]
  30810. if (pll3m != 0U)
  30811. 800d3f6: 697b ldr r3, [r7, #20]
  30812. 800d3f8: 2b00 cmp r3, #0
  30813. 800d3fa: f000 8111 beq.w 800d620 <HAL_RCCEx_GetPLL3ClockFreq+0x270>
  30814. {
  30815. switch (pllsource)
  30816. 800d3fe: 69bb ldr r3, [r7, #24]
  30817. 800d400: 2b02 cmp r3, #2
  30818. 800d402: f000 8083 beq.w 800d50c <HAL_RCCEx_GetPLL3ClockFreq+0x15c>
  30819. 800d406: 69bb ldr r3, [r7, #24]
  30820. 800d408: 2b02 cmp r3, #2
  30821. 800d40a: f200 80a1 bhi.w 800d550 <HAL_RCCEx_GetPLL3ClockFreq+0x1a0>
  30822. 800d40e: 69bb ldr r3, [r7, #24]
  30823. 800d410: 2b00 cmp r3, #0
  30824. 800d412: d003 beq.n 800d41c <HAL_RCCEx_GetPLL3ClockFreq+0x6c>
  30825. 800d414: 69bb ldr r3, [r7, #24]
  30826. 800d416: 2b01 cmp r3, #1
  30827. 800d418: d056 beq.n 800d4c8 <HAL_RCCEx_GetPLL3ClockFreq+0x118>
  30828. 800d41a: e099 b.n 800d550 <HAL_RCCEx_GetPLL3ClockFreq+0x1a0>
  30829. {
  30830. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  30831. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  30832. 800d41c: 4b88 ldr r3, [pc, #544] @ (800d640 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  30833. 800d41e: 681b ldr r3, [r3, #0]
  30834. 800d420: f003 0320 and.w r3, r3, #32
  30835. 800d424: 2b00 cmp r3, #0
  30836. 800d426: d02d beq.n 800d484 <HAL_RCCEx_GetPLL3ClockFreq+0xd4>
  30837. {
  30838. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  30839. 800d428: 4b85 ldr r3, [pc, #532] @ (800d640 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  30840. 800d42a: 681b ldr r3, [r3, #0]
  30841. 800d42c: 08db lsrs r3, r3, #3
  30842. 800d42e: f003 0303 and.w r3, r3, #3
  30843. 800d432: 4a84 ldr r2, [pc, #528] @ (800d644 <HAL_RCCEx_GetPLL3ClockFreq+0x294>)
  30844. 800d434: fa22 f303 lsr.w r3, r2, r3
  30845. 800d438: 60bb str r3, [r7, #8]
  30846. pll3vco = ((float_t)hsivalue / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  30847. 800d43a: 68bb ldr r3, [r7, #8]
  30848. 800d43c: ee07 3a90 vmov s15, r3
  30849. 800d440: eef8 6a67 vcvt.f32.u32 s13, s15
  30850. 800d444: 697b ldr r3, [r7, #20]
  30851. 800d446: ee07 3a90 vmov s15, r3
  30852. 800d44a: eef8 7a67 vcvt.f32.u32 s15, s15
  30853. 800d44e: ee86 7aa7 vdiv.f32 s14, s13, s15
  30854. 800d452: 4b7b ldr r3, [pc, #492] @ (800d640 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  30855. 800d454: 6c1b ldr r3, [r3, #64] @ 0x40
  30856. 800d456: f3c3 0308 ubfx r3, r3, #0, #9
  30857. 800d45a: ee07 3a90 vmov s15, r3
  30858. 800d45e: eef8 6a67 vcvt.f32.u32 s13, s15
  30859. 800d462: ed97 6a03 vldr s12, [r7, #12]
  30860. 800d466: eddf 5a78 vldr s11, [pc, #480] @ 800d648 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  30861. 800d46a: eec6 7a25 vdiv.f32 s15, s12, s11
  30862. 800d46e: ee76 7aa7 vadd.f32 s15, s13, s15
  30863. 800d472: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  30864. 800d476: ee77 7aa6 vadd.f32 s15, s15, s13
  30865. 800d47a: ee67 7a27 vmul.f32 s15, s14, s15
  30866. 800d47e: edc7 7a07 vstr s15, [r7, #28]
  30867. }
  30868. else
  30869. {
  30870. pll3vco = ((float_t)HSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  30871. }
  30872. break;
  30873. 800d482: e087 b.n 800d594 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  30874. pll3vco = ((float_t)HSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  30875. 800d484: 697b ldr r3, [r7, #20]
  30876. 800d486: ee07 3a90 vmov s15, r3
  30877. 800d48a: eef8 7a67 vcvt.f32.u32 s15, s15
  30878. 800d48e: eddf 6a6f vldr s13, [pc, #444] @ 800d64c <HAL_RCCEx_GetPLL3ClockFreq+0x29c>
  30879. 800d492: ee86 7aa7 vdiv.f32 s14, s13, s15
  30880. 800d496: 4b6a ldr r3, [pc, #424] @ (800d640 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  30881. 800d498: 6c1b ldr r3, [r3, #64] @ 0x40
  30882. 800d49a: f3c3 0308 ubfx r3, r3, #0, #9
  30883. 800d49e: ee07 3a90 vmov s15, r3
  30884. 800d4a2: eef8 6a67 vcvt.f32.u32 s13, s15
  30885. 800d4a6: ed97 6a03 vldr s12, [r7, #12]
  30886. 800d4aa: eddf 5a67 vldr s11, [pc, #412] @ 800d648 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  30887. 800d4ae: eec6 7a25 vdiv.f32 s15, s12, s11
  30888. 800d4b2: ee76 7aa7 vadd.f32 s15, s13, s15
  30889. 800d4b6: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  30890. 800d4ba: ee77 7aa6 vadd.f32 s15, s15, s13
  30891. 800d4be: ee67 7a27 vmul.f32 s15, s14, s15
  30892. 800d4c2: edc7 7a07 vstr s15, [r7, #28]
  30893. break;
  30894. 800d4c6: e065 b.n 800d594 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  30895. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  30896. pll3vco = ((float_t)CSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  30897. 800d4c8: 697b ldr r3, [r7, #20]
  30898. 800d4ca: ee07 3a90 vmov s15, r3
  30899. 800d4ce: eef8 7a67 vcvt.f32.u32 s15, s15
  30900. 800d4d2: eddf 6a5f vldr s13, [pc, #380] @ 800d650 <HAL_RCCEx_GetPLL3ClockFreq+0x2a0>
  30901. 800d4d6: ee86 7aa7 vdiv.f32 s14, s13, s15
  30902. 800d4da: 4b59 ldr r3, [pc, #356] @ (800d640 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  30903. 800d4dc: 6c1b ldr r3, [r3, #64] @ 0x40
  30904. 800d4de: f3c3 0308 ubfx r3, r3, #0, #9
  30905. 800d4e2: ee07 3a90 vmov s15, r3
  30906. 800d4e6: eef8 6a67 vcvt.f32.u32 s13, s15
  30907. 800d4ea: ed97 6a03 vldr s12, [r7, #12]
  30908. 800d4ee: eddf 5a56 vldr s11, [pc, #344] @ 800d648 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  30909. 800d4f2: eec6 7a25 vdiv.f32 s15, s12, s11
  30910. 800d4f6: ee76 7aa7 vadd.f32 s15, s13, s15
  30911. 800d4fa: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  30912. 800d4fe: ee77 7aa6 vadd.f32 s15, s15, s13
  30913. 800d502: ee67 7a27 vmul.f32 s15, s14, s15
  30914. 800d506: edc7 7a07 vstr s15, [r7, #28]
  30915. break;
  30916. 800d50a: e043 b.n 800d594 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  30917. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  30918. pll3vco = ((float_t)HSE_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  30919. 800d50c: 697b ldr r3, [r7, #20]
  30920. 800d50e: ee07 3a90 vmov s15, r3
  30921. 800d512: eef8 7a67 vcvt.f32.u32 s15, s15
  30922. 800d516: eddf 6a4f vldr s13, [pc, #316] @ 800d654 <HAL_RCCEx_GetPLL3ClockFreq+0x2a4>
  30923. 800d51a: ee86 7aa7 vdiv.f32 s14, s13, s15
  30924. 800d51e: 4b48 ldr r3, [pc, #288] @ (800d640 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  30925. 800d520: 6c1b ldr r3, [r3, #64] @ 0x40
  30926. 800d522: f3c3 0308 ubfx r3, r3, #0, #9
  30927. 800d526: ee07 3a90 vmov s15, r3
  30928. 800d52a: eef8 6a67 vcvt.f32.u32 s13, s15
  30929. 800d52e: ed97 6a03 vldr s12, [r7, #12]
  30930. 800d532: eddf 5a45 vldr s11, [pc, #276] @ 800d648 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  30931. 800d536: eec6 7a25 vdiv.f32 s15, s12, s11
  30932. 800d53a: ee76 7aa7 vadd.f32 s15, s13, s15
  30933. 800d53e: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  30934. 800d542: ee77 7aa6 vadd.f32 s15, s15, s13
  30935. 800d546: ee67 7a27 vmul.f32 s15, s14, s15
  30936. 800d54a: edc7 7a07 vstr s15, [r7, #28]
  30937. break;
  30938. 800d54e: e021 b.n 800d594 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  30939. default:
  30940. pll3vco = ((float_t)CSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  30941. 800d550: 697b ldr r3, [r7, #20]
  30942. 800d552: ee07 3a90 vmov s15, r3
  30943. 800d556: eef8 7a67 vcvt.f32.u32 s15, s15
  30944. 800d55a: eddf 6a3d vldr s13, [pc, #244] @ 800d650 <HAL_RCCEx_GetPLL3ClockFreq+0x2a0>
  30945. 800d55e: ee86 7aa7 vdiv.f32 s14, s13, s15
  30946. 800d562: 4b37 ldr r3, [pc, #220] @ (800d640 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  30947. 800d564: 6c1b ldr r3, [r3, #64] @ 0x40
  30948. 800d566: f3c3 0308 ubfx r3, r3, #0, #9
  30949. 800d56a: ee07 3a90 vmov s15, r3
  30950. 800d56e: eef8 6a67 vcvt.f32.u32 s13, s15
  30951. 800d572: ed97 6a03 vldr s12, [r7, #12]
  30952. 800d576: eddf 5a34 vldr s11, [pc, #208] @ 800d648 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  30953. 800d57a: eec6 7a25 vdiv.f32 s15, s12, s11
  30954. 800d57e: ee76 7aa7 vadd.f32 s15, s13, s15
  30955. 800d582: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  30956. 800d586: ee77 7aa6 vadd.f32 s15, s15, s13
  30957. 800d58a: ee67 7a27 vmul.f32 s15, s14, s15
  30958. 800d58e: edc7 7a07 vstr s15, [r7, #28]
  30959. break;
  30960. 800d592: bf00 nop
  30961. }
  30962. PLL3_Clocks->PLL3_P_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_P3) >> 9) + (float_t)1)) ;
  30963. 800d594: 4b2a ldr r3, [pc, #168] @ (800d640 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  30964. 800d596: 6c1b ldr r3, [r3, #64] @ 0x40
  30965. 800d598: 0a5b lsrs r3, r3, #9
  30966. 800d59a: f003 037f and.w r3, r3, #127 @ 0x7f
  30967. 800d59e: ee07 3a90 vmov s15, r3
  30968. 800d5a2: eef8 7a67 vcvt.f32.u32 s15, s15
  30969. 800d5a6: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  30970. 800d5aa: ee37 7a87 vadd.f32 s14, s15, s14
  30971. 800d5ae: edd7 6a07 vldr s13, [r7, #28]
  30972. 800d5b2: eec6 7a87 vdiv.f32 s15, s13, s14
  30973. 800d5b6: eefc 7ae7 vcvt.u32.f32 s15, s15
  30974. 800d5ba: ee17 2a90 vmov r2, s15
  30975. 800d5be: 687b ldr r3, [r7, #4]
  30976. 800d5c0: 601a str r2, [r3, #0]
  30977. PLL3_Clocks->PLL3_Q_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_Q3) >> 16) + (float_t)1)) ;
  30978. 800d5c2: 4b1f ldr r3, [pc, #124] @ (800d640 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  30979. 800d5c4: 6c1b ldr r3, [r3, #64] @ 0x40
  30980. 800d5c6: 0c1b lsrs r3, r3, #16
  30981. 800d5c8: f003 037f and.w r3, r3, #127 @ 0x7f
  30982. 800d5cc: ee07 3a90 vmov s15, r3
  30983. 800d5d0: eef8 7a67 vcvt.f32.u32 s15, s15
  30984. 800d5d4: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  30985. 800d5d8: ee37 7a87 vadd.f32 s14, s15, s14
  30986. 800d5dc: edd7 6a07 vldr s13, [r7, #28]
  30987. 800d5e0: eec6 7a87 vdiv.f32 s15, s13, s14
  30988. 800d5e4: eefc 7ae7 vcvt.u32.f32 s15, s15
  30989. 800d5e8: ee17 2a90 vmov r2, s15
  30990. 800d5ec: 687b ldr r3, [r7, #4]
  30991. 800d5ee: 605a str r2, [r3, #4]
  30992. PLL3_Clocks->PLL3_R_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_R3) >> 24) + (float_t)1)) ;
  30993. 800d5f0: 4b13 ldr r3, [pc, #76] @ (800d640 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  30994. 800d5f2: 6c1b ldr r3, [r3, #64] @ 0x40
  30995. 800d5f4: 0e1b lsrs r3, r3, #24
  30996. 800d5f6: f003 037f and.w r3, r3, #127 @ 0x7f
  30997. 800d5fa: ee07 3a90 vmov s15, r3
  30998. 800d5fe: eef8 7a67 vcvt.f32.u32 s15, s15
  30999. 800d602: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  31000. 800d606: ee37 7a87 vadd.f32 s14, s15, s14
  31001. 800d60a: edd7 6a07 vldr s13, [r7, #28]
  31002. 800d60e: eec6 7a87 vdiv.f32 s15, s13, s14
  31003. 800d612: eefc 7ae7 vcvt.u32.f32 s15, s15
  31004. 800d616: ee17 2a90 vmov r2, s15
  31005. 800d61a: 687b ldr r3, [r7, #4]
  31006. 800d61c: 609a str r2, [r3, #8]
  31007. PLL3_Clocks->PLL3_P_Frequency = 0U;
  31008. PLL3_Clocks->PLL3_Q_Frequency = 0U;
  31009. PLL3_Clocks->PLL3_R_Frequency = 0U;
  31010. }
  31011. }
  31012. 800d61e: e008 b.n 800d632 <HAL_RCCEx_GetPLL3ClockFreq+0x282>
  31013. PLL3_Clocks->PLL3_P_Frequency = 0U;
  31014. 800d620: 687b ldr r3, [r7, #4]
  31015. 800d622: 2200 movs r2, #0
  31016. 800d624: 601a str r2, [r3, #0]
  31017. PLL3_Clocks->PLL3_Q_Frequency = 0U;
  31018. 800d626: 687b ldr r3, [r7, #4]
  31019. 800d628: 2200 movs r2, #0
  31020. 800d62a: 605a str r2, [r3, #4]
  31021. PLL3_Clocks->PLL3_R_Frequency = 0U;
  31022. 800d62c: 687b ldr r3, [r7, #4]
  31023. 800d62e: 2200 movs r2, #0
  31024. 800d630: 609a str r2, [r3, #8]
  31025. }
  31026. 800d632: bf00 nop
  31027. 800d634: 3724 adds r7, #36 @ 0x24
  31028. 800d636: 46bd mov sp, r7
  31029. 800d638: f85d 7b04 ldr.w r7, [sp], #4
  31030. 800d63c: 4770 bx lr
  31031. 800d63e: bf00 nop
  31032. 800d640: 58024400 .word 0x58024400
  31033. 800d644: 03d09000 .word 0x03d09000
  31034. 800d648: 46000000 .word 0x46000000
  31035. 800d64c: 4c742400 .word 0x4c742400
  31036. 800d650: 4a742400 .word 0x4a742400
  31037. 800d654: 4bbebc20 .word 0x4bbebc20
  31038. 0800d658 <HAL_RCCEx_GetPLL1ClockFreq>:
  31039. * right PLL1CLK value. Otherwise, any configuration based on this function will be incorrect.
  31040. * @param PLL1_Clocks structure.
  31041. * @retval None
  31042. */
  31043. void HAL_RCCEx_GetPLL1ClockFreq(PLL1_ClocksTypeDef *PLL1_Clocks)
  31044. {
  31045. 800d658: b480 push {r7}
  31046. 800d65a: b089 sub sp, #36 @ 0x24
  31047. 800d65c: af00 add r7, sp, #0
  31048. 800d65e: 6078 str r0, [r7, #4]
  31049. uint32_t pllsource, pll1m, pll1fracen, hsivalue;
  31050. float_t fracn1, pll1vco;
  31051. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  31052. 800d660: 4ba0 ldr r3, [pc, #640] @ (800d8e4 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  31053. 800d662: 6a9b ldr r3, [r3, #40] @ 0x28
  31054. 800d664: f003 0303 and.w r3, r3, #3
  31055. 800d668: 61bb str r3, [r7, #24]
  31056. pll1m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1) >> 4);
  31057. 800d66a: 4b9e ldr r3, [pc, #632] @ (800d8e4 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  31058. 800d66c: 6a9b ldr r3, [r3, #40] @ 0x28
  31059. 800d66e: 091b lsrs r3, r3, #4
  31060. 800d670: f003 033f and.w r3, r3, #63 @ 0x3f
  31061. 800d674: 617b str r3, [r7, #20]
  31062. pll1fracen = RCC->PLLCFGR & RCC_PLLCFGR_PLL1FRACEN;
  31063. 800d676: 4b9b ldr r3, [pc, #620] @ (800d8e4 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  31064. 800d678: 6adb ldr r3, [r3, #44] @ 0x2c
  31065. 800d67a: f003 0301 and.w r3, r3, #1
  31066. 800d67e: 613b str r3, [r7, #16]
  31067. fracn1 = (float_t)(uint32_t)(pll1fracen * ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> 3));
  31068. 800d680: 4b98 ldr r3, [pc, #608] @ (800d8e4 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  31069. 800d682: 6b5b ldr r3, [r3, #52] @ 0x34
  31070. 800d684: 08db lsrs r3, r3, #3
  31071. 800d686: f3c3 030c ubfx r3, r3, #0, #13
  31072. 800d68a: 693a ldr r2, [r7, #16]
  31073. 800d68c: fb02 f303 mul.w r3, r2, r3
  31074. 800d690: ee07 3a90 vmov s15, r3
  31075. 800d694: eef8 7a67 vcvt.f32.u32 s15, s15
  31076. 800d698: edc7 7a03 vstr s15, [r7, #12]
  31077. if (pll1m != 0U)
  31078. 800d69c: 697b ldr r3, [r7, #20]
  31079. 800d69e: 2b00 cmp r3, #0
  31080. 800d6a0: f000 8111 beq.w 800d8c6 <HAL_RCCEx_GetPLL1ClockFreq+0x26e>
  31081. {
  31082. switch (pllsource)
  31083. 800d6a4: 69bb ldr r3, [r7, #24]
  31084. 800d6a6: 2b02 cmp r3, #2
  31085. 800d6a8: f000 8083 beq.w 800d7b2 <HAL_RCCEx_GetPLL1ClockFreq+0x15a>
  31086. 800d6ac: 69bb ldr r3, [r7, #24]
  31087. 800d6ae: 2b02 cmp r3, #2
  31088. 800d6b0: f200 80a1 bhi.w 800d7f6 <HAL_RCCEx_GetPLL1ClockFreq+0x19e>
  31089. 800d6b4: 69bb ldr r3, [r7, #24]
  31090. 800d6b6: 2b00 cmp r3, #0
  31091. 800d6b8: d003 beq.n 800d6c2 <HAL_RCCEx_GetPLL1ClockFreq+0x6a>
  31092. 800d6ba: 69bb ldr r3, [r7, #24]
  31093. 800d6bc: 2b01 cmp r3, #1
  31094. 800d6be: d056 beq.n 800d76e <HAL_RCCEx_GetPLL1ClockFreq+0x116>
  31095. 800d6c0: e099 b.n 800d7f6 <HAL_RCCEx_GetPLL1ClockFreq+0x19e>
  31096. {
  31097. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  31098. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  31099. 800d6c2: 4b88 ldr r3, [pc, #544] @ (800d8e4 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  31100. 800d6c4: 681b ldr r3, [r3, #0]
  31101. 800d6c6: f003 0320 and.w r3, r3, #32
  31102. 800d6ca: 2b00 cmp r3, #0
  31103. 800d6cc: d02d beq.n 800d72a <HAL_RCCEx_GetPLL1ClockFreq+0xd2>
  31104. {
  31105. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  31106. 800d6ce: 4b85 ldr r3, [pc, #532] @ (800d8e4 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  31107. 800d6d0: 681b ldr r3, [r3, #0]
  31108. 800d6d2: 08db lsrs r3, r3, #3
  31109. 800d6d4: f003 0303 and.w r3, r3, #3
  31110. 800d6d8: 4a83 ldr r2, [pc, #524] @ (800d8e8 <HAL_RCCEx_GetPLL1ClockFreq+0x290>)
  31111. 800d6da: fa22 f303 lsr.w r3, r2, r3
  31112. 800d6de: 60bb str r3, [r7, #8]
  31113. pll1vco = ((float_t)hsivalue / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  31114. 800d6e0: 68bb ldr r3, [r7, #8]
  31115. 800d6e2: ee07 3a90 vmov s15, r3
  31116. 800d6e6: eef8 6a67 vcvt.f32.u32 s13, s15
  31117. 800d6ea: 697b ldr r3, [r7, #20]
  31118. 800d6ec: ee07 3a90 vmov s15, r3
  31119. 800d6f0: eef8 7a67 vcvt.f32.u32 s15, s15
  31120. 800d6f4: ee86 7aa7 vdiv.f32 s14, s13, s15
  31121. 800d6f8: 4b7a ldr r3, [pc, #488] @ (800d8e4 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  31122. 800d6fa: 6b1b ldr r3, [r3, #48] @ 0x30
  31123. 800d6fc: f3c3 0308 ubfx r3, r3, #0, #9
  31124. 800d700: ee07 3a90 vmov s15, r3
  31125. 800d704: eef8 6a67 vcvt.f32.u32 s13, s15
  31126. 800d708: ed97 6a03 vldr s12, [r7, #12]
  31127. 800d70c: eddf 5a77 vldr s11, [pc, #476] @ 800d8ec <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  31128. 800d710: eec6 7a25 vdiv.f32 s15, s12, s11
  31129. 800d714: ee76 7aa7 vadd.f32 s15, s13, s15
  31130. 800d718: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  31131. 800d71c: ee77 7aa6 vadd.f32 s15, s15, s13
  31132. 800d720: ee67 7a27 vmul.f32 s15, s14, s15
  31133. 800d724: edc7 7a07 vstr s15, [r7, #28]
  31134. }
  31135. else
  31136. {
  31137. pll1vco = ((float_t)HSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  31138. }
  31139. break;
  31140. 800d728: e087 b.n 800d83a <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  31141. pll1vco = ((float_t)HSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  31142. 800d72a: 697b ldr r3, [r7, #20]
  31143. 800d72c: ee07 3a90 vmov s15, r3
  31144. 800d730: eef8 7a67 vcvt.f32.u32 s15, s15
  31145. 800d734: eddf 6a6e vldr s13, [pc, #440] @ 800d8f0 <HAL_RCCEx_GetPLL1ClockFreq+0x298>
  31146. 800d738: ee86 7aa7 vdiv.f32 s14, s13, s15
  31147. 800d73c: 4b69 ldr r3, [pc, #420] @ (800d8e4 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  31148. 800d73e: 6b1b ldr r3, [r3, #48] @ 0x30
  31149. 800d740: f3c3 0308 ubfx r3, r3, #0, #9
  31150. 800d744: ee07 3a90 vmov s15, r3
  31151. 800d748: eef8 6a67 vcvt.f32.u32 s13, s15
  31152. 800d74c: ed97 6a03 vldr s12, [r7, #12]
  31153. 800d750: eddf 5a66 vldr s11, [pc, #408] @ 800d8ec <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  31154. 800d754: eec6 7a25 vdiv.f32 s15, s12, s11
  31155. 800d758: ee76 7aa7 vadd.f32 s15, s13, s15
  31156. 800d75c: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  31157. 800d760: ee77 7aa6 vadd.f32 s15, s15, s13
  31158. 800d764: ee67 7a27 vmul.f32 s15, s14, s15
  31159. 800d768: edc7 7a07 vstr s15, [r7, #28]
  31160. break;
  31161. 800d76c: e065 b.n 800d83a <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  31162. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  31163. pll1vco = ((float_t)CSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  31164. 800d76e: 697b ldr r3, [r7, #20]
  31165. 800d770: ee07 3a90 vmov s15, r3
  31166. 800d774: eef8 7a67 vcvt.f32.u32 s15, s15
  31167. 800d778: eddf 6a5e vldr s13, [pc, #376] @ 800d8f4 <HAL_RCCEx_GetPLL1ClockFreq+0x29c>
  31168. 800d77c: ee86 7aa7 vdiv.f32 s14, s13, s15
  31169. 800d780: 4b58 ldr r3, [pc, #352] @ (800d8e4 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  31170. 800d782: 6b1b ldr r3, [r3, #48] @ 0x30
  31171. 800d784: f3c3 0308 ubfx r3, r3, #0, #9
  31172. 800d788: ee07 3a90 vmov s15, r3
  31173. 800d78c: eef8 6a67 vcvt.f32.u32 s13, s15
  31174. 800d790: ed97 6a03 vldr s12, [r7, #12]
  31175. 800d794: eddf 5a55 vldr s11, [pc, #340] @ 800d8ec <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  31176. 800d798: eec6 7a25 vdiv.f32 s15, s12, s11
  31177. 800d79c: ee76 7aa7 vadd.f32 s15, s13, s15
  31178. 800d7a0: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  31179. 800d7a4: ee77 7aa6 vadd.f32 s15, s15, s13
  31180. 800d7a8: ee67 7a27 vmul.f32 s15, s14, s15
  31181. 800d7ac: edc7 7a07 vstr s15, [r7, #28]
  31182. break;
  31183. 800d7b0: e043 b.n 800d83a <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  31184. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  31185. pll1vco = ((float_t)HSE_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  31186. 800d7b2: 697b ldr r3, [r7, #20]
  31187. 800d7b4: ee07 3a90 vmov s15, r3
  31188. 800d7b8: eef8 7a67 vcvt.f32.u32 s15, s15
  31189. 800d7bc: eddf 6a4e vldr s13, [pc, #312] @ 800d8f8 <HAL_RCCEx_GetPLL1ClockFreq+0x2a0>
  31190. 800d7c0: ee86 7aa7 vdiv.f32 s14, s13, s15
  31191. 800d7c4: 4b47 ldr r3, [pc, #284] @ (800d8e4 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  31192. 800d7c6: 6b1b ldr r3, [r3, #48] @ 0x30
  31193. 800d7c8: f3c3 0308 ubfx r3, r3, #0, #9
  31194. 800d7cc: ee07 3a90 vmov s15, r3
  31195. 800d7d0: eef8 6a67 vcvt.f32.u32 s13, s15
  31196. 800d7d4: ed97 6a03 vldr s12, [r7, #12]
  31197. 800d7d8: eddf 5a44 vldr s11, [pc, #272] @ 800d8ec <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  31198. 800d7dc: eec6 7a25 vdiv.f32 s15, s12, s11
  31199. 800d7e0: ee76 7aa7 vadd.f32 s15, s13, s15
  31200. 800d7e4: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  31201. 800d7e8: ee77 7aa6 vadd.f32 s15, s15, s13
  31202. 800d7ec: ee67 7a27 vmul.f32 s15, s14, s15
  31203. 800d7f0: edc7 7a07 vstr s15, [r7, #28]
  31204. break;
  31205. 800d7f4: e021 b.n 800d83a <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  31206. default:
  31207. pll1vco = ((float_t)HSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  31208. 800d7f6: 697b ldr r3, [r7, #20]
  31209. 800d7f8: ee07 3a90 vmov s15, r3
  31210. 800d7fc: eef8 7a67 vcvt.f32.u32 s15, s15
  31211. 800d800: eddf 6a3b vldr s13, [pc, #236] @ 800d8f0 <HAL_RCCEx_GetPLL1ClockFreq+0x298>
  31212. 800d804: ee86 7aa7 vdiv.f32 s14, s13, s15
  31213. 800d808: 4b36 ldr r3, [pc, #216] @ (800d8e4 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  31214. 800d80a: 6b1b ldr r3, [r3, #48] @ 0x30
  31215. 800d80c: f3c3 0308 ubfx r3, r3, #0, #9
  31216. 800d810: ee07 3a90 vmov s15, r3
  31217. 800d814: eef8 6a67 vcvt.f32.u32 s13, s15
  31218. 800d818: ed97 6a03 vldr s12, [r7, #12]
  31219. 800d81c: eddf 5a33 vldr s11, [pc, #204] @ 800d8ec <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  31220. 800d820: eec6 7a25 vdiv.f32 s15, s12, s11
  31221. 800d824: ee76 7aa7 vadd.f32 s15, s13, s15
  31222. 800d828: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  31223. 800d82c: ee77 7aa6 vadd.f32 s15, s15, s13
  31224. 800d830: ee67 7a27 vmul.f32 s15, s14, s15
  31225. 800d834: edc7 7a07 vstr s15, [r7, #28]
  31226. break;
  31227. 800d838: bf00 nop
  31228. }
  31229. PLL1_Clocks->PLL1_P_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >> 9) + (float_t)1)) ;
  31230. 800d83a: 4b2a ldr r3, [pc, #168] @ (800d8e4 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  31231. 800d83c: 6b1b ldr r3, [r3, #48] @ 0x30
  31232. 800d83e: 0a5b lsrs r3, r3, #9
  31233. 800d840: f003 037f and.w r3, r3, #127 @ 0x7f
  31234. 800d844: ee07 3a90 vmov s15, r3
  31235. 800d848: eef8 7a67 vcvt.f32.u32 s15, s15
  31236. 800d84c: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  31237. 800d850: ee37 7a87 vadd.f32 s14, s15, s14
  31238. 800d854: edd7 6a07 vldr s13, [r7, #28]
  31239. 800d858: eec6 7a87 vdiv.f32 s15, s13, s14
  31240. 800d85c: eefc 7ae7 vcvt.u32.f32 s15, s15
  31241. 800d860: ee17 2a90 vmov r2, s15
  31242. 800d864: 687b ldr r3, [r7, #4]
  31243. 800d866: 601a str r2, [r3, #0]
  31244. PLL1_Clocks->PLL1_Q_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_Q1) >> 16) + (float_t)1)) ;
  31245. 800d868: 4b1e ldr r3, [pc, #120] @ (800d8e4 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  31246. 800d86a: 6b1b ldr r3, [r3, #48] @ 0x30
  31247. 800d86c: 0c1b lsrs r3, r3, #16
  31248. 800d86e: f003 037f and.w r3, r3, #127 @ 0x7f
  31249. 800d872: ee07 3a90 vmov s15, r3
  31250. 800d876: eef8 7a67 vcvt.f32.u32 s15, s15
  31251. 800d87a: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  31252. 800d87e: ee37 7a87 vadd.f32 s14, s15, s14
  31253. 800d882: edd7 6a07 vldr s13, [r7, #28]
  31254. 800d886: eec6 7a87 vdiv.f32 s15, s13, s14
  31255. 800d88a: eefc 7ae7 vcvt.u32.f32 s15, s15
  31256. 800d88e: ee17 2a90 vmov r2, s15
  31257. 800d892: 687b ldr r3, [r7, #4]
  31258. 800d894: 605a str r2, [r3, #4]
  31259. PLL1_Clocks->PLL1_R_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_R1) >> 24) + (float_t)1)) ;
  31260. 800d896: 4b13 ldr r3, [pc, #76] @ (800d8e4 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  31261. 800d898: 6b1b ldr r3, [r3, #48] @ 0x30
  31262. 800d89a: 0e1b lsrs r3, r3, #24
  31263. 800d89c: f003 037f and.w r3, r3, #127 @ 0x7f
  31264. 800d8a0: ee07 3a90 vmov s15, r3
  31265. 800d8a4: eef8 7a67 vcvt.f32.u32 s15, s15
  31266. 800d8a8: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  31267. 800d8ac: ee37 7a87 vadd.f32 s14, s15, s14
  31268. 800d8b0: edd7 6a07 vldr s13, [r7, #28]
  31269. 800d8b4: eec6 7a87 vdiv.f32 s15, s13, s14
  31270. 800d8b8: eefc 7ae7 vcvt.u32.f32 s15, s15
  31271. 800d8bc: ee17 2a90 vmov r2, s15
  31272. 800d8c0: 687b ldr r3, [r7, #4]
  31273. 800d8c2: 609a str r2, [r3, #8]
  31274. PLL1_Clocks->PLL1_P_Frequency = 0U;
  31275. PLL1_Clocks->PLL1_Q_Frequency = 0U;
  31276. PLL1_Clocks->PLL1_R_Frequency = 0U;
  31277. }
  31278. }
  31279. 800d8c4: e008 b.n 800d8d8 <HAL_RCCEx_GetPLL1ClockFreq+0x280>
  31280. PLL1_Clocks->PLL1_P_Frequency = 0U;
  31281. 800d8c6: 687b ldr r3, [r7, #4]
  31282. 800d8c8: 2200 movs r2, #0
  31283. 800d8ca: 601a str r2, [r3, #0]
  31284. PLL1_Clocks->PLL1_Q_Frequency = 0U;
  31285. 800d8cc: 687b ldr r3, [r7, #4]
  31286. 800d8ce: 2200 movs r2, #0
  31287. 800d8d0: 605a str r2, [r3, #4]
  31288. PLL1_Clocks->PLL1_R_Frequency = 0U;
  31289. 800d8d2: 687b ldr r3, [r7, #4]
  31290. 800d8d4: 2200 movs r2, #0
  31291. 800d8d6: 609a str r2, [r3, #8]
  31292. }
  31293. 800d8d8: bf00 nop
  31294. 800d8da: 3724 adds r7, #36 @ 0x24
  31295. 800d8dc: 46bd mov sp, r7
  31296. 800d8de: f85d 7b04 ldr.w r7, [sp], #4
  31297. 800d8e2: 4770 bx lr
  31298. 800d8e4: 58024400 .word 0x58024400
  31299. 800d8e8: 03d09000 .word 0x03d09000
  31300. 800d8ec: 46000000 .word 0x46000000
  31301. 800d8f0: 4c742400 .word 0x4c742400
  31302. 800d8f4: 4a742400 .word 0x4a742400
  31303. 800d8f8: 4bbebc20 .word 0x4bbebc20
  31304. 0800d8fc <RCCEx_PLL2_Config>:
  31305. * @note PLL2 is temporary disabled to apply new parameters
  31306. *
  31307. * @retval HAL status
  31308. */
  31309. static HAL_StatusTypeDef RCCEx_PLL2_Config(RCC_PLL2InitTypeDef *pll2, uint32_t Divider)
  31310. {
  31311. 800d8fc: b580 push {r7, lr}
  31312. 800d8fe: b084 sub sp, #16
  31313. 800d900: af00 add r7, sp, #0
  31314. 800d902: 6078 str r0, [r7, #4]
  31315. 800d904: 6039 str r1, [r7, #0]
  31316. uint32_t tickstart;
  31317. HAL_StatusTypeDef status = HAL_OK;
  31318. 800d906: 2300 movs r3, #0
  31319. 800d908: 73fb strb r3, [r7, #15]
  31320. assert_param(IS_RCC_PLL2RGE_VALUE(pll2->PLL2RGE));
  31321. assert_param(IS_RCC_PLL2VCO_VALUE(pll2->PLL2VCOSEL));
  31322. assert_param(IS_RCC_PLLFRACN_VALUE(pll2->PLL2FRACN));
  31323. /* Check that PLL2 OSC clock source is already set */
  31324. if (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_NONE)
  31325. 800d90a: 4b53 ldr r3, [pc, #332] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31326. 800d90c: 6a9b ldr r3, [r3, #40] @ 0x28
  31327. 800d90e: f003 0303 and.w r3, r3, #3
  31328. 800d912: 2b03 cmp r3, #3
  31329. 800d914: d101 bne.n 800d91a <RCCEx_PLL2_Config+0x1e>
  31330. {
  31331. return HAL_ERROR;
  31332. 800d916: 2301 movs r3, #1
  31333. 800d918: e099 b.n 800da4e <RCCEx_PLL2_Config+0x152>
  31334. else
  31335. {
  31336. /* Disable PLL2. */
  31337. __HAL_RCC_PLL2_DISABLE();
  31338. 800d91a: 4b4f ldr r3, [pc, #316] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31339. 800d91c: 681b ldr r3, [r3, #0]
  31340. 800d91e: 4a4e ldr r2, [pc, #312] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31341. 800d920: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  31342. 800d924: 6013 str r3, [r2, #0]
  31343. /* Get Start Tick*/
  31344. tickstart = HAL_GetTick();
  31345. 800d926: f7f7 f89d bl 8004a64 <HAL_GetTick>
  31346. 800d92a: 60b8 str r0, [r7, #8]
  31347. /* Wait till PLL is disabled */
  31348. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != 0U)
  31349. 800d92c: e008 b.n 800d940 <RCCEx_PLL2_Config+0x44>
  31350. {
  31351. if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE)
  31352. 800d92e: f7f7 f899 bl 8004a64 <HAL_GetTick>
  31353. 800d932: 4602 mov r2, r0
  31354. 800d934: 68bb ldr r3, [r7, #8]
  31355. 800d936: 1ad3 subs r3, r2, r3
  31356. 800d938: 2b02 cmp r3, #2
  31357. 800d93a: d901 bls.n 800d940 <RCCEx_PLL2_Config+0x44>
  31358. {
  31359. return HAL_TIMEOUT;
  31360. 800d93c: 2303 movs r3, #3
  31361. 800d93e: e086 b.n 800da4e <RCCEx_PLL2_Config+0x152>
  31362. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != 0U)
  31363. 800d940: 4b45 ldr r3, [pc, #276] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31364. 800d942: 681b ldr r3, [r3, #0]
  31365. 800d944: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  31366. 800d948: 2b00 cmp r3, #0
  31367. 800d94a: d1f0 bne.n 800d92e <RCCEx_PLL2_Config+0x32>
  31368. }
  31369. }
  31370. /* Configure PLL2 multiplication and division factors. */
  31371. __HAL_RCC_PLL2_CONFIG(pll2->PLL2M,
  31372. 800d94c: 4b42 ldr r3, [pc, #264] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31373. 800d94e: 6a9b ldr r3, [r3, #40] @ 0x28
  31374. 800d950: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  31375. 800d954: 687b ldr r3, [r7, #4]
  31376. 800d956: 681b ldr r3, [r3, #0]
  31377. 800d958: 031b lsls r3, r3, #12
  31378. 800d95a: 493f ldr r1, [pc, #252] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31379. 800d95c: 4313 orrs r3, r2
  31380. 800d95e: 628b str r3, [r1, #40] @ 0x28
  31381. 800d960: 687b ldr r3, [r7, #4]
  31382. 800d962: 685b ldr r3, [r3, #4]
  31383. 800d964: 3b01 subs r3, #1
  31384. 800d966: f3c3 0208 ubfx r2, r3, #0, #9
  31385. 800d96a: 687b ldr r3, [r7, #4]
  31386. 800d96c: 689b ldr r3, [r3, #8]
  31387. 800d96e: 3b01 subs r3, #1
  31388. 800d970: 025b lsls r3, r3, #9
  31389. 800d972: b29b uxth r3, r3
  31390. 800d974: 431a orrs r2, r3
  31391. 800d976: 687b ldr r3, [r7, #4]
  31392. 800d978: 68db ldr r3, [r3, #12]
  31393. 800d97a: 3b01 subs r3, #1
  31394. 800d97c: 041b lsls r3, r3, #16
  31395. 800d97e: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  31396. 800d982: 431a orrs r2, r3
  31397. 800d984: 687b ldr r3, [r7, #4]
  31398. 800d986: 691b ldr r3, [r3, #16]
  31399. 800d988: 3b01 subs r3, #1
  31400. 800d98a: 061b lsls r3, r3, #24
  31401. 800d98c: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  31402. 800d990: 4931 ldr r1, [pc, #196] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31403. 800d992: 4313 orrs r3, r2
  31404. 800d994: 638b str r3, [r1, #56] @ 0x38
  31405. pll2->PLL2P,
  31406. pll2->PLL2Q,
  31407. pll2->PLL2R);
  31408. /* Select PLL2 input reference frequency range: VCI */
  31409. __HAL_RCC_PLL2_VCIRANGE(pll2->PLL2RGE) ;
  31410. 800d996: 4b30 ldr r3, [pc, #192] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31411. 800d998: 6adb ldr r3, [r3, #44] @ 0x2c
  31412. 800d99a: f023 02c0 bic.w r2, r3, #192 @ 0xc0
  31413. 800d99e: 687b ldr r3, [r7, #4]
  31414. 800d9a0: 695b ldr r3, [r3, #20]
  31415. 800d9a2: 492d ldr r1, [pc, #180] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31416. 800d9a4: 4313 orrs r3, r2
  31417. 800d9a6: 62cb str r3, [r1, #44] @ 0x2c
  31418. /* Select PLL2 output frequency range : VCO */
  31419. __HAL_RCC_PLL2_VCORANGE(pll2->PLL2VCOSEL) ;
  31420. 800d9a8: 4b2b ldr r3, [pc, #172] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31421. 800d9aa: 6adb ldr r3, [r3, #44] @ 0x2c
  31422. 800d9ac: f023 0220 bic.w r2, r3, #32
  31423. 800d9b0: 687b ldr r3, [r7, #4]
  31424. 800d9b2: 699b ldr r3, [r3, #24]
  31425. 800d9b4: 4928 ldr r1, [pc, #160] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31426. 800d9b6: 4313 orrs r3, r2
  31427. 800d9b8: 62cb str r3, [r1, #44] @ 0x2c
  31428. /* Disable PLL2FRACN . */
  31429. __HAL_RCC_PLL2FRACN_DISABLE();
  31430. 800d9ba: 4b27 ldr r3, [pc, #156] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31431. 800d9bc: 6adb ldr r3, [r3, #44] @ 0x2c
  31432. 800d9be: 4a26 ldr r2, [pc, #152] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31433. 800d9c0: f023 0310 bic.w r3, r3, #16
  31434. 800d9c4: 62d3 str r3, [r2, #44] @ 0x2c
  31435. /* Configures PLL2 clock Fractional Part Of The Multiplication Factor */
  31436. __HAL_RCC_PLL2FRACN_CONFIG(pll2->PLL2FRACN);
  31437. 800d9c6: 4b24 ldr r3, [pc, #144] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31438. 800d9c8: 6bda ldr r2, [r3, #60] @ 0x3c
  31439. 800d9ca: 4b24 ldr r3, [pc, #144] @ (800da5c <RCCEx_PLL2_Config+0x160>)
  31440. 800d9cc: 4013 ands r3, r2
  31441. 800d9ce: 687a ldr r2, [r7, #4]
  31442. 800d9d0: 69d2 ldr r2, [r2, #28]
  31443. 800d9d2: 00d2 lsls r2, r2, #3
  31444. 800d9d4: 4920 ldr r1, [pc, #128] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31445. 800d9d6: 4313 orrs r3, r2
  31446. 800d9d8: 63cb str r3, [r1, #60] @ 0x3c
  31447. /* Enable PLL2FRACN . */
  31448. __HAL_RCC_PLL2FRACN_ENABLE();
  31449. 800d9da: 4b1f ldr r3, [pc, #124] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31450. 800d9dc: 6adb ldr r3, [r3, #44] @ 0x2c
  31451. 800d9de: 4a1e ldr r2, [pc, #120] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31452. 800d9e0: f043 0310 orr.w r3, r3, #16
  31453. 800d9e4: 62d3 str r3, [r2, #44] @ 0x2c
  31454. /* Enable the PLL2 clock output */
  31455. if (Divider == DIVIDER_P_UPDATE)
  31456. 800d9e6: 683b ldr r3, [r7, #0]
  31457. 800d9e8: 2b00 cmp r3, #0
  31458. 800d9ea: d106 bne.n 800d9fa <RCCEx_PLL2_Config+0xfe>
  31459. {
  31460. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVP);
  31461. 800d9ec: 4b1a ldr r3, [pc, #104] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31462. 800d9ee: 6adb ldr r3, [r3, #44] @ 0x2c
  31463. 800d9f0: 4a19 ldr r2, [pc, #100] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31464. 800d9f2: f443 2300 orr.w r3, r3, #524288 @ 0x80000
  31465. 800d9f6: 62d3 str r3, [r2, #44] @ 0x2c
  31466. 800d9f8: e00f b.n 800da1a <RCCEx_PLL2_Config+0x11e>
  31467. }
  31468. else if (Divider == DIVIDER_Q_UPDATE)
  31469. 800d9fa: 683b ldr r3, [r7, #0]
  31470. 800d9fc: 2b01 cmp r3, #1
  31471. 800d9fe: d106 bne.n 800da0e <RCCEx_PLL2_Config+0x112>
  31472. {
  31473. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVQ);
  31474. 800da00: 4b15 ldr r3, [pc, #84] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31475. 800da02: 6adb ldr r3, [r3, #44] @ 0x2c
  31476. 800da04: 4a14 ldr r2, [pc, #80] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31477. 800da06: f443 1380 orr.w r3, r3, #1048576 @ 0x100000
  31478. 800da0a: 62d3 str r3, [r2, #44] @ 0x2c
  31479. 800da0c: e005 b.n 800da1a <RCCEx_PLL2_Config+0x11e>
  31480. }
  31481. else
  31482. {
  31483. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVR);
  31484. 800da0e: 4b12 ldr r3, [pc, #72] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31485. 800da10: 6adb ldr r3, [r3, #44] @ 0x2c
  31486. 800da12: 4a11 ldr r2, [pc, #68] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31487. 800da14: f443 1300 orr.w r3, r3, #2097152 @ 0x200000
  31488. 800da18: 62d3 str r3, [r2, #44] @ 0x2c
  31489. }
  31490. /* Enable PLL2. */
  31491. __HAL_RCC_PLL2_ENABLE();
  31492. 800da1a: 4b0f ldr r3, [pc, #60] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31493. 800da1c: 681b ldr r3, [r3, #0]
  31494. 800da1e: 4a0e ldr r2, [pc, #56] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31495. 800da20: f043 6380 orr.w r3, r3, #67108864 @ 0x4000000
  31496. 800da24: 6013 str r3, [r2, #0]
  31497. /* Get Start Tick*/
  31498. tickstart = HAL_GetTick();
  31499. 800da26: f7f7 f81d bl 8004a64 <HAL_GetTick>
  31500. 800da2a: 60b8 str r0, [r7, #8]
  31501. /* Wait till PLL2 is ready */
  31502. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == 0U)
  31503. 800da2c: e008 b.n 800da40 <RCCEx_PLL2_Config+0x144>
  31504. {
  31505. if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE)
  31506. 800da2e: f7f7 f819 bl 8004a64 <HAL_GetTick>
  31507. 800da32: 4602 mov r2, r0
  31508. 800da34: 68bb ldr r3, [r7, #8]
  31509. 800da36: 1ad3 subs r3, r2, r3
  31510. 800da38: 2b02 cmp r3, #2
  31511. 800da3a: d901 bls.n 800da40 <RCCEx_PLL2_Config+0x144>
  31512. {
  31513. return HAL_TIMEOUT;
  31514. 800da3c: 2303 movs r3, #3
  31515. 800da3e: e006 b.n 800da4e <RCCEx_PLL2_Config+0x152>
  31516. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == 0U)
  31517. 800da40: 4b05 ldr r3, [pc, #20] @ (800da58 <RCCEx_PLL2_Config+0x15c>)
  31518. 800da42: 681b ldr r3, [r3, #0]
  31519. 800da44: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  31520. 800da48: 2b00 cmp r3, #0
  31521. 800da4a: d0f0 beq.n 800da2e <RCCEx_PLL2_Config+0x132>
  31522. }
  31523. }
  31524. return status;
  31525. 800da4c: 7bfb ldrb r3, [r7, #15]
  31526. }
  31527. 800da4e: 4618 mov r0, r3
  31528. 800da50: 3710 adds r7, #16
  31529. 800da52: 46bd mov sp, r7
  31530. 800da54: bd80 pop {r7, pc}
  31531. 800da56: bf00 nop
  31532. 800da58: 58024400 .word 0x58024400
  31533. 800da5c: ffff0007 .word 0xffff0007
  31534. 0800da60 <RCCEx_PLL3_Config>:
  31535. * @note PLL3 is temporary disabled to apply new parameters
  31536. *
  31537. * @retval HAL status
  31538. */
  31539. static HAL_StatusTypeDef RCCEx_PLL3_Config(RCC_PLL3InitTypeDef *pll3, uint32_t Divider)
  31540. {
  31541. 800da60: b580 push {r7, lr}
  31542. 800da62: b084 sub sp, #16
  31543. 800da64: af00 add r7, sp, #0
  31544. 800da66: 6078 str r0, [r7, #4]
  31545. 800da68: 6039 str r1, [r7, #0]
  31546. uint32_t tickstart;
  31547. HAL_StatusTypeDef status = HAL_OK;
  31548. 800da6a: 2300 movs r3, #0
  31549. 800da6c: 73fb strb r3, [r7, #15]
  31550. assert_param(IS_RCC_PLL3RGE_VALUE(pll3->PLL3RGE));
  31551. assert_param(IS_RCC_PLL3VCO_VALUE(pll3->PLL3VCOSEL));
  31552. assert_param(IS_RCC_PLLFRACN_VALUE(pll3->PLL3FRACN));
  31553. /* Check that PLL3 OSC clock source is already set */
  31554. if (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_NONE)
  31555. 800da6e: 4b53 ldr r3, [pc, #332] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31556. 800da70: 6a9b ldr r3, [r3, #40] @ 0x28
  31557. 800da72: f003 0303 and.w r3, r3, #3
  31558. 800da76: 2b03 cmp r3, #3
  31559. 800da78: d101 bne.n 800da7e <RCCEx_PLL3_Config+0x1e>
  31560. {
  31561. return HAL_ERROR;
  31562. 800da7a: 2301 movs r3, #1
  31563. 800da7c: e099 b.n 800dbb2 <RCCEx_PLL3_Config+0x152>
  31564. else
  31565. {
  31566. /* Disable PLL3. */
  31567. __HAL_RCC_PLL3_DISABLE();
  31568. 800da7e: 4b4f ldr r3, [pc, #316] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31569. 800da80: 681b ldr r3, [r3, #0]
  31570. 800da82: 4a4e ldr r2, [pc, #312] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31571. 800da84: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  31572. 800da88: 6013 str r3, [r2, #0]
  31573. /* Get Start Tick*/
  31574. tickstart = HAL_GetTick();
  31575. 800da8a: f7f6 ffeb bl 8004a64 <HAL_GetTick>
  31576. 800da8e: 60b8 str r0, [r7, #8]
  31577. /* Wait till PLL3 is ready */
  31578. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) != 0U)
  31579. 800da90: e008 b.n 800daa4 <RCCEx_PLL3_Config+0x44>
  31580. {
  31581. if ((HAL_GetTick() - tickstart) > PLL3_TIMEOUT_VALUE)
  31582. 800da92: f7f6 ffe7 bl 8004a64 <HAL_GetTick>
  31583. 800da96: 4602 mov r2, r0
  31584. 800da98: 68bb ldr r3, [r7, #8]
  31585. 800da9a: 1ad3 subs r3, r2, r3
  31586. 800da9c: 2b02 cmp r3, #2
  31587. 800da9e: d901 bls.n 800daa4 <RCCEx_PLL3_Config+0x44>
  31588. {
  31589. return HAL_TIMEOUT;
  31590. 800daa0: 2303 movs r3, #3
  31591. 800daa2: e086 b.n 800dbb2 <RCCEx_PLL3_Config+0x152>
  31592. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) != 0U)
  31593. 800daa4: 4b45 ldr r3, [pc, #276] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31594. 800daa6: 681b ldr r3, [r3, #0]
  31595. 800daa8: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  31596. 800daac: 2b00 cmp r3, #0
  31597. 800daae: d1f0 bne.n 800da92 <RCCEx_PLL3_Config+0x32>
  31598. }
  31599. }
  31600. /* Configure the PLL3 multiplication and division factors. */
  31601. __HAL_RCC_PLL3_CONFIG(pll3->PLL3M,
  31602. 800dab0: 4b42 ldr r3, [pc, #264] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31603. 800dab2: 6a9b ldr r3, [r3, #40] @ 0x28
  31604. 800dab4: f023 727c bic.w r2, r3, #66060288 @ 0x3f00000
  31605. 800dab8: 687b ldr r3, [r7, #4]
  31606. 800daba: 681b ldr r3, [r3, #0]
  31607. 800dabc: 051b lsls r3, r3, #20
  31608. 800dabe: 493f ldr r1, [pc, #252] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31609. 800dac0: 4313 orrs r3, r2
  31610. 800dac2: 628b str r3, [r1, #40] @ 0x28
  31611. 800dac4: 687b ldr r3, [r7, #4]
  31612. 800dac6: 685b ldr r3, [r3, #4]
  31613. 800dac8: 3b01 subs r3, #1
  31614. 800daca: f3c3 0208 ubfx r2, r3, #0, #9
  31615. 800dace: 687b ldr r3, [r7, #4]
  31616. 800dad0: 689b ldr r3, [r3, #8]
  31617. 800dad2: 3b01 subs r3, #1
  31618. 800dad4: 025b lsls r3, r3, #9
  31619. 800dad6: b29b uxth r3, r3
  31620. 800dad8: 431a orrs r2, r3
  31621. 800dada: 687b ldr r3, [r7, #4]
  31622. 800dadc: 68db ldr r3, [r3, #12]
  31623. 800dade: 3b01 subs r3, #1
  31624. 800dae0: 041b lsls r3, r3, #16
  31625. 800dae2: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  31626. 800dae6: 431a orrs r2, r3
  31627. 800dae8: 687b ldr r3, [r7, #4]
  31628. 800daea: 691b ldr r3, [r3, #16]
  31629. 800daec: 3b01 subs r3, #1
  31630. 800daee: 061b lsls r3, r3, #24
  31631. 800daf0: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  31632. 800daf4: 4931 ldr r1, [pc, #196] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31633. 800daf6: 4313 orrs r3, r2
  31634. 800daf8: 640b str r3, [r1, #64] @ 0x40
  31635. pll3->PLL3P,
  31636. pll3->PLL3Q,
  31637. pll3->PLL3R);
  31638. /* Select PLL3 input reference frequency range: VCI */
  31639. __HAL_RCC_PLL3_VCIRANGE(pll3->PLL3RGE) ;
  31640. 800dafa: 4b30 ldr r3, [pc, #192] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31641. 800dafc: 6adb ldr r3, [r3, #44] @ 0x2c
  31642. 800dafe: f423 6240 bic.w r2, r3, #3072 @ 0xc00
  31643. 800db02: 687b ldr r3, [r7, #4]
  31644. 800db04: 695b ldr r3, [r3, #20]
  31645. 800db06: 492d ldr r1, [pc, #180] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31646. 800db08: 4313 orrs r3, r2
  31647. 800db0a: 62cb str r3, [r1, #44] @ 0x2c
  31648. /* Select PLL3 output frequency range : VCO */
  31649. __HAL_RCC_PLL3_VCORANGE(pll3->PLL3VCOSEL) ;
  31650. 800db0c: 4b2b ldr r3, [pc, #172] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31651. 800db0e: 6adb ldr r3, [r3, #44] @ 0x2c
  31652. 800db10: f423 7200 bic.w r2, r3, #512 @ 0x200
  31653. 800db14: 687b ldr r3, [r7, #4]
  31654. 800db16: 699b ldr r3, [r3, #24]
  31655. 800db18: 4928 ldr r1, [pc, #160] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31656. 800db1a: 4313 orrs r3, r2
  31657. 800db1c: 62cb str r3, [r1, #44] @ 0x2c
  31658. /* Disable PLL3FRACN . */
  31659. __HAL_RCC_PLL3FRACN_DISABLE();
  31660. 800db1e: 4b27 ldr r3, [pc, #156] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31661. 800db20: 6adb ldr r3, [r3, #44] @ 0x2c
  31662. 800db22: 4a26 ldr r2, [pc, #152] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31663. 800db24: f423 7380 bic.w r3, r3, #256 @ 0x100
  31664. 800db28: 62d3 str r3, [r2, #44] @ 0x2c
  31665. /* Configures PLL3 clock Fractional Part Of The Multiplication Factor */
  31666. __HAL_RCC_PLL3FRACN_CONFIG(pll3->PLL3FRACN);
  31667. 800db2a: 4b24 ldr r3, [pc, #144] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31668. 800db2c: 6c5a ldr r2, [r3, #68] @ 0x44
  31669. 800db2e: 4b24 ldr r3, [pc, #144] @ (800dbc0 <RCCEx_PLL3_Config+0x160>)
  31670. 800db30: 4013 ands r3, r2
  31671. 800db32: 687a ldr r2, [r7, #4]
  31672. 800db34: 69d2 ldr r2, [r2, #28]
  31673. 800db36: 00d2 lsls r2, r2, #3
  31674. 800db38: 4920 ldr r1, [pc, #128] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31675. 800db3a: 4313 orrs r3, r2
  31676. 800db3c: 644b str r3, [r1, #68] @ 0x44
  31677. /* Enable PLL3FRACN . */
  31678. __HAL_RCC_PLL3FRACN_ENABLE();
  31679. 800db3e: 4b1f ldr r3, [pc, #124] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31680. 800db40: 6adb ldr r3, [r3, #44] @ 0x2c
  31681. 800db42: 4a1e ldr r2, [pc, #120] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31682. 800db44: f443 7380 orr.w r3, r3, #256 @ 0x100
  31683. 800db48: 62d3 str r3, [r2, #44] @ 0x2c
  31684. /* Enable the PLL3 clock output */
  31685. if (Divider == DIVIDER_P_UPDATE)
  31686. 800db4a: 683b ldr r3, [r7, #0]
  31687. 800db4c: 2b00 cmp r3, #0
  31688. 800db4e: d106 bne.n 800db5e <RCCEx_PLL3_Config+0xfe>
  31689. {
  31690. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVP);
  31691. 800db50: 4b1a ldr r3, [pc, #104] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31692. 800db52: 6adb ldr r3, [r3, #44] @ 0x2c
  31693. 800db54: 4a19 ldr r2, [pc, #100] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31694. 800db56: f443 0380 orr.w r3, r3, #4194304 @ 0x400000
  31695. 800db5a: 62d3 str r3, [r2, #44] @ 0x2c
  31696. 800db5c: e00f b.n 800db7e <RCCEx_PLL3_Config+0x11e>
  31697. }
  31698. else if (Divider == DIVIDER_Q_UPDATE)
  31699. 800db5e: 683b ldr r3, [r7, #0]
  31700. 800db60: 2b01 cmp r3, #1
  31701. 800db62: d106 bne.n 800db72 <RCCEx_PLL3_Config+0x112>
  31702. {
  31703. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVQ);
  31704. 800db64: 4b15 ldr r3, [pc, #84] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31705. 800db66: 6adb ldr r3, [r3, #44] @ 0x2c
  31706. 800db68: 4a14 ldr r2, [pc, #80] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31707. 800db6a: f443 0300 orr.w r3, r3, #8388608 @ 0x800000
  31708. 800db6e: 62d3 str r3, [r2, #44] @ 0x2c
  31709. 800db70: e005 b.n 800db7e <RCCEx_PLL3_Config+0x11e>
  31710. }
  31711. else
  31712. {
  31713. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVR);
  31714. 800db72: 4b12 ldr r3, [pc, #72] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31715. 800db74: 6adb ldr r3, [r3, #44] @ 0x2c
  31716. 800db76: 4a11 ldr r2, [pc, #68] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31717. 800db78: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  31718. 800db7c: 62d3 str r3, [r2, #44] @ 0x2c
  31719. }
  31720. /* Enable PLL3. */
  31721. __HAL_RCC_PLL3_ENABLE();
  31722. 800db7e: 4b0f ldr r3, [pc, #60] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31723. 800db80: 681b ldr r3, [r3, #0]
  31724. 800db82: 4a0e ldr r2, [pc, #56] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31725. 800db84: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000
  31726. 800db88: 6013 str r3, [r2, #0]
  31727. /* Get Start Tick*/
  31728. tickstart = HAL_GetTick();
  31729. 800db8a: f7f6 ff6b bl 8004a64 <HAL_GetTick>
  31730. 800db8e: 60b8 str r0, [r7, #8]
  31731. /* Wait till PLL3 is ready */
  31732. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) == 0U)
  31733. 800db90: e008 b.n 800dba4 <RCCEx_PLL3_Config+0x144>
  31734. {
  31735. if ((HAL_GetTick() - tickstart) > PLL3_TIMEOUT_VALUE)
  31736. 800db92: f7f6 ff67 bl 8004a64 <HAL_GetTick>
  31737. 800db96: 4602 mov r2, r0
  31738. 800db98: 68bb ldr r3, [r7, #8]
  31739. 800db9a: 1ad3 subs r3, r2, r3
  31740. 800db9c: 2b02 cmp r3, #2
  31741. 800db9e: d901 bls.n 800dba4 <RCCEx_PLL3_Config+0x144>
  31742. {
  31743. return HAL_TIMEOUT;
  31744. 800dba0: 2303 movs r3, #3
  31745. 800dba2: e006 b.n 800dbb2 <RCCEx_PLL3_Config+0x152>
  31746. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) == 0U)
  31747. 800dba4: 4b05 ldr r3, [pc, #20] @ (800dbbc <RCCEx_PLL3_Config+0x15c>)
  31748. 800dba6: 681b ldr r3, [r3, #0]
  31749. 800dba8: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  31750. 800dbac: 2b00 cmp r3, #0
  31751. 800dbae: d0f0 beq.n 800db92 <RCCEx_PLL3_Config+0x132>
  31752. }
  31753. }
  31754. return status;
  31755. 800dbb0: 7bfb ldrb r3, [r7, #15]
  31756. }
  31757. 800dbb2: 4618 mov r0, r3
  31758. 800dbb4: 3710 adds r7, #16
  31759. 800dbb6: 46bd mov sp, r7
  31760. 800dbb8: bd80 pop {r7, pc}
  31761. 800dbba: bf00 nop
  31762. 800dbbc: 58024400 .word 0x58024400
  31763. 800dbc0: ffff0007 .word 0xffff0007
  31764. 0800dbc4 <HAL_RNG_Init>:
  31765. * @param hrng pointer to a RNG_HandleTypeDef structure that contains
  31766. * the configuration information for RNG.
  31767. * @retval HAL status
  31768. */
  31769. HAL_StatusTypeDef HAL_RNG_Init(RNG_HandleTypeDef *hrng)
  31770. {
  31771. 800dbc4: b580 push {r7, lr}
  31772. 800dbc6: b084 sub sp, #16
  31773. 800dbc8: af00 add r7, sp, #0
  31774. 800dbca: 6078 str r0, [r7, #4]
  31775. uint32_t tickstart;
  31776. /* Check the RNG handle allocation */
  31777. if (hrng == NULL)
  31778. 800dbcc: 687b ldr r3, [r7, #4]
  31779. 800dbce: 2b00 cmp r3, #0
  31780. 800dbd0: d101 bne.n 800dbd6 <HAL_RNG_Init+0x12>
  31781. {
  31782. return HAL_ERROR;
  31783. 800dbd2: 2301 movs r3, #1
  31784. 800dbd4: e054 b.n 800dc80 <HAL_RNG_Init+0xbc>
  31785. /* Init the low level hardware */
  31786. hrng->MspInitCallback(hrng);
  31787. }
  31788. #else
  31789. if (hrng->State == HAL_RNG_STATE_RESET)
  31790. 800dbd6: 687b ldr r3, [r7, #4]
  31791. 800dbd8: 7a5b ldrb r3, [r3, #9]
  31792. 800dbda: b2db uxtb r3, r3
  31793. 800dbdc: 2b00 cmp r3, #0
  31794. 800dbde: d105 bne.n 800dbec <HAL_RNG_Init+0x28>
  31795. {
  31796. /* Allocate lock resource and initialize it */
  31797. hrng->Lock = HAL_UNLOCKED;
  31798. 800dbe0: 687b ldr r3, [r7, #4]
  31799. 800dbe2: 2200 movs r2, #0
  31800. 800dbe4: 721a strb r2, [r3, #8]
  31801. /* Init the low level hardware */
  31802. HAL_RNG_MspInit(hrng);
  31803. 800dbe6: 6878 ldr r0, [r7, #4]
  31804. 800dbe8: f7f5 fbb2 bl 8003350 <HAL_RNG_MspInit>
  31805. }
  31806. #endif /* USE_HAL_RNG_REGISTER_CALLBACKS */
  31807. /* Change RNG peripheral state */
  31808. hrng->State = HAL_RNG_STATE_BUSY;
  31809. 800dbec: 687b ldr r3, [r7, #4]
  31810. 800dbee: 2202 movs r2, #2
  31811. 800dbf0: 725a strb r2, [r3, #9]
  31812. }
  31813. }
  31814. }
  31815. #else
  31816. /* Clock Error Detection Configuration */
  31817. MODIFY_REG(hrng->Instance->CR, RNG_CR_CED, hrng->Init.ClockErrorDetection);
  31818. 800dbf2: 687b ldr r3, [r7, #4]
  31819. 800dbf4: 681b ldr r3, [r3, #0]
  31820. 800dbf6: 681b ldr r3, [r3, #0]
  31821. 800dbf8: f023 0120 bic.w r1, r3, #32
  31822. 800dbfc: 687b ldr r3, [r7, #4]
  31823. 800dbfe: 685a ldr r2, [r3, #4]
  31824. 800dc00: 687b ldr r3, [r7, #4]
  31825. 800dc02: 681b ldr r3, [r3, #0]
  31826. 800dc04: 430a orrs r2, r1
  31827. 800dc06: 601a str r2, [r3, #0]
  31828. #endif /* RNG_CR_CONDRST */
  31829. /* Enable the RNG Peripheral */
  31830. __HAL_RNG_ENABLE(hrng);
  31831. 800dc08: 687b ldr r3, [r7, #4]
  31832. 800dc0a: 681b ldr r3, [r3, #0]
  31833. 800dc0c: 681a ldr r2, [r3, #0]
  31834. 800dc0e: 687b ldr r3, [r7, #4]
  31835. 800dc10: 681b ldr r3, [r3, #0]
  31836. 800dc12: f042 0204 orr.w r2, r2, #4
  31837. 800dc16: 601a str r2, [r3, #0]
  31838. /* verify that no seed error */
  31839. if (__HAL_RNG_GET_IT(hrng, RNG_IT_SEI) != RESET)
  31840. 800dc18: 687b ldr r3, [r7, #4]
  31841. 800dc1a: 681b ldr r3, [r3, #0]
  31842. 800dc1c: 685b ldr r3, [r3, #4]
  31843. 800dc1e: f003 0340 and.w r3, r3, #64 @ 0x40
  31844. 800dc22: 2b40 cmp r3, #64 @ 0x40
  31845. 800dc24: d104 bne.n 800dc30 <HAL_RNG_Init+0x6c>
  31846. {
  31847. hrng->State = HAL_RNG_STATE_ERROR;
  31848. 800dc26: 687b ldr r3, [r7, #4]
  31849. 800dc28: 2204 movs r2, #4
  31850. 800dc2a: 725a strb r2, [r3, #9]
  31851. return HAL_ERROR;
  31852. 800dc2c: 2301 movs r3, #1
  31853. 800dc2e: e027 b.n 800dc80 <HAL_RNG_Init+0xbc>
  31854. }
  31855. /* Get tick */
  31856. tickstart = HAL_GetTick();
  31857. 800dc30: f7f6 ff18 bl 8004a64 <HAL_GetTick>
  31858. 800dc34: 60f8 str r0, [r7, #12]
  31859. /* Check if data register contains valid random data */
  31860. while (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  31861. 800dc36: e015 b.n 800dc64 <HAL_RNG_Init+0xa0>
  31862. {
  31863. if ((HAL_GetTick() - tickstart) > RNG_TIMEOUT_VALUE)
  31864. 800dc38: f7f6 ff14 bl 8004a64 <HAL_GetTick>
  31865. 800dc3c: 4602 mov r2, r0
  31866. 800dc3e: 68fb ldr r3, [r7, #12]
  31867. 800dc40: 1ad3 subs r3, r2, r3
  31868. 800dc42: 2b02 cmp r3, #2
  31869. 800dc44: d90e bls.n 800dc64 <HAL_RNG_Init+0xa0>
  31870. {
  31871. /* New check to avoid false timeout detection in case of preemption */
  31872. if (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  31873. 800dc46: 687b ldr r3, [r7, #4]
  31874. 800dc48: 681b ldr r3, [r3, #0]
  31875. 800dc4a: 685b ldr r3, [r3, #4]
  31876. 800dc4c: f003 0304 and.w r3, r3, #4
  31877. 800dc50: 2b04 cmp r3, #4
  31878. 800dc52: d107 bne.n 800dc64 <HAL_RNG_Init+0xa0>
  31879. {
  31880. hrng->State = HAL_RNG_STATE_ERROR;
  31881. 800dc54: 687b ldr r3, [r7, #4]
  31882. 800dc56: 2204 movs r2, #4
  31883. 800dc58: 725a strb r2, [r3, #9]
  31884. hrng->ErrorCode = HAL_RNG_ERROR_TIMEOUT;
  31885. 800dc5a: 687b ldr r3, [r7, #4]
  31886. 800dc5c: 2202 movs r2, #2
  31887. 800dc5e: 60da str r2, [r3, #12]
  31888. return HAL_ERROR;
  31889. 800dc60: 2301 movs r3, #1
  31890. 800dc62: e00d b.n 800dc80 <HAL_RNG_Init+0xbc>
  31891. while (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  31892. 800dc64: 687b ldr r3, [r7, #4]
  31893. 800dc66: 681b ldr r3, [r3, #0]
  31894. 800dc68: 685b ldr r3, [r3, #4]
  31895. 800dc6a: f003 0304 and.w r3, r3, #4
  31896. 800dc6e: 2b04 cmp r3, #4
  31897. 800dc70: d0e2 beq.n 800dc38 <HAL_RNG_Init+0x74>
  31898. }
  31899. }
  31900. }
  31901. /* Initialize the RNG state */
  31902. hrng->State = HAL_RNG_STATE_READY;
  31903. 800dc72: 687b ldr r3, [r7, #4]
  31904. 800dc74: 2201 movs r2, #1
  31905. 800dc76: 725a strb r2, [r3, #9]
  31906. /* Initialise the error code */
  31907. hrng->ErrorCode = HAL_RNG_ERROR_NONE;
  31908. 800dc78: 687b ldr r3, [r7, #4]
  31909. 800dc7a: 2200 movs r2, #0
  31910. 800dc7c: 60da str r2, [r3, #12]
  31911. /* Return function status */
  31912. return HAL_OK;
  31913. 800dc7e: 2300 movs r3, #0
  31914. }
  31915. 800dc80: 4618 mov r0, r3
  31916. 800dc82: 3710 adds r7, #16
  31917. 800dc84: 46bd mov sp, r7
  31918. 800dc86: bd80 pop {r7, pc}
  31919. 0800dc88 <HAL_TIM_Base_Init>:
  31920. * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init()
  31921. * @param htim TIM Base handle
  31922. * @retval HAL status
  31923. */
  31924. HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim)
  31925. {
  31926. 800dc88: b580 push {r7, lr}
  31927. 800dc8a: b082 sub sp, #8
  31928. 800dc8c: af00 add r7, sp, #0
  31929. 800dc8e: 6078 str r0, [r7, #4]
  31930. /* Check the TIM handle allocation */
  31931. if (htim == NULL)
  31932. 800dc90: 687b ldr r3, [r7, #4]
  31933. 800dc92: 2b00 cmp r3, #0
  31934. 800dc94: d101 bne.n 800dc9a <HAL_TIM_Base_Init+0x12>
  31935. {
  31936. return HAL_ERROR;
  31937. 800dc96: 2301 movs r3, #1
  31938. 800dc98: e049 b.n 800dd2e <HAL_TIM_Base_Init+0xa6>
  31939. assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
  31940. assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
  31941. assert_param(IS_TIM_PERIOD(htim, htim->Init.Period));
  31942. assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
  31943. if (htim->State == HAL_TIM_STATE_RESET)
  31944. 800dc9a: 687b ldr r3, [r7, #4]
  31945. 800dc9c: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  31946. 800dca0: b2db uxtb r3, r3
  31947. 800dca2: 2b00 cmp r3, #0
  31948. 800dca4: d106 bne.n 800dcb4 <HAL_TIM_Base_Init+0x2c>
  31949. {
  31950. /* Allocate lock resource and initialize it */
  31951. htim->Lock = HAL_UNLOCKED;
  31952. 800dca6: 687b ldr r3, [r7, #4]
  31953. 800dca8: 2200 movs r2, #0
  31954. 800dcaa: f883 203c strb.w r2, [r3, #60] @ 0x3c
  31955. }
  31956. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  31957. htim->Base_MspInitCallback(htim);
  31958. #else
  31959. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  31960. HAL_TIM_Base_MspInit(htim);
  31961. 800dcae: 6878 ldr r0, [r7, #4]
  31962. 800dcb0: f7f5 fbc2 bl 8003438 <HAL_TIM_Base_MspInit>
  31963. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  31964. }
  31965. /* Set the TIM state */
  31966. htim->State = HAL_TIM_STATE_BUSY;
  31967. 800dcb4: 687b ldr r3, [r7, #4]
  31968. 800dcb6: 2202 movs r2, #2
  31969. 800dcb8: f883 203d strb.w r2, [r3, #61] @ 0x3d
  31970. /* Set the Time Base configuration */
  31971. TIM_Base_SetConfig(htim->Instance, &htim->Init);
  31972. 800dcbc: 687b ldr r3, [r7, #4]
  31973. 800dcbe: 681a ldr r2, [r3, #0]
  31974. 800dcc0: 687b ldr r3, [r7, #4]
  31975. 800dcc2: 3304 adds r3, #4
  31976. 800dcc4: 4619 mov r1, r3
  31977. 800dcc6: 4610 mov r0, r2
  31978. 800dcc8: f000 fe90 bl 800e9ec <TIM_Base_SetConfig>
  31979. /* Initialize the DMA burst operation state */
  31980. htim->DMABurstState = HAL_DMA_BURST_STATE_READY;
  31981. 800dccc: 687b ldr r3, [r7, #4]
  31982. 800dcce: 2201 movs r2, #1
  31983. 800dcd0: f883 2048 strb.w r2, [r3, #72] @ 0x48
  31984. /* Initialize the TIM channels state */
  31985. TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  31986. 800dcd4: 687b ldr r3, [r7, #4]
  31987. 800dcd6: 2201 movs r2, #1
  31988. 800dcd8: f883 203e strb.w r2, [r3, #62] @ 0x3e
  31989. 800dcdc: 687b ldr r3, [r7, #4]
  31990. 800dcde: 2201 movs r2, #1
  31991. 800dce0: f883 203f strb.w r2, [r3, #63] @ 0x3f
  31992. 800dce4: 687b ldr r3, [r7, #4]
  31993. 800dce6: 2201 movs r2, #1
  31994. 800dce8: f883 2040 strb.w r2, [r3, #64] @ 0x40
  31995. 800dcec: 687b ldr r3, [r7, #4]
  31996. 800dcee: 2201 movs r2, #1
  31997. 800dcf0: f883 2041 strb.w r2, [r3, #65] @ 0x41
  31998. 800dcf4: 687b ldr r3, [r7, #4]
  31999. 800dcf6: 2201 movs r2, #1
  32000. 800dcf8: f883 2042 strb.w r2, [r3, #66] @ 0x42
  32001. 800dcfc: 687b ldr r3, [r7, #4]
  32002. 800dcfe: 2201 movs r2, #1
  32003. 800dd00: f883 2043 strb.w r2, [r3, #67] @ 0x43
  32004. TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  32005. 800dd04: 687b ldr r3, [r7, #4]
  32006. 800dd06: 2201 movs r2, #1
  32007. 800dd08: f883 2044 strb.w r2, [r3, #68] @ 0x44
  32008. 800dd0c: 687b ldr r3, [r7, #4]
  32009. 800dd0e: 2201 movs r2, #1
  32010. 800dd10: f883 2045 strb.w r2, [r3, #69] @ 0x45
  32011. 800dd14: 687b ldr r3, [r7, #4]
  32012. 800dd16: 2201 movs r2, #1
  32013. 800dd18: f883 2046 strb.w r2, [r3, #70] @ 0x46
  32014. 800dd1c: 687b ldr r3, [r7, #4]
  32015. 800dd1e: 2201 movs r2, #1
  32016. 800dd20: f883 2047 strb.w r2, [r3, #71] @ 0x47
  32017. /* Initialize the TIM state*/
  32018. htim->State = HAL_TIM_STATE_READY;
  32019. 800dd24: 687b ldr r3, [r7, #4]
  32020. 800dd26: 2201 movs r2, #1
  32021. 800dd28: f883 203d strb.w r2, [r3, #61] @ 0x3d
  32022. return HAL_OK;
  32023. 800dd2c: 2300 movs r3, #0
  32024. }
  32025. 800dd2e: 4618 mov r0, r3
  32026. 800dd30: 3708 adds r7, #8
  32027. 800dd32: 46bd mov sp, r7
  32028. 800dd34: bd80 pop {r7, pc}
  32029. ...
  32030. 0800dd38 <HAL_TIM_Base_Start>:
  32031. * @brief Starts the TIM Base generation.
  32032. * @param htim TIM Base handle
  32033. * @retval HAL status
  32034. */
  32035. HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)
  32036. {
  32037. 800dd38: b480 push {r7}
  32038. 800dd3a: b085 sub sp, #20
  32039. 800dd3c: af00 add r7, sp, #0
  32040. 800dd3e: 6078 str r0, [r7, #4]
  32041. /* Check the parameters */
  32042. assert_param(IS_TIM_INSTANCE(htim->Instance));
  32043. /* Check the TIM state */
  32044. if (htim->State != HAL_TIM_STATE_READY)
  32045. 800dd40: 687b ldr r3, [r7, #4]
  32046. 800dd42: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  32047. 800dd46: b2db uxtb r3, r3
  32048. 800dd48: 2b01 cmp r3, #1
  32049. 800dd4a: d001 beq.n 800dd50 <HAL_TIM_Base_Start+0x18>
  32050. {
  32051. return HAL_ERROR;
  32052. 800dd4c: 2301 movs r3, #1
  32053. 800dd4e: e04c b.n 800ddea <HAL_TIM_Base_Start+0xb2>
  32054. }
  32055. /* Set the TIM state */
  32056. htim->State = HAL_TIM_STATE_BUSY;
  32057. 800dd50: 687b ldr r3, [r7, #4]
  32058. 800dd52: 2202 movs r2, #2
  32059. 800dd54: f883 203d strb.w r2, [r3, #61] @ 0x3d
  32060. /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  32061. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  32062. 800dd58: 687b ldr r3, [r7, #4]
  32063. 800dd5a: 681b ldr r3, [r3, #0]
  32064. 800dd5c: 4a26 ldr r2, [pc, #152] @ (800ddf8 <HAL_TIM_Base_Start+0xc0>)
  32065. 800dd5e: 4293 cmp r3, r2
  32066. 800dd60: d022 beq.n 800dda8 <HAL_TIM_Base_Start+0x70>
  32067. 800dd62: 687b ldr r3, [r7, #4]
  32068. 800dd64: 681b ldr r3, [r3, #0]
  32069. 800dd66: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  32070. 800dd6a: d01d beq.n 800dda8 <HAL_TIM_Base_Start+0x70>
  32071. 800dd6c: 687b ldr r3, [r7, #4]
  32072. 800dd6e: 681b ldr r3, [r3, #0]
  32073. 800dd70: 4a22 ldr r2, [pc, #136] @ (800ddfc <HAL_TIM_Base_Start+0xc4>)
  32074. 800dd72: 4293 cmp r3, r2
  32075. 800dd74: d018 beq.n 800dda8 <HAL_TIM_Base_Start+0x70>
  32076. 800dd76: 687b ldr r3, [r7, #4]
  32077. 800dd78: 681b ldr r3, [r3, #0]
  32078. 800dd7a: 4a21 ldr r2, [pc, #132] @ (800de00 <HAL_TIM_Base_Start+0xc8>)
  32079. 800dd7c: 4293 cmp r3, r2
  32080. 800dd7e: d013 beq.n 800dda8 <HAL_TIM_Base_Start+0x70>
  32081. 800dd80: 687b ldr r3, [r7, #4]
  32082. 800dd82: 681b ldr r3, [r3, #0]
  32083. 800dd84: 4a1f ldr r2, [pc, #124] @ (800de04 <HAL_TIM_Base_Start+0xcc>)
  32084. 800dd86: 4293 cmp r3, r2
  32085. 800dd88: d00e beq.n 800dda8 <HAL_TIM_Base_Start+0x70>
  32086. 800dd8a: 687b ldr r3, [r7, #4]
  32087. 800dd8c: 681b ldr r3, [r3, #0]
  32088. 800dd8e: 4a1e ldr r2, [pc, #120] @ (800de08 <HAL_TIM_Base_Start+0xd0>)
  32089. 800dd90: 4293 cmp r3, r2
  32090. 800dd92: d009 beq.n 800dda8 <HAL_TIM_Base_Start+0x70>
  32091. 800dd94: 687b ldr r3, [r7, #4]
  32092. 800dd96: 681b ldr r3, [r3, #0]
  32093. 800dd98: 4a1c ldr r2, [pc, #112] @ (800de0c <HAL_TIM_Base_Start+0xd4>)
  32094. 800dd9a: 4293 cmp r3, r2
  32095. 800dd9c: d004 beq.n 800dda8 <HAL_TIM_Base_Start+0x70>
  32096. 800dd9e: 687b ldr r3, [r7, #4]
  32097. 800dda0: 681b ldr r3, [r3, #0]
  32098. 800dda2: 4a1b ldr r2, [pc, #108] @ (800de10 <HAL_TIM_Base_Start+0xd8>)
  32099. 800dda4: 4293 cmp r3, r2
  32100. 800dda6: d115 bne.n 800ddd4 <HAL_TIM_Base_Start+0x9c>
  32101. {
  32102. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  32103. 800dda8: 687b ldr r3, [r7, #4]
  32104. 800ddaa: 681b ldr r3, [r3, #0]
  32105. 800ddac: 689a ldr r2, [r3, #8]
  32106. 800ddae: 4b19 ldr r3, [pc, #100] @ (800de14 <HAL_TIM_Base_Start+0xdc>)
  32107. 800ddb0: 4013 ands r3, r2
  32108. 800ddb2: 60fb str r3, [r7, #12]
  32109. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  32110. 800ddb4: 68fb ldr r3, [r7, #12]
  32111. 800ddb6: 2b06 cmp r3, #6
  32112. 800ddb8: d015 beq.n 800dde6 <HAL_TIM_Base_Start+0xae>
  32113. 800ddba: 68fb ldr r3, [r7, #12]
  32114. 800ddbc: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  32115. 800ddc0: d011 beq.n 800dde6 <HAL_TIM_Base_Start+0xae>
  32116. {
  32117. __HAL_TIM_ENABLE(htim);
  32118. 800ddc2: 687b ldr r3, [r7, #4]
  32119. 800ddc4: 681b ldr r3, [r3, #0]
  32120. 800ddc6: 681a ldr r2, [r3, #0]
  32121. 800ddc8: 687b ldr r3, [r7, #4]
  32122. 800ddca: 681b ldr r3, [r3, #0]
  32123. 800ddcc: f042 0201 orr.w r2, r2, #1
  32124. 800ddd0: 601a str r2, [r3, #0]
  32125. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  32126. 800ddd2: e008 b.n 800dde6 <HAL_TIM_Base_Start+0xae>
  32127. }
  32128. }
  32129. else
  32130. {
  32131. __HAL_TIM_ENABLE(htim);
  32132. 800ddd4: 687b ldr r3, [r7, #4]
  32133. 800ddd6: 681b ldr r3, [r3, #0]
  32134. 800ddd8: 681a ldr r2, [r3, #0]
  32135. 800ddda: 687b ldr r3, [r7, #4]
  32136. 800dddc: 681b ldr r3, [r3, #0]
  32137. 800ddde: f042 0201 orr.w r2, r2, #1
  32138. 800dde2: 601a str r2, [r3, #0]
  32139. 800dde4: e000 b.n 800dde8 <HAL_TIM_Base_Start+0xb0>
  32140. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  32141. 800dde6: bf00 nop
  32142. }
  32143. /* Return function status */
  32144. return HAL_OK;
  32145. 800dde8: 2300 movs r3, #0
  32146. }
  32147. 800ddea: 4618 mov r0, r3
  32148. 800ddec: 3714 adds r7, #20
  32149. 800ddee: 46bd mov sp, r7
  32150. 800ddf0: f85d 7b04 ldr.w r7, [sp], #4
  32151. 800ddf4: 4770 bx lr
  32152. 800ddf6: bf00 nop
  32153. 800ddf8: 40010000 .word 0x40010000
  32154. 800ddfc: 40000400 .word 0x40000400
  32155. 800de00: 40000800 .word 0x40000800
  32156. 800de04: 40000c00 .word 0x40000c00
  32157. 800de08: 40010400 .word 0x40010400
  32158. 800de0c: 40001800 .word 0x40001800
  32159. 800de10: 40014000 .word 0x40014000
  32160. 800de14: 00010007 .word 0x00010007
  32161. 0800de18 <HAL_TIM_Base_Start_IT>:
  32162. * @brief Starts the TIM Base generation in interrupt mode.
  32163. * @param htim TIM Base handle
  32164. * @retval HAL status
  32165. */
  32166. HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
  32167. {
  32168. 800de18: b480 push {r7}
  32169. 800de1a: b085 sub sp, #20
  32170. 800de1c: af00 add r7, sp, #0
  32171. 800de1e: 6078 str r0, [r7, #4]
  32172. /* Check the parameters */
  32173. assert_param(IS_TIM_INSTANCE(htim->Instance));
  32174. /* Check the TIM state */
  32175. if (htim->State != HAL_TIM_STATE_READY)
  32176. 800de20: 687b ldr r3, [r7, #4]
  32177. 800de22: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  32178. 800de26: b2db uxtb r3, r3
  32179. 800de28: 2b01 cmp r3, #1
  32180. 800de2a: d001 beq.n 800de30 <HAL_TIM_Base_Start_IT+0x18>
  32181. {
  32182. return HAL_ERROR;
  32183. 800de2c: 2301 movs r3, #1
  32184. 800de2e: e054 b.n 800deda <HAL_TIM_Base_Start_IT+0xc2>
  32185. }
  32186. /* Set the TIM state */
  32187. htim->State = HAL_TIM_STATE_BUSY;
  32188. 800de30: 687b ldr r3, [r7, #4]
  32189. 800de32: 2202 movs r2, #2
  32190. 800de34: f883 203d strb.w r2, [r3, #61] @ 0x3d
  32191. /* Enable the TIM Update interrupt */
  32192. __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);
  32193. 800de38: 687b ldr r3, [r7, #4]
  32194. 800de3a: 681b ldr r3, [r3, #0]
  32195. 800de3c: 68da ldr r2, [r3, #12]
  32196. 800de3e: 687b ldr r3, [r7, #4]
  32197. 800de40: 681b ldr r3, [r3, #0]
  32198. 800de42: f042 0201 orr.w r2, r2, #1
  32199. 800de46: 60da str r2, [r3, #12]
  32200. /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  32201. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  32202. 800de48: 687b ldr r3, [r7, #4]
  32203. 800de4a: 681b ldr r3, [r3, #0]
  32204. 800de4c: 4a26 ldr r2, [pc, #152] @ (800dee8 <HAL_TIM_Base_Start_IT+0xd0>)
  32205. 800de4e: 4293 cmp r3, r2
  32206. 800de50: d022 beq.n 800de98 <HAL_TIM_Base_Start_IT+0x80>
  32207. 800de52: 687b ldr r3, [r7, #4]
  32208. 800de54: 681b ldr r3, [r3, #0]
  32209. 800de56: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  32210. 800de5a: d01d beq.n 800de98 <HAL_TIM_Base_Start_IT+0x80>
  32211. 800de5c: 687b ldr r3, [r7, #4]
  32212. 800de5e: 681b ldr r3, [r3, #0]
  32213. 800de60: 4a22 ldr r2, [pc, #136] @ (800deec <HAL_TIM_Base_Start_IT+0xd4>)
  32214. 800de62: 4293 cmp r3, r2
  32215. 800de64: d018 beq.n 800de98 <HAL_TIM_Base_Start_IT+0x80>
  32216. 800de66: 687b ldr r3, [r7, #4]
  32217. 800de68: 681b ldr r3, [r3, #0]
  32218. 800de6a: 4a21 ldr r2, [pc, #132] @ (800def0 <HAL_TIM_Base_Start_IT+0xd8>)
  32219. 800de6c: 4293 cmp r3, r2
  32220. 800de6e: d013 beq.n 800de98 <HAL_TIM_Base_Start_IT+0x80>
  32221. 800de70: 687b ldr r3, [r7, #4]
  32222. 800de72: 681b ldr r3, [r3, #0]
  32223. 800de74: 4a1f ldr r2, [pc, #124] @ (800def4 <HAL_TIM_Base_Start_IT+0xdc>)
  32224. 800de76: 4293 cmp r3, r2
  32225. 800de78: d00e beq.n 800de98 <HAL_TIM_Base_Start_IT+0x80>
  32226. 800de7a: 687b ldr r3, [r7, #4]
  32227. 800de7c: 681b ldr r3, [r3, #0]
  32228. 800de7e: 4a1e ldr r2, [pc, #120] @ (800def8 <HAL_TIM_Base_Start_IT+0xe0>)
  32229. 800de80: 4293 cmp r3, r2
  32230. 800de82: d009 beq.n 800de98 <HAL_TIM_Base_Start_IT+0x80>
  32231. 800de84: 687b ldr r3, [r7, #4]
  32232. 800de86: 681b ldr r3, [r3, #0]
  32233. 800de88: 4a1c ldr r2, [pc, #112] @ (800defc <HAL_TIM_Base_Start_IT+0xe4>)
  32234. 800de8a: 4293 cmp r3, r2
  32235. 800de8c: d004 beq.n 800de98 <HAL_TIM_Base_Start_IT+0x80>
  32236. 800de8e: 687b ldr r3, [r7, #4]
  32237. 800de90: 681b ldr r3, [r3, #0]
  32238. 800de92: 4a1b ldr r2, [pc, #108] @ (800df00 <HAL_TIM_Base_Start_IT+0xe8>)
  32239. 800de94: 4293 cmp r3, r2
  32240. 800de96: d115 bne.n 800dec4 <HAL_TIM_Base_Start_IT+0xac>
  32241. {
  32242. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  32243. 800de98: 687b ldr r3, [r7, #4]
  32244. 800de9a: 681b ldr r3, [r3, #0]
  32245. 800de9c: 689a ldr r2, [r3, #8]
  32246. 800de9e: 4b19 ldr r3, [pc, #100] @ (800df04 <HAL_TIM_Base_Start_IT+0xec>)
  32247. 800dea0: 4013 ands r3, r2
  32248. 800dea2: 60fb str r3, [r7, #12]
  32249. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  32250. 800dea4: 68fb ldr r3, [r7, #12]
  32251. 800dea6: 2b06 cmp r3, #6
  32252. 800dea8: d015 beq.n 800ded6 <HAL_TIM_Base_Start_IT+0xbe>
  32253. 800deaa: 68fb ldr r3, [r7, #12]
  32254. 800deac: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  32255. 800deb0: d011 beq.n 800ded6 <HAL_TIM_Base_Start_IT+0xbe>
  32256. {
  32257. __HAL_TIM_ENABLE(htim);
  32258. 800deb2: 687b ldr r3, [r7, #4]
  32259. 800deb4: 681b ldr r3, [r3, #0]
  32260. 800deb6: 681a ldr r2, [r3, #0]
  32261. 800deb8: 687b ldr r3, [r7, #4]
  32262. 800deba: 681b ldr r3, [r3, #0]
  32263. 800debc: f042 0201 orr.w r2, r2, #1
  32264. 800dec0: 601a str r2, [r3, #0]
  32265. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  32266. 800dec2: e008 b.n 800ded6 <HAL_TIM_Base_Start_IT+0xbe>
  32267. }
  32268. }
  32269. else
  32270. {
  32271. __HAL_TIM_ENABLE(htim);
  32272. 800dec4: 687b ldr r3, [r7, #4]
  32273. 800dec6: 681b ldr r3, [r3, #0]
  32274. 800dec8: 681a ldr r2, [r3, #0]
  32275. 800deca: 687b ldr r3, [r7, #4]
  32276. 800decc: 681b ldr r3, [r3, #0]
  32277. 800dece: f042 0201 orr.w r2, r2, #1
  32278. 800ded2: 601a str r2, [r3, #0]
  32279. 800ded4: e000 b.n 800ded8 <HAL_TIM_Base_Start_IT+0xc0>
  32280. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  32281. 800ded6: bf00 nop
  32282. }
  32283. /* Return function status */
  32284. return HAL_OK;
  32285. 800ded8: 2300 movs r3, #0
  32286. }
  32287. 800deda: 4618 mov r0, r3
  32288. 800dedc: 3714 adds r7, #20
  32289. 800dede: 46bd mov sp, r7
  32290. 800dee0: f85d 7b04 ldr.w r7, [sp], #4
  32291. 800dee4: 4770 bx lr
  32292. 800dee6: bf00 nop
  32293. 800dee8: 40010000 .word 0x40010000
  32294. 800deec: 40000400 .word 0x40000400
  32295. 800def0: 40000800 .word 0x40000800
  32296. 800def4: 40000c00 .word 0x40000c00
  32297. 800def8: 40010400 .word 0x40010400
  32298. 800defc: 40001800 .word 0x40001800
  32299. 800df00: 40014000 .word 0x40014000
  32300. 800df04: 00010007 .word 0x00010007
  32301. 0800df08 <HAL_TIM_PWM_Init>:
  32302. * Ex: call @ref HAL_TIM_PWM_DeInit() before HAL_TIM_PWM_Init()
  32303. * @param htim TIM PWM handle
  32304. * @retval HAL status
  32305. */
  32306. HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim)
  32307. {
  32308. 800df08: b580 push {r7, lr}
  32309. 800df0a: b082 sub sp, #8
  32310. 800df0c: af00 add r7, sp, #0
  32311. 800df0e: 6078 str r0, [r7, #4]
  32312. /* Check the TIM handle allocation */
  32313. if (htim == NULL)
  32314. 800df10: 687b ldr r3, [r7, #4]
  32315. 800df12: 2b00 cmp r3, #0
  32316. 800df14: d101 bne.n 800df1a <HAL_TIM_PWM_Init+0x12>
  32317. {
  32318. return HAL_ERROR;
  32319. 800df16: 2301 movs r3, #1
  32320. 800df18: e049 b.n 800dfae <HAL_TIM_PWM_Init+0xa6>
  32321. assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
  32322. assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
  32323. assert_param(IS_TIM_PERIOD(htim, htim->Init.Period));
  32324. assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
  32325. if (htim->State == HAL_TIM_STATE_RESET)
  32326. 800df1a: 687b ldr r3, [r7, #4]
  32327. 800df1c: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  32328. 800df20: b2db uxtb r3, r3
  32329. 800df22: 2b00 cmp r3, #0
  32330. 800df24: d106 bne.n 800df34 <HAL_TIM_PWM_Init+0x2c>
  32331. {
  32332. /* Allocate lock resource and initialize it */
  32333. htim->Lock = HAL_UNLOCKED;
  32334. 800df26: 687b ldr r3, [r7, #4]
  32335. 800df28: 2200 movs r2, #0
  32336. 800df2a: f883 203c strb.w r2, [r3, #60] @ 0x3c
  32337. }
  32338. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  32339. htim->PWM_MspInitCallback(htim);
  32340. #else
  32341. /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */
  32342. HAL_TIM_PWM_MspInit(htim);
  32343. 800df2e: 6878 ldr r0, [r7, #4]
  32344. 800df30: f7f5 fa48 bl 80033c4 <HAL_TIM_PWM_MspInit>
  32345. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  32346. }
  32347. /* Set the TIM state */
  32348. htim->State = HAL_TIM_STATE_BUSY;
  32349. 800df34: 687b ldr r3, [r7, #4]
  32350. 800df36: 2202 movs r2, #2
  32351. 800df38: f883 203d strb.w r2, [r3, #61] @ 0x3d
  32352. /* Init the base time for the PWM */
  32353. TIM_Base_SetConfig(htim->Instance, &htim->Init);
  32354. 800df3c: 687b ldr r3, [r7, #4]
  32355. 800df3e: 681a ldr r2, [r3, #0]
  32356. 800df40: 687b ldr r3, [r7, #4]
  32357. 800df42: 3304 adds r3, #4
  32358. 800df44: 4619 mov r1, r3
  32359. 800df46: 4610 mov r0, r2
  32360. 800df48: f000 fd50 bl 800e9ec <TIM_Base_SetConfig>
  32361. /* Initialize the DMA burst operation state */
  32362. htim->DMABurstState = HAL_DMA_BURST_STATE_READY;
  32363. 800df4c: 687b ldr r3, [r7, #4]
  32364. 800df4e: 2201 movs r2, #1
  32365. 800df50: f883 2048 strb.w r2, [r3, #72] @ 0x48
  32366. /* Initialize the TIM channels state */
  32367. TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  32368. 800df54: 687b ldr r3, [r7, #4]
  32369. 800df56: 2201 movs r2, #1
  32370. 800df58: f883 203e strb.w r2, [r3, #62] @ 0x3e
  32371. 800df5c: 687b ldr r3, [r7, #4]
  32372. 800df5e: 2201 movs r2, #1
  32373. 800df60: f883 203f strb.w r2, [r3, #63] @ 0x3f
  32374. 800df64: 687b ldr r3, [r7, #4]
  32375. 800df66: 2201 movs r2, #1
  32376. 800df68: f883 2040 strb.w r2, [r3, #64] @ 0x40
  32377. 800df6c: 687b ldr r3, [r7, #4]
  32378. 800df6e: 2201 movs r2, #1
  32379. 800df70: f883 2041 strb.w r2, [r3, #65] @ 0x41
  32380. 800df74: 687b ldr r3, [r7, #4]
  32381. 800df76: 2201 movs r2, #1
  32382. 800df78: f883 2042 strb.w r2, [r3, #66] @ 0x42
  32383. 800df7c: 687b ldr r3, [r7, #4]
  32384. 800df7e: 2201 movs r2, #1
  32385. 800df80: f883 2043 strb.w r2, [r3, #67] @ 0x43
  32386. TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  32387. 800df84: 687b ldr r3, [r7, #4]
  32388. 800df86: 2201 movs r2, #1
  32389. 800df88: f883 2044 strb.w r2, [r3, #68] @ 0x44
  32390. 800df8c: 687b ldr r3, [r7, #4]
  32391. 800df8e: 2201 movs r2, #1
  32392. 800df90: f883 2045 strb.w r2, [r3, #69] @ 0x45
  32393. 800df94: 687b ldr r3, [r7, #4]
  32394. 800df96: 2201 movs r2, #1
  32395. 800df98: f883 2046 strb.w r2, [r3, #70] @ 0x46
  32396. 800df9c: 687b ldr r3, [r7, #4]
  32397. 800df9e: 2201 movs r2, #1
  32398. 800dfa0: f883 2047 strb.w r2, [r3, #71] @ 0x47
  32399. /* Initialize the TIM state*/
  32400. htim->State = HAL_TIM_STATE_READY;
  32401. 800dfa4: 687b ldr r3, [r7, #4]
  32402. 800dfa6: 2201 movs r2, #1
  32403. 800dfa8: f883 203d strb.w r2, [r3, #61] @ 0x3d
  32404. return HAL_OK;
  32405. 800dfac: 2300 movs r3, #0
  32406. }
  32407. 800dfae: 4618 mov r0, r3
  32408. 800dfb0: 3708 adds r7, #8
  32409. 800dfb2: 46bd mov sp, r7
  32410. 800dfb4: bd80 pop {r7, pc}
  32411. ...
  32412. 0800dfb8 <HAL_TIM_PWM_Start>:
  32413. * @arg TIM_CHANNEL_5: TIM Channel 5 selected
  32414. * @arg TIM_CHANNEL_6: TIM Channel 6 selected
  32415. * @retval HAL status
  32416. */
  32417. HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
  32418. {
  32419. 800dfb8: b580 push {r7, lr}
  32420. 800dfba: b084 sub sp, #16
  32421. 800dfbc: af00 add r7, sp, #0
  32422. 800dfbe: 6078 str r0, [r7, #4]
  32423. 800dfc0: 6039 str r1, [r7, #0]
  32424. /* Check the parameters */
  32425. assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
  32426. /* Check the TIM channel state */
  32427. if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY)
  32428. 800dfc2: 683b ldr r3, [r7, #0]
  32429. 800dfc4: 2b00 cmp r3, #0
  32430. 800dfc6: d109 bne.n 800dfdc <HAL_TIM_PWM_Start+0x24>
  32431. 800dfc8: 687b ldr r3, [r7, #4]
  32432. 800dfca: f893 303e ldrb.w r3, [r3, #62] @ 0x3e
  32433. 800dfce: b2db uxtb r3, r3
  32434. 800dfd0: 2b01 cmp r3, #1
  32435. 800dfd2: bf14 ite ne
  32436. 800dfd4: 2301 movne r3, #1
  32437. 800dfd6: 2300 moveq r3, #0
  32438. 800dfd8: b2db uxtb r3, r3
  32439. 800dfda: e03c b.n 800e056 <HAL_TIM_PWM_Start+0x9e>
  32440. 800dfdc: 683b ldr r3, [r7, #0]
  32441. 800dfde: 2b04 cmp r3, #4
  32442. 800dfe0: d109 bne.n 800dff6 <HAL_TIM_PWM_Start+0x3e>
  32443. 800dfe2: 687b ldr r3, [r7, #4]
  32444. 800dfe4: f893 303f ldrb.w r3, [r3, #63] @ 0x3f
  32445. 800dfe8: b2db uxtb r3, r3
  32446. 800dfea: 2b01 cmp r3, #1
  32447. 800dfec: bf14 ite ne
  32448. 800dfee: 2301 movne r3, #1
  32449. 800dff0: 2300 moveq r3, #0
  32450. 800dff2: b2db uxtb r3, r3
  32451. 800dff4: e02f b.n 800e056 <HAL_TIM_PWM_Start+0x9e>
  32452. 800dff6: 683b ldr r3, [r7, #0]
  32453. 800dff8: 2b08 cmp r3, #8
  32454. 800dffa: d109 bne.n 800e010 <HAL_TIM_PWM_Start+0x58>
  32455. 800dffc: 687b ldr r3, [r7, #4]
  32456. 800dffe: f893 3040 ldrb.w r3, [r3, #64] @ 0x40
  32457. 800e002: b2db uxtb r3, r3
  32458. 800e004: 2b01 cmp r3, #1
  32459. 800e006: bf14 ite ne
  32460. 800e008: 2301 movne r3, #1
  32461. 800e00a: 2300 moveq r3, #0
  32462. 800e00c: b2db uxtb r3, r3
  32463. 800e00e: e022 b.n 800e056 <HAL_TIM_PWM_Start+0x9e>
  32464. 800e010: 683b ldr r3, [r7, #0]
  32465. 800e012: 2b0c cmp r3, #12
  32466. 800e014: d109 bne.n 800e02a <HAL_TIM_PWM_Start+0x72>
  32467. 800e016: 687b ldr r3, [r7, #4]
  32468. 800e018: f893 3041 ldrb.w r3, [r3, #65] @ 0x41
  32469. 800e01c: b2db uxtb r3, r3
  32470. 800e01e: 2b01 cmp r3, #1
  32471. 800e020: bf14 ite ne
  32472. 800e022: 2301 movne r3, #1
  32473. 800e024: 2300 moveq r3, #0
  32474. 800e026: b2db uxtb r3, r3
  32475. 800e028: e015 b.n 800e056 <HAL_TIM_PWM_Start+0x9e>
  32476. 800e02a: 683b ldr r3, [r7, #0]
  32477. 800e02c: 2b10 cmp r3, #16
  32478. 800e02e: d109 bne.n 800e044 <HAL_TIM_PWM_Start+0x8c>
  32479. 800e030: 687b ldr r3, [r7, #4]
  32480. 800e032: f893 3042 ldrb.w r3, [r3, #66] @ 0x42
  32481. 800e036: b2db uxtb r3, r3
  32482. 800e038: 2b01 cmp r3, #1
  32483. 800e03a: bf14 ite ne
  32484. 800e03c: 2301 movne r3, #1
  32485. 800e03e: 2300 moveq r3, #0
  32486. 800e040: b2db uxtb r3, r3
  32487. 800e042: e008 b.n 800e056 <HAL_TIM_PWM_Start+0x9e>
  32488. 800e044: 687b ldr r3, [r7, #4]
  32489. 800e046: f893 3043 ldrb.w r3, [r3, #67] @ 0x43
  32490. 800e04a: b2db uxtb r3, r3
  32491. 800e04c: 2b01 cmp r3, #1
  32492. 800e04e: bf14 ite ne
  32493. 800e050: 2301 movne r3, #1
  32494. 800e052: 2300 moveq r3, #0
  32495. 800e054: b2db uxtb r3, r3
  32496. 800e056: 2b00 cmp r3, #0
  32497. 800e058: d001 beq.n 800e05e <HAL_TIM_PWM_Start+0xa6>
  32498. {
  32499. return HAL_ERROR;
  32500. 800e05a: 2301 movs r3, #1
  32501. 800e05c: e0a1 b.n 800e1a2 <HAL_TIM_PWM_Start+0x1ea>
  32502. }
  32503. /* Set the TIM channel state */
  32504. TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);
  32505. 800e05e: 683b ldr r3, [r7, #0]
  32506. 800e060: 2b00 cmp r3, #0
  32507. 800e062: d104 bne.n 800e06e <HAL_TIM_PWM_Start+0xb6>
  32508. 800e064: 687b ldr r3, [r7, #4]
  32509. 800e066: 2202 movs r2, #2
  32510. 800e068: f883 203e strb.w r2, [r3, #62] @ 0x3e
  32511. 800e06c: e023 b.n 800e0b6 <HAL_TIM_PWM_Start+0xfe>
  32512. 800e06e: 683b ldr r3, [r7, #0]
  32513. 800e070: 2b04 cmp r3, #4
  32514. 800e072: d104 bne.n 800e07e <HAL_TIM_PWM_Start+0xc6>
  32515. 800e074: 687b ldr r3, [r7, #4]
  32516. 800e076: 2202 movs r2, #2
  32517. 800e078: f883 203f strb.w r2, [r3, #63] @ 0x3f
  32518. 800e07c: e01b b.n 800e0b6 <HAL_TIM_PWM_Start+0xfe>
  32519. 800e07e: 683b ldr r3, [r7, #0]
  32520. 800e080: 2b08 cmp r3, #8
  32521. 800e082: d104 bne.n 800e08e <HAL_TIM_PWM_Start+0xd6>
  32522. 800e084: 687b ldr r3, [r7, #4]
  32523. 800e086: 2202 movs r2, #2
  32524. 800e088: f883 2040 strb.w r2, [r3, #64] @ 0x40
  32525. 800e08c: e013 b.n 800e0b6 <HAL_TIM_PWM_Start+0xfe>
  32526. 800e08e: 683b ldr r3, [r7, #0]
  32527. 800e090: 2b0c cmp r3, #12
  32528. 800e092: d104 bne.n 800e09e <HAL_TIM_PWM_Start+0xe6>
  32529. 800e094: 687b ldr r3, [r7, #4]
  32530. 800e096: 2202 movs r2, #2
  32531. 800e098: f883 2041 strb.w r2, [r3, #65] @ 0x41
  32532. 800e09c: e00b b.n 800e0b6 <HAL_TIM_PWM_Start+0xfe>
  32533. 800e09e: 683b ldr r3, [r7, #0]
  32534. 800e0a0: 2b10 cmp r3, #16
  32535. 800e0a2: d104 bne.n 800e0ae <HAL_TIM_PWM_Start+0xf6>
  32536. 800e0a4: 687b ldr r3, [r7, #4]
  32537. 800e0a6: 2202 movs r2, #2
  32538. 800e0a8: f883 2042 strb.w r2, [r3, #66] @ 0x42
  32539. 800e0ac: e003 b.n 800e0b6 <HAL_TIM_PWM_Start+0xfe>
  32540. 800e0ae: 687b ldr r3, [r7, #4]
  32541. 800e0b0: 2202 movs r2, #2
  32542. 800e0b2: f883 2043 strb.w r2, [r3, #67] @ 0x43
  32543. /* Enable the Capture compare channel */
  32544. TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);
  32545. 800e0b6: 687b ldr r3, [r7, #4]
  32546. 800e0b8: 681b ldr r3, [r3, #0]
  32547. 800e0ba: 2201 movs r2, #1
  32548. 800e0bc: 6839 ldr r1, [r7, #0]
  32549. 800e0be: 4618 mov r0, r3
  32550. 800e0c0: f001 f8ae bl 800f220 <TIM_CCxChannelCmd>
  32551. if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
  32552. 800e0c4: 687b ldr r3, [r7, #4]
  32553. 800e0c6: 681b ldr r3, [r3, #0]
  32554. 800e0c8: 4a38 ldr r2, [pc, #224] @ (800e1ac <HAL_TIM_PWM_Start+0x1f4>)
  32555. 800e0ca: 4293 cmp r3, r2
  32556. 800e0cc: d013 beq.n 800e0f6 <HAL_TIM_PWM_Start+0x13e>
  32557. 800e0ce: 687b ldr r3, [r7, #4]
  32558. 800e0d0: 681b ldr r3, [r3, #0]
  32559. 800e0d2: 4a37 ldr r2, [pc, #220] @ (800e1b0 <HAL_TIM_PWM_Start+0x1f8>)
  32560. 800e0d4: 4293 cmp r3, r2
  32561. 800e0d6: d00e beq.n 800e0f6 <HAL_TIM_PWM_Start+0x13e>
  32562. 800e0d8: 687b ldr r3, [r7, #4]
  32563. 800e0da: 681b ldr r3, [r3, #0]
  32564. 800e0dc: 4a35 ldr r2, [pc, #212] @ (800e1b4 <HAL_TIM_PWM_Start+0x1fc>)
  32565. 800e0de: 4293 cmp r3, r2
  32566. 800e0e0: d009 beq.n 800e0f6 <HAL_TIM_PWM_Start+0x13e>
  32567. 800e0e2: 687b ldr r3, [r7, #4]
  32568. 800e0e4: 681b ldr r3, [r3, #0]
  32569. 800e0e6: 4a34 ldr r2, [pc, #208] @ (800e1b8 <HAL_TIM_PWM_Start+0x200>)
  32570. 800e0e8: 4293 cmp r3, r2
  32571. 800e0ea: d004 beq.n 800e0f6 <HAL_TIM_PWM_Start+0x13e>
  32572. 800e0ec: 687b ldr r3, [r7, #4]
  32573. 800e0ee: 681b ldr r3, [r3, #0]
  32574. 800e0f0: 4a32 ldr r2, [pc, #200] @ (800e1bc <HAL_TIM_PWM_Start+0x204>)
  32575. 800e0f2: 4293 cmp r3, r2
  32576. 800e0f4: d101 bne.n 800e0fa <HAL_TIM_PWM_Start+0x142>
  32577. 800e0f6: 2301 movs r3, #1
  32578. 800e0f8: e000 b.n 800e0fc <HAL_TIM_PWM_Start+0x144>
  32579. 800e0fa: 2300 movs r3, #0
  32580. 800e0fc: 2b00 cmp r3, #0
  32581. 800e0fe: d007 beq.n 800e110 <HAL_TIM_PWM_Start+0x158>
  32582. {
  32583. /* Enable the main output */
  32584. __HAL_TIM_MOE_ENABLE(htim);
  32585. 800e100: 687b ldr r3, [r7, #4]
  32586. 800e102: 681b ldr r3, [r3, #0]
  32587. 800e104: 6c5a ldr r2, [r3, #68] @ 0x44
  32588. 800e106: 687b ldr r3, [r7, #4]
  32589. 800e108: 681b ldr r3, [r3, #0]
  32590. 800e10a: f442 4200 orr.w r2, r2, #32768 @ 0x8000
  32591. 800e10e: 645a str r2, [r3, #68] @ 0x44
  32592. }
  32593. /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  32594. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  32595. 800e110: 687b ldr r3, [r7, #4]
  32596. 800e112: 681b ldr r3, [r3, #0]
  32597. 800e114: 4a25 ldr r2, [pc, #148] @ (800e1ac <HAL_TIM_PWM_Start+0x1f4>)
  32598. 800e116: 4293 cmp r3, r2
  32599. 800e118: d022 beq.n 800e160 <HAL_TIM_PWM_Start+0x1a8>
  32600. 800e11a: 687b ldr r3, [r7, #4]
  32601. 800e11c: 681b ldr r3, [r3, #0]
  32602. 800e11e: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  32603. 800e122: d01d beq.n 800e160 <HAL_TIM_PWM_Start+0x1a8>
  32604. 800e124: 687b ldr r3, [r7, #4]
  32605. 800e126: 681b ldr r3, [r3, #0]
  32606. 800e128: 4a25 ldr r2, [pc, #148] @ (800e1c0 <HAL_TIM_PWM_Start+0x208>)
  32607. 800e12a: 4293 cmp r3, r2
  32608. 800e12c: d018 beq.n 800e160 <HAL_TIM_PWM_Start+0x1a8>
  32609. 800e12e: 687b ldr r3, [r7, #4]
  32610. 800e130: 681b ldr r3, [r3, #0]
  32611. 800e132: 4a24 ldr r2, [pc, #144] @ (800e1c4 <HAL_TIM_PWM_Start+0x20c>)
  32612. 800e134: 4293 cmp r3, r2
  32613. 800e136: d013 beq.n 800e160 <HAL_TIM_PWM_Start+0x1a8>
  32614. 800e138: 687b ldr r3, [r7, #4]
  32615. 800e13a: 681b ldr r3, [r3, #0]
  32616. 800e13c: 4a22 ldr r2, [pc, #136] @ (800e1c8 <HAL_TIM_PWM_Start+0x210>)
  32617. 800e13e: 4293 cmp r3, r2
  32618. 800e140: d00e beq.n 800e160 <HAL_TIM_PWM_Start+0x1a8>
  32619. 800e142: 687b ldr r3, [r7, #4]
  32620. 800e144: 681b ldr r3, [r3, #0]
  32621. 800e146: 4a1a ldr r2, [pc, #104] @ (800e1b0 <HAL_TIM_PWM_Start+0x1f8>)
  32622. 800e148: 4293 cmp r3, r2
  32623. 800e14a: d009 beq.n 800e160 <HAL_TIM_PWM_Start+0x1a8>
  32624. 800e14c: 687b ldr r3, [r7, #4]
  32625. 800e14e: 681b ldr r3, [r3, #0]
  32626. 800e150: 4a1e ldr r2, [pc, #120] @ (800e1cc <HAL_TIM_PWM_Start+0x214>)
  32627. 800e152: 4293 cmp r3, r2
  32628. 800e154: d004 beq.n 800e160 <HAL_TIM_PWM_Start+0x1a8>
  32629. 800e156: 687b ldr r3, [r7, #4]
  32630. 800e158: 681b ldr r3, [r3, #0]
  32631. 800e15a: 4a16 ldr r2, [pc, #88] @ (800e1b4 <HAL_TIM_PWM_Start+0x1fc>)
  32632. 800e15c: 4293 cmp r3, r2
  32633. 800e15e: d115 bne.n 800e18c <HAL_TIM_PWM_Start+0x1d4>
  32634. {
  32635. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  32636. 800e160: 687b ldr r3, [r7, #4]
  32637. 800e162: 681b ldr r3, [r3, #0]
  32638. 800e164: 689a ldr r2, [r3, #8]
  32639. 800e166: 4b1a ldr r3, [pc, #104] @ (800e1d0 <HAL_TIM_PWM_Start+0x218>)
  32640. 800e168: 4013 ands r3, r2
  32641. 800e16a: 60fb str r3, [r7, #12]
  32642. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  32643. 800e16c: 68fb ldr r3, [r7, #12]
  32644. 800e16e: 2b06 cmp r3, #6
  32645. 800e170: d015 beq.n 800e19e <HAL_TIM_PWM_Start+0x1e6>
  32646. 800e172: 68fb ldr r3, [r7, #12]
  32647. 800e174: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  32648. 800e178: d011 beq.n 800e19e <HAL_TIM_PWM_Start+0x1e6>
  32649. {
  32650. __HAL_TIM_ENABLE(htim);
  32651. 800e17a: 687b ldr r3, [r7, #4]
  32652. 800e17c: 681b ldr r3, [r3, #0]
  32653. 800e17e: 681a ldr r2, [r3, #0]
  32654. 800e180: 687b ldr r3, [r7, #4]
  32655. 800e182: 681b ldr r3, [r3, #0]
  32656. 800e184: f042 0201 orr.w r2, r2, #1
  32657. 800e188: 601a str r2, [r3, #0]
  32658. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  32659. 800e18a: e008 b.n 800e19e <HAL_TIM_PWM_Start+0x1e6>
  32660. }
  32661. }
  32662. else
  32663. {
  32664. __HAL_TIM_ENABLE(htim);
  32665. 800e18c: 687b ldr r3, [r7, #4]
  32666. 800e18e: 681b ldr r3, [r3, #0]
  32667. 800e190: 681a ldr r2, [r3, #0]
  32668. 800e192: 687b ldr r3, [r7, #4]
  32669. 800e194: 681b ldr r3, [r3, #0]
  32670. 800e196: f042 0201 orr.w r2, r2, #1
  32671. 800e19a: 601a str r2, [r3, #0]
  32672. 800e19c: e000 b.n 800e1a0 <HAL_TIM_PWM_Start+0x1e8>
  32673. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  32674. 800e19e: bf00 nop
  32675. }
  32676. /* Return function status */
  32677. return HAL_OK;
  32678. 800e1a0: 2300 movs r3, #0
  32679. }
  32680. 800e1a2: 4618 mov r0, r3
  32681. 800e1a4: 3710 adds r7, #16
  32682. 800e1a6: 46bd mov sp, r7
  32683. 800e1a8: bd80 pop {r7, pc}
  32684. 800e1aa: bf00 nop
  32685. 800e1ac: 40010000 .word 0x40010000
  32686. 800e1b0: 40010400 .word 0x40010400
  32687. 800e1b4: 40014000 .word 0x40014000
  32688. 800e1b8: 40014400 .word 0x40014400
  32689. 800e1bc: 40014800 .word 0x40014800
  32690. 800e1c0: 40000400 .word 0x40000400
  32691. 800e1c4: 40000800 .word 0x40000800
  32692. 800e1c8: 40000c00 .word 0x40000c00
  32693. 800e1cc: 40001800 .word 0x40001800
  32694. 800e1d0: 00010007 .word 0x00010007
  32695. 0800e1d4 <HAL_TIM_PWM_Stop>:
  32696. * @arg TIM_CHANNEL_5: TIM Channel 5 selected
  32697. * @arg TIM_CHANNEL_6: TIM Channel 6 selected
  32698. * @retval HAL status
  32699. */
  32700. HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
  32701. {
  32702. 800e1d4: b580 push {r7, lr}
  32703. 800e1d6: b082 sub sp, #8
  32704. 800e1d8: af00 add r7, sp, #0
  32705. 800e1da: 6078 str r0, [r7, #4]
  32706. 800e1dc: 6039 str r1, [r7, #0]
  32707. /* Check the parameters */
  32708. assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
  32709. /* Disable the Capture compare channel */
  32710. TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);
  32711. 800e1de: 687b ldr r3, [r7, #4]
  32712. 800e1e0: 681b ldr r3, [r3, #0]
  32713. 800e1e2: 2200 movs r2, #0
  32714. 800e1e4: 6839 ldr r1, [r7, #0]
  32715. 800e1e6: 4618 mov r0, r3
  32716. 800e1e8: f001 f81a bl 800f220 <TIM_CCxChannelCmd>
  32717. if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
  32718. 800e1ec: 687b ldr r3, [r7, #4]
  32719. 800e1ee: 681b ldr r3, [r3, #0]
  32720. 800e1f0: 4a3e ldr r2, [pc, #248] @ (800e2ec <HAL_TIM_PWM_Stop+0x118>)
  32721. 800e1f2: 4293 cmp r3, r2
  32722. 800e1f4: d013 beq.n 800e21e <HAL_TIM_PWM_Stop+0x4a>
  32723. 800e1f6: 687b ldr r3, [r7, #4]
  32724. 800e1f8: 681b ldr r3, [r3, #0]
  32725. 800e1fa: 4a3d ldr r2, [pc, #244] @ (800e2f0 <HAL_TIM_PWM_Stop+0x11c>)
  32726. 800e1fc: 4293 cmp r3, r2
  32727. 800e1fe: d00e beq.n 800e21e <HAL_TIM_PWM_Stop+0x4a>
  32728. 800e200: 687b ldr r3, [r7, #4]
  32729. 800e202: 681b ldr r3, [r3, #0]
  32730. 800e204: 4a3b ldr r2, [pc, #236] @ (800e2f4 <HAL_TIM_PWM_Stop+0x120>)
  32731. 800e206: 4293 cmp r3, r2
  32732. 800e208: d009 beq.n 800e21e <HAL_TIM_PWM_Stop+0x4a>
  32733. 800e20a: 687b ldr r3, [r7, #4]
  32734. 800e20c: 681b ldr r3, [r3, #0]
  32735. 800e20e: 4a3a ldr r2, [pc, #232] @ (800e2f8 <HAL_TIM_PWM_Stop+0x124>)
  32736. 800e210: 4293 cmp r3, r2
  32737. 800e212: d004 beq.n 800e21e <HAL_TIM_PWM_Stop+0x4a>
  32738. 800e214: 687b ldr r3, [r7, #4]
  32739. 800e216: 681b ldr r3, [r3, #0]
  32740. 800e218: 4a38 ldr r2, [pc, #224] @ (800e2fc <HAL_TIM_PWM_Stop+0x128>)
  32741. 800e21a: 4293 cmp r3, r2
  32742. 800e21c: d101 bne.n 800e222 <HAL_TIM_PWM_Stop+0x4e>
  32743. 800e21e: 2301 movs r3, #1
  32744. 800e220: e000 b.n 800e224 <HAL_TIM_PWM_Stop+0x50>
  32745. 800e222: 2300 movs r3, #0
  32746. 800e224: 2b00 cmp r3, #0
  32747. 800e226: d017 beq.n 800e258 <HAL_TIM_PWM_Stop+0x84>
  32748. {
  32749. /* Disable the Main Output */
  32750. __HAL_TIM_MOE_DISABLE(htim);
  32751. 800e228: 687b ldr r3, [r7, #4]
  32752. 800e22a: 681b ldr r3, [r3, #0]
  32753. 800e22c: 6a1a ldr r2, [r3, #32]
  32754. 800e22e: f241 1311 movw r3, #4369 @ 0x1111
  32755. 800e232: 4013 ands r3, r2
  32756. 800e234: 2b00 cmp r3, #0
  32757. 800e236: d10f bne.n 800e258 <HAL_TIM_PWM_Stop+0x84>
  32758. 800e238: 687b ldr r3, [r7, #4]
  32759. 800e23a: 681b ldr r3, [r3, #0]
  32760. 800e23c: 6a1a ldr r2, [r3, #32]
  32761. 800e23e: f240 4344 movw r3, #1092 @ 0x444
  32762. 800e242: 4013 ands r3, r2
  32763. 800e244: 2b00 cmp r3, #0
  32764. 800e246: d107 bne.n 800e258 <HAL_TIM_PWM_Stop+0x84>
  32765. 800e248: 687b ldr r3, [r7, #4]
  32766. 800e24a: 681b ldr r3, [r3, #0]
  32767. 800e24c: 6c5a ldr r2, [r3, #68] @ 0x44
  32768. 800e24e: 687b ldr r3, [r7, #4]
  32769. 800e250: 681b ldr r3, [r3, #0]
  32770. 800e252: f422 4200 bic.w r2, r2, #32768 @ 0x8000
  32771. 800e256: 645a str r2, [r3, #68] @ 0x44
  32772. }
  32773. /* Disable the Peripheral */
  32774. __HAL_TIM_DISABLE(htim);
  32775. 800e258: 687b ldr r3, [r7, #4]
  32776. 800e25a: 681b ldr r3, [r3, #0]
  32777. 800e25c: 6a1a ldr r2, [r3, #32]
  32778. 800e25e: f241 1311 movw r3, #4369 @ 0x1111
  32779. 800e262: 4013 ands r3, r2
  32780. 800e264: 2b00 cmp r3, #0
  32781. 800e266: d10f bne.n 800e288 <HAL_TIM_PWM_Stop+0xb4>
  32782. 800e268: 687b ldr r3, [r7, #4]
  32783. 800e26a: 681b ldr r3, [r3, #0]
  32784. 800e26c: 6a1a ldr r2, [r3, #32]
  32785. 800e26e: f240 4344 movw r3, #1092 @ 0x444
  32786. 800e272: 4013 ands r3, r2
  32787. 800e274: 2b00 cmp r3, #0
  32788. 800e276: d107 bne.n 800e288 <HAL_TIM_PWM_Stop+0xb4>
  32789. 800e278: 687b ldr r3, [r7, #4]
  32790. 800e27a: 681b ldr r3, [r3, #0]
  32791. 800e27c: 681a ldr r2, [r3, #0]
  32792. 800e27e: 687b ldr r3, [r7, #4]
  32793. 800e280: 681b ldr r3, [r3, #0]
  32794. 800e282: f022 0201 bic.w r2, r2, #1
  32795. 800e286: 601a str r2, [r3, #0]
  32796. /* Set the TIM channel state */
  32797. TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);
  32798. 800e288: 683b ldr r3, [r7, #0]
  32799. 800e28a: 2b00 cmp r3, #0
  32800. 800e28c: d104 bne.n 800e298 <HAL_TIM_PWM_Stop+0xc4>
  32801. 800e28e: 687b ldr r3, [r7, #4]
  32802. 800e290: 2201 movs r2, #1
  32803. 800e292: f883 203e strb.w r2, [r3, #62] @ 0x3e
  32804. 800e296: e023 b.n 800e2e0 <HAL_TIM_PWM_Stop+0x10c>
  32805. 800e298: 683b ldr r3, [r7, #0]
  32806. 800e29a: 2b04 cmp r3, #4
  32807. 800e29c: d104 bne.n 800e2a8 <HAL_TIM_PWM_Stop+0xd4>
  32808. 800e29e: 687b ldr r3, [r7, #4]
  32809. 800e2a0: 2201 movs r2, #1
  32810. 800e2a2: f883 203f strb.w r2, [r3, #63] @ 0x3f
  32811. 800e2a6: e01b b.n 800e2e0 <HAL_TIM_PWM_Stop+0x10c>
  32812. 800e2a8: 683b ldr r3, [r7, #0]
  32813. 800e2aa: 2b08 cmp r3, #8
  32814. 800e2ac: d104 bne.n 800e2b8 <HAL_TIM_PWM_Stop+0xe4>
  32815. 800e2ae: 687b ldr r3, [r7, #4]
  32816. 800e2b0: 2201 movs r2, #1
  32817. 800e2b2: f883 2040 strb.w r2, [r3, #64] @ 0x40
  32818. 800e2b6: e013 b.n 800e2e0 <HAL_TIM_PWM_Stop+0x10c>
  32819. 800e2b8: 683b ldr r3, [r7, #0]
  32820. 800e2ba: 2b0c cmp r3, #12
  32821. 800e2bc: d104 bne.n 800e2c8 <HAL_TIM_PWM_Stop+0xf4>
  32822. 800e2be: 687b ldr r3, [r7, #4]
  32823. 800e2c0: 2201 movs r2, #1
  32824. 800e2c2: f883 2041 strb.w r2, [r3, #65] @ 0x41
  32825. 800e2c6: e00b b.n 800e2e0 <HAL_TIM_PWM_Stop+0x10c>
  32826. 800e2c8: 683b ldr r3, [r7, #0]
  32827. 800e2ca: 2b10 cmp r3, #16
  32828. 800e2cc: d104 bne.n 800e2d8 <HAL_TIM_PWM_Stop+0x104>
  32829. 800e2ce: 687b ldr r3, [r7, #4]
  32830. 800e2d0: 2201 movs r2, #1
  32831. 800e2d2: f883 2042 strb.w r2, [r3, #66] @ 0x42
  32832. 800e2d6: e003 b.n 800e2e0 <HAL_TIM_PWM_Stop+0x10c>
  32833. 800e2d8: 687b ldr r3, [r7, #4]
  32834. 800e2da: 2201 movs r2, #1
  32835. 800e2dc: f883 2043 strb.w r2, [r3, #67] @ 0x43
  32836. /* Return function status */
  32837. return HAL_OK;
  32838. 800e2e0: 2300 movs r3, #0
  32839. }
  32840. 800e2e2: 4618 mov r0, r3
  32841. 800e2e4: 3708 adds r7, #8
  32842. 800e2e6: 46bd mov sp, r7
  32843. 800e2e8: bd80 pop {r7, pc}
  32844. 800e2ea: bf00 nop
  32845. 800e2ec: 40010000 .word 0x40010000
  32846. 800e2f0: 40010400 .word 0x40010400
  32847. 800e2f4: 40014000 .word 0x40014000
  32848. 800e2f8: 40014400 .word 0x40014400
  32849. 800e2fc: 40014800 .word 0x40014800
  32850. 0800e300 <HAL_TIM_IRQHandler>:
  32851. * @brief This function handles TIM interrupts requests.
  32852. * @param htim TIM handle
  32853. * @retval None
  32854. */
  32855. void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
  32856. {
  32857. 800e300: b580 push {r7, lr}
  32858. 800e302: b084 sub sp, #16
  32859. 800e304: af00 add r7, sp, #0
  32860. 800e306: 6078 str r0, [r7, #4]
  32861. uint32_t itsource = htim->Instance->DIER;
  32862. 800e308: 687b ldr r3, [r7, #4]
  32863. 800e30a: 681b ldr r3, [r3, #0]
  32864. 800e30c: 68db ldr r3, [r3, #12]
  32865. 800e30e: 60fb str r3, [r7, #12]
  32866. uint32_t itflag = htim->Instance->SR;
  32867. 800e310: 687b ldr r3, [r7, #4]
  32868. 800e312: 681b ldr r3, [r3, #0]
  32869. 800e314: 691b ldr r3, [r3, #16]
  32870. 800e316: 60bb str r3, [r7, #8]
  32871. /* Capture compare 1 event */
  32872. if ((itflag & (TIM_FLAG_CC1)) == (TIM_FLAG_CC1))
  32873. 800e318: 68bb ldr r3, [r7, #8]
  32874. 800e31a: f003 0302 and.w r3, r3, #2
  32875. 800e31e: 2b00 cmp r3, #0
  32876. 800e320: d020 beq.n 800e364 <HAL_TIM_IRQHandler+0x64>
  32877. {
  32878. if ((itsource & (TIM_IT_CC1)) == (TIM_IT_CC1))
  32879. 800e322: 68fb ldr r3, [r7, #12]
  32880. 800e324: f003 0302 and.w r3, r3, #2
  32881. 800e328: 2b00 cmp r3, #0
  32882. 800e32a: d01b beq.n 800e364 <HAL_TIM_IRQHandler+0x64>
  32883. {
  32884. {
  32885. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC1);
  32886. 800e32c: 687b ldr r3, [r7, #4]
  32887. 800e32e: 681b ldr r3, [r3, #0]
  32888. 800e330: f06f 0202 mvn.w r2, #2
  32889. 800e334: 611a str r2, [r3, #16]
  32890. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;
  32891. 800e336: 687b ldr r3, [r7, #4]
  32892. 800e338: 2201 movs r2, #1
  32893. 800e33a: 771a strb r2, [r3, #28]
  32894. /* Input capture event */
  32895. if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U)
  32896. 800e33c: 687b ldr r3, [r7, #4]
  32897. 800e33e: 681b ldr r3, [r3, #0]
  32898. 800e340: 699b ldr r3, [r3, #24]
  32899. 800e342: f003 0303 and.w r3, r3, #3
  32900. 800e346: 2b00 cmp r3, #0
  32901. 800e348: d003 beq.n 800e352 <HAL_TIM_IRQHandler+0x52>
  32902. {
  32903. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  32904. htim->IC_CaptureCallback(htim);
  32905. #else
  32906. HAL_TIM_IC_CaptureCallback(htim);
  32907. 800e34a: 6878 ldr r0, [r7, #4]
  32908. 800e34c: f000 faf6 bl 800e93c <HAL_TIM_IC_CaptureCallback>
  32909. 800e350: e005 b.n 800e35e <HAL_TIM_IRQHandler+0x5e>
  32910. {
  32911. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  32912. htim->OC_DelayElapsedCallback(htim);
  32913. htim->PWM_PulseFinishedCallback(htim);
  32914. #else
  32915. HAL_TIM_OC_DelayElapsedCallback(htim);
  32916. 800e352: 6878 ldr r0, [r7, #4]
  32917. 800e354: f000 fae8 bl 800e928 <HAL_TIM_OC_DelayElapsedCallback>
  32918. HAL_TIM_PWM_PulseFinishedCallback(htim);
  32919. 800e358: 6878 ldr r0, [r7, #4]
  32920. 800e35a: f000 faf9 bl 800e950 <HAL_TIM_PWM_PulseFinishedCallback>
  32921. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  32922. }
  32923. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  32924. 800e35e: 687b ldr r3, [r7, #4]
  32925. 800e360: 2200 movs r2, #0
  32926. 800e362: 771a strb r2, [r3, #28]
  32927. }
  32928. }
  32929. }
  32930. /* Capture compare 2 event */
  32931. if ((itflag & (TIM_FLAG_CC2)) == (TIM_FLAG_CC2))
  32932. 800e364: 68bb ldr r3, [r7, #8]
  32933. 800e366: f003 0304 and.w r3, r3, #4
  32934. 800e36a: 2b00 cmp r3, #0
  32935. 800e36c: d020 beq.n 800e3b0 <HAL_TIM_IRQHandler+0xb0>
  32936. {
  32937. if ((itsource & (TIM_IT_CC2)) == (TIM_IT_CC2))
  32938. 800e36e: 68fb ldr r3, [r7, #12]
  32939. 800e370: f003 0304 and.w r3, r3, #4
  32940. 800e374: 2b00 cmp r3, #0
  32941. 800e376: d01b beq.n 800e3b0 <HAL_TIM_IRQHandler+0xb0>
  32942. {
  32943. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC2);
  32944. 800e378: 687b ldr r3, [r7, #4]
  32945. 800e37a: 681b ldr r3, [r3, #0]
  32946. 800e37c: f06f 0204 mvn.w r2, #4
  32947. 800e380: 611a str r2, [r3, #16]
  32948. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;
  32949. 800e382: 687b ldr r3, [r7, #4]
  32950. 800e384: 2202 movs r2, #2
  32951. 800e386: 771a strb r2, [r3, #28]
  32952. /* Input capture event */
  32953. if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U)
  32954. 800e388: 687b ldr r3, [r7, #4]
  32955. 800e38a: 681b ldr r3, [r3, #0]
  32956. 800e38c: 699b ldr r3, [r3, #24]
  32957. 800e38e: f403 7340 and.w r3, r3, #768 @ 0x300
  32958. 800e392: 2b00 cmp r3, #0
  32959. 800e394: d003 beq.n 800e39e <HAL_TIM_IRQHandler+0x9e>
  32960. {
  32961. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  32962. htim->IC_CaptureCallback(htim);
  32963. #else
  32964. HAL_TIM_IC_CaptureCallback(htim);
  32965. 800e396: 6878 ldr r0, [r7, #4]
  32966. 800e398: f000 fad0 bl 800e93c <HAL_TIM_IC_CaptureCallback>
  32967. 800e39c: e005 b.n 800e3aa <HAL_TIM_IRQHandler+0xaa>
  32968. {
  32969. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  32970. htim->OC_DelayElapsedCallback(htim);
  32971. htim->PWM_PulseFinishedCallback(htim);
  32972. #else
  32973. HAL_TIM_OC_DelayElapsedCallback(htim);
  32974. 800e39e: 6878 ldr r0, [r7, #4]
  32975. 800e3a0: f000 fac2 bl 800e928 <HAL_TIM_OC_DelayElapsedCallback>
  32976. HAL_TIM_PWM_PulseFinishedCallback(htim);
  32977. 800e3a4: 6878 ldr r0, [r7, #4]
  32978. 800e3a6: f000 fad3 bl 800e950 <HAL_TIM_PWM_PulseFinishedCallback>
  32979. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  32980. }
  32981. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  32982. 800e3aa: 687b ldr r3, [r7, #4]
  32983. 800e3ac: 2200 movs r2, #0
  32984. 800e3ae: 771a strb r2, [r3, #28]
  32985. }
  32986. }
  32987. /* Capture compare 3 event */
  32988. if ((itflag & (TIM_FLAG_CC3)) == (TIM_FLAG_CC3))
  32989. 800e3b0: 68bb ldr r3, [r7, #8]
  32990. 800e3b2: f003 0308 and.w r3, r3, #8
  32991. 800e3b6: 2b00 cmp r3, #0
  32992. 800e3b8: d020 beq.n 800e3fc <HAL_TIM_IRQHandler+0xfc>
  32993. {
  32994. if ((itsource & (TIM_IT_CC3)) == (TIM_IT_CC3))
  32995. 800e3ba: 68fb ldr r3, [r7, #12]
  32996. 800e3bc: f003 0308 and.w r3, r3, #8
  32997. 800e3c0: 2b00 cmp r3, #0
  32998. 800e3c2: d01b beq.n 800e3fc <HAL_TIM_IRQHandler+0xfc>
  32999. {
  33000. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC3);
  33001. 800e3c4: 687b ldr r3, [r7, #4]
  33002. 800e3c6: 681b ldr r3, [r3, #0]
  33003. 800e3c8: f06f 0208 mvn.w r2, #8
  33004. 800e3cc: 611a str r2, [r3, #16]
  33005. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;
  33006. 800e3ce: 687b ldr r3, [r7, #4]
  33007. 800e3d0: 2204 movs r2, #4
  33008. 800e3d2: 771a strb r2, [r3, #28]
  33009. /* Input capture event */
  33010. if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U)
  33011. 800e3d4: 687b ldr r3, [r7, #4]
  33012. 800e3d6: 681b ldr r3, [r3, #0]
  33013. 800e3d8: 69db ldr r3, [r3, #28]
  33014. 800e3da: f003 0303 and.w r3, r3, #3
  33015. 800e3de: 2b00 cmp r3, #0
  33016. 800e3e0: d003 beq.n 800e3ea <HAL_TIM_IRQHandler+0xea>
  33017. {
  33018. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  33019. htim->IC_CaptureCallback(htim);
  33020. #else
  33021. HAL_TIM_IC_CaptureCallback(htim);
  33022. 800e3e2: 6878 ldr r0, [r7, #4]
  33023. 800e3e4: f000 faaa bl 800e93c <HAL_TIM_IC_CaptureCallback>
  33024. 800e3e8: e005 b.n 800e3f6 <HAL_TIM_IRQHandler+0xf6>
  33025. {
  33026. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  33027. htim->OC_DelayElapsedCallback(htim);
  33028. htim->PWM_PulseFinishedCallback(htim);
  33029. #else
  33030. HAL_TIM_OC_DelayElapsedCallback(htim);
  33031. 800e3ea: 6878 ldr r0, [r7, #4]
  33032. 800e3ec: f000 fa9c bl 800e928 <HAL_TIM_OC_DelayElapsedCallback>
  33033. HAL_TIM_PWM_PulseFinishedCallback(htim);
  33034. 800e3f0: 6878 ldr r0, [r7, #4]
  33035. 800e3f2: f000 faad bl 800e950 <HAL_TIM_PWM_PulseFinishedCallback>
  33036. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  33037. }
  33038. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  33039. 800e3f6: 687b ldr r3, [r7, #4]
  33040. 800e3f8: 2200 movs r2, #0
  33041. 800e3fa: 771a strb r2, [r3, #28]
  33042. }
  33043. }
  33044. /* Capture compare 4 event */
  33045. if ((itflag & (TIM_FLAG_CC4)) == (TIM_FLAG_CC4))
  33046. 800e3fc: 68bb ldr r3, [r7, #8]
  33047. 800e3fe: f003 0310 and.w r3, r3, #16
  33048. 800e402: 2b00 cmp r3, #0
  33049. 800e404: d020 beq.n 800e448 <HAL_TIM_IRQHandler+0x148>
  33050. {
  33051. if ((itsource & (TIM_IT_CC4)) == (TIM_IT_CC4))
  33052. 800e406: 68fb ldr r3, [r7, #12]
  33053. 800e408: f003 0310 and.w r3, r3, #16
  33054. 800e40c: 2b00 cmp r3, #0
  33055. 800e40e: d01b beq.n 800e448 <HAL_TIM_IRQHandler+0x148>
  33056. {
  33057. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC4);
  33058. 800e410: 687b ldr r3, [r7, #4]
  33059. 800e412: 681b ldr r3, [r3, #0]
  33060. 800e414: f06f 0210 mvn.w r2, #16
  33061. 800e418: 611a str r2, [r3, #16]
  33062. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;
  33063. 800e41a: 687b ldr r3, [r7, #4]
  33064. 800e41c: 2208 movs r2, #8
  33065. 800e41e: 771a strb r2, [r3, #28]
  33066. /* Input capture event */
  33067. if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U)
  33068. 800e420: 687b ldr r3, [r7, #4]
  33069. 800e422: 681b ldr r3, [r3, #0]
  33070. 800e424: 69db ldr r3, [r3, #28]
  33071. 800e426: f403 7340 and.w r3, r3, #768 @ 0x300
  33072. 800e42a: 2b00 cmp r3, #0
  33073. 800e42c: d003 beq.n 800e436 <HAL_TIM_IRQHandler+0x136>
  33074. {
  33075. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  33076. htim->IC_CaptureCallback(htim);
  33077. #else
  33078. HAL_TIM_IC_CaptureCallback(htim);
  33079. 800e42e: 6878 ldr r0, [r7, #4]
  33080. 800e430: f000 fa84 bl 800e93c <HAL_TIM_IC_CaptureCallback>
  33081. 800e434: e005 b.n 800e442 <HAL_TIM_IRQHandler+0x142>
  33082. {
  33083. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  33084. htim->OC_DelayElapsedCallback(htim);
  33085. htim->PWM_PulseFinishedCallback(htim);
  33086. #else
  33087. HAL_TIM_OC_DelayElapsedCallback(htim);
  33088. 800e436: 6878 ldr r0, [r7, #4]
  33089. 800e438: f000 fa76 bl 800e928 <HAL_TIM_OC_DelayElapsedCallback>
  33090. HAL_TIM_PWM_PulseFinishedCallback(htim);
  33091. 800e43c: 6878 ldr r0, [r7, #4]
  33092. 800e43e: f000 fa87 bl 800e950 <HAL_TIM_PWM_PulseFinishedCallback>
  33093. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  33094. }
  33095. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  33096. 800e442: 687b ldr r3, [r7, #4]
  33097. 800e444: 2200 movs r2, #0
  33098. 800e446: 771a strb r2, [r3, #28]
  33099. }
  33100. }
  33101. /* TIM Update event */
  33102. if ((itflag & (TIM_FLAG_UPDATE)) == (TIM_FLAG_UPDATE))
  33103. 800e448: 68bb ldr r3, [r7, #8]
  33104. 800e44a: f003 0301 and.w r3, r3, #1
  33105. 800e44e: 2b00 cmp r3, #0
  33106. 800e450: d00c beq.n 800e46c <HAL_TIM_IRQHandler+0x16c>
  33107. {
  33108. if ((itsource & (TIM_IT_UPDATE)) == (TIM_IT_UPDATE))
  33109. 800e452: 68fb ldr r3, [r7, #12]
  33110. 800e454: f003 0301 and.w r3, r3, #1
  33111. 800e458: 2b00 cmp r3, #0
  33112. 800e45a: d007 beq.n 800e46c <HAL_TIM_IRQHandler+0x16c>
  33113. {
  33114. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_UPDATE);
  33115. 800e45c: 687b ldr r3, [r7, #4]
  33116. 800e45e: 681b ldr r3, [r3, #0]
  33117. 800e460: f06f 0201 mvn.w r2, #1
  33118. 800e464: 611a str r2, [r3, #16]
  33119. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  33120. htim->PeriodElapsedCallback(htim);
  33121. #else
  33122. HAL_TIM_PeriodElapsedCallback(htim);
  33123. 800e466: 6878 ldr r0, [r7, #4]
  33124. 800e468: f7f3 fac8 bl 80019fc <HAL_TIM_PeriodElapsedCallback>
  33125. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  33126. }
  33127. }
  33128. /* TIM Break input event */
  33129. if (((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK)) || \
  33130. 800e46c: 68bb ldr r3, [r7, #8]
  33131. 800e46e: f003 0380 and.w r3, r3, #128 @ 0x80
  33132. 800e472: 2b00 cmp r3, #0
  33133. 800e474: d104 bne.n 800e480 <HAL_TIM_IRQHandler+0x180>
  33134. ((itflag & (TIM_FLAG_SYSTEM_BREAK)) == (TIM_FLAG_SYSTEM_BREAK)))
  33135. 800e476: 68bb ldr r3, [r7, #8]
  33136. 800e478: f403 5300 and.w r3, r3, #8192 @ 0x2000
  33137. if (((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK)) || \
  33138. 800e47c: 2b00 cmp r3, #0
  33139. 800e47e: d00c beq.n 800e49a <HAL_TIM_IRQHandler+0x19a>
  33140. {
  33141. if ((itsource & (TIM_IT_BREAK)) == (TIM_IT_BREAK))
  33142. 800e480: 68fb ldr r3, [r7, #12]
  33143. 800e482: f003 0380 and.w r3, r3, #128 @ 0x80
  33144. 800e486: 2b00 cmp r3, #0
  33145. 800e488: d007 beq.n 800e49a <HAL_TIM_IRQHandler+0x19a>
  33146. {
  33147. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK | TIM_FLAG_SYSTEM_BREAK);
  33148. 800e48a: 687b ldr r3, [r7, #4]
  33149. 800e48c: 681b ldr r3, [r3, #0]
  33150. 800e48e: f46f 5202 mvn.w r2, #8320 @ 0x2080
  33151. 800e492: 611a str r2, [r3, #16]
  33152. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  33153. htim->BreakCallback(htim);
  33154. #else
  33155. HAL_TIMEx_BreakCallback(htim);
  33156. 800e494: 6878 ldr r0, [r7, #4]
  33157. 800e496: f000 ffff bl 800f498 <HAL_TIMEx_BreakCallback>
  33158. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  33159. }
  33160. }
  33161. /* TIM Break2 input event */
  33162. if ((itflag & (TIM_FLAG_BREAK2)) == (TIM_FLAG_BREAK2))
  33163. 800e49a: 68bb ldr r3, [r7, #8]
  33164. 800e49c: f403 7380 and.w r3, r3, #256 @ 0x100
  33165. 800e4a0: 2b00 cmp r3, #0
  33166. 800e4a2: d00c beq.n 800e4be <HAL_TIM_IRQHandler+0x1be>
  33167. {
  33168. if ((itsource & (TIM_IT_BREAK)) == (TIM_IT_BREAK))
  33169. 800e4a4: 68fb ldr r3, [r7, #12]
  33170. 800e4a6: f003 0380 and.w r3, r3, #128 @ 0x80
  33171. 800e4aa: 2b00 cmp r3, #0
  33172. 800e4ac: d007 beq.n 800e4be <HAL_TIM_IRQHandler+0x1be>
  33173. {
  33174. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK2);
  33175. 800e4ae: 687b ldr r3, [r7, #4]
  33176. 800e4b0: 681b ldr r3, [r3, #0]
  33177. 800e4b2: f46f 7280 mvn.w r2, #256 @ 0x100
  33178. 800e4b6: 611a str r2, [r3, #16]
  33179. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  33180. htim->Break2Callback(htim);
  33181. #else
  33182. HAL_TIMEx_Break2Callback(htim);
  33183. 800e4b8: 6878 ldr r0, [r7, #4]
  33184. 800e4ba: f000 fff7 bl 800f4ac <HAL_TIMEx_Break2Callback>
  33185. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  33186. }
  33187. }
  33188. /* TIM Trigger detection event */
  33189. if ((itflag & (TIM_FLAG_TRIGGER)) == (TIM_FLAG_TRIGGER))
  33190. 800e4be: 68bb ldr r3, [r7, #8]
  33191. 800e4c0: f003 0340 and.w r3, r3, #64 @ 0x40
  33192. 800e4c4: 2b00 cmp r3, #0
  33193. 800e4c6: d00c beq.n 800e4e2 <HAL_TIM_IRQHandler+0x1e2>
  33194. {
  33195. if ((itsource & (TIM_IT_TRIGGER)) == (TIM_IT_TRIGGER))
  33196. 800e4c8: 68fb ldr r3, [r7, #12]
  33197. 800e4ca: f003 0340 and.w r3, r3, #64 @ 0x40
  33198. 800e4ce: 2b00 cmp r3, #0
  33199. 800e4d0: d007 beq.n 800e4e2 <HAL_TIM_IRQHandler+0x1e2>
  33200. {
  33201. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_TRIGGER);
  33202. 800e4d2: 687b ldr r3, [r7, #4]
  33203. 800e4d4: 681b ldr r3, [r3, #0]
  33204. 800e4d6: f06f 0240 mvn.w r2, #64 @ 0x40
  33205. 800e4da: 611a str r2, [r3, #16]
  33206. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  33207. htim->TriggerCallback(htim);
  33208. #else
  33209. HAL_TIM_TriggerCallback(htim);
  33210. 800e4dc: 6878 ldr r0, [r7, #4]
  33211. 800e4de: f000 fa41 bl 800e964 <HAL_TIM_TriggerCallback>
  33212. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  33213. }
  33214. }
  33215. /* TIM commutation event */
  33216. if ((itflag & (TIM_FLAG_COM)) == (TIM_FLAG_COM))
  33217. 800e4e2: 68bb ldr r3, [r7, #8]
  33218. 800e4e4: f003 0320 and.w r3, r3, #32
  33219. 800e4e8: 2b00 cmp r3, #0
  33220. 800e4ea: d00c beq.n 800e506 <HAL_TIM_IRQHandler+0x206>
  33221. {
  33222. if ((itsource & (TIM_IT_COM)) == (TIM_IT_COM))
  33223. 800e4ec: 68fb ldr r3, [r7, #12]
  33224. 800e4ee: f003 0320 and.w r3, r3, #32
  33225. 800e4f2: 2b00 cmp r3, #0
  33226. 800e4f4: d007 beq.n 800e506 <HAL_TIM_IRQHandler+0x206>
  33227. {
  33228. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_COM);
  33229. 800e4f6: 687b ldr r3, [r7, #4]
  33230. 800e4f8: 681b ldr r3, [r3, #0]
  33231. 800e4fa: f06f 0220 mvn.w r2, #32
  33232. 800e4fe: 611a str r2, [r3, #16]
  33233. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  33234. htim->CommutationCallback(htim);
  33235. #else
  33236. HAL_TIMEx_CommutCallback(htim);
  33237. 800e500: 6878 ldr r0, [r7, #4]
  33238. 800e502: f000 ffbf bl 800f484 <HAL_TIMEx_CommutCallback>
  33239. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  33240. }
  33241. }
  33242. }
  33243. 800e506: bf00 nop
  33244. 800e508: 3710 adds r7, #16
  33245. 800e50a: 46bd mov sp, r7
  33246. 800e50c: bd80 pop {r7, pc}
  33247. ...
  33248. 0800e510 <HAL_TIM_PWM_ConfigChannel>:
  33249. * @retval HAL status
  33250. */
  33251. HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,
  33252. const TIM_OC_InitTypeDef *sConfig,
  33253. uint32_t Channel)
  33254. {
  33255. 800e510: b580 push {r7, lr}
  33256. 800e512: b086 sub sp, #24
  33257. 800e514: af00 add r7, sp, #0
  33258. 800e516: 60f8 str r0, [r7, #12]
  33259. 800e518: 60b9 str r1, [r7, #8]
  33260. 800e51a: 607a str r2, [r7, #4]
  33261. HAL_StatusTypeDef status = HAL_OK;
  33262. 800e51c: 2300 movs r3, #0
  33263. 800e51e: 75fb strb r3, [r7, #23]
  33264. assert_param(IS_TIM_PWM_MODE(sConfig->OCMode));
  33265. assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity));
  33266. assert_param(IS_TIM_FAST_STATE(sConfig->OCFastMode));
  33267. /* Process Locked */
  33268. __HAL_LOCK(htim);
  33269. 800e520: 68fb ldr r3, [r7, #12]
  33270. 800e522: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  33271. 800e526: 2b01 cmp r3, #1
  33272. 800e528: d101 bne.n 800e52e <HAL_TIM_PWM_ConfigChannel+0x1e>
  33273. 800e52a: 2302 movs r3, #2
  33274. 800e52c: e0ff b.n 800e72e <HAL_TIM_PWM_ConfigChannel+0x21e>
  33275. 800e52e: 68fb ldr r3, [r7, #12]
  33276. 800e530: 2201 movs r2, #1
  33277. 800e532: f883 203c strb.w r2, [r3, #60] @ 0x3c
  33278. switch (Channel)
  33279. 800e536: 687b ldr r3, [r7, #4]
  33280. 800e538: 2b14 cmp r3, #20
  33281. 800e53a: f200 80f0 bhi.w 800e71e <HAL_TIM_PWM_ConfigChannel+0x20e>
  33282. 800e53e: a201 add r2, pc, #4 @ (adr r2, 800e544 <HAL_TIM_PWM_ConfigChannel+0x34>)
  33283. 800e540: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  33284. 800e544: 0800e599 .word 0x0800e599
  33285. 800e548: 0800e71f .word 0x0800e71f
  33286. 800e54c: 0800e71f .word 0x0800e71f
  33287. 800e550: 0800e71f .word 0x0800e71f
  33288. 800e554: 0800e5d9 .word 0x0800e5d9
  33289. 800e558: 0800e71f .word 0x0800e71f
  33290. 800e55c: 0800e71f .word 0x0800e71f
  33291. 800e560: 0800e71f .word 0x0800e71f
  33292. 800e564: 0800e61b .word 0x0800e61b
  33293. 800e568: 0800e71f .word 0x0800e71f
  33294. 800e56c: 0800e71f .word 0x0800e71f
  33295. 800e570: 0800e71f .word 0x0800e71f
  33296. 800e574: 0800e65b .word 0x0800e65b
  33297. 800e578: 0800e71f .word 0x0800e71f
  33298. 800e57c: 0800e71f .word 0x0800e71f
  33299. 800e580: 0800e71f .word 0x0800e71f
  33300. 800e584: 0800e69d .word 0x0800e69d
  33301. 800e588: 0800e71f .word 0x0800e71f
  33302. 800e58c: 0800e71f .word 0x0800e71f
  33303. 800e590: 0800e71f .word 0x0800e71f
  33304. 800e594: 0800e6dd .word 0x0800e6dd
  33305. {
  33306. /* Check the parameters */
  33307. assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));
  33308. /* Configure the Channel 1 in PWM mode */
  33309. TIM_OC1_SetConfig(htim->Instance, sConfig);
  33310. 800e598: 68fb ldr r3, [r7, #12]
  33311. 800e59a: 681b ldr r3, [r3, #0]
  33312. 800e59c: 68b9 ldr r1, [r7, #8]
  33313. 800e59e: 4618 mov r0, r3
  33314. 800e5a0: f000 faca bl 800eb38 <TIM_OC1_SetConfig>
  33315. /* Set the Preload enable bit for channel1 */
  33316. htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE;
  33317. 800e5a4: 68fb ldr r3, [r7, #12]
  33318. 800e5a6: 681b ldr r3, [r3, #0]
  33319. 800e5a8: 699a ldr r2, [r3, #24]
  33320. 800e5aa: 68fb ldr r3, [r7, #12]
  33321. 800e5ac: 681b ldr r3, [r3, #0]
  33322. 800e5ae: f042 0208 orr.w r2, r2, #8
  33323. 800e5b2: 619a str r2, [r3, #24]
  33324. /* Configure the Output Fast mode */
  33325. htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE;
  33326. 800e5b4: 68fb ldr r3, [r7, #12]
  33327. 800e5b6: 681b ldr r3, [r3, #0]
  33328. 800e5b8: 699a ldr r2, [r3, #24]
  33329. 800e5ba: 68fb ldr r3, [r7, #12]
  33330. 800e5bc: 681b ldr r3, [r3, #0]
  33331. 800e5be: f022 0204 bic.w r2, r2, #4
  33332. 800e5c2: 619a str r2, [r3, #24]
  33333. htim->Instance->CCMR1 |= sConfig->OCFastMode;
  33334. 800e5c4: 68fb ldr r3, [r7, #12]
  33335. 800e5c6: 681b ldr r3, [r3, #0]
  33336. 800e5c8: 6999 ldr r1, [r3, #24]
  33337. 800e5ca: 68bb ldr r3, [r7, #8]
  33338. 800e5cc: 691a ldr r2, [r3, #16]
  33339. 800e5ce: 68fb ldr r3, [r7, #12]
  33340. 800e5d0: 681b ldr r3, [r3, #0]
  33341. 800e5d2: 430a orrs r2, r1
  33342. 800e5d4: 619a str r2, [r3, #24]
  33343. break;
  33344. 800e5d6: e0a5 b.n 800e724 <HAL_TIM_PWM_ConfigChannel+0x214>
  33345. {
  33346. /* Check the parameters */
  33347. assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
  33348. /* Configure the Channel 2 in PWM mode */
  33349. TIM_OC2_SetConfig(htim->Instance, sConfig);
  33350. 800e5d8: 68fb ldr r3, [r7, #12]
  33351. 800e5da: 681b ldr r3, [r3, #0]
  33352. 800e5dc: 68b9 ldr r1, [r7, #8]
  33353. 800e5de: 4618 mov r0, r3
  33354. 800e5e0: f000 fb3a bl 800ec58 <TIM_OC2_SetConfig>
  33355. /* Set the Preload enable bit for channel2 */
  33356. htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE;
  33357. 800e5e4: 68fb ldr r3, [r7, #12]
  33358. 800e5e6: 681b ldr r3, [r3, #0]
  33359. 800e5e8: 699a ldr r2, [r3, #24]
  33360. 800e5ea: 68fb ldr r3, [r7, #12]
  33361. 800e5ec: 681b ldr r3, [r3, #0]
  33362. 800e5ee: f442 6200 orr.w r2, r2, #2048 @ 0x800
  33363. 800e5f2: 619a str r2, [r3, #24]
  33364. /* Configure the Output Fast mode */
  33365. htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE;
  33366. 800e5f4: 68fb ldr r3, [r7, #12]
  33367. 800e5f6: 681b ldr r3, [r3, #0]
  33368. 800e5f8: 699a ldr r2, [r3, #24]
  33369. 800e5fa: 68fb ldr r3, [r7, #12]
  33370. 800e5fc: 681b ldr r3, [r3, #0]
  33371. 800e5fe: f422 6280 bic.w r2, r2, #1024 @ 0x400
  33372. 800e602: 619a str r2, [r3, #24]
  33373. htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U;
  33374. 800e604: 68fb ldr r3, [r7, #12]
  33375. 800e606: 681b ldr r3, [r3, #0]
  33376. 800e608: 6999 ldr r1, [r3, #24]
  33377. 800e60a: 68bb ldr r3, [r7, #8]
  33378. 800e60c: 691b ldr r3, [r3, #16]
  33379. 800e60e: 021a lsls r2, r3, #8
  33380. 800e610: 68fb ldr r3, [r7, #12]
  33381. 800e612: 681b ldr r3, [r3, #0]
  33382. 800e614: 430a orrs r2, r1
  33383. 800e616: 619a str r2, [r3, #24]
  33384. break;
  33385. 800e618: e084 b.n 800e724 <HAL_TIM_PWM_ConfigChannel+0x214>
  33386. {
  33387. /* Check the parameters */
  33388. assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));
  33389. /* Configure the Channel 3 in PWM mode */
  33390. TIM_OC3_SetConfig(htim->Instance, sConfig);
  33391. 800e61a: 68fb ldr r3, [r7, #12]
  33392. 800e61c: 681b ldr r3, [r3, #0]
  33393. 800e61e: 68b9 ldr r1, [r7, #8]
  33394. 800e620: 4618 mov r0, r3
  33395. 800e622: f000 fba3 bl 800ed6c <TIM_OC3_SetConfig>
  33396. /* Set the Preload enable bit for channel3 */
  33397. htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE;
  33398. 800e626: 68fb ldr r3, [r7, #12]
  33399. 800e628: 681b ldr r3, [r3, #0]
  33400. 800e62a: 69da ldr r2, [r3, #28]
  33401. 800e62c: 68fb ldr r3, [r7, #12]
  33402. 800e62e: 681b ldr r3, [r3, #0]
  33403. 800e630: f042 0208 orr.w r2, r2, #8
  33404. 800e634: 61da str r2, [r3, #28]
  33405. /* Configure the Output Fast mode */
  33406. htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE;
  33407. 800e636: 68fb ldr r3, [r7, #12]
  33408. 800e638: 681b ldr r3, [r3, #0]
  33409. 800e63a: 69da ldr r2, [r3, #28]
  33410. 800e63c: 68fb ldr r3, [r7, #12]
  33411. 800e63e: 681b ldr r3, [r3, #0]
  33412. 800e640: f022 0204 bic.w r2, r2, #4
  33413. 800e644: 61da str r2, [r3, #28]
  33414. htim->Instance->CCMR2 |= sConfig->OCFastMode;
  33415. 800e646: 68fb ldr r3, [r7, #12]
  33416. 800e648: 681b ldr r3, [r3, #0]
  33417. 800e64a: 69d9 ldr r1, [r3, #28]
  33418. 800e64c: 68bb ldr r3, [r7, #8]
  33419. 800e64e: 691a ldr r2, [r3, #16]
  33420. 800e650: 68fb ldr r3, [r7, #12]
  33421. 800e652: 681b ldr r3, [r3, #0]
  33422. 800e654: 430a orrs r2, r1
  33423. 800e656: 61da str r2, [r3, #28]
  33424. break;
  33425. 800e658: e064 b.n 800e724 <HAL_TIM_PWM_ConfigChannel+0x214>
  33426. {
  33427. /* Check the parameters */
  33428. assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));
  33429. /* Configure the Channel 4 in PWM mode */
  33430. TIM_OC4_SetConfig(htim->Instance, sConfig);
  33431. 800e65a: 68fb ldr r3, [r7, #12]
  33432. 800e65c: 681b ldr r3, [r3, #0]
  33433. 800e65e: 68b9 ldr r1, [r7, #8]
  33434. 800e660: 4618 mov r0, r3
  33435. 800e662: f000 fc0b bl 800ee7c <TIM_OC4_SetConfig>
  33436. /* Set the Preload enable bit for channel4 */
  33437. htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE;
  33438. 800e666: 68fb ldr r3, [r7, #12]
  33439. 800e668: 681b ldr r3, [r3, #0]
  33440. 800e66a: 69da ldr r2, [r3, #28]
  33441. 800e66c: 68fb ldr r3, [r7, #12]
  33442. 800e66e: 681b ldr r3, [r3, #0]
  33443. 800e670: f442 6200 orr.w r2, r2, #2048 @ 0x800
  33444. 800e674: 61da str r2, [r3, #28]
  33445. /* Configure the Output Fast mode */
  33446. htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE;
  33447. 800e676: 68fb ldr r3, [r7, #12]
  33448. 800e678: 681b ldr r3, [r3, #0]
  33449. 800e67a: 69da ldr r2, [r3, #28]
  33450. 800e67c: 68fb ldr r3, [r7, #12]
  33451. 800e67e: 681b ldr r3, [r3, #0]
  33452. 800e680: f422 6280 bic.w r2, r2, #1024 @ 0x400
  33453. 800e684: 61da str r2, [r3, #28]
  33454. htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U;
  33455. 800e686: 68fb ldr r3, [r7, #12]
  33456. 800e688: 681b ldr r3, [r3, #0]
  33457. 800e68a: 69d9 ldr r1, [r3, #28]
  33458. 800e68c: 68bb ldr r3, [r7, #8]
  33459. 800e68e: 691b ldr r3, [r3, #16]
  33460. 800e690: 021a lsls r2, r3, #8
  33461. 800e692: 68fb ldr r3, [r7, #12]
  33462. 800e694: 681b ldr r3, [r3, #0]
  33463. 800e696: 430a orrs r2, r1
  33464. 800e698: 61da str r2, [r3, #28]
  33465. break;
  33466. 800e69a: e043 b.n 800e724 <HAL_TIM_PWM_ConfigChannel+0x214>
  33467. {
  33468. /* Check the parameters */
  33469. assert_param(IS_TIM_CC5_INSTANCE(htim->Instance));
  33470. /* Configure the Channel 5 in PWM mode */
  33471. TIM_OC5_SetConfig(htim->Instance, sConfig);
  33472. 800e69c: 68fb ldr r3, [r7, #12]
  33473. 800e69e: 681b ldr r3, [r3, #0]
  33474. 800e6a0: 68b9 ldr r1, [r7, #8]
  33475. 800e6a2: 4618 mov r0, r3
  33476. 800e6a4: f000 fc54 bl 800ef50 <TIM_OC5_SetConfig>
  33477. /* Set the Preload enable bit for channel5*/
  33478. htim->Instance->CCMR3 |= TIM_CCMR3_OC5PE;
  33479. 800e6a8: 68fb ldr r3, [r7, #12]
  33480. 800e6aa: 681b ldr r3, [r3, #0]
  33481. 800e6ac: 6d5a ldr r2, [r3, #84] @ 0x54
  33482. 800e6ae: 68fb ldr r3, [r7, #12]
  33483. 800e6b0: 681b ldr r3, [r3, #0]
  33484. 800e6b2: f042 0208 orr.w r2, r2, #8
  33485. 800e6b6: 655a str r2, [r3, #84] @ 0x54
  33486. /* Configure the Output Fast mode */
  33487. htim->Instance->CCMR3 &= ~TIM_CCMR3_OC5FE;
  33488. 800e6b8: 68fb ldr r3, [r7, #12]
  33489. 800e6ba: 681b ldr r3, [r3, #0]
  33490. 800e6bc: 6d5a ldr r2, [r3, #84] @ 0x54
  33491. 800e6be: 68fb ldr r3, [r7, #12]
  33492. 800e6c0: 681b ldr r3, [r3, #0]
  33493. 800e6c2: f022 0204 bic.w r2, r2, #4
  33494. 800e6c6: 655a str r2, [r3, #84] @ 0x54
  33495. htim->Instance->CCMR3 |= sConfig->OCFastMode;
  33496. 800e6c8: 68fb ldr r3, [r7, #12]
  33497. 800e6ca: 681b ldr r3, [r3, #0]
  33498. 800e6cc: 6d59 ldr r1, [r3, #84] @ 0x54
  33499. 800e6ce: 68bb ldr r3, [r7, #8]
  33500. 800e6d0: 691a ldr r2, [r3, #16]
  33501. 800e6d2: 68fb ldr r3, [r7, #12]
  33502. 800e6d4: 681b ldr r3, [r3, #0]
  33503. 800e6d6: 430a orrs r2, r1
  33504. 800e6d8: 655a str r2, [r3, #84] @ 0x54
  33505. break;
  33506. 800e6da: e023 b.n 800e724 <HAL_TIM_PWM_ConfigChannel+0x214>
  33507. {
  33508. /* Check the parameters */
  33509. assert_param(IS_TIM_CC6_INSTANCE(htim->Instance));
  33510. /* Configure the Channel 6 in PWM mode */
  33511. TIM_OC6_SetConfig(htim->Instance, sConfig);
  33512. 800e6dc: 68fb ldr r3, [r7, #12]
  33513. 800e6de: 681b ldr r3, [r3, #0]
  33514. 800e6e0: 68b9 ldr r1, [r7, #8]
  33515. 800e6e2: 4618 mov r0, r3
  33516. 800e6e4: f000 fc98 bl 800f018 <TIM_OC6_SetConfig>
  33517. /* Set the Preload enable bit for channel6 */
  33518. htim->Instance->CCMR3 |= TIM_CCMR3_OC6PE;
  33519. 800e6e8: 68fb ldr r3, [r7, #12]
  33520. 800e6ea: 681b ldr r3, [r3, #0]
  33521. 800e6ec: 6d5a ldr r2, [r3, #84] @ 0x54
  33522. 800e6ee: 68fb ldr r3, [r7, #12]
  33523. 800e6f0: 681b ldr r3, [r3, #0]
  33524. 800e6f2: f442 6200 orr.w r2, r2, #2048 @ 0x800
  33525. 800e6f6: 655a str r2, [r3, #84] @ 0x54
  33526. /* Configure the Output Fast mode */
  33527. htim->Instance->CCMR3 &= ~TIM_CCMR3_OC6FE;
  33528. 800e6f8: 68fb ldr r3, [r7, #12]
  33529. 800e6fa: 681b ldr r3, [r3, #0]
  33530. 800e6fc: 6d5a ldr r2, [r3, #84] @ 0x54
  33531. 800e6fe: 68fb ldr r3, [r7, #12]
  33532. 800e700: 681b ldr r3, [r3, #0]
  33533. 800e702: f422 6280 bic.w r2, r2, #1024 @ 0x400
  33534. 800e706: 655a str r2, [r3, #84] @ 0x54
  33535. htim->Instance->CCMR3 |= sConfig->OCFastMode << 8U;
  33536. 800e708: 68fb ldr r3, [r7, #12]
  33537. 800e70a: 681b ldr r3, [r3, #0]
  33538. 800e70c: 6d59 ldr r1, [r3, #84] @ 0x54
  33539. 800e70e: 68bb ldr r3, [r7, #8]
  33540. 800e710: 691b ldr r3, [r3, #16]
  33541. 800e712: 021a lsls r2, r3, #8
  33542. 800e714: 68fb ldr r3, [r7, #12]
  33543. 800e716: 681b ldr r3, [r3, #0]
  33544. 800e718: 430a orrs r2, r1
  33545. 800e71a: 655a str r2, [r3, #84] @ 0x54
  33546. break;
  33547. 800e71c: e002 b.n 800e724 <HAL_TIM_PWM_ConfigChannel+0x214>
  33548. }
  33549. default:
  33550. status = HAL_ERROR;
  33551. 800e71e: 2301 movs r3, #1
  33552. 800e720: 75fb strb r3, [r7, #23]
  33553. break;
  33554. 800e722: bf00 nop
  33555. }
  33556. __HAL_UNLOCK(htim);
  33557. 800e724: 68fb ldr r3, [r7, #12]
  33558. 800e726: 2200 movs r2, #0
  33559. 800e728: f883 203c strb.w r2, [r3, #60] @ 0x3c
  33560. return status;
  33561. 800e72c: 7dfb ldrb r3, [r7, #23]
  33562. }
  33563. 800e72e: 4618 mov r0, r3
  33564. 800e730: 3718 adds r7, #24
  33565. 800e732: 46bd mov sp, r7
  33566. 800e734: bd80 pop {r7, pc}
  33567. 800e736: bf00 nop
  33568. 0800e738 <HAL_TIM_ConfigClockSource>:
  33569. * @param sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that
  33570. * contains the clock source information for the TIM peripheral.
  33571. * @retval HAL status
  33572. */
  33573. HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, const TIM_ClockConfigTypeDef *sClockSourceConfig)
  33574. {
  33575. 800e738: b580 push {r7, lr}
  33576. 800e73a: b084 sub sp, #16
  33577. 800e73c: af00 add r7, sp, #0
  33578. 800e73e: 6078 str r0, [r7, #4]
  33579. 800e740: 6039 str r1, [r7, #0]
  33580. HAL_StatusTypeDef status = HAL_OK;
  33581. 800e742: 2300 movs r3, #0
  33582. 800e744: 73fb strb r3, [r7, #15]
  33583. uint32_t tmpsmcr;
  33584. /* Process Locked */
  33585. __HAL_LOCK(htim);
  33586. 800e746: 687b ldr r3, [r7, #4]
  33587. 800e748: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  33588. 800e74c: 2b01 cmp r3, #1
  33589. 800e74e: d101 bne.n 800e754 <HAL_TIM_ConfigClockSource+0x1c>
  33590. 800e750: 2302 movs r3, #2
  33591. 800e752: e0dc b.n 800e90e <HAL_TIM_ConfigClockSource+0x1d6>
  33592. 800e754: 687b ldr r3, [r7, #4]
  33593. 800e756: 2201 movs r2, #1
  33594. 800e758: f883 203c strb.w r2, [r3, #60] @ 0x3c
  33595. htim->State = HAL_TIM_STATE_BUSY;
  33596. 800e75c: 687b ldr r3, [r7, #4]
  33597. 800e75e: 2202 movs r2, #2
  33598. 800e760: f883 203d strb.w r2, [r3, #61] @ 0x3d
  33599. /* Check the parameters */
  33600. assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource));
  33601. /* Reset the SMS, TS, ECE, ETPS and ETRF bits */
  33602. tmpsmcr = htim->Instance->SMCR;
  33603. 800e764: 687b ldr r3, [r7, #4]
  33604. 800e766: 681b ldr r3, [r3, #0]
  33605. 800e768: 689b ldr r3, [r3, #8]
  33606. 800e76a: 60bb str r3, [r7, #8]
  33607. tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS);
  33608. 800e76c: 68ba ldr r2, [r7, #8]
  33609. 800e76e: 4b6a ldr r3, [pc, #424] @ (800e918 <HAL_TIM_ConfigClockSource+0x1e0>)
  33610. 800e770: 4013 ands r3, r2
  33611. 800e772: 60bb str r3, [r7, #8]
  33612. tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);
  33613. 800e774: 68bb ldr r3, [r7, #8]
  33614. 800e776: f423 437f bic.w r3, r3, #65280 @ 0xff00
  33615. 800e77a: 60bb str r3, [r7, #8]
  33616. htim->Instance->SMCR = tmpsmcr;
  33617. 800e77c: 687b ldr r3, [r7, #4]
  33618. 800e77e: 681b ldr r3, [r3, #0]
  33619. 800e780: 68ba ldr r2, [r7, #8]
  33620. 800e782: 609a str r2, [r3, #8]
  33621. switch (sClockSourceConfig->ClockSource)
  33622. 800e784: 683b ldr r3, [r7, #0]
  33623. 800e786: 681b ldr r3, [r3, #0]
  33624. 800e788: 4a64 ldr r2, [pc, #400] @ (800e91c <HAL_TIM_ConfigClockSource+0x1e4>)
  33625. 800e78a: 4293 cmp r3, r2
  33626. 800e78c: f000 80a9 beq.w 800e8e2 <HAL_TIM_ConfigClockSource+0x1aa>
  33627. 800e790: 4a62 ldr r2, [pc, #392] @ (800e91c <HAL_TIM_ConfigClockSource+0x1e4>)
  33628. 800e792: 4293 cmp r3, r2
  33629. 800e794: f200 80ae bhi.w 800e8f4 <HAL_TIM_ConfigClockSource+0x1bc>
  33630. 800e798: 4a61 ldr r2, [pc, #388] @ (800e920 <HAL_TIM_ConfigClockSource+0x1e8>)
  33631. 800e79a: 4293 cmp r3, r2
  33632. 800e79c: f000 80a1 beq.w 800e8e2 <HAL_TIM_ConfigClockSource+0x1aa>
  33633. 800e7a0: 4a5f ldr r2, [pc, #380] @ (800e920 <HAL_TIM_ConfigClockSource+0x1e8>)
  33634. 800e7a2: 4293 cmp r3, r2
  33635. 800e7a4: f200 80a6 bhi.w 800e8f4 <HAL_TIM_ConfigClockSource+0x1bc>
  33636. 800e7a8: 4a5e ldr r2, [pc, #376] @ (800e924 <HAL_TIM_ConfigClockSource+0x1ec>)
  33637. 800e7aa: 4293 cmp r3, r2
  33638. 800e7ac: f000 8099 beq.w 800e8e2 <HAL_TIM_ConfigClockSource+0x1aa>
  33639. 800e7b0: 4a5c ldr r2, [pc, #368] @ (800e924 <HAL_TIM_ConfigClockSource+0x1ec>)
  33640. 800e7b2: 4293 cmp r3, r2
  33641. 800e7b4: f200 809e bhi.w 800e8f4 <HAL_TIM_ConfigClockSource+0x1bc>
  33642. 800e7b8: f1b3 1f10 cmp.w r3, #1048592 @ 0x100010
  33643. 800e7bc: f000 8091 beq.w 800e8e2 <HAL_TIM_ConfigClockSource+0x1aa>
  33644. 800e7c0: f1b3 1f10 cmp.w r3, #1048592 @ 0x100010
  33645. 800e7c4: f200 8096 bhi.w 800e8f4 <HAL_TIM_ConfigClockSource+0x1bc>
  33646. 800e7c8: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  33647. 800e7cc: f000 8089 beq.w 800e8e2 <HAL_TIM_ConfigClockSource+0x1aa>
  33648. 800e7d0: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  33649. 800e7d4: f200 808e bhi.w 800e8f4 <HAL_TIM_ConfigClockSource+0x1bc>
  33650. 800e7d8: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  33651. 800e7dc: d03e beq.n 800e85c <HAL_TIM_ConfigClockSource+0x124>
  33652. 800e7de: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  33653. 800e7e2: f200 8087 bhi.w 800e8f4 <HAL_TIM_ConfigClockSource+0x1bc>
  33654. 800e7e6: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  33655. 800e7ea: f000 8086 beq.w 800e8fa <HAL_TIM_ConfigClockSource+0x1c2>
  33656. 800e7ee: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  33657. 800e7f2: d87f bhi.n 800e8f4 <HAL_TIM_ConfigClockSource+0x1bc>
  33658. 800e7f4: 2b70 cmp r3, #112 @ 0x70
  33659. 800e7f6: d01a beq.n 800e82e <HAL_TIM_ConfigClockSource+0xf6>
  33660. 800e7f8: 2b70 cmp r3, #112 @ 0x70
  33661. 800e7fa: d87b bhi.n 800e8f4 <HAL_TIM_ConfigClockSource+0x1bc>
  33662. 800e7fc: 2b60 cmp r3, #96 @ 0x60
  33663. 800e7fe: d050 beq.n 800e8a2 <HAL_TIM_ConfigClockSource+0x16a>
  33664. 800e800: 2b60 cmp r3, #96 @ 0x60
  33665. 800e802: d877 bhi.n 800e8f4 <HAL_TIM_ConfigClockSource+0x1bc>
  33666. 800e804: 2b50 cmp r3, #80 @ 0x50
  33667. 800e806: d03c beq.n 800e882 <HAL_TIM_ConfigClockSource+0x14a>
  33668. 800e808: 2b50 cmp r3, #80 @ 0x50
  33669. 800e80a: d873 bhi.n 800e8f4 <HAL_TIM_ConfigClockSource+0x1bc>
  33670. 800e80c: 2b40 cmp r3, #64 @ 0x40
  33671. 800e80e: d058 beq.n 800e8c2 <HAL_TIM_ConfigClockSource+0x18a>
  33672. 800e810: 2b40 cmp r3, #64 @ 0x40
  33673. 800e812: d86f bhi.n 800e8f4 <HAL_TIM_ConfigClockSource+0x1bc>
  33674. 800e814: 2b30 cmp r3, #48 @ 0x30
  33675. 800e816: d064 beq.n 800e8e2 <HAL_TIM_ConfigClockSource+0x1aa>
  33676. 800e818: 2b30 cmp r3, #48 @ 0x30
  33677. 800e81a: d86b bhi.n 800e8f4 <HAL_TIM_ConfigClockSource+0x1bc>
  33678. 800e81c: 2b20 cmp r3, #32
  33679. 800e81e: d060 beq.n 800e8e2 <HAL_TIM_ConfigClockSource+0x1aa>
  33680. 800e820: 2b20 cmp r3, #32
  33681. 800e822: d867 bhi.n 800e8f4 <HAL_TIM_ConfigClockSource+0x1bc>
  33682. 800e824: 2b00 cmp r3, #0
  33683. 800e826: d05c beq.n 800e8e2 <HAL_TIM_ConfigClockSource+0x1aa>
  33684. 800e828: 2b10 cmp r3, #16
  33685. 800e82a: d05a beq.n 800e8e2 <HAL_TIM_ConfigClockSource+0x1aa>
  33686. 800e82c: e062 b.n 800e8f4 <HAL_TIM_ConfigClockSource+0x1bc>
  33687. assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));
  33688. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  33689. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  33690. /* Configure the ETR Clock source */
  33691. TIM_ETR_SetConfig(htim->Instance,
  33692. 800e82e: 687b ldr r3, [r7, #4]
  33693. 800e830: 6818 ldr r0, [r3, #0]
  33694. sClockSourceConfig->ClockPrescaler,
  33695. 800e832: 683b ldr r3, [r7, #0]
  33696. 800e834: 6899 ldr r1, [r3, #8]
  33697. sClockSourceConfig->ClockPolarity,
  33698. 800e836: 683b ldr r3, [r7, #0]
  33699. 800e838: 685a ldr r2, [r3, #4]
  33700. sClockSourceConfig->ClockFilter);
  33701. 800e83a: 683b ldr r3, [r7, #0]
  33702. 800e83c: 68db ldr r3, [r3, #12]
  33703. TIM_ETR_SetConfig(htim->Instance,
  33704. 800e83e: f000 fccf bl 800f1e0 <TIM_ETR_SetConfig>
  33705. /* Select the External clock mode1 and the ETRF trigger */
  33706. tmpsmcr = htim->Instance->SMCR;
  33707. 800e842: 687b ldr r3, [r7, #4]
  33708. 800e844: 681b ldr r3, [r3, #0]
  33709. 800e846: 689b ldr r3, [r3, #8]
  33710. 800e848: 60bb str r3, [r7, #8]
  33711. tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1);
  33712. 800e84a: 68bb ldr r3, [r7, #8]
  33713. 800e84c: f043 0377 orr.w r3, r3, #119 @ 0x77
  33714. 800e850: 60bb str r3, [r7, #8]
  33715. /* Write to TIMx SMCR */
  33716. htim->Instance->SMCR = tmpsmcr;
  33717. 800e852: 687b ldr r3, [r7, #4]
  33718. 800e854: 681b ldr r3, [r3, #0]
  33719. 800e856: 68ba ldr r2, [r7, #8]
  33720. 800e858: 609a str r2, [r3, #8]
  33721. break;
  33722. 800e85a: e04f b.n 800e8fc <HAL_TIM_ConfigClockSource+0x1c4>
  33723. assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));
  33724. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  33725. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  33726. /* Configure the ETR Clock source */
  33727. TIM_ETR_SetConfig(htim->Instance,
  33728. 800e85c: 687b ldr r3, [r7, #4]
  33729. 800e85e: 6818 ldr r0, [r3, #0]
  33730. sClockSourceConfig->ClockPrescaler,
  33731. 800e860: 683b ldr r3, [r7, #0]
  33732. 800e862: 6899 ldr r1, [r3, #8]
  33733. sClockSourceConfig->ClockPolarity,
  33734. 800e864: 683b ldr r3, [r7, #0]
  33735. 800e866: 685a ldr r2, [r3, #4]
  33736. sClockSourceConfig->ClockFilter);
  33737. 800e868: 683b ldr r3, [r7, #0]
  33738. 800e86a: 68db ldr r3, [r3, #12]
  33739. TIM_ETR_SetConfig(htim->Instance,
  33740. 800e86c: f000 fcb8 bl 800f1e0 <TIM_ETR_SetConfig>
  33741. /* Enable the External clock mode2 */
  33742. htim->Instance->SMCR |= TIM_SMCR_ECE;
  33743. 800e870: 687b ldr r3, [r7, #4]
  33744. 800e872: 681b ldr r3, [r3, #0]
  33745. 800e874: 689a ldr r2, [r3, #8]
  33746. 800e876: 687b ldr r3, [r7, #4]
  33747. 800e878: 681b ldr r3, [r3, #0]
  33748. 800e87a: f442 4280 orr.w r2, r2, #16384 @ 0x4000
  33749. 800e87e: 609a str r2, [r3, #8]
  33750. break;
  33751. 800e880: e03c b.n 800e8fc <HAL_TIM_ConfigClockSource+0x1c4>
  33752. /* Check TI1 input conditioning related parameters */
  33753. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  33754. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  33755. TIM_TI1_ConfigInputStage(htim->Instance,
  33756. 800e882: 687b ldr r3, [r7, #4]
  33757. 800e884: 6818 ldr r0, [r3, #0]
  33758. sClockSourceConfig->ClockPolarity,
  33759. 800e886: 683b ldr r3, [r7, #0]
  33760. 800e888: 6859 ldr r1, [r3, #4]
  33761. sClockSourceConfig->ClockFilter);
  33762. 800e88a: 683b ldr r3, [r7, #0]
  33763. 800e88c: 68db ldr r3, [r3, #12]
  33764. TIM_TI1_ConfigInputStage(htim->Instance,
  33765. 800e88e: 461a mov r2, r3
  33766. 800e890: f000 fc28 bl 800f0e4 <TIM_TI1_ConfigInputStage>
  33767. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1);
  33768. 800e894: 687b ldr r3, [r7, #4]
  33769. 800e896: 681b ldr r3, [r3, #0]
  33770. 800e898: 2150 movs r1, #80 @ 0x50
  33771. 800e89a: 4618 mov r0, r3
  33772. 800e89c: f000 fc82 bl 800f1a4 <TIM_ITRx_SetConfig>
  33773. break;
  33774. 800e8a0: e02c b.n 800e8fc <HAL_TIM_ConfigClockSource+0x1c4>
  33775. /* Check TI2 input conditioning related parameters */
  33776. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  33777. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  33778. TIM_TI2_ConfigInputStage(htim->Instance,
  33779. 800e8a2: 687b ldr r3, [r7, #4]
  33780. 800e8a4: 6818 ldr r0, [r3, #0]
  33781. sClockSourceConfig->ClockPolarity,
  33782. 800e8a6: 683b ldr r3, [r7, #0]
  33783. 800e8a8: 6859 ldr r1, [r3, #4]
  33784. sClockSourceConfig->ClockFilter);
  33785. 800e8aa: 683b ldr r3, [r7, #0]
  33786. 800e8ac: 68db ldr r3, [r3, #12]
  33787. TIM_TI2_ConfigInputStage(htim->Instance,
  33788. 800e8ae: 461a mov r2, r3
  33789. 800e8b0: f000 fc47 bl 800f142 <TIM_TI2_ConfigInputStage>
  33790. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2);
  33791. 800e8b4: 687b ldr r3, [r7, #4]
  33792. 800e8b6: 681b ldr r3, [r3, #0]
  33793. 800e8b8: 2160 movs r1, #96 @ 0x60
  33794. 800e8ba: 4618 mov r0, r3
  33795. 800e8bc: f000 fc72 bl 800f1a4 <TIM_ITRx_SetConfig>
  33796. break;
  33797. 800e8c0: e01c b.n 800e8fc <HAL_TIM_ConfigClockSource+0x1c4>
  33798. /* Check TI1 input conditioning related parameters */
  33799. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  33800. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  33801. TIM_TI1_ConfigInputStage(htim->Instance,
  33802. 800e8c2: 687b ldr r3, [r7, #4]
  33803. 800e8c4: 6818 ldr r0, [r3, #0]
  33804. sClockSourceConfig->ClockPolarity,
  33805. 800e8c6: 683b ldr r3, [r7, #0]
  33806. 800e8c8: 6859 ldr r1, [r3, #4]
  33807. sClockSourceConfig->ClockFilter);
  33808. 800e8ca: 683b ldr r3, [r7, #0]
  33809. 800e8cc: 68db ldr r3, [r3, #12]
  33810. TIM_TI1_ConfigInputStage(htim->Instance,
  33811. 800e8ce: 461a mov r2, r3
  33812. 800e8d0: f000 fc08 bl 800f0e4 <TIM_TI1_ConfigInputStage>
  33813. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED);
  33814. 800e8d4: 687b ldr r3, [r7, #4]
  33815. 800e8d6: 681b ldr r3, [r3, #0]
  33816. 800e8d8: 2140 movs r1, #64 @ 0x40
  33817. 800e8da: 4618 mov r0, r3
  33818. 800e8dc: f000 fc62 bl 800f1a4 <TIM_ITRx_SetConfig>
  33819. break;
  33820. 800e8e0: e00c b.n 800e8fc <HAL_TIM_ConfigClockSource+0x1c4>
  33821. case TIM_CLOCKSOURCE_ITR8:
  33822. {
  33823. /* Check whether or not the timer instance supports internal trigger input */
  33824. assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance));
  33825. TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource);
  33826. 800e8e2: 687b ldr r3, [r7, #4]
  33827. 800e8e4: 681a ldr r2, [r3, #0]
  33828. 800e8e6: 683b ldr r3, [r7, #0]
  33829. 800e8e8: 681b ldr r3, [r3, #0]
  33830. 800e8ea: 4619 mov r1, r3
  33831. 800e8ec: 4610 mov r0, r2
  33832. 800e8ee: f000 fc59 bl 800f1a4 <TIM_ITRx_SetConfig>
  33833. break;
  33834. 800e8f2: e003 b.n 800e8fc <HAL_TIM_ConfigClockSource+0x1c4>
  33835. }
  33836. default:
  33837. status = HAL_ERROR;
  33838. 800e8f4: 2301 movs r3, #1
  33839. 800e8f6: 73fb strb r3, [r7, #15]
  33840. break;
  33841. 800e8f8: e000 b.n 800e8fc <HAL_TIM_ConfigClockSource+0x1c4>
  33842. break;
  33843. 800e8fa: bf00 nop
  33844. }
  33845. htim->State = HAL_TIM_STATE_READY;
  33846. 800e8fc: 687b ldr r3, [r7, #4]
  33847. 800e8fe: 2201 movs r2, #1
  33848. 800e900: f883 203d strb.w r2, [r3, #61] @ 0x3d
  33849. __HAL_UNLOCK(htim);
  33850. 800e904: 687b ldr r3, [r7, #4]
  33851. 800e906: 2200 movs r2, #0
  33852. 800e908: f883 203c strb.w r2, [r3, #60] @ 0x3c
  33853. return status;
  33854. 800e90c: 7bfb ldrb r3, [r7, #15]
  33855. }
  33856. 800e90e: 4618 mov r0, r3
  33857. 800e910: 3710 adds r7, #16
  33858. 800e912: 46bd mov sp, r7
  33859. 800e914: bd80 pop {r7, pc}
  33860. 800e916: bf00 nop
  33861. 800e918: ffceff88 .word 0xffceff88
  33862. 800e91c: 00100040 .word 0x00100040
  33863. 800e920: 00100030 .word 0x00100030
  33864. 800e924: 00100020 .word 0x00100020
  33865. 0800e928 <HAL_TIM_OC_DelayElapsedCallback>:
  33866. * @brief Output Compare callback in non-blocking mode
  33867. * @param htim TIM OC handle
  33868. * @retval None
  33869. */
  33870. __weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
  33871. {
  33872. 800e928: b480 push {r7}
  33873. 800e92a: b083 sub sp, #12
  33874. 800e92c: af00 add r7, sp, #0
  33875. 800e92e: 6078 str r0, [r7, #4]
  33876. UNUSED(htim);
  33877. /* NOTE : This function should not be modified, when the callback is needed,
  33878. the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file
  33879. */
  33880. }
  33881. 800e930: bf00 nop
  33882. 800e932: 370c adds r7, #12
  33883. 800e934: 46bd mov sp, r7
  33884. 800e936: f85d 7b04 ldr.w r7, [sp], #4
  33885. 800e93a: 4770 bx lr
  33886. 0800e93c <HAL_TIM_IC_CaptureCallback>:
  33887. * @brief Input Capture callback in non-blocking mode
  33888. * @param htim TIM IC handle
  33889. * @retval None
  33890. */
  33891. __weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
  33892. {
  33893. 800e93c: b480 push {r7}
  33894. 800e93e: b083 sub sp, #12
  33895. 800e940: af00 add r7, sp, #0
  33896. 800e942: 6078 str r0, [r7, #4]
  33897. UNUSED(htim);
  33898. /* NOTE : This function should not be modified, when the callback is needed,
  33899. the HAL_TIM_IC_CaptureCallback could be implemented in the user file
  33900. */
  33901. }
  33902. 800e944: bf00 nop
  33903. 800e946: 370c adds r7, #12
  33904. 800e948: 46bd mov sp, r7
  33905. 800e94a: f85d 7b04 ldr.w r7, [sp], #4
  33906. 800e94e: 4770 bx lr
  33907. 0800e950 <HAL_TIM_PWM_PulseFinishedCallback>:
  33908. * @brief PWM Pulse finished callback in non-blocking mode
  33909. * @param htim TIM handle
  33910. * @retval None
  33911. */
  33912. __weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
  33913. {
  33914. 800e950: b480 push {r7}
  33915. 800e952: b083 sub sp, #12
  33916. 800e954: af00 add r7, sp, #0
  33917. 800e956: 6078 str r0, [r7, #4]
  33918. UNUSED(htim);
  33919. /* NOTE : This function should not be modified, when the callback is needed,
  33920. the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file
  33921. */
  33922. }
  33923. 800e958: bf00 nop
  33924. 800e95a: 370c adds r7, #12
  33925. 800e95c: 46bd mov sp, r7
  33926. 800e95e: f85d 7b04 ldr.w r7, [sp], #4
  33927. 800e962: 4770 bx lr
  33928. 0800e964 <HAL_TIM_TriggerCallback>:
  33929. * @brief Hall Trigger detection callback in non-blocking mode
  33930. * @param htim TIM handle
  33931. * @retval None
  33932. */
  33933. __weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim)
  33934. {
  33935. 800e964: b480 push {r7}
  33936. 800e966: b083 sub sp, #12
  33937. 800e968: af00 add r7, sp, #0
  33938. 800e96a: 6078 str r0, [r7, #4]
  33939. UNUSED(htim);
  33940. /* NOTE : This function should not be modified, when the callback is needed,
  33941. the HAL_TIM_TriggerCallback could be implemented in the user file
  33942. */
  33943. }
  33944. 800e96c: bf00 nop
  33945. 800e96e: 370c adds r7, #12
  33946. 800e970: 46bd mov sp, r7
  33947. 800e972: f85d 7b04 ldr.w r7, [sp], #4
  33948. 800e976: 4770 bx lr
  33949. 0800e978 <HAL_TIM_GetChannelState>:
  33950. * @arg TIM_CHANNEL_5: TIM Channel 5
  33951. * @arg TIM_CHANNEL_6: TIM Channel 6
  33952. * @retval TIM Channel state
  33953. */
  33954. HAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(const TIM_HandleTypeDef *htim, uint32_t Channel)
  33955. {
  33956. 800e978: b480 push {r7}
  33957. 800e97a: b085 sub sp, #20
  33958. 800e97c: af00 add r7, sp, #0
  33959. 800e97e: 6078 str r0, [r7, #4]
  33960. 800e980: 6039 str r1, [r7, #0]
  33961. HAL_TIM_ChannelStateTypeDef channel_state;
  33962. /* Check the parameters */
  33963. assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
  33964. channel_state = TIM_CHANNEL_STATE_GET(htim, Channel);
  33965. 800e982: 683b ldr r3, [r7, #0]
  33966. 800e984: 2b00 cmp r3, #0
  33967. 800e986: d104 bne.n 800e992 <HAL_TIM_GetChannelState+0x1a>
  33968. 800e988: 687b ldr r3, [r7, #4]
  33969. 800e98a: f893 303e ldrb.w r3, [r3, #62] @ 0x3e
  33970. 800e98e: b2db uxtb r3, r3
  33971. 800e990: e023 b.n 800e9da <HAL_TIM_GetChannelState+0x62>
  33972. 800e992: 683b ldr r3, [r7, #0]
  33973. 800e994: 2b04 cmp r3, #4
  33974. 800e996: d104 bne.n 800e9a2 <HAL_TIM_GetChannelState+0x2a>
  33975. 800e998: 687b ldr r3, [r7, #4]
  33976. 800e99a: f893 303f ldrb.w r3, [r3, #63] @ 0x3f
  33977. 800e99e: b2db uxtb r3, r3
  33978. 800e9a0: e01b b.n 800e9da <HAL_TIM_GetChannelState+0x62>
  33979. 800e9a2: 683b ldr r3, [r7, #0]
  33980. 800e9a4: 2b08 cmp r3, #8
  33981. 800e9a6: d104 bne.n 800e9b2 <HAL_TIM_GetChannelState+0x3a>
  33982. 800e9a8: 687b ldr r3, [r7, #4]
  33983. 800e9aa: f893 3040 ldrb.w r3, [r3, #64] @ 0x40
  33984. 800e9ae: b2db uxtb r3, r3
  33985. 800e9b0: e013 b.n 800e9da <HAL_TIM_GetChannelState+0x62>
  33986. 800e9b2: 683b ldr r3, [r7, #0]
  33987. 800e9b4: 2b0c cmp r3, #12
  33988. 800e9b6: d104 bne.n 800e9c2 <HAL_TIM_GetChannelState+0x4a>
  33989. 800e9b8: 687b ldr r3, [r7, #4]
  33990. 800e9ba: f893 3041 ldrb.w r3, [r3, #65] @ 0x41
  33991. 800e9be: b2db uxtb r3, r3
  33992. 800e9c0: e00b b.n 800e9da <HAL_TIM_GetChannelState+0x62>
  33993. 800e9c2: 683b ldr r3, [r7, #0]
  33994. 800e9c4: 2b10 cmp r3, #16
  33995. 800e9c6: d104 bne.n 800e9d2 <HAL_TIM_GetChannelState+0x5a>
  33996. 800e9c8: 687b ldr r3, [r7, #4]
  33997. 800e9ca: f893 3042 ldrb.w r3, [r3, #66] @ 0x42
  33998. 800e9ce: b2db uxtb r3, r3
  33999. 800e9d0: e003 b.n 800e9da <HAL_TIM_GetChannelState+0x62>
  34000. 800e9d2: 687b ldr r3, [r7, #4]
  34001. 800e9d4: f893 3043 ldrb.w r3, [r3, #67] @ 0x43
  34002. 800e9d8: b2db uxtb r3, r3
  34003. 800e9da: 73fb strb r3, [r7, #15]
  34004. return channel_state;
  34005. 800e9dc: 7bfb ldrb r3, [r7, #15]
  34006. }
  34007. 800e9de: 4618 mov r0, r3
  34008. 800e9e0: 3714 adds r7, #20
  34009. 800e9e2: 46bd mov sp, r7
  34010. 800e9e4: f85d 7b04 ldr.w r7, [sp], #4
  34011. 800e9e8: 4770 bx lr
  34012. ...
  34013. 0800e9ec <TIM_Base_SetConfig>:
  34014. * @param TIMx TIM peripheral
  34015. * @param Structure TIM Base configuration structure
  34016. * @retval None
  34017. */
  34018. void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure)
  34019. {
  34020. 800e9ec: b480 push {r7}
  34021. 800e9ee: b085 sub sp, #20
  34022. 800e9f0: af00 add r7, sp, #0
  34023. 800e9f2: 6078 str r0, [r7, #4]
  34024. 800e9f4: 6039 str r1, [r7, #0]
  34025. uint32_t tmpcr1;
  34026. tmpcr1 = TIMx->CR1;
  34027. 800e9f6: 687b ldr r3, [r7, #4]
  34028. 800e9f8: 681b ldr r3, [r3, #0]
  34029. 800e9fa: 60fb str r3, [r7, #12]
  34030. /* Set TIM Time Base Unit parameters ---------------------------------------*/
  34031. if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx))
  34032. 800e9fc: 687b ldr r3, [r7, #4]
  34033. 800e9fe: 4a46 ldr r2, [pc, #280] @ (800eb18 <TIM_Base_SetConfig+0x12c>)
  34034. 800ea00: 4293 cmp r3, r2
  34035. 800ea02: d013 beq.n 800ea2c <TIM_Base_SetConfig+0x40>
  34036. 800ea04: 687b ldr r3, [r7, #4]
  34037. 800ea06: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  34038. 800ea0a: d00f beq.n 800ea2c <TIM_Base_SetConfig+0x40>
  34039. 800ea0c: 687b ldr r3, [r7, #4]
  34040. 800ea0e: 4a43 ldr r2, [pc, #268] @ (800eb1c <TIM_Base_SetConfig+0x130>)
  34041. 800ea10: 4293 cmp r3, r2
  34042. 800ea12: d00b beq.n 800ea2c <TIM_Base_SetConfig+0x40>
  34043. 800ea14: 687b ldr r3, [r7, #4]
  34044. 800ea16: 4a42 ldr r2, [pc, #264] @ (800eb20 <TIM_Base_SetConfig+0x134>)
  34045. 800ea18: 4293 cmp r3, r2
  34046. 800ea1a: d007 beq.n 800ea2c <TIM_Base_SetConfig+0x40>
  34047. 800ea1c: 687b ldr r3, [r7, #4]
  34048. 800ea1e: 4a41 ldr r2, [pc, #260] @ (800eb24 <TIM_Base_SetConfig+0x138>)
  34049. 800ea20: 4293 cmp r3, r2
  34050. 800ea22: d003 beq.n 800ea2c <TIM_Base_SetConfig+0x40>
  34051. 800ea24: 687b ldr r3, [r7, #4]
  34052. 800ea26: 4a40 ldr r2, [pc, #256] @ (800eb28 <TIM_Base_SetConfig+0x13c>)
  34053. 800ea28: 4293 cmp r3, r2
  34054. 800ea2a: d108 bne.n 800ea3e <TIM_Base_SetConfig+0x52>
  34055. {
  34056. /* Select the Counter Mode */
  34057. tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);
  34058. 800ea2c: 68fb ldr r3, [r7, #12]
  34059. 800ea2e: f023 0370 bic.w r3, r3, #112 @ 0x70
  34060. 800ea32: 60fb str r3, [r7, #12]
  34061. tmpcr1 |= Structure->CounterMode;
  34062. 800ea34: 683b ldr r3, [r7, #0]
  34063. 800ea36: 685b ldr r3, [r3, #4]
  34064. 800ea38: 68fa ldr r2, [r7, #12]
  34065. 800ea3a: 4313 orrs r3, r2
  34066. 800ea3c: 60fb str r3, [r7, #12]
  34067. }
  34068. if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx))
  34069. 800ea3e: 687b ldr r3, [r7, #4]
  34070. 800ea40: 4a35 ldr r2, [pc, #212] @ (800eb18 <TIM_Base_SetConfig+0x12c>)
  34071. 800ea42: 4293 cmp r3, r2
  34072. 800ea44: d01f beq.n 800ea86 <TIM_Base_SetConfig+0x9a>
  34073. 800ea46: 687b ldr r3, [r7, #4]
  34074. 800ea48: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  34075. 800ea4c: d01b beq.n 800ea86 <TIM_Base_SetConfig+0x9a>
  34076. 800ea4e: 687b ldr r3, [r7, #4]
  34077. 800ea50: 4a32 ldr r2, [pc, #200] @ (800eb1c <TIM_Base_SetConfig+0x130>)
  34078. 800ea52: 4293 cmp r3, r2
  34079. 800ea54: d017 beq.n 800ea86 <TIM_Base_SetConfig+0x9a>
  34080. 800ea56: 687b ldr r3, [r7, #4]
  34081. 800ea58: 4a31 ldr r2, [pc, #196] @ (800eb20 <TIM_Base_SetConfig+0x134>)
  34082. 800ea5a: 4293 cmp r3, r2
  34083. 800ea5c: d013 beq.n 800ea86 <TIM_Base_SetConfig+0x9a>
  34084. 800ea5e: 687b ldr r3, [r7, #4]
  34085. 800ea60: 4a30 ldr r2, [pc, #192] @ (800eb24 <TIM_Base_SetConfig+0x138>)
  34086. 800ea62: 4293 cmp r3, r2
  34087. 800ea64: d00f beq.n 800ea86 <TIM_Base_SetConfig+0x9a>
  34088. 800ea66: 687b ldr r3, [r7, #4]
  34089. 800ea68: 4a2f ldr r2, [pc, #188] @ (800eb28 <TIM_Base_SetConfig+0x13c>)
  34090. 800ea6a: 4293 cmp r3, r2
  34091. 800ea6c: d00b beq.n 800ea86 <TIM_Base_SetConfig+0x9a>
  34092. 800ea6e: 687b ldr r3, [r7, #4]
  34093. 800ea70: 4a2e ldr r2, [pc, #184] @ (800eb2c <TIM_Base_SetConfig+0x140>)
  34094. 800ea72: 4293 cmp r3, r2
  34095. 800ea74: d007 beq.n 800ea86 <TIM_Base_SetConfig+0x9a>
  34096. 800ea76: 687b ldr r3, [r7, #4]
  34097. 800ea78: 4a2d ldr r2, [pc, #180] @ (800eb30 <TIM_Base_SetConfig+0x144>)
  34098. 800ea7a: 4293 cmp r3, r2
  34099. 800ea7c: d003 beq.n 800ea86 <TIM_Base_SetConfig+0x9a>
  34100. 800ea7e: 687b ldr r3, [r7, #4]
  34101. 800ea80: 4a2c ldr r2, [pc, #176] @ (800eb34 <TIM_Base_SetConfig+0x148>)
  34102. 800ea82: 4293 cmp r3, r2
  34103. 800ea84: d108 bne.n 800ea98 <TIM_Base_SetConfig+0xac>
  34104. {
  34105. /* Set the clock division */
  34106. tmpcr1 &= ~TIM_CR1_CKD;
  34107. 800ea86: 68fb ldr r3, [r7, #12]
  34108. 800ea88: f423 7340 bic.w r3, r3, #768 @ 0x300
  34109. 800ea8c: 60fb str r3, [r7, #12]
  34110. tmpcr1 |= (uint32_t)Structure->ClockDivision;
  34111. 800ea8e: 683b ldr r3, [r7, #0]
  34112. 800ea90: 68db ldr r3, [r3, #12]
  34113. 800ea92: 68fa ldr r2, [r7, #12]
  34114. 800ea94: 4313 orrs r3, r2
  34115. 800ea96: 60fb str r3, [r7, #12]
  34116. }
  34117. /* Set the auto-reload preload */
  34118. MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload);
  34119. 800ea98: 68fb ldr r3, [r7, #12]
  34120. 800ea9a: f023 0280 bic.w r2, r3, #128 @ 0x80
  34121. 800ea9e: 683b ldr r3, [r7, #0]
  34122. 800eaa0: 695b ldr r3, [r3, #20]
  34123. 800eaa2: 4313 orrs r3, r2
  34124. 800eaa4: 60fb str r3, [r7, #12]
  34125. TIMx->CR1 = tmpcr1;
  34126. 800eaa6: 687b ldr r3, [r7, #4]
  34127. 800eaa8: 68fa ldr r2, [r7, #12]
  34128. 800eaaa: 601a str r2, [r3, #0]
  34129. /* Set the Autoreload value */
  34130. TIMx->ARR = (uint32_t)Structure->Period ;
  34131. 800eaac: 683b ldr r3, [r7, #0]
  34132. 800eaae: 689a ldr r2, [r3, #8]
  34133. 800eab0: 687b ldr r3, [r7, #4]
  34134. 800eab2: 62da str r2, [r3, #44] @ 0x2c
  34135. /* Set the Prescaler value */
  34136. TIMx->PSC = Structure->Prescaler;
  34137. 800eab4: 683b ldr r3, [r7, #0]
  34138. 800eab6: 681a ldr r2, [r3, #0]
  34139. 800eab8: 687b ldr r3, [r7, #4]
  34140. 800eaba: 629a str r2, [r3, #40] @ 0x28
  34141. if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx))
  34142. 800eabc: 687b ldr r3, [r7, #4]
  34143. 800eabe: 4a16 ldr r2, [pc, #88] @ (800eb18 <TIM_Base_SetConfig+0x12c>)
  34144. 800eac0: 4293 cmp r3, r2
  34145. 800eac2: d00f beq.n 800eae4 <TIM_Base_SetConfig+0xf8>
  34146. 800eac4: 687b ldr r3, [r7, #4]
  34147. 800eac6: 4a18 ldr r2, [pc, #96] @ (800eb28 <TIM_Base_SetConfig+0x13c>)
  34148. 800eac8: 4293 cmp r3, r2
  34149. 800eaca: d00b beq.n 800eae4 <TIM_Base_SetConfig+0xf8>
  34150. 800eacc: 687b ldr r3, [r7, #4]
  34151. 800eace: 4a17 ldr r2, [pc, #92] @ (800eb2c <TIM_Base_SetConfig+0x140>)
  34152. 800ead0: 4293 cmp r3, r2
  34153. 800ead2: d007 beq.n 800eae4 <TIM_Base_SetConfig+0xf8>
  34154. 800ead4: 687b ldr r3, [r7, #4]
  34155. 800ead6: 4a16 ldr r2, [pc, #88] @ (800eb30 <TIM_Base_SetConfig+0x144>)
  34156. 800ead8: 4293 cmp r3, r2
  34157. 800eada: d003 beq.n 800eae4 <TIM_Base_SetConfig+0xf8>
  34158. 800eadc: 687b ldr r3, [r7, #4]
  34159. 800eade: 4a15 ldr r2, [pc, #84] @ (800eb34 <TIM_Base_SetConfig+0x148>)
  34160. 800eae0: 4293 cmp r3, r2
  34161. 800eae2: d103 bne.n 800eaec <TIM_Base_SetConfig+0x100>
  34162. {
  34163. /* Set the Repetition Counter value */
  34164. TIMx->RCR = Structure->RepetitionCounter;
  34165. 800eae4: 683b ldr r3, [r7, #0]
  34166. 800eae6: 691a ldr r2, [r3, #16]
  34167. 800eae8: 687b ldr r3, [r7, #4]
  34168. 800eaea: 631a str r2, [r3, #48] @ 0x30
  34169. }
  34170. /* Generate an update event to reload the Prescaler
  34171. and the repetition counter (only for advanced timer) value immediately */
  34172. TIMx->EGR = TIM_EGR_UG;
  34173. 800eaec: 687b ldr r3, [r7, #4]
  34174. 800eaee: 2201 movs r2, #1
  34175. 800eaf0: 615a str r2, [r3, #20]
  34176. /* Check if the update flag is set after the Update Generation, if so clear the UIF flag */
  34177. if (HAL_IS_BIT_SET(TIMx->SR, TIM_FLAG_UPDATE))
  34178. 800eaf2: 687b ldr r3, [r7, #4]
  34179. 800eaf4: 691b ldr r3, [r3, #16]
  34180. 800eaf6: f003 0301 and.w r3, r3, #1
  34181. 800eafa: 2b01 cmp r3, #1
  34182. 800eafc: d105 bne.n 800eb0a <TIM_Base_SetConfig+0x11e>
  34183. {
  34184. /* Clear the update flag */
  34185. CLEAR_BIT(TIMx->SR, TIM_FLAG_UPDATE);
  34186. 800eafe: 687b ldr r3, [r7, #4]
  34187. 800eb00: 691b ldr r3, [r3, #16]
  34188. 800eb02: f023 0201 bic.w r2, r3, #1
  34189. 800eb06: 687b ldr r3, [r7, #4]
  34190. 800eb08: 611a str r2, [r3, #16]
  34191. }
  34192. }
  34193. 800eb0a: bf00 nop
  34194. 800eb0c: 3714 adds r7, #20
  34195. 800eb0e: 46bd mov sp, r7
  34196. 800eb10: f85d 7b04 ldr.w r7, [sp], #4
  34197. 800eb14: 4770 bx lr
  34198. 800eb16: bf00 nop
  34199. 800eb18: 40010000 .word 0x40010000
  34200. 800eb1c: 40000400 .word 0x40000400
  34201. 800eb20: 40000800 .word 0x40000800
  34202. 800eb24: 40000c00 .word 0x40000c00
  34203. 800eb28: 40010400 .word 0x40010400
  34204. 800eb2c: 40014000 .word 0x40014000
  34205. 800eb30: 40014400 .word 0x40014400
  34206. 800eb34: 40014800 .word 0x40014800
  34207. 0800eb38 <TIM_OC1_SetConfig>:
  34208. * @param TIMx to select the TIM peripheral
  34209. * @param OC_Config The output configuration structure
  34210. * @retval None
  34211. */
  34212. static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
  34213. {
  34214. 800eb38: b480 push {r7}
  34215. 800eb3a: b087 sub sp, #28
  34216. 800eb3c: af00 add r7, sp, #0
  34217. 800eb3e: 6078 str r0, [r7, #4]
  34218. 800eb40: 6039 str r1, [r7, #0]
  34219. uint32_t tmpccmrx;
  34220. uint32_t tmpccer;
  34221. uint32_t tmpcr2;
  34222. /* Get the TIMx CCER register value */
  34223. tmpccer = TIMx->CCER;
  34224. 800eb42: 687b ldr r3, [r7, #4]
  34225. 800eb44: 6a1b ldr r3, [r3, #32]
  34226. 800eb46: 617b str r3, [r7, #20]
  34227. /* Disable the Channel 1: Reset the CC1E Bit */
  34228. TIMx->CCER &= ~TIM_CCER_CC1E;
  34229. 800eb48: 687b ldr r3, [r7, #4]
  34230. 800eb4a: 6a1b ldr r3, [r3, #32]
  34231. 800eb4c: f023 0201 bic.w r2, r3, #1
  34232. 800eb50: 687b ldr r3, [r7, #4]
  34233. 800eb52: 621a str r2, [r3, #32]
  34234. /* Get the TIMx CR2 register value */
  34235. tmpcr2 = TIMx->CR2;
  34236. 800eb54: 687b ldr r3, [r7, #4]
  34237. 800eb56: 685b ldr r3, [r3, #4]
  34238. 800eb58: 613b str r3, [r7, #16]
  34239. /* Get the TIMx CCMR1 register value */
  34240. tmpccmrx = TIMx->CCMR1;
  34241. 800eb5a: 687b ldr r3, [r7, #4]
  34242. 800eb5c: 699b ldr r3, [r3, #24]
  34243. 800eb5e: 60fb str r3, [r7, #12]
  34244. /* Reset the Output Compare Mode Bits */
  34245. tmpccmrx &= ~TIM_CCMR1_OC1M;
  34246. 800eb60: 68fa ldr r2, [r7, #12]
  34247. 800eb62: 4b37 ldr r3, [pc, #220] @ (800ec40 <TIM_OC1_SetConfig+0x108>)
  34248. 800eb64: 4013 ands r3, r2
  34249. 800eb66: 60fb str r3, [r7, #12]
  34250. tmpccmrx &= ~TIM_CCMR1_CC1S;
  34251. 800eb68: 68fb ldr r3, [r7, #12]
  34252. 800eb6a: f023 0303 bic.w r3, r3, #3
  34253. 800eb6e: 60fb str r3, [r7, #12]
  34254. /* Select the Output Compare Mode */
  34255. tmpccmrx |= OC_Config->OCMode;
  34256. 800eb70: 683b ldr r3, [r7, #0]
  34257. 800eb72: 681b ldr r3, [r3, #0]
  34258. 800eb74: 68fa ldr r2, [r7, #12]
  34259. 800eb76: 4313 orrs r3, r2
  34260. 800eb78: 60fb str r3, [r7, #12]
  34261. /* Reset the Output Polarity level */
  34262. tmpccer &= ~TIM_CCER_CC1P;
  34263. 800eb7a: 697b ldr r3, [r7, #20]
  34264. 800eb7c: f023 0302 bic.w r3, r3, #2
  34265. 800eb80: 617b str r3, [r7, #20]
  34266. /* Set the Output Compare Polarity */
  34267. tmpccer |= OC_Config->OCPolarity;
  34268. 800eb82: 683b ldr r3, [r7, #0]
  34269. 800eb84: 689b ldr r3, [r3, #8]
  34270. 800eb86: 697a ldr r2, [r7, #20]
  34271. 800eb88: 4313 orrs r3, r2
  34272. 800eb8a: 617b str r3, [r7, #20]
  34273. if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1))
  34274. 800eb8c: 687b ldr r3, [r7, #4]
  34275. 800eb8e: 4a2d ldr r2, [pc, #180] @ (800ec44 <TIM_OC1_SetConfig+0x10c>)
  34276. 800eb90: 4293 cmp r3, r2
  34277. 800eb92: d00f beq.n 800ebb4 <TIM_OC1_SetConfig+0x7c>
  34278. 800eb94: 687b ldr r3, [r7, #4]
  34279. 800eb96: 4a2c ldr r2, [pc, #176] @ (800ec48 <TIM_OC1_SetConfig+0x110>)
  34280. 800eb98: 4293 cmp r3, r2
  34281. 800eb9a: d00b beq.n 800ebb4 <TIM_OC1_SetConfig+0x7c>
  34282. 800eb9c: 687b ldr r3, [r7, #4]
  34283. 800eb9e: 4a2b ldr r2, [pc, #172] @ (800ec4c <TIM_OC1_SetConfig+0x114>)
  34284. 800eba0: 4293 cmp r3, r2
  34285. 800eba2: d007 beq.n 800ebb4 <TIM_OC1_SetConfig+0x7c>
  34286. 800eba4: 687b ldr r3, [r7, #4]
  34287. 800eba6: 4a2a ldr r2, [pc, #168] @ (800ec50 <TIM_OC1_SetConfig+0x118>)
  34288. 800eba8: 4293 cmp r3, r2
  34289. 800ebaa: d003 beq.n 800ebb4 <TIM_OC1_SetConfig+0x7c>
  34290. 800ebac: 687b ldr r3, [r7, #4]
  34291. 800ebae: 4a29 ldr r2, [pc, #164] @ (800ec54 <TIM_OC1_SetConfig+0x11c>)
  34292. 800ebb0: 4293 cmp r3, r2
  34293. 800ebb2: d10c bne.n 800ebce <TIM_OC1_SetConfig+0x96>
  34294. {
  34295. /* Check parameters */
  34296. assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));
  34297. /* Reset the Output N Polarity level */
  34298. tmpccer &= ~TIM_CCER_CC1NP;
  34299. 800ebb4: 697b ldr r3, [r7, #20]
  34300. 800ebb6: f023 0308 bic.w r3, r3, #8
  34301. 800ebba: 617b str r3, [r7, #20]
  34302. /* Set the Output N Polarity */
  34303. tmpccer |= OC_Config->OCNPolarity;
  34304. 800ebbc: 683b ldr r3, [r7, #0]
  34305. 800ebbe: 68db ldr r3, [r3, #12]
  34306. 800ebc0: 697a ldr r2, [r7, #20]
  34307. 800ebc2: 4313 orrs r3, r2
  34308. 800ebc4: 617b str r3, [r7, #20]
  34309. /* Reset the Output N State */
  34310. tmpccer &= ~TIM_CCER_CC1NE;
  34311. 800ebc6: 697b ldr r3, [r7, #20]
  34312. 800ebc8: f023 0304 bic.w r3, r3, #4
  34313. 800ebcc: 617b str r3, [r7, #20]
  34314. }
  34315. if (IS_TIM_BREAK_INSTANCE(TIMx))
  34316. 800ebce: 687b ldr r3, [r7, #4]
  34317. 800ebd0: 4a1c ldr r2, [pc, #112] @ (800ec44 <TIM_OC1_SetConfig+0x10c>)
  34318. 800ebd2: 4293 cmp r3, r2
  34319. 800ebd4: d00f beq.n 800ebf6 <TIM_OC1_SetConfig+0xbe>
  34320. 800ebd6: 687b ldr r3, [r7, #4]
  34321. 800ebd8: 4a1b ldr r2, [pc, #108] @ (800ec48 <TIM_OC1_SetConfig+0x110>)
  34322. 800ebda: 4293 cmp r3, r2
  34323. 800ebdc: d00b beq.n 800ebf6 <TIM_OC1_SetConfig+0xbe>
  34324. 800ebde: 687b ldr r3, [r7, #4]
  34325. 800ebe0: 4a1a ldr r2, [pc, #104] @ (800ec4c <TIM_OC1_SetConfig+0x114>)
  34326. 800ebe2: 4293 cmp r3, r2
  34327. 800ebe4: d007 beq.n 800ebf6 <TIM_OC1_SetConfig+0xbe>
  34328. 800ebe6: 687b ldr r3, [r7, #4]
  34329. 800ebe8: 4a19 ldr r2, [pc, #100] @ (800ec50 <TIM_OC1_SetConfig+0x118>)
  34330. 800ebea: 4293 cmp r3, r2
  34331. 800ebec: d003 beq.n 800ebf6 <TIM_OC1_SetConfig+0xbe>
  34332. 800ebee: 687b ldr r3, [r7, #4]
  34333. 800ebf0: 4a18 ldr r2, [pc, #96] @ (800ec54 <TIM_OC1_SetConfig+0x11c>)
  34334. 800ebf2: 4293 cmp r3, r2
  34335. 800ebf4: d111 bne.n 800ec1a <TIM_OC1_SetConfig+0xe2>
  34336. /* Check parameters */
  34337. assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));
  34338. assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));
  34339. /* Reset the Output Compare and Output Compare N IDLE State */
  34340. tmpcr2 &= ~TIM_CR2_OIS1;
  34341. 800ebf6: 693b ldr r3, [r7, #16]
  34342. 800ebf8: f423 7380 bic.w r3, r3, #256 @ 0x100
  34343. 800ebfc: 613b str r3, [r7, #16]
  34344. tmpcr2 &= ~TIM_CR2_OIS1N;
  34345. 800ebfe: 693b ldr r3, [r7, #16]
  34346. 800ec00: f423 7300 bic.w r3, r3, #512 @ 0x200
  34347. 800ec04: 613b str r3, [r7, #16]
  34348. /* Set the Output Idle state */
  34349. tmpcr2 |= OC_Config->OCIdleState;
  34350. 800ec06: 683b ldr r3, [r7, #0]
  34351. 800ec08: 695b ldr r3, [r3, #20]
  34352. 800ec0a: 693a ldr r2, [r7, #16]
  34353. 800ec0c: 4313 orrs r3, r2
  34354. 800ec0e: 613b str r3, [r7, #16]
  34355. /* Set the Output N Idle state */
  34356. tmpcr2 |= OC_Config->OCNIdleState;
  34357. 800ec10: 683b ldr r3, [r7, #0]
  34358. 800ec12: 699b ldr r3, [r3, #24]
  34359. 800ec14: 693a ldr r2, [r7, #16]
  34360. 800ec16: 4313 orrs r3, r2
  34361. 800ec18: 613b str r3, [r7, #16]
  34362. }
  34363. /* Write to TIMx CR2 */
  34364. TIMx->CR2 = tmpcr2;
  34365. 800ec1a: 687b ldr r3, [r7, #4]
  34366. 800ec1c: 693a ldr r2, [r7, #16]
  34367. 800ec1e: 605a str r2, [r3, #4]
  34368. /* Write to TIMx CCMR1 */
  34369. TIMx->CCMR1 = tmpccmrx;
  34370. 800ec20: 687b ldr r3, [r7, #4]
  34371. 800ec22: 68fa ldr r2, [r7, #12]
  34372. 800ec24: 619a str r2, [r3, #24]
  34373. /* Set the Capture Compare Register value */
  34374. TIMx->CCR1 = OC_Config->Pulse;
  34375. 800ec26: 683b ldr r3, [r7, #0]
  34376. 800ec28: 685a ldr r2, [r3, #4]
  34377. 800ec2a: 687b ldr r3, [r7, #4]
  34378. 800ec2c: 635a str r2, [r3, #52] @ 0x34
  34379. /* Write to TIMx CCER */
  34380. TIMx->CCER = tmpccer;
  34381. 800ec2e: 687b ldr r3, [r7, #4]
  34382. 800ec30: 697a ldr r2, [r7, #20]
  34383. 800ec32: 621a str r2, [r3, #32]
  34384. }
  34385. 800ec34: bf00 nop
  34386. 800ec36: 371c adds r7, #28
  34387. 800ec38: 46bd mov sp, r7
  34388. 800ec3a: f85d 7b04 ldr.w r7, [sp], #4
  34389. 800ec3e: 4770 bx lr
  34390. 800ec40: fffeff8f .word 0xfffeff8f
  34391. 800ec44: 40010000 .word 0x40010000
  34392. 800ec48: 40010400 .word 0x40010400
  34393. 800ec4c: 40014000 .word 0x40014000
  34394. 800ec50: 40014400 .word 0x40014400
  34395. 800ec54: 40014800 .word 0x40014800
  34396. 0800ec58 <TIM_OC2_SetConfig>:
  34397. * @param TIMx to select the TIM peripheral
  34398. * @param OC_Config The output configuration structure
  34399. * @retval None
  34400. */
  34401. void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
  34402. {
  34403. 800ec58: b480 push {r7}
  34404. 800ec5a: b087 sub sp, #28
  34405. 800ec5c: af00 add r7, sp, #0
  34406. 800ec5e: 6078 str r0, [r7, #4]
  34407. 800ec60: 6039 str r1, [r7, #0]
  34408. uint32_t tmpccmrx;
  34409. uint32_t tmpccer;
  34410. uint32_t tmpcr2;
  34411. /* Get the TIMx CCER register value */
  34412. tmpccer = TIMx->CCER;
  34413. 800ec62: 687b ldr r3, [r7, #4]
  34414. 800ec64: 6a1b ldr r3, [r3, #32]
  34415. 800ec66: 617b str r3, [r7, #20]
  34416. /* Disable the Channel 2: Reset the CC2E Bit */
  34417. TIMx->CCER &= ~TIM_CCER_CC2E;
  34418. 800ec68: 687b ldr r3, [r7, #4]
  34419. 800ec6a: 6a1b ldr r3, [r3, #32]
  34420. 800ec6c: f023 0210 bic.w r2, r3, #16
  34421. 800ec70: 687b ldr r3, [r7, #4]
  34422. 800ec72: 621a str r2, [r3, #32]
  34423. /* Get the TIMx CR2 register value */
  34424. tmpcr2 = TIMx->CR2;
  34425. 800ec74: 687b ldr r3, [r7, #4]
  34426. 800ec76: 685b ldr r3, [r3, #4]
  34427. 800ec78: 613b str r3, [r7, #16]
  34428. /* Get the TIMx CCMR1 register value */
  34429. tmpccmrx = TIMx->CCMR1;
  34430. 800ec7a: 687b ldr r3, [r7, #4]
  34431. 800ec7c: 699b ldr r3, [r3, #24]
  34432. 800ec7e: 60fb str r3, [r7, #12]
  34433. /* Reset the Output Compare mode and Capture/Compare selection Bits */
  34434. tmpccmrx &= ~TIM_CCMR1_OC2M;
  34435. 800ec80: 68fa ldr r2, [r7, #12]
  34436. 800ec82: 4b34 ldr r3, [pc, #208] @ (800ed54 <TIM_OC2_SetConfig+0xfc>)
  34437. 800ec84: 4013 ands r3, r2
  34438. 800ec86: 60fb str r3, [r7, #12]
  34439. tmpccmrx &= ~TIM_CCMR1_CC2S;
  34440. 800ec88: 68fb ldr r3, [r7, #12]
  34441. 800ec8a: f423 7340 bic.w r3, r3, #768 @ 0x300
  34442. 800ec8e: 60fb str r3, [r7, #12]
  34443. /* Select the Output Compare Mode */
  34444. tmpccmrx |= (OC_Config->OCMode << 8U);
  34445. 800ec90: 683b ldr r3, [r7, #0]
  34446. 800ec92: 681b ldr r3, [r3, #0]
  34447. 800ec94: 021b lsls r3, r3, #8
  34448. 800ec96: 68fa ldr r2, [r7, #12]
  34449. 800ec98: 4313 orrs r3, r2
  34450. 800ec9a: 60fb str r3, [r7, #12]
  34451. /* Reset the Output Polarity level */
  34452. tmpccer &= ~TIM_CCER_CC2P;
  34453. 800ec9c: 697b ldr r3, [r7, #20]
  34454. 800ec9e: f023 0320 bic.w r3, r3, #32
  34455. 800eca2: 617b str r3, [r7, #20]
  34456. /* Set the Output Compare Polarity */
  34457. tmpccer |= (OC_Config->OCPolarity << 4U);
  34458. 800eca4: 683b ldr r3, [r7, #0]
  34459. 800eca6: 689b ldr r3, [r3, #8]
  34460. 800eca8: 011b lsls r3, r3, #4
  34461. 800ecaa: 697a ldr r2, [r7, #20]
  34462. 800ecac: 4313 orrs r3, r2
  34463. 800ecae: 617b str r3, [r7, #20]
  34464. if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2))
  34465. 800ecb0: 687b ldr r3, [r7, #4]
  34466. 800ecb2: 4a29 ldr r2, [pc, #164] @ (800ed58 <TIM_OC2_SetConfig+0x100>)
  34467. 800ecb4: 4293 cmp r3, r2
  34468. 800ecb6: d003 beq.n 800ecc0 <TIM_OC2_SetConfig+0x68>
  34469. 800ecb8: 687b ldr r3, [r7, #4]
  34470. 800ecba: 4a28 ldr r2, [pc, #160] @ (800ed5c <TIM_OC2_SetConfig+0x104>)
  34471. 800ecbc: 4293 cmp r3, r2
  34472. 800ecbe: d10d bne.n 800ecdc <TIM_OC2_SetConfig+0x84>
  34473. {
  34474. assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));
  34475. /* Reset the Output N Polarity level */
  34476. tmpccer &= ~TIM_CCER_CC2NP;
  34477. 800ecc0: 697b ldr r3, [r7, #20]
  34478. 800ecc2: f023 0380 bic.w r3, r3, #128 @ 0x80
  34479. 800ecc6: 617b str r3, [r7, #20]
  34480. /* Set the Output N Polarity */
  34481. tmpccer |= (OC_Config->OCNPolarity << 4U);
  34482. 800ecc8: 683b ldr r3, [r7, #0]
  34483. 800ecca: 68db ldr r3, [r3, #12]
  34484. 800eccc: 011b lsls r3, r3, #4
  34485. 800ecce: 697a ldr r2, [r7, #20]
  34486. 800ecd0: 4313 orrs r3, r2
  34487. 800ecd2: 617b str r3, [r7, #20]
  34488. /* Reset the Output N State */
  34489. tmpccer &= ~TIM_CCER_CC2NE;
  34490. 800ecd4: 697b ldr r3, [r7, #20]
  34491. 800ecd6: f023 0340 bic.w r3, r3, #64 @ 0x40
  34492. 800ecda: 617b str r3, [r7, #20]
  34493. }
  34494. if (IS_TIM_BREAK_INSTANCE(TIMx))
  34495. 800ecdc: 687b ldr r3, [r7, #4]
  34496. 800ecde: 4a1e ldr r2, [pc, #120] @ (800ed58 <TIM_OC2_SetConfig+0x100>)
  34497. 800ece0: 4293 cmp r3, r2
  34498. 800ece2: d00f beq.n 800ed04 <TIM_OC2_SetConfig+0xac>
  34499. 800ece4: 687b ldr r3, [r7, #4]
  34500. 800ece6: 4a1d ldr r2, [pc, #116] @ (800ed5c <TIM_OC2_SetConfig+0x104>)
  34501. 800ece8: 4293 cmp r3, r2
  34502. 800ecea: d00b beq.n 800ed04 <TIM_OC2_SetConfig+0xac>
  34503. 800ecec: 687b ldr r3, [r7, #4]
  34504. 800ecee: 4a1c ldr r2, [pc, #112] @ (800ed60 <TIM_OC2_SetConfig+0x108>)
  34505. 800ecf0: 4293 cmp r3, r2
  34506. 800ecf2: d007 beq.n 800ed04 <TIM_OC2_SetConfig+0xac>
  34507. 800ecf4: 687b ldr r3, [r7, #4]
  34508. 800ecf6: 4a1b ldr r2, [pc, #108] @ (800ed64 <TIM_OC2_SetConfig+0x10c>)
  34509. 800ecf8: 4293 cmp r3, r2
  34510. 800ecfa: d003 beq.n 800ed04 <TIM_OC2_SetConfig+0xac>
  34511. 800ecfc: 687b ldr r3, [r7, #4]
  34512. 800ecfe: 4a1a ldr r2, [pc, #104] @ (800ed68 <TIM_OC2_SetConfig+0x110>)
  34513. 800ed00: 4293 cmp r3, r2
  34514. 800ed02: d113 bne.n 800ed2c <TIM_OC2_SetConfig+0xd4>
  34515. /* Check parameters */
  34516. assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));
  34517. assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));
  34518. /* Reset the Output Compare and Output Compare N IDLE State */
  34519. tmpcr2 &= ~TIM_CR2_OIS2;
  34520. 800ed04: 693b ldr r3, [r7, #16]
  34521. 800ed06: f423 6380 bic.w r3, r3, #1024 @ 0x400
  34522. 800ed0a: 613b str r3, [r7, #16]
  34523. tmpcr2 &= ~TIM_CR2_OIS2N;
  34524. 800ed0c: 693b ldr r3, [r7, #16]
  34525. 800ed0e: f423 6300 bic.w r3, r3, #2048 @ 0x800
  34526. 800ed12: 613b str r3, [r7, #16]
  34527. /* Set the Output Idle state */
  34528. tmpcr2 |= (OC_Config->OCIdleState << 2U);
  34529. 800ed14: 683b ldr r3, [r7, #0]
  34530. 800ed16: 695b ldr r3, [r3, #20]
  34531. 800ed18: 009b lsls r3, r3, #2
  34532. 800ed1a: 693a ldr r2, [r7, #16]
  34533. 800ed1c: 4313 orrs r3, r2
  34534. 800ed1e: 613b str r3, [r7, #16]
  34535. /* Set the Output N Idle state */
  34536. tmpcr2 |= (OC_Config->OCNIdleState << 2U);
  34537. 800ed20: 683b ldr r3, [r7, #0]
  34538. 800ed22: 699b ldr r3, [r3, #24]
  34539. 800ed24: 009b lsls r3, r3, #2
  34540. 800ed26: 693a ldr r2, [r7, #16]
  34541. 800ed28: 4313 orrs r3, r2
  34542. 800ed2a: 613b str r3, [r7, #16]
  34543. }
  34544. /* Write to TIMx CR2 */
  34545. TIMx->CR2 = tmpcr2;
  34546. 800ed2c: 687b ldr r3, [r7, #4]
  34547. 800ed2e: 693a ldr r2, [r7, #16]
  34548. 800ed30: 605a str r2, [r3, #4]
  34549. /* Write to TIMx CCMR1 */
  34550. TIMx->CCMR1 = tmpccmrx;
  34551. 800ed32: 687b ldr r3, [r7, #4]
  34552. 800ed34: 68fa ldr r2, [r7, #12]
  34553. 800ed36: 619a str r2, [r3, #24]
  34554. /* Set the Capture Compare Register value */
  34555. TIMx->CCR2 = OC_Config->Pulse;
  34556. 800ed38: 683b ldr r3, [r7, #0]
  34557. 800ed3a: 685a ldr r2, [r3, #4]
  34558. 800ed3c: 687b ldr r3, [r7, #4]
  34559. 800ed3e: 639a str r2, [r3, #56] @ 0x38
  34560. /* Write to TIMx CCER */
  34561. TIMx->CCER = tmpccer;
  34562. 800ed40: 687b ldr r3, [r7, #4]
  34563. 800ed42: 697a ldr r2, [r7, #20]
  34564. 800ed44: 621a str r2, [r3, #32]
  34565. }
  34566. 800ed46: bf00 nop
  34567. 800ed48: 371c adds r7, #28
  34568. 800ed4a: 46bd mov sp, r7
  34569. 800ed4c: f85d 7b04 ldr.w r7, [sp], #4
  34570. 800ed50: 4770 bx lr
  34571. 800ed52: bf00 nop
  34572. 800ed54: feff8fff .word 0xfeff8fff
  34573. 800ed58: 40010000 .word 0x40010000
  34574. 800ed5c: 40010400 .word 0x40010400
  34575. 800ed60: 40014000 .word 0x40014000
  34576. 800ed64: 40014400 .word 0x40014400
  34577. 800ed68: 40014800 .word 0x40014800
  34578. 0800ed6c <TIM_OC3_SetConfig>:
  34579. * @param TIMx to select the TIM peripheral
  34580. * @param OC_Config The output configuration structure
  34581. * @retval None
  34582. */
  34583. static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
  34584. {
  34585. 800ed6c: b480 push {r7}
  34586. 800ed6e: b087 sub sp, #28
  34587. 800ed70: af00 add r7, sp, #0
  34588. 800ed72: 6078 str r0, [r7, #4]
  34589. 800ed74: 6039 str r1, [r7, #0]
  34590. uint32_t tmpccmrx;
  34591. uint32_t tmpccer;
  34592. uint32_t tmpcr2;
  34593. /* Get the TIMx CCER register value */
  34594. tmpccer = TIMx->CCER;
  34595. 800ed76: 687b ldr r3, [r7, #4]
  34596. 800ed78: 6a1b ldr r3, [r3, #32]
  34597. 800ed7a: 617b str r3, [r7, #20]
  34598. /* Disable the Channel 3: Reset the CC2E Bit */
  34599. TIMx->CCER &= ~TIM_CCER_CC3E;
  34600. 800ed7c: 687b ldr r3, [r7, #4]
  34601. 800ed7e: 6a1b ldr r3, [r3, #32]
  34602. 800ed80: f423 7280 bic.w r2, r3, #256 @ 0x100
  34603. 800ed84: 687b ldr r3, [r7, #4]
  34604. 800ed86: 621a str r2, [r3, #32]
  34605. /* Get the TIMx CR2 register value */
  34606. tmpcr2 = TIMx->CR2;
  34607. 800ed88: 687b ldr r3, [r7, #4]
  34608. 800ed8a: 685b ldr r3, [r3, #4]
  34609. 800ed8c: 613b str r3, [r7, #16]
  34610. /* Get the TIMx CCMR2 register value */
  34611. tmpccmrx = TIMx->CCMR2;
  34612. 800ed8e: 687b ldr r3, [r7, #4]
  34613. 800ed90: 69db ldr r3, [r3, #28]
  34614. 800ed92: 60fb str r3, [r7, #12]
  34615. /* Reset the Output Compare mode and Capture/Compare selection Bits */
  34616. tmpccmrx &= ~TIM_CCMR2_OC3M;
  34617. 800ed94: 68fa ldr r2, [r7, #12]
  34618. 800ed96: 4b33 ldr r3, [pc, #204] @ (800ee64 <TIM_OC3_SetConfig+0xf8>)
  34619. 800ed98: 4013 ands r3, r2
  34620. 800ed9a: 60fb str r3, [r7, #12]
  34621. tmpccmrx &= ~TIM_CCMR2_CC3S;
  34622. 800ed9c: 68fb ldr r3, [r7, #12]
  34623. 800ed9e: f023 0303 bic.w r3, r3, #3
  34624. 800eda2: 60fb str r3, [r7, #12]
  34625. /* Select the Output Compare Mode */
  34626. tmpccmrx |= OC_Config->OCMode;
  34627. 800eda4: 683b ldr r3, [r7, #0]
  34628. 800eda6: 681b ldr r3, [r3, #0]
  34629. 800eda8: 68fa ldr r2, [r7, #12]
  34630. 800edaa: 4313 orrs r3, r2
  34631. 800edac: 60fb str r3, [r7, #12]
  34632. /* Reset the Output Polarity level */
  34633. tmpccer &= ~TIM_CCER_CC3P;
  34634. 800edae: 697b ldr r3, [r7, #20]
  34635. 800edb0: f423 7300 bic.w r3, r3, #512 @ 0x200
  34636. 800edb4: 617b str r3, [r7, #20]
  34637. /* Set the Output Compare Polarity */
  34638. tmpccer |= (OC_Config->OCPolarity << 8U);
  34639. 800edb6: 683b ldr r3, [r7, #0]
  34640. 800edb8: 689b ldr r3, [r3, #8]
  34641. 800edba: 021b lsls r3, r3, #8
  34642. 800edbc: 697a ldr r2, [r7, #20]
  34643. 800edbe: 4313 orrs r3, r2
  34644. 800edc0: 617b str r3, [r7, #20]
  34645. if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3))
  34646. 800edc2: 687b ldr r3, [r7, #4]
  34647. 800edc4: 4a28 ldr r2, [pc, #160] @ (800ee68 <TIM_OC3_SetConfig+0xfc>)
  34648. 800edc6: 4293 cmp r3, r2
  34649. 800edc8: d003 beq.n 800edd2 <TIM_OC3_SetConfig+0x66>
  34650. 800edca: 687b ldr r3, [r7, #4]
  34651. 800edcc: 4a27 ldr r2, [pc, #156] @ (800ee6c <TIM_OC3_SetConfig+0x100>)
  34652. 800edce: 4293 cmp r3, r2
  34653. 800edd0: d10d bne.n 800edee <TIM_OC3_SetConfig+0x82>
  34654. {
  34655. assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));
  34656. /* Reset the Output N Polarity level */
  34657. tmpccer &= ~TIM_CCER_CC3NP;
  34658. 800edd2: 697b ldr r3, [r7, #20]
  34659. 800edd4: f423 6300 bic.w r3, r3, #2048 @ 0x800
  34660. 800edd8: 617b str r3, [r7, #20]
  34661. /* Set the Output N Polarity */
  34662. tmpccer |= (OC_Config->OCNPolarity << 8U);
  34663. 800edda: 683b ldr r3, [r7, #0]
  34664. 800eddc: 68db ldr r3, [r3, #12]
  34665. 800edde: 021b lsls r3, r3, #8
  34666. 800ede0: 697a ldr r2, [r7, #20]
  34667. 800ede2: 4313 orrs r3, r2
  34668. 800ede4: 617b str r3, [r7, #20]
  34669. /* Reset the Output N State */
  34670. tmpccer &= ~TIM_CCER_CC3NE;
  34671. 800ede6: 697b ldr r3, [r7, #20]
  34672. 800ede8: f423 6380 bic.w r3, r3, #1024 @ 0x400
  34673. 800edec: 617b str r3, [r7, #20]
  34674. }
  34675. if (IS_TIM_BREAK_INSTANCE(TIMx))
  34676. 800edee: 687b ldr r3, [r7, #4]
  34677. 800edf0: 4a1d ldr r2, [pc, #116] @ (800ee68 <TIM_OC3_SetConfig+0xfc>)
  34678. 800edf2: 4293 cmp r3, r2
  34679. 800edf4: d00f beq.n 800ee16 <TIM_OC3_SetConfig+0xaa>
  34680. 800edf6: 687b ldr r3, [r7, #4]
  34681. 800edf8: 4a1c ldr r2, [pc, #112] @ (800ee6c <TIM_OC3_SetConfig+0x100>)
  34682. 800edfa: 4293 cmp r3, r2
  34683. 800edfc: d00b beq.n 800ee16 <TIM_OC3_SetConfig+0xaa>
  34684. 800edfe: 687b ldr r3, [r7, #4]
  34685. 800ee00: 4a1b ldr r2, [pc, #108] @ (800ee70 <TIM_OC3_SetConfig+0x104>)
  34686. 800ee02: 4293 cmp r3, r2
  34687. 800ee04: d007 beq.n 800ee16 <TIM_OC3_SetConfig+0xaa>
  34688. 800ee06: 687b ldr r3, [r7, #4]
  34689. 800ee08: 4a1a ldr r2, [pc, #104] @ (800ee74 <TIM_OC3_SetConfig+0x108>)
  34690. 800ee0a: 4293 cmp r3, r2
  34691. 800ee0c: d003 beq.n 800ee16 <TIM_OC3_SetConfig+0xaa>
  34692. 800ee0e: 687b ldr r3, [r7, #4]
  34693. 800ee10: 4a19 ldr r2, [pc, #100] @ (800ee78 <TIM_OC3_SetConfig+0x10c>)
  34694. 800ee12: 4293 cmp r3, r2
  34695. 800ee14: d113 bne.n 800ee3e <TIM_OC3_SetConfig+0xd2>
  34696. /* Check parameters */
  34697. assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));
  34698. assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));
  34699. /* Reset the Output Compare and Output Compare N IDLE State */
  34700. tmpcr2 &= ~TIM_CR2_OIS3;
  34701. 800ee16: 693b ldr r3, [r7, #16]
  34702. 800ee18: f423 5380 bic.w r3, r3, #4096 @ 0x1000
  34703. 800ee1c: 613b str r3, [r7, #16]
  34704. tmpcr2 &= ~TIM_CR2_OIS3N;
  34705. 800ee1e: 693b ldr r3, [r7, #16]
  34706. 800ee20: f423 5300 bic.w r3, r3, #8192 @ 0x2000
  34707. 800ee24: 613b str r3, [r7, #16]
  34708. /* Set the Output Idle state */
  34709. tmpcr2 |= (OC_Config->OCIdleState << 4U);
  34710. 800ee26: 683b ldr r3, [r7, #0]
  34711. 800ee28: 695b ldr r3, [r3, #20]
  34712. 800ee2a: 011b lsls r3, r3, #4
  34713. 800ee2c: 693a ldr r2, [r7, #16]
  34714. 800ee2e: 4313 orrs r3, r2
  34715. 800ee30: 613b str r3, [r7, #16]
  34716. /* Set the Output N Idle state */
  34717. tmpcr2 |= (OC_Config->OCNIdleState << 4U);
  34718. 800ee32: 683b ldr r3, [r7, #0]
  34719. 800ee34: 699b ldr r3, [r3, #24]
  34720. 800ee36: 011b lsls r3, r3, #4
  34721. 800ee38: 693a ldr r2, [r7, #16]
  34722. 800ee3a: 4313 orrs r3, r2
  34723. 800ee3c: 613b str r3, [r7, #16]
  34724. }
  34725. /* Write to TIMx CR2 */
  34726. TIMx->CR2 = tmpcr2;
  34727. 800ee3e: 687b ldr r3, [r7, #4]
  34728. 800ee40: 693a ldr r2, [r7, #16]
  34729. 800ee42: 605a str r2, [r3, #4]
  34730. /* Write to TIMx CCMR2 */
  34731. TIMx->CCMR2 = tmpccmrx;
  34732. 800ee44: 687b ldr r3, [r7, #4]
  34733. 800ee46: 68fa ldr r2, [r7, #12]
  34734. 800ee48: 61da str r2, [r3, #28]
  34735. /* Set the Capture Compare Register value */
  34736. TIMx->CCR3 = OC_Config->Pulse;
  34737. 800ee4a: 683b ldr r3, [r7, #0]
  34738. 800ee4c: 685a ldr r2, [r3, #4]
  34739. 800ee4e: 687b ldr r3, [r7, #4]
  34740. 800ee50: 63da str r2, [r3, #60] @ 0x3c
  34741. /* Write to TIMx CCER */
  34742. TIMx->CCER = tmpccer;
  34743. 800ee52: 687b ldr r3, [r7, #4]
  34744. 800ee54: 697a ldr r2, [r7, #20]
  34745. 800ee56: 621a str r2, [r3, #32]
  34746. }
  34747. 800ee58: bf00 nop
  34748. 800ee5a: 371c adds r7, #28
  34749. 800ee5c: 46bd mov sp, r7
  34750. 800ee5e: f85d 7b04 ldr.w r7, [sp], #4
  34751. 800ee62: 4770 bx lr
  34752. 800ee64: fffeff8f .word 0xfffeff8f
  34753. 800ee68: 40010000 .word 0x40010000
  34754. 800ee6c: 40010400 .word 0x40010400
  34755. 800ee70: 40014000 .word 0x40014000
  34756. 800ee74: 40014400 .word 0x40014400
  34757. 800ee78: 40014800 .word 0x40014800
  34758. 0800ee7c <TIM_OC4_SetConfig>:
  34759. * @param TIMx to select the TIM peripheral
  34760. * @param OC_Config The output configuration structure
  34761. * @retval None
  34762. */
  34763. static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
  34764. {
  34765. 800ee7c: b480 push {r7}
  34766. 800ee7e: b087 sub sp, #28
  34767. 800ee80: af00 add r7, sp, #0
  34768. 800ee82: 6078 str r0, [r7, #4]
  34769. 800ee84: 6039 str r1, [r7, #0]
  34770. uint32_t tmpccmrx;
  34771. uint32_t tmpccer;
  34772. uint32_t tmpcr2;
  34773. /* Get the TIMx CCER register value */
  34774. tmpccer = TIMx->CCER;
  34775. 800ee86: 687b ldr r3, [r7, #4]
  34776. 800ee88: 6a1b ldr r3, [r3, #32]
  34777. 800ee8a: 613b str r3, [r7, #16]
  34778. /* Disable the Channel 4: Reset the CC4E Bit */
  34779. TIMx->CCER &= ~TIM_CCER_CC4E;
  34780. 800ee8c: 687b ldr r3, [r7, #4]
  34781. 800ee8e: 6a1b ldr r3, [r3, #32]
  34782. 800ee90: f423 5280 bic.w r2, r3, #4096 @ 0x1000
  34783. 800ee94: 687b ldr r3, [r7, #4]
  34784. 800ee96: 621a str r2, [r3, #32]
  34785. /* Get the TIMx CR2 register value */
  34786. tmpcr2 = TIMx->CR2;
  34787. 800ee98: 687b ldr r3, [r7, #4]
  34788. 800ee9a: 685b ldr r3, [r3, #4]
  34789. 800ee9c: 617b str r3, [r7, #20]
  34790. /* Get the TIMx CCMR2 register value */
  34791. tmpccmrx = TIMx->CCMR2;
  34792. 800ee9e: 687b ldr r3, [r7, #4]
  34793. 800eea0: 69db ldr r3, [r3, #28]
  34794. 800eea2: 60fb str r3, [r7, #12]
  34795. /* Reset the Output Compare mode and Capture/Compare selection Bits */
  34796. tmpccmrx &= ~TIM_CCMR2_OC4M;
  34797. 800eea4: 68fa ldr r2, [r7, #12]
  34798. 800eea6: 4b24 ldr r3, [pc, #144] @ (800ef38 <TIM_OC4_SetConfig+0xbc>)
  34799. 800eea8: 4013 ands r3, r2
  34800. 800eeaa: 60fb str r3, [r7, #12]
  34801. tmpccmrx &= ~TIM_CCMR2_CC4S;
  34802. 800eeac: 68fb ldr r3, [r7, #12]
  34803. 800eeae: f423 7340 bic.w r3, r3, #768 @ 0x300
  34804. 800eeb2: 60fb str r3, [r7, #12]
  34805. /* Select the Output Compare Mode */
  34806. tmpccmrx |= (OC_Config->OCMode << 8U);
  34807. 800eeb4: 683b ldr r3, [r7, #0]
  34808. 800eeb6: 681b ldr r3, [r3, #0]
  34809. 800eeb8: 021b lsls r3, r3, #8
  34810. 800eeba: 68fa ldr r2, [r7, #12]
  34811. 800eebc: 4313 orrs r3, r2
  34812. 800eebe: 60fb str r3, [r7, #12]
  34813. /* Reset the Output Polarity level */
  34814. tmpccer &= ~TIM_CCER_CC4P;
  34815. 800eec0: 693b ldr r3, [r7, #16]
  34816. 800eec2: f423 5300 bic.w r3, r3, #8192 @ 0x2000
  34817. 800eec6: 613b str r3, [r7, #16]
  34818. /* Set the Output Compare Polarity */
  34819. tmpccer |= (OC_Config->OCPolarity << 12U);
  34820. 800eec8: 683b ldr r3, [r7, #0]
  34821. 800eeca: 689b ldr r3, [r3, #8]
  34822. 800eecc: 031b lsls r3, r3, #12
  34823. 800eece: 693a ldr r2, [r7, #16]
  34824. 800eed0: 4313 orrs r3, r2
  34825. 800eed2: 613b str r3, [r7, #16]
  34826. if (IS_TIM_BREAK_INSTANCE(TIMx))
  34827. 800eed4: 687b ldr r3, [r7, #4]
  34828. 800eed6: 4a19 ldr r2, [pc, #100] @ (800ef3c <TIM_OC4_SetConfig+0xc0>)
  34829. 800eed8: 4293 cmp r3, r2
  34830. 800eeda: d00f beq.n 800eefc <TIM_OC4_SetConfig+0x80>
  34831. 800eedc: 687b ldr r3, [r7, #4]
  34832. 800eede: 4a18 ldr r2, [pc, #96] @ (800ef40 <TIM_OC4_SetConfig+0xc4>)
  34833. 800eee0: 4293 cmp r3, r2
  34834. 800eee2: d00b beq.n 800eefc <TIM_OC4_SetConfig+0x80>
  34835. 800eee4: 687b ldr r3, [r7, #4]
  34836. 800eee6: 4a17 ldr r2, [pc, #92] @ (800ef44 <TIM_OC4_SetConfig+0xc8>)
  34837. 800eee8: 4293 cmp r3, r2
  34838. 800eeea: d007 beq.n 800eefc <TIM_OC4_SetConfig+0x80>
  34839. 800eeec: 687b ldr r3, [r7, #4]
  34840. 800eeee: 4a16 ldr r2, [pc, #88] @ (800ef48 <TIM_OC4_SetConfig+0xcc>)
  34841. 800eef0: 4293 cmp r3, r2
  34842. 800eef2: d003 beq.n 800eefc <TIM_OC4_SetConfig+0x80>
  34843. 800eef4: 687b ldr r3, [r7, #4]
  34844. 800eef6: 4a15 ldr r2, [pc, #84] @ (800ef4c <TIM_OC4_SetConfig+0xd0>)
  34845. 800eef8: 4293 cmp r3, r2
  34846. 800eefa: d109 bne.n 800ef10 <TIM_OC4_SetConfig+0x94>
  34847. {
  34848. /* Check parameters */
  34849. assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));
  34850. /* Reset the Output Compare IDLE State */
  34851. tmpcr2 &= ~TIM_CR2_OIS4;
  34852. 800eefc: 697b ldr r3, [r7, #20]
  34853. 800eefe: f423 4380 bic.w r3, r3, #16384 @ 0x4000
  34854. 800ef02: 617b str r3, [r7, #20]
  34855. /* Set the Output Idle state */
  34856. tmpcr2 |= (OC_Config->OCIdleState << 6U);
  34857. 800ef04: 683b ldr r3, [r7, #0]
  34858. 800ef06: 695b ldr r3, [r3, #20]
  34859. 800ef08: 019b lsls r3, r3, #6
  34860. 800ef0a: 697a ldr r2, [r7, #20]
  34861. 800ef0c: 4313 orrs r3, r2
  34862. 800ef0e: 617b str r3, [r7, #20]
  34863. }
  34864. /* Write to TIMx CR2 */
  34865. TIMx->CR2 = tmpcr2;
  34866. 800ef10: 687b ldr r3, [r7, #4]
  34867. 800ef12: 697a ldr r2, [r7, #20]
  34868. 800ef14: 605a str r2, [r3, #4]
  34869. /* Write to TIMx CCMR2 */
  34870. TIMx->CCMR2 = tmpccmrx;
  34871. 800ef16: 687b ldr r3, [r7, #4]
  34872. 800ef18: 68fa ldr r2, [r7, #12]
  34873. 800ef1a: 61da str r2, [r3, #28]
  34874. /* Set the Capture Compare Register value */
  34875. TIMx->CCR4 = OC_Config->Pulse;
  34876. 800ef1c: 683b ldr r3, [r7, #0]
  34877. 800ef1e: 685a ldr r2, [r3, #4]
  34878. 800ef20: 687b ldr r3, [r7, #4]
  34879. 800ef22: 641a str r2, [r3, #64] @ 0x40
  34880. /* Write to TIMx CCER */
  34881. TIMx->CCER = tmpccer;
  34882. 800ef24: 687b ldr r3, [r7, #4]
  34883. 800ef26: 693a ldr r2, [r7, #16]
  34884. 800ef28: 621a str r2, [r3, #32]
  34885. }
  34886. 800ef2a: bf00 nop
  34887. 800ef2c: 371c adds r7, #28
  34888. 800ef2e: 46bd mov sp, r7
  34889. 800ef30: f85d 7b04 ldr.w r7, [sp], #4
  34890. 800ef34: 4770 bx lr
  34891. 800ef36: bf00 nop
  34892. 800ef38: feff8fff .word 0xfeff8fff
  34893. 800ef3c: 40010000 .word 0x40010000
  34894. 800ef40: 40010400 .word 0x40010400
  34895. 800ef44: 40014000 .word 0x40014000
  34896. 800ef48: 40014400 .word 0x40014400
  34897. 800ef4c: 40014800 .word 0x40014800
  34898. 0800ef50 <TIM_OC5_SetConfig>:
  34899. * @param OC_Config The output configuration structure
  34900. * @retval None
  34901. */
  34902. static void TIM_OC5_SetConfig(TIM_TypeDef *TIMx,
  34903. const TIM_OC_InitTypeDef *OC_Config)
  34904. {
  34905. 800ef50: b480 push {r7}
  34906. 800ef52: b087 sub sp, #28
  34907. 800ef54: af00 add r7, sp, #0
  34908. 800ef56: 6078 str r0, [r7, #4]
  34909. 800ef58: 6039 str r1, [r7, #0]
  34910. uint32_t tmpccmrx;
  34911. uint32_t tmpccer;
  34912. uint32_t tmpcr2;
  34913. /* Get the TIMx CCER register value */
  34914. tmpccer = TIMx->CCER;
  34915. 800ef5a: 687b ldr r3, [r7, #4]
  34916. 800ef5c: 6a1b ldr r3, [r3, #32]
  34917. 800ef5e: 613b str r3, [r7, #16]
  34918. /* Disable the output: Reset the CCxE Bit */
  34919. TIMx->CCER &= ~TIM_CCER_CC5E;
  34920. 800ef60: 687b ldr r3, [r7, #4]
  34921. 800ef62: 6a1b ldr r3, [r3, #32]
  34922. 800ef64: f423 3280 bic.w r2, r3, #65536 @ 0x10000
  34923. 800ef68: 687b ldr r3, [r7, #4]
  34924. 800ef6a: 621a str r2, [r3, #32]
  34925. /* Get the TIMx CR2 register value */
  34926. tmpcr2 = TIMx->CR2;
  34927. 800ef6c: 687b ldr r3, [r7, #4]
  34928. 800ef6e: 685b ldr r3, [r3, #4]
  34929. 800ef70: 617b str r3, [r7, #20]
  34930. /* Get the TIMx CCMR1 register value */
  34931. tmpccmrx = TIMx->CCMR3;
  34932. 800ef72: 687b ldr r3, [r7, #4]
  34933. 800ef74: 6d5b ldr r3, [r3, #84] @ 0x54
  34934. 800ef76: 60fb str r3, [r7, #12]
  34935. /* Reset the Output Compare Mode Bits */
  34936. tmpccmrx &= ~(TIM_CCMR3_OC5M);
  34937. 800ef78: 68fa ldr r2, [r7, #12]
  34938. 800ef7a: 4b21 ldr r3, [pc, #132] @ (800f000 <TIM_OC5_SetConfig+0xb0>)
  34939. 800ef7c: 4013 ands r3, r2
  34940. 800ef7e: 60fb str r3, [r7, #12]
  34941. /* Select the Output Compare Mode */
  34942. tmpccmrx |= OC_Config->OCMode;
  34943. 800ef80: 683b ldr r3, [r7, #0]
  34944. 800ef82: 681b ldr r3, [r3, #0]
  34945. 800ef84: 68fa ldr r2, [r7, #12]
  34946. 800ef86: 4313 orrs r3, r2
  34947. 800ef88: 60fb str r3, [r7, #12]
  34948. /* Reset the Output Polarity level */
  34949. tmpccer &= ~TIM_CCER_CC5P;
  34950. 800ef8a: 693b ldr r3, [r7, #16]
  34951. 800ef8c: f423 3300 bic.w r3, r3, #131072 @ 0x20000
  34952. 800ef90: 613b str r3, [r7, #16]
  34953. /* Set the Output Compare Polarity */
  34954. tmpccer |= (OC_Config->OCPolarity << 16U);
  34955. 800ef92: 683b ldr r3, [r7, #0]
  34956. 800ef94: 689b ldr r3, [r3, #8]
  34957. 800ef96: 041b lsls r3, r3, #16
  34958. 800ef98: 693a ldr r2, [r7, #16]
  34959. 800ef9a: 4313 orrs r3, r2
  34960. 800ef9c: 613b str r3, [r7, #16]
  34961. if (IS_TIM_BREAK_INSTANCE(TIMx))
  34962. 800ef9e: 687b ldr r3, [r7, #4]
  34963. 800efa0: 4a18 ldr r2, [pc, #96] @ (800f004 <TIM_OC5_SetConfig+0xb4>)
  34964. 800efa2: 4293 cmp r3, r2
  34965. 800efa4: d00f beq.n 800efc6 <TIM_OC5_SetConfig+0x76>
  34966. 800efa6: 687b ldr r3, [r7, #4]
  34967. 800efa8: 4a17 ldr r2, [pc, #92] @ (800f008 <TIM_OC5_SetConfig+0xb8>)
  34968. 800efaa: 4293 cmp r3, r2
  34969. 800efac: d00b beq.n 800efc6 <TIM_OC5_SetConfig+0x76>
  34970. 800efae: 687b ldr r3, [r7, #4]
  34971. 800efb0: 4a16 ldr r2, [pc, #88] @ (800f00c <TIM_OC5_SetConfig+0xbc>)
  34972. 800efb2: 4293 cmp r3, r2
  34973. 800efb4: d007 beq.n 800efc6 <TIM_OC5_SetConfig+0x76>
  34974. 800efb6: 687b ldr r3, [r7, #4]
  34975. 800efb8: 4a15 ldr r2, [pc, #84] @ (800f010 <TIM_OC5_SetConfig+0xc0>)
  34976. 800efba: 4293 cmp r3, r2
  34977. 800efbc: d003 beq.n 800efc6 <TIM_OC5_SetConfig+0x76>
  34978. 800efbe: 687b ldr r3, [r7, #4]
  34979. 800efc0: 4a14 ldr r2, [pc, #80] @ (800f014 <TIM_OC5_SetConfig+0xc4>)
  34980. 800efc2: 4293 cmp r3, r2
  34981. 800efc4: d109 bne.n 800efda <TIM_OC5_SetConfig+0x8a>
  34982. {
  34983. /* Reset the Output Compare IDLE State */
  34984. tmpcr2 &= ~TIM_CR2_OIS5;
  34985. 800efc6: 697b ldr r3, [r7, #20]
  34986. 800efc8: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  34987. 800efcc: 617b str r3, [r7, #20]
  34988. /* Set the Output Idle state */
  34989. tmpcr2 |= (OC_Config->OCIdleState << 8U);
  34990. 800efce: 683b ldr r3, [r7, #0]
  34991. 800efd0: 695b ldr r3, [r3, #20]
  34992. 800efd2: 021b lsls r3, r3, #8
  34993. 800efd4: 697a ldr r2, [r7, #20]
  34994. 800efd6: 4313 orrs r3, r2
  34995. 800efd8: 617b str r3, [r7, #20]
  34996. }
  34997. /* Write to TIMx CR2 */
  34998. TIMx->CR2 = tmpcr2;
  34999. 800efda: 687b ldr r3, [r7, #4]
  35000. 800efdc: 697a ldr r2, [r7, #20]
  35001. 800efde: 605a str r2, [r3, #4]
  35002. /* Write to TIMx CCMR3 */
  35003. TIMx->CCMR3 = tmpccmrx;
  35004. 800efe0: 687b ldr r3, [r7, #4]
  35005. 800efe2: 68fa ldr r2, [r7, #12]
  35006. 800efe4: 655a str r2, [r3, #84] @ 0x54
  35007. /* Set the Capture Compare Register value */
  35008. TIMx->CCR5 = OC_Config->Pulse;
  35009. 800efe6: 683b ldr r3, [r7, #0]
  35010. 800efe8: 685a ldr r2, [r3, #4]
  35011. 800efea: 687b ldr r3, [r7, #4]
  35012. 800efec: 659a str r2, [r3, #88] @ 0x58
  35013. /* Write to TIMx CCER */
  35014. TIMx->CCER = tmpccer;
  35015. 800efee: 687b ldr r3, [r7, #4]
  35016. 800eff0: 693a ldr r2, [r7, #16]
  35017. 800eff2: 621a str r2, [r3, #32]
  35018. }
  35019. 800eff4: bf00 nop
  35020. 800eff6: 371c adds r7, #28
  35021. 800eff8: 46bd mov sp, r7
  35022. 800effa: f85d 7b04 ldr.w r7, [sp], #4
  35023. 800effe: 4770 bx lr
  35024. 800f000: fffeff8f .word 0xfffeff8f
  35025. 800f004: 40010000 .word 0x40010000
  35026. 800f008: 40010400 .word 0x40010400
  35027. 800f00c: 40014000 .word 0x40014000
  35028. 800f010: 40014400 .word 0x40014400
  35029. 800f014: 40014800 .word 0x40014800
  35030. 0800f018 <TIM_OC6_SetConfig>:
  35031. * @param OC_Config The output configuration structure
  35032. * @retval None
  35033. */
  35034. static void TIM_OC6_SetConfig(TIM_TypeDef *TIMx,
  35035. const TIM_OC_InitTypeDef *OC_Config)
  35036. {
  35037. 800f018: b480 push {r7}
  35038. 800f01a: b087 sub sp, #28
  35039. 800f01c: af00 add r7, sp, #0
  35040. 800f01e: 6078 str r0, [r7, #4]
  35041. 800f020: 6039 str r1, [r7, #0]
  35042. uint32_t tmpccmrx;
  35043. uint32_t tmpccer;
  35044. uint32_t tmpcr2;
  35045. /* Get the TIMx CCER register value */
  35046. tmpccer = TIMx->CCER;
  35047. 800f022: 687b ldr r3, [r7, #4]
  35048. 800f024: 6a1b ldr r3, [r3, #32]
  35049. 800f026: 613b str r3, [r7, #16]
  35050. /* Disable the output: Reset the CCxE Bit */
  35051. TIMx->CCER &= ~TIM_CCER_CC6E;
  35052. 800f028: 687b ldr r3, [r7, #4]
  35053. 800f02a: 6a1b ldr r3, [r3, #32]
  35054. 800f02c: f423 1280 bic.w r2, r3, #1048576 @ 0x100000
  35055. 800f030: 687b ldr r3, [r7, #4]
  35056. 800f032: 621a str r2, [r3, #32]
  35057. /* Get the TIMx CR2 register value */
  35058. tmpcr2 = TIMx->CR2;
  35059. 800f034: 687b ldr r3, [r7, #4]
  35060. 800f036: 685b ldr r3, [r3, #4]
  35061. 800f038: 617b str r3, [r7, #20]
  35062. /* Get the TIMx CCMR1 register value */
  35063. tmpccmrx = TIMx->CCMR3;
  35064. 800f03a: 687b ldr r3, [r7, #4]
  35065. 800f03c: 6d5b ldr r3, [r3, #84] @ 0x54
  35066. 800f03e: 60fb str r3, [r7, #12]
  35067. /* Reset the Output Compare Mode Bits */
  35068. tmpccmrx &= ~(TIM_CCMR3_OC6M);
  35069. 800f040: 68fa ldr r2, [r7, #12]
  35070. 800f042: 4b22 ldr r3, [pc, #136] @ (800f0cc <TIM_OC6_SetConfig+0xb4>)
  35071. 800f044: 4013 ands r3, r2
  35072. 800f046: 60fb str r3, [r7, #12]
  35073. /* Select the Output Compare Mode */
  35074. tmpccmrx |= (OC_Config->OCMode << 8U);
  35075. 800f048: 683b ldr r3, [r7, #0]
  35076. 800f04a: 681b ldr r3, [r3, #0]
  35077. 800f04c: 021b lsls r3, r3, #8
  35078. 800f04e: 68fa ldr r2, [r7, #12]
  35079. 800f050: 4313 orrs r3, r2
  35080. 800f052: 60fb str r3, [r7, #12]
  35081. /* Reset the Output Polarity level */
  35082. tmpccer &= (uint32_t)~TIM_CCER_CC6P;
  35083. 800f054: 693b ldr r3, [r7, #16]
  35084. 800f056: f423 1300 bic.w r3, r3, #2097152 @ 0x200000
  35085. 800f05a: 613b str r3, [r7, #16]
  35086. /* Set the Output Compare Polarity */
  35087. tmpccer |= (OC_Config->OCPolarity << 20U);
  35088. 800f05c: 683b ldr r3, [r7, #0]
  35089. 800f05e: 689b ldr r3, [r3, #8]
  35090. 800f060: 051b lsls r3, r3, #20
  35091. 800f062: 693a ldr r2, [r7, #16]
  35092. 800f064: 4313 orrs r3, r2
  35093. 800f066: 613b str r3, [r7, #16]
  35094. if (IS_TIM_BREAK_INSTANCE(TIMx))
  35095. 800f068: 687b ldr r3, [r7, #4]
  35096. 800f06a: 4a19 ldr r2, [pc, #100] @ (800f0d0 <TIM_OC6_SetConfig+0xb8>)
  35097. 800f06c: 4293 cmp r3, r2
  35098. 800f06e: d00f beq.n 800f090 <TIM_OC6_SetConfig+0x78>
  35099. 800f070: 687b ldr r3, [r7, #4]
  35100. 800f072: 4a18 ldr r2, [pc, #96] @ (800f0d4 <TIM_OC6_SetConfig+0xbc>)
  35101. 800f074: 4293 cmp r3, r2
  35102. 800f076: d00b beq.n 800f090 <TIM_OC6_SetConfig+0x78>
  35103. 800f078: 687b ldr r3, [r7, #4]
  35104. 800f07a: 4a17 ldr r2, [pc, #92] @ (800f0d8 <TIM_OC6_SetConfig+0xc0>)
  35105. 800f07c: 4293 cmp r3, r2
  35106. 800f07e: d007 beq.n 800f090 <TIM_OC6_SetConfig+0x78>
  35107. 800f080: 687b ldr r3, [r7, #4]
  35108. 800f082: 4a16 ldr r2, [pc, #88] @ (800f0dc <TIM_OC6_SetConfig+0xc4>)
  35109. 800f084: 4293 cmp r3, r2
  35110. 800f086: d003 beq.n 800f090 <TIM_OC6_SetConfig+0x78>
  35111. 800f088: 687b ldr r3, [r7, #4]
  35112. 800f08a: 4a15 ldr r2, [pc, #84] @ (800f0e0 <TIM_OC6_SetConfig+0xc8>)
  35113. 800f08c: 4293 cmp r3, r2
  35114. 800f08e: d109 bne.n 800f0a4 <TIM_OC6_SetConfig+0x8c>
  35115. {
  35116. /* Reset the Output Compare IDLE State */
  35117. tmpcr2 &= ~TIM_CR2_OIS6;
  35118. 800f090: 697b ldr r3, [r7, #20]
  35119. 800f092: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  35120. 800f096: 617b str r3, [r7, #20]
  35121. /* Set the Output Idle state */
  35122. tmpcr2 |= (OC_Config->OCIdleState << 10U);
  35123. 800f098: 683b ldr r3, [r7, #0]
  35124. 800f09a: 695b ldr r3, [r3, #20]
  35125. 800f09c: 029b lsls r3, r3, #10
  35126. 800f09e: 697a ldr r2, [r7, #20]
  35127. 800f0a0: 4313 orrs r3, r2
  35128. 800f0a2: 617b str r3, [r7, #20]
  35129. }
  35130. /* Write to TIMx CR2 */
  35131. TIMx->CR2 = tmpcr2;
  35132. 800f0a4: 687b ldr r3, [r7, #4]
  35133. 800f0a6: 697a ldr r2, [r7, #20]
  35134. 800f0a8: 605a str r2, [r3, #4]
  35135. /* Write to TIMx CCMR3 */
  35136. TIMx->CCMR3 = tmpccmrx;
  35137. 800f0aa: 687b ldr r3, [r7, #4]
  35138. 800f0ac: 68fa ldr r2, [r7, #12]
  35139. 800f0ae: 655a str r2, [r3, #84] @ 0x54
  35140. /* Set the Capture Compare Register value */
  35141. TIMx->CCR6 = OC_Config->Pulse;
  35142. 800f0b0: 683b ldr r3, [r7, #0]
  35143. 800f0b2: 685a ldr r2, [r3, #4]
  35144. 800f0b4: 687b ldr r3, [r7, #4]
  35145. 800f0b6: 65da str r2, [r3, #92] @ 0x5c
  35146. /* Write to TIMx CCER */
  35147. TIMx->CCER = tmpccer;
  35148. 800f0b8: 687b ldr r3, [r7, #4]
  35149. 800f0ba: 693a ldr r2, [r7, #16]
  35150. 800f0bc: 621a str r2, [r3, #32]
  35151. }
  35152. 800f0be: bf00 nop
  35153. 800f0c0: 371c adds r7, #28
  35154. 800f0c2: 46bd mov sp, r7
  35155. 800f0c4: f85d 7b04 ldr.w r7, [sp], #4
  35156. 800f0c8: 4770 bx lr
  35157. 800f0ca: bf00 nop
  35158. 800f0cc: feff8fff .word 0xfeff8fff
  35159. 800f0d0: 40010000 .word 0x40010000
  35160. 800f0d4: 40010400 .word 0x40010400
  35161. 800f0d8: 40014000 .word 0x40014000
  35162. 800f0dc: 40014400 .word 0x40014400
  35163. 800f0e0: 40014800 .word 0x40014800
  35164. 0800f0e4 <TIM_TI1_ConfigInputStage>:
  35165. * @param TIM_ICFilter Specifies the Input Capture Filter.
  35166. * This parameter must be a value between 0x00 and 0x0F.
  35167. * @retval None
  35168. */
  35169. static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)
  35170. {
  35171. 800f0e4: b480 push {r7}
  35172. 800f0e6: b087 sub sp, #28
  35173. 800f0e8: af00 add r7, sp, #0
  35174. 800f0ea: 60f8 str r0, [r7, #12]
  35175. 800f0ec: 60b9 str r1, [r7, #8]
  35176. 800f0ee: 607a str r2, [r7, #4]
  35177. uint32_t tmpccmr1;
  35178. uint32_t tmpccer;
  35179. /* Disable the Channel 1: Reset the CC1E Bit */
  35180. tmpccer = TIMx->CCER;
  35181. 800f0f0: 68fb ldr r3, [r7, #12]
  35182. 800f0f2: 6a1b ldr r3, [r3, #32]
  35183. 800f0f4: 617b str r3, [r7, #20]
  35184. TIMx->CCER &= ~TIM_CCER_CC1E;
  35185. 800f0f6: 68fb ldr r3, [r7, #12]
  35186. 800f0f8: 6a1b ldr r3, [r3, #32]
  35187. 800f0fa: f023 0201 bic.w r2, r3, #1
  35188. 800f0fe: 68fb ldr r3, [r7, #12]
  35189. 800f100: 621a str r2, [r3, #32]
  35190. tmpccmr1 = TIMx->CCMR1;
  35191. 800f102: 68fb ldr r3, [r7, #12]
  35192. 800f104: 699b ldr r3, [r3, #24]
  35193. 800f106: 613b str r3, [r7, #16]
  35194. /* Set the filter */
  35195. tmpccmr1 &= ~TIM_CCMR1_IC1F;
  35196. 800f108: 693b ldr r3, [r7, #16]
  35197. 800f10a: f023 03f0 bic.w r3, r3, #240 @ 0xf0
  35198. 800f10e: 613b str r3, [r7, #16]
  35199. tmpccmr1 |= (TIM_ICFilter << 4U);
  35200. 800f110: 687b ldr r3, [r7, #4]
  35201. 800f112: 011b lsls r3, r3, #4
  35202. 800f114: 693a ldr r2, [r7, #16]
  35203. 800f116: 4313 orrs r3, r2
  35204. 800f118: 613b str r3, [r7, #16]
  35205. /* Select the Polarity and set the CC1E Bit */
  35206. tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);
  35207. 800f11a: 697b ldr r3, [r7, #20]
  35208. 800f11c: f023 030a bic.w r3, r3, #10
  35209. 800f120: 617b str r3, [r7, #20]
  35210. tmpccer |= TIM_ICPolarity;
  35211. 800f122: 697a ldr r2, [r7, #20]
  35212. 800f124: 68bb ldr r3, [r7, #8]
  35213. 800f126: 4313 orrs r3, r2
  35214. 800f128: 617b str r3, [r7, #20]
  35215. /* Write to TIMx CCMR1 and CCER registers */
  35216. TIMx->CCMR1 = tmpccmr1;
  35217. 800f12a: 68fb ldr r3, [r7, #12]
  35218. 800f12c: 693a ldr r2, [r7, #16]
  35219. 800f12e: 619a str r2, [r3, #24]
  35220. TIMx->CCER = tmpccer;
  35221. 800f130: 68fb ldr r3, [r7, #12]
  35222. 800f132: 697a ldr r2, [r7, #20]
  35223. 800f134: 621a str r2, [r3, #32]
  35224. }
  35225. 800f136: bf00 nop
  35226. 800f138: 371c adds r7, #28
  35227. 800f13a: 46bd mov sp, r7
  35228. 800f13c: f85d 7b04 ldr.w r7, [sp], #4
  35229. 800f140: 4770 bx lr
  35230. 0800f142 <TIM_TI2_ConfigInputStage>:
  35231. * @param TIM_ICFilter Specifies the Input Capture Filter.
  35232. * This parameter must be a value between 0x00 and 0x0F.
  35233. * @retval None
  35234. */
  35235. static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)
  35236. {
  35237. 800f142: b480 push {r7}
  35238. 800f144: b087 sub sp, #28
  35239. 800f146: af00 add r7, sp, #0
  35240. 800f148: 60f8 str r0, [r7, #12]
  35241. 800f14a: 60b9 str r1, [r7, #8]
  35242. 800f14c: 607a str r2, [r7, #4]
  35243. uint32_t tmpccmr1;
  35244. uint32_t tmpccer;
  35245. /* Disable the Channel 2: Reset the CC2E Bit */
  35246. tmpccer = TIMx->CCER;
  35247. 800f14e: 68fb ldr r3, [r7, #12]
  35248. 800f150: 6a1b ldr r3, [r3, #32]
  35249. 800f152: 617b str r3, [r7, #20]
  35250. TIMx->CCER &= ~TIM_CCER_CC2E;
  35251. 800f154: 68fb ldr r3, [r7, #12]
  35252. 800f156: 6a1b ldr r3, [r3, #32]
  35253. 800f158: f023 0210 bic.w r2, r3, #16
  35254. 800f15c: 68fb ldr r3, [r7, #12]
  35255. 800f15e: 621a str r2, [r3, #32]
  35256. tmpccmr1 = TIMx->CCMR1;
  35257. 800f160: 68fb ldr r3, [r7, #12]
  35258. 800f162: 699b ldr r3, [r3, #24]
  35259. 800f164: 613b str r3, [r7, #16]
  35260. /* Set the filter */
  35261. tmpccmr1 &= ~TIM_CCMR1_IC2F;
  35262. 800f166: 693b ldr r3, [r7, #16]
  35263. 800f168: f423 4370 bic.w r3, r3, #61440 @ 0xf000
  35264. 800f16c: 613b str r3, [r7, #16]
  35265. tmpccmr1 |= (TIM_ICFilter << 12U);
  35266. 800f16e: 687b ldr r3, [r7, #4]
  35267. 800f170: 031b lsls r3, r3, #12
  35268. 800f172: 693a ldr r2, [r7, #16]
  35269. 800f174: 4313 orrs r3, r2
  35270. 800f176: 613b str r3, [r7, #16]
  35271. /* Select the Polarity and set the CC2E Bit */
  35272. tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);
  35273. 800f178: 697b ldr r3, [r7, #20]
  35274. 800f17a: f023 03a0 bic.w r3, r3, #160 @ 0xa0
  35275. 800f17e: 617b str r3, [r7, #20]
  35276. tmpccer |= (TIM_ICPolarity << 4U);
  35277. 800f180: 68bb ldr r3, [r7, #8]
  35278. 800f182: 011b lsls r3, r3, #4
  35279. 800f184: 697a ldr r2, [r7, #20]
  35280. 800f186: 4313 orrs r3, r2
  35281. 800f188: 617b str r3, [r7, #20]
  35282. /* Write to TIMx CCMR1 and CCER registers */
  35283. TIMx->CCMR1 = tmpccmr1 ;
  35284. 800f18a: 68fb ldr r3, [r7, #12]
  35285. 800f18c: 693a ldr r2, [r7, #16]
  35286. 800f18e: 619a str r2, [r3, #24]
  35287. TIMx->CCER = tmpccer;
  35288. 800f190: 68fb ldr r3, [r7, #12]
  35289. 800f192: 697a ldr r2, [r7, #20]
  35290. 800f194: 621a str r2, [r3, #32]
  35291. }
  35292. 800f196: bf00 nop
  35293. 800f198: 371c adds r7, #28
  35294. 800f19a: 46bd mov sp, r7
  35295. 800f19c: f85d 7b04 ldr.w r7, [sp], #4
  35296. 800f1a0: 4770 bx lr
  35297. ...
  35298. 0800f1a4 <TIM_ITRx_SetConfig>:
  35299. * (*) Value not defined in all devices.
  35300. *
  35301. * @retval None
  35302. */
  35303. static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource)
  35304. {
  35305. 800f1a4: b480 push {r7}
  35306. 800f1a6: b085 sub sp, #20
  35307. 800f1a8: af00 add r7, sp, #0
  35308. 800f1aa: 6078 str r0, [r7, #4]
  35309. 800f1ac: 6039 str r1, [r7, #0]
  35310. uint32_t tmpsmcr;
  35311. /* Get the TIMx SMCR register value */
  35312. tmpsmcr = TIMx->SMCR;
  35313. 800f1ae: 687b ldr r3, [r7, #4]
  35314. 800f1b0: 689b ldr r3, [r3, #8]
  35315. 800f1b2: 60fb str r3, [r7, #12]
  35316. /* Reset the TS Bits */
  35317. tmpsmcr &= ~TIM_SMCR_TS;
  35318. 800f1b4: 68fa ldr r2, [r7, #12]
  35319. 800f1b6: 4b09 ldr r3, [pc, #36] @ (800f1dc <TIM_ITRx_SetConfig+0x38>)
  35320. 800f1b8: 4013 ands r3, r2
  35321. 800f1ba: 60fb str r3, [r7, #12]
  35322. /* Set the Input Trigger source and the slave mode*/
  35323. tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1);
  35324. 800f1bc: 683a ldr r2, [r7, #0]
  35325. 800f1be: 68fb ldr r3, [r7, #12]
  35326. 800f1c0: 4313 orrs r3, r2
  35327. 800f1c2: f043 0307 orr.w r3, r3, #7
  35328. 800f1c6: 60fb str r3, [r7, #12]
  35329. /* Write to TIMx SMCR */
  35330. TIMx->SMCR = tmpsmcr;
  35331. 800f1c8: 687b ldr r3, [r7, #4]
  35332. 800f1ca: 68fa ldr r2, [r7, #12]
  35333. 800f1cc: 609a str r2, [r3, #8]
  35334. }
  35335. 800f1ce: bf00 nop
  35336. 800f1d0: 3714 adds r7, #20
  35337. 800f1d2: 46bd mov sp, r7
  35338. 800f1d4: f85d 7b04 ldr.w r7, [sp], #4
  35339. 800f1d8: 4770 bx lr
  35340. 800f1da: bf00 nop
  35341. 800f1dc: ffcfff8f .word 0xffcfff8f
  35342. 0800f1e0 <TIM_ETR_SetConfig>:
  35343. * This parameter must be a value between 0x00 and 0x0F
  35344. * @retval None
  35345. */
  35346. void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler,
  35347. uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter)
  35348. {
  35349. 800f1e0: b480 push {r7}
  35350. 800f1e2: b087 sub sp, #28
  35351. 800f1e4: af00 add r7, sp, #0
  35352. 800f1e6: 60f8 str r0, [r7, #12]
  35353. 800f1e8: 60b9 str r1, [r7, #8]
  35354. 800f1ea: 607a str r2, [r7, #4]
  35355. 800f1ec: 603b str r3, [r7, #0]
  35356. uint32_t tmpsmcr;
  35357. tmpsmcr = TIMx->SMCR;
  35358. 800f1ee: 68fb ldr r3, [r7, #12]
  35359. 800f1f0: 689b ldr r3, [r3, #8]
  35360. 800f1f2: 617b str r3, [r7, #20]
  35361. /* Reset the ETR Bits */
  35362. tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);
  35363. 800f1f4: 697b ldr r3, [r7, #20]
  35364. 800f1f6: f423 437f bic.w r3, r3, #65280 @ 0xff00
  35365. 800f1fa: 617b str r3, [r7, #20]
  35366. /* Set the Prescaler, the Filter value and the Polarity */
  35367. tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U)));
  35368. 800f1fc: 683b ldr r3, [r7, #0]
  35369. 800f1fe: 021a lsls r2, r3, #8
  35370. 800f200: 687b ldr r3, [r7, #4]
  35371. 800f202: 431a orrs r2, r3
  35372. 800f204: 68bb ldr r3, [r7, #8]
  35373. 800f206: 4313 orrs r3, r2
  35374. 800f208: 697a ldr r2, [r7, #20]
  35375. 800f20a: 4313 orrs r3, r2
  35376. 800f20c: 617b str r3, [r7, #20]
  35377. /* Write to TIMx SMCR */
  35378. TIMx->SMCR = tmpsmcr;
  35379. 800f20e: 68fb ldr r3, [r7, #12]
  35380. 800f210: 697a ldr r2, [r7, #20]
  35381. 800f212: 609a str r2, [r3, #8]
  35382. }
  35383. 800f214: bf00 nop
  35384. 800f216: 371c adds r7, #28
  35385. 800f218: 46bd mov sp, r7
  35386. 800f21a: f85d 7b04 ldr.w r7, [sp], #4
  35387. 800f21e: 4770 bx lr
  35388. 0800f220 <TIM_CCxChannelCmd>:
  35389. * @param ChannelState specifies the TIM Channel CCxE bit new state.
  35390. * This parameter can be: TIM_CCx_ENABLE or TIM_CCx_DISABLE.
  35391. * @retval None
  35392. */
  35393. void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState)
  35394. {
  35395. 800f220: b480 push {r7}
  35396. 800f222: b087 sub sp, #28
  35397. 800f224: af00 add r7, sp, #0
  35398. 800f226: 60f8 str r0, [r7, #12]
  35399. 800f228: 60b9 str r1, [r7, #8]
  35400. 800f22a: 607a str r2, [r7, #4]
  35401. /* Check the parameters */
  35402. assert_param(IS_TIM_CC1_INSTANCE(TIMx));
  35403. assert_param(IS_TIM_CHANNELS(Channel));
  35404. tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */
  35405. 800f22c: 68bb ldr r3, [r7, #8]
  35406. 800f22e: f003 031f and.w r3, r3, #31
  35407. 800f232: 2201 movs r2, #1
  35408. 800f234: fa02 f303 lsl.w r3, r2, r3
  35409. 800f238: 617b str r3, [r7, #20]
  35410. /* Reset the CCxE Bit */
  35411. TIMx->CCER &= ~tmp;
  35412. 800f23a: 68fb ldr r3, [r7, #12]
  35413. 800f23c: 6a1a ldr r2, [r3, #32]
  35414. 800f23e: 697b ldr r3, [r7, #20]
  35415. 800f240: 43db mvns r3, r3
  35416. 800f242: 401a ands r2, r3
  35417. 800f244: 68fb ldr r3, [r7, #12]
  35418. 800f246: 621a str r2, [r3, #32]
  35419. /* Set or reset the CCxE Bit */
  35420. TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */
  35421. 800f248: 68fb ldr r3, [r7, #12]
  35422. 800f24a: 6a1a ldr r2, [r3, #32]
  35423. 800f24c: 68bb ldr r3, [r7, #8]
  35424. 800f24e: f003 031f and.w r3, r3, #31
  35425. 800f252: 6879 ldr r1, [r7, #4]
  35426. 800f254: fa01 f303 lsl.w r3, r1, r3
  35427. 800f258: 431a orrs r2, r3
  35428. 800f25a: 68fb ldr r3, [r7, #12]
  35429. 800f25c: 621a str r2, [r3, #32]
  35430. }
  35431. 800f25e: bf00 nop
  35432. 800f260: 371c adds r7, #28
  35433. 800f262: 46bd mov sp, r7
  35434. 800f264: f85d 7b04 ldr.w r7, [sp], #4
  35435. 800f268: 4770 bx lr
  35436. ...
  35437. 0800f26c <HAL_TIMEx_MasterConfigSynchronization>:
  35438. * mode.
  35439. * @retval HAL status
  35440. */
  35441. HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
  35442. const TIM_MasterConfigTypeDef *sMasterConfig)
  35443. {
  35444. 800f26c: b480 push {r7}
  35445. 800f26e: b085 sub sp, #20
  35446. 800f270: af00 add r7, sp, #0
  35447. 800f272: 6078 str r0, [r7, #4]
  35448. 800f274: 6039 str r1, [r7, #0]
  35449. assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
  35450. assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
  35451. assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
  35452. /* Check input state */
  35453. __HAL_LOCK(htim);
  35454. 800f276: 687b ldr r3, [r7, #4]
  35455. 800f278: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  35456. 800f27c: 2b01 cmp r3, #1
  35457. 800f27e: d101 bne.n 800f284 <HAL_TIMEx_MasterConfigSynchronization+0x18>
  35458. 800f280: 2302 movs r3, #2
  35459. 800f282: e06d b.n 800f360 <HAL_TIMEx_MasterConfigSynchronization+0xf4>
  35460. 800f284: 687b ldr r3, [r7, #4]
  35461. 800f286: 2201 movs r2, #1
  35462. 800f288: f883 203c strb.w r2, [r3, #60] @ 0x3c
  35463. /* Change the handler state */
  35464. htim->State = HAL_TIM_STATE_BUSY;
  35465. 800f28c: 687b ldr r3, [r7, #4]
  35466. 800f28e: 2202 movs r2, #2
  35467. 800f290: f883 203d strb.w r2, [r3, #61] @ 0x3d
  35468. /* Get the TIMx CR2 register value */
  35469. tmpcr2 = htim->Instance->CR2;
  35470. 800f294: 687b ldr r3, [r7, #4]
  35471. 800f296: 681b ldr r3, [r3, #0]
  35472. 800f298: 685b ldr r3, [r3, #4]
  35473. 800f29a: 60fb str r3, [r7, #12]
  35474. /* Get the TIMx SMCR register value */
  35475. tmpsmcr = htim->Instance->SMCR;
  35476. 800f29c: 687b ldr r3, [r7, #4]
  35477. 800f29e: 681b ldr r3, [r3, #0]
  35478. 800f2a0: 689b ldr r3, [r3, #8]
  35479. 800f2a2: 60bb str r3, [r7, #8]
  35480. /* If the timer supports ADC synchronization through TRGO2, set the master mode selection 2 */
  35481. if (IS_TIM_TRGO2_INSTANCE(htim->Instance))
  35482. 800f2a4: 687b ldr r3, [r7, #4]
  35483. 800f2a6: 681b ldr r3, [r3, #0]
  35484. 800f2a8: 4a30 ldr r2, [pc, #192] @ (800f36c <HAL_TIMEx_MasterConfigSynchronization+0x100>)
  35485. 800f2aa: 4293 cmp r3, r2
  35486. 800f2ac: d004 beq.n 800f2b8 <HAL_TIMEx_MasterConfigSynchronization+0x4c>
  35487. 800f2ae: 687b ldr r3, [r7, #4]
  35488. 800f2b0: 681b ldr r3, [r3, #0]
  35489. 800f2b2: 4a2f ldr r2, [pc, #188] @ (800f370 <HAL_TIMEx_MasterConfigSynchronization+0x104>)
  35490. 800f2b4: 4293 cmp r3, r2
  35491. 800f2b6: d108 bne.n 800f2ca <HAL_TIMEx_MasterConfigSynchronization+0x5e>
  35492. {
  35493. /* Check the parameters */
  35494. assert_param(IS_TIM_TRGO2_SOURCE(sMasterConfig->MasterOutputTrigger2));
  35495. /* Clear the MMS2 bits */
  35496. tmpcr2 &= ~TIM_CR2_MMS2;
  35497. 800f2b8: 68fb ldr r3, [r7, #12]
  35498. 800f2ba: f423 0370 bic.w r3, r3, #15728640 @ 0xf00000
  35499. 800f2be: 60fb str r3, [r7, #12]
  35500. /* Select the TRGO2 source*/
  35501. tmpcr2 |= sMasterConfig->MasterOutputTrigger2;
  35502. 800f2c0: 683b ldr r3, [r7, #0]
  35503. 800f2c2: 685b ldr r3, [r3, #4]
  35504. 800f2c4: 68fa ldr r2, [r7, #12]
  35505. 800f2c6: 4313 orrs r3, r2
  35506. 800f2c8: 60fb str r3, [r7, #12]
  35507. }
  35508. /* Reset the MMS Bits */
  35509. tmpcr2 &= ~TIM_CR2_MMS;
  35510. 800f2ca: 68fb ldr r3, [r7, #12]
  35511. 800f2cc: f023 0370 bic.w r3, r3, #112 @ 0x70
  35512. 800f2d0: 60fb str r3, [r7, #12]
  35513. /* Select the TRGO source */
  35514. tmpcr2 |= sMasterConfig->MasterOutputTrigger;
  35515. 800f2d2: 683b ldr r3, [r7, #0]
  35516. 800f2d4: 681b ldr r3, [r3, #0]
  35517. 800f2d6: 68fa ldr r2, [r7, #12]
  35518. 800f2d8: 4313 orrs r3, r2
  35519. 800f2da: 60fb str r3, [r7, #12]
  35520. /* Update TIMx CR2 */
  35521. htim->Instance->CR2 = tmpcr2;
  35522. 800f2dc: 687b ldr r3, [r7, #4]
  35523. 800f2de: 681b ldr r3, [r3, #0]
  35524. 800f2e0: 68fa ldr r2, [r7, #12]
  35525. 800f2e2: 605a str r2, [r3, #4]
  35526. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  35527. 800f2e4: 687b ldr r3, [r7, #4]
  35528. 800f2e6: 681b ldr r3, [r3, #0]
  35529. 800f2e8: 4a20 ldr r2, [pc, #128] @ (800f36c <HAL_TIMEx_MasterConfigSynchronization+0x100>)
  35530. 800f2ea: 4293 cmp r3, r2
  35531. 800f2ec: d022 beq.n 800f334 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  35532. 800f2ee: 687b ldr r3, [r7, #4]
  35533. 800f2f0: 681b ldr r3, [r3, #0]
  35534. 800f2f2: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  35535. 800f2f6: d01d beq.n 800f334 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  35536. 800f2f8: 687b ldr r3, [r7, #4]
  35537. 800f2fa: 681b ldr r3, [r3, #0]
  35538. 800f2fc: 4a1d ldr r2, [pc, #116] @ (800f374 <HAL_TIMEx_MasterConfigSynchronization+0x108>)
  35539. 800f2fe: 4293 cmp r3, r2
  35540. 800f300: d018 beq.n 800f334 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  35541. 800f302: 687b ldr r3, [r7, #4]
  35542. 800f304: 681b ldr r3, [r3, #0]
  35543. 800f306: 4a1c ldr r2, [pc, #112] @ (800f378 <HAL_TIMEx_MasterConfigSynchronization+0x10c>)
  35544. 800f308: 4293 cmp r3, r2
  35545. 800f30a: d013 beq.n 800f334 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  35546. 800f30c: 687b ldr r3, [r7, #4]
  35547. 800f30e: 681b ldr r3, [r3, #0]
  35548. 800f310: 4a1a ldr r2, [pc, #104] @ (800f37c <HAL_TIMEx_MasterConfigSynchronization+0x110>)
  35549. 800f312: 4293 cmp r3, r2
  35550. 800f314: d00e beq.n 800f334 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  35551. 800f316: 687b ldr r3, [r7, #4]
  35552. 800f318: 681b ldr r3, [r3, #0]
  35553. 800f31a: 4a15 ldr r2, [pc, #84] @ (800f370 <HAL_TIMEx_MasterConfigSynchronization+0x104>)
  35554. 800f31c: 4293 cmp r3, r2
  35555. 800f31e: d009 beq.n 800f334 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  35556. 800f320: 687b ldr r3, [r7, #4]
  35557. 800f322: 681b ldr r3, [r3, #0]
  35558. 800f324: 4a16 ldr r2, [pc, #88] @ (800f380 <HAL_TIMEx_MasterConfigSynchronization+0x114>)
  35559. 800f326: 4293 cmp r3, r2
  35560. 800f328: d004 beq.n 800f334 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  35561. 800f32a: 687b ldr r3, [r7, #4]
  35562. 800f32c: 681b ldr r3, [r3, #0]
  35563. 800f32e: 4a15 ldr r2, [pc, #84] @ (800f384 <HAL_TIMEx_MasterConfigSynchronization+0x118>)
  35564. 800f330: 4293 cmp r3, r2
  35565. 800f332: d10c bne.n 800f34e <HAL_TIMEx_MasterConfigSynchronization+0xe2>
  35566. {
  35567. /* Reset the MSM Bit */
  35568. tmpsmcr &= ~TIM_SMCR_MSM;
  35569. 800f334: 68bb ldr r3, [r7, #8]
  35570. 800f336: f023 0380 bic.w r3, r3, #128 @ 0x80
  35571. 800f33a: 60bb str r3, [r7, #8]
  35572. /* Set master mode */
  35573. tmpsmcr |= sMasterConfig->MasterSlaveMode;
  35574. 800f33c: 683b ldr r3, [r7, #0]
  35575. 800f33e: 689b ldr r3, [r3, #8]
  35576. 800f340: 68ba ldr r2, [r7, #8]
  35577. 800f342: 4313 orrs r3, r2
  35578. 800f344: 60bb str r3, [r7, #8]
  35579. /* Update TIMx SMCR */
  35580. htim->Instance->SMCR = tmpsmcr;
  35581. 800f346: 687b ldr r3, [r7, #4]
  35582. 800f348: 681b ldr r3, [r3, #0]
  35583. 800f34a: 68ba ldr r2, [r7, #8]
  35584. 800f34c: 609a str r2, [r3, #8]
  35585. }
  35586. /* Change the htim state */
  35587. htim->State = HAL_TIM_STATE_READY;
  35588. 800f34e: 687b ldr r3, [r7, #4]
  35589. 800f350: 2201 movs r2, #1
  35590. 800f352: f883 203d strb.w r2, [r3, #61] @ 0x3d
  35591. __HAL_UNLOCK(htim);
  35592. 800f356: 687b ldr r3, [r7, #4]
  35593. 800f358: 2200 movs r2, #0
  35594. 800f35a: f883 203c strb.w r2, [r3, #60] @ 0x3c
  35595. return HAL_OK;
  35596. 800f35e: 2300 movs r3, #0
  35597. }
  35598. 800f360: 4618 mov r0, r3
  35599. 800f362: 3714 adds r7, #20
  35600. 800f364: 46bd mov sp, r7
  35601. 800f366: f85d 7b04 ldr.w r7, [sp], #4
  35602. 800f36a: 4770 bx lr
  35603. 800f36c: 40010000 .word 0x40010000
  35604. 800f370: 40010400 .word 0x40010400
  35605. 800f374: 40000400 .word 0x40000400
  35606. 800f378: 40000800 .word 0x40000800
  35607. 800f37c: 40000c00 .word 0x40000c00
  35608. 800f380: 40001800 .word 0x40001800
  35609. 800f384: 40014000 .word 0x40014000
  35610. 0800f388 <HAL_TIMEx_ConfigBreakDeadTime>:
  35611. * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro.
  35612. * @retval HAL status
  35613. */
  35614. HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
  35615. const TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig)
  35616. {
  35617. 800f388: b480 push {r7}
  35618. 800f38a: b085 sub sp, #20
  35619. 800f38c: af00 add r7, sp, #0
  35620. 800f38e: 6078 str r0, [r7, #4]
  35621. 800f390: 6039 str r1, [r7, #0]
  35622. /* Keep this variable initialized to 0 as it is used to configure BDTR register */
  35623. uint32_t tmpbdtr = 0U;
  35624. 800f392: 2300 movs r3, #0
  35625. 800f394: 60fb str r3, [r7, #12]
  35626. #if defined(TIM_BDTR_BKBID)
  35627. assert_param(IS_TIM_BREAK_AFMODE(sBreakDeadTimeConfig->BreakAFMode));
  35628. #endif /* TIM_BDTR_BKBID */
  35629. /* Check input state */
  35630. __HAL_LOCK(htim);
  35631. 800f396: 687b ldr r3, [r7, #4]
  35632. 800f398: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  35633. 800f39c: 2b01 cmp r3, #1
  35634. 800f39e: d101 bne.n 800f3a4 <HAL_TIMEx_ConfigBreakDeadTime+0x1c>
  35635. 800f3a0: 2302 movs r3, #2
  35636. 800f3a2: e065 b.n 800f470 <HAL_TIMEx_ConfigBreakDeadTime+0xe8>
  35637. 800f3a4: 687b ldr r3, [r7, #4]
  35638. 800f3a6: 2201 movs r2, #1
  35639. 800f3a8: f883 203c strb.w r2, [r3, #60] @ 0x3c
  35640. /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State,
  35641. the OSSI State, the dead time value and the Automatic Output Enable Bit */
  35642. /* Set the BDTR bits */
  35643. MODIFY_REG(tmpbdtr, TIM_BDTR_DTG, sBreakDeadTimeConfig->DeadTime);
  35644. 800f3ac: 68fb ldr r3, [r7, #12]
  35645. 800f3ae: f023 02ff bic.w r2, r3, #255 @ 0xff
  35646. 800f3b2: 683b ldr r3, [r7, #0]
  35647. 800f3b4: 68db ldr r3, [r3, #12]
  35648. 800f3b6: 4313 orrs r3, r2
  35649. 800f3b8: 60fb str r3, [r7, #12]
  35650. MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel);
  35651. 800f3ba: 68fb ldr r3, [r7, #12]
  35652. 800f3bc: f423 7240 bic.w r2, r3, #768 @ 0x300
  35653. 800f3c0: 683b ldr r3, [r7, #0]
  35654. 800f3c2: 689b ldr r3, [r3, #8]
  35655. 800f3c4: 4313 orrs r3, r2
  35656. 800f3c6: 60fb str r3, [r7, #12]
  35657. MODIFY_REG(tmpbdtr, TIM_BDTR_OSSI, sBreakDeadTimeConfig->OffStateIDLEMode);
  35658. 800f3c8: 68fb ldr r3, [r7, #12]
  35659. 800f3ca: f423 6280 bic.w r2, r3, #1024 @ 0x400
  35660. 800f3ce: 683b ldr r3, [r7, #0]
  35661. 800f3d0: 685b ldr r3, [r3, #4]
  35662. 800f3d2: 4313 orrs r3, r2
  35663. 800f3d4: 60fb str r3, [r7, #12]
  35664. MODIFY_REG(tmpbdtr, TIM_BDTR_OSSR, sBreakDeadTimeConfig->OffStateRunMode);
  35665. 800f3d6: 68fb ldr r3, [r7, #12]
  35666. 800f3d8: f423 6200 bic.w r2, r3, #2048 @ 0x800
  35667. 800f3dc: 683b ldr r3, [r7, #0]
  35668. 800f3de: 681b ldr r3, [r3, #0]
  35669. 800f3e0: 4313 orrs r3, r2
  35670. 800f3e2: 60fb str r3, [r7, #12]
  35671. MODIFY_REG(tmpbdtr, TIM_BDTR_BKE, sBreakDeadTimeConfig->BreakState);
  35672. 800f3e4: 68fb ldr r3, [r7, #12]
  35673. 800f3e6: f423 5280 bic.w r2, r3, #4096 @ 0x1000
  35674. 800f3ea: 683b ldr r3, [r7, #0]
  35675. 800f3ec: 691b ldr r3, [r3, #16]
  35676. 800f3ee: 4313 orrs r3, r2
  35677. 800f3f0: 60fb str r3, [r7, #12]
  35678. MODIFY_REG(tmpbdtr, TIM_BDTR_BKP, sBreakDeadTimeConfig->BreakPolarity);
  35679. 800f3f2: 68fb ldr r3, [r7, #12]
  35680. 800f3f4: f423 5200 bic.w r2, r3, #8192 @ 0x2000
  35681. 800f3f8: 683b ldr r3, [r7, #0]
  35682. 800f3fa: 695b ldr r3, [r3, #20]
  35683. 800f3fc: 4313 orrs r3, r2
  35684. 800f3fe: 60fb str r3, [r7, #12]
  35685. MODIFY_REG(tmpbdtr, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput);
  35686. 800f400: 68fb ldr r3, [r7, #12]
  35687. 800f402: f423 4280 bic.w r2, r3, #16384 @ 0x4000
  35688. 800f406: 683b ldr r3, [r7, #0]
  35689. 800f408: 6a9b ldr r3, [r3, #40] @ 0x28
  35690. 800f40a: 4313 orrs r3, r2
  35691. 800f40c: 60fb str r3, [r7, #12]
  35692. MODIFY_REG(tmpbdtr, TIM_BDTR_BKF, (sBreakDeadTimeConfig->BreakFilter << TIM_BDTR_BKF_Pos));
  35693. 800f40e: 68fb ldr r3, [r7, #12]
  35694. 800f410: f423 2270 bic.w r2, r3, #983040 @ 0xf0000
  35695. 800f414: 683b ldr r3, [r7, #0]
  35696. 800f416: 699b ldr r3, [r3, #24]
  35697. 800f418: 041b lsls r3, r3, #16
  35698. 800f41a: 4313 orrs r3, r2
  35699. 800f41c: 60fb str r3, [r7, #12]
  35700. #if defined(TIM_BDTR_BKBID)
  35701. MODIFY_REG(tmpbdtr, TIM_BDTR_BKBID, sBreakDeadTimeConfig->BreakAFMode);
  35702. #endif /* TIM_BDTR_BKBID */
  35703. if (IS_TIM_BKIN2_INSTANCE(htim->Instance))
  35704. 800f41e: 687b ldr r3, [r7, #4]
  35705. 800f420: 681b ldr r3, [r3, #0]
  35706. 800f422: 4a16 ldr r2, [pc, #88] @ (800f47c <HAL_TIMEx_ConfigBreakDeadTime+0xf4>)
  35707. 800f424: 4293 cmp r3, r2
  35708. 800f426: d004 beq.n 800f432 <HAL_TIMEx_ConfigBreakDeadTime+0xaa>
  35709. 800f428: 687b ldr r3, [r7, #4]
  35710. 800f42a: 681b ldr r3, [r3, #0]
  35711. 800f42c: 4a14 ldr r2, [pc, #80] @ (800f480 <HAL_TIMEx_ConfigBreakDeadTime+0xf8>)
  35712. 800f42e: 4293 cmp r3, r2
  35713. 800f430: d115 bne.n 800f45e <HAL_TIMEx_ConfigBreakDeadTime+0xd6>
  35714. #if defined(TIM_BDTR_BKBID)
  35715. assert_param(IS_TIM_BREAK2_AFMODE(sBreakDeadTimeConfig->Break2AFMode));
  35716. #endif /* TIM_BDTR_BKBID */
  35717. /* Set the BREAK2 input related BDTR bits */
  35718. MODIFY_REG(tmpbdtr, TIM_BDTR_BK2F, (sBreakDeadTimeConfig->Break2Filter << TIM_BDTR_BK2F_Pos));
  35719. 800f432: 68fb ldr r3, [r7, #12]
  35720. 800f434: f423 0270 bic.w r2, r3, #15728640 @ 0xf00000
  35721. 800f438: 683b ldr r3, [r7, #0]
  35722. 800f43a: 6a5b ldr r3, [r3, #36] @ 0x24
  35723. 800f43c: 051b lsls r3, r3, #20
  35724. 800f43e: 4313 orrs r3, r2
  35725. 800f440: 60fb str r3, [r7, #12]
  35726. MODIFY_REG(tmpbdtr, TIM_BDTR_BK2E, sBreakDeadTimeConfig->Break2State);
  35727. 800f442: 68fb ldr r3, [r7, #12]
  35728. 800f444: f023 7280 bic.w r2, r3, #16777216 @ 0x1000000
  35729. 800f448: 683b ldr r3, [r7, #0]
  35730. 800f44a: 69db ldr r3, [r3, #28]
  35731. 800f44c: 4313 orrs r3, r2
  35732. 800f44e: 60fb str r3, [r7, #12]
  35733. MODIFY_REG(tmpbdtr, TIM_BDTR_BK2P, sBreakDeadTimeConfig->Break2Polarity);
  35734. 800f450: 68fb ldr r3, [r7, #12]
  35735. 800f452: f023 7200 bic.w r2, r3, #33554432 @ 0x2000000
  35736. 800f456: 683b ldr r3, [r7, #0]
  35737. 800f458: 6a1b ldr r3, [r3, #32]
  35738. 800f45a: 4313 orrs r3, r2
  35739. 800f45c: 60fb str r3, [r7, #12]
  35740. MODIFY_REG(tmpbdtr, TIM_BDTR_BK2BID, sBreakDeadTimeConfig->Break2AFMode);
  35741. #endif /* TIM_BDTR_BKBID */
  35742. }
  35743. /* Set TIMx_BDTR */
  35744. htim->Instance->BDTR = tmpbdtr;
  35745. 800f45e: 687b ldr r3, [r7, #4]
  35746. 800f460: 681b ldr r3, [r3, #0]
  35747. 800f462: 68fa ldr r2, [r7, #12]
  35748. 800f464: 645a str r2, [r3, #68] @ 0x44
  35749. __HAL_UNLOCK(htim);
  35750. 800f466: 687b ldr r3, [r7, #4]
  35751. 800f468: 2200 movs r2, #0
  35752. 800f46a: f883 203c strb.w r2, [r3, #60] @ 0x3c
  35753. return HAL_OK;
  35754. 800f46e: 2300 movs r3, #0
  35755. }
  35756. 800f470: 4618 mov r0, r3
  35757. 800f472: 3714 adds r7, #20
  35758. 800f474: 46bd mov sp, r7
  35759. 800f476: f85d 7b04 ldr.w r7, [sp], #4
  35760. 800f47a: 4770 bx lr
  35761. 800f47c: 40010000 .word 0x40010000
  35762. 800f480: 40010400 .word 0x40010400
  35763. 0800f484 <HAL_TIMEx_CommutCallback>:
  35764. * @brief Commutation callback in non-blocking mode
  35765. * @param htim TIM handle
  35766. * @retval None
  35767. */
  35768. __weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim)
  35769. {
  35770. 800f484: b480 push {r7}
  35771. 800f486: b083 sub sp, #12
  35772. 800f488: af00 add r7, sp, #0
  35773. 800f48a: 6078 str r0, [r7, #4]
  35774. UNUSED(htim);
  35775. /* NOTE : This function should not be modified, when the callback is needed,
  35776. the HAL_TIMEx_CommutCallback could be implemented in the user file
  35777. */
  35778. }
  35779. 800f48c: bf00 nop
  35780. 800f48e: 370c adds r7, #12
  35781. 800f490: 46bd mov sp, r7
  35782. 800f492: f85d 7b04 ldr.w r7, [sp], #4
  35783. 800f496: 4770 bx lr
  35784. 0800f498 <HAL_TIMEx_BreakCallback>:
  35785. * @brief Break detection callback in non-blocking mode
  35786. * @param htim TIM handle
  35787. * @retval None
  35788. */
  35789. __weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim)
  35790. {
  35791. 800f498: b480 push {r7}
  35792. 800f49a: b083 sub sp, #12
  35793. 800f49c: af00 add r7, sp, #0
  35794. 800f49e: 6078 str r0, [r7, #4]
  35795. UNUSED(htim);
  35796. /* NOTE : This function should not be modified, when the callback is needed,
  35797. the HAL_TIMEx_BreakCallback could be implemented in the user file
  35798. */
  35799. }
  35800. 800f4a0: bf00 nop
  35801. 800f4a2: 370c adds r7, #12
  35802. 800f4a4: 46bd mov sp, r7
  35803. 800f4a6: f85d 7b04 ldr.w r7, [sp], #4
  35804. 800f4aa: 4770 bx lr
  35805. 0800f4ac <HAL_TIMEx_Break2Callback>:
  35806. * @brief Break2 detection callback in non blocking mode
  35807. * @param htim: TIM handle
  35808. * @retval None
  35809. */
  35810. __weak void HAL_TIMEx_Break2Callback(TIM_HandleTypeDef *htim)
  35811. {
  35812. 800f4ac: b480 push {r7}
  35813. 800f4ae: b083 sub sp, #12
  35814. 800f4b0: af00 add r7, sp, #0
  35815. 800f4b2: 6078 str r0, [r7, #4]
  35816. UNUSED(htim);
  35817. /* NOTE : This function Should not be modified, when the callback is needed,
  35818. the HAL_TIMEx_Break2Callback could be implemented in the user file
  35819. */
  35820. }
  35821. 800f4b4: bf00 nop
  35822. 800f4b6: 370c adds r7, #12
  35823. 800f4b8: 46bd mov sp, r7
  35824. 800f4ba: f85d 7b04 ldr.w r7, [sp], #4
  35825. 800f4be: 4770 bx lr
  35826. 0800f4c0 <HAL_UART_Init>:
  35827. * parameters in the UART_InitTypeDef and initialize the associated handle.
  35828. * @param huart UART handle.
  35829. * @retval HAL status
  35830. */
  35831. HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
  35832. {
  35833. 800f4c0: b580 push {r7, lr}
  35834. 800f4c2: b082 sub sp, #8
  35835. 800f4c4: af00 add r7, sp, #0
  35836. 800f4c6: 6078 str r0, [r7, #4]
  35837. /* Check the UART handle allocation */
  35838. if (huart == NULL)
  35839. 800f4c8: 687b ldr r3, [r7, #4]
  35840. 800f4ca: 2b00 cmp r3, #0
  35841. 800f4cc: d101 bne.n 800f4d2 <HAL_UART_Init+0x12>
  35842. {
  35843. return HAL_ERROR;
  35844. 800f4ce: 2301 movs r3, #1
  35845. 800f4d0: e042 b.n 800f558 <HAL_UART_Init+0x98>
  35846. {
  35847. /* Check the parameters */
  35848. assert_param((IS_UART_INSTANCE(huart->Instance)) || (IS_LPUART_INSTANCE(huart->Instance)));
  35849. }
  35850. if (huart->gState == HAL_UART_STATE_RESET)
  35851. 800f4d2: 687b ldr r3, [r7, #4]
  35852. 800f4d4: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  35853. 800f4d8: 2b00 cmp r3, #0
  35854. 800f4da: d106 bne.n 800f4ea <HAL_UART_Init+0x2a>
  35855. {
  35856. /* Allocate lock resource and initialize it */
  35857. huart->Lock = HAL_UNLOCKED;
  35858. 800f4dc: 687b ldr r3, [r7, #4]
  35859. 800f4de: 2200 movs r2, #0
  35860. 800f4e0: f883 2084 strb.w r2, [r3, #132] @ 0x84
  35861. /* Init the low level hardware */
  35862. huart->MspInitCallback(huart);
  35863. #else
  35864. /* Init the low level hardware : GPIO, CLOCK */
  35865. HAL_UART_MspInit(huart);
  35866. 800f4e4: 6878 ldr r0, [r7, #4]
  35867. 800f4e6: f7f4 f833 bl 8003550 <HAL_UART_MspInit>
  35868. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  35869. }
  35870. huart->gState = HAL_UART_STATE_BUSY;
  35871. 800f4ea: 687b ldr r3, [r7, #4]
  35872. 800f4ec: 2224 movs r2, #36 @ 0x24
  35873. 800f4ee: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  35874. __HAL_UART_DISABLE(huart);
  35875. 800f4f2: 687b ldr r3, [r7, #4]
  35876. 800f4f4: 681b ldr r3, [r3, #0]
  35877. 800f4f6: 681a ldr r2, [r3, #0]
  35878. 800f4f8: 687b ldr r3, [r7, #4]
  35879. 800f4fa: 681b ldr r3, [r3, #0]
  35880. 800f4fc: f022 0201 bic.w r2, r2, #1
  35881. 800f500: 601a str r2, [r3, #0]
  35882. /* Perform advanced settings configuration */
  35883. /* For some items, configuration requires to be done prior TE and RE bits are set */
  35884. if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
  35885. 800f502: 687b ldr r3, [r7, #4]
  35886. 800f504: 6a9b ldr r3, [r3, #40] @ 0x28
  35887. 800f506: 2b00 cmp r3, #0
  35888. 800f508: d002 beq.n 800f510 <HAL_UART_Init+0x50>
  35889. {
  35890. UART_AdvFeatureConfig(huart);
  35891. 800f50a: 6878 ldr r0, [r7, #4]
  35892. 800f50c: f001 fa76 bl 80109fc <UART_AdvFeatureConfig>
  35893. }
  35894. /* Set the UART Communication parameters */
  35895. if (UART_SetConfig(huart) == HAL_ERROR)
  35896. 800f510: 6878 ldr r0, [r7, #4]
  35897. 800f512: f000 fd0b bl 800ff2c <UART_SetConfig>
  35898. 800f516: 4603 mov r3, r0
  35899. 800f518: 2b01 cmp r3, #1
  35900. 800f51a: d101 bne.n 800f520 <HAL_UART_Init+0x60>
  35901. {
  35902. return HAL_ERROR;
  35903. 800f51c: 2301 movs r3, #1
  35904. 800f51e: e01b b.n 800f558 <HAL_UART_Init+0x98>
  35905. }
  35906. /* In asynchronous mode, the following bits must be kept cleared:
  35907. - LINEN and CLKEN bits in the USART_CR2 register,
  35908. - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/
  35909. CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
  35910. 800f520: 687b ldr r3, [r7, #4]
  35911. 800f522: 681b ldr r3, [r3, #0]
  35912. 800f524: 685a ldr r2, [r3, #4]
  35913. 800f526: 687b ldr r3, [r7, #4]
  35914. 800f528: 681b ldr r3, [r3, #0]
  35915. 800f52a: f422 4290 bic.w r2, r2, #18432 @ 0x4800
  35916. 800f52e: 605a str r2, [r3, #4]
  35917. CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
  35918. 800f530: 687b ldr r3, [r7, #4]
  35919. 800f532: 681b ldr r3, [r3, #0]
  35920. 800f534: 689a ldr r2, [r3, #8]
  35921. 800f536: 687b ldr r3, [r7, #4]
  35922. 800f538: 681b ldr r3, [r3, #0]
  35923. 800f53a: f022 022a bic.w r2, r2, #42 @ 0x2a
  35924. 800f53e: 609a str r2, [r3, #8]
  35925. __HAL_UART_ENABLE(huart);
  35926. 800f540: 687b ldr r3, [r7, #4]
  35927. 800f542: 681b ldr r3, [r3, #0]
  35928. 800f544: 681a ldr r2, [r3, #0]
  35929. 800f546: 687b ldr r3, [r7, #4]
  35930. 800f548: 681b ldr r3, [r3, #0]
  35931. 800f54a: f042 0201 orr.w r2, r2, #1
  35932. 800f54e: 601a str r2, [r3, #0]
  35933. /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
  35934. return (UART_CheckIdleState(huart));
  35935. 800f550: 6878 ldr r0, [r7, #4]
  35936. 800f552: f001 faf5 bl 8010b40 <UART_CheckIdleState>
  35937. 800f556: 4603 mov r3, r0
  35938. }
  35939. 800f558: 4618 mov r0, r3
  35940. 800f55a: 3708 adds r7, #8
  35941. 800f55c: 46bd mov sp, r7
  35942. 800f55e: bd80 pop {r7, pc}
  35943. 0800f560 <HAL_UART_Transmit>:
  35944. * @param Size Amount of data elements (u8 or u16) to be sent.
  35945. * @param Timeout Timeout duration.
  35946. * @retval HAL status
  35947. */
  35948. HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout)
  35949. {
  35950. 800f560: b580 push {r7, lr}
  35951. 800f562: b08a sub sp, #40 @ 0x28
  35952. 800f564: af02 add r7, sp, #8
  35953. 800f566: 60f8 str r0, [r7, #12]
  35954. 800f568: 60b9 str r1, [r7, #8]
  35955. 800f56a: 603b str r3, [r7, #0]
  35956. 800f56c: 4613 mov r3, r2
  35957. 800f56e: 80fb strh r3, [r7, #6]
  35958. const uint8_t *pdata8bits;
  35959. const uint16_t *pdata16bits;
  35960. uint32_t tickstart;
  35961. /* Check that a Tx process is not already ongoing */
  35962. if (huart->gState == HAL_UART_STATE_READY)
  35963. 800f570: 68fb ldr r3, [r7, #12]
  35964. 800f572: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  35965. 800f576: 2b20 cmp r3, #32
  35966. 800f578: d17b bne.n 800f672 <HAL_UART_Transmit+0x112>
  35967. {
  35968. if ((pData == NULL) || (Size == 0U))
  35969. 800f57a: 68bb ldr r3, [r7, #8]
  35970. 800f57c: 2b00 cmp r3, #0
  35971. 800f57e: d002 beq.n 800f586 <HAL_UART_Transmit+0x26>
  35972. 800f580: 88fb ldrh r3, [r7, #6]
  35973. 800f582: 2b00 cmp r3, #0
  35974. 800f584: d101 bne.n 800f58a <HAL_UART_Transmit+0x2a>
  35975. {
  35976. return HAL_ERROR;
  35977. 800f586: 2301 movs r3, #1
  35978. 800f588: e074 b.n 800f674 <HAL_UART_Transmit+0x114>
  35979. }
  35980. huart->ErrorCode = HAL_UART_ERROR_NONE;
  35981. 800f58a: 68fb ldr r3, [r7, #12]
  35982. 800f58c: 2200 movs r2, #0
  35983. 800f58e: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  35984. huart->gState = HAL_UART_STATE_BUSY_TX;
  35985. 800f592: 68fb ldr r3, [r7, #12]
  35986. 800f594: 2221 movs r2, #33 @ 0x21
  35987. 800f596: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  35988. /* Init tickstart for timeout management */
  35989. tickstart = HAL_GetTick();
  35990. 800f59a: f7f5 fa63 bl 8004a64 <HAL_GetTick>
  35991. 800f59e: 6178 str r0, [r7, #20]
  35992. huart->TxXferSize = Size;
  35993. 800f5a0: 68fb ldr r3, [r7, #12]
  35994. 800f5a2: 88fa ldrh r2, [r7, #6]
  35995. 800f5a4: f8a3 2054 strh.w r2, [r3, #84] @ 0x54
  35996. huart->TxXferCount = Size;
  35997. 800f5a8: 68fb ldr r3, [r7, #12]
  35998. 800f5aa: 88fa ldrh r2, [r7, #6]
  35999. 800f5ac: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  36000. /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */
  36001. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  36002. 800f5b0: 68fb ldr r3, [r7, #12]
  36003. 800f5b2: 689b ldr r3, [r3, #8]
  36004. 800f5b4: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  36005. 800f5b8: d108 bne.n 800f5cc <HAL_UART_Transmit+0x6c>
  36006. 800f5ba: 68fb ldr r3, [r7, #12]
  36007. 800f5bc: 691b ldr r3, [r3, #16]
  36008. 800f5be: 2b00 cmp r3, #0
  36009. 800f5c0: d104 bne.n 800f5cc <HAL_UART_Transmit+0x6c>
  36010. {
  36011. pdata8bits = NULL;
  36012. 800f5c2: 2300 movs r3, #0
  36013. 800f5c4: 61fb str r3, [r7, #28]
  36014. pdata16bits = (const uint16_t *) pData;
  36015. 800f5c6: 68bb ldr r3, [r7, #8]
  36016. 800f5c8: 61bb str r3, [r7, #24]
  36017. 800f5ca: e003 b.n 800f5d4 <HAL_UART_Transmit+0x74>
  36018. }
  36019. else
  36020. {
  36021. pdata8bits = pData;
  36022. 800f5cc: 68bb ldr r3, [r7, #8]
  36023. 800f5ce: 61fb str r3, [r7, #28]
  36024. pdata16bits = NULL;
  36025. 800f5d0: 2300 movs r3, #0
  36026. 800f5d2: 61bb str r3, [r7, #24]
  36027. }
  36028. while (huart->TxXferCount > 0U)
  36029. 800f5d4: e030 b.n 800f638 <HAL_UART_Transmit+0xd8>
  36030. {
  36031. if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK)
  36032. 800f5d6: 683b ldr r3, [r7, #0]
  36033. 800f5d8: 9300 str r3, [sp, #0]
  36034. 800f5da: 697b ldr r3, [r7, #20]
  36035. 800f5dc: 2200 movs r2, #0
  36036. 800f5de: 2180 movs r1, #128 @ 0x80
  36037. 800f5e0: 68f8 ldr r0, [r7, #12]
  36038. 800f5e2: f001 fb57 bl 8010c94 <UART_WaitOnFlagUntilTimeout>
  36039. 800f5e6: 4603 mov r3, r0
  36040. 800f5e8: 2b00 cmp r3, #0
  36041. 800f5ea: d005 beq.n 800f5f8 <HAL_UART_Transmit+0x98>
  36042. {
  36043. huart->gState = HAL_UART_STATE_READY;
  36044. 800f5ec: 68fb ldr r3, [r7, #12]
  36045. 800f5ee: 2220 movs r2, #32
  36046. 800f5f0: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  36047. return HAL_TIMEOUT;
  36048. 800f5f4: 2303 movs r3, #3
  36049. 800f5f6: e03d b.n 800f674 <HAL_UART_Transmit+0x114>
  36050. }
  36051. if (pdata8bits == NULL)
  36052. 800f5f8: 69fb ldr r3, [r7, #28]
  36053. 800f5fa: 2b00 cmp r3, #0
  36054. 800f5fc: d10b bne.n 800f616 <HAL_UART_Transmit+0xb6>
  36055. {
  36056. huart->Instance->TDR = (uint16_t)(*pdata16bits & 0x01FFU);
  36057. 800f5fe: 69bb ldr r3, [r7, #24]
  36058. 800f600: 881b ldrh r3, [r3, #0]
  36059. 800f602: 461a mov r2, r3
  36060. 800f604: 68fb ldr r3, [r7, #12]
  36061. 800f606: 681b ldr r3, [r3, #0]
  36062. 800f608: f3c2 0208 ubfx r2, r2, #0, #9
  36063. 800f60c: 629a str r2, [r3, #40] @ 0x28
  36064. pdata16bits++;
  36065. 800f60e: 69bb ldr r3, [r7, #24]
  36066. 800f610: 3302 adds r3, #2
  36067. 800f612: 61bb str r3, [r7, #24]
  36068. 800f614: e007 b.n 800f626 <HAL_UART_Transmit+0xc6>
  36069. }
  36070. else
  36071. {
  36072. huart->Instance->TDR = (uint8_t)(*pdata8bits & 0xFFU);
  36073. 800f616: 69fb ldr r3, [r7, #28]
  36074. 800f618: 781a ldrb r2, [r3, #0]
  36075. 800f61a: 68fb ldr r3, [r7, #12]
  36076. 800f61c: 681b ldr r3, [r3, #0]
  36077. 800f61e: 629a str r2, [r3, #40] @ 0x28
  36078. pdata8bits++;
  36079. 800f620: 69fb ldr r3, [r7, #28]
  36080. 800f622: 3301 adds r3, #1
  36081. 800f624: 61fb str r3, [r7, #28]
  36082. }
  36083. huart->TxXferCount--;
  36084. 800f626: 68fb ldr r3, [r7, #12]
  36085. 800f628: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  36086. 800f62c: b29b uxth r3, r3
  36087. 800f62e: 3b01 subs r3, #1
  36088. 800f630: b29a uxth r2, r3
  36089. 800f632: 68fb ldr r3, [r7, #12]
  36090. 800f634: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  36091. while (huart->TxXferCount > 0U)
  36092. 800f638: 68fb ldr r3, [r7, #12]
  36093. 800f63a: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  36094. 800f63e: b29b uxth r3, r3
  36095. 800f640: 2b00 cmp r3, #0
  36096. 800f642: d1c8 bne.n 800f5d6 <HAL_UART_Transmit+0x76>
  36097. }
  36098. if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK)
  36099. 800f644: 683b ldr r3, [r7, #0]
  36100. 800f646: 9300 str r3, [sp, #0]
  36101. 800f648: 697b ldr r3, [r7, #20]
  36102. 800f64a: 2200 movs r2, #0
  36103. 800f64c: 2140 movs r1, #64 @ 0x40
  36104. 800f64e: 68f8 ldr r0, [r7, #12]
  36105. 800f650: f001 fb20 bl 8010c94 <UART_WaitOnFlagUntilTimeout>
  36106. 800f654: 4603 mov r3, r0
  36107. 800f656: 2b00 cmp r3, #0
  36108. 800f658: d005 beq.n 800f666 <HAL_UART_Transmit+0x106>
  36109. {
  36110. huart->gState = HAL_UART_STATE_READY;
  36111. 800f65a: 68fb ldr r3, [r7, #12]
  36112. 800f65c: 2220 movs r2, #32
  36113. 800f65e: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  36114. return HAL_TIMEOUT;
  36115. 800f662: 2303 movs r3, #3
  36116. 800f664: e006 b.n 800f674 <HAL_UART_Transmit+0x114>
  36117. }
  36118. /* At end of Tx process, restore huart->gState to Ready */
  36119. huart->gState = HAL_UART_STATE_READY;
  36120. 800f666: 68fb ldr r3, [r7, #12]
  36121. 800f668: 2220 movs r2, #32
  36122. 800f66a: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  36123. return HAL_OK;
  36124. 800f66e: 2300 movs r3, #0
  36125. 800f670: e000 b.n 800f674 <HAL_UART_Transmit+0x114>
  36126. }
  36127. else
  36128. {
  36129. return HAL_BUSY;
  36130. 800f672: 2302 movs r3, #2
  36131. }
  36132. }
  36133. 800f674: 4618 mov r0, r3
  36134. 800f676: 3720 adds r7, #32
  36135. 800f678: 46bd mov sp, r7
  36136. 800f67a: bd80 pop {r7, pc}
  36137. 0800f67c <HAL_UART_Transmit_IT>:
  36138. * @param pData Pointer to data buffer (u8 or u16 data elements).
  36139. * @param Size Amount of data elements (u8 or u16) to be sent.
  36140. * @retval HAL status
  36141. */
  36142. HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)
  36143. {
  36144. 800f67c: b480 push {r7}
  36145. 800f67e: b091 sub sp, #68 @ 0x44
  36146. 800f680: af00 add r7, sp, #0
  36147. 800f682: 60f8 str r0, [r7, #12]
  36148. 800f684: 60b9 str r1, [r7, #8]
  36149. 800f686: 4613 mov r3, r2
  36150. 800f688: 80fb strh r3, [r7, #6]
  36151. /* Check that a Tx process is not already ongoing */
  36152. if (huart->gState == HAL_UART_STATE_READY)
  36153. 800f68a: 68fb ldr r3, [r7, #12]
  36154. 800f68c: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  36155. 800f690: 2b20 cmp r3, #32
  36156. 800f692: d178 bne.n 800f786 <HAL_UART_Transmit_IT+0x10a>
  36157. {
  36158. if ((pData == NULL) || (Size == 0U))
  36159. 800f694: 68bb ldr r3, [r7, #8]
  36160. 800f696: 2b00 cmp r3, #0
  36161. 800f698: d002 beq.n 800f6a0 <HAL_UART_Transmit_IT+0x24>
  36162. 800f69a: 88fb ldrh r3, [r7, #6]
  36163. 800f69c: 2b00 cmp r3, #0
  36164. 800f69e: d101 bne.n 800f6a4 <HAL_UART_Transmit_IT+0x28>
  36165. {
  36166. return HAL_ERROR;
  36167. 800f6a0: 2301 movs r3, #1
  36168. 800f6a2: e071 b.n 800f788 <HAL_UART_Transmit_IT+0x10c>
  36169. }
  36170. huart->pTxBuffPtr = pData;
  36171. 800f6a4: 68fb ldr r3, [r7, #12]
  36172. 800f6a6: 68ba ldr r2, [r7, #8]
  36173. 800f6a8: 651a str r2, [r3, #80] @ 0x50
  36174. huart->TxXferSize = Size;
  36175. 800f6aa: 68fb ldr r3, [r7, #12]
  36176. 800f6ac: 88fa ldrh r2, [r7, #6]
  36177. 800f6ae: f8a3 2054 strh.w r2, [r3, #84] @ 0x54
  36178. huart->TxXferCount = Size;
  36179. 800f6b2: 68fb ldr r3, [r7, #12]
  36180. 800f6b4: 88fa ldrh r2, [r7, #6]
  36181. 800f6b6: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  36182. huart->TxISR = NULL;
  36183. 800f6ba: 68fb ldr r3, [r7, #12]
  36184. 800f6bc: 2200 movs r2, #0
  36185. 800f6be: 679a str r2, [r3, #120] @ 0x78
  36186. huart->ErrorCode = HAL_UART_ERROR_NONE;
  36187. 800f6c0: 68fb ldr r3, [r7, #12]
  36188. 800f6c2: 2200 movs r2, #0
  36189. 800f6c4: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  36190. huart->gState = HAL_UART_STATE_BUSY_TX;
  36191. 800f6c8: 68fb ldr r3, [r7, #12]
  36192. 800f6ca: 2221 movs r2, #33 @ 0x21
  36193. 800f6cc: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  36194. /* Configure Tx interrupt processing */
  36195. if (huart->FifoMode == UART_FIFOMODE_ENABLE)
  36196. 800f6d0: 68fb ldr r3, [r7, #12]
  36197. 800f6d2: 6e5b ldr r3, [r3, #100] @ 0x64
  36198. 800f6d4: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  36199. 800f6d8: d12a bne.n 800f730 <HAL_UART_Transmit_IT+0xb4>
  36200. {
  36201. /* Set the Tx ISR function pointer according to the data word length */
  36202. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  36203. 800f6da: 68fb ldr r3, [r7, #12]
  36204. 800f6dc: 689b ldr r3, [r3, #8]
  36205. 800f6de: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  36206. 800f6e2: d107 bne.n 800f6f4 <HAL_UART_Transmit_IT+0x78>
  36207. 800f6e4: 68fb ldr r3, [r7, #12]
  36208. 800f6e6: 691b ldr r3, [r3, #16]
  36209. 800f6e8: 2b00 cmp r3, #0
  36210. 800f6ea: d103 bne.n 800f6f4 <HAL_UART_Transmit_IT+0x78>
  36211. {
  36212. huart->TxISR = UART_TxISR_16BIT_FIFOEN;
  36213. 800f6ec: 68fb ldr r3, [r7, #12]
  36214. 800f6ee: 4a29 ldr r2, [pc, #164] @ (800f794 <HAL_UART_Transmit_IT+0x118>)
  36215. 800f6f0: 679a str r2, [r3, #120] @ 0x78
  36216. 800f6f2: e002 b.n 800f6fa <HAL_UART_Transmit_IT+0x7e>
  36217. }
  36218. else
  36219. {
  36220. huart->TxISR = UART_TxISR_8BIT_FIFOEN;
  36221. 800f6f4: 68fb ldr r3, [r7, #12]
  36222. 800f6f6: 4a28 ldr r2, [pc, #160] @ (800f798 <HAL_UART_Transmit_IT+0x11c>)
  36223. 800f6f8: 679a str r2, [r3, #120] @ 0x78
  36224. }
  36225. /* Enable the TX FIFO threshold interrupt */
  36226. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  36227. 800f6fa: 68fb ldr r3, [r7, #12]
  36228. 800f6fc: 681b ldr r3, [r3, #0]
  36229. 800f6fe: 3308 adds r3, #8
  36230. 800f700: 62bb str r3, [r7, #40] @ 0x28
  36231. */
  36232. __STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr)
  36233. {
  36234. uint32_t result;
  36235. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  36236. 800f702: 6abb ldr r3, [r7, #40] @ 0x28
  36237. 800f704: e853 3f00 ldrex r3, [r3]
  36238. 800f708: 627b str r3, [r7, #36] @ 0x24
  36239. return(result);
  36240. 800f70a: 6a7b ldr r3, [r7, #36] @ 0x24
  36241. 800f70c: f443 0300 orr.w r3, r3, #8388608 @ 0x800000
  36242. 800f710: 63bb str r3, [r7, #56] @ 0x38
  36243. 800f712: 68fb ldr r3, [r7, #12]
  36244. 800f714: 681b ldr r3, [r3, #0]
  36245. 800f716: 3308 adds r3, #8
  36246. 800f718: 6bba ldr r2, [r7, #56] @ 0x38
  36247. 800f71a: 637a str r2, [r7, #52] @ 0x34
  36248. 800f71c: 633b str r3, [r7, #48] @ 0x30
  36249. */
  36250. __STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr)
  36251. {
  36252. uint32_t result;
  36253. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  36254. 800f71e: 6b39 ldr r1, [r7, #48] @ 0x30
  36255. 800f720: 6b7a ldr r2, [r7, #52] @ 0x34
  36256. 800f722: e841 2300 strex r3, r2, [r1]
  36257. 800f726: 62fb str r3, [r7, #44] @ 0x2c
  36258. return(result);
  36259. 800f728: 6afb ldr r3, [r7, #44] @ 0x2c
  36260. 800f72a: 2b00 cmp r3, #0
  36261. 800f72c: d1e5 bne.n 800f6fa <HAL_UART_Transmit_IT+0x7e>
  36262. 800f72e: e028 b.n 800f782 <HAL_UART_Transmit_IT+0x106>
  36263. }
  36264. else
  36265. {
  36266. /* Set the Tx ISR function pointer according to the data word length */
  36267. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  36268. 800f730: 68fb ldr r3, [r7, #12]
  36269. 800f732: 689b ldr r3, [r3, #8]
  36270. 800f734: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  36271. 800f738: d107 bne.n 800f74a <HAL_UART_Transmit_IT+0xce>
  36272. 800f73a: 68fb ldr r3, [r7, #12]
  36273. 800f73c: 691b ldr r3, [r3, #16]
  36274. 800f73e: 2b00 cmp r3, #0
  36275. 800f740: d103 bne.n 800f74a <HAL_UART_Transmit_IT+0xce>
  36276. {
  36277. huart->TxISR = UART_TxISR_16BIT;
  36278. 800f742: 68fb ldr r3, [r7, #12]
  36279. 800f744: 4a15 ldr r2, [pc, #84] @ (800f79c <HAL_UART_Transmit_IT+0x120>)
  36280. 800f746: 679a str r2, [r3, #120] @ 0x78
  36281. 800f748: e002 b.n 800f750 <HAL_UART_Transmit_IT+0xd4>
  36282. }
  36283. else
  36284. {
  36285. huart->TxISR = UART_TxISR_8BIT;
  36286. 800f74a: 68fb ldr r3, [r7, #12]
  36287. 800f74c: 4a14 ldr r2, [pc, #80] @ (800f7a0 <HAL_UART_Transmit_IT+0x124>)
  36288. 800f74e: 679a str r2, [r3, #120] @ 0x78
  36289. }
  36290. /* Enable the Transmit Data Register Empty interrupt */
  36291. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  36292. 800f750: 68fb ldr r3, [r7, #12]
  36293. 800f752: 681b ldr r3, [r3, #0]
  36294. 800f754: 617b str r3, [r7, #20]
  36295. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  36296. 800f756: 697b ldr r3, [r7, #20]
  36297. 800f758: e853 3f00 ldrex r3, [r3]
  36298. 800f75c: 613b str r3, [r7, #16]
  36299. return(result);
  36300. 800f75e: 693b ldr r3, [r7, #16]
  36301. 800f760: f043 0380 orr.w r3, r3, #128 @ 0x80
  36302. 800f764: 63fb str r3, [r7, #60] @ 0x3c
  36303. 800f766: 68fb ldr r3, [r7, #12]
  36304. 800f768: 681b ldr r3, [r3, #0]
  36305. 800f76a: 461a mov r2, r3
  36306. 800f76c: 6bfb ldr r3, [r7, #60] @ 0x3c
  36307. 800f76e: 623b str r3, [r7, #32]
  36308. 800f770: 61fa str r2, [r7, #28]
  36309. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  36310. 800f772: 69f9 ldr r1, [r7, #28]
  36311. 800f774: 6a3a ldr r2, [r7, #32]
  36312. 800f776: e841 2300 strex r3, r2, [r1]
  36313. 800f77a: 61bb str r3, [r7, #24]
  36314. return(result);
  36315. 800f77c: 69bb ldr r3, [r7, #24]
  36316. 800f77e: 2b00 cmp r3, #0
  36317. 800f780: d1e6 bne.n 800f750 <HAL_UART_Transmit_IT+0xd4>
  36318. }
  36319. return HAL_OK;
  36320. 800f782: 2300 movs r3, #0
  36321. 800f784: e000 b.n 800f788 <HAL_UART_Transmit_IT+0x10c>
  36322. }
  36323. else
  36324. {
  36325. return HAL_BUSY;
  36326. 800f786: 2302 movs r3, #2
  36327. }
  36328. }
  36329. 800f788: 4618 mov r0, r3
  36330. 800f78a: 3744 adds r7, #68 @ 0x44
  36331. 800f78c: 46bd mov sp, r7
  36332. 800f78e: f85d 7b04 ldr.w r7, [sp], #4
  36333. 800f792: 4770 bx lr
  36334. 800f794: 08011307 .word 0x08011307
  36335. 800f798: 08011227 .word 0x08011227
  36336. 800f79c: 08011165 .word 0x08011165
  36337. 800f7a0: 080110ad .word 0x080110ad
  36338. 0800f7a4 <HAL_UART_IRQHandler>:
  36339. * @brief Handle UART interrupt request.
  36340. * @param huart UART handle.
  36341. * @retval None
  36342. */
  36343. void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
  36344. {
  36345. 800f7a4: b580 push {r7, lr}
  36346. 800f7a6: b0ba sub sp, #232 @ 0xe8
  36347. 800f7a8: af00 add r7, sp, #0
  36348. 800f7aa: 6078 str r0, [r7, #4]
  36349. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  36350. 800f7ac: 687b ldr r3, [r7, #4]
  36351. 800f7ae: 681b ldr r3, [r3, #0]
  36352. 800f7b0: 69db ldr r3, [r3, #28]
  36353. 800f7b2: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  36354. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  36355. 800f7b6: 687b ldr r3, [r7, #4]
  36356. 800f7b8: 681b ldr r3, [r3, #0]
  36357. 800f7ba: 681b ldr r3, [r3, #0]
  36358. 800f7bc: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  36359. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  36360. 800f7c0: 687b ldr r3, [r7, #4]
  36361. 800f7c2: 681b ldr r3, [r3, #0]
  36362. 800f7c4: 689b ldr r3, [r3, #8]
  36363. 800f7c6: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  36364. uint32_t errorflags;
  36365. uint32_t errorcode;
  36366. /* If no error occurs */
  36367. errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_RTOF));
  36368. 800f7ca: f8d7 20e4 ldr.w r2, [r7, #228] @ 0xe4
  36369. 800f7ce: f640 030f movw r3, #2063 @ 0x80f
  36370. 800f7d2: 4013 ands r3, r2
  36371. 800f7d4: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8
  36372. if (errorflags == 0U)
  36373. 800f7d8: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8
  36374. 800f7dc: 2b00 cmp r3, #0
  36375. 800f7de: d11b bne.n 800f818 <HAL_UART_IRQHandler+0x74>
  36376. {
  36377. /* UART in mode Receiver ---------------------------------------------------*/
  36378. if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U)
  36379. 800f7e0: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  36380. 800f7e4: f003 0320 and.w r3, r3, #32
  36381. 800f7e8: 2b00 cmp r3, #0
  36382. 800f7ea: d015 beq.n 800f818 <HAL_UART_IRQHandler+0x74>
  36383. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)
  36384. 800f7ec: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  36385. 800f7f0: f003 0320 and.w r3, r3, #32
  36386. 800f7f4: 2b00 cmp r3, #0
  36387. 800f7f6: d105 bne.n 800f804 <HAL_UART_IRQHandler+0x60>
  36388. || ((cr3its & USART_CR3_RXFTIE) != 0U)))
  36389. 800f7f8: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  36390. 800f7fc: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
  36391. 800f800: 2b00 cmp r3, #0
  36392. 800f802: d009 beq.n 800f818 <HAL_UART_IRQHandler+0x74>
  36393. {
  36394. if (huart->RxISR != NULL)
  36395. 800f804: 687b ldr r3, [r7, #4]
  36396. 800f806: 6f5b ldr r3, [r3, #116] @ 0x74
  36397. 800f808: 2b00 cmp r3, #0
  36398. 800f80a: f000 8377 beq.w 800fefc <HAL_UART_IRQHandler+0x758>
  36399. {
  36400. huart->RxISR(huart);
  36401. 800f80e: 687b ldr r3, [r7, #4]
  36402. 800f810: 6f5b ldr r3, [r3, #116] @ 0x74
  36403. 800f812: 6878 ldr r0, [r7, #4]
  36404. 800f814: 4798 blx r3
  36405. }
  36406. return;
  36407. 800f816: e371 b.n 800fefc <HAL_UART_IRQHandler+0x758>
  36408. }
  36409. }
  36410. /* If some errors occur */
  36411. if ((errorflags != 0U)
  36412. 800f818: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8
  36413. 800f81c: 2b00 cmp r3, #0
  36414. 800f81e: f000 8123 beq.w 800fa68 <HAL_UART_IRQHandler+0x2c4>
  36415. && ((((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != 0U)
  36416. 800f822: f8d7 20dc ldr.w r2, [r7, #220] @ 0xdc
  36417. 800f826: 4b8d ldr r3, [pc, #564] @ (800fa5c <HAL_UART_IRQHandler+0x2b8>)
  36418. 800f828: 4013 ands r3, r2
  36419. 800f82a: 2b00 cmp r3, #0
  36420. 800f82c: d106 bne.n 800f83c <HAL_UART_IRQHandler+0x98>
  36421. || ((cr1its & (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_RTOIE)) != 0U))))
  36422. 800f82e: f8d7 20e0 ldr.w r2, [r7, #224] @ 0xe0
  36423. 800f832: 4b8b ldr r3, [pc, #556] @ (800fa60 <HAL_UART_IRQHandler+0x2bc>)
  36424. 800f834: 4013 ands r3, r2
  36425. 800f836: 2b00 cmp r3, #0
  36426. 800f838: f000 8116 beq.w 800fa68 <HAL_UART_IRQHandler+0x2c4>
  36427. {
  36428. /* UART parity error interrupt occurred -------------------------------------*/
  36429. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  36430. 800f83c: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  36431. 800f840: f003 0301 and.w r3, r3, #1
  36432. 800f844: 2b00 cmp r3, #0
  36433. 800f846: d011 beq.n 800f86c <HAL_UART_IRQHandler+0xc8>
  36434. 800f848: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  36435. 800f84c: f403 7380 and.w r3, r3, #256 @ 0x100
  36436. 800f850: 2b00 cmp r3, #0
  36437. 800f852: d00b beq.n 800f86c <HAL_UART_IRQHandler+0xc8>
  36438. {
  36439. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  36440. 800f854: 687b ldr r3, [r7, #4]
  36441. 800f856: 681b ldr r3, [r3, #0]
  36442. 800f858: 2201 movs r2, #1
  36443. 800f85a: 621a str r2, [r3, #32]
  36444. huart->ErrorCode |= HAL_UART_ERROR_PE;
  36445. 800f85c: 687b ldr r3, [r7, #4]
  36446. 800f85e: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  36447. 800f862: f043 0201 orr.w r2, r3, #1
  36448. 800f866: 687b ldr r3, [r7, #4]
  36449. 800f868: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  36450. }
  36451. /* UART frame error interrupt occurred --------------------------------------*/
  36452. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  36453. 800f86c: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  36454. 800f870: f003 0302 and.w r3, r3, #2
  36455. 800f874: 2b00 cmp r3, #0
  36456. 800f876: d011 beq.n 800f89c <HAL_UART_IRQHandler+0xf8>
  36457. 800f878: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  36458. 800f87c: f003 0301 and.w r3, r3, #1
  36459. 800f880: 2b00 cmp r3, #0
  36460. 800f882: d00b beq.n 800f89c <HAL_UART_IRQHandler+0xf8>
  36461. {
  36462. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  36463. 800f884: 687b ldr r3, [r7, #4]
  36464. 800f886: 681b ldr r3, [r3, #0]
  36465. 800f888: 2202 movs r2, #2
  36466. 800f88a: 621a str r2, [r3, #32]
  36467. huart->ErrorCode |= HAL_UART_ERROR_FE;
  36468. 800f88c: 687b ldr r3, [r7, #4]
  36469. 800f88e: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  36470. 800f892: f043 0204 orr.w r2, r3, #4
  36471. 800f896: 687b ldr r3, [r7, #4]
  36472. 800f898: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  36473. }
  36474. /* UART noise error interrupt occurred --------------------------------------*/
  36475. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  36476. 800f89c: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  36477. 800f8a0: f003 0304 and.w r3, r3, #4
  36478. 800f8a4: 2b00 cmp r3, #0
  36479. 800f8a6: d011 beq.n 800f8cc <HAL_UART_IRQHandler+0x128>
  36480. 800f8a8: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  36481. 800f8ac: f003 0301 and.w r3, r3, #1
  36482. 800f8b0: 2b00 cmp r3, #0
  36483. 800f8b2: d00b beq.n 800f8cc <HAL_UART_IRQHandler+0x128>
  36484. {
  36485. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  36486. 800f8b4: 687b ldr r3, [r7, #4]
  36487. 800f8b6: 681b ldr r3, [r3, #0]
  36488. 800f8b8: 2204 movs r2, #4
  36489. 800f8ba: 621a str r2, [r3, #32]
  36490. huart->ErrorCode |= HAL_UART_ERROR_NE;
  36491. 800f8bc: 687b ldr r3, [r7, #4]
  36492. 800f8be: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  36493. 800f8c2: f043 0202 orr.w r2, r3, #2
  36494. 800f8c6: 687b ldr r3, [r7, #4]
  36495. 800f8c8: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  36496. }
  36497. /* UART Over-Run interrupt occurred -----------------------------------------*/
  36498. if (((isrflags & USART_ISR_ORE) != 0U)
  36499. 800f8cc: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  36500. 800f8d0: f003 0308 and.w r3, r3, #8
  36501. 800f8d4: 2b00 cmp r3, #0
  36502. 800f8d6: d017 beq.n 800f908 <HAL_UART_IRQHandler+0x164>
  36503. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U) ||
  36504. 800f8d8: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  36505. 800f8dc: f003 0320 and.w r3, r3, #32
  36506. 800f8e0: 2b00 cmp r3, #0
  36507. 800f8e2: d105 bne.n 800f8f0 <HAL_UART_IRQHandler+0x14c>
  36508. ((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != 0U)))
  36509. 800f8e4: f8d7 20dc ldr.w r2, [r7, #220] @ 0xdc
  36510. 800f8e8: 4b5c ldr r3, [pc, #368] @ (800fa5c <HAL_UART_IRQHandler+0x2b8>)
  36511. 800f8ea: 4013 ands r3, r2
  36512. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U) ||
  36513. 800f8ec: 2b00 cmp r3, #0
  36514. 800f8ee: d00b beq.n 800f908 <HAL_UART_IRQHandler+0x164>
  36515. {
  36516. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF);
  36517. 800f8f0: 687b ldr r3, [r7, #4]
  36518. 800f8f2: 681b ldr r3, [r3, #0]
  36519. 800f8f4: 2208 movs r2, #8
  36520. 800f8f6: 621a str r2, [r3, #32]
  36521. huart->ErrorCode |= HAL_UART_ERROR_ORE;
  36522. 800f8f8: 687b ldr r3, [r7, #4]
  36523. 800f8fa: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  36524. 800f8fe: f043 0208 orr.w r2, r3, #8
  36525. 800f902: 687b ldr r3, [r7, #4]
  36526. 800f904: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  36527. }
  36528. /* UART Receiver Timeout interrupt occurred ---------------------------------*/
  36529. if (((isrflags & USART_ISR_RTOF) != 0U) && ((cr1its & USART_CR1_RTOIE) != 0U))
  36530. 800f908: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  36531. 800f90c: f403 6300 and.w r3, r3, #2048 @ 0x800
  36532. 800f910: 2b00 cmp r3, #0
  36533. 800f912: d012 beq.n 800f93a <HAL_UART_IRQHandler+0x196>
  36534. 800f914: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  36535. 800f918: f003 6380 and.w r3, r3, #67108864 @ 0x4000000
  36536. 800f91c: 2b00 cmp r3, #0
  36537. 800f91e: d00c beq.n 800f93a <HAL_UART_IRQHandler+0x196>
  36538. {
  36539. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
  36540. 800f920: 687b ldr r3, [r7, #4]
  36541. 800f922: 681b ldr r3, [r3, #0]
  36542. 800f924: f44f 6200 mov.w r2, #2048 @ 0x800
  36543. 800f928: 621a str r2, [r3, #32]
  36544. huart->ErrorCode |= HAL_UART_ERROR_RTO;
  36545. 800f92a: 687b ldr r3, [r7, #4]
  36546. 800f92c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  36547. 800f930: f043 0220 orr.w r2, r3, #32
  36548. 800f934: 687b ldr r3, [r7, #4]
  36549. 800f936: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  36550. }
  36551. /* Call UART Error Call back function if need be ----------------------------*/
  36552. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  36553. 800f93a: 687b ldr r3, [r7, #4]
  36554. 800f93c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  36555. 800f940: 2b00 cmp r3, #0
  36556. 800f942: f000 82dd beq.w 800ff00 <HAL_UART_IRQHandler+0x75c>
  36557. {
  36558. /* UART in mode Receiver --------------------------------------------------*/
  36559. if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U)
  36560. 800f946: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  36561. 800f94a: f003 0320 and.w r3, r3, #32
  36562. 800f94e: 2b00 cmp r3, #0
  36563. 800f950: d013 beq.n 800f97a <HAL_UART_IRQHandler+0x1d6>
  36564. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)
  36565. 800f952: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  36566. 800f956: f003 0320 and.w r3, r3, #32
  36567. 800f95a: 2b00 cmp r3, #0
  36568. 800f95c: d105 bne.n 800f96a <HAL_UART_IRQHandler+0x1c6>
  36569. || ((cr3its & USART_CR3_RXFTIE) != 0U)))
  36570. 800f95e: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  36571. 800f962: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
  36572. 800f966: 2b00 cmp r3, #0
  36573. 800f968: d007 beq.n 800f97a <HAL_UART_IRQHandler+0x1d6>
  36574. {
  36575. if (huart->RxISR != NULL)
  36576. 800f96a: 687b ldr r3, [r7, #4]
  36577. 800f96c: 6f5b ldr r3, [r3, #116] @ 0x74
  36578. 800f96e: 2b00 cmp r3, #0
  36579. 800f970: d003 beq.n 800f97a <HAL_UART_IRQHandler+0x1d6>
  36580. {
  36581. huart->RxISR(huart);
  36582. 800f972: 687b ldr r3, [r7, #4]
  36583. 800f974: 6f5b ldr r3, [r3, #116] @ 0x74
  36584. 800f976: 6878 ldr r0, [r7, #4]
  36585. 800f978: 4798 blx r3
  36586. /* If Error is to be considered as blocking :
  36587. - Receiver Timeout error in Reception
  36588. - Overrun error in Reception
  36589. - any error occurs in DMA mode reception
  36590. */
  36591. errorcode = huart->ErrorCode;
  36592. 800f97a: 687b ldr r3, [r7, #4]
  36593. 800f97c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  36594. 800f980: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4
  36595. if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ||
  36596. 800f984: 687b ldr r3, [r7, #4]
  36597. 800f986: 681b ldr r3, [r3, #0]
  36598. 800f988: 689b ldr r3, [r3, #8]
  36599. 800f98a: f003 0340 and.w r3, r3, #64 @ 0x40
  36600. 800f98e: 2b40 cmp r3, #64 @ 0x40
  36601. 800f990: d005 beq.n 800f99e <HAL_UART_IRQHandler+0x1fa>
  36602. ((errorcode & (HAL_UART_ERROR_RTO | HAL_UART_ERROR_ORE)) != 0U))
  36603. 800f992: f8d7 30d4 ldr.w r3, [r7, #212] @ 0xd4
  36604. 800f996: f003 0328 and.w r3, r3, #40 @ 0x28
  36605. if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ||
  36606. 800f99a: 2b00 cmp r3, #0
  36607. 800f99c: d054 beq.n 800fa48 <HAL_UART_IRQHandler+0x2a4>
  36608. {
  36609. /* Blocking error : transfer is aborted
  36610. Set the UART state ready to be able to start again the process,
  36611. Disable Rx Interrupts, and disable Rx DMA request, if ongoing */
  36612. UART_EndRxTransfer(huart);
  36613. 800f99e: 6878 ldr r0, [r7, #4]
  36614. 800f9a0: f001 fb08 bl 8010fb4 <UART_EndRxTransfer>
  36615. /* Abort the UART DMA Rx channel if enabled */
  36616. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  36617. 800f9a4: 687b ldr r3, [r7, #4]
  36618. 800f9a6: 681b ldr r3, [r3, #0]
  36619. 800f9a8: 689b ldr r3, [r3, #8]
  36620. 800f9aa: f003 0340 and.w r3, r3, #64 @ 0x40
  36621. 800f9ae: 2b40 cmp r3, #64 @ 0x40
  36622. 800f9b0: d146 bne.n 800fa40 <HAL_UART_IRQHandler+0x29c>
  36623. {
  36624. /* Disable the UART DMA Rx request if enabled */
  36625. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
  36626. 800f9b2: 687b ldr r3, [r7, #4]
  36627. 800f9b4: 681b ldr r3, [r3, #0]
  36628. 800f9b6: 3308 adds r3, #8
  36629. 800f9b8: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  36630. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  36631. 800f9bc: f8d7 309c ldr.w r3, [r7, #156] @ 0x9c
  36632. 800f9c0: e853 3f00 ldrex r3, [r3]
  36633. 800f9c4: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  36634. return(result);
  36635. 800f9c8: f8d7 3098 ldr.w r3, [r7, #152] @ 0x98
  36636. 800f9cc: f023 0340 bic.w r3, r3, #64 @ 0x40
  36637. 800f9d0: f8c7 30d0 str.w r3, [r7, #208] @ 0xd0
  36638. 800f9d4: 687b ldr r3, [r7, #4]
  36639. 800f9d6: 681b ldr r3, [r3, #0]
  36640. 800f9d8: 3308 adds r3, #8
  36641. 800f9da: f8d7 20d0 ldr.w r2, [r7, #208] @ 0xd0
  36642. 800f9de: f8c7 20a8 str.w r2, [r7, #168] @ 0xa8
  36643. 800f9e2: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  36644. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  36645. 800f9e6: f8d7 10a4 ldr.w r1, [r7, #164] @ 0xa4
  36646. 800f9ea: f8d7 20a8 ldr.w r2, [r7, #168] @ 0xa8
  36647. 800f9ee: e841 2300 strex r3, r2, [r1]
  36648. 800f9f2: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  36649. return(result);
  36650. 800f9f6: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  36651. 800f9fa: 2b00 cmp r3, #0
  36652. 800f9fc: d1d9 bne.n 800f9b2 <HAL_UART_IRQHandler+0x20e>
  36653. /* Abort the UART DMA Rx channel */
  36654. if (huart->hdmarx != NULL)
  36655. 800f9fe: 687b ldr r3, [r7, #4]
  36656. 800fa00: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36657. 800fa04: 2b00 cmp r3, #0
  36658. 800fa06: d017 beq.n 800fa38 <HAL_UART_IRQHandler+0x294>
  36659. {
  36660. /* Set the UART DMA Abort callback :
  36661. will lead to call HAL_UART_ErrorCallback() at end of DMA abort procedure */
  36662. huart->hdmarx->XferAbortCallback = UART_DMAAbortOnError;
  36663. 800fa08: 687b ldr r3, [r7, #4]
  36664. 800fa0a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36665. 800fa0e: 4a15 ldr r2, [pc, #84] @ (800fa64 <HAL_UART_IRQHandler+0x2c0>)
  36666. 800fa10: 651a str r2, [r3, #80] @ 0x50
  36667. /* Abort DMA RX */
  36668. if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK)
  36669. 800fa12: 687b ldr r3, [r7, #4]
  36670. 800fa14: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36671. 800fa18: 4618 mov r0, r3
  36672. 800fa1a: f7f8 fb11 bl 8008040 <HAL_DMA_Abort_IT>
  36673. 800fa1e: 4603 mov r3, r0
  36674. 800fa20: 2b00 cmp r3, #0
  36675. 800fa22: d019 beq.n 800fa58 <HAL_UART_IRQHandler+0x2b4>
  36676. {
  36677. /* Call Directly huart->hdmarx->XferAbortCallback function in case of error */
  36678. huart->hdmarx->XferAbortCallback(huart->hdmarx);
  36679. 800fa24: 687b ldr r3, [r7, #4]
  36680. 800fa26: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36681. 800fa2a: 6d1b ldr r3, [r3, #80] @ 0x50
  36682. 800fa2c: 687a ldr r2, [r7, #4]
  36683. 800fa2e: f8d2 2080 ldr.w r2, [r2, #128] @ 0x80
  36684. 800fa32: 4610 mov r0, r2
  36685. 800fa34: 4798 blx r3
  36686. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  36687. 800fa36: e00f b.n 800fa58 <HAL_UART_IRQHandler+0x2b4>
  36688. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  36689. /*Call registered error callback*/
  36690. huart->ErrorCallback(huart);
  36691. #else
  36692. /*Call legacy weak error callback*/
  36693. HAL_UART_ErrorCallback(huart);
  36694. 800fa38: 6878 ldr r0, [r7, #4]
  36695. 800fa3a: f000 fa6d bl 800ff18 <HAL_UART_ErrorCallback>
  36696. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  36697. 800fa3e: e00b b.n 800fa58 <HAL_UART_IRQHandler+0x2b4>
  36698. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  36699. /*Call registered error callback*/
  36700. huart->ErrorCallback(huart);
  36701. #else
  36702. /*Call legacy weak error callback*/
  36703. HAL_UART_ErrorCallback(huart);
  36704. 800fa40: 6878 ldr r0, [r7, #4]
  36705. 800fa42: f000 fa69 bl 800ff18 <HAL_UART_ErrorCallback>
  36706. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  36707. 800fa46: e007 b.n 800fa58 <HAL_UART_IRQHandler+0x2b4>
  36708. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  36709. /*Call registered error callback*/
  36710. huart->ErrorCallback(huart);
  36711. #else
  36712. /*Call legacy weak error callback*/
  36713. HAL_UART_ErrorCallback(huart);
  36714. 800fa48: 6878 ldr r0, [r7, #4]
  36715. 800fa4a: f000 fa65 bl 800ff18 <HAL_UART_ErrorCallback>
  36716. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  36717. huart->ErrorCode = HAL_UART_ERROR_NONE;
  36718. 800fa4e: 687b ldr r3, [r7, #4]
  36719. 800fa50: 2200 movs r2, #0
  36720. 800fa52: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  36721. }
  36722. }
  36723. return;
  36724. 800fa56: e253 b.n 800ff00 <HAL_UART_IRQHandler+0x75c>
  36725. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  36726. 800fa58: bf00 nop
  36727. return;
  36728. 800fa5a: e251 b.n 800ff00 <HAL_UART_IRQHandler+0x75c>
  36729. 800fa5c: 10000001 .word 0x10000001
  36730. 800fa60: 04000120 .word 0x04000120
  36731. 800fa64: 08011081 .word 0x08011081
  36732. } /* End if some error occurs */
  36733. /* Check current reception Mode :
  36734. If Reception till IDLE event has been selected : */
  36735. if ((huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  36736. 800fa68: 687b ldr r3, [r7, #4]
  36737. 800fa6a: 6edb ldr r3, [r3, #108] @ 0x6c
  36738. 800fa6c: 2b01 cmp r3, #1
  36739. 800fa6e: f040 81e7 bne.w 800fe40 <HAL_UART_IRQHandler+0x69c>
  36740. && ((isrflags & USART_ISR_IDLE) != 0U)
  36741. 800fa72: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  36742. 800fa76: f003 0310 and.w r3, r3, #16
  36743. 800fa7a: 2b00 cmp r3, #0
  36744. 800fa7c: f000 81e0 beq.w 800fe40 <HAL_UART_IRQHandler+0x69c>
  36745. && ((cr1its & USART_ISR_IDLE) != 0U))
  36746. 800fa80: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  36747. 800fa84: f003 0310 and.w r3, r3, #16
  36748. 800fa88: 2b00 cmp r3, #0
  36749. 800fa8a: f000 81d9 beq.w 800fe40 <HAL_UART_IRQHandler+0x69c>
  36750. {
  36751. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  36752. 800fa8e: 687b ldr r3, [r7, #4]
  36753. 800fa90: 681b ldr r3, [r3, #0]
  36754. 800fa92: 2210 movs r2, #16
  36755. 800fa94: 621a str r2, [r3, #32]
  36756. /* Check if DMA mode is enabled in UART */
  36757. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  36758. 800fa96: 687b ldr r3, [r7, #4]
  36759. 800fa98: 681b ldr r3, [r3, #0]
  36760. 800fa9a: 689b ldr r3, [r3, #8]
  36761. 800fa9c: f003 0340 and.w r3, r3, #64 @ 0x40
  36762. 800faa0: 2b40 cmp r3, #64 @ 0x40
  36763. 800faa2: f040 8151 bne.w 800fd48 <HAL_UART_IRQHandler+0x5a4>
  36764. {
  36765. /* DMA mode enabled */
  36766. /* Check received length : If all expected data are received, do nothing,
  36767. (DMA cplt callback will be called).
  36768. Otherwise, if at least one data has already been received, IDLE event is to be notified to user */
  36769. uint16_t nb_remaining_rx_data = (uint16_t) __HAL_DMA_GET_COUNTER(huart->hdmarx);
  36770. 800faa6: 687b ldr r3, [r7, #4]
  36771. 800faa8: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36772. 800faac: 681b ldr r3, [r3, #0]
  36773. 800faae: 4a96 ldr r2, [pc, #600] @ (800fd08 <HAL_UART_IRQHandler+0x564>)
  36774. 800fab0: 4293 cmp r3, r2
  36775. 800fab2: d068 beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36776. 800fab4: 687b ldr r3, [r7, #4]
  36777. 800fab6: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36778. 800faba: 681b ldr r3, [r3, #0]
  36779. 800fabc: 4a93 ldr r2, [pc, #588] @ (800fd0c <HAL_UART_IRQHandler+0x568>)
  36780. 800fabe: 4293 cmp r3, r2
  36781. 800fac0: d061 beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36782. 800fac2: 687b ldr r3, [r7, #4]
  36783. 800fac4: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36784. 800fac8: 681b ldr r3, [r3, #0]
  36785. 800faca: 4a91 ldr r2, [pc, #580] @ (800fd10 <HAL_UART_IRQHandler+0x56c>)
  36786. 800facc: 4293 cmp r3, r2
  36787. 800face: d05a beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36788. 800fad0: 687b ldr r3, [r7, #4]
  36789. 800fad2: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36790. 800fad6: 681b ldr r3, [r3, #0]
  36791. 800fad8: 4a8e ldr r2, [pc, #568] @ (800fd14 <HAL_UART_IRQHandler+0x570>)
  36792. 800fada: 4293 cmp r3, r2
  36793. 800fadc: d053 beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36794. 800fade: 687b ldr r3, [r7, #4]
  36795. 800fae0: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36796. 800fae4: 681b ldr r3, [r3, #0]
  36797. 800fae6: 4a8c ldr r2, [pc, #560] @ (800fd18 <HAL_UART_IRQHandler+0x574>)
  36798. 800fae8: 4293 cmp r3, r2
  36799. 800faea: d04c beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36800. 800faec: 687b ldr r3, [r7, #4]
  36801. 800faee: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36802. 800faf2: 681b ldr r3, [r3, #0]
  36803. 800faf4: 4a89 ldr r2, [pc, #548] @ (800fd1c <HAL_UART_IRQHandler+0x578>)
  36804. 800faf6: 4293 cmp r3, r2
  36805. 800faf8: d045 beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36806. 800fafa: 687b ldr r3, [r7, #4]
  36807. 800fafc: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36808. 800fb00: 681b ldr r3, [r3, #0]
  36809. 800fb02: 4a87 ldr r2, [pc, #540] @ (800fd20 <HAL_UART_IRQHandler+0x57c>)
  36810. 800fb04: 4293 cmp r3, r2
  36811. 800fb06: d03e beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36812. 800fb08: 687b ldr r3, [r7, #4]
  36813. 800fb0a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36814. 800fb0e: 681b ldr r3, [r3, #0]
  36815. 800fb10: 4a84 ldr r2, [pc, #528] @ (800fd24 <HAL_UART_IRQHandler+0x580>)
  36816. 800fb12: 4293 cmp r3, r2
  36817. 800fb14: d037 beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36818. 800fb16: 687b ldr r3, [r7, #4]
  36819. 800fb18: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36820. 800fb1c: 681b ldr r3, [r3, #0]
  36821. 800fb1e: 4a82 ldr r2, [pc, #520] @ (800fd28 <HAL_UART_IRQHandler+0x584>)
  36822. 800fb20: 4293 cmp r3, r2
  36823. 800fb22: d030 beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36824. 800fb24: 687b ldr r3, [r7, #4]
  36825. 800fb26: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36826. 800fb2a: 681b ldr r3, [r3, #0]
  36827. 800fb2c: 4a7f ldr r2, [pc, #508] @ (800fd2c <HAL_UART_IRQHandler+0x588>)
  36828. 800fb2e: 4293 cmp r3, r2
  36829. 800fb30: d029 beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36830. 800fb32: 687b ldr r3, [r7, #4]
  36831. 800fb34: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36832. 800fb38: 681b ldr r3, [r3, #0]
  36833. 800fb3a: 4a7d ldr r2, [pc, #500] @ (800fd30 <HAL_UART_IRQHandler+0x58c>)
  36834. 800fb3c: 4293 cmp r3, r2
  36835. 800fb3e: d022 beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36836. 800fb40: 687b ldr r3, [r7, #4]
  36837. 800fb42: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36838. 800fb46: 681b ldr r3, [r3, #0]
  36839. 800fb48: 4a7a ldr r2, [pc, #488] @ (800fd34 <HAL_UART_IRQHandler+0x590>)
  36840. 800fb4a: 4293 cmp r3, r2
  36841. 800fb4c: d01b beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36842. 800fb4e: 687b ldr r3, [r7, #4]
  36843. 800fb50: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36844. 800fb54: 681b ldr r3, [r3, #0]
  36845. 800fb56: 4a78 ldr r2, [pc, #480] @ (800fd38 <HAL_UART_IRQHandler+0x594>)
  36846. 800fb58: 4293 cmp r3, r2
  36847. 800fb5a: d014 beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36848. 800fb5c: 687b ldr r3, [r7, #4]
  36849. 800fb5e: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36850. 800fb62: 681b ldr r3, [r3, #0]
  36851. 800fb64: 4a75 ldr r2, [pc, #468] @ (800fd3c <HAL_UART_IRQHandler+0x598>)
  36852. 800fb66: 4293 cmp r3, r2
  36853. 800fb68: d00d beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36854. 800fb6a: 687b ldr r3, [r7, #4]
  36855. 800fb6c: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36856. 800fb70: 681b ldr r3, [r3, #0]
  36857. 800fb72: 4a73 ldr r2, [pc, #460] @ (800fd40 <HAL_UART_IRQHandler+0x59c>)
  36858. 800fb74: 4293 cmp r3, r2
  36859. 800fb76: d006 beq.n 800fb86 <HAL_UART_IRQHandler+0x3e2>
  36860. 800fb78: 687b ldr r3, [r7, #4]
  36861. 800fb7a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36862. 800fb7e: 681b ldr r3, [r3, #0]
  36863. 800fb80: 4a70 ldr r2, [pc, #448] @ (800fd44 <HAL_UART_IRQHandler+0x5a0>)
  36864. 800fb82: 4293 cmp r3, r2
  36865. 800fb84: d106 bne.n 800fb94 <HAL_UART_IRQHandler+0x3f0>
  36866. 800fb86: 687b ldr r3, [r7, #4]
  36867. 800fb88: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36868. 800fb8c: 681b ldr r3, [r3, #0]
  36869. 800fb8e: 685b ldr r3, [r3, #4]
  36870. 800fb90: b29b uxth r3, r3
  36871. 800fb92: e005 b.n 800fba0 <HAL_UART_IRQHandler+0x3fc>
  36872. 800fb94: 687b ldr r3, [r7, #4]
  36873. 800fb96: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36874. 800fb9a: 681b ldr r3, [r3, #0]
  36875. 800fb9c: 685b ldr r3, [r3, #4]
  36876. 800fb9e: b29b uxth r3, r3
  36877. 800fba0: f8a7 30be strh.w r3, [r7, #190] @ 0xbe
  36878. if ((nb_remaining_rx_data > 0U)
  36879. 800fba4: f8b7 30be ldrh.w r3, [r7, #190] @ 0xbe
  36880. 800fba8: 2b00 cmp r3, #0
  36881. 800fbaa: f000 81ab beq.w 800ff04 <HAL_UART_IRQHandler+0x760>
  36882. && (nb_remaining_rx_data < huart->RxXferSize))
  36883. 800fbae: 687b ldr r3, [r7, #4]
  36884. 800fbb0: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  36885. 800fbb4: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe
  36886. 800fbb8: 429a cmp r2, r3
  36887. 800fbba: f080 81a3 bcs.w 800ff04 <HAL_UART_IRQHandler+0x760>
  36888. {
  36889. /* Reception is not complete */
  36890. huart->RxXferCount = nb_remaining_rx_data;
  36891. 800fbbe: 687b ldr r3, [r7, #4]
  36892. 800fbc0: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe
  36893. 800fbc4: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  36894. /* In Normal mode, end DMA xfer and HAL UART Rx process*/
  36895. if (huart->hdmarx->Init.Mode != DMA_CIRCULAR)
  36896. 800fbc8: 687b ldr r3, [r7, #4]
  36897. 800fbca: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  36898. 800fbce: 69db ldr r3, [r3, #28]
  36899. 800fbd0: f5b3 7f80 cmp.w r3, #256 @ 0x100
  36900. 800fbd4: f000 8087 beq.w 800fce6 <HAL_UART_IRQHandler+0x542>
  36901. {
  36902. /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */
  36903. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  36904. 800fbd8: 687b ldr r3, [r7, #4]
  36905. 800fbda: 681b ldr r3, [r3, #0]
  36906. 800fbdc: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  36907. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  36908. 800fbe0: f8d7 3088 ldr.w r3, [r7, #136] @ 0x88
  36909. 800fbe4: e853 3f00 ldrex r3, [r3]
  36910. 800fbe8: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  36911. return(result);
  36912. 800fbec: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84
  36913. 800fbf0: f423 7380 bic.w r3, r3, #256 @ 0x100
  36914. 800fbf4: f8c7 30b8 str.w r3, [r7, #184] @ 0xb8
  36915. 800fbf8: 687b ldr r3, [r7, #4]
  36916. 800fbfa: 681b ldr r3, [r3, #0]
  36917. 800fbfc: 461a mov r2, r3
  36918. 800fbfe: f8d7 30b8 ldr.w r3, [r7, #184] @ 0xb8
  36919. 800fc02: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  36920. 800fc06: f8c7 2090 str.w r2, [r7, #144] @ 0x90
  36921. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  36922. 800fc0a: f8d7 1090 ldr.w r1, [r7, #144] @ 0x90
  36923. 800fc0e: f8d7 2094 ldr.w r2, [r7, #148] @ 0x94
  36924. 800fc12: e841 2300 strex r3, r2, [r1]
  36925. 800fc16: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  36926. return(result);
  36927. 800fc1a: f8d7 308c ldr.w r3, [r7, #140] @ 0x8c
  36928. 800fc1e: 2b00 cmp r3, #0
  36929. 800fc20: d1da bne.n 800fbd8 <HAL_UART_IRQHandler+0x434>
  36930. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  36931. 800fc22: 687b ldr r3, [r7, #4]
  36932. 800fc24: 681b ldr r3, [r3, #0]
  36933. 800fc26: 3308 adds r3, #8
  36934. 800fc28: 677b str r3, [r7, #116] @ 0x74
  36935. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  36936. 800fc2a: 6f7b ldr r3, [r7, #116] @ 0x74
  36937. 800fc2c: e853 3f00 ldrex r3, [r3]
  36938. 800fc30: 673b str r3, [r7, #112] @ 0x70
  36939. return(result);
  36940. 800fc32: 6f3b ldr r3, [r7, #112] @ 0x70
  36941. 800fc34: f023 0301 bic.w r3, r3, #1
  36942. 800fc38: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  36943. 800fc3c: 687b ldr r3, [r7, #4]
  36944. 800fc3e: 681b ldr r3, [r3, #0]
  36945. 800fc40: 3308 adds r3, #8
  36946. 800fc42: f8d7 20b4 ldr.w r2, [r7, #180] @ 0xb4
  36947. 800fc46: f8c7 2080 str.w r2, [r7, #128] @ 0x80
  36948. 800fc4a: 67fb str r3, [r7, #124] @ 0x7c
  36949. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  36950. 800fc4c: 6ff9 ldr r1, [r7, #124] @ 0x7c
  36951. 800fc4e: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80
  36952. 800fc52: e841 2300 strex r3, r2, [r1]
  36953. 800fc56: 67bb str r3, [r7, #120] @ 0x78
  36954. return(result);
  36955. 800fc58: 6fbb ldr r3, [r7, #120] @ 0x78
  36956. 800fc5a: 2b00 cmp r3, #0
  36957. 800fc5c: d1e1 bne.n 800fc22 <HAL_UART_IRQHandler+0x47e>
  36958. /* Disable the DMA transfer for the receiver request by resetting the DMAR bit
  36959. in the UART CR3 register */
  36960. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
  36961. 800fc5e: 687b ldr r3, [r7, #4]
  36962. 800fc60: 681b ldr r3, [r3, #0]
  36963. 800fc62: 3308 adds r3, #8
  36964. 800fc64: 663b str r3, [r7, #96] @ 0x60
  36965. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  36966. 800fc66: 6e3b ldr r3, [r7, #96] @ 0x60
  36967. 800fc68: e853 3f00 ldrex r3, [r3]
  36968. 800fc6c: 65fb str r3, [r7, #92] @ 0x5c
  36969. return(result);
  36970. 800fc6e: 6dfb ldr r3, [r7, #92] @ 0x5c
  36971. 800fc70: f023 0340 bic.w r3, r3, #64 @ 0x40
  36972. 800fc74: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0
  36973. 800fc78: 687b ldr r3, [r7, #4]
  36974. 800fc7a: 681b ldr r3, [r3, #0]
  36975. 800fc7c: 3308 adds r3, #8
  36976. 800fc7e: f8d7 20b0 ldr.w r2, [r7, #176] @ 0xb0
  36977. 800fc82: 66fa str r2, [r7, #108] @ 0x6c
  36978. 800fc84: 66bb str r3, [r7, #104] @ 0x68
  36979. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  36980. 800fc86: 6eb9 ldr r1, [r7, #104] @ 0x68
  36981. 800fc88: 6efa ldr r2, [r7, #108] @ 0x6c
  36982. 800fc8a: e841 2300 strex r3, r2, [r1]
  36983. 800fc8e: 667b str r3, [r7, #100] @ 0x64
  36984. return(result);
  36985. 800fc90: 6e7b ldr r3, [r7, #100] @ 0x64
  36986. 800fc92: 2b00 cmp r3, #0
  36987. 800fc94: d1e3 bne.n 800fc5e <HAL_UART_IRQHandler+0x4ba>
  36988. /* At end of Rx process, restore huart->RxState to Ready */
  36989. huart->RxState = HAL_UART_STATE_READY;
  36990. 800fc96: 687b ldr r3, [r7, #4]
  36991. 800fc98: 2220 movs r2, #32
  36992. 800fc9a: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  36993. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  36994. 800fc9e: 687b ldr r3, [r7, #4]
  36995. 800fca0: 2200 movs r2, #0
  36996. 800fca2: 66da str r2, [r3, #108] @ 0x6c
  36997. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  36998. 800fca4: 687b ldr r3, [r7, #4]
  36999. 800fca6: 681b ldr r3, [r3, #0]
  37000. 800fca8: 64fb str r3, [r7, #76] @ 0x4c
  37001. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  37002. 800fcaa: 6cfb ldr r3, [r7, #76] @ 0x4c
  37003. 800fcac: e853 3f00 ldrex r3, [r3]
  37004. 800fcb0: 64bb str r3, [r7, #72] @ 0x48
  37005. return(result);
  37006. 800fcb2: 6cbb ldr r3, [r7, #72] @ 0x48
  37007. 800fcb4: f023 0310 bic.w r3, r3, #16
  37008. 800fcb8: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  37009. 800fcbc: 687b ldr r3, [r7, #4]
  37010. 800fcbe: 681b ldr r3, [r3, #0]
  37011. 800fcc0: 461a mov r2, r3
  37012. 800fcc2: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  37013. 800fcc6: 65bb str r3, [r7, #88] @ 0x58
  37014. 800fcc8: 657a str r2, [r7, #84] @ 0x54
  37015. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  37016. 800fcca: 6d79 ldr r1, [r7, #84] @ 0x54
  37017. 800fccc: 6dba ldr r2, [r7, #88] @ 0x58
  37018. 800fcce: e841 2300 strex r3, r2, [r1]
  37019. 800fcd2: 653b str r3, [r7, #80] @ 0x50
  37020. return(result);
  37021. 800fcd4: 6d3b ldr r3, [r7, #80] @ 0x50
  37022. 800fcd6: 2b00 cmp r3, #0
  37023. 800fcd8: d1e4 bne.n 800fca4 <HAL_UART_IRQHandler+0x500>
  37024. /* Last bytes received, so no need as the abort is immediate */
  37025. (void)HAL_DMA_Abort(huart->hdmarx);
  37026. 800fcda: 687b ldr r3, [r7, #4]
  37027. 800fcdc: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  37028. 800fce0: 4618 mov r0, r3
  37029. 800fce2: f7f7 fe8f bl 8007a04 <HAL_DMA_Abort>
  37030. }
  37031. /* Initialize type of RxEvent that correspond to RxEvent callback execution;
  37032. In this case, Rx Event type is Idle Event */
  37033. huart->RxEventType = HAL_UART_RXEVENT_IDLE;
  37034. 800fce6: 687b ldr r3, [r7, #4]
  37035. 800fce8: 2202 movs r2, #2
  37036. 800fcea: 671a str r2, [r3, #112] @ 0x70
  37037. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  37038. /*Call registered Rx Event callback*/
  37039. huart->RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
  37040. #else
  37041. /*Call legacy weak Rx Event callback*/
  37042. HAL_UARTEx_RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
  37043. 800fcec: 687b ldr r3, [r7, #4]
  37044. 800fcee: f8b3 205c ldrh.w r2, [r3, #92] @ 0x5c
  37045. 800fcf2: 687b ldr r3, [r7, #4]
  37046. 800fcf4: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  37047. 800fcf8: b29b uxth r3, r3
  37048. 800fcfa: 1ad3 subs r3, r2, r3
  37049. 800fcfc: b29b uxth r3, r3
  37050. 800fcfe: 4619 mov r1, r3
  37051. 800fd00: 6878 ldr r0, [r7, #4]
  37052. 800fd02: f7f3 ff79 bl 8003bf8 <HAL_UARTEx_RxEventCallback>
  37053. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  37054. }
  37055. return;
  37056. 800fd06: e0fd b.n 800ff04 <HAL_UART_IRQHandler+0x760>
  37057. 800fd08: 40020010 .word 0x40020010
  37058. 800fd0c: 40020028 .word 0x40020028
  37059. 800fd10: 40020040 .word 0x40020040
  37060. 800fd14: 40020058 .word 0x40020058
  37061. 800fd18: 40020070 .word 0x40020070
  37062. 800fd1c: 40020088 .word 0x40020088
  37063. 800fd20: 400200a0 .word 0x400200a0
  37064. 800fd24: 400200b8 .word 0x400200b8
  37065. 800fd28: 40020410 .word 0x40020410
  37066. 800fd2c: 40020428 .word 0x40020428
  37067. 800fd30: 40020440 .word 0x40020440
  37068. 800fd34: 40020458 .word 0x40020458
  37069. 800fd38: 40020470 .word 0x40020470
  37070. 800fd3c: 40020488 .word 0x40020488
  37071. 800fd40: 400204a0 .word 0x400204a0
  37072. 800fd44: 400204b8 .word 0x400204b8
  37073. else
  37074. {
  37075. /* DMA mode not enabled */
  37076. /* Check received length : If all expected data are received, do nothing.
  37077. Otherwise, if at least one data has already been received, IDLE event is to be notified to user */
  37078. uint16_t nb_rx_data = huart->RxXferSize - huart->RxXferCount;
  37079. 800fd48: 687b ldr r3, [r7, #4]
  37080. 800fd4a: f8b3 205c ldrh.w r2, [r3, #92] @ 0x5c
  37081. 800fd4e: 687b ldr r3, [r7, #4]
  37082. 800fd50: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  37083. 800fd54: b29b uxth r3, r3
  37084. 800fd56: 1ad3 subs r3, r2, r3
  37085. 800fd58: f8a7 30ce strh.w r3, [r7, #206] @ 0xce
  37086. if ((huart->RxXferCount > 0U)
  37087. 800fd5c: 687b ldr r3, [r7, #4]
  37088. 800fd5e: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  37089. 800fd62: b29b uxth r3, r3
  37090. 800fd64: 2b00 cmp r3, #0
  37091. 800fd66: f000 80cf beq.w 800ff08 <HAL_UART_IRQHandler+0x764>
  37092. && (nb_rx_data > 0U))
  37093. 800fd6a: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce
  37094. 800fd6e: 2b00 cmp r3, #0
  37095. 800fd70: f000 80ca beq.w 800ff08 <HAL_UART_IRQHandler+0x764>
  37096. {
  37097. /* Disable the UART Parity Error Interrupt and RXNE interrupts */
  37098. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  37099. 800fd74: 687b ldr r3, [r7, #4]
  37100. 800fd76: 681b ldr r3, [r3, #0]
  37101. 800fd78: 63bb str r3, [r7, #56] @ 0x38
  37102. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  37103. 800fd7a: 6bbb ldr r3, [r7, #56] @ 0x38
  37104. 800fd7c: e853 3f00 ldrex r3, [r3]
  37105. 800fd80: 637b str r3, [r7, #52] @ 0x34
  37106. return(result);
  37107. 800fd82: 6b7b ldr r3, [r7, #52] @ 0x34
  37108. 800fd84: f423 7390 bic.w r3, r3, #288 @ 0x120
  37109. 800fd88: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8
  37110. 800fd8c: 687b ldr r3, [r7, #4]
  37111. 800fd8e: 681b ldr r3, [r3, #0]
  37112. 800fd90: 461a mov r2, r3
  37113. 800fd92: f8d7 30c8 ldr.w r3, [r7, #200] @ 0xc8
  37114. 800fd96: 647b str r3, [r7, #68] @ 0x44
  37115. 800fd98: 643a str r2, [r7, #64] @ 0x40
  37116. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  37117. 800fd9a: 6c39 ldr r1, [r7, #64] @ 0x40
  37118. 800fd9c: 6c7a ldr r2, [r7, #68] @ 0x44
  37119. 800fd9e: e841 2300 strex r3, r2, [r1]
  37120. 800fda2: 63fb str r3, [r7, #60] @ 0x3c
  37121. return(result);
  37122. 800fda4: 6bfb ldr r3, [r7, #60] @ 0x3c
  37123. 800fda6: 2b00 cmp r3, #0
  37124. 800fda8: d1e4 bne.n 800fd74 <HAL_UART_IRQHandler+0x5d0>
  37125. /* Disable the UART Error Interrupt:(Frame error, noise error, overrun error) and RX FIFO Threshold interrupt */
  37126. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  37127. 800fdaa: 687b ldr r3, [r7, #4]
  37128. 800fdac: 681b ldr r3, [r3, #0]
  37129. 800fdae: 3308 adds r3, #8
  37130. 800fdb0: 627b str r3, [r7, #36] @ 0x24
  37131. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  37132. 800fdb2: 6a7b ldr r3, [r7, #36] @ 0x24
  37133. 800fdb4: e853 3f00 ldrex r3, [r3]
  37134. 800fdb8: 623b str r3, [r7, #32]
  37135. return(result);
  37136. 800fdba: 6a3a ldr r2, [r7, #32]
  37137. 800fdbc: 4b55 ldr r3, [pc, #340] @ (800ff14 <HAL_UART_IRQHandler+0x770>)
  37138. 800fdbe: 4013 ands r3, r2
  37139. 800fdc0: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4
  37140. 800fdc4: 687b ldr r3, [r7, #4]
  37141. 800fdc6: 681b ldr r3, [r3, #0]
  37142. 800fdc8: 3308 adds r3, #8
  37143. 800fdca: f8d7 20c4 ldr.w r2, [r7, #196] @ 0xc4
  37144. 800fdce: 633a str r2, [r7, #48] @ 0x30
  37145. 800fdd0: 62fb str r3, [r7, #44] @ 0x2c
  37146. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  37147. 800fdd2: 6af9 ldr r1, [r7, #44] @ 0x2c
  37148. 800fdd4: 6b3a ldr r2, [r7, #48] @ 0x30
  37149. 800fdd6: e841 2300 strex r3, r2, [r1]
  37150. 800fdda: 62bb str r3, [r7, #40] @ 0x28
  37151. return(result);
  37152. 800fddc: 6abb ldr r3, [r7, #40] @ 0x28
  37153. 800fdde: 2b00 cmp r3, #0
  37154. 800fde0: d1e3 bne.n 800fdaa <HAL_UART_IRQHandler+0x606>
  37155. /* Rx process is completed, restore huart->RxState to Ready */
  37156. huart->RxState = HAL_UART_STATE_READY;
  37157. 800fde2: 687b ldr r3, [r7, #4]
  37158. 800fde4: 2220 movs r2, #32
  37159. 800fde6: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  37160. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  37161. 800fdea: 687b ldr r3, [r7, #4]
  37162. 800fdec: 2200 movs r2, #0
  37163. 800fdee: 66da str r2, [r3, #108] @ 0x6c
  37164. /* Clear RxISR function pointer */
  37165. huart->RxISR = NULL;
  37166. 800fdf0: 687b ldr r3, [r7, #4]
  37167. 800fdf2: 2200 movs r2, #0
  37168. 800fdf4: 675a str r2, [r3, #116] @ 0x74
  37169. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  37170. 800fdf6: 687b ldr r3, [r7, #4]
  37171. 800fdf8: 681b ldr r3, [r3, #0]
  37172. 800fdfa: 613b str r3, [r7, #16]
  37173. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  37174. 800fdfc: 693b ldr r3, [r7, #16]
  37175. 800fdfe: e853 3f00 ldrex r3, [r3]
  37176. 800fe02: 60fb str r3, [r7, #12]
  37177. return(result);
  37178. 800fe04: 68fb ldr r3, [r7, #12]
  37179. 800fe06: f023 0310 bic.w r3, r3, #16
  37180. 800fe0a: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0
  37181. 800fe0e: 687b ldr r3, [r7, #4]
  37182. 800fe10: 681b ldr r3, [r3, #0]
  37183. 800fe12: 461a mov r2, r3
  37184. 800fe14: f8d7 30c0 ldr.w r3, [r7, #192] @ 0xc0
  37185. 800fe18: 61fb str r3, [r7, #28]
  37186. 800fe1a: 61ba str r2, [r7, #24]
  37187. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  37188. 800fe1c: 69b9 ldr r1, [r7, #24]
  37189. 800fe1e: 69fa ldr r2, [r7, #28]
  37190. 800fe20: e841 2300 strex r3, r2, [r1]
  37191. 800fe24: 617b str r3, [r7, #20]
  37192. return(result);
  37193. 800fe26: 697b ldr r3, [r7, #20]
  37194. 800fe28: 2b00 cmp r3, #0
  37195. 800fe2a: d1e4 bne.n 800fdf6 <HAL_UART_IRQHandler+0x652>
  37196. /* Initialize type of RxEvent that correspond to RxEvent callback execution;
  37197. In this case, Rx Event type is Idle Event */
  37198. huart->RxEventType = HAL_UART_RXEVENT_IDLE;
  37199. 800fe2c: 687b ldr r3, [r7, #4]
  37200. 800fe2e: 2202 movs r2, #2
  37201. 800fe30: 671a str r2, [r3, #112] @ 0x70
  37202. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  37203. /*Call registered Rx complete callback*/
  37204. huart->RxEventCallback(huart, nb_rx_data);
  37205. #else
  37206. /*Call legacy weak Rx Event callback*/
  37207. HAL_UARTEx_RxEventCallback(huart, nb_rx_data);
  37208. 800fe32: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce
  37209. 800fe36: 4619 mov r1, r3
  37210. 800fe38: 6878 ldr r0, [r7, #4]
  37211. 800fe3a: f7f3 fedd bl 8003bf8 <HAL_UARTEx_RxEventCallback>
  37212. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  37213. }
  37214. return;
  37215. 800fe3e: e063 b.n 800ff08 <HAL_UART_IRQHandler+0x764>
  37216. }
  37217. }
  37218. /* UART wakeup from Stop mode interrupt occurred ---------------------------*/
  37219. if (((isrflags & USART_ISR_WUF) != 0U) && ((cr3its & USART_CR3_WUFIE) != 0U))
  37220. 800fe40: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  37221. 800fe44: f403 1380 and.w r3, r3, #1048576 @ 0x100000
  37222. 800fe48: 2b00 cmp r3, #0
  37223. 800fe4a: d00e beq.n 800fe6a <HAL_UART_IRQHandler+0x6c6>
  37224. 800fe4c: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  37225. 800fe50: f403 0380 and.w r3, r3, #4194304 @ 0x400000
  37226. 800fe54: 2b00 cmp r3, #0
  37227. 800fe56: d008 beq.n 800fe6a <HAL_UART_IRQHandler+0x6c6>
  37228. {
  37229. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_WUF);
  37230. 800fe58: 687b ldr r3, [r7, #4]
  37231. 800fe5a: 681b ldr r3, [r3, #0]
  37232. 800fe5c: f44f 1280 mov.w r2, #1048576 @ 0x100000
  37233. 800fe60: 621a str r2, [r3, #32]
  37234. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  37235. /* Call registered Wakeup Callback */
  37236. huart->WakeupCallback(huart);
  37237. #else
  37238. /* Call legacy weak Wakeup Callback */
  37239. HAL_UARTEx_WakeupCallback(huart);
  37240. 800fe62: 6878 ldr r0, [r7, #4]
  37241. 800fe64: f002 f80c bl 8011e80 <HAL_UARTEx_WakeupCallback>
  37242. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  37243. return;
  37244. 800fe68: e051 b.n 800ff0e <HAL_UART_IRQHandler+0x76a>
  37245. }
  37246. /* UART in mode Transmitter ------------------------------------------------*/
  37247. if (((isrflags & USART_ISR_TXE_TXFNF) != 0U)
  37248. 800fe6a: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  37249. 800fe6e: f003 0380 and.w r3, r3, #128 @ 0x80
  37250. 800fe72: 2b00 cmp r3, #0
  37251. 800fe74: d014 beq.n 800fea0 <HAL_UART_IRQHandler+0x6fc>
  37252. && (((cr1its & USART_CR1_TXEIE_TXFNFIE) != 0U)
  37253. 800fe76: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  37254. 800fe7a: f003 0380 and.w r3, r3, #128 @ 0x80
  37255. 800fe7e: 2b00 cmp r3, #0
  37256. 800fe80: d105 bne.n 800fe8e <HAL_UART_IRQHandler+0x6ea>
  37257. || ((cr3its & USART_CR3_TXFTIE) != 0U)))
  37258. 800fe82: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  37259. 800fe86: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  37260. 800fe8a: 2b00 cmp r3, #0
  37261. 800fe8c: d008 beq.n 800fea0 <HAL_UART_IRQHandler+0x6fc>
  37262. {
  37263. if (huart->TxISR != NULL)
  37264. 800fe8e: 687b ldr r3, [r7, #4]
  37265. 800fe90: 6f9b ldr r3, [r3, #120] @ 0x78
  37266. 800fe92: 2b00 cmp r3, #0
  37267. 800fe94: d03a beq.n 800ff0c <HAL_UART_IRQHandler+0x768>
  37268. {
  37269. huart->TxISR(huart);
  37270. 800fe96: 687b ldr r3, [r7, #4]
  37271. 800fe98: 6f9b ldr r3, [r3, #120] @ 0x78
  37272. 800fe9a: 6878 ldr r0, [r7, #4]
  37273. 800fe9c: 4798 blx r3
  37274. }
  37275. return;
  37276. 800fe9e: e035 b.n 800ff0c <HAL_UART_IRQHandler+0x768>
  37277. }
  37278. /* UART in mode Transmitter (transmission end) -----------------------------*/
  37279. if (((isrflags & USART_ISR_TC) != 0U) && ((cr1its & USART_CR1_TCIE) != 0U))
  37280. 800fea0: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  37281. 800fea4: f003 0340 and.w r3, r3, #64 @ 0x40
  37282. 800fea8: 2b00 cmp r3, #0
  37283. 800feaa: d009 beq.n 800fec0 <HAL_UART_IRQHandler+0x71c>
  37284. 800feac: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  37285. 800feb0: f003 0340 and.w r3, r3, #64 @ 0x40
  37286. 800feb4: 2b00 cmp r3, #0
  37287. 800feb6: d003 beq.n 800fec0 <HAL_UART_IRQHandler+0x71c>
  37288. {
  37289. UART_EndTransmit_IT(huart);
  37290. 800feb8: 6878 ldr r0, [r7, #4]
  37291. 800feba: f001 fa99 bl 80113f0 <UART_EndTransmit_IT>
  37292. return;
  37293. 800febe: e026 b.n 800ff0e <HAL_UART_IRQHandler+0x76a>
  37294. }
  37295. /* UART TX Fifo Empty occurred ----------------------------------------------*/
  37296. if (((isrflags & USART_ISR_TXFE) != 0U) && ((cr1its & USART_CR1_TXFEIE) != 0U))
  37297. 800fec0: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  37298. 800fec4: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  37299. 800fec8: 2b00 cmp r3, #0
  37300. 800feca: d009 beq.n 800fee0 <HAL_UART_IRQHandler+0x73c>
  37301. 800fecc: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  37302. 800fed0: f003 4380 and.w r3, r3, #1073741824 @ 0x40000000
  37303. 800fed4: 2b00 cmp r3, #0
  37304. 800fed6: d003 beq.n 800fee0 <HAL_UART_IRQHandler+0x73c>
  37305. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  37306. /* Call registered Tx Fifo Empty Callback */
  37307. huart->TxFifoEmptyCallback(huart);
  37308. #else
  37309. /* Call legacy weak Tx Fifo Empty Callback */
  37310. HAL_UARTEx_TxFifoEmptyCallback(huart);
  37311. 800fed8: 6878 ldr r0, [r7, #4]
  37312. 800feda: f001 ffe5 bl 8011ea8 <HAL_UARTEx_TxFifoEmptyCallback>
  37313. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  37314. return;
  37315. 800fede: e016 b.n 800ff0e <HAL_UART_IRQHandler+0x76a>
  37316. }
  37317. /* UART RX Fifo Full occurred ----------------------------------------------*/
  37318. if (((isrflags & USART_ISR_RXFF) != 0U) && ((cr1its & USART_CR1_RXFFIE) != 0U))
  37319. 800fee0: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  37320. 800fee4: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  37321. 800fee8: 2b00 cmp r3, #0
  37322. 800feea: d010 beq.n 800ff0e <HAL_UART_IRQHandler+0x76a>
  37323. 800feec: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  37324. 800fef0: 2b00 cmp r3, #0
  37325. 800fef2: da0c bge.n 800ff0e <HAL_UART_IRQHandler+0x76a>
  37326. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  37327. /* Call registered Rx Fifo Full Callback */
  37328. huart->RxFifoFullCallback(huart);
  37329. #else
  37330. /* Call legacy weak Rx Fifo Full Callback */
  37331. HAL_UARTEx_RxFifoFullCallback(huart);
  37332. 800fef4: 6878 ldr r0, [r7, #4]
  37333. 800fef6: f001 ffcd bl 8011e94 <HAL_UARTEx_RxFifoFullCallback>
  37334. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  37335. return;
  37336. 800fefa: e008 b.n 800ff0e <HAL_UART_IRQHandler+0x76a>
  37337. return;
  37338. 800fefc: bf00 nop
  37339. 800fefe: e006 b.n 800ff0e <HAL_UART_IRQHandler+0x76a>
  37340. return;
  37341. 800ff00: bf00 nop
  37342. 800ff02: e004 b.n 800ff0e <HAL_UART_IRQHandler+0x76a>
  37343. return;
  37344. 800ff04: bf00 nop
  37345. 800ff06: e002 b.n 800ff0e <HAL_UART_IRQHandler+0x76a>
  37346. return;
  37347. 800ff08: bf00 nop
  37348. 800ff0a: e000 b.n 800ff0e <HAL_UART_IRQHandler+0x76a>
  37349. return;
  37350. 800ff0c: bf00 nop
  37351. }
  37352. }
  37353. 800ff0e: 37e8 adds r7, #232 @ 0xe8
  37354. 800ff10: 46bd mov sp, r7
  37355. 800ff12: bd80 pop {r7, pc}
  37356. 800ff14: effffffe .word 0xeffffffe
  37357. 0800ff18 <HAL_UART_ErrorCallback>:
  37358. * @brief UART error callback.
  37359. * @param huart UART handle.
  37360. * @retval None
  37361. */
  37362. __weak void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
  37363. {
  37364. 800ff18: b480 push {r7}
  37365. 800ff1a: b083 sub sp, #12
  37366. 800ff1c: af00 add r7, sp, #0
  37367. 800ff1e: 6078 str r0, [r7, #4]
  37368. UNUSED(huart);
  37369. /* NOTE : This function should not be modified, when the callback is needed,
  37370. the HAL_UART_ErrorCallback can be implemented in the user file.
  37371. */
  37372. }
  37373. 800ff20: bf00 nop
  37374. 800ff22: 370c adds r7, #12
  37375. 800ff24: 46bd mov sp, r7
  37376. 800ff26: f85d 7b04 ldr.w r7, [sp], #4
  37377. 800ff2a: 4770 bx lr
  37378. 0800ff2c <UART_SetConfig>:
  37379. * @brief Configure the UART peripheral.
  37380. * @param huart UART handle.
  37381. * @retval HAL status
  37382. */
  37383. HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
  37384. {
  37385. 800ff2c: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr}
  37386. 800ff30: b092 sub sp, #72 @ 0x48
  37387. 800ff32: af00 add r7, sp, #0
  37388. 800ff34: 6178 str r0, [r7, #20]
  37389. uint32_t tmpreg;
  37390. uint16_t brrtemp;
  37391. UART_ClockSourceTypeDef clocksource;
  37392. uint32_t usartdiv;
  37393. HAL_StatusTypeDef ret = HAL_OK;
  37394. 800ff36: 2300 movs r3, #0
  37395. 800ff38: f887 3042 strb.w r3, [r7, #66] @ 0x42
  37396. * the UART Word Length, Parity, Mode and oversampling:
  37397. * set the M bits according to huart->Init.WordLength value
  37398. * set PCE and PS bits according to huart->Init.Parity value
  37399. * set TE and RE bits according to huart->Init.Mode value
  37400. * set OVER8 bit according to huart->Init.OverSampling value */
  37401. tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode | huart->Init.OverSampling ;
  37402. 800ff3c: 697b ldr r3, [r7, #20]
  37403. 800ff3e: 689a ldr r2, [r3, #8]
  37404. 800ff40: 697b ldr r3, [r7, #20]
  37405. 800ff42: 691b ldr r3, [r3, #16]
  37406. 800ff44: 431a orrs r2, r3
  37407. 800ff46: 697b ldr r3, [r7, #20]
  37408. 800ff48: 695b ldr r3, [r3, #20]
  37409. 800ff4a: 431a orrs r2, r3
  37410. 800ff4c: 697b ldr r3, [r7, #20]
  37411. 800ff4e: 69db ldr r3, [r3, #28]
  37412. 800ff50: 4313 orrs r3, r2
  37413. 800ff52: 647b str r3, [r7, #68] @ 0x44
  37414. MODIFY_REG(huart->Instance->CR1, USART_CR1_FIELDS, tmpreg);
  37415. 800ff54: 697b ldr r3, [r7, #20]
  37416. 800ff56: 681b ldr r3, [r3, #0]
  37417. 800ff58: 681a ldr r2, [r3, #0]
  37418. 800ff5a: 4bbe ldr r3, [pc, #760] @ (8010254 <UART_SetConfig+0x328>)
  37419. 800ff5c: 4013 ands r3, r2
  37420. 800ff5e: 697a ldr r2, [r7, #20]
  37421. 800ff60: 6812 ldr r2, [r2, #0]
  37422. 800ff62: 6c79 ldr r1, [r7, #68] @ 0x44
  37423. 800ff64: 430b orrs r3, r1
  37424. 800ff66: 6013 str r3, [r2, #0]
  37425. /*-------------------------- USART CR2 Configuration -----------------------*/
  37426. /* Configure the UART Stop Bits: Set STOP[13:12] bits according
  37427. * to huart->Init.StopBits value */
  37428. MODIFY_REG(huart->Instance->CR2, USART_CR2_STOP, huart->Init.StopBits);
  37429. 800ff68: 697b ldr r3, [r7, #20]
  37430. 800ff6a: 681b ldr r3, [r3, #0]
  37431. 800ff6c: 685b ldr r3, [r3, #4]
  37432. 800ff6e: f423 5140 bic.w r1, r3, #12288 @ 0x3000
  37433. 800ff72: 697b ldr r3, [r7, #20]
  37434. 800ff74: 68da ldr r2, [r3, #12]
  37435. 800ff76: 697b ldr r3, [r7, #20]
  37436. 800ff78: 681b ldr r3, [r3, #0]
  37437. 800ff7a: 430a orrs r2, r1
  37438. 800ff7c: 605a str r2, [r3, #4]
  37439. /* Configure
  37440. * - UART HardWare Flow Control: set CTSE and RTSE bits according
  37441. * to huart->Init.HwFlowCtl value
  37442. * - one-bit sampling method versus three samples' majority rule according
  37443. * to huart->Init.OneBitSampling (not applicable to LPUART) */
  37444. tmpreg = (uint32_t)huart->Init.HwFlowCtl;
  37445. 800ff7e: 697b ldr r3, [r7, #20]
  37446. 800ff80: 699b ldr r3, [r3, #24]
  37447. 800ff82: 647b str r3, [r7, #68] @ 0x44
  37448. if (!(UART_INSTANCE_LOWPOWER(huart)))
  37449. 800ff84: 697b ldr r3, [r7, #20]
  37450. 800ff86: 681b ldr r3, [r3, #0]
  37451. 800ff88: 4ab3 ldr r2, [pc, #716] @ (8010258 <UART_SetConfig+0x32c>)
  37452. 800ff8a: 4293 cmp r3, r2
  37453. 800ff8c: d004 beq.n 800ff98 <UART_SetConfig+0x6c>
  37454. {
  37455. tmpreg |= huart->Init.OneBitSampling;
  37456. 800ff8e: 697b ldr r3, [r7, #20]
  37457. 800ff90: 6a1b ldr r3, [r3, #32]
  37458. 800ff92: 6c7a ldr r2, [r7, #68] @ 0x44
  37459. 800ff94: 4313 orrs r3, r2
  37460. 800ff96: 647b str r3, [r7, #68] @ 0x44
  37461. }
  37462. MODIFY_REG(huart->Instance->CR3, USART_CR3_FIELDS, tmpreg);
  37463. 800ff98: 697b ldr r3, [r7, #20]
  37464. 800ff9a: 681b ldr r3, [r3, #0]
  37465. 800ff9c: 689a ldr r2, [r3, #8]
  37466. 800ff9e: 4baf ldr r3, [pc, #700] @ (801025c <UART_SetConfig+0x330>)
  37467. 800ffa0: 4013 ands r3, r2
  37468. 800ffa2: 697a ldr r2, [r7, #20]
  37469. 800ffa4: 6812 ldr r2, [r2, #0]
  37470. 800ffa6: 6c79 ldr r1, [r7, #68] @ 0x44
  37471. 800ffa8: 430b orrs r3, r1
  37472. 800ffaa: 6093 str r3, [r2, #8]
  37473. /*-------------------------- USART PRESC Configuration -----------------------*/
  37474. /* Configure
  37475. * - UART Clock Prescaler : set PRESCALER according to huart->Init.ClockPrescaler value */
  37476. MODIFY_REG(huart->Instance->PRESC, USART_PRESC_PRESCALER, huart->Init.ClockPrescaler);
  37477. 800ffac: 697b ldr r3, [r7, #20]
  37478. 800ffae: 681b ldr r3, [r3, #0]
  37479. 800ffb0: 6adb ldr r3, [r3, #44] @ 0x2c
  37480. 800ffb2: f023 010f bic.w r1, r3, #15
  37481. 800ffb6: 697b ldr r3, [r7, #20]
  37482. 800ffb8: 6a5a ldr r2, [r3, #36] @ 0x24
  37483. 800ffba: 697b ldr r3, [r7, #20]
  37484. 800ffbc: 681b ldr r3, [r3, #0]
  37485. 800ffbe: 430a orrs r2, r1
  37486. 800ffc0: 62da str r2, [r3, #44] @ 0x2c
  37487. /*-------------------------- USART BRR Configuration -----------------------*/
  37488. UART_GETCLOCKSOURCE(huart, clocksource);
  37489. 800ffc2: 697b ldr r3, [r7, #20]
  37490. 800ffc4: 681b ldr r3, [r3, #0]
  37491. 800ffc6: 4aa6 ldr r2, [pc, #664] @ (8010260 <UART_SetConfig+0x334>)
  37492. 800ffc8: 4293 cmp r3, r2
  37493. 800ffca: d177 bne.n 80100bc <UART_SetConfig+0x190>
  37494. 800ffcc: 4ba5 ldr r3, [pc, #660] @ (8010264 <UART_SetConfig+0x338>)
  37495. 800ffce: 6d5b ldr r3, [r3, #84] @ 0x54
  37496. 800ffd0: f003 0338 and.w r3, r3, #56 @ 0x38
  37497. 800ffd4: 2b28 cmp r3, #40 @ 0x28
  37498. 800ffd6: d86d bhi.n 80100b4 <UART_SetConfig+0x188>
  37499. 800ffd8: a201 add r2, pc, #4 @ (adr r2, 800ffe0 <UART_SetConfig+0xb4>)
  37500. 800ffda: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  37501. 800ffde: bf00 nop
  37502. 800ffe0: 08010085 .word 0x08010085
  37503. 800ffe4: 080100b5 .word 0x080100b5
  37504. 800ffe8: 080100b5 .word 0x080100b5
  37505. 800ffec: 080100b5 .word 0x080100b5
  37506. 800fff0: 080100b5 .word 0x080100b5
  37507. 800fff4: 080100b5 .word 0x080100b5
  37508. 800fff8: 080100b5 .word 0x080100b5
  37509. 800fffc: 080100b5 .word 0x080100b5
  37510. 8010000: 0801008d .word 0x0801008d
  37511. 8010004: 080100b5 .word 0x080100b5
  37512. 8010008: 080100b5 .word 0x080100b5
  37513. 801000c: 080100b5 .word 0x080100b5
  37514. 8010010: 080100b5 .word 0x080100b5
  37515. 8010014: 080100b5 .word 0x080100b5
  37516. 8010018: 080100b5 .word 0x080100b5
  37517. 801001c: 080100b5 .word 0x080100b5
  37518. 8010020: 08010095 .word 0x08010095
  37519. 8010024: 080100b5 .word 0x080100b5
  37520. 8010028: 080100b5 .word 0x080100b5
  37521. 801002c: 080100b5 .word 0x080100b5
  37522. 8010030: 080100b5 .word 0x080100b5
  37523. 8010034: 080100b5 .word 0x080100b5
  37524. 8010038: 080100b5 .word 0x080100b5
  37525. 801003c: 080100b5 .word 0x080100b5
  37526. 8010040: 0801009d .word 0x0801009d
  37527. 8010044: 080100b5 .word 0x080100b5
  37528. 8010048: 080100b5 .word 0x080100b5
  37529. 801004c: 080100b5 .word 0x080100b5
  37530. 8010050: 080100b5 .word 0x080100b5
  37531. 8010054: 080100b5 .word 0x080100b5
  37532. 8010058: 080100b5 .word 0x080100b5
  37533. 801005c: 080100b5 .word 0x080100b5
  37534. 8010060: 080100a5 .word 0x080100a5
  37535. 8010064: 080100b5 .word 0x080100b5
  37536. 8010068: 080100b5 .word 0x080100b5
  37537. 801006c: 080100b5 .word 0x080100b5
  37538. 8010070: 080100b5 .word 0x080100b5
  37539. 8010074: 080100b5 .word 0x080100b5
  37540. 8010078: 080100b5 .word 0x080100b5
  37541. 801007c: 080100b5 .word 0x080100b5
  37542. 8010080: 080100ad .word 0x080100ad
  37543. 8010084: 2301 movs r3, #1
  37544. 8010086: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37545. 801008a: e222 b.n 80104d2 <UART_SetConfig+0x5a6>
  37546. 801008c: 2304 movs r3, #4
  37547. 801008e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37548. 8010092: e21e b.n 80104d2 <UART_SetConfig+0x5a6>
  37549. 8010094: 2308 movs r3, #8
  37550. 8010096: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37551. 801009a: e21a b.n 80104d2 <UART_SetConfig+0x5a6>
  37552. 801009c: 2310 movs r3, #16
  37553. 801009e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37554. 80100a2: e216 b.n 80104d2 <UART_SetConfig+0x5a6>
  37555. 80100a4: 2320 movs r3, #32
  37556. 80100a6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37557. 80100aa: e212 b.n 80104d2 <UART_SetConfig+0x5a6>
  37558. 80100ac: 2340 movs r3, #64 @ 0x40
  37559. 80100ae: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37560. 80100b2: e20e b.n 80104d2 <UART_SetConfig+0x5a6>
  37561. 80100b4: 2380 movs r3, #128 @ 0x80
  37562. 80100b6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37563. 80100ba: e20a b.n 80104d2 <UART_SetConfig+0x5a6>
  37564. 80100bc: 697b ldr r3, [r7, #20]
  37565. 80100be: 681b ldr r3, [r3, #0]
  37566. 80100c0: 4a69 ldr r2, [pc, #420] @ (8010268 <UART_SetConfig+0x33c>)
  37567. 80100c2: 4293 cmp r3, r2
  37568. 80100c4: d130 bne.n 8010128 <UART_SetConfig+0x1fc>
  37569. 80100c6: 4b67 ldr r3, [pc, #412] @ (8010264 <UART_SetConfig+0x338>)
  37570. 80100c8: 6d5b ldr r3, [r3, #84] @ 0x54
  37571. 80100ca: f003 0307 and.w r3, r3, #7
  37572. 80100ce: 2b05 cmp r3, #5
  37573. 80100d0: d826 bhi.n 8010120 <UART_SetConfig+0x1f4>
  37574. 80100d2: a201 add r2, pc, #4 @ (adr r2, 80100d8 <UART_SetConfig+0x1ac>)
  37575. 80100d4: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  37576. 80100d8: 080100f1 .word 0x080100f1
  37577. 80100dc: 080100f9 .word 0x080100f9
  37578. 80100e0: 08010101 .word 0x08010101
  37579. 80100e4: 08010109 .word 0x08010109
  37580. 80100e8: 08010111 .word 0x08010111
  37581. 80100ec: 08010119 .word 0x08010119
  37582. 80100f0: 2300 movs r3, #0
  37583. 80100f2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37584. 80100f6: e1ec b.n 80104d2 <UART_SetConfig+0x5a6>
  37585. 80100f8: 2304 movs r3, #4
  37586. 80100fa: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37587. 80100fe: e1e8 b.n 80104d2 <UART_SetConfig+0x5a6>
  37588. 8010100: 2308 movs r3, #8
  37589. 8010102: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37590. 8010106: e1e4 b.n 80104d2 <UART_SetConfig+0x5a6>
  37591. 8010108: 2310 movs r3, #16
  37592. 801010a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37593. 801010e: e1e0 b.n 80104d2 <UART_SetConfig+0x5a6>
  37594. 8010110: 2320 movs r3, #32
  37595. 8010112: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37596. 8010116: e1dc b.n 80104d2 <UART_SetConfig+0x5a6>
  37597. 8010118: 2340 movs r3, #64 @ 0x40
  37598. 801011a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37599. 801011e: e1d8 b.n 80104d2 <UART_SetConfig+0x5a6>
  37600. 8010120: 2380 movs r3, #128 @ 0x80
  37601. 8010122: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37602. 8010126: e1d4 b.n 80104d2 <UART_SetConfig+0x5a6>
  37603. 8010128: 697b ldr r3, [r7, #20]
  37604. 801012a: 681b ldr r3, [r3, #0]
  37605. 801012c: 4a4f ldr r2, [pc, #316] @ (801026c <UART_SetConfig+0x340>)
  37606. 801012e: 4293 cmp r3, r2
  37607. 8010130: d130 bne.n 8010194 <UART_SetConfig+0x268>
  37608. 8010132: 4b4c ldr r3, [pc, #304] @ (8010264 <UART_SetConfig+0x338>)
  37609. 8010134: 6d5b ldr r3, [r3, #84] @ 0x54
  37610. 8010136: f003 0307 and.w r3, r3, #7
  37611. 801013a: 2b05 cmp r3, #5
  37612. 801013c: d826 bhi.n 801018c <UART_SetConfig+0x260>
  37613. 801013e: a201 add r2, pc, #4 @ (adr r2, 8010144 <UART_SetConfig+0x218>)
  37614. 8010140: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  37615. 8010144: 0801015d .word 0x0801015d
  37616. 8010148: 08010165 .word 0x08010165
  37617. 801014c: 0801016d .word 0x0801016d
  37618. 8010150: 08010175 .word 0x08010175
  37619. 8010154: 0801017d .word 0x0801017d
  37620. 8010158: 08010185 .word 0x08010185
  37621. 801015c: 2300 movs r3, #0
  37622. 801015e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37623. 8010162: e1b6 b.n 80104d2 <UART_SetConfig+0x5a6>
  37624. 8010164: 2304 movs r3, #4
  37625. 8010166: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37626. 801016a: e1b2 b.n 80104d2 <UART_SetConfig+0x5a6>
  37627. 801016c: 2308 movs r3, #8
  37628. 801016e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37629. 8010172: e1ae b.n 80104d2 <UART_SetConfig+0x5a6>
  37630. 8010174: 2310 movs r3, #16
  37631. 8010176: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37632. 801017a: e1aa b.n 80104d2 <UART_SetConfig+0x5a6>
  37633. 801017c: 2320 movs r3, #32
  37634. 801017e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37635. 8010182: e1a6 b.n 80104d2 <UART_SetConfig+0x5a6>
  37636. 8010184: 2340 movs r3, #64 @ 0x40
  37637. 8010186: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37638. 801018a: e1a2 b.n 80104d2 <UART_SetConfig+0x5a6>
  37639. 801018c: 2380 movs r3, #128 @ 0x80
  37640. 801018e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37641. 8010192: e19e b.n 80104d2 <UART_SetConfig+0x5a6>
  37642. 8010194: 697b ldr r3, [r7, #20]
  37643. 8010196: 681b ldr r3, [r3, #0]
  37644. 8010198: 4a35 ldr r2, [pc, #212] @ (8010270 <UART_SetConfig+0x344>)
  37645. 801019a: 4293 cmp r3, r2
  37646. 801019c: d130 bne.n 8010200 <UART_SetConfig+0x2d4>
  37647. 801019e: 4b31 ldr r3, [pc, #196] @ (8010264 <UART_SetConfig+0x338>)
  37648. 80101a0: 6d5b ldr r3, [r3, #84] @ 0x54
  37649. 80101a2: f003 0307 and.w r3, r3, #7
  37650. 80101a6: 2b05 cmp r3, #5
  37651. 80101a8: d826 bhi.n 80101f8 <UART_SetConfig+0x2cc>
  37652. 80101aa: a201 add r2, pc, #4 @ (adr r2, 80101b0 <UART_SetConfig+0x284>)
  37653. 80101ac: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  37654. 80101b0: 080101c9 .word 0x080101c9
  37655. 80101b4: 080101d1 .word 0x080101d1
  37656. 80101b8: 080101d9 .word 0x080101d9
  37657. 80101bc: 080101e1 .word 0x080101e1
  37658. 80101c0: 080101e9 .word 0x080101e9
  37659. 80101c4: 080101f1 .word 0x080101f1
  37660. 80101c8: 2300 movs r3, #0
  37661. 80101ca: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37662. 80101ce: e180 b.n 80104d2 <UART_SetConfig+0x5a6>
  37663. 80101d0: 2304 movs r3, #4
  37664. 80101d2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37665. 80101d6: e17c b.n 80104d2 <UART_SetConfig+0x5a6>
  37666. 80101d8: 2308 movs r3, #8
  37667. 80101da: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37668. 80101de: e178 b.n 80104d2 <UART_SetConfig+0x5a6>
  37669. 80101e0: 2310 movs r3, #16
  37670. 80101e2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37671. 80101e6: e174 b.n 80104d2 <UART_SetConfig+0x5a6>
  37672. 80101e8: 2320 movs r3, #32
  37673. 80101ea: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37674. 80101ee: e170 b.n 80104d2 <UART_SetConfig+0x5a6>
  37675. 80101f0: 2340 movs r3, #64 @ 0x40
  37676. 80101f2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37677. 80101f6: e16c b.n 80104d2 <UART_SetConfig+0x5a6>
  37678. 80101f8: 2380 movs r3, #128 @ 0x80
  37679. 80101fa: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37680. 80101fe: e168 b.n 80104d2 <UART_SetConfig+0x5a6>
  37681. 8010200: 697b ldr r3, [r7, #20]
  37682. 8010202: 681b ldr r3, [r3, #0]
  37683. 8010204: 4a1b ldr r2, [pc, #108] @ (8010274 <UART_SetConfig+0x348>)
  37684. 8010206: 4293 cmp r3, r2
  37685. 8010208: d142 bne.n 8010290 <UART_SetConfig+0x364>
  37686. 801020a: 4b16 ldr r3, [pc, #88] @ (8010264 <UART_SetConfig+0x338>)
  37687. 801020c: 6d5b ldr r3, [r3, #84] @ 0x54
  37688. 801020e: f003 0307 and.w r3, r3, #7
  37689. 8010212: 2b05 cmp r3, #5
  37690. 8010214: d838 bhi.n 8010288 <UART_SetConfig+0x35c>
  37691. 8010216: a201 add r2, pc, #4 @ (adr r2, 801021c <UART_SetConfig+0x2f0>)
  37692. 8010218: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  37693. 801021c: 08010235 .word 0x08010235
  37694. 8010220: 0801023d .word 0x0801023d
  37695. 8010224: 08010245 .word 0x08010245
  37696. 8010228: 0801024d .word 0x0801024d
  37697. 801022c: 08010279 .word 0x08010279
  37698. 8010230: 08010281 .word 0x08010281
  37699. 8010234: 2300 movs r3, #0
  37700. 8010236: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37701. 801023a: e14a b.n 80104d2 <UART_SetConfig+0x5a6>
  37702. 801023c: 2304 movs r3, #4
  37703. 801023e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37704. 8010242: e146 b.n 80104d2 <UART_SetConfig+0x5a6>
  37705. 8010244: 2308 movs r3, #8
  37706. 8010246: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37707. 801024a: e142 b.n 80104d2 <UART_SetConfig+0x5a6>
  37708. 801024c: 2310 movs r3, #16
  37709. 801024e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37710. 8010252: e13e b.n 80104d2 <UART_SetConfig+0x5a6>
  37711. 8010254: cfff69f3 .word 0xcfff69f3
  37712. 8010258: 58000c00 .word 0x58000c00
  37713. 801025c: 11fff4ff .word 0x11fff4ff
  37714. 8010260: 40011000 .word 0x40011000
  37715. 8010264: 58024400 .word 0x58024400
  37716. 8010268: 40004400 .word 0x40004400
  37717. 801026c: 40004800 .word 0x40004800
  37718. 8010270: 40004c00 .word 0x40004c00
  37719. 8010274: 40005000 .word 0x40005000
  37720. 8010278: 2320 movs r3, #32
  37721. 801027a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37722. 801027e: e128 b.n 80104d2 <UART_SetConfig+0x5a6>
  37723. 8010280: 2340 movs r3, #64 @ 0x40
  37724. 8010282: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37725. 8010286: e124 b.n 80104d2 <UART_SetConfig+0x5a6>
  37726. 8010288: 2380 movs r3, #128 @ 0x80
  37727. 801028a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37728. 801028e: e120 b.n 80104d2 <UART_SetConfig+0x5a6>
  37729. 8010290: 697b ldr r3, [r7, #20]
  37730. 8010292: 681b ldr r3, [r3, #0]
  37731. 8010294: 4acb ldr r2, [pc, #812] @ (80105c4 <UART_SetConfig+0x698>)
  37732. 8010296: 4293 cmp r3, r2
  37733. 8010298: d176 bne.n 8010388 <UART_SetConfig+0x45c>
  37734. 801029a: 4bcb ldr r3, [pc, #812] @ (80105c8 <UART_SetConfig+0x69c>)
  37735. 801029c: 6d5b ldr r3, [r3, #84] @ 0x54
  37736. 801029e: f003 0338 and.w r3, r3, #56 @ 0x38
  37737. 80102a2: 2b28 cmp r3, #40 @ 0x28
  37738. 80102a4: d86c bhi.n 8010380 <UART_SetConfig+0x454>
  37739. 80102a6: a201 add r2, pc, #4 @ (adr r2, 80102ac <UART_SetConfig+0x380>)
  37740. 80102a8: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  37741. 80102ac: 08010351 .word 0x08010351
  37742. 80102b0: 08010381 .word 0x08010381
  37743. 80102b4: 08010381 .word 0x08010381
  37744. 80102b8: 08010381 .word 0x08010381
  37745. 80102bc: 08010381 .word 0x08010381
  37746. 80102c0: 08010381 .word 0x08010381
  37747. 80102c4: 08010381 .word 0x08010381
  37748. 80102c8: 08010381 .word 0x08010381
  37749. 80102cc: 08010359 .word 0x08010359
  37750. 80102d0: 08010381 .word 0x08010381
  37751. 80102d4: 08010381 .word 0x08010381
  37752. 80102d8: 08010381 .word 0x08010381
  37753. 80102dc: 08010381 .word 0x08010381
  37754. 80102e0: 08010381 .word 0x08010381
  37755. 80102e4: 08010381 .word 0x08010381
  37756. 80102e8: 08010381 .word 0x08010381
  37757. 80102ec: 08010361 .word 0x08010361
  37758. 80102f0: 08010381 .word 0x08010381
  37759. 80102f4: 08010381 .word 0x08010381
  37760. 80102f8: 08010381 .word 0x08010381
  37761. 80102fc: 08010381 .word 0x08010381
  37762. 8010300: 08010381 .word 0x08010381
  37763. 8010304: 08010381 .word 0x08010381
  37764. 8010308: 08010381 .word 0x08010381
  37765. 801030c: 08010369 .word 0x08010369
  37766. 8010310: 08010381 .word 0x08010381
  37767. 8010314: 08010381 .word 0x08010381
  37768. 8010318: 08010381 .word 0x08010381
  37769. 801031c: 08010381 .word 0x08010381
  37770. 8010320: 08010381 .word 0x08010381
  37771. 8010324: 08010381 .word 0x08010381
  37772. 8010328: 08010381 .word 0x08010381
  37773. 801032c: 08010371 .word 0x08010371
  37774. 8010330: 08010381 .word 0x08010381
  37775. 8010334: 08010381 .word 0x08010381
  37776. 8010338: 08010381 .word 0x08010381
  37777. 801033c: 08010381 .word 0x08010381
  37778. 8010340: 08010381 .word 0x08010381
  37779. 8010344: 08010381 .word 0x08010381
  37780. 8010348: 08010381 .word 0x08010381
  37781. 801034c: 08010379 .word 0x08010379
  37782. 8010350: 2301 movs r3, #1
  37783. 8010352: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37784. 8010356: e0bc b.n 80104d2 <UART_SetConfig+0x5a6>
  37785. 8010358: 2304 movs r3, #4
  37786. 801035a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37787. 801035e: e0b8 b.n 80104d2 <UART_SetConfig+0x5a6>
  37788. 8010360: 2308 movs r3, #8
  37789. 8010362: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37790. 8010366: e0b4 b.n 80104d2 <UART_SetConfig+0x5a6>
  37791. 8010368: 2310 movs r3, #16
  37792. 801036a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37793. 801036e: e0b0 b.n 80104d2 <UART_SetConfig+0x5a6>
  37794. 8010370: 2320 movs r3, #32
  37795. 8010372: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37796. 8010376: e0ac b.n 80104d2 <UART_SetConfig+0x5a6>
  37797. 8010378: 2340 movs r3, #64 @ 0x40
  37798. 801037a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37799. 801037e: e0a8 b.n 80104d2 <UART_SetConfig+0x5a6>
  37800. 8010380: 2380 movs r3, #128 @ 0x80
  37801. 8010382: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37802. 8010386: e0a4 b.n 80104d2 <UART_SetConfig+0x5a6>
  37803. 8010388: 697b ldr r3, [r7, #20]
  37804. 801038a: 681b ldr r3, [r3, #0]
  37805. 801038c: 4a8f ldr r2, [pc, #572] @ (80105cc <UART_SetConfig+0x6a0>)
  37806. 801038e: 4293 cmp r3, r2
  37807. 8010390: d130 bne.n 80103f4 <UART_SetConfig+0x4c8>
  37808. 8010392: 4b8d ldr r3, [pc, #564] @ (80105c8 <UART_SetConfig+0x69c>)
  37809. 8010394: 6d5b ldr r3, [r3, #84] @ 0x54
  37810. 8010396: f003 0307 and.w r3, r3, #7
  37811. 801039a: 2b05 cmp r3, #5
  37812. 801039c: d826 bhi.n 80103ec <UART_SetConfig+0x4c0>
  37813. 801039e: a201 add r2, pc, #4 @ (adr r2, 80103a4 <UART_SetConfig+0x478>)
  37814. 80103a0: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  37815. 80103a4: 080103bd .word 0x080103bd
  37816. 80103a8: 080103c5 .word 0x080103c5
  37817. 80103ac: 080103cd .word 0x080103cd
  37818. 80103b0: 080103d5 .word 0x080103d5
  37819. 80103b4: 080103dd .word 0x080103dd
  37820. 80103b8: 080103e5 .word 0x080103e5
  37821. 80103bc: 2300 movs r3, #0
  37822. 80103be: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37823. 80103c2: e086 b.n 80104d2 <UART_SetConfig+0x5a6>
  37824. 80103c4: 2304 movs r3, #4
  37825. 80103c6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37826. 80103ca: e082 b.n 80104d2 <UART_SetConfig+0x5a6>
  37827. 80103cc: 2308 movs r3, #8
  37828. 80103ce: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37829. 80103d2: e07e b.n 80104d2 <UART_SetConfig+0x5a6>
  37830. 80103d4: 2310 movs r3, #16
  37831. 80103d6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37832. 80103da: e07a b.n 80104d2 <UART_SetConfig+0x5a6>
  37833. 80103dc: 2320 movs r3, #32
  37834. 80103de: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37835. 80103e2: e076 b.n 80104d2 <UART_SetConfig+0x5a6>
  37836. 80103e4: 2340 movs r3, #64 @ 0x40
  37837. 80103e6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37838. 80103ea: e072 b.n 80104d2 <UART_SetConfig+0x5a6>
  37839. 80103ec: 2380 movs r3, #128 @ 0x80
  37840. 80103ee: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37841. 80103f2: e06e b.n 80104d2 <UART_SetConfig+0x5a6>
  37842. 80103f4: 697b ldr r3, [r7, #20]
  37843. 80103f6: 681b ldr r3, [r3, #0]
  37844. 80103f8: 4a75 ldr r2, [pc, #468] @ (80105d0 <UART_SetConfig+0x6a4>)
  37845. 80103fa: 4293 cmp r3, r2
  37846. 80103fc: d130 bne.n 8010460 <UART_SetConfig+0x534>
  37847. 80103fe: 4b72 ldr r3, [pc, #456] @ (80105c8 <UART_SetConfig+0x69c>)
  37848. 8010400: 6d5b ldr r3, [r3, #84] @ 0x54
  37849. 8010402: f003 0307 and.w r3, r3, #7
  37850. 8010406: 2b05 cmp r3, #5
  37851. 8010408: d826 bhi.n 8010458 <UART_SetConfig+0x52c>
  37852. 801040a: a201 add r2, pc, #4 @ (adr r2, 8010410 <UART_SetConfig+0x4e4>)
  37853. 801040c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  37854. 8010410: 08010429 .word 0x08010429
  37855. 8010414: 08010431 .word 0x08010431
  37856. 8010418: 08010439 .word 0x08010439
  37857. 801041c: 08010441 .word 0x08010441
  37858. 8010420: 08010449 .word 0x08010449
  37859. 8010424: 08010451 .word 0x08010451
  37860. 8010428: 2300 movs r3, #0
  37861. 801042a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37862. 801042e: e050 b.n 80104d2 <UART_SetConfig+0x5a6>
  37863. 8010430: 2304 movs r3, #4
  37864. 8010432: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37865. 8010436: e04c b.n 80104d2 <UART_SetConfig+0x5a6>
  37866. 8010438: 2308 movs r3, #8
  37867. 801043a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37868. 801043e: e048 b.n 80104d2 <UART_SetConfig+0x5a6>
  37869. 8010440: 2310 movs r3, #16
  37870. 8010442: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37871. 8010446: e044 b.n 80104d2 <UART_SetConfig+0x5a6>
  37872. 8010448: 2320 movs r3, #32
  37873. 801044a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37874. 801044e: e040 b.n 80104d2 <UART_SetConfig+0x5a6>
  37875. 8010450: 2340 movs r3, #64 @ 0x40
  37876. 8010452: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37877. 8010456: e03c b.n 80104d2 <UART_SetConfig+0x5a6>
  37878. 8010458: 2380 movs r3, #128 @ 0x80
  37879. 801045a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37880. 801045e: e038 b.n 80104d2 <UART_SetConfig+0x5a6>
  37881. 8010460: 697b ldr r3, [r7, #20]
  37882. 8010462: 681b ldr r3, [r3, #0]
  37883. 8010464: 4a5b ldr r2, [pc, #364] @ (80105d4 <UART_SetConfig+0x6a8>)
  37884. 8010466: 4293 cmp r3, r2
  37885. 8010468: d130 bne.n 80104cc <UART_SetConfig+0x5a0>
  37886. 801046a: 4b57 ldr r3, [pc, #348] @ (80105c8 <UART_SetConfig+0x69c>)
  37887. 801046c: 6d9b ldr r3, [r3, #88] @ 0x58
  37888. 801046e: f003 0307 and.w r3, r3, #7
  37889. 8010472: 2b05 cmp r3, #5
  37890. 8010474: d826 bhi.n 80104c4 <UART_SetConfig+0x598>
  37891. 8010476: a201 add r2, pc, #4 @ (adr r2, 801047c <UART_SetConfig+0x550>)
  37892. 8010478: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  37893. 801047c: 08010495 .word 0x08010495
  37894. 8010480: 0801049d .word 0x0801049d
  37895. 8010484: 080104a5 .word 0x080104a5
  37896. 8010488: 080104ad .word 0x080104ad
  37897. 801048c: 080104b5 .word 0x080104b5
  37898. 8010490: 080104bd .word 0x080104bd
  37899. 8010494: 2302 movs r3, #2
  37900. 8010496: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37901. 801049a: e01a b.n 80104d2 <UART_SetConfig+0x5a6>
  37902. 801049c: 2304 movs r3, #4
  37903. 801049e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37904. 80104a2: e016 b.n 80104d2 <UART_SetConfig+0x5a6>
  37905. 80104a4: 2308 movs r3, #8
  37906. 80104a6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37907. 80104aa: e012 b.n 80104d2 <UART_SetConfig+0x5a6>
  37908. 80104ac: 2310 movs r3, #16
  37909. 80104ae: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37910. 80104b2: e00e b.n 80104d2 <UART_SetConfig+0x5a6>
  37911. 80104b4: 2320 movs r3, #32
  37912. 80104b6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37913. 80104ba: e00a b.n 80104d2 <UART_SetConfig+0x5a6>
  37914. 80104bc: 2340 movs r3, #64 @ 0x40
  37915. 80104be: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37916. 80104c2: e006 b.n 80104d2 <UART_SetConfig+0x5a6>
  37917. 80104c4: 2380 movs r3, #128 @ 0x80
  37918. 80104c6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37919. 80104ca: e002 b.n 80104d2 <UART_SetConfig+0x5a6>
  37920. 80104cc: 2380 movs r3, #128 @ 0x80
  37921. 80104ce: f887 3043 strb.w r3, [r7, #67] @ 0x43
  37922. /* Check LPUART instance */
  37923. if (UART_INSTANCE_LOWPOWER(huart))
  37924. 80104d2: 697b ldr r3, [r7, #20]
  37925. 80104d4: 681b ldr r3, [r3, #0]
  37926. 80104d6: 4a3f ldr r2, [pc, #252] @ (80105d4 <UART_SetConfig+0x6a8>)
  37927. 80104d8: 4293 cmp r3, r2
  37928. 80104da: f040 80f8 bne.w 80106ce <UART_SetConfig+0x7a2>
  37929. {
  37930. /* Retrieve frequency clock */
  37931. switch (clocksource)
  37932. 80104de: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  37933. 80104e2: 2b20 cmp r3, #32
  37934. 80104e4: dc46 bgt.n 8010574 <UART_SetConfig+0x648>
  37935. 80104e6: 2b02 cmp r3, #2
  37936. 80104e8: f2c0 8082 blt.w 80105f0 <UART_SetConfig+0x6c4>
  37937. 80104ec: 3b02 subs r3, #2
  37938. 80104ee: 2b1e cmp r3, #30
  37939. 80104f0: d87e bhi.n 80105f0 <UART_SetConfig+0x6c4>
  37940. 80104f2: a201 add r2, pc, #4 @ (adr r2, 80104f8 <UART_SetConfig+0x5cc>)
  37941. 80104f4: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  37942. 80104f8: 0801057b .word 0x0801057b
  37943. 80104fc: 080105f1 .word 0x080105f1
  37944. 8010500: 08010583 .word 0x08010583
  37945. 8010504: 080105f1 .word 0x080105f1
  37946. 8010508: 080105f1 .word 0x080105f1
  37947. 801050c: 080105f1 .word 0x080105f1
  37948. 8010510: 08010593 .word 0x08010593
  37949. 8010514: 080105f1 .word 0x080105f1
  37950. 8010518: 080105f1 .word 0x080105f1
  37951. 801051c: 080105f1 .word 0x080105f1
  37952. 8010520: 080105f1 .word 0x080105f1
  37953. 8010524: 080105f1 .word 0x080105f1
  37954. 8010528: 080105f1 .word 0x080105f1
  37955. 801052c: 080105f1 .word 0x080105f1
  37956. 8010530: 080105a3 .word 0x080105a3
  37957. 8010534: 080105f1 .word 0x080105f1
  37958. 8010538: 080105f1 .word 0x080105f1
  37959. 801053c: 080105f1 .word 0x080105f1
  37960. 8010540: 080105f1 .word 0x080105f1
  37961. 8010544: 080105f1 .word 0x080105f1
  37962. 8010548: 080105f1 .word 0x080105f1
  37963. 801054c: 080105f1 .word 0x080105f1
  37964. 8010550: 080105f1 .word 0x080105f1
  37965. 8010554: 080105f1 .word 0x080105f1
  37966. 8010558: 080105f1 .word 0x080105f1
  37967. 801055c: 080105f1 .word 0x080105f1
  37968. 8010560: 080105f1 .word 0x080105f1
  37969. 8010564: 080105f1 .word 0x080105f1
  37970. 8010568: 080105f1 .word 0x080105f1
  37971. 801056c: 080105f1 .word 0x080105f1
  37972. 8010570: 080105e3 .word 0x080105e3
  37973. 8010574: 2b40 cmp r3, #64 @ 0x40
  37974. 8010576: d037 beq.n 80105e8 <UART_SetConfig+0x6bc>
  37975. 8010578: e03a b.n 80105f0 <UART_SetConfig+0x6c4>
  37976. {
  37977. case UART_CLOCKSOURCE_D3PCLK1:
  37978. pclk = HAL_RCCEx_GetD3PCLK1Freq();
  37979. 801057a: f7fc fdaf bl 800d0dc <HAL_RCCEx_GetD3PCLK1Freq>
  37980. 801057e: 63f8 str r0, [r7, #60] @ 0x3c
  37981. break;
  37982. 8010580: e03c b.n 80105fc <UART_SetConfig+0x6d0>
  37983. case UART_CLOCKSOURCE_PLL2:
  37984. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  37985. 8010582: f107 0324 add.w r3, r7, #36 @ 0x24
  37986. 8010586: 4618 mov r0, r3
  37987. 8010588: f7fc fdbe bl 800d108 <HAL_RCCEx_GetPLL2ClockFreq>
  37988. pclk = pll2_clocks.PLL2_Q_Frequency;
  37989. 801058c: 6abb ldr r3, [r7, #40] @ 0x28
  37990. 801058e: 63fb str r3, [r7, #60] @ 0x3c
  37991. break;
  37992. 8010590: e034 b.n 80105fc <UART_SetConfig+0x6d0>
  37993. case UART_CLOCKSOURCE_PLL3:
  37994. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  37995. 8010592: f107 0318 add.w r3, r7, #24
  37996. 8010596: 4618 mov r0, r3
  37997. 8010598: f7fc ff0a bl 800d3b0 <HAL_RCCEx_GetPLL3ClockFreq>
  37998. pclk = pll3_clocks.PLL3_Q_Frequency;
  37999. 801059c: 69fb ldr r3, [r7, #28]
  38000. 801059e: 63fb str r3, [r7, #60] @ 0x3c
  38001. break;
  38002. 80105a0: e02c b.n 80105fc <UART_SetConfig+0x6d0>
  38003. case UART_CLOCKSOURCE_HSI:
  38004. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  38005. 80105a2: 4b09 ldr r3, [pc, #36] @ (80105c8 <UART_SetConfig+0x69c>)
  38006. 80105a4: 681b ldr r3, [r3, #0]
  38007. 80105a6: f003 0320 and.w r3, r3, #32
  38008. 80105aa: 2b00 cmp r3, #0
  38009. 80105ac: d016 beq.n 80105dc <UART_SetConfig+0x6b0>
  38010. {
  38011. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  38012. 80105ae: 4b06 ldr r3, [pc, #24] @ (80105c8 <UART_SetConfig+0x69c>)
  38013. 80105b0: 681b ldr r3, [r3, #0]
  38014. 80105b2: 08db lsrs r3, r3, #3
  38015. 80105b4: f003 0303 and.w r3, r3, #3
  38016. 80105b8: 4a07 ldr r2, [pc, #28] @ (80105d8 <UART_SetConfig+0x6ac>)
  38017. 80105ba: fa22 f303 lsr.w r3, r2, r3
  38018. 80105be: 63fb str r3, [r7, #60] @ 0x3c
  38019. }
  38020. else
  38021. {
  38022. pclk = (uint32_t) HSI_VALUE;
  38023. }
  38024. break;
  38025. 80105c0: e01c b.n 80105fc <UART_SetConfig+0x6d0>
  38026. 80105c2: bf00 nop
  38027. 80105c4: 40011400 .word 0x40011400
  38028. 80105c8: 58024400 .word 0x58024400
  38029. 80105cc: 40007800 .word 0x40007800
  38030. 80105d0: 40007c00 .word 0x40007c00
  38031. 80105d4: 58000c00 .word 0x58000c00
  38032. 80105d8: 03d09000 .word 0x03d09000
  38033. pclk = (uint32_t) HSI_VALUE;
  38034. 80105dc: 4b9d ldr r3, [pc, #628] @ (8010854 <UART_SetConfig+0x928>)
  38035. 80105de: 63fb str r3, [r7, #60] @ 0x3c
  38036. break;
  38037. 80105e0: e00c b.n 80105fc <UART_SetConfig+0x6d0>
  38038. case UART_CLOCKSOURCE_CSI:
  38039. pclk = (uint32_t) CSI_VALUE;
  38040. 80105e2: 4b9d ldr r3, [pc, #628] @ (8010858 <UART_SetConfig+0x92c>)
  38041. 80105e4: 63fb str r3, [r7, #60] @ 0x3c
  38042. break;
  38043. 80105e6: e009 b.n 80105fc <UART_SetConfig+0x6d0>
  38044. case UART_CLOCKSOURCE_LSE:
  38045. pclk = (uint32_t) LSE_VALUE;
  38046. 80105e8: f44f 4300 mov.w r3, #32768 @ 0x8000
  38047. 80105ec: 63fb str r3, [r7, #60] @ 0x3c
  38048. break;
  38049. 80105ee: e005 b.n 80105fc <UART_SetConfig+0x6d0>
  38050. default:
  38051. pclk = 0U;
  38052. 80105f0: 2300 movs r3, #0
  38053. 80105f2: 63fb str r3, [r7, #60] @ 0x3c
  38054. ret = HAL_ERROR;
  38055. 80105f4: 2301 movs r3, #1
  38056. 80105f6: f887 3042 strb.w r3, [r7, #66] @ 0x42
  38057. break;
  38058. 80105fa: bf00 nop
  38059. }
  38060. /* If proper clock source reported */
  38061. if (pclk != 0U)
  38062. 80105fc: 6bfb ldr r3, [r7, #60] @ 0x3c
  38063. 80105fe: 2b00 cmp r3, #0
  38064. 8010600: f000 81de beq.w 80109c0 <UART_SetConfig+0xa94>
  38065. {
  38066. /* Compute clock after Prescaler */
  38067. lpuart_ker_ck_pres = (pclk / UARTPrescTable[huart->Init.ClockPrescaler]);
  38068. 8010604: 697b ldr r3, [r7, #20]
  38069. 8010606: 6a5b ldr r3, [r3, #36] @ 0x24
  38070. 8010608: 4a94 ldr r2, [pc, #592] @ (801085c <UART_SetConfig+0x930>)
  38071. 801060a: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  38072. 801060e: 461a mov r2, r3
  38073. 8010610: 6bfb ldr r3, [r7, #60] @ 0x3c
  38074. 8010612: fbb3 f3f2 udiv r3, r3, r2
  38075. 8010616: 633b str r3, [r7, #48] @ 0x30
  38076. /* Ensure that Frequency clock is in the range [3 * baudrate, 4096 * baudrate] */
  38077. if ((lpuart_ker_ck_pres < (3U * huart->Init.BaudRate)) ||
  38078. 8010618: 697b ldr r3, [r7, #20]
  38079. 801061a: 685a ldr r2, [r3, #4]
  38080. 801061c: 4613 mov r3, r2
  38081. 801061e: 005b lsls r3, r3, #1
  38082. 8010620: 4413 add r3, r2
  38083. 8010622: 6b3a ldr r2, [r7, #48] @ 0x30
  38084. 8010624: 429a cmp r2, r3
  38085. 8010626: d305 bcc.n 8010634 <UART_SetConfig+0x708>
  38086. (lpuart_ker_ck_pres > (4096U * huart->Init.BaudRate)))
  38087. 8010628: 697b ldr r3, [r7, #20]
  38088. 801062a: 685b ldr r3, [r3, #4]
  38089. 801062c: 031b lsls r3, r3, #12
  38090. if ((lpuart_ker_ck_pres < (3U * huart->Init.BaudRate)) ||
  38091. 801062e: 6b3a ldr r2, [r7, #48] @ 0x30
  38092. 8010630: 429a cmp r2, r3
  38093. 8010632: d903 bls.n 801063c <UART_SetConfig+0x710>
  38094. {
  38095. ret = HAL_ERROR;
  38096. 8010634: 2301 movs r3, #1
  38097. 8010636: f887 3042 strb.w r3, [r7, #66] @ 0x42
  38098. 801063a: e1c1 b.n 80109c0 <UART_SetConfig+0xa94>
  38099. }
  38100. else
  38101. {
  38102. /* Check computed UsartDiv value is in allocated range
  38103. (it is forbidden to write values lower than 0x300 in the LPUART_BRR register) */
  38104. usartdiv = (uint32_t)(UART_DIV_LPUART(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  38105. 801063c: 6bfb ldr r3, [r7, #60] @ 0x3c
  38106. 801063e: 2200 movs r2, #0
  38107. 8010640: 60bb str r3, [r7, #8]
  38108. 8010642: 60fa str r2, [r7, #12]
  38109. 8010644: 697b ldr r3, [r7, #20]
  38110. 8010646: 6a5b ldr r3, [r3, #36] @ 0x24
  38111. 8010648: 4a84 ldr r2, [pc, #528] @ (801085c <UART_SetConfig+0x930>)
  38112. 801064a: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  38113. 801064e: b29b uxth r3, r3
  38114. 8010650: 2200 movs r2, #0
  38115. 8010652: 603b str r3, [r7, #0]
  38116. 8010654: 607a str r2, [r7, #4]
  38117. 8010656: e9d7 2300 ldrd r2, r3, [r7]
  38118. 801065a: e9d7 0102 ldrd r0, r1, [r7, #8]
  38119. 801065e: f7ef fe8f bl 8000380 <__aeabi_uldivmod>
  38120. 8010662: 4602 mov r2, r0
  38121. 8010664: 460b mov r3, r1
  38122. 8010666: 4610 mov r0, r2
  38123. 8010668: 4619 mov r1, r3
  38124. 801066a: f04f 0200 mov.w r2, #0
  38125. 801066e: f04f 0300 mov.w r3, #0
  38126. 8010672: 020b lsls r3, r1, #8
  38127. 8010674: ea43 6310 orr.w r3, r3, r0, lsr #24
  38128. 8010678: 0202 lsls r2, r0, #8
  38129. 801067a: 6979 ldr r1, [r7, #20]
  38130. 801067c: 6849 ldr r1, [r1, #4]
  38131. 801067e: 0849 lsrs r1, r1, #1
  38132. 8010680: 2000 movs r0, #0
  38133. 8010682: 460c mov r4, r1
  38134. 8010684: 4605 mov r5, r0
  38135. 8010686: eb12 0804 adds.w r8, r2, r4
  38136. 801068a: eb43 0905 adc.w r9, r3, r5
  38137. 801068e: 697b ldr r3, [r7, #20]
  38138. 8010690: 685b ldr r3, [r3, #4]
  38139. 8010692: 2200 movs r2, #0
  38140. 8010694: 469a mov sl, r3
  38141. 8010696: 4693 mov fp, r2
  38142. 8010698: 4652 mov r2, sl
  38143. 801069a: 465b mov r3, fp
  38144. 801069c: 4640 mov r0, r8
  38145. 801069e: 4649 mov r1, r9
  38146. 80106a0: f7ef fe6e bl 8000380 <__aeabi_uldivmod>
  38147. 80106a4: 4602 mov r2, r0
  38148. 80106a6: 460b mov r3, r1
  38149. 80106a8: 4613 mov r3, r2
  38150. 80106aa: 63bb str r3, [r7, #56] @ 0x38
  38151. if ((usartdiv >= LPUART_BRR_MIN) && (usartdiv <= LPUART_BRR_MAX))
  38152. 80106ac: 6bbb ldr r3, [r7, #56] @ 0x38
  38153. 80106ae: f5b3 7f40 cmp.w r3, #768 @ 0x300
  38154. 80106b2: d308 bcc.n 80106c6 <UART_SetConfig+0x79a>
  38155. 80106b4: 6bbb ldr r3, [r7, #56] @ 0x38
  38156. 80106b6: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  38157. 80106ba: d204 bcs.n 80106c6 <UART_SetConfig+0x79a>
  38158. {
  38159. huart->Instance->BRR = usartdiv;
  38160. 80106bc: 697b ldr r3, [r7, #20]
  38161. 80106be: 681b ldr r3, [r3, #0]
  38162. 80106c0: 6bba ldr r2, [r7, #56] @ 0x38
  38163. 80106c2: 60da str r2, [r3, #12]
  38164. 80106c4: e17c b.n 80109c0 <UART_SetConfig+0xa94>
  38165. }
  38166. else
  38167. {
  38168. ret = HAL_ERROR;
  38169. 80106c6: 2301 movs r3, #1
  38170. 80106c8: f887 3042 strb.w r3, [r7, #66] @ 0x42
  38171. 80106cc: e178 b.n 80109c0 <UART_SetConfig+0xa94>
  38172. } /* if ( (lpuart_ker_ck_pres < (3 * huart->Init.BaudRate) ) ||
  38173. (lpuart_ker_ck_pres > (4096 * huart->Init.BaudRate) )) */
  38174. } /* if (pclk != 0) */
  38175. }
  38176. /* Check UART Over Sampling to set Baud Rate Register */
  38177. else if (huart->Init.OverSampling == UART_OVERSAMPLING_8)
  38178. 80106ce: 697b ldr r3, [r7, #20]
  38179. 80106d0: 69db ldr r3, [r3, #28]
  38180. 80106d2: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  38181. 80106d6: f040 80c5 bne.w 8010864 <UART_SetConfig+0x938>
  38182. {
  38183. switch (clocksource)
  38184. 80106da: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  38185. 80106de: 2b20 cmp r3, #32
  38186. 80106e0: dc48 bgt.n 8010774 <UART_SetConfig+0x848>
  38187. 80106e2: 2b00 cmp r3, #0
  38188. 80106e4: db7b blt.n 80107de <UART_SetConfig+0x8b2>
  38189. 80106e6: 2b20 cmp r3, #32
  38190. 80106e8: d879 bhi.n 80107de <UART_SetConfig+0x8b2>
  38191. 80106ea: a201 add r2, pc, #4 @ (adr r2, 80106f0 <UART_SetConfig+0x7c4>)
  38192. 80106ec: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  38193. 80106f0: 0801077b .word 0x0801077b
  38194. 80106f4: 08010783 .word 0x08010783
  38195. 80106f8: 080107df .word 0x080107df
  38196. 80106fc: 080107df .word 0x080107df
  38197. 8010700: 0801078b .word 0x0801078b
  38198. 8010704: 080107df .word 0x080107df
  38199. 8010708: 080107df .word 0x080107df
  38200. 801070c: 080107df .word 0x080107df
  38201. 8010710: 0801079b .word 0x0801079b
  38202. 8010714: 080107df .word 0x080107df
  38203. 8010718: 080107df .word 0x080107df
  38204. 801071c: 080107df .word 0x080107df
  38205. 8010720: 080107df .word 0x080107df
  38206. 8010724: 080107df .word 0x080107df
  38207. 8010728: 080107df .word 0x080107df
  38208. 801072c: 080107df .word 0x080107df
  38209. 8010730: 080107ab .word 0x080107ab
  38210. 8010734: 080107df .word 0x080107df
  38211. 8010738: 080107df .word 0x080107df
  38212. 801073c: 080107df .word 0x080107df
  38213. 8010740: 080107df .word 0x080107df
  38214. 8010744: 080107df .word 0x080107df
  38215. 8010748: 080107df .word 0x080107df
  38216. 801074c: 080107df .word 0x080107df
  38217. 8010750: 080107df .word 0x080107df
  38218. 8010754: 080107df .word 0x080107df
  38219. 8010758: 080107df .word 0x080107df
  38220. 801075c: 080107df .word 0x080107df
  38221. 8010760: 080107df .word 0x080107df
  38222. 8010764: 080107df .word 0x080107df
  38223. 8010768: 080107df .word 0x080107df
  38224. 801076c: 080107df .word 0x080107df
  38225. 8010770: 080107d1 .word 0x080107d1
  38226. 8010774: 2b40 cmp r3, #64 @ 0x40
  38227. 8010776: d02e beq.n 80107d6 <UART_SetConfig+0x8aa>
  38228. 8010778: e031 b.n 80107de <UART_SetConfig+0x8b2>
  38229. {
  38230. case UART_CLOCKSOURCE_D2PCLK1:
  38231. pclk = HAL_RCC_GetPCLK1Freq();
  38232. 801077a: f7fa fcd3 bl 800b124 <HAL_RCC_GetPCLK1Freq>
  38233. 801077e: 63f8 str r0, [r7, #60] @ 0x3c
  38234. break;
  38235. 8010780: e033 b.n 80107ea <UART_SetConfig+0x8be>
  38236. case UART_CLOCKSOURCE_D2PCLK2:
  38237. pclk = HAL_RCC_GetPCLK2Freq();
  38238. 8010782: f7fa fce5 bl 800b150 <HAL_RCC_GetPCLK2Freq>
  38239. 8010786: 63f8 str r0, [r7, #60] @ 0x3c
  38240. break;
  38241. 8010788: e02f b.n 80107ea <UART_SetConfig+0x8be>
  38242. case UART_CLOCKSOURCE_PLL2:
  38243. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  38244. 801078a: f107 0324 add.w r3, r7, #36 @ 0x24
  38245. 801078e: 4618 mov r0, r3
  38246. 8010790: f7fc fcba bl 800d108 <HAL_RCCEx_GetPLL2ClockFreq>
  38247. pclk = pll2_clocks.PLL2_Q_Frequency;
  38248. 8010794: 6abb ldr r3, [r7, #40] @ 0x28
  38249. 8010796: 63fb str r3, [r7, #60] @ 0x3c
  38250. break;
  38251. 8010798: e027 b.n 80107ea <UART_SetConfig+0x8be>
  38252. case UART_CLOCKSOURCE_PLL3:
  38253. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  38254. 801079a: f107 0318 add.w r3, r7, #24
  38255. 801079e: 4618 mov r0, r3
  38256. 80107a0: f7fc fe06 bl 800d3b0 <HAL_RCCEx_GetPLL3ClockFreq>
  38257. pclk = pll3_clocks.PLL3_Q_Frequency;
  38258. 80107a4: 69fb ldr r3, [r7, #28]
  38259. 80107a6: 63fb str r3, [r7, #60] @ 0x3c
  38260. break;
  38261. 80107a8: e01f b.n 80107ea <UART_SetConfig+0x8be>
  38262. case UART_CLOCKSOURCE_HSI:
  38263. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  38264. 80107aa: 4b2d ldr r3, [pc, #180] @ (8010860 <UART_SetConfig+0x934>)
  38265. 80107ac: 681b ldr r3, [r3, #0]
  38266. 80107ae: f003 0320 and.w r3, r3, #32
  38267. 80107b2: 2b00 cmp r3, #0
  38268. 80107b4: d009 beq.n 80107ca <UART_SetConfig+0x89e>
  38269. {
  38270. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  38271. 80107b6: 4b2a ldr r3, [pc, #168] @ (8010860 <UART_SetConfig+0x934>)
  38272. 80107b8: 681b ldr r3, [r3, #0]
  38273. 80107ba: 08db lsrs r3, r3, #3
  38274. 80107bc: f003 0303 and.w r3, r3, #3
  38275. 80107c0: 4a24 ldr r2, [pc, #144] @ (8010854 <UART_SetConfig+0x928>)
  38276. 80107c2: fa22 f303 lsr.w r3, r2, r3
  38277. 80107c6: 63fb str r3, [r7, #60] @ 0x3c
  38278. }
  38279. else
  38280. {
  38281. pclk = (uint32_t) HSI_VALUE;
  38282. }
  38283. break;
  38284. 80107c8: e00f b.n 80107ea <UART_SetConfig+0x8be>
  38285. pclk = (uint32_t) HSI_VALUE;
  38286. 80107ca: 4b22 ldr r3, [pc, #136] @ (8010854 <UART_SetConfig+0x928>)
  38287. 80107cc: 63fb str r3, [r7, #60] @ 0x3c
  38288. break;
  38289. 80107ce: e00c b.n 80107ea <UART_SetConfig+0x8be>
  38290. case UART_CLOCKSOURCE_CSI:
  38291. pclk = (uint32_t) CSI_VALUE;
  38292. 80107d0: 4b21 ldr r3, [pc, #132] @ (8010858 <UART_SetConfig+0x92c>)
  38293. 80107d2: 63fb str r3, [r7, #60] @ 0x3c
  38294. break;
  38295. 80107d4: e009 b.n 80107ea <UART_SetConfig+0x8be>
  38296. case UART_CLOCKSOURCE_LSE:
  38297. pclk = (uint32_t) LSE_VALUE;
  38298. 80107d6: f44f 4300 mov.w r3, #32768 @ 0x8000
  38299. 80107da: 63fb str r3, [r7, #60] @ 0x3c
  38300. break;
  38301. 80107dc: e005 b.n 80107ea <UART_SetConfig+0x8be>
  38302. default:
  38303. pclk = 0U;
  38304. 80107de: 2300 movs r3, #0
  38305. 80107e0: 63fb str r3, [r7, #60] @ 0x3c
  38306. ret = HAL_ERROR;
  38307. 80107e2: 2301 movs r3, #1
  38308. 80107e4: f887 3042 strb.w r3, [r7, #66] @ 0x42
  38309. break;
  38310. 80107e8: bf00 nop
  38311. }
  38312. /* USARTDIV must be greater than or equal to 0d16 */
  38313. if (pclk != 0U)
  38314. 80107ea: 6bfb ldr r3, [r7, #60] @ 0x3c
  38315. 80107ec: 2b00 cmp r3, #0
  38316. 80107ee: f000 80e7 beq.w 80109c0 <UART_SetConfig+0xa94>
  38317. {
  38318. usartdiv = (uint32_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  38319. 80107f2: 697b ldr r3, [r7, #20]
  38320. 80107f4: 6a5b ldr r3, [r3, #36] @ 0x24
  38321. 80107f6: 4a19 ldr r2, [pc, #100] @ (801085c <UART_SetConfig+0x930>)
  38322. 80107f8: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  38323. 80107fc: 461a mov r2, r3
  38324. 80107fe: 6bfb ldr r3, [r7, #60] @ 0x3c
  38325. 8010800: fbb3 f3f2 udiv r3, r3, r2
  38326. 8010804: 005a lsls r2, r3, #1
  38327. 8010806: 697b ldr r3, [r7, #20]
  38328. 8010808: 685b ldr r3, [r3, #4]
  38329. 801080a: 085b lsrs r3, r3, #1
  38330. 801080c: 441a add r2, r3
  38331. 801080e: 697b ldr r3, [r7, #20]
  38332. 8010810: 685b ldr r3, [r3, #4]
  38333. 8010812: fbb2 f3f3 udiv r3, r2, r3
  38334. 8010816: 63bb str r3, [r7, #56] @ 0x38
  38335. if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX))
  38336. 8010818: 6bbb ldr r3, [r7, #56] @ 0x38
  38337. 801081a: 2b0f cmp r3, #15
  38338. 801081c: d916 bls.n 801084c <UART_SetConfig+0x920>
  38339. 801081e: 6bbb ldr r3, [r7, #56] @ 0x38
  38340. 8010820: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  38341. 8010824: d212 bcs.n 801084c <UART_SetConfig+0x920>
  38342. {
  38343. brrtemp = (uint16_t)(usartdiv & 0xFFF0U);
  38344. 8010826: 6bbb ldr r3, [r7, #56] @ 0x38
  38345. 8010828: b29b uxth r3, r3
  38346. 801082a: f023 030f bic.w r3, r3, #15
  38347. 801082e: 86fb strh r3, [r7, #54] @ 0x36
  38348. brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000FU) >> 1U);
  38349. 8010830: 6bbb ldr r3, [r7, #56] @ 0x38
  38350. 8010832: 085b lsrs r3, r3, #1
  38351. 8010834: b29b uxth r3, r3
  38352. 8010836: f003 0307 and.w r3, r3, #7
  38353. 801083a: b29a uxth r2, r3
  38354. 801083c: 8efb ldrh r3, [r7, #54] @ 0x36
  38355. 801083e: 4313 orrs r3, r2
  38356. 8010840: 86fb strh r3, [r7, #54] @ 0x36
  38357. huart->Instance->BRR = brrtemp;
  38358. 8010842: 697b ldr r3, [r7, #20]
  38359. 8010844: 681b ldr r3, [r3, #0]
  38360. 8010846: 8efa ldrh r2, [r7, #54] @ 0x36
  38361. 8010848: 60da str r2, [r3, #12]
  38362. 801084a: e0b9 b.n 80109c0 <UART_SetConfig+0xa94>
  38363. }
  38364. else
  38365. {
  38366. ret = HAL_ERROR;
  38367. 801084c: 2301 movs r3, #1
  38368. 801084e: f887 3042 strb.w r3, [r7, #66] @ 0x42
  38369. 8010852: e0b5 b.n 80109c0 <UART_SetConfig+0xa94>
  38370. 8010854: 03d09000 .word 0x03d09000
  38371. 8010858: 003d0900 .word 0x003d0900
  38372. 801085c: 080175e0 .word 0x080175e0
  38373. 8010860: 58024400 .word 0x58024400
  38374. }
  38375. }
  38376. }
  38377. else
  38378. {
  38379. switch (clocksource)
  38380. 8010864: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  38381. 8010868: 2b20 cmp r3, #32
  38382. 801086a: dc49 bgt.n 8010900 <UART_SetConfig+0x9d4>
  38383. 801086c: 2b00 cmp r3, #0
  38384. 801086e: db7c blt.n 801096a <UART_SetConfig+0xa3e>
  38385. 8010870: 2b20 cmp r3, #32
  38386. 8010872: d87a bhi.n 801096a <UART_SetConfig+0xa3e>
  38387. 8010874: a201 add r2, pc, #4 @ (adr r2, 801087c <UART_SetConfig+0x950>)
  38388. 8010876: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  38389. 801087a: bf00 nop
  38390. 801087c: 08010907 .word 0x08010907
  38391. 8010880: 0801090f .word 0x0801090f
  38392. 8010884: 0801096b .word 0x0801096b
  38393. 8010888: 0801096b .word 0x0801096b
  38394. 801088c: 08010917 .word 0x08010917
  38395. 8010890: 0801096b .word 0x0801096b
  38396. 8010894: 0801096b .word 0x0801096b
  38397. 8010898: 0801096b .word 0x0801096b
  38398. 801089c: 08010927 .word 0x08010927
  38399. 80108a0: 0801096b .word 0x0801096b
  38400. 80108a4: 0801096b .word 0x0801096b
  38401. 80108a8: 0801096b .word 0x0801096b
  38402. 80108ac: 0801096b .word 0x0801096b
  38403. 80108b0: 0801096b .word 0x0801096b
  38404. 80108b4: 0801096b .word 0x0801096b
  38405. 80108b8: 0801096b .word 0x0801096b
  38406. 80108bc: 08010937 .word 0x08010937
  38407. 80108c0: 0801096b .word 0x0801096b
  38408. 80108c4: 0801096b .word 0x0801096b
  38409. 80108c8: 0801096b .word 0x0801096b
  38410. 80108cc: 0801096b .word 0x0801096b
  38411. 80108d0: 0801096b .word 0x0801096b
  38412. 80108d4: 0801096b .word 0x0801096b
  38413. 80108d8: 0801096b .word 0x0801096b
  38414. 80108dc: 0801096b .word 0x0801096b
  38415. 80108e0: 0801096b .word 0x0801096b
  38416. 80108e4: 0801096b .word 0x0801096b
  38417. 80108e8: 0801096b .word 0x0801096b
  38418. 80108ec: 0801096b .word 0x0801096b
  38419. 80108f0: 0801096b .word 0x0801096b
  38420. 80108f4: 0801096b .word 0x0801096b
  38421. 80108f8: 0801096b .word 0x0801096b
  38422. 80108fc: 0801095d .word 0x0801095d
  38423. 8010900: 2b40 cmp r3, #64 @ 0x40
  38424. 8010902: d02e beq.n 8010962 <UART_SetConfig+0xa36>
  38425. 8010904: e031 b.n 801096a <UART_SetConfig+0xa3e>
  38426. {
  38427. case UART_CLOCKSOURCE_D2PCLK1:
  38428. pclk = HAL_RCC_GetPCLK1Freq();
  38429. 8010906: f7fa fc0d bl 800b124 <HAL_RCC_GetPCLK1Freq>
  38430. 801090a: 63f8 str r0, [r7, #60] @ 0x3c
  38431. break;
  38432. 801090c: e033 b.n 8010976 <UART_SetConfig+0xa4a>
  38433. case UART_CLOCKSOURCE_D2PCLK2:
  38434. pclk = HAL_RCC_GetPCLK2Freq();
  38435. 801090e: f7fa fc1f bl 800b150 <HAL_RCC_GetPCLK2Freq>
  38436. 8010912: 63f8 str r0, [r7, #60] @ 0x3c
  38437. break;
  38438. 8010914: e02f b.n 8010976 <UART_SetConfig+0xa4a>
  38439. case UART_CLOCKSOURCE_PLL2:
  38440. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  38441. 8010916: f107 0324 add.w r3, r7, #36 @ 0x24
  38442. 801091a: 4618 mov r0, r3
  38443. 801091c: f7fc fbf4 bl 800d108 <HAL_RCCEx_GetPLL2ClockFreq>
  38444. pclk = pll2_clocks.PLL2_Q_Frequency;
  38445. 8010920: 6abb ldr r3, [r7, #40] @ 0x28
  38446. 8010922: 63fb str r3, [r7, #60] @ 0x3c
  38447. break;
  38448. 8010924: e027 b.n 8010976 <UART_SetConfig+0xa4a>
  38449. case UART_CLOCKSOURCE_PLL3:
  38450. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  38451. 8010926: f107 0318 add.w r3, r7, #24
  38452. 801092a: 4618 mov r0, r3
  38453. 801092c: f7fc fd40 bl 800d3b0 <HAL_RCCEx_GetPLL3ClockFreq>
  38454. pclk = pll3_clocks.PLL3_Q_Frequency;
  38455. 8010930: 69fb ldr r3, [r7, #28]
  38456. 8010932: 63fb str r3, [r7, #60] @ 0x3c
  38457. break;
  38458. 8010934: e01f b.n 8010976 <UART_SetConfig+0xa4a>
  38459. case UART_CLOCKSOURCE_HSI:
  38460. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  38461. 8010936: 4b2d ldr r3, [pc, #180] @ (80109ec <UART_SetConfig+0xac0>)
  38462. 8010938: 681b ldr r3, [r3, #0]
  38463. 801093a: f003 0320 and.w r3, r3, #32
  38464. 801093e: 2b00 cmp r3, #0
  38465. 8010940: d009 beq.n 8010956 <UART_SetConfig+0xa2a>
  38466. {
  38467. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  38468. 8010942: 4b2a ldr r3, [pc, #168] @ (80109ec <UART_SetConfig+0xac0>)
  38469. 8010944: 681b ldr r3, [r3, #0]
  38470. 8010946: 08db lsrs r3, r3, #3
  38471. 8010948: f003 0303 and.w r3, r3, #3
  38472. 801094c: 4a28 ldr r2, [pc, #160] @ (80109f0 <UART_SetConfig+0xac4>)
  38473. 801094e: fa22 f303 lsr.w r3, r2, r3
  38474. 8010952: 63fb str r3, [r7, #60] @ 0x3c
  38475. }
  38476. else
  38477. {
  38478. pclk = (uint32_t) HSI_VALUE;
  38479. }
  38480. break;
  38481. 8010954: e00f b.n 8010976 <UART_SetConfig+0xa4a>
  38482. pclk = (uint32_t) HSI_VALUE;
  38483. 8010956: 4b26 ldr r3, [pc, #152] @ (80109f0 <UART_SetConfig+0xac4>)
  38484. 8010958: 63fb str r3, [r7, #60] @ 0x3c
  38485. break;
  38486. 801095a: e00c b.n 8010976 <UART_SetConfig+0xa4a>
  38487. case UART_CLOCKSOURCE_CSI:
  38488. pclk = (uint32_t) CSI_VALUE;
  38489. 801095c: 4b25 ldr r3, [pc, #148] @ (80109f4 <UART_SetConfig+0xac8>)
  38490. 801095e: 63fb str r3, [r7, #60] @ 0x3c
  38491. break;
  38492. 8010960: e009 b.n 8010976 <UART_SetConfig+0xa4a>
  38493. case UART_CLOCKSOURCE_LSE:
  38494. pclk = (uint32_t) LSE_VALUE;
  38495. 8010962: f44f 4300 mov.w r3, #32768 @ 0x8000
  38496. 8010966: 63fb str r3, [r7, #60] @ 0x3c
  38497. break;
  38498. 8010968: e005 b.n 8010976 <UART_SetConfig+0xa4a>
  38499. default:
  38500. pclk = 0U;
  38501. 801096a: 2300 movs r3, #0
  38502. 801096c: 63fb str r3, [r7, #60] @ 0x3c
  38503. ret = HAL_ERROR;
  38504. 801096e: 2301 movs r3, #1
  38505. 8010970: f887 3042 strb.w r3, [r7, #66] @ 0x42
  38506. break;
  38507. 8010974: bf00 nop
  38508. }
  38509. if (pclk != 0U)
  38510. 8010976: 6bfb ldr r3, [r7, #60] @ 0x3c
  38511. 8010978: 2b00 cmp r3, #0
  38512. 801097a: d021 beq.n 80109c0 <UART_SetConfig+0xa94>
  38513. {
  38514. /* USARTDIV must be greater than or equal to 0d16 */
  38515. usartdiv = (uint32_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  38516. 801097c: 697b ldr r3, [r7, #20]
  38517. 801097e: 6a5b ldr r3, [r3, #36] @ 0x24
  38518. 8010980: 4a1d ldr r2, [pc, #116] @ (80109f8 <UART_SetConfig+0xacc>)
  38519. 8010982: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  38520. 8010986: 461a mov r2, r3
  38521. 8010988: 6bfb ldr r3, [r7, #60] @ 0x3c
  38522. 801098a: fbb3 f2f2 udiv r2, r3, r2
  38523. 801098e: 697b ldr r3, [r7, #20]
  38524. 8010990: 685b ldr r3, [r3, #4]
  38525. 8010992: 085b lsrs r3, r3, #1
  38526. 8010994: 441a add r2, r3
  38527. 8010996: 697b ldr r3, [r7, #20]
  38528. 8010998: 685b ldr r3, [r3, #4]
  38529. 801099a: fbb2 f3f3 udiv r3, r2, r3
  38530. 801099e: 63bb str r3, [r7, #56] @ 0x38
  38531. if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX))
  38532. 80109a0: 6bbb ldr r3, [r7, #56] @ 0x38
  38533. 80109a2: 2b0f cmp r3, #15
  38534. 80109a4: d909 bls.n 80109ba <UART_SetConfig+0xa8e>
  38535. 80109a6: 6bbb ldr r3, [r7, #56] @ 0x38
  38536. 80109a8: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  38537. 80109ac: d205 bcs.n 80109ba <UART_SetConfig+0xa8e>
  38538. {
  38539. huart->Instance->BRR = (uint16_t)usartdiv;
  38540. 80109ae: 6bbb ldr r3, [r7, #56] @ 0x38
  38541. 80109b0: b29a uxth r2, r3
  38542. 80109b2: 697b ldr r3, [r7, #20]
  38543. 80109b4: 681b ldr r3, [r3, #0]
  38544. 80109b6: 60da str r2, [r3, #12]
  38545. 80109b8: e002 b.n 80109c0 <UART_SetConfig+0xa94>
  38546. }
  38547. else
  38548. {
  38549. ret = HAL_ERROR;
  38550. 80109ba: 2301 movs r3, #1
  38551. 80109bc: f887 3042 strb.w r3, [r7, #66] @ 0x42
  38552. }
  38553. }
  38554. }
  38555. /* Initialize the number of data to process during RX/TX ISR execution */
  38556. huart->NbTxDataToProcess = 1;
  38557. 80109c0: 697b ldr r3, [r7, #20]
  38558. 80109c2: 2201 movs r2, #1
  38559. 80109c4: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  38560. huart->NbRxDataToProcess = 1;
  38561. 80109c8: 697b ldr r3, [r7, #20]
  38562. 80109ca: 2201 movs r2, #1
  38563. 80109cc: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  38564. /* Clear ISR function pointers */
  38565. huart->RxISR = NULL;
  38566. 80109d0: 697b ldr r3, [r7, #20]
  38567. 80109d2: 2200 movs r2, #0
  38568. 80109d4: 675a str r2, [r3, #116] @ 0x74
  38569. huart->TxISR = NULL;
  38570. 80109d6: 697b ldr r3, [r7, #20]
  38571. 80109d8: 2200 movs r2, #0
  38572. 80109da: 679a str r2, [r3, #120] @ 0x78
  38573. return ret;
  38574. 80109dc: f897 3042 ldrb.w r3, [r7, #66] @ 0x42
  38575. }
  38576. 80109e0: 4618 mov r0, r3
  38577. 80109e2: 3748 adds r7, #72 @ 0x48
  38578. 80109e4: 46bd mov sp, r7
  38579. 80109e6: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc}
  38580. 80109ea: bf00 nop
  38581. 80109ec: 58024400 .word 0x58024400
  38582. 80109f0: 03d09000 .word 0x03d09000
  38583. 80109f4: 003d0900 .word 0x003d0900
  38584. 80109f8: 080175e0 .word 0x080175e0
  38585. 080109fc <UART_AdvFeatureConfig>:
  38586. * @brief Configure the UART peripheral advanced features.
  38587. * @param huart UART handle.
  38588. * @retval None
  38589. */
  38590. void UART_AdvFeatureConfig(UART_HandleTypeDef *huart)
  38591. {
  38592. 80109fc: b480 push {r7}
  38593. 80109fe: b083 sub sp, #12
  38594. 8010a00: af00 add r7, sp, #0
  38595. 8010a02: 6078 str r0, [r7, #4]
  38596. /* Check whether the set of advanced features to configure is properly set */
  38597. assert_param(IS_UART_ADVFEATURE_INIT(huart->AdvancedInit.AdvFeatureInit));
  38598. /* if required, configure RX/TX pins swap */
  38599. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_SWAP_INIT))
  38600. 8010a04: 687b ldr r3, [r7, #4]
  38601. 8010a06: 6a9b ldr r3, [r3, #40] @ 0x28
  38602. 8010a08: f003 0308 and.w r3, r3, #8
  38603. 8010a0c: 2b00 cmp r3, #0
  38604. 8010a0e: d00a beq.n 8010a26 <UART_AdvFeatureConfig+0x2a>
  38605. {
  38606. assert_param(IS_UART_ADVFEATURE_SWAP(huart->AdvancedInit.Swap));
  38607. MODIFY_REG(huart->Instance->CR2, USART_CR2_SWAP, huart->AdvancedInit.Swap);
  38608. 8010a10: 687b ldr r3, [r7, #4]
  38609. 8010a12: 681b ldr r3, [r3, #0]
  38610. 8010a14: 685b ldr r3, [r3, #4]
  38611. 8010a16: f423 4100 bic.w r1, r3, #32768 @ 0x8000
  38612. 8010a1a: 687b ldr r3, [r7, #4]
  38613. 8010a1c: 6b9a ldr r2, [r3, #56] @ 0x38
  38614. 8010a1e: 687b ldr r3, [r7, #4]
  38615. 8010a20: 681b ldr r3, [r3, #0]
  38616. 8010a22: 430a orrs r2, r1
  38617. 8010a24: 605a str r2, [r3, #4]
  38618. }
  38619. /* if required, configure TX pin active level inversion */
  38620. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_TXINVERT_INIT))
  38621. 8010a26: 687b ldr r3, [r7, #4]
  38622. 8010a28: 6a9b ldr r3, [r3, #40] @ 0x28
  38623. 8010a2a: f003 0301 and.w r3, r3, #1
  38624. 8010a2e: 2b00 cmp r3, #0
  38625. 8010a30: d00a beq.n 8010a48 <UART_AdvFeatureConfig+0x4c>
  38626. {
  38627. assert_param(IS_UART_ADVFEATURE_TXINV(huart->AdvancedInit.TxPinLevelInvert));
  38628. MODIFY_REG(huart->Instance->CR2, USART_CR2_TXINV, huart->AdvancedInit.TxPinLevelInvert);
  38629. 8010a32: 687b ldr r3, [r7, #4]
  38630. 8010a34: 681b ldr r3, [r3, #0]
  38631. 8010a36: 685b ldr r3, [r3, #4]
  38632. 8010a38: f423 3100 bic.w r1, r3, #131072 @ 0x20000
  38633. 8010a3c: 687b ldr r3, [r7, #4]
  38634. 8010a3e: 6ada ldr r2, [r3, #44] @ 0x2c
  38635. 8010a40: 687b ldr r3, [r7, #4]
  38636. 8010a42: 681b ldr r3, [r3, #0]
  38637. 8010a44: 430a orrs r2, r1
  38638. 8010a46: 605a str r2, [r3, #4]
  38639. }
  38640. /* if required, configure RX pin active level inversion */
  38641. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXINVERT_INIT))
  38642. 8010a48: 687b ldr r3, [r7, #4]
  38643. 8010a4a: 6a9b ldr r3, [r3, #40] @ 0x28
  38644. 8010a4c: f003 0302 and.w r3, r3, #2
  38645. 8010a50: 2b00 cmp r3, #0
  38646. 8010a52: d00a beq.n 8010a6a <UART_AdvFeatureConfig+0x6e>
  38647. {
  38648. assert_param(IS_UART_ADVFEATURE_RXINV(huart->AdvancedInit.RxPinLevelInvert));
  38649. MODIFY_REG(huart->Instance->CR2, USART_CR2_RXINV, huart->AdvancedInit.RxPinLevelInvert);
  38650. 8010a54: 687b ldr r3, [r7, #4]
  38651. 8010a56: 681b ldr r3, [r3, #0]
  38652. 8010a58: 685b ldr r3, [r3, #4]
  38653. 8010a5a: f423 3180 bic.w r1, r3, #65536 @ 0x10000
  38654. 8010a5e: 687b ldr r3, [r7, #4]
  38655. 8010a60: 6b1a ldr r2, [r3, #48] @ 0x30
  38656. 8010a62: 687b ldr r3, [r7, #4]
  38657. 8010a64: 681b ldr r3, [r3, #0]
  38658. 8010a66: 430a orrs r2, r1
  38659. 8010a68: 605a str r2, [r3, #4]
  38660. }
  38661. /* if required, configure data inversion */
  38662. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DATAINVERT_INIT))
  38663. 8010a6a: 687b ldr r3, [r7, #4]
  38664. 8010a6c: 6a9b ldr r3, [r3, #40] @ 0x28
  38665. 8010a6e: f003 0304 and.w r3, r3, #4
  38666. 8010a72: 2b00 cmp r3, #0
  38667. 8010a74: d00a beq.n 8010a8c <UART_AdvFeatureConfig+0x90>
  38668. {
  38669. assert_param(IS_UART_ADVFEATURE_DATAINV(huart->AdvancedInit.DataInvert));
  38670. MODIFY_REG(huart->Instance->CR2, USART_CR2_DATAINV, huart->AdvancedInit.DataInvert);
  38671. 8010a76: 687b ldr r3, [r7, #4]
  38672. 8010a78: 681b ldr r3, [r3, #0]
  38673. 8010a7a: 685b ldr r3, [r3, #4]
  38674. 8010a7c: f423 2180 bic.w r1, r3, #262144 @ 0x40000
  38675. 8010a80: 687b ldr r3, [r7, #4]
  38676. 8010a82: 6b5a ldr r2, [r3, #52] @ 0x34
  38677. 8010a84: 687b ldr r3, [r7, #4]
  38678. 8010a86: 681b ldr r3, [r3, #0]
  38679. 8010a88: 430a orrs r2, r1
  38680. 8010a8a: 605a str r2, [r3, #4]
  38681. }
  38682. /* if required, configure RX overrun detection disabling */
  38683. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXOVERRUNDISABLE_INIT))
  38684. 8010a8c: 687b ldr r3, [r7, #4]
  38685. 8010a8e: 6a9b ldr r3, [r3, #40] @ 0x28
  38686. 8010a90: f003 0310 and.w r3, r3, #16
  38687. 8010a94: 2b00 cmp r3, #0
  38688. 8010a96: d00a beq.n 8010aae <UART_AdvFeatureConfig+0xb2>
  38689. {
  38690. assert_param(IS_UART_OVERRUN(huart->AdvancedInit.OverrunDisable));
  38691. MODIFY_REG(huart->Instance->CR3, USART_CR3_OVRDIS, huart->AdvancedInit.OverrunDisable);
  38692. 8010a98: 687b ldr r3, [r7, #4]
  38693. 8010a9a: 681b ldr r3, [r3, #0]
  38694. 8010a9c: 689b ldr r3, [r3, #8]
  38695. 8010a9e: f423 5180 bic.w r1, r3, #4096 @ 0x1000
  38696. 8010aa2: 687b ldr r3, [r7, #4]
  38697. 8010aa4: 6bda ldr r2, [r3, #60] @ 0x3c
  38698. 8010aa6: 687b ldr r3, [r7, #4]
  38699. 8010aa8: 681b ldr r3, [r3, #0]
  38700. 8010aaa: 430a orrs r2, r1
  38701. 8010aac: 609a str r2, [r3, #8]
  38702. }
  38703. /* if required, configure DMA disabling on reception error */
  38704. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DMADISABLEONERROR_INIT))
  38705. 8010aae: 687b ldr r3, [r7, #4]
  38706. 8010ab0: 6a9b ldr r3, [r3, #40] @ 0x28
  38707. 8010ab2: f003 0320 and.w r3, r3, #32
  38708. 8010ab6: 2b00 cmp r3, #0
  38709. 8010ab8: d00a beq.n 8010ad0 <UART_AdvFeatureConfig+0xd4>
  38710. {
  38711. assert_param(IS_UART_ADVFEATURE_DMAONRXERROR(huart->AdvancedInit.DMADisableonRxError));
  38712. MODIFY_REG(huart->Instance->CR3, USART_CR3_DDRE, huart->AdvancedInit.DMADisableonRxError);
  38713. 8010aba: 687b ldr r3, [r7, #4]
  38714. 8010abc: 681b ldr r3, [r3, #0]
  38715. 8010abe: 689b ldr r3, [r3, #8]
  38716. 8010ac0: f423 5100 bic.w r1, r3, #8192 @ 0x2000
  38717. 8010ac4: 687b ldr r3, [r7, #4]
  38718. 8010ac6: 6c1a ldr r2, [r3, #64] @ 0x40
  38719. 8010ac8: 687b ldr r3, [r7, #4]
  38720. 8010aca: 681b ldr r3, [r3, #0]
  38721. 8010acc: 430a orrs r2, r1
  38722. 8010ace: 609a str r2, [r3, #8]
  38723. }
  38724. /* if required, configure auto Baud rate detection scheme */
  38725. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_AUTOBAUDRATE_INIT))
  38726. 8010ad0: 687b ldr r3, [r7, #4]
  38727. 8010ad2: 6a9b ldr r3, [r3, #40] @ 0x28
  38728. 8010ad4: f003 0340 and.w r3, r3, #64 @ 0x40
  38729. 8010ad8: 2b00 cmp r3, #0
  38730. 8010ada: d01a beq.n 8010b12 <UART_AdvFeatureConfig+0x116>
  38731. {
  38732. assert_param(IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(huart->Instance));
  38733. assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATE(huart->AdvancedInit.AutoBaudRateEnable));
  38734. MODIFY_REG(huart->Instance->CR2, USART_CR2_ABREN, huart->AdvancedInit.AutoBaudRateEnable);
  38735. 8010adc: 687b ldr r3, [r7, #4]
  38736. 8010ade: 681b ldr r3, [r3, #0]
  38737. 8010ae0: 685b ldr r3, [r3, #4]
  38738. 8010ae2: f423 1180 bic.w r1, r3, #1048576 @ 0x100000
  38739. 8010ae6: 687b ldr r3, [r7, #4]
  38740. 8010ae8: 6c5a ldr r2, [r3, #68] @ 0x44
  38741. 8010aea: 687b ldr r3, [r7, #4]
  38742. 8010aec: 681b ldr r3, [r3, #0]
  38743. 8010aee: 430a orrs r2, r1
  38744. 8010af0: 605a str r2, [r3, #4]
  38745. /* set auto Baudrate detection parameters if detection is enabled */
  38746. if (huart->AdvancedInit.AutoBaudRateEnable == UART_ADVFEATURE_AUTOBAUDRATE_ENABLE)
  38747. 8010af2: 687b ldr r3, [r7, #4]
  38748. 8010af4: 6c5b ldr r3, [r3, #68] @ 0x44
  38749. 8010af6: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  38750. 8010afa: d10a bne.n 8010b12 <UART_AdvFeatureConfig+0x116>
  38751. {
  38752. assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(huart->AdvancedInit.AutoBaudRateMode));
  38753. MODIFY_REG(huart->Instance->CR2, USART_CR2_ABRMODE, huart->AdvancedInit.AutoBaudRateMode);
  38754. 8010afc: 687b ldr r3, [r7, #4]
  38755. 8010afe: 681b ldr r3, [r3, #0]
  38756. 8010b00: 685b ldr r3, [r3, #4]
  38757. 8010b02: f423 01c0 bic.w r1, r3, #6291456 @ 0x600000
  38758. 8010b06: 687b ldr r3, [r7, #4]
  38759. 8010b08: 6c9a ldr r2, [r3, #72] @ 0x48
  38760. 8010b0a: 687b ldr r3, [r7, #4]
  38761. 8010b0c: 681b ldr r3, [r3, #0]
  38762. 8010b0e: 430a orrs r2, r1
  38763. 8010b10: 605a str r2, [r3, #4]
  38764. }
  38765. }
  38766. /* if required, configure MSB first on communication line */
  38767. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_MSBFIRST_INIT))
  38768. 8010b12: 687b ldr r3, [r7, #4]
  38769. 8010b14: 6a9b ldr r3, [r3, #40] @ 0x28
  38770. 8010b16: f003 0380 and.w r3, r3, #128 @ 0x80
  38771. 8010b1a: 2b00 cmp r3, #0
  38772. 8010b1c: d00a beq.n 8010b34 <UART_AdvFeatureConfig+0x138>
  38773. {
  38774. assert_param(IS_UART_ADVFEATURE_MSBFIRST(huart->AdvancedInit.MSBFirst));
  38775. MODIFY_REG(huart->Instance->CR2, USART_CR2_MSBFIRST, huart->AdvancedInit.MSBFirst);
  38776. 8010b1e: 687b ldr r3, [r7, #4]
  38777. 8010b20: 681b ldr r3, [r3, #0]
  38778. 8010b22: 685b ldr r3, [r3, #4]
  38779. 8010b24: f423 2100 bic.w r1, r3, #524288 @ 0x80000
  38780. 8010b28: 687b ldr r3, [r7, #4]
  38781. 8010b2a: 6cda ldr r2, [r3, #76] @ 0x4c
  38782. 8010b2c: 687b ldr r3, [r7, #4]
  38783. 8010b2e: 681b ldr r3, [r3, #0]
  38784. 8010b30: 430a orrs r2, r1
  38785. 8010b32: 605a str r2, [r3, #4]
  38786. }
  38787. }
  38788. 8010b34: bf00 nop
  38789. 8010b36: 370c adds r7, #12
  38790. 8010b38: 46bd mov sp, r7
  38791. 8010b3a: f85d 7b04 ldr.w r7, [sp], #4
  38792. 8010b3e: 4770 bx lr
  38793. 08010b40 <UART_CheckIdleState>:
  38794. * @brief Check the UART Idle State.
  38795. * @param huart UART handle.
  38796. * @retval HAL status
  38797. */
  38798. HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
  38799. {
  38800. 8010b40: b580 push {r7, lr}
  38801. 8010b42: b098 sub sp, #96 @ 0x60
  38802. 8010b44: af02 add r7, sp, #8
  38803. 8010b46: 6078 str r0, [r7, #4]
  38804. uint32_t tickstart;
  38805. /* Initialize the UART ErrorCode */
  38806. huart->ErrorCode = HAL_UART_ERROR_NONE;
  38807. 8010b48: 687b ldr r3, [r7, #4]
  38808. 8010b4a: 2200 movs r2, #0
  38809. 8010b4c: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  38810. /* Init tickstart for timeout management */
  38811. tickstart = HAL_GetTick();
  38812. 8010b50: f7f3 ff88 bl 8004a64 <HAL_GetTick>
  38813. 8010b54: 6578 str r0, [r7, #84] @ 0x54
  38814. /* Check if the Transmitter is enabled */
  38815. if ((huart->Instance->CR1 & USART_CR1_TE) == USART_CR1_TE)
  38816. 8010b56: 687b ldr r3, [r7, #4]
  38817. 8010b58: 681b ldr r3, [r3, #0]
  38818. 8010b5a: 681b ldr r3, [r3, #0]
  38819. 8010b5c: f003 0308 and.w r3, r3, #8
  38820. 8010b60: 2b08 cmp r3, #8
  38821. 8010b62: d12f bne.n 8010bc4 <UART_CheckIdleState+0x84>
  38822. {
  38823. /* Wait until TEACK flag is set */
  38824. if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_TEACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
  38825. 8010b64: f06f 437e mvn.w r3, #4261412864 @ 0xfe000000
  38826. 8010b68: 9300 str r3, [sp, #0]
  38827. 8010b6a: 6d7b ldr r3, [r7, #84] @ 0x54
  38828. 8010b6c: 2200 movs r2, #0
  38829. 8010b6e: f44f 1100 mov.w r1, #2097152 @ 0x200000
  38830. 8010b72: 6878 ldr r0, [r7, #4]
  38831. 8010b74: f000 f88e bl 8010c94 <UART_WaitOnFlagUntilTimeout>
  38832. 8010b78: 4603 mov r3, r0
  38833. 8010b7a: 2b00 cmp r3, #0
  38834. 8010b7c: d022 beq.n 8010bc4 <UART_CheckIdleState+0x84>
  38835. {
  38836. /* Disable TXE interrupt for the interrupt process */
  38837. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE));
  38838. 8010b7e: 687b ldr r3, [r7, #4]
  38839. 8010b80: 681b ldr r3, [r3, #0]
  38840. 8010b82: 63bb str r3, [r7, #56] @ 0x38
  38841. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  38842. 8010b84: 6bbb ldr r3, [r7, #56] @ 0x38
  38843. 8010b86: e853 3f00 ldrex r3, [r3]
  38844. 8010b8a: 637b str r3, [r7, #52] @ 0x34
  38845. return(result);
  38846. 8010b8c: 6b7b ldr r3, [r7, #52] @ 0x34
  38847. 8010b8e: f023 0380 bic.w r3, r3, #128 @ 0x80
  38848. 8010b92: 653b str r3, [r7, #80] @ 0x50
  38849. 8010b94: 687b ldr r3, [r7, #4]
  38850. 8010b96: 681b ldr r3, [r3, #0]
  38851. 8010b98: 461a mov r2, r3
  38852. 8010b9a: 6d3b ldr r3, [r7, #80] @ 0x50
  38853. 8010b9c: 647b str r3, [r7, #68] @ 0x44
  38854. 8010b9e: 643a str r2, [r7, #64] @ 0x40
  38855. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  38856. 8010ba0: 6c39 ldr r1, [r7, #64] @ 0x40
  38857. 8010ba2: 6c7a ldr r2, [r7, #68] @ 0x44
  38858. 8010ba4: e841 2300 strex r3, r2, [r1]
  38859. 8010ba8: 63fb str r3, [r7, #60] @ 0x3c
  38860. return(result);
  38861. 8010baa: 6bfb ldr r3, [r7, #60] @ 0x3c
  38862. 8010bac: 2b00 cmp r3, #0
  38863. 8010bae: d1e6 bne.n 8010b7e <UART_CheckIdleState+0x3e>
  38864. huart->gState = HAL_UART_STATE_READY;
  38865. 8010bb0: 687b ldr r3, [r7, #4]
  38866. 8010bb2: 2220 movs r2, #32
  38867. 8010bb4: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  38868. __HAL_UNLOCK(huart);
  38869. 8010bb8: 687b ldr r3, [r7, #4]
  38870. 8010bba: 2200 movs r2, #0
  38871. 8010bbc: f883 2084 strb.w r2, [r3, #132] @ 0x84
  38872. /* Timeout occurred */
  38873. return HAL_TIMEOUT;
  38874. 8010bc0: 2303 movs r3, #3
  38875. 8010bc2: e063 b.n 8010c8c <UART_CheckIdleState+0x14c>
  38876. }
  38877. }
  38878. /* Check if the Receiver is enabled */
  38879. if ((huart->Instance->CR1 & USART_CR1_RE) == USART_CR1_RE)
  38880. 8010bc4: 687b ldr r3, [r7, #4]
  38881. 8010bc6: 681b ldr r3, [r3, #0]
  38882. 8010bc8: 681b ldr r3, [r3, #0]
  38883. 8010bca: f003 0304 and.w r3, r3, #4
  38884. 8010bce: 2b04 cmp r3, #4
  38885. 8010bd0: d149 bne.n 8010c66 <UART_CheckIdleState+0x126>
  38886. {
  38887. /* Wait until REACK flag is set */
  38888. if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
  38889. 8010bd2: f06f 437e mvn.w r3, #4261412864 @ 0xfe000000
  38890. 8010bd6: 9300 str r3, [sp, #0]
  38891. 8010bd8: 6d7b ldr r3, [r7, #84] @ 0x54
  38892. 8010bda: 2200 movs r2, #0
  38893. 8010bdc: f44f 0180 mov.w r1, #4194304 @ 0x400000
  38894. 8010be0: 6878 ldr r0, [r7, #4]
  38895. 8010be2: f000 f857 bl 8010c94 <UART_WaitOnFlagUntilTimeout>
  38896. 8010be6: 4603 mov r3, r0
  38897. 8010be8: 2b00 cmp r3, #0
  38898. 8010bea: d03c beq.n 8010c66 <UART_CheckIdleState+0x126>
  38899. {
  38900. /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error)
  38901. interrupts for the interrupt process */
  38902. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  38903. 8010bec: 687b ldr r3, [r7, #4]
  38904. 8010bee: 681b ldr r3, [r3, #0]
  38905. 8010bf0: 627b str r3, [r7, #36] @ 0x24
  38906. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  38907. 8010bf2: 6a7b ldr r3, [r7, #36] @ 0x24
  38908. 8010bf4: e853 3f00 ldrex r3, [r3]
  38909. 8010bf8: 623b str r3, [r7, #32]
  38910. return(result);
  38911. 8010bfa: 6a3b ldr r3, [r7, #32]
  38912. 8010bfc: f423 7390 bic.w r3, r3, #288 @ 0x120
  38913. 8010c00: 64fb str r3, [r7, #76] @ 0x4c
  38914. 8010c02: 687b ldr r3, [r7, #4]
  38915. 8010c04: 681b ldr r3, [r3, #0]
  38916. 8010c06: 461a mov r2, r3
  38917. 8010c08: 6cfb ldr r3, [r7, #76] @ 0x4c
  38918. 8010c0a: 633b str r3, [r7, #48] @ 0x30
  38919. 8010c0c: 62fa str r2, [r7, #44] @ 0x2c
  38920. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  38921. 8010c0e: 6af9 ldr r1, [r7, #44] @ 0x2c
  38922. 8010c10: 6b3a ldr r2, [r7, #48] @ 0x30
  38923. 8010c12: e841 2300 strex r3, r2, [r1]
  38924. 8010c16: 62bb str r3, [r7, #40] @ 0x28
  38925. return(result);
  38926. 8010c18: 6abb ldr r3, [r7, #40] @ 0x28
  38927. 8010c1a: 2b00 cmp r3, #0
  38928. 8010c1c: d1e6 bne.n 8010bec <UART_CheckIdleState+0xac>
  38929. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  38930. 8010c1e: 687b ldr r3, [r7, #4]
  38931. 8010c20: 681b ldr r3, [r3, #0]
  38932. 8010c22: 3308 adds r3, #8
  38933. 8010c24: 613b str r3, [r7, #16]
  38934. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  38935. 8010c26: 693b ldr r3, [r7, #16]
  38936. 8010c28: e853 3f00 ldrex r3, [r3]
  38937. 8010c2c: 60fb str r3, [r7, #12]
  38938. return(result);
  38939. 8010c2e: 68fb ldr r3, [r7, #12]
  38940. 8010c30: f023 0301 bic.w r3, r3, #1
  38941. 8010c34: 64bb str r3, [r7, #72] @ 0x48
  38942. 8010c36: 687b ldr r3, [r7, #4]
  38943. 8010c38: 681b ldr r3, [r3, #0]
  38944. 8010c3a: 3308 adds r3, #8
  38945. 8010c3c: 6cba ldr r2, [r7, #72] @ 0x48
  38946. 8010c3e: 61fa str r2, [r7, #28]
  38947. 8010c40: 61bb str r3, [r7, #24]
  38948. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  38949. 8010c42: 69b9 ldr r1, [r7, #24]
  38950. 8010c44: 69fa ldr r2, [r7, #28]
  38951. 8010c46: e841 2300 strex r3, r2, [r1]
  38952. 8010c4a: 617b str r3, [r7, #20]
  38953. return(result);
  38954. 8010c4c: 697b ldr r3, [r7, #20]
  38955. 8010c4e: 2b00 cmp r3, #0
  38956. 8010c50: d1e5 bne.n 8010c1e <UART_CheckIdleState+0xde>
  38957. huart->RxState = HAL_UART_STATE_READY;
  38958. 8010c52: 687b ldr r3, [r7, #4]
  38959. 8010c54: 2220 movs r2, #32
  38960. 8010c56: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  38961. __HAL_UNLOCK(huart);
  38962. 8010c5a: 687b ldr r3, [r7, #4]
  38963. 8010c5c: 2200 movs r2, #0
  38964. 8010c5e: f883 2084 strb.w r2, [r3, #132] @ 0x84
  38965. /* Timeout occurred */
  38966. return HAL_TIMEOUT;
  38967. 8010c62: 2303 movs r3, #3
  38968. 8010c64: e012 b.n 8010c8c <UART_CheckIdleState+0x14c>
  38969. }
  38970. }
  38971. /* Initialize the UART State */
  38972. huart->gState = HAL_UART_STATE_READY;
  38973. 8010c66: 687b ldr r3, [r7, #4]
  38974. 8010c68: 2220 movs r2, #32
  38975. 8010c6a: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  38976. huart->RxState = HAL_UART_STATE_READY;
  38977. 8010c6e: 687b ldr r3, [r7, #4]
  38978. 8010c70: 2220 movs r2, #32
  38979. 8010c72: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  38980. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  38981. 8010c76: 687b ldr r3, [r7, #4]
  38982. 8010c78: 2200 movs r2, #0
  38983. 8010c7a: 66da str r2, [r3, #108] @ 0x6c
  38984. huart->RxEventType = HAL_UART_RXEVENT_TC;
  38985. 8010c7c: 687b ldr r3, [r7, #4]
  38986. 8010c7e: 2200 movs r2, #0
  38987. 8010c80: 671a str r2, [r3, #112] @ 0x70
  38988. __HAL_UNLOCK(huart);
  38989. 8010c82: 687b ldr r3, [r7, #4]
  38990. 8010c84: 2200 movs r2, #0
  38991. 8010c86: f883 2084 strb.w r2, [r3, #132] @ 0x84
  38992. return HAL_OK;
  38993. 8010c8a: 2300 movs r3, #0
  38994. }
  38995. 8010c8c: 4618 mov r0, r3
  38996. 8010c8e: 3758 adds r7, #88 @ 0x58
  38997. 8010c90: 46bd mov sp, r7
  38998. 8010c92: bd80 pop {r7, pc}
  38999. 08010c94 <UART_WaitOnFlagUntilTimeout>:
  39000. * @param Timeout Timeout duration
  39001. * @retval HAL status
  39002. */
  39003. HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
  39004. uint32_t Tickstart, uint32_t Timeout)
  39005. {
  39006. 8010c94: b580 push {r7, lr}
  39007. 8010c96: b084 sub sp, #16
  39008. 8010c98: af00 add r7, sp, #0
  39009. 8010c9a: 60f8 str r0, [r7, #12]
  39010. 8010c9c: 60b9 str r1, [r7, #8]
  39011. 8010c9e: 603b str r3, [r7, #0]
  39012. 8010ca0: 4613 mov r3, r2
  39013. 8010ca2: 71fb strb r3, [r7, #7]
  39014. /* Wait until flag is set */
  39015. while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
  39016. 8010ca4: e04f b.n 8010d46 <UART_WaitOnFlagUntilTimeout+0xb2>
  39017. {
  39018. /* Check for the Timeout */
  39019. if (Timeout != HAL_MAX_DELAY)
  39020. 8010ca6: 69bb ldr r3, [r7, #24]
  39021. 8010ca8: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  39022. 8010cac: d04b beq.n 8010d46 <UART_WaitOnFlagUntilTimeout+0xb2>
  39023. {
  39024. if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
  39025. 8010cae: f7f3 fed9 bl 8004a64 <HAL_GetTick>
  39026. 8010cb2: 4602 mov r2, r0
  39027. 8010cb4: 683b ldr r3, [r7, #0]
  39028. 8010cb6: 1ad3 subs r3, r2, r3
  39029. 8010cb8: 69ba ldr r2, [r7, #24]
  39030. 8010cba: 429a cmp r2, r3
  39031. 8010cbc: d302 bcc.n 8010cc4 <UART_WaitOnFlagUntilTimeout+0x30>
  39032. 8010cbe: 69bb ldr r3, [r7, #24]
  39033. 8010cc0: 2b00 cmp r3, #0
  39034. 8010cc2: d101 bne.n 8010cc8 <UART_WaitOnFlagUntilTimeout+0x34>
  39035. {
  39036. return HAL_TIMEOUT;
  39037. 8010cc4: 2303 movs r3, #3
  39038. 8010cc6: e04e b.n 8010d66 <UART_WaitOnFlagUntilTimeout+0xd2>
  39039. }
  39040. if ((READ_BIT(huart->Instance->CR1, USART_CR1_RE) != 0U) && (Flag != UART_FLAG_TXE) && (Flag != UART_FLAG_TC))
  39041. 8010cc8: 68fb ldr r3, [r7, #12]
  39042. 8010cca: 681b ldr r3, [r3, #0]
  39043. 8010ccc: 681b ldr r3, [r3, #0]
  39044. 8010cce: f003 0304 and.w r3, r3, #4
  39045. 8010cd2: 2b00 cmp r3, #0
  39046. 8010cd4: d037 beq.n 8010d46 <UART_WaitOnFlagUntilTimeout+0xb2>
  39047. 8010cd6: 68bb ldr r3, [r7, #8]
  39048. 8010cd8: 2b80 cmp r3, #128 @ 0x80
  39049. 8010cda: d034 beq.n 8010d46 <UART_WaitOnFlagUntilTimeout+0xb2>
  39050. 8010cdc: 68bb ldr r3, [r7, #8]
  39051. 8010cde: 2b40 cmp r3, #64 @ 0x40
  39052. 8010ce0: d031 beq.n 8010d46 <UART_WaitOnFlagUntilTimeout+0xb2>
  39053. {
  39054. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) == SET)
  39055. 8010ce2: 68fb ldr r3, [r7, #12]
  39056. 8010ce4: 681b ldr r3, [r3, #0]
  39057. 8010ce6: 69db ldr r3, [r3, #28]
  39058. 8010ce8: f003 0308 and.w r3, r3, #8
  39059. 8010cec: 2b08 cmp r3, #8
  39060. 8010cee: d110 bne.n 8010d12 <UART_WaitOnFlagUntilTimeout+0x7e>
  39061. {
  39062. /* Clear Overrun Error flag*/
  39063. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF);
  39064. 8010cf0: 68fb ldr r3, [r7, #12]
  39065. 8010cf2: 681b ldr r3, [r3, #0]
  39066. 8010cf4: 2208 movs r2, #8
  39067. 8010cf6: 621a str r2, [r3, #32]
  39068. /* Blocking error : transfer is aborted
  39069. Set the UART state ready to be able to start again the process,
  39070. Disable Rx Interrupts if ongoing */
  39071. UART_EndRxTransfer(huart);
  39072. 8010cf8: 68f8 ldr r0, [r7, #12]
  39073. 8010cfa: f000 f95b bl 8010fb4 <UART_EndRxTransfer>
  39074. huart->ErrorCode = HAL_UART_ERROR_ORE;
  39075. 8010cfe: 68fb ldr r3, [r7, #12]
  39076. 8010d00: 2208 movs r2, #8
  39077. 8010d02: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39078. /* Process Unlocked */
  39079. __HAL_UNLOCK(huart);
  39080. 8010d06: 68fb ldr r3, [r7, #12]
  39081. 8010d08: 2200 movs r2, #0
  39082. 8010d0a: f883 2084 strb.w r2, [r3, #132] @ 0x84
  39083. return HAL_ERROR;
  39084. 8010d0e: 2301 movs r3, #1
  39085. 8010d10: e029 b.n 8010d66 <UART_WaitOnFlagUntilTimeout+0xd2>
  39086. }
  39087. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF) == SET)
  39088. 8010d12: 68fb ldr r3, [r7, #12]
  39089. 8010d14: 681b ldr r3, [r3, #0]
  39090. 8010d16: 69db ldr r3, [r3, #28]
  39091. 8010d18: f403 6300 and.w r3, r3, #2048 @ 0x800
  39092. 8010d1c: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  39093. 8010d20: d111 bne.n 8010d46 <UART_WaitOnFlagUntilTimeout+0xb2>
  39094. {
  39095. /* Clear Receiver Timeout flag*/
  39096. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
  39097. 8010d22: 68fb ldr r3, [r7, #12]
  39098. 8010d24: 681b ldr r3, [r3, #0]
  39099. 8010d26: f44f 6200 mov.w r2, #2048 @ 0x800
  39100. 8010d2a: 621a str r2, [r3, #32]
  39101. /* Blocking error : transfer is aborted
  39102. Set the UART state ready to be able to start again the process,
  39103. Disable Rx Interrupts if ongoing */
  39104. UART_EndRxTransfer(huart);
  39105. 8010d2c: 68f8 ldr r0, [r7, #12]
  39106. 8010d2e: f000 f941 bl 8010fb4 <UART_EndRxTransfer>
  39107. huart->ErrorCode = HAL_UART_ERROR_RTO;
  39108. 8010d32: 68fb ldr r3, [r7, #12]
  39109. 8010d34: 2220 movs r2, #32
  39110. 8010d36: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39111. /* Process Unlocked */
  39112. __HAL_UNLOCK(huart);
  39113. 8010d3a: 68fb ldr r3, [r7, #12]
  39114. 8010d3c: 2200 movs r2, #0
  39115. 8010d3e: f883 2084 strb.w r2, [r3, #132] @ 0x84
  39116. return HAL_TIMEOUT;
  39117. 8010d42: 2303 movs r3, #3
  39118. 8010d44: e00f b.n 8010d66 <UART_WaitOnFlagUntilTimeout+0xd2>
  39119. while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
  39120. 8010d46: 68fb ldr r3, [r7, #12]
  39121. 8010d48: 681b ldr r3, [r3, #0]
  39122. 8010d4a: 69da ldr r2, [r3, #28]
  39123. 8010d4c: 68bb ldr r3, [r7, #8]
  39124. 8010d4e: 4013 ands r3, r2
  39125. 8010d50: 68ba ldr r2, [r7, #8]
  39126. 8010d52: 429a cmp r2, r3
  39127. 8010d54: bf0c ite eq
  39128. 8010d56: 2301 moveq r3, #1
  39129. 8010d58: 2300 movne r3, #0
  39130. 8010d5a: b2db uxtb r3, r3
  39131. 8010d5c: 461a mov r2, r3
  39132. 8010d5e: 79fb ldrb r3, [r7, #7]
  39133. 8010d60: 429a cmp r2, r3
  39134. 8010d62: d0a0 beq.n 8010ca6 <UART_WaitOnFlagUntilTimeout+0x12>
  39135. }
  39136. }
  39137. }
  39138. }
  39139. return HAL_OK;
  39140. 8010d64: 2300 movs r3, #0
  39141. }
  39142. 8010d66: 4618 mov r0, r3
  39143. 8010d68: 3710 adds r7, #16
  39144. 8010d6a: 46bd mov sp, r7
  39145. 8010d6c: bd80 pop {r7, pc}
  39146. ...
  39147. 08010d70 <UART_Start_Receive_IT>:
  39148. * @param pData Pointer to data buffer (u8 or u16 data elements).
  39149. * @param Size Amount of data elements (u8 or u16) to be received.
  39150. * @retval HAL status
  39151. */
  39152. HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
  39153. {
  39154. 8010d70: b480 push {r7}
  39155. 8010d72: b0a3 sub sp, #140 @ 0x8c
  39156. 8010d74: af00 add r7, sp, #0
  39157. 8010d76: 60f8 str r0, [r7, #12]
  39158. 8010d78: 60b9 str r1, [r7, #8]
  39159. 8010d7a: 4613 mov r3, r2
  39160. 8010d7c: 80fb strh r3, [r7, #6]
  39161. huart->pRxBuffPtr = pData;
  39162. 8010d7e: 68fb ldr r3, [r7, #12]
  39163. 8010d80: 68ba ldr r2, [r7, #8]
  39164. 8010d82: 659a str r2, [r3, #88] @ 0x58
  39165. huart->RxXferSize = Size;
  39166. 8010d84: 68fb ldr r3, [r7, #12]
  39167. 8010d86: 88fa ldrh r2, [r7, #6]
  39168. 8010d88: f8a3 205c strh.w r2, [r3, #92] @ 0x5c
  39169. huart->RxXferCount = Size;
  39170. 8010d8c: 68fb ldr r3, [r7, #12]
  39171. 8010d8e: 88fa ldrh r2, [r7, #6]
  39172. 8010d90: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  39173. huart->RxISR = NULL;
  39174. 8010d94: 68fb ldr r3, [r7, #12]
  39175. 8010d96: 2200 movs r2, #0
  39176. 8010d98: 675a str r2, [r3, #116] @ 0x74
  39177. /* Computation of UART mask to apply to RDR register */
  39178. UART_MASK_COMPUTATION(huart);
  39179. 8010d9a: 68fb ldr r3, [r7, #12]
  39180. 8010d9c: 689b ldr r3, [r3, #8]
  39181. 8010d9e: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  39182. 8010da2: d10e bne.n 8010dc2 <UART_Start_Receive_IT+0x52>
  39183. 8010da4: 68fb ldr r3, [r7, #12]
  39184. 8010da6: 691b ldr r3, [r3, #16]
  39185. 8010da8: 2b00 cmp r3, #0
  39186. 8010daa: d105 bne.n 8010db8 <UART_Start_Receive_IT+0x48>
  39187. 8010dac: 68fb ldr r3, [r7, #12]
  39188. 8010dae: f240 12ff movw r2, #511 @ 0x1ff
  39189. 8010db2: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  39190. 8010db6: e02d b.n 8010e14 <UART_Start_Receive_IT+0xa4>
  39191. 8010db8: 68fb ldr r3, [r7, #12]
  39192. 8010dba: 22ff movs r2, #255 @ 0xff
  39193. 8010dbc: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  39194. 8010dc0: e028 b.n 8010e14 <UART_Start_Receive_IT+0xa4>
  39195. 8010dc2: 68fb ldr r3, [r7, #12]
  39196. 8010dc4: 689b ldr r3, [r3, #8]
  39197. 8010dc6: 2b00 cmp r3, #0
  39198. 8010dc8: d10d bne.n 8010de6 <UART_Start_Receive_IT+0x76>
  39199. 8010dca: 68fb ldr r3, [r7, #12]
  39200. 8010dcc: 691b ldr r3, [r3, #16]
  39201. 8010dce: 2b00 cmp r3, #0
  39202. 8010dd0: d104 bne.n 8010ddc <UART_Start_Receive_IT+0x6c>
  39203. 8010dd2: 68fb ldr r3, [r7, #12]
  39204. 8010dd4: 22ff movs r2, #255 @ 0xff
  39205. 8010dd6: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  39206. 8010dda: e01b b.n 8010e14 <UART_Start_Receive_IT+0xa4>
  39207. 8010ddc: 68fb ldr r3, [r7, #12]
  39208. 8010dde: 227f movs r2, #127 @ 0x7f
  39209. 8010de0: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  39210. 8010de4: e016 b.n 8010e14 <UART_Start_Receive_IT+0xa4>
  39211. 8010de6: 68fb ldr r3, [r7, #12]
  39212. 8010de8: 689b ldr r3, [r3, #8]
  39213. 8010dea: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  39214. 8010dee: d10d bne.n 8010e0c <UART_Start_Receive_IT+0x9c>
  39215. 8010df0: 68fb ldr r3, [r7, #12]
  39216. 8010df2: 691b ldr r3, [r3, #16]
  39217. 8010df4: 2b00 cmp r3, #0
  39218. 8010df6: d104 bne.n 8010e02 <UART_Start_Receive_IT+0x92>
  39219. 8010df8: 68fb ldr r3, [r7, #12]
  39220. 8010dfa: 227f movs r2, #127 @ 0x7f
  39221. 8010dfc: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  39222. 8010e00: e008 b.n 8010e14 <UART_Start_Receive_IT+0xa4>
  39223. 8010e02: 68fb ldr r3, [r7, #12]
  39224. 8010e04: 223f movs r2, #63 @ 0x3f
  39225. 8010e06: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  39226. 8010e0a: e003 b.n 8010e14 <UART_Start_Receive_IT+0xa4>
  39227. 8010e0c: 68fb ldr r3, [r7, #12]
  39228. 8010e0e: 2200 movs r2, #0
  39229. 8010e10: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  39230. huart->ErrorCode = HAL_UART_ERROR_NONE;
  39231. 8010e14: 68fb ldr r3, [r7, #12]
  39232. 8010e16: 2200 movs r2, #0
  39233. 8010e18: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39234. huart->RxState = HAL_UART_STATE_BUSY_RX;
  39235. 8010e1c: 68fb ldr r3, [r7, #12]
  39236. 8010e1e: 2222 movs r2, #34 @ 0x22
  39237. 8010e20: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  39238. /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  39239. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_EIE);
  39240. 8010e24: 68fb ldr r3, [r7, #12]
  39241. 8010e26: 681b ldr r3, [r3, #0]
  39242. 8010e28: 3308 adds r3, #8
  39243. 8010e2a: 667b str r3, [r7, #100] @ 0x64
  39244. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39245. 8010e2c: 6e7b ldr r3, [r7, #100] @ 0x64
  39246. 8010e2e: e853 3f00 ldrex r3, [r3]
  39247. 8010e32: 663b str r3, [r7, #96] @ 0x60
  39248. return(result);
  39249. 8010e34: 6e3b ldr r3, [r7, #96] @ 0x60
  39250. 8010e36: f043 0301 orr.w r3, r3, #1
  39251. 8010e3a: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  39252. 8010e3e: 68fb ldr r3, [r7, #12]
  39253. 8010e40: 681b ldr r3, [r3, #0]
  39254. 8010e42: 3308 adds r3, #8
  39255. 8010e44: f8d7 2084 ldr.w r2, [r7, #132] @ 0x84
  39256. 8010e48: 673a str r2, [r7, #112] @ 0x70
  39257. 8010e4a: 66fb str r3, [r7, #108] @ 0x6c
  39258. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39259. 8010e4c: 6ef9 ldr r1, [r7, #108] @ 0x6c
  39260. 8010e4e: 6f3a ldr r2, [r7, #112] @ 0x70
  39261. 8010e50: e841 2300 strex r3, r2, [r1]
  39262. 8010e54: 66bb str r3, [r7, #104] @ 0x68
  39263. return(result);
  39264. 8010e56: 6ebb ldr r3, [r7, #104] @ 0x68
  39265. 8010e58: 2b00 cmp r3, #0
  39266. 8010e5a: d1e3 bne.n 8010e24 <UART_Start_Receive_IT+0xb4>
  39267. /* Configure Rx interrupt processing */
  39268. if ((huart->FifoMode == UART_FIFOMODE_ENABLE) && (Size >= huart->NbRxDataToProcess))
  39269. 8010e5c: 68fb ldr r3, [r7, #12]
  39270. 8010e5e: 6e5b ldr r3, [r3, #100] @ 0x64
  39271. 8010e60: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  39272. 8010e64: d14f bne.n 8010f06 <UART_Start_Receive_IT+0x196>
  39273. 8010e66: 68fb ldr r3, [r7, #12]
  39274. 8010e68: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  39275. 8010e6c: 88fa ldrh r2, [r7, #6]
  39276. 8010e6e: 429a cmp r2, r3
  39277. 8010e70: d349 bcc.n 8010f06 <UART_Start_Receive_IT+0x196>
  39278. {
  39279. /* Set the Rx ISR function pointer according to the data word length */
  39280. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  39281. 8010e72: 68fb ldr r3, [r7, #12]
  39282. 8010e74: 689b ldr r3, [r3, #8]
  39283. 8010e76: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  39284. 8010e7a: d107 bne.n 8010e8c <UART_Start_Receive_IT+0x11c>
  39285. 8010e7c: 68fb ldr r3, [r7, #12]
  39286. 8010e7e: 691b ldr r3, [r3, #16]
  39287. 8010e80: 2b00 cmp r3, #0
  39288. 8010e82: d103 bne.n 8010e8c <UART_Start_Receive_IT+0x11c>
  39289. {
  39290. huart->RxISR = UART_RxISR_16BIT_FIFOEN;
  39291. 8010e84: 68fb ldr r3, [r7, #12]
  39292. 8010e86: 4a47 ldr r2, [pc, #284] @ (8010fa4 <UART_Start_Receive_IT+0x234>)
  39293. 8010e88: 675a str r2, [r3, #116] @ 0x74
  39294. 8010e8a: e002 b.n 8010e92 <UART_Start_Receive_IT+0x122>
  39295. }
  39296. else
  39297. {
  39298. huart->RxISR = UART_RxISR_8BIT_FIFOEN;
  39299. 8010e8c: 68fb ldr r3, [r7, #12]
  39300. 8010e8e: 4a46 ldr r2, [pc, #280] @ (8010fa8 <UART_Start_Receive_IT+0x238>)
  39301. 8010e90: 675a str r2, [r3, #116] @ 0x74
  39302. }
  39303. /* Enable the UART Parity Error interrupt and RX FIFO Threshold interrupt */
  39304. if (huart->Init.Parity != UART_PARITY_NONE)
  39305. 8010e92: 68fb ldr r3, [r7, #12]
  39306. 8010e94: 691b ldr r3, [r3, #16]
  39307. 8010e96: 2b00 cmp r3, #0
  39308. 8010e98: d01a beq.n 8010ed0 <UART_Start_Receive_IT+0x160>
  39309. {
  39310. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  39311. 8010e9a: 68fb ldr r3, [r7, #12]
  39312. 8010e9c: 681b ldr r3, [r3, #0]
  39313. 8010e9e: 653b str r3, [r7, #80] @ 0x50
  39314. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39315. 8010ea0: 6d3b ldr r3, [r7, #80] @ 0x50
  39316. 8010ea2: e853 3f00 ldrex r3, [r3]
  39317. 8010ea6: 64fb str r3, [r7, #76] @ 0x4c
  39318. return(result);
  39319. 8010ea8: 6cfb ldr r3, [r7, #76] @ 0x4c
  39320. 8010eaa: f443 7380 orr.w r3, r3, #256 @ 0x100
  39321. 8010eae: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  39322. 8010eb2: 68fb ldr r3, [r7, #12]
  39323. 8010eb4: 681b ldr r3, [r3, #0]
  39324. 8010eb6: 461a mov r2, r3
  39325. 8010eb8: f8d7 3080 ldr.w r3, [r7, #128] @ 0x80
  39326. 8010ebc: 65fb str r3, [r7, #92] @ 0x5c
  39327. 8010ebe: 65ba str r2, [r7, #88] @ 0x58
  39328. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39329. 8010ec0: 6db9 ldr r1, [r7, #88] @ 0x58
  39330. 8010ec2: 6dfa ldr r2, [r7, #92] @ 0x5c
  39331. 8010ec4: e841 2300 strex r3, r2, [r1]
  39332. 8010ec8: 657b str r3, [r7, #84] @ 0x54
  39333. return(result);
  39334. 8010eca: 6d7b ldr r3, [r7, #84] @ 0x54
  39335. 8010ecc: 2b00 cmp r3, #0
  39336. 8010ece: d1e4 bne.n 8010e9a <UART_Start_Receive_IT+0x12a>
  39337. }
  39338. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  39339. 8010ed0: 68fb ldr r3, [r7, #12]
  39340. 8010ed2: 681b ldr r3, [r3, #0]
  39341. 8010ed4: 3308 adds r3, #8
  39342. 8010ed6: 63fb str r3, [r7, #60] @ 0x3c
  39343. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39344. 8010ed8: 6bfb ldr r3, [r7, #60] @ 0x3c
  39345. 8010eda: e853 3f00 ldrex r3, [r3]
  39346. 8010ede: 63bb str r3, [r7, #56] @ 0x38
  39347. return(result);
  39348. 8010ee0: 6bbb ldr r3, [r7, #56] @ 0x38
  39349. 8010ee2: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000
  39350. 8010ee6: 67fb str r3, [r7, #124] @ 0x7c
  39351. 8010ee8: 68fb ldr r3, [r7, #12]
  39352. 8010eea: 681b ldr r3, [r3, #0]
  39353. 8010eec: 3308 adds r3, #8
  39354. 8010eee: 6ffa ldr r2, [r7, #124] @ 0x7c
  39355. 8010ef0: 64ba str r2, [r7, #72] @ 0x48
  39356. 8010ef2: 647b str r3, [r7, #68] @ 0x44
  39357. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39358. 8010ef4: 6c79 ldr r1, [r7, #68] @ 0x44
  39359. 8010ef6: 6cba ldr r2, [r7, #72] @ 0x48
  39360. 8010ef8: e841 2300 strex r3, r2, [r1]
  39361. 8010efc: 643b str r3, [r7, #64] @ 0x40
  39362. return(result);
  39363. 8010efe: 6c3b ldr r3, [r7, #64] @ 0x40
  39364. 8010f00: 2b00 cmp r3, #0
  39365. 8010f02: d1e5 bne.n 8010ed0 <UART_Start_Receive_IT+0x160>
  39366. 8010f04: e046 b.n 8010f94 <UART_Start_Receive_IT+0x224>
  39367. }
  39368. else
  39369. {
  39370. /* Set the Rx ISR function pointer according to the data word length */
  39371. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  39372. 8010f06: 68fb ldr r3, [r7, #12]
  39373. 8010f08: 689b ldr r3, [r3, #8]
  39374. 8010f0a: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  39375. 8010f0e: d107 bne.n 8010f20 <UART_Start_Receive_IT+0x1b0>
  39376. 8010f10: 68fb ldr r3, [r7, #12]
  39377. 8010f12: 691b ldr r3, [r3, #16]
  39378. 8010f14: 2b00 cmp r3, #0
  39379. 8010f16: d103 bne.n 8010f20 <UART_Start_Receive_IT+0x1b0>
  39380. {
  39381. huart->RxISR = UART_RxISR_16BIT;
  39382. 8010f18: 68fb ldr r3, [r7, #12]
  39383. 8010f1a: 4a24 ldr r2, [pc, #144] @ (8010fac <UART_Start_Receive_IT+0x23c>)
  39384. 8010f1c: 675a str r2, [r3, #116] @ 0x74
  39385. 8010f1e: e002 b.n 8010f26 <UART_Start_Receive_IT+0x1b6>
  39386. }
  39387. else
  39388. {
  39389. huart->RxISR = UART_RxISR_8BIT;
  39390. 8010f20: 68fb ldr r3, [r7, #12]
  39391. 8010f22: 4a23 ldr r2, [pc, #140] @ (8010fb0 <UART_Start_Receive_IT+0x240>)
  39392. 8010f24: 675a str r2, [r3, #116] @ 0x74
  39393. }
  39394. /* Enable the UART Parity Error interrupt and Data Register Not Empty interrupt */
  39395. if (huart->Init.Parity != UART_PARITY_NONE)
  39396. 8010f26: 68fb ldr r3, [r7, #12]
  39397. 8010f28: 691b ldr r3, [r3, #16]
  39398. 8010f2a: 2b00 cmp r3, #0
  39399. 8010f2c: d019 beq.n 8010f62 <UART_Start_Receive_IT+0x1f2>
  39400. {
  39401. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE_RXFNEIE);
  39402. 8010f2e: 68fb ldr r3, [r7, #12]
  39403. 8010f30: 681b ldr r3, [r3, #0]
  39404. 8010f32: 62bb str r3, [r7, #40] @ 0x28
  39405. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39406. 8010f34: 6abb ldr r3, [r7, #40] @ 0x28
  39407. 8010f36: e853 3f00 ldrex r3, [r3]
  39408. 8010f3a: 627b str r3, [r7, #36] @ 0x24
  39409. return(result);
  39410. 8010f3c: 6a7b ldr r3, [r7, #36] @ 0x24
  39411. 8010f3e: f443 7390 orr.w r3, r3, #288 @ 0x120
  39412. 8010f42: 677b str r3, [r7, #116] @ 0x74
  39413. 8010f44: 68fb ldr r3, [r7, #12]
  39414. 8010f46: 681b ldr r3, [r3, #0]
  39415. 8010f48: 461a mov r2, r3
  39416. 8010f4a: 6f7b ldr r3, [r7, #116] @ 0x74
  39417. 8010f4c: 637b str r3, [r7, #52] @ 0x34
  39418. 8010f4e: 633a str r2, [r7, #48] @ 0x30
  39419. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39420. 8010f50: 6b39 ldr r1, [r7, #48] @ 0x30
  39421. 8010f52: 6b7a ldr r2, [r7, #52] @ 0x34
  39422. 8010f54: e841 2300 strex r3, r2, [r1]
  39423. 8010f58: 62fb str r3, [r7, #44] @ 0x2c
  39424. return(result);
  39425. 8010f5a: 6afb ldr r3, [r7, #44] @ 0x2c
  39426. 8010f5c: 2b00 cmp r3, #0
  39427. 8010f5e: d1e6 bne.n 8010f2e <UART_Start_Receive_IT+0x1be>
  39428. 8010f60: e018 b.n 8010f94 <UART_Start_Receive_IT+0x224>
  39429. }
  39430. else
  39431. {
  39432. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  39433. 8010f62: 68fb ldr r3, [r7, #12]
  39434. 8010f64: 681b ldr r3, [r3, #0]
  39435. 8010f66: 617b str r3, [r7, #20]
  39436. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39437. 8010f68: 697b ldr r3, [r7, #20]
  39438. 8010f6a: e853 3f00 ldrex r3, [r3]
  39439. 8010f6e: 613b str r3, [r7, #16]
  39440. return(result);
  39441. 8010f70: 693b ldr r3, [r7, #16]
  39442. 8010f72: f043 0320 orr.w r3, r3, #32
  39443. 8010f76: 67bb str r3, [r7, #120] @ 0x78
  39444. 8010f78: 68fb ldr r3, [r7, #12]
  39445. 8010f7a: 681b ldr r3, [r3, #0]
  39446. 8010f7c: 461a mov r2, r3
  39447. 8010f7e: 6fbb ldr r3, [r7, #120] @ 0x78
  39448. 8010f80: 623b str r3, [r7, #32]
  39449. 8010f82: 61fa str r2, [r7, #28]
  39450. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39451. 8010f84: 69f9 ldr r1, [r7, #28]
  39452. 8010f86: 6a3a ldr r2, [r7, #32]
  39453. 8010f88: e841 2300 strex r3, r2, [r1]
  39454. 8010f8c: 61bb str r3, [r7, #24]
  39455. return(result);
  39456. 8010f8e: 69bb ldr r3, [r7, #24]
  39457. 8010f90: 2b00 cmp r3, #0
  39458. 8010f92: d1e6 bne.n 8010f62 <UART_Start_Receive_IT+0x1f2>
  39459. }
  39460. }
  39461. return HAL_OK;
  39462. 8010f94: 2300 movs r3, #0
  39463. }
  39464. 8010f96: 4618 mov r0, r3
  39465. 8010f98: 378c adds r7, #140 @ 0x8c
  39466. 8010f9a: 46bd mov sp, r7
  39467. 8010f9c: f85d 7b04 ldr.w r7, [sp], #4
  39468. 8010fa0: 4770 bx lr
  39469. 8010fa2: bf00 nop
  39470. 8010fa4: 08011b19 .word 0x08011b19
  39471. 8010fa8: 080117b9 .word 0x080117b9
  39472. 8010fac: 08011601 .word 0x08011601
  39473. 8010fb0: 08011449 .word 0x08011449
  39474. 08010fb4 <UART_EndRxTransfer>:
  39475. * @brief End ongoing Rx transfer on UART peripheral (following error detection or Reception completion).
  39476. * @param huart UART handle.
  39477. * @retval None
  39478. */
  39479. static void UART_EndRxTransfer(UART_HandleTypeDef *huart)
  39480. {
  39481. 8010fb4: b480 push {r7}
  39482. 8010fb6: b095 sub sp, #84 @ 0x54
  39483. 8010fb8: af00 add r7, sp, #0
  39484. 8010fba: 6078 str r0, [r7, #4]
  39485. /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
  39486. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  39487. 8010fbc: 687b ldr r3, [r7, #4]
  39488. 8010fbe: 681b ldr r3, [r3, #0]
  39489. 8010fc0: 637b str r3, [r7, #52] @ 0x34
  39490. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39491. 8010fc2: 6b7b ldr r3, [r7, #52] @ 0x34
  39492. 8010fc4: e853 3f00 ldrex r3, [r3]
  39493. 8010fc8: 633b str r3, [r7, #48] @ 0x30
  39494. return(result);
  39495. 8010fca: 6b3b ldr r3, [r7, #48] @ 0x30
  39496. 8010fcc: f423 7390 bic.w r3, r3, #288 @ 0x120
  39497. 8010fd0: 64fb str r3, [r7, #76] @ 0x4c
  39498. 8010fd2: 687b ldr r3, [r7, #4]
  39499. 8010fd4: 681b ldr r3, [r3, #0]
  39500. 8010fd6: 461a mov r2, r3
  39501. 8010fd8: 6cfb ldr r3, [r7, #76] @ 0x4c
  39502. 8010fda: 643b str r3, [r7, #64] @ 0x40
  39503. 8010fdc: 63fa str r2, [r7, #60] @ 0x3c
  39504. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39505. 8010fde: 6bf9 ldr r1, [r7, #60] @ 0x3c
  39506. 8010fe0: 6c3a ldr r2, [r7, #64] @ 0x40
  39507. 8010fe2: e841 2300 strex r3, r2, [r1]
  39508. 8010fe6: 63bb str r3, [r7, #56] @ 0x38
  39509. return(result);
  39510. 8010fe8: 6bbb ldr r3, [r7, #56] @ 0x38
  39511. 8010fea: 2b00 cmp r3, #0
  39512. 8010fec: d1e6 bne.n 8010fbc <UART_EndRxTransfer+0x8>
  39513. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  39514. 8010fee: 687b ldr r3, [r7, #4]
  39515. 8010ff0: 681b ldr r3, [r3, #0]
  39516. 8010ff2: 3308 adds r3, #8
  39517. 8010ff4: 623b str r3, [r7, #32]
  39518. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39519. 8010ff6: 6a3b ldr r3, [r7, #32]
  39520. 8010ff8: e853 3f00 ldrex r3, [r3]
  39521. 8010ffc: 61fb str r3, [r7, #28]
  39522. return(result);
  39523. 8010ffe: 69fa ldr r2, [r7, #28]
  39524. 8011000: 4b1e ldr r3, [pc, #120] @ (801107c <UART_EndRxTransfer+0xc8>)
  39525. 8011002: 4013 ands r3, r2
  39526. 8011004: 64bb str r3, [r7, #72] @ 0x48
  39527. 8011006: 687b ldr r3, [r7, #4]
  39528. 8011008: 681b ldr r3, [r3, #0]
  39529. 801100a: 3308 adds r3, #8
  39530. 801100c: 6cba ldr r2, [r7, #72] @ 0x48
  39531. 801100e: 62fa str r2, [r7, #44] @ 0x2c
  39532. 8011010: 62bb str r3, [r7, #40] @ 0x28
  39533. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39534. 8011012: 6ab9 ldr r1, [r7, #40] @ 0x28
  39535. 8011014: 6afa ldr r2, [r7, #44] @ 0x2c
  39536. 8011016: e841 2300 strex r3, r2, [r1]
  39537. 801101a: 627b str r3, [r7, #36] @ 0x24
  39538. return(result);
  39539. 801101c: 6a7b ldr r3, [r7, #36] @ 0x24
  39540. 801101e: 2b00 cmp r3, #0
  39541. 8011020: d1e5 bne.n 8010fee <UART_EndRxTransfer+0x3a>
  39542. /* In case of reception waiting for IDLE event, disable also the IDLE IE interrupt source */
  39543. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  39544. 8011022: 687b ldr r3, [r7, #4]
  39545. 8011024: 6edb ldr r3, [r3, #108] @ 0x6c
  39546. 8011026: 2b01 cmp r3, #1
  39547. 8011028: d118 bne.n 801105c <UART_EndRxTransfer+0xa8>
  39548. {
  39549. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  39550. 801102a: 687b ldr r3, [r7, #4]
  39551. 801102c: 681b ldr r3, [r3, #0]
  39552. 801102e: 60fb str r3, [r7, #12]
  39553. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39554. 8011030: 68fb ldr r3, [r7, #12]
  39555. 8011032: e853 3f00 ldrex r3, [r3]
  39556. 8011036: 60bb str r3, [r7, #8]
  39557. return(result);
  39558. 8011038: 68bb ldr r3, [r7, #8]
  39559. 801103a: f023 0310 bic.w r3, r3, #16
  39560. 801103e: 647b str r3, [r7, #68] @ 0x44
  39561. 8011040: 687b ldr r3, [r7, #4]
  39562. 8011042: 681b ldr r3, [r3, #0]
  39563. 8011044: 461a mov r2, r3
  39564. 8011046: 6c7b ldr r3, [r7, #68] @ 0x44
  39565. 8011048: 61bb str r3, [r7, #24]
  39566. 801104a: 617a str r2, [r7, #20]
  39567. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39568. 801104c: 6979 ldr r1, [r7, #20]
  39569. 801104e: 69ba ldr r2, [r7, #24]
  39570. 8011050: e841 2300 strex r3, r2, [r1]
  39571. 8011054: 613b str r3, [r7, #16]
  39572. return(result);
  39573. 8011056: 693b ldr r3, [r7, #16]
  39574. 8011058: 2b00 cmp r3, #0
  39575. 801105a: d1e6 bne.n 801102a <UART_EndRxTransfer+0x76>
  39576. }
  39577. /* At end of Rx process, restore huart->RxState to Ready */
  39578. huart->RxState = HAL_UART_STATE_READY;
  39579. 801105c: 687b ldr r3, [r7, #4]
  39580. 801105e: 2220 movs r2, #32
  39581. 8011060: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  39582. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  39583. 8011064: 687b ldr r3, [r7, #4]
  39584. 8011066: 2200 movs r2, #0
  39585. 8011068: 66da str r2, [r3, #108] @ 0x6c
  39586. /* Reset RxIsr function pointer */
  39587. huart->RxISR = NULL;
  39588. 801106a: 687b ldr r3, [r7, #4]
  39589. 801106c: 2200 movs r2, #0
  39590. 801106e: 675a str r2, [r3, #116] @ 0x74
  39591. }
  39592. 8011070: bf00 nop
  39593. 8011072: 3754 adds r7, #84 @ 0x54
  39594. 8011074: 46bd mov sp, r7
  39595. 8011076: f85d 7b04 ldr.w r7, [sp], #4
  39596. 801107a: 4770 bx lr
  39597. 801107c: effffffe .word 0xeffffffe
  39598. 08011080 <UART_DMAAbortOnError>:
  39599. * (To be called at end of DMA Abort procedure following error occurrence).
  39600. * @param hdma DMA handle.
  39601. * @retval None
  39602. */
  39603. static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma)
  39604. {
  39605. 8011080: b580 push {r7, lr}
  39606. 8011082: b084 sub sp, #16
  39607. 8011084: af00 add r7, sp, #0
  39608. 8011086: 6078 str r0, [r7, #4]
  39609. UART_HandleTypeDef *huart = (UART_HandleTypeDef *)(hdma->Parent);
  39610. 8011088: 687b ldr r3, [r7, #4]
  39611. 801108a: 6b9b ldr r3, [r3, #56] @ 0x38
  39612. 801108c: 60fb str r3, [r7, #12]
  39613. huart->RxXferCount = 0U;
  39614. 801108e: 68fb ldr r3, [r7, #12]
  39615. 8011090: 2200 movs r2, #0
  39616. 8011092: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  39617. huart->TxXferCount = 0U;
  39618. 8011096: 68fb ldr r3, [r7, #12]
  39619. 8011098: 2200 movs r2, #0
  39620. 801109a: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  39621. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  39622. /*Call registered error callback*/
  39623. huart->ErrorCallback(huart);
  39624. #else
  39625. /*Call legacy weak error callback*/
  39626. HAL_UART_ErrorCallback(huart);
  39627. 801109e: 68f8 ldr r0, [r7, #12]
  39628. 80110a0: f7fe ff3a bl 800ff18 <HAL_UART_ErrorCallback>
  39629. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  39630. }
  39631. 80110a4: bf00 nop
  39632. 80110a6: 3710 adds r7, #16
  39633. 80110a8: 46bd mov sp, r7
  39634. 80110aa: bd80 pop {r7, pc}
  39635. 080110ac <UART_TxISR_8BIT>:
  39636. * interruptions have been enabled by HAL_UART_Transmit_IT().
  39637. * @param huart UART handle.
  39638. * @retval None
  39639. */
  39640. static void UART_TxISR_8BIT(UART_HandleTypeDef *huart)
  39641. {
  39642. 80110ac: b480 push {r7}
  39643. 80110ae: b08f sub sp, #60 @ 0x3c
  39644. 80110b0: af00 add r7, sp, #0
  39645. 80110b2: 6078 str r0, [r7, #4]
  39646. /* Check that a Tx process is ongoing */
  39647. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  39648. 80110b4: 687b ldr r3, [r7, #4]
  39649. 80110b6: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  39650. 80110ba: 2b21 cmp r3, #33 @ 0x21
  39651. 80110bc: d14c bne.n 8011158 <UART_TxISR_8BIT+0xac>
  39652. {
  39653. if (huart->TxXferCount == 0U)
  39654. 80110be: 687b ldr r3, [r7, #4]
  39655. 80110c0: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  39656. 80110c4: b29b uxth r3, r3
  39657. 80110c6: 2b00 cmp r3, #0
  39658. 80110c8: d132 bne.n 8011130 <UART_TxISR_8BIT+0x84>
  39659. {
  39660. /* Disable the UART Transmit Data Register Empty Interrupt */
  39661. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  39662. 80110ca: 687b ldr r3, [r7, #4]
  39663. 80110cc: 681b ldr r3, [r3, #0]
  39664. 80110ce: 623b str r3, [r7, #32]
  39665. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39666. 80110d0: 6a3b ldr r3, [r7, #32]
  39667. 80110d2: e853 3f00 ldrex r3, [r3]
  39668. 80110d6: 61fb str r3, [r7, #28]
  39669. return(result);
  39670. 80110d8: 69fb ldr r3, [r7, #28]
  39671. 80110da: f023 0380 bic.w r3, r3, #128 @ 0x80
  39672. 80110de: 637b str r3, [r7, #52] @ 0x34
  39673. 80110e0: 687b ldr r3, [r7, #4]
  39674. 80110e2: 681b ldr r3, [r3, #0]
  39675. 80110e4: 461a mov r2, r3
  39676. 80110e6: 6b7b ldr r3, [r7, #52] @ 0x34
  39677. 80110e8: 62fb str r3, [r7, #44] @ 0x2c
  39678. 80110ea: 62ba str r2, [r7, #40] @ 0x28
  39679. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39680. 80110ec: 6ab9 ldr r1, [r7, #40] @ 0x28
  39681. 80110ee: 6afa ldr r2, [r7, #44] @ 0x2c
  39682. 80110f0: e841 2300 strex r3, r2, [r1]
  39683. 80110f4: 627b str r3, [r7, #36] @ 0x24
  39684. return(result);
  39685. 80110f6: 6a7b ldr r3, [r7, #36] @ 0x24
  39686. 80110f8: 2b00 cmp r3, #0
  39687. 80110fa: d1e6 bne.n 80110ca <UART_TxISR_8BIT+0x1e>
  39688. /* Enable the UART Transmit Complete Interrupt */
  39689. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  39690. 80110fc: 687b ldr r3, [r7, #4]
  39691. 80110fe: 681b ldr r3, [r3, #0]
  39692. 8011100: 60fb str r3, [r7, #12]
  39693. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39694. 8011102: 68fb ldr r3, [r7, #12]
  39695. 8011104: e853 3f00 ldrex r3, [r3]
  39696. 8011108: 60bb str r3, [r7, #8]
  39697. return(result);
  39698. 801110a: 68bb ldr r3, [r7, #8]
  39699. 801110c: f043 0340 orr.w r3, r3, #64 @ 0x40
  39700. 8011110: 633b str r3, [r7, #48] @ 0x30
  39701. 8011112: 687b ldr r3, [r7, #4]
  39702. 8011114: 681b ldr r3, [r3, #0]
  39703. 8011116: 461a mov r2, r3
  39704. 8011118: 6b3b ldr r3, [r7, #48] @ 0x30
  39705. 801111a: 61bb str r3, [r7, #24]
  39706. 801111c: 617a str r2, [r7, #20]
  39707. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39708. 801111e: 6979 ldr r1, [r7, #20]
  39709. 8011120: 69ba ldr r2, [r7, #24]
  39710. 8011122: e841 2300 strex r3, r2, [r1]
  39711. 8011126: 613b str r3, [r7, #16]
  39712. return(result);
  39713. 8011128: 693b ldr r3, [r7, #16]
  39714. 801112a: 2b00 cmp r3, #0
  39715. 801112c: d1e6 bne.n 80110fc <UART_TxISR_8BIT+0x50>
  39716. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  39717. huart->pTxBuffPtr++;
  39718. huart->TxXferCount--;
  39719. }
  39720. }
  39721. }
  39722. 801112e: e013 b.n 8011158 <UART_TxISR_8BIT+0xac>
  39723. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  39724. 8011130: 687b ldr r3, [r7, #4]
  39725. 8011132: 6d1b ldr r3, [r3, #80] @ 0x50
  39726. 8011134: 781a ldrb r2, [r3, #0]
  39727. 8011136: 687b ldr r3, [r7, #4]
  39728. 8011138: 681b ldr r3, [r3, #0]
  39729. 801113a: 629a str r2, [r3, #40] @ 0x28
  39730. huart->pTxBuffPtr++;
  39731. 801113c: 687b ldr r3, [r7, #4]
  39732. 801113e: 6d1b ldr r3, [r3, #80] @ 0x50
  39733. 8011140: 1c5a adds r2, r3, #1
  39734. 8011142: 687b ldr r3, [r7, #4]
  39735. 8011144: 651a str r2, [r3, #80] @ 0x50
  39736. huart->TxXferCount--;
  39737. 8011146: 687b ldr r3, [r7, #4]
  39738. 8011148: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  39739. 801114c: b29b uxth r3, r3
  39740. 801114e: 3b01 subs r3, #1
  39741. 8011150: b29a uxth r2, r3
  39742. 8011152: 687b ldr r3, [r7, #4]
  39743. 8011154: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  39744. }
  39745. 8011158: bf00 nop
  39746. 801115a: 373c adds r7, #60 @ 0x3c
  39747. 801115c: 46bd mov sp, r7
  39748. 801115e: f85d 7b04 ldr.w r7, [sp], #4
  39749. 8011162: 4770 bx lr
  39750. 08011164 <UART_TxISR_16BIT>:
  39751. * interruptions have been enabled by HAL_UART_Transmit_IT().
  39752. * @param huart UART handle.
  39753. * @retval None
  39754. */
  39755. static void UART_TxISR_16BIT(UART_HandleTypeDef *huart)
  39756. {
  39757. 8011164: b480 push {r7}
  39758. 8011166: b091 sub sp, #68 @ 0x44
  39759. 8011168: af00 add r7, sp, #0
  39760. 801116a: 6078 str r0, [r7, #4]
  39761. const uint16_t *tmp;
  39762. /* Check that a Tx process is ongoing */
  39763. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  39764. 801116c: 687b ldr r3, [r7, #4]
  39765. 801116e: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  39766. 8011172: 2b21 cmp r3, #33 @ 0x21
  39767. 8011174: d151 bne.n 801121a <UART_TxISR_16BIT+0xb6>
  39768. {
  39769. if (huart->TxXferCount == 0U)
  39770. 8011176: 687b ldr r3, [r7, #4]
  39771. 8011178: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  39772. 801117c: b29b uxth r3, r3
  39773. 801117e: 2b00 cmp r3, #0
  39774. 8011180: d132 bne.n 80111e8 <UART_TxISR_16BIT+0x84>
  39775. {
  39776. /* Disable the UART Transmit Data Register Empty Interrupt */
  39777. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  39778. 8011182: 687b ldr r3, [r7, #4]
  39779. 8011184: 681b ldr r3, [r3, #0]
  39780. 8011186: 627b str r3, [r7, #36] @ 0x24
  39781. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39782. 8011188: 6a7b ldr r3, [r7, #36] @ 0x24
  39783. 801118a: e853 3f00 ldrex r3, [r3]
  39784. 801118e: 623b str r3, [r7, #32]
  39785. return(result);
  39786. 8011190: 6a3b ldr r3, [r7, #32]
  39787. 8011192: f023 0380 bic.w r3, r3, #128 @ 0x80
  39788. 8011196: 63bb str r3, [r7, #56] @ 0x38
  39789. 8011198: 687b ldr r3, [r7, #4]
  39790. 801119a: 681b ldr r3, [r3, #0]
  39791. 801119c: 461a mov r2, r3
  39792. 801119e: 6bbb ldr r3, [r7, #56] @ 0x38
  39793. 80111a0: 633b str r3, [r7, #48] @ 0x30
  39794. 80111a2: 62fa str r2, [r7, #44] @ 0x2c
  39795. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39796. 80111a4: 6af9 ldr r1, [r7, #44] @ 0x2c
  39797. 80111a6: 6b3a ldr r2, [r7, #48] @ 0x30
  39798. 80111a8: e841 2300 strex r3, r2, [r1]
  39799. 80111ac: 62bb str r3, [r7, #40] @ 0x28
  39800. return(result);
  39801. 80111ae: 6abb ldr r3, [r7, #40] @ 0x28
  39802. 80111b0: 2b00 cmp r3, #0
  39803. 80111b2: d1e6 bne.n 8011182 <UART_TxISR_16BIT+0x1e>
  39804. /* Enable the UART Transmit Complete Interrupt */
  39805. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  39806. 80111b4: 687b ldr r3, [r7, #4]
  39807. 80111b6: 681b ldr r3, [r3, #0]
  39808. 80111b8: 613b str r3, [r7, #16]
  39809. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39810. 80111ba: 693b ldr r3, [r7, #16]
  39811. 80111bc: e853 3f00 ldrex r3, [r3]
  39812. 80111c0: 60fb str r3, [r7, #12]
  39813. return(result);
  39814. 80111c2: 68fb ldr r3, [r7, #12]
  39815. 80111c4: f043 0340 orr.w r3, r3, #64 @ 0x40
  39816. 80111c8: 637b str r3, [r7, #52] @ 0x34
  39817. 80111ca: 687b ldr r3, [r7, #4]
  39818. 80111cc: 681b ldr r3, [r3, #0]
  39819. 80111ce: 461a mov r2, r3
  39820. 80111d0: 6b7b ldr r3, [r7, #52] @ 0x34
  39821. 80111d2: 61fb str r3, [r7, #28]
  39822. 80111d4: 61ba str r2, [r7, #24]
  39823. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39824. 80111d6: 69b9 ldr r1, [r7, #24]
  39825. 80111d8: 69fa ldr r2, [r7, #28]
  39826. 80111da: e841 2300 strex r3, r2, [r1]
  39827. 80111de: 617b str r3, [r7, #20]
  39828. return(result);
  39829. 80111e0: 697b ldr r3, [r7, #20]
  39830. 80111e2: 2b00 cmp r3, #0
  39831. 80111e4: d1e6 bne.n 80111b4 <UART_TxISR_16BIT+0x50>
  39832. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  39833. huart->pTxBuffPtr += 2U;
  39834. huart->TxXferCount--;
  39835. }
  39836. }
  39837. }
  39838. 80111e6: e018 b.n 801121a <UART_TxISR_16BIT+0xb6>
  39839. tmp = (const uint16_t *) huart->pTxBuffPtr;
  39840. 80111e8: 687b ldr r3, [r7, #4]
  39841. 80111ea: 6d1b ldr r3, [r3, #80] @ 0x50
  39842. 80111ec: 63fb str r3, [r7, #60] @ 0x3c
  39843. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  39844. 80111ee: 6bfb ldr r3, [r7, #60] @ 0x3c
  39845. 80111f0: 881b ldrh r3, [r3, #0]
  39846. 80111f2: 461a mov r2, r3
  39847. 80111f4: 687b ldr r3, [r7, #4]
  39848. 80111f6: 681b ldr r3, [r3, #0]
  39849. 80111f8: f3c2 0208 ubfx r2, r2, #0, #9
  39850. 80111fc: 629a str r2, [r3, #40] @ 0x28
  39851. huart->pTxBuffPtr += 2U;
  39852. 80111fe: 687b ldr r3, [r7, #4]
  39853. 8011200: 6d1b ldr r3, [r3, #80] @ 0x50
  39854. 8011202: 1c9a adds r2, r3, #2
  39855. 8011204: 687b ldr r3, [r7, #4]
  39856. 8011206: 651a str r2, [r3, #80] @ 0x50
  39857. huart->TxXferCount--;
  39858. 8011208: 687b ldr r3, [r7, #4]
  39859. 801120a: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  39860. 801120e: b29b uxth r3, r3
  39861. 8011210: 3b01 subs r3, #1
  39862. 8011212: b29a uxth r2, r3
  39863. 8011214: 687b ldr r3, [r7, #4]
  39864. 8011216: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  39865. }
  39866. 801121a: bf00 nop
  39867. 801121c: 3744 adds r7, #68 @ 0x44
  39868. 801121e: 46bd mov sp, r7
  39869. 8011220: f85d 7b04 ldr.w r7, [sp], #4
  39870. 8011224: 4770 bx lr
  39871. 08011226 <UART_TxISR_8BIT_FIFOEN>:
  39872. * interruptions have been enabled by HAL_UART_Transmit_IT().
  39873. * @param huart UART handle.
  39874. * @retval None
  39875. */
  39876. static void UART_TxISR_8BIT_FIFOEN(UART_HandleTypeDef *huart)
  39877. {
  39878. 8011226: b480 push {r7}
  39879. 8011228: b091 sub sp, #68 @ 0x44
  39880. 801122a: af00 add r7, sp, #0
  39881. 801122c: 6078 str r0, [r7, #4]
  39882. uint16_t nb_tx_data;
  39883. /* Check that a Tx process is ongoing */
  39884. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  39885. 801122e: 687b ldr r3, [r7, #4]
  39886. 8011230: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  39887. 8011234: 2b21 cmp r3, #33 @ 0x21
  39888. 8011236: d160 bne.n 80112fa <UART_TxISR_8BIT_FIFOEN+0xd4>
  39889. {
  39890. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  39891. 8011238: 687b ldr r3, [r7, #4]
  39892. 801123a: f8b3 306a ldrh.w r3, [r3, #106] @ 0x6a
  39893. 801123e: 87fb strh r3, [r7, #62] @ 0x3e
  39894. 8011240: e057 b.n 80112f2 <UART_TxISR_8BIT_FIFOEN+0xcc>
  39895. {
  39896. if (huart->TxXferCount == 0U)
  39897. 8011242: 687b ldr r3, [r7, #4]
  39898. 8011244: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  39899. 8011248: b29b uxth r3, r3
  39900. 801124a: 2b00 cmp r3, #0
  39901. 801124c: d133 bne.n 80112b6 <UART_TxISR_8BIT_FIFOEN+0x90>
  39902. {
  39903. /* Disable the TX FIFO threshold interrupt */
  39904. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  39905. 801124e: 687b ldr r3, [r7, #4]
  39906. 8011250: 681b ldr r3, [r3, #0]
  39907. 8011252: 3308 adds r3, #8
  39908. 8011254: 627b str r3, [r7, #36] @ 0x24
  39909. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39910. 8011256: 6a7b ldr r3, [r7, #36] @ 0x24
  39911. 8011258: e853 3f00 ldrex r3, [r3]
  39912. 801125c: 623b str r3, [r7, #32]
  39913. return(result);
  39914. 801125e: 6a3b ldr r3, [r7, #32]
  39915. 8011260: f423 0300 bic.w r3, r3, #8388608 @ 0x800000
  39916. 8011264: 63bb str r3, [r7, #56] @ 0x38
  39917. 8011266: 687b ldr r3, [r7, #4]
  39918. 8011268: 681b ldr r3, [r3, #0]
  39919. 801126a: 3308 adds r3, #8
  39920. 801126c: 6bba ldr r2, [r7, #56] @ 0x38
  39921. 801126e: 633a str r2, [r7, #48] @ 0x30
  39922. 8011270: 62fb str r3, [r7, #44] @ 0x2c
  39923. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39924. 8011272: 6af9 ldr r1, [r7, #44] @ 0x2c
  39925. 8011274: 6b3a ldr r2, [r7, #48] @ 0x30
  39926. 8011276: e841 2300 strex r3, r2, [r1]
  39927. 801127a: 62bb str r3, [r7, #40] @ 0x28
  39928. return(result);
  39929. 801127c: 6abb ldr r3, [r7, #40] @ 0x28
  39930. 801127e: 2b00 cmp r3, #0
  39931. 8011280: d1e5 bne.n 801124e <UART_TxISR_8BIT_FIFOEN+0x28>
  39932. /* Enable the UART Transmit Complete Interrupt */
  39933. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  39934. 8011282: 687b ldr r3, [r7, #4]
  39935. 8011284: 681b ldr r3, [r3, #0]
  39936. 8011286: 613b str r3, [r7, #16]
  39937. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39938. 8011288: 693b ldr r3, [r7, #16]
  39939. 801128a: e853 3f00 ldrex r3, [r3]
  39940. 801128e: 60fb str r3, [r7, #12]
  39941. return(result);
  39942. 8011290: 68fb ldr r3, [r7, #12]
  39943. 8011292: f043 0340 orr.w r3, r3, #64 @ 0x40
  39944. 8011296: 637b str r3, [r7, #52] @ 0x34
  39945. 8011298: 687b ldr r3, [r7, #4]
  39946. 801129a: 681b ldr r3, [r3, #0]
  39947. 801129c: 461a mov r2, r3
  39948. 801129e: 6b7b ldr r3, [r7, #52] @ 0x34
  39949. 80112a0: 61fb str r3, [r7, #28]
  39950. 80112a2: 61ba str r2, [r7, #24]
  39951. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39952. 80112a4: 69b9 ldr r1, [r7, #24]
  39953. 80112a6: 69fa ldr r2, [r7, #28]
  39954. 80112a8: e841 2300 strex r3, r2, [r1]
  39955. 80112ac: 617b str r3, [r7, #20]
  39956. return(result);
  39957. 80112ae: 697b ldr r3, [r7, #20]
  39958. 80112b0: 2b00 cmp r3, #0
  39959. 80112b2: d1e6 bne.n 8011282 <UART_TxISR_8BIT_FIFOEN+0x5c>
  39960. break; /* force exit loop */
  39961. 80112b4: e021 b.n 80112fa <UART_TxISR_8BIT_FIFOEN+0xd4>
  39962. }
  39963. else if (READ_BIT(huart->Instance->ISR, USART_ISR_TXE_TXFNF) != 0U)
  39964. 80112b6: 687b ldr r3, [r7, #4]
  39965. 80112b8: 681b ldr r3, [r3, #0]
  39966. 80112ba: 69db ldr r3, [r3, #28]
  39967. 80112bc: f003 0380 and.w r3, r3, #128 @ 0x80
  39968. 80112c0: 2b00 cmp r3, #0
  39969. 80112c2: d013 beq.n 80112ec <UART_TxISR_8BIT_FIFOEN+0xc6>
  39970. {
  39971. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  39972. 80112c4: 687b ldr r3, [r7, #4]
  39973. 80112c6: 6d1b ldr r3, [r3, #80] @ 0x50
  39974. 80112c8: 781a ldrb r2, [r3, #0]
  39975. 80112ca: 687b ldr r3, [r7, #4]
  39976. 80112cc: 681b ldr r3, [r3, #0]
  39977. 80112ce: 629a str r2, [r3, #40] @ 0x28
  39978. huart->pTxBuffPtr++;
  39979. 80112d0: 687b ldr r3, [r7, #4]
  39980. 80112d2: 6d1b ldr r3, [r3, #80] @ 0x50
  39981. 80112d4: 1c5a adds r2, r3, #1
  39982. 80112d6: 687b ldr r3, [r7, #4]
  39983. 80112d8: 651a str r2, [r3, #80] @ 0x50
  39984. huart->TxXferCount--;
  39985. 80112da: 687b ldr r3, [r7, #4]
  39986. 80112dc: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  39987. 80112e0: b29b uxth r3, r3
  39988. 80112e2: 3b01 subs r3, #1
  39989. 80112e4: b29a uxth r2, r3
  39990. 80112e6: 687b ldr r3, [r7, #4]
  39991. 80112e8: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  39992. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  39993. 80112ec: 8ffb ldrh r3, [r7, #62] @ 0x3e
  39994. 80112ee: 3b01 subs r3, #1
  39995. 80112f0: 87fb strh r3, [r7, #62] @ 0x3e
  39996. 80112f2: 8ffb ldrh r3, [r7, #62] @ 0x3e
  39997. 80112f4: 2b00 cmp r3, #0
  39998. 80112f6: d1a4 bne.n 8011242 <UART_TxISR_8BIT_FIFOEN+0x1c>
  39999. {
  40000. /* Nothing to do */
  40001. }
  40002. }
  40003. }
  40004. }
  40005. 80112f8: e7ff b.n 80112fa <UART_TxISR_8BIT_FIFOEN+0xd4>
  40006. 80112fa: bf00 nop
  40007. 80112fc: 3744 adds r7, #68 @ 0x44
  40008. 80112fe: 46bd mov sp, r7
  40009. 8011300: f85d 7b04 ldr.w r7, [sp], #4
  40010. 8011304: 4770 bx lr
  40011. 08011306 <UART_TxISR_16BIT_FIFOEN>:
  40012. * interruptions have been enabled by HAL_UART_Transmit_IT().
  40013. * @param huart UART handle.
  40014. * @retval None
  40015. */
  40016. static void UART_TxISR_16BIT_FIFOEN(UART_HandleTypeDef *huart)
  40017. {
  40018. 8011306: b480 push {r7}
  40019. 8011308: b091 sub sp, #68 @ 0x44
  40020. 801130a: af00 add r7, sp, #0
  40021. 801130c: 6078 str r0, [r7, #4]
  40022. const uint16_t *tmp;
  40023. uint16_t nb_tx_data;
  40024. /* Check that a Tx process is ongoing */
  40025. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  40026. 801130e: 687b ldr r3, [r7, #4]
  40027. 8011310: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  40028. 8011314: 2b21 cmp r3, #33 @ 0x21
  40029. 8011316: d165 bne.n 80113e4 <UART_TxISR_16BIT_FIFOEN+0xde>
  40030. {
  40031. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  40032. 8011318: 687b ldr r3, [r7, #4]
  40033. 801131a: f8b3 306a ldrh.w r3, [r3, #106] @ 0x6a
  40034. 801131e: 87fb strh r3, [r7, #62] @ 0x3e
  40035. 8011320: e05c b.n 80113dc <UART_TxISR_16BIT_FIFOEN+0xd6>
  40036. {
  40037. if (huart->TxXferCount == 0U)
  40038. 8011322: 687b ldr r3, [r7, #4]
  40039. 8011324: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  40040. 8011328: b29b uxth r3, r3
  40041. 801132a: 2b00 cmp r3, #0
  40042. 801132c: d133 bne.n 8011396 <UART_TxISR_16BIT_FIFOEN+0x90>
  40043. {
  40044. /* Disable the TX FIFO threshold interrupt */
  40045. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  40046. 801132e: 687b ldr r3, [r7, #4]
  40047. 8011330: 681b ldr r3, [r3, #0]
  40048. 8011332: 3308 adds r3, #8
  40049. 8011334: 623b str r3, [r7, #32]
  40050. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40051. 8011336: 6a3b ldr r3, [r7, #32]
  40052. 8011338: e853 3f00 ldrex r3, [r3]
  40053. 801133c: 61fb str r3, [r7, #28]
  40054. return(result);
  40055. 801133e: 69fb ldr r3, [r7, #28]
  40056. 8011340: f423 0300 bic.w r3, r3, #8388608 @ 0x800000
  40057. 8011344: 637b str r3, [r7, #52] @ 0x34
  40058. 8011346: 687b ldr r3, [r7, #4]
  40059. 8011348: 681b ldr r3, [r3, #0]
  40060. 801134a: 3308 adds r3, #8
  40061. 801134c: 6b7a ldr r2, [r7, #52] @ 0x34
  40062. 801134e: 62fa str r2, [r7, #44] @ 0x2c
  40063. 8011350: 62bb str r3, [r7, #40] @ 0x28
  40064. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40065. 8011352: 6ab9 ldr r1, [r7, #40] @ 0x28
  40066. 8011354: 6afa ldr r2, [r7, #44] @ 0x2c
  40067. 8011356: e841 2300 strex r3, r2, [r1]
  40068. 801135a: 627b str r3, [r7, #36] @ 0x24
  40069. return(result);
  40070. 801135c: 6a7b ldr r3, [r7, #36] @ 0x24
  40071. 801135e: 2b00 cmp r3, #0
  40072. 8011360: d1e5 bne.n 801132e <UART_TxISR_16BIT_FIFOEN+0x28>
  40073. /* Enable the UART Transmit Complete Interrupt */
  40074. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  40075. 8011362: 687b ldr r3, [r7, #4]
  40076. 8011364: 681b ldr r3, [r3, #0]
  40077. 8011366: 60fb str r3, [r7, #12]
  40078. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40079. 8011368: 68fb ldr r3, [r7, #12]
  40080. 801136a: e853 3f00 ldrex r3, [r3]
  40081. 801136e: 60bb str r3, [r7, #8]
  40082. return(result);
  40083. 8011370: 68bb ldr r3, [r7, #8]
  40084. 8011372: f043 0340 orr.w r3, r3, #64 @ 0x40
  40085. 8011376: 633b str r3, [r7, #48] @ 0x30
  40086. 8011378: 687b ldr r3, [r7, #4]
  40087. 801137a: 681b ldr r3, [r3, #0]
  40088. 801137c: 461a mov r2, r3
  40089. 801137e: 6b3b ldr r3, [r7, #48] @ 0x30
  40090. 8011380: 61bb str r3, [r7, #24]
  40091. 8011382: 617a str r2, [r7, #20]
  40092. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40093. 8011384: 6979 ldr r1, [r7, #20]
  40094. 8011386: 69ba ldr r2, [r7, #24]
  40095. 8011388: e841 2300 strex r3, r2, [r1]
  40096. 801138c: 613b str r3, [r7, #16]
  40097. return(result);
  40098. 801138e: 693b ldr r3, [r7, #16]
  40099. 8011390: 2b00 cmp r3, #0
  40100. 8011392: d1e6 bne.n 8011362 <UART_TxISR_16BIT_FIFOEN+0x5c>
  40101. break; /* force exit loop */
  40102. 8011394: e026 b.n 80113e4 <UART_TxISR_16BIT_FIFOEN+0xde>
  40103. }
  40104. else if (READ_BIT(huart->Instance->ISR, USART_ISR_TXE_TXFNF) != 0U)
  40105. 8011396: 687b ldr r3, [r7, #4]
  40106. 8011398: 681b ldr r3, [r3, #0]
  40107. 801139a: 69db ldr r3, [r3, #28]
  40108. 801139c: f003 0380 and.w r3, r3, #128 @ 0x80
  40109. 80113a0: 2b00 cmp r3, #0
  40110. 80113a2: d018 beq.n 80113d6 <UART_TxISR_16BIT_FIFOEN+0xd0>
  40111. {
  40112. tmp = (const uint16_t *) huart->pTxBuffPtr;
  40113. 80113a4: 687b ldr r3, [r7, #4]
  40114. 80113a6: 6d1b ldr r3, [r3, #80] @ 0x50
  40115. 80113a8: 63bb str r3, [r7, #56] @ 0x38
  40116. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  40117. 80113aa: 6bbb ldr r3, [r7, #56] @ 0x38
  40118. 80113ac: 881b ldrh r3, [r3, #0]
  40119. 80113ae: 461a mov r2, r3
  40120. 80113b0: 687b ldr r3, [r7, #4]
  40121. 80113b2: 681b ldr r3, [r3, #0]
  40122. 80113b4: f3c2 0208 ubfx r2, r2, #0, #9
  40123. 80113b8: 629a str r2, [r3, #40] @ 0x28
  40124. huart->pTxBuffPtr += 2U;
  40125. 80113ba: 687b ldr r3, [r7, #4]
  40126. 80113bc: 6d1b ldr r3, [r3, #80] @ 0x50
  40127. 80113be: 1c9a adds r2, r3, #2
  40128. 80113c0: 687b ldr r3, [r7, #4]
  40129. 80113c2: 651a str r2, [r3, #80] @ 0x50
  40130. huart->TxXferCount--;
  40131. 80113c4: 687b ldr r3, [r7, #4]
  40132. 80113c6: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  40133. 80113ca: b29b uxth r3, r3
  40134. 80113cc: 3b01 subs r3, #1
  40135. 80113ce: b29a uxth r2, r3
  40136. 80113d0: 687b ldr r3, [r7, #4]
  40137. 80113d2: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  40138. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  40139. 80113d6: 8ffb ldrh r3, [r7, #62] @ 0x3e
  40140. 80113d8: 3b01 subs r3, #1
  40141. 80113da: 87fb strh r3, [r7, #62] @ 0x3e
  40142. 80113dc: 8ffb ldrh r3, [r7, #62] @ 0x3e
  40143. 80113de: 2b00 cmp r3, #0
  40144. 80113e0: d19f bne.n 8011322 <UART_TxISR_16BIT_FIFOEN+0x1c>
  40145. {
  40146. /* Nothing to do */
  40147. }
  40148. }
  40149. }
  40150. }
  40151. 80113e2: e7ff b.n 80113e4 <UART_TxISR_16BIT_FIFOEN+0xde>
  40152. 80113e4: bf00 nop
  40153. 80113e6: 3744 adds r7, #68 @ 0x44
  40154. 80113e8: 46bd mov sp, r7
  40155. 80113ea: f85d 7b04 ldr.w r7, [sp], #4
  40156. 80113ee: 4770 bx lr
  40157. 080113f0 <UART_EndTransmit_IT>:
  40158. * @param huart pointer to a UART_HandleTypeDef structure that contains
  40159. * the configuration information for the specified UART module.
  40160. * @retval None
  40161. */
  40162. static void UART_EndTransmit_IT(UART_HandleTypeDef *huart)
  40163. {
  40164. 80113f0: b580 push {r7, lr}
  40165. 80113f2: b088 sub sp, #32
  40166. 80113f4: af00 add r7, sp, #0
  40167. 80113f6: 6078 str r0, [r7, #4]
  40168. /* Disable the UART Transmit Complete Interrupt */
  40169. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  40170. 80113f8: 687b ldr r3, [r7, #4]
  40171. 80113fa: 681b ldr r3, [r3, #0]
  40172. 80113fc: 60fb str r3, [r7, #12]
  40173. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40174. 80113fe: 68fb ldr r3, [r7, #12]
  40175. 8011400: e853 3f00 ldrex r3, [r3]
  40176. 8011404: 60bb str r3, [r7, #8]
  40177. return(result);
  40178. 8011406: 68bb ldr r3, [r7, #8]
  40179. 8011408: f023 0340 bic.w r3, r3, #64 @ 0x40
  40180. 801140c: 61fb str r3, [r7, #28]
  40181. 801140e: 687b ldr r3, [r7, #4]
  40182. 8011410: 681b ldr r3, [r3, #0]
  40183. 8011412: 461a mov r2, r3
  40184. 8011414: 69fb ldr r3, [r7, #28]
  40185. 8011416: 61bb str r3, [r7, #24]
  40186. 8011418: 617a str r2, [r7, #20]
  40187. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40188. 801141a: 6979 ldr r1, [r7, #20]
  40189. 801141c: 69ba ldr r2, [r7, #24]
  40190. 801141e: e841 2300 strex r3, r2, [r1]
  40191. 8011422: 613b str r3, [r7, #16]
  40192. return(result);
  40193. 8011424: 693b ldr r3, [r7, #16]
  40194. 8011426: 2b00 cmp r3, #0
  40195. 8011428: d1e6 bne.n 80113f8 <UART_EndTransmit_IT+0x8>
  40196. /* Tx process is ended, restore huart->gState to Ready */
  40197. huart->gState = HAL_UART_STATE_READY;
  40198. 801142a: 687b ldr r3, [r7, #4]
  40199. 801142c: 2220 movs r2, #32
  40200. 801142e: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  40201. /* Cleat TxISR function pointer */
  40202. huart->TxISR = NULL;
  40203. 8011432: 687b ldr r3, [r7, #4]
  40204. 8011434: 2200 movs r2, #0
  40205. 8011436: 679a str r2, [r3, #120] @ 0x78
  40206. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  40207. /*Call registered Tx complete callback*/
  40208. huart->TxCpltCallback(huart);
  40209. #else
  40210. /*Call legacy weak Tx complete callback*/
  40211. HAL_UART_TxCpltCallback(huart);
  40212. 8011438: 6878 ldr r0, [r7, #4]
  40213. 801143a: f7f2 fc07 bl 8003c4c <HAL_UART_TxCpltCallback>
  40214. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  40215. }
  40216. 801143e: bf00 nop
  40217. 8011440: 3720 adds r7, #32
  40218. 8011442: 46bd mov sp, r7
  40219. 8011444: bd80 pop {r7, pc}
  40220. ...
  40221. 08011448 <UART_RxISR_8BIT>:
  40222. * @brief RX interrupt handler for 7 or 8 bits data word length .
  40223. * @param huart UART handle.
  40224. * @retval None
  40225. */
  40226. static void UART_RxISR_8BIT(UART_HandleTypeDef *huart)
  40227. {
  40228. 8011448: b580 push {r7, lr}
  40229. 801144a: b09c sub sp, #112 @ 0x70
  40230. 801144c: af00 add r7, sp, #0
  40231. 801144e: 6078 str r0, [r7, #4]
  40232. uint16_t uhMask = huart->Mask;
  40233. 8011450: 687b ldr r3, [r7, #4]
  40234. 8011452: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  40235. 8011456: f8a7 306e strh.w r3, [r7, #110] @ 0x6e
  40236. uint16_t uhdata;
  40237. /* Check that a Rx process is ongoing */
  40238. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  40239. 801145a: 687b ldr r3, [r7, #4]
  40240. 801145c: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  40241. 8011460: 2b22 cmp r3, #34 @ 0x22
  40242. 8011462: f040 80be bne.w 80115e2 <UART_RxISR_8BIT+0x19a>
  40243. {
  40244. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  40245. 8011466: 687b ldr r3, [r7, #4]
  40246. 8011468: 681b ldr r3, [r3, #0]
  40247. 801146a: 6a5b ldr r3, [r3, #36] @ 0x24
  40248. 801146c: f8a7 306c strh.w r3, [r7, #108] @ 0x6c
  40249. *huart->pRxBuffPtr = (uint8_t)(uhdata & (uint8_t)uhMask);
  40250. 8011470: f8b7 306c ldrh.w r3, [r7, #108] @ 0x6c
  40251. 8011474: b2d9 uxtb r1, r3
  40252. 8011476: f8b7 306e ldrh.w r3, [r7, #110] @ 0x6e
  40253. 801147a: b2da uxtb r2, r3
  40254. 801147c: 687b ldr r3, [r7, #4]
  40255. 801147e: 6d9b ldr r3, [r3, #88] @ 0x58
  40256. 8011480: 400a ands r2, r1
  40257. 8011482: b2d2 uxtb r2, r2
  40258. 8011484: 701a strb r2, [r3, #0]
  40259. huart->pRxBuffPtr++;
  40260. 8011486: 687b ldr r3, [r7, #4]
  40261. 8011488: 6d9b ldr r3, [r3, #88] @ 0x58
  40262. 801148a: 1c5a adds r2, r3, #1
  40263. 801148c: 687b ldr r3, [r7, #4]
  40264. 801148e: 659a str r2, [r3, #88] @ 0x58
  40265. huart->RxXferCount--;
  40266. 8011490: 687b ldr r3, [r7, #4]
  40267. 8011492: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  40268. 8011496: b29b uxth r3, r3
  40269. 8011498: 3b01 subs r3, #1
  40270. 801149a: b29a uxth r2, r3
  40271. 801149c: 687b ldr r3, [r7, #4]
  40272. 801149e: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  40273. if (huart->RxXferCount == 0U)
  40274. 80114a2: 687b ldr r3, [r7, #4]
  40275. 80114a4: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  40276. 80114a8: b29b uxth r3, r3
  40277. 80114aa: 2b00 cmp r3, #0
  40278. 80114ac: f040 80a1 bne.w 80115f2 <UART_RxISR_8BIT+0x1aa>
  40279. {
  40280. /* Disable the UART Parity Error Interrupt and RXNE interrupts */
  40281. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  40282. 80114b0: 687b ldr r3, [r7, #4]
  40283. 80114b2: 681b ldr r3, [r3, #0]
  40284. 80114b4: 64fb str r3, [r7, #76] @ 0x4c
  40285. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40286. 80114b6: 6cfb ldr r3, [r7, #76] @ 0x4c
  40287. 80114b8: e853 3f00 ldrex r3, [r3]
  40288. 80114bc: 64bb str r3, [r7, #72] @ 0x48
  40289. return(result);
  40290. 80114be: 6cbb ldr r3, [r7, #72] @ 0x48
  40291. 80114c0: f423 7390 bic.w r3, r3, #288 @ 0x120
  40292. 80114c4: 66bb str r3, [r7, #104] @ 0x68
  40293. 80114c6: 687b ldr r3, [r7, #4]
  40294. 80114c8: 681b ldr r3, [r3, #0]
  40295. 80114ca: 461a mov r2, r3
  40296. 80114cc: 6ebb ldr r3, [r7, #104] @ 0x68
  40297. 80114ce: 65bb str r3, [r7, #88] @ 0x58
  40298. 80114d0: 657a str r2, [r7, #84] @ 0x54
  40299. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40300. 80114d2: 6d79 ldr r1, [r7, #84] @ 0x54
  40301. 80114d4: 6dba ldr r2, [r7, #88] @ 0x58
  40302. 80114d6: e841 2300 strex r3, r2, [r1]
  40303. 80114da: 653b str r3, [r7, #80] @ 0x50
  40304. return(result);
  40305. 80114dc: 6d3b ldr r3, [r7, #80] @ 0x50
  40306. 80114de: 2b00 cmp r3, #0
  40307. 80114e0: d1e6 bne.n 80114b0 <UART_RxISR_8BIT+0x68>
  40308. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  40309. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  40310. 80114e2: 687b ldr r3, [r7, #4]
  40311. 80114e4: 681b ldr r3, [r3, #0]
  40312. 80114e6: 3308 adds r3, #8
  40313. 80114e8: 63bb str r3, [r7, #56] @ 0x38
  40314. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40315. 80114ea: 6bbb ldr r3, [r7, #56] @ 0x38
  40316. 80114ec: e853 3f00 ldrex r3, [r3]
  40317. 80114f0: 637b str r3, [r7, #52] @ 0x34
  40318. return(result);
  40319. 80114f2: 6b7b ldr r3, [r7, #52] @ 0x34
  40320. 80114f4: f023 0301 bic.w r3, r3, #1
  40321. 80114f8: 667b str r3, [r7, #100] @ 0x64
  40322. 80114fa: 687b ldr r3, [r7, #4]
  40323. 80114fc: 681b ldr r3, [r3, #0]
  40324. 80114fe: 3308 adds r3, #8
  40325. 8011500: 6e7a ldr r2, [r7, #100] @ 0x64
  40326. 8011502: 647a str r2, [r7, #68] @ 0x44
  40327. 8011504: 643b str r3, [r7, #64] @ 0x40
  40328. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40329. 8011506: 6c39 ldr r1, [r7, #64] @ 0x40
  40330. 8011508: 6c7a ldr r2, [r7, #68] @ 0x44
  40331. 801150a: e841 2300 strex r3, r2, [r1]
  40332. 801150e: 63fb str r3, [r7, #60] @ 0x3c
  40333. return(result);
  40334. 8011510: 6bfb ldr r3, [r7, #60] @ 0x3c
  40335. 8011512: 2b00 cmp r3, #0
  40336. 8011514: d1e5 bne.n 80114e2 <UART_RxISR_8BIT+0x9a>
  40337. /* Rx process is completed, restore huart->RxState to Ready */
  40338. huart->RxState = HAL_UART_STATE_READY;
  40339. 8011516: 687b ldr r3, [r7, #4]
  40340. 8011518: 2220 movs r2, #32
  40341. 801151a: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  40342. /* Clear RxISR function pointer */
  40343. huart->RxISR = NULL;
  40344. 801151e: 687b ldr r3, [r7, #4]
  40345. 8011520: 2200 movs r2, #0
  40346. 8011522: 675a str r2, [r3, #116] @ 0x74
  40347. /* Initialize type of RxEvent to Transfer Complete */
  40348. huart->RxEventType = HAL_UART_RXEVENT_TC;
  40349. 8011524: 687b ldr r3, [r7, #4]
  40350. 8011526: 2200 movs r2, #0
  40351. 8011528: 671a str r2, [r3, #112] @ 0x70
  40352. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  40353. 801152a: 687b ldr r3, [r7, #4]
  40354. 801152c: 681b ldr r3, [r3, #0]
  40355. 801152e: 4a33 ldr r2, [pc, #204] @ (80115fc <UART_RxISR_8BIT+0x1b4>)
  40356. 8011530: 4293 cmp r3, r2
  40357. 8011532: d01f beq.n 8011574 <UART_RxISR_8BIT+0x12c>
  40358. {
  40359. /* Check that USART RTOEN bit is set */
  40360. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  40361. 8011534: 687b ldr r3, [r7, #4]
  40362. 8011536: 681b ldr r3, [r3, #0]
  40363. 8011538: 685b ldr r3, [r3, #4]
  40364. 801153a: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  40365. 801153e: 2b00 cmp r3, #0
  40366. 8011540: d018 beq.n 8011574 <UART_RxISR_8BIT+0x12c>
  40367. {
  40368. /* Enable the UART Receiver Timeout Interrupt */
  40369. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  40370. 8011542: 687b ldr r3, [r7, #4]
  40371. 8011544: 681b ldr r3, [r3, #0]
  40372. 8011546: 627b str r3, [r7, #36] @ 0x24
  40373. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40374. 8011548: 6a7b ldr r3, [r7, #36] @ 0x24
  40375. 801154a: e853 3f00 ldrex r3, [r3]
  40376. 801154e: 623b str r3, [r7, #32]
  40377. return(result);
  40378. 8011550: 6a3b ldr r3, [r7, #32]
  40379. 8011552: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  40380. 8011556: 663b str r3, [r7, #96] @ 0x60
  40381. 8011558: 687b ldr r3, [r7, #4]
  40382. 801155a: 681b ldr r3, [r3, #0]
  40383. 801155c: 461a mov r2, r3
  40384. 801155e: 6e3b ldr r3, [r7, #96] @ 0x60
  40385. 8011560: 633b str r3, [r7, #48] @ 0x30
  40386. 8011562: 62fa str r2, [r7, #44] @ 0x2c
  40387. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40388. 8011564: 6af9 ldr r1, [r7, #44] @ 0x2c
  40389. 8011566: 6b3a ldr r2, [r7, #48] @ 0x30
  40390. 8011568: e841 2300 strex r3, r2, [r1]
  40391. 801156c: 62bb str r3, [r7, #40] @ 0x28
  40392. return(result);
  40393. 801156e: 6abb ldr r3, [r7, #40] @ 0x28
  40394. 8011570: 2b00 cmp r3, #0
  40395. 8011572: d1e6 bne.n 8011542 <UART_RxISR_8BIT+0xfa>
  40396. }
  40397. }
  40398. /* Check current reception Mode :
  40399. If Reception till IDLE event has been selected : */
  40400. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  40401. 8011574: 687b ldr r3, [r7, #4]
  40402. 8011576: 6edb ldr r3, [r3, #108] @ 0x6c
  40403. 8011578: 2b01 cmp r3, #1
  40404. 801157a: d12e bne.n 80115da <UART_RxISR_8BIT+0x192>
  40405. {
  40406. /* Set reception type to Standard */
  40407. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  40408. 801157c: 687b ldr r3, [r7, #4]
  40409. 801157e: 2200 movs r2, #0
  40410. 8011580: 66da str r2, [r3, #108] @ 0x6c
  40411. /* Disable IDLE interrupt */
  40412. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  40413. 8011582: 687b ldr r3, [r7, #4]
  40414. 8011584: 681b ldr r3, [r3, #0]
  40415. 8011586: 613b str r3, [r7, #16]
  40416. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40417. 8011588: 693b ldr r3, [r7, #16]
  40418. 801158a: e853 3f00 ldrex r3, [r3]
  40419. 801158e: 60fb str r3, [r7, #12]
  40420. return(result);
  40421. 8011590: 68fb ldr r3, [r7, #12]
  40422. 8011592: f023 0310 bic.w r3, r3, #16
  40423. 8011596: 65fb str r3, [r7, #92] @ 0x5c
  40424. 8011598: 687b ldr r3, [r7, #4]
  40425. 801159a: 681b ldr r3, [r3, #0]
  40426. 801159c: 461a mov r2, r3
  40427. 801159e: 6dfb ldr r3, [r7, #92] @ 0x5c
  40428. 80115a0: 61fb str r3, [r7, #28]
  40429. 80115a2: 61ba str r2, [r7, #24]
  40430. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40431. 80115a4: 69b9 ldr r1, [r7, #24]
  40432. 80115a6: 69fa ldr r2, [r7, #28]
  40433. 80115a8: e841 2300 strex r3, r2, [r1]
  40434. 80115ac: 617b str r3, [r7, #20]
  40435. return(result);
  40436. 80115ae: 697b ldr r3, [r7, #20]
  40437. 80115b0: 2b00 cmp r3, #0
  40438. 80115b2: d1e6 bne.n 8011582 <UART_RxISR_8BIT+0x13a>
  40439. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  40440. 80115b4: 687b ldr r3, [r7, #4]
  40441. 80115b6: 681b ldr r3, [r3, #0]
  40442. 80115b8: 69db ldr r3, [r3, #28]
  40443. 80115ba: f003 0310 and.w r3, r3, #16
  40444. 80115be: 2b10 cmp r3, #16
  40445. 80115c0: d103 bne.n 80115ca <UART_RxISR_8BIT+0x182>
  40446. {
  40447. /* Clear IDLE Flag */
  40448. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  40449. 80115c2: 687b ldr r3, [r7, #4]
  40450. 80115c4: 681b ldr r3, [r3, #0]
  40451. 80115c6: 2210 movs r2, #16
  40452. 80115c8: 621a str r2, [r3, #32]
  40453. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  40454. /*Call registered Rx Event callback*/
  40455. huart->RxEventCallback(huart, huart->RxXferSize);
  40456. #else
  40457. /*Call legacy weak Rx Event callback*/
  40458. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  40459. 80115ca: 687b ldr r3, [r7, #4]
  40460. 80115cc: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  40461. 80115d0: 4619 mov r1, r3
  40462. 80115d2: 6878 ldr r0, [r7, #4]
  40463. 80115d4: f7f2 fb10 bl 8003bf8 <HAL_UARTEx_RxEventCallback>
  40464. else
  40465. {
  40466. /* Clear RXNE interrupt flag */
  40467. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  40468. }
  40469. }
  40470. 80115d8: e00b b.n 80115f2 <UART_RxISR_8BIT+0x1aa>
  40471. HAL_UART_RxCpltCallback(huart);
  40472. 80115da: 6878 ldr r0, [r7, #4]
  40473. 80115dc: f7f2 fb02 bl 8003be4 <HAL_UART_RxCpltCallback>
  40474. }
  40475. 80115e0: e007 b.n 80115f2 <UART_RxISR_8BIT+0x1aa>
  40476. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  40477. 80115e2: 687b ldr r3, [r7, #4]
  40478. 80115e4: 681b ldr r3, [r3, #0]
  40479. 80115e6: 699a ldr r2, [r3, #24]
  40480. 80115e8: 687b ldr r3, [r7, #4]
  40481. 80115ea: 681b ldr r3, [r3, #0]
  40482. 80115ec: f042 0208 orr.w r2, r2, #8
  40483. 80115f0: 619a str r2, [r3, #24]
  40484. }
  40485. 80115f2: bf00 nop
  40486. 80115f4: 3770 adds r7, #112 @ 0x70
  40487. 80115f6: 46bd mov sp, r7
  40488. 80115f8: bd80 pop {r7, pc}
  40489. 80115fa: bf00 nop
  40490. 80115fc: 58000c00 .word 0x58000c00
  40491. 08011600 <UART_RxISR_16BIT>:
  40492. * interruptions have been enabled by HAL_UART_Receive_IT()
  40493. * @param huart UART handle.
  40494. * @retval None
  40495. */
  40496. static void UART_RxISR_16BIT(UART_HandleTypeDef *huart)
  40497. {
  40498. 8011600: b580 push {r7, lr}
  40499. 8011602: b09c sub sp, #112 @ 0x70
  40500. 8011604: af00 add r7, sp, #0
  40501. 8011606: 6078 str r0, [r7, #4]
  40502. uint16_t *tmp;
  40503. uint16_t uhMask = huart->Mask;
  40504. 8011608: 687b ldr r3, [r7, #4]
  40505. 801160a: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  40506. 801160e: f8a7 306e strh.w r3, [r7, #110] @ 0x6e
  40507. uint16_t uhdata;
  40508. /* Check that a Rx process is ongoing */
  40509. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  40510. 8011612: 687b ldr r3, [r7, #4]
  40511. 8011614: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  40512. 8011618: 2b22 cmp r3, #34 @ 0x22
  40513. 801161a: f040 80be bne.w 801179a <UART_RxISR_16BIT+0x19a>
  40514. {
  40515. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  40516. 801161e: 687b ldr r3, [r7, #4]
  40517. 8011620: 681b ldr r3, [r3, #0]
  40518. 8011622: 6a5b ldr r3, [r3, #36] @ 0x24
  40519. 8011624: f8a7 306c strh.w r3, [r7, #108] @ 0x6c
  40520. tmp = (uint16_t *) huart->pRxBuffPtr ;
  40521. 8011628: 687b ldr r3, [r7, #4]
  40522. 801162a: 6d9b ldr r3, [r3, #88] @ 0x58
  40523. 801162c: 66bb str r3, [r7, #104] @ 0x68
  40524. *tmp = (uint16_t)(uhdata & uhMask);
  40525. 801162e: f8b7 206c ldrh.w r2, [r7, #108] @ 0x6c
  40526. 8011632: f8b7 306e ldrh.w r3, [r7, #110] @ 0x6e
  40527. 8011636: 4013 ands r3, r2
  40528. 8011638: b29a uxth r2, r3
  40529. 801163a: 6ebb ldr r3, [r7, #104] @ 0x68
  40530. 801163c: 801a strh r2, [r3, #0]
  40531. huart->pRxBuffPtr += 2U;
  40532. 801163e: 687b ldr r3, [r7, #4]
  40533. 8011640: 6d9b ldr r3, [r3, #88] @ 0x58
  40534. 8011642: 1c9a adds r2, r3, #2
  40535. 8011644: 687b ldr r3, [r7, #4]
  40536. 8011646: 659a str r2, [r3, #88] @ 0x58
  40537. huart->RxXferCount--;
  40538. 8011648: 687b ldr r3, [r7, #4]
  40539. 801164a: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  40540. 801164e: b29b uxth r3, r3
  40541. 8011650: 3b01 subs r3, #1
  40542. 8011652: b29a uxth r2, r3
  40543. 8011654: 687b ldr r3, [r7, #4]
  40544. 8011656: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  40545. if (huart->RxXferCount == 0U)
  40546. 801165a: 687b ldr r3, [r7, #4]
  40547. 801165c: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  40548. 8011660: b29b uxth r3, r3
  40549. 8011662: 2b00 cmp r3, #0
  40550. 8011664: f040 80a1 bne.w 80117aa <UART_RxISR_16BIT+0x1aa>
  40551. {
  40552. /* Disable the UART Parity Error Interrupt and RXNE interrupt*/
  40553. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  40554. 8011668: 687b ldr r3, [r7, #4]
  40555. 801166a: 681b ldr r3, [r3, #0]
  40556. 801166c: 64bb str r3, [r7, #72] @ 0x48
  40557. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40558. 801166e: 6cbb ldr r3, [r7, #72] @ 0x48
  40559. 8011670: e853 3f00 ldrex r3, [r3]
  40560. 8011674: 647b str r3, [r7, #68] @ 0x44
  40561. return(result);
  40562. 8011676: 6c7b ldr r3, [r7, #68] @ 0x44
  40563. 8011678: f423 7390 bic.w r3, r3, #288 @ 0x120
  40564. 801167c: 667b str r3, [r7, #100] @ 0x64
  40565. 801167e: 687b ldr r3, [r7, #4]
  40566. 8011680: 681b ldr r3, [r3, #0]
  40567. 8011682: 461a mov r2, r3
  40568. 8011684: 6e7b ldr r3, [r7, #100] @ 0x64
  40569. 8011686: 657b str r3, [r7, #84] @ 0x54
  40570. 8011688: 653a str r2, [r7, #80] @ 0x50
  40571. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40572. 801168a: 6d39 ldr r1, [r7, #80] @ 0x50
  40573. 801168c: 6d7a ldr r2, [r7, #84] @ 0x54
  40574. 801168e: e841 2300 strex r3, r2, [r1]
  40575. 8011692: 64fb str r3, [r7, #76] @ 0x4c
  40576. return(result);
  40577. 8011694: 6cfb ldr r3, [r7, #76] @ 0x4c
  40578. 8011696: 2b00 cmp r3, #0
  40579. 8011698: d1e6 bne.n 8011668 <UART_RxISR_16BIT+0x68>
  40580. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  40581. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  40582. 801169a: 687b ldr r3, [r7, #4]
  40583. 801169c: 681b ldr r3, [r3, #0]
  40584. 801169e: 3308 adds r3, #8
  40585. 80116a0: 637b str r3, [r7, #52] @ 0x34
  40586. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40587. 80116a2: 6b7b ldr r3, [r7, #52] @ 0x34
  40588. 80116a4: e853 3f00 ldrex r3, [r3]
  40589. 80116a8: 633b str r3, [r7, #48] @ 0x30
  40590. return(result);
  40591. 80116aa: 6b3b ldr r3, [r7, #48] @ 0x30
  40592. 80116ac: f023 0301 bic.w r3, r3, #1
  40593. 80116b0: 663b str r3, [r7, #96] @ 0x60
  40594. 80116b2: 687b ldr r3, [r7, #4]
  40595. 80116b4: 681b ldr r3, [r3, #0]
  40596. 80116b6: 3308 adds r3, #8
  40597. 80116b8: 6e3a ldr r2, [r7, #96] @ 0x60
  40598. 80116ba: 643a str r2, [r7, #64] @ 0x40
  40599. 80116bc: 63fb str r3, [r7, #60] @ 0x3c
  40600. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40601. 80116be: 6bf9 ldr r1, [r7, #60] @ 0x3c
  40602. 80116c0: 6c3a ldr r2, [r7, #64] @ 0x40
  40603. 80116c2: e841 2300 strex r3, r2, [r1]
  40604. 80116c6: 63bb str r3, [r7, #56] @ 0x38
  40605. return(result);
  40606. 80116c8: 6bbb ldr r3, [r7, #56] @ 0x38
  40607. 80116ca: 2b00 cmp r3, #0
  40608. 80116cc: d1e5 bne.n 801169a <UART_RxISR_16BIT+0x9a>
  40609. /* Rx process is completed, restore huart->RxState to Ready */
  40610. huart->RxState = HAL_UART_STATE_READY;
  40611. 80116ce: 687b ldr r3, [r7, #4]
  40612. 80116d0: 2220 movs r2, #32
  40613. 80116d2: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  40614. /* Clear RxISR function pointer */
  40615. huart->RxISR = NULL;
  40616. 80116d6: 687b ldr r3, [r7, #4]
  40617. 80116d8: 2200 movs r2, #0
  40618. 80116da: 675a str r2, [r3, #116] @ 0x74
  40619. /* Initialize type of RxEvent to Transfer Complete */
  40620. huart->RxEventType = HAL_UART_RXEVENT_TC;
  40621. 80116dc: 687b ldr r3, [r7, #4]
  40622. 80116de: 2200 movs r2, #0
  40623. 80116e0: 671a str r2, [r3, #112] @ 0x70
  40624. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  40625. 80116e2: 687b ldr r3, [r7, #4]
  40626. 80116e4: 681b ldr r3, [r3, #0]
  40627. 80116e6: 4a33 ldr r2, [pc, #204] @ (80117b4 <UART_RxISR_16BIT+0x1b4>)
  40628. 80116e8: 4293 cmp r3, r2
  40629. 80116ea: d01f beq.n 801172c <UART_RxISR_16BIT+0x12c>
  40630. {
  40631. /* Check that USART RTOEN bit is set */
  40632. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  40633. 80116ec: 687b ldr r3, [r7, #4]
  40634. 80116ee: 681b ldr r3, [r3, #0]
  40635. 80116f0: 685b ldr r3, [r3, #4]
  40636. 80116f2: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  40637. 80116f6: 2b00 cmp r3, #0
  40638. 80116f8: d018 beq.n 801172c <UART_RxISR_16BIT+0x12c>
  40639. {
  40640. /* Enable the UART Receiver Timeout Interrupt */
  40641. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  40642. 80116fa: 687b ldr r3, [r7, #4]
  40643. 80116fc: 681b ldr r3, [r3, #0]
  40644. 80116fe: 623b str r3, [r7, #32]
  40645. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40646. 8011700: 6a3b ldr r3, [r7, #32]
  40647. 8011702: e853 3f00 ldrex r3, [r3]
  40648. 8011706: 61fb str r3, [r7, #28]
  40649. return(result);
  40650. 8011708: 69fb ldr r3, [r7, #28]
  40651. 801170a: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  40652. 801170e: 65fb str r3, [r7, #92] @ 0x5c
  40653. 8011710: 687b ldr r3, [r7, #4]
  40654. 8011712: 681b ldr r3, [r3, #0]
  40655. 8011714: 461a mov r2, r3
  40656. 8011716: 6dfb ldr r3, [r7, #92] @ 0x5c
  40657. 8011718: 62fb str r3, [r7, #44] @ 0x2c
  40658. 801171a: 62ba str r2, [r7, #40] @ 0x28
  40659. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40660. 801171c: 6ab9 ldr r1, [r7, #40] @ 0x28
  40661. 801171e: 6afa ldr r2, [r7, #44] @ 0x2c
  40662. 8011720: e841 2300 strex r3, r2, [r1]
  40663. 8011724: 627b str r3, [r7, #36] @ 0x24
  40664. return(result);
  40665. 8011726: 6a7b ldr r3, [r7, #36] @ 0x24
  40666. 8011728: 2b00 cmp r3, #0
  40667. 801172a: d1e6 bne.n 80116fa <UART_RxISR_16BIT+0xfa>
  40668. }
  40669. }
  40670. /* Check current reception Mode :
  40671. If Reception till IDLE event has been selected : */
  40672. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  40673. 801172c: 687b ldr r3, [r7, #4]
  40674. 801172e: 6edb ldr r3, [r3, #108] @ 0x6c
  40675. 8011730: 2b01 cmp r3, #1
  40676. 8011732: d12e bne.n 8011792 <UART_RxISR_16BIT+0x192>
  40677. {
  40678. /* Set reception type to Standard */
  40679. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  40680. 8011734: 687b ldr r3, [r7, #4]
  40681. 8011736: 2200 movs r2, #0
  40682. 8011738: 66da str r2, [r3, #108] @ 0x6c
  40683. /* Disable IDLE interrupt */
  40684. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  40685. 801173a: 687b ldr r3, [r7, #4]
  40686. 801173c: 681b ldr r3, [r3, #0]
  40687. 801173e: 60fb str r3, [r7, #12]
  40688. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40689. 8011740: 68fb ldr r3, [r7, #12]
  40690. 8011742: e853 3f00 ldrex r3, [r3]
  40691. 8011746: 60bb str r3, [r7, #8]
  40692. return(result);
  40693. 8011748: 68bb ldr r3, [r7, #8]
  40694. 801174a: f023 0310 bic.w r3, r3, #16
  40695. 801174e: 65bb str r3, [r7, #88] @ 0x58
  40696. 8011750: 687b ldr r3, [r7, #4]
  40697. 8011752: 681b ldr r3, [r3, #0]
  40698. 8011754: 461a mov r2, r3
  40699. 8011756: 6dbb ldr r3, [r7, #88] @ 0x58
  40700. 8011758: 61bb str r3, [r7, #24]
  40701. 801175a: 617a str r2, [r7, #20]
  40702. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40703. 801175c: 6979 ldr r1, [r7, #20]
  40704. 801175e: 69ba ldr r2, [r7, #24]
  40705. 8011760: e841 2300 strex r3, r2, [r1]
  40706. 8011764: 613b str r3, [r7, #16]
  40707. return(result);
  40708. 8011766: 693b ldr r3, [r7, #16]
  40709. 8011768: 2b00 cmp r3, #0
  40710. 801176a: d1e6 bne.n 801173a <UART_RxISR_16BIT+0x13a>
  40711. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  40712. 801176c: 687b ldr r3, [r7, #4]
  40713. 801176e: 681b ldr r3, [r3, #0]
  40714. 8011770: 69db ldr r3, [r3, #28]
  40715. 8011772: f003 0310 and.w r3, r3, #16
  40716. 8011776: 2b10 cmp r3, #16
  40717. 8011778: d103 bne.n 8011782 <UART_RxISR_16BIT+0x182>
  40718. {
  40719. /* Clear IDLE Flag */
  40720. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  40721. 801177a: 687b ldr r3, [r7, #4]
  40722. 801177c: 681b ldr r3, [r3, #0]
  40723. 801177e: 2210 movs r2, #16
  40724. 8011780: 621a str r2, [r3, #32]
  40725. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  40726. /*Call registered Rx Event callback*/
  40727. huart->RxEventCallback(huart, huart->RxXferSize);
  40728. #else
  40729. /*Call legacy weak Rx Event callback*/
  40730. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  40731. 8011782: 687b ldr r3, [r7, #4]
  40732. 8011784: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  40733. 8011788: 4619 mov r1, r3
  40734. 801178a: 6878 ldr r0, [r7, #4]
  40735. 801178c: f7f2 fa34 bl 8003bf8 <HAL_UARTEx_RxEventCallback>
  40736. else
  40737. {
  40738. /* Clear RXNE interrupt flag */
  40739. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  40740. }
  40741. }
  40742. 8011790: e00b b.n 80117aa <UART_RxISR_16BIT+0x1aa>
  40743. HAL_UART_RxCpltCallback(huart);
  40744. 8011792: 6878 ldr r0, [r7, #4]
  40745. 8011794: f7f2 fa26 bl 8003be4 <HAL_UART_RxCpltCallback>
  40746. }
  40747. 8011798: e007 b.n 80117aa <UART_RxISR_16BIT+0x1aa>
  40748. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  40749. 801179a: 687b ldr r3, [r7, #4]
  40750. 801179c: 681b ldr r3, [r3, #0]
  40751. 801179e: 699a ldr r2, [r3, #24]
  40752. 80117a0: 687b ldr r3, [r7, #4]
  40753. 80117a2: 681b ldr r3, [r3, #0]
  40754. 80117a4: f042 0208 orr.w r2, r2, #8
  40755. 80117a8: 619a str r2, [r3, #24]
  40756. }
  40757. 80117aa: bf00 nop
  40758. 80117ac: 3770 adds r7, #112 @ 0x70
  40759. 80117ae: 46bd mov sp, r7
  40760. 80117b0: bd80 pop {r7, pc}
  40761. 80117b2: bf00 nop
  40762. 80117b4: 58000c00 .word 0x58000c00
  40763. 080117b8 <UART_RxISR_8BIT_FIFOEN>:
  40764. * interruptions have been enabled by HAL_UART_Receive_IT()
  40765. * @param huart UART handle.
  40766. * @retval None
  40767. */
  40768. static void UART_RxISR_8BIT_FIFOEN(UART_HandleTypeDef *huart)
  40769. {
  40770. 80117b8: b580 push {r7, lr}
  40771. 80117ba: b0ac sub sp, #176 @ 0xb0
  40772. 80117bc: af00 add r7, sp, #0
  40773. 80117be: 6078 str r0, [r7, #4]
  40774. uint16_t uhMask = huart->Mask;
  40775. 80117c0: 687b ldr r3, [r7, #4]
  40776. 80117c2: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  40777. 80117c6: f8a7 30aa strh.w r3, [r7, #170] @ 0xaa
  40778. uint16_t uhdata;
  40779. uint16_t nb_rx_data;
  40780. uint16_t rxdatacount;
  40781. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  40782. 80117ca: 687b ldr r3, [r7, #4]
  40783. 80117cc: 681b ldr r3, [r3, #0]
  40784. 80117ce: 69db ldr r3, [r3, #28]
  40785. 80117d0: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  40786. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  40787. 80117d4: 687b ldr r3, [r7, #4]
  40788. 80117d6: 681b ldr r3, [r3, #0]
  40789. 80117d8: 681b ldr r3, [r3, #0]
  40790. 80117da: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  40791. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  40792. 80117de: 687b ldr r3, [r7, #4]
  40793. 80117e0: 681b ldr r3, [r3, #0]
  40794. 80117e2: 689b ldr r3, [r3, #8]
  40795. 80117e4: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  40796. /* Check that a Rx process is ongoing */
  40797. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  40798. 80117e8: 687b ldr r3, [r7, #4]
  40799. 80117ea: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  40800. 80117ee: 2b22 cmp r3, #34 @ 0x22
  40801. 80117f0: f040 8180 bne.w 8011af4 <UART_RxISR_8BIT_FIFOEN+0x33c>
  40802. {
  40803. nb_rx_data = huart->NbRxDataToProcess;
  40804. 80117f4: 687b ldr r3, [r7, #4]
  40805. 80117f6: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  40806. 80117fa: f8a7 309e strh.w r3, [r7, #158] @ 0x9e
  40807. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  40808. 80117fe: e123 b.n 8011a48 <UART_RxISR_8BIT_FIFOEN+0x290>
  40809. {
  40810. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  40811. 8011800: 687b ldr r3, [r7, #4]
  40812. 8011802: 681b ldr r3, [r3, #0]
  40813. 8011804: 6a5b ldr r3, [r3, #36] @ 0x24
  40814. 8011806: f8a7 309c strh.w r3, [r7, #156] @ 0x9c
  40815. *huart->pRxBuffPtr = (uint8_t)(uhdata & (uint8_t)uhMask);
  40816. 801180a: f8b7 309c ldrh.w r3, [r7, #156] @ 0x9c
  40817. 801180e: b2d9 uxtb r1, r3
  40818. 8011810: f8b7 30aa ldrh.w r3, [r7, #170] @ 0xaa
  40819. 8011814: b2da uxtb r2, r3
  40820. 8011816: 687b ldr r3, [r7, #4]
  40821. 8011818: 6d9b ldr r3, [r3, #88] @ 0x58
  40822. 801181a: 400a ands r2, r1
  40823. 801181c: b2d2 uxtb r2, r2
  40824. 801181e: 701a strb r2, [r3, #0]
  40825. huart->pRxBuffPtr++;
  40826. 8011820: 687b ldr r3, [r7, #4]
  40827. 8011822: 6d9b ldr r3, [r3, #88] @ 0x58
  40828. 8011824: 1c5a adds r2, r3, #1
  40829. 8011826: 687b ldr r3, [r7, #4]
  40830. 8011828: 659a str r2, [r3, #88] @ 0x58
  40831. huart->RxXferCount--;
  40832. 801182a: 687b ldr r3, [r7, #4]
  40833. 801182c: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  40834. 8011830: b29b uxth r3, r3
  40835. 8011832: 3b01 subs r3, #1
  40836. 8011834: b29a uxth r2, r3
  40837. 8011836: 687b ldr r3, [r7, #4]
  40838. 8011838: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  40839. isrflags = READ_REG(huart->Instance->ISR);
  40840. 801183c: 687b ldr r3, [r7, #4]
  40841. 801183e: 681b ldr r3, [r3, #0]
  40842. 8011840: 69db ldr r3, [r3, #28]
  40843. 8011842: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  40844. /* If some non blocking errors occurred */
  40845. if ((isrflags & (USART_ISR_PE | USART_ISR_FE | USART_ISR_NE)) != 0U)
  40846. 8011846: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  40847. 801184a: f003 0307 and.w r3, r3, #7
  40848. 801184e: 2b00 cmp r3, #0
  40849. 8011850: d053 beq.n 80118fa <UART_RxISR_8BIT_FIFOEN+0x142>
  40850. {
  40851. /* UART parity error interrupt occurred -------------------------------------*/
  40852. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  40853. 8011852: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  40854. 8011856: f003 0301 and.w r3, r3, #1
  40855. 801185a: 2b00 cmp r3, #0
  40856. 801185c: d011 beq.n 8011882 <UART_RxISR_8BIT_FIFOEN+0xca>
  40857. 801185e: f8d7 30a4 ldr.w r3, [r7, #164] @ 0xa4
  40858. 8011862: f403 7380 and.w r3, r3, #256 @ 0x100
  40859. 8011866: 2b00 cmp r3, #0
  40860. 8011868: d00b beq.n 8011882 <UART_RxISR_8BIT_FIFOEN+0xca>
  40861. {
  40862. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  40863. 801186a: 687b ldr r3, [r7, #4]
  40864. 801186c: 681b ldr r3, [r3, #0]
  40865. 801186e: 2201 movs r2, #1
  40866. 8011870: 621a str r2, [r3, #32]
  40867. huart->ErrorCode |= HAL_UART_ERROR_PE;
  40868. 8011872: 687b ldr r3, [r7, #4]
  40869. 8011874: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  40870. 8011878: f043 0201 orr.w r2, r3, #1
  40871. 801187c: 687b ldr r3, [r7, #4]
  40872. 801187e: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  40873. }
  40874. /* UART frame error interrupt occurred --------------------------------------*/
  40875. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  40876. 8011882: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  40877. 8011886: f003 0302 and.w r3, r3, #2
  40878. 801188a: 2b00 cmp r3, #0
  40879. 801188c: d011 beq.n 80118b2 <UART_RxISR_8BIT_FIFOEN+0xfa>
  40880. 801188e: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  40881. 8011892: f003 0301 and.w r3, r3, #1
  40882. 8011896: 2b00 cmp r3, #0
  40883. 8011898: d00b beq.n 80118b2 <UART_RxISR_8BIT_FIFOEN+0xfa>
  40884. {
  40885. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  40886. 801189a: 687b ldr r3, [r7, #4]
  40887. 801189c: 681b ldr r3, [r3, #0]
  40888. 801189e: 2202 movs r2, #2
  40889. 80118a0: 621a str r2, [r3, #32]
  40890. huart->ErrorCode |= HAL_UART_ERROR_FE;
  40891. 80118a2: 687b ldr r3, [r7, #4]
  40892. 80118a4: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  40893. 80118a8: f043 0204 orr.w r2, r3, #4
  40894. 80118ac: 687b ldr r3, [r7, #4]
  40895. 80118ae: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  40896. }
  40897. /* UART noise error interrupt occurred --------------------------------------*/
  40898. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  40899. 80118b2: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  40900. 80118b6: f003 0304 and.w r3, r3, #4
  40901. 80118ba: 2b00 cmp r3, #0
  40902. 80118bc: d011 beq.n 80118e2 <UART_RxISR_8BIT_FIFOEN+0x12a>
  40903. 80118be: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  40904. 80118c2: f003 0301 and.w r3, r3, #1
  40905. 80118c6: 2b00 cmp r3, #0
  40906. 80118c8: d00b beq.n 80118e2 <UART_RxISR_8BIT_FIFOEN+0x12a>
  40907. {
  40908. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  40909. 80118ca: 687b ldr r3, [r7, #4]
  40910. 80118cc: 681b ldr r3, [r3, #0]
  40911. 80118ce: 2204 movs r2, #4
  40912. 80118d0: 621a str r2, [r3, #32]
  40913. huart->ErrorCode |= HAL_UART_ERROR_NE;
  40914. 80118d2: 687b ldr r3, [r7, #4]
  40915. 80118d4: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  40916. 80118d8: f043 0202 orr.w r2, r3, #2
  40917. 80118dc: 687b ldr r3, [r7, #4]
  40918. 80118de: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  40919. }
  40920. /* Call UART Error Call back function if need be ----------------------------*/
  40921. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  40922. 80118e2: 687b ldr r3, [r7, #4]
  40923. 80118e4: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  40924. 80118e8: 2b00 cmp r3, #0
  40925. 80118ea: d006 beq.n 80118fa <UART_RxISR_8BIT_FIFOEN+0x142>
  40926. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  40927. /*Call registered error callback*/
  40928. huart->ErrorCallback(huart);
  40929. #else
  40930. /*Call legacy weak error callback*/
  40931. HAL_UART_ErrorCallback(huart);
  40932. 80118ec: 6878 ldr r0, [r7, #4]
  40933. 80118ee: f7fe fb13 bl 800ff18 <HAL_UART_ErrorCallback>
  40934. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  40935. huart->ErrorCode = HAL_UART_ERROR_NONE;
  40936. 80118f2: 687b ldr r3, [r7, #4]
  40937. 80118f4: 2200 movs r2, #0
  40938. 80118f6: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  40939. }
  40940. }
  40941. if (huart->RxXferCount == 0U)
  40942. 80118fa: 687b ldr r3, [r7, #4]
  40943. 80118fc: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  40944. 8011900: b29b uxth r3, r3
  40945. 8011902: 2b00 cmp r3, #0
  40946. 8011904: f040 80a0 bne.w 8011a48 <UART_RxISR_8BIT_FIFOEN+0x290>
  40947. {
  40948. /* Disable the UART Parity Error Interrupt and RXFT interrupt*/
  40949. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  40950. 8011908: 687b ldr r3, [r7, #4]
  40951. 801190a: 681b ldr r3, [r3, #0]
  40952. 801190c: 673b str r3, [r7, #112] @ 0x70
  40953. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40954. 801190e: 6f3b ldr r3, [r7, #112] @ 0x70
  40955. 8011910: e853 3f00 ldrex r3, [r3]
  40956. 8011914: 66fb str r3, [r7, #108] @ 0x6c
  40957. return(result);
  40958. 8011916: 6efb ldr r3, [r7, #108] @ 0x6c
  40959. 8011918: f423 7380 bic.w r3, r3, #256 @ 0x100
  40960. 801191c: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  40961. 8011920: 687b ldr r3, [r7, #4]
  40962. 8011922: 681b ldr r3, [r3, #0]
  40963. 8011924: 461a mov r2, r3
  40964. 8011926: f8d7 3098 ldr.w r3, [r7, #152] @ 0x98
  40965. 801192a: 67fb str r3, [r7, #124] @ 0x7c
  40966. 801192c: 67ba str r2, [r7, #120] @ 0x78
  40967. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40968. 801192e: 6fb9 ldr r1, [r7, #120] @ 0x78
  40969. 8011930: 6ffa ldr r2, [r7, #124] @ 0x7c
  40970. 8011932: e841 2300 strex r3, r2, [r1]
  40971. 8011936: 677b str r3, [r7, #116] @ 0x74
  40972. return(result);
  40973. 8011938: 6f7b ldr r3, [r7, #116] @ 0x74
  40974. 801193a: 2b00 cmp r3, #0
  40975. 801193c: d1e4 bne.n 8011908 <UART_RxISR_8BIT_FIFOEN+0x150>
  40976. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error)
  40977. and RX FIFO Threshold interrupt */
  40978. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  40979. 801193e: 687b ldr r3, [r7, #4]
  40980. 8011940: 681b ldr r3, [r3, #0]
  40981. 8011942: 3308 adds r3, #8
  40982. 8011944: 65fb str r3, [r7, #92] @ 0x5c
  40983. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40984. 8011946: 6dfb ldr r3, [r7, #92] @ 0x5c
  40985. 8011948: e853 3f00 ldrex r3, [r3]
  40986. 801194c: 65bb str r3, [r7, #88] @ 0x58
  40987. return(result);
  40988. 801194e: 6dba ldr r2, [r7, #88] @ 0x58
  40989. 8011950: 4b6e ldr r3, [pc, #440] @ (8011b0c <UART_RxISR_8BIT_FIFOEN+0x354>)
  40990. 8011952: 4013 ands r3, r2
  40991. 8011954: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  40992. 8011958: 687b ldr r3, [r7, #4]
  40993. 801195a: 681b ldr r3, [r3, #0]
  40994. 801195c: 3308 adds r3, #8
  40995. 801195e: f8d7 2094 ldr.w r2, [r7, #148] @ 0x94
  40996. 8011962: 66ba str r2, [r7, #104] @ 0x68
  40997. 8011964: 667b str r3, [r7, #100] @ 0x64
  40998. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40999. 8011966: 6e79 ldr r1, [r7, #100] @ 0x64
  41000. 8011968: 6eba ldr r2, [r7, #104] @ 0x68
  41001. 801196a: e841 2300 strex r3, r2, [r1]
  41002. 801196e: 663b str r3, [r7, #96] @ 0x60
  41003. return(result);
  41004. 8011970: 6e3b ldr r3, [r7, #96] @ 0x60
  41005. 8011972: 2b00 cmp r3, #0
  41006. 8011974: d1e3 bne.n 801193e <UART_RxISR_8BIT_FIFOEN+0x186>
  41007. /* Rx process is completed, restore huart->RxState to Ready */
  41008. huart->RxState = HAL_UART_STATE_READY;
  41009. 8011976: 687b ldr r3, [r7, #4]
  41010. 8011978: 2220 movs r2, #32
  41011. 801197a: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  41012. /* Clear RxISR function pointer */
  41013. huart->RxISR = NULL;
  41014. 801197e: 687b ldr r3, [r7, #4]
  41015. 8011980: 2200 movs r2, #0
  41016. 8011982: 675a str r2, [r3, #116] @ 0x74
  41017. /* Initialize type of RxEvent to Transfer Complete */
  41018. huart->RxEventType = HAL_UART_RXEVENT_TC;
  41019. 8011984: 687b ldr r3, [r7, #4]
  41020. 8011986: 2200 movs r2, #0
  41021. 8011988: 671a str r2, [r3, #112] @ 0x70
  41022. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  41023. 801198a: 687b ldr r3, [r7, #4]
  41024. 801198c: 681b ldr r3, [r3, #0]
  41025. 801198e: 4a60 ldr r2, [pc, #384] @ (8011b10 <UART_RxISR_8BIT_FIFOEN+0x358>)
  41026. 8011990: 4293 cmp r3, r2
  41027. 8011992: d021 beq.n 80119d8 <UART_RxISR_8BIT_FIFOEN+0x220>
  41028. {
  41029. /* Check that USART RTOEN bit is set */
  41030. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  41031. 8011994: 687b ldr r3, [r7, #4]
  41032. 8011996: 681b ldr r3, [r3, #0]
  41033. 8011998: 685b ldr r3, [r3, #4]
  41034. 801199a: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  41035. 801199e: 2b00 cmp r3, #0
  41036. 80119a0: d01a beq.n 80119d8 <UART_RxISR_8BIT_FIFOEN+0x220>
  41037. {
  41038. /* Enable the UART Receiver Timeout Interrupt */
  41039. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  41040. 80119a2: 687b ldr r3, [r7, #4]
  41041. 80119a4: 681b ldr r3, [r3, #0]
  41042. 80119a6: 64bb str r3, [r7, #72] @ 0x48
  41043. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41044. 80119a8: 6cbb ldr r3, [r7, #72] @ 0x48
  41045. 80119aa: e853 3f00 ldrex r3, [r3]
  41046. 80119ae: 647b str r3, [r7, #68] @ 0x44
  41047. return(result);
  41048. 80119b0: 6c7b ldr r3, [r7, #68] @ 0x44
  41049. 80119b2: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  41050. 80119b6: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  41051. 80119ba: 687b ldr r3, [r7, #4]
  41052. 80119bc: 681b ldr r3, [r3, #0]
  41053. 80119be: 461a mov r2, r3
  41054. 80119c0: f8d7 3090 ldr.w r3, [r7, #144] @ 0x90
  41055. 80119c4: 657b str r3, [r7, #84] @ 0x54
  41056. 80119c6: 653a str r2, [r7, #80] @ 0x50
  41057. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41058. 80119c8: 6d39 ldr r1, [r7, #80] @ 0x50
  41059. 80119ca: 6d7a ldr r2, [r7, #84] @ 0x54
  41060. 80119cc: e841 2300 strex r3, r2, [r1]
  41061. 80119d0: 64fb str r3, [r7, #76] @ 0x4c
  41062. return(result);
  41063. 80119d2: 6cfb ldr r3, [r7, #76] @ 0x4c
  41064. 80119d4: 2b00 cmp r3, #0
  41065. 80119d6: d1e4 bne.n 80119a2 <UART_RxISR_8BIT_FIFOEN+0x1ea>
  41066. }
  41067. }
  41068. /* Check current reception Mode :
  41069. If Reception till IDLE event has been selected : */
  41070. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  41071. 80119d8: 687b ldr r3, [r7, #4]
  41072. 80119da: 6edb ldr r3, [r3, #108] @ 0x6c
  41073. 80119dc: 2b01 cmp r3, #1
  41074. 80119de: d130 bne.n 8011a42 <UART_RxISR_8BIT_FIFOEN+0x28a>
  41075. {
  41076. /* Set reception type to Standard */
  41077. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  41078. 80119e0: 687b ldr r3, [r7, #4]
  41079. 80119e2: 2200 movs r2, #0
  41080. 80119e4: 66da str r2, [r3, #108] @ 0x6c
  41081. /* Disable IDLE interrupt */
  41082. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  41083. 80119e6: 687b ldr r3, [r7, #4]
  41084. 80119e8: 681b ldr r3, [r3, #0]
  41085. 80119ea: 637b str r3, [r7, #52] @ 0x34
  41086. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41087. 80119ec: 6b7b ldr r3, [r7, #52] @ 0x34
  41088. 80119ee: e853 3f00 ldrex r3, [r3]
  41089. 80119f2: 633b str r3, [r7, #48] @ 0x30
  41090. return(result);
  41091. 80119f4: 6b3b ldr r3, [r7, #48] @ 0x30
  41092. 80119f6: f023 0310 bic.w r3, r3, #16
  41093. 80119fa: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  41094. 80119fe: 687b ldr r3, [r7, #4]
  41095. 8011a00: 681b ldr r3, [r3, #0]
  41096. 8011a02: 461a mov r2, r3
  41097. 8011a04: f8d7 308c ldr.w r3, [r7, #140] @ 0x8c
  41098. 8011a08: 643b str r3, [r7, #64] @ 0x40
  41099. 8011a0a: 63fa str r2, [r7, #60] @ 0x3c
  41100. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41101. 8011a0c: 6bf9 ldr r1, [r7, #60] @ 0x3c
  41102. 8011a0e: 6c3a ldr r2, [r7, #64] @ 0x40
  41103. 8011a10: e841 2300 strex r3, r2, [r1]
  41104. 8011a14: 63bb str r3, [r7, #56] @ 0x38
  41105. return(result);
  41106. 8011a16: 6bbb ldr r3, [r7, #56] @ 0x38
  41107. 8011a18: 2b00 cmp r3, #0
  41108. 8011a1a: d1e4 bne.n 80119e6 <UART_RxISR_8BIT_FIFOEN+0x22e>
  41109. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  41110. 8011a1c: 687b ldr r3, [r7, #4]
  41111. 8011a1e: 681b ldr r3, [r3, #0]
  41112. 8011a20: 69db ldr r3, [r3, #28]
  41113. 8011a22: f003 0310 and.w r3, r3, #16
  41114. 8011a26: 2b10 cmp r3, #16
  41115. 8011a28: d103 bne.n 8011a32 <UART_RxISR_8BIT_FIFOEN+0x27a>
  41116. {
  41117. /* Clear IDLE Flag */
  41118. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  41119. 8011a2a: 687b ldr r3, [r7, #4]
  41120. 8011a2c: 681b ldr r3, [r3, #0]
  41121. 8011a2e: 2210 movs r2, #16
  41122. 8011a30: 621a str r2, [r3, #32]
  41123. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  41124. /*Call registered Rx Event callback*/
  41125. huart->RxEventCallback(huart, huart->RxXferSize);
  41126. #else
  41127. /*Call legacy weak Rx Event callback*/
  41128. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  41129. 8011a32: 687b ldr r3, [r7, #4]
  41130. 8011a34: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  41131. 8011a38: 4619 mov r1, r3
  41132. 8011a3a: 6878 ldr r0, [r7, #4]
  41133. 8011a3c: f7f2 f8dc bl 8003bf8 <HAL_UARTEx_RxEventCallback>
  41134. 8011a40: e002 b.n 8011a48 <UART_RxISR_8BIT_FIFOEN+0x290>
  41135. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  41136. /*Call registered Rx complete callback*/
  41137. huart->RxCpltCallback(huart);
  41138. #else
  41139. /*Call legacy weak Rx complete callback*/
  41140. HAL_UART_RxCpltCallback(huart);
  41141. 8011a42: 6878 ldr r0, [r7, #4]
  41142. 8011a44: f7f2 f8ce bl 8003be4 <HAL_UART_RxCpltCallback>
  41143. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  41144. 8011a48: f8b7 309e ldrh.w r3, [r7, #158] @ 0x9e
  41145. 8011a4c: 2b00 cmp r3, #0
  41146. 8011a4e: d006 beq.n 8011a5e <UART_RxISR_8BIT_FIFOEN+0x2a6>
  41147. 8011a50: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  41148. 8011a54: f003 0320 and.w r3, r3, #32
  41149. 8011a58: 2b00 cmp r3, #0
  41150. 8011a5a: f47f aed1 bne.w 8011800 <UART_RxISR_8BIT_FIFOEN+0x48>
  41151. /* When remaining number of bytes to receive is less than the RX FIFO
  41152. threshold, next incoming frames are processed as if FIFO mode was
  41153. disabled (i.e. one interrupt per received frame).
  41154. */
  41155. rxdatacount = huart->RxXferCount;
  41156. 8011a5e: 687b ldr r3, [r7, #4]
  41157. 8011a60: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  41158. 8011a64: f8a7 308a strh.w r3, [r7, #138] @ 0x8a
  41159. if ((rxdatacount != 0U) && (rxdatacount < huart->NbRxDataToProcess))
  41160. 8011a68: f8b7 308a ldrh.w r3, [r7, #138] @ 0x8a
  41161. 8011a6c: 2b00 cmp r3, #0
  41162. 8011a6e: d049 beq.n 8011b04 <UART_RxISR_8BIT_FIFOEN+0x34c>
  41163. 8011a70: 687b ldr r3, [r7, #4]
  41164. 8011a72: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  41165. 8011a76: f8b7 208a ldrh.w r2, [r7, #138] @ 0x8a
  41166. 8011a7a: 429a cmp r2, r3
  41167. 8011a7c: d242 bcs.n 8011b04 <UART_RxISR_8BIT_FIFOEN+0x34c>
  41168. {
  41169. /* Disable the UART RXFT interrupt*/
  41170. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  41171. 8011a7e: 687b ldr r3, [r7, #4]
  41172. 8011a80: 681b ldr r3, [r3, #0]
  41173. 8011a82: 3308 adds r3, #8
  41174. 8011a84: 623b str r3, [r7, #32]
  41175. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41176. 8011a86: 6a3b ldr r3, [r7, #32]
  41177. 8011a88: e853 3f00 ldrex r3, [r3]
  41178. 8011a8c: 61fb str r3, [r7, #28]
  41179. return(result);
  41180. 8011a8e: 69fb ldr r3, [r7, #28]
  41181. 8011a90: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  41182. 8011a94: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  41183. 8011a98: 687b ldr r3, [r7, #4]
  41184. 8011a9a: 681b ldr r3, [r3, #0]
  41185. 8011a9c: 3308 adds r3, #8
  41186. 8011a9e: f8d7 2084 ldr.w r2, [r7, #132] @ 0x84
  41187. 8011aa2: 62fa str r2, [r7, #44] @ 0x2c
  41188. 8011aa4: 62bb str r3, [r7, #40] @ 0x28
  41189. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41190. 8011aa6: 6ab9 ldr r1, [r7, #40] @ 0x28
  41191. 8011aa8: 6afa ldr r2, [r7, #44] @ 0x2c
  41192. 8011aaa: e841 2300 strex r3, r2, [r1]
  41193. 8011aae: 627b str r3, [r7, #36] @ 0x24
  41194. return(result);
  41195. 8011ab0: 6a7b ldr r3, [r7, #36] @ 0x24
  41196. 8011ab2: 2b00 cmp r3, #0
  41197. 8011ab4: d1e3 bne.n 8011a7e <UART_RxISR_8BIT_FIFOEN+0x2c6>
  41198. /* Update the RxISR function pointer */
  41199. huart->RxISR = UART_RxISR_8BIT;
  41200. 8011ab6: 687b ldr r3, [r7, #4]
  41201. 8011ab8: 4a16 ldr r2, [pc, #88] @ (8011b14 <UART_RxISR_8BIT_FIFOEN+0x35c>)
  41202. 8011aba: 675a str r2, [r3, #116] @ 0x74
  41203. /* Enable the UART Data Register Not Empty interrupt */
  41204. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  41205. 8011abc: 687b ldr r3, [r7, #4]
  41206. 8011abe: 681b ldr r3, [r3, #0]
  41207. 8011ac0: 60fb str r3, [r7, #12]
  41208. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41209. 8011ac2: 68fb ldr r3, [r7, #12]
  41210. 8011ac4: e853 3f00 ldrex r3, [r3]
  41211. 8011ac8: 60bb str r3, [r7, #8]
  41212. return(result);
  41213. 8011aca: 68bb ldr r3, [r7, #8]
  41214. 8011acc: f043 0320 orr.w r3, r3, #32
  41215. 8011ad0: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  41216. 8011ad4: 687b ldr r3, [r7, #4]
  41217. 8011ad6: 681b ldr r3, [r3, #0]
  41218. 8011ad8: 461a mov r2, r3
  41219. 8011ada: f8d7 3080 ldr.w r3, [r7, #128] @ 0x80
  41220. 8011ade: 61bb str r3, [r7, #24]
  41221. 8011ae0: 617a str r2, [r7, #20]
  41222. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41223. 8011ae2: 6979 ldr r1, [r7, #20]
  41224. 8011ae4: 69ba ldr r2, [r7, #24]
  41225. 8011ae6: e841 2300 strex r3, r2, [r1]
  41226. 8011aea: 613b str r3, [r7, #16]
  41227. return(result);
  41228. 8011aec: 693b ldr r3, [r7, #16]
  41229. 8011aee: 2b00 cmp r3, #0
  41230. 8011af0: d1e4 bne.n 8011abc <UART_RxISR_8BIT_FIFOEN+0x304>
  41231. else
  41232. {
  41233. /* Clear RXNE interrupt flag */
  41234. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  41235. }
  41236. }
  41237. 8011af2: e007 b.n 8011b04 <UART_RxISR_8BIT_FIFOEN+0x34c>
  41238. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  41239. 8011af4: 687b ldr r3, [r7, #4]
  41240. 8011af6: 681b ldr r3, [r3, #0]
  41241. 8011af8: 699a ldr r2, [r3, #24]
  41242. 8011afa: 687b ldr r3, [r7, #4]
  41243. 8011afc: 681b ldr r3, [r3, #0]
  41244. 8011afe: f042 0208 orr.w r2, r2, #8
  41245. 8011b02: 619a str r2, [r3, #24]
  41246. }
  41247. 8011b04: bf00 nop
  41248. 8011b06: 37b0 adds r7, #176 @ 0xb0
  41249. 8011b08: 46bd mov sp, r7
  41250. 8011b0a: bd80 pop {r7, pc}
  41251. 8011b0c: effffffe .word 0xeffffffe
  41252. 8011b10: 58000c00 .word 0x58000c00
  41253. 8011b14: 08011449 .word 0x08011449
  41254. 08011b18 <UART_RxISR_16BIT_FIFOEN>:
  41255. * interruptions have been enabled by HAL_UART_Receive_IT()
  41256. * @param huart UART handle.
  41257. * @retval None
  41258. */
  41259. static void UART_RxISR_16BIT_FIFOEN(UART_HandleTypeDef *huart)
  41260. {
  41261. 8011b18: b580 push {r7, lr}
  41262. 8011b1a: b0ae sub sp, #184 @ 0xb8
  41263. 8011b1c: af00 add r7, sp, #0
  41264. 8011b1e: 6078 str r0, [r7, #4]
  41265. uint16_t *tmp;
  41266. uint16_t uhMask = huart->Mask;
  41267. 8011b20: 687b ldr r3, [r7, #4]
  41268. 8011b22: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  41269. 8011b26: f8a7 30b2 strh.w r3, [r7, #178] @ 0xb2
  41270. uint16_t uhdata;
  41271. uint16_t nb_rx_data;
  41272. uint16_t rxdatacount;
  41273. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  41274. 8011b2a: 687b ldr r3, [r7, #4]
  41275. 8011b2c: 681b ldr r3, [r3, #0]
  41276. 8011b2e: 69db ldr r3, [r3, #28]
  41277. 8011b30: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  41278. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  41279. 8011b34: 687b ldr r3, [r7, #4]
  41280. 8011b36: 681b ldr r3, [r3, #0]
  41281. 8011b38: 681b ldr r3, [r3, #0]
  41282. 8011b3a: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  41283. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  41284. 8011b3e: 687b ldr r3, [r7, #4]
  41285. 8011b40: 681b ldr r3, [r3, #0]
  41286. 8011b42: 689b ldr r3, [r3, #8]
  41287. 8011b44: f8c7 30a8 str.w r3, [r7, #168] @ 0xa8
  41288. /* Check that a Rx process is ongoing */
  41289. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  41290. 8011b48: 687b ldr r3, [r7, #4]
  41291. 8011b4a: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  41292. 8011b4e: 2b22 cmp r3, #34 @ 0x22
  41293. 8011b50: f040 8184 bne.w 8011e5c <UART_RxISR_16BIT_FIFOEN+0x344>
  41294. {
  41295. nb_rx_data = huart->NbRxDataToProcess;
  41296. 8011b54: 687b ldr r3, [r7, #4]
  41297. 8011b56: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  41298. 8011b5a: f8a7 30a6 strh.w r3, [r7, #166] @ 0xa6
  41299. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  41300. 8011b5e: e127 b.n 8011db0 <UART_RxISR_16BIT_FIFOEN+0x298>
  41301. {
  41302. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  41303. 8011b60: 687b ldr r3, [r7, #4]
  41304. 8011b62: 681b ldr r3, [r3, #0]
  41305. 8011b64: 6a5b ldr r3, [r3, #36] @ 0x24
  41306. 8011b66: f8a7 30a4 strh.w r3, [r7, #164] @ 0xa4
  41307. tmp = (uint16_t *) huart->pRxBuffPtr ;
  41308. 8011b6a: 687b ldr r3, [r7, #4]
  41309. 8011b6c: 6d9b ldr r3, [r3, #88] @ 0x58
  41310. 8011b6e: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  41311. *tmp = (uint16_t)(uhdata & uhMask);
  41312. 8011b72: f8b7 20a4 ldrh.w r2, [r7, #164] @ 0xa4
  41313. 8011b76: f8b7 30b2 ldrh.w r3, [r7, #178] @ 0xb2
  41314. 8011b7a: 4013 ands r3, r2
  41315. 8011b7c: b29a uxth r2, r3
  41316. 8011b7e: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  41317. 8011b82: 801a strh r2, [r3, #0]
  41318. huart->pRxBuffPtr += 2U;
  41319. 8011b84: 687b ldr r3, [r7, #4]
  41320. 8011b86: 6d9b ldr r3, [r3, #88] @ 0x58
  41321. 8011b88: 1c9a adds r2, r3, #2
  41322. 8011b8a: 687b ldr r3, [r7, #4]
  41323. 8011b8c: 659a str r2, [r3, #88] @ 0x58
  41324. huart->RxXferCount--;
  41325. 8011b8e: 687b ldr r3, [r7, #4]
  41326. 8011b90: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  41327. 8011b94: b29b uxth r3, r3
  41328. 8011b96: 3b01 subs r3, #1
  41329. 8011b98: b29a uxth r2, r3
  41330. 8011b9a: 687b ldr r3, [r7, #4]
  41331. 8011b9c: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  41332. isrflags = READ_REG(huart->Instance->ISR);
  41333. 8011ba0: 687b ldr r3, [r7, #4]
  41334. 8011ba2: 681b ldr r3, [r3, #0]
  41335. 8011ba4: 69db ldr r3, [r3, #28]
  41336. 8011ba6: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  41337. /* If some non blocking errors occurred */
  41338. if ((isrflags & (USART_ISR_PE | USART_ISR_FE | USART_ISR_NE)) != 0U)
  41339. 8011baa: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  41340. 8011bae: f003 0307 and.w r3, r3, #7
  41341. 8011bb2: 2b00 cmp r3, #0
  41342. 8011bb4: d053 beq.n 8011c5e <UART_RxISR_16BIT_FIFOEN+0x146>
  41343. {
  41344. /* UART parity error interrupt occurred -------------------------------------*/
  41345. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  41346. 8011bb6: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  41347. 8011bba: f003 0301 and.w r3, r3, #1
  41348. 8011bbe: 2b00 cmp r3, #0
  41349. 8011bc0: d011 beq.n 8011be6 <UART_RxISR_16BIT_FIFOEN+0xce>
  41350. 8011bc2: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  41351. 8011bc6: f403 7380 and.w r3, r3, #256 @ 0x100
  41352. 8011bca: 2b00 cmp r3, #0
  41353. 8011bcc: d00b beq.n 8011be6 <UART_RxISR_16BIT_FIFOEN+0xce>
  41354. {
  41355. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  41356. 8011bce: 687b ldr r3, [r7, #4]
  41357. 8011bd0: 681b ldr r3, [r3, #0]
  41358. 8011bd2: 2201 movs r2, #1
  41359. 8011bd4: 621a str r2, [r3, #32]
  41360. huart->ErrorCode |= HAL_UART_ERROR_PE;
  41361. 8011bd6: 687b ldr r3, [r7, #4]
  41362. 8011bd8: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  41363. 8011bdc: f043 0201 orr.w r2, r3, #1
  41364. 8011be0: 687b ldr r3, [r7, #4]
  41365. 8011be2: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  41366. }
  41367. /* UART frame error interrupt occurred --------------------------------------*/
  41368. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  41369. 8011be6: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  41370. 8011bea: f003 0302 and.w r3, r3, #2
  41371. 8011bee: 2b00 cmp r3, #0
  41372. 8011bf0: d011 beq.n 8011c16 <UART_RxISR_16BIT_FIFOEN+0xfe>
  41373. 8011bf2: f8d7 30a8 ldr.w r3, [r7, #168] @ 0xa8
  41374. 8011bf6: f003 0301 and.w r3, r3, #1
  41375. 8011bfa: 2b00 cmp r3, #0
  41376. 8011bfc: d00b beq.n 8011c16 <UART_RxISR_16BIT_FIFOEN+0xfe>
  41377. {
  41378. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  41379. 8011bfe: 687b ldr r3, [r7, #4]
  41380. 8011c00: 681b ldr r3, [r3, #0]
  41381. 8011c02: 2202 movs r2, #2
  41382. 8011c04: 621a str r2, [r3, #32]
  41383. huart->ErrorCode |= HAL_UART_ERROR_FE;
  41384. 8011c06: 687b ldr r3, [r7, #4]
  41385. 8011c08: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  41386. 8011c0c: f043 0204 orr.w r2, r3, #4
  41387. 8011c10: 687b ldr r3, [r7, #4]
  41388. 8011c12: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  41389. }
  41390. /* UART noise error interrupt occurred --------------------------------------*/
  41391. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  41392. 8011c16: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  41393. 8011c1a: f003 0304 and.w r3, r3, #4
  41394. 8011c1e: 2b00 cmp r3, #0
  41395. 8011c20: d011 beq.n 8011c46 <UART_RxISR_16BIT_FIFOEN+0x12e>
  41396. 8011c22: f8d7 30a8 ldr.w r3, [r7, #168] @ 0xa8
  41397. 8011c26: f003 0301 and.w r3, r3, #1
  41398. 8011c2a: 2b00 cmp r3, #0
  41399. 8011c2c: d00b beq.n 8011c46 <UART_RxISR_16BIT_FIFOEN+0x12e>
  41400. {
  41401. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  41402. 8011c2e: 687b ldr r3, [r7, #4]
  41403. 8011c30: 681b ldr r3, [r3, #0]
  41404. 8011c32: 2204 movs r2, #4
  41405. 8011c34: 621a str r2, [r3, #32]
  41406. huart->ErrorCode |= HAL_UART_ERROR_NE;
  41407. 8011c36: 687b ldr r3, [r7, #4]
  41408. 8011c38: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  41409. 8011c3c: f043 0202 orr.w r2, r3, #2
  41410. 8011c40: 687b ldr r3, [r7, #4]
  41411. 8011c42: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  41412. }
  41413. /* Call UART Error Call back function if need be ----------------------------*/
  41414. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  41415. 8011c46: 687b ldr r3, [r7, #4]
  41416. 8011c48: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  41417. 8011c4c: 2b00 cmp r3, #0
  41418. 8011c4e: d006 beq.n 8011c5e <UART_RxISR_16BIT_FIFOEN+0x146>
  41419. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  41420. /*Call registered error callback*/
  41421. huart->ErrorCallback(huart);
  41422. #else
  41423. /*Call legacy weak error callback*/
  41424. HAL_UART_ErrorCallback(huart);
  41425. 8011c50: 6878 ldr r0, [r7, #4]
  41426. 8011c52: f7fe f961 bl 800ff18 <HAL_UART_ErrorCallback>
  41427. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  41428. huart->ErrorCode = HAL_UART_ERROR_NONE;
  41429. 8011c56: 687b ldr r3, [r7, #4]
  41430. 8011c58: 2200 movs r2, #0
  41431. 8011c5a: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  41432. }
  41433. }
  41434. if (huart->RxXferCount == 0U)
  41435. 8011c5e: 687b ldr r3, [r7, #4]
  41436. 8011c60: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  41437. 8011c64: b29b uxth r3, r3
  41438. 8011c66: 2b00 cmp r3, #0
  41439. 8011c68: f040 80a2 bne.w 8011db0 <UART_RxISR_16BIT_FIFOEN+0x298>
  41440. {
  41441. /* Disable the UART Parity Error Interrupt and RXFT interrupt*/
  41442. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  41443. 8011c6c: 687b ldr r3, [r7, #4]
  41444. 8011c6e: 681b ldr r3, [r3, #0]
  41445. 8011c70: 677b str r3, [r7, #116] @ 0x74
  41446. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41447. 8011c72: 6f7b ldr r3, [r7, #116] @ 0x74
  41448. 8011c74: e853 3f00 ldrex r3, [r3]
  41449. 8011c78: 673b str r3, [r7, #112] @ 0x70
  41450. return(result);
  41451. 8011c7a: 6f3b ldr r3, [r7, #112] @ 0x70
  41452. 8011c7c: f423 7380 bic.w r3, r3, #256 @ 0x100
  41453. 8011c80: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  41454. 8011c84: 687b ldr r3, [r7, #4]
  41455. 8011c86: 681b ldr r3, [r3, #0]
  41456. 8011c88: 461a mov r2, r3
  41457. 8011c8a: f8d7 309c ldr.w r3, [r7, #156] @ 0x9c
  41458. 8011c8e: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  41459. 8011c92: 67fa str r2, [r7, #124] @ 0x7c
  41460. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41461. 8011c94: 6ff9 ldr r1, [r7, #124] @ 0x7c
  41462. 8011c96: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80
  41463. 8011c9a: e841 2300 strex r3, r2, [r1]
  41464. 8011c9e: 67bb str r3, [r7, #120] @ 0x78
  41465. return(result);
  41466. 8011ca0: 6fbb ldr r3, [r7, #120] @ 0x78
  41467. 8011ca2: 2b00 cmp r3, #0
  41468. 8011ca4: d1e2 bne.n 8011c6c <UART_RxISR_16BIT_FIFOEN+0x154>
  41469. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error)
  41470. and RX FIFO Threshold interrupt */
  41471. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  41472. 8011ca6: 687b ldr r3, [r7, #4]
  41473. 8011ca8: 681b ldr r3, [r3, #0]
  41474. 8011caa: 3308 adds r3, #8
  41475. 8011cac: 663b str r3, [r7, #96] @ 0x60
  41476. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41477. 8011cae: 6e3b ldr r3, [r7, #96] @ 0x60
  41478. 8011cb0: e853 3f00 ldrex r3, [r3]
  41479. 8011cb4: 65fb str r3, [r7, #92] @ 0x5c
  41480. return(result);
  41481. 8011cb6: 6dfa ldr r2, [r7, #92] @ 0x5c
  41482. 8011cb8: 4b6e ldr r3, [pc, #440] @ (8011e74 <UART_RxISR_16BIT_FIFOEN+0x35c>)
  41483. 8011cba: 4013 ands r3, r2
  41484. 8011cbc: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  41485. 8011cc0: 687b ldr r3, [r7, #4]
  41486. 8011cc2: 681b ldr r3, [r3, #0]
  41487. 8011cc4: 3308 adds r3, #8
  41488. 8011cc6: f8d7 2098 ldr.w r2, [r7, #152] @ 0x98
  41489. 8011cca: 66fa str r2, [r7, #108] @ 0x6c
  41490. 8011ccc: 66bb str r3, [r7, #104] @ 0x68
  41491. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41492. 8011cce: 6eb9 ldr r1, [r7, #104] @ 0x68
  41493. 8011cd0: 6efa ldr r2, [r7, #108] @ 0x6c
  41494. 8011cd2: e841 2300 strex r3, r2, [r1]
  41495. 8011cd6: 667b str r3, [r7, #100] @ 0x64
  41496. return(result);
  41497. 8011cd8: 6e7b ldr r3, [r7, #100] @ 0x64
  41498. 8011cda: 2b00 cmp r3, #0
  41499. 8011cdc: d1e3 bne.n 8011ca6 <UART_RxISR_16BIT_FIFOEN+0x18e>
  41500. /* Rx process is completed, restore huart->RxState to Ready */
  41501. huart->RxState = HAL_UART_STATE_READY;
  41502. 8011cde: 687b ldr r3, [r7, #4]
  41503. 8011ce0: 2220 movs r2, #32
  41504. 8011ce2: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  41505. /* Clear RxISR function pointer */
  41506. huart->RxISR = NULL;
  41507. 8011ce6: 687b ldr r3, [r7, #4]
  41508. 8011ce8: 2200 movs r2, #0
  41509. 8011cea: 675a str r2, [r3, #116] @ 0x74
  41510. /* Initialize type of RxEvent to Transfer Complete */
  41511. huart->RxEventType = HAL_UART_RXEVENT_TC;
  41512. 8011cec: 687b ldr r3, [r7, #4]
  41513. 8011cee: 2200 movs r2, #0
  41514. 8011cf0: 671a str r2, [r3, #112] @ 0x70
  41515. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  41516. 8011cf2: 687b ldr r3, [r7, #4]
  41517. 8011cf4: 681b ldr r3, [r3, #0]
  41518. 8011cf6: 4a60 ldr r2, [pc, #384] @ (8011e78 <UART_RxISR_16BIT_FIFOEN+0x360>)
  41519. 8011cf8: 4293 cmp r3, r2
  41520. 8011cfa: d021 beq.n 8011d40 <UART_RxISR_16BIT_FIFOEN+0x228>
  41521. {
  41522. /* Check that USART RTOEN bit is set */
  41523. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  41524. 8011cfc: 687b ldr r3, [r7, #4]
  41525. 8011cfe: 681b ldr r3, [r3, #0]
  41526. 8011d00: 685b ldr r3, [r3, #4]
  41527. 8011d02: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  41528. 8011d06: 2b00 cmp r3, #0
  41529. 8011d08: d01a beq.n 8011d40 <UART_RxISR_16BIT_FIFOEN+0x228>
  41530. {
  41531. /* Enable the UART Receiver Timeout Interrupt */
  41532. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  41533. 8011d0a: 687b ldr r3, [r7, #4]
  41534. 8011d0c: 681b ldr r3, [r3, #0]
  41535. 8011d0e: 64fb str r3, [r7, #76] @ 0x4c
  41536. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41537. 8011d10: 6cfb ldr r3, [r7, #76] @ 0x4c
  41538. 8011d12: e853 3f00 ldrex r3, [r3]
  41539. 8011d16: 64bb str r3, [r7, #72] @ 0x48
  41540. return(result);
  41541. 8011d18: 6cbb ldr r3, [r7, #72] @ 0x48
  41542. 8011d1a: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  41543. 8011d1e: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  41544. 8011d22: 687b ldr r3, [r7, #4]
  41545. 8011d24: 681b ldr r3, [r3, #0]
  41546. 8011d26: 461a mov r2, r3
  41547. 8011d28: f8d7 3094 ldr.w r3, [r7, #148] @ 0x94
  41548. 8011d2c: 65bb str r3, [r7, #88] @ 0x58
  41549. 8011d2e: 657a str r2, [r7, #84] @ 0x54
  41550. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41551. 8011d30: 6d79 ldr r1, [r7, #84] @ 0x54
  41552. 8011d32: 6dba ldr r2, [r7, #88] @ 0x58
  41553. 8011d34: e841 2300 strex r3, r2, [r1]
  41554. 8011d38: 653b str r3, [r7, #80] @ 0x50
  41555. return(result);
  41556. 8011d3a: 6d3b ldr r3, [r7, #80] @ 0x50
  41557. 8011d3c: 2b00 cmp r3, #0
  41558. 8011d3e: d1e4 bne.n 8011d0a <UART_RxISR_16BIT_FIFOEN+0x1f2>
  41559. }
  41560. }
  41561. /* Check current reception Mode :
  41562. If Reception till IDLE event has been selected : */
  41563. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  41564. 8011d40: 687b ldr r3, [r7, #4]
  41565. 8011d42: 6edb ldr r3, [r3, #108] @ 0x6c
  41566. 8011d44: 2b01 cmp r3, #1
  41567. 8011d46: d130 bne.n 8011daa <UART_RxISR_16BIT_FIFOEN+0x292>
  41568. {
  41569. /* Set reception type to Standard */
  41570. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  41571. 8011d48: 687b ldr r3, [r7, #4]
  41572. 8011d4a: 2200 movs r2, #0
  41573. 8011d4c: 66da str r2, [r3, #108] @ 0x6c
  41574. /* Disable IDLE interrupt */
  41575. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  41576. 8011d4e: 687b ldr r3, [r7, #4]
  41577. 8011d50: 681b ldr r3, [r3, #0]
  41578. 8011d52: 63bb str r3, [r7, #56] @ 0x38
  41579. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41580. 8011d54: 6bbb ldr r3, [r7, #56] @ 0x38
  41581. 8011d56: e853 3f00 ldrex r3, [r3]
  41582. 8011d5a: 637b str r3, [r7, #52] @ 0x34
  41583. return(result);
  41584. 8011d5c: 6b7b ldr r3, [r7, #52] @ 0x34
  41585. 8011d5e: f023 0310 bic.w r3, r3, #16
  41586. 8011d62: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  41587. 8011d66: 687b ldr r3, [r7, #4]
  41588. 8011d68: 681b ldr r3, [r3, #0]
  41589. 8011d6a: 461a mov r2, r3
  41590. 8011d6c: f8d7 3090 ldr.w r3, [r7, #144] @ 0x90
  41591. 8011d70: 647b str r3, [r7, #68] @ 0x44
  41592. 8011d72: 643a str r2, [r7, #64] @ 0x40
  41593. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41594. 8011d74: 6c39 ldr r1, [r7, #64] @ 0x40
  41595. 8011d76: 6c7a ldr r2, [r7, #68] @ 0x44
  41596. 8011d78: e841 2300 strex r3, r2, [r1]
  41597. 8011d7c: 63fb str r3, [r7, #60] @ 0x3c
  41598. return(result);
  41599. 8011d7e: 6bfb ldr r3, [r7, #60] @ 0x3c
  41600. 8011d80: 2b00 cmp r3, #0
  41601. 8011d82: d1e4 bne.n 8011d4e <UART_RxISR_16BIT_FIFOEN+0x236>
  41602. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  41603. 8011d84: 687b ldr r3, [r7, #4]
  41604. 8011d86: 681b ldr r3, [r3, #0]
  41605. 8011d88: 69db ldr r3, [r3, #28]
  41606. 8011d8a: f003 0310 and.w r3, r3, #16
  41607. 8011d8e: 2b10 cmp r3, #16
  41608. 8011d90: d103 bne.n 8011d9a <UART_RxISR_16BIT_FIFOEN+0x282>
  41609. {
  41610. /* Clear IDLE Flag */
  41611. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  41612. 8011d92: 687b ldr r3, [r7, #4]
  41613. 8011d94: 681b ldr r3, [r3, #0]
  41614. 8011d96: 2210 movs r2, #16
  41615. 8011d98: 621a str r2, [r3, #32]
  41616. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  41617. /*Call registered Rx Event callback*/
  41618. huart->RxEventCallback(huart, huart->RxXferSize);
  41619. #else
  41620. /*Call legacy weak Rx Event callback*/
  41621. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  41622. 8011d9a: 687b ldr r3, [r7, #4]
  41623. 8011d9c: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  41624. 8011da0: 4619 mov r1, r3
  41625. 8011da2: 6878 ldr r0, [r7, #4]
  41626. 8011da4: f7f1 ff28 bl 8003bf8 <HAL_UARTEx_RxEventCallback>
  41627. 8011da8: e002 b.n 8011db0 <UART_RxISR_16BIT_FIFOEN+0x298>
  41628. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  41629. /*Call registered Rx complete callback*/
  41630. huart->RxCpltCallback(huart);
  41631. #else
  41632. /*Call legacy weak Rx complete callback*/
  41633. HAL_UART_RxCpltCallback(huart);
  41634. 8011daa: 6878 ldr r0, [r7, #4]
  41635. 8011dac: f7f1 ff1a bl 8003be4 <HAL_UART_RxCpltCallback>
  41636. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  41637. 8011db0: f8b7 30a6 ldrh.w r3, [r7, #166] @ 0xa6
  41638. 8011db4: 2b00 cmp r3, #0
  41639. 8011db6: d006 beq.n 8011dc6 <UART_RxISR_16BIT_FIFOEN+0x2ae>
  41640. 8011db8: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  41641. 8011dbc: f003 0320 and.w r3, r3, #32
  41642. 8011dc0: 2b00 cmp r3, #0
  41643. 8011dc2: f47f aecd bne.w 8011b60 <UART_RxISR_16BIT_FIFOEN+0x48>
  41644. /* When remaining number of bytes to receive is less than the RX FIFO
  41645. threshold, next incoming frames are processed as if FIFO mode was
  41646. disabled (i.e. one interrupt per received frame).
  41647. */
  41648. rxdatacount = huart->RxXferCount;
  41649. 8011dc6: 687b ldr r3, [r7, #4]
  41650. 8011dc8: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  41651. 8011dcc: f8a7 308e strh.w r3, [r7, #142] @ 0x8e
  41652. if ((rxdatacount != 0U) && (rxdatacount < huart->NbRxDataToProcess))
  41653. 8011dd0: f8b7 308e ldrh.w r3, [r7, #142] @ 0x8e
  41654. 8011dd4: 2b00 cmp r3, #0
  41655. 8011dd6: d049 beq.n 8011e6c <UART_RxISR_16BIT_FIFOEN+0x354>
  41656. 8011dd8: 687b ldr r3, [r7, #4]
  41657. 8011dda: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  41658. 8011dde: f8b7 208e ldrh.w r2, [r7, #142] @ 0x8e
  41659. 8011de2: 429a cmp r2, r3
  41660. 8011de4: d242 bcs.n 8011e6c <UART_RxISR_16BIT_FIFOEN+0x354>
  41661. {
  41662. /* Disable the UART RXFT interrupt*/
  41663. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  41664. 8011de6: 687b ldr r3, [r7, #4]
  41665. 8011de8: 681b ldr r3, [r3, #0]
  41666. 8011dea: 3308 adds r3, #8
  41667. 8011dec: 627b str r3, [r7, #36] @ 0x24
  41668. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41669. 8011dee: 6a7b ldr r3, [r7, #36] @ 0x24
  41670. 8011df0: e853 3f00 ldrex r3, [r3]
  41671. 8011df4: 623b str r3, [r7, #32]
  41672. return(result);
  41673. 8011df6: 6a3b ldr r3, [r7, #32]
  41674. 8011df8: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  41675. 8011dfc: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  41676. 8011e00: 687b ldr r3, [r7, #4]
  41677. 8011e02: 681b ldr r3, [r3, #0]
  41678. 8011e04: 3308 adds r3, #8
  41679. 8011e06: f8d7 2088 ldr.w r2, [r7, #136] @ 0x88
  41680. 8011e0a: 633a str r2, [r7, #48] @ 0x30
  41681. 8011e0c: 62fb str r3, [r7, #44] @ 0x2c
  41682. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41683. 8011e0e: 6af9 ldr r1, [r7, #44] @ 0x2c
  41684. 8011e10: 6b3a ldr r2, [r7, #48] @ 0x30
  41685. 8011e12: e841 2300 strex r3, r2, [r1]
  41686. 8011e16: 62bb str r3, [r7, #40] @ 0x28
  41687. return(result);
  41688. 8011e18: 6abb ldr r3, [r7, #40] @ 0x28
  41689. 8011e1a: 2b00 cmp r3, #0
  41690. 8011e1c: d1e3 bne.n 8011de6 <UART_RxISR_16BIT_FIFOEN+0x2ce>
  41691. /* Update the RxISR function pointer */
  41692. huart->RxISR = UART_RxISR_16BIT;
  41693. 8011e1e: 687b ldr r3, [r7, #4]
  41694. 8011e20: 4a16 ldr r2, [pc, #88] @ (8011e7c <UART_RxISR_16BIT_FIFOEN+0x364>)
  41695. 8011e22: 675a str r2, [r3, #116] @ 0x74
  41696. /* Enable the UART Data Register Not Empty interrupt */
  41697. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  41698. 8011e24: 687b ldr r3, [r7, #4]
  41699. 8011e26: 681b ldr r3, [r3, #0]
  41700. 8011e28: 613b str r3, [r7, #16]
  41701. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41702. 8011e2a: 693b ldr r3, [r7, #16]
  41703. 8011e2c: e853 3f00 ldrex r3, [r3]
  41704. 8011e30: 60fb str r3, [r7, #12]
  41705. return(result);
  41706. 8011e32: 68fb ldr r3, [r7, #12]
  41707. 8011e34: f043 0320 orr.w r3, r3, #32
  41708. 8011e38: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  41709. 8011e3c: 687b ldr r3, [r7, #4]
  41710. 8011e3e: 681b ldr r3, [r3, #0]
  41711. 8011e40: 461a mov r2, r3
  41712. 8011e42: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84
  41713. 8011e46: 61fb str r3, [r7, #28]
  41714. 8011e48: 61ba str r2, [r7, #24]
  41715. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41716. 8011e4a: 69b9 ldr r1, [r7, #24]
  41717. 8011e4c: 69fa ldr r2, [r7, #28]
  41718. 8011e4e: e841 2300 strex r3, r2, [r1]
  41719. 8011e52: 617b str r3, [r7, #20]
  41720. return(result);
  41721. 8011e54: 697b ldr r3, [r7, #20]
  41722. 8011e56: 2b00 cmp r3, #0
  41723. 8011e58: d1e4 bne.n 8011e24 <UART_RxISR_16BIT_FIFOEN+0x30c>
  41724. else
  41725. {
  41726. /* Clear RXNE interrupt flag */
  41727. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  41728. }
  41729. }
  41730. 8011e5a: e007 b.n 8011e6c <UART_RxISR_16BIT_FIFOEN+0x354>
  41731. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  41732. 8011e5c: 687b ldr r3, [r7, #4]
  41733. 8011e5e: 681b ldr r3, [r3, #0]
  41734. 8011e60: 699a ldr r2, [r3, #24]
  41735. 8011e62: 687b ldr r3, [r7, #4]
  41736. 8011e64: 681b ldr r3, [r3, #0]
  41737. 8011e66: f042 0208 orr.w r2, r2, #8
  41738. 8011e6a: 619a str r2, [r3, #24]
  41739. }
  41740. 8011e6c: bf00 nop
  41741. 8011e6e: 37b8 adds r7, #184 @ 0xb8
  41742. 8011e70: 46bd mov sp, r7
  41743. 8011e72: bd80 pop {r7, pc}
  41744. 8011e74: effffffe .word 0xeffffffe
  41745. 8011e78: 58000c00 .word 0x58000c00
  41746. 8011e7c: 08011601 .word 0x08011601
  41747. 08011e80 <HAL_UARTEx_WakeupCallback>:
  41748. * @brief UART wakeup from Stop mode callback.
  41749. * @param huart UART handle.
  41750. * @retval None
  41751. */
  41752. __weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
  41753. {
  41754. 8011e80: b480 push {r7}
  41755. 8011e82: b083 sub sp, #12
  41756. 8011e84: af00 add r7, sp, #0
  41757. 8011e86: 6078 str r0, [r7, #4]
  41758. UNUSED(huart);
  41759. /* NOTE : This function should not be modified, when the callback is needed,
  41760. the HAL_UARTEx_WakeupCallback can be implemented in the user file.
  41761. */
  41762. }
  41763. 8011e88: bf00 nop
  41764. 8011e8a: 370c adds r7, #12
  41765. 8011e8c: 46bd mov sp, r7
  41766. 8011e8e: f85d 7b04 ldr.w r7, [sp], #4
  41767. 8011e92: 4770 bx lr
  41768. 08011e94 <HAL_UARTEx_RxFifoFullCallback>:
  41769. * @brief UART RX Fifo full callback.
  41770. * @param huart UART handle.
  41771. * @retval None
  41772. */
  41773. __weak void HAL_UARTEx_RxFifoFullCallback(UART_HandleTypeDef *huart)
  41774. {
  41775. 8011e94: b480 push {r7}
  41776. 8011e96: b083 sub sp, #12
  41777. 8011e98: af00 add r7, sp, #0
  41778. 8011e9a: 6078 str r0, [r7, #4]
  41779. UNUSED(huart);
  41780. /* NOTE : This function should not be modified, when the callback is needed,
  41781. the HAL_UARTEx_RxFifoFullCallback can be implemented in the user file.
  41782. */
  41783. }
  41784. 8011e9c: bf00 nop
  41785. 8011e9e: 370c adds r7, #12
  41786. 8011ea0: 46bd mov sp, r7
  41787. 8011ea2: f85d 7b04 ldr.w r7, [sp], #4
  41788. 8011ea6: 4770 bx lr
  41789. 08011ea8 <HAL_UARTEx_TxFifoEmptyCallback>:
  41790. * @brief UART TX Fifo empty callback.
  41791. * @param huart UART handle.
  41792. * @retval None
  41793. */
  41794. __weak void HAL_UARTEx_TxFifoEmptyCallback(UART_HandleTypeDef *huart)
  41795. {
  41796. 8011ea8: b480 push {r7}
  41797. 8011eaa: b083 sub sp, #12
  41798. 8011eac: af00 add r7, sp, #0
  41799. 8011eae: 6078 str r0, [r7, #4]
  41800. UNUSED(huart);
  41801. /* NOTE : This function should not be modified, when the callback is needed,
  41802. the HAL_UARTEx_TxFifoEmptyCallback can be implemented in the user file.
  41803. */
  41804. }
  41805. 8011eb0: bf00 nop
  41806. 8011eb2: 370c adds r7, #12
  41807. 8011eb4: 46bd mov sp, r7
  41808. 8011eb6: f85d 7b04 ldr.w r7, [sp], #4
  41809. 8011eba: 4770 bx lr
  41810. 08011ebc <HAL_UARTEx_DisableFifoMode>:
  41811. * @brief Disable the FIFO mode.
  41812. * @param huart UART handle.
  41813. * @retval HAL status
  41814. */
  41815. HAL_StatusTypeDef HAL_UARTEx_DisableFifoMode(UART_HandleTypeDef *huart)
  41816. {
  41817. 8011ebc: b480 push {r7}
  41818. 8011ebe: b085 sub sp, #20
  41819. 8011ec0: af00 add r7, sp, #0
  41820. 8011ec2: 6078 str r0, [r7, #4]
  41821. /* Check parameters */
  41822. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  41823. /* Process Locked */
  41824. __HAL_LOCK(huart);
  41825. 8011ec4: 687b ldr r3, [r7, #4]
  41826. 8011ec6: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  41827. 8011eca: 2b01 cmp r3, #1
  41828. 8011ecc: d101 bne.n 8011ed2 <HAL_UARTEx_DisableFifoMode+0x16>
  41829. 8011ece: 2302 movs r3, #2
  41830. 8011ed0: e027 b.n 8011f22 <HAL_UARTEx_DisableFifoMode+0x66>
  41831. 8011ed2: 687b ldr r3, [r7, #4]
  41832. 8011ed4: 2201 movs r2, #1
  41833. 8011ed6: f883 2084 strb.w r2, [r3, #132] @ 0x84
  41834. huart->gState = HAL_UART_STATE_BUSY;
  41835. 8011eda: 687b ldr r3, [r7, #4]
  41836. 8011edc: 2224 movs r2, #36 @ 0x24
  41837. 8011ede: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  41838. /* Save actual UART configuration */
  41839. tmpcr1 = READ_REG(huart->Instance->CR1);
  41840. 8011ee2: 687b ldr r3, [r7, #4]
  41841. 8011ee4: 681b ldr r3, [r3, #0]
  41842. 8011ee6: 681b ldr r3, [r3, #0]
  41843. 8011ee8: 60fb str r3, [r7, #12]
  41844. /* Disable UART */
  41845. __HAL_UART_DISABLE(huart);
  41846. 8011eea: 687b ldr r3, [r7, #4]
  41847. 8011eec: 681b ldr r3, [r3, #0]
  41848. 8011eee: 681a ldr r2, [r3, #0]
  41849. 8011ef0: 687b ldr r3, [r7, #4]
  41850. 8011ef2: 681b ldr r3, [r3, #0]
  41851. 8011ef4: f022 0201 bic.w r2, r2, #1
  41852. 8011ef8: 601a str r2, [r3, #0]
  41853. /* Enable FIFO mode */
  41854. CLEAR_BIT(tmpcr1, USART_CR1_FIFOEN);
  41855. 8011efa: 68fb ldr r3, [r7, #12]
  41856. 8011efc: f023 5300 bic.w r3, r3, #536870912 @ 0x20000000
  41857. 8011f00: 60fb str r3, [r7, #12]
  41858. huart->FifoMode = UART_FIFOMODE_DISABLE;
  41859. 8011f02: 687b ldr r3, [r7, #4]
  41860. 8011f04: 2200 movs r2, #0
  41861. 8011f06: 665a str r2, [r3, #100] @ 0x64
  41862. /* Restore UART configuration */
  41863. WRITE_REG(huart->Instance->CR1, tmpcr1);
  41864. 8011f08: 687b ldr r3, [r7, #4]
  41865. 8011f0a: 681b ldr r3, [r3, #0]
  41866. 8011f0c: 68fa ldr r2, [r7, #12]
  41867. 8011f0e: 601a str r2, [r3, #0]
  41868. huart->gState = HAL_UART_STATE_READY;
  41869. 8011f10: 687b ldr r3, [r7, #4]
  41870. 8011f12: 2220 movs r2, #32
  41871. 8011f14: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  41872. /* Process Unlocked */
  41873. __HAL_UNLOCK(huart);
  41874. 8011f18: 687b ldr r3, [r7, #4]
  41875. 8011f1a: 2200 movs r2, #0
  41876. 8011f1c: f883 2084 strb.w r2, [r3, #132] @ 0x84
  41877. return HAL_OK;
  41878. 8011f20: 2300 movs r3, #0
  41879. }
  41880. 8011f22: 4618 mov r0, r3
  41881. 8011f24: 3714 adds r7, #20
  41882. 8011f26: 46bd mov sp, r7
  41883. 8011f28: f85d 7b04 ldr.w r7, [sp], #4
  41884. 8011f2c: 4770 bx lr
  41885. 08011f2e <HAL_UARTEx_SetTxFifoThreshold>:
  41886. * @arg @ref UART_TXFIFO_THRESHOLD_7_8
  41887. * @arg @ref UART_TXFIFO_THRESHOLD_8_8
  41888. * @retval HAL status
  41889. */
  41890. HAL_StatusTypeDef HAL_UARTEx_SetTxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold)
  41891. {
  41892. 8011f2e: b580 push {r7, lr}
  41893. 8011f30: b084 sub sp, #16
  41894. 8011f32: af00 add r7, sp, #0
  41895. 8011f34: 6078 str r0, [r7, #4]
  41896. 8011f36: 6039 str r1, [r7, #0]
  41897. /* Check parameters */
  41898. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  41899. assert_param(IS_UART_TXFIFO_THRESHOLD(Threshold));
  41900. /* Process Locked */
  41901. __HAL_LOCK(huart);
  41902. 8011f38: 687b ldr r3, [r7, #4]
  41903. 8011f3a: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  41904. 8011f3e: 2b01 cmp r3, #1
  41905. 8011f40: d101 bne.n 8011f46 <HAL_UARTEx_SetTxFifoThreshold+0x18>
  41906. 8011f42: 2302 movs r3, #2
  41907. 8011f44: e02d b.n 8011fa2 <HAL_UARTEx_SetTxFifoThreshold+0x74>
  41908. 8011f46: 687b ldr r3, [r7, #4]
  41909. 8011f48: 2201 movs r2, #1
  41910. 8011f4a: f883 2084 strb.w r2, [r3, #132] @ 0x84
  41911. huart->gState = HAL_UART_STATE_BUSY;
  41912. 8011f4e: 687b ldr r3, [r7, #4]
  41913. 8011f50: 2224 movs r2, #36 @ 0x24
  41914. 8011f52: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  41915. /* Save actual UART configuration */
  41916. tmpcr1 = READ_REG(huart->Instance->CR1);
  41917. 8011f56: 687b ldr r3, [r7, #4]
  41918. 8011f58: 681b ldr r3, [r3, #0]
  41919. 8011f5a: 681b ldr r3, [r3, #0]
  41920. 8011f5c: 60fb str r3, [r7, #12]
  41921. /* Disable UART */
  41922. __HAL_UART_DISABLE(huart);
  41923. 8011f5e: 687b ldr r3, [r7, #4]
  41924. 8011f60: 681b ldr r3, [r3, #0]
  41925. 8011f62: 681a ldr r2, [r3, #0]
  41926. 8011f64: 687b ldr r3, [r7, #4]
  41927. 8011f66: 681b ldr r3, [r3, #0]
  41928. 8011f68: f022 0201 bic.w r2, r2, #1
  41929. 8011f6c: 601a str r2, [r3, #0]
  41930. /* Update TX threshold configuration */
  41931. MODIFY_REG(huart->Instance->CR3, USART_CR3_TXFTCFG, Threshold);
  41932. 8011f6e: 687b ldr r3, [r7, #4]
  41933. 8011f70: 681b ldr r3, [r3, #0]
  41934. 8011f72: 689b ldr r3, [r3, #8]
  41935. 8011f74: f023 4160 bic.w r1, r3, #3758096384 @ 0xe0000000
  41936. 8011f78: 687b ldr r3, [r7, #4]
  41937. 8011f7a: 681b ldr r3, [r3, #0]
  41938. 8011f7c: 683a ldr r2, [r7, #0]
  41939. 8011f7e: 430a orrs r2, r1
  41940. 8011f80: 609a str r2, [r3, #8]
  41941. /* Determine the number of data to process during RX/TX ISR execution */
  41942. UARTEx_SetNbDataToProcess(huart);
  41943. 8011f82: 6878 ldr r0, [r7, #4]
  41944. 8011f84: f000 f8a0 bl 80120c8 <UARTEx_SetNbDataToProcess>
  41945. /* Restore UART configuration */
  41946. WRITE_REG(huart->Instance->CR1, tmpcr1);
  41947. 8011f88: 687b ldr r3, [r7, #4]
  41948. 8011f8a: 681b ldr r3, [r3, #0]
  41949. 8011f8c: 68fa ldr r2, [r7, #12]
  41950. 8011f8e: 601a str r2, [r3, #0]
  41951. huart->gState = HAL_UART_STATE_READY;
  41952. 8011f90: 687b ldr r3, [r7, #4]
  41953. 8011f92: 2220 movs r2, #32
  41954. 8011f94: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  41955. /* Process Unlocked */
  41956. __HAL_UNLOCK(huart);
  41957. 8011f98: 687b ldr r3, [r7, #4]
  41958. 8011f9a: 2200 movs r2, #0
  41959. 8011f9c: f883 2084 strb.w r2, [r3, #132] @ 0x84
  41960. return HAL_OK;
  41961. 8011fa0: 2300 movs r3, #0
  41962. }
  41963. 8011fa2: 4618 mov r0, r3
  41964. 8011fa4: 3710 adds r7, #16
  41965. 8011fa6: 46bd mov sp, r7
  41966. 8011fa8: bd80 pop {r7, pc}
  41967. 08011faa <HAL_UARTEx_SetRxFifoThreshold>:
  41968. * @arg @ref UART_RXFIFO_THRESHOLD_7_8
  41969. * @arg @ref UART_RXFIFO_THRESHOLD_8_8
  41970. * @retval HAL status
  41971. */
  41972. HAL_StatusTypeDef HAL_UARTEx_SetRxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold)
  41973. {
  41974. 8011faa: b580 push {r7, lr}
  41975. 8011fac: b084 sub sp, #16
  41976. 8011fae: af00 add r7, sp, #0
  41977. 8011fb0: 6078 str r0, [r7, #4]
  41978. 8011fb2: 6039 str r1, [r7, #0]
  41979. /* Check the parameters */
  41980. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  41981. assert_param(IS_UART_RXFIFO_THRESHOLD(Threshold));
  41982. /* Process Locked */
  41983. __HAL_LOCK(huart);
  41984. 8011fb4: 687b ldr r3, [r7, #4]
  41985. 8011fb6: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  41986. 8011fba: 2b01 cmp r3, #1
  41987. 8011fbc: d101 bne.n 8011fc2 <HAL_UARTEx_SetRxFifoThreshold+0x18>
  41988. 8011fbe: 2302 movs r3, #2
  41989. 8011fc0: e02d b.n 801201e <HAL_UARTEx_SetRxFifoThreshold+0x74>
  41990. 8011fc2: 687b ldr r3, [r7, #4]
  41991. 8011fc4: 2201 movs r2, #1
  41992. 8011fc6: f883 2084 strb.w r2, [r3, #132] @ 0x84
  41993. huart->gState = HAL_UART_STATE_BUSY;
  41994. 8011fca: 687b ldr r3, [r7, #4]
  41995. 8011fcc: 2224 movs r2, #36 @ 0x24
  41996. 8011fce: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  41997. /* Save actual UART configuration */
  41998. tmpcr1 = READ_REG(huart->Instance->CR1);
  41999. 8011fd2: 687b ldr r3, [r7, #4]
  42000. 8011fd4: 681b ldr r3, [r3, #0]
  42001. 8011fd6: 681b ldr r3, [r3, #0]
  42002. 8011fd8: 60fb str r3, [r7, #12]
  42003. /* Disable UART */
  42004. __HAL_UART_DISABLE(huart);
  42005. 8011fda: 687b ldr r3, [r7, #4]
  42006. 8011fdc: 681b ldr r3, [r3, #0]
  42007. 8011fde: 681a ldr r2, [r3, #0]
  42008. 8011fe0: 687b ldr r3, [r7, #4]
  42009. 8011fe2: 681b ldr r3, [r3, #0]
  42010. 8011fe4: f022 0201 bic.w r2, r2, #1
  42011. 8011fe8: 601a str r2, [r3, #0]
  42012. /* Update RX threshold configuration */
  42013. MODIFY_REG(huart->Instance->CR3, USART_CR3_RXFTCFG, Threshold);
  42014. 8011fea: 687b ldr r3, [r7, #4]
  42015. 8011fec: 681b ldr r3, [r3, #0]
  42016. 8011fee: 689b ldr r3, [r3, #8]
  42017. 8011ff0: f023 6160 bic.w r1, r3, #234881024 @ 0xe000000
  42018. 8011ff4: 687b ldr r3, [r7, #4]
  42019. 8011ff6: 681b ldr r3, [r3, #0]
  42020. 8011ff8: 683a ldr r2, [r7, #0]
  42021. 8011ffa: 430a orrs r2, r1
  42022. 8011ffc: 609a str r2, [r3, #8]
  42023. /* Determine the number of data to process during RX/TX ISR execution */
  42024. UARTEx_SetNbDataToProcess(huart);
  42025. 8011ffe: 6878 ldr r0, [r7, #4]
  42026. 8012000: f000 f862 bl 80120c8 <UARTEx_SetNbDataToProcess>
  42027. /* Restore UART configuration */
  42028. WRITE_REG(huart->Instance->CR1, tmpcr1);
  42029. 8012004: 687b ldr r3, [r7, #4]
  42030. 8012006: 681b ldr r3, [r3, #0]
  42031. 8012008: 68fa ldr r2, [r7, #12]
  42032. 801200a: 601a str r2, [r3, #0]
  42033. huart->gState = HAL_UART_STATE_READY;
  42034. 801200c: 687b ldr r3, [r7, #4]
  42035. 801200e: 2220 movs r2, #32
  42036. 8012010: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  42037. /* Process Unlocked */
  42038. __HAL_UNLOCK(huart);
  42039. 8012014: 687b ldr r3, [r7, #4]
  42040. 8012016: 2200 movs r2, #0
  42041. 8012018: f883 2084 strb.w r2, [r3, #132] @ 0x84
  42042. return HAL_OK;
  42043. 801201c: 2300 movs r3, #0
  42044. }
  42045. 801201e: 4618 mov r0, r3
  42046. 8012020: 3710 adds r7, #16
  42047. 8012022: 46bd mov sp, r7
  42048. 8012024: bd80 pop {r7, pc}
  42049. 08012026 <HAL_UARTEx_ReceiveToIdle_IT>:
  42050. * @param pData Pointer to data buffer (uint8_t or uint16_t data elements).
  42051. * @param Size Amount of data elements (uint8_t or uint16_t) to be received.
  42052. * @retval HAL status
  42053. */
  42054. HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
  42055. {
  42056. 8012026: b580 push {r7, lr}
  42057. 8012028: b08c sub sp, #48 @ 0x30
  42058. 801202a: af00 add r7, sp, #0
  42059. 801202c: 60f8 str r0, [r7, #12]
  42060. 801202e: 60b9 str r1, [r7, #8]
  42061. 8012030: 4613 mov r3, r2
  42062. 8012032: 80fb strh r3, [r7, #6]
  42063. HAL_StatusTypeDef status = HAL_OK;
  42064. 8012034: 2300 movs r3, #0
  42065. 8012036: f887 302f strb.w r3, [r7, #47] @ 0x2f
  42066. /* Check that a Rx process is not already ongoing */
  42067. if (huart->RxState == HAL_UART_STATE_READY)
  42068. 801203a: 68fb ldr r3, [r7, #12]
  42069. 801203c: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  42070. 8012040: 2b20 cmp r3, #32
  42071. 8012042: d13b bne.n 80120bc <HAL_UARTEx_ReceiveToIdle_IT+0x96>
  42072. {
  42073. if ((pData == NULL) || (Size == 0U))
  42074. 8012044: 68bb ldr r3, [r7, #8]
  42075. 8012046: 2b00 cmp r3, #0
  42076. 8012048: d002 beq.n 8012050 <HAL_UARTEx_ReceiveToIdle_IT+0x2a>
  42077. 801204a: 88fb ldrh r3, [r7, #6]
  42078. 801204c: 2b00 cmp r3, #0
  42079. 801204e: d101 bne.n 8012054 <HAL_UARTEx_ReceiveToIdle_IT+0x2e>
  42080. {
  42081. return HAL_ERROR;
  42082. 8012050: 2301 movs r3, #1
  42083. 8012052: e034 b.n 80120be <HAL_UARTEx_ReceiveToIdle_IT+0x98>
  42084. }
  42085. /* Set Reception type to reception till IDLE Event*/
  42086. huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE;
  42087. 8012054: 68fb ldr r3, [r7, #12]
  42088. 8012056: 2201 movs r2, #1
  42089. 8012058: 66da str r2, [r3, #108] @ 0x6c
  42090. huart->RxEventType = HAL_UART_RXEVENT_TC;
  42091. 801205a: 68fb ldr r3, [r7, #12]
  42092. 801205c: 2200 movs r2, #0
  42093. 801205e: 671a str r2, [r3, #112] @ 0x70
  42094. (void)UART_Start_Receive_IT(huart, pData, Size);
  42095. 8012060: 88fb ldrh r3, [r7, #6]
  42096. 8012062: 461a mov r2, r3
  42097. 8012064: 68b9 ldr r1, [r7, #8]
  42098. 8012066: 68f8 ldr r0, [r7, #12]
  42099. 8012068: f7fe fe82 bl 8010d70 <UART_Start_Receive_IT>
  42100. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  42101. 801206c: 68fb ldr r3, [r7, #12]
  42102. 801206e: 6edb ldr r3, [r3, #108] @ 0x6c
  42103. 8012070: 2b01 cmp r3, #1
  42104. 8012072: d11d bne.n 80120b0 <HAL_UARTEx_ReceiveToIdle_IT+0x8a>
  42105. {
  42106. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  42107. 8012074: 68fb ldr r3, [r7, #12]
  42108. 8012076: 681b ldr r3, [r3, #0]
  42109. 8012078: 2210 movs r2, #16
  42110. 801207a: 621a str r2, [r3, #32]
  42111. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  42112. 801207c: 68fb ldr r3, [r7, #12]
  42113. 801207e: 681b ldr r3, [r3, #0]
  42114. 8012080: 61bb str r3, [r7, #24]
  42115. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42116. 8012082: 69bb ldr r3, [r7, #24]
  42117. 8012084: e853 3f00 ldrex r3, [r3]
  42118. 8012088: 617b str r3, [r7, #20]
  42119. return(result);
  42120. 801208a: 697b ldr r3, [r7, #20]
  42121. 801208c: f043 0310 orr.w r3, r3, #16
  42122. 8012090: 62bb str r3, [r7, #40] @ 0x28
  42123. 8012092: 68fb ldr r3, [r7, #12]
  42124. 8012094: 681b ldr r3, [r3, #0]
  42125. 8012096: 461a mov r2, r3
  42126. 8012098: 6abb ldr r3, [r7, #40] @ 0x28
  42127. 801209a: 627b str r3, [r7, #36] @ 0x24
  42128. 801209c: 623a str r2, [r7, #32]
  42129. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42130. 801209e: 6a39 ldr r1, [r7, #32]
  42131. 80120a0: 6a7a ldr r2, [r7, #36] @ 0x24
  42132. 80120a2: e841 2300 strex r3, r2, [r1]
  42133. 80120a6: 61fb str r3, [r7, #28]
  42134. return(result);
  42135. 80120a8: 69fb ldr r3, [r7, #28]
  42136. 80120aa: 2b00 cmp r3, #0
  42137. 80120ac: d1e6 bne.n 801207c <HAL_UARTEx_ReceiveToIdle_IT+0x56>
  42138. 80120ae: e002 b.n 80120b6 <HAL_UARTEx_ReceiveToIdle_IT+0x90>
  42139. {
  42140. /* In case of errors already pending when reception is started,
  42141. Interrupts may have already been raised and lead to reception abortion.
  42142. (Overrun error for instance).
  42143. In such case Reception Type has been reset to HAL_UART_RECEPTION_STANDARD. */
  42144. status = HAL_ERROR;
  42145. 80120b0: 2301 movs r3, #1
  42146. 80120b2: f887 302f strb.w r3, [r7, #47] @ 0x2f
  42147. }
  42148. return status;
  42149. 80120b6: f897 302f ldrb.w r3, [r7, #47] @ 0x2f
  42150. 80120ba: e000 b.n 80120be <HAL_UARTEx_ReceiveToIdle_IT+0x98>
  42151. }
  42152. else
  42153. {
  42154. return HAL_BUSY;
  42155. 80120bc: 2302 movs r3, #2
  42156. }
  42157. }
  42158. 80120be: 4618 mov r0, r3
  42159. 80120c0: 3730 adds r7, #48 @ 0x30
  42160. 80120c2: 46bd mov sp, r7
  42161. 80120c4: bd80 pop {r7, pc}
  42162. ...
  42163. 080120c8 <UARTEx_SetNbDataToProcess>:
  42164. * the UART configuration registers.
  42165. * @param huart UART handle.
  42166. * @retval None
  42167. */
  42168. static void UARTEx_SetNbDataToProcess(UART_HandleTypeDef *huart)
  42169. {
  42170. 80120c8: b480 push {r7}
  42171. 80120ca: b085 sub sp, #20
  42172. 80120cc: af00 add r7, sp, #0
  42173. 80120ce: 6078 str r0, [r7, #4]
  42174. uint8_t rx_fifo_threshold;
  42175. uint8_t tx_fifo_threshold;
  42176. static const uint8_t numerator[] = {1U, 1U, 1U, 3U, 7U, 1U, 0U, 0U};
  42177. static const uint8_t denominator[] = {8U, 4U, 2U, 4U, 8U, 1U, 1U, 1U};
  42178. if (huart->FifoMode == UART_FIFOMODE_DISABLE)
  42179. 80120d0: 687b ldr r3, [r7, #4]
  42180. 80120d2: 6e5b ldr r3, [r3, #100] @ 0x64
  42181. 80120d4: 2b00 cmp r3, #0
  42182. 80120d6: d108 bne.n 80120ea <UARTEx_SetNbDataToProcess+0x22>
  42183. {
  42184. huart->NbTxDataToProcess = 1U;
  42185. 80120d8: 687b ldr r3, [r7, #4]
  42186. 80120da: 2201 movs r2, #1
  42187. 80120dc: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  42188. huart->NbRxDataToProcess = 1U;
  42189. 80120e0: 687b ldr r3, [r7, #4]
  42190. 80120e2: 2201 movs r2, #1
  42191. 80120e4: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  42192. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  42193. (uint16_t)denominator[tx_fifo_threshold];
  42194. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  42195. (uint16_t)denominator[rx_fifo_threshold];
  42196. }
  42197. }
  42198. 80120e8: e031 b.n 801214e <UARTEx_SetNbDataToProcess+0x86>
  42199. rx_fifo_depth = RX_FIFO_DEPTH;
  42200. 80120ea: 2310 movs r3, #16
  42201. 80120ec: 73fb strb r3, [r7, #15]
  42202. tx_fifo_depth = TX_FIFO_DEPTH;
  42203. 80120ee: 2310 movs r3, #16
  42204. 80120f0: 73bb strb r3, [r7, #14]
  42205. rx_fifo_threshold = (uint8_t)(READ_BIT(huart->Instance->CR3, USART_CR3_RXFTCFG) >> USART_CR3_RXFTCFG_Pos);
  42206. 80120f2: 687b ldr r3, [r7, #4]
  42207. 80120f4: 681b ldr r3, [r3, #0]
  42208. 80120f6: 689b ldr r3, [r3, #8]
  42209. 80120f8: 0e5b lsrs r3, r3, #25
  42210. 80120fa: b2db uxtb r3, r3
  42211. 80120fc: f003 0307 and.w r3, r3, #7
  42212. 8012100: 737b strb r3, [r7, #13]
  42213. tx_fifo_threshold = (uint8_t)(READ_BIT(huart->Instance->CR3, USART_CR3_TXFTCFG) >> USART_CR3_TXFTCFG_Pos);
  42214. 8012102: 687b ldr r3, [r7, #4]
  42215. 8012104: 681b ldr r3, [r3, #0]
  42216. 8012106: 689b ldr r3, [r3, #8]
  42217. 8012108: 0f5b lsrs r3, r3, #29
  42218. 801210a: b2db uxtb r3, r3
  42219. 801210c: f003 0307 and.w r3, r3, #7
  42220. 8012110: 733b strb r3, [r7, #12]
  42221. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  42222. 8012112: 7bbb ldrb r3, [r7, #14]
  42223. 8012114: 7b3a ldrb r2, [r7, #12]
  42224. 8012116: 4911 ldr r1, [pc, #68] @ (801215c <UARTEx_SetNbDataToProcess+0x94>)
  42225. 8012118: 5c8a ldrb r2, [r1, r2]
  42226. 801211a: fb02 f303 mul.w r3, r2, r3
  42227. (uint16_t)denominator[tx_fifo_threshold];
  42228. 801211e: 7b3a ldrb r2, [r7, #12]
  42229. 8012120: 490f ldr r1, [pc, #60] @ (8012160 <UARTEx_SetNbDataToProcess+0x98>)
  42230. 8012122: 5c8a ldrb r2, [r1, r2]
  42231. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  42232. 8012124: fb93 f3f2 sdiv r3, r3, r2
  42233. 8012128: b29a uxth r2, r3
  42234. 801212a: 687b ldr r3, [r7, #4]
  42235. 801212c: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  42236. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  42237. 8012130: 7bfb ldrb r3, [r7, #15]
  42238. 8012132: 7b7a ldrb r2, [r7, #13]
  42239. 8012134: 4909 ldr r1, [pc, #36] @ (801215c <UARTEx_SetNbDataToProcess+0x94>)
  42240. 8012136: 5c8a ldrb r2, [r1, r2]
  42241. 8012138: fb02 f303 mul.w r3, r2, r3
  42242. (uint16_t)denominator[rx_fifo_threshold];
  42243. 801213c: 7b7a ldrb r2, [r7, #13]
  42244. 801213e: 4908 ldr r1, [pc, #32] @ (8012160 <UARTEx_SetNbDataToProcess+0x98>)
  42245. 8012140: 5c8a ldrb r2, [r1, r2]
  42246. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  42247. 8012142: fb93 f3f2 sdiv r3, r3, r2
  42248. 8012146: b29a uxth r2, r3
  42249. 8012148: 687b ldr r3, [r7, #4]
  42250. 801214a: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  42251. }
  42252. 801214e: bf00 nop
  42253. 8012150: 3714 adds r7, #20
  42254. 8012152: 46bd mov sp, r7
  42255. 8012154: f85d 7b04 ldr.w r7, [sp], #4
  42256. 8012158: 4770 bx lr
  42257. 801215a: bf00 nop
  42258. 801215c: 080175f8 .word 0x080175f8
  42259. 8012160: 08017600 .word 0x08017600
  42260. 08012164 <__NVIC_SetPriority>:
  42261. {
  42262. 8012164: b480 push {r7}
  42263. 8012166: b083 sub sp, #12
  42264. 8012168: af00 add r7, sp, #0
  42265. 801216a: 4603 mov r3, r0
  42266. 801216c: 6039 str r1, [r7, #0]
  42267. 801216e: 80fb strh r3, [r7, #6]
  42268. if ((int32_t)(IRQn) >= 0)
  42269. 8012170: f9b7 3006 ldrsh.w r3, [r7, #6]
  42270. 8012174: 2b00 cmp r3, #0
  42271. 8012176: db0a blt.n 801218e <__NVIC_SetPriority+0x2a>
  42272. NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  42273. 8012178: 683b ldr r3, [r7, #0]
  42274. 801217a: b2da uxtb r2, r3
  42275. 801217c: 490c ldr r1, [pc, #48] @ (80121b0 <__NVIC_SetPriority+0x4c>)
  42276. 801217e: f9b7 3006 ldrsh.w r3, [r7, #6]
  42277. 8012182: 0112 lsls r2, r2, #4
  42278. 8012184: b2d2 uxtb r2, r2
  42279. 8012186: 440b add r3, r1
  42280. 8012188: f883 2300 strb.w r2, [r3, #768] @ 0x300
  42281. }
  42282. 801218c: e00a b.n 80121a4 <__NVIC_SetPriority+0x40>
  42283. SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  42284. 801218e: 683b ldr r3, [r7, #0]
  42285. 8012190: b2da uxtb r2, r3
  42286. 8012192: 4908 ldr r1, [pc, #32] @ (80121b4 <__NVIC_SetPriority+0x50>)
  42287. 8012194: 88fb ldrh r3, [r7, #6]
  42288. 8012196: f003 030f and.w r3, r3, #15
  42289. 801219a: 3b04 subs r3, #4
  42290. 801219c: 0112 lsls r2, r2, #4
  42291. 801219e: b2d2 uxtb r2, r2
  42292. 80121a0: 440b add r3, r1
  42293. 80121a2: 761a strb r2, [r3, #24]
  42294. }
  42295. 80121a4: bf00 nop
  42296. 80121a6: 370c adds r7, #12
  42297. 80121a8: 46bd mov sp, r7
  42298. 80121aa: f85d 7b04 ldr.w r7, [sp], #4
  42299. 80121ae: 4770 bx lr
  42300. 80121b0: e000e100 .word 0xe000e100
  42301. 80121b4: e000ed00 .word 0xe000ed00
  42302. 080121b8 <SysTick_Handler>:
  42303. /*
  42304. SysTick handler implementation that also clears overflow flag.
  42305. */
  42306. #if (USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION == 0)
  42307. void SysTick_Handler (void) {
  42308. 80121b8: b580 push {r7, lr}
  42309. 80121ba: af00 add r7, sp, #0
  42310. /* Clear overflow flag */
  42311. SysTick->CTRL;
  42312. 80121bc: 4b05 ldr r3, [pc, #20] @ (80121d4 <SysTick_Handler+0x1c>)
  42313. 80121be: 681b ldr r3, [r3, #0]
  42314. if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
  42315. 80121c0: f002 fd1e bl 8014c00 <xTaskGetSchedulerState>
  42316. 80121c4: 4603 mov r3, r0
  42317. 80121c6: 2b01 cmp r3, #1
  42318. 80121c8: d001 beq.n 80121ce <SysTick_Handler+0x16>
  42319. /* Call tick handler */
  42320. xPortSysTickHandler();
  42321. 80121ca: f003 ff2d bl 8016028 <xPortSysTickHandler>
  42322. }
  42323. }
  42324. 80121ce: bf00 nop
  42325. 80121d0: bd80 pop {r7, pc}
  42326. 80121d2: bf00 nop
  42327. 80121d4: e000e010 .word 0xe000e010
  42328. 080121d8 <SVC_Setup>:
  42329. #endif /* SysTick */
  42330. /*
  42331. Setup SVC to reset value.
  42332. */
  42333. __STATIC_INLINE void SVC_Setup (void) {
  42334. 80121d8: b580 push {r7, lr}
  42335. 80121da: af00 add r7, sp, #0
  42336. #if (__ARM_ARCH_7A__ == 0U)
  42337. /* Service Call interrupt might be configured before kernel start */
  42338. /* and when its priority is lower or equal to BASEPRI, svc intruction */
  42339. /* causes a Hard Fault. */
  42340. NVIC_SetPriority (SVCall_IRQ_NBR, 0U);
  42341. 80121dc: 2100 movs r1, #0
  42342. 80121de: f06f 0004 mvn.w r0, #4
  42343. 80121e2: f7ff ffbf bl 8012164 <__NVIC_SetPriority>
  42344. #endif
  42345. }
  42346. 80121e6: bf00 nop
  42347. 80121e8: bd80 pop {r7, pc}
  42348. ...
  42349. 080121ec <osKernelInitialize>:
  42350. static uint32_t OS_Tick_GetOverflow (void);
  42351. /* Get OS Tick interval */
  42352. static uint32_t OS_Tick_GetInterval (void);
  42353. /*---------------------------------------------------------------------------*/
  42354. osStatus_t osKernelInitialize (void) {
  42355. 80121ec: b480 push {r7}
  42356. 80121ee: b083 sub sp, #12
  42357. 80121f0: af00 add r7, sp, #0
  42358. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  42359. 80121f2: f3ef 8305 mrs r3, IPSR
  42360. 80121f6: 603b str r3, [r7, #0]
  42361. return(result);
  42362. 80121f8: 683b ldr r3, [r7, #0]
  42363. osStatus_t stat;
  42364. if (IS_IRQ()) {
  42365. 80121fa: 2b00 cmp r3, #0
  42366. 80121fc: d003 beq.n 8012206 <osKernelInitialize+0x1a>
  42367. stat = osErrorISR;
  42368. 80121fe: f06f 0305 mvn.w r3, #5
  42369. 8012202: 607b str r3, [r7, #4]
  42370. 8012204: e00c b.n 8012220 <osKernelInitialize+0x34>
  42371. }
  42372. else {
  42373. if (KernelState == osKernelInactive) {
  42374. 8012206: 4b0a ldr r3, [pc, #40] @ (8012230 <osKernelInitialize+0x44>)
  42375. 8012208: 681b ldr r3, [r3, #0]
  42376. 801220a: 2b00 cmp r3, #0
  42377. 801220c: d105 bne.n 801221a <osKernelInitialize+0x2e>
  42378. EvrFreeRTOSSetup(0U);
  42379. #endif
  42380. #if defined(USE_FreeRTOS_HEAP_5) && (HEAP_5_REGION_SETUP == 1)
  42381. vPortDefineHeapRegions (configHEAP_5_REGIONS);
  42382. #endif
  42383. KernelState = osKernelReady;
  42384. 801220e: 4b08 ldr r3, [pc, #32] @ (8012230 <osKernelInitialize+0x44>)
  42385. 8012210: 2201 movs r2, #1
  42386. 8012212: 601a str r2, [r3, #0]
  42387. stat = osOK;
  42388. 8012214: 2300 movs r3, #0
  42389. 8012216: 607b str r3, [r7, #4]
  42390. 8012218: e002 b.n 8012220 <osKernelInitialize+0x34>
  42391. } else {
  42392. stat = osError;
  42393. 801221a: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  42394. 801221e: 607b str r3, [r7, #4]
  42395. }
  42396. }
  42397. return (stat);
  42398. 8012220: 687b ldr r3, [r7, #4]
  42399. }
  42400. 8012222: 4618 mov r0, r3
  42401. 8012224: 370c adds r7, #12
  42402. 8012226: 46bd mov sp, r7
  42403. 8012228: f85d 7b04 ldr.w r7, [sp], #4
  42404. 801222c: 4770 bx lr
  42405. 801222e: bf00 nop
  42406. 8012230: 24000c10 .word 0x24000c10
  42407. 08012234 <osKernelStart>:
  42408. }
  42409. return (state);
  42410. }
  42411. osStatus_t osKernelStart (void) {
  42412. 8012234: b580 push {r7, lr}
  42413. 8012236: b082 sub sp, #8
  42414. 8012238: af00 add r7, sp, #0
  42415. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  42416. 801223a: f3ef 8305 mrs r3, IPSR
  42417. 801223e: 603b str r3, [r7, #0]
  42418. return(result);
  42419. 8012240: 683b ldr r3, [r7, #0]
  42420. osStatus_t stat;
  42421. if (IS_IRQ()) {
  42422. 8012242: 2b00 cmp r3, #0
  42423. 8012244: d003 beq.n 801224e <osKernelStart+0x1a>
  42424. stat = osErrorISR;
  42425. 8012246: f06f 0305 mvn.w r3, #5
  42426. 801224a: 607b str r3, [r7, #4]
  42427. 801224c: e010 b.n 8012270 <osKernelStart+0x3c>
  42428. }
  42429. else {
  42430. if (KernelState == osKernelReady) {
  42431. 801224e: 4b0b ldr r3, [pc, #44] @ (801227c <osKernelStart+0x48>)
  42432. 8012250: 681b ldr r3, [r3, #0]
  42433. 8012252: 2b01 cmp r3, #1
  42434. 8012254: d109 bne.n 801226a <osKernelStart+0x36>
  42435. /* Ensure SVC priority is at the reset value */
  42436. SVC_Setup();
  42437. 8012256: f7ff ffbf bl 80121d8 <SVC_Setup>
  42438. /* Change state to enable IRQ masking check */
  42439. KernelState = osKernelRunning;
  42440. 801225a: 4b08 ldr r3, [pc, #32] @ (801227c <osKernelStart+0x48>)
  42441. 801225c: 2202 movs r2, #2
  42442. 801225e: 601a str r2, [r3, #0]
  42443. /* Start the kernel scheduler */
  42444. vTaskStartScheduler();
  42445. 8012260: f002 f824 bl 80142ac <vTaskStartScheduler>
  42446. stat = osOK;
  42447. 8012264: 2300 movs r3, #0
  42448. 8012266: 607b str r3, [r7, #4]
  42449. 8012268: e002 b.n 8012270 <osKernelStart+0x3c>
  42450. } else {
  42451. stat = osError;
  42452. 801226a: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  42453. 801226e: 607b str r3, [r7, #4]
  42454. }
  42455. }
  42456. return (stat);
  42457. 8012270: 687b ldr r3, [r7, #4]
  42458. }
  42459. 8012272: 4618 mov r0, r3
  42460. 8012274: 3708 adds r7, #8
  42461. 8012276: 46bd mov sp, r7
  42462. 8012278: bd80 pop {r7, pc}
  42463. 801227a: bf00 nop
  42464. 801227c: 24000c10 .word 0x24000c10
  42465. 08012280 <osThreadNew>:
  42466. return (configCPU_CLOCK_HZ);
  42467. }
  42468. /*---------------------------------------------------------------------------*/
  42469. osThreadId_t osThreadNew (osThreadFunc_t func, void *argument, const osThreadAttr_t *attr) {
  42470. 8012280: b580 push {r7, lr}
  42471. 8012282: b08e sub sp, #56 @ 0x38
  42472. 8012284: af04 add r7, sp, #16
  42473. 8012286: 60f8 str r0, [r7, #12]
  42474. 8012288: 60b9 str r1, [r7, #8]
  42475. 801228a: 607a str r2, [r7, #4]
  42476. uint32_t stack;
  42477. TaskHandle_t hTask;
  42478. UBaseType_t prio;
  42479. int32_t mem;
  42480. hTask = NULL;
  42481. 801228c: 2300 movs r3, #0
  42482. 801228e: 613b str r3, [r7, #16]
  42483. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  42484. 8012290: f3ef 8305 mrs r3, IPSR
  42485. 8012294: 617b str r3, [r7, #20]
  42486. return(result);
  42487. 8012296: 697b ldr r3, [r7, #20]
  42488. if (!IS_IRQ() && (func != NULL)) {
  42489. 8012298: 2b00 cmp r3, #0
  42490. 801229a: d17f bne.n 801239c <osThreadNew+0x11c>
  42491. 801229c: 68fb ldr r3, [r7, #12]
  42492. 801229e: 2b00 cmp r3, #0
  42493. 80122a0: d07c beq.n 801239c <osThreadNew+0x11c>
  42494. stack = configMINIMAL_STACK_SIZE;
  42495. 80122a2: f44f 7300 mov.w r3, #512 @ 0x200
  42496. 80122a6: 623b str r3, [r7, #32]
  42497. prio = (UBaseType_t)osPriorityNormal;
  42498. 80122a8: 2318 movs r3, #24
  42499. 80122aa: 61fb str r3, [r7, #28]
  42500. name = NULL;
  42501. 80122ac: 2300 movs r3, #0
  42502. 80122ae: 627b str r3, [r7, #36] @ 0x24
  42503. mem = -1;
  42504. 80122b0: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  42505. 80122b4: 61bb str r3, [r7, #24]
  42506. if (attr != NULL) {
  42507. 80122b6: 687b ldr r3, [r7, #4]
  42508. 80122b8: 2b00 cmp r3, #0
  42509. 80122ba: d045 beq.n 8012348 <osThreadNew+0xc8>
  42510. if (attr->name != NULL) {
  42511. 80122bc: 687b ldr r3, [r7, #4]
  42512. 80122be: 681b ldr r3, [r3, #0]
  42513. 80122c0: 2b00 cmp r3, #0
  42514. 80122c2: d002 beq.n 80122ca <osThreadNew+0x4a>
  42515. name = attr->name;
  42516. 80122c4: 687b ldr r3, [r7, #4]
  42517. 80122c6: 681b ldr r3, [r3, #0]
  42518. 80122c8: 627b str r3, [r7, #36] @ 0x24
  42519. }
  42520. if (attr->priority != osPriorityNone) {
  42521. 80122ca: 687b ldr r3, [r7, #4]
  42522. 80122cc: 699b ldr r3, [r3, #24]
  42523. 80122ce: 2b00 cmp r3, #0
  42524. 80122d0: d002 beq.n 80122d8 <osThreadNew+0x58>
  42525. prio = (UBaseType_t)attr->priority;
  42526. 80122d2: 687b ldr r3, [r7, #4]
  42527. 80122d4: 699b ldr r3, [r3, #24]
  42528. 80122d6: 61fb str r3, [r7, #28]
  42529. }
  42530. if ((prio < osPriorityIdle) || (prio > osPriorityISR) || ((attr->attr_bits & osThreadJoinable) == osThreadJoinable)) {
  42531. 80122d8: 69fb ldr r3, [r7, #28]
  42532. 80122da: 2b00 cmp r3, #0
  42533. 80122dc: d008 beq.n 80122f0 <osThreadNew+0x70>
  42534. 80122de: 69fb ldr r3, [r7, #28]
  42535. 80122e0: 2b38 cmp r3, #56 @ 0x38
  42536. 80122e2: d805 bhi.n 80122f0 <osThreadNew+0x70>
  42537. 80122e4: 687b ldr r3, [r7, #4]
  42538. 80122e6: 685b ldr r3, [r3, #4]
  42539. 80122e8: f003 0301 and.w r3, r3, #1
  42540. 80122ec: 2b00 cmp r3, #0
  42541. 80122ee: d001 beq.n 80122f4 <osThreadNew+0x74>
  42542. return (NULL);
  42543. 80122f0: 2300 movs r3, #0
  42544. 80122f2: e054 b.n 801239e <osThreadNew+0x11e>
  42545. }
  42546. if (attr->stack_size > 0U) {
  42547. 80122f4: 687b ldr r3, [r7, #4]
  42548. 80122f6: 695b ldr r3, [r3, #20]
  42549. 80122f8: 2b00 cmp r3, #0
  42550. 80122fa: d003 beq.n 8012304 <osThreadNew+0x84>
  42551. /* In FreeRTOS stack is not in bytes, but in sizeof(StackType_t) which is 4 on ARM ports. */
  42552. /* Stack size should be therefore 4 byte aligned in order to avoid division caused side effects */
  42553. stack = attr->stack_size / sizeof(StackType_t);
  42554. 80122fc: 687b ldr r3, [r7, #4]
  42555. 80122fe: 695b ldr r3, [r3, #20]
  42556. 8012300: 089b lsrs r3, r3, #2
  42557. 8012302: 623b str r3, [r7, #32]
  42558. }
  42559. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTask_t)) &&
  42560. 8012304: 687b ldr r3, [r7, #4]
  42561. 8012306: 689b ldr r3, [r3, #8]
  42562. 8012308: 2b00 cmp r3, #0
  42563. 801230a: d00e beq.n 801232a <osThreadNew+0xaa>
  42564. 801230c: 687b ldr r3, [r7, #4]
  42565. 801230e: 68db ldr r3, [r3, #12]
  42566. 8012310: 2ba7 cmp r3, #167 @ 0xa7
  42567. 8012312: d90a bls.n 801232a <osThreadNew+0xaa>
  42568. (attr->stack_mem != NULL) && (attr->stack_size > 0U)) {
  42569. 8012314: 687b ldr r3, [r7, #4]
  42570. 8012316: 691b ldr r3, [r3, #16]
  42571. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTask_t)) &&
  42572. 8012318: 2b00 cmp r3, #0
  42573. 801231a: d006 beq.n 801232a <osThreadNew+0xaa>
  42574. (attr->stack_mem != NULL) && (attr->stack_size > 0U)) {
  42575. 801231c: 687b ldr r3, [r7, #4]
  42576. 801231e: 695b ldr r3, [r3, #20]
  42577. 8012320: 2b00 cmp r3, #0
  42578. 8012322: d002 beq.n 801232a <osThreadNew+0xaa>
  42579. mem = 1;
  42580. 8012324: 2301 movs r3, #1
  42581. 8012326: 61bb str r3, [r7, #24]
  42582. 8012328: e010 b.n 801234c <osThreadNew+0xcc>
  42583. }
  42584. else {
  42585. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) && (attr->stack_mem == NULL)) {
  42586. 801232a: 687b ldr r3, [r7, #4]
  42587. 801232c: 689b ldr r3, [r3, #8]
  42588. 801232e: 2b00 cmp r3, #0
  42589. 8012330: d10c bne.n 801234c <osThreadNew+0xcc>
  42590. 8012332: 687b ldr r3, [r7, #4]
  42591. 8012334: 68db ldr r3, [r3, #12]
  42592. 8012336: 2b00 cmp r3, #0
  42593. 8012338: d108 bne.n 801234c <osThreadNew+0xcc>
  42594. 801233a: 687b ldr r3, [r7, #4]
  42595. 801233c: 691b ldr r3, [r3, #16]
  42596. 801233e: 2b00 cmp r3, #0
  42597. 8012340: d104 bne.n 801234c <osThreadNew+0xcc>
  42598. mem = 0;
  42599. 8012342: 2300 movs r3, #0
  42600. 8012344: 61bb str r3, [r7, #24]
  42601. 8012346: e001 b.n 801234c <osThreadNew+0xcc>
  42602. }
  42603. }
  42604. }
  42605. else {
  42606. mem = 0;
  42607. 8012348: 2300 movs r3, #0
  42608. 801234a: 61bb str r3, [r7, #24]
  42609. }
  42610. if (mem == 1) {
  42611. 801234c: 69bb ldr r3, [r7, #24]
  42612. 801234e: 2b01 cmp r3, #1
  42613. 8012350: d110 bne.n 8012374 <osThreadNew+0xf4>
  42614. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  42615. hTask = xTaskCreateStatic ((TaskFunction_t)func, name, stack, argument, prio, (StackType_t *)attr->stack_mem,
  42616. 8012352: 687b ldr r3, [r7, #4]
  42617. 8012354: 691b ldr r3, [r3, #16]
  42618. (StaticTask_t *)attr->cb_mem);
  42619. 8012356: 687a ldr r2, [r7, #4]
  42620. 8012358: 6892 ldr r2, [r2, #8]
  42621. hTask = xTaskCreateStatic ((TaskFunction_t)func, name, stack, argument, prio, (StackType_t *)attr->stack_mem,
  42622. 801235a: 9202 str r2, [sp, #8]
  42623. 801235c: 9301 str r3, [sp, #4]
  42624. 801235e: 69fb ldr r3, [r7, #28]
  42625. 8012360: 9300 str r3, [sp, #0]
  42626. 8012362: 68bb ldr r3, [r7, #8]
  42627. 8012364: 6a3a ldr r2, [r7, #32]
  42628. 8012366: 6a79 ldr r1, [r7, #36] @ 0x24
  42629. 8012368: 68f8 ldr r0, [r7, #12]
  42630. 801236a: f001 fdac bl 8013ec6 <xTaskCreateStatic>
  42631. 801236e: 4603 mov r3, r0
  42632. 8012370: 613b str r3, [r7, #16]
  42633. 8012372: e013 b.n 801239c <osThreadNew+0x11c>
  42634. #endif
  42635. }
  42636. else {
  42637. if (mem == 0) {
  42638. 8012374: 69bb ldr r3, [r7, #24]
  42639. 8012376: 2b00 cmp r3, #0
  42640. 8012378: d110 bne.n 801239c <osThreadNew+0x11c>
  42641. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  42642. if (xTaskCreate ((TaskFunction_t)func, name, (uint16_t)stack, argument, prio, &hTask) != pdPASS) {
  42643. 801237a: 6a3b ldr r3, [r7, #32]
  42644. 801237c: b29a uxth r2, r3
  42645. 801237e: f107 0310 add.w r3, r7, #16
  42646. 8012382: 9301 str r3, [sp, #4]
  42647. 8012384: 69fb ldr r3, [r7, #28]
  42648. 8012386: 9300 str r3, [sp, #0]
  42649. 8012388: 68bb ldr r3, [r7, #8]
  42650. 801238a: 6a79 ldr r1, [r7, #36] @ 0x24
  42651. 801238c: 68f8 ldr r0, [r7, #12]
  42652. 801238e: f001 fdfa bl 8013f86 <xTaskCreate>
  42653. 8012392: 4603 mov r3, r0
  42654. 8012394: 2b01 cmp r3, #1
  42655. 8012396: d001 beq.n 801239c <osThreadNew+0x11c>
  42656. hTask = NULL;
  42657. 8012398: 2300 movs r3, #0
  42658. 801239a: 613b str r3, [r7, #16]
  42659. #endif
  42660. }
  42661. }
  42662. }
  42663. return ((osThreadId_t)hTask);
  42664. 801239c: 693b ldr r3, [r7, #16]
  42665. }
  42666. 801239e: 4618 mov r0, r3
  42667. 80123a0: 3728 adds r7, #40 @ 0x28
  42668. 80123a2: 46bd mov sp, r7
  42669. 80123a4: bd80 pop {r7, pc}
  42670. 080123a6 <osDelay>:
  42671. /* Return flags before clearing */
  42672. return (rflags);
  42673. }
  42674. #endif /* (configUSE_OS2_THREAD_FLAGS == 1) */
  42675. osStatus_t osDelay (uint32_t ticks) {
  42676. 80123a6: b580 push {r7, lr}
  42677. 80123a8: b084 sub sp, #16
  42678. 80123aa: af00 add r7, sp, #0
  42679. 80123ac: 6078 str r0, [r7, #4]
  42680. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  42681. 80123ae: f3ef 8305 mrs r3, IPSR
  42682. 80123b2: 60bb str r3, [r7, #8]
  42683. return(result);
  42684. 80123b4: 68bb ldr r3, [r7, #8]
  42685. osStatus_t stat;
  42686. if (IS_IRQ()) {
  42687. 80123b6: 2b00 cmp r3, #0
  42688. 80123b8: d003 beq.n 80123c2 <osDelay+0x1c>
  42689. stat = osErrorISR;
  42690. 80123ba: f06f 0305 mvn.w r3, #5
  42691. 80123be: 60fb str r3, [r7, #12]
  42692. 80123c0: e007 b.n 80123d2 <osDelay+0x2c>
  42693. }
  42694. else {
  42695. stat = osOK;
  42696. 80123c2: 2300 movs r3, #0
  42697. 80123c4: 60fb str r3, [r7, #12]
  42698. if (ticks != 0U) {
  42699. 80123c6: 687b ldr r3, [r7, #4]
  42700. 80123c8: 2b00 cmp r3, #0
  42701. 80123ca: d002 beq.n 80123d2 <osDelay+0x2c>
  42702. vTaskDelay(ticks);
  42703. 80123cc: 6878 ldr r0, [r7, #4]
  42704. 80123ce: f001 ff37 bl 8014240 <vTaskDelay>
  42705. }
  42706. }
  42707. return (stat);
  42708. 80123d2: 68fb ldr r3, [r7, #12]
  42709. }
  42710. 80123d4: 4618 mov r0, r3
  42711. 80123d6: 3710 adds r7, #16
  42712. 80123d8: 46bd mov sp, r7
  42713. 80123da: bd80 pop {r7, pc}
  42714. 080123dc <TimerCallback>:
  42715. }
  42716. /*---------------------------------------------------------------------------*/
  42717. #if (configUSE_OS2_TIMER == 1)
  42718. static void TimerCallback (TimerHandle_t hTimer) {
  42719. 80123dc: b580 push {r7, lr}
  42720. 80123de: b084 sub sp, #16
  42721. 80123e0: af00 add r7, sp, #0
  42722. 80123e2: 6078 str r0, [r7, #4]
  42723. TimerCallback_t *callb;
  42724. callb = (TimerCallback_t *)pvTimerGetTimerID (hTimer);
  42725. 80123e4: 6878 ldr r0, [r7, #4]
  42726. 80123e6: f003 fc3d bl 8015c64 <pvTimerGetTimerID>
  42727. 80123ea: 60f8 str r0, [r7, #12]
  42728. if (callb != NULL) {
  42729. 80123ec: 68fb ldr r3, [r7, #12]
  42730. 80123ee: 2b00 cmp r3, #0
  42731. 80123f0: d005 beq.n 80123fe <TimerCallback+0x22>
  42732. callb->func (callb->arg);
  42733. 80123f2: 68fb ldr r3, [r7, #12]
  42734. 80123f4: 681b ldr r3, [r3, #0]
  42735. 80123f6: 68fa ldr r2, [r7, #12]
  42736. 80123f8: 6852 ldr r2, [r2, #4]
  42737. 80123fa: 4610 mov r0, r2
  42738. 80123fc: 4798 blx r3
  42739. }
  42740. }
  42741. 80123fe: bf00 nop
  42742. 8012400: 3710 adds r7, #16
  42743. 8012402: 46bd mov sp, r7
  42744. 8012404: bd80 pop {r7, pc}
  42745. ...
  42746. 08012408 <osTimerNew>:
  42747. osTimerId_t osTimerNew (osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr) {
  42748. 8012408: b580 push {r7, lr}
  42749. 801240a: b08c sub sp, #48 @ 0x30
  42750. 801240c: af02 add r7, sp, #8
  42751. 801240e: 60f8 str r0, [r7, #12]
  42752. 8012410: 607a str r2, [r7, #4]
  42753. 8012412: 603b str r3, [r7, #0]
  42754. 8012414: 460b mov r3, r1
  42755. 8012416: 72fb strb r3, [r7, #11]
  42756. TimerHandle_t hTimer;
  42757. TimerCallback_t *callb;
  42758. UBaseType_t reload;
  42759. int32_t mem;
  42760. hTimer = NULL;
  42761. 8012418: 2300 movs r3, #0
  42762. 801241a: 623b str r3, [r7, #32]
  42763. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  42764. 801241c: f3ef 8305 mrs r3, IPSR
  42765. 8012420: 613b str r3, [r7, #16]
  42766. return(result);
  42767. 8012422: 693b ldr r3, [r7, #16]
  42768. if (!IS_IRQ() && (func != NULL)) {
  42769. 8012424: 2b00 cmp r3, #0
  42770. 8012426: d163 bne.n 80124f0 <osTimerNew+0xe8>
  42771. 8012428: 68fb ldr r3, [r7, #12]
  42772. 801242a: 2b00 cmp r3, #0
  42773. 801242c: d060 beq.n 80124f0 <osTimerNew+0xe8>
  42774. /* Allocate memory to store callback function and argument */
  42775. callb = pvPortMalloc (sizeof(TimerCallback_t));
  42776. 801242e: 2008 movs r0, #8
  42777. 8012430: f003 fe8c bl 801614c <pvPortMalloc>
  42778. 8012434: 6178 str r0, [r7, #20]
  42779. if (callb != NULL) {
  42780. 8012436: 697b ldr r3, [r7, #20]
  42781. 8012438: 2b00 cmp r3, #0
  42782. 801243a: d059 beq.n 80124f0 <osTimerNew+0xe8>
  42783. callb->func = func;
  42784. 801243c: 697b ldr r3, [r7, #20]
  42785. 801243e: 68fa ldr r2, [r7, #12]
  42786. 8012440: 601a str r2, [r3, #0]
  42787. callb->arg = argument;
  42788. 8012442: 697b ldr r3, [r7, #20]
  42789. 8012444: 687a ldr r2, [r7, #4]
  42790. 8012446: 605a str r2, [r3, #4]
  42791. if (type == osTimerOnce) {
  42792. 8012448: 7afb ldrb r3, [r7, #11]
  42793. 801244a: 2b00 cmp r3, #0
  42794. 801244c: d102 bne.n 8012454 <osTimerNew+0x4c>
  42795. reload = pdFALSE;
  42796. 801244e: 2300 movs r3, #0
  42797. 8012450: 61fb str r3, [r7, #28]
  42798. 8012452: e001 b.n 8012458 <osTimerNew+0x50>
  42799. } else {
  42800. reload = pdTRUE;
  42801. 8012454: 2301 movs r3, #1
  42802. 8012456: 61fb str r3, [r7, #28]
  42803. }
  42804. mem = -1;
  42805. 8012458: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  42806. 801245c: 61bb str r3, [r7, #24]
  42807. name = NULL;
  42808. 801245e: 2300 movs r3, #0
  42809. 8012460: 627b str r3, [r7, #36] @ 0x24
  42810. if (attr != NULL) {
  42811. 8012462: 683b ldr r3, [r7, #0]
  42812. 8012464: 2b00 cmp r3, #0
  42813. 8012466: d01c beq.n 80124a2 <osTimerNew+0x9a>
  42814. if (attr->name != NULL) {
  42815. 8012468: 683b ldr r3, [r7, #0]
  42816. 801246a: 681b ldr r3, [r3, #0]
  42817. 801246c: 2b00 cmp r3, #0
  42818. 801246e: d002 beq.n 8012476 <osTimerNew+0x6e>
  42819. name = attr->name;
  42820. 8012470: 683b ldr r3, [r7, #0]
  42821. 8012472: 681b ldr r3, [r3, #0]
  42822. 8012474: 627b str r3, [r7, #36] @ 0x24
  42823. }
  42824. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTimer_t))) {
  42825. 8012476: 683b ldr r3, [r7, #0]
  42826. 8012478: 689b ldr r3, [r3, #8]
  42827. 801247a: 2b00 cmp r3, #0
  42828. 801247c: d006 beq.n 801248c <osTimerNew+0x84>
  42829. 801247e: 683b ldr r3, [r7, #0]
  42830. 8012480: 68db ldr r3, [r3, #12]
  42831. 8012482: 2b2b cmp r3, #43 @ 0x2b
  42832. 8012484: d902 bls.n 801248c <osTimerNew+0x84>
  42833. mem = 1;
  42834. 8012486: 2301 movs r3, #1
  42835. 8012488: 61bb str r3, [r7, #24]
  42836. 801248a: e00c b.n 80124a6 <osTimerNew+0x9e>
  42837. }
  42838. else {
  42839. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U)) {
  42840. 801248c: 683b ldr r3, [r7, #0]
  42841. 801248e: 689b ldr r3, [r3, #8]
  42842. 8012490: 2b00 cmp r3, #0
  42843. 8012492: d108 bne.n 80124a6 <osTimerNew+0x9e>
  42844. 8012494: 683b ldr r3, [r7, #0]
  42845. 8012496: 68db ldr r3, [r3, #12]
  42846. 8012498: 2b00 cmp r3, #0
  42847. 801249a: d104 bne.n 80124a6 <osTimerNew+0x9e>
  42848. mem = 0;
  42849. 801249c: 2300 movs r3, #0
  42850. 801249e: 61bb str r3, [r7, #24]
  42851. 80124a0: e001 b.n 80124a6 <osTimerNew+0x9e>
  42852. }
  42853. }
  42854. }
  42855. else {
  42856. mem = 0;
  42857. 80124a2: 2300 movs r3, #0
  42858. 80124a4: 61bb str r3, [r7, #24]
  42859. }
  42860. if (mem == 1) {
  42861. 80124a6: 69bb ldr r3, [r7, #24]
  42862. 80124a8: 2b01 cmp r3, #1
  42863. 80124aa: d10c bne.n 80124c6 <osTimerNew+0xbe>
  42864. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  42865. hTimer = xTimerCreateStatic (name, 1, reload, callb, TimerCallback, (StaticTimer_t *)attr->cb_mem);
  42866. 80124ac: 683b ldr r3, [r7, #0]
  42867. 80124ae: 689b ldr r3, [r3, #8]
  42868. 80124b0: 9301 str r3, [sp, #4]
  42869. 80124b2: 4b12 ldr r3, [pc, #72] @ (80124fc <osTimerNew+0xf4>)
  42870. 80124b4: 9300 str r3, [sp, #0]
  42871. 80124b6: 697b ldr r3, [r7, #20]
  42872. 80124b8: 69fa ldr r2, [r7, #28]
  42873. 80124ba: 2101 movs r1, #1
  42874. 80124bc: 6a78 ldr r0, [r7, #36] @ 0x24
  42875. 80124be: f003 f81a bl 80154f6 <xTimerCreateStatic>
  42876. 80124c2: 6238 str r0, [r7, #32]
  42877. 80124c4: e00b b.n 80124de <osTimerNew+0xd6>
  42878. #endif
  42879. }
  42880. else {
  42881. if (mem == 0) {
  42882. 80124c6: 69bb ldr r3, [r7, #24]
  42883. 80124c8: 2b00 cmp r3, #0
  42884. 80124ca: d108 bne.n 80124de <osTimerNew+0xd6>
  42885. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  42886. hTimer = xTimerCreate (name, 1, reload, callb, TimerCallback);
  42887. 80124cc: 4b0b ldr r3, [pc, #44] @ (80124fc <osTimerNew+0xf4>)
  42888. 80124ce: 9300 str r3, [sp, #0]
  42889. 80124d0: 697b ldr r3, [r7, #20]
  42890. 80124d2: 69fa ldr r2, [r7, #28]
  42891. 80124d4: 2101 movs r1, #1
  42892. 80124d6: 6a78 ldr r0, [r7, #36] @ 0x24
  42893. 80124d8: f002 ffec bl 80154b4 <xTimerCreate>
  42894. 80124dc: 6238 str r0, [r7, #32]
  42895. #endif
  42896. }
  42897. }
  42898. if ((hTimer == NULL) && (callb != NULL)) {
  42899. 80124de: 6a3b ldr r3, [r7, #32]
  42900. 80124e0: 2b00 cmp r3, #0
  42901. 80124e2: d105 bne.n 80124f0 <osTimerNew+0xe8>
  42902. 80124e4: 697b ldr r3, [r7, #20]
  42903. 80124e6: 2b00 cmp r3, #0
  42904. 80124e8: d002 beq.n 80124f0 <osTimerNew+0xe8>
  42905. vPortFree (callb);
  42906. 80124ea: 6978 ldr r0, [r7, #20]
  42907. 80124ec: f003 fefc bl 80162e8 <vPortFree>
  42908. }
  42909. }
  42910. }
  42911. return ((osTimerId_t)hTimer);
  42912. 80124f0: 6a3b ldr r3, [r7, #32]
  42913. }
  42914. 80124f2: 4618 mov r0, r3
  42915. 80124f4: 3728 adds r7, #40 @ 0x28
  42916. 80124f6: 46bd mov sp, r7
  42917. 80124f8: bd80 pop {r7, pc}
  42918. 80124fa: bf00 nop
  42919. 80124fc: 080123dd .word 0x080123dd
  42920. 08012500 <osTimerStart>:
  42921. }
  42922. return (p);
  42923. }
  42924. osStatus_t osTimerStart (osTimerId_t timer_id, uint32_t ticks) {
  42925. 8012500: b580 push {r7, lr}
  42926. 8012502: b088 sub sp, #32
  42927. 8012504: af02 add r7, sp, #8
  42928. 8012506: 6078 str r0, [r7, #4]
  42929. 8012508: 6039 str r1, [r7, #0]
  42930. TimerHandle_t hTimer = (TimerHandle_t)timer_id;
  42931. 801250a: 687b ldr r3, [r7, #4]
  42932. 801250c: 613b str r3, [r7, #16]
  42933. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  42934. 801250e: f3ef 8305 mrs r3, IPSR
  42935. 8012512: 60fb str r3, [r7, #12]
  42936. return(result);
  42937. 8012514: 68fb ldr r3, [r7, #12]
  42938. osStatus_t stat;
  42939. if (IS_IRQ()) {
  42940. 8012516: 2b00 cmp r3, #0
  42941. 8012518: d003 beq.n 8012522 <osTimerStart+0x22>
  42942. stat = osErrorISR;
  42943. 801251a: f06f 0305 mvn.w r3, #5
  42944. 801251e: 617b str r3, [r7, #20]
  42945. 8012520: e017 b.n 8012552 <osTimerStart+0x52>
  42946. }
  42947. else if (hTimer == NULL) {
  42948. 8012522: 693b ldr r3, [r7, #16]
  42949. 8012524: 2b00 cmp r3, #0
  42950. 8012526: d103 bne.n 8012530 <osTimerStart+0x30>
  42951. stat = osErrorParameter;
  42952. 8012528: f06f 0303 mvn.w r3, #3
  42953. 801252c: 617b str r3, [r7, #20]
  42954. 801252e: e010 b.n 8012552 <osTimerStart+0x52>
  42955. }
  42956. else {
  42957. if (xTimerChangePeriod (hTimer, ticks, 0) == pdPASS) {
  42958. 8012530: 2300 movs r3, #0
  42959. 8012532: 9300 str r3, [sp, #0]
  42960. 8012534: 2300 movs r3, #0
  42961. 8012536: 683a ldr r2, [r7, #0]
  42962. 8012538: 2104 movs r1, #4
  42963. 801253a: 6938 ldr r0, [r7, #16]
  42964. 801253c: f003 f858 bl 80155f0 <xTimerGenericCommand>
  42965. 8012540: 4603 mov r3, r0
  42966. 8012542: 2b01 cmp r3, #1
  42967. 8012544: d102 bne.n 801254c <osTimerStart+0x4c>
  42968. stat = osOK;
  42969. 8012546: 2300 movs r3, #0
  42970. 8012548: 617b str r3, [r7, #20]
  42971. 801254a: e002 b.n 8012552 <osTimerStart+0x52>
  42972. } else {
  42973. stat = osErrorResource;
  42974. 801254c: f06f 0302 mvn.w r3, #2
  42975. 8012550: 617b str r3, [r7, #20]
  42976. }
  42977. }
  42978. return (stat);
  42979. 8012552: 697b ldr r3, [r7, #20]
  42980. }
  42981. 8012554: 4618 mov r0, r3
  42982. 8012556: 3718 adds r7, #24
  42983. 8012558: 46bd mov sp, r7
  42984. 801255a: bd80 pop {r7, pc}
  42985. 0801255c <osTimerStop>:
  42986. osStatus_t osTimerStop (osTimerId_t timer_id) {
  42987. 801255c: b580 push {r7, lr}
  42988. 801255e: b088 sub sp, #32
  42989. 8012560: af02 add r7, sp, #8
  42990. 8012562: 6078 str r0, [r7, #4]
  42991. TimerHandle_t hTimer = (TimerHandle_t)timer_id;
  42992. 8012564: 687b ldr r3, [r7, #4]
  42993. 8012566: 613b str r3, [r7, #16]
  42994. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  42995. 8012568: f3ef 8305 mrs r3, IPSR
  42996. 801256c: 60fb str r3, [r7, #12]
  42997. return(result);
  42998. 801256e: 68fb ldr r3, [r7, #12]
  42999. osStatus_t stat;
  43000. if (IS_IRQ()) {
  43001. 8012570: 2b00 cmp r3, #0
  43002. 8012572: d003 beq.n 801257c <osTimerStop+0x20>
  43003. stat = osErrorISR;
  43004. 8012574: f06f 0305 mvn.w r3, #5
  43005. 8012578: 617b str r3, [r7, #20]
  43006. 801257a: e021 b.n 80125c0 <osTimerStop+0x64>
  43007. }
  43008. else if (hTimer == NULL) {
  43009. 801257c: 693b ldr r3, [r7, #16]
  43010. 801257e: 2b00 cmp r3, #0
  43011. 8012580: d103 bne.n 801258a <osTimerStop+0x2e>
  43012. stat = osErrorParameter;
  43013. 8012582: f06f 0303 mvn.w r3, #3
  43014. 8012586: 617b str r3, [r7, #20]
  43015. 8012588: e01a b.n 80125c0 <osTimerStop+0x64>
  43016. }
  43017. else {
  43018. if (xTimerIsTimerActive (hTimer) == pdFALSE) {
  43019. 801258a: 6938 ldr r0, [r7, #16]
  43020. 801258c: f003 fb40 bl 8015c10 <xTimerIsTimerActive>
  43021. 8012590: 4603 mov r3, r0
  43022. 8012592: 2b00 cmp r3, #0
  43023. 8012594: d103 bne.n 801259e <osTimerStop+0x42>
  43024. stat = osErrorResource;
  43025. 8012596: f06f 0302 mvn.w r3, #2
  43026. 801259a: 617b str r3, [r7, #20]
  43027. 801259c: e010 b.n 80125c0 <osTimerStop+0x64>
  43028. }
  43029. else {
  43030. if (xTimerStop (hTimer, 0) == pdPASS) {
  43031. 801259e: 2300 movs r3, #0
  43032. 80125a0: 9300 str r3, [sp, #0]
  43033. 80125a2: 2300 movs r3, #0
  43034. 80125a4: 2200 movs r2, #0
  43035. 80125a6: 2103 movs r1, #3
  43036. 80125a8: 6938 ldr r0, [r7, #16]
  43037. 80125aa: f003 f821 bl 80155f0 <xTimerGenericCommand>
  43038. 80125ae: 4603 mov r3, r0
  43039. 80125b0: 2b01 cmp r3, #1
  43040. 80125b2: d102 bne.n 80125ba <osTimerStop+0x5e>
  43041. stat = osOK;
  43042. 80125b4: 2300 movs r3, #0
  43043. 80125b6: 617b str r3, [r7, #20]
  43044. 80125b8: e002 b.n 80125c0 <osTimerStop+0x64>
  43045. } else {
  43046. stat = osError;
  43047. 80125ba: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  43048. 80125be: 617b str r3, [r7, #20]
  43049. }
  43050. }
  43051. }
  43052. return (stat);
  43053. 80125c0: 697b ldr r3, [r7, #20]
  43054. }
  43055. 80125c2: 4618 mov r0, r3
  43056. 80125c4: 3718 adds r7, #24
  43057. 80125c6: 46bd mov sp, r7
  43058. 80125c8: bd80 pop {r7, pc}
  43059. 080125ca <osMutexNew>:
  43060. }
  43061. /*---------------------------------------------------------------------------*/
  43062. #if (configUSE_OS2_MUTEX == 1)
  43063. osMutexId_t osMutexNew (const osMutexAttr_t *attr) {
  43064. 80125ca: b580 push {r7, lr}
  43065. 80125cc: b088 sub sp, #32
  43066. 80125ce: af00 add r7, sp, #0
  43067. 80125d0: 6078 str r0, [r7, #4]
  43068. int32_t mem;
  43069. #if (configQUEUE_REGISTRY_SIZE > 0)
  43070. const char *name;
  43071. #endif
  43072. hMutex = NULL;
  43073. 80125d2: 2300 movs r3, #0
  43074. 80125d4: 61fb str r3, [r7, #28]
  43075. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  43076. 80125d6: f3ef 8305 mrs r3, IPSR
  43077. 80125da: 60bb str r3, [r7, #8]
  43078. return(result);
  43079. 80125dc: 68bb ldr r3, [r7, #8]
  43080. if (!IS_IRQ()) {
  43081. 80125de: 2b00 cmp r3, #0
  43082. 80125e0: d174 bne.n 80126cc <osMutexNew+0x102>
  43083. if (attr != NULL) {
  43084. 80125e2: 687b ldr r3, [r7, #4]
  43085. 80125e4: 2b00 cmp r3, #0
  43086. 80125e6: d003 beq.n 80125f0 <osMutexNew+0x26>
  43087. type = attr->attr_bits;
  43088. 80125e8: 687b ldr r3, [r7, #4]
  43089. 80125ea: 685b ldr r3, [r3, #4]
  43090. 80125ec: 61bb str r3, [r7, #24]
  43091. 80125ee: e001 b.n 80125f4 <osMutexNew+0x2a>
  43092. } else {
  43093. type = 0U;
  43094. 80125f0: 2300 movs r3, #0
  43095. 80125f2: 61bb str r3, [r7, #24]
  43096. }
  43097. if ((type & osMutexRecursive) == osMutexRecursive) {
  43098. 80125f4: 69bb ldr r3, [r7, #24]
  43099. 80125f6: f003 0301 and.w r3, r3, #1
  43100. 80125fa: 2b00 cmp r3, #0
  43101. 80125fc: d002 beq.n 8012604 <osMutexNew+0x3a>
  43102. rmtx = 1U;
  43103. 80125fe: 2301 movs r3, #1
  43104. 8012600: 617b str r3, [r7, #20]
  43105. 8012602: e001 b.n 8012608 <osMutexNew+0x3e>
  43106. } else {
  43107. rmtx = 0U;
  43108. 8012604: 2300 movs r3, #0
  43109. 8012606: 617b str r3, [r7, #20]
  43110. }
  43111. if ((type & osMutexRobust) != osMutexRobust) {
  43112. 8012608: 69bb ldr r3, [r7, #24]
  43113. 801260a: f003 0308 and.w r3, r3, #8
  43114. 801260e: 2b00 cmp r3, #0
  43115. 8012610: d15c bne.n 80126cc <osMutexNew+0x102>
  43116. mem = -1;
  43117. 8012612: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  43118. 8012616: 613b str r3, [r7, #16]
  43119. if (attr != NULL) {
  43120. 8012618: 687b ldr r3, [r7, #4]
  43121. 801261a: 2b00 cmp r3, #0
  43122. 801261c: d015 beq.n 801264a <osMutexNew+0x80>
  43123. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticSemaphore_t))) {
  43124. 801261e: 687b ldr r3, [r7, #4]
  43125. 8012620: 689b ldr r3, [r3, #8]
  43126. 8012622: 2b00 cmp r3, #0
  43127. 8012624: d006 beq.n 8012634 <osMutexNew+0x6a>
  43128. 8012626: 687b ldr r3, [r7, #4]
  43129. 8012628: 68db ldr r3, [r3, #12]
  43130. 801262a: 2b4f cmp r3, #79 @ 0x4f
  43131. 801262c: d902 bls.n 8012634 <osMutexNew+0x6a>
  43132. mem = 1;
  43133. 801262e: 2301 movs r3, #1
  43134. 8012630: 613b str r3, [r7, #16]
  43135. 8012632: e00c b.n 801264e <osMutexNew+0x84>
  43136. }
  43137. else {
  43138. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U)) {
  43139. 8012634: 687b ldr r3, [r7, #4]
  43140. 8012636: 689b ldr r3, [r3, #8]
  43141. 8012638: 2b00 cmp r3, #0
  43142. 801263a: d108 bne.n 801264e <osMutexNew+0x84>
  43143. 801263c: 687b ldr r3, [r7, #4]
  43144. 801263e: 68db ldr r3, [r3, #12]
  43145. 8012640: 2b00 cmp r3, #0
  43146. 8012642: d104 bne.n 801264e <osMutexNew+0x84>
  43147. mem = 0;
  43148. 8012644: 2300 movs r3, #0
  43149. 8012646: 613b str r3, [r7, #16]
  43150. 8012648: e001 b.n 801264e <osMutexNew+0x84>
  43151. }
  43152. }
  43153. }
  43154. else {
  43155. mem = 0;
  43156. 801264a: 2300 movs r3, #0
  43157. 801264c: 613b str r3, [r7, #16]
  43158. }
  43159. if (mem == 1) {
  43160. 801264e: 693b ldr r3, [r7, #16]
  43161. 8012650: 2b01 cmp r3, #1
  43162. 8012652: d112 bne.n 801267a <osMutexNew+0xb0>
  43163. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  43164. if (rmtx != 0U) {
  43165. 8012654: 697b ldr r3, [r7, #20]
  43166. 8012656: 2b00 cmp r3, #0
  43167. 8012658: d007 beq.n 801266a <osMutexNew+0xa0>
  43168. #if (configUSE_RECURSIVE_MUTEXES == 1)
  43169. hMutex = xSemaphoreCreateRecursiveMutexStatic (attr->cb_mem);
  43170. 801265a: 687b ldr r3, [r7, #4]
  43171. 801265c: 689b ldr r3, [r3, #8]
  43172. 801265e: 4619 mov r1, r3
  43173. 8012660: 2004 movs r0, #4
  43174. 8012662: f000 fc50 bl 8012f06 <xQueueCreateMutexStatic>
  43175. 8012666: 61f8 str r0, [r7, #28]
  43176. 8012668: e016 b.n 8012698 <osMutexNew+0xce>
  43177. #endif
  43178. }
  43179. else {
  43180. hMutex = xSemaphoreCreateMutexStatic (attr->cb_mem);
  43181. 801266a: 687b ldr r3, [r7, #4]
  43182. 801266c: 689b ldr r3, [r3, #8]
  43183. 801266e: 4619 mov r1, r3
  43184. 8012670: 2001 movs r0, #1
  43185. 8012672: f000 fc48 bl 8012f06 <xQueueCreateMutexStatic>
  43186. 8012676: 61f8 str r0, [r7, #28]
  43187. 8012678: e00e b.n 8012698 <osMutexNew+0xce>
  43188. }
  43189. #endif
  43190. }
  43191. else {
  43192. if (mem == 0) {
  43193. 801267a: 693b ldr r3, [r7, #16]
  43194. 801267c: 2b00 cmp r3, #0
  43195. 801267e: d10b bne.n 8012698 <osMutexNew+0xce>
  43196. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  43197. if (rmtx != 0U) {
  43198. 8012680: 697b ldr r3, [r7, #20]
  43199. 8012682: 2b00 cmp r3, #0
  43200. 8012684: d004 beq.n 8012690 <osMutexNew+0xc6>
  43201. #if (configUSE_RECURSIVE_MUTEXES == 1)
  43202. hMutex = xSemaphoreCreateRecursiveMutex ();
  43203. 8012686: 2004 movs r0, #4
  43204. 8012688: f000 fc25 bl 8012ed6 <xQueueCreateMutex>
  43205. 801268c: 61f8 str r0, [r7, #28]
  43206. 801268e: e003 b.n 8012698 <osMutexNew+0xce>
  43207. #endif
  43208. } else {
  43209. hMutex = xSemaphoreCreateMutex ();
  43210. 8012690: 2001 movs r0, #1
  43211. 8012692: f000 fc20 bl 8012ed6 <xQueueCreateMutex>
  43212. 8012696: 61f8 str r0, [r7, #28]
  43213. #endif
  43214. }
  43215. }
  43216. #if (configQUEUE_REGISTRY_SIZE > 0)
  43217. if (hMutex != NULL) {
  43218. 8012698: 69fb ldr r3, [r7, #28]
  43219. 801269a: 2b00 cmp r3, #0
  43220. 801269c: d00c beq.n 80126b8 <osMutexNew+0xee>
  43221. if (attr != NULL) {
  43222. 801269e: 687b ldr r3, [r7, #4]
  43223. 80126a0: 2b00 cmp r3, #0
  43224. 80126a2: d003 beq.n 80126ac <osMutexNew+0xe2>
  43225. name = attr->name;
  43226. 80126a4: 687b ldr r3, [r7, #4]
  43227. 80126a6: 681b ldr r3, [r3, #0]
  43228. 80126a8: 60fb str r3, [r7, #12]
  43229. 80126aa: e001 b.n 80126b0 <osMutexNew+0xe6>
  43230. } else {
  43231. name = NULL;
  43232. 80126ac: 2300 movs r3, #0
  43233. 80126ae: 60fb str r3, [r7, #12]
  43234. }
  43235. vQueueAddToRegistry (hMutex, name);
  43236. 80126b0: 68f9 ldr r1, [r7, #12]
  43237. 80126b2: 69f8 ldr r0, [r7, #28]
  43238. 80126b4: f001 f9ea bl 8013a8c <vQueueAddToRegistry>
  43239. }
  43240. #endif
  43241. if ((hMutex != NULL) && (rmtx != 0U)) {
  43242. 80126b8: 69fb ldr r3, [r7, #28]
  43243. 80126ba: 2b00 cmp r3, #0
  43244. 80126bc: d006 beq.n 80126cc <osMutexNew+0x102>
  43245. 80126be: 697b ldr r3, [r7, #20]
  43246. 80126c0: 2b00 cmp r3, #0
  43247. 80126c2: d003 beq.n 80126cc <osMutexNew+0x102>
  43248. hMutex = (SemaphoreHandle_t)((uint32_t)hMutex | 1U);
  43249. 80126c4: 69fb ldr r3, [r7, #28]
  43250. 80126c6: f043 0301 orr.w r3, r3, #1
  43251. 80126ca: 61fb str r3, [r7, #28]
  43252. }
  43253. }
  43254. }
  43255. return ((osMutexId_t)hMutex);
  43256. 80126cc: 69fb ldr r3, [r7, #28]
  43257. }
  43258. 80126ce: 4618 mov r0, r3
  43259. 80126d0: 3720 adds r7, #32
  43260. 80126d2: 46bd mov sp, r7
  43261. 80126d4: bd80 pop {r7, pc}
  43262. 080126d6 <osMutexAcquire>:
  43263. osStatus_t osMutexAcquire (osMutexId_t mutex_id, uint32_t timeout) {
  43264. 80126d6: b580 push {r7, lr}
  43265. 80126d8: b086 sub sp, #24
  43266. 80126da: af00 add r7, sp, #0
  43267. 80126dc: 6078 str r0, [r7, #4]
  43268. 80126de: 6039 str r1, [r7, #0]
  43269. SemaphoreHandle_t hMutex;
  43270. osStatus_t stat;
  43271. uint32_t rmtx;
  43272. hMutex = (SemaphoreHandle_t)((uint32_t)mutex_id & ~1U);
  43273. 80126e0: 687b ldr r3, [r7, #4]
  43274. 80126e2: f023 0301 bic.w r3, r3, #1
  43275. 80126e6: 613b str r3, [r7, #16]
  43276. rmtx = (uint32_t)mutex_id & 1U;
  43277. 80126e8: 687b ldr r3, [r7, #4]
  43278. 80126ea: f003 0301 and.w r3, r3, #1
  43279. 80126ee: 60fb str r3, [r7, #12]
  43280. stat = osOK;
  43281. 80126f0: 2300 movs r3, #0
  43282. 80126f2: 617b str r3, [r7, #20]
  43283. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  43284. 80126f4: f3ef 8305 mrs r3, IPSR
  43285. 80126f8: 60bb str r3, [r7, #8]
  43286. return(result);
  43287. 80126fa: 68bb ldr r3, [r7, #8]
  43288. if (IS_IRQ()) {
  43289. 80126fc: 2b00 cmp r3, #0
  43290. 80126fe: d003 beq.n 8012708 <osMutexAcquire+0x32>
  43291. stat = osErrorISR;
  43292. 8012700: f06f 0305 mvn.w r3, #5
  43293. 8012704: 617b str r3, [r7, #20]
  43294. 8012706: e02c b.n 8012762 <osMutexAcquire+0x8c>
  43295. }
  43296. else if (hMutex == NULL) {
  43297. 8012708: 693b ldr r3, [r7, #16]
  43298. 801270a: 2b00 cmp r3, #0
  43299. 801270c: d103 bne.n 8012716 <osMutexAcquire+0x40>
  43300. stat = osErrorParameter;
  43301. 801270e: f06f 0303 mvn.w r3, #3
  43302. 8012712: 617b str r3, [r7, #20]
  43303. 8012714: e025 b.n 8012762 <osMutexAcquire+0x8c>
  43304. }
  43305. else {
  43306. if (rmtx != 0U) {
  43307. 8012716: 68fb ldr r3, [r7, #12]
  43308. 8012718: 2b00 cmp r3, #0
  43309. 801271a: d011 beq.n 8012740 <osMutexAcquire+0x6a>
  43310. #if (configUSE_RECURSIVE_MUTEXES == 1)
  43311. if (xSemaphoreTakeRecursive (hMutex, timeout) != pdPASS) {
  43312. 801271c: 6839 ldr r1, [r7, #0]
  43313. 801271e: 6938 ldr r0, [r7, #16]
  43314. 8012720: f000 fc41 bl 8012fa6 <xQueueTakeMutexRecursive>
  43315. 8012724: 4603 mov r3, r0
  43316. 8012726: 2b01 cmp r3, #1
  43317. 8012728: d01b beq.n 8012762 <osMutexAcquire+0x8c>
  43318. if (timeout != 0U) {
  43319. 801272a: 683b ldr r3, [r7, #0]
  43320. 801272c: 2b00 cmp r3, #0
  43321. 801272e: d003 beq.n 8012738 <osMutexAcquire+0x62>
  43322. stat = osErrorTimeout;
  43323. 8012730: f06f 0301 mvn.w r3, #1
  43324. 8012734: 617b str r3, [r7, #20]
  43325. 8012736: e014 b.n 8012762 <osMutexAcquire+0x8c>
  43326. } else {
  43327. stat = osErrorResource;
  43328. 8012738: f06f 0302 mvn.w r3, #2
  43329. 801273c: 617b str r3, [r7, #20]
  43330. 801273e: e010 b.n 8012762 <osMutexAcquire+0x8c>
  43331. }
  43332. }
  43333. #endif
  43334. }
  43335. else {
  43336. if (xSemaphoreTake (hMutex, timeout) != pdPASS) {
  43337. 8012740: 6839 ldr r1, [r7, #0]
  43338. 8012742: 6938 ldr r0, [r7, #16]
  43339. 8012744: f000 fee8 bl 8013518 <xQueueSemaphoreTake>
  43340. 8012748: 4603 mov r3, r0
  43341. 801274a: 2b01 cmp r3, #1
  43342. 801274c: d009 beq.n 8012762 <osMutexAcquire+0x8c>
  43343. if (timeout != 0U) {
  43344. 801274e: 683b ldr r3, [r7, #0]
  43345. 8012750: 2b00 cmp r3, #0
  43346. 8012752: d003 beq.n 801275c <osMutexAcquire+0x86>
  43347. stat = osErrorTimeout;
  43348. 8012754: f06f 0301 mvn.w r3, #1
  43349. 8012758: 617b str r3, [r7, #20]
  43350. 801275a: e002 b.n 8012762 <osMutexAcquire+0x8c>
  43351. } else {
  43352. stat = osErrorResource;
  43353. 801275c: f06f 0302 mvn.w r3, #2
  43354. 8012760: 617b str r3, [r7, #20]
  43355. }
  43356. }
  43357. }
  43358. }
  43359. return (stat);
  43360. 8012762: 697b ldr r3, [r7, #20]
  43361. }
  43362. 8012764: 4618 mov r0, r3
  43363. 8012766: 3718 adds r7, #24
  43364. 8012768: 46bd mov sp, r7
  43365. 801276a: bd80 pop {r7, pc}
  43366. 0801276c <osMutexRelease>:
  43367. osStatus_t osMutexRelease (osMutexId_t mutex_id) {
  43368. 801276c: b580 push {r7, lr}
  43369. 801276e: b086 sub sp, #24
  43370. 8012770: af00 add r7, sp, #0
  43371. 8012772: 6078 str r0, [r7, #4]
  43372. SemaphoreHandle_t hMutex;
  43373. osStatus_t stat;
  43374. uint32_t rmtx;
  43375. hMutex = (SemaphoreHandle_t)((uint32_t)mutex_id & ~1U);
  43376. 8012774: 687b ldr r3, [r7, #4]
  43377. 8012776: f023 0301 bic.w r3, r3, #1
  43378. 801277a: 613b str r3, [r7, #16]
  43379. rmtx = (uint32_t)mutex_id & 1U;
  43380. 801277c: 687b ldr r3, [r7, #4]
  43381. 801277e: f003 0301 and.w r3, r3, #1
  43382. 8012782: 60fb str r3, [r7, #12]
  43383. stat = osOK;
  43384. 8012784: 2300 movs r3, #0
  43385. 8012786: 617b str r3, [r7, #20]
  43386. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  43387. 8012788: f3ef 8305 mrs r3, IPSR
  43388. 801278c: 60bb str r3, [r7, #8]
  43389. return(result);
  43390. 801278e: 68bb ldr r3, [r7, #8]
  43391. if (IS_IRQ()) {
  43392. 8012790: 2b00 cmp r3, #0
  43393. 8012792: d003 beq.n 801279c <osMutexRelease+0x30>
  43394. stat = osErrorISR;
  43395. 8012794: f06f 0305 mvn.w r3, #5
  43396. 8012798: 617b str r3, [r7, #20]
  43397. 801279a: e01f b.n 80127dc <osMutexRelease+0x70>
  43398. }
  43399. else if (hMutex == NULL) {
  43400. 801279c: 693b ldr r3, [r7, #16]
  43401. 801279e: 2b00 cmp r3, #0
  43402. 80127a0: d103 bne.n 80127aa <osMutexRelease+0x3e>
  43403. stat = osErrorParameter;
  43404. 80127a2: f06f 0303 mvn.w r3, #3
  43405. 80127a6: 617b str r3, [r7, #20]
  43406. 80127a8: e018 b.n 80127dc <osMutexRelease+0x70>
  43407. }
  43408. else {
  43409. if (rmtx != 0U) {
  43410. 80127aa: 68fb ldr r3, [r7, #12]
  43411. 80127ac: 2b00 cmp r3, #0
  43412. 80127ae: d009 beq.n 80127c4 <osMutexRelease+0x58>
  43413. #if (configUSE_RECURSIVE_MUTEXES == 1)
  43414. if (xSemaphoreGiveRecursive (hMutex) != pdPASS) {
  43415. 80127b0: 6938 ldr r0, [r7, #16]
  43416. 80127b2: f000 fbc3 bl 8012f3c <xQueueGiveMutexRecursive>
  43417. 80127b6: 4603 mov r3, r0
  43418. 80127b8: 2b01 cmp r3, #1
  43419. 80127ba: d00f beq.n 80127dc <osMutexRelease+0x70>
  43420. stat = osErrorResource;
  43421. 80127bc: f06f 0302 mvn.w r3, #2
  43422. 80127c0: 617b str r3, [r7, #20]
  43423. 80127c2: e00b b.n 80127dc <osMutexRelease+0x70>
  43424. }
  43425. #endif
  43426. }
  43427. else {
  43428. if (xSemaphoreGive (hMutex) != pdPASS) {
  43429. 80127c4: 2300 movs r3, #0
  43430. 80127c6: 2200 movs r2, #0
  43431. 80127c8: 2100 movs r1, #0
  43432. 80127ca: 6938 ldr r0, [r7, #16]
  43433. 80127cc: f000 fc22 bl 8013014 <xQueueGenericSend>
  43434. 80127d0: 4603 mov r3, r0
  43435. 80127d2: 2b01 cmp r3, #1
  43436. 80127d4: d002 beq.n 80127dc <osMutexRelease+0x70>
  43437. stat = osErrorResource;
  43438. 80127d6: f06f 0302 mvn.w r3, #2
  43439. 80127da: 617b str r3, [r7, #20]
  43440. }
  43441. }
  43442. }
  43443. return (stat);
  43444. 80127dc: 697b ldr r3, [r7, #20]
  43445. }
  43446. 80127de: 4618 mov r0, r3
  43447. 80127e0: 3718 adds r7, #24
  43448. 80127e2: 46bd mov sp, r7
  43449. 80127e4: bd80 pop {r7, pc}
  43450. 080127e6 <osMessageQueueNew>:
  43451. return (stat);
  43452. }
  43453. /*---------------------------------------------------------------------------*/
  43454. osMessageQueueId_t osMessageQueueNew (uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr) {
  43455. 80127e6: b580 push {r7, lr}
  43456. 80127e8: b08a sub sp, #40 @ 0x28
  43457. 80127ea: af02 add r7, sp, #8
  43458. 80127ec: 60f8 str r0, [r7, #12]
  43459. 80127ee: 60b9 str r1, [r7, #8]
  43460. 80127f0: 607a str r2, [r7, #4]
  43461. int32_t mem;
  43462. #if (configQUEUE_REGISTRY_SIZE > 0)
  43463. const char *name;
  43464. #endif
  43465. hQueue = NULL;
  43466. 80127f2: 2300 movs r3, #0
  43467. 80127f4: 61fb str r3, [r7, #28]
  43468. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  43469. 80127f6: f3ef 8305 mrs r3, IPSR
  43470. 80127fa: 613b str r3, [r7, #16]
  43471. return(result);
  43472. 80127fc: 693b ldr r3, [r7, #16]
  43473. if (!IS_IRQ() && (msg_count > 0U) && (msg_size > 0U)) {
  43474. 80127fe: 2b00 cmp r3, #0
  43475. 8012800: d15f bne.n 80128c2 <osMessageQueueNew+0xdc>
  43476. 8012802: 68fb ldr r3, [r7, #12]
  43477. 8012804: 2b00 cmp r3, #0
  43478. 8012806: d05c beq.n 80128c2 <osMessageQueueNew+0xdc>
  43479. 8012808: 68bb ldr r3, [r7, #8]
  43480. 801280a: 2b00 cmp r3, #0
  43481. 801280c: d059 beq.n 80128c2 <osMessageQueueNew+0xdc>
  43482. mem = -1;
  43483. 801280e: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  43484. 8012812: 61bb str r3, [r7, #24]
  43485. if (attr != NULL) {
  43486. 8012814: 687b ldr r3, [r7, #4]
  43487. 8012816: 2b00 cmp r3, #0
  43488. 8012818: d029 beq.n 801286e <osMessageQueueNew+0x88>
  43489. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticQueue_t)) &&
  43490. 801281a: 687b ldr r3, [r7, #4]
  43491. 801281c: 689b ldr r3, [r3, #8]
  43492. 801281e: 2b00 cmp r3, #0
  43493. 8012820: d012 beq.n 8012848 <osMessageQueueNew+0x62>
  43494. 8012822: 687b ldr r3, [r7, #4]
  43495. 8012824: 68db ldr r3, [r3, #12]
  43496. 8012826: 2b4f cmp r3, #79 @ 0x4f
  43497. 8012828: d90e bls.n 8012848 <osMessageQueueNew+0x62>
  43498. (attr->mq_mem != NULL) && (attr->mq_size >= (msg_count * msg_size))) {
  43499. 801282a: 687b ldr r3, [r7, #4]
  43500. 801282c: 691b ldr r3, [r3, #16]
  43501. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticQueue_t)) &&
  43502. 801282e: 2b00 cmp r3, #0
  43503. 8012830: d00a beq.n 8012848 <osMessageQueueNew+0x62>
  43504. (attr->mq_mem != NULL) && (attr->mq_size >= (msg_count * msg_size))) {
  43505. 8012832: 687b ldr r3, [r7, #4]
  43506. 8012834: 695a ldr r2, [r3, #20]
  43507. 8012836: 68fb ldr r3, [r7, #12]
  43508. 8012838: 68b9 ldr r1, [r7, #8]
  43509. 801283a: fb01 f303 mul.w r3, r1, r3
  43510. 801283e: 429a cmp r2, r3
  43511. 8012840: d302 bcc.n 8012848 <osMessageQueueNew+0x62>
  43512. mem = 1;
  43513. 8012842: 2301 movs r3, #1
  43514. 8012844: 61bb str r3, [r7, #24]
  43515. 8012846: e014 b.n 8012872 <osMessageQueueNew+0x8c>
  43516. }
  43517. else {
  43518. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) &&
  43519. 8012848: 687b ldr r3, [r7, #4]
  43520. 801284a: 689b ldr r3, [r3, #8]
  43521. 801284c: 2b00 cmp r3, #0
  43522. 801284e: d110 bne.n 8012872 <osMessageQueueNew+0x8c>
  43523. 8012850: 687b ldr r3, [r7, #4]
  43524. 8012852: 68db ldr r3, [r3, #12]
  43525. 8012854: 2b00 cmp r3, #0
  43526. 8012856: d10c bne.n 8012872 <osMessageQueueNew+0x8c>
  43527. (attr->mq_mem == NULL) && (attr->mq_size == 0U)) {
  43528. 8012858: 687b ldr r3, [r7, #4]
  43529. 801285a: 691b ldr r3, [r3, #16]
  43530. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) &&
  43531. 801285c: 2b00 cmp r3, #0
  43532. 801285e: d108 bne.n 8012872 <osMessageQueueNew+0x8c>
  43533. (attr->mq_mem == NULL) && (attr->mq_size == 0U)) {
  43534. 8012860: 687b ldr r3, [r7, #4]
  43535. 8012862: 695b ldr r3, [r3, #20]
  43536. 8012864: 2b00 cmp r3, #0
  43537. 8012866: d104 bne.n 8012872 <osMessageQueueNew+0x8c>
  43538. mem = 0;
  43539. 8012868: 2300 movs r3, #0
  43540. 801286a: 61bb str r3, [r7, #24]
  43541. 801286c: e001 b.n 8012872 <osMessageQueueNew+0x8c>
  43542. }
  43543. }
  43544. }
  43545. else {
  43546. mem = 0;
  43547. 801286e: 2300 movs r3, #0
  43548. 8012870: 61bb str r3, [r7, #24]
  43549. }
  43550. if (mem == 1) {
  43551. 8012872: 69bb ldr r3, [r7, #24]
  43552. 8012874: 2b01 cmp r3, #1
  43553. 8012876: d10b bne.n 8012890 <osMessageQueueNew+0xaa>
  43554. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  43555. hQueue = xQueueCreateStatic (msg_count, msg_size, attr->mq_mem, attr->cb_mem);
  43556. 8012878: 687b ldr r3, [r7, #4]
  43557. 801287a: 691a ldr r2, [r3, #16]
  43558. 801287c: 687b ldr r3, [r7, #4]
  43559. 801287e: 689b ldr r3, [r3, #8]
  43560. 8012880: 2100 movs r1, #0
  43561. 8012882: 9100 str r1, [sp, #0]
  43562. 8012884: 68b9 ldr r1, [r7, #8]
  43563. 8012886: 68f8 ldr r0, [r7, #12]
  43564. 8012888: f000 fa30 bl 8012cec <xQueueGenericCreateStatic>
  43565. 801288c: 61f8 str r0, [r7, #28]
  43566. 801288e: e008 b.n 80128a2 <osMessageQueueNew+0xbc>
  43567. #endif
  43568. }
  43569. else {
  43570. if (mem == 0) {
  43571. 8012890: 69bb ldr r3, [r7, #24]
  43572. 8012892: 2b00 cmp r3, #0
  43573. 8012894: d105 bne.n 80128a2 <osMessageQueueNew+0xbc>
  43574. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  43575. hQueue = xQueueCreate (msg_count, msg_size);
  43576. 8012896: 2200 movs r2, #0
  43577. 8012898: 68b9 ldr r1, [r7, #8]
  43578. 801289a: 68f8 ldr r0, [r7, #12]
  43579. 801289c: f000 faa3 bl 8012de6 <xQueueGenericCreate>
  43580. 80128a0: 61f8 str r0, [r7, #28]
  43581. #endif
  43582. }
  43583. }
  43584. #if (configQUEUE_REGISTRY_SIZE > 0)
  43585. if (hQueue != NULL) {
  43586. 80128a2: 69fb ldr r3, [r7, #28]
  43587. 80128a4: 2b00 cmp r3, #0
  43588. 80128a6: d00c beq.n 80128c2 <osMessageQueueNew+0xdc>
  43589. if (attr != NULL) {
  43590. 80128a8: 687b ldr r3, [r7, #4]
  43591. 80128aa: 2b00 cmp r3, #0
  43592. 80128ac: d003 beq.n 80128b6 <osMessageQueueNew+0xd0>
  43593. name = attr->name;
  43594. 80128ae: 687b ldr r3, [r7, #4]
  43595. 80128b0: 681b ldr r3, [r3, #0]
  43596. 80128b2: 617b str r3, [r7, #20]
  43597. 80128b4: e001 b.n 80128ba <osMessageQueueNew+0xd4>
  43598. } else {
  43599. name = NULL;
  43600. 80128b6: 2300 movs r3, #0
  43601. 80128b8: 617b str r3, [r7, #20]
  43602. }
  43603. vQueueAddToRegistry (hQueue, name);
  43604. 80128ba: 6979 ldr r1, [r7, #20]
  43605. 80128bc: 69f8 ldr r0, [r7, #28]
  43606. 80128be: f001 f8e5 bl 8013a8c <vQueueAddToRegistry>
  43607. }
  43608. #endif
  43609. }
  43610. return ((osMessageQueueId_t)hQueue);
  43611. 80128c2: 69fb ldr r3, [r7, #28]
  43612. }
  43613. 80128c4: 4618 mov r0, r3
  43614. 80128c6: 3720 adds r7, #32
  43615. 80128c8: 46bd mov sp, r7
  43616. 80128ca: bd80 pop {r7, pc}
  43617. 080128cc <osMessageQueuePut>:
  43618. osStatus_t osMessageQueuePut (osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout) {
  43619. 80128cc: b580 push {r7, lr}
  43620. 80128ce: b088 sub sp, #32
  43621. 80128d0: af00 add r7, sp, #0
  43622. 80128d2: 60f8 str r0, [r7, #12]
  43623. 80128d4: 60b9 str r1, [r7, #8]
  43624. 80128d6: 603b str r3, [r7, #0]
  43625. 80128d8: 4613 mov r3, r2
  43626. 80128da: 71fb strb r3, [r7, #7]
  43627. QueueHandle_t hQueue = (QueueHandle_t)mq_id;
  43628. 80128dc: 68fb ldr r3, [r7, #12]
  43629. 80128de: 61bb str r3, [r7, #24]
  43630. osStatus_t stat;
  43631. BaseType_t yield;
  43632. (void)msg_prio; /* Message priority is ignored */
  43633. stat = osOK;
  43634. 80128e0: 2300 movs r3, #0
  43635. 80128e2: 61fb str r3, [r7, #28]
  43636. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  43637. 80128e4: f3ef 8305 mrs r3, IPSR
  43638. 80128e8: 617b str r3, [r7, #20]
  43639. return(result);
  43640. 80128ea: 697b ldr r3, [r7, #20]
  43641. if (IS_IRQ()) {
  43642. 80128ec: 2b00 cmp r3, #0
  43643. 80128ee: d028 beq.n 8012942 <osMessageQueuePut+0x76>
  43644. if ((hQueue == NULL) || (msg_ptr == NULL) || (timeout != 0U)) {
  43645. 80128f0: 69bb ldr r3, [r7, #24]
  43646. 80128f2: 2b00 cmp r3, #0
  43647. 80128f4: d005 beq.n 8012902 <osMessageQueuePut+0x36>
  43648. 80128f6: 68bb ldr r3, [r7, #8]
  43649. 80128f8: 2b00 cmp r3, #0
  43650. 80128fa: d002 beq.n 8012902 <osMessageQueuePut+0x36>
  43651. 80128fc: 683b ldr r3, [r7, #0]
  43652. 80128fe: 2b00 cmp r3, #0
  43653. 8012900: d003 beq.n 801290a <osMessageQueuePut+0x3e>
  43654. stat = osErrorParameter;
  43655. 8012902: f06f 0303 mvn.w r3, #3
  43656. 8012906: 61fb str r3, [r7, #28]
  43657. 8012908: e038 b.n 801297c <osMessageQueuePut+0xb0>
  43658. }
  43659. else {
  43660. yield = pdFALSE;
  43661. 801290a: 2300 movs r3, #0
  43662. 801290c: 613b str r3, [r7, #16]
  43663. if (xQueueSendToBackFromISR (hQueue, msg_ptr, &yield) != pdTRUE) {
  43664. 801290e: f107 0210 add.w r2, r7, #16
  43665. 8012912: 2300 movs r3, #0
  43666. 8012914: 68b9 ldr r1, [r7, #8]
  43667. 8012916: 69b8 ldr r0, [r7, #24]
  43668. 8012918: f000 fc7e bl 8013218 <xQueueGenericSendFromISR>
  43669. 801291c: 4603 mov r3, r0
  43670. 801291e: 2b01 cmp r3, #1
  43671. 8012920: d003 beq.n 801292a <osMessageQueuePut+0x5e>
  43672. stat = osErrorResource;
  43673. 8012922: f06f 0302 mvn.w r3, #2
  43674. 8012926: 61fb str r3, [r7, #28]
  43675. 8012928: e028 b.n 801297c <osMessageQueuePut+0xb0>
  43676. } else {
  43677. portYIELD_FROM_ISR (yield);
  43678. 801292a: 693b ldr r3, [r7, #16]
  43679. 801292c: 2b00 cmp r3, #0
  43680. 801292e: d025 beq.n 801297c <osMessageQueuePut+0xb0>
  43681. 8012930: 4b15 ldr r3, [pc, #84] @ (8012988 <osMessageQueuePut+0xbc>)
  43682. 8012932: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  43683. 8012936: 601a str r2, [r3, #0]
  43684. 8012938: f3bf 8f4f dsb sy
  43685. 801293c: f3bf 8f6f isb sy
  43686. 8012940: e01c b.n 801297c <osMessageQueuePut+0xb0>
  43687. }
  43688. }
  43689. }
  43690. else {
  43691. if ((hQueue == NULL) || (msg_ptr == NULL)) {
  43692. 8012942: 69bb ldr r3, [r7, #24]
  43693. 8012944: 2b00 cmp r3, #0
  43694. 8012946: d002 beq.n 801294e <osMessageQueuePut+0x82>
  43695. 8012948: 68bb ldr r3, [r7, #8]
  43696. 801294a: 2b00 cmp r3, #0
  43697. 801294c: d103 bne.n 8012956 <osMessageQueuePut+0x8a>
  43698. stat = osErrorParameter;
  43699. 801294e: f06f 0303 mvn.w r3, #3
  43700. 8012952: 61fb str r3, [r7, #28]
  43701. 8012954: e012 b.n 801297c <osMessageQueuePut+0xb0>
  43702. }
  43703. else {
  43704. if (xQueueSendToBack (hQueue, msg_ptr, (TickType_t)timeout) != pdPASS) {
  43705. 8012956: 2300 movs r3, #0
  43706. 8012958: 683a ldr r2, [r7, #0]
  43707. 801295a: 68b9 ldr r1, [r7, #8]
  43708. 801295c: 69b8 ldr r0, [r7, #24]
  43709. 801295e: f000 fb59 bl 8013014 <xQueueGenericSend>
  43710. 8012962: 4603 mov r3, r0
  43711. 8012964: 2b01 cmp r3, #1
  43712. 8012966: d009 beq.n 801297c <osMessageQueuePut+0xb0>
  43713. if (timeout != 0U) {
  43714. 8012968: 683b ldr r3, [r7, #0]
  43715. 801296a: 2b00 cmp r3, #0
  43716. 801296c: d003 beq.n 8012976 <osMessageQueuePut+0xaa>
  43717. stat = osErrorTimeout;
  43718. 801296e: f06f 0301 mvn.w r3, #1
  43719. 8012972: 61fb str r3, [r7, #28]
  43720. 8012974: e002 b.n 801297c <osMessageQueuePut+0xb0>
  43721. } else {
  43722. stat = osErrorResource;
  43723. 8012976: f06f 0302 mvn.w r3, #2
  43724. 801297a: 61fb str r3, [r7, #28]
  43725. }
  43726. }
  43727. }
  43728. }
  43729. return (stat);
  43730. 801297c: 69fb ldr r3, [r7, #28]
  43731. }
  43732. 801297e: 4618 mov r0, r3
  43733. 8012980: 3720 adds r7, #32
  43734. 8012982: 46bd mov sp, r7
  43735. 8012984: bd80 pop {r7, pc}
  43736. 8012986: bf00 nop
  43737. 8012988: e000ed04 .word 0xe000ed04
  43738. 0801298c <osMessageQueueGet>:
  43739. osStatus_t osMessageQueueGet (osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout) {
  43740. 801298c: b580 push {r7, lr}
  43741. 801298e: b088 sub sp, #32
  43742. 8012990: af00 add r7, sp, #0
  43743. 8012992: 60f8 str r0, [r7, #12]
  43744. 8012994: 60b9 str r1, [r7, #8]
  43745. 8012996: 607a str r2, [r7, #4]
  43746. 8012998: 603b str r3, [r7, #0]
  43747. QueueHandle_t hQueue = (QueueHandle_t)mq_id;
  43748. 801299a: 68fb ldr r3, [r7, #12]
  43749. 801299c: 61bb str r3, [r7, #24]
  43750. osStatus_t stat;
  43751. BaseType_t yield;
  43752. (void)msg_prio; /* Message priority is ignored */
  43753. stat = osOK;
  43754. 801299e: 2300 movs r3, #0
  43755. 80129a0: 61fb str r3, [r7, #28]
  43756. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  43757. 80129a2: f3ef 8305 mrs r3, IPSR
  43758. 80129a6: 617b str r3, [r7, #20]
  43759. return(result);
  43760. 80129a8: 697b ldr r3, [r7, #20]
  43761. if (IS_IRQ()) {
  43762. 80129aa: 2b00 cmp r3, #0
  43763. 80129ac: d028 beq.n 8012a00 <osMessageQueueGet+0x74>
  43764. if ((hQueue == NULL) || (msg_ptr == NULL) || (timeout != 0U)) {
  43765. 80129ae: 69bb ldr r3, [r7, #24]
  43766. 80129b0: 2b00 cmp r3, #0
  43767. 80129b2: d005 beq.n 80129c0 <osMessageQueueGet+0x34>
  43768. 80129b4: 68bb ldr r3, [r7, #8]
  43769. 80129b6: 2b00 cmp r3, #0
  43770. 80129b8: d002 beq.n 80129c0 <osMessageQueueGet+0x34>
  43771. 80129ba: 683b ldr r3, [r7, #0]
  43772. 80129bc: 2b00 cmp r3, #0
  43773. 80129be: d003 beq.n 80129c8 <osMessageQueueGet+0x3c>
  43774. stat = osErrorParameter;
  43775. 80129c0: f06f 0303 mvn.w r3, #3
  43776. 80129c4: 61fb str r3, [r7, #28]
  43777. 80129c6: e037 b.n 8012a38 <osMessageQueueGet+0xac>
  43778. }
  43779. else {
  43780. yield = pdFALSE;
  43781. 80129c8: 2300 movs r3, #0
  43782. 80129ca: 613b str r3, [r7, #16]
  43783. if (xQueueReceiveFromISR (hQueue, msg_ptr, &yield) != pdPASS) {
  43784. 80129cc: f107 0310 add.w r3, r7, #16
  43785. 80129d0: 461a mov r2, r3
  43786. 80129d2: 68b9 ldr r1, [r7, #8]
  43787. 80129d4: 69b8 ldr r0, [r7, #24]
  43788. 80129d6: f000 feaf bl 8013738 <xQueueReceiveFromISR>
  43789. 80129da: 4603 mov r3, r0
  43790. 80129dc: 2b01 cmp r3, #1
  43791. 80129de: d003 beq.n 80129e8 <osMessageQueueGet+0x5c>
  43792. stat = osErrorResource;
  43793. 80129e0: f06f 0302 mvn.w r3, #2
  43794. 80129e4: 61fb str r3, [r7, #28]
  43795. 80129e6: e027 b.n 8012a38 <osMessageQueueGet+0xac>
  43796. } else {
  43797. portYIELD_FROM_ISR (yield);
  43798. 80129e8: 693b ldr r3, [r7, #16]
  43799. 80129ea: 2b00 cmp r3, #0
  43800. 80129ec: d024 beq.n 8012a38 <osMessageQueueGet+0xac>
  43801. 80129ee: 4b15 ldr r3, [pc, #84] @ (8012a44 <osMessageQueueGet+0xb8>)
  43802. 80129f0: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  43803. 80129f4: 601a str r2, [r3, #0]
  43804. 80129f6: f3bf 8f4f dsb sy
  43805. 80129fa: f3bf 8f6f isb sy
  43806. 80129fe: e01b b.n 8012a38 <osMessageQueueGet+0xac>
  43807. }
  43808. }
  43809. }
  43810. else {
  43811. if ((hQueue == NULL) || (msg_ptr == NULL)) {
  43812. 8012a00: 69bb ldr r3, [r7, #24]
  43813. 8012a02: 2b00 cmp r3, #0
  43814. 8012a04: d002 beq.n 8012a0c <osMessageQueueGet+0x80>
  43815. 8012a06: 68bb ldr r3, [r7, #8]
  43816. 8012a08: 2b00 cmp r3, #0
  43817. 8012a0a: d103 bne.n 8012a14 <osMessageQueueGet+0x88>
  43818. stat = osErrorParameter;
  43819. 8012a0c: f06f 0303 mvn.w r3, #3
  43820. 8012a10: 61fb str r3, [r7, #28]
  43821. 8012a12: e011 b.n 8012a38 <osMessageQueueGet+0xac>
  43822. }
  43823. else {
  43824. if (xQueueReceive (hQueue, msg_ptr, (TickType_t)timeout) != pdPASS) {
  43825. 8012a14: 683a ldr r2, [r7, #0]
  43826. 8012a16: 68b9 ldr r1, [r7, #8]
  43827. 8012a18: 69b8 ldr r0, [r7, #24]
  43828. 8012a1a: f000 fc9b bl 8013354 <xQueueReceive>
  43829. 8012a1e: 4603 mov r3, r0
  43830. 8012a20: 2b01 cmp r3, #1
  43831. 8012a22: d009 beq.n 8012a38 <osMessageQueueGet+0xac>
  43832. if (timeout != 0U) {
  43833. 8012a24: 683b ldr r3, [r7, #0]
  43834. 8012a26: 2b00 cmp r3, #0
  43835. 8012a28: d003 beq.n 8012a32 <osMessageQueueGet+0xa6>
  43836. stat = osErrorTimeout;
  43837. 8012a2a: f06f 0301 mvn.w r3, #1
  43838. 8012a2e: 61fb str r3, [r7, #28]
  43839. 8012a30: e002 b.n 8012a38 <osMessageQueueGet+0xac>
  43840. } else {
  43841. stat = osErrorResource;
  43842. 8012a32: f06f 0302 mvn.w r3, #2
  43843. 8012a36: 61fb str r3, [r7, #28]
  43844. }
  43845. }
  43846. }
  43847. }
  43848. return (stat);
  43849. 8012a38: 69fb ldr r3, [r7, #28]
  43850. }
  43851. 8012a3a: 4618 mov r0, r3
  43852. 8012a3c: 3720 adds r7, #32
  43853. 8012a3e: 46bd mov sp, r7
  43854. 8012a40: bd80 pop {r7, pc}
  43855. 8012a42: bf00 nop
  43856. 8012a44: e000ed04 .word 0xe000ed04
  43857. 08012a48 <vApplicationGetIdleTaskMemory>:
  43858. /*
  43859. vApplicationGetIdleTaskMemory gets called when configSUPPORT_STATIC_ALLOCATION
  43860. equals to 1 and is required for static memory allocation support.
  43861. */
  43862. __WEAK void vApplicationGetIdleTaskMemory (StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize) {
  43863. 8012a48: b480 push {r7}
  43864. 8012a4a: b085 sub sp, #20
  43865. 8012a4c: af00 add r7, sp, #0
  43866. 8012a4e: 60f8 str r0, [r7, #12]
  43867. 8012a50: 60b9 str r1, [r7, #8]
  43868. 8012a52: 607a str r2, [r7, #4]
  43869. /* Idle task control block and stack */
  43870. static StaticTask_t Idle_TCB;
  43871. static StackType_t Idle_Stack[configMINIMAL_STACK_SIZE];
  43872. *ppxIdleTaskTCBBuffer = &Idle_TCB;
  43873. 8012a54: 68fb ldr r3, [r7, #12]
  43874. 8012a56: 4a07 ldr r2, [pc, #28] @ (8012a74 <vApplicationGetIdleTaskMemory+0x2c>)
  43875. 8012a58: 601a str r2, [r3, #0]
  43876. *ppxIdleTaskStackBuffer = &Idle_Stack[0];
  43877. 8012a5a: 68bb ldr r3, [r7, #8]
  43878. 8012a5c: 4a06 ldr r2, [pc, #24] @ (8012a78 <vApplicationGetIdleTaskMemory+0x30>)
  43879. 8012a5e: 601a str r2, [r3, #0]
  43880. *pulIdleTaskStackSize = (uint32_t)configMINIMAL_STACK_SIZE;
  43881. 8012a60: 687b ldr r3, [r7, #4]
  43882. 8012a62: f44f 7200 mov.w r2, #512 @ 0x200
  43883. 8012a66: 601a str r2, [r3, #0]
  43884. }
  43885. 8012a68: bf00 nop
  43886. 8012a6a: 3714 adds r7, #20
  43887. 8012a6c: 46bd mov sp, r7
  43888. 8012a6e: f85d 7b04 ldr.w r7, [sp], #4
  43889. 8012a72: 4770 bx lr
  43890. 8012a74: 24000c14 .word 0x24000c14
  43891. 8012a78: 24000cbc .word 0x24000cbc
  43892. 08012a7c <vApplicationGetTimerTaskMemory>:
  43893. /*
  43894. vApplicationGetTimerTaskMemory gets called when configSUPPORT_STATIC_ALLOCATION
  43895. equals to 1 and is required for static memory allocation support.
  43896. */
  43897. __WEAK void vApplicationGetTimerTaskMemory (StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize) {
  43898. 8012a7c: b480 push {r7}
  43899. 8012a7e: b085 sub sp, #20
  43900. 8012a80: af00 add r7, sp, #0
  43901. 8012a82: 60f8 str r0, [r7, #12]
  43902. 8012a84: 60b9 str r1, [r7, #8]
  43903. 8012a86: 607a str r2, [r7, #4]
  43904. /* Timer task control block and stack */
  43905. static StaticTask_t Timer_TCB;
  43906. static StackType_t Timer_Stack[configTIMER_TASK_STACK_DEPTH];
  43907. *ppxTimerTaskTCBBuffer = &Timer_TCB;
  43908. 8012a88: 68fb ldr r3, [r7, #12]
  43909. 8012a8a: 4a07 ldr r2, [pc, #28] @ (8012aa8 <vApplicationGetTimerTaskMemory+0x2c>)
  43910. 8012a8c: 601a str r2, [r3, #0]
  43911. *ppxTimerTaskStackBuffer = &Timer_Stack[0];
  43912. 8012a8e: 68bb ldr r3, [r7, #8]
  43913. 8012a90: 4a06 ldr r2, [pc, #24] @ (8012aac <vApplicationGetTimerTaskMemory+0x30>)
  43914. 8012a92: 601a str r2, [r3, #0]
  43915. *pulTimerTaskStackSize = (uint32_t)configTIMER_TASK_STACK_DEPTH;
  43916. 8012a94: 687b ldr r3, [r7, #4]
  43917. 8012a96: f44f 6280 mov.w r2, #1024 @ 0x400
  43918. 8012a9a: 601a str r2, [r3, #0]
  43919. }
  43920. 8012a9c: bf00 nop
  43921. 8012a9e: 3714 adds r7, #20
  43922. 8012aa0: 46bd mov sp, r7
  43923. 8012aa2: f85d 7b04 ldr.w r7, [sp], #4
  43924. 8012aa6: 4770 bx lr
  43925. 8012aa8: 240014bc .word 0x240014bc
  43926. 8012aac: 24001564 .word 0x24001564
  43927. 08012ab0 <vListInitialise>:
  43928. /*-----------------------------------------------------------
  43929. * PUBLIC LIST API documented in list.h
  43930. *----------------------------------------------------------*/
  43931. void vListInitialise( List_t * const pxList )
  43932. {
  43933. 8012ab0: b480 push {r7}
  43934. 8012ab2: b083 sub sp, #12
  43935. 8012ab4: af00 add r7, sp, #0
  43936. 8012ab6: 6078 str r0, [r7, #4]
  43937. /* The list structure contains a list item which is used to mark the
  43938. end of the list. To initialise the list the list end is inserted
  43939. as the only list entry. */
  43940. 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. */
  43941. 8012ab8: 687b ldr r3, [r7, #4]
  43942. 8012aba: f103 0208 add.w r2, r3, #8
  43943. 8012abe: 687b ldr r3, [r7, #4]
  43944. 8012ac0: 605a str r2, [r3, #4]
  43945. /* The list end value is the highest possible value in the list to
  43946. ensure it remains at the end of the list. */
  43947. pxList->xListEnd.xItemValue = portMAX_DELAY;
  43948. 8012ac2: 687b ldr r3, [r7, #4]
  43949. 8012ac4: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  43950. 8012ac8: 609a str r2, [r3, #8]
  43951. /* The list end next and previous pointers point to itself so we know
  43952. when the list is empty. */
  43953. 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. */
  43954. 8012aca: 687b ldr r3, [r7, #4]
  43955. 8012acc: f103 0208 add.w r2, r3, #8
  43956. 8012ad0: 687b ldr r3, [r7, #4]
  43957. 8012ad2: 60da str r2, [r3, #12]
  43958. 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. */
  43959. 8012ad4: 687b ldr r3, [r7, #4]
  43960. 8012ad6: f103 0208 add.w r2, r3, #8
  43961. 8012ada: 687b ldr r3, [r7, #4]
  43962. 8012adc: 611a str r2, [r3, #16]
  43963. pxList->uxNumberOfItems = ( UBaseType_t ) 0U;
  43964. 8012ade: 687b ldr r3, [r7, #4]
  43965. 8012ae0: 2200 movs r2, #0
  43966. 8012ae2: 601a str r2, [r3, #0]
  43967. /* Write known values into the list if
  43968. configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
  43969. listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList );
  43970. listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList );
  43971. }
  43972. 8012ae4: bf00 nop
  43973. 8012ae6: 370c adds r7, #12
  43974. 8012ae8: 46bd mov sp, r7
  43975. 8012aea: f85d 7b04 ldr.w r7, [sp], #4
  43976. 8012aee: 4770 bx lr
  43977. 08012af0 <vListInitialiseItem>:
  43978. /*-----------------------------------------------------------*/
  43979. void vListInitialiseItem( ListItem_t * const pxItem )
  43980. {
  43981. 8012af0: b480 push {r7}
  43982. 8012af2: b083 sub sp, #12
  43983. 8012af4: af00 add r7, sp, #0
  43984. 8012af6: 6078 str r0, [r7, #4]
  43985. /* Make sure the list item is not recorded as being on a list. */
  43986. pxItem->pxContainer = NULL;
  43987. 8012af8: 687b ldr r3, [r7, #4]
  43988. 8012afa: 2200 movs r2, #0
  43989. 8012afc: 611a str r2, [r3, #16]
  43990. /* Write known values into the list item if
  43991. configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
  43992. listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
  43993. listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
  43994. }
  43995. 8012afe: bf00 nop
  43996. 8012b00: 370c adds r7, #12
  43997. 8012b02: 46bd mov sp, r7
  43998. 8012b04: f85d 7b04 ldr.w r7, [sp], #4
  43999. 8012b08: 4770 bx lr
  44000. 08012b0a <vListInsertEnd>:
  44001. /*-----------------------------------------------------------*/
  44002. void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem )
  44003. {
  44004. 8012b0a: b480 push {r7}
  44005. 8012b0c: b085 sub sp, #20
  44006. 8012b0e: af00 add r7, sp, #0
  44007. 8012b10: 6078 str r0, [r7, #4]
  44008. 8012b12: 6039 str r1, [r7, #0]
  44009. ListItem_t * const pxIndex = pxList->pxIndex;
  44010. 8012b14: 687b ldr r3, [r7, #4]
  44011. 8012b16: 685b ldr r3, [r3, #4]
  44012. 8012b18: 60fb str r3, [r7, #12]
  44013. listTEST_LIST_ITEM_INTEGRITY( pxNewListItem );
  44014. /* Insert a new list item into pxList, but rather than sort the list,
  44015. makes the new list item the last item to be removed by a call to
  44016. listGET_OWNER_OF_NEXT_ENTRY(). */
  44017. pxNewListItem->pxNext = pxIndex;
  44018. 8012b1a: 683b ldr r3, [r7, #0]
  44019. 8012b1c: 68fa ldr r2, [r7, #12]
  44020. 8012b1e: 605a str r2, [r3, #4]
  44021. pxNewListItem->pxPrevious = pxIndex->pxPrevious;
  44022. 8012b20: 68fb ldr r3, [r7, #12]
  44023. 8012b22: 689a ldr r2, [r3, #8]
  44024. 8012b24: 683b ldr r3, [r7, #0]
  44025. 8012b26: 609a str r2, [r3, #8]
  44026. /* Only used during decision coverage testing. */
  44027. mtCOVERAGE_TEST_DELAY();
  44028. pxIndex->pxPrevious->pxNext = pxNewListItem;
  44029. 8012b28: 68fb ldr r3, [r7, #12]
  44030. 8012b2a: 689b ldr r3, [r3, #8]
  44031. 8012b2c: 683a ldr r2, [r7, #0]
  44032. 8012b2e: 605a str r2, [r3, #4]
  44033. pxIndex->pxPrevious = pxNewListItem;
  44034. 8012b30: 68fb ldr r3, [r7, #12]
  44035. 8012b32: 683a ldr r2, [r7, #0]
  44036. 8012b34: 609a str r2, [r3, #8]
  44037. /* Remember which list the item is in. */
  44038. pxNewListItem->pxContainer = pxList;
  44039. 8012b36: 683b ldr r3, [r7, #0]
  44040. 8012b38: 687a ldr r2, [r7, #4]
  44041. 8012b3a: 611a str r2, [r3, #16]
  44042. ( pxList->uxNumberOfItems )++;
  44043. 8012b3c: 687b ldr r3, [r7, #4]
  44044. 8012b3e: 681b ldr r3, [r3, #0]
  44045. 8012b40: 1c5a adds r2, r3, #1
  44046. 8012b42: 687b ldr r3, [r7, #4]
  44047. 8012b44: 601a str r2, [r3, #0]
  44048. }
  44049. 8012b46: bf00 nop
  44050. 8012b48: 3714 adds r7, #20
  44051. 8012b4a: 46bd mov sp, r7
  44052. 8012b4c: f85d 7b04 ldr.w r7, [sp], #4
  44053. 8012b50: 4770 bx lr
  44054. 08012b52 <vListInsert>:
  44055. /*-----------------------------------------------------------*/
  44056. void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem )
  44057. {
  44058. 8012b52: b480 push {r7}
  44059. 8012b54: b085 sub sp, #20
  44060. 8012b56: af00 add r7, sp, #0
  44061. 8012b58: 6078 str r0, [r7, #4]
  44062. 8012b5a: 6039 str r1, [r7, #0]
  44063. ListItem_t *pxIterator;
  44064. const TickType_t xValueOfInsertion = pxNewListItem->xItemValue;
  44065. 8012b5c: 683b ldr r3, [r7, #0]
  44066. 8012b5e: 681b ldr r3, [r3, #0]
  44067. 8012b60: 60bb str r3, [r7, #8]
  44068. new list item should be placed after it. This ensures that TCBs which are
  44069. stored in ready lists (all of which have the same xItemValue value) get a
  44070. share of the CPU. However, if the xItemValue is the same as the back marker
  44071. the iteration loop below will not end. Therefore the value is checked
  44072. first, and the algorithm slightly modified if necessary. */
  44073. if( xValueOfInsertion == portMAX_DELAY )
  44074. 8012b62: 68bb ldr r3, [r7, #8]
  44075. 8012b64: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  44076. 8012b68: d103 bne.n 8012b72 <vListInsert+0x20>
  44077. {
  44078. pxIterator = pxList->xListEnd.pxPrevious;
  44079. 8012b6a: 687b ldr r3, [r7, #4]
  44080. 8012b6c: 691b ldr r3, [r3, #16]
  44081. 8012b6e: 60fb str r3, [r7, #12]
  44082. 8012b70: e00c b.n 8012b8c <vListInsert+0x3a>
  44083. 4) Using a queue or semaphore before it has been initialised or
  44084. before the scheduler has been started (are interrupts firing
  44085. before vTaskStartScheduler() has been called?).
  44086. **********************************************************************/
  44087. 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. */
  44088. 8012b72: 687b ldr r3, [r7, #4]
  44089. 8012b74: 3308 adds r3, #8
  44090. 8012b76: 60fb str r3, [r7, #12]
  44091. 8012b78: e002 b.n 8012b80 <vListInsert+0x2e>
  44092. 8012b7a: 68fb ldr r3, [r7, #12]
  44093. 8012b7c: 685b ldr r3, [r3, #4]
  44094. 8012b7e: 60fb str r3, [r7, #12]
  44095. 8012b80: 68fb ldr r3, [r7, #12]
  44096. 8012b82: 685b ldr r3, [r3, #4]
  44097. 8012b84: 681b ldr r3, [r3, #0]
  44098. 8012b86: 68ba ldr r2, [r7, #8]
  44099. 8012b88: 429a cmp r2, r3
  44100. 8012b8a: d2f6 bcs.n 8012b7a <vListInsert+0x28>
  44101. /* There is nothing to do here, just iterating to the wanted
  44102. insertion position. */
  44103. }
  44104. }
  44105. pxNewListItem->pxNext = pxIterator->pxNext;
  44106. 8012b8c: 68fb ldr r3, [r7, #12]
  44107. 8012b8e: 685a ldr r2, [r3, #4]
  44108. 8012b90: 683b ldr r3, [r7, #0]
  44109. 8012b92: 605a str r2, [r3, #4]
  44110. pxNewListItem->pxNext->pxPrevious = pxNewListItem;
  44111. 8012b94: 683b ldr r3, [r7, #0]
  44112. 8012b96: 685b ldr r3, [r3, #4]
  44113. 8012b98: 683a ldr r2, [r7, #0]
  44114. 8012b9a: 609a str r2, [r3, #8]
  44115. pxNewListItem->pxPrevious = pxIterator;
  44116. 8012b9c: 683b ldr r3, [r7, #0]
  44117. 8012b9e: 68fa ldr r2, [r7, #12]
  44118. 8012ba0: 609a str r2, [r3, #8]
  44119. pxIterator->pxNext = pxNewListItem;
  44120. 8012ba2: 68fb ldr r3, [r7, #12]
  44121. 8012ba4: 683a ldr r2, [r7, #0]
  44122. 8012ba6: 605a str r2, [r3, #4]
  44123. /* Remember which list the item is in. This allows fast removal of the
  44124. item later. */
  44125. pxNewListItem->pxContainer = pxList;
  44126. 8012ba8: 683b ldr r3, [r7, #0]
  44127. 8012baa: 687a ldr r2, [r7, #4]
  44128. 8012bac: 611a str r2, [r3, #16]
  44129. ( pxList->uxNumberOfItems )++;
  44130. 8012bae: 687b ldr r3, [r7, #4]
  44131. 8012bb0: 681b ldr r3, [r3, #0]
  44132. 8012bb2: 1c5a adds r2, r3, #1
  44133. 8012bb4: 687b ldr r3, [r7, #4]
  44134. 8012bb6: 601a str r2, [r3, #0]
  44135. }
  44136. 8012bb8: bf00 nop
  44137. 8012bba: 3714 adds r7, #20
  44138. 8012bbc: 46bd mov sp, r7
  44139. 8012bbe: f85d 7b04 ldr.w r7, [sp], #4
  44140. 8012bc2: 4770 bx lr
  44141. 08012bc4 <uxListRemove>:
  44142. /*-----------------------------------------------------------*/
  44143. UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove )
  44144. {
  44145. 8012bc4: b480 push {r7}
  44146. 8012bc6: b085 sub sp, #20
  44147. 8012bc8: af00 add r7, sp, #0
  44148. 8012bca: 6078 str r0, [r7, #4]
  44149. /* The list item knows which list it is in. Obtain the list from the list
  44150. item. */
  44151. List_t * const pxList = pxItemToRemove->pxContainer;
  44152. 8012bcc: 687b ldr r3, [r7, #4]
  44153. 8012bce: 691b ldr r3, [r3, #16]
  44154. 8012bd0: 60fb str r3, [r7, #12]
  44155. pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
  44156. 8012bd2: 687b ldr r3, [r7, #4]
  44157. 8012bd4: 685b ldr r3, [r3, #4]
  44158. 8012bd6: 687a ldr r2, [r7, #4]
  44159. 8012bd8: 6892 ldr r2, [r2, #8]
  44160. 8012bda: 609a str r2, [r3, #8]
  44161. pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;
  44162. 8012bdc: 687b ldr r3, [r7, #4]
  44163. 8012bde: 689b ldr r3, [r3, #8]
  44164. 8012be0: 687a ldr r2, [r7, #4]
  44165. 8012be2: 6852 ldr r2, [r2, #4]
  44166. 8012be4: 605a str r2, [r3, #4]
  44167. /* Only used during decision coverage testing. */
  44168. mtCOVERAGE_TEST_DELAY();
  44169. /* Make sure the index is left pointing to a valid item. */
  44170. if( pxList->pxIndex == pxItemToRemove )
  44171. 8012be6: 68fb ldr r3, [r7, #12]
  44172. 8012be8: 685b ldr r3, [r3, #4]
  44173. 8012bea: 687a ldr r2, [r7, #4]
  44174. 8012bec: 429a cmp r2, r3
  44175. 8012bee: d103 bne.n 8012bf8 <uxListRemove+0x34>
  44176. {
  44177. pxList->pxIndex = pxItemToRemove->pxPrevious;
  44178. 8012bf0: 687b ldr r3, [r7, #4]
  44179. 8012bf2: 689a ldr r2, [r3, #8]
  44180. 8012bf4: 68fb ldr r3, [r7, #12]
  44181. 8012bf6: 605a str r2, [r3, #4]
  44182. else
  44183. {
  44184. mtCOVERAGE_TEST_MARKER();
  44185. }
  44186. pxItemToRemove->pxContainer = NULL;
  44187. 8012bf8: 687b ldr r3, [r7, #4]
  44188. 8012bfa: 2200 movs r2, #0
  44189. 8012bfc: 611a str r2, [r3, #16]
  44190. ( pxList->uxNumberOfItems )--;
  44191. 8012bfe: 68fb ldr r3, [r7, #12]
  44192. 8012c00: 681b ldr r3, [r3, #0]
  44193. 8012c02: 1e5a subs r2, r3, #1
  44194. 8012c04: 68fb ldr r3, [r7, #12]
  44195. 8012c06: 601a str r2, [r3, #0]
  44196. return pxList->uxNumberOfItems;
  44197. 8012c08: 68fb ldr r3, [r7, #12]
  44198. 8012c0a: 681b ldr r3, [r3, #0]
  44199. }
  44200. 8012c0c: 4618 mov r0, r3
  44201. 8012c0e: 3714 adds r7, #20
  44202. 8012c10: 46bd mov sp, r7
  44203. 8012c12: f85d 7b04 ldr.w r7, [sp], #4
  44204. 8012c16: 4770 bx lr
  44205. 08012c18 <xQueueGenericReset>:
  44206. } \
  44207. taskEXIT_CRITICAL()
  44208. /*-----------------------------------------------------------*/
  44209. BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue )
  44210. {
  44211. 8012c18: b580 push {r7, lr}
  44212. 8012c1a: b084 sub sp, #16
  44213. 8012c1c: af00 add r7, sp, #0
  44214. 8012c1e: 6078 str r0, [r7, #4]
  44215. 8012c20: 6039 str r1, [r7, #0]
  44216. Queue_t * const pxQueue = xQueue;
  44217. 8012c22: 687b ldr r3, [r7, #4]
  44218. 8012c24: 60fb str r3, [r7, #12]
  44219. configASSERT( pxQueue );
  44220. 8012c26: 68fb ldr r3, [r7, #12]
  44221. 8012c28: 2b00 cmp r3, #0
  44222. 8012c2a: d10b bne.n 8012c44 <xQueueGenericReset+0x2c>
  44223. portFORCE_INLINE static void vPortRaiseBASEPRI( void )
  44224. {
  44225. uint32_t ulNewBASEPRI;
  44226. __asm volatile
  44227. 8012c2c: f04f 0350 mov.w r3, #80 @ 0x50
  44228. 8012c30: f383 8811 msr BASEPRI, r3
  44229. 8012c34: f3bf 8f6f isb sy
  44230. 8012c38: f3bf 8f4f dsb sy
  44231. 8012c3c: 60bb str r3, [r7, #8]
  44232. " msr basepri, %0 \n" \
  44233. " isb \n" \
  44234. " dsb \n" \
  44235. :"=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory"
  44236. );
  44237. }
  44238. 8012c3e: bf00 nop
  44239. 8012c40: bf00 nop
  44240. 8012c42: e7fd b.n 8012c40 <xQueueGenericReset+0x28>
  44241. taskENTER_CRITICAL();
  44242. 8012c44: f003 f960 bl 8015f08 <vPortEnterCritical>
  44243. {
  44244. pxQueue->u.xQueue.pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */
  44245. 8012c48: 68fb ldr r3, [r7, #12]
  44246. 8012c4a: 681a ldr r2, [r3, #0]
  44247. 8012c4c: 68fb ldr r3, [r7, #12]
  44248. 8012c4e: 6bdb ldr r3, [r3, #60] @ 0x3c
  44249. 8012c50: 68f9 ldr r1, [r7, #12]
  44250. 8012c52: 6c09 ldr r1, [r1, #64] @ 0x40
  44251. 8012c54: fb01 f303 mul.w r3, r1, r3
  44252. 8012c58: 441a add r2, r3
  44253. 8012c5a: 68fb ldr r3, [r7, #12]
  44254. 8012c5c: 609a str r2, [r3, #8]
  44255. pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
  44256. 8012c5e: 68fb ldr r3, [r7, #12]
  44257. 8012c60: 2200 movs r2, #0
  44258. 8012c62: 639a str r2, [r3, #56] @ 0x38
  44259. pxQueue->pcWriteTo = pxQueue->pcHead;
  44260. 8012c64: 68fb ldr r3, [r7, #12]
  44261. 8012c66: 681a ldr r2, [r3, #0]
  44262. 8012c68: 68fb ldr r3, [r7, #12]
  44263. 8012c6a: 605a str r2, [r3, #4]
  44264. 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. */
  44265. 8012c6c: 68fb ldr r3, [r7, #12]
  44266. 8012c6e: 681a ldr r2, [r3, #0]
  44267. 8012c70: 68fb ldr r3, [r7, #12]
  44268. 8012c72: 6bdb ldr r3, [r3, #60] @ 0x3c
  44269. 8012c74: 3b01 subs r3, #1
  44270. 8012c76: 68f9 ldr r1, [r7, #12]
  44271. 8012c78: 6c09 ldr r1, [r1, #64] @ 0x40
  44272. 8012c7a: fb01 f303 mul.w r3, r1, r3
  44273. 8012c7e: 441a add r2, r3
  44274. 8012c80: 68fb ldr r3, [r7, #12]
  44275. 8012c82: 60da str r2, [r3, #12]
  44276. pxQueue->cRxLock = queueUNLOCKED;
  44277. 8012c84: 68fb ldr r3, [r7, #12]
  44278. 8012c86: 22ff movs r2, #255 @ 0xff
  44279. 8012c88: f883 2044 strb.w r2, [r3, #68] @ 0x44
  44280. pxQueue->cTxLock = queueUNLOCKED;
  44281. 8012c8c: 68fb ldr r3, [r7, #12]
  44282. 8012c8e: 22ff movs r2, #255 @ 0xff
  44283. 8012c90: f883 2045 strb.w r2, [r3, #69] @ 0x45
  44284. if( xNewQueue == pdFALSE )
  44285. 8012c94: 683b ldr r3, [r7, #0]
  44286. 8012c96: 2b00 cmp r3, #0
  44287. 8012c98: d114 bne.n 8012cc4 <xQueueGenericReset+0xac>
  44288. /* If there are tasks blocked waiting to read from the queue, then
  44289. the tasks will remain blocked as after this function exits the queue
  44290. will still be empty. If there are tasks blocked waiting to write to
  44291. the queue, then one should be unblocked as after this function exits
  44292. it will be possible to write to it. */
  44293. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  44294. 8012c9a: 68fb ldr r3, [r7, #12]
  44295. 8012c9c: 691b ldr r3, [r3, #16]
  44296. 8012c9e: 2b00 cmp r3, #0
  44297. 8012ca0: d01a beq.n 8012cd8 <xQueueGenericReset+0xc0>
  44298. {
  44299. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  44300. 8012ca2: 68fb ldr r3, [r7, #12]
  44301. 8012ca4: 3310 adds r3, #16
  44302. 8012ca6: 4618 mov r0, r3
  44303. 8012ca8: f001 fdac bl 8014804 <xTaskRemoveFromEventList>
  44304. 8012cac: 4603 mov r3, r0
  44305. 8012cae: 2b00 cmp r3, #0
  44306. 8012cb0: d012 beq.n 8012cd8 <xQueueGenericReset+0xc0>
  44307. {
  44308. queueYIELD_IF_USING_PREEMPTION();
  44309. 8012cb2: 4b0d ldr r3, [pc, #52] @ (8012ce8 <xQueueGenericReset+0xd0>)
  44310. 8012cb4: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  44311. 8012cb8: 601a str r2, [r3, #0]
  44312. 8012cba: f3bf 8f4f dsb sy
  44313. 8012cbe: f3bf 8f6f isb sy
  44314. 8012cc2: e009 b.n 8012cd8 <xQueueGenericReset+0xc0>
  44315. }
  44316. }
  44317. else
  44318. {
  44319. /* Ensure the event queues start in the correct state. */
  44320. vListInitialise( &( pxQueue->xTasksWaitingToSend ) );
  44321. 8012cc4: 68fb ldr r3, [r7, #12]
  44322. 8012cc6: 3310 adds r3, #16
  44323. 8012cc8: 4618 mov r0, r3
  44324. 8012cca: f7ff fef1 bl 8012ab0 <vListInitialise>
  44325. vListInitialise( &( pxQueue->xTasksWaitingToReceive ) );
  44326. 8012cce: 68fb ldr r3, [r7, #12]
  44327. 8012cd0: 3324 adds r3, #36 @ 0x24
  44328. 8012cd2: 4618 mov r0, r3
  44329. 8012cd4: f7ff feec bl 8012ab0 <vListInitialise>
  44330. }
  44331. }
  44332. taskEXIT_CRITICAL();
  44333. 8012cd8: f003 f948 bl 8015f6c <vPortExitCritical>
  44334. /* A value is returned for calling semantic consistency with previous
  44335. versions. */
  44336. return pdPASS;
  44337. 8012cdc: 2301 movs r3, #1
  44338. }
  44339. 8012cde: 4618 mov r0, r3
  44340. 8012ce0: 3710 adds r7, #16
  44341. 8012ce2: 46bd mov sp, r7
  44342. 8012ce4: bd80 pop {r7, pc}
  44343. 8012ce6: bf00 nop
  44344. 8012ce8: e000ed04 .word 0xe000ed04
  44345. 08012cec <xQueueGenericCreateStatic>:
  44346. /*-----------------------------------------------------------*/
  44347. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  44348. QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType )
  44349. {
  44350. 8012cec: b580 push {r7, lr}
  44351. 8012cee: b08e sub sp, #56 @ 0x38
  44352. 8012cf0: af02 add r7, sp, #8
  44353. 8012cf2: 60f8 str r0, [r7, #12]
  44354. 8012cf4: 60b9 str r1, [r7, #8]
  44355. 8012cf6: 607a str r2, [r7, #4]
  44356. 8012cf8: 603b str r3, [r7, #0]
  44357. Queue_t *pxNewQueue;
  44358. configASSERT( uxQueueLength > ( UBaseType_t ) 0 );
  44359. 8012cfa: 68fb ldr r3, [r7, #12]
  44360. 8012cfc: 2b00 cmp r3, #0
  44361. 8012cfe: d10b bne.n 8012d18 <xQueueGenericCreateStatic+0x2c>
  44362. __asm volatile
  44363. 8012d00: f04f 0350 mov.w r3, #80 @ 0x50
  44364. 8012d04: f383 8811 msr BASEPRI, r3
  44365. 8012d08: f3bf 8f6f isb sy
  44366. 8012d0c: f3bf 8f4f dsb sy
  44367. 8012d10: 62bb str r3, [r7, #40] @ 0x28
  44368. }
  44369. 8012d12: bf00 nop
  44370. 8012d14: bf00 nop
  44371. 8012d16: e7fd b.n 8012d14 <xQueueGenericCreateStatic+0x28>
  44372. /* The StaticQueue_t structure and the queue storage area must be
  44373. supplied. */
  44374. configASSERT( pxStaticQueue != NULL );
  44375. 8012d18: 683b ldr r3, [r7, #0]
  44376. 8012d1a: 2b00 cmp r3, #0
  44377. 8012d1c: d10b bne.n 8012d36 <xQueueGenericCreateStatic+0x4a>
  44378. __asm volatile
  44379. 8012d1e: f04f 0350 mov.w r3, #80 @ 0x50
  44380. 8012d22: f383 8811 msr BASEPRI, r3
  44381. 8012d26: f3bf 8f6f isb sy
  44382. 8012d2a: f3bf 8f4f dsb sy
  44383. 8012d2e: 627b str r3, [r7, #36] @ 0x24
  44384. }
  44385. 8012d30: bf00 nop
  44386. 8012d32: bf00 nop
  44387. 8012d34: e7fd b.n 8012d32 <xQueueGenericCreateStatic+0x46>
  44388. /* A queue storage area should be provided if the item size is not 0, and
  44389. should not be provided if the item size is 0. */
  44390. configASSERT( !( ( pucQueueStorage != NULL ) && ( uxItemSize == 0 ) ) );
  44391. 8012d36: 687b ldr r3, [r7, #4]
  44392. 8012d38: 2b00 cmp r3, #0
  44393. 8012d3a: d002 beq.n 8012d42 <xQueueGenericCreateStatic+0x56>
  44394. 8012d3c: 68bb ldr r3, [r7, #8]
  44395. 8012d3e: 2b00 cmp r3, #0
  44396. 8012d40: d001 beq.n 8012d46 <xQueueGenericCreateStatic+0x5a>
  44397. 8012d42: 2301 movs r3, #1
  44398. 8012d44: e000 b.n 8012d48 <xQueueGenericCreateStatic+0x5c>
  44399. 8012d46: 2300 movs r3, #0
  44400. 8012d48: 2b00 cmp r3, #0
  44401. 8012d4a: d10b bne.n 8012d64 <xQueueGenericCreateStatic+0x78>
  44402. __asm volatile
  44403. 8012d4c: f04f 0350 mov.w r3, #80 @ 0x50
  44404. 8012d50: f383 8811 msr BASEPRI, r3
  44405. 8012d54: f3bf 8f6f isb sy
  44406. 8012d58: f3bf 8f4f dsb sy
  44407. 8012d5c: 623b str r3, [r7, #32]
  44408. }
  44409. 8012d5e: bf00 nop
  44410. 8012d60: bf00 nop
  44411. 8012d62: e7fd b.n 8012d60 <xQueueGenericCreateStatic+0x74>
  44412. configASSERT( !( ( pucQueueStorage == NULL ) && ( uxItemSize != 0 ) ) );
  44413. 8012d64: 687b ldr r3, [r7, #4]
  44414. 8012d66: 2b00 cmp r3, #0
  44415. 8012d68: d102 bne.n 8012d70 <xQueueGenericCreateStatic+0x84>
  44416. 8012d6a: 68bb ldr r3, [r7, #8]
  44417. 8012d6c: 2b00 cmp r3, #0
  44418. 8012d6e: d101 bne.n 8012d74 <xQueueGenericCreateStatic+0x88>
  44419. 8012d70: 2301 movs r3, #1
  44420. 8012d72: e000 b.n 8012d76 <xQueueGenericCreateStatic+0x8a>
  44421. 8012d74: 2300 movs r3, #0
  44422. 8012d76: 2b00 cmp r3, #0
  44423. 8012d78: d10b bne.n 8012d92 <xQueueGenericCreateStatic+0xa6>
  44424. __asm volatile
  44425. 8012d7a: f04f 0350 mov.w r3, #80 @ 0x50
  44426. 8012d7e: f383 8811 msr BASEPRI, r3
  44427. 8012d82: f3bf 8f6f isb sy
  44428. 8012d86: f3bf 8f4f dsb sy
  44429. 8012d8a: 61fb str r3, [r7, #28]
  44430. }
  44431. 8012d8c: bf00 nop
  44432. 8012d8e: bf00 nop
  44433. 8012d90: e7fd b.n 8012d8e <xQueueGenericCreateStatic+0xa2>
  44434. #if( configASSERT_DEFINED == 1 )
  44435. {
  44436. /* Sanity check that the size of the structure used to declare a
  44437. variable of type StaticQueue_t or StaticSemaphore_t equals the size of
  44438. the real queue and semaphore structures. */
  44439. volatile size_t xSize = sizeof( StaticQueue_t );
  44440. 8012d92: 2350 movs r3, #80 @ 0x50
  44441. 8012d94: 617b str r3, [r7, #20]
  44442. configASSERT( xSize == sizeof( Queue_t ) );
  44443. 8012d96: 697b ldr r3, [r7, #20]
  44444. 8012d98: 2b50 cmp r3, #80 @ 0x50
  44445. 8012d9a: d00b beq.n 8012db4 <xQueueGenericCreateStatic+0xc8>
  44446. __asm volatile
  44447. 8012d9c: f04f 0350 mov.w r3, #80 @ 0x50
  44448. 8012da0: f383 8811 msr BASEPRI, r3
  44449. 8012da4: f3bf 8f6f isb sy
  44450. 8012da8: f3bf 8f4f dsb sy
  44451. 8012dac: 61bb str r3, [r7, #24]
  44452. }
  44453. 8012dae: bf00 nop
  44454. 8012db0: bf00 nop
  44455. 8012db2: e7fd b.n 8012db0 <xQueueGenericCreateStatic+0xc4>
  44456. ( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */
  44457. 8012db4: 697b ldr r3, [r7, #20]
  44458. #endif /* configASSERT_DEFINED */
  44459. /* The address of a statically allocated queue was passed in, use it.
  44460. The address of a statically allocated storage area was also passed in
  44461. but is already set. */
  44462. 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. */
  44463. 8012db6: 683b ldr r3, [r7, #0]
  44464. 8012db8: 62fb str r3, [r7, #44] @ 0x2c
  44465. if( pxNewQueue != NULL )
  44466. 8012dba: 6afb ldr r3, [r7, #44] @ 0x2c
  44467. 8012dbc: 2b00 cmp r3, #0
  44468. 8012dbe: d00d beq.n 8012ddc <xQueueGenericCreateStatic+0xf0>
  44469. #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  44470. {
  44471. /* Queues can be allocated wither statically or dynamically, so
  44472. note this queue was allocated statically in case the queue is
  44473. later deleted. */
  44474. pxNewQueue->ucStaticallyAllocated = pdTRUE;
  44475. 8012dc0: 6afb ldr r3, [r7, #44] @ 0x2c
  44476. 8012dc2: 2201 movs r2, #1
  44477. 8012dc4: f883 2046 strb.w r2, [r3, #70] @ 0x46
  44478. }
  44479. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  44480. prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue );
  44481. 8012dc8: f897 2038 ldrb.w r2, [r7, #56] @ 0x38
  44482. 8012dcc: 6afb ldr r3, [r7, #44] @ 0x2c
  44483. 8012dce: 9300 str r3, [sp, #0]
  44484. 8012dd0: 4613 mov r3, r2
  44485. 8012dd2: 687a ldr r2, [r7, #4]
  44486. 8012dd4: 68b9 ldr r1, [r7, #8]
  44487. 8012dd6: 68f8 ldr r0, [r7, #12]
  44488. 8012dd8: f000 f840 bl 8012e5c <prvInitialiseNewQueue>
  44489. {
  44490. traceQUEUE_CREATE_FAILED( ucQueueType );
  44491. mtCOVERAGE_TEST_MARKER();
  44492. }
  44493. return pxNewQueue;
  44494. 8012ddc: 6afb ldr r3, [r7, #44] @ 0x2c
  44495. }
  44496. 8012dde: 4618 mov r0, r3
  44497. 8012de0: 3730 adds r7, #48 @ 0x30
  44498. 8012de2: 46bd mov sp, r7
  44499. 8012de4: bd80 pop {r7, pc}
  44500. 08012de6 <xQueueGenericCreate>:
  44501. /*-----------------------------------------------------------*/
  44502. #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  44503. QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType )
  44504. {
  44505. 8012de6: b580 push {r7, lr}
  44506. 8012de8: b08a sub sp, #40 @ 0x28
  44507. 8012dea: af02 add r7, sp, #8
  44508. 8012dec: 60f8 str r0, [r7, #12]
  44509. 8012dee: 60b9 str r1, [r7, #8]
  44510. 8012df0: 4613 mov r3, r2
  44511. 8012df2: 71fb strb r3, [r7, #7]
  44512. Queue_t *pxNewQueue;
  44513. size_t xQueueSizeInBytes;
  44514. uint8_t *pucQueueStorage;
  44515. configASSERT( uxQueueLength > ( UBaseType_t ) 0 );
  44516. 8012df4: 68fb ldr r3, [r7, #12]
  44517. 8012df6: 2b00 cmp r3, #0
  44518. 8012df8: d10b bne.n 8012e12 <xQueueGenericCreate+0x2c>
  44519. __asm volatile
  44520. 8012dfa: f04f 0350 mov.w r3, #80 @ 0x50
  44521. 8012dfe: f383 8811 msr BASEPRI, r3
  44522. 8012e02: f3bf 8f6f isb sy
  44523. 8012e06: f3bf 8f4f dsb sy
  44524. 8012e0a: 613b str r3, [r7, #16]
  44525. }
  44526. 8012e0c: bf00 nop
  44527. 8012e0e: bf00 nop
  44528. 8012e10: e7fd b.n 8012e0e <xQueueGenericCreate+0x28>
  44529. /* Allocate enough space to hold the maximum number of items that
  44530. can be in the queue at any time. It is valid for uxItemSize to be
  44531. zero in the case the queue is used as a semaphore. */
  44532. xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  44533. 8012e12: 68fb ldr r3, [r7, #12]
  44534. 8012e14: 68ba ldr r2, [r7, #8]
  44535. 8012e16: fb02 f303 mul.w r3, r2, r3
  44536. 8012e1a: 61fb str r3, [r7, #28]
  44537. alignment requirements of the Queue_t structure - which in this case
  44538. is an int8_t *. Therefore, whenever the stack alignment requirements
  44539. are greater than or equal to the pointer to char requirements the cast
  44540. is safe. In other cases alignment requirements are not strict (one or
  44541. two bytes). */
  44542. pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) + xQueueSizeInBytes ); /*lint !e9087 !e9079 see comment above. */
  44543. 8012e1c: 69fb ldr r3, [r7, #28]
  44544. 8012e1e: 3350 adds r3, #80 @ 0x50
  44545. 8012e20: 4618 mov r0, r3
  44546. 8012e22: f003 f993 bl 801614c <pvPortMalloc>
  44547. 8012e26: 61b8 str r0, [r7, #24]
  44548. if( pxNewQueue != NULL )
  44549. 8012e28: 69bb ldr r3, [r7, #24]
  44550. 8012e2a: 2b00 cmp r3, #0
  44551. 8012e2c: d011 beq.n 8012e52 <xQueueGenericCreate+0x6c>
  44552. {
  44553. /* Jump past the queue structure to find the location of the queue
  44554. storage area. */
  44555. pucQueueStorage = ( uint8_t * ) pxNewQueue;
  44556. 8012e2e: 69bb ldr r3, [r7, #24]
  44557. 8012e30: 617b str r3, [r7, #20]
  44558. pucQueueStorage += sizeof( Queue_t ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */
  44559. 8012e32: 697b ldr r3, [r7, #20]
  44560. 8012e34: 3350 adds r3, #80 @ 0x50
  44561. 8012e36: 617b str r3, [r7, #20]
  44562. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  44563. {
  44564. /* Queues can be created either statically or dynamically, so
  44565. note this task was created dynamically in case it is later
  44566. deleted. */
  44567. pxNewQueue->ucStaticallyAllocated = pdFALSE;
  44568. 8012e38: 69bb ldr r3, [r7, #24]
  44569. 8012e3a: 2200 movs r2, #0
  44570. 8012e3c: f883 2046 strb.w r2, [r3, #70] @ 0x46
  44571. }
  44572. #endif /* configSUPPORT_STATIC_ALLOCATION */
  44573. prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue );
  44574. 8012e40: 79fa ldrb r2, [r7, #7]
  44575. 8012e42: 69bb ldr r3, [r7, #24]
  44576. 8012e44: 9300 str r3, [sp, #0]
  44577. 8012e46: 4613 mov r3, r2
  44578. 8012e48: 697a ldr r2, [r7, #20]
  44579. 8012e4a: 68b9 ldr r1, [r7, #8]
  44580. 8012e4c: 68f8 ldr r0, [r7, #12]
  44581. 8012e4e: f000 f805 bl 8012e5c <prvInitialiseNewQueue>
  44582. {
  44583. traceQUEUE_CREATE_FAILED( ucQueueType );
  44584. mtCOVERAGE_TEST_MARKER();
  44585. }
  44586. return pxNewQueue;
  44587. 8012e52: 69bb ldr r3, [r7, #24]
  44588. }
  44589. 8012e54: 4618 mov r0, r3
  44590. 8012e56: 3720 adds r7, #32
  44591. 8012e58: 46bd mov sp, r7
  44592. 8012e5a: bd80 pop {r7, pc}
  44593. 08012e5c <prvInitialiseNewQueue>:
  44594. #endif /* configSUPPORT_STATIC_ALLOCATION */
  44595. /*-----------------------------------------------------------*/
  44596. static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, const uint8_t ucQueueType, Queue_t *pxNewQueue )
  44597. {
  44598. 8012e5c: b580 push {r7, lr}
  44599. 8012e5e: b084 sub sp, #16
  44600. 8012e60: af00 add r7, sp, #0
  44601. 8012e62: 60f8 str r0, [r7, #12]
  44602. 8012e64: 60b9 str r1, [r7, #8]
  44603. 8012e66: 607a str r2, [r7, #4]
  44604. 8012e68: 70fb strb r3, [r7, #3]
  44605. /* Remove compiler warnings about unused parameters should
  44606. configUSE_TRACE_FACILITY not be set to 1. */
  44607. ( void ) ucQueueType;
  44608. if( uxItemSize == ( UBaseType_t ) 0 )
  44609. 8012e6a: 68bb ldr r3, [r7, #8]
  44610. 8012e6c: 2b00 cmp r3, #0
  44611. 8012e6e: d103 bne.n 8012e78 <prvInitialiseNewQueue+0x1c>
  44612. {
  44613. /* No RAM was allocated for the queue storage area, but PC head cannot
  44614. be set to NULL because NULL is used as a key to say the queue is used as
  44615. a mutex. Therefore just set pcHead to point to the queue as a benign
  44616. value that is known to be within the memory map. */
  44617. pxNewQueue->pcHead = ( int8_t * ) pxNewQueue;
  44618. 8012e70: 69bb ldr r3, [r7, #24]
  44619. 8012e72: 69ba ldr r2, [r7, #24]
  44620. 8012e74: 601a str r2, [r3, #0]
  44621. 8012e76: e002 b.n 8012e7e <prvInitialiseNewQueue+0x22>
  44622. }
  44623. else
  44624. {
  44625. /* Set the head to the start of the queue storage area. */
  44626. pxNewQueue->pcHead = ( int8_t * ) pucQueueStorage;
  44627. 8012e78: 69bb ldr r3, [r7, #24]
  44628. 8012e7a: 687a ldr r2, [r7, #4]
  44629. 8012e7c: 601a str r2, [r3, #0]
  44630. }
  44631. /* Initialise the queue members as described where the queue type is
  44632. defined. */
  44633. pxNewQueue->uxLength = uxQueueLength;
  44634. 8012e7e: 69bb ldr r3, [r7, #24]
  44635. 8012e80: 68fa ldr r2, [r7, #12]
  44636. 8012e82: 63da str r2, [r3, #60] @ 0x3c
  44637. pxNewQueue->uxItemSize = uxItemSize;
  44638. 8012e84: 69bb ldr r3, [r7, #24]
  44639. 8012e86: 68ba ldr r2, [r7, #8]
  44640. 8012e88: 641a str r2, [r3, #64] @ 0x40
  44641. ( void ) xQueueGenericReset( pxNewQueue, pdTRUE );
  44642. 8012e8a: 2101 movs r1, #1
  44643. 8012e8c: 69b8 ldr r0, [r7, #24]
  44644. 8012e8e: f7ff fec3 bl 8012c18 <xQueueGenericReset>
  44645. #if ( configUSE_TRACE_FACILITY == 1 )
  44646. {
  44647. pxNewQueue->ucQueueType = ucQueueType;
  44648. 8012e92: 69bb ldr r3, [r7, #24]
  44649. 8012e94: 78fa ldrb r2, [r7, #3]
  44650. 8012e96: f883 204c strb.w r2, [r3, #76] @ 0x4c
  44651. pxNewQueue->pxQueueSetContainer = NULL;
  44652. }
  44653. #endif /* configUSE_QUEUE_SETS */
  44654. traceQUEUE_CREATE( pxNewQueue );
  44655. }
  44656. 8012e9a: bf00 nop
  44657. 8012e9c: 3710 adds r7, #16
  44658. 8012e9e: 46bd mov sp, r7
  44659. 8012ea0: bd80 pop {r7, pc}
  44660. 08012ea2 <prvInitialiseMutex>:
  44661. /*-----------------------------------------------------------*/
  44662. #if( configUSE_MUTEXES == 1 )
  44663. static void prvInitialiseMutex( Queue_t *pxNewQueue )
  44664. {
  44665. 8012ea2: b580 push {r7, lr}
  44666. 8012ea4: b082 sub sp, #8
  44667. 8012ea6: af00 add r7, sp, #0
  44668. 8012ea8: 6078 str r0, [r7, #4]
  44669. if( pxNewQueue != NULL )
  44670. 8012eaa: 687b ldr r3, [r7, #4]
  44671. 8012eac: 2b00 cmp r3, #0
  44672. 8012eae: d00e beq.n 8012ece <prvInitialiseMutex+0x2c>
  44673. {
  44674. /* The queue create function will set all the queue structure members
  44675. correctly for a generic queue, but this function is creating a
  44676. mutex. Overwrite those members that need to be set differently -
  44677. in particular the information required for priority inheritance. */
  44678. pxNewQueue->u.xSemaphore.xMutexHolder = NULL;
  44679. 8012eb0: 687b ldr r3, [r7, #4]
  44680. 8012eb2: 2200 movs r2, #0
  44681. 8012eb4: 609a str r2, [r3, #8]
  44682. pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX;
  44683. 8012eb6: 687b ldr r3, [r7, #4]
  44684. 8012eb8: 2200 movs r2, #0
  44685. 8012eba: 601a str r2, [r3, #0]
  44686. /* In case this is a recursive mutex. */
  44687. pxNewQueue->u.xSemaphore.uxRecursiveCallCount = 0;
  44688. 8012ebc: 687b ldr r3, [r7, #4]
  44689. 8012ebe: 2200 movs r2, #0
  44690. 8012ec0: 60da str r2, [r3, #12]
  44691. traceCREATE_MUTEX( pxNewQueue );
  44692. /* Start with the semaphore in the expected state. */
  44693. ( void ) xQueueGenericSend( pxNewQueue, NULL, ( TickType_t ) 0U, queueSEND_TO_BACK );
  44694. 8012ec2: 2300 movs r3, #0
  44695. 8012ec4: 2200 movs r2, #0
  44696. 8012ec6: 2100 movs r1, #0
  44697. 8012ec8: 6878 ldr r0, [r7, #4]
  44698. 8012eca: f000 f8a3 bl 8013014 <xQueueGenericSend>
  44699. }
  44700. else
  44701. {
  44702. traceCREATE_MUTEX_FAILED();
  44703. }
  44704. }
  44705. 8012ece: bf00 nop
  44706. 8012ed0: 3708 adds r7, #8
  44707. 8012ed2: 46bd mov sp, r7
  44708. 8012ed4: bd80 pop {r7, pc}
  44709. 08012ed6 <xQueueCreateMutex>:
  44710. /*-----------------------------------------------------------*/
  44711. #if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
  44712. QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType )
  44713. {
  44714. 8012ed6: b580 push {r7, lr}
  44715. 8012ed8: b086 sub sp, #24
  44716. 8012eda: af00 add r7, sp, #0
  44717. 8012edc: 4603 mov r3, r0
  44718. 8012ede: 71fb strb r3, [r7, #7]
  44719. QueueHandle_t xNewQueue;
  44720. const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0;
  44721. 8012ee0: 2301 movs r3, #1
  44722. 8012ee2: 617b str r3, [r7, #20]
  44723. 8012ee4: 2300 movs r3, #0
  44724. 8012ee6: 613b str r3, [r7, #16]
  44725. xNewQueue = xQueueGenericCreate( uxMutexLength, uxMutexSize, ucQueueType );
  44726. 8012ee8: 79fb ldrb r3, [r7, #7]
  44727. 8012eea: 461a mov r2, r3
  44728. 8012eec: 6939 ldr r1, [r7, #16]
  44729. 8012eee: 6978 ldr r0, [r7, #20]
  44730. 8012ef0: f7ff ff79 bl 8012de6 <xQueueGenericCreate>
  44731. 8012ef4: 60f8 str r0, [r7, #12]
  44732. prvInitialiseMutex( ( Queue_t * ) xNewQueue );
  44733. 8012ef6: 68f8 ldr r0, [r7, #12]
  44734. 8012ef8: f7ff ffd3 bl 8012ea2 <prvInitialiseMutex>
  44735. return xNewQueue;
  44736. 8012efc: 68fb ldr r3, [r7, #12]
  44737. }
  44738. 8012efe: 4618 mov r0, r3
  44739. 8012f00: 3718 adds r7, #24
  44740. 8012f02: 46bd mov sp, r7
  44741. 8012f04: bd80 pop {r7, pc}
  44742. 08012f06 <xQueueCreateMutexStatic>:
  44743. /*-----------------------------------------------------------*/
  44744. #if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
  44745. QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue )
  44746. {
  44747. 8012f06: b580 push {r7, lr}
  44748. 8012f08: b088 sub sp, #32
  44749. 8012f0a: af02 add r7, sp, #8
  44750. 8012f0c: 4603 mov r3, r0
  44751. 8012f0e: 6039 str r1, [r7, #0]
  44752. 8012f10: 71fb strb r3, [r7, #7]
  44753. QueueHandle_t xNewQueue;
  44754. const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0;
  44755. 8012f12: 2301 movs r3, #1
  44756. 8012f14: 617b str r3, [r7, #20]
  44757. 8012f16: 2300 movs r3, #0
  44758. 8012f18: 613b str r3, [r7, #16]
  44759. /* Prevent compiler warnings about unused parameters if
  44760. configUSE_TRACE_FACILITY does not equal 1. */
  44761. ( void ) ucQueueType;
  44762. xNewQueue = xQueueGenericCreateStatic( uxMutexLength, uxMutexSize, NULL, pxStaticQueue, ucQueueType );
  44763. 8012f1a: 79fb ldrb r3, [r7, #7]
  44764. 8012f1c: 9300 str r3, [sp, #0]
  44765. 8012f1e: 683b ldr r3, [r7, #0]
  44766. 8012f20: 2200 movs r2, #0
  44767. 8012f22: 6939 ldr r1, [r7, #16]
  44768. 8012f24: 6978 ldr r0, [r7, #20]
  44769. 8012f26: f7ff fee1 bl 8012cec <xQueueGenericCreateStatic>
  44770. 8012f2a: 60f8 str r0, [r7, #12]
  44771. prvInitialiseMutex( ( Queue_t * ) xNewQueue );
  44772. 8012f2c: 68f8 ldr r0, [r7, #12]
  44773. 8012f2e: f7ff ffb8 bl 8012ea2 <prvInitialiseMutex>
  44774. return xNewQueue;
  44775. 8012f32: 68fb ldr r3, [r7, #12]
  44776. }
  44777. 8012f34: 4618 mov r0, r3
  44778. 8012f36: 3718 adds r7, #24
  44779. 8012f38: 46bd mov sp, r7
  44780. 8012f3a: bd80 pop {r7, pc}
  44781. 08012f3c <xQueueGiveMutexRecursive>:
  44782. /*-----------------------------------------------------------*/
  44783. #if ( configUSE_RECURSIVE_MUTEXES == 1 )
  44784. BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex )
  44785. {
  44786. 8012f3c: b590 push {r4, r7, lr}
  44787. 8012f3e: b087 sub sp, #28
  44788. 8012f40: af00 add r7, sp, #0
  44789. 8012f42: 6078 str r0, [r7, #4]
  44790. BaseType_t xReturn;
  44791. Queue_t * const pxMutex = ( Queue_t * ) xMutex;
  44792. 8012f44: 687b ldr r3, [r7, #4]
  44793. 8012f46: 613b str r3, [r7, #16]
  44794. configASSERT( pxMutex );
  44795. 8012f48: 693b ldr r3, [r7, #16]
  44796. 8012f4a: 2b00 cmp r3, #0
  44797. 8012f4c: d10b bne.n 8012f66 <xQueueGiveMutexRecursive+0x2a>
  44798. __asm volatile
  44799. 8012f4e: f04f 0350 mov.w r3, #80 @ 0x50
  44800. 8012f52: f383 8811 msr BASEPRI, r3
  44801. 8012f56: f3bf 8f6f isb sy
  44802. 8012f5a: f3bf 8f4f dsb sy
  44803. 8012f5e: 60fb str r3, [r7, #12]
  44804. }
  44805. 8012f60: bf00 nop
  44806. 8012f62: bf00 nop
  44807. 8012f64: e7fd b.n 8012f62 <xQueueGiveMutexRecursive+0x26>
  44808. change outside of this task. If this task does not hold the mutex then
  44809. pxMutexHolder can never coincidentally equal the tasks handle, and as
  44810. this is the only condition we are interested in it does not matter if
  44811. pxMutexHolder is accessed simultaneously by another task. Therefore no
  44812. mutual exclusion is required to test the pxMutexHolder variable. */
  44813. if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() )
  44814. 8012f66: 693b ldr r3, [r7, #16]
  44815. 8012f68: 689c ldr r4, [r3, #8]
  44816. 8012f6a: f001 fe39 bl 8014be0 <xTaskGetCurrentTaskHandle>
  44817. 8012f6e: 4603 mov r3, r0
  44818. 8012f70: 429c cmp r4, r3
  44819. 8012f72: d111 bne.n 8012f98 <xQueueGiveMutexRecursive+0x5c>
  44820. /* uxRecursiveCallCount cannot be zero if xMutexHolder is equal to
  44821. the task handle, therefore no underflow check is required. Also,
  44822. uxRecursiveCallCount is only modified by the mutex holder, and as
  44823. there can only be one, no mutual exclusion is required to modify the
  44824. uxRecursiveCallCount member. */
  44825. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )--;
  44826. 8012f74: 693b ldr r3, [r7, #16]
  44827. 8012f76: 68db ldr r3, [r3, #12]
  44828. 8012f78: 1e5a subs r2, r3, #1
  44829. 8012f7a: 693b ldr r3, [r7, #16]
  44830. 8012f7c: 60da str r2, [r3, #12]
  44831. /* Has the recursive call count unwound to 0? */
  44832. if( pxMutex->u.xSemaphore.uxRecursiveCallCount == ( UBaseType_t ) 0 )
  44833. 8012f7e: 693b ldr r3, [r7, #16]
  44834. 8012f80: 68db ldr r3, [r3, #12]
  44835. 8012f82: 2b00 cmp r3, #0
  44836. 8012f84: d105 bne.n 8012f92 <xQueueGiveMutexRecursive+0x56>
  44837. {
  44838. /* Return the mutex. This will automatically unblock any other
  44839. task that might be waiting to access the mutex. */
  44840. ( void ) xQueueGenericSend( pxMutex, NULL, queueMUTEX_GIVE_BLOCK_TIME, queueSEND_TO_BACK );
  44841. 8012f86: 2300 movs r3, #0
  44842. 8012f88: 2200 movs r2, #0
  44843. 8012f8a: 2100 movs r1, #0
  44844. 8012f8c: 6938 ldr r0, [r7, #16]
  44845. 8012f8e: f000 f841 bl 8013014 <xQueueGenericSend>
  44846. else
  44847. {
  44848. mtCOVERAGE_TEST_MARKER();
  44849. }
  44850. xReturn = pdPASS;
  44851. 8012f92: 2301 movs r3, #1
  44852. 8012f94: 617b str r3, [r7, #20]
  44853. 8012f96: e001 b.n 8012f9c <xQueueGiveMutexRecursive+0x60>
  44854. }
  44855. else
  44856. {
  44857. /* The mutex cannot be given because the calling task is not the
  44858. holder. */
  44859. xReturn = pdFAIL;
  44860. 8012f98: 2300 movs r3, #0
  44861. 8012f9a: 617b str r3, [r7, #20]
  44862. traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex );
  44863. }
  44864. return xReturn;
  44865. 8012f9c: 697b ldr r3, [r7, #20]
  44866. }
  44867. 8012f9e: 4618 mov r0, r3
  44868. 8012fa0: 371c adds r7, #28
  44869. 8012fa2: 46bd mov sp, r7
  44870. 8012fa4: bd90 pop {r4, r7, pc}
  44871. 08012fa6 <xQueueTakeMutexRecursive>:
  44872. /*-----------------------------------------------------------*/
  44873. #if ( configUSE_RECURSIVE_MUTEXES == 1 )
  44874. BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait )
  44875. {
  44876. 8012fa6: b590 push {r4, r7, lr}
  44877. 8012fa8: b087 sub sp, #28
  44878. 8012faa: af00 add r7, sp, #0
  44879. 8012fac: 6078 str r0, [r7, #4]
  44880. 8012fae: 6039 str r1, [r7, #0]
  44881. BaseType_t xReturn;
  44882. Queue_t * const pxMutex = ( Queue_t * ) xMutex;
  44883. 8012fb0: 687b ldr r3, [r7, #4]
  44884. 8012fb2: 613b str r3, [r7, #16]
  44885. configASSERT( pxMutex );
  44886. 8012fb4: 693b ldr r3, [r7, #16]
  44887. 8012fb6: 2b00 cmp r3, #0
  44888. 8012fb8: d10b bne.n 8012fd2 <xQueueTakeMutexRecursive+0x2c>
  44889. __asm volatile
  44890. 8012fba: f04f 0350 mov.w r3, #80 @ 0x50
  44891. 8012fbe: f383 8811 msr BASEPRI, r3
  44892. 8012fc2: f3bf 8f6f isb sy
  44893. 8012fc6: f3bf 8f4f dsb sy
  44894. 8012fca: 60fb str r3, [r7, #12]
  44895. }
  44896. 8012fcc: bf00 nop
  44897. 8012fce: bf00 nop
  44898. 8012fd0: e7fd b.n 8012fce <xQueueTakeMutexRecursive+0x28>
  44899. /* Comments regarding mutual exclusion as per those within
  44900. xQueueGiveMutexRecursive(). */
  44901. traceTAKE_MUTEX_RECURSIVE( pxMutex );
  44902. if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() )
  44903. 8012fd2: 693b ldr r3, [r7, #16]
  44904. 8012fd4: 689c ldr r4, [r3, #8]
  44905. 8012fd6: f001 fe03 bl 8014be0 <xTaskGetCurrentTaskHandle>
  44906. 8012fda: 4603 mov r3, r0
  44907. 8012fdc: 429c cmp r4, r3
  44908. 8012fde: d107 bne.n 8012ff0 <xQueueTakeMutexRecursive+0x4a>
  44909. {
  44910. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++;
  44911. 8012fe0: 693b ldr r3, [r7, #16]
  44912. 8012fe2: 68db ldr r3, [r3, #12]
  44913. 8012fe4: 1c5a adds r2, r3, #1
  44914. 8012fe6: 693b ldr r3, [r7, #16]
  44915. 8012fe8: 60da str r2, [r3, #12]
  44916. xReturn = pdPASS;
  44917. 8012fea: 2301 movs r3, #1
  44918. 8012fec: 617b str r3, [r7, #20]
  44919. 8012fee: e00c b.n 801300a <xQueueTakeMutexRecursive+0x64>
  44920. }
  44921. else
  44922. {
  44923. xReturn = xQueueSemaphoreTake( pxMutex, xTicksToWait );
  44924. 8012ff0: 6839 ldr r1, [r7, #0]
  44925. 8012ff2: 6938 ldr r0, [r7, #16]
  44926. 8012ff4: f000 fa90 bl 8013518 <xQueueSemaphoreTake>
  44927. 8012ff8: 6178 str r0, [r7, #20]
  44928. /* pdPASS will only be returned if the mutex was successfully
  44929. obtained. The calling task may have entered the Blocked state
  44930. before reaching here. */
  44931. if( xReturn != pdFAIL )
  44932. 8012ffa: 697b ldr r3, [r7, #20]
  44933. 8012ffc: 2b00 cmp r3, #0
  44934. 8012ffe: d004 beq.n 801300a <xQueueTakeMutexRecursive+0x64>
  44935. {
  44936. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++;
  44937. 8013000: 693b ldr r3, [r7, #16]
  44938. 8013002: 68db ldr r3, [r3, #12]
  44939. 8013004: 1c5a adds r2, r3, #1
  44940. 8013006: 693b ldr r3, [r7, #16]
  44941. 8013008: 60da str r2, [r3, #12]
  44942. {
  44943. traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex );
  44944. }
  44945. }
  44946. return xReturn;
  44947. 801300a: 697b ldr r3, [r7, #20]
  44948. }
  44949. 801300c: 4618 mov r0, r3
  44950. 801300e: 371c adds r7, #28
  44951. 8013010: 46bd mov sp, r7
  44952. 8013012: bd90 pop {r4, r7, pc}
  44953. 08013014 <xQueueGenericSend>:
  44954. #endif /* ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */
  44955. /*-----------------------------------------------------------*/
  44956. BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition )
  44957. {
  44958. 8013014: b580 push {r7, lr}
  44959. 8013016: b08e sub sp, #56 @ 0x38
  44960. 8013018: af00 add r7, sp, #0
  44961. 801301a: 60f8 str r0, [r7, #12]
  44962. 801301c: 60b9 str r1, [r7, #8]
  44963. 801301e: 607a str r2, [r7, #4]
  44964. 8013020: 603b str r3, [r7, #0]
  44965. BaseType_t xEntryTimeSet = pdFALSE, xYieldRequired;
  44966. 8013022: 2300 movs r3, #0
  44967. 8013024: 637b str r3, [r7, #52] @ 0x34
  44968. TimeOut_t xTimeOut;
  44969. Queue_t * const pxQueue = xQueue;
  44970. 8013026: 68fb ldr r3, [r7, #12]
  44971. 8013028: 633b str r3, [r7, #48] @ 0x30
  44972. configASSERT( pxQueue );
  44973. 801302a: 6b3b ldr r3, [r7, #48] @ 0x30
  44974. 801302c: 2b00 cmp r3, #0
  44975. 801302e: d10b bne.n 8013048 <xQueueGenericSend+0x34>
  44976. __asm volatile
  44977. 8013030: f04f 0350 mov.w r3, #80 @ 0x50
  44978. 8013034: f383 8811 msr BASEPRI, r3
  44979. 8013038: f3bf 8f6f isb sy
  44980. 801303c: f3bf 8f4f dsb sy
  44981. 8013040: 62bb str r3, [r7, #40] @ 0x28
  44982. }
  44983. 8013042: bf00 nop
  44984. 8013044: bf00 nop
  44985. 8013046: e7fd b.n 8013044 <xQueueGenericSend+0x30>
  44986. configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
  44987. 8013048: 68bb ldr r3, [r7, #8]
  44988. 801304a: 2b00 cmp r3, #0
  44989. 801304c: d103 bne.n 8013056 <xQueueGenericSend+0x42>
  44990. 801304e: 6b3b ldr r3, [r7, #48] @ 0x30
  44991. 8013050: 6c1b ldr r3, [r3, #64] @ 0x40
  44992. 8013052: 2b00 cmp r3, #0
  44993. 8013054: d101 bne.n 801305a <xQueueGenericSend+0x46>
  44994. 8013056: 2301 movs r3, #1
  44995. 8013058: e000 b.n 801305c <xQueueGenericSend+0x48>
  44996. 801305a: 2300 movs r3, #0
  44997. 801305c: 2b00 cmp r3, #0
  44998. 801305e: d10b bne.n 8013078 <xQueueGenericSend+0x64>
  44999. __asm volatile
  45000. 8013060: f04f 0350 mov.w r3, #80 @ 0x50
  45001. 8013064: f383 8811 msr BASEPRI, r3
  45002. 8013068: f3bf 8f6f isb sy
  45003. 801306c: f3bf 8f4f dsb sy
  45004. 8013070: 627b str r3, [r7, #36] @ 0x24
  45005. }
  45006. 8013072: bf00 nop
  45007. 8013074: bf00 nop
  45008. 8013076: e7fd b.n 8013074 <xQueueGenericSend+0x60>
  45009. configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
  45010. 8013078: 683b ldr r3, [r7, #0]
  45011. 801307a: 2b02 cmp r3, #2
  45012. 801307c: d103 bne.n 8013086 <xQueueGenericSend+0x72>
  45013. 801307e: 6b3b ldr r3, [r7, #48] @ 0x30
  45014. 8013080: 6bdb ldr r3, [r3, #60] @ 0x3c
  45015. 8013082: 2b01 cmp r3, #1
  45016. 8013084: d101 bne.n 801308a <xQueueGenericSend+0x76>
  45017. 8013086: 2301 movs r3, #1
  45018. 8013088: e000 b.n 801308c <xQueueGenericSend+0x78>
  45019. 801308a: 2300 movs r3, #0
  45020. 801308c: 2b00 cmp r3, #0
  45021. 801308e: d10b bne.n 80130a8 <xQueueGenericSend+0x94>
  45022. __asm volatile
  45023. 8013090: f04f 0350 mov.w r3, #80 @ 0x50
  45024. 8013094: f383 8811 msr BASEPRI, r3
  45025. 8013098: f3bf 8f6f isb sy
  45026. 801309c: f3bf 8f4f dsb sy
  45027. 80130a0: 623b str r3, [r7, #32]
  45028. }
  45029. 80130a2: bf00 nop
  45030. 80130a4: bf00 nop
  45031. 80130a6: e7fd b.n 80130a4 <xQueueGenericSend+0x90>
  45032. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  45033. {
  45034. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  45035. 80130a8: f001 fdaa bl 8014c00 <xTaskGetSchedulerState>
  45036. 80130ac: 4603 mov r3, r0
  45037. 80130ae: 2b00 cmp r3, #0
  45038. 80130b0: d102 bne.n 80130b8 <xQueueGenericSend+0xa4>
  45039. 80130b2: 687b ldr r3, [r7, #4]
  45040. 80130b4: 2b00 cmp r3, #0
  45041. 80130b6: d101 bne.n 80130bc <xQueueGenericSend+0xa8>
  45042. 80130b8: 2301 movs r3, #1
  45043. 80130ba: e000 b.n 80130be <xQueueGenericSend+0xaa>
  45044. 80130bc: 2300 movs r3, #0
  45045. 80130be: 2b00 cmp r3, #0
  45046. 80130c0: d10b bne.n 80130da <xQueueGenericSend+0xc6>
  45047. __asm volatile
  45048. 80130c2: f04f 0350 mov.w r3, #80 @ 0x50
  45049. 80130c6: f383 8811 msr BASEPRI, r3
  45050. 80130ca: f3bf 8f6f isb sy
  45051. 80130ce: f3bf 8f4f dsb sy
  45052. 80130d2: 61fb str r3, [r7, #28]
  45053. }
  45054. 80130d4: bf00 nop
  45055. 80130d6: bf00 nop
  45056. 80130d8: e7fd b.n 80130d6 <xQueueGenericSend+0xc2>
  45057. /*lint -save -e904 This function relaxes the coding standard somewhat to
  45058. allow return statements within the function itself. This is done in the
  45059. interest of execution time efficiency. */
  45060. for( ;; )
  45061. {
  45062. taskENTER_CRITICAL();
  45063. 80130da: f002 ff15 bl 8015f08 <vPortEnterCritical>
  45064. {
  45065. /* Is there room on the queue now? The running task must be the
  45066. highest priority task wanting to access the queue. If the head item
  45067. in the queue is to be overwritten then it does not matter if the
  45068. queue is full. */
  45069. if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
  45070. 80130de: 6b3b ldr r3, [r7, #48] @ 0x30
  45071. 80130e0: 6b9a ldr r2, [r3, #56] @ 0x38
  45072. 80130e2: 6b3b ldr r3, [r7, #48] @ 0x30
  45073. 80130e4: 6bdb ldr r3, [r3, #60] @ 0x3c
  45074. 80130e6: 429a cmp r2, r3
  45075. 80130e8: d302 bcc.n 80130f0 <xQueueGenericSend+0xdc>
  45076. 80130ea: 683b ldr r3, [r7, #0]
  45077. 80130ec: 2b02 cmp r3, #2
  45078. 80130ee: d129 bne.n 8013144 <xQueueGenericSend+0x130>
  45079. }
  45080. }
  45081. }
  45082. #else /* configUSE_QUEUE_SETS */
  45083. {
  45084. xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
  45085. 80130f0: 683a ldr r2, [r7, #0]
  45086. 80130f2: 68b9 ldr r1, [r7, #8]
  45087. 80130f4: 6b38 ldr r0, [r7, #48] @ 0x30
  45088. 80130f6: f000 fbb9 bl 801386c <prvCopyDataToQueue>
  45089. 80130fa: 62f8 str r0, [r7, #44] @ 0x2c
  45090. /* If there was a task waiting for data to arrive on the
  45091. queue then unblock it now. */
  45092. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  45093. 80130fc: 6b3b ldr r3, [r7, #48] @ 0x30
  45094. 80130fe: 6a5b ldr r3, [r3, #36] @ 0x24
  45095. 8013100: 2b00 cmp r3, #0
  45096. 8013102: d010 beq.n 8013126 <xQueueGenericSend+0x112>
  45097. {
  45098. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  45099. 8013104: 6b3b ldr r3, [r7, #48] @ 0x30
  45100. 8013106: 3324 adds r3, #36 @ 0x24
  45101. 8013108: 4618 mov r0, r3
  45102. 801310a: f001 fb7b bl 8014804 <xTaskRemoveFromEventList>
  45103. 801310e: 4603 mov r3, r0
  45104. 8013110: 2b00 cmp r3, #0
  45105. 8013112: d013 beq.n 801313c <xQueueGenericSend+0x128>
  45106. {
  45107. /* The unblocked task has a priority higher than
  45108. our own so yield immediately. Yes it is ok to do
  45109. this from within the critical section - the kernel
  45110. takes care of that. */
  45111. queueYIELD_IF_USING_PREEMPTION();
  45112. 8013114: 4b3f ldr r3, [pc, #252] @ (8013214 <xQueueGenericSend+0x200>)
  45113. 8013116: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  45114. 801311a: 601a str r2, [r3, #0]
  45115. 801311c: f3bf 8f4f dsb sy
  45116. 8013120: f3bf 8f6f isb sy
  45117. 8013124: e00a b.n 801313c <xQueueGenericSend+0x128>
  45118. else
  45119. {
  45120. mtCOVERAGE_TEST_MARKER();
  45121. }
  45122. }
  45123. else if( xYieldRequired != pdFALSE )
  45124. 8013126: 6afb ldr r3, [r7, #44] @ 0x2c
  45125. 8013128: 2b00 cmp r3, #0
  45126. 801312a: d007 beq.n 801313c <xQueueGenericSend+0x128>
  45127. {
  45128. /* This path is a special case that will only get
  45129. executed if the task was holding multiple mutexes and
  45130. the mutexes were given back in an order that is
  45131. different to that in which they were taken. */
  45132. queueYIELD_IF_USING_PREEMPTION();
  45133. 801312c: 4b39 ldr r3, [pc, #228] @ (8013214 <xQueueGenericSend+0x200>)
  45134. 801312e: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  45135. 8013132: 601a str r2, [r3, #0]
  45136. 8013134: f3bf 8f4f dsb sy
  45137. 8013138: f3bf 8f6f isb sy
  45138. mtCOVERAGE_TEST_MARKER();
  45139. }
  45140. }
  45141. #endif /* configUSE_QUEUE_SETS */
  45142. taskEXIT_CRITICAL();
  45143. 801313c: f002 ff16 bl 8015f6c <vPortExitCritical>
  45144. return pdPASS;
  45145. 8013140: 2301 movs r3, #1
  45146. 8013142: e063 b.n 801320c <xQueueGenericSend+0x1f8>
  45147. }
  45148. else
  45149. {
  45150. if( xTicksToWait == ( TickType_t ) 0 )
  45151. 8013144: 687b ldr r3, [r7, #4]
  45152. 8013146: 2b00 cmp r3, #0
  45153. 8013148: d103 bne.n 8013152 <xQueueGenericSend+0x13e>
  45154. {
  45155. /* The queue was full and no block time is specified (or
  45156. the block time has expired) so leave now. */
  45157. taskEXIT_CRITICAL();
  45158. 801314a: f002 ff0f bl 8015f6c <vPortExitCritical>
  45159. /* Return to the original privilege level before exiting
  45160. the function. */
  45161. traceQUEUE_SEND_FAILED( pxQueue );
  45162. return errQUEUE_FULL;
  45163. 801314e: 2300 movs r3, #0
  45164. 8013150: e05c b.n 801320c <xQueueGenericSend+0x1f8>
  45165. }
  45166. else if( xEntryTimeSet == pdFALSE )
  45167. 8013152: 6b7b ldr r3, [r7, #52] @ 0x34
  45168. 8013154: 2b00 cmp r3, #0
  45169. 8013156: d106 bne.n 8013166 <xQueueGenericSend+0x152>
  45170. {
  45171. /* The queue was full and a block time was specified so
  45172. configure the timeout structure. */
  45173. vTaskInternalSetTimeOutState( &xTimeOut );
  45174. 8013158: f107 0314 add.w r3, r7, #20
  45175. 801315c: 4618 mov r0, r3
  45176. 801315e: f001 fbdd bl 801491c <vTaskInternalSetTimeOutState>
  45177. xEntryTimeSet = pdTRUE;
  45178. 8013162: 2301 movs r3, #1
  45179. 8013164: 637b str r3, [r7, #52] @ 0x34
  45180. /* Entry time was already set. */
  45181. mtCOVERAGE_TEST_MARKER();
  45182. }
  45183. }
  45184. }
  45185. taskEXIT_CRITICAL();
  45186. 8013166: f002 ff01 bl 8015f6c <vPortExitCritical>
  45187. /* Interrupts and other tasks can send to and receive from the queue
  45188. now the critical section has been exited. */
  45189. vTaskSuspendAll();
  45190. 801316a: f001 f90f bl 801438c <vTaskSuspendAll>
  45191. prvLockQueue( pxQueue );
  45192. 801316e: f002 fecb bl 8015f08 <vPortEnterCritical>
  45193. 8013172: 6b3b ldr r3, [r7, #48] @ 0x30
  45194. 8013174: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  45195. 8013178: b25b sxtb r3, r3
  45196. 801317a: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  45197. 801317e: d103 bne.n 8013188 <xQueueGenericSend+0x174>
  45198. 8013180: 6b3b ldr r3, [r7, #48] @ 0x30
  45199. 8013182: 2200 movs r2, #0
  45200. 8013184: f883 2044 strb.w r2, [r3, #68] @ 0x44
  45201. 8013188: 6b3b ldr r3, [r7, #48] @ 0x30
  45202. 801318a: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  45203. 801318e: b25b sxtb r3, r3
  45204. 8013190: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  45205. 8013194: d103 bne.n 801319e <xQueueGenericSend+0x18a>
  45206. 8013196: 6b3b ldr r3, [r7, #48] @ 0x30
  45207. 8013198: 2200 movs r2, #0
  45208. 801319a: f883 2045 strb.w r2, [r3, #69] @ 0x45
  45209. 801319e: f002 fee5 bl 8015f6c <vPortExitCritical>
  45210. /* Update the timeout state to see if it has expired yet. */
  45211. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  45212. 80131a2: 1d3a adds r2, r7, #4
  45213. 80131a4: f107 0314 add.w r3, r7, #20
  45214. 80131a8: 4611 mov r1, r2
  45215. 80131aa: 4618 mov r0, r3
  45216. 80131ac: f001 fbcc bl 8014948 <xTaskCheckForTimeOut>
  45217. 80131b0: 4603 mov r3, r0
  45218. 80131b2: 2b00 cmp r3, #0
  45219. 80131b4: d124 bne.n 8013200 <xQueueGenericSend+0x1ec>
  45220. {
  45221. if( prvIsQueueFull( pxQueue ) != pdFALSE )
  45222. 80131b6: 6b38 ldr r0, [r7, #48] @ 0x30
  45223. 80131b8: f000 fc50 bl 8013a5c <prvIsQueueFull>
  45224. 80131bc: 4603 mov r3, r0
  45225. 80131be: 2b00 cmp r3, #0
  45226. 80131c0: d018 beq.n 80131f4 <xQueueGenericSend+0x1e0>
  45227. {
  45228. traceBLOCKING_ON_QUEUE_SEND( pxQueue );
  45229. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait );
  45230. 80131c2: 6b3b ldr r3, [r7, #48] @ 0x30
  45231. 80131c4: 3310 adds r3, #16
  45232. 80131c6: 687a ldr r2, [r7, #4]
  45233. 80131c8: 4611 mov r1, r2
  45234. 80131ca: 4618 mov r0, r3
  45235. 80131cc: f001 fac8 bl 8014760 <vTaskPlaceOnEventList>
  45236. /* Unlocking the queue means queue events can effect the
  45237. event list. It is possible that interrupts occurring now
  45238. remove this task from the event list again - but as the
  45239. scheduler is suspended the task will go onto the pending
  45240. ready last instead of the actual ready list. */
  45241. prvUnlockQueue( pxQueue );
  45242. 80131d0: 6b38 ldr r0, [r7, #48] @ 0x30
  45243. 80131d2: f000 fbdb bl 801398c <prvUnlockQueue>
  45244. /* Resuming the scheduler will move tasks from the pending
  45245. ready list into the ready list - so it is feasible that this
  45246. task is already in a ready list before it yields - in which
  45247. case the yield will not cause a context switch unless there
  45248. is also a higher priority task in the pending ready list. */
  45249. if( xTaskResumeAll() == pdFALSE )
  45250. 80131d6: f001 f8e7 bl 80143a8 <xTaskResumeAll>
  45251. 80131da: 4603 mov r3, r0
  45252. 80131dc: 2b00 cmp r3, #0
  45253. 80131de: f47f af7c bne.w 80130da <xQueueGenericSend+0xc6>
  45254. {
  45255. portYIELD_WITHIN_API();
  45256. 80131e2: 4b0c ldr r3, [pc, #48] @ (8013214 <xQueueGenericSend+0x200>)
  45257. 80131e4: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  45258. 80131e8: 601a str r2, [r3, #0]
  45259. 80131ea: f3bf 8f4f dsb sy
  45260. 80131ee: f3bf 8f6f isb sy
  45261. 80131f2: e772 b.n 80130da <xQueueGenericSend+0xc6>
  45262. }
  45263. }
  45264. else
  45265. {
  45266. /* Try again. */
  45267. prvUnlockQueue( pxQueue );
  45268. 80131f4: 6b38 ldr r0, [r7, #48] @ 0x30
  45269. 80131f6: f000 fbc9 bl 801398c <prvUnlockQueue>
  45270. ( void ) xTaskResumeAll();
  45271. 80131fa: f001 f8d5 bl 80143a8 <xTaskResumeAll>
  45272. 80131fe: e76c b.n 80130da <xQueueGenericSend+0xc6>
  45273. }
  45274. }
  45275. else
  45276. {
  45277. /* The timeout has expired. */
  45278. prvUnlockQueue( pxQueue );
  45279. 8013200: 6b38 ldr r0, [r7, #48] @ 0x30
  45280. 8013202: f000 fbc3 bl 801398c <prvUnlockQueue>
  45281. ( void ) xTaskResumeAll();
  45282. 8013206: f001 f8cf bl 80143a8 <xTaskResumeAll>
  45283. traceQUEUE_SEND_FAILED( pxQueue );
  45284. return errQUEUE_FULL;
  45285. 801320a: 2300 movs r3, #0
  45286. }
  45287. } /*lint -restore */
  45288. }
  45289. 801320c: 4618 mov r0, r3
  45290. 801320e: 3738 adds r7, #56 @ 0x38
  45291. 8013210: 46bd mov sp, r7
  45292. 8013212: bd80 pop {r7, pc}
  45293. 8013214: e000ed04 .word 0xe000ed04
  45294. 08013218 <xQueueGenericSendFromISR>:
  45295. /*-----------------------------------------------------------*/
  45296. BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition )
  45297. {
  45298. 8013218: b580 push {r7, lr}
  45299. 801321a: b090 sub sp, #64 @ 0x40
  45300. 801321c: af00 add r7, sp, #0
  45301. 801321e: 60f8 str r0, [r7, #12]
  45302. 8013220: 60b9 str r1, [r7, #8]
  45303. 8013222: 607a str r2, [r7, #4]
  45304. 8013224: 603b str r3, [r7, #0]
  45305. BaseType_t xReturn;
  45306. UBaseType_t uxSavedInterruptStatus;
  45307. Queue_t * const pxQueue = xQueue;
  45308. 8013226: 68fb ldr r3, [r7, #12]
  45309. 8013228: 63bb str r3, [r7, #56] @ 0x38
  45310. configASSERT( pxQueue );
  45311. 801322a: 6bbb ldr r3, [r7, #56] @ 0x38
  45312. 801322c: 2b00 cmp r3, #0
  45313. 801322e: d10b bne.n 8013248 <xQueueGenericSendFromISR+0x30>
  45314. __asm volatile
  45315. 8013230: f04f 0350 mov.w r3, #80 @ 0x50
  45316. 8013234: f383 8811 msr BASEPRI, r3
  45317. 8013238: f3bf 8f6f isb sy
  45318. 801323c: f3bf 8f4f dsb sy
  45319. 8013240: 62bb str r3, [r7, #40] @ 0x28
  45320. }
  45321. 8013242: bf00 nop
  45322. 8013244: bf00 nop
  45323. 8013246: e7fd b.n 8013244 <xQueueGenericSendFromISR+0x2c>
  45324. configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
  45325. 8013248: 68bb ldr r3, [r7, #8]
  45326. 801324a: 2b00 cmp r3, #0
  45327. 801324c: d103 bne.n 8013256 <xQueueGenericSendFromISR+0x3e>
  45328. 801324e: 6bbb ldr r3, [r7, #56] @ 0x38
  45329. 8013250: 6c1b ldr r3, [r3, #64] @ 0x40
  45330. 8013252: 2b00 cmp r3, #0
  45331. 8013254: d101 bne.n 801325a <xQueueGenericSendFromISR+0x42>
  45332. 8013256: 2301 movs r3, #1
  45333. 8013258: e000 b.n 801325c <xQueueGenericSendFromISR+0x44>
  45334. 801325a: 2300 movs r3, #0
  45335. 801325c: 2b00 cmp r3, #0
  45336. 801325e: d10b bne.n 8013278 <xQueueGenericSendFromISR+0x60>
  45337. __asm volatile
  45338. 8013260: f04f 0350 mov.w r3, #80 @ 0x50
  45339. 8013264: f383 8811 msr BASEPRI, r3
  45340. 8013268: f3bf 8f6f isb sy
  45341. 801326c: f3bf 8f4f dsb sy
  45342. 8013270: 627b str r3, [r7, #36] @ 0x24
  45343. }
  45344. 8013272: bf00 nop
  45345. 8013274: bf00 nop
  45346. 8013276: e7fd b.n 8013274 <xQueueGenericSendFromISR+0x5c>
  45347. configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
  45348. 8013278: 683b ldr r3, [r7, #0]
  45349. 801327a: 2b02 cmp r3, #2
  45350. 801327c: d103 bne.n 8013286 <xQueueGenericSendFromISR+0x6e>
  45351. 801327e: 6bbb ldr r3, [r7, #56] @ 0x38
  45352. 8013280: 6bdb ldr r3, [r3, #60] @ 0x3c
  45353. 8013282: 2b01 cmp r3, #1
  45354. 8013284: d101 bne.n 801328a <xQueueGenericSendFromISR+0x72>
  45355. 8013286: 2301 movs r3, #1
  45356. 8013288: e000 b.n 801328c <xQueueGenericSendFromISR+0x74>
  45357. 801328a: 2300 movs r3, #0
  45358. 801328c: 2b00 cmp r3, #0
  45359. 801328e: d10b bne.n 80132a8 <xQueueGenericSendFromISR+0x90>
  45360. __asm volatile
  45361. 8013290: f04f 0350 mov.w r3, #80 @ 0x50
  45362. 8013294: f383 8811 msr BASEPRI, r3
  45363. 8013298: f3bf 8f6f isb sy
  45364. 801329c: f3bf 8f4f dsb sy
  45365. 80132a0: 623b str r3, [r7, #32]
  45366. }
  45367. 80132a2: bf00 nop
  45368. 80132a4: bf00 nop
  45369. 80132a6: e7fd b.n 80132a4 <xQueueGenericSendFromISR+0x8c>
  45370. that have been assigned a priority at or (logically) below the maximum
  45371. system call interrupt priority. FreeRTOS maintains a separate interrupt
  45372. safe API to ensure interrupt entry is as fast and as simple as possible.
  45373. More information (albeit Cortex-M specific) is provided on the following
  45374. link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
  45375. portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
  45376. 80132a8: f002 ff0e bl 80160c8 <vPortValidateInterruptPriority>
  45377. portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void )
  45378. {
  45379. uint32_t ulOriginalBASEPRI, ulNewBASEPRI;
  45380. __asm volatile
  45381. 80132ac: f3ef 8211 mrs r2, BASEPRI
  45382. 80132b0: f04f 0350 mov.w r3, #80 @ 0x50
  45383. 80132b4: f383 8811 msr BASEPRI, r3
  45384. 80132b8: f3bf 8f6f isb sy
  45385. 80132bc: f3bf 8f4f dsb sy
  45386. 80132c0: 61fa str r2, [r7, #28]
  45387. 80132c2: 61bb str r3, [r7, #24]
  45388. :"=r" (ulOriginalBASEPRI), "=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory"
  45389. );
  45390. /* This return will not be reached but is necessary to prevent compiler
  45391. warnings. */
  45392. return ulOriginalBASEPRI;
  45393. 80132c4: 69fb ldr r3, [r7, #28]
  45394. /* Similar to xQueueGenericSend, except without blocking if there is no room
  45395. in the queue. Also don't directly wake a task that was blocked on a queue
  45396. read, instead return a flag to say whether a context switch is required or
  45397. not (i.e. has a task with a higher priority than us been woken by this
  45398. post). */
  45399. uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
  45400. 80132c6: 637b str r3, [r7, #52] @ 0x34
  45401. {
  45402. if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
  45403. 80132c8: 6bbb ldr r3, [r7, #56] @ 0x38
  45404. 80132ca: 6b9a ldr r2, [r3, #56] @ 0x38
  45405. 80132cc: 6bbb ldr r3, [r7, #56] @ 0x38
  45406. 80132ce: 6bdb ldr r3, [r3, #60] @ 0x3c
  45407. 80132d0: 429a cmp r2, r3
  45408. 80132d2: d302 bcc.n 80132da <xQueueGenericSendFromISR+0xc2>
  45409. 80132d4: 683b ldr r3, [r7, #0]
  45410. 80132d6: 2b02 cmp r3, #2
  45411. 80132d8: d12f bne.n 801333a <xQueueGenericSendFromISR+0x122>
  45412. {
  45413. const int8_t cTxLock = pxQueue->cTxLock;
  45414. 80132da: 6bbb ldr r3, [r7, #56] @ 0x38
  45415. 80132dc: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  45416. 80132e0: f887 3033 strb.w r3, [r7, #51] @ 0x33
  45417. const UBaseType_t uxPreviousMessagesWaiting = pxQueue->uxMessagesWaiting;
  45418. 80132e4: 6bbb ldr r3, [r7, #56] @ 0x38
  45419. 80132e6: 6b9b ldr r3, [r3, #56] @ 0x38
  45420. 80132e8: 62fb str r3, [r7, #44] @ 0x2c
  45421. /* Semaphores use xQueueGiveFromISR(), so pxQueue will not be a
  45422. semaphore or mutex. That means prvCopyDataToQueue() cannot result
  45423. in a task disinheriting a priority and prvCopyDataToQueue() can be
  45424. called here even though the disinherit function does not check if
  45425. the scheduler is suspended before accessing the ready lists. */
  45426. ( void ) prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
  45427. 80132ea: 683a ldr r2, [r7, #0]
  45428. 80132ec: 68b9 ldr r1, [r7, #8]
  45429. 80132ee: 6bb8 ldr r0, [r7, #56] @ 0x38
  45430. 80132f0: f000 fabc bl 801386c <prvCopyDataToQueue>
  45431. /* The event list is not altered if the queue is locked. This will
  45432. be done when the queue is unlocked later. */
  45433. if( cTxLock == queueUNLOCKED )
  45434. 80132f4: f997 3033 ldrsb.w r3, [r7, #51] @ 0x33
  45435. 80132f8: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  45436. 80132fc: d112 bne.n 8013324 <xQueueGenericSendFromISR+0x10c>
  45437. }
  45438. }
  45439. }
  45440. #else /* configUSE_QUEUE_SETS */
  45441. {
  45442. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  45443. 80132fe: 6bbb ldr r3, [r7, #56] @ 0x38
  45444. 8013300: 6a5b ldr r3, [r3, #36] @ 0x24
  45445. 8013302: 2b00 cmp r3, #0
  45446. 8013304: d016 beq.n 8013334 <xQueueGenericSendFromISR+0x11c>
  45447. {
  45448. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  45449. 8013306: 6bbb ldr r3, [r7, #56] @ 0x38
  45450. 8013308: 3324 adds r3, #36 @ 0x24
  45451. 801330a: 4618 mov r0, r3
  45452. 801330c: f001 fa7a bl 8014804 <xTaskRemoveFromEventList>
  45453. 8013310: 4603 mov r3, r0
  45454. 8013312: 2b00 cmp r3, #0
  45455. 8013314: d00e beq.n 8013334 <xQueueGenericSendFromISR+0x11c>
  45456. {
  45457. /* The task waiting has a higher priority so record that a
  45458. context switch is required. */
  45459. if( pxHigherPriorityTaskWoken != NULL )
  45460. 8013316: 687b ldr r3, [r7, #4]
  45461. 8013318: 2b00 cmp r3, #0
  45462. 801331a: d00b beq.n 8013334 <xQueueGenericSendFromISR+0x11c>
  45463. {
  45464. *pxHigherPriorityTaskWoken = pdTRUE;
  45465. 801331c: 687b ldr r3, [r7, #4]
  45466. 801331e: 2201 movs r2, #1
  45467. 8013320: 601a str r2, [r3, #0]
  45468. 8013322: e007 b.n 8013334 <xQueueGenericSendFromISR+0x11c>
  45469. }
  45470. else
  45471. {
  45472. /* Increment the lock count so the task that unlocks the queue
  45473. knows that data was posted while it was locked. */
  45474. pxQueue->cTxLock = ( int8_t ) ( cTxLock + 1 );
  45475. 8013324: f897 3033 ldrb.w r3, [r7, #51] @ 0x33
  45476. 8013328: 3301 adds r3, #1
  45477. 801332a: b2db uxtb r3, r3
  45478. 801332c: b25a sxtb r2, r3
  45479. 801332e: 6bbb ldr r3, [r7, #56] @ 0x38
  45480. 8013330: f883 2045 strb.w r2, [r3, #69] @ 0x45
  45481. }
  45482. xReturn = pdPASS;
  45483. 8013334: 2301 movs r3, #1
  45484. 8013336: 63fb str r3, [r7, #60] @ 0x3c
  45485. {
  45486. 8013338: e001 b.n 801333e <xQueueGenericSendFromISR+0x126>
  45487. }
  45488. else
  45489. {
  45490. traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue );
  45491. xReturn = errQUEUE_FULL;
  45492. 801333a: 2300 movs r3, #0
  45493. 801333c: 63fb str r3, [r7, #60] @ 0x3c
  45494. 801333e: 6b7b ldr r3, [r7, #52] @ 0x34
  45495. 8013340: 617b str r3, [r7, #20]
  45496. }
  45497. /*-----------------------------------------------------------*/
  45498. portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue )
  45499. {
  45500. __asm volatile
  45501. 8013342: 697b ldr r3, [r7, #20]
  45502. 8013344: f383 8811 msr BASEPRI, r3
  45503. (
  45504. " msr basepri, %0 " :: "r" ( ulNewMaskValue ) : "memory"
  45505. );
  45506. }
  45507. 8013348: bf00 nop
  45508. }
  45509. }
  45510. portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
  45511. return xReturn;
  45512. 801334a: 6bfb ldr r3, [r7, #60] @ 0x3c
  45513. }
  45514. 801334c: 4618 mov r0, r3
  45515. 801334e: 3740 adds r7, #64 @ 0x40
  45516. 8013350: 46bd mov sp, r7
  45517. 8013352: bd80 pop {r7, pc}
  45518. 08013354 <xQueueReceive>:
  45519. return xReturn;
  45520. }
  45521. /*-----------------------------------------------------------*/
  45522. BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait )
  45523. {
  45524. 8013354: b580 push {r7, lr}
  45525. 8013356: b08c sub sp, #48 @ 0x30
  45526. 8013358: af00 add r7, sp, #0
  45527. 801335a: 60f8 str r0, [r7, #12]
  45528. 801335c: 60b9 str r1, [r7, #8]
  45529. 801335e: 607a str r2, [r7, #4]
  45530. BaseType_t xEntryTimeSet = pdFALSE;
  45531. 8013360: 2300 movs r3, #0
  45532. 8013362: 62fb str r3, [r7, #44] @ 0x2c
  45533. TimeOut_t xTimeOut;
  45534. Queue_t * const pxQueue = xQueue;
  45535. 8013364: 68fb ldr r3, [r7, #12]
  45536. 8013366: 62bb str r3, [r7, #40] @ 0x28
  45537. /* Check the pointer is not NULL. */
  45538. configASSERT( ( pxQueue ) );
  45539. 8013368: 6abb ldr r3, [r7, #40] @ 0x28
  45540. 801336a: 2b00 cmp r3, #0
  45541. 801336c: d10b bne.n 8013386 <xQueueReceive+0x32>
  45542. __asm volatile
  45543. 801336e: f04f 0350 mov.w r3, #80 @ 0x50
  45544. 8013372: f383 8811 msr BASEPRI, r3
  45545. 8013376: f3bf 8f6f isb sy
  45546. 801337a: f3bf 8f4f dsb sy
  45547. 801337e: 623b str r3, [r7, #32]
  45548. }
  45549. 8013380: bf00 nop
  45550. 8013382: bf00 nop
  45551. 8013384: e7fd b.n 8013382 <xQueueReceive+0x2e>
  45552. /* The buffer into which data is received can only be NULL if the data size
  45553. is zero (so no data is copied into the buffer. */
  45554. configASSERT( !( ( ( pvBuffer ) == NULL ) && ( ( pxQueue )->uxItemSize != ( UBaseType_t ) 0U ) ) );
  45555. 8013386: 68bb ldr r3, [r7, #8]
  45556. 8013388: 2b00 cmp r3, #0
  45557. 801338a: d103 bne.n 8013394 <xQueueReceive+0x40>
  45558. 801338c: 6abb ldr r3, [r7, #40] @ 0x28
  45559. 801338e: 6c1b ldr r3, [r3, #64] @ 0x40
  45560. 8013390: 2b00 cmp r3, #0
  45561. 8013392: d101 bne.n 8013398 <xQueueReceive+0x44>
  45562. 8013394: 2301 movs r3, #1
  45563. 8013396: e000 b.n 801339a <xQueueReceive+0x46>
  45564. 8013398: 2300 movs r3, #0
  45565. 801339a: 2b00 cmp r3, #0
  45566. 801339c: d10b bne.n 80133b6 <xQueueReceive+0x62>
  45567. __asm volatile
  45568. 801339e: f04f 0350 mov.w r3, #80 @ 0x50
  45569. 80133a2: f383 8811 msr BASEPRI, r3
  45570. 80133a6: f3bf 8f6f isb sy
  45571. 80133aa: f3bf 8f4f dsb sy
  45572. 80133ae: 61fb str r3, [r7, #28]
  45573. }
  45574. 80133b0: bf00 nop
  45575. 80133b2: bf00 nop
  45576. 80133b4: e7fd b.n 80133b2 <xQueueReceive+0x5e>
  45577. /* Cannot block if the scheduler is suspended. */
  45578. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  45579. {
  45580. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  45581. 80133b6: f001 fc23 bl 8014c00 <xTaskGetSchedulerState>
  45582. 80133ba: 4603 mov r3, r0
  45583. 80133bc: 2b00 cmp r3, #0
  45584. 80133be: d102 bne.n 80133c6 <xQueueReceive+0x72>
  45585. 80133c0: 687b ldr r3, [r7, #4]
  45586. 80133c2: 2b00 cmp r3, #0
  45587. 80133c4: d101 bne.n 80133ca <xQueueReceive+0x76>
  45588. 80133c6: 2301 movs r3, #1
  45589. 80133c8: e000 b.n 80133cc <xQueueReceive+0x78>
  45590. 80133ca: 2300 movs r3, #0
  45591. 80133cc: 2b00 cmp r3, #0
  45592. 80133ce: d10b bne.n 80133e8 <xQueueReceive+0x94>
  45593. __asm volatile
  45594. 80133d0: f04f 0350 mov.w r3, #80 @ 0x50
  45595. 80133d4: f383 8811 msr BASEPRI, r3
  45596. 80133d8: f3bf 8f6f isb sy
  45597. 80133dc: f3bf 8f4f dsb sy
  45598. 80133e0: 61bb str r3, [r7, #24]
  45599. }
  45600. 80133e2: bf00 nop
  45601. 80133e4: bf00 nop
  45602. 80133e6: e7fd b.n 80133e4 <xQueueReceive+0x90>
  45603. /*lint -save -e904 This function relaxes the coding standard somewhat to
  45604. allow return statements within the function itself. This is done in the
  45605. interest of execution time efficiency. */
  45606. for( ;; )
  45607. {
  45608. taskENTER_CRITICAL();
  45609. 80133e8: f002 fd8e bl 8015f08 <vPortEnterCritical>
  45610. {
  45611. const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;
  45612. 80133ec: 6abb ldr r3, [r7, #40] @ 0x28
  45613. 80133ee: 6b9b ldr r3, [r3, #56] @ 0x38
  45614. 80133f0: 627b str r3, [r7, #36] @ 0x24
  45615. /* Is there data in the queue now? To be running the calling task
  45616. must be the highest priority task wanting to access the queue. */
  45617. if( uxMessagesWaiting > ( UBaseType_t ) 0 )
  45618. 80133f2: 6a7b ldr r3, [r7, #36] @ 0x24
  45619. 80133f4: 2b00 cmp r3, #0
  45620. 80133f6: d01f beq.n 8013438 <xQueueReceive+0xe4>
  45621. {
  45622. /* Data available, remove one item. */
  45623. prvCopyDataFromQueue( pxQueue, pvBuffer );
  45624. 80133f8: 68b9 ldr r1, [r7, #8]
  45625. 80133fa: 6ab8 ldr r0, [r7, #40] @ 0x28
  45626. 80133fc: f000 faa0 bl 8013940 <prvCopyDataFromQueue>
  45627. traceQUEUE_RECEIVE( pxQueue );
  45628. pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1;
  45629. 8013400: 6a7b ldr r3, [r7, #36] @ 0x24
  45630. 8013402: 1e5a subs r2, r3, #1
  45631. 8013404: 6abb ldr r3, [r7, #40] @ 0x28
  45632. 8013406: 639a str r2, [r3, #56] @ 0x38
  45633. /* There is now space in the queue, were any tasks waiting to
  45634. post to the queue? If so, unblock the highest priority waiting
  45635. task. */
  45636. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  45637. 8013408: 6abb ldr r3, [r7, #40] @ 0x28
  45638. 801340a: 691b ldr r3, [r3, #16]
  45639. 801340c: 2b00 cmp r3, #0
  45640. 801340e: d00f beq.n 8013430 <xQueueReceive+0xdc>
  45641. {
  45642. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  45643. 8013410: 6abb ldr r3, [r7, #40] @ 0x28
  45644. 8013412: 3310 adds r3, #16
  45645. 8013414: 4618 mov r0, r3
  45646. 8013416: f001 f9f5 bl 8014804 <xTaskRemoveFromEventList>
  45647. 801341a: 4603 mov r3, r0
  45648. 801341c: 2b00 cmp r3, #0
  45649. 801341e: d007 beq.n 8013430 <xQueueReceive+0xdc>
  45650. {
  45651. queueYIELD_IF_USING_PREEMPTION();
  45652. 8013420: 4b3c ldr r3, [pc, #240] @ (8013514 <xQueueReceive+0x1c0>)
  45653. 8013422: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  45654. 8013426: 601a str r2, [r3, #0]
  45655. 8013428: f3bf 8f4f dsb sy
  45656. 801342c: f3bf 8f6f isb sy
  45657. else
  45658. {
  45659. mtCOVERAGE_TEST_MARKER();
  45660. }
  45661. taskEXIT_CRITICAL();
  45662. 8013430: f002 fd9c bl 8015f6c <vPortExitCritical>
  45663. return pdPASS;
  45664. 8013434: 2301 movs r3, #1
  45665. 8013436: e069 b.n 801350c <xQueueReceive+0x1b8>
  45666. }
  45667. else
  45668. {
  45669. if( xTicksToWait == ( TickType_t ) 0 )
  45670. 8013438: 687b ldr r3, [r7, #4]
  45671. 801343a: 2b00 cmp r3, #0
  45672. 801343c: d103 bne.n 8013446 <xQueueReceive+0xf2>
  45673. {
  45674. /* The queue was empty and no block time is specified (or
  45675. the block time has expired) so leave now. */
  45676. taskEXIT_CRITICAL();
  45677. 801343e: f002 fd95 bl 8015f6c <vPortExitCritical>
  45678. traceQUEUE_RECEIVE_FAILED( pxQueue );
  45679. return errQUEUE_EMPTY;
  45680. 8013442: 2300 movs r3, #0
  45681. 8013444: e062 b.n 801350c <xQueueReceive+0x1b8>
  45682. }
  45683. else if( xEntryTimeSet == pdFALSE )
  45684. 8013446: 6afb ldr r3, [r7, #44] @ 0x2c
  45685. 8013448: 2b00 cmp r3, #0
  45686. 801344a: d106 bne.n 801345a <xQueueReceive+0x106>
  45687. {
  45688. /* The queue was empty and a block time was specified so
  45689. configure the timeout structure. */
  45690. vTaskInternalSetTimeOutState( &xTimeOut );
  45691. 801344c: f107 0310 add.w r3, r7, #16
  45692. 8013450: 4618 mov r0, r3
  45693. 8013452: f001 fa63 bl 801491c <vTaskInternalSetTimeOutState>
  45694. xEntryTimeSet = pdTRUE;
  45695. 8013456: 2301 movs r3, #1
  45696. 8013458: 62fb str r3, [r7, #44] @ 0x2c
  45697. /* Entry time was already set. */
  45698. mtCOVERAGE_TEST_MARKER();
  45699. }
  45700. }
  45701. }
  45702. taskEXIT_CRITICAL();
  45703. 801345a: f002 fd87 bl 8015f6c <vPortExitCritical>
  45704. /* Interrupts and other tasks can send to and receive from the queue
  45705. now the critical section has been exited. */
  45706. vTaskSuspendAll();
  45707. 801345e: f000 ff95 bl 801438c <vTaskSuspendAll>
  45708. prvLockQueue( pxQueue );
  45709. 8013462: f002 fd51 bl 8015f08 <vPortEnterCritical>
  45710. 8013466: 6abb ldr r3, [r7, #40] @ 0x28
  45711. 8013468: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  45712. 801346c: b25b sxtb r3, r3
  45713. 801346e: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  45714. 8013472: d103 bne.n 801347c <xQueueReceive+0x128>
  45715. 8013474: 6abb ldr r3, [r7, #40] @ 0x28
  45716. 8013476: 2200 movs r2, #0
  45717. 8013478: f883 2044 strb.w r2, [r3, #68] @ 0x44
  45718. 801347c: 6abb ldr r3, [r7, #40] @ 0x28
  45719. 801347e: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  45720. 8013482: b25b sxtb r3, r3
  45721. 8013484: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  45722. 8013488: d103 bne.n 8013492 <xQueueReceive+0x13e>
  45723. 801348a: 6abb ldr r3, [r7, #40] @ 0x28
  45724. 801348c: 2200 movs r2, #0
  45725. 801348e: f883 2045 strb.w r2, [r3, #69] @ 0x45
  45726. 8013492: f002 fd6b bl 8015f6c <vPortExitCritical>
  45727. /* Update the timeout state to see if it has expired yet. */
  45728. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  45729. 8013496: 1d3a adds r2, r7, #4
  45730. 8013498: f107 0310 add.w r3, r7, #16
  45731. 801349c: 4611 mov r1, r2
  45732. 801349e: 4618 mov r0, r3
  45733. 80134a0: f001 fa52 bl 8014948 <xTaskCheckForTimeOut>
  45734. 80134a4: 4603 mov r3, r0
  45735. 80134a6: 2b00 cmp r3, #0
  45736. 80134a8: d123 bne.n 80134f2 <xQueueReceive+0x19e>
  45737. {
  45738. /* The timeout has not expired. If the queue is still empty place
  45739. the task on the list of tasks waiting to receive from the queue. */
  45740. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  45741. 80134aa: 6ab8 ldr r0, [r7, #40] @ 0x28
  45742. 80134ac: f000 fac0 bl 8013a30 <prvIsQueueEmpty>
  45743. 80134b0: 4603 mov r3, r0
  45744. 80134b2: 2b00 cmp r3, #0
  45745. 80134b4: d017 beq.n 80134e6 <xQueueReceive+0x192>
  45746. {
  45747. traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );
  45748. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
  45749. 80134b6: 6abb ldr r3, [r7, #40] @ 0x28
  45750. 80134b8: 3324 adds r3, #36 @ 0x24
  45751. 80134ba: 687a ldr r2, [r7, #4]
  45752. 80134bc: 4611 mov r1, r2
  45753. 80134be: 4618 mov r0, r3
  45754. 80134c0: f001 f94e bl 8014760 <vTaskPlaceOnEventList>
  45755. prvUnlockQueue( pxQueue );
  45756. 80134c4: 6ab8 ldr r0, [r7, #40] @ 0x28
  45757. 80134c6: f000 fa61 bl 801398c <prvUnlockQueue>
  45758. if( xTaskResumeAll() == pdFALSE )
  45759. 80134ca: f000 ff6d bl 80143a8 <xTaskResumeAll>
  45760. 80134ce: 4603 mov r3, r0
  45761. 80134d0: 2b00 cmp r3, #0
  45762. 80134d2: d189 bne.n 80133e8 <xQueueReceive+0x94>
  45763. {
  45764. portYIELD_WITHIN_API();
  45765. 80134d4: 4b0f ldr r3, [pc, #60] @ (8013514 <xQueueReceive+0x1c0>)
  45766. 80134d6: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  45767. 80134da: 601a str r2, [r3, #0]
  45768. 80134dc: f3bf 8f4f dsb sy
  45769. 80134e0: f3bf 8f6f isb sy
  45770. 80134e4: e780 b.n 80133e8 <xQueueReceive+0x94>
  45771. }
  45772. else
  45773. {
  45774. /* The queue contains data again. Loop back to try and read the
  45775. data. */
  45776. prvUnlockQueue( pxQueue );
  45777. 80134e6: 6ab8 ldr r0, [r7, #40] @ 0x28
  45778. 80134e8: f000 fa50 bl 801398c <prvUnlockQueue>
  45779. ( void ) xTaskResumeAll();
  45780. 80134ec: f000 ff5c bl 80143a8 <xTaskResumeAll>
  45781. 80134f0: e77a b.n 80133e8 <xQueueReceive+0x94>
  45782. }
  45783. else
  45784. {
  45785. /* Timed out. If there is no data in the queue exit, otherwise loop
  45786. back and attempt to read the data. */
  45787. prvUnlockQueue( pxQueue );
  45788. 80134f2: 6ab8 ldr r0, [r7, #40] @ 0x28
  45789. 80134f4: f000 fa4a bl 801398c <prvUnlockQueue>
  45790. ( void ) xTaskResumeAll();
  45791. 80134f8: f000 ff56 bl 80143a8 <xTaskResumeAll>
  45792. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  45793. 80134fc: 6ab8 ldr r0, [r7, #40] @ 0x28
  45794. 80134fe: f000 fa97 bl 8013a30 <prvIsQueueEmpty>
  45795. 8013502: 4603 mov r3, r0
  45796. 8013504: 2b00 cmp r3, #0
  45797. 8013506: f43f af6f beq.w 80133e8 <xQueueReceive+0x94>
  45798. {
  45799. traceQUEUE_RECEIVE_FAILED( pxQueue );
  45800. return errQUEUE_EMPTY;
  45801. 801350a: 2300 movs r3, #0
  45802. {
  45803. mtCOVERAGE_TEST_MARKER();
  45804. }
  45805. }
  45806. } /*lint -restore */
  45807. }
  45808. 801350c: 4618 mov r0, r3
  45809. 801350e: 3730 adds r7, #48 @ 0x30
  45810. 8013510: 46bd mov sp, r7
  45811. 8013512: bd80 pop {r7, pc}
  45812. 8013514: e000ed04 .word 0xe000ed04
  45813. 08013518 <xQueueSemaphoreTake>:
  45814. /*-----------------------------------------------------------*/
  45815. BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait )
  45816. {
  45817. 8013518: b580 push {r7, lr}
  45818. 801351a: b08e sub sp, #56 @ 0x38
  45819. 801351c: af00 add r7, sp, #0
  45820. 801351e: 6078 str r0, [r7, #4]
  45821. 8013520: 6039 str r1, [r7, #0]
  45822. BaseType_t xEntryTimeSet = pdFALSE;
  45823. 8013522: 2300 movs r3, #0
  45824. 8013524: 637b str r3, [r7, #52] @ 0x34
  45825. TimeOut_t xTimeOut;
  45826. Queue_t * const pxQueue = xQueue;
  45827. 8013526: 687b ldr r3, [r7, #4]
  45828. 8013528: 62fb str r3, [r7, #44] @ 0x2c
  45829. #if( configUSE_MUTEXES == 1 )
  45830. BaseType_t xInheritanceOccurred = pdFALSE;
  45831. 801352a: 2300 movs r3, #0
  45832. 801352c: 633b str r3, [r7, #48] @ 0x30
  45833. #endif
  45834. /* Check the queue pointer is not NULL. */
  45835. configASSERT( ( pxQueue ) );
  45836. 801352e: 6afb ldr r3, [r7, #44] @ 0x2c
  45837. 8013530: 2b00 cmp r3, #0
  45838. 8013532: d10b bne.n 801354c <xQueueSemaphoreTake+0x34>
  45839. __asm volatile
  45840. 8013534: f04f 0350 mov.w r3, #80 @ 0x50
  45841. 8013538: f383 8811 msr BASEPRI, r3
  45842. 801353c: f3bf 8f6f isb sy
  45843. 8013540: f3bf 8f4f dsb sy
  45844. 8013544: 623b str r3, [r7, #32]
  45845. }
  45846. 8013546: bf00 nop
  45847. 8013548: bf00 nop
  45848. 801354a: e7fd b.n 8013548 <xQueueSemaphoreTake+0x30>
  45849. /* Check this really is a semaphore, in which case the item size will be
  45850. 0. */
  45851. configASSERT( pxQueue->uxItemSize == 0 );
  45852. 801354c: 6afb ldr r3, [r7, #44] @ 0x2c
  45853. 801354e: 6c1b ldr r3, [r3, #64] @ 0x40
  45854. 8013550: 2b00 cmp r3, #0
  45855. 8013552: d00b beq.n 801356c <xQueueSemaphoreTake+0x54>
  45856. __asm volatile
  45857. 8013554: f04f 0350 mov.w r3, #80 @ 0x50
  45858. 8013558: f383 8811 msr BASEPRI, r3
  45859. 801355c: f3bf 8f6f isb sy
  45860. 8013560: f3bf 8f4f dsb sy
  45861. 8013564: 61fb str r3, [r7, #28]
  45862. }
  45863. 8013566: bf00 nop
  45864. 8013568: bf00 nop
  45865. 801356a: e7fd b.n 8013568 <xQueueSemaphoreTake+0x50>
  45866. /* Cannot block if the scheduler is suspended. */
  45867. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  45868. {
  45869. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  45870. 801356c: f001 fb48 bl 8014c00 <xTaskGetSchedulerState>
  45871. 8013570: 4603 mov r3, r0
  45872. 8013572: 2b00 cmp r3, #0
  45873. 8013574: d102 bne.n 801357c <xQueueSemaphoreTake+0x64>
  45874. 8013576: 683b ldr r3, [r7, #0]
  45875. 8013578: 2b00 cmp r3, #0
  45876. 801357a: d101 bne.n 8013580 <xQueueSemaphoreTake+0x68>
  45877. 801357c: 2301 movs r3, #1
  45878. 801357e: e000 b.n 8013582 <xQueueSemaphoreTake+0x6a>
  45879. 8013580: 2300 movs r3, #0
  45880. 8013582: 2b00 cmp r3, #0
  45881. 8013584: d10b bne.n 801359e <xQueueSemaphoreTake+0x86>
  45882. __asm volatile
  45883. 8013586: f04f 0350 mov.w r3, #80 @ 0x50
  45884. 801358a: f383 8811 msr BASEPRI, r3
  45885. 801358e: f3bf 8f6f isb sy
  45886. 8013592: f3bf 8f4f dsb sy
  45887. 8013596: 61bb str r3, [r7, #24]
  45888. }
  45889. 8013598: bf00 nop
  45890. 801359a: bf00 nop
  45891. 801359c: e7fd b.n 801359a <xQueueSemaphoreTake+0x82>
  45892. /*lint -save -e904 This function relaxes the coding standard somewhat to allow return
  45893. statements within the function itself. This is done in the interest
  45894. of execution time efficiency. */
  45895. for( ;; )
  45896. {
  45897. taskENTER_CRITICAL();
  45898. 801359e: f002 fcb3 bl 8015f08 <vPortEnterCritical>
  45899. {
  45900. /* Semaphores are queues with an item size of 0, and where the
  45901. number of messages in the queue is the semaphore's count value. */
  45902. const UBaseType_t uxSemaphoreCount = pxQueue->uxMessagesWaiting;
  45903. 80135a2: 6afb ldr r3, [r7, #44] @ 0x2c
  45904. 80135a4: 6b9b ldr r3, [r3, #56] @ 0x38
  45905. 80135a6: 62bb str r3, [r7, #40] @ 0x28
  45906. /* Is there data in the queue now? To be running the calling task
  45907. must be the highest priority task wanting to access the queue. */
  45908. if( uxSemaphoreCount > ( UBaseType_t ) 0 )
  45909. 80135a8: 6abb ldr r3, [r7, #40] @ 0x28
  45910. 80135aa: 2b00 cmp r3, #0
  45911. 80135ac: d024 beq.n 80135f8 <xQueueSemaphoreTake+0xe0>
  45912. {
  45913. traceQUEUE_RECEIVE( pxQueue );
  45914. /* Semaphores are queues with a data size of zero and where the
  45915. messages waiting is the semaphore's count. Reduce the count. */
  45916. pxQueue->uxMessagesWaiting = uxSemaphoreCount - ( UBaseType_t ) 1;
  45917. 80135ae: 6abb ldr r3, [r7, #40] @ 0x28
  45918. 80135b0: 1e5a subs r2, r3, #1
  45919. 80135b2: 6afb ldr r3, [r7, #44] @ 0x2c
  45920. 80135b4: 639a str r2, [r3, #56] @ 0x38
  45921. #if ( configUSE_MUTEXES == 1 )
  45922. {
  45923. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  45924. 80135b6: 6afb ldr r3, [r7, #44] @ 0x2c
  45925. 80135b8: 681b ldr r3, [r3, #0]
  45926. 80135ba: 2b00 cmp r3, #0
  45927. 80135bc: d104 bne.n 80135c8 <xQueueSemaphoreTake+0xb0>
  45928. {
  45929. /* Record the information required to implement
  45930. priority inheritance should it become necessary. */
  45931. pxQueue->u.xSemaphore.xMutexHolder = pvTaskIncrementMutexHeldCount();
  45932. 80135be: f001 fc99 bl 8014ef4 <pvTaskIncrementMutexHeldCount>
  45933. 80135c2: 4602 mov r2, r0
  45934. 80135c4: 6afb ldr r3, [r7, #44] @ 0x2c
  45935. 80135c6: 609a str r2, [r3, #8]
  45936. }
  45937. #endif /* configUSE_MUTEXES */
  45938. /* Check to see if other tasks are blocked waiting to give the
  45939. semaphore, and if so, unblock the highest priority such task. */
  45940. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  45941. 80135c8: 6afb ldr r3, [r7, #44] @ 0x2c
  45942. 80135ca: 691b ldr r3, [r3, #16]
  45943. 80135cc: 2b00 cmp r3, #0
  45944. 80135ce: d00f beq.n 80135f0 <xQueueSemaphoreTake+0xd8>
  45945. {
  45946. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  45947. 80135d0: 6afb ldr r3, [r7, #44] @ 0x2c
  45948. 80135d2: 3310 adds r3, #16
  45949. 80135d4: 4618 mov r0, r3
  45950. 80135d6: f001 f915 bl 8014804 <xTaskRemoveFromEventList>
  45951. 80135da: 4603 mov r3, r0
  45952. 80135dc: 2b00 cmp r3, #0
  45953. 80135de: d007 beq.n 80135f0 <xQueueSemaphoreTake+0xd8>
  45954. {
  45955. queueYIELD_IF_USING_PREEMPTION();
  45956. 80135e0: 4b54 ldr r3, [pc, #336] @ (8013734 <xQueueSemaphoreTake+0x21c>)
  45957. 80135e2: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  45958. 80135e6: 601a str r2, [r3, #0]
  45959. 80135e8: f3bf 8f4f dsb sy
  45960. 80135ec: f3bf 8f6f isb sy
  45961. else
  45962. {
  45963. mtCOVERAGE_TEST_MARKER();
  45964. }
  45965. taskEXIT_CRITICAL();
  45966. 80135f0: f002 fcbc bl 8015f6c <vPortExitCritical>
  45967. return pdPASS;
  45968. 80135f4: 2301 movs r3, #1
  45969. 80135f6: e098 b.n 801372a <xQueueSemaphoreTake+0x212>
  45970. }
  45971. else
  45972. {
  45973. if( xTicksToWait == ( TickType_t ) 0 )
  45974. 80135f8: 683b ldr r3, [r7, #0]
  45975. 80135fa: 2b00 cmp r3, #0
  45976. 80135fc: d112 bne.n 8013624 <xQueueSemaphoreTake+0x10c>
  45977. /* For inheritance to have occurred there must have been an
  45978. initial timeout, and an adjusted timeout cannot become 0, as
  45979. if it were 0 the function would have exited. */
  45980. #if( configUSE_MUTEXES == 1 )
  45981. {
  45982. configASSERT( xInheritanceOccurred == pdFALSE );
  45983. 80135fe: 6b3b ldr r3, [r7, #48] @ 0x30
  45984. 8013600: 2b00 cmp r3, #0
  45985. 8013602: d00b beq.n 801361c <xQueueSemaphoreTake+0x104>
  45986. __asm volatile
  45987. 8013604: f04f 0350 mov.w r3, #80 @ 0x50
  45988. 8013608: f383 8811 msr BASEPRI, r3
  45989. 801360c: f3bf 8f6f isb sy
  45990. 8013610: f3bf 8f4f dsb sy
  45991. 8013614: 617b str r3, [r7, #20]
  45992. }
  45993. 8013616: bf00 nop
  45994. 8013618: bf00 nop
  45995. 801361a: e7fd b.n 8013618 <xQueueSemaphoreTake+0x100>
  45996. }
  45997. #endif /* configUSE_MUTEXES */
  45998. /* The semaphore count was 0 and no block time is specified
  45999. (or the block time has expired) so exit now. */
  46000. taskEXIT_CRITICAL();
  46001. 801361c: f002 fca6 bl 8015f6c <vPortExitCritical>
  46002. traceQUEUE_RECEIVE_FAILED( pxQueue );
  46003. return errQUEUE_EMPTY;
  46004. 8013620: 2300 movs r3, #0
  46005. 8013622: e082 b.n 801372a <xQueueSemaphoreTake+0x212>
  46006. }
  46007. else if( xEntryTimeSet == pdFALSE )
  46008. 8013624: 6b7b ldr r3, [r7, #52] @ 0x34
  46009. 8013626: 2b00 cmp r3, #0
  46010. 8013628: d106 bne.n 8013638 <xQueueSemaphoreTake+0x120>
  46011. {
  46012. /* The semaphore count was 0 and a block time was specified
  46013. so configure the timeout structure ready to block. */
  46014. vTaskInternalSetTimeOutState( &xTimeOut );
  46015. 801362a: f107 030c add.w r3, r7, #12
  46016. 801362e: 4618 mov r0, r3
  46017. 8013630: f001 f974 bl 801491c <vTaskInternalSetTimeOutState>
  46018. xEntryTimeSet = pdTRUE;
  46019. 8013634: 2301 movs r3, #1
  46020. 8013636: 637b str r3, [r7, #52] @ 0x34
  46021. /* Entry time was already set. */
  46022. mtCOVERAGE_TEST_MARKER();
  46023. }
  46024. }
  46025. }
  46026. taskEXIT_CRITICAL();
  46027. 8013638: f002 fc98 bl 8015f6c <vPortExitCritical>
  46028. /* Interrupts and other tasks can give to and take from the semaphore
  46029. now the critical section has been exited. */
  46030. vTaskSuspendAll();
  46031. 801363c: f000 fea6 bl 801438c <vTaskSuspendAll>
  46032. prvLockQueue( pxQueue );
  46033. 8013640: f002 fc62 bl 8015f08 <vPortEnterCritical>
  46034. 8013644: 6afb ldr r3, [r7, #44] @ 0x2c
  46035. 8013646: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  46036. 801364a: b25b sxtb r3, r3
  46037. 801364c: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  46038. 8013650: d103 bne.n 801365a <xQueueSemaphoreTake+0x142>
  46039. 8013652: 6afb ldr r3, [r7, #44] @ 0x2c
  46040. 8013654: 2200 movs r2, #0
  46041. 8013656: f883 2044 strb.w r2, [r3, #68] @ 0x44
  46042. 801365a: 6afb ldr r3, [r7, #44] @ 0x2c
  46043. 801365c: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  46044. 8013660: b25b sxtb r3, r3
  46045. 8013662: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  46046. 8013666: d103 bne.n 8013670 <xQueueSemaphoreTake+0x158>
  46047. 8013668: 6afb ldr r3, [r7, #44] @ 0x2c
  46048. 801366a: 2200 movs r2, #0
  46049. 801366c: f883 2045 strb.w r2, [r3, #69] @ 0x45
  46050. 8013670: f002 fc7c bl 8015f6c <vPortExitCritical>
  46051. /* Update the timeout state to see if it has expired yet. */
  46052. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  46053. 8013674: 463a mov r2, r7
  46054. 8013676: f107 030c add.w r3, r7, #12
  46055. 801367a: 4611 mov r1, r2
  46056. 801367c: 4618 mov r0, r3
  46057. 801367e: f001 f963 bl 8014948 <xTaskCheckForTimeOut>
  46058. 8013682: 4603 mov r3, r0
  46059. 8013684: 2b00 cmp r3, #0
  46060. 8013686: d132 bne.n 80136ee <xQueueSemaphoreTake+0x1d6>
  46061. {
  46062. /* A block time is specified and not expired. If the semaphore
  46063. count is 0 then enter the Blocked state to wait for a semaphore to
  46064. become available. As semaphores are implemented with queues the
  46065. queue being empty is equivalent to the semaphore count being 0. */
  46066. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  46067. 8013688: 6af8 ldr r0, [r7, #44] @ 0x2c
  46068. 801368a: f000 f9d1 bl 8013a30 <prvIsQueueEmpty>
  46069. 801368e: 4603 mov r3, r0
  46070. 8013690: 2b00 cmp r3, #0
  46071. 8013692: d026 beq.n 80136e2 <xQueueSemaphoreTake+0x1ca>
  46072. {
  46073. traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );
  46074. #if ( configUSE_MUTEXES == 1 )
  46075. {
  46076. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  46077. 8013694: 6afb ldr r3, [r7, #44] @ 0x2c
  46078. 8013696: 681b ldr r3, [r3, #0]
  46079. 8013698: 2b00 cmp r3, #0
  46080. 801369a: d109 bne.n 80136b0 <xQueueSemaphoreTake+0x198>
  46081. {
  46082. taskENTER_CRITICAL();
  46083. 801369c: f002 fc34 bl 8015f08 <vPortEnterCritical>
  46084. {
  46085. xInheritanceOccurred = xTaskPriorityInherit( pxQueue->u.xSemaphore.xMutexHolder );
  46086. 80136a0: 6afb ldr r3, [r7, #44] @ 0x2c
  46087. 80136a2: 689b ldr r3, [r3, #8]
  46088. 80136a4: 4618 mov r0, r3
  46089. 80136a6: f001 fac9 bl 8014c3c <xTaskPriorityInherit>
  46090. 80136aa: 6338 str r0, [r7, #48] @ 0x30
  46091. }
  46092. taskEXIT_CRITICAL();
  46093. 80136ac: f002 fc5e bl 8015f6c <vPortExitCritical>
  46094. mtCOVERAGE_TEST_MARKER();
  46095. }
  46096. }
  46097. #endif
  46098. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
  46099. 80136b0: 6afb ldr r3, [r7, #44] @ 0x2c
  46100. 80136b2: 3324 adds r3, #36 @ 0x24
  46101. 80136b4: 683a ldr r2, [r7, #0]
  46102. 80136b6: 4611 mov r1, r2
  46103. 80136b8: 4618 mov r0, r3
  46104. 80136ba: f001 f851 bl 8014760 <vTaskPlaceOnEventList>
  46105. prvUnlockQueue( pxQueue );
  46106. 80136be: 6af8 ldr r0, [r7, #44] @ 0x2c
  46107. 80136c0: f000 f964 bl 801398c <prvUnlockQueue>
  46108. if( xTaskResumeAll() == pdFALSE )
  46109. 80136c4: f000 fe70 bl 80143a8 <xTaskResumeAll>
  46110. 80136c8: 4603 mov r3, r0
  46111. 80136ca: 2b00 cmp r3, #0
  46112. 80136cc: f47f af67 bne.w 801359e <xQueueSemaphoreTake+0x86>
  46113. {
  46114. portYIELD_WITHIN_API();
  46115. 80136d0: 4b18 ldr r3, [pc, #96] @ (8013734 <xQueueSemaphoreTake+0x21c>)
  46116. 80136d2: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  46117. 80136d6: 601a str r2, [r3, #0]
  46118. 80136d8: f3bf 8f4f dsb sy
  46119. 80136dc: f3bf 8f6f isb sy
  46120. 80136e0: e75d b.n 801359e <xQueueSemaphoreTake+0x86>
  46121. }
  46122. else
  46123. {
  46124. /* There was no timeout and the semaphore count was not 0, so
  46125. attempt to take the semaphore again. */
  46126. prvUnlockQueue( pxQueue );
  46127. 80136e2: 6af8 ldr r0, [r7, #44] @ 0x2c
  46128. 80136e4: f000 f952 bl 801398c <prvUnlockQueue>
  46129. ( void ) xTaskResumeAll();
  46130. 80136e8: f000 fe5e bl 80143a8 <xTaskResumeAll>
  46131. 80136ec: e757 b.n 801359e <xQueueSemaphoreTake+0x86>
  46132. }
  46133. }
  46134. else
  46135. {
  46136. /* Timed out. */
  46137. prvUnlockQueue( pxQueue );
  46138. 80136ee: 6af8 ldr r0, [r7, #44] @ 0x2c
  46139. 80136f0: f000 f94c bl 801398c <prvUnlockQueue>
  46140. ( void ) xTaskResumeAll();
  46141. 80136f4: f000 fe58 bl 80143a8 <xTaskResumeAll>
  46142. /* If the semaphore count is 0 exit now as the timeout has
  46143. expired. Otherwise return to attempt to take the semaphore that is
  46144. known to be available. As semaphores are implemented by queues the
  46145. queue being empty is equivalent to the semaphore count being 0. */
  46146. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  46147. 80136f8: 6af8 ldr r0, [r7, #44] @ 0x2c
  46148. 80136fa: f000 f999 bl 8013a30 <prvIsQueueEmpty>
  46149. 80136fe: 4603 mov r3, r0
  46150. 8013700: 2b00 cmp r3, #0
  46151. 8013702: f43f af4c beq.w 801359e <xQueueSemaphoreTake+0x86>
  46152. #if ( configUSE_MUTEXES == 1 )
  46153. {
  46154. /* xInheritanceOccurred could only have be set if
  46155. pxQueue->uxQueueType == queueQUEUE_IS_MUTEX so no need to
  46156. test the mutex type again to check it is actually a mutex. */
  46157. if( xInheritanceOccurred != pdFALSE )
  46158. 8013706: 6b3b ldr r3, [r7, #48] @ 0x30
  46159. 8013708: 2b00 cmp r3, #0
  46160. 801370a: d00d beq.n 8013728 <xQueueSemaphoreTake+0x210>
  46161. {
  46162. taskENTER_CRITICAL();
  46163. 801370c: f002 fbfc bl 8015f08 <vPortEnterCritical>
  46164. /* This task blocking on the mutex caused another
  46165. task to inherit this task's priority. Now this task
  46166. has timed out the priority should be disinherited
  46167. again, but only as low as the next highest priority
  46168. task that is waiting for the same mutex. */
  46169. uxHighestWaitingPriority = prvGetDisinheritPriorityAfterTimeout( pxQueue );
  46170. 8013710: 6af8 ldr r0, [r7, #44] @ 0x2c
  46171. 8013712: f000 f893 bl 801383c <prvGetDisinheritPriorityAfterTimeout>
  46172. 8013716: 6278 str r0, [r7, #36] @ 0x24
  46173. vTaskPriorityDisinheritAfterTimeout( pxQueue->u.xSemaphore.xMutexHolder, uxHighestWaitingPriority );
  46174. 8013718: 6afb ldr r3, [r7, #44] @ 0x2c
  46175. 801371a: 689b ldr r3, [r3, #8]
  46176. 801371c: 6a79 ldr r1, [r7, #36] @ 0x24
  46177. 801371e: 4618 mov r0, r3
  46178. 8013720: f001 fb64 bl 8014dec <vTaskPriorityDisinheritAfterTimeout>
  46179. }
  46180. taskEXIT_CRITICAL();
  46181. 8013724: f002 fc22 bl 8015f6c <vPortExitCritical>
  46182. }
  46183. }
  46184. #endif /* configUSE_MUTEXES */
  46185. traceQUEUE_RECEIVE_FAILED( pxQueue );
  46186. return errQUEUE_EMPTY;
  46187. 8013728: 2300 movs r3, #0
  46188. {
  46189. mtCOVERAGE_TEST_MARKER();
  46190. }
  46191. }
  46192. } /*lint -restore */
  46193. }
  46194. 801372a: 4618 mov r0, r3
  46195. 801372c: 3738 adds r7, #56 @ 0x38
  46196. 801372e: 46bd mov sp, r7
  46197. 8013730: bd80 pop {r7, pc}
  46198. 8013732: bf00 nop
  46199. 8013734: e000ed04 .word 0xe000ed04
  46200. 08013738 <xQueueReceiveFromISR>:
  46201. } /*lint -restore */
  46202. }
  46203. /*-----------------------------------------------------------*/
  46204. BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken )
  46205. {
  46206. 8013738: b580 push {r7, lr}
  46207. 801373a: b08e sub sp, #56 @ 0x38
  46208. 801373c: af00 add r7, sp, #0
  46209. 801373e: 60f8 str r0, [r7, #12]
  46210. 8013740: 60b9 str r1, [r7, #8]
  46211. 8013742: 607a str r2, [r7, #4]
  46212. BaseType_t xReturn;
  46213. UBaseType_t uxSavedInterruptStatus;
  46214. Queue_t * const pxQueue = xQueue;
  46215. 8013744: 68fb ldr r3, [r7, #12]
  46216. 8013746: 633b str r3, [r7, #48] @ 0x30
  46217. configASSERT( pxQueue );
  46218. 8013748: 6b3b ldr r3, [r7, #48] @ 0x30
  46219. 801374a: 2b00 cmp r3, #0
  46220. 801374c: d10b bne.n 8013766 <xQueueReceiveFromISR+0x2e>
  46221. __asm volatile
  46222. 801374e: f04f 0350 mov.w r3, #80 @ 0x50
  46223. 8013752: f383 8811 msr BASEPRI, r3
  46224. 8013756: f3bf 8f6f isb sy
  46225. 801375a: f3bf 8f4f dsb sy
  46226. 801375e: 623b str r3, [r7, #32]
  46227. }
  46228. 8013760: bf00 nop
  46229. 8013762: bf00 nop
  46230. 8013764: e7fd b.n 8013762 <xQueueReceiveFromISR+0x2a>
  46231. configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
  46232. 8013766: 68bb ldr r3, [r7, #8]
  46233. 8013768: 2b00 cmp r3, #0
  46234. 801376a: d103 bne.n 8013774 <xQueueReceiveFromISR+0x3c>
  46235. 801376c: 6b3b ldr r3, [r7, #48] @ 0x30
  46236. 801376e: 6c1b ldr r3, [r3, #64] @ 0x40
  46237. 8013770: 2b00 cmp r3, #0
  46238. 8013772: d101 bne.n 8013778 <xQueueReceiveFromISR+0x40>
  46239. 8013774: 2301 movs r3, #1
  46240. 8013776: e000 b.n 801377a <xQueueReceiveFromISR+0x42>
  46241. 8013778: 2300 movs r3, #0
  46242. 801377a: 2b00 cmp r3, #0
  46243. 801377c: d10b bne.n 8013796 <xQueueReceiveFromISR+0x5e>
  46244. __asm volatile
  46245. 801377e: f04f 0350 mov.w r3, #80 @ 0x50
  46246. 8013782: f383 8811 msr BASEPRI, r3
  46247. 8013786: f3bf 8f6f isb sy
  46248. 801378a: f3bf 8f4f dsb sy
  46249. 801378e: 61fb str r3, [r7, #28]
  46250. }
  46251. 8013790: bf00 nop
  46252. 8013792: bf00 nop
  46253. 8013794: e7fd b.n 8013792 <xQueueReceiveFromISR+0x5a>
  46254. that have been assigned a priority at or (logically) below the maximum
  46255. system call interrupt priority. FreeRTOS maintains a separate interrupt
  46256. safe API to ensure interrupt entry is as fast and as simple as possible.
  46257. More information (albeit Cortex-M specific) is provided on the following
  46258. link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
  46259. portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
  46260. 8013796: f002 fc97 bl 80160c8 <vPortValidateInterruptPriority>
  46261. __asm volatile
  46262. 801379a: f3ef 8211 mrs r2, BASEPRI
  46263. 801379e: f04f 0350 mov.w r3, #80 @ 0x50
  46264. 80137a2: f383 8811 msr BASEPRI, r3
  46265. 80137a6: f3bf 8f6f isb sy
  46266. 80137aa: f3bf 8f4f dsb sy
  46267. 80137ae: 61ba str r2, [r7, #24]
  46268. 80137b0: 617b str r3, [r7, #20]
  46269. return ulOriginalBASEPRI;
  46270. 80137b2: 69bb ldr r3, [r7, #24]
  46271. uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
  46272. 80137b4: 62fb str r3, [r7, #44] @ 0x2c
  46273. {
  46274. const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;
  46275. 80137b6: 6b3b ldr r3, [r7, #48] @ 0x30
  46276. 80137b8: 6b9b ldr r3, [r3, #56] @ 0x38
  46277. 80137ba: 62bb str r3, [r7, #40] @ 0x28
  46278. /* Cannot block in an ISR, so check there is data available. */
  46279. if( uxMessagesWaiting > ( UBaseType_t ) 0 )
  46280. 80137bc: 6abb ldr r3, [r7, #40] @ 0x28
  46281. 80137be: 2b00 cmp r3, #0
  46282. 80137c0: d02f beq.n 8013822 <xQueueReceiveFromISR+0xea>
  46283. {
  46284. const int8_t cRxLock = pxQueue->cRxLock;
  46285. 80137c2: 6b3b ldr r3, [r7, #48] @ 0x30
  46286. 80137c4: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  46287. 80137c8: f887 3027 strb.w r3, [r7, #39] @ 0x27
  46288. traceQUEUE_RECEIVE_FROM_ISR( pxQueue );
  46289. prvCopyDataFromQueue( pxQueue, pvBuffer );
  46290. 80137cc: 68b9 ldr r1, [r7, #8]
  46291. 80137ce: 6b38 ldr r0, [r7, #48] @ 0x30
  46292. 80137d0: f000 f8b6 bl 8013940 <prvCopyDataFromQueue>
  46293. pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1;
  46294. 80137d4: 6abb ldr r3, [r7, #40] @ 0x28
  46295. 80137d6: 1e5a subs r2, r3, #1
  46296. 80137d8: 6b3b ldr r3, [r7, #48] @ 0x30
  46297. 80137da: 639a str r2, [r3, #56] @ 0x38
  46298. /* If the queue is locked the event list will not be modified.
  46299. Instead update the lock count so the task that unlocks the queue
  46300. will know that an ISR has removed data while the queue was
  46301. locked. */
  46302. if( cRxLock == queueUNLOCKED )
  46303. 80137dc: f997 3027 ldrsb.w r3, [r7, #39] @ 0x27
  46304. 80137e0: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  46305. 80137e4: d112 bne.n 801380c <xQueueReceiveFromISR+0xd4>
  46306. {
  46307. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  46308. 80137e6: 6b3b ldr r3, [r7, #48] @ 0x30
  46309. 80137e8: 691b ldr r3, [r3, #16]
  46310. 80137ea: 2b00 cmp r3, #0
  46311. 80137ec: d016 beq.n 801381c <xQueueReceiveFromISR+0xe4>
  46312. {
  46313. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  46314. 80137ee: 6b3b ldr r3, [r7, #48] @ 0x30
  46315. 80137f0: 3310 adds r3, #16
  46316. 80137f2: 4618 mov r0, r3
  46317. 80137f4: f001 f806 bl 8014804 <xTaskRemoveFromEventList>
  46318. 80137f8: 4603 mov r3, r0
  46319. 80137fa: 2b00 cmp r3, #0
  46320. 80137fc: d00e beq.n 801381c <xQueueReceiveFromISR+0xe4>
  46321. {
  46322. /* The task waiting has a higher priority than us so
  46323. force a context switch. */
  46324. if( pxHigherPriorityTaskWoken != NULL )
  46325. 80137fe: 687b ldr r3, [r7, #4]
  46326. 8013800: 2b00 cmp r3, #0
  46327. 8013802: d00b beq.n 801381c <xQueueReceiveFromISR+0xe4>
  46328. {
  46329. *pxHigherPriorityTaskWoken = pdTRUE;
  46330. 8013804: 687b ldr r3, [r7, #4]
  46331. 8013806: 2201 movs r2, #1
  46332. 8013808: 601a str r2, [r3, #0]
  46333. 801380a: e007 b.n 801381c <xQueueReceiveFromISR+0xe4>
  46334. }
  46335. else
  46336. {
  46337. /* Increment the lock count so the task that unlocks the queue
  46338. knows that data was removed while it was locked. */
  46339. pxQueue->cRxLock = ( int8_t ) ( cRxLock + 1 );
  46340. 801380c: f897 3027 ldrb.w r3, [r7, #39] @ 0x27
  46341. 8013810: 3301 adds r3, #1
  46342. 8013812: b2db uxtb r3, r3
  46343. 8013814: b25a sxtb r2, r3
  46344. 8013816: 6b3b ldr r3, [r7, #48] @ 0x30
  46345. 8013818: f883 2044 strb.w r2, [r3, #68] @ 0x44
  46346. }
  46347. xReturn = pdPASS;
  46348. 801381c: 2301 movs r3, #1
  46349. 801381e: 637b str r3, [r7, #52] @ 0x34
  46350. 8013820: e001 b.n 8013826 <xQueueReceiveFromISR+0xee>
  46351. }
  46352. else
  46353. {
  46354. xReturn = pdFAIL;
  46355. 8013822: 2300 movs r3, #0
  46356. 8013824: 637b str r3, [r7, #52] @ 0x34
  46357. 8013826: 6afb ldr r3, [r7, #44] @ 0x2c
  46358. 8013828: 613b str r3, [r7, #16]
  46359. __asm volatile
  46360. 801382a: 693b ldr r3, [r7, #16]
  46361. 801382c: f383 8811 msr BASEPRI, r3
  46362. }
  46363. 8013830: bf00 nop
  46364. traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue );
  46365. }
  46366. }
  46367. portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
  46368. return xReturn;
  46369. 8013832: 6b7b ldr r3, [r7, #52] @ 0x34
  46370. }
  46371. 8013834: 4618 mov r0, r3
  46372. 8013836: 3738 adds r7, #56 @ 0x38
  46373. 8013838: 46bd mov sp, r7
  46374. 801383a: bd80 pop {r7, pc}
  46375. 0801383c <prvGetDisinheritPriorityAfterTimeout>:
  46376. /*-----------------------------------------------------------*/
  46377. #if( configUSE_MUTEXES == 1 )
  46378. static UBaseType_t prvGetDisinheritPriorityAfterTimeout( const Queue_t * const pxQueue )
  46379. {
  46380. 801383c: b480 push {r7}
  46381. 801383e: b085 sub sp, #20
  46382. 8013840: af00 add r7, sp, #0
  46383. 8013842: 6078 str r0, [r7, #4]
  46384. priority, but the waiting task times out, then the holder should
  46385. disinherit the priority - but only down to the highest priority of any
  46386. other tasks that are waiting for the same mutex. For this purpose,
  46387. return the priority of the highest priority task that is waiting for the
  46388. mutex. */
  46389. if( listCURRENT_LIST_LENGTH( &( pxQueue->xTasksWaitingToReceive ) ) > 0U )
  46390. 8013844: 687b ldr r3, [r7, #4]
  46391. 8013846: 6a5b ldr r3, [r3, #36] @ 0x24
  46392. 8013848: 2b00 cmp r3, #0
  46393. 801384a: d006 beq.n 801385a <prvGetDisinheritPriorityAfterTimeout+0x1e>
  46394. {
  46395. uxHighestPriorityOfWaitingTasks = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) listGET_ITEM_VALUE_OF_HEAD_ENTRY( &( pxQueue->xTasksWaitingToReceive ) );
  46396. 801384c: 687b ldr r3, [r7, #4]
  46397. 801384e: 6b1b ldr r3, [r3, #48] @ 0x30
  46398. 8013850: 681b ldr r3, [r3, #0]
  46399. 8013852: f1c3 0338 rsb r3, r3, #56 @ 0x38
  46400. 8013856: 60fb str r3, [r7, #12]
  46401. 8013858: e001 b.n 801385e <prvGetDisinheritPriorityAfterTimeout+0x22>
  46402. }
  46403. else
  46404. {
  46405. uxHighestPriorityOfWaitingTasks = tskIDLE_PRIORITY;
  46406. 801385a: 2300 movs r3, #0
  46407. 801385c: 60fb str r3, [r7, #12]
  46408. }
  46409. return uxHighestPriorityOfWaitingTasks;
  46410. 801385e: 68fb ldr r3, [r7, #12]
  46411. }
  46412. 8013860: 4618 mov r0, r3
  46413. 8013862: 3714 adds r7, #20
  46414. 8013864: 46bd mov sp, r7
  46415. 8013866: f85d 7b04 ldr.w r7, [sp], #4
  46416. 801386a: 4770 bx lr
  46417. 0801386c <prvCopyDataToQueue>:
  46418. #endif /* configUSE_MUTEXES */
  46419. /*-----------------------------------------------------------*/
  46420. static BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue, const void *pvItemToQueue, const BaseType_t xPosition )
  46421. {
  46422. 801386c: b580 push {r7, lr}
  46423. 801386e: b086 sub sp, #24
  46424. 8013870: af00 add r7, sp, #0
  46425. 8013872: 60f8 str r0, [r7, #12]
  46426. 8013874: 60b9 str r1, [r7, #8]
  46427. 8013876: 607a str r2, [r7, #4]
  46428. BaseType_t xReturn = pdFALSE;
  46429. 8013878: 2300 movs r3, #0
  46430. 801387a: 617b str r3, [r7, #20]
  46431. UBaseType_t uxMessagesWaiting;
  46432. /* This function is called from a critical section. */
  46433. uxMessagesWaiting = pxQueue->uxMessagesWaiting;
  46434. 801387c: 68fb ldr r3, [r7, #12]
  46435. 801387e: 6b9b ldr r3, [r3, #56] @ 0x38
  46436. 8013880: 613b str r3, [r7, #16]
  46437. if( pxQueue->uxItemSize == ( UBaseType_t ) 0 )
  46438. 8013882: 68fb ldr r3, [r7, #12]
  46439. 8013884: 6c1b ldr r3, [r3, #64] @ 0x40
  46440. 8013886: 2b00 cmp r3, #0
  46441. 8013888: d10d bne.n 80138a6 <prvCopyDataToQueue+0x3a>
  46442. {
  46443. #if ( configUSE_MUTEXES == 1 )
  46444. {
  46445. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  46446. 801388a: 68fb ldr r3, [r7, #12]
  46447. 801388c: 681b ldr r3, [r3, #0]
  46448. 801388e: 2b00 cmp r3, #0
  46449. 8013890: d14d bne.n 801392e <prvCopyDataToQueue+0xc2>
  46450. {
  46451. /* The mutex is no longer being held. */
  46452. xReturn = xTaskPriorityDisinherit( pxQueue->u.xSemaphore.xMutexHolder );
  46453. 8013892: 68fb ldr r3, [r7, #12]
  46454. 8013894: 689b ldr r3, [r3, #8]
  46455. 8013896: 4618 mov r0, r3
  46456. 8013898: f001 fa38 bl 8014d0c <xTaskPriorityDisinherit>
  46457. 801389c: 6178 str r0, [r7, #20]
  46458. pxQueue->u.xSemaphore.xMutexHolder = NULL;
  46459. 801389e: 68fb ldr r3, [r7, #12]
  46460. 80138a0: 2200 movs r2, #0
  46461. 80138a2: 609a str r2, [r3, #8]
  46462. 80138a4: e043 b.n 801392e <prvCopyDataToQueue+0xc2>
  46463. mtCOVERAGE_TEST_MARKER();
  46464. }
  46465. }
  46466. #endif /* configUSE_MUTEXES */
  46467. }
  46468. else if( xPosition == queueSEND_TO_BACK )
  46469. 80138a6: 687b ldr r3, [r7, #4]
  46470. 80138a8: 2b00 cmp r3, #0
  46471. 80138aa: d119 bne.n 80138e0 <prvCopyDataToQueue+0x74>
  46472. {
  46473. ( 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. */
  46474. 80138ac: 68fb ldr r3, [r7, #12]
  46475. 80138ae: 6858 ldr r0, [r3, #4]
  46476. 80138b0: 68fb ldr r3, [r7, #12]
  46477. 80138b2: 6c1b ldr r3, [r3, #64] @ 0x40
  46478. 80138b4: 461a mov r2, r3
  46479. 80138b6: 68b9 ldr r1, [r7, #8]
  46480. 80138b8: f003 f81f bl 80168fa <memcpy>
  46481. 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. */
  46482. 80138bc: 68fb ldr r3, [r7, #12]
  46483. 80138be: 685a ldr r2, [r3, #4]
  46484. 80138c0: 68fb ldr r3, [r7, #12]
  46485. 80138c2: 6c1b ldr r3, [r3, #64] @ 0x40
  46486. 80138c4: 441a add r2, r3
  46487. 80138c6: 68fb ldr r3, [r7, #12]
  46488. 80138c8: 605a str r2, [r3, #4]
  46489. if( pxQueue->pcWriteTo >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
  46490. 80138ca: 68fb ldr r3, [r7, #12]
  46491. 80138cc: 685a ldr r2, [r3, #4]
  46492. 80138ce: 68fb ldr r3, [r7, #12]
  46493. 80138d0: 689b ldr r3, [r3, #8]
  46494. 80138d2: 429a cmp r2, r3
  46495. 80138d4: d32b bcc.n 801392e <prvCopyDataToQueue+0xc2>
  46496. {
  46497. pxQueue->pcWriteTo = pxQueue->pcHead;
  46498. 80138d6: 68fb ldr r3, [r7, #12]
  46499. 80138d8: 681a ldr r2, [r3, #0]
  46500. 80138da: 68fb ldr r3, [r7, #12]
  46501. 80138dc: 605a str r2, [r3, #4]
  46502. 80138de: e026 b.n 801392e <prvCopyDataToQueue+0xc2>
  46503. mtCOVERAGE_TEST_MARKER();
  46504. }
  46505. }
  46506. else
  46507. {
  46508. ( 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. */
  46509. 80138e0: 68fb ldr r3, [r7, #12]
  46510. 80138e2: 68d8 ldr r0, [r3, #12]
  46511. 80138e4: 68fb ldr r3, [r7, #12]
  46512. 80138e6: 6c1b ldr r3, [r3, #64] @ 0x40
  46513. 80138e8: 461a mov r2, r3
  46514. 80138ea: 68b9 ldr r1, [r7, #8]
  46515. 80138ec: f003 f805 bl 80168fa <memcpy>
  46516. pxQueue->u.xQueue.pcReadFrom -= pxQueue->uxItemSize;
  46517. 80138f0: 68fb ldr r3, [r7, #12]
  46518. 80138f2: 68da ldr r2, [r3, #12]
  46519. 80138f4: 68fb ldr r3, [r7, #12]
  46520. 80138f6: 6c1b ldr r3, [r3, #64] @ 0x40
  46521. 80138f8: 425b negs r3, r3
  46522. 80138fa: 441a add r2, r3
  46523. 80138fc: 68fb ldr r3, [r7, #12]
  46524. 80138fe: 60da str r2, [r3, #12]
  46525. if( pxQueue->u.xQueue.pcReadFrom < pxQueue->pcHead ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
  46526. 8013900: 68fb ldr r3, [r7, #12]
  46527. 8013902: 68da ldr r2, [r3, #12]
  46528. 8013904: 68fb ldr r3, [r7, #12]
  46529. 8013906: 681b ldr r3, [r3, #0]
  46530. 8013908: 429a cmp r2, r3
  46531. 801390a: d207 bcs.n 801391c <prvCopyDataToQueue+0xb0>
  46532. {
  46533. pxQueue->u.xQueue.pcReadFrom = ( pxQueue->u.xQueue.pcTail - pxQueue->uxItemSize );
  46534. 801390c: 68fb ldr r3, [r7, #12]
  46535. 801390e: 689a ldr r2, [r3, #8]
  46536. 8013910: 68fb ldr r3, [r7, #12]
  46537. 8013912: 6c1b ldr r3, [r3, #64] @ 0x40
  46538. 8013914: 425b negs r3, r3
  46539. 8013916: 441a add r2, r3
  46540. 8013918: 68fb ldr r3, [r7, #12]
  46541. 801391a: 60da str r2, [r3, #12]
  46542. else
  46543. {
  46544. mtCOVERAGE_TEST_MARKER();
  46545. }
  46546. if( xPosition == queueOVERWRITE )
  46547. 801391c: 687b ldr r3, [r7, #4]
  46548. 801391e: 2b02 cmp r3, #2
  46549. 8013920: d105 bne.n 801392e <prvCopyDataToQueue+0xc2>
  46550. {
  46551. if( uxMessagesWaiting > ( UBaseType_t ) 0 )
  46552. 8013922: 693b ldr r3, [r7, #16]
  46553. 8013924: 2b00 cmp r3, #0
  46554. 8013926: d002 beq.n 801392e <prvCopyDataToQueue+0xc2>
  46555. {
  46556. /* An item is not being added but overwritten, so subtract
  46557. one from the recorded number of items in the queue so when
  46558. one is added again below the number of recorded items remains
  46559. correct. */
  46560. --uxMessagesWaiting;
  46561. 8013928: 693b ldr r3, [r7, #16]
  46562. 801392a: 3b01 subs r3, #1
  46563. 801392c: 613b str r3, [r7, #16]
  46564. {
  46565. mtCOVERAGE_TEST_MARKER();
  46566. }
  46567. }
  46568. pxQueue->uxMessagesWaiting = uxMessagesWaiting + ( UBaseType_t ) 1;
  46569. 801392e: 693b ldr r3, [r7, #16]
  46570. 8013930: 1c5a adds r2, r3, #1
  46571. 8013932: 68fb ldr r3, [r7, #12]
  46572. 8013934: 639a str r2, [r3, #56] @ 0x38
  46573. return xReturn;
  46574. 8013936: 697b ldr r3, [r7, #20]
  46575. }
  46576. 8013938: 4618 mov r0, r3
  46577. 801393a: 3718 adds r7, #24
  46578. 801393c: 46bd mov sp, r7
  46579. 801393e: bd80 pop {r7, pc}
  46580. 08013940 <prvCopyDataFromQueue>:
  46581. /*-----------------------------------------------------------*/
  46582. static void prvCopyDataFromQueue( Queue_t * const pxQueue, void * const pvBuffer )
  46583. {
  46584. 8013940: b580 push {r7, lr}
  46585. 8013942: b082 sub sp, #8
  46586. 8013944: af00 add r7, sp, #0
  46587. 8013946: 6078 str r0, [r7, #4]
  46588. 8013948: 6039 str r1, [r7, #0]
  46589. if( pxQueue->uxItemSize != ( UBaseType_t ) 0 )
  46590. 801394a: 687b ldr r3, [r7, #4]
  46591. 801394c: 6c1b ldr r3, [r3, #64] @ 0x40
  46592. 801394e: 2b00 cmp r3, #0
  46593. 8013950: d018 beq.n 8013984 <prvCopyDataFromQueue+0x44>
  46594. {
  46595. 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. */
  46596. 8013952: 687b ldr r3, [r7, #4]
  46597. 8013954: 68da ldr r2, [r3, #12]
  46598. 8013956: 687b ldr r3, [r7, #4]
  46599. 8013958: 6c1b ldr r3, [r3, #64] @ 0x40
  46600. 801395a: 441a add r2, r3
  46601. 801395c: 687b ldr r3, [r7, #4]
  46602. 801395e: 60da str r2, [r3, #12]
  46603. if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */
  46604. 8013960: 687b ldr r3, [r7, #4]
  46605. 8013962: 68da ldr r2, [r3, #12]
  46606. 8013964: 687b ldr r3, [r7, #4]
  46607. 8013966: 689b ldr r3, [r3, #8]
  46608. 8013968: 429a cmp r2, r3
  46609. 801396a: d303 bcc.n 8013974 <prvCopyDataFromQueue+0x34>
  46610. {
  46611. pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead;
  46612. 801396c: 687b ldr r3, [r7, #4]
  46613. 801396e: 681a ldr r2, [r3, #0]
  46614. 8013970: 687b ldr r3, [r7, #4]
  46615. 8013972: 60da str r2, [r3, #12]
  46616. }
  46617. else
  46618. {
  46619. mtCOVERAGE_TEST_MARKER();
  46620. }
  46621. ( 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. */
  46622. 8013974: 687b ldr r3, [r7, #4]
  46623. 8013976: 68d9 ldr r1, [r3, #12]
  46624. 8013978: 687b ldr r3, [r7, #4]
  46625. 801397a: 6c1b ldr r3, [r3, #64] @ 0x40
  46626. 801397c: 461a mov r2, r3
  46627. 801397e: 6838 ldr r0, [r7, #0]
  46628. 8013980: f002 ffbb bl 80168fa <memcpy>
  46629. }
  46630. }
  46631. 8013984: bf00 nop
  46632. 8013986: 3708 adds r7, #8
  46633. 8013988: 46bd mov sp, r7
  46634. 801398a: bd80 pop {r7, pc}
  46635. 0801398c <prvUnlockQueue>:
  46636. /*-----------------------------------------------------------*/
  46637. static void prvUnlockQueue( Queue_t * const pxQueue )
  46638. {
  46639. 801398c: b580 push {r7, lr}
  46640. 801398e: b084 sub sp, #16
  46641. 8013990: af00 add r7, sp, #0
  46642. 8013992: 6078 str r0, [r7, #4]
  46643. /* The lock counts contains the number of extra data items placed or
  46644. removed from the queue while the queue was locked. When a queue is
  46645. locked items can be added or removed, but the event lists cannot be
  46646. updated. */
  46647. taskENTER_CRITICAL();
  46648. 8013994: f002 fab8 bl 8015f08 <vPortEnterCritical>
  46649. {
  46650. int8_t cTxLock = pxQueue->cTxLock;
  46651. 8013998: 687b ldr r3, [r7, #4]
  46652. 801399a: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  46653. 801399e: 73fb strb r3, [r7, #15]
  46654. /* See if data was added to the queue while it was locked. */
  46655. while( cTxLock > queueLOCKED_UNMODIFIED )
  46656. 80139a0: e011 b.n 80139c6 <prvUnlockQueue+0x3a>
  46657. }
  46658. #else /* configUSE_QUEUE_SETS */
  46659. {
  46660. /* Tasks that are removed from the event list will get added to
  46661. the pending ready list as the scheduler is still suspended. */
  46662. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  46663. 80139a2: 687b ldr r3, [r7, #4]
  46664. 80139a4: 6a5b ldr r3, [r3, #36] @ 0x24
  46665. 80139a6: 2b00 cmp r3, #0
  46666. 80139a8: d012 beq.n 80139d0 <prvUnlockQueue+0x44>
  46667. {
  46668. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  46669. 80139aa: 687b ldr r3, [r7, #4]
  46670. 80139ac: 3324 adds r3, #36 @ 0x24
  46671. 80139ae: 4618 mov r0, r3
  46672. 80139b0: f000 ff28 bl 8014804 <xTaskRemoveFromEventList>
  46673. 80139b4: 4603 mov r3, r0
  46674. 80139b6: 2b00 cmp r3, #0
  46675. 80139b8: d001 beq.n 80139be <prvUnlockQueue+0x32>
  46676. {
  46677. /* The task waiting has a higher priority so record that
  46678. a context switch is required. */
  46679. vTaskMissedYield();
  46680. 80139ba: f001 f829 bl 8014a10 <vTaskMissedYield>
  46681. break;
  46682. }
  46683. }
  46684. #endif /* configUSE_QUEUE_SETS */
  46685. --cTxLock;
  46686. 80139be: 7bfb ldrb r3, [r7, #15]
  46687. 80139c0: 3b01 subs r3, #1
  46688. 80139c2: b2db uxtb r3, r3
  46689. 80139c4: 73fb strb r3, [r7, #15]
  46690. while( cTxLock > queueLOCKED_UNMODIFIED )
  46691. 80139c6: f997 300f ldrsb.w r3, [r7, #15]
  46692. 80139ca: 2b00 cmp r3, #0
  46693. 80139cc: dce9 bgt.n 80139a2 <prvUnlockQueue+0x16>
  46694. 80139ce: e000 b.n 80139d2 <prvUnlockQueue+0x46>
  46695. break;
  46696. 80139d0: bf00 nop
  46697. }
  46698. pxQueue->cTxLock = queueUNLOCKED;
  46699. 80139d2: 687b ldr r3, [r7, #4]
  46700. 80139d4: 22ff movs r2, #255 @ 0xff
  46701. 80139d6: f883 2045 strb.w r2, [r3, #69] @ 0x45
  46702. }
  46703. taskEXIT_CRITICAL();
  46704. 80139da: f002 fac7 bl 8015f6c <vPortExitCritical>
  46705. /* Do the same for the Rx lock. */
  46706. taskENTER_CRITICAL();
  46707. 80139de: f002 fa93 bl 8015f08 <vPortEnterCritical>
  46708. {
  46709. int8_t cRxLock = pxQueue->cRxLock;
  46710. 80139e2: 687b ldr r3, [r7, #4]
  46711. 80139e4: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  46712. 80139e8: 73bb strb r3, [r7, #14]
  46713. while( cRxLock > queueLOCKED_UNMODIFIED )
  46714. 80139ea: e011 b.n 8013a10 <prvUnlockQueue+0x84>
  46715. {
  46716. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  46717. 80139ec: 687b ldr r3, [r7, #4]
  46718. 80139ee: 691b ldr r3, [r3, #16]
  46719. 80139f0: 2b00 cmp r3, #0
  46720. 80139f2: d012 beq.n 8013a1a <prvUnlockQueue+0x8e>
  46721. {
  46722. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  46723. 80139f4: 687b ldr r3, [r7, #4]
  46724. 80139f6: 3310 adds r3, #16
  46725. 80139f8: 4618 mov r0, r3
  46726. 80139fa: f000 ff03 bl 8014804 <xTaskRemoveFromEventList>
  46727. 80139fe: 4603 mov r3, r0
  46728. 8013a00: 2b00 cmp r3, #0
  46729. 8013a02: d001 beq.n 8013a08 <prvUnlockQueue+0x7c>
  46730. {
  46731. vTaskMissedYield();
  46732. 8013a04: f001 f804 bl 8014a10 <vTaskMissedYield>
  46733. else
  46734. {
  46735. mtCOVERAGE_TEST_MARKER();
  46736. }
  46737. --cRxLock;
  46738. 8013a08: 7bbb ldrb r3, [r7, #14]
  46739. 8013a0a: 3b01 subs r3, #1
  46740. 8013a0c: b2db uxtb r3, r3
  46741. 8013a0e: 73bb strb r3, [r7, #14]
  46742. while( cRxLock > queueLOCKED_UNMODIFIED )
  46743. 8013a10: f997 300e ldrsb.w r3, [r7, #14]
  46744. 8013a14: 2b00 cmp r3, #0
  46745. 8013a16: dce9 bgt.n 80139ec <prvUnlockQueue+0x60>
  46746. 8013a18: e000 b.n 8013a1c <prvUnlockQueue+0x90>
  46747. }
  46748. else
  46749. {
  46750. break;
  46751. 8013a1a: bf00 nop
  46752. }
  46753. }
  46754. pxQueue->cRxLock = queueUNLOCKED;
  46755. 8013a1c: 687b ldr r3, [r7, #4]
  46756. 8013a1e: 22ff movs r2, #255 @ 0xff
  46757. 8013a20: f883 2044 strb.w r2, [r3, #68] @ 0x44
  46758. }
  46759. taskEXIT_CRITICAL();
  46760. 8013a24: f002 faa2 bl 8015f6c <vPortExitCritical>
  46761. }
  46762. 8013a28: bf00 nop
  46763. 8013a2a: 3710 adds r7, #16
  46764. 8013a2c: 46bd mov sp, r7
  46765. 8013a2e: bd80 pop {r7, pc}
  46766. 08013a30 <prvIsQueueEmpty>:
  46767. /*-----------------------------------------------------------*/
  46768. static BaseType_t prvIsQueueEmpty( const Queue_t *pxQueue )
  46769. {
  46770. 8013a30: b580 push {r7, lr}
  46771. 8013a32: b084 sub sp, #16
  46772. 8013a34: af00 add r7, sp, #0
  46773. 8013a36: 6078 str r0, [r7, #4]
  46774. BaseType_t xReturn;
  46775. taskENTER_CRITICAL();
  46776. 8013a38: f002 fa66 bl 8015f08 <vPortEnterCritical>
  46777. {
  46778. if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 )
  46779. 8013a3c: 687b ldr r3, [r7, #4]
  46780. 8013a3e: 6b9b ldr r3, [r3, #56] @ 0x38
  46781. 8013a40: 2b00 cmp r3, #0
  46782. 8013a42: d102 bne.n 8013a4a <prvIsQueueEmpty+0x1a>
  46783. {
  46784. xReturn = pdTRUE;
  46785. 8013a44: 2301 movs r3, #1
  46786. 8013a46: 60fb str r3, [r7, #12]
  46787. 8013a48: e001 b.n 8013a4e <prvIsQueueEmpty+0x1e>
  46788. }
  46789. else
  46790. {
  46791. xReturn = pdFALSE;
  46792. 8013a4a: 2300 movs r3, #0
  46793. 8013a4c: 60fb str r3, [r7, #12]
  46794. }
  46795. }
  46796. taskEXIT_CRITICAL();
  46797. 8013a4e: f002 fa8d bl 8015f6c <vPortExitCritical>
  46798. return xReturn;
  46799. 8013a52: 68fb ldr r3, [r7, #12]
  46800. }
  46801. 8013a54: 4618 mov r0, r3
  46802. 8013a56: 3710 adds r7, #16
  46803. 8013a58: 46bd mov sp, r7
  46804. 8013a5a: bd80 pop {r7, pc}
  46805. 08013a5c <prvIsQueueFull>:
  46806. return xReturn;
  46807. } /*lint !e818 xQueue could not be pointer to const because it is a typedef. */
  46808. /*-----------------------------------------------------------*/
  46809. static BaseType_t prvIsQueueFull( const Queue_t *pxQueue )
  46810. {
  46811. 8013a5c: b580 push {r7, lr}
  46812. 8013a5e: b084 sub sp, #16
  46813. 8013a60: af00 add r7, sp, #0
  46814. 8013a62: 6078 str r0, [r7, #4]
  46815. BaseType_t xReturn;
  46816. taskENTER_CRITICAL();
  46817. 8013a64: f002 fa50 bl 8015f08 <vPortEnterCritical>
  46818. {
  46819. if( pxQueue->uxMessagesWaiting == pxQueue->uxLength )
  46820. 8013a68: 687b ldr r3, [r7, #4]
  46821. 8013a6a: 6b9a ldr r2, [r3, #56] @ 0x38
  46822. 8013a6c: 687b ldr r3, [r7, #4]
  46823. 8013a6e: 6bdb ldr r3, [r3, #60] @ 0x3c
  46824. 8013a70: 429a cmp r2, r3
  46825. 8013a72: d102 bne.n 8013a7a <prvIsQueueFull+0x1e>
  46826. {
  46827. xReturn = pdTRUE;
  46828. 8013a74: 2301 movs r3, #1
  46829. 8013a76: 60fb str r3, [r7, #12]
  46830. 8013a78: e001 b.n 8013a7e <prvIsQueueFull+0x22>
  46831. }
  46832. else
  46833. {
  46834. xReturn = pdFALSE;
  46835. 8013a7a: 2300 movs r3, #0
  46836. 8013a7c: 60fb str r3, [r7, #12]
  46837. }
  46838. }
  46839. taskEXIT_CRITICAL();
  46840. 8013a7e: f002 fa75 bl 8015f6c <vPortExitCritical>
  46841. return xReturn;
  46842. 8013a82: 68fb ldr r3, [r7, #12]
  46843. }
  46844. 8013a84: 4618 mov r0, r3
  46845. 8013a86: 3710 adds r7, #16
  46846. 8013a88: 46bd mov sp, r7
  46847. 8013a8a: bd80 pop {r7, pc}
  46848. 08013a8c <vQueueAddToRegistry>:
  46849. /*-----------------------------------------------------------*/
  46850. #if ( configQUEUE_REGISTRY_SIZE > 0 )
  46851. void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcQueueName ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
  46852. {
  46853. 8013a8c: b480 push {r7}
  46854. 8013a8e: b085 sub sp, #20
  46855. 8013a90: af00 add r7, sp, #0
  46856. 8013a92: 6078 str r0, [r7, #4]
  46857. 8013a94: 6039 str r1, [r7, #0]
  46858. UBaseType_t ux;
  46859. /* See if there is an empty space in the registry. A NULL name denotes
  46860. a free slot. */
  46861. for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
  46862. 8013a96: 2300 movs r3, #0
  46863. 8013a98: 60fb str r3, [r7, #12]
  46864. 8013a9a: e014 b.n 8013ac6 <vQueueAddToRegistry+0x3a>
  46865. {
  46866. if( xQueueRegistry[ ux ].pcQueueName == NULL )
  46867. 8013a9c: 4a0f ldr r2, [pc, #60] @ (8013adc <vQueueAddToRegistry+0x50>)
  46868. 8013a9e: 68fb ldr r3, [r7, #12]
  46869. 8013aa0: f852 3033 ldr.w r3, [r2, r3, lsl #3]
  46870. 8013aa4: 2b00 cmp r3, #0
  46871. 8013aa6: d10b bne.n 8013ac0 <vQueueAddToRegistry+0x34>
  46872. {
  46873. /* Store the information on this queue. */
  46874. xQueueRegistry[ ux ].pcQueueName = pcQueueName;
  46875. 8013aa8: 490c ldr r1, [pc, #48] @ (8013adc <vQueueAddToRegistry+0x50>)
  46876. 8013aaa: 68fb ldr r3, [r7, #12]
  46877. 8013aac: 683a ldr r2, [r7, #0]
  46878. 8013aae: f841 2033 str.w r2, [r1, r3, lsl #3]
  46879. xQueueRegistry[ ux ].xHandle = xQueue;
  46880. 8013ab2: 4a0a ldr r2, [pc, #40] @ (8013adc <vQueueAddToRegistry+0x50>)
  46881. 8013ab4: 68fb ldr r3, [r7, #12]
  46882. 8013ab6: 00db lsls r3, r3, #3
  46883. 8013ab8: 4413 add r3, r2
  46884. 8013aba: 687a ldr r2, [r7, #4]
  46885. 8013abc: 605a str r2, [r3, #4]
  46886. traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName );
  46887. break;
  46888. 8013abe: e006 b.n 8013ace <vQueueAddToRegistry+0x42>
  46889. for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
  46890. 8013ac0: 68fb ldr r3, [r7, #12]
  46891. 8013ac2: 3301 adds r3, #1
  46892. 8013ac4: 60fb str r3, [r7, #12]
  46893. 8013ac6: 68fb ldr r3, [r7, #12]
  46894. 8013ac8: 2b07 cmp r3, #7
  46895. 8013aca: d9e7 bls.n 8013a9c <vQueueAddToRegistry+0x10>
  46896. else
  46897. {
  46898. mtCOVERAGE_TEST_MARKER();
  46899. }
  46900. }
  46901. }
  46902. 8013acc: bf00 nop
  46903. 8013ace: bf00 nop
  46904. 8013ad0: 3714 adds r7, #20
  46905. 8013ad2: 46bd mov sp, r7
  46906. 8013ad4: f85d 7b04 ldr.w r7, [sp], #4
  46907. 8013ad8: 4770 bx lr
  46908. 8013ada: bf00 nop
  46909. 8013adc: 24002564 .word 0x24002564
  46910. 08013ae0 <vQueueWaitForMessageRestricted>:
  46911. /*-----------------------------------------------------------*/
  46912. #if ( configUSE_TIMERS == 1 )
  46913. void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely )
  46914. {
  46915. 8013ae0: b580 push {r7, lr}
  46916. 8013ae2: b086 sub sp, #24
  46917. 8013ae4: af00 add r7, sp, #0
  46918. 8013ae6: 60f8 str r0, [r7, #12]
  46919. 8013ae8: 60b9 str r1, [r7, #8]
  46920. 8013aea: 607a str r2, [r7, #4]
  46921. Queue_t * const pxQueue = xQueue;
  46922. 8013aec: 68fb ldr r3, [r7, #12]
  46923. 8013aee: 617b str r3, [r7, #20]
  46924. will not actually cause the task to block, just place it on a blocked
  46925. list. It will not block until the scheduler is unlocked - at which
  46926. time a yield will be performed. If an item is added to the queue while
  46927. the queue is locked, and the calling task blocks on the queue, then the
  46928. calling task will be immediately unblocked when the queue is unlocked. */
  46929. prvLockQueue( pxQueue );
  46930. 8013af0: f002 fa0a bl 8015f08 <vPortEnterCritical>
  46931. 8013af4: 697b ldr r3, [r7, #20]
  46932. 8013af6: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  46933. 8013afa: b25b sxtb r3, r3
  46934. 8013afc: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  46935. 8013b00: d103 bne.n 8013b0a <vQueueWaitForMessageRestricted+0x2a>
  46936. 8013b02: 697b ldr r3, [r7, #20]
  46937. 8013b04: 2200 movs r2, #0
  46938. 8013b06: f883 2044 strb.w r2, [r3, #68] @ 0x44
  46939. 8013b0a: 697b ldr r3, [r7, #20]
  46940. 8013b0c: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  46941. 8013b10: b25b sxtb r3, r3
  46942. 8013b12: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  46943. 8013b16: d103 bne.n 8013b20 <vQueueWaitForMessageRestricted+0x40>
  46944. 8013b18: 697b ldr r3, [r7, #20]
  46945. 8013b1a: 2200 movs r2, #0
  46946. 8013b1c: f883 2045 strb.w r2, [r3, #69] @ 0x45
  46947. 8013b20: f002 fa24 bl 8015f6c <vPortExitCritical>
  46948. if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0U )
  46949. 8013b24: 697b ldr r3, [r7, #20]
  46950. 8013b26: 6b9b ldr r3, [r3, #56] @ 0x38
  46951. 8013b28: 2b00 cmp r3, #0
  46952. 8013b2a: d106 bne.n 8013b3a <vQueueWaitForMessageRestricted+0x5a>
  46953. {
  46954. /* There is nothing in the queue, block for the specified period. */
  46955. vTaskPlaceOnEventListRestricted( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait, xWaitIndefinitely );
  46956. 8013b2c: 697b ldr r3, [r7, #20]
  46957. 8013b2e: 3324 adds r3, #36 @ 0x24
  46958. 8013b30: 687a ldr r2, [r7, #4]
  46959. 8013b32: 68b9 ldr r1, [r7, #8]
  46960. 8013b34: 4618 mov r0, r3
  46961. 8013b36: f000 fe39 bl 80147ac <vTaskPlaceOnEventListRestricted>
  46962. }
  46963. else
  46964. {
  46965. mtCOVERAGE_TEST_MARKER();
  46966. }
  46967. prvUnlockQueue( pxQueue );
  46968. 8013b3a: 6978 ldr r0, [r7, #20]
  46969. 8013b3c: f7ff ff26 bl 801398c <prvUnlockQueue>
  46970. }
  46971. 8013b40: bf00 nop
  46972. 8013b42: 3718 adds r7, #24
  46973. 8013b44: 46bd mov sp, r7
  46974. 8013b46: bd80 pop {r7, pc}
  46975. 08013b48 <xStreamBufferSpacesAvailable>:
  46976. return xReturn;
  46977. }
  46978. /*-----------------------------------------------------------*/
  46979. size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer )
  46980. {
  46981. 8013b48: b480 push {r7}
  46982. 8013b4a: b087 sub sp, #28
  46983. 8013b4c: af00 add r7, sp, #0
  46984. 8013b4e: 6078 str r0, [r7, #4]
  46985. const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;
  46986. 8013b50: 687b ldr r3, [r7, #4]
  46987. 8013b52: 613b str r3, [r7, #16]
  46988. size_t xSpace;
  46989. configASSERT( pxStreamBuffer );
  46990. 8013b54: 693b ldr r3, [r7, #16]
  46991. 8013b56: 2b00 cmp r3, #0
  46992. 8013b58: d10b bne.n 8013b72 <xStreamBufferSpacesAvailable+0x2a>
  46993. __asm volatile
  46994. 8013b5a: f04f 0350 mov.w r3, #80 @ 0x50
  46995. 8013b5e: f383 8811 msr BASEPRI, r3
  46996. 8013b62: f3bf 8f6f isb sy
  46997. 8013b66: f3bf 8f4f dsb sy
  46998. 8013b6a: 60fb str r3, [r7, #12]
  46999. }
  47000. 8013b6c: bf00 nop
  47001. 8013b6e: bf00 nop
  47002. 8013b70: e7fd b.n 8013b6e <xStreamBufferSpacesAvailable+0x26>
  47003. xSpace = pxStreamBuffer->xLength + pxStreamBuffer->xTail;
  47004. 8013b72: 693b ldr r3, [r7, #16]
  47005. 8013b74: 689a ldr r2, [r3, #8]
  47006. 8013b76: 693b ldr r3, [r7, #16]
  47007. 8013b78: 681b ldr r3, [r3, #0]
  47008. 8013b7a: 4413 add r3, r2
  47009. 8013b7c: 617b str r3, [r7, #20]
  47010. xSpace -= pxStreamBuffer->xHead;
  47011. 8013b7e: 693b ldr r3, [r7, #16]
  47012. 8013b80: 685b ldr r3, [r3, #4]
  47013. 8013b82: 697a ldr r2, [r7, #20]
  47014. 8013b84: 1ad3 subs r3, r2, r3
  47015. 8013b86: 617b str r3, [r7, #20]
  47016. xSpace -= ( size_t ) 1;
  47017. 8013b88: 697b ldr r3, [r7, #20]
  47018. 8013b8a: 3b01 subs r3, #1
  47019. 8013b8c: 617b str r3, [r7, #20]
  47020. if( xSpace >= pxStreamBuffer->xLength )
  47021. 8013b8e: 693b ldr r3, [r7, #16]
  47022. 8013b90: 689b ldr r3, [r3, #8]
  47023. 8013b92: 697a ldr r2, [r7, #20]
  47024. 8013b94: 429a cmp r2, r3
  47025. 8013b96: d304 bcc.n 8013ba2 <xStreamBufferSpacesAvailable+0x5a>
  47026. {
  47027. xSpace -= pxStreamBuffer->xLength;
  47028. 8013b98: 693b ldr r3, [r7, #16]
  47029. 8013b9a: 689b ldr r3, [r3, #8]
  47030. 8013b9c: 697a ldr r2, [r7, #20]
  47031. 8013b9e: 1ad3 subs r3, r2, r3
  47032. 8013ba0: 617b str r3, [r7, #20]
  47033. else
  47034. {
  47035. mtCOVERAGE_TEST_MARKER();
  47036. }
  47037. return xSpace;
  47038. 8013ba2: 697b ldr r3, [r7, #20]
  47039. }
  47040. 8013ba4: 4618 mov r0, r3
  47041. 8013ba6: 371c adds r7, #28
  47042. 8013ba8: 46bd mov sp, r7
  47043. 8013baa: f85d 7b04 ldr.w r7, [sp], #4
  47044. 8013bae: 4770 bx lr
  47045. 08013bb0 <xStreamBufferSend>:
  47046. size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,
  47047. const void *pvTxData,
  47048. size_t xDataLengthBytes,
  47049. TickType_t xTicksToWait )
  47050. {
  47051. 8013bb0: b580 push {r7, lr}
  47052. 8013bb2: b090 sub sp, #64 @ 0x40
  47053. 8013bb4: af02 add r7, sp, #8
  47054. 8013bb6: 60f8 str r0, [r7, #12]
  47055. 8013bb8: 60b9 str r1, [r7, #8]
  47056. 8013bba: 607a str r2, [r7, #4]
  47057. 8013bbc: 603b str r3, [r7, #0]
  47058. StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;
  47059. 8013bbe: 68fb ldr r3, [r7, #12]
  47060. 8013bc0: 62fb str r3, [r7, #44] @ 0x2c
  47061. size_t xReturn, xSpace = 0;
  47062. 8013bc2: 2300 movs r3, #0
  47063. 8013bc4: 637b str r3, [r7, #52] @ 0x34
  47064. size_t xRequiredSpace = xDataLengthBytes;
  47065. 8013bc6: 687b ldr r3, [r7, #4]
  47066. 8013bc8: 633b str r3, [r7, #48] @ 0x30
  47067. TimeOut_t xTimeOut;
  47068. configASSERT( pvTxData );
  47069. 8013bca: 68bb ldr r3, [r7, #8]
  47070. 8013bcc: 2b00 cmp r3, #0
  47071. 8013bce: d10b bne.n 8013be8 <xStreamBufferSend+0x38>
  47072. __asm volatile
  47073. 8013bd0: f04f 0350 mov.w r3, #80 @ 0x50
  47074. 8013bd4: f383 8811 msr BASEPRI, r3
  47075. 8013bd8: f3bf 8f6f isb sy
  47076. 8013bdc: f3bf 8f4f dsb sy
  47077. 8013be0: 627b str r3, [r7, #36] @ 0x24
  47078. }
  47079. 8013be2: bf00 nop
  47080. 8013be4: bf00 nop
  47081. 8013be6: e7fd b.n 8013be4 <xStreamBufferSend+0x34>
  47082. configASSERT( pxStreamBuffer );
  47083. 8013be8: 6afb ldr r3, [r7, #44] @ 0x2c
  47084. 8013bea: 2b00 cmp r3, #0
  47085. 8013bec: d10b bne.n 8013c06 <xStreamBufferSend+0x56>
  47086. __asm volatile
  47087. 8013bee: f04f 0350 mov.w r3, #80 @ 0x50
  47088. 8013bf2: f383 8811 msr BASEPRI, r3
  47089. 8013bf6: f3bf 8f6f isb sy
  47090. 8013bfa: f3bf 8f4f dsb sy
  47091. 8013bfe: 623b str r3, [r7, #32]
  47092. }
  47093. 8013c00: bf00 nop
  47094. 8013c02: bf00 nop
  47095. 8013c04: e7fd b.n 8013c02 <xStreamBufferSend+0x52>
  47096. /* This send function is used to write to both message buffers and stream
  47097. buffers. If this is a message buffer then the space needed must be
  47098. increased by the amount of bytes needed to store the length of the
  47099. message. */
  47100. if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )
  47101. 8013c06: 6afb ldr r3, [r7, #44] @ 0x2c
  47102. 8013c08: 7f1b ldrb r3, [r3, #28]
  47103. 8013c0a: f003 0301 and.w r3, r3, #1
  47104. 8013c0e: 2b00 cmp r3, #0
  47105. 8013c10: d012 beq.n 8013c38 <xStreamBufferSend+0x88>
  47106. {
  47107. xRequiredSpace += sbBYTES_TO_STORE_MESSAGE_LENGTH;
  47108. 8013c12: 6b3b ldr r3, [r7, #48] @ 0x30
  47109. 8013c14: 3304 adds r3, #4
  47110. 8013c16: 633b str r3, [r7, #48] @ 0x30
  47111. /* Overflow? */
  47112. configASSERT( xRequiredSpace > xDataLengthBytes );
  47113. 8013c18: 6b3a ldr r2, [r7, #48] @ 0x30
  47114. 8013c1a: 687b ldr r3, [r7, #4]
  47115. 8013c1c: 429a cmp r2, r3
  47116. 8013c1e: d80b bhi.n 8013c38 <xStreamBufferSend+0x88>
  47117. __asm volatile
  47118. 8013c20: f04f 0350 mov.w r3, #80 @ 0x50
  47119. 8013c24: f383 8811 msr BASEPRI, r3
  47120. 8013c28: f3bf 8f6f isb sy
  47121. 8013c2c: f3bf 8f4f dsb sy
  47122. 8013c30: 61fb str r3, [r7, #28]
  47123. }
  47124. 8013c32: bf00 nop
  47125. 8013c34: bf00 nop
  47126. 8013c36: e7fd b.n 8013c34 <xStreamBufferSend+0x84>
  47127. else
  47128. {
  47129. mtCOVERAGE_TEST_MARKER();
  47130. }
  47131. if( xTicksToWait != ( TickType_t ) 0 )
  47132. 8013c38: 683b ldr r3, [r7, #0]
  47133. 8013c3a: 2b00 cmp r3, #0
  47134. 8013c3c: d03f beq.n 8013cbe <xStreamBufferSend+0x10e>
  47135. {
  47136. vTaskSetTimeOutState( &xTimeOut );
  47137. 8013c3e: f107 0310 add.w r3, r7, #16
  47138. 8013c42: 4618 mov r0, r3
  47139. 8013c44: f000 fe42 bl 80148cc <vTaskSetTimeOutState>
  47140. do
  47141. {
  47142. /* Wait until the required number of bytes are free in the message
  47143. buffer. */
  47144. taskENTER_CRITICAL();
  47145. 8013c48: f002 f95e bl 8015f08 <vPortEnterCritical>
  47146. {
  47147. xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer );
  47148. 8013c4c: 6af8 ldr r0, [r7, #44] @ 0x2c
  47149. 8013c4e: f7ff ff7b bl 8013b48 <xStreamBufferSpacesAvailable>
  47150. 8013c52: 6378 str r0, [r7, #52] @ 0x34
  47151. if( xSpace < xRequiredSpace )
  47152. 8013c54: 6b7a ldr r2, [r7, #52] @ 0x34
  47153. 8013c56: 6b3b ldr r3, [r7, #48] @ 0x30
  47154. 8013c58: 429a cmp r2, r3
  47155. 8013c5a: d218 bcs.n 8013c8e <xStreamBufferSend+0xde>
  47156. {
  47157. /* Clear notification state as going to wait for space. */
  47158. ( void ) xTaskNotifyStateClear( NULL );
  47159. 8013c5c: 2000 movs r0, #0
  47160. 8013c5e: f001 fb65 bl 801532c <xTaskNotifyStateClear>
  47161. /* Should only be one writer. */
  47162. configASSERT( pxStreamBuffer->xTaskWaitingToSend == NULL );
  47163. 8013c62: 6afb ldr r3, [r7, #44] @ 0x2c
  47164. 8013c64: 695b ldr r3, [r3, #20]
  47165. 8013c66: 2b00 cmp r3, #0
  47166. 8013c68: d00b beq.n 8013c82 <xStreamBufferSend+0xd2>
  47167. __asm volatile
  47168. 8013c6a: f04f 0350 mov.w r3, #80 @ 0x50
  47169. 8013c6e: f383 8811 msr BASEPRI, r3
  47170. 8013c72: f3bf 8f6f isb sy
  47171. 8013c76: f3bf 8f4f dsb sy
  47172. 8013c7a: 61bb str r3, [r7, #24]
  47173. }
  47174. 8013c7c: bf00 nop
  47175. 8013c7e: bf00 nop
  47176. 8013c80: e7fd b.n 8013c7e <xStreamBufferSend+0xce>
  47177. pxStreamBuffer->xTaskWaitingToSend = xTaskGetCurrentTaskHandle();
  47178. 8013c82: f000 ffad bl 8014be0 <xTaskGetCurrentTaskHandle>
  47179. 8013c86: 4602 mov r2, r0
  47180. 8013c88: 6afb ldr r3, [r7, #44] @ 0x2c
  47181. 8013c8a: 615a str r2, [r3, #20]
  47182. 8013c8c: e002 b.n 8013c94 <xStreamBufferSend+0xe4>
  47183. }
  47184. else
  47185. {
  47186. taskEXIT_CRITICAL();
  47187. 8013c8e: f002 f96d bl 8015f6c <vPortExitCritical>
  47188. break;
  47189. 8013c92: e014 b.n 8013cbe <xStreamBufferSend+0x10e>
  47190. }
  47191. }
  47192. taskEXIT_CRITICAL();
  47193. 8013c94: f002 f96a bl 8015f6c <vPortExitCritical>
  47194. traceBLOCKING_ON_STREAM_BUFFER_SEND( xStreamBuffer );
  47195. ( void ) xTaskNotifyWait( ( uint32_t ) 0, ( uint32_t ) 0, NULL, xTicksToWait );
  47196. 8013c98: 683b ldr r3, [r7, #0]
  47197. 8013c9a: 2200 movs r2, #0
  47198. 8013c9c: 2100 movs r1, #0
  47199. 8013c9e: 2000 movs r0, #0
  47200. 8013ca0: f001 f93c bl 8014f1c <xTaskNotifyWait>
  47201. pxStreamBuffer->xTaskWaitingToSend = NULL;
  47202. 8013ca4: 6afb ldr r3, [r7, #44] @ 0x2c
  47203. 8013ca6: 2200 movs r2, #0
  47204. 8013ca8: 615a str r2, [r3, #20]
  47205. } while( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE );
  47206. 8013caa: 463a mov r2, r7
  47207. 8013cac: f107 0310 add.w r3, r7, #16
  47208. 8013cb0: 4611 mov r1, r2
  47209. 8013cb2: 4618 mov r0, r3
  47210. 8013cb4: f000 fe48 bl 8014948 <xTaskCheckForTimeOut>
  47211. 8013cb8: 4603 mov r3, r0
  47212. 8013cba: 2b00 cmp r3, #0
  47213. 8013cbc: d0c4 beq.n 8013c48 <xStreamBufferSend+0x98>
  47214. else
  47215. {
  47216. mtCOVERAGE_TEST_MARKER();
  47217. }
  47218. if( xSpace == ( size_t ) 0 )
  47219. 8013cbe: 6b7b ldr r3, [r7, #52] @ 0x34
  47220. 8013cc0: 2b00 cmp r3, #0
  47221. 8013cc2: d103 bne.n 8013ccc <xStreamBufferSend+0x11c>
  47222. {
  47223. xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer );
  47224. 8013cc4: 6af8 ldr r0, [r7, #44] @ 0x2c
  47225. 8013cc6: f7ff ff3f bl 8013b48 <xStreamBufferSpacesAvailable>
  47226. 8013cca: 6378 str r0, [r7, #52] @ 0x34
  47227. else
  47228. {
  47229. mtCOVERAGE_TEST_MARKER();
  47230. }
  47231. xReturn = prvWriteMessageToBuffer( pxStreamBuffer, pvTxData, xDataLengthBytes, xSpace, xRequiredSpace );
  47232. 8013ccc: 6b3b ldr r3, [r7, #48] @ 0x30
  47233. 8013cce: 9300 str r3, [sp, #0]
  47234. 8013cd0: 6b7b ldr r3, [r7, #52] @ 0x34
  47235. 8013cd2: 687a ldr r2, [r7, #4]
  47236. 8013cd4: 68b9 ldr r1, [r7, #8]
  47237. 8013cd6: 6af8 ldr r0, [r7, #44] @ 0x2c
  47238. 8013cd8: f000 f823 bl 8013d22 <prvWriteMessageToBuffer>
  47239. 8013cdc: 62b8 str r0, [r7, #40] @ 0x28
  47240. if( xReturn > ( size_t ) 0 )
  47241. 8013cde: 6abb ldr r3, [r7, #40] @ 0x28
  47242. 8013ce0: 2b00 cmp r3, #0
  47243. 8013ce2: d019 beq.n 8013d18 <xStreamBufferSend+0x168>
  47244. {
  47245. traceSTREAM_BUFFER_SEND( xStreamBuffer, xReturn );
  47246. /* Was a task waiting for the data? */
  47247. if( prvBytesInBuffer( pxStreamBuffer ) >= pxStreamBuffer->xTriggerLevelBytes )
  47248. 8013ce4: 6af8 ldr r0, [r7, #44] @ 0x2c
  47249. 8013ce6: f000 f8ce bl 8013e86 <prvBytesInBuffer>
  47250. 8013cea: 4602 mov r2, r0
  47251. 8013cec: 6afb ldr r3, [r7, #44] @ 0x2c
  47252. 8013cee: 68db ldr r3, [r3, #12]
  47253. 8013cf0: 429a cmp r2, r3
  47254. 8013cf2: d311 bcc.n 8013d18 <xStreamBufferSend+0x168>
  47255. {
  47256. sbSEND_COMPLETED( pxStreamBuffer );
  47257. 8013cf4: f000 fb4a bl 801438c <vTaskSuspendAll>
  47258. 8013cf8: 6afb ldr r3, [r7, #44] @ 0x2c
  47259. 8013cfa: 691b ldr r3, [r3, #16]
  47260. 8013cfc: 2b00 cmp r3, #0
  47261. 8013cfe: d009 beq.n 8013d14 <xStreamBufferSend+0x164>
  47262. 8013d00: 6afb ldr r3, [r7, #44] @ 0x2c
  47263. 8013d02: 6918 ldr r0, [r3, #16]
  47264. 8013d04: 2300 movs r3, #0
  47265. 8013d06: 2200 movs r2, #0
  47266. 8013d08: 2100 movs r1, #0
  47267. 8013d0a: f001 f967 bl 8014fdc <xTaskGenericNotify>
  47268. 8013d0e: 6afb ldr r3, [r7, #44] @ 0x2c
  47269. 8013d10: 2200 movs r2, #0
  47270. 8013d12: 611a str r2, [r3, #16]
  47271. 8013d14: f000 fb48 bl 80143a8 <xTaskResumeAll>
  47272. {
  47273. mtCOVERAGE_TEST_MARKER();
  47274. traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer );
  47275. }
  47276. return xReturn;
  47277. 8013d18: 6abb ldr r3, [r7, #40] @ 0x28
  47278. }
  47279. 8013d1a: 4618 mov r0, r3
  47280. 8013d1c: 3738 adds r7, #56 @ 0x38
  47281. 8013d1e: 46bd mov sp, r7
  47282. 8013d20: bd80 pop {r7, pc}
  47283. 08013d22 <prvWriteMessageToBuffer>:
  47284. static size_t prvWriteMessageToBuffer( StreamBuffer_t * const pxStreamBuffer,
  47285. const void * pvTxData,
  47286. size_t xDataLengthBytes,
  47287. size_t xSpace,
  47288. size_t xRequiredSpace )
  47289. {
  47290. 8013d22: b580 push {r7, lr}
  47291. 8013d24: b086 sub sp, #24
  47292. 8013d26: af00 add r7, sp, #0
  47293. 8013d28: 60f8 str r0, [r7, #12]
  47294. 8013d2a: 60b9 str r1, [r7, #8]
  47295. 8013d2c: 607a str r2, [r7, #4]
  47296. 8013d2e: 603b str r3, [r7, #0]
  47297. BaseType_t xShouldWrite;
  47298. size_t xReturn;
  47299. if( xSpace == ( size_t ) 0 )
  47300. 8013d30: 683b ldr r3, [r7, #0]
  47301. 8013d32: 2b00 cmp r3, #0
  47302. 8013d34: d102 bne.n 8013d3c <prvWriteMessageToBuffer+0x1a>
  47303. {
  47304. /* Doesn't matter if this is a stream buffer or a message buffer, there
  47305. is no space to write. */
  47306. xShouldWrite = pdFALSE;
  47307. 8013d36: 2300 movs r3, #0
  47308. 8013d38: 617b str r3, [r7, #20]
  47309. 8013d3a: e01d b.n 8013d78 <prvWriteMessageToBuffer+0x56>
  47310. }
  47311. else if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) == ( uint8_t ) 0 )
  47312. 8013d3c: 68fb ldr r3, [r7, #12]
  47313. 8013d3e: 7f1b ldrb r3, [r3, #28]
  47314. 8013d40: f003 0301 and.w r3, r3, #1
  47315. 8013d44: 2b00 cmp r3, #0
  47316. 8013d46: d108 bne.n 8013d5a <prvWriteMessageToBuffer+0x38>
  47317. {
  47318. /* This is a stream buffer, as opposed to a message buffer, so writing a
  47319. stream of bytes rather than discrete messages. Write as many bytes as
  47320. possible. */
  47321. xShouldWrite = pdTRUE;
  47322. 8013d48: 2301 movs r3, #1
  47323. 8013d4a: 617b str r3, [r7, #20]
  47324. xDataLengthBytes = configMIN( xDataLengthBytes, xSpace );
  47325. 8013d4c: 687a ldr r2, [r7, #4]
  47326. 8013d4e: 683b ldr r3, [r7, #0]
  47327. 8013d50: 4293 cmp r3, r2
  47328. 8013d52: bf28 it cs
  47329. 8013d54: 4613 movcs r3, r2
  47330. 8013d56: 607b str r3, [r7, #4]
  47331. 8013d58: e00e b.n 8013d78 <prvWriteMessageToBuffer+0x56>
  47332. }
  47333. else if( xSpace >= xRequiredSpace )
  47334. 8013d5a: 683a ldr r2, [r7, #0]
  47335. 8013d5c: 6a3b ldr r3, [r7, #32]
  47336. 8013d5e: 429a cmp r2, r3
  47337. 8013d60: d308 bcc.n 8013d74 <prvWriteMessageToBuffer+0x52>
  47338. {
  47339. /* This is a message buffer, as opposed to a stream buffer, and there
  47340. is enough space to write both the message length and the message itself
  47341. into the buffer. Start by writing the length of the data, the data
  47342. itself will be written later in this function. */
  47343. xShouldWrite = pdTRUE;
  47344. 8013d62: 2301 movs r3, #1
  47345. 8013d64: 617b str r3, [r7, #20]
  47346. ( void ) prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) &( xDataLengthBytes ), sbBYTES_TO_STORE_MESSAGE_LENGTH );
  47347. 8013d66: 1d3b adds r3, r7, #4
  47348. 8013d68: 2204 movs r2, #4
  47349. 8013d6a: 4619 mov r1, r3
  47350. 8013d6c: 68f8 ldr r0, [r7, #12]
  47351. 8013d6e: f000 f815 bl 8013d9c <prvWriteBytesToBuffer>
  47352. 8013d72: e001 b.n 8013d78 <prvWriteMessageToBuffer+0x56>
  47353. }
  47354. else
  47355. {
  47356. /* There is space available, but not enough space. */
  47357. xShouldWrite = pdFALSE;
  47358. 8013d74: 2300 movs r3, #0
  47359. 8013d76: 617b str r3, [r7, #20]
  47360. }
  47361. if( xShouldWrite != pdFALSE )
  47362. 8013d78: 697b ldr r3, [r7, #20]
  47363. 8013d7a: 2b00 cmp r3, #0
  47364. 8013d7c: d007 beq.n 8013d8e <prvWriteMessageToBuffer+0x6c>
  47365. {
  47366. /* Writes the data itself. */
  47367. xReturn = prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) pvTxData, xDataLengthBytes ); /*lint !e9079 Storage buffer is implemented as uint8_t for ease of sizing, alighment and access. */
  47368. 8013d7e: 687b ldr r3, [r7, #4]
  47369. 8013d80: 461a mov r2, r3
  47370. 8013d82: 68b9 ldr r1, [r7, #8]
  47371. 8013d84: 68f8 ldr r0, [r7, #12]
  47372. 8013d86: f000 f809 bl 8013d9c <prvWriteBytesToBuffer>
  47373. 8013d8a: 6138 str r0, [r7, #16]
  47374. 8013d8c: e001 b.n 8013d92 <prvWriteMessageToBuffer+0x70>
  47375. }
  47376. else
  47377. {
  47378. xReturn = 0;
  47379. 8013d8e: 2300 movs r3, #0
  47380. 8013d90: 613b str r3, [r7, #16]
  47381. }
  47382. return xReturn;
  47383. 8013d92: 693b ldr r3, [r7, #16]
  47384. }
  47385. 8013d94: 4618 mov r0, r3
  47386. 8013d96: 3718 adds r7, #24
  47387. 8013d98: 46bd mov sp, r7
  47388. 8013d9a: bd80 pop {r7, pc}
  47389. 08013d9c <prvWriteBytesToBuffer>:
  47390. return xReturn;
  47391. }
  47392. /*-----------------------------------------------------------*/
  47393. static size_t prvWriteBytesToBuffer( StreamBuffer_t * const pxStreamBuffer, const uint8_t *pucData, size_t xCount )
  47394. {
  47395. 8013d9c: b580 push {r7, lr}
  47396. 8013d9e: b08a sub sp, #40 @ 0x28
  47397. 8013da0: af00 add r7, sp, #0
  47398. 8013da2: 60f8 str r0, [r7, #12]
  47399. 8013da4: 60b9 str r1, [r7, #8]
  47400. 8013da6: 607a str r2, [r7, #4]
  47401. size_t xNextHead, xFirstLength;
  47402. configASSERT( xCount > ( size_t ) 0 );
  47403. 8013da8: 687b ldr r3, [r7, #4]
  47404. 8013daa: 2b00 cmp r3, #0
  47405. 8013dac: d10b bne.n 8013dc6 <prvWriteBytesToBuffer+0x2a>
  47406. __asm volatile
  47407. 8013dae: f04f 0350 mov.w r3, #80 @ 0x50
  47408. 8013db2: f383 8811 msr BASEPRI, r3
  47409. 8013db6: f3bf 8f6f isb sy
  47410. 8013dba: f3bf 8f4f dsb sy
  47411. 8013dbe: 61fb str r3, [r7, #28]
  47412. }
  47413. 8013dc0: bf00 nop
  47414. 8013dc2: bf00 nop
  47415. 8013dc4: e7fd b.n 8013dc2 <prvWriteBytesToBuffer+0x26>
  47416. xNextHead = pxStreamBuffer->xHead;
  47417. 8013dc6: 68fb ldr r3, [r7, #12]
  47418. 8013dc8: 685b ldr r3, [r3, #4]
  47419. 8013dca: 627b str r3, [r7, #36] @ 0x24
  47420. /* Calculate the number of bytes that can be added in the first write -
  47421. which may be less than the total number of bytes that need to be added if
  47422. the buffer will wrap back to the beginning. */
  47423. xFirstLength = configMIN( pxStreamBuffer->xLength - xNextHead, xCount );
  47424. 8013dcc: 68fb ldr r3, [r7, #12]
  47425. 8013dce: 689a ldr r2, [r3, #8]
  47426. 8013dd0: 6a7b ldr r3, [r7, #36] @ 0x24
  47427. 8013dd2: 1ad3 subs r3, r2, r3
  47428. 8013dd4: 687a ldr r2, [r7, #4]
  47429. 8013dd6: 4293 cmp r3, r2
  47430. 8013dd8: bf28 it cs
  47431. 8013dda: 4613 movcs r3, r2
  47432. 8013ddc: 623b str r3, [r7, #32]
  47433. /* Write as many bytes as can be written in the first write. */
  47434. configASSERT( ( xNextHead + xFirstLength ) <= pxStreamBuffer->xLength );
  47435. 8013dde: 6a7a ldr r2, [r7, #36] @ 0x24
  47436. 8013de0: 6a3b ldr r3, [r7, #32]
  47437. 8013de2: 441a add r2, r3
  47438. 8013de4: 68fb ldr r3, [r7, #12]
  47439. 8013de6: 689b ldr r3, [r3, #8]
  47440. 8013de8: 429a cmp r2, r3
  47441. 8013dea: d90b bls.n 8013e04 <prvWriteBytesToBuffer+0x68>
  47442. __asm volatile
  47443. 8013dec: f04f 0350 mov.w r3, #80 @ 0x50
  47444. 8013df0: f383 8811 msr BASEPRI, r3
  47445. 8013df4: f3bf 8f6f isb sy
  47446. 8013df8: f3bf 8f4f dsb sy
  47447. 8013dfc: 61bb str r3, [r7, #24]
  47448. }
  47449. 8013dfe: bf00 nop
  47450. 8013e00: bf00 nop
  47451. 8013e02: e7fd b.n 8013e00 <prvWriteBytesToBuffer+0x64>
  47452. ( void ) memcpy( ( void* ) ( &( pxStreamBuffer->pucBuffer[ xNextHead ] ) ), ( const void * ) pucData, xFirstLength ); /*lint !e9087 memcpy() requires void *. */
  47453. 8013e04: 68fb ldr r3, [r7, #12]
  47454. 8013e06: 699a ldr r2, [r3, #24]
  47455. 8013e08: 6a7b ldr r3, [r7, #36] @ 0x24
  47456. 8013e0a: 4413 add r3, r2
  47457. 8013e0c: 6a3a ldr r2, [r7, #32]
  47458. 8013e0e: 68b9 ldr r1, [r7, #8]
  47459. 8013e10: 4618 mov r0, r3
  47460. 8013e12: f002 fd72 bl 80168fa <memcpy>
  47461. /* If the number of bytes written was less than the number that could be
  47462. written in the first write... */
  47463. if( xCount > xFirstLength )
  47464. 8013e16: 687a ldr r2, [r7, #4]
  47465. 8013e18: 6a3b ldr r3, [r7, #32]
  47466. 8013e1a: 429a cmp r2, r3
  47467. 8013e1c: d91d bls.n 8013e5a <prvWriteBytesToBuffer+0xbe>
  47468. {
  47469. /* ...then write the remaining bytes to the start of the buffer. */
  47470. configASSERT( ( xCount - xFirstLength ) <= pxStreamBuffer->xLength );
  47471. 8013e1e: 687a ldr r2, [r7, #4]
  47472. 8013e20: 6a3b ldr r3, [r7, #32]
  47473. 8013e22: 1ad2 subs r2, r2, r3
  47474. 8013e24: 68fb ldr r3, [r7, #12]
  47475. 8013e26: 689b ldr r3, [r3, #8]
  47476. 8013e28: 429a cmp r2, r3
  47477. 8013e2a: d90b bls.n 8013e44 <prvWriteBytesToBuffer+0xa8>
  47478. __asm volatile
  47479. 8013e2c: f04f 0350 mov.w r3, #80 @ 0x50
  47480. 8013e30: f383 8811 msr BASEPRI, r3
  47481. 8013e34: f3bf 8f6f isb sy
  47482. 8013e38: f3bf 8f4f dsb sy
  47483. 8013e3c: 617b str r3, [r7, #20]
  47484. }
  47485. 8013e3e: bf00 nop
  47486. 8013e40: bf00 nop
  47487. 8013e42: e7fd b.n 8013e40 <prvWriteBytesToBuffer+0xa4>
  47488. ( void ) memcpy( ( void * ) pxStreamBuffer->pucBuffer, ( const void * ) &( pucData[ xFirstLength ] ), xCount - xFirstLength ); /*lint !e9087 memcpy() requires void *. */
  47489. 8013e44: 68fb ldr r3, [r7, #12]
  47490. 8013e46: 6998 ldr r0, [r3, #24]
  47491. 8013e48: 68ba ldr r2, [r7, #8]
  47492. 8013e4a: 6a3b ldr r3, [r7, #32]
  47493. 8013e4c: 18d1 adds r1, r2, r3
  47494. 8013e4e: 687a ldr r2, [r7, #4]
  47495. 8013e50: 6a3b ldr r3, [r7, #32]
  47496. 8013e52: 1ad3 subs r3, r2, r3
  47497. 8013e54: 461a mov r2, r3
  47498. 8013e56: f002 fd50 bl 80168fa <memcpy>
  47499. else
  47500. {
  47501. mtCOVERAGE_TEST_MARKER();
  47502. }
  47503. xNextHead += xCount;
  47504. 8013e5a: 6a7a ldr r2, [r7, #36] @ 0x24
  47505. 8013e5c: 687b ldr r3, [r7, #4]
  47506. 8013e5e: 4413 add r3, r2
  47507. 8013e60: 627b str r3, [r7, #36] @ 0x24
  47508. if( xNextHead >= pxStreamBuffer->xLength )
  47509. 8013e62: 68fb ldr r3, [r7, #12]
  47510. 8013e64: 689b ldr r3, [r3, #8]
  47511. 8013e66: 6a7a ldr r2, [r7, #36] @ 0x24
  47512. 8013e68: 429a cmp r2, r3
  47513. 8013e6a: d304 bcc.n 8013e76 <prvWriteBytesToBuffer+0xda>
  47514. {
  47515. xNextHead -= pxStreamBuffer->xLength;
  47516. 8013e6c: 68fb ldr r3, [r7, #12]
  47517. 8013e6e: 689b ldr r3, [r3, #8]
  47518. 8013e70: 6a7a ldr r2, [r7, #36] @ 0x24
  47519. 8013e72: 1ad3 subs r3, r2, r3
  47520. 8013e74: 627b str r3, [r7, #36] @ 0x24
  47521. else
  47522. {
  47523. mtCOVERAGE_TEST_MARKER();
  47524. }
  47525. pxStreamBuffer->xHead = xNextHead;
  47526. 8013e76: 68fb ldr r3, [r7, #12]
  47527. 8013e78: 6a7a ldr r2, [r7, #36] @ 0x24
  47528. 8013e7a: 605a str r2, [r3, #4]
  47529. return xCount;
  47530. 8013e7c: 687b ldr r3, [r7, #4]
  47531. }
  47532. 8013e7e: 4618 mov r0, r3
  47533. 8013e80: 3728 adds r7, #40 @ 0x28
  47534. 8013e82: 46bd mov sp, r7
  47535. 8013e84: bd80 pop {r7, pc}
  47536. 08013e86 <prvBytesInBuffer>:
  47537. return xCount;
  47538. }
  47539. /*-----------------------------------------------------------*/
  47540. static size_t prvBytesInBuffer( const StreamBuffer_t * const pxStreamBuffer )
  47541. {
  47542. 8013e86: b480 push {r7}
  47543. 8013e88: b085 sub sp, #20
  47544. 8013e8a: af00 add r7, sp, #0
  47545. 8013e8c: 6078 str r0, [r7, #4]
  47546. /* Returns the distance between xTail and xHead. */
  47547. size_t xCount;
  47548. xCount = pxStreamBuffer->xLength + pxStreamBuffer->xHead;
  47549. 8013e8e: 687b ldr r3, [r7, #4]
  47550. 8013e90: 689a ldr r2, [r3, #8]
  47551. 8013e92: 687b ldr r3, [r7, #4]
  47552. 8013e94: 685b ldr r3, [r3, #4]
  47553. 8013e96: 4413 add r3, r2
  47554. 8013e98: 60fb str r3, [r7, #12]
  47555. xCount -= pxStreamBuffer->xTail;
  47556. 8013e9a: 687b ldr r3, [r7, #4]
  47557. 8013e9c: 681b ldr r3, [r3, #0]
  47558. 8013e9e: 68fa ldr r2, [r7, #12]
  47559. 8013ea0: 1ad3 subs r3, r2, r3
  47560. 8013ea2: 60fb str r3, [r7, #12]
  47561. if ( xCount >= pxStreamBuffer->xLength )
  47562. 8013ea4: 687b ldr r3, [r7, #4]
  47563. 8013ea6: 689b ldr r3, [r3, #8]
  47564. 8013ea8: 68fa ldr r2, [r7, #12]
  47565. 8013eaa: 429a cmp r2, r3
  47566. 8013eac: d304 bcc.n 8013eb8 <prvBytesInBuffer+0x32>
  47567. {
  47568. xCount -= pxStreamBuffer->xLength;
  47569. 8013eae: 687b ldr r3, [r7, #4]
  47570. 8013eb0: 689b ldr r3, [r3, #8]
  47571. 8013eb2: 68fa ldr r2, [r7, #12]
  47572. 8013eb4: 1ad3 subs r3, r2, r3
  47573. 8013eb6: 60fb str r3, [r7, #12]
  47574. else
  47575. {
  47576. mtCOVERAGE_TEST_MARKER();
  47577. }
  47578. return xCount;
  47579. 8013eb8: 68fb ldr r3, [r7, #12]
  47580. }
  47581. 8013eba: 4618 mov r0, r3
  47582. 8013ebc: 3714 adds r7, #20
  47583. 8013ebe: 46bd mov sp, r7
  47584. 8013ec0: f85d 7b04 ldr.w r7, [sp], #4
  47585. 8013ec4: 4770 bx lr
  47586. 08013ec6 <xTaskCreateStatic>:
  47587. const uint32_t ulStackDepth,
  47588. void * const pvParameters,
  47589. UBaseType_t uxPriority,
  47590. StackType_t * const puxStackBuffer,
  47591. StaticTask_t * const pxTaskBuffer )
  47592. {
  47593. 8013ec6: b580 push {r7, lr}
  47594. 8013ec8: b08e sub sp, #56 @ 0x38
  47595. 8013eca: af04 add r7, sp, #16
  47596. 8013ecc: 60f8 str r0, [r7, #12]
  47597. 8013ece: 60b9 str r1, [r7, #8]
  47598. 8013ed0: 607a str r2, [r7, #4]
  47599. 8013ed2: 603b str r3, [r7, #0]
  47600. TCB_t *pxNewTCB;
  47601. TaskHandle_t xReturn;
  47602. configASSERT( puxStackBuffer != NULL );
  47603. 8013ed4: 6b7b ldr r3, [r7, #52] @ 0x34
  47604. 8013ed6: 2b00 cmp r3, #0
  47605. 8013ed8: d10b bne.n 8013ef2 <xTaskCreateStatic+0x2c>
  47606. __asm volatile
  47607. 8013eda: f04f 0350 mov.w r3, #80 @ 0x50
  47608. 8013ede: f383 8811 msr BASEPRI, r3
  47609. 8013ee2: f3bf 8f6f isb sy
  47610. 8013ee6: f3bf 8f4f dsb sy
  47611. 8013eea: 623b str r3, [r7, #32]
  47612. }
  47613. 8013eec: bf00 nop
  47614. 8013eee: bf00 nop
  47615. 8013ef0: e7fd b.n 8013eee <xTaskCreateStatic+0x28>
  47616. configASSERT( pxTaskBuffer != NULL );
  47617. 8013ef2: 6bbb ldr r3, [r7, #56] @ 0x38
  47618. 8013ef4: 2b00 cmp r3, #0
  47619. 8013ef6: d10b bne.n 8013f10 <xTaskCreateStatic+0x4a>
  47620. __asm volatile
  47621. 8013ef8: f04f 0350 mov.w r3, #80 @ 0x50
  47622. 8013efc: f383 8811 msr BASEPRI, r3
  47623. 8013f00: f3bf 8f6f isb sy
  47624. 8013f04: f3bf 8f4f dsb sy
  47625. 8013f08: 61fb str r3, [r7, #28]
  47626. }
  47627. 8013f0a: bf00 nop
  47628. 8013f0c: bf00 nop
  47629. 8013f0e: e7fd b.n 8013f0c <xTaskCreateStatic+0x46>
  47630. #if( configASSERT_DEFINED == 1 )
  47631. {
  47632. /* Sanity check that the size of the structure used to declare a
  47633. variable of type StaticTask_t equals the size of the real task
  47634. structure. */
  47635. volatile size_t xSize = sizeof( StaticTask_t );
  47636. 8013f10: 23a8 movs r3, #168 @ 0xa8
  47637. 8013f12: 613b str r3, [r7, #16]
  47638. configASSERT( xSize == sizeof( TCB_t ) );
  47639. 8013f14: 693b ldr r3, [r7, #16]
  47640. 8013f16: 2ba8 cmp r3, #168 @ 0xa8
  47641. 8013f18: d00b beq.n 8013f32 <xTaskCreateStatic+0x6c>
  47642. __asm volatile
  47643. 8013f1a: f04f 0350 mov.w r3, #80 @ 0x50
  47644. 8013f1e: f383 8811 msr BASEPRI, r3
  47645. 8013f22: f3bf 8f6f isb sy
  47646. 8013f26: f3bf 8f4f dsb sy
  47647. 8013f2a: 61bb str r3, [r7, #24]
  47648. }
  47649. 8013f2c: bf00 nop
  47650. 8013f2e: bf00 nop
  47651. 8013f30: e7fd b.n 8013f2e <xTaskCreateStatic+0x68>
  47652. ( void ) xSize; /* Prevent lint warning when configASSERT() is not used. */
  47653. 8013f32: 693b ldr r3, [r7, #16]
  47654. }
  47655. #endif /* configASSERT_DEFINED */
  47656. if( ( pxTaskBuffer != NULL ) && ( puxStackBuffer != NULL ) )
  47657. 8013f34: 6bbb ldr r3, [r7, #56] @ 0x38
  47658. 8013f36: 2b00 cmp r3, #0
  47659. 8013f38: d01e beq.n 8013f78 <xTaskCreateStatic+0xb2>
  47660. 8013f3a: 6b7b ldr r3, [r7, #52] @ 0x34
  47661. 8013f3c: 2b00 cmp r3, #0
  47662. 8013f3e: d01b beq.n 8013f78 <xTaskCreateStatic+0xb2>
  47663. {
  47664. /* The memory used for the task's TCB and stack are passed into this
  47665. function - use them. */
  47666. 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. */
  47667. 8013f40: 6bbb ldr r3, [r7, #56] @ 0x38
  47668. 8013f42: 627b str r3, [r7, #36] @ 0x24
  47669. pxNewTCB->pxStack = ( StackType_t * ) puxStackBuffer;
  47670. 8013f44: 6a7b ldr r3, [r7, #36] @ 0x24
  47671. 8013f46: 6b7a ldr r2, [r7, #52] @ 0x34
  47672. 8013f48: 631a str r2, [r3, #48] @ 0x30
  47673. #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 !e9029 Macro has been consolidated for readability reasons. */
  47674. {
  47675. /* Tasks can be created statically or dynamically, so note this
  47676. task was created statically in case the task is later deleted. */
  47677. pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_AND_TCB;
  47678. 8013f4a: 6a7b ldr r3, [r7, #36] @ 0x24
  47679. 8013f4c: 2202 movs r2, #2
  47680. 8013f4e: f883 20a5 strb.w r2, [r3, #165] @ 0xa5
  47681. }
  47682. #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */
  47683. prvInitialiseNewTask( pxTaskCode, pcName, ulStackDepth, pvParameters, uxPriority, &xReturn, pxNewTCB, NULL );
  47684. 8013f52: 2300 movs r3, #0
  47685. 8013f54: 9303 str r3, [sp, #12]
  47686. 8013f56: 6a7b ldr r3, [r7, #36] @ 0x24
  47687. 8013f58: 9302 str r3, [sp, #8]
  47688. 8013f5a: f107 0314 add.w r3, r7, #20
  47689. 8013f5e: 9301 str r3, [sp, #4]
  47690. 8013f60: 6b3b ldr r3, [r7, #48] @ 0x30
  47691. 8013f62: 9300 str r3, [sp, #0]
  47692. 8013f64: 683b ldr r3, [r7, #0]
  47693. 8013f66: 687a ldr r2, [r7, #4]
  47694. 8013f68: 68b9 ldr r1, [r7, #8]
  47695. 8013f6a: 68f8 ldr r0, [r7, #12]
  47696. 8013f6c: f000 f850 bl 8014010 <prvInitialiseNewTask>
  47697. prvAddNewTaskToReadyList( pxNewTCB );
  47698. 8013f70: 6a78 ldr r0, [r7, #36] @ 0x24
  47699. 8013f72: f000 f8f5 bl 8014160 <prvAddNewTaskToReadyList>
  47700. 8013f76: e001 b.n 8013f7c <xTaskCreateStatic+0xb6>
  47701. }
  47702. else
  47703. {
  47704. xReturn = NULL;
  47705. 8013f78: 2300 movs r3, #0
  47706. 8013f7a: 617b str r3, [r7, #20]
  47707. }
  47708. return xReturn;
  47709. 8013f7c: 697b ldr r3, [r7, #20]
  47710. }
  47711. 8013f7e: 4618 mov r0, r3
  47712. 8013f80: 3728 adds r7, #40 @ 0x28
  47713. 8013f82: 46bd mov sp, r7
  47714. 8013f84: bd80 pop {r7, pc}
  47715. 08013f86 <xTaskCreate>:
  47716. const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
  47717. const configSTACK_DEPTH_TYPE usStackDepth,
  47718. void * const pvParameters,
  47719. UBaseType_t uxPriority,
  47720. TaskHandle_t * const pxCreatedTask )
  47721. {
  47722. 8013f86: b580 push {r7, lr}
  47723. 8013f88: b08c sub sp, #48 @ 0x30
  47724. 8013f8a: af04 add r7, sp, #16
  47725. 8013f8c: 60f8 str r0, [r7, #12]
  47726. 8013f8e: 60b9 str r1, [r7, #8]
  47727. 8013f90: 603b str r3, [r7, #0]
  47728. 8013f92: 4613 mov r3, r2
  47729. 8013f94: 80fb strh r3, [r7, #6]
  47730. #else /* portSTACK_GROWTH */
  47731. {
  47732. StackType_t *pxStack;
  47733. /* Allocate space for the stack used by the task being created. */
  47734. 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. */
  47735. 8013f96: 88fb ldrh r3, [r7, #6]
  47736. 8013f98: 009b lsls r3, r3, #2
  47737. 8013f9a: 4618 mov r0, r3
  47738. 8013f9c: f002 f8d6 bl 801614c <pvPortMalloc>
  47739. 8013fa0: 6178 str r0, [r7, #20]
  47740. if( pxStack != NULL )
  47741. 8013fa2: 697b ldr r3, [r7, #20]
  47742. 8013fa4: 2b00 cmp r3, #0
  47743. 8013fa6: d00e beq.n 8013fc6 <xTaskCreate+0x40>
  47744. {
  47745. /* Allocate space for the TCB. */
  47746. 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. */
  47747. 8013fa8: 20a8 movs r0, #168 @ 0xa8
  47748. 8013faa: f002 f8cf bl 801614c <pvPortMalloc>
  47749. 8013fae: 61f8 str r0, [r7, #28]
  47750. if( pxNewTCB != NULL )
  47751. 8013fb0: 69fb ldr r3, [r7, #28]
  47752. 8013fb2: 2b00 cmp r3, #0
  47753. 8013fb4: d003 beq.n 8013fbe <xTaskCreate+0x38>
  47754. {
  47755. /* Store the stack location in the TCB. */
  47756. pxNewTCB->pxStack = pxStack;
  47757. 8013fb6: 69fb ldr r3, [r7, #28]
  47758. 8013fb8: 697a ldr r2, [r7, #20]
  47759. 8013fba: 631a str r2, [r3, #48] @ 0x30
  47760. 8013fbc: e005 b.n 8013fca <xTaskCreate+0x44>
  47761. }
  47762. else
  47763. {
  47764. /* The stack cannot be used as the TCB was not created. Free
  47765. it again. */
  47766. vPortFree( pxStack );
  47767. 8013fbe: 6978 ldr r0, [r7, #20]
  47768. 8013fc0: f002 f992 bl 80162e8 <vPortFree>
  47769. 8013fc4: e001 b.n 8013fca <xTaskCreate+0x44>
  47770. }
  47771. }
  47772. else
  47773. {
  47774. pxNewTCB = NULL;
  47775. 8013fc6: 2300 movs r3, #0
  47776. 8013fc8: 61fb str r3, [r7, #28]
  47777. }
  47778. }
  47779. #endif /* portSTACK_GROWTH */
  47780. if( pxNewTCB != NULL )
  47781. 8013fca: 69fb ldr r3, [r7, #28]
  47782. 8013fcc: 2b00 cmp r3, #0
  47783. 8013fce: d017 beq.n 8014000 <xTaskCreate+0x7a>
  47784. {
  47785. #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e9029 !e731 Macro has been consolidated for readability reasons. */
  47786. {
  47787. /* Tasks can be created statically or dynamically, so note this
  47788. task was created dynamically in case it is later deleted. */
  47789. pxNewTCB->ucStaticallyAllocated = tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB;
  47790. 8013fd0: 69fb ldr r3, [r7, #28]
  47791. 8013fd2: 2200 movs r2, #0
  47792. 8013fd4: f883 20a5 strb.w r2, [r3, #165] @ 0xa5
  47793. }
  47794. #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */
  47795. prvInitialiseNewTask( pxTaskCode, pcName, ( uint32_t ) usStackDepth, pvParameters, uxPriority, pxCreatedTask, pxNewTCB, NULL );
  47796. 8013fd8: 88fa ldrh r2, [r7, #6]
  47797. 8013fda: 2300 movs r3, #0
  47798. 8013fdc: 9303 str r3, [sp, #12]
  47799. 8013fde: 69fb ldr r3, [r7, #28]
  47800. 8013fe0: 9302 str r3, [sp, #8]
  47801. 8013fe2: 6afb ldr r3, [r7, #44] @ 0x2c
  47802. 8013fe4: 9301 str r3, [sp, #4]
  47803. 8013fe6: 6abb ldr r3, [r7, #40] @ 0x28
  47804. 8013fe8: 9300 str r3, [sp, #0]
  47805. 8013fea: 683b ldr r3, [r7, #0]
  47806. 8013fec: 68b9 ldr r1, [r7, #8]
  47807. 8013fee: 68f8 ldr r0, [r7, #12]
  47808. 8013ff0: f000 f80e bl 8014010 <prvInitialiseNewTask>
  47809. prvAddNewTaskToReadyList( pxNewTCB );
  47810. 8013ff4: 69f8 ldr r0, [r7, #28]
  47811. 8013ff6: f000 f8b3 bl 8014160 <prvAddNewTaskToReadyList>
  47812. xReturn = pdPASS;
  47813. 8013ffa: 2301 movs r3, #1
  47814. 8013ffc: 61bb str r3, [r7, #24]
  47815. 8013ffe: e002 b.n 8014006 <xTaskCreate+0x80>
  47816. }
  47817. else
  47818. {
  47819. xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;
  47820. 8014000: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  47821. 8014004: 61bb str r3, [r7, #24]
  47822. }
  47823. return xReturn;
  47824. 8014006: 69bb ldr r3, [r7, #24]
  47825. }
  47826. 8014008: 4618 mov r0, r3
  47827. 801400a: 3720 adds r7, #32
  47828. 801400c: 46bd mov sp, r7
  47829. 801400e: bd80 pop {r7, pc}
  47830. 08014010 <prvInitialiseNewTask>:
  47831. void * const pvParameters,
  47832. UBaseType_t uxPriority,
  47833. TaskHandle_t * const pxCreatedTask,
  47834. TCB_t *pxNewTCB,
  47835. const MemoryRegion_t * const xRegions )
  47836. {
  47837. 8014010: b580 push {r7, lr}
  47838. 8014012: b088 sub sp, #32
  47839. 8014014: af00 add r7, sp, #0
  47840. 8014016: 60f8 str r0, [r7, #12]
  47841. 8014018: 60b9 str r1, [r7, #8]
  47842. 801401a: 607a str r2, [r7, #4]
  47843. 801401c: 603b str r3, [r7, #0]
  47844. /* Avoid dependency on memset() if it is not required. */
  47845. #if( tskSET_NEW_STACKS_TO_KNOWN_VALUE == 1 )
  47846. {
  47847. /* Fill the stack with a known value to assist debugging. */
  47848. ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) ulStackDepth * sizeof( StackType_t ) );
  47849. 801401e: 6b3b ldr r3, [r7, #48] @ 0x30
  47850. 8014020: 6b18 ldr r0, [r3, #48] @ 0x30
  47851. 8014022: 687b ldr r3, [r7, #4]
  47852. 8014024: 009b lsls r3, r3, #2
  47853. 8014026: 461a mov r2, r3
  47854. 8014028: 21a5 movs r1, #165 @ 0xa5
  47855. 801402a: f002 fb94 bl 8016756 <memset>
  47856. grows from high memory to low (as per the 80x86) or vice versa.
  47857. portSTACK_GROWTH is used to make the result positive or negative as required
  47858. by the port. */
  47859. #if( portSTACK_GROWTH < 0 )
  47860. {
  47861. pxTopOfStack = &( pxNewTCB->pxStack[ ulStackDepth - ( uint32_t ) 1 ] );
  47862. 801402e: 6b3b ldr r3, [r7, #48] @ 0x30
  47863. 8014030: 6b1a ldr r2, [r3, #48] @ 0x30
  47864. 8014032: 6879 ldr r1, [r7, #4]
  47865. 8014034: f06f 4340 mvn.w r3, #3221225472 @ 0xc0000000
  47866. 8014038: 440b add r3, r1
  47867. 801403a: 009b lsls r3, r3, #2
  47868. 801403c: 4413 add r3, r2
  47869. 801403e: 61bb str r3, [r7, #24]
  47870. 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(). */
  47871. 8014040: 69bb ldr r3, [r7, #24]
  47872. 8014042: f023 0307 bic.w r3, r3, #7
  47873. 8014046: 61bb str r3, [r7, #24]
  47874. /* Check the alignment of the calculated top of stack is correct. */
  47875. configASSERT( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack & ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) == 0UL ) );
  47876. 8014048: 69bb ldr r3, [r7, #24]
  47877. 801404a: f003 0307 and.w r3, r3, #7
  47878. 801404e: 2b00 cmp r3, #0
  47879. 8014050: d00b beq.n 801406a <prvInitialiseNewTask+0x5a>
  47880. __asm volatile
  47881. 8014052: f04f 0350 mov.w r3, #80 @ 0x50
  47882. 8014056: f383 8811 msr BASEPRI, r3
  47883. 801405a: f3bf 8f6f isb sy
  47884. 801405e: f3bf 8f4f dsb sy
  47885. 8014062: 617b str r3, [r7, #20]
  47886. }
  47887. 8014064: bf00 nop
  47888. 8014066: bf00 nop
  47889. 8014068: e7fd b.n 8014066 <prvInitialiseNewTask+0x56>
  47890. pxNewTCB->pxEndOfStack = pxNewTCB->pxStack + ( ulStackDepth - ( uint32_t ) 1 );
  47891. }
  47892. #endif /* portSTACK_GROWTH */
  47893. /* Store the task name in the TCB. */
  47894. if( pcName != NULL )
  47895. 801406a: 68bb ldr r3, [r7, #8]
  47896. 801406c: 2b00 cmp r3, #0
  47897. 801406e: d01f beq.n 80140b0 <prvInitialiseNewTask+0xa0>
  47898. {
  47899. for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )
  47900. 8014070: 2300 movs r3, #0
  47901. 8014072: 61fb str r3, [r7, #28]
  47902. 8014074: e012 b.n 801409c <prvInitialiseNewTask+0x8c>
  47903. {
  47904. pxNewTCB->pcTaskName[ x ] = pcName[ x ];
  47905. 8014076: 68ba ldr r2, [r7, #8]
  47906. 8014078: 69fb ldr r3, [r7, #28]
  47907. 801407a: 4413 add r3, r2
  47908. 801407c: 7819 ldrb r1, [r3, #0]
  47909. 801407e: 6b3a ldr r2, [r7, #48] @ 0x30
  47910. 8014080: 69fb ldr r3, [r7, #28]
  47911. 8014082: 4413 add r3, r2
  47912. 8014084: 3334 adds r3, #52 @ 0x34
  47913. 8014086: 460a mov r2, r1
  47914. 8014088: 701a strb r2, [r3, #0]
  47915. /* Don't copy all configMAX_TASK_NAME_LEN if the string is shorter than
  47916. configMAX_TASK_NAME_LEN characters just in case the memory after the
  47917. string is not accessible (extremely unlikely). */
  47918. if( pcName[ x ] == ( char ) 0x00 )
  47919. 801408a: 68ba ldr r2, [r7, #8]
  47920. 801408c: 69fb ldr r3, [r7, #28]
  47921. 801408e: 4413 add r3, r2
  47922. 8014090: 781b ldrb r3, [r3, #0]
  47923. 8014092: 2b00 cmp r3, #0
  47924. 8014094: d006 beq.n 80140a4 <prvInitialiseNewTask+0x94>
  47925. for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )
  47926. 8014096: 69fb ldr r3, [r7, #28]
  47927. 8014098: 3301 adds r3, #1
  47928. 801409a: 61fb str r3, [r7, #28]
  47929. 801409c: 69fb ldr r3, [r7, #28]
  47930. 801409e: 2b0f cmp r3, #15
  47931. 80140a0: d9e9 bls.n 8014076 <prvInitialiseNewTask+0x66>
  47932. 80140a2: e000 b.n 80140a6 <prvInitialiseNewTask+0x96>
  47933. {
  47934. break;
  47935. 80140a4: bf00 nop
  47936. }
  47937. }
  47938. /* Ensure the name string is terminated in the case that the string length
  47939. was greater or equal to configMAX_TASK_NAME_LEN. */
  47940. pxNewTCB->pcTaskName[ configMAX_TASK_NAME_LEN - 1 ] = '\0';
  47941. 80140a6: 6b3b ldr r3, [r7, #48] @ 0x30
  47942. 80140a8: 2200 movs r2, #0
  47943. 80140aa: f883 2043 strb.w r2, [r3, #67] @ 0x43
  47944. 80140ae: e003 b.n 80140b8 <prvInitialiseNewTask+0xa8>
  47945. }
  47946. else
  47947. {
  47948. /* The task has not been given a name, so just ensure there is a NULL
  47949. terminator when it is read out. */
  47950. pxNewTCB->pcTaskName[ 0 ] = 0x00;
  47951. 80140b0: 6b3b ldr r3, [r7, #48] @ 0x30
  47952. 80140b2: 2200 movs r2, #0
  47953. 80140b4: f883 2034 strb.w r2, [r3, #52] @ 0x34
  47954. }
  47955. /* This is used as an array index so must ensure it's not too large. First
  47956. remove the privilege bit if one is present. */
  47957. if( uxPriority >= ( UBaseType_t ) configMAX_PRIORITIES )
  47958. 80140b8: 6abb ldr r3, [r7, #40] @ 0x28
  47959. 80140ba: 2b37 cmp r3, #55 @ 0x37
  47960. 80140bc: d901 bls.n 80140c2 <prvInitialiseNewTask+0xb2>
  47961. {
  47962. uxPriority = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) 1U;
  47963. 80140be: 2337 movs r3, #55 @ 0x37
  47964. 80140c0: 62bb str r3, [r7, #40] @ 0x28
  47965. else
  47966. {
  47967. mtCOVERAGE_TEST_MARKER();
  47968. }
  47969. pxNewTCB->uxPriority = uxPriority;
  47970. 80140c2: 6b3b ldr r3, [r7, #48] @ 0x30
  47971. 80140c4: 6aba ldr r2, [r7, #40] @ 0x28
  47972. 80140c6: 62da str r2, [r3, #44] @ 0x2c
  47973. #if ( configUSE_MUTEXES == 1 )
  47974. {
  47975. pxNewTCB->uxBasePriority = uxPriority;
  47976. 80140c8: 6b3b ldr r3, [r7, #48] @ 0x30
  47977. 80140ca: 6aba ldr r2, [r7, #40] @ 0x28
  47978. 80140cc: 64da str r2, [r3, #76] @ 0x4c
  47979. pxNewTCB->uxMutexesHeld = 0;
  47980. 80140ce: 6b3b ldr r3, [r7, #48] @ 0x30
  47981. 80140d0: 2200 movs r2, #0
  47982. 80140d2: 651a str r2, [r3, #80] @ 0x50
  47983. }
  47984. #endif /* configUSE_MUTEXES */
  47985. vListInitialiseItem( &( pxNewTCB->xStateListItem ) );
  47986. 80140d4: 6b3b ldr r3, [r7, #48] @ 0x30
  47987. 80140d6: 3304 adds r3, #4
  47988. 80140d8: 4618 mov r0, r3
  47989. 80140da: f7fe fd09 bl 8012af0 <vListInitialiseItem>
  47990. vListInitialiseItem( &( pxNewTCB->xEventListItem ) );
  47991. 80140de: 6b3b ldr r3, [r7, #48] @ 0x30
  47992. 80140e0: 3318 adds r3, #24
  47993. 80140e2: 4618 mov r0, r3
  47994. 80140e4: f7fe fd04 bl 8012af0 <vListInitialiseItem>
  47995. /* Set the pxNewTCB as a link back from the ListItem_t. This is so we can get
  47996. back to the containing TCB from a generic item in a list. */
  47997. listSET_LIST_ITEM_OWNER( &( pxNewTCB->xStateListItem ), pxNewTCB );
  47998. 80140e8: 6b3b ldr r3, [r7, #48] @ 0x30
  47999. 80140ea: 6b3a ldr r2, [r7, #48] @ 0x30
  48000. 80140ec: 611a str r2, [r3, #16]
  48001. /* Event lists are always in priority order. */
  48002. 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. */
  48003. 80140ee: 6abb ldr r3, [r7, #40] @ 0x28
  48004. 80140f0: f1c3 0238 rsb r2, r3, #56 @ 0x38
  48005. 80140f4: 6b3b ldr r3, [r7, #48] @ 0x30
  48006. 80140f6: 619a str r2, [r3, #24]
  48007. listSET_LIST_ITEM_OWNER( &( pxNewTCB->xEventListItem ), pxNewTCB );
  48008. 80140f8: 6b3b ldr r3, [r7, #48] @ 0x30
  48009. 80140fa: 6b3a ldr r2, [r7, #48] @ 0x30
  48010. 80140fc: 625a str r2, [r3, #36] @ 0x24
  48011. }
  48012. #endif
  48013. #if ( configUSE_TASK_NOTIFICATIONS == 1 )
  48014. {
  48015. pxNewTCB->ulNotifiedValue = 0;
  48016. 80140fe: 6b3b ldr r3, [r7, #48] @ 0x30
  48017. 8014100: 2200 movs r2, #0
  48018. 8014102: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  48019. pxNewTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  48020. 8014106: 6b3b ldr r3, [r7, #48] @ 0x30
  48021. 8014108: 2200 movs r2, #0
  48022. 801410a: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  48023. #if ( configUSE_NEWLIB_REENTRANT == 1 )
  48024. {
  48025. /* Initialise this task's Newlib reent structure.
  48026. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  48027. for additional information. */
  48028. _REENT_INIT_PTR( ( &( pxNewTCB->xNewLib_reent ) ) );
  48029. 801410e: 6b3b ldr r3, [r7, #48] @ 0x30
  48030. 8014110: 3354 adds r3, #84 @ 0x54
  48031. 8014112: 224c movs r2, #76 @ 0x4c
  48032. 8014114: 2100 movs r1, #0
  48033. 8014116: 4618 mov r0, r3
  48034. 8014118: f002 fb1d bl 8016756 <memset>
  48035. 801411c: 6b3b ldr r3, [r7, #48] @ 0x30
  48036. 801411e: 4a0d ldr r2, [pc, #52] @ (8014154 <prvInitialiseNewTask+0x144>)
  48037. 8014120: 659a str r2, [r3, #88] @ 0x58
  48038. 8014122: 6b3b ldr r3, [r7, #48] @ 0x30
  48039. 8014124: 4a0c ldr r2, [pc, #48] @ (8014158 <prvInitialiseNewTask+0x148>)
  48040. 8014126: 65da str r2, [r3, #92] @ 0x5c
  48041. 8014128: 6b3b ldr r3, [r7, #48] @ 0x30
  48042. 801412a: 4a0c ldr r2, [pc, #48] @ (801415c <prvInitialiseNewTask+0x14c>)
  48043. 801412c: 661a str r2, [r3, #96] @ 0x60
  48044. }
  48045. #endif /* portSTACK_GROWTH */
  48046. }
  48047. #else /* portHAS_STACK_OVERFLOW_CHECKING */
  48048. {
  48049. pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters );
  48050. 801412e: 683a ldr r2, [r7, #0]
  48051. 8014130: 68f9 ldr r1, [r7, #12]
  48052. 8014132: 69b8 ldr r0, [r7, #24]
  48053. 8014134: f001 fdb8 bl 8015ca8 <pxPortInitialiseStack>
  48054. 8014138: 4602 mov r2, r0
  48055. 801413a: 6b3b ldr r3, [r7, #48] @ 0x30
  48056. 801413c: 601a str r2, [r3, #0]
  48057. }
  48058. #endif /* portHAS_STACK_OVERFLOW_CHECKING */
  48059. }
  48060. #endif /* portUSING_MPU_WRAPPERS */
  48061. if( pxCreatedTask != NULL )
  48062. 801413e: 6afb ldr r3, [r7, #44] @ 0x2c
  48063. 8014140: 2b00 cmp r3, #0
  48064. 8014142: d002 beq.n 801414a <prvInitialiseNewTask+0x13a>
  48065. {
  48066. /* Pass the handle out in an anonymous way. The handle can be used to
  48067. change the created task's priority, delete the created task, etc.*/
  48068. *pxCreatedTask = ( TaskHandle_t ) pxNewTCB;
  48069. 8014144: 6afb ldr r3, [r7, #44] @ 0x2c
  48070. 8014146: 6b3a ldr r2, [r7, #48] @ 0x30
  48071. 8014148: 601a str r2, [r3, #0]
  48072. }
  48073. else
  48074. {
  48075. mtCOVERAGE_TEST_MARKER();
  48076. }
  48077. }
  48078. 801414a: bf00 nop
  48079. 801414c: 3720 adds r7, #32
  48080. 801414e: 46bd mov sp, r7
  48081. 8014150: bd80 pop {r7, pc}
  48082. 8014152: bf00 nop
  48083. 8014154: 24012bf8 .word 0x24012bf8
  48084. 8014158: 24012c60 .word 0x24012c60
  48085. 801415c: 24012cc8 .word 0x24012cc8
  48086. 08014160 <prvAddNewTaskToReadyList>:
  48087. /*-----------------------------------------------------------*/
  48088. static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB )
  48089. {
  48090. 8014160: b580 push {r7, lr}
  48091. 8014162: b082 sub sp, #8
  48092. 8014164: af00 add r7, sp, #0
  48093. 8014166: 6078 str r0, [r7, #4]
  48094. /* Ensure interrupts don't access the task lists while the lists are being
  48095. updated. */
  48096. taskENTER_CRITICAL();
  48097. 8014168: f001 fece bl 8015f08 <vPortEnterCritical>
  48098. {
  48099. uxCurrentNumberOfTasks++;
  48100. 801416c: 4b2d ldr r3, [pc, #180] @ (8014224 <prvAddNewTaskToReadyList+0xc4>)
  48101. 801416e: 681b ldr r3, [r3, #0]
  48102. 8014170: 3301 adds r3, #1
  48103. 8014172: 4a2c ldr r2, [pc, #176] @ (8014224 <prvAddNewTaskToReadyList+0xc4>)
  48104. 8014174: 6013 str r3, [r2, #0]
  48105. if( pxCurrentTCB == NULL )
  48106. 8014176: 4b2c ldr r3, [pc, #176] @ (8014228 <prvAddNewTaskToReadyList+0xc8>)
  48107. 8014178: 681b ldr r3, [r3, #0]
  48108. 801417a: 2b00 cmp r3, #0
  48109. 801417c: d109 bne.n 8014192 <prvAddNewTaskToReadyList+0x32>
  48110. {
  48111. /* There are no other tasks, or all the other tasks are in
  48112. the suspended state - make this the current task. */
  48113. pxCurrentTCB = pxNewTCB;
  48114. 801417e: 4a2a ldr r2, [pc, #168] @ (8014228 <prvAddNewTaskToReadyList+0xc8>)
  48115. 8014180: 687b ldr r3, [r7, #4]
  48116. 8014182: 6013 str r3, [r2, #0]
  48117. if( uxCurrentNumberOfTasks == ( UBaseType_t ) 1 )
  48118. 8014184: 4b27 ldr r3, [pc, #156] @ (8014224 <prvAddNewTaskToReadyList+0xc4>)
  48119. 8014186: 681b ldr r3, [r3, #0]
  48120. 8014188: 2b01 cmp r3, #1
  48121. 801418a: d110 bne.n 80141ae <prvAddNewTaskToReadyList+0x4e>
  48122. {
  48123. /* This is the first task to be created so do the preliminary
  48124. initialisation required. We will not recover if this call
  48125. fails, but we will report the failure. */
  48126. prvInitialiseTaskLists();
  48127. 801418c: f000 fc64 bl 8014a58 <prvInitialiseTaskLists>
  48128. 8014190: e00d b.n 80141ae <prvAddNewTaskToReadyList+0x4e>
  48129. else
  48130. {
  48131. /* If the scheduler is not already running, make this task the
  48132. current task if it is the highest priority task to be created
  48133. so far. */
  48134. if( xSchedulerRunning == pdFALSE )
  48135. 8014192: 4b26 ldr r3, [pc, #152] @ (801422c <prvAddNewTaskToReadyList+0xcc>)
  48136. 8014194: 681b ldr r3, [r3, #0]
  48137. 8014196: 2b00 cmp r3, #0
  48138. 8014198: d109 bne.n 80141ae <prvAddNewTaskToReadyList+0x4e>
  48139. {
  48140. if( pxCurrentTCB->uxPriority <= pxNewTCB->uxPriority )
  48141. 801419a: 4b23 ldr r3, [pc, #140] @ (8014228 <prvAddNewTaskToReadyList+0xc8>)
  48142. 801419c: 681b ldr r3, [r3, #0]
  48143. 801419e: 6ada ldr r2, [r3, #44] @ 0x2c
  48144. 80141a0: 687b ldr r3, [r7, #4]
  48145. 80141a2: 6adb ldr r3, [r3, #44] @ 0x2c
  48146. 80141a4: 429a cmp r2, r3
  48147. 80141a6: d802 bhi.n 80141ae <prvAddNewTaskToReadyList+0x4e>
  48148. {
  48149. pxCurrentTCB = pxNewTCB;
  48150. 80141a8: 4a1f ldr r2, [pc, #124] @ (8014228 <prvAddNewTaskToReadyList+0xc8>)
  48151. 80141aa: 687b ldr r3, [r7, #4]
  48152. 80141ac: 6013 str r3, [r2, #0]
  48153. {
  48154. mtCOVERAGE_TEST_MARKER();
  48155. }
  48156. }
  48157. uxTaskNumber++;
  48158. 80141ae: 4b20 ldr r3, [pc, #128] @ (8014230 <prvAddNewTaskToReadyList+0xd0>)
  48159. 80141b0: 681b ldr r3, [r3, #0]
  48160. 80141b2: 3301 adds r3, #1
  48161. 80141b4: 4a1e ldr r2, [pc, #120] @ (8014230 <prvAddNewTaskToReadyList+0xd0>)
  48162. 80141b6: 6013 str r3, [r2, #0]
  48163. #if ( configUSE_TRACE_FACILITY == 1 )
  48164. {
  48165. /* Add a counter into the TCB for tracing only. */
  48166. pxNewTCB->uxTCBNumber = uxTaskNumber;
  48167. 80141b8: 4b1d ldr r3, [pc, #116] @ (8014230 <prvAddNewTaskToReadyList+0xd0>)
  48168. 80141ba: 681a ldr r2, [r3, #0]
  48169. 80141bc: 687b ldr r3, [r7, #4]
  48170. 80141be: 645a str r2, [r3, #68] @ 0x44
  48171. }
  48172. #endif /* configUSE_TRACE_FACILITY */
  48173. traceTASK_CREATE( pxNewTCB );
  48174. prvAddTaskToReadyList( pxNewTCB );
  48175. 80141c0: 687b ldr r3, [r7, #4]
  48176. 80141c2: 6ada ldr r2, [r3, #44] @ 0x2c
  48177. 80141c4: 4b1b ldr r3, [pc, #108] @ (8014234 <prvAddNewTaskToReadyList+0xd4>)
  48178. 80141c6: 681b ldr r3, [r3, #0]
  48179. 80141c8: 429a cmp r2, r3
  48180. 80141ca: d903 bls.n 80141d4 <prvAddNewTaskToReadyList+0x74>
  48181. 80141cc: 687b ldr r3, [r7, #4]
  48182. 80141ce: 6adb ldr r3, [r3, #44] @ 0x2c
  48183. 80141d0: 4a18 ldr r2, [pc, #96] @ (8014234 <prvAddNewTaskToReadyList+0xd4>)
  48184. 80141d2: 6013 str r3, [r2, #0]
  48185. 80141d4: 687b ldr r3, [r7, #4]
  48186. 80141d6: 6ada ldr r2, [r3, #44] @ 0x2c
  48187. 80141d8: 4613 mov r3, r2
  48188. 80141da: 009b lsls r3, r3, #2
  48189. 80141dc: 4413 add r3, r2
  48190. 80141de: 009b lsls r3, r3, #2
  48191. 80141e0: 4a15 ldr r2, [pc, #84] @ (8014238 <prvAddNewTaskToReadyList+0xd8>)
  48192. 80141e2: 441a add r2, r3
  48193. 80141e4: 687b ldr r3, [r7, #4]
  48194. 80141e6: 3304 adds r3, #4
  48195. 80141e8: 4619 mov r1, r3
  48196. 80141ea: 4610 mov r0, r2
  48197. 80141ec: f7fe fc8d bl 8012b0a <vListInsertEnd>
  48198. portSETUP_TCB( pxNewTCB );
  48199. }
  48200. taskEXIT_CRITICAL();
  48201. 80141f0: f001 febc bl 8015f6c <vPortExitCritical>
  48202. if( xSchedulerRunning != pdFALSE )
  48203. 80141f4: 4b0d ldr r3, [pc, #52] @ (801422c <prvAddNewTaskToReadyList+0xcc>)
  48204. 80141f6: 681b ldr r3, [r3, #0]
  48205. 80141f8: 2b00 cmp r3, #0
  48206. 80141fa: d00e beq.n 801421a <prvAddNewTaskToReadyList+0xba>
  48207. {
  48208. /* If the created task is of a higher priority than the current task
  48209. then it should run now. */
  48210. if( pxCurrentTCB->uxPriority < pxNewTCB->uxPriority )
  48211. 80141fc: 4b0a ldr r3, [pc, #40] @ (8014228 <prvAddNewTaskToReadyList+0xc8>)
  48212. 80141fe: 681b ldr r3, [r3, #0]
  48213. 8014200: 6ada ldr r2, [r3, #44] @ 0x2c
  48214. 8014202: 687b ldr r3, [r7, #4]
  48215. 8014204: 6adb ldr r3, [r3, #44] @ 0x2c
  48216. 8014206: 429a cmp r2, r3
  48217. 8014208: d207 bcs.n 801421a <prvAddNewTaskToReadyList+0xba>
  48218. {
  48219. taskYIELD_IF_USING_PREEMPTION();
  48220. 801420a: 4b0c ldr r3, [pc, #48] @ (801423c <prvAddNewTaskToReadyList+0xdc>)
  48221. 801420c: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  48222. 8014210: 601a str r2, [r3, #0]
  48223. 8014212: f3bf 8f4f dsb sy
  48224. 8014216: f3bf 8f6f isb sy
  48225. }
  48226. else
  48227. {
  48228. mtCOVERAGE_TEST_MARKER();
  48229. }
  48230. }
  48231. 801421a: bf00 nop
  48232. 801421c: 3708 adds r7, #8
  48233. 801421e: 46bd mov sp, r7
  48234. 8014220: bd80 pop {r7, pc}
  48235. 8014222: bf00 nop
  48236. 8014224: 24002a78 .word 0x24002a78
  48237. 8014228: 240025a4 .word 0x240025a4
  48238. 801422c: 24002a84 .word 0x24002a84
  48239. 8014230: 24002a94 .word 0x24002a94
  48240. 8014234: 24002a80 .word 0x24002a80
  48241. 8014238: 240025a8 .word 0x240025a8
  48242. 801423c: e000ed04 .word 0xe000ed04
  48243. 08014240 <vTaskDelay>:
  48244. /*-----------------------------------------------------------*/
  48245. #if ( INCLUDE_vTaskDelay == 1 )
  48246. void vTaskDelay( const TickType_t xTicksToDelay )
  48247. {
  48248. 8014240: b580 push {r7, lr}
  48249. 8014242: b084 sub sp, #16
  48250. 8014244: af00 add r7, sp, #0
  48251. 8014246: 6078 str r0, [r7, #4]
  48252. BaseType_t xAlreadyYielded = pdFALSE;
  48253. 8014248: 2300 movs r3, #0
  48254. 801424a: 60fb str r3, [r7, #12]
  48255. /* A delay time of zero just forces a reschedule. */
  48256. if( xTicksToDelay > ( TickType_t ) 0U )
  48257. 801424c: 687b ldr r3, [r7, #4]
  48258. 801424e: 2b00 cmp r3, #0
  48259. 8014250: d018 beq.n 8014284 <vTaskDelay+0x44>
  48260. {
  48261. configASSERT( uxSchedulerSuspended == 0 );
  48262. 8014252: 4b14 ldr r3, [pc, #80] @ (80142a4 <vTaskDelay+0x64>)
  48263. 8014254: 681b ldr r3, [r3, #0]
  48264. 8014256: 2b00 cmp r3, #0
  48265. 8014258: d00b beq.n 8014272 <vTaskDelay+0x32>
  48266. __asm volatile
  48267. 801425a: f04f 0350 mov.w r3, #80 @ 0x50
  48268. 801425e: f383 8811 msr BASEPRI, r3
  48269. 8014262: f3bf 8f6f isb sy
  48270. 8014266: f3bf 8f4f dsb sy
  48271. 801426a: 60bb str r3, [r7, #8]
  48272. }
  48273. 801426c: bf00 nop
  48274. 801426e: bf00 nop
  48275. 8014270: e7fd b.n 801426e <vTaskDelay+0x2e>
  48276. vTaskSuspendAll();
  48277. 8014272: f000 f88b bl 801438c <vTaskSuspendAll>
  48278. list or removed from the blocked list until the scheduler
  48279. is resumed.
  48280. This task cannot be in an event list as it is the currently
  48281. executing task. */
  48282. prvAddCurrentTaskToDelayedList( xTicksToDelay, pdFALSE );
  48283. 8014276: 2100 movs r1, #0
  48284. 8014278: 6878 ldr r0, [r7, #4]
  48285. 801427a: f001 f87d bl 8015378 <prvAddCurrentTaskToDelayedList>
  48286. }
  48287. xAlreadyYielded = xTaskResumeAll();
  48288. 801427e: f000 f893 bl 80143a8 <xTaskResumeAll>
  48289. 8014282: 60f8 str r0, [r7, #12]
  48290. mtCOVERAGE_TEST_MARKER();
  48291. }
  48292. /* Force a reschedule if xTaskResumeAll has not already done so, we may
  48293. have put ourselves to sleep. */
  48294. if( xAlreadyYielded == pdFALSE )
  48295. 8014284: 68fb ldr r3, [r7, #12]
  48296. 8014286: 2b00 cmp r3, #0
  48297. 8014288: d107 bne.n 801429a <vTaskDelay+0x5a>
  48298. {
  48299. portYIELD_WITHIN_API();
  48300. 801428a: 4b07 ldr r3, [pc, #28] @ (80142a8 <vTaskDelay+0x68>)
  48301. 801428c: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  48302. 8014290: 601a str r2, [r3, #0]
  48303. 8014292: f3bf 8f4f dsb sy
  48304. 8014296: f3bf 8f6f isb sy
  48305. }
  48306. else
  48307. {
  48308. mtCOVERAGE_TEST_MARKER();
  48309. }
  48310. }
  48311. 801429a: bf00 nop
  48312. 801429c: 3710 adds r7, #16
  48313. 801429e: 46bd mov sp, r7
  48314. 80142a0: bd80 pop {r7, pc}
  48315. 80142a2: bf00 nop
  48316. 80142a4: 24002aa0 .word 0x24002aa0
  48317. 80142a8: e000ed04 .word 0xe000ed04
  48318. 080142ac <vTaskStartScheduler>:
  48319. #endif /* ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) */
  48320. /*-----------------------------------------------------------*/
  48321. void vTaskStartScheduler( void )
  48322. {
  48323. 80142ac: b580 push {r7, lr}
  48324. 80142ae: b08a sub sp, #40 @ 0x28
  48325. 80142b0: af04 add r7, sp, #16
  48326. BaseType_t xReturn;
  48327. /* Add the idle task at the lowest priority. */
  48328. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  48329. {
  48330. StaticTask_t *pxIdleTaskTCBBuffer = NULL;
  48331. 80142b2: 2300 movs r3, #0
  48332. 80142b4: 60bb str r3, [r7, #8]
  48333. StackType_t *pxIdleTaskStackBuffer = NULL;
  48334. 80142b6: 2300 movs r3, #0
  48335. 80142b8: 607b str r3, [r7, #4]
  48336. uint32_t ulIdleTaskStackSize;
  48337. /* The Idle task is created using user provided RAM - obtain the
  48338. address of the RAM then create the idle task. */
  48339. vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &ulIdleTaskStackSize );
  48340. 80142ba: 463a mov r2, r7
  48341. 80142bc: 1d39 adds r1, r7, #4
  48342. 80142be: f107 0308 add.w r3, r7, #8
  48343. 80142c2: 4618 mov r0, r3
  48344. 80142c4: f7fe fbc0 bl 8012a48 <vApplicationGetIdleTaskMemory>
  48345. xIdleTaskHandle = xTaskCreateStatic( prvIdleTask,
  48346. 80142c8: 6839 ldr r1, [r7, #0]
  48347. 80142ca: 687b ldr r3, [r7, #4]
  48348. 80142cc: 68ba ldr r2, [r7, #8]
  48349. 80142ce: 9202 str r2, [sp, #8]
  48350. 80142d0: 9301 str r3, [sp, #4]
  48351. 80142d2: 2300 movs r3, #0
  48352. 80142d4: 9300 str r3, [sp, #0]
  48353. 80142d6: 2300 movs r3, #0
  48354. 80142d8: 460a mov r2, r1
  48355. 80142da: 4924 ldr r1, [pc, #144] @ (801436c <vTaskStartScheduler+0xc0>)
  48356. 80142dc: 4824 ldr r0, [pc, #144] @ (8014370 <vTaskStartScheduler+0xc4>)
  48357. 80142de: f7ff fdf2 bl 8013ec6 <xTaskCreateStatic>
  48358. 80142e2: 4603 mov r3, r0
  48359. 80142e4: 4a23 ldr r2, [pc, #140] @ (8014374 <vTaskStartScheduler+0xc8>)
  48360. 80142e6: 6013 str r3, [r2, #0]
  48361. ( void * ) NULL, /*lint !e961. The cast is not redundant for all compilers. */
  48362. portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */
  48363. pxIdleTaskStackBuffer,
  48364. pxIdleTaskTCBBuffer ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */
  48365. if( xIdleTaskHandle != NULL )
  48366. 80142e8: 4b22 ldr r3, [pc, #136] @ (8014374 <vTaskStartScheduler+0xc8>)
  48367. 80142ea: 681b ldr r3, [r3, #0]
  48368. 80142ec: 2b00 cmp r3, #0
  48369. 80142ee: d002 beq.n 80142f6 <vTaskStartScheduler+0x4a>
  48370. {
  48371. xReturn = pdPASS;
  48372. 80142f0: 2301 movs r3, #1
  48373. 80142f2: 617b str r3, [r7, #20]
  48374. 80142f4: e001 b.n 80142fa <vTaskStartScheduler+0x4e>
  48375. }
  48376. else
  48377. {
  48378. xReturn = pdFAIL;
  48379. 80142f6: 2300 movs r3, #0
  48380. 80142f8: 617b str r3, [r7, #20]
  48381. }
  48382. #endif /* configSUPPORT_STATIC_ALLOCATION */
  48383. #if ( configUSE_TIMERS == 1 )
  48384. {
  48385. if( xReturn == pdPASS )
  48386. 80142fa: 697b ldr r3, [r7, #20]
  48387. 80142fc: 2b01 cmp r3, #1
  48388. 80142fe: d102 bne.n 8014306 <vTaskStartScheduler+0x5a>
  48389. {
  48390. xReturn = xTimerCreateTimerTask();
  48391. 8014300: f001 f88e bl 8015420 <xTimerCreateTimerTask>
  48392. 8014304: 6178 str r0, [r7, #20]
  48393. mtCOVERAGE_TEST_MARKER();
  48394. }
  48395. }
  48396. #endif /* configUSE_TIMERS */
  48397. if( xReturn == pdPASS )
  48398. 8014306: 697b ldr r3, [r7, #20]
  48399. 8014308: 2b01 cmp r3, #1
  48400. 801430a: d11b bne.n 8014344 <vTaskStartScheduler+0x98>
  48401. __asm volatile
  48402. 801430c: f04f 0350 mov.w r3, #80 @ 0x50
  48403. 8014310: f383 8811 msr BASEPRI, r3
  48404. 8014314: f3bf 8f6f isb sy
  48405. 8014318: f3bf 8f4f dsb sy
  48406. 801431c: 613b str r3, [r7, #16]
  48407. }
  48408. 801431e: bf00 nop
  48409. {
  48410. /* Switch Newlib's _impure_ptr variable to point to the _reent
  48411. structure specific to the task that will run first.
  48412. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  48413. for additional information. */
  48414. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  48415. 8014320: 4b15 ldr r3, [pc, #84] @ (8014378 <vTaskStartScheduler+0xcc>)
  48416. 8014322: 681b ldr r3, [r3, #0]
  48417. 8014324: 3354 adds r3, #84 @ 0x54
  48418. 8014326: 4a15 ldr r2, [pc, #84] @ (801437c <vTaskStartScheduler+0xd0>)
  48419. 8014328: 6013 str r3, [r2, #0]
  48420. }
  48421. #endif /* configUSE_NEWLIB_REENTRANT */
  48422. xNextTaskUnblockTime = portMAX_DELAY;
  48423. 801432a: 4b15 ldr r3, [pc, #84] @ (8014380 <vTaskStartScheduler+0xd4>)
  48424. 801432c: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  48425. 8014330: 601a str r2, [r3, #0]
  48426. xSchedulerRunning = pdTRUE;
  48427. 8014332: 4b14 ldr r3, [pc, #80] @ (8014384 <vTaskStartScheduler+0xd8>)
  48428. 8014334: 2201 movs r2, #1
  48429. 8014336: 601a str r2, [r3, #0]
  48430. xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT;
  48431. 8014338: 4b13 ldr r3, [pc, #76] @ (8014388 <vTaskStartScheduler+0xdc>)
  48432. 801433a: 2200 movs r2, #0
  48433. 801433c: 601a str r2, [r3, #0]
  48434. traceTASK_SWITCHED_IN();
  48435. /* Setting up the timer tick is hardware specific and thus in the
  48436. portable interface. */
  48437. if( xPortStartScheduler() != pdFALSE )
  48438. 801433e: f001 fd3f bl 8015dc0 <xPortStartScheduler>
  48439. }
  48440. /* Prevent compiler warnings if INCLUDE_xTaskGetIdleTaskHandle is set to 0,
  48441. meaning xIdleTaskHandle is not used anywhere else. */
  48442. ( void ) xIdleTaskHandle;
  48443. }
  48444. 8014342: e00f b.n 8014364 <vTaskStartScheduler+0xb8>
  48445. configASSERT( xReturn != errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY );
  48446. 8014344: 697b ldr r3, [r7, #20]
  48447. 8014346: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  48448. 801434a: d10b bne.n 8014364 <vTaskStartScheduler+0xb8>
  48449. __asm volatile
  48450. 801434c: f04f 0350 mov.w r3, #80 @ 0x50
  48451. 8014350: f383 8811 msr BASEPRI, r3
  48452. 8014354: f3bf 8f6f isb sy
  48453. 8014358: f3bf 8f4f dsb sy
  48454. 801435c: 60fb str r3, [r7, #12]
  48455. }
  48456. 801435e: bf00 nop
  48457. 8014360: bf00 nop
  48458. 8014362: e7fd b.n 8014360 <vTaskStartScheduler+0xb4>
  48459. }
  48460. 8014364: bf00 nop
  48461. 8014366: 3718 adds r7, #24
  48462. 8014368: 46bd mov sp, r7
  48463. 801436a: bd80 pop {r7, pc}
  48464. 801436c: 0801754c .word 0x0801754c
  48465. 8014370: 08014a29 .word 0x08014a29
  48466. 8014374: 24002a9c .word 0x24002a9c
  48467. 8014378: 240025a4 .word 0x240025a4
  48468. 801437c: 24000054 .word 0x24000054
  48469. 8014380: 24002a98 .word 0x24002a98
  48470. 8014384: 24002a84 .word 0x24002a84
  48471. 8014388: 24002a7c .word 0x24002a7c
  48472. 0801438c <vTaskSuspendAll>:
  48473. vPortEndScheduler();
  48474. }
  48475. /*----------------------------------------------------------*/
  48476. void vTaskSuspendAll( void )
  48477. {
  48478. 801438c: b480 push {r7}
  48479. 801438e: af00 add r7, sp, #0
  48480. do not otherwise exhibit real time behaviour. */
  48481. portSOFTWARE_BARRIER();
  48482. /* The scheduler is suspended if uxSchedulerSuspended is non-zero. An increment
  48483. is used to allow calls to vTaskSuspendAll() to nest. */
  48484. ++uxSchedulerSuspended;
  48485. 8014390: 4b04 ldr r3, [pc, #16] @ (80143a4 <vTaskSuspendAll+0x18>)
  48486. 8014392: 681b ldr r3, [r3, #0]
  48487. 8014394: 3301 adds r3, #1
  48488. 8014396: 4a03 ldr r2, [pc, #12] @ (80143a4 <vTaskSuspendAll+0x18>)
  48489. 8014398: 6013 str r3, [r2, #0]
  48490. /* Enforces ordering for ports and optimised compilers that may otherwise place
  48491. the above increment elsewhere. */
  48492. portMEMORY_BARRIER();
  48493. }
  48494. 801439a: bf00 nop
  48495. 801439c: 46bd mov sp, r7
  48496. 801439e: f85d 7b04 ldr.w r7, [sp], #4
  48497. 80143a2: 4770 bx lr
  48498. 80143a4: 24002aa0 .word 0x24002aa0
  48499. 080143a8 <xTaskResumeAll>:
  48500. #endif /* configUSE_TICKLESS_IDLE */
  48501. /*----------------------------------------------------------*/
  48502. BaseType_t xTaskResumeAll( void )
  48503. {
  48504. 80143a8: b580 push {r7, lr}
  48505. 80143aa: b084 sub sp, #16
  48506. 80143ac: af00 add r7, sp, #0
  48507. TCB_t *pxTCB = NULL;
  48508. 80143ae: 2300 movs r3, #0
  48509. 80143b0: 60fb str r3, [r7, #12]
  48510. BaseType_t xAlreadyYielded = pdFALSE;
  48511. 80143b2: 2300 movs r3, #0
  48512. 80143b4: 60bb str r3, [r7, #8]
  48513. /* If uxSchedulerSuspended is zero then this function does not match a
  48514. previous call to vTaskSuspendAll(). */
  48515. configASSERT( uxSchedulerSuspended );
  48516. 80143b6: 4b42 ldr r3, [pc, #264] @ (80144c0 <xTaskResumeAll+0x118>)
  48517. 80143b8: 681b ldr r3, [r3, #0]
  48518. 80143ba: 2b00 cmp r3, #0
  48519. 80143bc: d10b bne.n 80143d6 <xTaskResumeAll+0x2e>
  48520. __asm volatile
  48521. 80143be: f04f 0350 mov.w r3, #80 @ 0x50
  48522. 80143c2: f383 8811 msr BASEPRI, r3
  48523. 80143c6: f3bf 8f6f isb sy
  48524. 80143ca: f3bf 8f4f dsb sy
  48525. 80143ce: 603b str r3, [r7, #0]
  48526. }
  48527. 80143d0: bf00 nop
  48528. 80143d2: bf00 nop
  48529. 80143d4: e7fd b.n 80143d2 <xTaskResumeAll+0x2a>
  48530. /* It is possible that an ISR caused a task to be removed from an event
  48531. list while the scheduler was suspended. If this was the case then the
  48532. removed task will have been added to the xPendingReadyList. Once the
  48533. scheduler has been resumed it is safe to move all the pending ready
  48534. tasks from this list into their appropriate ready list. */
  48535. taskENTER_CRITICAL();
  48536. 80143d6: f001 fd97 bl 8015f08 <vPortEnterCritical>
  48537. {
  48538. --uxSchedulerSuspended;
  48539. 80143da: 4b39 ldr r3, [pc, #228] @ (80144c0 <xTaskResumeAll+0x118>)
  48540. 80143dc: 681b ldr r3, [r3, #0]
  48541. 80143de: 3b01 subs r3, #1
  48542. 80143e0: 4a37 ldr r2, [pc, #220] @ (80144c0 <xTaskResumeAll+0x118>)
  48543. 80143e2: 6013 str r3, [r2, #0]
  48544. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  48545. 80143e4: 4b36 ldr r3, [pc, #216] @ (80144c0 <xTaskResumeAll+0x118>)
  48546. 80143e6: 681b ldr r3, [r3, #0]
  48547. 80143e8: 2b00 cmp r3, #0
  48548. 80143ea: d162 bne.n 80144b2 <xTaskResumeAll+0x10a>
  48549. {
  48550. if( uxCurrentNumberOfTasks > ( UBaseType_t ) 0U )
  48551. 80143ec: 4b35 ldr r3, [pc, #212] @ (80144c4 <xTaskResumeAll+0x11c>)
  48552. 80143ee: 681b ldr r3, [r3, #0]
  48553. 80143f0: 2b00 cmp r3, #0
  48554. 80143f2: d05e beq.n 80144b2 <xTaskResumeAll+0x10a>
  48555. {
  48556. /* Move any readied tasks from the pending list into the
  48557. appropriate ready list. */
  48558. while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )
  48559. 80143f4: e02f b.n 8014456 <xTaskResumeAll+0xae>
  48560. {
  48561. 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. */
  48562. 80143f6: 4b34 ldr r3, [pc, #208] @ (80144c8 <xTaskResumeAll+0x120>)
  48563. 80143f8: 68db ldr r3, [r3, #12]
  48564. 80143fa: 68db ldr r3, [r3, #12]
  48565. 80143fc: 60fb str r3, [r7, #12]
  48566. ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
  48567. 80143fe: 68fb ldr r3, [r7, #12]
  48568. 8014400: 3318 adds r3, #24
  48569. 8014402: 4618 mov r0, r3
  48570. 8014404: f7fe fbde bl 8012bc4 <uxListRemove>
  48571. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  48572. 8014408: 68fb ldr r3, [r7, #12]
  48573. 801440a: 3304 adds r3, #4
  48574. 801440c: 4618 mov r0, r3
  48575. 801440e: f7fe fbd9 bl 8012bc4 <uxListRemove>
  48576. prvAddTaskToReadyList( pxTCB );
  48577. 8014412: 68fb ldr r3, [r7, #12]
  48578. 8014414: 6ada ldr r2, [r3, #44] @ 0x2c
  48579. 8014416: 4b2d ldr r3, [pc, #180] @ (80144cc <xTaskResumeAll+0x124>)
  48580. 8014418: 681b ldr r3, [r3, #0]
  48581. 801441a: 429a cmp r2, r3
  48582. 801441c: d903 bls.n 8014426 <xTaskResumeAll+0x7e>
  48583. 801441e: 68fb ldr r3, [r7, #12]
  48584. 8014420: 6adb ldr r3, [r3, #44] @ 0x2c
  48585. 8014422: 4a2a ldr r2, [pc, #168] @ (80144cc <xTaskResumeAll+0x124>)
  48586. 8014424: 6013 str r3, [r2, #0]
  48587. 8014426: 68fb ldr r3, [r7, #12]
  48588. 8014428: 6ada ldr r2, [r3, #44] @ 0x2c
  48589. 801442a: 4613 mov r3, r2
  48590. 801442c: 009b lsls r3, r3, #2
  48591. 801442e: 4413 add r3, r2
  48592. 8014430: 009b lsls r3, r3, #2
  48593. 8014432: 4a27 ldr r2, [pc, #156] @ (80144d0 <xTaskResumeAll+0x128>)
  48594. 8014434: 441a add r2, r3
  48595. 8014436: 68fb ldr r3, [r7, #12]
  48596. 8014438: 3304 adds r3, #4
  48597. 801443a: 4619 mov r1, r3
  48598. 801443c: 4610 mov r0, r2
  48599. 801443e: f7fe fb64 bl 8012b0a <vListInsertEnd>
  48600. /* If the moved task has a priority higher than the current
  48601. task then a yield must be performed. */
  48602. if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
  48603. 8014442: 68fb ldr r3, [r7, #12]
  48604. 8014444: 6ada ldr r2, [r3, #44] @ 0x2c
  48605. 8014446: 4b23 ldr r3, [pc, #140] @ (80144d4 <xTaskResumeAll+0x12c>)
  48606. 8014448: 681b ldr r3, [r3, #0]
  48607. 801444a: 6adb ldr r3, [r3, #44] @ 0x2c
  48608. 801444c: 429a cmp r2, r3
  48609. 801444e: d302 bcc.n 8014456 <xTaskResumeAll+0xae>
  48610. {
  48611. xYieldPending = pdTRUE;
  48612. 8014450: 4b21 ldr r3, [pc, #132] @ (80144d8 <xTaskResumeAll+0x130>)
  48613. 8014452: 2201 movs r2, #1
  48614. 8014454: 601a str r2, [r3, #0]
  48615. while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )
  48616. 8014456: 4b1c ldr r3, [pc, #112] @ (80144c8 <xTaskResumeAll+0x120>)
  48617. 8014458: 681b ldr r3, [r3, #0]
  48618. 801445a: 2b00 cmp r3, #0
  48619. 801445c: d1cb bne.n 80143f6 <xTaskResumeAll+0x4e>
  48620. {
  48621. mtCOVERAGE_TEST_MARKER();
  48622. }
  48623. }
  48624. if( pxTCB != NULL )
  48625. 801445e: 68fb ldr r3, [r7, #12]
  48626. 8014460: 2b00 cmp r3, #0
  48627. 8014462: d001 beq.n 8014468 <xTaskResumeAll+0xc0>
  48628. which may have prevented the next unblock time from being
  48629. re-calculated, in which case re-calculate it now. Mainly
  48630. important for low power tickless implementations, where
  48631. this can prevent an unnecessary exit from low power
  48632. state. */
  48633. prvResetNextTaskUnblockTime();
  48634. 8014464: f000 fb9c bl 8014ba0 <prvResetNextTaskUnblockTime>
  48635. /* If any ticks occurred while the scheduler was suspended then
  48636. they should be processed now. This ensures the tick count does
  48637. not slip, and that any delayed tasks are resumed at the correct
  48638. time. */
  48639. {
  48640. TickType_t xPendedCounts = xPendedTicks; /* Non-volatile copy. */
  48641. 8014468: 4b1c ldr r3, [pc, #112] @ (80144dc <xTaskResumeAll+0x134>)
  48642. 801446a: 681b ldr r3, [r3, #0]
  48643. 801446c: 607b str r3, [r7, #4]
  48644. if( xPendedCounts > ( TickType_t ) 0U )
  48645. 801446e: 687b ldr r3, [r7, #4]
  48646. 8014470: 2b00 cmp r3, #0
  48647. 8014472: d010 beq.n 8014496 <xTaskResumeAll+0xee>
  48648. {
  48649. do
  48650. {
  48651. if( xTaskIncrementTick() != pdFALSE )
  48652. 8014474: f000 f846 bl 8014504 <xTaskIncrementTick>
  48653. 8014478: 4603 mov r3, r0
  48654. 801447a: 2b00 cmp r3, #0
  48655. 801447c: d002 beq.n 8014484 <xTaskResumeAll+0xdc>
  48656. {
  48657. xYieldPending = pdTRUE;
  48658. 801447e: 4b16 ldr r3, [pc, #88] @ (80144d8 <xTaskResumeAll+0x130>)
  48659. 8014480: 2201 movs r2, #1
  48660. 8014482: 601a str r2, [r3, #0]
  48661. }
  48662. else
  48663. {
  48664. mtCOVERAGE_TEST_MARKER();
  48665. }
  48666. --xPendedCounts;
  48667. 8014484: 687b ldr r3, [r7, #4]
  48668. 8014486: 3b01 subs r3, #1
  48669. 8014488: 607b str r3, [r7, #4]
  48670. } while( xPendedCounts > ( TickType_t ) 0U );
  48671. 801448a: 687b ldr r3, [r7, #4]
  48672. 801448c: 2b00 cmp r3, #0
  48673. 801448e: d1f1 bne.n 8014474 <xTaskResumeAll+0xcc>
  48674. xPendedTicks = 0;
  48675. 8014490: 4b12 ldr r3, [pc, #72] @ (80144dc <xTaskResumeAll+0x134>)
  48676. 8014492: 2200 movs r2, #0
  48677. 8014494: 601a str r2, [r3, #0]
  48678. {
  48679. mtCOVERAGE_TEST_MARKER();
  48680. }
  48681. }
  48682. if( xYieldPending != pdFALSE )
  48683. 8014496: 4b10 ldr r3, [pc, #64] @ (80144d8 <xTaskResumeAll+0x130>)
  48684. 8014498: 681b ldr r3, [r3, #0]
  48685. 801449a: 2b00 cmp r3, #0
  48686. 801449c: d009 beq.n 80144b2 <xTaskResumeAll+0x10a>
  48687. {
  48688. #if( configUSE_PREEMPTION != 0 )
  48689. {
  48690. xAlreadyYielded = pdTRUE;
  48691. 801449e: 2301 movs r3, #1
  48692. 80144a0: 60bb str r3, [r7, #8]
  48693. }
  48694. #endif
  48695. taskYIELD_IF_USING_PREEMPTION();
  48696. 80144a2: 4b0f ldr r3, [pc, #60] @ (80144e0 <xTaskResumeAll+0x138>)
  48697. 80144a4: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  48698. 80144a8: 601a str r2, [r3, #0]
  48699. 80144aa: f3bf 8f4f dsb sy
  48700. 80144ae: f3bf 8f6f isb sy
  48701. else
  48702. {
  48703. mtCOVERAGE_TEST_MARKER();
  48704. }
  48705. }
  48706. taskEXIT_CRITICAL();
  48707. 80144b2: f001 fd5b bl 8015f6c <vPortExitCritical>
  48708. return xAlreadyYielded;
  48709. 80144b6: 68bb ldr r3, [r7, #8]
  48710. }
  48711. 80144b8: 4618 mov r0, r3
  48712. 80144ba: 3710 adds r7, #16
  48713. 80144bc: 46bd mov sp, r7
  48714. 80144be: bd80 pop {r7, pc}
  48715. 80144c0: 24002aa0 .word 0x24002aa0
  48716. 80144c4: 24002a78 .word 0x24002a78
  48717. 80144c8: 24002a38 .word 0x24002a38
  48718. 80144cc: 24002a80 .word 0x24002a80
  48719. 80144d0: 240025a8 .word 0x240025a8
  48720. 80144d4: 240025a4 .word 0x240025a4
  48721. 80144d8: 24002a8c .word 0x24002a8c
  48722. 80144dc: 24002a88 .word 0x24002a88
  48723. 80144e0: e000ed04 .word 0xe000ed04
  48724. 080144e4 <xTaskGetTickCount>:
  48725. /*-----------------------------------------------------------*/
  48726. TickType_t xTaskGetTickCount( void )
  48727. {
  48728. 80144e4: b480 push {r7}
  48729. 80144e6: b083 sub sp, #12
  48730. 80144e8: af00 add r7, sp, #0
  48731. TickType_t xTicks;
  48732. /* Critical section required if running on a 16 bit processor. */
  48733. portTICK_TYPE_ENTER_CRITICAL();
  48734. {
  48735. xTicks = xTickCount;
  48736. 80144ea: 4b05 ldr r3, [pc, #20] @ (8014500 <xTaskGetTickCount+0x1c>)
  48737. 80144ec: 681b ldr r3, [r3, #0]
  48738. 80144ee: 607b str r3, [r7, #4]
  48739. }
  48740. portTICK_TYPE_EXIT_CRITICAL();
  48741. return xTicks;
  48742. 80144f0: 687b ldr r3, [r7, #4]
  48743. }
  48744. 80144f2: 4618 mov r0, r3
  48745. 80144f4: 370c adds r7, #12
  48746. 80144f6: 46bd mov sp, r7
  48747. 80144f8: f85d 7b04 ldr.w r7, [sp], #4
  48748. 80144fc: 4770 bx lr
  48749. 80144fe: bf00 nop
  48750. 8014500: 24002a7c .word 0x24002a7c
  48751. 08014504 <xTaskIncrementTick>:
  48752. #endif /* INCLUDE_xTaskAbortDelay */
  48753. /*----------------------------------------------------------*/
  48754. BaseType_t xTaskIncrementTick( void )
  48755. {
  48756. 8014504: b580 push {r7, lr}
  48757. 8014506: b086 sub sp, #24
  48758. 8014508: af00 add r7, sp, #0
  48759. TCB_t * pxTCB;
  48760. TickType_t xItemValue;
  48761. BaseType_t xSwitchRequired = pdFALSE;
  48762. 801450a: 2300 movs r3, #0
  48763. 801450c: 617b str r3, [r7, #20]
  48764. /* Called by the portable layer each time a tick interrupt occurs.
  48765. Increments the tick then checks to see if the new tick value will cause any
  48766. tasks to be unblocked. */
  48767. traceTASK_INCREMENT_TICK( xTickCount );
  48768. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  48769. 801450e: 4b4f ldr r3, [pc, #316] @ (801464c <xTaskIncrementTick+0x148>)
  48770. 8014510: 681b ldr r3, [r3, #0]
  48771. 8014512: 2b00 cmp r3, #0
  48772. 8014514: f040 8090 bne.w 8014638 <xTaskIncrementTick+0x134>
  48773. {
  48774. /* Minor optimisation. The tick count cannot change in this
  48775. block. */
  48776. const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
  48777. 8014518: 4b4d ldr r3, [pc, #308] @ (8014650 <xTaskIncrementTick+0x14c>)
  48778. 801451a: 681b ldr r3, [r3, #0]
  48779. 801451c: 3301 adds r3, #1
  48780. 801451e: 613b str r3, [r7, #16]
  48781. /* Increment the RTOS tick, switching the delayed and overflowed
  48782. delayed lists if it wraps to 0. */
  48783. xTickCount = xConstTickCount;
  48784. 8014520: 4a4b ldr r2, [pc, #300] @ (8014650 <xTaskIncrementTick+0x14c>)
  48785. 8014522: 693b ldr r3, [r7, #16]
  48786. 8014524: 6013 str r3, [r2, #0]
  48787. if( xConstTickCount == ( TickType_t ) 0U ) /*lint !e774 'if' does not always evaluate to false as it is looking for an overflow. */
  48788. 8014526: 693b ldr r3, [r7, #16]
  48789. 8014528: 2b00 cmp r3, #0
  48790. 801452a: d121 bne.n 8014570 <xTaskIncrementTick+0x6c>
  48791. {
  48792. taskSWITCH_DELAYED_LISTS();
  48793. 801452c: 4b49 ldr r3, [pc, #292] @ (8014654 <xTaskIncrementTick+0x150>)
  48794. 801452e: 681b ldr r3, [r3, #0]
  48795. 8014530: 681b ldr r3, [r3, #0]
  48796. 8014532: 2b00 cmp r3, #0
  48797. 8014534: d00b beq.n 801454e <xTaskIncrementTick+0x4a>
  48798. __asm volatile
  48799. 8014536: f04f 0350 mov.w r3, #80 @ 0x50
  48800. 801453a: f383 8811 msr BASEPRI, r3
  48801. 801453e: f3bf 8f6f isb sy
  48802. 8014542: f3bf 8f4f dsb sy
  48803. 8014546: 603b str r3, [r7, #0]
  48804. }
  48805. 8014548: bf00 nop
  48806. 801454a: bf00 nop
  48807. 801454c: e7fd b.n 801454a <xTaskIncrementTick+0x46>
  48808. 801454e: 4b41 ldr r3, [pc, #260] @ (8014654 <xTaskIncrementTick+0x150>)
  48809. 8014550: 681b ldr r3, [r3, #0]
  48810. 8014552: 60fb str r3, [r7, #12]
  48811. 8014554: 4b40 ldr r3, [pc, #256] @ (8014658 <xTaskIncrementTick+0x154>)
  48812. 8014556: 681b ldr r3, [r3, #0]
  48813. 8014558: 4a3e ldr r2, [pc, #248] @ (8014654 <xTaskIncrementTick+0x150>)
  48814. 801455a: 6013 str r3, [r2, #0]
  48815. 801455c: 4a3e ldr r2, [pc, #248] @ (8014658 <xTaskIncrementTick+0x154>)
  48816. 801455e: 68fb ldr r3, [r7, #12]
  48817. 8014560: 6013 str r3, [r2, #0]
  48818. 8014562: 4b3e ldr r3, [pc, #248] @ (801465c <xTaskIncrementTick+0x158>)
  48819. 8014564: 681b ldr r3, [r3, #0]
  48820. 8014566: 3301 adds r3, #1
  48821. 8014568: 4a3c ldr r2, [pc, #240] @ (801465c <xTaskIncrementTick+0x158>)
  48822. 801456a: 6013 str r3, [r2, #0]
  48823. 801456c: f000 fb18 bl 8014ba0 <prvResetNextTaskUnblockTime>
  48824. /* See if this tick has made a timeout expire. Tasks are stored in
  48825. the queue in the order of their wake time - meaning once one task
  48826. has been found whose block time has not expired there is no need to
  48827. look any further down the list. */
  48828. if( xConstTickCount >= xNextTaskUnblockTime )
  48829. 8014570: 4b3b ldr r3, [pc, #236] @ (8014660 <xTaskIncrementTick+0x15c>)
  48830. 8014572: 681b ldr r3, [r3, #0]
  48831. 8014574: 693a ldr r2, [r7, #16]
  48832. 8014576: 429a cmp r2, r3
  48833. 8014578: d349 bcc.n 801460e <xTaskIncrementTick+0x10a>
  48834. {
  48835. for( ;; )
  48836. {
  48837. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  48838. 801457a: 4b36 ldr r3, [pc, #216] @ (8014654 <xTaskIncrementTick+0x150>)
  48839. 801457c: 681b ldr r3, [r3, #0]
  48840. 801457e: 681b ldr r3, [r3, #0]
  48841. 8014580: 2b00 cmp r3, #0
  48842. 8014582: d104 bne.n 801458e <xTaskIncrementTick+0x8a>
  48843. /* The delayed list is empty. Set xNextTaskUnblockTime
  48844. to the maximum possible value so it is extremely
  48845. unlikely that the
  48846. if( xTickCount >= xNextTaskUnblockTime ) test will pass
  48847. next time through. */
  48848. xNextTaskUnblockTime = portMAX_DELAY; /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  48849. 8014584: 4b36 ldr r3, [pc, #216] @ (8014660 <xTaskIncrementTick+0x15c>)
  48850. 8014586: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  48851. 801458a: 601a str r2, [r3, #0]
  48852. break;
  48853. 801458c: e03f b.n 801460e <xTaskIncrementTick+0x10a>
  48854. {
  48855. /* The delayed list is not empty, get the value of the
  48856. item at the head of the delayed list. This is the time
  48857. at which the task at the head of the delayed list must
  48858. be removed from the Blocked state. */
  48859. 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. */
  48860. 801458e: 4b31 ldr r3, [pc, #196] @ (8014654 <xTaskIncrementTick+0x150>)
  48861. 8014590: 681b ldr r3, [r3, #0]
  48862. 8014592: 68db ldr r3, [r3, #12]
  48863. 8014594: 68db ldr r3, [r3, #12]
  48864. 8014596: 60bb str r3, [r7, #8]
  48865. xItemValue = listGET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ) );
  48866. 8014598: 68bb ldr r3, [r7, #8]
  48867. 801459a: 685b ldr r3, [r3, #4]
  48868. 801459c: 607b str r3, [r7, #4]
  48869. if( xConstTickCount < xItemValue )
  48870. 801459e: 693a ldr r2, [r7, #16]
  48871. 80145a0: 687b ldr r3, [r7, #4]
  48872. 80145a2: 429a cmp r2, r3
  48873. 80145a4: d203 bcs.n 80145ae <xTaskIncrementTick+0xaa>
  48874. /* It is not time to unblock this item yet, but the
  48875. item value is the time at which the task at the head
  48876. of the blocked list must be removed from the Blocked
  48877. state - so record the item value in
  48878. xNextTaskUnblockTime. */
  48879. xNextTaskUnblockTime = xItemValue;
  48880. 80145a6: 4a2e ldr r2, [pc, #184] @ (8014660 <xTaskIncrementTick+0x15c>)
  48881. 80145a8: 687b ldr r3, [r7, #4]
  48882. 80145aa: 6013 str r3, [r2, #0]
  48883. break; /*lint !e9011 Code structure here is deedmed easier to understand with multiple breaks. */
  48884. 80145ac: e02f b.n 801460e <xTaskIncrementTick+0x10a>
  48885. {
  48886. mtCOVERAGE_TEST_MARKER();
  48887. }
  48888. /* It is time to remove the item from the Blocked state. */
  48889. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  48890. 80145ae: 68bb ldr r3, [r7, #8]
  48891. 80145b0: 3304 adds r3, #4
  48892. 80145b2: 4618 mov r0, r3
  48893. 80145b4: f7fe fb06 bl 8012bc4 <uxListRemove>
  48894. /* Is the task waiting on an event also? If so remove
  48895. it from the event list. */
  48896. if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )
  48897. 80145b8: 68bb ldr r3, [r7, #8]
  48898. 80145ba: 6a9b ldr r3, [r3, #40] @ 0x28
  48899. 80145bc: 2b00 cmp r3, #0
  48900. 80145be: d004 beq.n 80145ca <xTaskIncrementTick+0xc6>
  48901. {
  48902. ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
  48903. 80145c0: 68bb ldr r3, [r7, #8]
  48904. 80145c2: 3318 adds r3, #24
  48905. 80145c4: 4618 mov r0, r3
  48906. 80145c6: f7fe fafd bl 8012bc4 <uxListRemove>
  48907. mtCOVERAGE_TEST_MARKER();
  48908. }
  48909. /* Place the unblocked task into the appropriate ready
  48910. list. */
  48911. prvAddTaskToReadyList( pxTCB );
  48912. 80145ca: 68bb ldr r3, [r7, #8]
  48913. 80145cc: 6ada ldr r2, [r3, #44] @ 0x2c
  48914. 80145ce: 4b25 ldr r3, [pc, #148] @ (8014664 <xTaskIncrementTick+0x160>)
  48915. 80145d0: 681b ldr r3, [r3, #0]
  48916. 80145d2: 429a cmp r2, r3
  48917. 80145d4: d903 bls.n 80145de <xTaskIncrementTick+0xda>
  48918. 80145d6: 68bb ldr r3, [r7, #8]
  48919. 80145d8: 6adb ldr r3, [r3, #44] @ 0x2c
  48920. 80145da: 4a22 ldr r2, [pc, #136] @ (8014664 <xTaskIncrementTick+0x160>)
  48921. 80145dc: 6013 str r3, [r2, #0]
  48922. 80145de: 68bb ldr r3, [r7, #8]
  48923. 80145e0: 6ada ldr r2, [r3, #44] @ 0x2c
  48924. 80145e2: 4613 mov r3, r2
  48925. 80145e4: 009b lsls r3, r3, #2
  48926. 80145e6: 4413 add r3, r2
  48927. 80145e8: 009b lsls r3, r3, #2
  48928. 80145ea: 4a1f ldr r2, [pc, #124] @ (8014668 <xTaskIncrementTick+0x164>)
  48929. 80145ec: 441a add r2, r3
  48930. 80145ee: 68bb ldr r3, [r7, #8]
  48931. 80145f0: 3304 adds r3, #4
  48932. 80145f2: 4619 mov r1, r3
  48933. 80145f4: 4610 mov r0, r2
  48934. 80145f6: f7fe fa88 bl 8012b0a <vListInsertEnd>
  48935. {
  48936. /* Preemption is on, but a context switch should
  48937. only be performed if the unblocked task has a
  48938. priority that is equal to or higher than the
  48939. currently executing task. */
  48940. if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
  48941. 80145fa: 68bb ldr r3, [r7, #8]
  48942. 80145fc: 6ada ldr r2, [r3, #44] @ 0x2c
  48943. 80145fe: 4b1b ldr r3, [pc, #108] @ (801466c <xTaskIncrementTick+0x168>)
  48944. 8014600: 681b ldr r3, [r3, #0]
  48945. 8014602: 6adb ldr r3, [r3, #44] @ 0x2c
  48946. 8014604: 429a cmp r2, r3
  48947. 8014606: d3b8 bcc.n 801457a <xTaskIncrementTick+0x76>
  48948. {
  48949. xSwitchRequired = pdTRUE;
  48950. 8014608: 2301 movs r3, #1
  48951. 801460a: 617b str r3, [r7, #20]
  48952. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  48953. 801460c: e7b5 b.n 801457a <xTaskIncrementTick+0x76>
  48954. /* Tasks of equal priority to the currently running task will share
  48955. processing time (time slice) if preemption is on, and the application
  48956. writer has not explicitly turned time slicing off. */
  48957. #if ( ( configUSE_PREEMPTION == 1 ) && ( configUSE_TIME_SLICING == 1 ) )
  48958. {
  48959. if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCB->uxPriority ] ) ) > ( UBaseType_t ) 1 )
  48960. 801460e: 4b17 ldr r3, [pc, #92] @ (801466c <xTaskIncrementTick+0x168>)
  48961. 8014610: 681b ldr r3, [r3, #0]
  48962. 8014612: 6ada ldr r2, [r3, #44] @ 0x2c
  48963. 8014614: 4914 ldr r1, [pc, #80] @ (8014668 <xTaskIncrementTick+0x164>)
  48964. 8014616: 4613 mov r3, r2
  48965. 8014618: 009b lsls r3, r3, #2
  48966. 801461a: 4413 add r3, r2
  48967. 801461c: 009b lsls r3, r3, #2
  48968. 801461e: 440b add r3, r1
  48969. 8014620: 681b ldr r3, [r3, #0]
  48970. 8014622: 2b01 cmp r3, #1
  48971. 8014624: d901 bls.n 801462a <xTaskIncrementTick+0x126>
  48972. {
  48973. xSwitchRequired = pdTRUE;
  48974. 8014626: 2301 movs r3, #1
  48975. 8014628: 617b str r3, [r7, #20]
  48976. }
  48977. #endif /* configUSE_TICK_HOOK */
  48978. #if ( configUSE_PREEMPTION == 1 )
  48979. {
  48980. if( xYieldPending != pdFALSE )
  48981. 801462a: 4b11 ldr r3, [pc, #68] @ (8014670 <xTaskIncrementTick+0x16c>)
  48982. 801462c: 681b ldr r3, [r3, #0]
  48983. 801462e: 2b00 cmp r3, #0
  48984. 8014630: d007 beq.n 8014642 <xTaskIncrementTick+0x13e>
  48985. {
  48986. xSwitchRequired = pdTRUE;
  48987. 8014632: 2301 movs r3, #1
  48988. 8014634: 617b str r3, [r7, #20]
  48989. 8014636: e004 b.n 8014642 <xTaskIncrementTick+0x13e>
  48990. }
  48991. #endif /* configUSE_PREEMPTION */
  48992. }
  48993. else
  48994. {
  48995. ++xPendedTicks;
  48996. 8014638: 4b0e ldr r3, [pc, #56] @ (8014674 <xTaskIncrementTick+0x170>)
  48997. 801463a: 681b ldr r3, [r3, #0]
  48998. 801463c: 3301 adds r3, #1
  48999. 801463e: 4a0d ldr r2, [pc, #52] @ (8014674 <xTaskIncrementTick+0x170>)
  49000. 8014640: 6013 str r3, [r2, #0]
  49001. vApplicationTickHook();
  49002. }
  49003. #endif
  49004. }
  49005. return xSwitchRequired;
  49006. 8014642: 697b ldr r3, [r7, #20]
  49007. }
  49008. 8014644: 4618 mov r0, r3
  49009. 8014646: 3718 adds r7, #24
  49010. 8014648: 46bd mov sp, r7
  49011. 801464a: bd80 pop {r7, pc}
  49012. 801464c: 24002aa0 .word 0x24002aa0
  49013. 8014650: 24002a7c .word 0x24002a7c
  49014. 8014654: 24002a30 .word 0x24002a30
  49015. 8014658: 24002a34 .word 0x24002a34
  49016. 801465c: 24002a90 .word 0x24002a90
  49017. 8014660: 24002a98 .word 0x24002a98
  49018. 8014664: 24002a80 .word 0x24002a80
  49019. 8014668: 240025a8 .word 0x240025a8
  49020. 801466c: 240025a4 .word 0x240025a4
  49021. 8014670: 24002a8c .word 0x24002a8c
  49022. 8014674: 24002a88 .word 0x24002a88
  49023. 08014678 <vTaskSwitchContext>:
  49024. #endif /* configUSE_APPLICATION_TASK_TAG */
  49025. /*-----------------------------------------------------------*/
  49026. void vTaskSwitchContext( void )
  49027. {
  49028. 8014678: b580 push {r7, lr}
  49029. 801467a: b084 sub sp, #16
  49030. 801467c: af00 add r7, sp, #0
  49031. if( uxSchedulerSuspended != ( UBaseType_t ) pdFALSE )
  49032. 801467e: 4b32 ldr r3, [pc, #200] @ (8014748 <vTaskSwitchContext+0xd0>)
  49033. 8014680: 681b ldr r3, [r3, #0]
  49034. 8014682: 2b00 cmp r3, #0
  49035. 8014684: d003 beq.n 801468e <vTaskSwitchContext+0x16>
  49036. {
  49037. /* The scheduler is currently suspended - do not allow a context
  49038. switch. */
  49039. xYieldPending = pdTRUE;
  49040. 8014686: 4b31 ldr r3, [pc, #196] @ (801474c <vTaskSwitchContext+0xd4>)
  49041. 8014688: 2201 movs r2, #1
  49042. 801468a: 601a str r2, [r3, #0]
  49043. for additional information. */
  49044. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  49045. }
  49046. #endif /* configUSE_NEWLIB_REENTRANT */
  49047. }
  49048. }
  49049. 801468c: e058 b.n 8014740 <vTaskSwitchContext+0xc8>
  49050. xYieldPending = pdFALSE;
  49051. 801468e: 4b2f ldr r3, [pc, #188] @ (801474c <vTaskSwitchContext+0xd4>)
  49052. 8014690: 2200 movs r2, #0
  49053. 8014692: 601a str r2, [r3, #0]
  49054. taskCHECK_FOR_STACK_OVERFLOW();
  49055. 8014694: 4b2e ldr r3, [pc, #184] @ (8014750 <vTaskSwitchContext+0xd8>)
  49056. 8014696: 681b ldr r3, [r3, #0]
  49057. 8014698: 681a ldr r2, [r3, #0]
  49058. 801469a: 4b2d ldr r3, [pc, #180] @ (8014750 <vTaskSwitchContext+0xd8>)
  49059. 801469c: 681b ldr r3, [r3, #0]
  49060. 801469e: 6b1b ldr r3, [r3, #48] @ 0x30
  49061. 80146a0: 429a cmp r2, r3
  49062. 80146a2: d808 bhi.n 80146b6 <vTaskSwitchContext+0x3e>
  49063. 80146a4: 4b2a ldr r3, [pc, #168] @ (8014750 <vTaskSwitchContext+0xd8>)
  49064. 80146a6: 681a ldr r2, [r3, #0]
  49065. 80146a8: 4b29 ldr r3, [pc, #164] @ (8014750 <vTaskSwitchContext+0xd8>)
  49066. 80146aa: 681b ldr r3, [r3, #0]
  49067. 80146ac: 3334 adds r3, #52 @ 0x34
  49068. 80146ae: 4619 mov r1, r3
  49069. 80146b0: 4610 mov r0, r2
  49070. 80146b2: f7eb ffdd bl 8000670 <vApplicationStackOverflowHook>
  49071. 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. */
  49072. 80146b6: 4b27 ldr r3, [pc, #156] @ (8014754 <vTaskSwitchContext+0xdc>)
  49073. 80146b8: 681b ldr r3, [r3, #0]
  49074. 80146ba: 60fb str r3, [r7, #12]
  49075. 80146bc: e011 b.n 80146e2 <vTaskSwitchContext+0x6a>
  49076. 80146be: 68fb ldr r3, [r7, #12]
  49077. 80146c0: 2b00 cmp r3, #0
  49078. 80146c2: d10b bne.n 80146dc <vTaskSwitchContext+0x64>
  49079. __asm volatile
  49080. 80146c4: f04f 0350 mov.w r3, #80 @ 0x50
  49081. 80146c8: f383 8811 msr BASEPRI, r3
  49082. 80146cc: f3bf 8f6f isb sy
  49083. 80146d0: f3bf 8f4f dsb sy
  49084. 80146d4: 607b str r3, [r7, #4]
  49085. }
  49086. 80146d6: bf00 nop
  49087. 80146d8: bf00 nop
  49088. 80146da: e7fd b.n 80146d8 <vTaskSwitchContext+0x60>
  49089. 80146dc: 68fb ldr r3, [r7, #12]
  49090. 80146de: 3b01 subs r3, #1
  49091. 80146e0: 60fb str r3, [r7, #12]
  49092. 80146e2: 491d ldr r1, [pc, #116] @ (8014758 <vTaskSwitchContext+0xe0>)
  49093. 80146e4: 68fa ldr r2, [r7, #12]
  49094. 80146e6: 4613 mov r3, r2
  49095. 80146e8: 009b lsls r3, r3, #2
  49096. 80146ea: 4413 add r3, r2
  49097. 80146ec: 009b lsls r3, r3, #2
  49098. 80146ee: 440b add r3, r1
  49099. 80146f0: 681b ldr r3, [r3, #0]
  49100. 80146f2: 2b00 cmp r3, #0
  49101. 80146f4: d0e3 beq.n 80146be <vTaskSwitchContext+0x46>
  49102. 80146f6: 68fa ldr r2, [r7, #12]
  49103. 80146f8: 4613 mov r3, r2
  49104. 80146fa: 009b lsls r3, r3, #2
  49105. 80146fc: 4413 add r3, r2
  49106. 80146fe: 009b lsls r3, r3, #2
  49107. 8014700: 4a15 ldr r2, [pc, #84] @ (8014758 <vTaskSwitchContext+0xe0>)
  49108. 8014702: 4413 add r3, r2
  49109. 8014704: 60bb str r3, [r7, #8]
  49110. 8014706: 68bb ldr r3, [r7, #8]
  49111. 8014708: 685b ldr r3, [r3, #4]
  49112. 801470a: 685a ldr r2, [r3, #4]
  49113. 801470c: 68bb ldr r3, [r7, #8]
  49114. 801470e: 605a str r2, [r3, #4]
  49115. 8014710: 68bb ldr r3, [r7, #8]
  49116. 8014712: 685a ldr r2, [r3, #4]
  49117. 8014714: 68bb ldr r3, [r7, #8]
  49118. 8014716: 3308 adds r3, #8
  49119. 8014718: 429a cmp r2, r3
  49120. 801471a: d104 bne.n 8014726 <vTaskSwitchContext+0xae>
  49121. 801471c: 68bb ldr r3, [r7, #8]
  49122. 801471e: 685b ldr r3, [r3, #4]
  49123. 8014720: 685a ldr r2, [r3, #4]
  49124. 8014722: 68bb ldr r3, [r7, #8]
  49125. 8014724: 605a str r2, [r3, #4]
  49126. 8014726: 68bb ldr r3, [r7, #8]
  49127. 8014728: 685b ldr r3, [r3, #4]
  49128. 801472a: 68db ldr r3, [r3, #12]
  49129. 801472c: 4a08 ldr r2, [pc, #32] @ (8014750 <vTaskSwitchContext+0xd8>)
  49130. 801472e: 6013 str r3, [r2, #0]
  49131. 8014730: 4a08 ldr r2, [pc, #32] @ (8014754 <vTaskSwitchContext+0xdc>)
  49132. 8014732: 68fb ldr r3, [r7, #12]
  49133. 8014734: 6013 str r3, [r2, #0]
  49134. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  49135. 8014736: 4b06 ldr r3, [pc, #24] @ (8014750 <vTaskSwitchContext+0xd8>)
  49136. 8014738: 681b ldr r3, [r3, #0]
  49137. 801473a: 3354 adds r3, #84 @ 0x54
  49138. 801473c: 4a07 ldr r2, [pc, #28] @ (801475c <vTaskSwitchContext+0xe4>)
  49139. 801473e: 6013 str r3, [r2, #0]
  49140. }
  49141. 8014740: bf00 nop
  49142. 8014742: 3710 adds r7, #16
  49143. 8014744: 46bd mov sp, r7
  49144. 8014746: bd80 pop {r7, pc}
  49145. 8014748: 24002aa0 .word 0x24002aa0
  49146. 801474c: 24002a8c .word 0x24002a8c
  49147. 8014750: 240025a4 .word 0x240025a4
  49148. 8014754: 24002a80 .word 0x24002a80
  49149. 8014758: 240025a8 .word 0x240025a8
  49150. 801475c: 24000054 .word 0x24000054
  49151. 08014760 <vTaskPlaceOnEventList>:
  49152. /*-----------------------------------------------------------*/
  49153. void vTaskPlaceOnEventList( List_t * const pxEventList, const TickType_t xTicksToWait )
  49154. {
  49155. 8014760: b580 push {r7, lr}
  49156. 8014762: b084 sub sp, #16
  49157. 8014764: af00 add r7, sp, #0
  49158. 8014766: 6078 str r0, [r7, #4]
  49159. 8014768: 6039 str r1, [r7, #0]
  49160. configASSERT( pxEventList );
  49161. 801476a: 687b ldr r3, [r7, #4]
  49162. 801476c: 2b00 cmp r3, #0
  49163. 801476e: d10b bne.n 8014788 <vTaskPlaceOnEventList+0x28>
  49164. __asm volatile
  49165. 8014770: f04f 0350 mov.w r3, #80 @ 0x50
  49166. 8014774: f383 8811 msr BASEPRI, r3
  49167. 8014778: f3bf 8f6f isb sy
  49168. 801477c: f3bf 8f4f dsb sy
  49169. 8014780: 60fb str r3, [r7, #12]
  49170. }
  49171. 8014782: bf00 nop
  49172. 8014784: bf00 nop
  49173. 8014786: e7fd b.n 8014784 <vTaskPlaceOnEventList+0x24>
  49174. /* Place the event list item of the TCB in the appropriate event list.
  49175. This is placed in the list in priority order so the highest priority task
  49176. is the first to be woken by the event. The queue that contains the event
  49177. list is locked, preventing simultaneous access from interrupts. */
  49178. vListInsert( pxEventList, &( pxCurrentTCB->xEventListItem ) );
  49179. 8014788: 4b07 ldr r3, [pc, #28] @ (80147a8 <vTaskPlaceOnEventList+0x48>)
  49180. 801478a: 681b ldr r3, [r3, #0]
  49181. 801478c: 3318 adds r3, #24
  49182. 801478e: 4619 mov r1, r3
  49183. 8014790: 6878 ldr r0, [r7, #4]
  49184. 8014792: f7fe f9de bl 8012b52 <vListInsert>
  49185. prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );
  49186. 8014796: 2101 movs r1, #1
  49187. 8014798: 6838 ldr r0, [r7, #0]
  49188. 801479a: f000 fded bl 8015378 <prvAddCurrentTaskToDelayedList>
  49189. }
  49190. 801479e: bf00 nop
  49191. 80147a0: 3710 adds r7, #16
  49192. 80147a2: 46bd mov sp, r7
  49193. 80147a4: bd80 pop {r7, pc}
  49194. 80147a6: bf00 nop
  49195. 80147a8: 240025a4 .word 0x240025a4
  49196. 080147ac <vTaskPlaceOnEventListRestricted>:
  49197. /*-----------------------------------------------------------*/
  49198. #if( configUSE_TIMERS == 1 )
  49199. void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely )
  49200. {
  49201. 80147ac: b580 push {r7, lr}
  49202. 80147ae: b086 sub sp, #24
  49203. 80147b0: af00 add r7, sp, #0
  49204. 80147b2: 60f8 str r0, [r7, #12]
  49205. 80147b4: 60b9 str r1, [r7, #8]
  49206. 80147b6: 607a str r2, [r7, #4]
  49207. configASSERT( pxEventList );
  49208. 80147b8: 68fb ldr r3, [r7, #12]
  49209. 80147ba: 2b00 cmp r3, #0
  49210. 80147bc: d10b bne.n 80147d6 <vTaskPlaceOnEventListRestricted+0x2a>
  49211. __asm volatile
  49212. 80147be: f04f 0350 mov.w r3, #80 @ 0x50
  49213. 80147c2: f383 8811 msr BASEPRI, r3
  49214. 80147c6: f3bf 8f6f isb sy
  49215. 80147ca: f3bf 8f4f dsb sy
  49216. 80147ce: 617b str r3, [r7, #20]
  49217. }
  49218. 80147d0: bf00 nop
  49219. 80147d2: bf00 nop
  49220. 80147d4: e7fd b.n 80147d2 <vTaskPlaceOnEventListRestricted+0x26>
  49221. /* Place the event list item of the TCB in the appropriate event list.
  49222. In this case it is assume that this is the only task that is going to
  49223. be waiting on this event list, so the faster vListInsertEnd() function
  49224. can be used in place of vListInsert. */
  49225. vListInsertEnd( pxEventList, &( pxCurrentTCB->xEventListItem ) );
  49226. 80147d6: 4b0a ldr r3, [pc, #40] @ (8014800 <vTaskPlaceOnEventListRestricted+0x54>)
  49227. 80147d8: 681b ldr r3, [r3, #0]
  49228. 80147da: 3318 adds r3, #24
  49229. 80147dc: 4619 mov r1, r3
  49230. 80147de: 68f8 ldr r0, [r7, #12]
  49231. 80147e0: f7fe f993 bl 8012b0a <vListInsertEnd>
  49232. /* If the task should block indefinitely then set the block time to a
  49233. value that will be recognised as an indefinite delay inside the
  49234. prvAddCurrentTaskToDelayedList() function. */
  49235. if( xWaitIndefinitely != pdFALSE )
  49236. 80147e4: 687b ldr r3, [r7, #4]
  49237. 80147e6: 2b00 cmp r3, #0
  49238. 80147e8: d002 beq.n 80147f0 <vTaskPlaceOnEventListRestricted+0x44>
  49239. {
  49240. xTicksToWait = portMAX_DELAY;
  49241. 80147ea: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  49242. 80147ee: 60bb str r3, [r7, #8]
  49243. }
  49244. traceTASK_DELAY_UNTIL( ( xTickCount + xTicksToWait ) );
  49245. prvAddCurrentTaskToDelayedList( xTicksToWait, xWaitIndefinitely );
  49246. 80147f0: 6879 ldr r1, [r7, #4]
  49247. 80147f2: 68b8 ldr r0, [r7, #8]
  49248. 80147f4: f000 fdc0 bl 8015378 <prvAddCurrentTaskToDelayedList>
  49249. }
  49250. 80147f8: bf00 nop
  49251. 80147fa: 3718 adds r7, #24
  49252. 80147fc: 46bd mov sp, r7
  49253. 80147fe: bd80 pop {r7, pc}
  49254. 8014800: 240025a4 .word 0x240025a4
  49255. 08014804 <xTaskRemoveFromEventList>:
  49256. #endif /* configUSE_TIMERS */
  49257. /*-----------------------------------------------------------*/
  49258. BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList )
  49259. {
  49260. 8014804: b580 push {r7, lr}
  49261. 8014806: b086 sub sp, #24
  49262. 8014808: af00 add r7, sp, #0
  49263. 801480a: 6078 str r0, [r7, #4]
  49264. get called - the lock count on the queue will get modified instead. This
  49265. means exclusive access to the event list is guaranteed here.
  49266. This function assumes that a check has already been made to ensure that
  49267. pxEventList is not empty. */
  49268. 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. */
  49269. 801480c: 687b ldr r3, [r7, #4]
  49270. 801480e: 68db ldr r3, [r3, #12]
  49271. 8014810: 68db ldr r3, [r3, #12]
  49272. 8014812: 613b str r3, [r7, #16]
  49273. configASSERT( pxUnblockedTCB );
  49274. 8014814: 693b ldr r3, [r7, #16]
  49275. 8014816: 2b00 cmp r3, #0
  49276. 8014818: d10b bne.n 8014832 <xTaskRemoveFromEventList+0x2e>
  49277. __asm volatile
  49278. 801481a: f04f 0350 mov.w r3, #80 @ 0x50
  49279. 801481e: f383 8811 msr BASEPRI, r3
  49280. 8014822: f3bf 8f6f isb sy
  49281. 8014826: f3bf 8f4f dsb sy
  49282. 801482a: 60fb str r3, [r7, #12]
  49283. }
  49284. 801482c: bf00 nop
  49285. 801482e: bf00 nop
  49286. 8014830: e7fd b.n 801482e <xTaskRemoveFromEventList+0x2a>
  49287. ( void ) uxListRemove( &( pxUnblockedTCB->xEventListItem ) );
  49288. 8014832: 693b ldr r3, [r7, #16]
  49289. 8014834: 3318 adds r3, #24
  49290. 8014836: 4618 mov r0, r3
  49291. 8014838: f7fe f9c4 bl 8012bc4 <uxListRemove>
  49292. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  49293. 801483c: 4b1d ldr r3, [pc, #116] @ (80148b4 <xTaskRemoveFromEventList+0xb0>)
  49294. 801483e: 681b ldr r3, [r3, #0]
  49295. 8014840: 2b00 cmp r3, #0
  49296. 8014842: d11d bne.n 8014880 <xTaskRemoveFromEventList+0x7c>
  49297. {
  49298. ( void ) uxListRemove( &( pxUnblockedTCB->xStateListItem ) );
  49299. 8014844: 693b ldr r3, [r7, #16]
  49300. 8014846: 3304 adds r3, #4
  49301. 8014848: 4618 mov r0, r3
  49302. 801484a: f7fe f9bb bl 8012bc4 <uxListRemove>
  49303. prvAddTaskToReadyList( pxUnblockedTCB );
  49304. 801484e: 693b ldr r3, [r7, #16]
  49305. 8014850: 6ada ldr r2, [r3, #44] @ 0x2c
  49306. 8014852: 4b19 ldr r3, [pc, #100] @ (80148b8 <xTaskRemoveFromEventList+0xb4>)
  49307. 8014854: 681b ldr r3, [r3, #0]
  49308. 8014856: 429a cmp r2, r3
  49309. 8014858: d903 bls.n 8014862 <xTaskRemoveFromEventList+0x5e>
  49310. 801485a: 693b ldr r3, [r7, #16]
  49311. 801485c: 6adb ldr r3, [r3, #44] @ 0x2c
  49312. 801485e: 4a16 ldr r2, [pc, #88] @ (80148b8 <xTaskRemoveFromEventList+0xb4>)
  49313. 8014860: 6013 str r3, [r2, #0]
  49314. 8014862: 693b ldr r3, [r7, #16]
  49315. 8014864: 6ada ldr r2, [r3, #44] @ 0x2c
  49316. 8014866: 4613 mov r3, r2
  49317. 8014868: 009b lsls r3, r3, #2
  49318. 801486a: 4413 add r3, r2
  49319. 801486c: 009b lsls r3, r3, #2
  49320. 801486e: 4a13 ldr r2, [pc, #76] @ (80148bc <xTaskRemoveFromEventList+0xb8>)
  49321. 8014870: 441a add r2, r3
  49322. 8014872: 693b ldr r3, [r7, #16]
  49323. 8014874: 3304 adds r3, #4
  49324. 8014876: 4619 mov r1, r3
  49325. 8014878: 4610 mov r0, r2
  49326. 801487a: f7fe f946 bl 8012b0a <vListInsertEnd>
  49327. 801487e: e005 b.n 801488c <xTaskRemoveFromEventList+0x88>
  49328. }
  49329. else
  49330. {
  49331. /* The delayed and ready lists cannot be accessed, so hold this task
  49332. pending until the scheduler is resumed. */
  49333. vListInsertEnd( &( xPendingReadyList ), &( pxUnblockedTCB->xEventListItem ) );
  49334. 8014880: 693b ldr r3, [r7, #16]
  49335. 8014882: 3318 adds r3, #24
  49336. 8014884: 4619 mov r1, r3
  49337. 8014886: 480e ldr r0, [pc, #56] @ (80148c0 <xTaskRemoveFromEventList+0xbc>)
  49338. 8014888: f7fe f93f bl 8012b0a <vListInsertEnd>
  49339. }
  49340. if( pxUnblockedTCB->uxPriority > pxCurrentTCB->uxPriority )
  49341. 801488c: 693b ldr r3, [r7, #16]
  49342. 801488e: 6ada ldr r2, [r3, #44] @ 0x2c
  49343. 8014890: 4b0c ldr r3, [pc, #48] @ (80148c4 <xTaskRemoveFromEventList+0xc0>)
  49344. 8014892: 681b ldr r3, [r3, #0]
  49345. 8014894: 6adb ldr r3, [r3, #44] @ 0x2c
  49346. 8014896: 429a cmp r2, r3
  49347. 8014898: d905 bls.n 80148a6 <xTaskRemoveFromEventList+0xa2>
  49348. {
  49349. /* Return true if the task removed from the event list has a higher
  49350. priority than the calling task. This allows the calling task to know if
  49351. it should force a context switch now. */
  49352. xReturn = pdTRUE;
  49353. 801489a: 2301 movs r3, #1
  49354. 801489c: 617b str r3, [r7, #20]
  49355. /* Mark that a yield is pending in case the user is not using the
  49356. "xHigherPriorityTaskWoken" parameter to an ISR safe FreeRTOS function. */
  49357. xYieldPending = pdTRUE;
  49358. 801489e: 4b0a ldr r3, [pc, #40] @ (80148c8 <xTaskRemoveFromEventList+0xc4>)
  49359. 80148a0: 2201 movs r2, #1
  49360. 80148a2: 601a str r2, [r3, #0]
  49361. 80148a4: e001 b.n 80148aa <xTaskRemoveFromEventList+0xa6>
  49362. }
  49363. else
  49364. {
  49365. xReturn = pdFALSE;
  49366. 80148a6: 2300 movs r3, #0
  49367. 80148a8: 617b str r3, [r7, #20]
  49368. }
  49369. return xReturn;
  49370. 80148aa: 697b ldr r3, [r7, #20]
  49371. }
  49372. 80148ac: 4618 mov r0, r3
  49373. 80148ae: 3718 adds r7, #24
  49374. 80148b0: 46bd mov sp, r7
  49375. 80148b2: bd80 pop {r7, pc}
  49376. 80148b4: 24002aa0 .word 0x24002aa0
  49377. 80148b8: 24002a80 .word 0x24002a80
  49378. 80148bc: 240025a8 .word 0x240025a8
  49379. 80148c0: 24002a38 .word 0x24002a38
  49380. 80148c4: 240025a4 .word 0x240025a4
  49381. 80148c8: 24002a8c .word 0x24002a8c
  49382. 080148cc <vTaskSetTimeOutState>:
  49383. }
  49384. }
  49385. /*-----------------------------------------------------------*/
  49386. void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut )
  49387. {
  49388. 80148cc: b580 push {r7, lr}
  49389. 80148ce: b084 sub sp, #16
  49390. 80148d0: af00 add r7, sp, #0
  49391. 80148d2: 6078 str r0, [r7, #4]
  49392. configASSERT( pxTimeOut );
  49393. 80148d4: 687b ldr r3, [r7, #4]
  49394. 80148d6: 2b00 cmp r3, #0
  49395. 80148d8: d10b bne.n 80148f2 <vTaskSetTimeOutState+0x26>
  49396. __asm volatile
  49397. 80148da: f04f 0350 mov.w r3, #80 @ 0x50
  49398. 80148de: f383 8811 msr BASEPRI, r3
  49399. 80148e2: f3bf 8f6f isb sy
  49400. 80148e6: f3bf 8f4f dsb sy
  49401. 80148ea: 60fb str r3, [r7, #12]
  49402. }
  49403. 80148ec: bf00 nop
  49404. 80148ee: bf00 nop
  49405. 80148f0: e7fd b.n 80148ee <vTaskSetTimeOutState+0x22>
  49406. taskENTER_CRITICAL();
  49407. 80148f2: f001 fb09 bl 8015f08 <vPortEnterCritical>
  49408. {
  49409. pxTimeOut->xOverflowCount = xNumOfOverflows;
  49410. 80148f6: 4b07 ldr r3, [pc, #28] @ (8014914 <vTaskSetTimeOutState+0x48>)
  49411. 80148f8: 681a ldr r2, [r3, #0]
  49412. 80148fa: 687b ldr r3, [r7, #4]
  49413. 80148fc: 601a str r2, [r3, #0]
  49414. pxTimeOut->xTimeOnEntering = xTickCount;
  49415. 80148fe: 4b06 ldr r3, [pc, #24] @ (8014918 <vTaskSetTimeOutState+0x4c>)
  49416. 8014900: 681a ldr r2, [r3, #0]
  49417. 8014902: 687b ldr r3, [r7, #4]
  49418. 8014904: 605a str r2, [r3, #4]
  49419. }
  49420. taskEXIT_CRITICAL();
  49421. 8014906: f001 fb31 bl 8015f6c <vPortExitCritical>
  49422. }
  49423. 801490a: bf00 nop
  49424. 801490c: 3710 adds r7, #16
  49425. 801490e: 46bd mov sp, r7
  49426. 8014910: bd80 pop {r7, pc}
  49427. 8014912: bf00 nop
  49428. 8014914: 24002a90 .word 0x24002a90
  49429. 8014918: 24002a7c .word 0x24002a7c
  49430. 0801491c <vTaskInternalSetTimeOutState>:
  49431. /*-----------------------------------------------------------*/
  49432. void vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut )
  49433. {
  49434. 801491c: b480 push {r7}
  49435. 801491e: b083 sub sp, #12
  49436. 8014920: af00 add r7, sp, #0
  49437. 8014922: 6078 str r0, [r7, #4]
  49438. /* For internal use only as it does not use a critical section. */
  49439. pxTimeOut->xOverflowCount = xNumOfOverflows;
  49440. 8014924: 4b06 ldr r3, [pc, #24] @ (8014940 <vTaskInternalSetTimeOutState+0x24>)
  49441. 8014926: 681a ldr r2, [r3, #0]
  49442. 8014928: 687b ldr r3, [r7, #4]
  49443. 801492a: 601a str r2, [r3, #0]
  49444. pxTimeOut->xTimeOnEntering = xTickCount;
  49445. 801492c: 4b05 ldr r3, [pc, #20] @ (8014944 <vTaskInternalSetTimeOutState+0x28>)
  49446. 801492e: 681a ldr r2, [r3, #0]
  49447. 8014930: 687b ldr r3, [r7, #4]
  49448. 8014932: 605a str r2, [r3, #4]
  49449. }
  49450. 8014934: bf00 nop
  49451. 8014936: 370c adds r7, #12
  49452. 8014938: 46bd mov sp, r7
  49453. 801493a: f85d 7b04 ldr.w r7, [sp], #4
  49454. 801493e: 4770 bx lr
  49455. 8014940: 24002a90 .word 0x24002a90
  49456. 8014944: 24002a7c .word 0x24002a7c
  49457. 08014948 <xTaskCheckForTimeOut>:
  49458. /*-----------------------------------------------------------*/
  49459. BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait )
  49460. {
  49461. 8014948: b580 push {r7, lr}
  49462. 801494a: b088 sub sp, #32
  49463. 801494c: af00 add r7, sp, #0
  49464. 801494e: 6078 str r0, [r7, #4]
  49465. 8014950: 6039 str r1, [r7, #0]
  49466. BaseType_t xReturn;
  49467. configASSERT( pxTimeOut );
  49468. 8014952: 687b ldr r3, [r7, #4]
  49469. 8014954: 2b00 cmp r3, #0
  49470. 8014956: d10b bne.n 8014970 <xTaskCheckForTimeOut+0x28>
  49471. __asm volatile
  49472. 8014958: f04f 0350 mov.w r3, #80 @ 0x50
  49473. 801495c: f383 8811 msr BASEPRI, r3
  49474. 8014960: f3bf 8f6f isb sy
  49475. 8014964: f3bf 8f4f dsb sy
  49476. 8014968: 613b str r3, [r7, #16]
  49477. }
  49478. 801496a: bf00 nop
  49479. 801496c: bf00 nop
  49480. 801496e: e7fd b.n 801496c <xTaskCheckForTimeOut+0x24>
  49481. configASSERT( pxTicksToWait );
  49482. 8014970: 683b ldr r3, [r7, #0]
  49483. 8014972: 2b00 cmp r3, #0
  49484. 8014974: d10b bne.n 801498e <xTaskCheckForTimeOut+0x46>
  49485. __asm volatile
  49486. 8014976: f04f 0350 mov.w r3, #80 @ 0x50
  49487. 801497a: f383 8811 msr BASEPRI, r3
  49488. 801497e: f3bf 8f6f isb sy
  49489. 8014982: f3bf 8f4f dsb sy
  49490. 8014986: 60fb str r3, [r7, #12]
  49491. }
  49492. 8014988: bf00 nop
  49493. 801498a: bf00 nop
  49494. 801498c: e7fd b.n 801498a <xTaskCheckForTimeOut+0x42>
  49495. taskENTER_CRITICAL();
  49496. 801498e: f001 fabb bl 8015f08 <vPortEnterCritical>
  49497. {
  49498. /* Minor optimisation. The tick count cannot change in this block. */
  49499. const TickType_t xConstTickCount = xTickCount;
  49500. 8014992: 4b1d ldr r3, [pc, #116] @ (8014a08 <xTaskCheckForTimeOut+0xc0>)
  49501. 8014994: 681b ldr r3, [r3, #0]
  49502. 8014996: 61bb str r3, [r7, #24]
  49503. const TickType_t xElapsedTime = xConstTickCount - pxTimeOut->xTimeOnEntering;
  49504. 8014998: 687b ldr r3, [r7, #4]
  49505. 801499a: 685b ldr r3, [r3, #4]
  49506. 801499c: 69ba ldr r2, [r7, #24]
  49507. 801499e: 1ad3 subs r3, r2, r3
  49508. 80149a0: 617b str r3, [r7, #20]
  49509. }
  49510. else
  49511. #endif
  49512. #if ( INCLUDE_vTaskSuspend == 1 )
  49513. if( *pxTicksToWait == portMAX_DELAY )
  49514. 80149a2: 683b ldr r3, [r7, #0]
  49515. 80149a4: 681b ldr r3, [r3, #0]
  49516. 80149a6: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  49517. 80149aa: d102 bne.n 80149b2 <xTaskCheckForTimeOut+0x6a>
  49518. {
  49519. /* If INCLUDE_vTaskSuspend is set to 1 and the block time
  49520. specified is the maximum block time then the task should block
  49521. indefinitely, and therefore never time out. */
  49522. xReturn = pdFALSE;
  49523. 80149ac: 2300 movs r3, #0
  49524. 80149ae: 61fb str r3, [r7, #28]
  49525. 80149b0: e023 b.n 80149fa <xTaskCheckForTimeOut+0xb2>
  49526. }
  49527. else
  49528. #endif
  49529. if( ( xNumOfOverflows != pxTimeOut->xOverflowCount ) && ( xConstTickCount >= pxTimeOut->xTimeOnEntering ) ) /*lint !e525 Indentation preferred as is to make code within pre-processor directives clearer. */
  49530. 80149b2: 687b ldr r3, [r7, #4]
  49531. 80149b4: 681a ldr r2, [r3, #0]
  49532. 80149b6: 4b15 ldr r3, [pc, #84] @ (8014a0c <xTaskCheckForTimeOut+0xc4>)
  49533. 80149b8: 681b ldr r3, [r3, #0]
  49534. 80149ba: 429a cmp r2, r3
  49535. 80149bc: d007 beq.n 80149ce <xTaskCheckForTimeOut+0x86>
  49536. 80149be: 687b ldr r3, [r7, #4]
  49537. 80149c0: 685b ldr r3, [r3, #4]
  49538. 80149c2: 69ba ldr r2, [r7, #24]
  49539. 80149c4: 429a cmp r2, r3
  49540. 80149c6: d302 bcc.n 80149ce <xTaskCheckForTimeOut+0x86>
  49541. /* The tick count is greater than the time at which
  49542. vTaskSetTimeout() was called, but has also overflowed since
  49543. vTaskSetTimeOut() was called. It must have wrapped all the way
  49544. around and gone past again. This passed since vTaskSetTimeout()
  49545. was called. */
  49546. xReturn = pdTRUE;
  49547. 80149c8: 2301 movs r3, #1
  49548. 80149ca: 61fb str r3, [r7, #28]
  49549. 80149cc: e015 b.n 80149fa <xTaskCheckForTimeOut+0xb2>
  49550. }
  49551. else if( xElapsedTime < *pxTicksToWait ) /*lint !e961 Explicit casting is only redundant with some compilers, whereas others require it to prevent integer conversion errors. */
  49552. 80149ce: 683b ldr r3, [r7, #0]
  49553. 80149d0: 681b ldr r3, [r3, #0]
  49554. 80149d2: 697a ldr r2, [r7, #20]
  49555. 80149d4: 429a cmp r2, r3
  49556. 80149d6: d20b bcs.n 80149f0 <xTaskCheckForTimeOut+0xa8>
  49557. {
  49558. /* Not a genuine timeout. Adjust parameters for time remaining. */
  49559. *pxTicksToWait -= xElapsedTime;
  49560. 80149d8: 683b ldr r3, [r7, #0]
  49561. 80149da: 681a ldr r2, [r3, #0]
  49562. 80149dc: 697b ldr r3, [r7, #20]
  49563. 80149de: 1ad2 subs r2, r2, r3
  49564. 80149e0: 683b ldr r3, [r7, #0]
  49565. 80149e2: 601a str r2, [r3, #0]
  49566. vTaskInternalSetTimeOutState( pxTimeOut );
  49567. 80149e4: 6878 ldr r0, [r7, #4]
  49568. 80149e6: f7ff ff99 bl 801491c <vTaskInternalSetTimeOutState>
  49569. xReturn = pdFALSE;
  49570. 80149ea: 2300 movs r3, #0
  49571. 80149ec: 61fb str r3, [r7, #28]
  49572. 80149ee: e004 b.n 80149fa <xTaskCheckForTimeOut+0xb2>
  49573. }
  49574. else
  49575. {
  49576. *pxTicksToWait = 0;
  49577. 80149f0: 683b ldr r3, [r7, #0]
  49578. 80149f2: 2200 movs r2, #0
  49579. 80149f4: 601a str r2, [r3, #0]
  49580. xReturn = pdTRUE;
  49581. 80149f6: 2301 movs r3, #1
  49582. 80149f8: 61fb str r3, [r7, #28]
  49583. }
  49584. }
  49585. taskEXIT_CRITICAL();
  49586. 80149fa: f001 fab7 bl 8015f6c <vPortExitCritical>
  49587. return xReturn;
  49588. 80149fe: 69fb ldr r3, [r7, #28]
  49589. }
  49590. 8014a00: 4618 mov r0, r3
  49591. 8014a02: 3720 adds r7, #32
  49592. 8014a04: 46bd mov sp, r7
  49593. 8014a06: bd80 pop {r7, pc}
  49594. 8014a08: 24002a7c .word 0x24002a7c
  49595. 8014a0c: 24002a90 .word 0x24002a90
  49596. 08014a10 <vTaskMissedYield>:
  49597. /*-----------------------------------------------------------*/
  49598. void vTaskMissedYield( void )
  49599. {
  49600. 8014a10: b480 push {r7}
  49601. 8014a12: af00 add r7, sp, #0
  49602. xYieldPending = pdTRUE;
  49603. 8014a14: 4b03 ldr r3, [pc, #12] @ (8014a24 <vTaskMissedYield+0x14>)
  49604. 8014a16: 2201 movs r2, #1
  49605. 8014a18: 601a str r2, [r3, #0]
  49606. }
  49607. 8014a1a: bf00 nop
  49608. 8014a1c: 46bd mov sp, r7
  49609. 8014a1e: f85d 7b04 ldr.w r7, [sp], #4
  49610. 8014a22: 4770 bx lr
  49611. 8014a24: 24002a8c .word 0x24002a8c
  49612. 08014a28 <prvIdleTask>:
  49613. *
  49614. * void prvIdleTask( void *pvParameters );
  49615. *
  49616. */
  49617. static portTASK_FUNCTION( prvIdleTask, pvParameters )
  49618. {
  49619. 8014a28: b580 push {r7, lr}
  49620. 8014a2a: b082 sub sp, #8
  49621. 8014a2c: af00 add r7, sp, #0
  49622. 8014a2e: 6078 str r0, [r7, #4]
  49623. for( ;; )
  49624. {
  49625. /* See if any tasks have deleted themselves - if so then the idle task
  49626. is responsible for freeing the deleted task's TCB and stack. */
  49627. prvCheckTasksWaitingTermination();
  49628. 8014a30: f000 f852 bl 8014ad8 <prvCheckTasksWaitingTermination>
  49629. A critical region is not required here as we are just reading from
  49630. the list, and an occasional incorrect value will not matter. If
  49631. the ready list at the idle priority contains more than one task
  49632. then a task other than the idle task is ready to execute. */
  49633. if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 )
  49634. 8014a34: 4b06 ldr r3, [pc, #24] @ (8014a50 <prvIdleTask+0x28>)
  49635. 8014a36: 681b ldr r3, [r3, #0]
  49636. 8014a38: 2b01 cmp r3, #1
  49637. 8014a3a: d9f9 bls.n 8014a30 <prvIdleTask+0x8>
  49638. {
  49639. taskYIELD();
  49640. 8014a3c: 4b05 ldr r3, [pc, #20] @ (8014a54 <prvIdleTask+0x2c>)
  49641. 8014a3e: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  49642. 8014a42: 601a str r2, [r3, #0]
  49643. 8014a44: f3bf 8f4f dsb sy
  49644. 8014a48: f3bf 8f6f isb sy
  49645. prvCheckTasksWaitingTermination();
  49646. 8014a4c: e7f0 b.n 8014a30 <prvIdleTask+0x8>
  49647. 8014a4e: bf00 nop
  49648. 8014a50: 240025a8 .word 0x240025a8
  49649. 8014a54: e000ed04 .word 0xe000ed04
  49650. 08014a58 <prvInitialiseTaskLists>:
  49651. #endif /* portUSING_MPU_WRAPPERS */
  49652. /*-----------------------------------------------------------*/
  49653. static void prvInitialiseTaskLists( void )
  49654. {
  49655. 8014a58: b580 push {r7, lr}
  49656. 8014a5a: b082 sub sp, #8
  49657. 8014a5c: af00 add r7, sp, #0
  49658. UBaseType_t uxPriority;
  49659. for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
  49660. 8014a5e: 2300 movs r3, #0
  49661. 8014a60: 607b str r3, [r7, #4]
  49662. 8014a62: e00c b.n 8014a7e <prvInitialiseTaskLists+0x26>
  49663. {
  49664. vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) );
  49665. 8014a64: 687a ldr r2, [r7, #4]
  49666. 8014a66: 4613 mov r3, r2
  49667. 8014a68: 009b lsls r3, r3, #2
  49668. 8014a6a: 4413 add r3, r2
  49669. 8014a6c: 009b lsls r3, r3, #2
  49670. 8014a6e: 4a12 ldr r2, [pc, #72] @ (8014ab8 <prvInitialiseTaskLists+0x60>)
  49671. 8014a70: 4413 add r3, r2
  49672. 8014a72: 4618 mov r0, r3
  49673. 8014a74: f7fe f81c bl 8012ab0 <vListInitialise>
  49674. for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
  49675. 8014a78: 687b ldr r3, [r7, #4]
  49676. 8014a7a: 3301 adds r3, #1
  49677. 8014a7c: 607b str r3, [r7, #4]
  49678. 8014a7e: 687b ldr r3, [r7, #4]
  49679. 8014a80: 2b37 cmp r3, #55 @ 0x37
  49680. 8014a82: d9ef bls.n 8014a64 <prvInitialiseTaskLists+0xc>
  49681. }
  49682. vListInitialise( &xDelayedTaskList1 );
  49683. 8014a84: 480d ldr r0, [pc, #52] @ (8014abc <prvInitialiseTaskLists+0x64>)
  49684. 8014a86: f7fe f813 bl 8012ab0 <vListInitialise>
  49685. vListInitialise( &xDelayedTaskList2 );
  49686. 8014a8a: 480d ldr r0, [pc, #52] @ (8014ac0 <prvInitialiseTaskLists+0x68>)
  49687. 8014a8c: f7fe f810 bl 8012ab0 <vListInitialise>
  49688. vListInitialise( &xPendingReadyList );
  49689. 8014a90: 480c ldr r0, [pc, #48] @ (8014ac4 <prvInitialiseTaskLists+0x6c>)
  49690. 8014a92: f7fe f80d bl 8012ab0 <vListInitialise>
  49691. #if ( INCLUDE_vTaskDelete == 1 )
  49692. {
  49693. vListInitialise( &xTasksWaitingTermination );
  49694. 8014a96: 480c ldr r0, [pc, #48] @ (8014ac8 <prvInitialiseTaskLists+0x70>)
  49695. 8014a98: f7fe f80a bl 8012ab0 <vListInitialise>
  49696. }
  49697. #endif /* INCLUDE_vTaskDelete */
  49698. #if ( INCLUDE_vTaskSuspend == 1 )
  49699. {
  49700. vListInitialise( &xSuspendedTaskList );
  49701. 8014a9c: 480b ldr r0, [pc, #44] @ (8014acc <prvInitialiseTaskLists+0x74>)
  49702. 8014a9e: f7fe f807 bl 8012ab0 <vListInitialise>
  49703. }
  49704. #endif /* INCLUDE_vTaskSuspend */
  49705. /* Start with pxDelayedTaskList using list1 and the pxOverflowDelayedTaskList
  49706. using list2. */
  49707. pxDelayedTaskList = &xDelayedTaskList1;
  49708. 8014aa2: 4b0b ldr r3, [pc, #44] @ (8014ad0 <prvInitialiseTaskLists+0x78>)
  49709. 8014aa4: 4a05 ldr r2, [pc, #20] @ (8014abc <prvInitialiseTaskLists+0x64>)
  49710. 8014aa6: 601a str r2, [r3, #0]
  49711. pxOverflowDelayedTaskList = &xDelayedTaskList2;
  49712. 8014aa8: 4b0a ldr r3, [pc, #40] @ (8014ad4 <prvInitialiseTaskLists+0x7c>)
  49713. 8014aaa: 4a05 ldr r2, [pc, #20] @ (8014ac0 <prvInitialiseTaskLists+0x68>)
  49714. 8014aac: 601a str r2, [r3, #0]
  49715. }
  49716. 8014aae: bf00 nop
  49717. 8014ab0: 3708 adds r7, #8
  49718. 8014ab2: 46bd mov sp, r7
  49719. 8014ab4: bd80 pop {r7, pc}
  49720. 8014ab6: bf00 nop
  49721. 8014ab8: 240025a8 .word 0x240025a8
  49722. 8014abc: 24002a08 .word 0x24002a08
  49723. 8014ac0: 24002a1c .word 0x24002a1c
  49724. 8014ac4: 24002a38 .word 0x24002a38
  49725. 8014ac8: 24002a4c .word 0x24002a4c
  49726. 8014acc: 24002a64 .word 0x24002a64
  49727. 8014ad0: 24002a30 .word 0x24002a30
  49728. 8014ad4: 24002a34 .word 0x24002a34
  49729. 08014ad8 <prvCheckTasksWaitingTermination>:
  49730. /*-----------------------------------------------------------*/
  49731. static void prvCheckTasksWaitingTermination( void )
  49732. {
  49733. 8014ad8: b580 push {r7, lr}
  49734. 8014ada: b082 sub sp, #8
  49735. 8014adc: af00 add r7, sp, #0
  49736. {
  49737. TCB_t *pxTCB;
  49738. /* uxDeletedTasksWaitingCleanUp is used to prevent taskENTER_CRITICAL()
  49739. being called too often in the idle task. */
  49740. while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
  49741. 8014ade: e019 b.n 8014b14 <prvCheckTasksWaitingTermination+0x3c>
  49742. {
  49743. taskENTER_CRITICAL();
  49744. 8014ae0: f001 fa12 bl 8015f08 <vPortEnterCritical>
  49745. {
  49746. 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. */
  49747. 8014ae4: 4b10 ldr r3, [pc, #64] @ (8014b28 <prvCheckTasksWaitingTermination+0x50>)
  49748. 8014ae6: 68db ldr r3, [r3, #12]
  49749. 8014ae8: 68db ldr r3, [r3, #12]
  49750. 8014aea: 607b str r3, [r7, #4]
  49751. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  49752. 8014aec: 687b ldr r3, [r7, #4]
  49753. 8014aee: 3304 adds r3, #4
  49754. 8014af0: 4618 mov r0, r3
  49755. 8014af2: f7fe f867 bl 8012bc4 <uxListRemove>
  49756. --uxCurrentNumberOfTasks;
  49757. 8014af6: 4b0d ldr r3, [pc, #52] @ (8014b2c <prvCheckTasksWaitingTermination+0x54>)
  49758. 8014af8: 681b ldr r3, [r3, #0]
  49759. 8014afa: 3b01 subs r3, #1
  49760. 8014afc: 4a0b ldr r2, [pc, #44] @ (8014b2c <prvCheckTasksWaitingTermination+0x54>)
  49761. 8014afe: 6013 str r3, [r2, #0]
  49762. --uxDeletedTasksWaitingCleanUp;
  49763. 8014b00: 4b0b ldr r3, [pc, #44] @ (8014b30 <prvCheckTasksWaitingTermination+0x58>)
  49764. 8014b02: 681b ldr r3, [r3, #0]
  49765. 8014b04: 3b01 subs r3, #1
  49766. 8014b06: 4a0a ldr r2, [pc, #40] @ (8014b30 <prvCheckTasksWaitingTermination+0x58>)
  49767. 8014b08: 6013 str r3, [r2, #0]
  49768. }
  49769. taskEXIT_CRITICAL();
  49770. 8014b0a: f001 fa2f bl 8015f6c <vPortExitCritical>
  49771. prvDeleteTCB( pxTCB );
  49772. 8014b0e: 6878 ldr r0, [r7, #4]
  49773. 8014b10: f000 f810 bl 8014b34 <prvDeleteTCB>
  49774. while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
  49775. 8014b14: 4b06 ldr r3, [pc, #24] @ (8014b30 <prvCheckTasksWaitingTermination+0x58>)
  49776. 8014b16: 681b ldr r3, [r3, #0]
  49777. 8014b18: 2b00 cmp r3, #0
  49778. 8014b1a: d1e1 bne.n 8014ae0 <prvCheckTasksWaitingTermination+0x8>
  49779. }
  49780. }
  49781. #endif /* INCLUDE_vTaskDelete */
  49782. }
  49783. 8014b1c: bf00 nop
  49784. 8014b1e: bf00 nop
  49785. 8014b20: 3708 adds r7, #8
  49786. 8014b22: 46bd mov sp, r7
  49787. 8014b24: bd80 pop {r7, pc}
  49788. 8014b26: bf00 nop
  49789. 8014b28: 24002a4c .word 0x24002a4c
  49790. 8014b2c: 24002a78 .word 0x24002a78
  49791. 8014b30: 24002a60 .word 0x24002a60
  49792. 08014b34 <prvDeleteTCB>:
  49793. /*-----------------------------------------------------------*/
  49794. #if ( INCLUDE_vTaskDelete == 1 )
  49795. static void prvDeleteTCB( TCB_t *pxTCB )
  49796. {
  49797. 8014b34: b580 push {r7, lr}
  49798. 8014b36: b084 sub sp, #16
  49799. 8014b38: af00 add r7, sp, #0
  49800. 8014b3a: 6078 str r0, [r7, #4]
  49801. to the task to free any memory allocated at the application level.
  49802. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  49803. for additional information. */
  49804. #if ( configUSE_NEWLIB_REENTRANT == 1 )
  49805. {
  49806. _reclaim_reent( &( pxTCB->xNewLib_reent ) );
  49807. 8014b3c: 687b ldr r3, [r7, #4]
  49808. 8014b3e: 3354 adds r3, #84 @ 0x54
  49809. 8014b40: 4618 mov r0, r3
  49810. 8014b42: f001 fe21 bl 8016788 <_reclaim_reent>
  49811. #elif( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 !e9029 Macro has been consolidated for readability reasons. */
  49812. {
  49813. /* The task could have been allocated statically or dynamically, so
  49814. check what was statically allocated before trying to free the
  49815. memory. */
  49816. if( pxTCB->ucStaticallyAllocated == tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB )
  49817. 8014b46: 687b ldr r3, [r7, #4]
  49818. 8014b48: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  49819. 8014b4c: 2b00 cmp r3, #0
  49820. 8014b4e: d108 bne.n 8014b62 <prvDeleteTCB+0x2e>
  49821. {
  49822. /* Both the stack and TCB were allocated dynamically, so both
  49823. must be freed. */
  49824. vPortFree( pxTCB->pxStack );
  49825. 8014b50: 687b ldr r3, [r7, #4]
  49826. 8014b52: 6b1b ldr r3, [r3, #48] @ 0x30
  49827. 8014b54: 4618 mov r0, r3
  49828. 8014b56: f001 fbc7 bl 80162e8 <vPortFree>
  49829. vPortFree( pxTCB );
  49830. 8014b5a: 6878 ldr r0, [r7, #4]
  49831. 8014b5c: f001 fbc4 bl 80162e8 <vPortFree>
  49832. configASSERT( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB );
  49833. mtCOVERAGE_TEST_MARKER();
  49834. }
  49835. }
  49836. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  49837. }
  49838. 8014b60: e019 b.n 8014b96 <prvDeleteTCB+0x62>
  49839. else if( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_ONLY )
  49840. 8014b62: 687b ldr r3, [r7, #4]
  49841. 8014b64: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  49842. 8014b68: 2b01 cmp r3, #1
  49843. 8014b6a: d103 bne.n 8014b74 <prvDeleteTCB+0x40>
  49844. vPortFree( pxTCB );
  49845. 8014b6c: 6878 ldr r0, [r7, #4]
  49846. 8014b6e: f001 fbbb bl 80162e8 <vPortFree>
  49847. }
  49848. 8014b72: e010 b.n 8014b96 <prvDeleteTCB+0x62>
  49849. configASSERT( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB );
  49850. 8014b74: 687b ldr r3, [r7, #4]
  49851. 8014b76: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  49852. 8014b7a: 2b02 cmp r3, #2
  49853. 8014b7c: d00b beq.n 8014b96 <prvDeleteTCB+0x62>
  49854. __asm volatile
  49855. 8014b7e: f04f 0350 mov.w r3, #80 @ 0x50
  49856. 8014b82: f383 8811 msr BASEPRI, r3
  49857. 8014b86: f3bf 8f6f isb sy
  49858. 8014b8a: f3bf 8f4f dsb sy
  49859. 8014b8e: 60fb str r3, [r7, #12]
  49860. }
  49861. 8014b90: bf00 nop
  49862. 8014b92: bf00 nop
  49863. 8014b94: e7fd b.n 8014b92 <prvDeleteTCB+0x5e>
  49864. }
  49865. 8014b96: bf00 nop
  49866. 8014b98: 3710 adds r7, #16
  49867. 8014b9a: 46bd mov sp, r7
  49868. 8014b9c: bd80 pop {r7, pc}
  49869. ...
  49870. 08014ba0 <prvResetNextTaskUnblockTime>:
  49871. #endif /* INCLUDE_vTaskDelete */
  49872. /*-----------------------------------------------------------*/
  49873. static void prvResetNextTaskUnblockTime( void )
  49874. {
  49875. 8014ba0: b480 push {r7}
  49876. 8014ba2: b083 sub sp, #12
  49877. 8014ba4: af00 add r7, sp, #0
  49878. TCB_t *pxTCB;
  49879. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  49880. 8014ba6: 4b0c ldr r3, [pc, #48] @ (8014bd8 <prvResetNextTaskUnblockTime+0x38>)
  49881. 8014ba8: 681b ldr r3, [r3, #0]
  49882. 8014baa: 681b ldr r3, [r3, #0]
  49883. 8014bac: 2b00 cmp r3, #0
  49884. 8014bae: d104 bne.n 8014bba <prvResetNextTaskUnblockTime+0x1a>
  49885. {
  49886. /* The new current delayed list is empty. Set xNextTaskUnblockTime to
  49887. the maximum possible value so it is extremely unlikely that the
  49888. if( xTickCount >= xNextTaskUnblockTime ) test will pass until
  49889. there is an item in the delayed list. */
  49890. xNextTaskUnblockTime = portMAX_DELAY;
  49891. 8014bb0: 4b0a ldr r3, [pc, #40] @ (8014bdc <prvResetNextTaskUnblockTime+0x3c>)
  49892. 8014bb2: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  49893. 8014bb6: 601a str r2, [r3, #0]
  49894. which the task at the head of the delayed list should be removed
  49895. from the Blocked state. */
  49896. ( 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. */
  49897. xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xStateListItem ) );
  49898. }
  49899. }
  49900. 8014bb8: e008 b.n 8014bcc <prvResetNextTaskUnblockTime+0x2c>
  49901. ( 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. */
  49902. 8014bba: 4b07 ldr r3, [pc, #28] @ (8014bd8 <prvResetNextTaskUnblockTime+0x38>)
  49903. 8014bbc: 681b ldr r3, [r3, #0]
  49904. 8014bbe: 68db ldr r3, [r3, #12]
  49905. 8014bc0: 68db ldr r3, [r3, #12]
  49906. 8014bc2: 607b str r3, [r7, #4]
  49907. xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xStateListItem ) );
  49908. 8014bc4: 687b ldr r3, [r7, #4]
  49909. 8014bc6: 685b ldr r3, [r3, #4]
  49910. 8014bc8: 4a04 ldr r2, [pc, #16] @ (8014bdc <prvResetNextTaskUnblockTime+0x3c>)
  49911. 8014bca: 6013 str r3, [r2, #0]
  49912. }
  49913. 8014bcc: bf00 nop
  49914. 8014bce: 370c adds r7, #12
  49915. 8014bd0: 46bd mov sp, r7
  49916. 8014bd2: f85d 7b04 ldr.w r7, [sp], #4
  49917. 8014bd6: 4770 bx lr
  49918. 8014bd8: 24002a30 .word 0x24002a30
  49919. 8014bdc: 24002a98 .word 0x24002a98
  49920. 08014be0 <xTaskGetCurrentTaskHandle>:
  49921. /*-----------------------------------------------------------*/
  49922. #if ( ( INCLUDE_xTaskGetCurrentTaskHandle == 1 ) || ( configUSE_MUTEXES == 1 ) )
  49923. TaskHandle_t xTaskGetCurrentTaskHandle( void )
  49924. {
  49925. 8014be0: b480 push {r7}
  49926. 8014be2: b083 sub sp, #12
  49927. 8014be4: af00 add r7, sp, #0
  49928. TaskHandle_t xReturn;
  49929. /* A critical section is not required as this is not called from
  49930. an interrupt and the current TCB will always be the same for any
  49931. individual execution thread. */
  49932. xReturn = pxCurrentTCB;
  49933. 8014be6: 4b05 ldr r3, [pc, #20] @ (8014bfc <xTaskGetCurrentTaskHandle+0x1c>)
  49934. 8014be8: 681b ldr r3, [r3, #0]
  49935. 8014bea: 607b str r3, [r7, #4]
  49936. return xReturn;
  49937. 8014bec: 687b ldr r3, [r7, #4]
  49938. }
  49939. 8014bee: 4618 mov r0, r3
  49940. 8014bf0: 370c adds r7, #12
  49941. 8014bf2: 46bd mov sp, r7
  49942. 8014bf4: f85d 7b04 ldr.w r7, [sp], #4
  49943. 8014bf8: 4770 bx lr
  49944. 8014bfa: bf00 nop
  49945. 8014bfc: 240025a4 .word 0x240025a4
  49946. 08014c00 <xTaskGetSchedulerState>:
  49947. /*-----------------------------------------------------------*/
  49948. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  49949. BaseType_t xTaskGetSchedulerState( void )
  49950. {
  49951. 8014c00: b480 push {r7}
  49952. 8014c02: b083 sub sp, #12
  49953. 8014c04: af00 add r7, sp, #0
  49954. BaseType_t xReturn;
  49955. if( xSchedulerRunning == pdFALSE )
  49956. 8014c06: 4b0b ldr r3, [pc, #44] @ (8014c34 <xTaskGetSchedulerState+0x34>)
  49957. 8014c08: 681b ldr r3, [r3, #0]
  49958. 8014c0a: 2b00 cmp r3, #0
  49959. 8014c0c: d102 bne.n 8014c14 <xTaskGetSchedulerState+0x14>
  49960. {
  49961. xReturn = taskSCHEDULER_NOT_STARTED;
  49962. 8014c0e: 2301 movs r3, #1
  49963. 8014c10: 607b str r3, [r7, #4]
  49964. 8014c12: e008 b.n 8014c26 <xTaskGetSchedulerState+0x26>
  49965. }
  49966. else
  49967. {
  49968. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  49969. 8014c14: 4b08 ldr r3, [pc, #32] @ (8014c38 <xTaskGetSchedulerState+0x38>)
  49970. 8014c16: 681b ldr r3, [r3, #0]
  49971. 8014c18: 2b00 cmp r3, #0
  49972. 8014c1a: d102 bne.n 8014c22 <xTaskGetSchedulerState+0x22>
  49973. {
  49974. xReturn = taskSCHEDULER_RUNNING;
  49975. 8014c1c: 2302 movs r3, #2
  49976. 8014c1e: 607b str r3, [r7, #4]
  49977. 8014c20: e001 b.n 8014c26 <xTaskGetSchedulerState+0x26>
  49978. }
  49979. else
  49980. {
  49981. xReturn = taskSCHEDULER_SUSPENDED;
  49982. 8014c22: 2300 movs r3, #0
  49983. 8014c24: 607b str r3, [r7, #4]
  49984. }
  49985. }
  49986. return xReturn;
  49987. 8014c26: 687b ldr r3, [r7, #4]
  49988. }
  49989. 8014c28: 4618 mov r0, r3
  49990. 8014c2a: 370c adds r7, #12
  49991. 8014c2c: 46bd mov sp, r7
  49992. 8014c2e: f85d 7b04 ldr.w r7, [sp], #4
  49993. 8014c32: 4770 bx lr
  49994. 8014c34: 24002a84 .word 0x24002a84
  49995. 8014c38: 24002aa0 .word 0x24002aa0
  49996. 08014c3c <xTaskPriorityInherit>:
  49997. /*-----------------------------------------------------------*/
  49998. #if ( configUSE_MUTEXES == 1 )
  49999. BaseType_t xTaskPriorityInherit( TaskHandle_t const pxMutexHolder )
  50000. {
  50001. 8014c3c: b580 push {r7, lr}
  50002. 8014c3e: b084 sub sp, #16
  50003. 8014c40: af00 add r7, sp, #0
  50004. 8014c42: 6078 str r0, [r7, #4]
  50005. TCB_t * const pxMutexHolderTCB = pxMutexHolder;
  50006. 8014c44: 687b ldr r3, [r7, #4]
  50007. 8014c46: 60bb str r3, [r7, #8]
  50008. BaseType_t xReturn = pdFALSE;
  50009. 8014c48: 2300 movs r3, #0
  50010. 8014c4a: 60fb str r3, [r7, #12]
  50011. /* If the mutex was given back by an interrupt while the queue was
  50012. locked then the mutex holder might now be NULL. _RB_ Is this still
  50013. needed as interrupts can no longer use mutexes? */
  50014. if( pxMutexHolder != NULL )
  50015. 8014c4c: 687b ldr r3, [r7, #4]
  50016. 8014c4e: 2b00 cmp r3, #0
  50017. 8014c50: d051 beq.n 8014cf6 <xTaskPriorityInherit+0xba>
  50018. {
  50019. /* If the holder of the mutex has a priority below the priority of
  50020. the task attempting to obtain the mutex then it will temporarily
  50021. inherit the priority of the task attempting to obtain the mutex. */
  50022. if( pxMutexHolderTCB->uxPriority < pxCurrentTCB->uxPriority )
  50023. 8014c52: 68bb ldr r3, [r7, #8]
  50024. 8014c54: 6ada ldr r2, [r3, #44] @ 0x2c
  50025. 8014c56: 4b2a ldr r3, [pc, #168] @ (8014d00 <xTaskPriorityInherit+0xc4>)
  50026. 8014c58: 681b ldr r3, [r3, #0]
  50027. 8014c5a: 6adb ldr r3, [r3, #44] @ 0x2c
  50028. 8014c5c: 429a cmp r2, r3
  50029. 8014c5e: d241 bcs.n 8014ce4 <xTaskPriorityInherit+0xa8>
  50030. {
  50031. /* Adjust the mutex holder state to account for its new
  50032. priority. Only reset the event list item value if the value is
  50033. not being used for anything else. */
  50034. if( ( listGET_LIST_ITEM_VALUE( &( pxMutexHolderTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL )
  50035. 8014c60: 68bb ldr r3, [r7, #8]
  50036. 8014c62: 699b ldr r3, [r3, #24]
  50037. 8014c64: 2b00 cmp r3, #0
  50038. 8014c66: db06 blt.n 8014c76 <xTaskPriorityInherit+0x3a>
  50039. {
  50040. 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. */
  50041. 8014c68: 4b25 ldr r3, [pc, #148] @ (8014d00 <xTaskPriorityInherit+0xc4>)
  50042. 8014c6a: 681b ldr r3, [r3, #0]
  50043. 8014c6c: 6adb ldr r3, [r3, #44] @ 0x2c
  50044. 8014c6e: f1c3 0238 rsb r2, r3, #56 @ 0x38
  50045. 8014c72: 68bb ldr r3, [r7, #8]
  50046. 8014c74: 619a str r2, [r3, #24]
  50047. mtCOVERAGE_TEST_MARKER();
  50048. }
  50049. /* If the task being modified is in the ready state it will need
  50050. to be moved into a new list. */
  50051. if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxMutexHolderTCB->uxPriority ] ), &( pxMutexHolderTCB->xStateListItem ) ) != pdFALSE )
  50052. 8014c76: 68bb ldr r3, [r7, #8]
  50053. 8014c78: 6959 ldr r1, [r3, #20]
  50054. 8014c7a: 68bb ldr r3, [r7, #8]
  50055. 8014c7c: 6ada ldr r2, [r3, #44] @ 0x2c
  50056. 8014c7e: 4613 mov r3, r2
  50057. 8014c80: 009b lsls r3, r3, #2
  50058. 8014c82: 4413 add r3, r2
  50059. 8014c84: 009b lsls r3, r3, #2
  50060. 8014c86: 4a1f ldr r2, [pc, #124] @ (8014d04 <xTaskPriorityInherit+0xc8>)
  50061. 8014c88: 4413 add r3, r2
  50062. 8014c8a: 4299 cmp r1, r3
  50063. 8014c8c: d122 bne.n 8014cd4 <xTaskPriorityInherit+0x98>
  50064. {
  50065. if( uxListRemove( &( pxMutexHolderTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  50066. 8014c8e: 68bb ldr r3, [r7, #8]
  50067. 8014c90: 3304 adds r3, #4
  50068. 8014c92: 4618 mov r0, r3
  50069. 8014c94: f7fd ff96 bl 8012bc4 <uxListRemove>
  50070. {
  50071. mtCOVERAGE_TEST_MARKER();
  50072. }
  50073. /* Inherit the priority before being moved into the new list. */
  50074. pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority;
  50075. 8014c98: 4b19 ldr r3, [pc, #100] @ (8014d00 <xTaskPriorityInherit+0xc4>)
  50076. 8014c9a: 681b ldr r3, [r3, #0]
  50077. 8014c9c: 6ada ldr r2, [r3, #44] @ 0x2c
  50078. 8014c9e: 68bb ldr r3, [r7, #8]
  50079. 8014ca0: 62da str r2, [r3, #44] @ 0x2c
  50080. prvAddTaskToReadyList( pxMutexHolderTCB );
  50081. 8014ca2: 68bb ldr r3, [r7, #8]
  50082. 8014ca4: 6ada ldr r2, [r3, #44] @ 0x2c
  50083. 8014ca6: 4b18 ldr r3, [pc, #96] @ (8014d08 <xTaskPriorityInherit+0xcc>)
  50084. 8014ca8: 681b ldr r3, [r3, #0]
  50085. 8014caa: 429a cmp r2, r3
  50086. 8014cac: d903 bls.n 8014cb6 <xTaskPriorityInherit+0x7a>
  50087. 8014cae: 68bb ldr r3, [r7, #8]
  50088. 8014cb0: 6adb ldr r3, [r3, #44] @ 0x2c
  50089. 8014cb2: 4a15 ldr r2, [pc, #84] @ (8014d08 <xTaskPriorityInherit+0xcc>)
  50090. 8014cb4: 6013 str r3, [r2, #0]
  50091. 8014cb6: 68bb ldr r3, [r7, #8]
  50092. 8014cb8: 6ada ldr r2, [r3, #44] @ 0x2c
  50093. 8014cba: 4613 mov r3, r2
  50094. 8014cbc: 009b lsls r3, r3, #2
  50095. 8014cbe: 4413 add r3, r2
  50096. 8014cc0: 009b lsls r3, r3, #2
  50097. 8014cc2: 4a10 ldr r2, [pc, #64] @ (8014d04 <xTaskPriorityInherit+0xc8>)
  50098. 8014cc4: 441a add r2, r3
  50099. 8014cc6: 68bb ldr r3, [r7, #8]
  50100. 8014cc8: 3304 adds r3, #4
  50101. 8014cca: 4619 mov r1, r3
  50102. 8014ccc: 4610 mov r0, r2
  50103. 8014cce: f7fd ff1c bl 8012b0a <vListInsertEnd>
  50104. 8014cd2: e004 b.n 8014cde <xTaskPriorityInherit+0xa2>
  50105. }
  50106. else
  50107. {
  50108. /* Just inherit the priority. */
  50109. pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority;
  50110. 8014cd4: 4b0a ldr r3, [pc, #40] @ (8014d00 <xTaskPriorityInherit+0xc4>)
  50111. 8014cd6: 681b ldr r3, [r3, #0]
  50112. 8014cd8: 6ada ldr r2, [r3, #44] @ 0x2c
  50113. 8014cda: 68bb ldr r3, [r7, #8]
  50114. 8014cdc: 62da str r2, [r3, #44] @ 0x2c
  50115. }
  50116. traceTASK_PRIORITY_INHERIT( pxMutexHolderTCB, pxCurrentTCB->uxPriority );
  50117. /* Inheritance occurred. */
  50118. xReturn = pdTRUE;
  50119. 8014cde: 2301 movs r3, #1
  50120. 8014ce0: 60fb str r3, [r7, #12]
  50121. 8014ce2: e008 b.n 8014cf6 <xTaskPriorityInherit+0xba>
  50122. }
  50123. else
  50124. {
  50125. if( pxMutexHolderTCB->uxBasePriority < pxCurrentTCB->uxPriority )
  50126. 8014ce4: 68bb ldr r3, [r7, #8]
  50127. 8014ce6: 6cda ldr r2, [r3, #76] @ 0x4c
  50128. 8014ce8: 4b05 ldr r3, [pc, #20] @ (8014d00 <xTaskPriorityInherit+0xc4>)
  50129. 8014cea: 681b ldr r3, [r3, #0]
  50130. 8014cec: 6adb ldr r3, [r3, #44] @ 0x2c
  50131. 8014cee: 429a cmp r2, r3
  50132. 8014cf0: d201 bcs.n 8014cf6 <xTaskPriorityInherit+0xba>
  50133. current priority of the mutex holder is not lower than the
  50134. priority of the task attempting to take the mutex.
  50135. Therefore the mutex holder must have already inherited a
  50136. priority, but inheritance would have occurred if that had
  50137. not been the case. */
  50138. xReturn = pdTRUE;
  50139. 8014cf2: 2301 movs r3, #1
  50140. 8014cf4: 60fb str r3, [r7, #12]
  50141. else
  50142. {
  50143. mtCOVERAGE_TEST_MARKER();
  50144. }
  50145. return xReturn;
  50146. 8014cf6: 68fb ldr r3, [r7, #12]
  50147. }
  50148. 8014cf8: 4618 mov r0, r3
  50149. 8014cfa: 3710 adds r7, #16
  50150. 8014cfc: 46bd mov sp, r7
  50151. 8014cfe: bd80 pop {r7, pc}
  50152. 8014d00: 240025a4 .word 0x240025a4
  50153. 8014d04: 240025a8 .word 0x240025a8
  50154. 8014d08: 24002a80 .word 0x24002a80
  50155. 08014d0c <xTaskPriorityDisinherit>:
  50156. /*-----------------------------------------------------------*/
  50157. #if ( configUSE_MUTEXES == 1 )
  50158. BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder )
  50159. {
  50160. 8014d0c: b580 push {r7, lr}
  50161. 8014d0e: b086 sub sp, #24
  50162. 8014d10: af00 add r7, sp, #0
  50163. 8014d12: 6078 str r0, [r7, #4]
  50164. TCB_t * const pxTCB = pxMutexHolder;
  50165. 8014d14: 687b ldr r3, [r7, #4]
  50166. 8014d16: 613b str r3, [r7, #16]
  50167. BaseType_t xReturn = pdFALSE;
  50168. 8014d18: 2300 movs r3, #0
  50169. 8014d1a: 617b str r3, [r7, #20]
  50170. if( pxMutexHolder != NULL )
  50171. 8014d1c: 687b ldr r3, [r7, #4]
  50172. 8014d1e: 2b00 cmp r3, #0
  50173. 8014d20: d058 beq.n 8014dd4 <xTaskPriorityDisinherit+0xc8>
  50174. {
  50175. /* A task can only have an inherited priority if it holds the mutex.
  50176. If the mutex is held by a task then it cannot be given from an
  50177. interrupt, and if a mutex is given by the holding task then it must
  50178. be the running state task. */
  50179. configASSERT( pxTCB == pxCurrentTCB );
  50180. 8014d22: 4b2f ldr r3, [pc, #188] @ (8014de0 <xTaskPriorityDisinherit+0xd4>)
  50181. 8014d24: 681b ldr r3, [r3, #0]
  50182. 8014d26: 693a ldr r2, [r7, #16]
  50183. 8014d28: 429a cmp r2, r3
  50184. 8014d2a: d00b beq.n 8014d44 <xTaskPriorityDisinherit+0x38>
  50185. __asm volatile
  50186. 8014d2c: f04f 0350 mov.w r3, #80 @ 0x50
  50187. 8014d30: f383 8811 msr BASEPRI, r3
  50188. 8014d34: f3bf 8f6f isb sy
  50189. 8014d38: f3bf 8f4f dsb sy
  50190. 8014d3c: 60fb str r3, [r7, #12]
  50191. }
  50192. 8014d3e: bf00 nop
  50193. 8014d40: bf00 nop
  50194. 8014d42: e7fd b.n 8014d40 <xTaskPriorityDisinherit+0x34>
  50195. configASSERT( pxTCB->uxMutexesHeld );
  50196. 8014d44: 693b ldr r3, [r7, #16]
  50197. 8014d46: 6d1b ldr r3, [r3, #80] @ 0x50
  50198. 8014d48: 2b00 cmp r3, #0
  50199. 8014d4a: d10b bne.n 8014d64 <xTaskPriorityDisinherit+0x58>
  50200. __asm volatile
  50201. 8014d4c: f04f 0350 mov.w r3, #80 @ 0x50
  50202. 8014d50: f383 8811 msr BASEPRI, r3
  50203. 8014d54: f3bf 8f6f isb sy
  50204. 8014d58: f3bf 8f4f dsb sy
  50205. 8014d5c: 60bb str r3, [r7, #8]
  50206. }
  50207. 8014d5e: bf00 nop
  50208. 8014d60: bf00 nop
  50209. 8014d62: e7fd b.n 8014d60 <xTaskPriorityDisinherit+0x54>
  50210. ( pxTCB->uxMutexesHeld )--;
  50211. 8014d64: 693b ldr r3, [r7, #16]
  50212. 8014d66: 6d1b ldr r3, [r3, #80] @ 0x50
  50213. 8014d68: 1e5a subs r2, r3, #1
  50214. 8014d6a: 693b ldr r3, [r7, #16]
  50215. 8014d6c: 651a str r2, [r3, #80] @ 0x50
  50216. /* Has the holder of the mutex inherited the priority of another
  50217. task? */
  50218. if( pxTCB->uxPriority != pxTCB->uxBasePriority )
  50219. 8014d6e: 693b ldr r3, [r7, #16]
  50220. 8014d70: 6ada ldr r2, [r3, #44] @ 0x2c
  50221. 8014d72: 693b ldr r3, [r7, #16]
  50222. 8014d74: 6cdb ldr r3, [r3, #76] @ 0x4c
  50223. 8014d76: 429a cmp r2, r3
  50224. 8014d78: d02c beq.n 8014dd4 <xTaskPriorityDisinherit+0xc8>
  50225. {
  50226. /* Only disinherit if no other mutexes are held. */
  50227. if( pxTCB->uxMutexesHeld == ( UBaseType_t ) 0 )
  50228. 8014d7a: 693b ldr r3, [r7, #16]
  50229. 8014d7c: 6d1b ldr r3, [r3, #80] @ 0x50
  50230. 8014d7e: 2b00 cmp r3, #0
  50231. 8014d80: d128 bne.n 8014dd4 <xTaskPriorityDisinherit+0xc8>
  50232. /* A task can only have an inherited priority if it holds
  50233. the mutex. If the mutex is held by a task then it cannot be
  50234. given from an interrupt, and if a mutex is given by the
  50235. holding task then it must be the running state task. Remove
  50236. the holding task from the ready/delayed list. */
  50237. if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  50238. 8014d82: 693b ldr r3, [r7, #16]
  50239. 8014d84: 3304 adds r3, #4
  50240. 8014d86: 4618 mov r0, r3
  50241. 8014d88: f7fd ff1c bl 8012bc4 <uxListRemove>
  50242. }
  50243. /* Disinherit the priority before adding the task into the
  50244. new ready list. */
  50245. traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority );
  50246. pxTCB->uxPriority = pxTCB->uxBasePriority;
  50247. 8014d8c: 693b ldr r3, [r7, #16]
  50248. 8014d8e: 6cda ldr r2, [r3, #76] @ 0x4c
  50249. 8014d90: 693b ldr r3, [r7, #16]
  50250. 8014d92: 62da str r2, [r3, #44] @ 0x2c
  50251. /* Reset the event list item value. It cannot be in use for
  50252. any other purpose if this task is running, and it must be
  50253. running to give back the mutex. */
  50254. 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. */
  50255. 8014d94: 693b ldr r3, [r7, #16]
  50256. 8014d96: 6adb ldr r3, [r3, #44] @ 0x2c
  50257. 8014d98: f1c3 0238 rsb r2, r3, #56 @ 0x38
  50258. 8014d9c: 693b ldr r3, [r7, #16]
  50259. 8014d9e: 619a str r2, [r3, #24]
  50260. prvAddTaskToReadyList( pxTCB );
  50261. 8014da0: 693b ldr r3, [r7, #16]
  50262. 8014da2: 6ada ldr r2, [r3, #44] @ 0x2c
  50263. 8014da4: 4b0f ldr r3, [pc, #60] @ (8014de4 <xTaskPriorityDisinherit+0xd8>)
  50264. 8014da6: 681b ldr r3, [r3, #0]
  50265. 8014da8: 429a cmp r2, r3
  50266. 8014daa: d903 bls.n 8014db4 <xTaskPriorityDisinherit+0xa8>
  50267. 8014dac: 693b ldr r3, [r7, #16]
  50268. 8014dae: 6adb ldr r3, [r3, #44] @ 0x2c
  50269. 8014db0: 4a0c ldr r2, [pc, #48] @ (8014de4 <xTaskPriorityDisinherit+0xd8>)
  50270. 8014db2: 6013 str r3, [r2, #0]
  50271. 8014db4: 693b ldr r3, [r7, #16]
  50272. 8014db6: 6ada ldr r2, [r3, #44] @ 0x2c
  50273. 8014db8: 4613 mov r3, r2
  50274. 8014dba: 009b lsls r3, r3, #2
  50275. 8014dbc: 4413 add r3, r2
  50276. 8014dbe: 009b lsls r3, r3, #2
  50277. 8014dc0: 4a09 ldr r2, [pc, #36] @ (8014de8 <xTaskPriorityDisinherit+0xdc>)
  50278. 8014dc2: 441a add r2, r3
  50279. 8014dc4: 693b ldr r3, [r7, #16]
  50280. 8014dc6: 3304 adds r3, #4
  50281. 8014dc8: 4619 mov r1, r3
  50282. 8014dca: 4610 mov r0, r2
  50283. 8014dcc: f7fd fe9d bl 8012b0a <vListInsertEnd>
  50284. in an order different to that in which they were taken.
  50285. If a context switch did not occur when the first mutex was
  50286. returned, even if a task was waiting on it, then a context
  50287. switch should occur when the last mutex is returned whether
  50288. a task is waiting on it or not. */
  50289. xReturn = pdTRUE;
  50290. 8014dd0: 2301 movs r3, #1
  50291. 8014dd2: 617b str r3, [r7, #20]
  50292. else
  50293. {
  50294. mtCOVERAGE_TEST_MARKER();
  50295. }
  50296. return xReturn;
  50297. 8014dd4: 697b ldr r3, [r7, #20]
  50298. }
  50299. 8014dd6: 4618 mov r0, r3
  50300. 8014dd8: 3718 adds r7, #24
  50301. 8014dda: 46bd mov sp, r7
  50302. 8014ddc: bd80 pop {r7, pc}
  50303. 8014dde: bf00 nop
  50304. 8014de0: 240025a4 .word 0x240025a4
  50305. 8014de4: 24002a80 .word 0x24002a80
  50306. 8014de8: 240025a8 .word 0x240025a8
  50307. 08014dec <vTaskPriorityDisinheritAfterTimeout>:
  50308. /*-----------------------------------------------------------*/
  50309. #if ( configUSE_MUTEXES == 1 )
  50310. void vTaskPriorityDisinheritAfterTimeout( TaskHandle_t const pxMutexHolder, UBaseType_t uxHighestPriorityWaitingTask )
  50311. {
  50312. 8014dec: b580 push {r7, lr}
  50313. 8014dee: b088 sub sp, #32
  50314. 8014df0: af00 add r7, sp, #0
  50315. 8014df2: 6078 str r0, [r7, #4]
  50316. 8014df4: 6039 str r1, [r7, #0]
  50317. TCB_t * const pxTCB = pxMutexHolder;
  50318. 8014df6: 687b ldr r3, [r7, #4]
  50319. 8014df8: 61bb str r3, [r7, #24]
  50320. UBaseType_t uxPriorityUsedOnEntry, uxPriorityToUse;
  50321. const UBaseType_t uxOnlyOneMutexHeld = ( UBaseType_t ) 1;
  50322. 8014dfa: 2301 movs r3, #1
  50323. 8014dfc: 617b str r3, [r7, #20]
  50324. if( pxMutexHolder != NULL )
  50325. 8014dfe: 687b ldr r3, [r7, #4]
  50326. 8014e00: 2b00 cmp r3, #0
  50327. 8014e02: d06c beq.n 8014ede <vTaskPriorityDisinheritAfterTimeout+0xf2>
  50328. {
  50329. /* If pxMutexHolder is not NULL then the holder must hold at least
  50330. one mutex. */
  50331. configASSERT( pxTCB->uxMutexesHeld );
  50332. 8014e04: 69bb ldr r3, [r7, #24]
  50333. 8014e06: 6d1b ldr r3, [r3, #80] @ 0x50
  50334. 8014e08: 2b00 cmp r3, #0
  50335. 8014e0a: d10b bne.n 8014e24 <vTaskPriorityDisinheritAfterTimeout+0x38>
  50336. __asm volatile
  50337. 8014e0c: f04f 0350 mov.w r3, #80 @ 0x50
  50338. 8014e10: f383 8811 msr BASEPRI, r3
  50339. 8014e14: f3bf 8f6f isb sy
  50340. 8014e18: f3bf 8f4f dsb sy
  50341. 8014e1c: 60fb str r3, [r7, #12]
  50342. }
  50343. 8014e1e: bf00 nop
  50344. 8014e20: bf00 nop
  50345. 8014e22: e7fd b.n 8014e20 <vTaskPriorityDisinheritAfterTimeout+0x34>
  50346. /* Determine the priority to which the priority of the task that
  50347. holds the mutex should be set. This will be the greater of the
  50348. holding task's base priority and the priority of the highest
  50349. priority task that is waiting to obtain the mutex. */
  50350. if( pxTCB->uxBasePriority < uxHighestPriorityWaitingTask )
  50351. 8014e24: 69bb ldr r3, [r7, #24]
  50352. 8014e26: 6cdb ldr r3, [r3, #76] @ 0x4c
  50353. 8014e28: 683a ldr r2, [r7, #0]
  50354. 8014e2a: 429a cmp r2, r3
  50355. 8014e2c: d902 bls.n 8014e34 <vTaskPriorityDisinheritAfterTimeout+0x48>
  50356. {
  50357. uxPriorityToUse = uxHighestPriorityWaitingTask;
  50358. 8014e2e: 683b ldr r3, [r7, #0]
  50359. 8014e30: 61fb str r3, [r7, #28]
  50360. 8014e32: e002 b.n 8014e3a <vTaskPriorityDisinheritAfterTimeout+0x4e>
  50361. }
  50362. else
  50363. {
  50364. uxPriorityToUse = pxTCB->uxBasePriority;
  50365. 8014e34: 69bb ldr r3, [r7, #24]
  50366. 8014e36: 6cdb ldr r3, [r3, #76] @ 0x4c
  50367. 8014e38: 61fb str r3, [r7, #28]
  50368. }
  50369. /* Does the priority need to change? */
  50370. if( pxTCB->uxPriority != uxPriorityToUse )
  50371. 8014e3a: 69bb ldr r3, [r7, #24]
  50372. 8014e3c: 6adb ldr r3, [r3, #44] @ 0x2c
  50373. 8014e3e: 69fa ldr r2, [r7, #28]
  50374. 8014e40: 429a cmp r2, r3
  50375. 8014e42: d04c beq.n 8014ede <vTaskPriorityDisinheritAfterTimeout+0xf2>
  50376. {
  50377. /* Only disinherit if no other mutexes are held. This is a
  50378. simplification in the priority inheritance implementation. If
  50379. the task that holds the mutex is also holding other mutexes then
  50380. the other mutexes may have caused the priority inheritance. */
  50381. if( pxTCB->uxMutexesHeld == uxOnlyOneMutexHeld )
  50382. 8014e44: 69bb ldr r3, [r7, #24]
  50383. 8014e46: 6d1b ldr r3, [r3, #80] @ 0x50
  50384. 8014e48: 697a ldr r2, [r7, #20]
  50385. 8014e4a: 429a cmp r2, r3
  50386. 8014e4c: d147 bne.n 8014ede <vTaskPriorityDisinheritAfterTimeout+0xf2>
  50387. {
  50388. /* If a task has timed out because it already holds the
  50389. mutex it was trying to obtain then it cannot of inherited
  50390. its own priority. */
  50391. configASSERT( pxTCB != pxCurrentTCB );
  50392. 8014e4e: 4b26 ldr r3, [pc, #152] @ (8014ee8 <vTaskPriorityDisinheritAfterTimeout+0xfc>)
  50393. 8014e50: 681b ldr r3, [r3, #0]
  50394. 8014e52: 69ba ldr r2, [r7, #24]
  50395. 8014e54: 429a cmp r2, r3
  50396. 8014e56: d10b bne.n 8014e70 <vTaskPriorityDisinheritAfterTimeout+0x84>
  50397. __asm volatile
  50398. 8014e58: f04f 0350 mov.w r3, #80 @ 0x50
  50399. 8014e5c: f383 8811 msr BASEPRI, r3
  50400. 8014e60: f3bf 8f6f isb sy
  50401. 8014e64: f3bf 8f4f dsb sy
  50402. 8014e68: 60bb str r3, [r7, #8]
  50403. }
  50404. 8014e6a: bf00 nop
  50405. 8014e6c: bf00 nop
  50406. 8014e6e: e7fd b.n 8014e6c <vTaskPriorityDisinheritAfterTimeout+0x80>
  50407. /* Disinherit the priority, remembering the previous
  50408. priority to facilitate determining the subject task's
  50409. state. */
  50410. traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority );
  50411. uxPriorityUsedOnEntry = pxTCB->uxPriority;
  50412. 8014e70: 69bb ldr r3, [r7, #24]
  50413. 8014e72: 6adb ldr r3, [r3, #44] @ 0x2c
  50414. 8014e74: 613b str r3, [r7, #16]
  50415. pxTCB->uxPriority = uxPriorityToUse;
  50416. 8014e76: 69bb ldr r3, [r7, #24]
  50417. 8014e78: 69fa ldr r2, [r7, #28]
  50418. 8014e7a: 62da str r2, [r3, #44] @ 0x2c
  50419. /* Only reset the event list item value if the value is not
  50420. being used for anything else. */
  50421. if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL )
  50422. 8014e7c: 69bb ldr r3, [r7, #24]
  50423. 8014e7e: 699b ldr r3, [r3, #24]
  50424. 8014e80: 2b00 cmp r3, #0
  50425. 8014e82: db04 blt.n 8014e8e <vTaskPriorityDisinheritAfterTimeout+0xa2>
  50426. {
  50427. 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. */
  50428. 8014e84: 69fb ldr r3, [r7, #28]
  50429. 8014e86: f1c3 0238 rsb r2, r3, #56 @ 0x38
  50430. 8014e8a: 69bb ldr r3, [r7, #24]
  50431. 8014e8c: 619a str r2, [r3, #24]
  50432. then the task that holds the mutex could be in either the
  50433. Ready, Blocked or Suspended states. Only remove the task
  50434. from its current state list if it is in the Ready state as
  50435. the task's priority is going to change and there is one
  50436. Ready list per priority. */
  50437. if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE )
  50438. 8014e8e: 69bb ldr r3, [r7, #24]
  50439. 8014e90: 6959 ldr r1, [r3, #20]
  50440. 8014e92: 693a ldr r2, [r7, #16]
  50441. 8014e94: 4613 mov r3, r2
  50442. 8014e96: 009b lsls r3, r3, #2
  50443. 8014e98: 4413 add r3, r2
  50444. 8014e9a: 009b lsls r3, r3, #2
  50445. 8014e9c: 4a13 ldr r2, [pc, #76] @ (8014eec <vTaskPriorityDisinheritAfterTimeout+0x100>)
  50446. 8014e9e: 4413 add r3, r2
  50447. 8014ea0: 4299 cmp r1, r3
  50448. 8014ea2: d11c bne.n 8014ede <vTaskPriorityDisinheritAfterTimeout+0xf2>
  50449. {
  50450. if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  50451. 8014ea4: 69bb ldr r3, [r7, #24]
  50452. 8014ea6: 3304 adds r3, #4
  50453. 8014ea8: 4618 mov r0, r3
  50454. 8014eaa: f7fd fe8b bl 8012bc4 <uxListRemove>
  50455. else
  50456. {
  50457. mtCOVERAGE_TEST_MARKER();
  50458. }
  50459. prvAddTaskToReadyList( pxTCB );
  50460. 8014eae: 69bb ldr r3, [r7, #24]
  50461. 8014eb0: 6ada ldr r2, [r3, #44] @ 0x2c
  50462. 8014eb2: 4b0f ldr r3, [pc, #60] @ (8014ef0 <vTaskPriorityDisinheritAfterTimeout+0x104>)
  50463. 8014eb4: 681b ldr r3, [r3, #0]
  50464. 8014eb6: 429a cmp r2, r3
  50465. 8014eb8: d903 bls.n 8014ec2 <vTaskPriorityDisinheritAfterTimeout+0xd6>
  50466. 8014eba: 69bb ldr r3, [r7, #24]
  50467. 8014ebc: 6adb ldr r3, [r3, #44] @ 0x2c
  50468. 8014ebe: 4a0c ldr r2, [pc, #48] @ (8014ef0 <vTaskPriorityDisinheritAfterTimeout+0x104>)
  50469. 8014ec0: 6013 str r3, [r2, #0]
  50470. 8014ec2: 69bb ldr r3, [r7, #24]
  50471. 8014ec4: 6ada ldr r2, [r3, #44] @ 0x2c
  50472. 8014ec6: 4613 mov r3, r2
  50473. 8014ec8: 009b lsls r3, r3, #2
  50474. 8014eca: 4413 add r3, r2
  50475. 8014ecc: 009b lsls r3, r3, #2
  50476. 8014ece: 4a07 ldr r2, [pc, #28] @ (8014eec <vTaskPriorityDisinheritAfterTimeout+0x100>)
  50477. 8014ed0: 441a add r2, r3
  50478. 8014ed2: 69bb ldr r3, [r7, #24]
  50479. 8014ed4: 3304 adds r3, #4
  50480. 8014ed6: 4619 mov r1, r3
  50481. 8014ed8: 4610 mov r0, r2
  50482. 8014eda: f7fd fe16 bl 8012b0a <vListInsertEnd>
  50483. }
  50484. else
  50485. {
  50486. mtCOVERAGE_TEST_MARKER();
  50487. }
  50488. }
  50489. 8014ede: bf00 nop
  50490. 8014ee0: 3720 adds r7, #32
  50491. 8014ee2: 46bd mov sp, r7
  50492. 8014ee4: bd80 pop {r7, pc}
  50493. 8014ee6: bf00 nop
  50494. 8014ee8: 240025a4 .word 0x240025a4
  50495. 8014eec: 240025a8 .word 0x240025a8
  50496. 8014ef0: 24002a80 .word 0x24002a80
  50497. 08014ef4 <pvTaskIncrementMutexHeldCount>:
  50498. /*-----------------------------------------------------------*/
  50499. #if ( configUSE_MUTEXES == 1 )
  50500. TaskHandle_t pvTaskIncrementMutexHeldCount( void )
  50501. {
  50502. 8014ef4: b480 push {r7}
  50503. 8014ef6: af00 add r7, sp, #0
  50504. /* If xSemaphoreCreateMutex() is called before any tasks have been created
  50505. then pxCurrentTCB will be NULL. */
  50506. if( pxCurrentTCB != NULL )
  50507. 8014ef8: 4b07 ldr r3, [pc, #28] @ (8014f18 <pvTaskIncrementMutexHeldCount+0x24>)
  50508. 8014efa: 681b ldr r3, [r3, #0]
  50509. 8014efc: 2b00 cmp r3, #0
  50510. 8014efe: d004 beq.n 8014f0a <pvTaskIncrementMutexHeldCount+0x16>
  50511. {
  50512. ( pxCurrentTCB->uxMutexesHeld )++;
  50513. 8014f00: 4b05 ldr r3, [pc, #20] @ (8014f18 <pvTaskIncrementMutexHeldCount+0x24>)
  50514. 8014f02: 681b ldr r3, [r3, #0]
  50515. 8014f04: 6d1a ldr r2, [r3, #80] @ 0x50
  50516. 8014f06: 3201 adds r2, #1
  50517. 8014f08: 651a str r2, [r3, #80] @ 0x50
  50518. }
  50519. return pxCurrentTCB;
  50520. 8014f0a: 4b03 ldr r3, [pc, #12] @ (8014f18 <pvTaskIncrementMutexHeldCount+0x24>)
  50521. 8014f0c: 681b ldr r3, [r3, #0]
  50522. }
  50523. 8014f0e: 4618 mov r0, r3
  50524. 8014f10: 46bd mov sp, r7
  50525. 8014f12: f85d 7b04 ldr.w r7, [sp], #4
  50526. 8014f16: 4770 bx lr
  50527. 8014f18: 240025a4 .word 0x240025a4
  50528. 08014f1c <xTaskNotifyWait>:
  50529. /*-----------------------------------------------------------*/
  50530. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  50531. BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait )
  50532. {
  50533. 8014f1c: b580 push {r7, lr}
  50534. 8014f1e: b086 sub sp, #24
  50535. 8014f20: af00 add r7, sp, #0
  50536. 8014f22: 60f8 str r0, [r7, #12]
  50537. 8014f24: 60b9 str r1, [r7, #8]
  50538. 8014f26: 607a str r2, [r7, #4]
  50539. 8014f28: 603b str r3, [r7, #0]
  50540. BaseType_t xReturn;
  50541. taskENTER_CRITICAL();
  50542. 8014f2a: f000 ffed bl 8015f08 <vPortEnterCritical>
  50543. {
  50544. /* Only block if a notification is not already pending. */
  50545. if( pxCurrentTCB->ucNotifyState != taskNOTIFICATION_RECEIVED )
  50546. 8014f2e: 4b29 ldr r3, [pc, #164] @ (8014fd4 <xTaskNotifyWait+0xb8>)
  50547. 8014f30: 681b ldr r3, [r3, #0]
  50548. 8014f32: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  50549. 8014f36: b2db uxtb r3, r3
  50550. 8014f38: 2b02 cmp r3, #2
  50551. 8014f3a: d01c beq.n 8014f76 <xTaskNotifyWait+0x5a>
  50552. {
  50553. /* Clear bits in the task's notification value as bits may get
  50554. set by the notifying task or interrupt. This can be used to
  50555. clear the value to zero. */
  50556. pxCurrentTCB->ulNotifiedValue &= ~ulBitsToClearOnEntry;
  50557. 8014f3c: 4b25 ldr r3, [pc, #148] @ (8014fd4 <xTaskNotifyWait+0xb8>)
  50558. 8014f3e: 681b ldr r3, [r3, #0]
  50559. 8014f40: f8d3 10a0 ldr.w r1, [r3, #160] @ 0xa0
  50560. 8014f44: 68fa ldr r2, [r7, #12]
  50561. 8014f46: 43d2 mvns r2, r2
  50562. 8014f48: 400a ands r2, r1
  50563. 8014f4a: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  50564. /* Mark this task as waiting for a notification. */
  50565. pxCurrentTCB->ucNotifyState = taskWAITING_NOTIFICATION;
  50566. 8014f4e: 4b21 ldr r3, [pc, #132] @ (8014fd4 <xTaskNotifyWait+0xb8>)
  50567. 8014f50: 681b ldr r3, [r3, #0]
  50568. 8014f52: 2201 movs r2, #1
  50569. 8014f54: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  50570. if( xTicksToWait > ( TickType_t ) 0 )
  50571. 8014f58: 683b ldr r3, [r7, #0]
  50572. 8014f5a: 2b00 cmp r3, #0
  50573. 8014f5c: d00b beq.n 8014f76 <xTaskNotifyWait+0x5a>
  50574. {
  50575. prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );
  50576. 8014f5e: 2101 movs r1, #1
  50577. 8014f60: 6838 ldr r0, [r7, #0]
  50578. 8014f62: f000 fa09 bl 8015378 <prvAddCurrentTaskToDelayedList>
  50579. /* All ports are written to allow a yield in a critical
  50580. section (some will yield immediately, others wait until the
  50581. critical section exits) - but it is not something that
  50582. application code should ever do. */
  50583. portYIELD_WITHIN_API();
  50584. 8014f66: 4b1c ldr r3, [pc, #112] @ (8014fd8 <xTaskNotifyWait+0xbc>)
  50585. 8014f68: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  50586. 8014f6c: 601a str r2, [r3, #0]
  50587. 8014f6e: f3bf 8f4f dsb sy
  50588. 8014f72: f3bf 8f6f isb sy
  50589. else
  50590. {
  50591. mtCOVERAGE_TEST_MARKER();
  50592. }
  50593. }
  50594. taskEXIT_CRITICAL();
  50595. 8014f76: f000 fff9 bl 8015f6c <vPortExitCritical>
  50596. taskENTER_CRITICAL();
  50597. 8014f7a: f000 ffc5 bl 8015f08 <vPortEnterCritical>
  50598. {
  50599. traceTASK_NOTIFY_WAIT();
  50600. if( pulNotificationValue != NULL )
  50601. 8014f7e: 687b ldr r3, [r7, #4]
  50602. 8014f80: 2b00 cmp r3, #0
  50603. 8014f82: d005 beq.n 8014f90 <xTaskNotifyWait+0x74>
  50604. {
  50605. /* Output the current notification value, which may or may not
  50606. have changed. */
  50607. *pulNotificationValue = pxCurrentTCB->ulNotifiedValue;
  50608. 8014f84: 4b13 ldr r3, [pc, #76] @ (8014fd4 <xTaskNotifyWait+0xb8>)
  50609. 8014f86: 681b ldr r3, [r3, #0]
  50610. 8014f88: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  50611. 8014f8c: 687b ldr r3, [r7, #4]
  50612. 8014f8e: 601a str r2, [r3, #0]
  50613. /* If ucNotifyValue is set then either the task never entered the
  50614. blocked state (because a notification was already pending) or the
  50615. task unblocked because of a notification. Otherwise the task
  50616. unblocked because of a timeout. */
  50617. if( pxCurrentTCB->ucNotifyState != taskNOTIFICATION_RECEIVED )
  50618. 8014f90: 4b10 ldr r3, [pc, #64] @ (8014fd4 <xTaskNotifyWait+0xb8>)
  50619. 8014f92: 681b ldr r3, [r3, #0]
  50620. 8014f94: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  50621. 8014f98: b2db uxtb r3, r3
  50622. 8014f9a: 2b02 cmp r3, #2
  50623. 8014f9c: d002 beq.n 8014fa4 <xTaskNotifyWait+0x88>
  50624. {
  50625. /* A notification was not received. */
  50626. xReturn = pdFALSE;
  50627. 8014f9e: 2300 movs r3, #0
  50628. 8014fa0: 617b str r3, [r7, #20]
  50629. 8014fa2: e00a b.n 8014fba <xTaskNotifyWait+0x9e>
  50630. }
  50631. else
  50632. {
  50633. /* A notification was already pending or a notification was
  50634. received while the task was waiting. */
  50635. pxCurrentTCB->ulNotifiedValue &= ~ulBitsToClearOnExit;
  50636. 8014fa4: 4b0b ldr r3, [pc, #44] @ (8014fd4 <xTaskNotifyWait+0xb8>)
  50637. 8014fa6: 681b ldr r3, [r3, #0]
  50638. 8014fa8: f8d3 10a0 ldr.w r1, [r3, #160] @ 0xa0
  50639. 8014fac: 68ba ldr r2, [r7, #8]
  50640. 8014fae: 43d2 mvns r2, r2
  50641. 8014fb0: 400a ands r2, r1
  50642. 8014fb2: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  50643. xReturn = pdTRUE;
  50644. 8014fb6: 2301 movs r3, #1
  50645. 8014fb8: 617b str r3, [r7, #20]
  50646. }
  50647. pxCurrentTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  50648. 8014fba: 4b06 ldr r3, [pc, #24] @ (8014fd4 <xTaskNotifyWait+0xb8>)
  50649. 8014fbc: 681b ldr r3, [r3, #0]
  50650. 8014fbe: 2200 movs r2, #0
  50651. 8014fc0: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  50652. }
  50653. taskEXIT_CRITICAL();
  50654. 8014fc4: f000 ffd2 bl 8015f6c <vPortExitCritical>
  50655. return xReturn;
  50656. 8014fc8: 697b ldr r3, [r7, #20]
  50657. }
  50658. 8014fca: 4618 mov r0, r3
  50659. 8014fcc: 3718 adds r7, #24
  50660. 8014fce: 46bd mov sp, r7
  50661. 8014fd0: bd80 pop {r7, pc}
  50662. 8014fd2: bf00 nop
  50663. 8014fd4: 240025a4 .word 0x240025a4
  50664. 8014fd8: e000ed04 .word 0xe000ed04
  50665. 08014fdc <xTaskGenericNotify>:
  50666. /*-----------------------------------------------------------*/
  50667. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  50668. BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue )
  50669. {
  50670. 8014fdc: b580 push {r7, lr}
  50671. 8014fde: b08a sub sp, #40 @ 0x28
  50672. 8014fe0: af00 add r7, sp, #0
  50673. 8014fe2: 60f8 str r0, [r7, #12]
  50674. 8014fe4: 60b9 str r1, [r7, #8]
  50675. 8014fe6: 603b str r3, [r7, #0]
  50676. 8014fe8: 4613 mov r3, r2
  50677. 8014fea: 71fb strb r3, [r7, #7]
  50678. TCB_t * pxTCB;
  50679. BaseType_t xReturn = pdPASS;
  50680. 8014fec: 2301 movs r3, #1
  50681. 8014fee: 627b str r3, [r7, #36] @ 0x24
  50682. uint8_t ucOriginalNotifyState;
  50683. configASSERT( xTaskToNotify );
  50684. 8014ff0: 68fb ldr r3, [r7, #12]
  50685. 8014ff2: 2b00 cmp r3, #0
  50686. 8014ff4: d10b bne.n 801500e <xTaskGenericNotify+0x32>
  50687. __asm volatile
  50688. 8014ff6: f04f 0350 mov.w r3, #80 @ 0x50
  50689. 8014ffa: f383 8811 msr BASEPRI, r3
  50690. 8014ffe: f3bf 8f6f isb sy
  50691. 8015002: f3bf 8f4f dsb sy
  50692. 8015006: 61bb str r3, [r7, #24]
  50693. }
  50694. 8015008: bf00 nop
  50695. 801500a: bf00 nop
  50696. 801500c: e7fd b.n 801500a <xTaskGenericNotify+0x2e>
  50697. pxTCB = xTaskToNotify;
  50698. 801500e: 68fb ldr r3, [r7, #12]
  50699. 8015010: 623b str r3, [r7, #32]
  50700. taskENTER_CRITICAL();
  50701. 8015012: f000 ff79 bl 8015f08 <vPortEnterCritical>
  50702. {
  50703. if( pulPreviousNotificationValue != NULL )
  50704. 8015016: 683b ldr r3, [r7, #0]
  50705. 8015018: 2b00 cmp r3, #0
  50706. 801501a: d004 beq.n 8015026 <xTaskGenericNotify+0x4a>
  50707. {
  50708. *pulPreviousNotificationValue = pxTCB->ulNotifiedValue;
  50709. 801501c: 6a3b ldr r3, [r7, #32]
  50710. 801501e: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  50711. 8015022: 683b ldr r3, [r7, #0]
  50712. 8015024: 601a str r2, [r3, #0]
  50713. }
  50714. ucOriginalNotifyState = pxTCB->ucNotifyState;
  50715. 8015026: 6a3b ldr r3, [r7, #32]
  50716. 8015028: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  50717. 801502c: 77fb strb r3, [r7, #31]
  50718. pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED;
  50719. 801502e: 6a3b ldr r3, [r7, #32]
  50720. 8015030: 2202 movs r2, #2
  50721. 8015032: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  50722. switch( eAction )
  50723. 8015036: 79fb ldrb r3, [r7, #7]
  50724. 8015038: 2b04 cmp r3, #4
  50725. 801503a: d82e bhi.n 801509a <xTaskGenericNotify+0xbe>
  50726. 801503c: a201 add r2, pc, #4 @ (adr r2, 8015044 <xTaskGenericNotify+0x68>)
  50727. 801503e: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  50728. 8015042: bf00 nop
  50729. 8015044: 080150bf .word 0x080150bf
  50730. 8015048: 08015059 .word 0x08015059
  50731. 801504c: 0801506b .word 0x0801506b
  50732. 8015050: 0801507b .word 0x0801507b
  50733. 8015054: 08015085 .word 0x08015085
  50734. {
  50735. case eSetBits :
  50736. pxTCB->ulNotifiedValue |= ulValue;
  50737. 8015058: 6a3b ldr r3, [r7, #32]
  50738. 801505a: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  50739. 801505e: 68bb ldr r3, [r7, #8]
  50740. 8015060: 431a orrs r2, r3
  50741. 8015062: 6a3b ldr r3, [r7, #32]
  50742. 8015064: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  50743. break;
  50744. 8015068: e02c b.n 80150c4 <xTaskGenericNotify+0xe8>
  50745. case eIncrement :
  50746. ( pxTCB->ulNotifiedValue )++;
  50747. 801506a: 6a3b ldr r3, [r7, #32]
  50748. 801506c: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  50749. 8015070: 1c5a adds r2, r3, #1
  50750. 8015072: 6a3b ldr r3, [r7, #32]
  50751. 8015074: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  50752. break;
  50753. 8015078: e024 b.n 80150c4 <xTaskGenericNotify+0xe8>
  50754. case eSetValueWithOverwrite :
  50755. pxTCB->ulNotifiedValue = ulValue;
  50756. 801507a: 6a3b ldr r3, [r7, #32]
  50757. 801507c: 68ba ldr r2, [r7, #8]
  50758. 801507e: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  50759. break;
  50760. 8015082: e01f b.n 80150c4 <xTaskGenericNotify+0xe8>
  50761. case eSetValueWithoutOverwrite :
  50762. if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED )
  50763. 8015084: 7ffb ldrb r3, [r7, #31]
  50764. 8015086: 2b02 cmp r3, #2
  50765. 8015088: d004 beq.n 8015094 <xTaskGenericNotify+0xb8>
  50766. {
  50767. pxTCB->ulNotifiedValue = ulValue;
  50768. 801508a: 6a3b ldr r3, [r7, #32]
  50769. 801508c: 68ba ldr r2, [r7, #8]
  50770. 801508e: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  50771. else
  50772. {
  50773. /* The value could not be written to the task. */
  50774. xReturn = pdFAIL;
  50775. }
  50776. break;
  50777. 8015092: e017 b.n 80150c4 <xTaskGenericNotify+0xe8>
  50778. xReturn = pdFAIL;
  50779. 8015094: 2300 movs r3, #0
  50780. 8015096: 627b str r3, [r7, #36] @ 0x24
  50781. break;
  50782. 8015098: e014 b.n 80150c4 <xTaskGenericNotify+0xe8>
  50783. default:
  50784. /* Should not get here if all enums are handled.
  50785. Artificially force an assert by testing a value the
  50786. compiler can't assume is const. */
  50787. configASSERT( pxTCB->ulNotifiedValue == ~0UL );
  50788. 801509a: 6a3b ldr r3, [r7, #32]
  50789. 801509c: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  50790. 80150a0: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  50791. 80150a4: d00d beq.n 80150c2 <xTaskGenericNotify+0xe6>
  50792. __asm volatile
  50793. 80150a6: f04f 0350 mov.w r3, #80 @ 0x50
  50794. 80150aa: f383 8811 msr BASEPRI, r3
  50795. 80150ae: f3bf 8f6f isb sy
  50796. 80150b2: f3bf 8f4f dsb sy
  50797. 80150b6: 617b str r3, [r7, #20]
  50798. }
  50799. 80150b8: bf00 nop
  50800. 80150ba: bf00 nop
  50801. 80150bc: e7fd b.n 80150ba <xTaskGenericNotify+0xde>
  50802. break;
  50803. 80150be: bf00 nop
  50804. 80150c0: e000 b.n 80150c4 <xTaskGenericNotify+0xe8>
  50805. break;
  50806. 80150c2: bf00 nop
  50807. traceTASK_NOTIFY();
  50808. /* If the task is in the blocked state specifically to wait for a
  50809. notification then unblock it now. */
  50810. if( ucOriginalNotifyState == taskWAITING_NOTIFICATION )
  50811. 80150c4: 7ffb ldrb r3, [r7, #31]
  50812. 80150c6: 2b01 cmp r3, #1
  50813. 80150c8: d13b bne.n 8015142 <xTaskGenericNotify+0x166>
  50814. {
  50815. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  50816. 80150ca: 6a3b ldr r3, [r7, #32]
  50817. 80150cc: 3304 adds r3, #4
  50818. 80150ce: 4618 mov r0, r3
  50819. 80150d0: f7fd fd78 bl 8012bc4 <uxListRemove>
  50820. prvAddTaskToReadyList( pxTCB );
  50821. 80150d4: 6a3b ldr r3, [r7, #32]
  50822. 80150d6: 6ada ldr r2, [r3, #44] @ 0x2c
  50823. 80150d8: 4b1d ldr r3, [pc, #116] @ (8015150 <xTaskGenericNotify+0x174>)
  50824. 80150da: 681b ldr r3, [r3, #0]
  50825. 80150dc: 429a cmp r2, r3
  50826. 80150de: d903 bls.n 80150e8 <xTaskGenericNotify+0x10c>
  50827. 80150e0: 6a3b ldr r3, [r7, #32]
  50828. 80150e2: 6adb ldr r3, [r3, #44] @ 0x2c
  50829. 80150e4: 4a1a ldr r2, [pc, #104] @ (8015150 <xTaskGenericNotify+0x174>)
  50830. 80150e6: 6013 str r3, [r2, #0]
  50831. 80150e8: 6a3b ldr r3, [r7, #32]
  50832. 80150ea: 6ada ldr r2, [r3, #44] @ 0x2c
  50833. 80150ec: 4613 mov r3, r2
  50834. 80150ee: 009b lsls r3, r3, #2
  50835. 80150f0: 4413 add r3, r2
  50836. 80150f2: 009b lsls r3, r3, #2
  50837. 80150f4: 4a17 ldr r2, [pc, #92] @ (8015154 <xTaskGenericNotify+0x178>)
  50838. 80150f6: 441a add r2, r3
  50839. 80150f8: 6a3b ldr r3, [r7, #32]
  50840. 80150fa: 3304 adds r3, #4
  50841. 80150fc: 4619 mov r1, r3
  50842. 80150fe: 4610 mov r0, r2
  50843. 8015100: f7fd fd03 bl 8012b0a <vListInsertEnd>
  50844. /* The task should not have been on an event list. */
  50845. configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );
  50846. 8015104: 6a3b ldr r3, [r7, #32]
  50847. 8015106: 6a9b ldr r3, [r3, #40] @ 0x28
  50848. 8015108: 2b00 cmp r3, #0
  50849. 801510a: d00b beq.n 8015124 <xTaskGenericNotify+0x148>
  50850. __asm volatile
  50851. 801510c: f04f 0350 mov.w r3, #80 @ 0x50
  50852. 8015110: f383 8811 msr BASEPRI, r3
  50853. 8015114: f3bf 8f6f isb sy
  50854. 8015118: f3bf 8f4f dsb sy
  50855. 801511c: 613b str r3, [r7, #16]
  50856. }
  50857. 801511e: bf00 nop
  50858. 8015120: bf00 nop
  50859. 8015122: e7fd b.n 8015120 <xTaskGenericNotify+0x144>
  50860. earliest possible time. */
  50861. prvResetNextTaskUnblockTime();
  50862. }
  50863. #endif
  50864. if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
  50865. 8015124: 6a3b ldr r3, [r7, #32]
  50866. 8015126: 6ada ldr r2, [r3, #44] @ 0x2c
  50867. 8015128: 4b0b ldr r3, [pc, #44] @ (8015158 <xTaskGenericNotify+0x17c>)
  50868. 801512a: 681b ldr r3, [r3, #0]
  50869. 801512c: 6adb ldr r3, [r3, #44] @ 0x2c
  50870. 801512e: 429a cmp r2, r3
  50871. 8015130: d907 bls.n 8015142 <xTaskGenericNotify+0x166>
  50872. {
  50873. /* The notified task has a priority above the currently
  50874. executing task so a yield is required. */
  50875. taskYIELD_IF_USING_PREEMPTION();
  50876. 8015132: 4b0a ldr r3, [pc, #40] @ (801515c <xTaskGenericNotify+0x180>)
  50877. 8015134: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  50878. 8015138: 601a str r2, [r3, #0]
  50879. 801513a: f3bf 8f4f dsb sy
  50880. 801513e: f3bf 8f6f isb sy
  50881. else
  50882. {
  50883. mtCOVERAGE_TEST_MARKER();
  50884. }
  50885. }
  50886. taskEXIT_CRITICAL();
  50887. 8015142: f000 ff13 bl 8015f6c <vPortExitCritical>
  50888. return xReturn;
  50889. 8015146: 6a7b ldr r3, [r7, #36] @ 0x24
  50890. }
  50891. 8015148: 4618 mov r0, r3
  50892. 801514a: 3728 adds r7, #40 @ 0x28
  50893. 801514c: 46bd mov sp, r7
  50894. 801514e: bd80 pop {r7, pc}
  50895. 8015150: 24002a80 .word 0x24002a80
  50896. 8015154: 240025a8 .word 0x240025a8
  50897. 8015158: 240025a4 .word 0x240025a4
  50898. 801515c: e000ed04 .word 0xe000ed04
  50899. 08015160 <xTaskGenericNotifyFromISR>:
  50900. /*-----------------------------------------------------------*/
  50901. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  50902. BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken )
  50903. {
  50904. 8015160: b580 push {r7, lr}
  50905. 8015162: b08e sub sp, #56 @ 0x38
  50906. 8015164: af00 add r7, sp, #0
  50907. 8015166: 60f8 str r0, [r7, #12]
  50908. 8015168: 60b9 str r1, [r7, #8]
  50909. 801516a: 603b str r3, [r7, #0]
  50910. 801516c: 4613 mov r3, r2
  50911. 801516e: 71fb strb r3, [r7, #7]
  50912. TCB_t * pxTCB;
  50913. uint8_t ucOriginalNotifyState;
  50914. BaseType_t xReturn = pdPASS;
  50915. 8015170: 2301 movs r3, #1
  50916. 8015172: 637b str r3, [r7, #52] @ 0x34
  50917. UBaseType_t uxSavedInterruptStatus;
  50918. configASSERT( xTaskToNotify );
  50919. 8015174: 68fb ldr r3, [r7, #12]
  50920. 8015176: 2b00 cmp r3, #0
  50921. 8015178: d10b bne.n 8015192 <xTaskGenericNotifyFromISR+0x32>
  50922. __asm volatile
  50923. 801517a: f04f 0350 mov.w r3, #80 @ 0x50
  50924. 801517e: f383 8811 msr BASEPRI, r3
  50925. 8015182: f3bf 8f6f isb sy
  50926. 8015186: f3bf 8f4f dsb sy
  50927. 801518a: 627b str r3, [r7, #36] @ 0x24
  50928. }
  50929. 801518c: bf00 nop
  50930. 801518e: bf00 nop
  50931. 8015190: e7fd b.n 801518e <xTaskGenericNotifyFromISR+0x2e>
  50932. below the maximum system call interrupt priority. FreeRTOS maintains a
  50933. separate interrupt safe API to ensure interrupt entry is as fast and as
  50934. simple as possible. More information (albeit Cortex-M specific) is
  50935. provided on the following link:
  50936. http://www.freertos.org/RTOS-Cortex-M3-M4.html */
  50937. portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
  50938. 8015192: f000 ff99 bl 80160c8 <vPortValidateInterruptPriority>
  50939. pxTCB = xTaskToNotify;
  50940. 8015196: 68fb ldr r3, [r7, #12]
  50941. 8015198: 633b str r3, [r7, #48] @ 0x30
  50942. __asm volatile
  50943. 801519a: f3ef 8211 mrs r2, BASEPRI
  50944. 801519e: f04f 0350 mov.w r3, #80 @ 0x50
  50945. 80151a2: f383 8811 msr BASEPRI, r3
  50946. 80151a6: f3bf 8f6f isb sy
  50947. 80151aa: f3bf 8f4f dsb sy
  50948. 80151ae: 623a str r2, [r7, #32]
  50949. 80151b0: 61fb str r3, [r7, #28]
  50950. return ulOriginalBASEPRI;
  50951. 80151b2: 6a3b ldr r3, [r7, #32]
  50952. uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
  50953. 80151b4: 62fb str r3, [r7, #44] @ 0x2c
  50954. {
  50955. if( pulPreviousNotificationValue != NULL )
  50956. 80151b6: 683b ldr r3, [r7, #0]
  50957. 80151b8: 2b00 cmp r3, #0
  50958. 80151ba: d004 beq.n 80151c6 <xTaskGenericNotifyFromISR+0x66>
  50959. {
  50960. *pulPreviousNotificationValue = pxTCB->ulNotifiedValue;
  50961. 80151bc: 6b3b ldr r3, [r7, #48] @ 0x30
  50962. 80151be: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  50963. 80151c2: 683b ldr r3, [r7, #0]
  50964. 80151c4: 601a str r2, [r3, #0]
  50965. }
  50966. ucOriginalNotifyState = pxTCB->ucNotifyState;
  50967. 80151c6: 6b3b ldr r3, [r7, #48] @ 0x30
  50968. 80151c8: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  50969. 80151cc: f887 302b strb.w r3, [r7, #43] @ 0x2b
  50970. pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED;
  50971. 80151d0: 6b3b ldr r3, [r7, #48] @ 0x30
  50972. 80151d2: 2202 movs r2, #2
  50973. 80151d4: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  50974. switch( eAction )
  50975. 80151d8: 79fb ldrb r3, [r7, #7]
  50976. 80151da: 2b04 cmp r3, #4
  50977. 80151dc: d82e bhi.n 801523c <xTaskGenericNotifyFromISR+0xdc>
  50978. 80151de: a201 add r2, pc, #4 @ (adr r2, 80151e4 <xTaskGenericNotifyFromISR+0x84>)
  50979. 80151e0: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  50980. 80151e4: 08015261 .word 0x08015261
  50981. 80151e8: 080151f9 .word 0x080151f9
  50982. 80151ec: 0801520b .word 0x0801520b
  50983. 80151f0: 0801521b .word 0x0801521b
  50984. 80151f4: 08015225 .word 0x08015225
  50985. {
  50986. case eSetBits :
  50987. pxTCB->ulNotifiedValue |= ulValue;
  50988. 80151f8: 6b3b ldr r3, [r7, #48] @ 0x30
  50989. 80151fa: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  50990. 80151fe: 68bb ldr r3, [r7, #8]
  50991. 8015200: 431a orrs r2, r3
  50992. 8015202: 6b3b ldr r3, [r7, #48] @ 0x30
  50993. 8015204: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  50994. break;
  50995. 8015208: e02d b.n 8015266 <xTaskGenericNotifyFromISR+0x106>
  50996. case eIncrement :
  50997. ( pxTCB->ulNotifiedValue )++;
  50998. 801520a: 6b3b ldr r3, [r7, #48] @ 0x30
  50999. 801520c: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  51000. 8015210: 1c5a adds r2, r3, #1
  51001. 8015212: 6b3b ldr r3, [r7, #48] @ 0x30
  51002. 8015214: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  51003. break;
  51004. 8015218: e025 b.n 8015266 <xTaskGenericNotifyFromISR+0x106>
  51005. case eSetValueWithOverwrite :
  51006. pxTCB->ulNotifiedValue = ulValue;
  51007. 801521a: 6b3b ldr r3, [r7, #48] @ 0x30
  51008. 801521c: 68ba ldr r2, [r7, #8]
  51009. 801521e: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  51010. break;
  51011. 8015222: e020 b.n 8015266 <xTaskGenericNotifyFromISR+0x106>
  51012. case eSetValueWithoutOverwrite :
  51013. if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED )
  51014. 8015224: f897 302b ldrb.w r3, [r7, #43] @ 0x2b
  51015. 8015228: 2b02 cmp r3, #2
  51016. 801522a: d004 beq.n 8015236 <xTaskGenericNotifyFromISR+0xd6>
  51017. {
  51018. pxTCB->ulNotifiedValue = ulValue;
  51019. 801522c: 6b3b ldr r3, [r7, #48] @ 0x30
  51020. 801522e: 68ba ldr r2, [r7, #8]
  51021. 8015230: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  51022. else
  51023. {
  51024. /* The value could not be written to the task. */
  51025. xReturn = pdFAIL;
  51026. }
  51027. break;
  51028. 8015234: e017 b.n 8015266 <xTaskGenericNotifyFromISR+0x106>
  51029. xReturn = pdFAIL;
  51030. 8015236: 2300 movs r3, #0
  51031. 8015238: 637b str r3, [r7, #52] @ 0x34
  51032. break;
  51033. 801523a: e014 b.n 8015266 <xTaskGenericNotifyFromISR+0x106>
  51034. default:
  51035. /* Should not get here if all enums are handled.
  51036. Artificially force an assert by testing a value the
  51037. compiler can't assume is const. */
  51038. configASSERT( pxTCB->ulNotifiedValue == ~0UL );
  51039. 801523c: 6b3b ldr r3, [r7, #48] @ 0x30
  51040. 801523e: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  51041. 8015242: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  51042. 8015246: d00d beq.n 8015264 <xTaskGenericNotifyFromISR+0x104>
  51043. __asm volatile
  51044. 8015248: f04f 0350 mov.w r3, #80 @ 0x50
  51045. 801524c: f383 8811 msr BASEPRI, r3
  51046. 8015250: f3bf 8f6f isb sy
  51047. 8015254: f3bf 8f4f dsb sy
  51048. 8015258: 61bb str r3, [r7, #24]
  51049. }
  51050. 801525a: bf00 nop
  51051. 801525c: bf00 nop
  51052. 801525e: e7fd b.n 801525c <xTaskGenericNotifyFromISR+0xfc>
  51053. break;
  51054. 8015260: bf00 nop
  51055. 8015262: e000 b.n 8015266 <xTaskGenericNotifyFromISR+0x106>
  51056. break;
  51057. 8015264: bf00 nop
  51058. traceTASK_NOTIFY_FROM_ISR();
  51059. /* If the task is in the blocked state specifically to wait for a
  51060. notification then unblock it now. */
  51061. if( ucOriginalNotifyState == taskWAITING_NOTIFICATION )
  51062. 8015266: f897 302b ldrb.w r3, [r7, #43] @ 0x2b
  51063. 801526a: 2b01 cmp r3, #1
  51064. 801526c: d147 bne.n 80152fe <xTaskGenericNotifyFromISR+0x19e>
  51065. {
  51066. /* The task should not have been on an event list. */
  51067. configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );
  51068. 801526e: 6b3b ldr r3, [r7, #48] @ 0x30
  51069. 8015270: 6a9b ldr r3, [r3, #40] @ 0x28
  51070. 8015272: 2b00 cmp r3, #0
  51071. 8015274: d00b beq.n 801528e <xTaskGenericNotifyFromISR+0x12e>
  51072. __asm volatile
  51073. 8015276: f04f 0350 mov.w r3, #80 @ 0x50
  51074. 801527a: f383 8811 msr BASEPRI, r3
  51075. 801527e: f3bf 8f6f isb sy
  51076. 8015282: f3bf 8f4f dsb sy
  51077. 8015286: 617b str r3, [r7, #20]
  51078. }
  51079. 8015288: bf00 nop
  51080. 801528a: bf00 nop
  51081. 801528c: e7fd b.n 801528a <xTaskGenericNotifyFromISR+0x12a>
  51082. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  51083. 801528e: 4b21 ldr r3, [pc, #132] @ (8015314 <xTaskGenericNotifyFromISR+0x1b4>)
  51084. 8015290: 681b ldr r3, [r3, #0]
  51085. 8015292: 2b00 cmp r3, #0
  51086. 8015294: d11d bne.n 80152d2 <xTaskGenericNotifyFromISR+0x172>
  51087. {
  51088. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  51089. 8015296: 6b3b ldr r3, [r7, #48] @ 0x30
  51090. 8015298: 3304 adds r3, #4
  51091. 801529a: 4618 mov r0, r3
  51092. 801529c: f7fd fc92 bl 8012bc4 <uxListRemove>
  51093. prvAddTaskToReadyList( pxTCB );
  51094. 80152a0: 6b3b ldr r3, [r7, #48] @ 0x30
  51095. 80152a2: 6ada ldr r2, [r3, #44] @ 0x2c
  51096. 80152a4: 4b1c ldr r3, [pc, #112] @ (8015318 <xTaskGenericNotifyFromISR+0x1b8>)
  51097. 80152a6: 681b ldr r3, [r3, #0]
  51098. 80152a8: 429a cmp r2, r3
  51099. 80152aa: d903 bls.n 80152b4 <xTaskGenericNotifyFromISR+0x154>
  51100. 80152ac: 6b3b ldr r3, [r7, #48] @ 0x30
  51101. 80152ae: 6adb ldr r3, [r3, #44] @ 0x2c
  51102. 80152b0: 4a19 ldr r2, [pc, #100] @ (8015318 <xTaskGenericNotifyFromISR+0x1b8>)
  51103. 80152b2: 6013 str r3, [r2, #0]
  51104. 80152b4: 6b3b ldr r3, [r7, #48] @ 0x30
  51105. 80152b6: 6ada ldr r2, [r3, #44] @ 0x2c
  51106. 80152b8: 4613 mov r3, r2
  51107. 80152ba: 009b lsls r3, r3, #2
  51108. 80152bc: 4413 add r3, r2
  51109. 80152be: 009b lsls r3, r3, #2
  51110. 80152c0: 4a16 ldr r2, [pc, #88] @ (801531c <xTaskGenericNotifyFromISR+0x1bc>)
  51111. 80152c2: 441a add r2, r3
  51112. 80152c4: 6b3b ldr r3, [r7, #48] @ 0x30
  51113. 80152c6: 3304 adds r3, #4
  51114. 80152c8: 4619 mov r1, r3
  51115. 80152ca: 4610 mov r0, r2
  51116. 80152cc: f7fd fc1d bl 8012b0a <vListInsertEnd>
  51117. 80152d0: e005 b.n 80152de <xTaskGenericNotifyFromISR+0x17e>
  51118. }
  51119. else
  51120. {
  51121. /* The delayed and ready lists cannot be accessed, so hold
  51122. this task pending until the scheduler is resumed. */
  51123. vListInsertEnd( &( xPendingReadyList ), &( pxTCB->xEventListItem ) );
  51124. 80152d2: 6b3b ldr r3, [r7, #48] @ 0x30
  51125. 80152d4: 3318 adds r3, #24
  51126. 80152d6: 4619 mov r1, r3
  51127. 80152d8: 4811 ldr r0, [pc, #68] @ (8015320 <xTaskGenericNotifyFromISR+0x1c0>)
  51128. 80152da: f7fd fc16 bl 8012b0a <vListInsertEnd>
  51129. }
  51130. if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
  51131. 80152de: 6b3b ldr r3, [r7, #48] @ 0x30
  51132. 80152e0: 6ada ldr r2, [r3, #44] @ 0x2c
  51133. 80152e2: 4b10 ldr r3, [pc, #64] @ (8015324 <xTaskGenericNotifyFromISR+0x1c4>)
  51134. 80152e4: 681b ldr r3, [r3, #0]
  51135. 80152e6: 6adb ldr r3, [r3, #44] @ 0x2c
  51136. 80152e8: 429a cmp r2, r3
  51137. 80152ea: d908 bls.n 80152fe <xTaskGenericNotifyFromISR+0x19e>
  51138. {
  51139. /* The notified task has a priority above the currently
  51140. executing task so a yield is required. */
  51141. if( pxHigherPriorityTaskWoken != NULL )
  51142. 80152ec: 6c3b ldr r3, [r7, #64] @ 0x40
  51143. 80152ee: 2b00 cmp r3, #0
  51144. 80152f0: d002 beq.n 80152f8 <xTaskGenericNotifyFromISR+0x198>
  51145. {
  51146. *pxHigherPriorityTaskWoken = pdTRUE;
  51147. 80152f2: 6c3b ldr r3, [r7, #64] @ 0x40
  51148. 80152f4: 2201 movs r2, #1
  51149. 80152f6: 601a str r2, [r3, #0]
  51150. }
  51151. /* Mark that a yield is pending in case the user is not
  51152. using the "xHigherPriorityTaskWoken" parameter to an ISR
  51153. safe FreeRTOS function. */
  51154. xYieldPending = pdTRUE;
  51155. 80152f8: 4b0b ldr r3, [pc, #44] @ (8015328 <xTaskGenericNotifyFromISR+0x1c8>)
  51156. 80152fa: 2201 movs r2, #1
  51157. 80152fc: 601a str r2, [r3, #0]
  51158. 80152fe: 6afb ldr r3, [r7, #44] @ 0x2c
  51159. 8015300: 613b str r3, [r7, #16]
  51160. __asm volatile
  51161. 8015302: 693b ldr r3, [r7, #16]
  51162. 8015304: f383 8811 msr BASEPRI, r3
  51163. }
  51164. 8015308: bf00 nop
  51165. }
  51166. }
  51167. }
  51168. portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
  51169. return xReturn;
  51170. 801530a: 6b7b ldr r3, [r7, #52] @ 0x34
  51171. }
  51172. 801530c: 4618 mov r0, r3
  51173. 801530e: 3738 adds r7, #56 @ 0x38
  51174. 8015310: 46bd mov sp, r7
  51175. 8015312: bd80 pop {r7, pc}
  51176. 8015314: 24002aa0 .word 0x24002aa0
  51177. 8015318: 24002a80 .word 0x24002a80
  51178. 801531c: 240025a8 .word 0x240025a8
  51179. 8015320: 24002a38 .word 0x24002a38
  51180. 8015324: 240025a4 .word 0x240025a4
  51181. 8015328: 24002a8c .word 0x24002a8c
  51182. 0801532c <xTaskNotifyStateClear>:
  51183. /*-----------------------------------------------------------*/
  51184. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  51185. BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask )
  51186. {
  51187. 801532c: b580 push {r7, lr}
  51188. 801532e: b084 sub sp, #16
  51189. 8015330: af00 add r7, sp, #0
  51190. 8015332: 6078 str r0, [r7, #4]
  51191. TCB_t *pxTCB;
  51192. BaseType_t xReturn;
  51193. /* If null is passed in here then it is the calling task that is having
  51194. its notification state cleared. */
  51195. pxTCB = prvGetTCBFromHandle( xTask );
  51196. 8015334: 687b ldr r3, [r7, #4]
  51197. 8015336: 2b00 cmp r3, #0
  51198. 8015338: d102 bne.n 8015340 <xTaskNotifyStateClear+0x14>
  51199. 801533a: 4b0e ldr r3, [pc, #56] @ (8015374 <xTaskNotifyStateClear+0x48>)
  51200. 801533c: 681b ldr r3, [r3, #0]
  51201. 801533e: e000 b.n 8015342 <xTaskNotifyStateClear+0x16>
  51202. 8015340: 687b ldr r3, [r7, #4]
  51203. 8015342: 60bb str r3, [r7, #8]
  51204. taskENTER_CRITICAL();
  51205. 8015344: f000 fde0 bl 8015f08 <vPortEnterCritical>
  51206. {
  51207. if( pxTCB->ucNotifyState == taskNOTIFICATION_RECEIVED )
  51208. 8015348: 68bb ldr r3, [r7, #8]
  51209. 801534a: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  51210. 801534e: b2db uxtb r3, r3
  51211. 8015350: 2b02 cmp r3, #2
  51212. 8015352: d106 bne.n 8015362 <xTaskNotifyStateClear+0x36>
  51213. {
  51214. pxTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  51215. 8015354: 68bb ldr r3, [r7, #8]
  51216. 8015356: 2200 movs r2, #0
  51217. 8015358: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  51218. xReturn = pdPASS;
  51219. 801535c: 2301 movs r3, #1
  51220. 801535e: 60fb str r3, [r7, #12]
  51221. 8015360: e001 b.n 8015366 <xTaskNotifyStateClear+0x3a>
  51222. }
  51223. else
  51224. {
  51225. xReturn = pdFAIL;
  51226. 8015362: 2300 movs r3, #0
  51227. 8015364: 60fb str r3, [r7, #12]
  51228. }
  51229. }
  51230. taskEXIT_CRITICAL();
  51231. 8015366: f000 fe01 bl 8015f6c <vPortExitCritical>
  51232. return xReturn;
  51233. 801536a: 68fb ldr r3, [r7, #12]
  51234. }
  51235. 801536c: 4618 mov r0, r3
  51236. 801536e: 3710 adds r7, #16
  51237. 8015370: 46bd mov sp, r7
  51238. 8015372: bd80 pop {r7, pc}
  51239. 8015374: 240025a4 .word 0x240025a4
  51240. 08015378 <prvAddCurrentTaskToDelayedList>:
  51241. #endif
  51242. /*-----------------------------------------------------------*/
  51243. static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseType_t xCanBlockIndefinitely )
  51244. {
  51245. 8015378: b580 push {r7, lr}
  51246. 801537a: b084 sub sp, #16
  51247. 801537c: af00 add r7, sp, #0
  51248. 801537e: 6078 str r0, [r7, #4]
  51249. 8015380: 6039 str r1, [r7, #0]
  51250. TickType_t xTimeToWake;
  51251. const TickType_t xConstTickCount = xTickCount;
  51252. 8015382: 4b21 ldr r3, [pc, #132] @ (8015408 <prvAddCurrentTaskToDelayedList+0x90>)
  51253. 8015384: 681b ldr r3, [r3, #0]
  51254. 8015386: 60fb str r3, [r7, #12]
  51255. }
  51256. #endif
  51257. /* Remove the task from the ready list before adding it to the blocked list
  51258. as the same list item is used for both lists. */
  51259. if( uxListRemove( &( pxCurrentTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  51260. 8015388: 4b20 ldr r3, [pc, #128] @ (801540c <prvAddCurrentTaskToDelayedList+0x94>)
  51261. 801538a: 681b ldr r3, [r3, #0]
  51262. 801538c: 3304 adds r3, #4
  51263. 801538e: 4618 mov r0, r3
  51264. 8015390: f7fd fc18 bl 8012bc4 <uxListRemove>
  51265. mtCOVERAGE_TEST_MARKER();
  51266. }
  51267. #if ( INCLUDE_vTaskSuspend == 1 )
  51268. {
  51269. if( ( xTicksToWait == portMAX_DELAY ) && ( xCanBlockIndefinitely != pdFALSE ) )
  51270. 8015394: 687b ldr r3, [r7, #4]
  51271. 8015396: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  51272. 801539a: d10a bne.n 80153b2 <prvAddCurrentTaskToDelayedList+0x3a>
  51273. 801539c: 683b ldr r3, [r7, #0]
  51274. 801539e: 2b00 cmp r3, #0
  51275. 80153a0: d007 beq.n 80153b2 <prvAddCurrentTaskToDelayedList+0x3a>
  51276. {
  51277. /* Add the task to the suspended task list instead of a delayed task
  51278. list to ensure it is not woken by a timing event. It will block
  51279. indefinitely. */
  51280. vListInsertEnd( &xSuspendedTaskList, &( pxCurrentTCB->xStateListItem ) );
  51281. 80153a2: 4b1a ldr r3, [pc, #104] @ (801540c <prvAddCurrentTaskToDelayedList+0x94>)
  51282. 80153a4: 681b ldr r3, [r3, #0]
  51283. 80153a6: 3304 adds r3, #4
  51284. 80153a8: 4619 mov r1, r3
  51285. 80153aa: 4819 ldr r0, [pc, #100] @ (8015410 <prvAddCurrentTaskToDelayedList+0x98>)
  51286. 80153ac: f7fd fbad bl 8012b0a <vListInsertEnd>
  51287. /* Avoid compiler warning when INCLUDE_vTaskSuspend is not 1. */
  51288. ( void ) xCanBlockIndefinitely;
  51289. }
  51290. #endif /* INCLUDE_vTaskSuspend */
  51291. }
  51292. 80153b0: e026 b.n 8015400 <prvAddCurrentTaskToDelayedList+0x88>
  51293. xTimeToWake = xConstTickCount + xTicksToWait;
  51294. 80153b2: 68fa ldr r2, [r7, #12]
  51295. 80153b4: 687b ldr r3, [r7, #4]
  51296. 80153b6: 4413 add r3, r2
  51297. 80153b8: 60bb str r3, [r7, #8]
  51298. listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xStateListItem ), xTimeToWake );
  51299. 80153ba: 4b14 ldr r3, [pc, #80] @ (801540c <prvAddCurrentTaskToDelayedList+0x94>)
  51300. 80153bc: 681b ldr r3, [r3, #0]
  51301. 80153be: 68ba ldr r2, [r7, #8]
  51302. 80153c0: 605a str r2, [r3, #4]
  51303. if( xTimeToWake < xConstTickCount )
  51304. 80153c2: 68ba ldr r2, [r7, #8]
  51305. 80153c4: 68fb ldr r3, [r7, #12]
  51306. 80153c6: 429a cmp r2, r3
  51307. 80153c8: d209 bcs.n 80153de <prvAddCurrentTaskToDelayedList+0x66>
  51308. vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) );
  51309. 80153ca: 4b12 ldr r3, [pc, #72] @ (8015414 <prvAddCurrentTaskToDelayedList+0x9c>)
  51310. 80153cc: 681a ldr r2, [r3, #0]
  51311. 80153ce: 4b0f ldr r3, [pc, #60] @ (801540c <prvAddCurrentTaskToDelayedList+0x94>)
  51312. 80153d0: 681b ldr r3, [r3, #0]
  51313. 80153d2: 3304 adds r3, #4
  51314. 80153d4: 4619 mov r1, r3
  51315. 80153d6: 4610 mov r0, r2
  51316. 80153d8: f7fd fbbb bl 8012b52 <vListInsert>
  51317. }
  51318. 80153dc: e010 b.n 8015400 <prvAddCurrentTaskToDelayedList+0x88>
  51319. vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) );
  51320. 80153de: 4b0e ldr r3, [pc, #56] @ (8015418 <prvAddCurrentTaskToDelayedList+0xa0>)
  51321. 80153e0: 681a ldr r2, [r3, #0]
  51322. 80153e2: 4b0a ldr r3, [pc, #40] @ (801540c <prvAddCurrentTaskToDelayedList+0x94>)
  51323. 80153e4: 681b ldr r3, [r3, #0]
  51324. 80153e6: 3304 adds r3, #4
  51325. 80153e8: 4619 mov r1, r3
  51326. 80153ea: 4610 mov r0, r2
  51327. 80153ec: f7fd fbb1 bl 8012b52 <vListInsert>
  51328. if( xTimeToWake < xNextTaskUnblockTime )
  51329. 80153f0: 4b0a ldr r3, [pc, #40] @ (801541c <prvAddCurrentTaskToDelayedList+0xa4>)
  51330. 80153f2: 681b ldr r3, [r3, #0]
  51331. 80153f4: 68ba ldr r2, [r7, #8]
  51332. 80153f6: 429a cmp r2, r3
  51333. 80153f8: d202 bcs.n 8015400 <prvAddCurrentTaskToDelayedList+0x88>
  51334. xNextTaskUnblockTime = xTimeToWake;
  51335. 80153fa: 4a08 ldr r2, [pc, #32] @ (801541c <prvAddCurrentTaskToDelayedList+0xa4>)
  51336. 80153fc: 68bb ldr r3, [r7, #8]
  51337. 80153fe: 6013 str r3, [r2, #0]
  51338. }
  51339. 8015400: bf00 nop
  51340. 8015402: 3710 adds r7, #16
  51341. 8015404: 46bd mov sp, r7
  51342. 8015406: bd80 pop {r7, pc}
  51343. 8015408: 24002a7c .word 0x24002a7c
  51344. 801540c: 240025a4 .word 0x240025a4
  51345. 8015410: 24002a64 .word 0x24002a64
  51346. 8015414: 24002a34 .word 0x24002a34
  51347. 8015418: 24002a30 .word 0x24002a30
  51348. 801541c: 24002a98 .word 0x24002a98
  51349. 08015420 <xTimerCreateTimerTask>:
  51350. TimerCallbackFunction_t pxCallbackFunction,
  51351. Timer_t *pxNewTimer ) PRIVILEGED_FUNCTION;
  51352. /*-----------------------------------------------------------*/
  51353. BaseType_t xTimerCreateTimerTask( void )
  51354. {
  51355. 8015420: b580 push {r7, lr}
  51356. 8015422: b08a sub sp, #40 @ 0x28
  51357. 8015424: af04 add r7, sp, #16
  51358. BaseType_t xReturn = pdFAIL;
  51359. 8015426: 2300 movs r3, #0
  51360. 8015428: 617b str r3, [r7, #20]
  51361. /* This function is called when the scheduler is started if
  51362. configUSE_TIMERS is set to 1. Check that the infrastructure used by the
  51363. timer service task has been created/initialised. If timers have already
  51364. been created then the initialisation will already have been performed. */
  51365. prvCheckForValidListAndQueue();
  51366. 801542a: f000 fbb1 bl 8015b90 <prvCheckForValidListAndQueue>
  51367. if( xTimerQueue != NULL )
  51368. 801542e: 4b1d ldr r3, [pc, #116] @ (80154a4 <xTimerCreateTimerTask+0x84>)
  51369. 8015430: 681b ldr r3, [r3, #0]
  51370. 8015432: 2b00 cmp r3, #0
  51371. 8015434: d021 beq.n 801547a <xTimerCreateTimerTask+0x5a>
  51372. {
  51373. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  51374. {
  51375. StaticTask_t *pxTimerTaskTCBBuffer = NULL;
  51376. 8015436: 2300 movs r3, #0
  51377. 8015438: 60fb str r3, [r7, #12]
  51378. StackType_t *pxTimerTaskStackBuffer = NULL;
  51379. 801543a: 2300 movs r3, #0
  51380. 801543c: 60bb str r3, [r7, #8]
  51381. uint32_t ulTimerTaskStackSize;
  51382. vApplicationGetTimerTaskMemory( &pxTimerTaskTCBBuffer, &pxTimerTaskStackBuffer, &ulTimerTaskStackSize );
  51383. 801543e: 1d3a adds r2, r7, #4
  51384. 8015440: f107 0108 add.w r1, r7, #8
  51385. 8015444: f107 030c add.w r3, r7, #12
  51386. 8015448: 4618 mov r0, r3
  51387. 801544a: f7fd fb17 bl 8012a7c <vApplicationGetTimerTaskMemory>
  51388. xTimerTaskHandle = xTaskCreateStatic( prvTimerTask,
  51389. 801544e: 6879 ldr r1, [r7, #4]
  51390. 8015450: 68bb ldr r3, [r7, #8]
  51391. 8015452: 68fa ldr r2, [r7, #12]
  51392. 8015454: 9202 str r2, [sp, #8]
  51393. 8015456: 9301 str r3, [sp, #4]
  51394. 8015458: 2302 movs r3, #2
  51395. 801545a: 9300 str r3, [sp, #0]
  51396. 801545c: 2300 movs r3, #0
  51397. 801545e: 460a mov r2, r1
  51398. 8015460: 4911 ldr r1, [pc, #68] @ (80154a8 <xTimerCreateTimerTask+0x88>)
  51399. 8015462: 4812 ldr r0, [pc, #72] @ (80154ac <xTimerCreateTimerTask+0x8c>)
  51400. 8015464: f7fe fd2f bl 8013ec6 <xTaskCreateStatic>
  51401. 8015468: 4603 mov r3, r0
  51402. 801546a: 4a11 ldr r2, [pc, #68] @ (80154b0 <xTimerCreateTimerTask+0x90>)
  51403. 801546c: 6013 str r3, [r2, #0]
  51404. NULL,
  51405. ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT,
  51406. pxTimerTaskStackBuffer,
  51407. pxTimerTaskTCBBuffer );
  51408. if( xTimerTaskHandle != NULL )
  51409. 801546e: 4b10 ldr r3, [pc, #64] @ (80154b0 <xTimerCreateTimerTask+0x90>)
  51410. 8015470: 681b ldr r3, [r3, #0]
  51411. 8015472: 2b00 cmp r3, #0
  51412. 8015474: d001 beq.n 801547a <xTimerCreateTimerTask+0x5a>
  51413. {
  51414. xReturn = pdPASS;
  51415. 8015476: 2301 movs r3, #1
  51416. 8015478: 617b str r3, [r7, #20]
  51417. else
  51418. {
  51419. mtCOVERAGE_TEST_MARKER();
  51420. }
  51421. configASSERT( xReturn );
  51422. 801547a: 697b ldr r3, [r7, #20]
  51423. 801547c: 2b00 cmp r3, #0
  51424. 801547e: d10b bne.n 8015498 <xTimerCreateTimerTask+0x78>
  51425. __asm volatile
  51426. 8015480: f04f 0350 mov.w r3, #80 @ 0x50
  51427. 8015484: f383 8811 msr BASEPRI, r3
  51428. 8015488: f3bf 8f6f isb sy
  51429. 801548c: f3bf 8f4f dsb sy
  51430. 8015490: 613b str r3, [r7, #16]
  51431. }
  51432. 8015492: bf00 nop
  51433. 8015494: bf00 nop
  51434. 8015496: e7fd b.n 8015494 <xTimerCreateTimerTask+0x74>
  51435. return xReturn;
  51436. 8015498: 697b ldr r3, [r7, #20]
  51437. }
  51438. 801549a: 4618 mov r0, r3
  51439. 801549c: 3718 adds r7, #24
  51440. 801549e: 46bd mov sp, r7
  51441. 80154a0: bd80 pop {r7, pc}
  51442. 80154a2: bf00 nop
  51443. 80154a4: 24002ad4 .word 0x24002ad4
  51444. 80154a8: 08017554 .word 0x08017554
  51445. 80154ac: 08015729 .word 0x08015729
  51446. 80154b0: 24002ad8 .word 0x24002ad8
  51447. 080154b4 <xTimerCreate>:
  51448. TimerHandle_t xTimerCreate( const char * const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
  51449. const TickType_t xTimerPeriodInTicks,
  51450. const UBaseType_t uxAutoReload,
  51451. void * const pvTimerID,
  51452. TimerCallbackFunction_t pxCallbackFunction )
  51453. {
  51454. 80154b4: b580 push {r7, lr}
  51455. 80154b6: b088 sub sp, #32
  51456. 80154b8: af02 add r7, sp, #8
  51457. 80154ba: 60f8 str r0, [r7, #12]
  51458. 80154bc: 60b9 str r1, [r7, #8]
  51459. 80154be: 607a str r2, [r7, #4]
  51460. 80154c0: 603b str r3, [r7, #0]
  51461. Timer_t *pxNewTimer;
  51462. pxNewTimer = ( Timer_t * ) pvPortMalloc( sizeof( Timer_t ) ); /*lint !e9087 !e9079 All values returned by pvPortMalloc() have at least the alignment required by the MCU's stack, and the first member of Timer_t is always a pointer to the timer's mame. */
  51463. 80154c2: 202c movs r0, #44 @ 0x2c
  51464. 80154c4: f000 fe42 bl 801614c <pvPortMalloc>
  51465. 80154c8: 6178 str r0, [r7, #20]
  51466. if( pxNewTimer != NULL )
  51467. 80154ca: 697b ldr r3, [r7, #20]
  51468. 80154cc: 2b00 cmp r3, #0
  51469. 80154ce: d00d beq.n 80154ec <xTimerCreate+0x38>
  51470. {
  51471. /* Status is thus far zero as the timer is not created statically
  51472. and has not been started. The auto-reload bit may get set in
  51473. prvInitialiseNewTimer. */
  51474. pxNewTimer->ucStatus = 0x00;
  51475. 80154d0: 697b ldr r3, [r7, #20]
  51476. 80154d2: 2200 movs r2, #0
  51477. 80154d4: f883 2028 strb.w r2, [r3, #40] @ 0x28
  51478. prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer );
  51479. 80154d8: 697b ldr r3, [r7, #20]
  51480. 80154da: 9301 str r3, [sp, #4]
  51481. 80154dc: 6a3b ldr r3, [r7, #32]
  51482. 80154de: 9300 str r3, [sp, #0]
  51483. 80154e0: 683b ldr r3, [r7, #0]
  51484. 80154e2: 687a ldr r2, [r7, #4]
  51485. 80154e4: 68b9 ldr r1, [r7, #8]
  51486. 80154e6: 68f8 ldr r0, [r7, #12]
  51487. 80154e8: f000 f845 bl 8015576 <prvInitialiseNewTimer>
  51488. }
  51489. return pxNewTimer;
  51490. 80154ec: 697b ldr r3, [r7, #20]
  51491. }
  51492. 80154ee: 4618 mov r0, r3
  51493. 80154f0: 3718 adds r7, #24
  51494. 80154f2: 46bd mov sp, r7
  51495. 80154f4: bd80 pop {r7, pc}
  51496. 080154f6 <xTimerCreateStatic>:
  51497. const TickType_t xTimerPeriodInTicks,
  51498. const UBaseType_t uxAutoReload,
  51499. void * const pvTimerID,
  51500. TimerCallbackFunction_t pxCallbackFunction,
  51501. StaticTimer_t *pxTimerBuffer )
  51502. {
  51503. 80154f6: b580 push {r7, lr}
  51504. 80154f8: b08a sub sp, #40 @ 0x28
  51505. 80154fa: af02 add r7, sp, #8
  51506. 80154fc: 60f8 str r0, [r7, #12]
  51507. 80154fe: 60b9 str r1, [r7, #8]
  51508. 8015500: 607a str r2, [r7, #4]
  51509. 8015502: 603b str r3, [r7, #0]
  51510. #if( configASSERT_DEFINED == 1 )
  51511. {
  51512. /* Sanity check that the size of the structure used to declare a
  51513. variable of type StaticTimer_t equals the size of the real timer
  51514. structure. */
  51515. volatile size_t xSize = sizeof( StaticTimer_t );
  51516. 8015504: 232c movs r3, #44 @ 0x2c
  51517. 8015506: 613b str r3, [r7, #16]
  51518. configASSERT( xSize == sizeof( Timer_t ) );
  51519. 8015508: 693b ldr r3, [r7, #16]
  51520. 801550a: 2b2c cmp r3, #44 @ 0x2c
  51521. 801550c: d00b beq.n 8015526 <xTimerCreateStatic+0x30>
  51522. __asm volatile
  51523. 801550e: f04f 0350 mov.w r3, #80 @ 0x50
  51524. 8015512: f383 8811 msr BASEPRI, r3
  51525. 8015516: f3bf 8f6f isb sy
  51526. 801551a: f3bf 8f4f dsb sy
  51527. 801551e: 61bb str r3, [r7, #24]
  51528. }
  51529. 8015520: bf00 nop
  51530. 8015522: bf00 nop
  51531. 8015524: e7fd b.n 8015522 <xTimerCreateStatic+0x2c>
  51532. ( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */
  51533. 8015526: 693b ldr r3, [r7, #16]
  51534. }
  51535. #endif /* configASSERT_DEFINED */
  51536. /* A pointer to a StaticTimer_t structure MUST be provided, use it. */
  51537. configASSERT( pxTimerBuffer );
  51538. 8015528: 6afb ldr r3, [r7, #44] @ 0x2c
  51539. 801552a: 2b00 cmp r3, #0
  51540. 801552c: d10b bne.n 8015546 <xTimerCreateStatic+0x50>
  51541. __asm volatile
  51542. 801552e: f04f 0350 mov.w r3, #80 @ 0x50
  51543. 8015532: f383 8811 msr BASEPRI, r3
  51544. 8015536: f3bf 8f6f isb sy
  51545. 801553a: f3bf 8f4f dsb sy
  51546. 801553e: 617b str r3, [r7, #20]
  51547. }
  51548. 8015540: bf00 nop
  51549. 8015542: bf00 nop
  51550. 8015544: e7fd b.n 8015542 <xTimerCreateStatic+0x4c>
  51551. pxNewTimer = ( Timer_t * ) pxTimerBuffer; /*lint !e740 !e9087 StaticTimer_t is a pointer to a Timer_t, so guaranteed to be aligned and sized correctly (checked by an assert()), so this is safe. */
  51552. 8015546: 6afb ldr r3, [r7, #44] @ 0x2c
  51553. 8015548: 61fb str r3, [r7, #28]
  51554. if( pxNewTimer != NULL )
  51555. 801554a: 69fb ldr r3, [r7, #28]
  51556. 801554c: 2b00 cmp r3, #0
  51557. 801554e: d00d beq.n 801556c <xTimerCreateStatic+0x76>
  51558. {
  51559. /* Timers can be created statically or dynamically so note this
  51560. timer was created statically in case it is later deleted. The
  51561. auto-reload bit may get set in prvInitialiseNewTimer(). */
  51562. pxNewTimer->ucStatus = tmrSTATUS_IS_STATICALLY_ALLOCATED;
  51563. 8015550: 69fb ldr r3, [r7, #28]
  51564. 8015552: 2202 movs r2, #2
  51565. 8015554: f883 2028 strb.w r2, [r3, #40] @ 0x28
  51566. prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer );
  51567. 8015558: 69fb ldr r3, [r7, #28]
  51568. 801555a: 9301 str r3, [sp, #4]
  51569. 801555c: 6abb ldr r3, [r7, #40] @ 0x28
  51570. 801555e: 9300 str r3, [sp, #0]
  51571. 8015560: 683b ldr r3, [r7, #0]
  51572. 8015562: 687a ldr r2, [r7, #4]
  51573. 8015564: 68b9 ldr r1, [r7, #8]
  51574. 8015566: 68f8 ldr r0, [r7, #12]
  51575. 8015568: f000 f805 bl 8015576 <prvInitialiseNewTimer>
  51576. }
  51577. return pxNewTimer;
  51578. 801556c: 69fb ldr r3, [r7, #28]
  51579. }
  51580. 801556e: 4618 mov r0, r3
  51581. 8015570: 3720 adds r7, #32
  51582. 8015572: 46bd mov sp, r7
  51583. 8015574: bd80 pop {r7, pc}
  51584. 08015576 <prvInitialiseNewTimer>:
  51585. const TickType_t xTimerPeriodInTicks,
  51586. const UBaseType_t uxAutoReload,
  51587. void * const pvTimerID,
  51588. TimerCallbackFunction_t pxCallbackFunction,
  51589. Timer_t *pxNewTimer )
  51590. {
  51591. 8015576: b580 push {r7, lr}
  51592. 8015578: b086 sub sp, #24
  51593. 801557a: af00 add r7, sp, #0
  51594. 801557c: 60f8 str r0, [r7, #12]
  51595. 801557e: 60b9 str r1, [r7, #8]
  51596. 8015580: 607a str r2, [r7, #4]
  51597. 8015582: 603b str r3, [r7, #0]
  51598. /* 0 is not a valid value for xTimerPeriodInTicks. */
  51599. configASSERT( ( xTimerPeriodInTicks > 0 ) );
  51600. 8015584: 68bb ldr r3, [r7, #8]
  51601. 8015586: 2b00 cmp r3, #0
  51602. 8015588: d10b bne.n 80155a2 <prvInitialiseNewTimer+0x2c>
  51603. __asm volatile
  51604. 801558a: f04f 0350 mov.w r3, #80 @ 0x50
  51605. 801558e: f383 8811 msr BASEPRI, r3
  51606. 8015592: f3bf 8f6f isb sy
  51607. 8015596: f3bf 8f4f dsb sy
  51608. 801559a: 617b str r3, [r7, #20]
  51609. }
  51610. 801559c: bf00 nop
  51611. 801559e: bf00 nop
  51612. 80155a0: e7fd b.n 801559e <prvInitialiseNewTimer+0x28>
  51613. if( pxNewTimer != NULL )
  51614. 80155a2: 6a7b ldr r3, [r7, #36] @ 0x24
  51615. 80155a4: 2b00 cmp r3, #0
  51616. 80155a6: d01e beq.n 80155e6 <prvInitialiseNewTimer+0x70>
  51617. {
  51618. /* Ensure the infrastructure used by the timer service task has been
  51619. created/initialised. */
  51620. prvCheckForValidListAndQueue();
  51621. 80155a8: f000 faf2 bl 8015b90 <prvCheckForValidListAndQueue>
  51622. /* Initialise the timer structure members using the function
  51623. parameters. */
  51624. pxNewTimer->pcTimerName = pcTimerName;
  51625. 80155ac: 6a7b ldr r3, [r7, #36] @ 0x24
  51626. 80155ae: 68fa ldr r2, [r7, #12]
  51627. 80155b0: 601a str r2, [r3, #0]
  51628. pxNewTimer->xTimerPeriodInTicks = xTimerPeriodInTicks;
  51629. 80155b2: 6a7b ldr r3, [r7, #36] @ 0x24
  51630. 80155b4: 68ba ldr r2, [r7, #8]
  51631. 80155b6: 619a str r2, [r3, #24]
  51632. pxNewTimer->pvTimerID = pvTimerID;
  51633. 80155b8: 6a7b ldr r3, [r7, #36] @ 0x24
  51634. 80155ba: 683a ldr r2, [r7, #0]
  51635. 80155bc: 61da str r2, [r3, #28]
  51636. pxNewTimer->pxCallbackFunction = pxCallbackFunction;
  51637. 80155be: 6a7b ldr r3, [r7, #36] @ 0x24
  51638. 80155c0: 6a3a ldr r2, [r7, #32]
  51639. 80155c2: 621a str r2, [r3, #32]
  51640. vListInitialiseItem( &( pxNewTimer->xTimerListItem ) );
  51641. 80155c4: 6a7b ldr r3, [r7, #36] @ 0x24
  51642. 80155c6: 3304 adds r3, #4
  51643. 80155c8: 4618 mov r0, r3
  51644. 80155ca: f7fd fa91 bl 8012af0 <vListInitialiseItem>
  51645. if( uxAutoReload != pdFALSE )
  51646. 80155ce: 687b ldr r3, [r7, #4]
  51647. 80155d0: 2b00 cmp r3, #0
  51648. 80155d2: d008 beq.n 80155e6 <prvInitialiseNewTimer+0x70>
  51649. {
  51650. pxNewTimer->ucStatus |= tmrSTATUS_IS_AUTORELOAD;
  51651. 80155d4: 6a7b ldr r3, [r7, #36] @ 0x24
  51652. 80155d6: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  51653. 80155da: f043 0304 orr.w r3, r3, #4
  51654. 80155de: b2da uxtb r2, r3
  51655. 80155e0: 6a7b ldr r3, [r7, #36] @ 0x24
  51656. 80155e2: f883 2028 strb.w r2, [r3, #40] @ 0x28
  51657. }
  51658. traceTIMER_CREATE( pxNewTimer );
  51659. }
  51660. }
  51661. 80155e6: bf00 nop
  51662. 80155e8: 3718 adds r7, #24
  51663. 80155ea: 46bd mov sp, r7
  51664. 80155ec: bd80 pop {r7, pc}
  51665. ...
  51666. 080155f0 <xTimerGenericCommand>:
  51667. /*-----------------------------------------------------------*/
  51668. BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait )
  51669. {
  51670. 80155f0: b580 push {r7, lr}
  51671. 80155f2: b08a sub sp, #40 @ 0x28
  51672. 80155f4: af00 add r7, sp, #0
  51673. 80155f6: 60f8 str r0, [r7, #12]
  51674. 80155f8: 60b9 str r1, [r7, #8]
  51675. 80155fa: 607a str r2, [r7, #4]
  51676. 80155fc: 603b str r3, [r7, #0]
  51677. BaseType_t xReturn = pdFAIL;
  51678. 80155fe: 2300 movs r3, #0
  51679. 8015600: 627b str r3, [r7, #36] @ 0x24
  51680. DaemonTaskMessage_t xMessage;
  51681. configASSERT( xTimer );
  51682. 8015602: 68fb ldr r3, [r7, #12]
  51683. 8015604: 2b00 cmp r3, #0
  51684. 8015606: d10b bne.n 8015620 <xTimerGenericCommand+0x30>
  51685. __asm volatile
  51686. 8015608: f04f 0350 mov.w r3, #80 @ 0x50
  51687. 801560c: f383 8811 msr BASEPRI, r3
  51688. 8015610: f3bf 8f6f isb sy
  51689. 8015614: f3bf 8f4f dsb sy
  51690. 8015618: 623b str r3, [r7, #32]
  51691. }
  51692. 801561a: bf00 nop
  51693. 801561c: bf00 nop
  51694. 801561e: e7fd b.n 801561c <xTimerGenericCommand+0x2c>
  51695. /* Send a message to the timer service task to perform a particular action
  51696. on a particular timer definition. */
  51697. if( xTimerQueue != NULL )
  51698. 8015620: 4b19 ldr r3, [pc, #100] @ (8015688 <xTimerGenericCommand+0x98>)
  51699. 8015622: 681b ldr r3, [r3, #0]
  51700. 8015624: 2b00 cmp r3, #0
  51701. 8015626: d02a beq.n 801567e <xTimerGenericCommand+0x8e>
  51702. {
  51703. /* Send a command to the timer service task to start the xTimer timer. */
  51704. xMessage.xMessageID = xCommandID;
  51705. 8015628: 68bb ldr r3, [r7, #8]
  51706. 801562a: 613b str r3, [r7, #16]
  51707. xMessage.u.xTimerParameters.xMessageValue = xOptionalValue;
  51708. 801562c: 687b ldr r3, [r7, #4]
  51709. 801562e: 617b str r3, [r7, #20]
  51710. xMessage.u.xTimerParameters.pxTimer = xTimer;
  51711. 8015630: 68fb ldr r3, [r7, #12]
  51712. 8015632: 61bb str r3, [r7, #24]
  51713. if( xCommandID < tmrFIRST_FROM_ISR_COMMAND )
  51714. 8015634: 68bb ldr r3, [r7, #8]
  51715. 8015636: 2b05 cmp r3, #5
  51716. 8015638: dc18 bgt.n 801566c <xTimerGenericCommand+0x7c>
  51717. {
  51718. if( xTaskGetSchedulerState() == taskSCHEDULER_RUNNING )
  51719. 801563a: f7ff fae1 bl 8014c00 <xTaskGetSchedulerState>
  51720. 801563e: 4603 mov r3, r0
  51721. 8015640: 2b02 cmp r3, #2
  51722. 8015642: d109 bne.n 8015658 <xTimerGenericCommand+0x68>
  51723. {
  51724. xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait );
  51725. 8015644: 4b10 ldr r3, [pc, #64] @ (8015688 <xTimerGenericCommand+0x98>)
  51726. 8015646: 6818 ldr r0, [r3, #0]
  51727. 8015648: f107 0110 add.w r1, r7, #16
  51728. 801564c: 2300 movs r3, #0
  51729. 801564e: 6b3a ldr r2, [r7, #48] @ 0x30
  51730. 8015650: f7fd fce0 bl 8013014 <xQueueGenericSend>
  51731. 8015654: 6278 str r0, [r7, #36] @ 0x24
  51732. 8015656: e012 b.n 801567e <xTimerGenericCommand+0x8e>
  51733. }
  51734. else
  51735. {
  51736. xReturn = xQueueSendToBack( xTimerQueue, &xMessage, tmrNO_DELAY );
  51737. 8015658: 4b0b ldr r3, [pc, #44] @ (8015688 <xTimerGenericCommand+0x98>)
  51738. 801565a: 6818 ldr r0, [r3, #0]
  51739. 801565c: f107 0110 add.w r1, r7, #16
  51740. 8015660: 2300 movs r3, #0
  51741. 8015662: 2200 movs r2, #0
  51742. 8015664: f7fd fcd6 bl 8013014 <xQueueGenericSend>
  51743. 8015668: 6278 str r0, [r7, #36] @ 0x24
  51744. 801566a: e008 b.n 801567e <xTimerGenericCommand+0x8e>
  51745. }
  51746. }
  51747. else
  51748. {
  51749. xReturn = xQueueSendToBackFromISR( xTimerQueue, &xMessage, pxHigherPriorityTaskWoken );
  51750. 801566c: 4b06 ldr r3, [pc, #24] @ (8015688 <xTimerGenericCommand+0x98>)
  51751. 801566e: 6818 ldr r0, [r3, #0]
  51752. 8015670: f107 0110 add.w r1, r7, #16
  51753. 8015674: 2300 movs r3, #0
  51754. 8015676: 683a ldr r2, [r7, #0]
  51755. 8015678: f7fd fdce bl 8013218 <xQueueGenericSendFromISR>
  51756. 801567c: 6278 str r0, [r7, #36] @ 0x24
  51757. else
  51758. {
  51759. mtCOVERAGE_TEST_MARKER();
  51760. }
  51761. return xReturn;
  51762. 801567e: 6a7b ldr r3, [r7, #36] @ 0x24
  51763. }
  51764. 8015680: 4618 mov r0, r3
  51765. 8015682: 3728 adds r7, #40 @ 0x28
  51766. 8015684: 46bd mov sp, r7
  51767. 8015686: bd80 pop {r7, pc}
  51768. 8015688: 24002ad4 .word 0x24002ad4
  51769. 0801568c <prvProcessExpiredTimer>:
  51770. return pxTimer->pcTimerName;
  51771. }
  51772. /*-----------------------------------------------------------*/
  51773. static void prvProcessExpiredTimer( const TickType_t xNextExpireTime, const TickType_t xTimeNow )
  51774. {
  51775. 801568c: b580 push {r7, lr}
  51776. 801568e: b088 sub sp, #32
  51777. 8015690: af02 add r7, sp, #8
  51778. 8015692: 6078 str r0, [r7, #4]
  51779. 8015694: 6039 str r1, [r7, #0]
  51780. BaseType_t xResult;
  51781. 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. */
  51782. 8015696: 4b23 ldr r3, [pc, #140] @ (8015724 <prvProcessExpiredTimer+0x98>)
  51783. 8015698: 681b ldr r3, [r3, #0]
  51784. 801569a: 68db ldr r3, [r3, #12]
  51785. 801569c: 68db ldr r3, [r3, #12]
  51786. 801569e: 617b str r3, [r7, #20]
  51787. /* Remove the timer from the list of active timers. A check has already
  51788. been performed to ensure the list is not empty. */
  51789. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  51790. 80156a0: 697b ldr r3, [r7, #20]
  51791. 80156a2: 3304 adds r3, #4
  51792. 80156a4: 4618 mov r0, r3
  51793. 80156a6: f7fd fa8d bl 8012bc4 <uxListRemove>
  51794. traceTIMER_EXPIRED( pxTimer );
  51795. /* If the timer is an auto-reload timer then calculate the next
  51796. expiry time and re-insert the timer in the list of active timers. */
  51797. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  51798. 80156aa: 697b ldr r3, [r7, #20]
  51799. 80156ac: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  51800. 80156b0: f003 0304 and.w r3, r3, #4
  51801. 80156b4: 2b00 cmp r3, #0
  51802. 80156b6: d023 beq.n 8015700 <prvProcessExpiredTimer+0x74>
  51803. {
  51804. /* The timer is inserted into a list using a time relative to anything
  51805. other than the current time. It will therefore be inserted into the
  51806. correct list relative to the time this task thinks it is now. */
  51807. if( prvInsertTimerInActiveList( pxTimer, ( xNextExpireTime + pxTimer->xTimerPeriodInTicks ), xTimeNow, xNextExpireTime ) != pdFALSE )
  51808. 80156b8: 697b ldr r3, [r7, #20]
  51809. 80156ba: 699a ldr r2, [r3, #24]
  51810. 80156bc: 687b ldr r3, [r7, #4]
  51811. 80156be: 18d1 adds r1, r2, r3
  51812. 80156c0: 687b ldr r3, [r7, #4]
  51813. 80156c2: 683a ldr r2, [r7, #0]
  51814. 80156c4: 6978 ldr r0, [r7, #20]
  51815. 80156c6: f000 f8d5 bl 8015874 <prvInsertTimerInActiveList>
  51816. 80156ca: 4603 mov r3, r0
  51817. 80156cc: 2b00 cmp r3, #0
  51818. 80156ce: d020 beq.n 8015712 <prvProcessExpiredTimer+0x86>
  51819. {
  51820. /* The timer expired before it was added to the active timer
  51821. list. Reload it now. */
  51822. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY );
  51823. 80156d0: 2300 movs r3, #0
  51824. 80156d2: 9300 str r3, [sp, #0]
  51825. 80156d4: 2300 movs r3, #0
  51826. 80156d6: 687a ldr r2, [r7, #4]
  51827. 80156d8: 2100 movs r1, #0
  51828. 80156da: 6978 ldr r0, [r7, #20]
  51829. 80156dc: f7ff ff88 bl 80155f0 <xTimerGenericCommand>
  51830. 80156e0: 6138 str r0, [r7, #16]
  51831. configASSERT( xResult );
  51832. 80156e2: 693b ldr r3, [r7, #16]
  51833. 80156e4: 2b00 cmp r3, #0
  51834. 80156e6: d114 bne.n 8015712 <prvProcessExpiredTimer+0x86>
  51835. __asm volatile
  51836. 80156e8: f04f 0350 mov.w r3, #80 @ 0x50
  51837. 80156ec: f383 8811 msr BASEPRI, r3
  51838. 80156f0: f3bf 8f6f isb sy
  51839. 80156f4: f3bf 8f4f dsb sy
  51840. 80156f8: 60fb str r3, [r7, #12]
  51841. }
  51842. 80156fa: bf00 nop
  51843. 80156fc: bf00 nop
  51844. 80156fe: e7fd b.n 80156fc <prvProcessExpiredTimer+0x70>
  51845. mtCOVERAGE_TEST_MARKER();
  51846. }
  51847. }
  51848. else
  51849. {
  51850. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  51851. 8015700: 697b ldr r3, [r7, #20]
  51852. 8015702: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  51853. 8015706: f023 0301 bic.w r3, r3, #1
  51854. 801570a: b2da uxtb r2, r3
  51855. 801570c: 697b ldr r3, [r7, #20]
  51856. 801570e: f883 2028 strb.w r2, [r3, #40] @ 0x28
  51857. mtCOVERAGE_TEST_MARKER();
  51858. }
  51859. /* Call the timer callback. */
  51860. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  51861. 8015712: 697b ldr r3, [r7, #20]
  51862. 8015714: 6a1b ldr r3, [r3, #32]
  51863. 8015716: 6978 ldr r0, [r7, #20]
  51864. 8015718: 4798 blx r3
  51865. }
  51866. 801571a: bf00 nop
  51867. 801571c: 3718 adds r7, #24
  51868. 801571e: 46bd mov sp, r7
  51869. 8015720: bd80 pop {r7, pc}
  51870. 8015722: bf00 nop
  51871. 8015724: 24002acc .word 0x24002acc
  51872. 08015728 <prvTimerTask>:
  51873. /*-----------------------------------------------------------*/
  51874. static portTASK_FUNCTION( prvTimerTask, pvParameters )
  51875. {
  51876. 8015728: b580 push {r7, lr}
  51877. 801572a: b084 sub sp, #16
  51878. 801572c: af00 add r7, sp, #0
  51879. 801572e: 6078 str r0, [r7, #4]
  51880. for( ;; )
  51881. {
  51882. /* Query the timers list to see if it contains any timers, and if so,
  51883. obtain the time at which the next timer will expire. */
  51884. xNextExpireTime = prvGetNextExpireTime( &xListWasEmpty );
  51885. 8015730: f107 0308 add.w r3, r7, #8
  51886. 8015734: 4618 mov r0, r3
  51887. 8015736: f000 f859 bl 80157ec <prvGetNextExpireTime>
  51888. 801573a: 60f8 str r0, [r7, #12]
  51889. /* If a timer has expired, process it. Otherwise, block this task
  51890. until either a timer does expire, or a command is received. */
  51891. prvProcessTimerOrBlockTask( xNextExpireTime, xListWasEmpty );
  51892. 801573c: 68bb ldr r3, [r7, #8]
  51893. 801573e: 4619 mov r1, r3
  51894. 8015740: 68f8 ldr r0, [r7, #12]
  51895. 8015742: f000 f805 bl 8015750 <prvProcessTimerOrBlockTask>
  51896. /* Empty the command queue. */
  51897. prvProcessReceivedCommands();
  51898. 8015746: f000 f8d7 bl 80158f8 <prvProcessReceivedCommands>
  51899. xNextExpireTime = prvGetNextExpireTime( &xListWasEmpty );
  51900. 801574a: bf00 nop
  51901. 801574c: e7f0 b.n 8015730 <prvTimerTask+0x8>
  51902. ...
  51903. 08015750 <prvProcessTimerOrBlockTask>:
  51904. }
  51905. }
  51906. /*-----------------------------------------------------------*/
  51907. static void prvProcessTimerOrBlockTask( const TickType_t xNextExpireTime, BaseType_t xListWasEmpty )
  51908. {
  51909. 8015750: b580 push {r7, lr}
  51910. 8015752: b084 sub sp, #16
  51911. 8015754: af00 add r7, sp, #0
  51912. 8015756: 6078 str r0, [r7, #4]
  51913. 8015758: 6039 str r1, [r7, #0]
  51914. TickType_t xTimeNow;
  51915. BaseType_t xTimerListsWereSwitched;
  51916. vTaskSuspendAll();
  51917. 801575a: f7fe fe17 bl 801438c <vTaskSuspendAll>
  51918. /* Obtain the time now to make an assessment as to whether the timer
  51919. has expired or not. If obtaining the time causes the lists to switch
  51920. then don't process this timer as any timers that remained in the list
  51921. when the lists were switched will have been processed within the
  51922. prvSampleTimeNow() function. */
  51923. xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );
  51924. 801575e: f107 0308 add.w r3, r7, #8
  51925. 8015762: 4618 mov r0, r3
  51926. 8015764: f000 f866 bl 8015834 <prvSampleTimeNow>
  51927. 8015768: 60f8 str r0, [r7, #12]
  51928. if( xTimerListsWereSwitched == pdFALSE )
  51929. 801576a: 68bb ldr r3, [r7, #8]
  51930. 801576c: 2b00 cmp r3, #0
  51931. 801576e: d130 bne.n 80157d2 <prvProcessTimerOrBlockTask+0x82>
  51932. {
  51933. /* The tick count has not overflowed, has the timer expired? */
  51934. if( ( xListWasEmpty == pdFALSE ) && ( xNextExpireTime <= xTimeNow ) )
  51935. 8015770: 683b ldr r3, [r7, #0]
  51936. 8015772: 2b00 cmp r3, #0
  51937. 8015774: d10a bne.n 801578c <prvProcessTimerOrBlockTask+0x3c>
  51938. 8015776: 687a ldr r2, [r7, #4]
  51939. 8015778: 68fb ldr r3, [r7, #12]
  51940. 801577a: 429a cmp r2, r3
  51941. 801577c: d806 bhi.n 801578c <prvProcessTimerOrBlockTask+0x3c>
  51942. {
  51943. ( void ) xTaskResumeAll();
  51944. 801577e: f7fe fe13 bl 80143a8 <xTaskResumeAll>
  51945. prvProcessExpiredTimer( xNextExpireTime, xTimeNow );
  51946. 8015782: 68f9 ldr r1, [r7, #12]
  51947. 8015784: 6878 ldr r0, [r7, #4]
  51948. 8015786: f7ff ff81 bl 801568c <prvProcessExpiredTimer>
  51949. else
  51950. {
  51951. ( void ) xTaskResumeAll();
  51952. }
  51953. }
  51954. }
  51955. 801578a: e024 b.n 80157d6 <prvProcessTimerOrBlockTask+0x86>
  51956. if( xListWasEmpty != pdFALSE )
  51957. 801578c: 683b ldr r3, [r7, #0]
  51958. 801578e: 2b00 cmp r3, #0
  51959. 8015790: d008 beq.n 80157a4 <prvProcessTimerOrBlockTask+0x54>
  51960. xListWasEmpty = listLIST_IS_EMPTY( pxOverflowTimerList );
  51961. 8015792: 4b13 ldr r3, [pc, #76] @ (80157e0 <prvProcessTimerOrBlockTask+0x90>)
  51962. 8015794: 681b ldr r3, [r3, #0]
  51963. 8015796: 681b ldr r3, [r3, #0]
  51964. 8015798: 2b00 cmp r3, #0
  51965. 801579a: d101 bne.n 80157a0 <prvProcessTimerOrBlockTask+0x50>
  51966. 801579c: 2301 movs r3, #1
  51967. 801579e: e000 b.n 80157a2 <prvProcessTimerOrBlockTask+0x52>
  51968. 80157a0: 2300 movs r3, #0
  51969. 80157a2: 603b str r3, [r7, #0]
  51970. vQueueWaitForMessageRestricted( xTimerQueue, ( xNextExpireTime - xTimeNow ), xListWasEmpty );
  51971. 80157a4: 4b0f ldr r3, [pc, #60] @ (80157e4 <prvProcessTimerOrBlockTask+0x94>)
  51972. 80157a6: 6818 ldr r0, [r3, #0]
  51973. 80157a8: 687a ldr r2, [r7, #4]
  51974. 80157aa: 68fb ldr r3, [r7, #12]
  51975. 80157ac: 1ad3 subs r3, r2, r3
  51976. 80157ae: 683a ldr r2, [r7, #0]
  51977. 80157b0: 4619 mov r1, r3
  51978. 80157b2: f7fe f995 bl 8013ae0 <vQueueWaitForMessageRestricted>
  51979. if( xTaskResumeAll() == pdFALSE )
  51980. 80157b6: f7fe fdf7 bl 80143a8 <xTaskResumeAll>
  51981. 80157ba: 4603 mov r3, r0
  51982. 80157bc: 2b00 cmp r3, #0
  51983. 80157be: d10a bne.n 80157d6 <prvProcessTimerOrBlockTask+0x86>
  51984. portYIELD_WITHIN_API();
  51985. 80157c0: 4b09 ldr r3, [pc, #36] @ (80157e8 <prvProcessTimerOrBlockTask+0x98>)
  51986. 80157c2: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  51987. 80157c6: 601a str r2, [r3, #0]
  51988. 80157c8: f3bf 8f4f dsb sy
  51989. 80157cc: f3bf 8f6f isb sy
  51990. }
  51991. 80157d0: e001 b.n 80157d6 <prvProcessTimerOrBlockTask+0x86>
  51992. ( void ) xTaskResumeAll();
  51993. 80157d2: f7fe fde9 bl 80143a8 <xTaskResumeAll>
  51994. }
  51995. 80157d6: bf00 nop
  51996. 80157d8: 3710 adds r7, #16
  51997. 80157da: 46bd mov sp, r7
  51998. 80157dc: bd80 pop {r7, pc}
  51999. 80157de: bf00 nop
  52000. 80157e0: 24002ad0 .word 0x24002ad0
  52001. 80157e4: 24002ad4 .word 0x24002ad4
  52002. 80157e8: e000ed04 .word 0xe000ed04
  52003. 080157ec <prvGetNextExpireTime>:
  52004. /*-----------------------------------------------------------*/
  52005. static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty )
  52006. {
  52007. 80157ec: b480 push {r7}
  52008. 80157ee: b085 sub sp, #20
  52009. 80157f0: af00 add r7, sp, #0
  52010. 80157f2: 6078 str r0, [r7, #4]
  52011. the timer with the nearest expiry time will expire. If there are no
  52012. active timers then just set the next expire time to 0. That will cause
  52013. this task to unblock when the tick count overflows, at which point the
  52014. timer lists will be switched and the next expiry time can be
  52015. re-assessed. */
  52016. *pxListWasEmpty = listLIST_IS_EMPTY( pxCurrentTimerList );
  52017. 80157f4: 4b0e ldr r3, [pc, #56] @ (8015830 <prvGetNextExpireTime+0x44>)
  52018. 80157f6: 681b ldr r3, [r3, #0]
  52019. 80157f8: 681b ldr r3, [r3, #0]
  52020. 80157fa: 2b00 cmp r3, #0
  52021. 80157fc: d101 bne.n 8015802 <prvGetNextExpireTime+0x16>
  52022. 80157fe: 2201 movs r2, #1
  52023. 8015800: e000 b.n 8015804 <prvGetNextExpireTime+0x18>
  52024. 8015802: 2200 movs r2, #0
  52025. 8015804: 687b ldr r3, [r7, #4]
  52026. 8015806: 601a str r2, [r3, #0]
  52027. if( *pxListWasEmpty == pdFALSE )
  52028. 8015808: 687b ldr r3, [r7, #4]
  52029. 801580a: 681b ldr r3, [r3, #0]
  52030. 801580c: 2b00 cmp r3, #0
  52031. 801580e: d105 bne.n 801581c <prvGetNextExpireTime+0x30>
  52032. {
  52033. xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );
  52034. 8015810: 4b07 ldr r3, [pc, #28] @ (8015830 <prvGetNextExpireTime+0x44>)
  52035. 8015812: 681b ldr r3, [r3, #0]
  52036. 8015814: 68db ldr r3, [r3, #12]
  52037. 8015816: 681b ldr r3, [r3, #0]
  52038. 8015818: 60fb str r3, [r7, #12]
  52039. 801581a: e001 b.n 8015820 <prvGetNextExpireTime+0x34>
  52040. }
  52041. else
  52042. {
  52043. /* Ensure the task unblocks when the tick count rolls over. */
  52044. xNextExpireTime = ( TickType_t ) 0U;
  52045. 801581c: 2300 movs r3, #0
  52046. 801581e: 60fb str r3, [r7, #12]
  52047. }
  52048. return xNextExpireTime;
  52049. 8015820: 68fb ldr r3, [r7, #12]
  52050. }
  52051. 8015822: 4618 mov r0, r3
  52052. 8015824: 3714 adds r7, #20
  52053. 8015826: 46bd mov sp, r7
  52054. 8015828: f85d 7b04 ldr.w r7, [sp], #4
  52055. 801582c: 4770 bx lr
  52056. 801582e: bf00 nop
  52057. 8015830: 24002acc .word 0x24002acc
  52058. 08015834 <prvSampleTimeNow>:
  52059. /*-----------------------------------------------------------*/
  52060. static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched )
  52061. {
  52062. 8015834: b580 push {r7, lr}
  52063. 8015836: b084 sub sp, #16
  52064. 8015838: af00 add r7, sp, #0
  52065. 801583a: 6078 str r0, [r7, #4]
  52066. TickType_t xTimeNow;
  52067. PRIVILEGED_DATA static TickType_t xLastTime = ( TickType_t ) 0U; /*lint !e956 Variable is only accessible to one task. */
  52068. xTimeNow = xTaskGetTickCount();
  52069. 801583c: f7fe fe52 bl 80144e4 <xTaskGetTickCount>
  52070. 8015840: 60f8 str r0, [r7, #12]
  52071. if( xTimeNow < xLastTime )
  52072. 8015842: 4b0b ldr r3, [pc, #44] @ (8015870 <prvSampleTimeNow+0x3c>)
  52073. 8015844: 681b ldr r3, [r3, #0]
  52074. 8015846: 68fa ldr r2, [r7, #12]
  52075. 8015848: 429a cmp r2, r3
  52076. 801584a: d205 bcs.n 8015858 <prvSampleTimeNow+0x24>
  52077. {
  52078. prvSwitchTimerLists();
  52079. 801584c: f000 f93a bl 8015ac4 <prvSwitchTimerLists>
  52080. *pxTimerListsWereSwitched = pdTRUE;
  52081. 8015850: 687b ldr r3, [r7, #4]
  52082. 8015852: 2201 movs r2, #1
  52083. 8015854: 601a str r2, [r3, #0]
  52084. 8015856: e002 b.n 801585e <prvSampleTimeNow+0x2a>
  52085. }
  52086. else
  52087. {
  52088. *pxTimerListsWereSwitched = pdFALSE;
  52089. 8015858: 687b ldr r3, [r7, #4]
  52090. 801585a: 2200 movs r2, #0
  52091. 801585c: 601a str r2, [r3, #0]
  52092. }
  52093. xLastTime = xTimeNow;
  52094. 801585e: 4a04 ldr r2, [pc, #16] @ (8015870 <prvSampleTimeNow+0x3c>)
  52095. 8015860: 68fb ldr r3, [r7, #12]
  52096. 8015862: 6013 str r3, [r2, #0]
  52097. return xTimeNow;
  52098. 8015864: 68fb ldr r3, [r7, #12]
  52099. }
  52100. 8015866: 4618 mov r0, r3
  52101. 8015868: 3710 adds r7, #16
  52102. 801586a: 46bd mov sp, r7
  52103. 801586c: bd80 pop {r7, pc}
  52104. 801586e: bf00 nop
  52105. 8015870: 24002adc .word 0x24002adc
  52106. 08015874 <prvInsertTimerInActiveList>:
  52107. /*-----------------------------------------------------------*/
  52108. static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer, const TickType_t xNextExpiryTime, const TickType_t xTimeNow, const TickType_t xCommandTime )
  52109. {
  52110. 8015874: b580 push {r7, lr}
  52111. 8015876: b086 sub sp, #24
  52112. 8015878: af00 add r7, sp, #0
  52113. 801587a: 60f8 str r0, [r7, #12]
  52114. 801587c: 60b9 str r1, [r7, #8]
  52115. 801587e: 607a str r2, [r7, #4]
  52116. 8015880: 603b str r3, [r7, #0]
  52117. BaseType_t xProcessTimerNow = pdFALSE;
  52118. 8015882: 2300 movs r3, #0
  52119. 8015884: 617b str r3, [r7, #20]
  52120. listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xNextExpiryTime );
  52121. 8015886: 68fb ldr r3, [r7, #12]
  52122. 8015888: 68ba ldr r2, [r7, #8]
  52123. 801588a: 605a str r2, [r3, #4]
  52124. listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );
  52125. 801588c: 68fb ldr r3, [r7, #12]
  52126. 801588e: 68fa ldr r2, [r7, #12]
  52127. 8015890: 611a str r2, [r3, #16]
  52128. if( xNextExpiryTime <= xTimeNow )
  52129. 8015892: 68ba ldr r2, [r7, #8]
  52130. 8015894: 687b ldr r3, [r7, #4]
  52131. 8015896: 429a cmp r2, r3
  52132. 8015898: d812 bhi.n 80158c0 <prvInsertTimerInActiveList+0x4c>
  52133. {
  52134. /* Has the expiry time elapsed between the command to start/reset a
  52135. timer was issued, and the time the command was processed? */
  52136. if( ( ( TickType_t ) ( xTimeNow - xCommandTime ) ) >= pxTimer->xTimerPeriodInTicks ) /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  52137. 801589a: 687a ldr r2, [r7, #4]
  52138. 801589c: 683b ldr r3, [r7, #0]
  52139. 801589e: 1ad2 subs r2, r2, r3
  52140. 80158a0: 68fb ldr r3, [r7, #12]
  52141. 80158a2: 699b ldr r3, [r3, #24]
  52142. 80158a4: 429a cmp r2, r3
  52143. 80158a6: d302 bcc.n 80158ae <prvInsertTimerInActiveList+0x3a>
  52144. {
  52145. /* The time between a command being issued and the command being
  52146. processed actually exceeds the timers period. */
  52147. xProcessTimerNow = pdTRUE;
  52148. 80158a8: 2301 movs r3, #1
  52149. 80158aa: 617b str r3, [r7, #20]
  52150. 80158ac: e01b b.n 80158e6 <prvInsertTimerInActiveList+0x72>
  52151. }
  52152. else
  52153. {
  52154. vListInsert( pxOverflowTimerList, &( pxTimer->xTimerListItem ) );
  52155. 80158ae: 4b10 ldr r3, [pc, #64] @ (80158f0 <prvInsertTimerInActiveList+0x7c>)
  52156. 80158b0: 681a ldr r2, [r3, #0]
  52157. 80158b2: 68fb ldr r3, [r7, #12]
  52158. 80158b4: 3304 adds r3, #4
  52159. 80158b6: 4619 mov r1, r3
  52160. 80158b8: 4610 mov r0, r2
  52161. 80158ba: f7fd f94a bl 8012b52 <vListInsert>
  52162. 80158be: e012 b.n 80158e6 <prvInsertTimerInActiveList+0x72>
  52163. }
  52164. }
  52165. else
  52166. {
  52167. if( ( xTimeNow < xCommandTime ) && ( xNextExpiryTime >= xCommandTime ) )
  52168. 80158c0: 687a ldr r2, [r7, #4]
  52169. 80158c2: 683b ldr r3, [r7, #0]
  52170. 80158c4: 429a cmp r2, r3
  52171. 80158c6: d206 bcs.n 80158d6 <prvInsertTimerInActiveList+0x62>
  52172. 80158c8: 68ba ldr r2, [r7, #8]
  52173. 80158ca: 683b ldr r3, [r7, #0]
  52174. 80158cc: 429a cmp r2, r3
  52175. 80158ce: d302 bcc.n 80158d6 <prvInsertTimerInActiveList+0x62>
  52176. {
  52177. /* If, since the command was issued, the tick count has overflowed
  52178. but the expiry time has not, then the timer must have already passed
  52179. its expiry time and should be processed immediately. */
  52180. xProcessTimerNow = pdTRUE;
  52181. 80158d0: 2301 movs r3, #1
  52182. 80158d2: 617b str r3, [r7, #20]
  52183. 80158d4: e007 b.n 80158e6 <prvInsertTimerInActiveList+0x72>
  52184. }
  52185. else
  52186. {
  52187. vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );
  52188. 80158d6: 4b07 ldr r3, [pc, #28] @ (80158f4 <prvInsertTimerInActiveList+0x80>)
  52189. 80158d8: 681a ldr r2, [r3, #0]
  52190. 80158da: 68fb ldr r3, [r7, #12]
  52191. 80158dc: 3304 adds r3, #4
  52192. 80158de: 4619 mov r1, r3
  52193. 80158e0: 4610 mov r0, r2
  52194. 80158e2: f7fd f936 bl 8012b52 <vListInsert>
  52195. }
  52196. }
  52197. return xProcessTimerNow;
  52198. 80158e6: 697b ldr r3, [r7, #20]
  52199. }
  52200. 80158e8: 4618 mov r0, r3
  52201. 80158ea: 3718 adds r7, #24
  52202. 80158ec: 46bd mov sp, r7
  52203. 80158ee: bd80 pop {r7, pc}
  52204. 80158f0: 24002ad0 .word 0x24002ad0
  52205. 80158f4: 24002acc .word 0x24002acc
  52206. 080158f8 <prvProcessReceivedCommands>:
  52207. /*-----------------------------------------------------------*/
  52208. static void prvProcessReceivedCommands( void )
  52209. {
  52210. 80158f8: b580 push {r7, lr}
  52211. 80158fa: b08e sub sp, #56 @ 0x38
  52212. 80158fc: af02 add r7, sp, #8
  52213. DaemonTaskMessage_t xMessage;
  52214. Timer_t *pxTimer;
  52215. BaseType_t xTimerListsWereSwitched, xResult;
  52216. TickType_t xTimeNow;
  52217. 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. */
  52218. 80158fe: e0ce b.n 8015a9e <prvProcessReceivedCommands+0x1a6>
  52219. {
  52220. #if ( INCLUDE_xTimerPendFunctionCall == 1 )
  52221. {
  52222. /* Negative commands are pended function calls rather than timer
  52223. commands. */
  52224. if( xMessage.xMessageID < ( BaseType_t ) 0 )
  52225. 8015900: 687b ldr r3, [r7, #4]
  52226. 8015902: 2b00 cmp r3, #0
  52227. 8015904: da19 bge.n 801593a <prvProcessReceivedCommands+0x42>
  52228. {
  52229. const CallbackParameters_t * const pxCallback = &( xMessage.u.xCallbackParameters );
  52230. 8015906: 1d3b adds r3, r7, #4
  52231. 8015908: 3304 adds r3, #4
  52232. 801590a: 62fb str r3, [r7, #44] @ 0x2c
  52233. /* The timer uses the xCallbackParameters member to request a
  52234. callback be executed. Check the callback is not NULL. */
  52235. configASSERT( pxCallback );
  52236. 801590c: 6afb ldr r3, [r7, #44] @ 0x2c
  52237. 801590e: 2b00 cmp r3, #0
  52238. 8015910: d10b bne.n 801592a <prvProcessReceivedCommands+0x32>
  52239. __asm volatile
  52240. 8015912: f04f 0350 mov.w r3, #80 @ 0x50
  52241. 8015916: f383 8811 msr BASEPRI, r3
  52242. 801591a: f3bf 8f6f isb sy
  52243. 801591e: f3bf 8f4f dsb sy
  52244. 8015922: 61fb str r3, [r7, #28]
  52245. }
  52246. 8015924: bf00 nop
  52247. 8015926: bf00 nop
  52248. 8015928: e7fd b.n 8015926 <prvProcessReceivedCommands+0x2e>
  52249. /* Call the function. */
  52250. pxCallback->pxCallbackFunction( pxCallback->pvParameter1, pxCallback->ulParameter2 );
  52251. 801592a: 6afb ldr r3, [r7, #44] @ 0x2c
  52252. 801592c: 681b ldr r3, [r3, #0]
  52253. 801592e: 6afa ldr r2, [r7, #44] @ 0x2c
  52254. 8015930: 6850 ldr r0, [r2, #4]
  52255. 8015932: 6afa ldr r2, [r7, #44] @ 0x2c
  52256. 8015934: 6892 ldr r2, [r2, #8]
  52257. 8015936: 4611 mov r1, r2
  52258. 8015938: 4798 blx r3
  52259. }
  52260. #endif /* INCLUDE_xTimerPendFunctionCall */
  52261. /* Commands that are positive are timer commands rather than pended
  52262. function calls. */
  52263. if( xMessage.xMessageID >= ( BaseType_t ) 0 )
  52264. 801593a: 687b ldr r3, [r7, #4]
  52265. 801593c: 2b00 cmp r3, #0
  52266. 801593e: f2c0 80ae blt.w 8015a9e <prvProcessReceivedCommands+0x1a6>
  52267. {
  52268. /* The messages uses the xTimerParameters member to work on a
  52269. software timer. */
  52270. pxTimer = xMessage.u.xTimerParameters.pxTimer;
  52271. 8015942: 68fb ldr r3, [r7, #12]
  52272. 8015944: 62bb str r3, [r7, #40] @ 0x28
  52273. if( listIS_CONTAINED_WITHIN( NULL, &( pxTimer->xTimerListItem ) ) == pdFALSE ) /*lint !e961. The cast is only redundant when NULL is passed into the macro. */
  52274. 8015946: 6abb ldr r3, [r7, #40] @ 0x28
  52275. 8015948: 695b ldr r3, [r3, #20]
  52276. 801594a: 2b00 cmp r3, #0
  52277. 801594c: d004 beq.n 8015958 <prvProcessReceivedCommands+0x60>
  52278. {
  52279. /* The timer is in a list, remove it. */
  52280. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  52281. 801594e: 6abb ldr r3, [r7, #40] @ 0x28
  52282. 8015950: 3304 adds r3, #4
  52283. 8015952: 4618 mov r0, r3
  52284. 8015954: f7fd f936 bl 8012bc4 <uxListRemove>
  52285. it must be present in the function call. prvSampleTimeNow() must be
  52286. called after the message is received from xTimerQueue so there is no
  52287. possibility of a higher priority task adding a message to the message
  52288. queue with a time that is ahead of the timer daemon task (because it
  52289. pre-empted the timer daemon task after the xTimeNow value was set). */
  52290. xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );
  52291. 8015958: 463b mov r3, r7
  52292. 801595a: 4618 mov r0, r3
  52293. 801595c: f7ff ff6a bl 8015834 <prvSampleTimeNow>
  52294. 8015960: 6278 str r0, [r7, #36] @ 0x24
  52295. switch( xMessage.xMessageID )
  52296. 8015962: 687b ldr r3, [r7, #4]
  52297. 8015964: 2b09 cmp r3, #9
  52298. 8015966: f200 8097 bhi.w 8015a98 <prvProcessReceivedCommands+0x1a0>
  52299. 801596a: a201 add r2, pc, #4 @ (adr r2, 8015970 <prvProcessReceivedCommands+0x78>)
  52300. 801596c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  52301. 8015970: 08015999 .word 0x08015999
  52302. 8015974: 08015999 .word 0x08015999
  52303. 8015978: 08015999 .word 0x08015999
  52304. 801597c: 08015a0f .word 0x08015a0f
  52305. 8015980: 08015a23 .word 0x08015a23
  52306. 8015984: 08015a6f .word 0x08015a6f
  52307. 8015988: 08015999 .word 0x08015999
  52308. 801598c: 08015999 .word 0x08015999
  52309. 8015990: 08015a0f .word 0x08015a0f
  52310. 8015994: 08015a23 .word 0x08015a23
  52311. case tmrCOMMAND_START_FROM_ISR :
  52312. case tmrCOMMAND_RESET :
  52313. case tmrCOMMAND_RESET_FROM_ISR :
  52314. case tmrCOMMAND_START_DONT_TRACE :
  52315. /* Start or restart a timer. */
  52316. pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE;
  52317. 8015998: 6abb ldr r3, [r7, #40] @ 0x28
  52318. 801599a: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  52319. 801599e: f043 0301 orr.w r3, r3, #1
  52320. 80159a2: b2da uxtb r2, r3
  52321. 80159a4: 6abb ldr r3, [r7, #40] @ 0x28
  52322. 80159a6: f883 2028 strb.w r2, [r3, #40] @ 0x28
  52323. if( prvInsertTimerInActiveList( pxTimer, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, xTimeNow, xMessage.u.xTimerParameters.xMessageValue ) != pdFALSE )
  52324. 80159aa: 68ba ldr r2, [r7, #8]
  52325. 80159ac: 6abb ldr r3, [r7, #40] @ 0x28
  52326. 80159ae: 699b ldr r3, [r3, #24]
  52327. 80159b0: 18d1 adds r1, r2, r3
  52328. 80159b2: 68bb ldr r3, [r7, #8]
  52329. 80159b4: 6a7a ldr r2, [r7, #36] @ 0x24
  52330. 80159b6: 6ab8 ldr r0, [r7, #40] @ 0x28
  52331. 80159b8: f7ff ff5c bl 8015874 <prvInsertTimerInActiveList>
  52332. 80159bc: 4603 mov r3, r0
  52333. 80159be: 2b00 cmp r3, #0
  52334. 80159c0: d06c beq.n 8015a9c <prvProcessReceivedCommands+0x1a4>
  52335. {
  52336. /* The timer expired before it was added to the active
  52337. timer list. Process it now. */
  52338. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  52339. 80159c2: 6abb ldr r3, [r7, #40] @ 0x28
  52340. 80159c4: 6a1b ldr r3, [r3, #32]
  52341. 80159c6: 6ab8 ldr r0, [r7, #40] @ 0x28
  52342. 80159c8: 4798 blx r3
  52343. traceTIMER_EXPIRED( pxTimer );
  52344. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  52345. 80159ca: 6abb ldr r3, [r7, #40] @ 0x28
  52346. 80159cc: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  52347. 80159d0: f003 0304 and.w r3, r3, #4
  52348. 80159d4: 2b00 cmp r3, #0
  52349. 80159d6: d061 beq.n 8015a9c <prvProcessReceivedCommands+0x1a4>
  52350. {
  52351. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, NULL, tmrNO_DELAY );
  52352. 80159d8: 68ba ldr r2, [r7, #8]
  52353. 80159da: 6abb ldr r3, [r7, #40] @ 0x28
  52354. 80159dc: 699b ldr r3, [r3, #24]
  52355. 80159de: 441a add r2, r3
  52356. 80159e0: 2300 movs r3, #0
  52357. 80159e2: 9300 str r3, [sp, #0]
  52358. 80159e4: 2300 movs r3, #0
  52359. 80159e6: 2100 movs r1, #0
  52360. 80159e8: 6ab8 ldr r0, [r7, #40] @ 0x28
  52361. 80159ea: f7ff fe01 bl 80155f0 <xTimerGenericCommand>
  52362. 80159ee: 6238 str r0, [r7, #32]
  52363. configASSERT( xResult );
  52364. 80159f0: 6a3b ldr r3, [r7, #32]
  52365. 80159f2: 2b00 cmp r3, #0
  52366. 80159f4: d152 bne.n 8015a9c <prvProcessReceivedCommands+0x1a4>
  52367. __asm volatile
  52368. 80159f6: f04f 0350 mov.w r3, #80 @ 0x50
  52369. 80159fa: f383 8811 msr BASEPRI, r3
  52370. 80159fe: f3bf 8f6f isb sy
  52371. 8015a02: f3bf 8f4f dsb sy
  52372. 8015a06: 61bb str r3, [r7, #24]
  52373. }
  52374. 8015a08: bf00 nop
  52375. 8015a0a: bf00 nop
  52376. 8015a0c: e7fd b.n 8015a0a <prvProcessReceivedCommands+0x112>
  52377. break;
  52378. case tmrCOMMAND_STOP :
  52379. case tmrCOMMAND_STOP_FROM_ISR :
  52380. /* The timer has already been removed from the active list. */
  52381. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  52382. 8015a0e: 6abb ldr r3, [r7, #40] @ 0x28
  52383. 8015a10: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  52384. 8015a14: f023 0301 bic.w r3, r3, #1
  52385. 8015a18: b2da uxtb r2, r3
  52386. 8015a1a: 6abb ldr r3, [r7, #40] @ 0x28
  52387. 8015a1c: f883 2028 strb.w r2, [r3, #40] @ 0x28
  52388. break;
  52389. 8015a20: e03d b.n 8015a9e <prvProcessReceivedCommands+0x1a6>
  52390. case tmrCOMMAND_CHANGE_PERIOD :
  52391. case tmrCOMMAND_CHANGE_PERIOD_FROM_ISR :
  52392. pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE;
  52393. 8015a22: 6abb ldr r3, [r7, #40] @ 0x28
  52394. 8015a24: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  52395. 8015a28: f043 0301 orr.w r3, r3, #1
  52396. 8015a2c: b2da uxtb r2, r3
  52397. 8015a2e: 6abb ldr r3, [r7, #40] @ 0x28
  52398. 8015a30: f883 2028 strb.w r2, [r3, #40] @ 0x28
  52399. pxTimer->xTimerPeriodInTicks = xMessage.u.xTimerParameters.xMessageValue;
  52400. 8015a34: 68ba ldr r2, [r7, #8]
  52401. 8015a36: 6abb ldr r3, [r7, #40] @ 0x28
  52402. 8015a38: 619a str r2, [r3, #24]
  52403. configASSERT( ( pxTimer->xTimerPeriodInTicks > 0 ) );
  52404. 8015a3a: 6abb ldr r3, [r7, #40] @ 0x28
  52405. 8015a3c: 699b ldr r3, [r3, #24]
  52406. 8015a3e: 2b00 cmp r3, #0
  52407. 8015a40: d10b bne.n 8015a5a <prvProcessReceivedCommands+0x162>
  52408. __asm volatile
  52409. 8015a42: f04f 0350 mov.w r3, #80 @ 0x50
  52410. 8015a46: f383 8811 msr BASEPRI, r3
  52411. 8015a4a: f3bf 8f6f isb sy
  52412. 8015a4e: f3bf 8f4f dsb sy
  52413. 8015a52: 617b str r3, [r7, #20]
  52414. }
  52415. 8015a54: bf00 nop
  52416. 8015a56: bf00 nop
  52417. 8015a58: e7fd b.n 8015a56 <prvProcessReceivedCommands+0x15e>
  52418. be longer or shorter than the old one. The command time is
  52419. therefore set to the current time, and as the period cannot
  52420. be zero the next expiry time can only be in the future,
  52421. meaning (unlike for the xTimerStart() case above) there is
  52422. no fail case that needs to be handled here. */
  52423. ( void ) prvInsertTimerInActiveList( pxTimer, ( xTimeNow + pxTimer->xTimerPeriodInTicks ), xTimeNow, xTimeNow );
  52424. 8015a5a: 6abb ldr r3, [r7, #40] @ 0x28
  52425. 8015a5c: 699a ldr r2, [r3, #24]
  52426. 8015a5e: 6a7b ldr r3, [r7, #36] @ 0x24
  52427. 8015a60: 18d1 adds r1, r2, r3
  52428. 8015a62: 6a7b ldr r3, [r7, #36] @ 0x24
  52429. 8015a64: 6a7a ldr r2, [r7, #36] @ 0x24
  52430. 8015a66: 6ab8 ldr r0, [r7, #40] @ 0x28
  52431. 8015a68: f7ff ff04 bl 8015874 <prvInsertTimerInActiveList>
  52432. break;
  52433. 8015a6c: e017 b.n 8015a9e <prvProcessReceivedCommands+0x1a6>
  52434. #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  52435. {
  52436. /* The timer has already been removed from the active list,
  52437. just free up the memory if the memory was dynamically
  52438. allocated. */
  52439. if( ( pxTimer->ucStatus & tmrSTATUS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) 0 )
  52440. 8015a6e: 6abb ldr r3, [r7, #40] @ 0x28
  52441. 8015a70: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  52442. 8015a74: f003 0302 and.w r3, r3, #2
  52443. 8015a78: 2b00 cmp r3, #0
  52444. 8015a7a: d103 bne.n 8015a84 <prvProcessReceivedCommands+0x18c>
  52445. {
  52446. vPortFree( pxTimer );
  52447. 8015a7c: 6ab8 ldr r0, [r7, #40] @ 0x28
  52448. 8015a7e: f000 fc33 bl 80162e8 <vPortFree>
  52449. no need to free the memory - just mark the timer as
  52450. "not active". */
  52451. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  52452. }
  52453. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  52454. break;
  52455. 8015a82: e00c b.n 8015a9e <prvProcessReceivedCommands+0x1a6>
  52456. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  52457. 8015a84: 6abb ldr r3, [r7, #40] @ 0x28
  52458. 8015a86: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  52459. 8015a8a: f023 0301 bic.w r3, r3, #1
  52460. 8015a8e: b2da uxtb r2, r3
  52461. 8015a90: 6abb ldr r3, [r7, #40] @ 0x28
  52462. 8015a92: f883 2028 strb.w r2, [r3, #40] @ 0x28
  52463. break;
  52464. 8015a96: e002 b.n 8015a9e <prvProcessReceivedCommands+0x1a6>
  52465. default :
  52466. /* Don't expect to get here. */
  52467. break;
  52468. 8015a98: bf00 nop
  52469. 8015a9a: e000 b.n 8015a9e <prvProcessReceivedCommands+0x1a6>
  52470. break;
  52471. 8015a9c: bf00 nop
  52472. 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. */
  52473. 8015a9e: 4b08 ldr r3, [pc, #32] @ (8015ac0 <prvProcessReceivedCommands+0x1c8>)
  52474. 8015aa0: 681b ldr r3, [r3, #0]
  52475. 8015aa2: 1d39 adds r1, r7, #4
  52476. 8015aa4: 2200 movs r2, #0
  52477. 8015aa6: 4618 mov r0, r3
  52478. 8015aa8: f7fd fc54 bl 8013354 <xQueueReceive>
  52479. 8015aac: 4603 mov r3, r0
  52480. 8015aae: 2b00 cmp r3, #0
  52481. 8015ab0: f47f af26 bne.w 8015900 <prvProcessReceivedCommands+0x8>
  52482. }
  52483. }
  52484. }
  52485. }
  52486. 8015ab4: bf00 nop
  52487. 8015ab6: bf00 nop
  52488. 8015ab8: 3730 adds r7, #48 @ 0x30
  52489. 8015aba: 46bd mov sp, r7
  52490. 8015abc: bd80 pop {r7, pc}
  52491. 8015abe: bf00 nop
  52492. 8015ac0: 24002ad4 .word 0x24002ad4
  52493. 08015ac4 <prvSwitchTimerLists>:
  52494. /*-----------------------------------------------------------*/
  52495. static void prvSwitchTimerLists( void )
  52496. {
  52497. 8015ac4: b580 push {r7, lr}
  52498. 8015ac6: b088 sub sp, #32
  52499. 8015ac8: af02 add r7, sp, #8
  52500. /* The tick count has overflowed. The timer lists must be switched.
  52501. If there are any timers still referenced from the current timer list
  52502. then they must have expired and should be processed before the lists
  52503. are switched. */
  52504. while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )
  52505. 8015aca: e049 b.n 8015b60 <prvSwitchTimerLists+0x9c>
  52506. {
  52507. xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );
  52508. 8015acc: 4b2e ldr r3, [pc, #184] @ (8015b88 <prvSwitchTimerLists+0xc4>)
  52509. 8015ace: 681b ldr r3, [r3, #0]
  52510. 8015ad0: 68db ldr r3, [r3, #12]
  52511. 8015ad2: 681b ldr r3, [r3, #0]
  52512. 8015ad4: 613b str r3, [r7, #16]
  52513. /* Remove the timer from the list. */
  52514. 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. */
  52515. 8015ad6: 4b2c ldr r3, [pc, #176] @ (8015b88 <prvSwitchTimerLists+0xc4>)
  52516. 8015ad8: 681b ldr r3, [r3, #0]
  52517. 8015ada: 68db ldr r3, [r3, #12]
  52518. 8015adc: 68db ldr r3, [r3, #12]
  52519. 8015ade: 60fb str r3, [r7, #12]
  52520. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  52521. 8015ae0: 68fb ldr r3, [r7, #12]
  52522. 8015ae2: 3304 adds r3, #4
  52523. 8015ae4: 4618 mov r0, r3
  52524. 8015ae6: f7fd f86d bl 8012bc4 <uxListRemove>
  52525. traceTIMER_EXPIRED( pxTimer );
  52526. /* Execute its callback, then send a command to restart the timer if
  52527. it is an auto-reload timer. It cannot be restarted here as the lists
  52528. have not yet been switched. */
  52529. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  52530. 8015aea: 68fb ldr r3, [r7, #12]
  52531. 8015aec: 6a1b ldr r3, [r3, #32]
  52532. 8015aee: 68f8 ldr r0, [r7, #12]
  52533. 8015af0: 4798 blx r3
  52534. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  52535. 8015af2: 68fb ldr r3, [r7, #12]
  52536. 8015af4: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  52537. 8015af8: f003 0304 and.w r3, r3, #4
  52538. 8015afc: 2b00 cmp r3, #0
  52539. 8015afe: d02f beq.n 8015b60 <prvSwitchTimerLists+0x9c>
  52540. the timer going into the same timer list then it has already expired
  52541. and the timer should be re-inserted into the current list so it is
  52542. processed again within this loop. Otherwise a command should be sent
  52543. to restart the timer to ensure it is only inserted into a list after
  52544. the lists have been swapped. */
  52545. xReloadTime = ( xNextExpireTime + pxTimer->xTimerPeriodInTicks );
  52546. 8015b00: 68fb ldr r3, [r7, #12]
  52547. 8015b02: 699b ldr r3, [r3, #24]
  52548. 8015b04: 693a ldr r2, [r7, #16]
  52549. 8015b06: 4413 add r3, r2
  52550. 8015b08: 60bb str r3, [r7, #8]
  52551. if( xReloadTime > xNextExpireTime )
  52552. 8015b0a: 68ba ldr r2, [r7, #8]
  52553. 8015b0c: 693b ldr r3, [r7, #16]
  52554. 8015b0e: 429a cmp r2, r3
  52555. 8015b10: d90e bls.n 8015b30 <prvSwitchTimerLists+0x6c>
  52556. {
  52557. listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xReloadTime );
  52558. 8015b12: 68fb ldr r3, [r7, #12]
  52559. 8015b14: 68ba ldr r2, [r7, #8]
  52560. 8015b16: 605a str r2, [r3, #4]
  52561. listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );
  52562. 8015b18: 68fb ldr r3, [r7, #12]
  52563. 8015b1a: 68fa ldr r2, [r7, #12]
  52564. 8015b1c: 611a str r2, [r3, #16]
  52565. vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );
  52566. 8015b1e: 4b1a ldr r3, [pc, #104] @ (8015b88 <prvSwitchTimerLists+0xc4>)
  52567. 8015b20: 681a ldr r2, [r3, #0]
  52568. 8015b22: 68fb ldr r3, [r7, #12]
  52569. 8015b24: 3304 adds r3, #4
  52570. 8015b26: 4619 mov r1, r3
  52571. 8015b28: 4610 mov r0, r2
  52572. 8015b2a: f7fd f812 bl 8012b52 <vListInsert>
  52573. 8015b2e: e017 b.n 8015b60 <prvSwitchTimerLists+0x9c>
  52574. }
  52575. else
  52576. {
  52577. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY );
  52578. 8015b30: 2300 movs r3, #0
  52579. 8015b32: 9300 str r3, [sp, #0]
  52580. 8015b34: 2300 movs r3, #0
  52581. 8015b36: 693a ldr r2, [r7, #16]
  52582. 8015b38: 2100 movs r1, #0
  52583. 8015b3a: 68f8 ldr r0, [r7, #12]
  52584. 8015b3c: f7ff fd58 bl 80155f0 <xTimerGenericCommand>
  52585. 8015b40: 6078 str r0, [r7, #4]
  52586. configASSERT( xResult );
  52587. 8015b42: 687b ldr r3, [r7, #4]
  52588. 8015b44: 2b00 cmp r3, #0
  52589. 8015b46: d10b bne.n 8015b60 <prvSwitchTimerLists+0x9c>
  52590. __asm volatile
  52591. 8015b48: f04f 0350 mov.w r3, #80 @ 0x50
  52592. 8015b4c: f383 8811 msr BASEPRI, r3
  52593. 8015b50: f3bf 8f6f isb sy
  52594. 8015b54: f3bf 8f4f dsb sy
  52595. 8015b58: 603b str r3, [r7, #0]
  52596. }
  52597. 8015b5a: bf00 nop
  52598. 8015b5c: bf00 nop
  52599. 8015b5e: e7fd b.n 8015b5c <prvSwitchTimerLists+0x98>
  52600. while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )
  52601. 8015b60: 4b09 ldr r3, [pc, #36] @ (8015b88 <prvSwitchTimerLists+0xc4>)
  52602. 8015b62: 681b ldr r3, [r3, #0]
  52603. 8015b64: 681b ldr r3, [r3, #0]
  52604. 8015b66: 2b00 cmp r3, #0
  52605. 8015b68: d1b0 bne.n 8015acc <prvSwitchTimerLists+0x8>
  52606. {
  52607. mtCOVERAGE_TEST_MARKER();
  52608. }
  52609. }
  52610. pxTemp = pxCurrentTimerList;
  52611. 8015b6a: 4b07 ldr r3, [pc, #28] @ (8015b88 <prvSwitchTimerLists+0xc4>)
  52612. 8015b6c: 681b ldr r3, [r3, #0]
  52613. 8015b6e: 617b str r3, [r7, #20]
  52614. pxCurrentTimerList = pxOverflowTimerList;
  52615. 8015b70: 4b06 ldr r3, [pc, #24] @ (8015b8c <prvSwitchTimerLists+0xc8>)
  52616. 8015b72: 681b ldr r3, [r3, #0]
  52617. 8015b74: 4a04 ldr r2, [pc, #16] @ (8015b88 <prvSwitchTimerLists+0xc4>)
  52618. 8015b76: 6013 str r3, [r2, #0]
  52619. pxOverflowTimerList = pxTemp;
  52620. 8015b78: 4a04 ldr r2, [pc, #16] @ (8015b8c <prvSwitchTimerLists+0xc8>)
  52621. 8015b7a: 697b ldr r3, [r7, #20]
  52622. 8015b7c: 6013 str r3, [r2, #0]
  52623. }
  52624. 8015b7e: bf00 nop
  52625. 8015b80: 3718 adds r7, #24
  52626. 8015b82: 46bd mov sp, r7
  52627. 8015b84: bd80 pop {r7, pc}
  52628. 8015b86: bf00 nop
  52629. 8015b88: 24002acc .word 0x24002acc
  52630. 8015b8c: 24002ad0 .word 0x24002ad0
  52631. 08015b90 <prvCheckForValidListAndQueue>:
  52632. /*-----------------------------------------------------------*/
  52633. static void prvCheckForValidListAndQueue( void )
  52634. {
  52635. 8015b90: b580 push {r7, lr}
  52636. 8015b92: b082 sub sp, #8
  52637. 8015b94: af02 add r7, sp, #8
  52638. /* Check that the list from which active timers are referenced, and the
  52639. queue used to communicate with the timer service, have been
  52640. initialised. */
  52641. taskENTER_CRITICAL();
  52642. 8015b96: f000 f9b7 bl 8015f08 <vPortEnterCritical>
  52643. {
  52644. if( xTimerQueue == NULL )
  52645. 8015b9a: 4b15 ldr r3, [pc, #84] @ (8015bf0 <prvCheckForValidListAndQueue+0x60>)
  52646. 8015b9c: 681b ldr r3, [r3, #0]
  52647. 8015b9e: 2b00 cmp r3, #0
  52648. 8015ba0: d120 bne.n 8015be4 <prvCheckForValidListAndQueue+0x54>
  52649. {
  52650. vListInitialise( &xActiveTimerList1 );
  52651. 8015ba2: 4814 ldr r0, [pc, #80] @ (8015bf4 <prvCheckForValidListAndQueue+0x64>)
  52652. 8015ba4: f7fc ff84 bl 8012ab0 <vListInitialise>
  52653. vListInitialise( &xActiveTimerList2 );
  52654. 8015ba8: 4813 ldr r0, [pc, #76] @ (8015bf8 <prvCheckForValidListAndQueue+0x68>)
  52655. 8015baa: f7fc ff81 bl 8012ab0 <vListInitialise>
  52656. pxCurrentTimerList = &xActiveTimerList1;
  52657. 8015bae: 4b13 ldr r3, [pc, #76] @ (8015bfc <prvCheckForValidListAndQueue+0x6c>)
  52658. 8015bb0: 4a10 ldr r2, [pc, #64] @ (8015bf4 <prvCheckForValidListAndQueue+0x64>)
  52659. 8015bb2: 601a str r2, [r3, #0]
  52660. pxOverflowTimerList = &xActiveTimerList2;
  52661. 8015bb4: 4b12 ldr r3, [pc, #72] @ (8015c00 <prvCheckForValidListAndQueue+0x70>)
  52662. 8015bb6: 4a10 ldr r2, [pc, #64] @ (8015bf8 <prvCheckForValidListAndQueue+0x68>)
  52663. 8015bb8: 601a str r2, [r3, #0]
  52664. /* The timer queue is allocated statically in case
  52665. configSUPPORT_DYNAMIC_ALLOCATION is 0. */
  52666. static StaticQueue_t xStaticTimerQueue; /*lint !e956 Ok to declare in this manner to prevent additional conditional compilation guards in other locations. */
  52667. 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. */
  52668. xTimerQueue = xQueueCreateStatic( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, ( UBaseType_t ) sizeof( DaemonTaskMessage_t ), &( ucStaticTimerQueueStorage[ 0 ] ), &xStaticTimerQueue );
  52669. 8015bba: 2300 movs r3, #0
  52670. 8015bbc: 9300 str r3, [sp, #0]
  52671. 8015bbe: 4b11 ldr r3, [pc, #68] @ (8015c04 <prvCheckForValidListAndQueue+0x74>)
  52672. 8015bc0: 4a11 ldr r2, [pc, #68] @ (8015c08 <prvCheckForValidListAndQueue+0x78>)
  52673. 8015bc2: 2110 movs r1, #16
  52674. 8015bc4: 200a movs r0, #10
  52675. 8015bc6: f7fd f891 bl 8012cec <xQueueGenericCreateStatic>
  52676. 8015bca: 4603 mov r3, r0
  52677. 8015bcc: 4a08 ldr r2, [pc, #32] @ (8015bf0 <prvCheckForValidListAndQueue+0x60>)
  52678. 8015bce: 6013 str r3, [r2, #0]
  52679. }
  52680. #endif
  52681. #if ( configQUEUE_REGISTRY_SIZE > 0 )
  52682. {
  52683. if( xTimerQueue != NULL )
  52684. 8015bd0: 4b07 ldr r3, [pc, #28] @ (8015bf0 <prvCheckForValidListAndQueue+0x60>)
  52685. 8015bd2: 681b ldr r3, [r3, #0]
  52686. 8015bd4: 2b00 cmp r3, #0
  52687. 8015bd6: d005 beq.n 8015be4 <prvCheckForValidListAndQueue+0x54>
  52688. {
  52689. vQueueAddToRegistry( xTimerQueue, "TmrQ" );
  52690. 8015bd8: 4b05 ldr r3, [pc, #20] @ (8015bf0 <prvCheckForValidListAndQueue+0x60>)
  52691. 8015bda: 681b ldr r3, [r3, #0]
  52692. 8015bdc: 490b ldr r1, [pc, #44] @ (8015c0c <prvCheckForValidListAndQueue+0x7c>)
  52693. 8015bde: 4618 mov r0, r3
  52694. 8015be0: f7fd ff54 bl 8013a8c <vQueueAddToRegistry>
  52695. else
  52696. {
  52697. mtCOVERAGE_TEST_MARKER();
  52698. }
  52699. }
  52700. taskEXIT_CRITICAL();
  52701. 8015be4: f000 f9c2 bl 8015f6c <vPortExitCritical>
  52702. }
  52703. 8015be8: bf00 nop
  52704. 8015bea: 46bd mov sp, r7
  52705. 8015bec: bd80 pop {r7, pc}
  52706. 8015bee: bf00 nop
  52707. 8015bf0: 24002ad4 .word 0x24002ad4
  52708. 8015bf4: 24002aa4 .word 0x24002aa4
  52709. 8015bf8: 24002ab8 .word 0x24002ab8
  52710. 8015bfc: 24002acc .word 0x24002acc
  52711. 8015c00: 24002ad0 .word 0x24002ad0
  52712. 8015c04: 24002b80 .word 0x24002b80
  52713. 8015c08: 24002ae0 .word 0x24002ae0
  52714. 8015c0c: 0801755c .word 0x0801755c
  52715. 08015c10 <xTimerIsTimerActive>:
  52716. /*-----------------------------------------------------------*/
  52717. BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer )
  52718. {
  52719. 8015c10: b580 push {r7, lr}
  52720. 8015c12: b086 sub sp, #24
  52721. 8015c14: af00 add r7, sp, #0
  52722. 8015c16: 6078 str r0, [r7, #4]
  52723. BaseType_t xReturn;
  52724. Timer_t *pxTimer = xTimer;
  52725. 8015c18: 687b ldr r3, [r7, #4]
  52726. 8015c1a: 613b str r3, [r7, #16]
  52727. configASSERT( xTimer );
  52728. 8015c1c: 687b ldr r3, [r7, #4]
  52729. 8015c1e: 2b00 cmp r3, #0
  52730. 8015c20: d10b bne.n 8015c3a <xTimerIsTimerActive+0x2a>
  52731. __asm volatile
  52732. 8015c22: f04f 0350 mov.w r3, #80 @ 0x50
  52733. 8015c26: f383 8811 msr BASEPRI, r3
  52734. 8015c2a: f3bf 8f6f isb sy
  52735. 8015c2e: f3bf 8f4f dsb sy
  52736. 8015c32: 60fb str r3, [r7, #12]
  52737. }
  52738. 8015c34: bf00 nop
  52739. 8015c36: bf00 nop
  52740. 8015c38: e7fd b.n 8015c36 <xTimerIsTimerActive+0x26>
  52741. /* Is the timer in the list of active timers? */
  52742. taskENTER_CRITICAL();
  52743. 8015c3a: f000 f965 bl 8015f08 <vPortEnterCritical>
  52744. {
  52745. if( ( pxTimer->ucStatus & tmrSTATUS_IS_ACTIVE ) == 0 )
  52746. 8015c3e: 693b ldr r3, [r7, #16]
  52747. 8015c40: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  52748. 8015c44: f003 0301 and.w r3, r3, #1
  52749. 8015c48: 2b00 cmp r3, #0
  52750. 8015c4a: d102 bne.n 8015c52 <xTimerIsTimerActive+0x42>
  52751. {
  52752. xReturn = pdFALSE;
  52753. 8015c4c: 2300 movs r3, #0
  52754. 8015c4e: 617b str r3, [r7, #20]
  52755. 8015c50: e001 b.n 8015c56 <xTimerIsTimerActive+0x46>
  52756. }
  52757. else
  52758. {
  52759. xReturn = pdTRUE;
  52760. 8015c52: 2301 movs r3, #1
  52761. 8015c54: 617b str r3, [r7, #20]
  52762. }
  52763. }
  52764. taskEXIT_CRITICAL();
  52765. 8015c56: f000 f989 bl 8015f6c <vPortExitCritical>
  52766. return xReturn;
  52767. 8015c5a: 697b ldr r3, [r7, #20]
  52768. } /*lint !e818 Can't be pointer to const due to the typedef. */
  52769. 8015c5c: 4618 mov r0, r3
  52770. 8015c5e: 3718 adds r7, #24
  52771. 8015c60: 46bd mov sp, r7
  52772. 8015c62: bd80 pop {r7, pc}
  52773. 08015c64 <pvTimerGetTimerID>:
  52774. /*-----------------------------------------------------------*/
  52775. void *pvTimerGetTimerID( const TimerHandle_t xTimer )
  52776. {
  52777. 8015c64: b580 push {r7, lr}
  52778. 8015c66: b086 sub sp, #24
  52779. 8015c68: af00 add r7, sp, #0
  52780. 8015c6a: 6078 str r0, [r7, #4]
  52781. Timer_t * const pxTimer = xTimer;
  52782. 8015c6c: 687b ldr r3, [r7, #4]
  52783. 8015c6e: 617b str r3, [r7, #20]
  52784. void *pvReturn;
  52785. configASSERT( xTimer );
  52786. 8015c70: 687b ldr r3, [r7, #4]
  52787. 8015c72: 2b00 cmp r3, #0
  52788. 8015c74: d10b bne.n 8015c8e <pvTimerGetTimerID+0x2a>
  52789. __asm volatile
  52790. 8015c76: f04f 0350 mov.w r3, #80 @ 0x50
  52791. 8015c7a: f383 8811 msr BASEPRI, r3
  52792. 8015c7e: f3bf 8f6f isb sy
  52793. 8015c82: f3bf 8f4f dsb sy
  52794. 8015c86: 60fb str r3, [r7, #12]
  52795. }
  52796. 8015c88: bf00 nop
  52797. 8015c8a: bf00 nop
  52798. 8015c8c: e7fd b.n 8015c8a <pvTimerGetTimerID+0x26>
  52799. taskENTER_CRITICAL();
  52800. 8015c8e: f000 f93b bl 8015f08 <vPortEnterCritical>
  52801. {
  52802. pvReturn = pxTimer->pvTimerID;
  52803. 8015c92: 697b ldr r3, [r7, #20]
  52804. 8015c94: 69db ldr r3, [r3, #28]
  52805. 8015c96: 613b str r3, [r7, #16]
  52806. }
  52807. taskEXIT_CRITICAL();
  52808. 8015c98: f000 f968 bl 8015f6c <vPortExitCritical>
  52809. return pvReturn;
  52810. 8015c9c: 693b ldr r3, [r7, #16]
  52811. }
  52812. 8015c9e: 4618 mov r0, r3
  52813. 8015ca0: 3718 adds r7, #24
  52814. 8015ca2: 46bd mov sp, r7
  52815. 8015ca4: bd80 pop {r7, pc}
  52816. ...
  52817. 08015ca8 <pxPortInitialiseStack>:
  52818. /*
  52819. * See header file for description.
  52820. */
  52821. StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
  52822. {
  52823. 8015ca8: b480 push {r7}
  52824. 8015caa: b085 sub sp, #20
  52825. 8015cac: af00 add r7, sp, #0
  52826. 8015cae: 60f8 str r0, [r7, #12]
  52827. 8015cb0: 60b9 str r1, [r7, #8]
  52828. 8015cb2: 607a str r2, [r7, #4]
  52829. /* Simulate the stack frame as it would be created by a context switch
  52830. interrupt. */
  52831. /* Offset added to account for the way the MCU uses the stack on entry/exit
  52832. of interrupts, and to ensure alignment. */
  52833. pxTopOfStack--;
  52834. 8015cb4: 68fb ldr r3, [r7, #12]
  52835. 8015cb6: 3b04 subs r3, #4
  52836. 8015cb8: 60fb str r3, [r7, #12]
  52837. *pxTopOfStack = portINITIAL_XPSR; /* xPSR */
  52838. 8015cba: 68fb ldr r3, [r7, #12]
  52839. 8015cbc: f04f 7280 mov.w r2, #16777216 @ 0x1000000
  52840. 8015cc0: 601a str r2, [r3, #0]
  52841. pxTopOfStack--;
  52842. 8015cc2: 68fb ldr r3, [r7, #12]
  52843. 8015cc4: 3b04 subs r3, #4
  52844. 8015cc6: 60fb str r3, [r7, #12]
  52845. *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
  52846. 8015cc8: 68bb ldr r3, [r7, #8]
  52847. 8015cca: f023 0201 bic.w r2, r3, #1
  52848. 8015cce: 68fb ldr r3, [r7, #12]
  52849. 8015cd0: 601a str r2, [r3, #0]
  52850. pxTopOfStack--;
  52851. 8015cd2: 68fb ldr r3, [r7, #12]
  52852. 8015cd4: 3b04 subs r3, #4
  52853. 8015cd6: 60fb str r3, [r7, #12]
  52854. *pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
  52855. 8015cd8: 4a0c ldr r2, [pc, #48] @ (8015d0c <pxPortInitialiseStack+0x64>)
  52856. 8015cda: 68fb ldr r3, [r7, #12]
  52857. 8015cdc: 601a str r2, [r3, #0]
  52858. /* Save code space by skipping register initialisation. */
  52859. pxTopOfStack -= 5; /* R12, R3, R2 and R1. */
  52860. 8015cde: 68fb ldr r3, [r7, #12]
  52861. 8015ce0: 3b14 subs r3, #20
  52862. 8015ce2: 60fb str r3, [r7, #12]
  52863. *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */
  52864. 8015ce4: 687a ldr r2, [r7, #4]
  52865. 8015ce6: 68fb ldr r3, [r7, #12]
  52866. 8015ce8: 601a str r2, [r3, #0]
  52867. /* A save method is being used that requires each task to maintain its
  52868. own exec return value. */
  52869. pxTopOfStack--;
  52870. 8015cea: 68fb ldr r3, [r7, #12]
  52871. 8015cec: 3b04 subs r3, #4
  52872. 8015cee: 60fb str r3, [r7, #12]
  52873. *pxTopOfStack = portINITIAL_EXC_RETURN;
  52874. 8015cf0: 68fb ldr r3, [r7, #12]
  52875. 8015cf2: f06f 0202 mvn.w r2, #2
  52876. 8015cf6: 601a str r2, [r3, #0]
  52877. pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */
  52878. 8015cf8: 68fb ldr r3, [r7, #12]
  52879. 8015cfa: 3b20 subs r3, #32
  52880. 8015cfc: 60fb str r3, [r7, #12]
  52881. return pxTopOfStack;
  52882. 8015cfe: 68fb ldr r3, [r7, #12]
  52883. }
  52884. 8015d00: 4618 mov r0, r3
  52885. 8015d02: 3714 adds r7, #20
  52886. 8015d04: 46bd mov sp, r7
  52887. 8015d06: f85d 7b04 ldr.w r7, [sp], #4
  52888. 8015d0a: 4770 bx lr
  52889. 8015d0c: 08015d11 .word 0x08015d11
  52890. 08015d10 <prvTaskExitError>:
  52891. /*-----------------------------------------------------------*/
  52892. static void prvTaskExitError( void )
  52893. {
  52894. 8015d10: b480 push {r7}
  52895. 8015d12: b085 sub sp, #20
  52896. 8015d14: af00 add r7, sp, #0
  52897. volatile uint32_t ulDummy = 0;
  52898. 8015d16: 2300 movs r3, #0
  52899. 8015d18: 607b str r3, [r7, #4]
  52900. its caller as there is nothing to return to. If a task wants to exit it
  52901. should instead call vTaskDelete( NULL ).
  52902. Artificially force an assert() to be triggered if configASSERT() is
  52903. defined, then stop here so application writers can catch the error. */
  52904. configASSERT( uxCriticalNesting == ~0UL );
  52905. 8015d1a: 4b13 ldr r3, [pc, #76] @ (8015d68 <prvTaskExitError+0x58>)
  52906. 8015d1c: 681b ldr r3, [r3, #0]
  52907. 8015d1e: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  52908. 8015d22: d00b beq.n 8015d3c <prvTaskExitError+0x2c>
  52909. __asm volatile
  52910. 8015d24: f04f 0350 mov.w r3, #80 @ 0x50
  52911. 8015d28: f383 8811 msr BASEPRI, r3
  52912. 8015d2c: f3bf 8f6f isb sy
  52913. 8015d30: f3bf 8f4f dsb sy
  52914. 8015d34: 60fb str r3, [r7, #12]
  52915. }
  52916. 8015d36: bf00 nop
  52917. 8015d38: bf00 nop
  52918. 8015d3a: e7fd b.n 8015d38 <prvTaskExitError+0x28>
  52919. __asm volatile
  52920. 8015d3c: f04f 0350 mov.w r3, #80 @ 0x50
  52921. 8015d40: f383 8811 msr BASEPRI, r3
  52922. 8015d44: f3bf 8f6f isb sy
  52923. 8015d48: f3bf 8f4f dsb sy
  52924. 8015d4c: 60bb str r3, [r7, #8]
  52925. }
  52926. 8015d4e: bf00 nop
  52927. portDISABLE_INTERRUPTS();
  52928. while( ulDummy == 0 )
  52929. 8015d50: bf00 nop
  52930. 8015d52: 687b ldr r3, [r7, #4]
  52931. 8015d54: 2b00 cmp r3, #0
  52932. 8015d56: d0fc beq.n 8015d52 <prvTaskExitError+0x42>
  52933. about code appearing after this function is called - making ulDummy
  52934. volatile makes the compiler think the function could return and
  52935. therefore not output an 'unreachable code' warning for code that appears
  52936. after it. */
  52937. }
  52938. }
  52939. 8015d58: bf00 nop
  52940. 8015d5a: bf00 nop
  52941. 8015d5c: 3714 adds r7, #20
  52942. 8015d5e: 46bd mov sp, r7
  52943. 8015d60: f85d 7b04 ldr.w r7, [sp], #4
  52944. 8015d64: 4770 bx lr
  52945. 8015d66: bf00 nop
  52946. 8015d68: 24000044 .word 0x24000044
  52947. 8015d6c: 00000000 .word 0x00000000
  52948. 08015d70 <SVC_Handler>:
  52949. /*-----------------------------------------------------------*/
  52950. void vPortSVCHandler( void )
  52951. {
  52952. __asm volatile (
  52953. 8015d70: 4b07 ldr r3, [pc, #28] @ (8015d90 <pxCurrentTCBConst2>)
  52954. 8015d72: 6819 ldr r1, [r3, #0]
  52955. 8015d74: 6808 ldr r0, [r1, #0]
  52956. 8015d76: e8b0 4ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  52957. 8015d7a: f380 8809 msr PSP, r0
  52958. 8015d7e: f3bf 8f6f isb sy
  52959. 8015d82: f04f 0000 mov.w r0, #0
  52960. 8015d86: f380 8811 msr BASEPRI, r0
  52961. 8015d8a: 4770 bx lr
  52962. 8015d8c: f3af 8000 nop.w
  52963. 08015d90 <pxCurrentTCBConst2>:
  52964. 8015d90: 240025a4 .word 0x240025a4
  52965. " bx r14 \n"
  52966. " \n"
  52967. " .align 4 \n"
  52968. "pxCurrentTCBConst2: .word pxCurrentTCB \n"
  52969. );
  52970. }
  52971. 8015d94: bf00 nop
  52972. 8015d96: bf00 nop
  52973. 08015d98 <prvPortStartFirstTask>:
  52974. {
  52975. /* Start the first task. This also clears the bit that indicates the FPU is
  52976. in use in case the FPU was used before the scheduler was started - which
  52977. would otherwise result in the unnecessary leaving of space in the SVC stack
  52978. for lazy saving of FPU registers. */
  52979. __asm volatile(
  52980. 8015d98: 4808 ldr r0, [pc, #32] @ (8015dbc <prvPortStartFirstTask+0x24>)
  52981. 8015d9a: 6800 ldr r0, [r0, #0]
  52982. 8015d9c: 6800 ldr r0, [r0, #0]
  52983. 8015d9e: f380 8808 msr MSP, r0
  52984. 8015da2: f04f 0000 mov.w r0, #0
  52985. 8015da6: f380 8814 msr CONTROL, r0
  52986. 8015daa: b662 cpsie i
  52987. 8015dac: b661 cpsie f
  52988. 8015dae: f3bf 8f4f dsb sy
  52989. 8015db2: f3bf 8f6f isb sy
  52990. 8015db6: df00 svc 0
  52991. 8015db8: bf00 nop
  52992. " dsb \n"
  52993. " isb \n"
  52994. " svc 0 \n" /* System call to start first task. */
  52995. " nop \n"
  52996. );
  52997. }
  52998. 8015dba: bf00 nop
  52999. 8015dbc: e000ed08 .word 0xe000ed08
  53000. 08015dc0 <xPortStartScheduler>:
  53001. /*
  53002. * See header file for description.
  53003. */
  53004. BaseType_t xPortStartScheduler( void )
  53005. {
  53006. 8015dc0: b580 push {r7, lr}
  53007. 8015dc2: b086 sub sp, #24
  53008. 8015dc4: af00 add r7, sp, #0
  53009. configASSERT( configMAX_SYSCALL_INTERRUPT_PRIORITY );
  53010. /* This port can be used on all revisions of the Cortex-M7 core other than
  53011. the r0p1 parts. r0p1 parts should use the port from the
  53012. /source/portable/GCC/ARM_CM7/r0p1 directory. */
  53013. configASSERT( portCPUID != portCORTEX_M7_r0p1_ID );
  53014. 8015dc6: 4b47 ldr r3, [pc, #284] @ (8015ee4 <xPortStartScheduler+0x124>)
  53015. 8015dc8: 681b ldr r3, [r3, #0]
  53016. 8015dca: 4a47 ldr r2, [pc, #284] @ (8015ee8 <xPortStartScheduler+0x128>)
  53017. 8015dcc: 4293 cmp r3, r2
  53018. 8015dce: d10b bne.n 8015de8 <xPortStartScheduler+0x28>
  53019. __asm volatile
  53020. 8015dd0: f04f 0350 mov.w r3, #80 @ 0x50
  53021. 8015dd4: f383 8811 msr BASEPRI, r3
  53022. 8015dd8: f3bf 8f6f isb sy
  53023. 8015ddc: f3bf 8f4f dsb sy
  53024. 8015de0: 613b str r3, [r7, #16]
  53025. }
  53026. 8015de2: bf00 nop
  53027. 8015de4: bf00 nop
  53028. 8015de6: e7fd b.n 8015de4 <xPortStartScheduler+0x24>
  53029. configASSERT( portCPUID != portCORTEX_M7_r0p0_ID );
  53030. 8015de8: 4b3e ldr r3, [pc, #248] @ (8015ee4 <xPortStartScheduler+0x124>)
  53031. 8015dea: 681b ldr r3, [r3, #0]
  53032. 8015dec: 4a3f ldr r2, [pc, #252] @ (8015eec <xPortStartScheduler+0x12c>)
  53033. 8015dee: 4293 cmp r3, r2
  53034. 8015df0: d10b bne.n 8015e0a <xPortStartScheduler+0x4a>
  53035. __asm volatile
  53036. 8015df2: f04f 0350 mov.w r3, #80 @ 0x50
  53037. 8015df6: f383 8811 msr BASEPRI, r3
  53038. 8015dfa: f3bf 8f6f isb sy
  53039. 8015dfe: f3bf 8f4f dsb sy
  53040. 8015e02: 60fb str r3, [r7, #12]
  53041. }
  53042. 8015e04: bf00 nop
  53043. 8015e06: bf00 nop
  53044. 8015e08: e7fd b.n 8015e06 <xPortStartScheduler+0x46>
  53045. #if( configASSERT_DEFINED == 1 )
  53046. {
  53047. volatile uint32_t ulOriginalPriority;
  53048. volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER );
  53049. 8015e0a: 4b39 ldr r3, [pc, #228] @ (8015ef0 <xPortStartScheduler+0x130>)
  53050. 8015e0c: 617b str r3, [r7, #20]
  53051. functions can be called. ISR safe functions are those that end in
  53052. "FromISR". FreeRTOS maintains separate thread and ISR API functions to
  53053. ensure interrupt entry is as fast and simple as possible.
  53054. Save the interrupt priority value that is about to be clobbered. */
  53055. ulOriginalPriority = *pucFirstUserPriorityRegister;
  53056. 8015e0e: 697b ldr r3, [r7, #20]
  53057. 8015e10: 781b ldrb r3, [r3, #0]
  53058. 8015e12: b2db uxtb r3, r3
  53059. 8015e14: 607b str r3, [r7, #4]
  53060. /* Determine the number of priority bits available. First write to all
  53061. possible bits. */
  53062. *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;
  53063. 8015e16: 697b ldr r3, [r7, #20]
  53064. 8015e18: 22ff movs r2, #255 @ 0xff
  53065. 8015e1a: 701a strb r2, [r3, #0]
  53066. /* Read the value back to see how many bits stuck. */
  53067. ucMaxPriorityValue = *pucFirstUserPriorityRegister;
  53068. 8015e1c: 697b ldr r3, [r7, #20]
  53069. 8015e1e: 781b ldrb r3, [r3, #0]
  53070. 8015e20: b2db uxtb r3, r3
  53071. 8015e22: 70fb strb r3, [r7, #3]
  53072. /* Use the same mask on the maximum system call priority. */
  53073. ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue;
  53074. 8015e24: 78fb ldrb r3, [r7, #3]
  53075. 8015e26: b2db uxtb r3, r3
  53076. 8015e28: f003 0350 and.w r3, r3, #80 @ 0x50
  53077. 8015e2c: b2da uxtb r2, r3
  53078. 8015e2e: 4b31 ldr r3, [pc, #196] @ (8015ef4 <xPortStartScheduler+0x134>)
  53079. 8015e30: 701a strb r2, [r3, #0]
  53080. /* Calculate the maximum acceptable priority group value for the number
  53081. of bits read back. */
  53082. ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS;
  53083. 8015e32: 4b31 ldr r3, [pc, #196] @ (8015ef8 <xPortStartScheduler+0x138>)
  53084. 8015e34: 2207 movs r2, #7
  53085. 8015e36: 601a str r2, [r3, #0]
  53086. while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )
  53087. 8015e38: e009 b.n 8015e4e <xPortStartScheduler+0x8e>
  53088. {
  53089. ulMaxPRIGROUPValue--;
  53090. 8015e3a: 4b2f ldr r3, [pc, #188] @ (8015ef8 <xPortStartScheduler+0x138>)
  53091. 8015e3c: 681b ldr r3, [r3, #0]
  53092. 8015e3e: 3b01 subs r3, #1
  53093. 8015e40: 4a2d ldr r2, [pc, #180] @ (8015ef8 <xPortStartScheduler+0x138>)
  53094. 8015e42: 6013 str r3, [r2, #0]
  53095. ucMaxPriorityValue <<= ( uint8_t ) 0x01;
  53096. 8015e44: 78fb ldrb r3, [r7, #3]
  53097. 8015e46: b2db uxtb r3, r3
  53098. 8015e48: 005b lsls r3, r3, #1
  53099. 8015e4a: b2db uxtb r3, r3
  53100. 8015e4c: 70fb strb r3, [r7, #3]
  53101. while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )
  53102. 8015e4e: 78fb ldrb r3, [r7, #3]
  53103. 8015e50: b2db uxtb r3, r3
  53104. 8015e52: f003 0380 and.w r3, r3, #128 @ 0x80
  53105. 8015e56: 2b80 cmp r3, #128 @ 0x80
  53106. 8015e58: d0ef beq.n 8015e3a <xPortStartScheduler+0x7a>
  53107. #ifdef configPRIO_BITS
  53108. {
  53109. /* Check the FreeRTOS configuration that defines the number of
  53110. priority bits matches the number of priority bits actually queried
  53111. from the hardware. */
  53112. configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS );
  53113. 8015e5a: 4b27 ldr r3, [pc, #156] @ (8015ef8 <xPortStartScheduler+0x138>)
  53114. 8015e5c: 681b ldr r3, [r3, #0]
  53115. 8015e5e: f1c3 0307 rsb r3, r3, #7
  53116. 8015e62: 2b04 cmp r3, #4
  53117. 8015e64: d00b beq.n 8015e7e <xPortStartScheduler+0xbe>
  53118. __asm volatile
  53119. 8015e66: f04f 0350 mov.w r3, #80 @ 0x50
  53120. 8015e6a: f383 8811 msr BASEPRI, r3
  53121. 8015e6e: f3bf 8f6f isb sy
  53122. 8015e72: f3bf 8f4f dsb sy
  53123. 8015e76: 60bb str r3, [r7, #8]
  53124. }
  53125. 8015e78: bf00 nop
  53126. 8015e7a: bf00 nop
  53127. 8015e7c: e7fd b.n 8015e7a <xPortStartScheduler+0xba>
  53128. }
  53129. #endif
  53130. /* Shift the priority group value back to its position within the AIRCR
  53131. register. */
  53132. ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT;
  53133. 8015e7e: 4b1e ldr r3, [pc, #120] @ (8015ef8 <xPortStartScheduler+0x138>)
  53134. 8015e80: 681b ldr r3, [r3, #0]
  53135. 8015e82: 021b lsls r3, r3, #8
  53136. 8015e84: 4a1c ldr r2, [pc, #112] @ (8015ef8 <xPortStartScheduler+0x138>)
  53137. 8015e86: 6013 str r3, [r2, #0]
  53138. ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK;
  53139. 8015e88: 4b1b ldr r3, [pc, #108] @ (8015ef8 <xPortStartScheduler+0x138>)
  53140. 8015e8a: 681b ldr r3, [r3, #0]
  53141. 8015e8c: f403 63e0 and.w r3, r3, #1792 @ 0x700
  53142. 8015e90: 4a19 ldr r2, [pc, #100] @ (8015ef8 <xPortStartScheduler+0x138>)
  53143. 8015e92: 6013 str r3, [r2, #0]
  53144. /* Restore the clobbered interrupt priority register to its original
  53145. value. */
  53146. *pucFirstUserPriorityRegister = ulOriginalPriority;
  53147. 8015e94: 687b ldr r3, [r7, #4]
  53148. 8015e96: b2da uxtb r2, r3
  53149. 8015e98: 697b ldr r3, [r7, #20]
  53150. 8015e9a: 701a strb r2, [r3, #0]
  53151. }
  53152. #endif /* conifgASSERT_DEFINED */
  53153. /* Make PendSV and SysTick the lowest priority interrupts. */
  53154. portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;
  53155. 8015e9c: 4b17 ldr r3, [pc, #92] @ (8015efc <xPortStartScheduler+0x13c>)
  53156. 8015e9e: 681b ldr r3, [r3, #0]
  53157. 8015ea0: 4a16 ldr r2, [pc, #88] @ (8015efc <xPortStartScheduler+0x13c>)
  53158. 8015ea2: f443 0370 orr.w r3, r3, #15728640 @ 0xf00000
  53159. 8015ea6: 6013 str r3, [r2, #0]
  53160. portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;
  53161. 8015ea8: 4b14 ldr r3, [pc, #80] @ (8015efc <xPortStartScheduler+0x13c>)
  53162. 8015eaa: 681b ldr r3, [r3, #0]
  53163. 8015eac: 4a13 ldr r2, [pc, #76] @ (8015efc <xPortStartScheduler+0x13c>)
  53164. 8015eae: f043 4370 orr.w r3, r3, #4026531840 @ 0xf0000000
  53165. 8015eb2: 6013 str r3, [r2, #0]
  53166. /* Start the timer that generates the tick ISR. Interrupts are disabled
  53167. here already. */
  53168. vPortSetupTimerInterrupt();
  53169. 8015eb4: f000 f8da bl 801606c <vPortSetupTimerInterrupt>
  53170. /* Initialise the critical nesting count ready for the first task. */
  53171. uxCriticalNesting = 0;
  53172. 8015eb8: 4b11 ldr r3, [pc, #68] @ (8015f00 <xPortStartScheduler+0x140>)
  53173. 8015eba: 2200 movs r2, #0
  53174. 8015ebc: 601a str r2, [r3, #0]
  53175. /* Ensure the VFP is enabled - it should be anyway. */
  53176. vPortEnableVFP();
  53177. 8015ebe: f000 f8f9 bl 80160b4 <vPortEnableVFP>
  53178. /* Lazy save always. */
  53179. *( portFPCCR ) |= portASPEN_AND_LSPEN_BITS;
  53180. 8015ec2: 4b10 ldr r3, [pc, #64] @ (8015f04 <xPortStartScheduler+0x144>)
  53181. 8015ec4: 681b ldr r3, [r3, #0]
  53182. 8015ec6: 4a0f ldr r2, [pc, #60] @ (8015f04 <xPortStartScheduler+0x144>)
  53183. 8015ec8: f043 4340 orr.w r3, r3, #3221225472 @ 0xc0000000
  53184. 8015ecc: 6013 str r3, [r2, #0]
  53185. /* Start the first task. */
  53186. prvPortStartFirstTask();
  53187. 8015ece: f7ff ff63 bl 8015d98 <prvPortStartFirstTask>
  53188. exit error function to prevent compiler warnings about a static function
  53189. not being called in the case that the application writer overrides this
  53190. functionality by defining configTASK_RETURN_ADDRESS. Call
  53191. vTaskSwitchContext() so link time optimisation does not remove the
  53192. symbol. */
  53193. vTaskSwitchContext();
  53194. 8015ed2: f7fe fbd1 bl 8014678 <vTaskSwitchContext>
  53195. prvTaskExitError();
  53196. 8015ed6: f7ff ff1b bl 8015d10 <prvTaskExitError>
  53197. /* Should not get here! */
  53198. return 0;
  53199. 8015eda: 2300 movs r3, #0
  53200. }
  53201. 8015edc: 4618 mov r0, r3
  53202. 8015ede: 3718 adds r7, #24
  53203. 8015ee0: 46bd mov sp, r7
  53204. 8015ee2: bd80 pop {r7, pc}
  53205. 8015ee4: e000ed00 .word 0xe000ed00
  53206. 8015ee8: 410fc271 .word 0x410fc271
  53207. 8015eec: 410fc270 .word 0x410fc270
  53208. 8015ef0: e000e400 .word 0xe000e400
  53209. 8015ef4: 24002bd0 .word 0x24002bd0
  53210. 8015ef8: 24002bd4 .word 0x24002bd4
  53211. 8015efc: e000ed20 .word 0xe000ed20
  53212. 8015f00: 24000044 .word 0x24000044
  53213. 8015f04: e000ef34 .word 0xe000ef34
  53214. 08015f08 <vPortEnterCritical>:
  53215. configASSERT( uxCriticalNesting == 1000UL );
  53216. }
  53217. /*-----------------------------------------------------------*/
  53218. void vPortEnterCritical( void )
  53219. {
  53220. 8015f08: b480 push {r7}
  53221. 8015f0a: b083 sub sp, #12
  53222. 8015f0c: af00 add r7, sp, #0
  53223. __asm volatile
  53224. 8015f0e: f04f 0350 mov.w r3, #80 @ 0x50
  53225. 8015f12: f383 8811 msr BASEPRI, r3
  53226. 8015f16: f3bf 8f6f isb sy
  53227. 8015f1a: f3bf 8f4f dsb sy
  53228. 8015f1e: 607b str r3, [r7, #4]
  53229. }
  53230. 8015f20: bf00 nop
  53231. portDISABLE_INTERRUPTS();
  53232. uxCriticalNesting++;
  53233. 8015f22: 4b10 ldr r3, [pc, #64] @ (8015f64 <vPortEnterCritical+0x5c>)
  53234. 8015f24: 681b ldr r3, [r3, #0]
  53235. 8015f26: 3301 adds r3, #1
  53236. 8015f28: 4a0e ldr r2, [pc, #56] @ (8015f64 <vPortEnterCritical+0x5c>)
  53237. 8015f2a: 6013 str r3, [r2, #0]
  53238. /* This is not the interrupt safe version of the enter critical function so
  53239. assert() if it is being called from an interrupt context. Only API
  53240. functions that end in "FromISR" can be used in an interrupt. Only assert if
  53241. the critical nesting count is 1 to protect against recursive calls if the
  53242. assert function also uses a critical section. */
  53243. if( uxCriticalNesting == 1 )
  53244. 8015f2c: 4b0d ldr r3, [pc, #52] @ (8015f64 <vPortEnterCritical+0x5c>)
  53245. 8015f2e: 681b ldr r3, [r3, #0]
  53246. 8015f30: 2b01 cmp r3, #1
  53247. 8015f32: d110 bne.n 8015f56 <vPortEnterCritical+0x4e>
  53248. {
  53249. configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 );
  53250. 8015f34: 4b0c ldr r3, [pc, #48] @ (8015f68 <vPortEnterCritical+0x60>)
  53251. 8015f36: 681b ldr r3, [r3, #0]
  53252. 8015f38: b2db uxtb r3, r3
  53253. 8015f3a: 2b00 cmp r3, #0
  53254. 8015f3c: d00b beq.n 8015f56 <vPortEnterCritical+0x4e>
  53255. __asm volatile
  53256. 8015f3e: f04f 0350 mov.w r3, #80 @ 0x50
  53257. 8015f42: f383 8811 msr BASEPRI, r3
  53258. 8015f46: f3bf 8f6f isb sy
  53259. 8015f4a: f3bf 8f4f dsb sy
  53260. 8015f4e: 603b str r3, [r7, #0]
  53261. }
  53262. 8015f50: bf00 nop
  53263. 8015f52: bf00 nop
  53264. 8015f54: e7fd b.n 8015f52 <vPortEnterCritical+0x4a>
  53265. }
  53266. }
  53267. 8015f56: bf00 nop
  53268. 8015f58: 370c adds r7, #12
  53269. 8015f5a: 46bd mov sp, r7
  53270. 8015f5c: f85d 7b04 ldr.w r7, [sp], #4
  53271. 8015f60: 4770 bx lr
  53272. 8015f62: bf00 nop
  53273. 8015f64: 24000044 .word 0x24000044
  53274. 8015f68: e000ed04 .word 0xe000ed04
  53275. 08015f6c <vPortExitCritical>:
  53276. /*-----------------------------------------------------------*/
  53277. void vPortExitCritical( void )
  53278. {
  53279. 8015f6c: b480 push {r7}
  53280. 8015f6e: b083 sub sp, #12
  53281. 8015f70: af00 add r7, sp, #0
  53282. configASSERT( uxCriticalNesting );
  53283. 8015f72: 4b12 ldr r3, [pc, #72] @ (8015fbc <vPortExitCritical+0x50>)
  53284. 8015f74: 681b ldr r3, [r3, #0]
  53285. 8015f76: 2b00 cmp r3, #0
  53286. 8015f78: d10b bne.n 8015f92 <vPortExitCritical+0x26>
  53287. __asm volatile
  53288. 8015f7a: f04f 0350 mov.w r3, #80 @ 0x50
  53289. 8015f7e: f383 8811 msr BASEPRI, r3
  53290. 8015f82: f3bf 8f6f isb sy
  53291. 8015f86: f3bf 8f4f dsb sy
  53292. 8015f8a: 607b str r3, [r7, #4]
  53293. }
  53294. 8015f8c: bf00 nop
  53295. 8015f8e: bf00 nop
  53296. 8015f90: e7fd b.n 8015f8e <vPortExitCritical+0x22>
  53297. uxCriticalNesting--;
  53298. 8015f92: 4b0a ldr r3, [pc, #40] @ (8015fbc <vPortExitCritical+0x50>)
  53299. 8015f94: 681b ldr r3, [r3, #0]
  53300. 8015f96: 3b01 subs r3, #1
  53301. 8015f98: 4a08 ldr r2, [pc, #32] @ (8015fbc <vPortExitCritical+0x50>)
  53302. 8015f9a: 6013 str r3, [r2, #0]
  53303. if( uxCriticalNesting == 0 )
  53304. 8015f9c: 4b07 ldr r3, [pc, #28] @ (8015fbc <vPortExitCritical+0x50>)
  53305. 8015f9e: 681b ldr r3, [r3, #0]
  53306. 8015fa0: 2b00 cmp r3, #0
  53307. 8015fa2: d105 bne.n 8015fb0 <vPortExitCritical+0x44>
  53308. 8015fa4: 2300 movs r3, #0
  53309. 8015fa6: 603b str r3, [r7, #0]
  53310. __asm volatile
  53311. 8015fa8: 683b ldr r3, [r7, #0]
  53312. 8015faa: f383 8811 msr BASEPRI, r3
  53313. }
  53314. 8015fae: bf00 nop
  53315. {
  53316. portENABLE_INTERRUPTS();
  53317. }
  53318. }
  53319. 8015fb0: bf00 nop
  53320. 8015fb2: 370c adds r7, #12
  53321. 8015fb4: 46bd mov sp, r7
  53322. 8015fb6: f85d 7b04 ldr.w r7, [sp], #4
  53323. 8015fba: 4770 bx lr
  53324. 8015fbc: 24000044 .word 0x24000044
  53325. 08015fc0 <PendSV_Handler>:
  53326. void xPortPendSVHandler( void )
  53327. {
  53328. /* This is a naked function. */
  53329. __asm volatile
  53330. 8015fc0: f3ef 8009 mrs r0, PSP
  53331. 8015fc4: f3bf 8f6f isb sy
  53332. 8015fc8: 4b15 ldr r3, [pc, #84] @ (8016020 <pxCurrentTCBConst>)
  53333. 8015fca: 681a ldr r2, [r3, #0]
  53334. 8015fcc: f01e 0f10 tst.w lr, #16
  53335. 8015fd0: bf08 it eq
  53336. 8015fd2: ed20 8a10 vstmdbeq r0!, {s16-s31}
  53337. 8015fd6: e920 4ff0 stmdb r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  53338. 8015fda: 6010 str r0, [r2, #0]
  53339. 8015fdc: e92d 0009 stmdb sp!, {r0, r3}
  53340. 8015fe0: f04f 0050 mov.w r0, #80 @ 0x50
  53341. 8015fe4: f380 8811 msr BASEPRI, r0
  53342. 8015fe8: f3bf 8f4f dsb sy
  53343. 8015fec: f3bf 8f6f isb sy
  53344. 8015ff0: f7fe fb42 bl 8014678 <vTaskSwitchContext>
  53345. 8015ff4: f04f 0000 mov.w r0, #0
  53346. 8015ff8: f380 8811 msr BASEPRI, r0
  53347. 8015ffc: bc09 pop {r0, r3}
  53348. 8015ffe: 6819 ldr r1, [r3, #0]
  53349. 8016000: 6808 ldr r0, [r1, #0]
  53350. 8016002: e8b0 4ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  53351. 8016006: f01e 0f10 tst.w lr, #16
  53352. 801600a: bf08 it eq
  53353. 801600c: ecb0 8a10 vldmiaeq r0!, {s16-s31}
  53354. 8016010: f380 8809 msr PSP, r0
  53355. 8016014: f3bf 8f6f isb sy
  53356. 8016018: 4770 bx lr
  53357. 801601a: bf00 nop
  53358. 801601c: f3af 8000 nop.w
  53359. 08016020 <pxCurrentTCBConst>:
  53360. 8016020: 240025a4 .word 0x240025a4
  53361. " \n"
  53362. " .align 4 \n"
  53363. "pxCurrentTCBConst: .word pxCurrentTCB \n"
  53364. ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY)
  53365. );
  53366. }
  53367. 8016024: bf00 nop
  53368. 8016026: bf00 nop
  53369. 08016028 <xPortSysTickHandler>:
  53370. /*-----------------------------------------------------------*/
  53371. void xPortSysTickHandler( void )
  53372. {
  53373. 8016028: b580 push {r7, lr}
  53374. 801602a: b082 sub sp, #8
  53375. 801602c: af00 add r7, sp, #0
  53376. __asm volatile
  53377. 801602e: f04f 0350 mov.w r3, #80 @ 0x50
  53378. 8016032: f383 8811 msr BASEPRI, r3
  53379. 8016036: f3bf 8f6f isb sy
  53380. 801603a: f3bf 8f4f dsb sy
  53381. 801603e: 607b str r3, [r7, #4]
  53382. }
  53383. 8016040: bf00 nop
  53384. save and then restore the interrupt mask value as its value is already
  53385. known. */
  53386. portDISABLE_INTERRUPTS();
  53387. {
  53388. /* Increment the RTOS tick. */
  53389. if( xTaskIncrementTick() != pdFALSE )
  53390. 8016042: f7fe fa5f bl 8014504 <xTaskIncrementTick>
  53391. 8016046: 4603 mov r3, r0
  53392. 8016048: 2b00 cmp r3, #0
  53393. 801604a: d003 beq.n 8016054 <xPortSysTickHandler+0x2c>
  53394. {
  53395. /* A context switch is required. Context switching is performed in
  53396. the PendSV interrupt. Pend the PendSV interrupt. */
  53397. portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;
  53398. 801604c: 4b06 ldr r3, [pc, #24] @ (8016068 <xPortSysTickHandler+0x40>)
  53399. 801604e: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  53400. 8016052: 601a str r2, [r3, #0]
  53401. 8016054: 2300 movs r3, #0
  53402. 8016056: 603b str r3, [r7, #0]
  53403. __asm volatile
  53404. 8016058: 683b ldr r3, [r7, #0]
  53405. 801605a: f383 8811 msr BASEPRI, r3
  53406. }
  53407. 801605e: bf00 nop
  53408. }
  53409. }
  53410. portENABLE_INTERRUPTS();
  53411. }
  53412. 8016060: bf00 nop
  53413. 8016062: 3708 adds r7, #8
  53414. 8016064: 46bd mov sp, r7
  53415. 8016066: bd80 pop {r7, pc}
  53416. 8016068: e000ed04 .word 0xe000ed04
  53417. 0801606c <vPortSetupTimerInterrupt>:
  53418. /*
  53419. * Setup the systick timer to generate the tick interrupts at the required
  53420. * frequency.
  53421. */
  53422. __attribute__(( weak )) void vPortSetupTimerInterrupt( void )
  53423. {
  53424. 801606c: b480 push {r7}
  53425. 801606e: af00 add r7, sp, #0
  53426. ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ );
  53427. }
  53428. #endif /* configUSE_TICKLESS_IDLE */
  53429. /* Stop and clear the SysTick. */
  53430. portNVIC_SYSTICK_CTRL_REG = 0UL;
  53431. 8016070: 4b0b ldr r3, [pc, #44] @ (80160a0 <vPortSetupTimerInterrupt+0x34>)
  53432. 8016072: 2200 movs r2, #0
  53433. 8016074: 601a str r2, [r3, #0]
  53434. portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;
  53435. 8016076: 4b0b ldr r3, [pc, #44] @ (80160a4 <vPortSetupTimerInterrupt+0x38>)
  53436. 8016078: 2200 movs r2, #0
  53437. 801607a: 601a str r2, [r3, #0]
  53438. /* Configure SysTick to interrupt at the requested rate. */
  53439. portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
  53440. 801607c: 4b0a ldr r3, [pc, #40] @ (80160a8 <vPortSetupTimerInterrupt+0x3c>)
  53441. 801607e: 681b ldr r3, [r3, #0]
  53442. 8016080: 4a0a ldr r2, [pc, #40] @ (80160ac <vPortSetupTimerInterrupt+0x40>)
  53443. 8016082: fba2 2303 umull r2, r3, r2, r3
  53444. 8016086: 099b lsrs r3, r3, #6
  53445. 8016088: 4a09 ldr r2, [pc, #36] @ (80160b0 <vPortSetupTimerInterrupt+0x44>)
  53446. 801608a: 3b01 subs r3, #1
  53447. 801608c: 6013 str r3, [r2, #0]
  53448. portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );
  53449. 801608e: 4b04 ldr r3, [pc, #16] @ (80160a0 <vPortSetupTimerInterrupt+0x34>)
  53450. 8016090: 2207 movs r2, #7
  53451. 8016092: 601a str r2, [r3, #0]
  53452. }
  53453. 8016094: bf00 nop
  53454. 8016096: 46bd mov sp, r7
  53455. 8016098: f85d 7b04 ldr.w r7, [sp], #4
  53456. 801609c: 4770 bx lr
  53457. 801609e: bf00 nop
  53458. 80160a0: e000e010 .word 0xe000e010
  53459. 80160a4: e000e018 .word 0xe000e018
  53460. 80160a8: 24000034 .word 0x24000034
  53461. 80160ac: 10624dd3 .word 0x10624dd3
  53462. 80160b0: e000e014 .word 0xe000e014
  53463. 080160b4 <vPortEnableVFP>:
  53464. /*-----------------------------------------------------------*/
  53465. /* This is a naked function. */
  53466. static void vPortEnableVFP( void )
  53467. {
  53468. __asm volatile
  53469. 80160b4: f8df 000c ldr.w r0, [pc, #12] @ 80160c4 <vPortEnableVFP+0x10>
  53470. 80160b8: 6801 ldr r1, [r0, #0]
  53471. 80160ba: f441 0170 orr.w r1, r1, #15728640 @ 0xf00000
  53472. 80160be: 6001 str r1, [r0, #0]
  53473. 80160c0: 4770 bx lr
  53474. " \n"
  53475. " orr r1, r1, #( 0xf << 20 ) \n" /* Enable CP10 and CP11 coprocessors, then save back. */
  53476. " str r1, [r0] \n"
  53477. " bx r14 "
  53478. );
  53479. }
  53480. 80160c2: bf00 nop
  53481. 80160c4: e000ed88 .word 0xe000ed88
  53482. 080160c8 <vPortValidateInterruptPriority>:
  53483. /*-----------------------------------------------------------*/
  53484. #if( configASSERT_DEFINED == 1 )
  53485. void vPortValidateInterruptPriority( void )
  53486. {
  53487. 80160c8: b480 push {r7}
  53488. 80160ca: b085 sub sp, #20
  53489. 80160cc: af00 add r7, sp, #0
  53490. uint32_t ulCurrentInterrupt;
  53491. uint8_t ucCurrentPriority;
  53492. /* Obtain the number of the currently executing interrupt. */
  53493. __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" );
  53494. 80160ce: f3ef 8305 mrs r3, IPSR
  53495. 80160d2: 60fb str r3, [r7, #12]
  53496. /* Is the interrupt number a user defined interrupt? */
  53497. if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER )
  53498. 80160d4: 68fb ldr r3, [r7, #12]
  53499. 80160d6: 2b0f cmp r3, #15
  53500. 80160d8: d915 bls.n 8016106 <vPortValidateInterruptPriority+0x3e>
  53501. {
  53502. /* Look up the interrupt's priority. */
  53503. ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ];
  53504. 80160da: 4a18 ldr r2, [pc, #96] @ (801613c <vPortValidateInterruptPriority+0x74>)
  53505. 80160dc: 68fb ldr r3, [r7, #12]
  53506. 80160de: 4413 add r3, r2
  53507. 80160e0: 781b ldrb r3, [r3, #0]
  53508. 80160e2: 72fb strb r3, [r7, #11]
  53509. interrupt entry is as fast and simple as possible.
  53510. The following links provide detailed information:
  53511. http://www.freertos.org/RTOS-Cortex-M3-M4.html
  53512. http://www.freertos.org/FAQHelp.html */
  53513. configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );
  53514. 80160e4: 4b16 ldr r3, [pc, #88] @ (8016140 <vPortValidateInterruptPriority+0x78>)
  53515. 80160e6: 781b ldrb r3, [r3, #0]
  53516. 80160e8: 7afa ldrb r2, [r7, #11]
  53517. 80160ea: 429a cmp r2, r3
  53518. 80160ec: d20b bcs.n 8016106 <vPortValidateInterruptPriority+0x3e>
  53519. __asm volatile
  53520. 80160ee: f04f 0350 mov.w r3, #80 @ 0x50
  53521. 80160f2: f383 8811 msr BASEPRI, r3
  53522. 80160f6: f3bf 8f6f isb sy
  53523. 80160fa: f3bf 8f4f dsb sy
  53524. 80160fe: 607b str r3, [r7, #4]
  53525. }
  53526. 8016100: bf00 nop
  53527. 8016102: bf00 nop
  53528. 8016104: e7fd b.n 8016102 <vPortValidateInterruptPriority+0x3a>
  53529. configuration then the correct setting can be achieved on all Cortex-M
  53530. devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the
  53531. scheduler. Note however that some vendor specific peripheral libraries
  53532. assume a non-zero priority group setting, in which cases using a value
  53533. of zero will result in unpredictable behaviour. */
  53534. configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue );
  53535. 8016106: 4b0f ldr r3, [pc, #60] @ (8016144 <vPortValidateInterruptPriority+0x7c>)
  53536. 8016108: 681b ldr r3, [r3, #0]
  53537. 801610a: f403 62e0 and.w r2, r3, #1792 @ 0x700
  53538. 801610e: 4b0e ldr r3, [pc, #56] @ (8016148 <vPortValidateInterruptPriority+0x80>)
  53539. 8016110: 681b ldr r3, [r3, #0]
  53540. 8016112: 429a cmp r2, r3
  53541. 8016114: d90b bls.n 801612e <vPortValidateInterruptPriority+0x66>
  53542. __asm volatile
  53543. 8016116: f04f 0350 mov.w r3, #80 @ 0x50
  53544. 801611a: f383 8811 msr BASEPRI, r3
  53545. 801611e: f3bf 8f6f isb sy
  53546. 8016122: f3bf 8f4f dsb sy
  53547. 8016126: 603b str r3, [r7, #0]
  53548. }
  53549. 8016128: bf00 nop
  53550. 801612a: bf00 nop
  53551. 801612c: e7fd b.n 801612a <vPortValidateInterruptPriority+0x62>
  53552. }
  53553. 801612e: bf00 nop
  53554. 8016130: 3714 adds r7, #20
  53555. 8016132: 46bd mov sp, r7
  53556. 8016134: f85d 7b04 ldr.w r7, [sp], #4
  53557. 8016138: 4770 bx lr
  53558. 801613a: bf00 nop
  53559. 801613c: e000e3f0 .word 0xe000e3f0
  53560. 8016140: 24002bd0 .word 0x24002bd0
  53561. 8016144: e000ed0c .word 0xe000ed0c
  53562. 8016148: 24002bd4 .word 0x24002bd4
  53563. 0801614c <pvPortMalloc>:
  53564. static size_t xBlockAllocatedBit = 0;
  53565. /*-----------------------------------------------------------*/
  53566. void *pvPortMalloc( size_t xWantedSize )
  53567. {
  53568. 801614c: b580 push {r7, lr}
  53569. 801614e: b08a sub sp, #40 @ 0x28
  53570. 8016150: af00 add r7, sp, #0
  53571. 8016152: 6078 str r0, [r7, #4]
  53572. BlockLink_t *pxBlock, *pxPreviousBlock, *pxNewBlockLink;
  53573. void *pvReturn = NULL;
  53574. 8016154: 2300 movs r3, #0
  53575. 8016156: 61fb str r3, [r7, #28]
  53576. vTaskSuspendAll();
  53577. 8016158: f7fe f918 bl 801438c <vTaskSuspendAll>
  53578. {
  53579. /* If this is the first call to malloc then the heap will require
  53580. initialisation to setup the list of free blocks. */
  53581. if( pxEnd == NULL )
  53582. 801615c: 4b5c ldr r3, [pc, #368] @ (80162d0 <pvPortMalloc+0x184>)
  53583. 801615e: 681b ldr r3, [r3, #0]
  53584. 8016160: 2b00 cmp r3, #0
  53585. 8016162: d101 bne.n 8016168 <pvPortMalloc+0x1c>
  53586. {
  53587. prvHeapInit();
  53588. 8016164: f000 f924 bl 80163b0 <prvHeapInit>
  53589. /* Check the requested block size is not so large that the top bit is
  53590. set. The top bit of the block size member of the BlockLink_t structure
  53591. is used to determine who owns the block - the application or the
  53592. kernel, so it must be free. */
  53593. if( ( xWantedSize & xBlockAllocatedBit ) == 0 )
  53594. 8016168: 4b5a ldr r3, [pc, #360] @ (80162d4 <pvPortMalloc+0x188>)
  53595. 801616a: 681a ldr r2, [r3, #0]
  53596. 801616c: 687b ldr r3, [r7, #4]
  53597. 801616e: 4013 ands r3, r2
  53598. 8016170: 2b00 cmp r3, #0
  53599. 8016172: f040 8095 bne.w 80162a0 <pvPortMalloc+0x154>
  53600. {
  53601. /* The wanted size is increased so it can contain a BlockLink_t
  53602. structure in addition to the requested amount of bytes. */
  53603. if( xWantedSize > 0 )
  53604. 8016176: 687b ldr r3, [r7, #4]
  53605. 8016178: 2b00 cmp r3, #0
  53606. 801617a: d01e beq.n 80161ba <pvPortMalloc+0x6e>
  53607. {
  53608. xWantedSize += xHeapStructSize;
  53609. 801617c: 2208 movs r2, #8
  53610. 801617e: 687b ldr r3, [r7, #4]
  53611. 8016180: 4413 add r3, r2
  53612. 8016182: 607b str r3, [r7, #4]
  53613. /* Ensure that blocks are always aligned to the required number
  53614. of bytes. */
  53615. if( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) != 0x00 )
  53616. 8016184: 687b ldr r3, [r7, #4]
  53617. 8016186: f003 0307 and.w r3, r3, #7
  53618. 801618a: 2b00 cmp r3, #0
  53619. 801618c: d015 beq.n 80161ba <pvPortMalloc+0x6e>
  53620. {
  53621. /* Byte alignment required. */
  53622. xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) );
  53623. 801618e: 687b ldr r3, [r7, #4]
  53624. 8016190: f023 0307 bic.w r3, r3, #7
  53625. 8016194: 3308 adds r3, #8
  53626. 8016196: 607b str r3, [r7, #4]
  53627. configASSERT( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) == 0 );
  53628. 8016198: 687b ldr r3, [r7, #4]
  53629. 801619a: f003 0307 and.w r3, r3, #7
  53630. 801619e: 2b00 cmp r3, #0
  53631. 80161a0: d00b beq.n 80161ba <pvPortMalloc+0x6e>
  53632. __asm volatile
  53633. 80161a2: f04f 0350 mov.w r3, #80 @ 0x50
  53634. 80161a6: f383 8811 msr BASEPRI, r3
  53635. 80161aa: f3bf 8f6f isb sy
  53636. 80161ae: f3bf 8f4f dsb sy
  53637. 80161b2: 617b str r3, [r7, #20]
  53638. }
  53639. 80161b4: bf00 nop
  53640. 80161b6: bf00 nop
  53641. 80161b8: e7fd b.n 80161b6 <pvPortMalloc+0x6a>
  53642. else
  53643. {
  53644. mtCOVERAGE_TEST_MARKER();
  53645. }
  53646. if( ( xWantedSize > 0 ) && ( xWantedSize <= xFreeBytesRemaining ) )
  53647. 80161ba: 687b ldr r3, [r7, #4]
  53648. 80161bc: 2b00 cmp r3, #0
  53649. 80161be: d06f beq.n 80162a0 <pvPortMalloc+0x154>
  53650. 80161c0: 4b45 ldr r3, [pc, #276] @ (80162d8 <pvPortMalloc+0x18c>)
  53651. 80161c2: 681b ldr r3, [r3, #0]
  53652. 80161c4: 687a ldr r2, [r7, #4]
  53653. 80161c6: 429a cmp r2, r3
  53654. 80161c8: d86a bhi.n 80162a0 <pvPortMalloc+0x154>
  53655. {
  53656. /* Traverse the list from the start (lowest address) block until
  53657. one of adequate size is found. */
  53658. pxPreviousBlock = &xStart;
  53659. 80161ca: 4b44 ldr r3, [pc, #272] @ (80162dc <pvPortMalloc+0x190>)
  53660. 80161cc: 623b str r3, [r7, #32]
  53661. pxBlock = xStart.pxNextFreeBlock;
  53662. 80161ce: 4b43 ldr r3, [pc, #268] @ (80162dc <pvPortMalloc+0x190>)
  53663. 80161d0: 681b ldr r3, [r3, #0]
  53664. 80161d2: 627b str r3, [r7, #36] @ 0x24
  53665. while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) )
  53666. 80161d4: e004 b.n 80161e0 <pvPortMalloc+0x94>
  53667. {
  53668. pxPreviousBlock = pxBlock;
  53669. 80161d6: 6a7b ldr r3, [r7, #36] @ 0x24
  53670. 80161d8: 623b str r3, [r7, #32]
  53671. pxBlock = pxBlock->pxNextFreeBlock;
  53672. 80161da: 6a7b ldr r3, [r7, #36] @ 0x24
  53673. 80161dc: 681b ldr r3, [r3, #0]
  53674. 80161de: 627b str r3, [r7, #36] @ 0x24
  53675. while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) )
  53676. 80161e0: 6a7b ldr r3, [r7, #36] @ 0x24
  53677. 80161e2: 685b ldr r3, [r3, #4]
  53678. 80161e4: 687a ldr r2, [r7, #4]
  53679. 80161e6: 429a cmp r2, r3
  53680. 80161e8: d903 bls.n 80161f2 <pvPortMalloc+0xa6>
  53681. 80161ea: 6a7b ldr r3, [r7, #36] @ 0x24
  53682. 80161ec: 681b ldr r3, [r3, #0]
  53683. 80161ee: 2b00 cmp r3, #0
  53684. 80161f0: d1f1 bne.n 80161d6 <pvPortMalloc+0x8a>
  53685. }
  53686. /* If the end marker was reached then a block of adequate size
  53687. was not found. */
  53688. if( pxBlock != pxEnd )
  53689. 80161f2: 4b37 ldr r3, [pc, #220] @ (80162d0 <pvPortMalloc+0x184>)
  53690. 80161f4: 681b ldr r3, [r3, #0]
  53691. 80161f6: 6a7a ldr r2, [r7, #36] @ 0x24
  53692. 80161f8: 429a cmp r2, r3
  53693. 80161fa: d051 beq.n 80162a0 <pvPortMalloc+0x154>
  53694. {
  53695. /* Return the memory space pointed to - jumping over the
  53696. BlockLink_t structure at its start. */
  53697. pvReturn = ( void * ) ( ( ( uint8_t * ) pxPreviousBlock->pxNextFreeBlock ) + xHeapStructSize );
  53698. 80161fc: 6a3b ldr r3, [r7, #32]
  53699. 80161fe: 681b ldr r3, [r3, #0]
  53700. 8016200: 2208 movs r2, #8
  53701. 8016202: 4413 add r3, r2
  53702. 8016204: 61fb str r3, [r7, #28]
  53703. /* This block is being returned for use so must be taken out
  53704. of the list of free blocks. */
  53705. pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock;
  53706. 8016206: 6a7b ldr r3, [r7, #36] @ 0x24
  53707. 8016208: 681a ldr r2, [r3, #0]
  53708. 801620a: 6a3b ldr r3, [r7, #32]
  53709. 801620c: 601a str r2, [r3, #0]
  53710. /* If the block is larger than required it can be split into
  53711. two. */
  53712. if( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE )
  53713. 801620e: 6a7b ldr r3, [r7, #36] @ 0x24
  53714. 8016210: 685a ldr r2, [r3, #4]
  53715. 8016212: 687b ldr r3, [r7, #4]
  53716. 8016214: 1ad2 subs r2, r2, r3
  53717. 8016216: 2308 movs r3, #8
  53718. 8016218: 005b lsls r3, r3, #1
  53719. 801621a: 429a cmp r2, r3
  53720. 801621c: d920 bls.n 8016260 <pvPortMalloc+0x114>
  53721. {
  53722. /* This block is to be split into two. Create a new
  53723. block following the number of bytes requested. The void
  53724. cast is used to prevent byte alignment warnings from the
  53725. compiler. */
  53726. pxNewBlockLink = ( void * ) ( ( ( uint8_t * ) pxBlock ) + xWantedSize );
  53727. 801621e: 6a7a ldr r2, [r7, #36] @ 0x24
  53728. 8016220: 687b ldr r3, [r7, #4]
  53729. 8016222: 4413 add r3, r2
  53730. 8016224: 61bb str r3, [r7, #24]
  53731. configASSERT( ( ( ( size_t ) pxNewBlockLink ) & portBYTE_ALIGNMENT_MASK ) == 0 );
  53732. 8016226: 69bb ldr r3, [r7, #24]
  53733. 8016228: f003 0307 and.w r3, r3, #7
  53734. 801622c: 2b00 cmp r3, #0
  53735. 801622e: d00b beq.n 8016248 <pvPortMalloc+0xfc>
  53736. __asm volatile
  53737. 8016230: f04f 0350 mov.w r3, #80 @ 0x50
  53738. 8016234: f383 8811 msr BASEPRI, r3
  53739. 8016238: f3bf 8f6f isb sy
  53740. 801623c: f3bf 8f4f dsb sy
  53741. 8016240: 613b str r3, [r7, #16]
  53742. }
  53743. 8016242: bf00 nop
  53744. 8016244: bf00 nop
  53745. 8016246: e7fd b.n 8016244 <pvPortMalloc+0xf8>
  53746. /* Calculate the sizes of two blocks split from the
  53747. single block. */
  53748. pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize;
  53749. 8016248: 6a7b ldr r3, [r7, #36] @ 0x24
  53750. 801624a: 685a ldr r2, [r3, #4]
  53751. 801624c: 687b ldr r3, [r7, #4]
  53752. 801624e: 1ad2 subs r2, r2, r3
  53753. 8016250: 69bb ldr r3, [r7, #24]
  53754. 8016252: 605a str r2, [r3, #4]
  53755. pxBlock->xBlockSize = xWantedSize;
  53756. 8016254: 6a7b ldr r3, [r7, #36] @ 0x24
  53757. 8016256: 687a ldr r2, [r7, #4]
  53758. 8016258: 605a str r2, [r3, #4]
  53759. /* Insert the new block into the list of free blocks. */
  53760. prvInsertBlockIntoFreeList( pxNewBlockLink );
  53761. 801625a: 69b8 ldr r0, [r7, #24]
  53762. 801625c: f000 f90a bl 8016474 <prvInsertBlockIntoFreeList>
  53763. else
  53764. {
  53765. mtCOVERAGE_TEST_MARKER();
  53766. }
  53767. xFreeBytesRemaining -= pxBlock->xBlockSize;
  53768. 8016260: 4b1d ldr r3, [pc, #116] @ (80162d8 <pvPortMalloc+0x18c>)
  53769. 8016262: 681a ldr r2, [r3, #0]
  53770. 8016264: 6a7b ldr r3, [r7, #36] @ 0x24
  53771. 8016266: 685b ldr r3, [r3, #4]
  53772. 8016268: 1ad3 subs r3, r2, r3
  53773. 801626a: 4a1b ldr r2, [pc, #108] @ (80162d8 <pvPortMalloc+0x18c>)
  53774. 801626c: 6013 str r3, [r2, #0]
  53775. if( xFreeBytesRemaining < xMinimumEverFreeBytesRemaining )
  53776. 801626e: 4b1a ldr r3, [pc, #104] @ (80162d8 <pvPortMalloc+0x18c>)
  53777. 8016270: 681a ldr r2, [r3, #0]
  53778. 8016272: 4b1b ldr r3, [pc, #108] @ (80162e0 <pvPortMalloc+0x194>)
  53779. 8016274: 681b ldr r3, [r3, #0]
  53780. 8016276: 429a cmp r2, r3
  53781. 8016278: d203 bcs.n 8016282 <pvPortMalloc+0x136>
  53782. {
  53783. xMinimumEverFreeBytesRemaining = xFreeBytesRemaining;
  53784. 801627a: 4b17 ldr r3, [pc, #92] @ (80162d8 <pvPortMalloc+0x18c>)
  53785. 801627c: 681b ldr r3, [r3, #0]
  53786. 801627e: 4a18 ldr r2, [pc, #96] @ (80162e0 <pvPortMalloc+0x194>)
  53787. 8016280: 6013 str r3, [r2, #0]
  53788. mtCOVERAGE_TEST_MARKER();
  53789. }
  53790. /* The block is being returned - it is allocated and owned
  53791. by the application and has no "next" block. */
  53792. pxBlock->xBlockSize |= xBlockAllocatedBit;
  53793. 8016282: 6a7b ldr r3, [r7, #36] @ 0x24
  53794. 8016284: 685a ldr r2, [r3, #4]
  53795. 8016286: 4b13 ldr r3, [pc, #76] @ (80162d4 <pvPortMalloc+0x188>)
  53796. 8016288: 681b ldr r3, [r3, #0]
  53797. 801628a: 431a orrs r2, r3
  53798. 801628c: 6a7b ldr r3, [r7, #36] @ 0x24
  53799. 801628e: 605a str r2, [r3, #4]
  53800. pxBlock->pxNextFreeBlock = NULL;
  53801. 8016290: 6a7b ldr r3, [r7, #36] @ 0x24
  53802. 8016292: 2200 movs r2, #0
  53803. 8016294: 601a str r2, [r3, #0]
  53804. xNumberOfSuccessfulAllocations++;
  53805. 8016296: 4b13 ldr r3, [pc, #76] @ (80162e4 <pvPortMalloc+0x198>)
  53806. 8016298: 681b ldr r3, [r3, #0]
  53807. 801629a: 3301 adds r3, #1
  53808. 801629c: 4a11 ldr r2, [pc, #68] @ (80162e4 <pvPortMalloc+0x198>)
  53809. 801629e: 6013 str r3, [r2, #0]
  53810. mtCOVERAGE_TEST_MARKER();
  53811. }
  53812. traceMALLOC( pvReturn, xWantedSize );
  53813. }
  53814. ( void ) xTaskResumeAll();
  53815. 80162a0: f7fe f882 bl 80143a8 <xTaskResumeAll>
  53816. mtCOVERAGE_TEST_MARKER();
  53817. }
  53818. }
  53819. #endif
  53820. configASSERT( ( ( ( size_t ) pvReturn ) & ( size_t ) portBYTE_ALIGNMENT_MASK ) == 0 );
  53821. 80162a4: 69fb ldr r3, [r7, #28]
  53822. 80162a6: f003 0307 and.w r3, r3, #7
  53823. 80162aa: 2b00 cmp r3, #0
  53824. 80162ac: d00b beq.n 80162c6 <pvPortMalloc+0x17a>
  53825. __asm volatile
  53826. 80162ae: f04f 0350 mov.w r3, #80 @ 0x50
  53827. 80162b2: f383 8811 msr BASEPRI, r3
  53828. 80162b6: f3bf 8f6f isb sy
  53829. 80162ba: f3bf 8f4f dsb sy
  53830. 80162be: 60fb str r3, [r7, #12]
  53831. }
  53832. 80162c0: bf00 nop
  53833. 80162c2: bf00 nop
  53834. 80162c4: e7fd b.n 80162c2 <pvPortMalloc+0x176>
  53835. return pvReturn;
  53836. 80162c6: 69fb ldr r3, [r7, #28]
  53837. }
  53838. 80162c8: 4618 mov r0, r3
  53839. 80162ca: 3728 adds r7, #40 @ 0x28
  53840. 80162cc: 46bd mov sp, r7
  53841. 80162ce: bd80 pop {r7, pc}
  53842. 80162d0: 24012be0 .word 0x24012be0
  53843. 80162d4: 24012bf4 .word 0x24012bf4
  53844. 80162d8: 24012be4 .word 0x24012be4
  53845. 80162dc: 24012bd8 .word 0x24012bd8
  53846. 80162e0: 24012be8 .word 0x24012be8
  53847. 80162e4: 24012bec .word 0x24012bec
  53848. 080162e8 <vPortFree>:
  53849. /*-----------------------------------------------------------*/
  53850. void vPortFree( void *pv )
  53851. {
  53852. 80162e8: b580 push {r7, lr}
  53853. 80162ea: b086 sub sp, #24
  53854. 80162ec: af00 add r7, sp, #0
  53855. 80162ee: 6078 str r0, [r7, #4]
  53856. uint8_t *puc = ( uint8_t * ) pv;
  53857. 80162f0: 687b ldr r3, [r7, #4]
  53858. 80162f2: 617b str r3, [r7, #20]
  53859. BlockLink_t *pxLink;
  53860. if( pv != NULL )
  53861. 80162f4: 687b ldr r3, [r7, #4]
  53862. 80162f6: 2b00 cmp r3, #0
  53863. 80162f8: d04f beq.n 801639a <vPortFree+0xb2>
  53864. {
  53865. /* The memory being freed will have an BlockLink_t structure immediately
  53866. before it. */
  53867. puc -= xHeapStructSize;
  53868. 80162fa: 2308 movs r3, #8
  53869. 80162fc: 425b negs r3, r3
  53870. 80162fe: 697a ldr r2, [r7, #20]
  53871. 8016300: 4413 add r3, r2
  53872. 8016302: 617b str r3, [r7, #20]
  53873. /* This casting is to keep the compiler from issuing warnings. */
  53874. pxLink = ( void * ) puc;
  53875. 8016304: 697b ldr r3, [r7, #20]
  53876. 8016306: 613b str r3, [r7, #16]
  53877. /* Check the block is actually allocated. */
  53878. configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 );
  53879. 8016308: 693b ldr r3, [r7, #16]
  53880. 801630a: 685a ldr r2, [r3, #4]
  53881. 801630c: 4b25 ldr r3, [pc, #148] @ (80163a4 <vPortFree+0xbc>)
  53882. 801630e: 681b ldr r3, [r3, #0]
  53883. 8016310: 4013 ands r3, r2
  53884. 8016312: 2b00 cmp r3, #0
  53885. 8016314: d10b bne.n 801632e <vPortFree+0x46>
  53886. __asm volatile
  53887. 8016316: f04f 0350 mov.w r3, #80 @ 0x50
  53888. 801631a: f383 8811 msr BASEPRI, r3
  53889. 801631e: f3bf 8f6f isb sy
  53890. 8016322: f3bf 8f4f dsb sy
  53891. 8016326: 60fb str r3, [r7, #12]
  53892. }
  53893. 8016328: bf00 nop
  53894. 801632a: bf00 nop
  53895. 801632c: e7fd b.n 801632a <vPortFree+0x42>
  53896. configASSERT( pxLink->pxNextFreeBlock == NULL );
  53897. 801632e: 693b ldr r3, [r7, #16]
  53898. 8016330: 681b ldr r3, [r3, #0]
  53899. 8016332: 2b00 cmp r3, #0
  53900. 8016334: d00b beq.n 801634e <vPortFree+0x66>
  53901. __asm volatile
  53902. 8016336: f04f 0350 mov.w r3, #80 @ 0x50
  53903. 801633a: f383 8811 msr BASEPRI, r3
  53904. 801633e: f3bf 8f6f isb sy
  53905. 8016342: f3bf 8f4f dsb sy
  53906. 8016346: 60bb str r3, [r7, #8]
  53907. }
  53908. 8016348: bf00 nop
  53909. 801634a: bf00 nop
  53910. 801634c: e7fd b.n 801634a <vPortFree+0x62>
  53911. if( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 )
  53912. 801634e: 693b ldr r3, [r7, #16]
  53913. 8016350: 685a ldr r2, [r3, #4]
  53914. 8016352: 4b14 ldr r3, [pc, #80] @ (80163a4 <vPortFree+0xbc>)
  53915. 8016354: 681b ldr r3, [r3, #0]
  53916. 8016356: 4013 ands r3, r2
  53917. 8016358: 2b00 cmp r3, #0
  53918. 801635a: d01e beq.n 801639a <vPortFree+0xb2>
  53919. {
  53920. if( pxLink->pxNextFreeBlock == NULL )
  53921. 801635c: 693b ldr r3, [r7, #16]
  53922. 801635e: 681b ldr r3, [r3, #0]
  53923. 8016360: 2b00 cmp r3, #0
  53924. 8016362: d11a bne.n 801639a <vPortFree+0xb2>
  53925. {
  53926. /* The block is being returned to the heap - it is no longer
  53927. allocated. */
  53928. pxLink->xBlockSize &= ~xBlockAllocatedBit;
  53929. 8016364: 693b ldr r3, [r7, #16]
  53930. 8016366: 685a ldr r2, [r3, #4]
  53931. 8016368: 4b0e ldr r3, [pc, #56] @ (80163a4 <vPortFree+0xbc>)
  53932. 801636a: 681b ldr r3, [r3, #0]
  53933. 801636c: 43db mvns r3, r3
  53934. 801636e: 401a ands r2, r3
  53935. 8016370: 693b ldr r3, [r7, #16]
  53936. 8016372: 605a str r2, [r3, #4]
  53937. vTaskSuspendAll();
  53938. 8016374: f7fe f80a bl 801438c <vTaskSuspendAll>
  53939. {
  53940. /* Add this block to the list of free blocks. */
  53941. xFreeBytesRemaining += pxLink->xBlockSize;
  53942. 8016378: 693b ldr r3, [r7, #16]
  53943. 801637a: 685a ldr r2, [r3, #4]
  53944. 801637c: 4b0a ldr r3, [pc, #40] @ (80163a8 <vPortFree+0xc0>)
  53945. 801637e: 681b ldr r3, [r3, #0]
  53946. 8016380: 4413 add r3, r2
  53947. 8016382: 4a09 ldr r2, [pc, #36] @ (80163a8 <vPortFree+0xc0>)
  53948. 8016384: 6013 str r3, [r2, #0]
  53949. traceFREE( pv, pxLink->xBlockSize );
  53950. prvInsertBlockIntoFreeList( ( ( BlockLink_t * ) pxLink ) );
  53951. 8016386: 6938 ldr r0, [r7, #16]
  53952. 8016388: f000 f874 bl 8016474 <prvInsertBlockIntoFreeList>
  53953. xNumberOfSuccessfulFrees++;
  53954. 801638c: 4b07 ldr r3, [pc, #28] @ (80163ac <vPortFree+0xc4>)
  53955. 801638e: 681b ldr r3, [r3, #0]
  53956. 8016390: 3301 adds r3, #1
  53957. 8016392: 4a06 ldr r2, [pc, #24] @ (80163ac <vPortFree+0xc4>)
  53958. 8016394: 6013 str r3, [r2, #0]
  53959. }
  53960. ( void ) xTaskResumeAll();
  53961. 8016396: f7fe f807 bl 80143a8 <xTaskResumeAll>
  53962. else
  53963. {
  53964. mtCOVERAGE_TEST_MARKER();
  53965. }
  53966. }
  53967. }
  53968. 801639a: bf00 nop
  53969. 801639c: 3718 adds r7, #24
  53970. 801639e: 46bd mov sp, r7
  53971. 80163a0: bd80 pop {r7, pc}
  53972. 80163a2: bf00 nop
  53973. 80163a4: 24012bf4 .word 0x24012bf4
  53974. 80163a8: 24012be4 .word 0x24012be4
  53975. 80163ac: 24012bf0 .word 0x24012bf0
  53976. 080163b0 <prvHeapInit>:
  53977. /* This just exists to keep the linker quiet. */
  53978. }
  53979. /*-----------------------------------------------------------*/
  53980. static void prvHeapInit( void )
  53981. {
  53982. 80163b0: b480 push {r7}
  53983. 80163b2: b085 sub sp, #20
  53984. 80163b4: af00 add r7, sp, #0
  53985. BlockLink_t *pxFirstFreeBlock;
  53986. uint8_t *pucAlignedHeap;
  53987. size_t uxAddress;
  53988. size_t xTotalHeapSize = configTOTAL_HEAP_SIZE;
  53989. 80163b6: f44f 3380 mov.w r3, #65536 @ 0x10000
  53990. 80163ba: 60bb str r3, [r7, #8]
  53991. /* Ensure the heap starts on a correctly aligned boundary. */
  53992. uxAddress = ( size_t ) ucHeap;
  53993. 80163bc: 4b27 ldr r3, [pc, #156] @ (801645c <prvHeapInit+0xac>)
  53994. 80163be: 60fb str r3, [r7, #12]
  53995. if( ( uxAddress & portBYTE_ALIGNMENT_MASK ) != 0 )
  53996. 80163c0: 68fb ldr r3, [r7, #12]
  53997. 80163c2: f003 0307 and.w r3, r3, #7
  53998. 80163c6: 2b00 cmp r3, #0
  53999. 80163c8: d00c beq.n 80163e4 <prvHeapInit+0x34>
  54000. {
  54001. uxAddress += ( portBYTE_ALIGNMENT - 1 );
  54002. 80163ca: 68fb ldr r3, [r7, #12]
  54003. 80163cc: 3307 adds r3, #7
  54004. 80163ce: 60fb str r3, [r7, #12]
  54005. uxAddress &= ~( ( size_t ) portBYTE_ALIGNMENT_MASK );
  54006. 80163d0: 68fb ldr r3, [r7, #12]
  54007. 80163d2: f023 0307 bic.w r3, r3, #7
  54008. 80163d6: 60fb str r3, [r7, #12]
  54009. xTotalHeapSize -= uxAddress - ( size_t ) ucHeap;
  54010. 80163d8: 68ba ldr r2, [r7, #8]
  54011. 80163da: 68fb ldr r3, [r7, #12]
  54012. 80163dc: 1ad3 subs r3, r2, r3
  54013. 80163de: 4a1f ldr r2, [pc, #124] @ (801645c <prvHeapInit+0xac>)
  54014. 80163e0: 4413 add r3, r2
  54015. 80163e2: 60bb str r3, [r7, #8]
  54016. }
  54017. pucAlignedHeap = ( uint8_t * ) uxAddress;
  54018. 80163e4: 68fb ldr r3, [r7, #12]
  54019. 80163e6: 607b str r3, [r7, #4]
  54020. /* xStart is used to hold a pointer to the first item in the list of free
  54021. blocks. The void cast is used to prevent compiler warnings. */
  54022. xStart.pxNextFreeBlock = ( void * ) pucAlignedHeap;
  54023. 80163e8: 4a1d ldr r2, [pc, #116] @ (8016460 <prvHeapInit+0xb0>)
  54024. 80163ea: 687b ldr r3, [r7, #4]
  54025. 80163ec: 6013 str r3, [r2, #0]
  54026. xStart.xBlockSize = ( size_t ) 0;
  54027. 80163ee: 4b1c ldr r3, [pc, #112] @ (8016460 <prvHeapInit+0xb0>)
  54028. 80163f0: 2200 movs r2, #0
  54029. 80163f2: 605a str r2, [r3, #4]
  54030. /* pxEnd is used to mark the end of the list of free blocks and is inserted
  54031. at the end of the heap space. */
  54032. uxAddress = ( ( size_t ) pucAlignedHeap ) + xTotalHeapSize;
  54033. 80163f4: 687b ldr r3, [r7, #4]
  54034. 80163f6: 68ba ldr r2, [r7, #8]
  54035. 80163f8: 4413 add r3, r2
  54036. 80163fa: 60fb str r3, [r7, #12]
  54037. uxAddress -= xHeapStructSize;
  54038. 80163fc: 2208 movs r2, #8
  54039. 80163fe: 68fb ldr r3, [r7, #12]
  54040. 8016400: 1a9b subs r3, r3, r2
  54041. 8016402: 60fb str r3, [r7, #12]
  54042. uxAddress &= ~( ( size_t ) portBYTE_ALIGNMENT_MASK );
  54043. 8016404: 68fb ldr r3, [r7, #12]
  54044. 8016406: f023 0307 bic.w r3, r3, #7
  54045. 801640a: 60fb str r3, [r7, #12]
  54046. pxEnd = ( void * ) uxAddress;
  54047. 801640c: 68fb ldr r3, [r7, #12]
  54048. 801640e: 4a15 ldr r2, [pc, #84] @ (8016464 <prvHeapInit+0xb4>)
  54049. 8016410: 6013 str r3, [r2, #0]
  54050. pxEnd->xBlockSize = 0;
  54051. 8016412: 4b14 ldr r3, [pc, #80] @ (8016464 <prvHeapInit+0xb4>)
  54052. 8016414: 681b ldr r3, [r3, #0]
  54053. 8016416: 2200 movs r2, #0
  54054. 8016418: 605a str r2, [r3, #4]
  54055. pxEnd->pxNextFreeBlock = NULL;
  54056. 801641a: 4b12 ldr r3, [pc, #72] @ (8016464 <prvHeapInit+0xb4>)
  54057. 801641c: 681b ldr r3, [r3, #0]
  54058. 801641e: 2200 movs r2, #0
  54059. 8016420: 601a str r2, [r3, #0]
  54060. /* To start with there is a single free block that is sized to take up the
  54061. entire heap space, minus the space taken by pxEnd. */
  54062. pxFirstFreeBlock = ( void * ) pucAlignedHeap;
  54063. 8016422: 687b ldr r3, [r7, #4]
  54064. 8016424: 603b str r3, [r7, #0]
  54065. pxFirstFreeBlock->xBlockSize = uxAddress - ( size_t ) pxFirstFreeBlock;
  54066. 8016426: 683b ldr r3, [r7, #0]
  54067. 8016428: 68fa ldr r2, [r7, #12]
  54068. 801642a: 1ad2 subs r2, r2, r3
  54069. 801642c: 683b ldr r3, [r7, #0]
  54070. 801642e: 605a str r2, [r3, #4]
  54071. pxFirstFreeBlock->pxNextFreeBlock = pxEnd;
  54072. 8016430: 4b0c ldr r3, [pc, #48] @ (8016464 <prvHeapInit+0xb4>)
  54073. 8016432: 681a ldr r2, [r3, #0]
  54074. 8016434: 683b ldr r3, [r7, #0]
  54075. 8016436: 601a str r2, [r3, #0]
  54076. /* Only one block exists - and it covers the entire usable heap space. */
  54077. xMinimumEverFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
  54078. 8016438: 683b ldr r3, [r7, #0]
  54079. 801643a: 685b ldr r3, [r3, #4]
  54080. 801643c: 4a0a ldr r2, [pc, #40] @ (8016468 <prvHeapInit+0xb8>)
  54081. 801643e: 6013 str r3, [r2, #0]
  54082. xFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
  54083. 8016440: 683b ldr r3, [r7, #0]
  54084. 8016442: 685b ldr r3, [r3, #4]
  54085. 8016444: 4a09 ldr r2, [pc, #36] @ (801646c <prvHeapInit+0xbc>)
  54086. 8016446: 6013 str r3, [r2, #0]
  54087. /* Work out the position of the top bit in a size_t variable. */
  54088. xBlockAllocatedBit = ( ( size_t ) 1 ) << ( ( sizeof( size_t ) * heapBITS_PER_BYTE ) - 1 );
  54089. 8016448: 4b09 ldr r3, [pc, #36] @ (8016470 <prvHeapInit+0xc0>)
  54090. 801644a: f04f 4200 mov.w r2, #2147483648 @ 0x80000000
  54091. 801644e: 601a str r2, [r3, #0]
  54092. }
  54093. 8016450: bf00 nop
  54094. 8016452: 3714 adds r7, #20
  54095. 8016454: 46bd mov sp, r7
  54096. 8016456: f85d 7b04 ldr.w r7, [sp], #4
  54097. 801645a: 4770 bx lr
  54098. 801645c: 24002bd8 .word 0x24002bd8
  54099. 8016460: 24012bd8 .word 0x24012bd8
  54100. 8016464: 24012be0 .word 0x24012be0
  54101. 8016468: 24012be8 .word 0x24012be8
  54102. 801646c: 24012be4 .word 0x24012be4
  54103. 8016470: 24012bf4 .word 0x24012bf4
  54104. 08016474 <prvInsertBlockIntoFreeList>:
  54105. /*-----------------------------------------------------------*/
  54106. static void prvInsertBlockIntoFreeList( BlockLink_t *pxBlockToInsert )
  54107. {
  54108. 8016474: b480 push {r7}
  54109. 8016476: b085 sub sp, #20
  54110. 8016478: af00 add r7, sp, #0
  54111. 801647a: 6078 str r0, [r7, #4]
  54112. BlockLink_t *pxIterator;
  54113. uint8_t *puc;
  54114. /* Iterate through the list until a block is found that has a higher address
  54115. than the block being inserted. */
  54116. for( pxIterator = &xStart; pxIterator->pxNextFreeBlock < pxBlockToInsert; pxIterator = pxIterator->pxNextFreeBlock )
  54117. 801647c: 4b28 ldr r3, [pc, #160] @ (8016520 <prvInsertBlockIntoFreeList+0xac>)
  54118. 801647e: 60fb str r3, [r7, #12]
  54119. 8016480: e002 b.n 8016488 <prvInsertBlockIntoFreeList+0x14>
  54120. 8016482: 68fb ldr r3, [r7, #12]
  54121. 8016484: 681b ldr r3, [r3, #0]
  54122. 8016486: 60fb str r3, [r7, #12]
  54123. 8016488: 68fb ldr r3, [r7, #12]
  54124. 801648a: 681b ldr r3, [r3, #0]
  54125. 801648c: 687a ldr r2, [r7, #4]
  54126. 801648e: 429a cmp r2, r3
  54127. 8016490: d8f7 bhi.n 8016482 <prvInsertBlockIntoFreeList+0xe>
  54128. /* Nothing to do here, just iterate to the right position. */
  54129. }
  54130. /* Do the block being inserted, and the block it is being inserted after
  54131. make a contiguous block of memory? */
  54132. puc = ( uint8_t * ) pxIterator;
  54133. 8016492: 68fb ldr r3, [r7, #12]
  54134. 8016494: 60bb str r3, [r7, #8]
  54135. if( ( puc + pxIterator->xBlockSize ) == ( uint8_t * ) pxBlockToInsert )
  54136. 8016496: 68fb ldr r3, [r7, #12]
  54137. 8016498: 685b ldr r3, [r3, #4]
  54138. 801649a: 68ba ldr r2, [r7, #8]
  54139. 801649c: 4413 add r3, r2
  54140. 801649e: 687a ldr r2, [r7, #4]
  54141. 80164a0: 429a cmp r2, r3
  54142. 80164a2: d108 bne.n 80164b6 <prvInsertBlockIntoFreeList+0x42>
  54143. {
  54144. pxIterator->xBlockSize += pxBlockToInsert->xBlockSize;
  54145. 80164a4: 68fb ldr r3, [r7, #12]
  54146. 80164a6: 685a ldr r2, [r3, #4]
  54147. 80164a8: 687b ldr r3, [r7, #4]
  54148. 80164aa: 685b ldr r3, [r3, #4]
  54149. 80164ac: 441a add r2, r3
  54150. 80164ae: 68fb ldr r3, [r7, #12]
  54151. 80164b0: 605a str r2, [r3, #4]
  54152. pxBlockToInsert = pxIterator;
  54153. 80164b2: 68fb ldr r3, [r7, #12]
  54154. 80164b4: 607b str r3, [r7, #4]
  54155. mtCOVERAGE_TEST_MARKER();
  54156. }
  54157. /* Do the block being inserted, and the block it is being inserted before
  54158. make a contiguous block of memory? */
  54159. puc = ( uint8_t * ) pxBlockToInsert;
  54160. 80164b6: 687b ldr r3, [r7, #4]
  54161. 80164b8: 60bb str r3, [r7, #8]
  54162. if( ( puc + pxBlockToInsert->xBlockSize ) == ( uint8_t * ) pxIterator->pxNextFreeBlock )
  54163. 80164ba: 687b ldr r3, [r7, #4]
  54164. 80164bc: 685b ldr r3, [r3, #4]
  54165. 80164be: 68ba ldr r2, [r7, #8]
  54166. 80164c0: 441a add r2, r3
  54167. 80164c2: 68fb ldr r3, [r7, #12]
  54168. 80164c4: 681b ldr r3, [r3, #0]
  54169. 80164c6: 429a cmp r2, r3
  54170. 80164c8: d118 bne.n 80164fc <prvInsertBlockIntoFreeList+0x88>
  54171. {
  54172. if( pxIterator->pxNextFreeBlock != pxEnd )
  54173. 80164ca: 68fb ldr r3, [r7, #12]
  54174. 80164cc: 681a ldr r2, [r3, #0]
  54175. 80164ce: 4b15 ldr r3, [pc, #84] @ (8016524 <prvInsertBlockIntoFreeList+0xb0>)
  54176. 80164d0: 681b ldr r3, [r3, #0]
  54177. 80164d2: 429a cmp r2, r3
  54178. 80164d4: d00d beq.n 80164f2 <prvInsertBlockIntoFreeList+0x7e>
  54179. {
  54180. /* Form one big block from the two blocks. */
  54181. pxBlockToInsert->xBlockSize += pxIterator->pxNextFreeBlock->xBlockSize;
  54182. 80164d6: 687b ldr r3, [r7, #4]
  54183. 80164d8: 685a ldr r2, [r3, #4]
  54184. 80164da: 68fb ldr r3, [r7, #12]
  54185. 80164dc: 681b ldr r3, [r3, #0]
  54186. 80164de: 685b ldr r3, [r3, #4]
  54187. 80164e0: 441a add r2, r3
  54188. 80164e2: 687b ldr r3, [r7, #4]
  54189. 80164e4: 605a str r2, [r3, #4]
  54190. pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock->pxNextFreeBlock;
  54191. 80164e6: 68fb ldr r3, [r7, #12]
  54192. 80164e8: 681b ldr r3, [r3, #0]
  54193. 80164ea: 681a ldr r2, [r3, #0]
  54194. 80164ec: 687b ldr r3, [r7, #4]
  54195. 80164ee: 601a str r2, [r3, #0]
  54196. 80164f0: e008 b.n 8016504 <prvInsertBlockIntoFreeList+0x90>
  54197. }
  54198. else
  54199. {
  54200. pxBlockToInsert->pxNextFreeBlock = pxEnd;
  54201. 80164f2: 4b0c ldr r3, [pc, #48] @ (8016524 <prvInsertBlockIntoFreeList+0xb0>)
  54202. 80164f4: 681a ldr r2, [r3, #0]
  54203. 80164f6: 687b ldr r3, [r7, #4]
  54204. 80164f8: 601a str r2, [r3, #0]
  54205. 80164fa: e003 b.n 8016504 <prvInsertBlockIntoFreeList+0x90>
  54206. }
  54207. }
  54208. else
  54209. {
  54210. pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock;
  54211. 80164fc: 68fb ldr r3, [r7, #12]
  54212. 80164fe: 681a ldr r2, [r3, #0]
  54213. 8016500: 687b ldr r3, [r7, #4]
  54214. 8016502: 601a str r2, [r3, #0]
  54215. /* If the block being inserted plugged a gab, so was merged with the block
  54216. before and the block after, then it's pxNextFreeBlock pointer will have
  54217. already been set, and should not be set here as that would make it point
  54218. to itself. */
  54219. if( pxIterator != pxBlockToInsert )
  54220. 8016504: 68fa ldr r2, [r7, #12]
  54221. 8016506: 687b ldr r3, [r7, #4]
  54222. 8016508: 429a cmp r2, r3
  54223. 801650a: d002 beq.n 8016512 <prvInsertBlockIntoFreeList+0x9e>
  54224. {
  54225. pxIterator->pxNextFreeBlock = pxBlockToInsert;
  54226. 801650c: 68fb ldr r3, [r7, #12]
  54227. 801650e: 687a ldr r2, [r7, #4]
  54228. 8016510: 601a str r2, [r3, #0]
  54229. }
  54230. else
  54231. {
  54232. mtCOVERAGE_TEST_MARKER();
  54233. }
  54234. }
  54235. 8016512: bf00 nop
  54236. 8016514: 3714 adds r7, #20
  54237. 8016516: 46bd mov sp, r7
  54238. 8016518: f85d 7b04 ldr.w r7, [sp], #4
  54239. 801651c: 4770 bx lr
  54240. 801651e: bf00 nop
  54241. 8016520: 24012bd8 .word 0x24012bd8
  54242. 8016524: 24012be0 .word 0x24012be0
  54243. 08016528 <std>:
  54244. 8016528: 2300 movs r3, #0
  54245. 801652a: b510 push {r4, lr}
  54246. 801652c: 4604 mov r4, r0
  54247. 801652e: e9c0 3300 strd r3, r3, [r0]
  54248. 8016532: e9c0 3304 strd r3, r3, [r0, #16]
  54249. 8016536: 6083 str r3, [r0, #8]
  54250. 8016538: 8181 strh r1, [r0, #12]
  54251. 801653a: 6643 str r3, [r0, #100] @ 0x64
  54252. 801653c: 81c2 strh r2, [r0, #14]
  54253. 801653e: 6183 str r3, [r0, #24]
  54254. 8016540: 4619 mov r1, r3
  54255. 8016542: 2208 movs r2, #8
  54256. 8016544: 305c adds r0, #92 @ 0x5c
  54257. 8016546: f000 f906 bl 8016756 <memset>
  54258. 801654a: 4b0d ldr r3, [pc, #52] @ (8016580 <std+0x58>)
  54259. 801654c: 6263 str r3, [r4, #36] @ 0x24
  54260. 801654e: 4b0d ldr r3, [pc, #52] @ (8016584 <std+0x5c>)
  54261. 8016550: 62a3 str r3, [r4, #40] @ 0x28
  54262. 8016552: 4b0d ldr r3, [pc, #52] @ (8016588 <std+0x60>)
  54263. 8016554: 62e3 str r3, [r4, #44] @ 0x2c
  54264. 8016556: 4b0d ldr r3, [pc, #52] @ (801658c <std+0x64>)
  54265. 8016558: 6323 str r3, [r4, #48] @ 0x30
  54266. 801655a: 4b0d ldr r3, [pc, #52] @ (8016590 <std+0x68>)
  54267. 801655c: 6224 str r4, [r4, #32]
  54268. 801655e: 429c cmp r4, r3
  54269. 8016560: d006 beq.n 8016570 <std+0x48>
  54270. 8016562: f103 0268 add.w r2, r3, #104 @ 0x68
  54271. 8016566: 4294 cmp r4, r2
  54272. 8016568: d002 beq.n 8016570 <std+0x48>
  54273. 801656a: 33d0 adds r3, #208 @ 0xd0
  54274. 801656c: 429c cmp r4, r3
  54275. 801656e: d105 bne.n 801657c <std+0x54>
  54276. 8016570: f104 0058 add.w r0, r4, #88 @ 0x58
  54277. 8016574: e8bd 4010 ldmia.w sp!, {r4, lr}
  54278. 8016578: f000 b9bc b.w 80168f4 <__retarget_lock_init_recursive>
  54279. 801657c: bd10 pop {r4, pc}
  54280. 801657e: bf00 nop
  54281. 8016580: 080166d1 .word 0x080166d1
  54282. 8016584: 080166f3 .word 0x080166f3
  54283. 8016588: 0801672b .word 0x0801672b
  54284. 801658c: 0801674f .word 0x0801674f
  54285. 8016590: 24012bf8 .word 0x24012bf8
  54286. 08016594 <stdio_exit_handler>:
  54287. 8016594: 4a02 ldr r2, [pc, #8] @ (80165a0 <stdio_exit_handler+0xc>)
  54288. 8016596: 4903 ldr r1, [pc, #12] @ (80165a4 <stdio_exit_handler+0x10>)
  54289. 8016598: 4803 ldr r0, [pc, #12] @ (80165a8 <stdio_exit_handler+0x14>)
  54290. 801659a: f000 b869 b.w 8016670 <_fwalk_sglue>
  54291. 801659e: bf00 nop
  54292. 80165a0: 24000048 .word 0x24000048
  54293. 80165a4: 080171b1 .word 0x080171b1
  54294. 80165a8: 24000058 .word 0x24000058
  54295. 080165ac <cleanup_stdio>:
  54296. 80165ac: 6841 ldr r1, [r0, #4]
  54297. 80165ae: 4b0c ldr r3, [pc, #48] @ (80165e0 <cleanup_stdio+0x34>)
  54298. 80165b0: 4299 cmp r1, r3
  54299. 80165b2: b510 push {r4, lr}
  54300. 80165b4: 4604 mov r4, r0
  54301. 80165b6: d001 beq.n 80165bc <cleanup_stdio+0x10>
  54302. 80165b8: f000 fdfa bl 80171b0 <_fflush_r>
  54303. 80165bc: 68a1 ldr r1, [r4, #8]
  54304. 80165be: 4b09 ldr r3, [pc, #36] @ (80165e4 <cleanup_stdio+0x38>)
  54305. 80165c0: 4299 cmp r1, r3
  54306. 80165c2: d002 beq.n 80165ca <cleanup_stdio+0x1e>
  54307. 80165c4: 4620 mov r0, r4
  54308. 80165c6: f000 fdf3 bl 80171b0 <_fflush_r>
  54309. 80165ca: 68e1 ldr r1, [r4, #12]
  54310. 80165cc: 4b06 ldr r3, [pc, #24] @ (80165e8 <cleanup_stdio+0x3c>)
  54311. 80165ce: 4299 cmp r1, r3
  54312. 80165d0: d004 beq.n 80165dc <cleanup_stdio+0x30>
  54313. 80165d2: 4620 mov r0, r4
  54314. 80165d4: e8bd 4010 ldmia.w sp!, {r4, lr}
  54315. 80165d8: f000 bdea b.w 80171b0 <_fflush_r>
  54316. 80165dc: bd10 pop {r4, pc}
  54317. 80165de: bf00 nop
  54318. 80165e0: 24012bf8 .word 0x24012bf8
  54319. 80165e4: 24012c60 .word 0x24012c60
  54320. 80165e8: 24012cc8 .word 0x24012cc8
  54321. 080165ec <global_stdio_init.part.0>:
  54322. 80165ec: b510 push {r4, lr}
  54323. 80165ee: 4b0b ldr r3, [pc, #44] @ (801661c <global_stdio_init.part.0+0x30>)
  54324. 80165f0: 4c0b ldr r4, [pc, #44] @ (8016620 <global_stdio_init.part.0+0x34>)
  54325. 80165f2: 4a0c ldr r2, [pc, #48] @ (8016624 <global_stdio_init.part.0+0x38>)
  54326. 80165f4: 601a str r2, [r3, #0]
  54327. 80165f6: 4620 mov r0, r4
  54328. 80165f8: 2200 movs r2, #0
  54329. 80165fa: 2104 movs r1, #4
  54330. 80165fc: f7ff ff94 bl 8016528 <std>
  54331. 8016600: f104 0068 add.w r0, r4, #104 @ 0x68
  54332. 8016604: 2201 movs r2, #1
  54333. 8016606: 2109 movs r1, #9
  54334. 8016608: f7ff ff8e bl 8016528 <std>
  54335. 801660c: f104 00d0 add.w r0, r4, #208 @ 0xd0
  54336. 8016610: 2202 movs r2, #2
  54337. 8016612: e8bd 4010 ldmia.w sp!, {r4, lr}
  54338. 8016616: 2112 movs r1, #18
  54339. 8016618: f7ff bf86 b.w 8016528 <std>
  54340. 801661c: 24012d30 .word 0x24012d30
  54341. 8016620: 24012bf8 .word 0x24012bf8
  54342. 8016624: 08016595 .word 0x08016595
  54343. 08016628 <__sfp_lock_acquire>:
  54344. 8016628: 4801 ldr r0, [pc, #4] @ (8016630 <__sfp_lock_acquire+0x8>)
  54345. 801662a: f000 b964 b.w 80168f6 <__retarget_lock_acquire_recursive>
  54346. 801662e: bf00 nop
  54347. 8016630: 24012d39 .word 0x24012d39
  54348. 08016634 <__sfp_lock_release>:
  54349. 8016634: 4801 ldr r0, [pc, #4] @ (801663c <__sfp_lock_release+0x8>)
  54350. 8016636: f000 b95f b.w 80168f8 <__retarget_lock_release_recursive>
  54351. 801663a: bf00 nop
  54352. 801663c: 24012d39 .word 0x24012d39
  54353. 08016640 <__sinit>:
  54354. 8016640: b510 push {r4, lr}
  54355. 8016642: 4604 mov r4, r0
  54356. 8016644: f7ff fff0 bl 8016628 <__sfp_lock_acquire>
  54357. 8016648: 6a23 ldr r3, [r4, #32]
  54358. 801664a: b11b cbz r3, 8016654 <__sinit+0x14>
  54359. 801664c: e8bd 4010 ldmia.w sp!, {r4, lr}
  54360. 8016650: f7ff bff0 b.w 8016634 <__sfp_lock_release>
  54361. 8016654: 4b04 ldr r3, [pc, #16] @ (8016668 <__sinit+0x28>)
  54362. 8016656: 6223 str r3, [r4, #32]
  54363. 8016658: 4b04 ldr r3, [pc, #16] @ (801666c <__sinit+0x2c>)
  54364. 801665a: 681b ldr r3, [r3, #0]
  54365. 801665c: 2b00 cmp r3, #0
  54366. 801665e: d1f5 bne.n 801664c <__sinit+0xc>
  54367. 8016660: f7ff ffc4 bl 80165ec <global_stdio_init.part.0>
  54368. 8016664: e7f2 b.n 801664c <__sinit+0xc>
  54369. 8016666: bf00 nop
  54370. 8016668: 080165ad .word 0x080165ad
  54371. 801666c: 24012d30 .word 0x24012d30
  54372. 08016670 <_fwalk_sglue>:
  54373. 8016670: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
  54374. 8016674: 4607 mov r7, r0
  54375. 8016676: 4688 mov r8, r1
  54376. 8016678: 4614 mov r4, r2
  54377. 801667a: 2600 movs r6, #0
  54378. 801667c: e9d4 9501 ldrd r9, r5, [r4, #4]
  54379. 8016680: f1b9 0901 subs.w r9, r9, #1
  54380. 8016684: d505 bpl.n 8016692 <_fwalk_sglue+0x22>
  54381. 8016686: 6824 ldr r4, [r4, #0]
  54382. 8016688: 2c00 cmp r4, #0
  54383. 801668a: d1f7 bne.n 801667c <_fwalk_sglue+0xc>
  54384. 801668c: 4630 mov r0, r6
  54385. 801668e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
  54386. 8016692: 89ab ldrh r3, [r5, #12]
  54387. 8016694: 2b01 cmp r3, #1
  54388. 8016696: d907 bls.n 80166a8 <_fwalk_sglue+0x38>
  54389. 8016698: f9b5 300e ldrsh.w r3, [r5, #14]
  54390. 801669c: 3301 adds r3, #1
  54391. 801669e: d003 beq.n 80166a8 <_fwalk_sglue+0x38>
  54392. 80166a0: 4629 mov r1, r5
  54393. 80166a2: 4638 mov r0, r7
  54394. 80166a4: 47c0 blx r8
  54395. 80166a6: 4306 orrs r6, r0
  54396. 80166a8: 3568 adds r5, #104 @ 0x68
  54397. 80166aa: e7e9 b.n 8016680 <_fwalk_sglue+0x10>
  54398. 080166ac <iprintf>:
  54399. 80166ac: b40f push {r0, r1, r2, r3}
  54400. 80166ae: b507 push {r0, r1, r2, lr}
  54401. 80166b0: 4906 ldr r1, [pc, #24] @ (80166cc <iprintf+0x20>)
  54402. 80166b2: ab04 add r3, sp, #16
  54403. 80166b4: 6808 ldr r0, [r1, #0]
  54404. 80166b6: f853 2b04 ldr.w r2, [r3], #4
  54405. 80166ba: 6881 ldr r1, [r0, #8]
  54406. 80166bc: 9301 str r3, [sp, #4]
  54407. 80166be: f000 fa4d bl 8016b5c <_vfiprintf_r>
  54408. 80166c2: b003 add sp, #12
  54409. 80166c4: f85d eb04 ldr.w lr, [sp], #4
  54410. 80166c8: b004 add sp, #16
  54411. 80166ca: 4770 bx lr
  54412. 80166cc: 24000054 .word 0x24000054
  54413. 080166d0 <__sread>:
  54414. 80166d0: b510 push {r4, lr}
  54415. 80166d2: 460c mov r4, r1
  54416. 80166d4: f9b1 100e ldrsh.w r1, [r1, #14]
  54417. 80166d8: f000 f8be bl 8016858 <_read_r>
  54418. 80166dc: 2800 cmp r0, #0
  54419. 80166de: bfab itete ge
  54420. 80166e0: 6d63 ldrge r3, [r4, #84] @ 0x54
  54421. 80166e2: 89a3 ldrhlt r3, [r4, #12]
  54422. 80166e4: 181b addge r3, r3, r0
  54423. 80166e6: f423 5380 biclt.w r3, r3, #4096 @ 0x1000
  54424. 80166ea: bfac ite ge
  54425. 80166ec: 6563 strge r3, [r4, #84] @ 0x54
  54426. 80166ee: 81a3 strhlt r3, [r4, #12]
  54427. 80166f0: bd10 pop {r4, pc}
  54428. 080166f2 <__swrite>:
  54429. 80166f2: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
  54430. 80166f6: 461f mov r7, r3
  54431. 80166f8: 898b ldrh r3, [r1, #12]
  54432. 80166fa: 05db lsls r3, r3, #23
  54433. 80166fc: 4605 mov r5, r0
  54434. 80166fe: 460c mov r4, r1
  54435. 8016700: 4616 mov r6, r2
  54436. 8016702: d505 bpl.n 8016710 <__swrite+0x1e>
  54437. 8016704: f9b1 100e ldrsh.w r1, [r1, #14]
  54438. 8016708: 2302 movs r3, #2
  54439. 801670a: 2200 movs r2, #0
  54440. 801670c: f000 f892 bl 8016834 <_lseek_r>
  54441. 8016710: 89a3 ldrh r3, [r4, #12]
  54442. 8016712: f9b4 100e ldrsh.w r1, [r4, #14]
  54443. 8016716: f423 5380 bic.w r3, r3, #4096 @ 0x1000
  54444. 801671a: 81a3 strh r3, [r4, #12]
  54445. 801671c: 4632 mov r2, r6
  54446. 801671e: 463b mov r3, r7
  54447. 8016720: 4628 mov r0, r5
  54448. 8016722: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
  54449. 8016726: f000 b8a9 b.w 801687c <_write_r>
  54450. 0801672a <__sseek>:
  54451. 801672a: b510 push {r4, lr}
  54452. 801672c: 460c mov r4, r1
  54453. 801672e: f9b1 100e ldrsh.w r1, [r1, #14]
  54454. 8016732: f000 f87f bl 8016834 <_lseek_r>
  54455. 8016736: 1c43 adds r3, r0, #1
  54456. 8016738: 89a3 ldrh r3, [r4, #12]
  54457. 801673a: bf15 itete ne
  54458. 801673c: 6560 strne r0, [r4, #84] @ 0x54
  54459. 801673e: f423 5380 biceq.w r3, r3, #4096 @ 0x1000
  54460. 8016742: f443 5380 orrne.w r3, r3, #4096 @ 0x1000
  54461. 8016746: 81a3 strheq r3, [r4, #12]
  54462. 8016748: bf18 it ne
  54463. 801674a: 81a3 strhne r3, [r4, #12]
  54464. 801674c: bd10 pop {r4, pc}
  54465. 0801674e <__sclose>:
  54466. 801674e: f9b1 100e ldrsh.w r1, [r1, #14]
  54467. 8016752: f000 b809 b.w 8016768 <_close_r>
  54468. 08016756 <memset>:
  54469. 8016756: 4402 add r2, r0
  54470. 8016758: 4603 mov r3, r0
  54471. 801675a: 4293 cmp r3, r2
  54472. 801675c: d100 bne.n 8016760 <memset+0xa>
  54473. 801675e: 4770 bx lr
  54474. 8016760: f803 1b01 strb.w r1, [r3], #1
  54475. 8016764: e7f9 b.n 801675a <memset+0x4>
  54476. ...
  54477. 08016768 <_close_r>:
  54478. 8016768: b538 push {r3, r4, r5, lr}
  54479. 801676a: 4d06 ldr r5, [pc, #24] @ (8016784 <_close_r+0x1c>)
  54480. 801676c: 2300 movs r3, #0
  54481. 801676e: 4604 mov r4, r0
  54482. 8016770: 4608 mov r0, r1
  54483. 8016772: 602b str r3, [r5, #0]
  54484. 8016774: f7ed f8ed bl 8003952 <_close>
  54485. 8016778: 1c43 adds r3, r0, #1
  54486. 801677a: d102 bne.n 8016782 <_close_r+0x1a>
  54487. 801677c: 682b ldr r3, [r5, #0]
  54488. 801677e: b103 cbz r3, 8016782 <_close_r+0x1a>
  54489. 8016780: 6023 str r3, [r4, #0]
  54490. 8016782: bd38 pop {r3, r4, r5, pc}
  54491. 8016784: 24012d34 .word 0x24012d34
  54492. 08016788 <_reclaim_reent>:
  54493. 8016788: 4b29 ldr r3, [pc, #164] @ (8016830 <_reclaim_reent+0xa8>)
  54494. 801678a: 681b ldr r3, [r3, #0]
  54495. 801678c: 4283 cmp r3, r0
  54496. 801678e: b570 push {r4, r5, r6, lr}
  54497. 8016790: 4604 mov r4, r0
  54498. 8016792: d04b beq.n 801682c <_reclaim_reent+0xa4>
  54499. 8016794: 69c3 ldr r3, [r0, #28]
  54500. 8016796: b1ab cbz r3, 80167c4 <_reclaim_reent+0x3c>
  54501. 8016798: 68db ldr r3, [r3, #12]
  54502. 801679a: b16b cbz r3, 80167b8 <_reclaim_reent+0x30>
  54503. 801679c: 2500 movs r5, #0
  54504. 801679e: 69e3 ldr r3, [r4, #28]
  54505. 80167a0: 68db ldr r3, [r3, #12]
  54506. 80167a2: 5959 ldr r1, [r3, r5]
  54507. 80167a4: 2900 cmp r1, #0
  54508. 80167a6: d13b bne.n 8016820 <_reclaim_reent+0x98>
  54509. 80167a8: 3504 adds r5, #4
  54510. 80167aa: 2d80 cmp r5, #128 @ 0x80
  54511. 80167ac: d1f7 bne.n 801679e <_reclaim_reent+0x16>
  54512. 80167ae: 69e3 ldr r3, [r4, #28]
  54513. 80167b0: 4620 mov r0, r4
  54514. 80167b2: 68d9 ldr r1, [r3, #12]
  54515. 80167b4: f000 f8b0 bl 8016918 <_free_r>
  54516. 80167b8: 69e3 ldr r3, [r4, #28]
  54517. 80167ba: 6819 ldr r1, [r3, #0]
  54518. 80167bc: b111 cbz r1, 80167c4 <_reclaim_reent+0x3c>
  54519. 80167be: 4620 mov r0, r4
  54520. 80167c0: f000 f8aa bl 8016918 <_free_r>
  54521. 80167c4: 6961 ldr r1, [r4, #20]
  54522. 80167c6: b111 cbz r1, 80167ce <_reclaim_reent+0x46>
  54523. 80167c8: 4620 mov r0, r4
  54524. 80167ca: f000 f8a5 bl 8016918 <_free_r>
  54525. 80167ce: 69e1 ldr r1, [r4, #28]
  54526. 80167d0: b111 cbz r1, 80167d8 <_reclaim_reent+0x50>
  54527. 80167d2: 4620 mov r0, r4
  54528. 80167d4: f000 f8a0 bl 8016918 <_free_r>
  54529. 80167d8: 6b21 ldr r1, [r4, #48] @ 0x30
  54530. 80167da: b111 cbz r1, 80167e2 <_reclaim_reent+0x5a>
  54531. 80167dc: 4620 mov r0, r4
  54532. 80167de: f000 f89b bl 8016918 <_free_r>
  54533. 80167e2: 6b61 ldr r1, [r4, #52] @ 0x34
  54534. 80167e4: b111 cbz r1, 80167ec <_reclaim_reent+0x64>
  54535. 80167e6: 4620 mov r0, r4
  54536. 80167e8: f000 f896 bl 8016918 <_free_r>
  54537. 80167ec: 6ba1 ldr r1, [r4, #56] @ 0x38
  54538. 80167ee: b111 cbz r1, 80167f6 <_reclaim_reent+0x6e>
  54539. 80167f0: 4620 mov r0, r4
  54540. 80167f2: f000 f891 bl 8016918 <_free_r>
  54541. 80167f6: 6ca1 ldr r1, [r4, #72] @ 0x48
  54542. 80167f8: b111 cbz r1, 8016800 <_reclaim_reent+0x78>
  54543. 80167fa: 4620 mov r0, r4
  54544. 80167fc: f000 f88c bl 8016918 <_free_r>
  54545. 8016800: 6c61 ldr r1, [r4, #68] @ 0x44
  54546. 8016802: b111 cbz r1, 801680a <_reclaim_reent+0x82>
  54547. 8016804: 4620 mov r0, r4
  54548. 8016806: f000 f887 bl 8016918 <_free_r>
  54549. 801680a: 6ae1 ldr r1, [r4, #44] @ 0x2c
  54550. 801680c: b111 cbz r1, 8016814 <_reclaim_reent+0x8c>
  54551. 801680e: 4620 mov r0, r4
  54552. 8016810: f000 f882 bl 8016918 <_free_r>
  54553. 8016814: 6a23 ldr r3, [r4, #32]
  54554. 8016816: b14b cbz r3, 801682c <_reclaim_reent+0xa4>
  54555. 8016818: 4620 mov r0, r4
  54556. 801681a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
  54557. 801681e: 4718 bx r3
  54558. 8016820: 680e ldr r6, [r1, #0]
  54559. 8016822: 4620 mov r0, r4
  54560. 8016824: f000 f878 bl 8016918 <_free_r>
  54561. 8016828: 4631 mov r1, r6
  54562. 801682a: e7bb b.n 80167a4 <_reclaim_reent+0x1c>
  54563. 801682c: bd70 pop {r4, r5, r6, pc}
  54564. 801682e: bf00 nop
  54565. 8016830: 24000054 .word 0x24000054
  54566. 08016834 <_lseek_r>:
  54567. 8016834: b538 push {r3, r4, r5, lr}
  54568. 8016836: 4d07 ldr r5, [pc, #28] @ (8016854 <_lseek_r+0x20>)
  54569. 8016838: 4604 mov r4, r0
  54570. 801683a: 4608 mov r0, r1
  54571. 801683c: 4611 mov r1, r2
  54572. 801683e: 2200 movs r2, #0
  54573. 8016840: 602a str r2, [r5, #0]
  54574. 8016842: 461a mov r2, r3
  54575. 8016844: f7ed f8ac bl 80039a0 <_lseek>
  54576. 8016848: 1c43 adds r3, r0, #1
  54577. 801684a: d102 bne.n 8016852 <_lseek_r+0x1e>
  54578. 801684c: 682b ldr r3, [r5, #0]
  54579. 801684e: b103 cbz r3, 8016852 <_lseek_r+0x1e>
  54580. 8016850: 6023 str r3, [r4, #0]
  54581. 8016852: bd38 pop {r3, r4, r5, pc}
  54582. 8016854: 24012d34 .word 0x24012d34
  54583. 08016858 <_read_r>:
  54584. 8016858: b538 push {r3, r4, r5, lr}
  54585. 801685a: 4d07 ldr r5, [pc, #28] @ (8016878 <_read_r+0x20>)
  54586. 801685c: 4604 mov r4, r0
  54587. 801685e: 4608 mov r0, r1
  54588. 8016860: 4611 mov r1, r2
  54589. 8016862: 2200 movs r2, #0
  54590. 8016864: 602a str r2, [r5, #0]
  54591. 8016866: 461a mov r2, r3
  54592. 8016868: f7ed f83a bl 80038e0 <_read>
  54593. 801686c: 1c43 adds r3, r0, #1
  54594. 801686e: d102 bne.n 8016876 <_read_r+0x1e>
  54595. 8016870: 682b ldr r3, [r5, #0]
  54596. 8016872: b103 cbz r3, 8016876 <_read_r+0x1e>
  54597. 8016874: 6023 str r3, [r4, #0]
  54598. 8016876: bd38 pop {r3, r4, r5, pc}
  54599. 8016878: 24012d34 .word 0x24012d34
  54600. 0801687c <_write_r>:
  54601. 801687c: b538 push {r3, r4, r5, lr}
  54602. 801687e: 4d07 ldr r5, [pc, #28] @ (801689c <_write_r+0x20>)
  54603. 8016880: 4604 mov r4, r0
  54604. 8016882: 4608 mov r0, r1
  54605. 8016884: 4611 mov r1, r2
  54606. 8016886: 2200 movs r2, #0
  54607. 8016888: 602a str r2, [r5, #0]
  54608. 801688a: 461a mov r2, r3
  54609. 801688c: f7ed f845 bl 800391a <_write>
  54610. 8016890: 1c43 adds r3, r0, #1
  54611. 8016892: d102 bne.n 801689a <_write_r+0x1e>
  54612. 8016894: 682b ldr r3, [r5, #0]
  54613. 8016896: b103 cbz r3, 801689a <_write_r+0x1e>
  54614. 8016898: 6023 str r3, [r4, #0]
  54615. 801689a: bd38 pop {r3, r4, r5, pc}
  54616. 801689c: 24012d34 .word 0x24012d34
  54617. 080168a0 <__errno>:
  54618. 80168a0: 4b01 ldr r3, [pc, #4] @ (80168a8 <__errno+0x8>)
  54619. 80168a2: 6818 ldr r0, [r3, #0]
  54620. 80168a4: 4770 bx lr
  54621. 80168a6: bf00 nop
  54622. 80168a8: 24000054 .word 0x24000054
  54623. 080168ac <__libc_init_array>:
  54624. 80168ac: b570 push {r4, r5, r6, lr}
  54625. 80168ae: 4d0d ldr r5, [pc, #52] @ (80168e4 <__libc_init_array+0x38>)
  54626. 80168b0: 4c0d ldr r4, [pc, #52] @ (80168e8 <__libc_init_array+0x3c>)
  54627. 80168b2: 1b64 subs r4, r4, r5
  54628. 80168b4: 10a4 asrs r4, r4, #2
  54629. 80168b6: 2600 movs r6, #0
  54630. 80168b8: 42a6 cmp r6, r4
  54631. 80168ba: d109 bne.n 80168d0 <__libc_init_array+0x24>
  54632. 80168bc: 4d0b ldr r5, [pc, #44] @ (80168ec <__libc_init_array+0x40>)
  54633. 80168be: 4c0c ldr r4, [pc, #48] @ (80168f0 <__libc_init_array+0x44>)
  54634. 80168c0: f000 fdc6 bl 8017450 <_init>
  54635. 80168c4: 1b64 subs r4, r4, r5
  54636. 80168c6: 10a4 asrs r4, r4, #2
  54637. 80168c8: 2600 movs r6, #0
  54638. 80168ca: 42a6 cmp r6, r4
  54639. 80168cc: d105 bne.n 80168da <__libc_init_array+0x2e>
  54640. 80168ce: bd70 pop {r4, r5, r6, pc}
  54641. 80168d0: f855 3b04 ldr.w r3, [r5], #4
  54642. 80168d4: 4798 blx r3
  54643. 80168d6: 3601 adds r6, #1
  54644. 80168d8: e7ee b.n 80168b8 <__libc_init_array+0xc>
  54645. 80168da: f855 3b04 ldr.w r3, [r5], #4
  54646. 80168de: 4798 blx r3
  54647. 80168e0: 3601 adds r6, #1
  54648. 80168e2: e7f2 b.n 80168ca <__libc_init_array+0x1e>
  54649. 80168e4: 08017644 .word 0x08017644
  54650. 80168e8: 08017644 .word 0x08017644
  54651. 80168ec: 08017644 .word 0x08017644
  54652. 80168f0: 08017648 .word 0x08017648
  54653. 080168f4 <__retarget_lock_init_recursive>:
  54654. 80168f4: 4770 bx lr
  54655. 080168f6 <__retarget_lock_acquire_recursive>:
  54656. 80168f6: 4770 bx lr
  54657. 080168f8 <__retarget_lock_release_recursive>:
  54658. 80168f8: 4770 bx lr
  54659. 080168fa <memcpy>:
  54660. 80168fa: 440a add r2, r1
  54661. 80168fc: 4291 cmp r1, r2
  54662. 80168fe: f100 33ff add.w r3, r0, #4294967295 @ 0xffffffff
  54663. 8016902: d100 bne.n 8016906 <memcpy+0xc>
  54664. 8016904: 4770 bx lr
  54665. 8016906: b510 push {r4, lr}
  54666. 8016908: f811 4b01 ldrb.w r4, [r1], #1
  54667. 801690c: f803 4f01 strb.w r4, [r3, #1]!
  54668. 8016910: 4291 cmp r1, r2
  54669. 8016912: d1f9 bne.n 8016908 <memcpy+0xe>
  54670. 8016914: bd10 pop {r4, pc}
  54671. ...
  54672. 08016918 <_free_r>:
  54673. 8016918: b538 push {r3, r4, r5, lr}
  54674. 801691a: 4605 mov r5, r0
  54675. 801691c: 2900 cmp r1, #0
  54676. 801691e: d041 beq.n 80169a4 <_free_r+0x8c>
  54677. 8016920: f851 3c04 ldr.w r3, [r1, #-4]
  54678. 8016924: 1f0c subs r4, r1, #4
  54679. 8016926: 2b00 cmp r3, #0
  54680. 8016928: bfb8 it lt
  54681. 801692a: 18e4 addlt r4, r4, r3
  54682. 801692c: f000 f8e0 bl 8016af0 <__malloc_lock>
  54683. 8016930: 4a1d ldr r2, [pc, #116] @ (80169a8 <_free_r+0x90>)
  54684. 8016932: 6813 ldr r3, [r2, #0]
  54685. 8016934: b933 cbnz r3, 8016944 <_free_r+0x2c>
  54686. 8016936: 6063 str r3, [r4, #4]
  54687. 8016938: 6014 str r4, [r2, #0]
  54688. 801693a: 4628 mov r0, r5
  54689. 801693c: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
  54690. 8016940: f000 b8dc b.w 8016afc <__malloc_unlock>
  54691. 8016944: 42a3 cmp r3, r4
  54692. 8016946: d908 bls.n 801695a <_free_r+0x42>
  54693. 8016948: 6820 ldr r0, [r4, #0]
  54694. 801694a: 1821 adds r1, r4, r0
  54695. 801694c: 428b cmp r3, r1
  54696. 801694e: bf01 itttt eq
  54697. 8016950: 6819 ldreq r1, [r3, #0]
  54698. 8016952: 685b ldreq r3, [r3, #4]
  54699. 8016954: 1809 addeq r1, r1, r0
  54700. 8016956: 6021 streq r1, [r4, #0]
  54701. 8016958: e7ed b.n 8016936 <_free_r+0x1e>
  54702. 801695a: 461a mov r2, r3
  54703. 801695c: 685b ldr r3, [r3, #4]
  54704. 801695e: b10b cbz r3, 8016964 <_free_r+0x4c>
  54705. 8016960: 42a3 cmp r3, r4
  54706. 8016962: d9fa bls.n 801695a <_free_r+0x42>
  54707. 8016964: 6811 ldr r1, [r2, #0]
  54708. 8016966: 1850 adds r0, r2, r1
  54709. 8016968: 42a0 cmp r0, r4
  54710. 801696a: d10b bne.n 8016984 <_free_r+0x6c>
  54711. 801696c: 6820 ldr r0, [r4, #0]
  54712. 801696e: 4401 add r1, r0
  54713. 8016970: 1850 adds r0, r2, r1
  54714. 8016972: 4283 cmp r3, r0
  54715. 8016974: 6011 str r1, [r2, #0]
  54716. 8016976: d1e0 bne.n 801693a <_free_r+0x22>
  54717. 8016978: 6818 ldr r0, [r3, #0]
  54718. 801697a: 685b ldr r3, [r3, #4]
  54719. 801697c: 6053 str r3, [r2, #4]
  54720. 801697e: 4408 add r0, r1
  54721. 8016980: 6010 str r0, [r2, #0]
  54722. 8016982: e7da b.n 801693a <_free_r+0x22>
  54723. 8016984: d902 bls.n 801698c <_free_r+0x74>
  54724. 8016986: 230c movs r3, #12
  54725. 8016988: 602b str r3, [r5, #0]
  54726. 801698a: e7d6 b.n 801693a <_free_r+0x22>
  54727. 801698c: 6820 ldr r0, [r4, #0]
  54728. 801698e: 1821 adds r1, r4, r0
  54729. 8016990: 428b cmp r3, r1
  54730. 8016992: bf04 itt eq
  54731. 8016994: 6819 ldreq r1, [r3, #0]
  54732. 8016996: 685b ldreq r3, [r3, #4]
  54733. 8016998: 6063 str r3, [r4, #4]
  54734. 801699a: bf04 itt eq
  54735. 801699c: 1809 addeq r1, r1, r0
  54736. 801699e: 6021 streq r1, [r4, #0]
  54737. 80169a0: 6054 str r4, [r2, #4]
  54738. 80169a2: e7ca b.n 801693a <_free_r+0x22>
  54739. 80169a4: bd38 pop {r3, r4, r5, pc}
  54740. 80169a6: bf00 nop
  54741. 80169a8: 24012d40 .word 0x24012d40
  54742. 080169ac <sbrk_aligned>:
  54743. 80169ac: b570 push {r4, r5, r6, lr}
  54744. 80169ae: 4e0f ldr r6, [pc, #60] @ (80169ec <sbrk_aligned+0x40>)
  54745. 80169b0: 460c mov r4, r1
  54746. 80169b2: 6831 ldr r1, [r6, #0]
  54747. 80169b4: 4605 mov r5, r0
  54748. 80169b6: b911 cbnz r1, 80169be <sbrk_aligned+0x12>
  54749. 80169b8: f000 fcb6 bl 8017328 <_sbrk_r>
  54750. 80169bc: 6030 str r0, [r6, #0]
  54751. 80169be: 4621 mov r1, r4
  54752. 80169c0: 4628 mov r0, r5
  54753. 80169c2: f000 fcb1 bl 8017328 <_sbrk_r>
  54754. 80169c6: 1c43 adds r3, r0, #1
  54755. 80169c8: d103 bne.n 80169d2 <sbrk_aligned+0x26>
  54756. 80169ca: f04f 34ff mov.w r4, #4294967295 @ 0xffffffff
  54757. 80169ce: 4620 mov r0, r4
  54758. 80169d0: bd70 pop {r4, r5, r6, pc}
  54759. 80169d2: 1cc4 adds r4, r0, #3
  54760. 80169d4: f024 0403 bic.w r4, r4, #3
  54761. 80169d8: 42a0 cmp r0, r4
  54762. 80169da: d0f8 beq.n 80169ce <sbrk_aligned+0x22>
  54763. 80169dc: 1a21 subs r1, r4, r0
  54764. 80169de: 4628 mov r0, r5
  54765. 80169e0: f000 fca2 bl 8017328 <_sbrk_r>
  54766. 80169e4: 3001 adds r0, #1
  54767. 80169e6: d1f2 bne.n 80169ce <sbrk_aligned+0x22>
  54768. 80169e8: e7ef b.n 80169ca <sbrk_aligned+0x1e>
  54769. 80169ea: bf00 nop
  54770. 80169ec: 24012d3c .word 0x24012d3c
  54771. 080169f0 <_malloc_r>:
  54772. 80169f0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
  54773. 80169f4: 1ccd adds r5, r1, #3
  54774. 80169f6: f025 0503 bic.w r5, r5, #3
  54775. 80169fa: 3508 adds r5, #8
  54776. 80169fc: 2d0c cmp r5, #12
  54777. 80169fe: bf38 it cc
  54778. 8016a00: 250c movcc r5, #12
  54779. 8016a02: 2d00 cmp r5, #0
  54780. 8016a04: 4606 mov r6, r0
  54781. 8016a06: db01 blt.n 8016a0c <_malloc_r+0x1c>
  54782. 8016a08: 42a9 cmp r1, r5
  54783. 8016a0a: d904 bls.n 8016a16 <_malloc_r+0x26>
  54784. 8016a0c: 230c movs r3, #12
  54785. 8016a0e: 6033 str r3, [r6, #0]
  54786. 8016a10: 2000 movs r0, #0
  54787. 8016a12: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
  54788. 8016a16: f8df 80d4 ldr.w r8, [pc, #212] @ 8016aec <_malloc_r+0xfc>
  54789. 8016a1a: f000 f869 bl 8016af0 <__malloc_lock>
  54790. 8016a1e: f8d8 3000 ldr.w r3, [r8]
  54791. 8016a22: 461c mov r4, r3
  54792. 8016a24: bb44 cbnz r4, 8016a78 <_malloc_r+0x88>
  54793. 8016a26: 4629 mov r1, r5
  54794. 8016a28: 4630 mov r0, r6
  54795. 8016a2a: f7ff ffbf bl 80169ac <sbrk_aligned>
  54796. 8016a2e: 1c43 adds r3, r0, #1
  54797. 8016a30: 4604 mov r4, r0
  54798. 8016a32: d158 bne.n 8016ae6 <_malloc_r+0xf6>
  54799. 8016a34: f8d8 4000 ldr.w r4, [r8]
  54800. 8016a38: 4627 mov r7, r4
  54801. 8016a3a: 2f00 cmp r7, #0
  54802. 8016a3c: d143 bne.n 8016ac6 <_malloc_r+0xd6>
  54803. 8016a3e: 2c00 cmp r4, #0
  54804. 8016a40: d04b beq.n 8016ada <_malloc_r+0xea>
  54805. 8016a42: 6823 ldr r3, [r4, #0]
  54806. 8016a44: 4639 mov r1, r7
  54807. 8016a46: 4630 mov r0, r6
  54808. 8016a48: eb04 0903 add.w r9, r4, r3
  54809. 8016a4c: f000 fc6c bl 8017328 <_sbrk_r>
  54810. 8016a50: 4581 cmp r9, r0
  54811. 8016a52: d142 bne.n 8016ada <_malloc_r+0xea>
  54812. 8016a54: 6821 ldr r1, [r4, #0]
  54813. 8016a56: 1a6d subs r5, r5, r1
  54814. 8016a58: 4629 mov r1, r5
  54815. 8016a5a: 4630 mov r0, r6
  54816. 8016a5c: f7ff ffa6 bl 80169ac <sbrk_aligned>
  54817. 8016a60: 3001 adds r0, #1
  54818. 8016a62: d03a beq.n 8016ada <_malloc_r+0xea>
  54819. 8016a64: 6823 ldr r3, [r4, #0]
  54820. 8016a66: 442b add r3, r5
  54821. 8016a68: 6023 str r3, [r4, #0]
  54822. 8016a6a: f8d8 3000 ldr.w r3, [r8]
  54823. 8016a6e: 685a ldr r2, [r3, #4]
  54824. 8016a70: bb62 cbnz r2, 8016acc <_malloc_r+0xdc>
  54825. 8016a72: f8c8 7000 str.w r7, [r8]
  54826. 8016a76: e00f b.n 8016a98 <_malloc_r+0xa8>
  54827. 8016a78: 6822 ldr r2, [r4, #0]
  54828. 8016a7a: 1b52 subs r2, r2, r5
  54829. 8016a7c: d420 bmi.n 8016ac0 <_malloc_r+0xd0>
  54830. 8016a7e: 2a0b cmp r2, #11
  54831. 8016a80: d917 bls.n 8016ab2 <_malloc_r+0xc2>
  54832. 8016a82: 1961 adds r1, r4, r5
  54833. 8016a84: 42a3 cmp r3, r4
  54834. 8016a86: 6025 str r5, [r4, #0]
  54835. 8016a88: bf18 it ne
  54836. 8016a8a: 6059 strne r1, [r3, #4]
  54837. 8016a8c: 6863 ldr r3, [r4, #4]
  54838. 8016a8e: bf08 it eq
  54839. 8016a90: f8c8 1000 streq.w r1, [r8]
  54840. 8016a94: 5162 str r2, [r4, r5]
  54841. 8016a96: 604b str r3, [r1, #4]
  54842. 8016a98: 4630 mov r0, r6
  54843. 8016a9a: f000 f82f bl 8016afc <__malloc_unlock>
  54844. 8016a9e: f104 000b add.w r0, r4, #11
  54845. 8016aa2: 1d23 adds r3, r4, #4
  54846. 8016aa4: f020 0007 bic.w r0, r0, #7
  54847. 8016aa8: 1ac2 subs r2, r0, r3
  54848. 8016aaa: bf1c itt ne
  54849. 8016aac: 1a1b subne r3, r3, r0
  54850. 8016aae: 50a3 strne r3, [r4, r2]
  54851. 8016ab0: e7af b.n 8016a12 <_malloc_r+0x22>
  54852. 8016ab2: 6862 ldr r2, [r4, #4]
  54853. 8016ab4: 42a3 cmp r3, r4
  54854. 8016ab6: bf0c ite eq
  54855. 8016ab8: f8c8 2000 streq.w r2, [r8]
  54856. 8016abc: 605a strne r2, [r3, #4]
  54857. 8016abe: e7eb b.n 8016a98 <_malloc_r+0xa8>
  54858. 8016ac0: 4623 mov r3, r4
  54859. 8016ac2: 6864 ldr r4, [r4, #4]
  54860. 8016ac4: e7ae b.n 8016a24 <_malloc_r+0x34>
  54861. 8016ac6: 463c mov r4, r7
  54862. 8016ac8: 687f ldr r7, [r7, #4]
  54863. 8016aca: e7b6 b.n 8016a3a <_malloc_r+0x4a>
  54864. 8016acc: 461a mov r2, r3
  54865. 8016ace: 685b ldr r3, [r3, #4]
  54866. 8016ad0: 42a3 cmp r3, r4
  54867. 8016ad2: d1fb bne.n 8016acc <_malloc_r+0xdc>
  54868. 8016ad4: 2300 movs r3, #0
  54869. 8016ad6: 6053 str r3, [r2, #4]
  54870. 8016ad8: e7de b.n 8016a98 <_malloc_r+0xa8>
  54871. 8016ada: 230c movs r3, #12
  54872. 8016adc: 6033 str r3, [r6, #0]
  54873. 8016ade: 4630 mov r0, r6
  54874. 8016ae0: f000 f80c bl 8016afc <__malloc_unlock>
  54875. 8016ae4: e794 b.n 8016a10 <_malloc_r+0x20>
  54876. 8016ae6: 6005 str r5, [r0, #0]
  54877. 8016ae8: e7d6 b.n 8016a98 <_malloc_r+0xa8>
  54878. 8016aea: bf00 nop
  54879. 8016aec: 24012d40 .word 0x24012d40
  54880. 08016af0 <__malloc_lock>:
  54881. 8016af0: 4801 ldr r0, [pc, #4] @ (8016af8 <__malloc_lock+0x8>)
  54882. 8016af2: f7ff bf00 b.w 80168f6 <__retarget_lock_acquire_recursive>
  54883. 8016af6: bf00 nop
  54884. 8016af8: 24012d38 .word 0x24012d38
  54885. 08016afc <__malloc_unlock>:
  54886. 8016afc: 4801 ldr r0, [pc, #4] @ (8016b04 <__malloc_unlock+0x8>)
  54887. 8016afe: f7ff befb b.w 80168f8 <__retarget_lock_release_recursive>
  54888. 8016b02: bf00 nop
  54889. 8016b04: 24012d38 .word 0x24012d38
  54890. 08016b08 <__sfputc_r>:
  54891. 8016b08: 6893 ldr r3, [r2, #8]
  54892. 8016b0a: 3b01 subs r3, #1
  54893. 8016b0c: 2b00 cmp r3, #0
  54894. 8016b0e: b410 push {r4}
  54895. 8016b10: 6093 str r3, [r2, #8]
  54896. 8016b12: da08 bge.n 8016b26 <__sfputc_r+0x1e>
  54897. 8016b14: 6994 ldr r4, [r2, #24]
  54898. 8016b16: 42a3 cmp r3, r4
  54899. 8016b18: db01 blt.n 8016b1e <__sfputc_r+0x16>
  54900. 8016b1a: 290a cmp r1, #10
  54901. 8016b1c: d103 bne.n 8016b26 <__sfputc_r+0x1e>
  54902. 8016b1e: f85d 4b04 ldr.w r4, [sp], #4
  54903. 8016b22: f000 bb6d b.w 8017200 <__swbuf_r>
  54904. 8016b26: 6813 ldr r3, [r2, #0]
  54905. 8016b28: 1c58 adds r0, r3, #1
  54906. 8016b2a: 6010 str r0, [r2, #0]
  54907. 8016b2c: 7019 strb r1, [r3, #0]
  54908. 8016b2e: 4608 mov r0, r1
  54909. 8016b30: f85d 4b04 ldr.w r4, [sp], #4
  54910. 8016b34: 4770 bx lr
  54911. 08016b36 <__sfputs_r>:
  54912. 8016b36: b5f8 push {r3, r4, r5, r6, r7, lr}
  54913. 8016b38: 4606 mov r6, r0
  54914. 8016b3a: 460f mov r7, r1
  54915. 8016b3c: 4614 mov r4, r2
  54916. 8016b3e: 18d5 adds r5, r2, r3
  54917. 8016b40: 42ac cmp r4, r5
  54918. 8016b42: d101 bne.n 8016b48 <__sfputs_r+0x12>
  54919. 8016b44: 2000 movs r0, #0
  54920. 8016b46: e007 b.n 8016b58 <__sfputs_r+0x22>
  54921. 8016b48: f814 1b01 ldrb.w r1, [r4], #1
  54922. 8016b4c: 463a mov r2, r7
  54923. 8016b4e: 4630 mov r0, r6
  54924. 8016b50: f7ff ffda bl 8016b08 <__sfputc_r>
  54925. 8016b54: 1c43 adds r3, r0, #1
  54926. 8016b56: d1f3 bne.n 8016b40 <__sfputs_r+0xa>
  54927. 8016b58: bdf8 pop {r3, r4, r5, r6, r7, pc}
  54928. ...
  54929. 08016b5c <_vfiprintf_r>:
  54930. 8016b5c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  54931. 8016b60: 460d mov r5, r1
  54932. 8016b62: b09d sub sp, #116 @ 0x74
  54933. 8016b64: 4614 mov r4, r2
  54934. 8016b66: 4698 mov r8, r3
  54935. 8016b68: 4606 mov r6, r0
  54936. 8016b6a: b118 cbz r0, 8016b74 <_vfiprintf_r+0x18>
  54937. 8016b6c: 6a03 ldr r3, [r0, #32]
  54938. 8016b6e: b90b cbnz r3, 8016b74 <_vfiprintf_r+0x18>
  54939. 8016b70: f7ff fd66 bl 8016640 <__sinit>
  54940. 8016b74: 6e6b ldr r3, [r5, #100] @ 0x64
  54941. 8016b76: 07d9 lsls r1, r3, #31
  54942. 8016b78: d405 bmi.n 8016b86 <_vfiprintf_r+0x2a>
  54943. 8016b7a: 89ab ldrh r3, [r5, #12]
  54944. 8016b7c: 059a lsls r2, r3, #22
  54945. 8016b7e: d402 bmi.n 8016b86 <_vfiprintf_r+0x2a>
  54946. 8016b80: 6da8 ldr r0, [r5, #88] @ 0x58
  54947. 8016b82: f7ff feb8 bl 80168f6 <__retarget_lock_acquire_recursive>
  54948. 8016b86: 89ab ldrh r3, [r5, #12]
  54949. 8016b88: 071b lsls r3, r3, #28
  54950. 8016b8a: d501 bpl.n 8016b90 <_vfiprintf_r+0x34>
  54951. 8016b8c: 692b ldr r3, [r5, #16]
  54952. 8016b8e: b99b cbnz r3, 8016bb8 <_vfiprintf_r+0x5c>
  54953. 8016b90: 4629 mov r1, r5
  54954. 8016b92: 4630 mov r0, r6
  54955. 8016b94: f000 fb72 bl 801727c <__swsetup_r>
  54956. 8016b98: b170 cbz r0, 8016bb8 <_vfiprintf_r+0x5c>
  54957. 8016b9a: 6e6b ldr r3, [r5, #100] @ 0x64
  54958. 8016b9c: 07dc lsls r4, r3, #31
  54959. 8016b9e: d504 bpl.n 8016baa <_vfiprintf_r+0x4e>
  54960. 8016ba0: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  54961. 8016ba4: b01d add sp, #116 @ 0x74
  54962. 8016ba6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
  54963. 8016baa: 89ab ldrh r3, [r5, #12]
  54964. 8016bac: 0598 lsls r0, r3, #22
  54965. 8016bae: d4f7 bmi.n 8016ba0 <_vfiprintf_r+0x44>
  54966. 8016bb0: 6da8 ldr r0, [r5, #88] @ 0x58
  54967. 8016bb2: f7ff fea1 bl 80168f8 <__retarget_lock_release_recursive>
  54968. 8016bb6: e7f3 b.n 8016ba0 <_vfiprintf_r+0x44>
  54969. 8016bb8: 2300 movs r3, #0
  54970. 8016bba: 9309 str r3, [sp, #36] @ 0x24
  54971. 8016bbc: 2320 movs r3, #32
  54972. 8016bbe: f88d 3029 strb.w r3, [sp, #41] @ 0x29
  54973. 8016bc2: f8cd 800c str.w r8, [sp, #12]
  54974. 8016bc6: 2330 movs r3, #48 @ 0x30
  54975. 8016bc8: f8df 81ac ldr.w r8, [pc, #428] @ 8016d78 <_vfiprintf_r+0x21c>
  54976. 8016bcc: f88d 302a strb.w r3, [sp, #42] @ 0x2a
  54977. 8016bd0: f04f 0901 mov.w r9, #1
  54978. 8016bd4: 4623 mov r3, r4
  54979. 8016bd6: 469a mov sl, r3
  54980. 8016bd8: f813 2b01 ldrb.w r2, [r3], #1
  54981. 8016bdc: b10a cbz r2, 8016be2 <_vfiprintf_r+0x86>
  54982. 8016bde: 2a25 cmp r2, #37 @ 0x25
  54983. 8016be0: d1f9 bne.n 8016bd6 <_vfiprintf_r+0x7a>
  54984. 8016be2: ebba 0b04 subs.w fp, sl, r4
  54985. 8016be6: d00b beq.n 8016c00 <_vfiprintf_r+0xa4>
  54986. 8016be8: 465b mov r3, fp
  54987. 8016bea: 4622 mov r2, r4
  54988. 8016bec: 4629 mov r1, r5
  54989. 8016bee: 4630 mov r0, r6
  54990. 8016bf0: f7ff ffa1 bl 8016b36 <__sfputs_r>
  54991. 8016bf4: 3001 adds r0, #1
  54992. 8016bf6: f000 80a7 beq.w 8016d48 <_vfiprintf_r+0x1ec>
  54993. 8016bfa: 9a09 ldr r2, [sp, #36] @ 0x24
  54994. 8016bfc: 445a add r2, fp
  54995. 8016bfe: 9209 str r2, [sp, #36] @ 0x24
  54996. 8016c00: f89a 3000 ldrb.w r3, [sl]
  54997. 8016c04: 2b00 cmp r3, #0
  54998. 8016c06: f000 809f beq.w 8016d48 <_vfiprintf_r+0x1ec>
  54999. 8016c0a: 2300 movs r3, #0
  55000. 8016c0c: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  55001. 8016c10: e9cd 2305 strd r2, r3, [sp, #20]
  55002. 8016c14: f10a 0a01 add.w sl, sl, #1
  55003. 8016c18: 9304 str r3, [sp, #16]
  55004. 8016c1a: 9307 str r3, [sp, #28]
  55005. 8016c1c: f88d 3053 strb.w r3, [sp, #83] @ 0x53
  55006. 8016c20: 931a str r3, [sp, #104] @ 0x68
  55007. 8016c22: 4654 mov r4, sl
  55008. 8016c24: 2205 movs r2, #5
  55009. 8016c26: f814 1b01 ldrb.w r1, [r4], #1
  55010. 8016c2a: 4853 ldr r0, [pc, #332] @ (8016d78 <_vfiprintf_r+0x21c>)
  55011. 8016c2c: f7e9 fb58 bl 80002e0 <memchr>
  55012. 8016c30: 9a04 ldr r2, [sp, #16]
  55013. 8016c32: b9d8 cbnz r0, 8016c6c <_vfiprintf_r+0x110>
  55014. 8016c34: 06d1 lsls r1, r2, #27
  55015. 8016c36: bf44 itt mi
  55016. 8016c38: 2320 movmi r3, #32
  55017. 8016c3a: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53
  55018. 8016c3e: 0713 lsls r3, r2, #28
  55019. 8016c40: bf44 itt mi
  55020. 8016c42: 232b movmi r3, #43 @ 0x2b
  55021. 8016c44: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53
  55022. 8016c48: f89a 3000 ldrb.w r3, [sl]
  55023. 8016c4c: 2b2a cmp r3, #42 @ 0x2a
  55024. 8016c4e: d015 beq.n 8016c7c <_vfiprintf_r+0x120>
  55025. 8016c50: 9a07 ldr r2, [sp, #28]
  55026. 8016c52: 4654 mov r4, sl
  55027. 8016c54: 2000 movs r0, #0
  55028. 8016c56: f04f 0c0a mov.w ip, #10
  55029. 8016c5a: 4621 mov r1, r4
  55030. 8016c5c: f811 3b01 ldrb.w r3, [r1], #1
  55031. 8016c60: 3b30 subs r3, #48 @ 0x30
  55032. 8016c62: 2b09 cmp r3, #9
  55033. 8016c64: d94b bls.n 8016cfe <_vfiprintf_r+0x1a2>
  55034. 8016c66: b1b0 cbz r0, 8016c96 <_vfiprintf_r+0x13a>
  55035. 8016c68: 9207 str r2, [sp, #28]
  55036. 8016c6a: e014 b.n 8016c96 <_vfiprintf_r+0x13a>
  55037. 8016c6c: eba0 0308 sub.w r3, r0, r8
  55038. 8016c70: fa09 f303 lsl.w r3, r9, r3
  55039. 8016c74: 4313 orrs r3, r2
  55040. 8016c76: 9304 str r3, [sp, #16]
  55041. 8016c78: 46a2 mov sl, r4
  55042. 8016c7a: e7d2 b.n 8016c22 <_vfiprintf_r+0xc6>
  55043. 8016c7c: 9b03 ldr r3, [sp, #12]
  55044. 8016c7e: 1d19 adds r1, r3, #4
  55045. 8016c80: 681b ldr r3, [r3, #0]
  55046. 8016c82: 9103 str r1, [sp, #12]
  55047. 8016c84: 2b00 cmp r3, #0
  55048. 8016c86: bfbb ittet lt
  55049. 8016c88: 425b neglt r3, r3
  55050. 8016c8a: f042 0202 orrlt.w r2, r2, #2
  55051. 8016c8e: 9307 strge r3, [sp, #28]
  55052. 8016c90: 9307 strlt r3, [sp, #28]
  55053. 8016c92: bfb8 it lt
  55054. 8016c94: 9204 strlt r2, [sp, #16]
  55055. 8016c96: 7823 ldrb r3, [r4, #0]
  55056. 8016c98: 2b2e cmp r3, #46 @ 0x2e
  55057. 8016c9a: d10a bne.n 8016cb2 <_vfiprintf_r+0x156>
  55058. 8016c9c: 7863 ldrb r3, [r4, #1]
  55059. 8016c9e: 2b2a cmp r3, #42 @ 0x2a
  55060. 8016ca0: d132 bne.n 8016d08 <_vfiprintf_r+0x1ac>
  55061. 8016ca2: 9b03 ldr r3, [sp, #12]
  55062. 8016ca4: 1d1a adds r2, r3, #4
  55063. 8016ca6: 681b ldr r3, [r3, #0]
  55064. 8016ca8: 9203 str r2, [sp, #12]
  55065. 8016caa: ea43 73e3 orr.w r3, r3, r3, asr #31
  55066. 8016cae: 3402 adds r4, #2
  55067. 8016cb0: 9305 str r3, [sp, #20]
  55068. 8016cb2: f8df a0d4 ldr.w sl, [pc, #212] @ 8016d88 <_vfiprintf_r+0x22c>
  55069. 8016cb6: 7821 ldrb r1, [r4, #0]
  55070. 8016cb8: 2203 movs r2, #3
  55071. 8016cba: 4650 mov r0, sl
  55072. 8016cbc: f7e9 fb10 bl 80002e0 <memchr>
  55073. 8016cc0: b138 cbz r0, 8016cd2 <_vfiprintf_r+0x176>
  55074. 8016cc2: 9b04 ldr r3, [sp, #16]
  55075. 8016cc4: eba0 000a sub.w r0, r0, sl
  55076. 8016cc8: 2240 movs r2, #64 @ 0x40
  55077. 8016cca: 4082 lsls r2, r0
  55078. 8016ccc: 4313 orrs r3, r2
  55079. 8016cce: 3401 adds r4, #1
  55080. 8016cd0: 9304 str r3, [sp, #16]
  55081. 8016cd2: f814 1b01 ldrb.w r1, [r4], #1
  55082. 8016cd6: 4829 ldr r0, [pc, #164] @ (8016d7c <_vfiprintf_r+0x220>)
  55083. 8016cd8: f88d 1028 strb.w r1, [sp, #40] @ 0x28
  55084. 8016cdc: 2206 movs r2, #6
  55085. 8016cde: f7e9 faff bl 80002e0 <memchr>
  55086. 8016ce2: 2800 cmp r0, #0
  55087. 8016ce4: d03f beq.n 8016d66 <_vfiprintf_r+0x20a>
  55088. 8016ce6: 4b26 ldr r3, [pc, #152] @ (8016d80 <_vfiprintf_r+0x224>)
  55089. 8016ce8: bb1b cbnz r3, 8016d32 <_vfiprintf_r+0x1d6>
  55090. 8016cea: 9b03 ldr r3, [sp, #12]
  55091. 8016cec: 3307 adds r3, #7
  55092. 8016cee: f023 0307 bic.w r3, r3, #7
  55093. 8016cf2: 3308 adds r3, #8
  55094. 8016cf4: 9303 str r3, [sp, #12]
  55095. 8016cf6: 9b09 ldr r3, [sp, #36] @ 0x24
  55096. 8016cf8: 443b add r3, r7
  55097. 8016cfa: 9309 str r3, [sp, #36] @ 0x24
  55098. 8016cfc: e76a b.n 8016bd4 <_vfiprintf_r+0x78>
  55099. 8016cfe: fb0c 3202 mla r2, ip, r2, r3
  55100. 8016d02: 460c mov r4, r1
  55101. 8016d04: 2001 movs r0, #1
  55102. 8016d06: e7a8 b.n 8016c5a <_vfiprintf_r+0xfe>
  55103. 8016d08: 2300 movs r3, #0
  55104. 8016d0a: 3401 adds r4, #1
  55105. 8016d0c: 9305 str r3, [sp, #20]
  55106. 8016d0e: 4619 mov r1, r3
  55107. 8016d10: f04f 0c0a mov.w ip, #10
  55108. 8016d14: 4620 mov r0, r4
  55109. 8016d16: f810 2b01 ldrb.w r2, [r0], #1
  55110. 8016d1a: 3a30 subs r2, #48 @ 0x30
  55111. 8016d1c: 2a09 cmp r2, #9
  55112. 8016d1e: d903 bls.n 8016d28 <_vfiprintf_r+0x1cc>
  55113. 8016d20: 2b00 cmp r3, #0
  55114. 8016d22: d0c6 beq.n 8016cb2 <_vfiprintf_r+0x156>
  55115. 8016d24: 9105 str r1, [sp, #20]
  55116. 8016d26: e7c4 b.n 8016cb2 <_vfiprintf_r+0x156>
  55117. 8016d28: fb0c 2101 mla r1, ip, r1, r2
  55118. 8016d2c: 4604 mov r4, r0
  55119. 8016d2e: 2301 movs r3, #1
  55120. 8016d30: e7f0 b.n 8016d14 <_vfiprintf_r+0x1b8>
  55121. 8016d32: ab03 add r3, sp, #12
  55122. 8016d34: 9300 str r3, [sp, #0]
  55123. 8016d36: 462a mov r2, r5
  55124. 8016d38: 4b12 ldr r3, [pc, #72] @ (8016d84 <_vfiprintf_r+0x228>)
  55125. 8016d3a: a904 add r1, sp, #16
  55126. 8016d3c: 4630 mov r0, r6
  55127. 8016d3e: f3af 8000 nop.w
  55128. 8016d42: 4607 mov r7, r0
  55129. 8016d44: 1c78 adds r0, r7, #1
  55130. 8016d46: d1d6 bne.n 8016cf6 <_vfiprintf_r+0x19a>
  55131. 8016d48: 6e6b ldr r3, [r5, #100] @ 0x64
  55132. 8016d4a: 07d9 lsls r1, r3, #31
  55133. 8016d4c: d405 bmi.n 8016d5a <_vfiprintf_r+0x1fe>
  55134. 8016d4e: 89ab ldrh r3, [r5, #12]
  55135. 8016d50: 059a lsls r2, r3, #22
  55136. 8016d52: d402 bmi.n 8016d5a <_vfiprintf_r+0x1fe>
  55137. 8016d54: 6da8 ldr r0, [r5, #88] @ 0x58
  55138. 8016d56: f7ff fdcf bl 80168f8 <__retarget_lock_release_recursive>
  55139. 8016d5a: 89ab ldrh r3, [r5, #12]
  55140. 8016d5c: 065b lsls r3, r3, #25
  55141. 8016d5e: f53f af1f bmi.w 8016ba0 <_vfiprintf_r+0x44>
  55142. 8016d62: 9809 ldr r0, [sp, #36] @ 0x24
  55143. 8016d64: e71e b.n 8016ba4 <_vfiprintf_r+0x48>
  55144. 8016d66: ab03 add r3, sp, #12
  55145. 8016d68: 9300 str r3, [sp, #0]
  55146. 8016d6a: 462a mov r2, r5
  55147. 8016d6c: 4b05 ldr r3, [pc, #20] @ (8016d84 <_vfiprintf_r+0x228>)
  55148. 8016d6e: a904 add r1, sp, #16
  55149. 8016d70: 4630 mov r0, r6
  55150. 8016d72: f000 f879 bl 8016e68 <_printf_i>
  55151. 8016d76: e7e4 b.n 8016d42 <_vfiprintf_r+0x1e6>
  55152. 8016d78: 08017608 .word 0x08017608
  55153. 8016d7c: 08017612 .word 0x08017612
  55154. 8016d80: 00000000 .word 0x00000000
  55155. 8016d84: 08016b37 .word 0x08016b37
  55156. 8016d88: 0801760e .word 0x0801760e
  55157. 08016d8c <_printf_common>:
  55158. 8016d8c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
  55159. 8016d90: 4616 mov r6, r2
  55160. 8016d92: 4698 mov r8, r3
  55161. 8016d94: 688a ldr r2, [r1, #8]
  55162. 8016d96: 690b ldr r3, [r1, #16]
  55163. 8016d98: f8dd 9020 ldr.w r9, [sp, #32]
  55164. 8016d9c: 4293 cmp r3, r2
  55165. 8016d9e: bfb8 it lt
  55166. 8016da0: 4613 movlt r3, r2
  55167. 8016da2: 6033 str r3, [r6, #0]
  55168. 8016da4: f891 2043 ldrb.w r2, [r1, #67] @ 0x43
  55169. 8016da8: 4607 mov r7, r0
  55170. 8016daa: 460c mov r4, r1
  55171. 8016dac: b10a cbz r2, 8016db2 <_printf_common+0x26>
  55172. 8016dae: 3301 adds r3, #1
  55173. 8016db0: 6033 str r3, [r6, #0]
  55174. 8016db2: 6823 ldr r3, [r4, #0]
  55175. 8016db4: 0699 lsls r1, r3, #26
  55176. 8016db6: bf42 ittt mi
  55177. 8016db8: 6833 ldrmi r3, [r6, #0]
  55178. 8016dba: 3302 addmi r3, #2
  55179. 8016dbc: 6033 strmi r3, [r6, #0]
  55180. 8016dbe: 6825 ldr r5, [r4, #0]
  55181. 8016dc0: f015 0506 ands.w r5, r5, #6
  55182. 8016dc4: d106 bne.n 8016dd4 <_printf_common+0x48>
  55183. 8016dc6: f104 0a19 add.w sl, r4, #25
  55184. 8016dca: 68e3 ldr r3, [r4, #12]
  55185. 8016dcc: 6832 ldr r2, [r6, #0]
  55186. 8016dce: 1a9b subs r3, r3, r2
  55187. 8016dd0: 42ab cmp r3, r5
  55188. 8016dd2: dc26 bgt.n 8016e22 <_printf_common+0x96>
  55189. 8016dd4: f894 3043 ldrb.w r3, [r4, #67] @ 0x43
  55190. 8016dd8: 6822 ldr r2, [r4, #0]
  55191. 8016dda: 3b00 subs r3, #0
  55192. 8016ddc: bf18 it ne
  55193. 8016dde: 2301 movne r3, #1
  55194. 8016de0: 0692 lsls r2, r2, #26
  55195. 8016de2: d42b bmi.n 8016e3c <_printf_common+0xb0>
  55196. 8016de4: f104 0243 add.w r2, r4, #67 @ 0x43
  55197. 8016de8: 4641 mov r1, r8
  55198. 8016dea: 4638 mov r0, r7
  55199. 8016dec: 47c8 blx r9
  55200. 8016dee: 3001 adds r0, #1
  55201. 8016df0: d01e beq.n 8016e30 <_printf_common+0xa4>
  55202. 8016df2: 6823 ldr r3, [r4, #0]
  55203. 8016df4: 6922 ldr r2, [r4, #16]
  55204. 8016df6: f003 0306 and.w r3, r3, #6
  55205. 8016dfa: 2b04 cmp r3, #4
  55206. 8016dfc: bf02 ittt eq
  55207. 8016dfe: 68e5 ldreq r5, [r4, #12]
  55208. 8016e00: 6833 ldreq r3, [r6, #0]
  55209. 8016e02: 1aed subeq r5, r5, r3
  55210. 8016e04: 68a3 ldr r3, [r4, #8]
  55211. 8016e06: bf0c ite eq
  55212. 8016e08: ea25 75e5 biceq.w r5, r5, r5, asr #31
  55213. 8016e0c: 2500 movne r5, #0
  55214. 8016e0e: 4293 cmp r3, r2
  55215. 8016e10: bfc4 itt gt
  55216. 8016e12: 1a9b subgt r3, r3, r2
  55217. 8016e14: 18ed addgt r5, r5, r3
  55218. 8016e16: 2600 movs r6, #0
  55219. 8016e18: 341a adds r4, #26
  55220. 8016e1a: 42b5 cmp r5, r6
  55221. 8016e1c: d11a bne.n 8016e54 <_printf_common+0xc8>
  55222. 8016e1e: 2000 movs r0, #0
  55223. 8016e20: e008 b.n 8016e34 <_printf_common+0xa8>
  55224. 8016e22: 2301 movs r3, #1
  55225. 8016e24: 4652 mov r2, sl
  55226. 8016e26: 4641 mov r1, r8
  55227. 8016e28: 4638 mov r0, r7
  55228. 8016e2a: 47c8 blx r9
  55229. 8016e2c: 3001 adds r0, #1
  55230. 8016e2e: d103 bne.n 8016e38 <_printf_common+0xac>
  55231. 8016e30: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  55232. 8016e34: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  55233. 8016e38: 3501 adds r5, #1
  55234. 8016e3a: e7c6 b.n 8016dca <_printf_common+0x3e>
  55235. 8016e3c: 18e1 adds r1, r4, r3
  55236. 8016e3e: 1c5a adds r2, r3, #1
  55237. 8016e40: 2030 movs r0, #48 @ 0x30
  55238. 8016e42: f881 0043 strb.w r0, [r1, #67] @ 0x43
  55239. 8016e46: 4422 add r2, r4
  55240. 8016e48: f894 1045 ldrb.w r1, [r4, #69] @ 0x45
  55241. 8016e4c: f882 1043 strb.w r1, [r2, #67] @ 0x43
  55242. 8016e50: 3302 adds r3, #2
  55243. 8016e52: e7c7 b.n 8016de4 <_printf_common+0x58>
  55244. 8016e54: 2301 movs r3, #1
  55245. 8016e56: 4622 mov r2, r4
  55246. 8016e58: 4641 mov r1, r8
  55247. 8016e5a: 4638 mov r0, r7
  55248. 8016e5c: 47c8 blx r9
  55249. 8016e5e: 3001 adds r0, #1
  55250. 8016e60: d0e6 beq.n 8016e30 <_printf_common+0xa4>
  55251. 8016e62: 3601 adds r6, #1
  55252. 8016e64: e7d9 b.n 8016e1a <_printf_common+0x8e>
  55253. ...
  55254. 08016e68 <_printf_i>:
  55255. 8016e68: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr}
  55256. 8016e6c: 7e0f ldrb r7, [r1, #24]
  55257. 8016e6e: 9e0c ldr r6, [sp, #48] @ 0x30
  55258. 8016e70: 2f78 cmp r7, #120 @ 0x78
  55259. 8016e72: 4691 mov r9, r2
  55260. 8016e74: 4680 mov r8, r0
  55261. 8016e76: 460c mov r4, r1
  55262. 8016e78: 469a mov sl, r3
  55263. 8016e7a: f101 0243 add.w r2, r1, #67 @ 0x43
  55264. 8016e7e: d807 bhi.n 8016e90 <_printf_i+0x28>
  55265. 8016e80: 2f62 cmp r7, #98 @ 0x62
  55266. 8016e82: d80a bhi.n 8016e9a <_printf_i+0x32>
  55267. 8016e84: 2f00 cmp r7, #0
  55268. 8016e86: f000 80d2 beq.w 801702e <_printf_i+0x1c6>
  55269. 8016e8a: 2f58 cmp r7, #88 @ 0x58
  55270. 8016e8c: f000 80b9 beq.w 8017002 <_printf_i+0x19a>
  55271. 8016e90: f104 0642 add.w r6, r4, #66 @ 0x42
  55272. 8016e94: f884 7042 strb.w r7, [r4, #66] @ 0x42
  55273. 8016e98: e03a b.n 8016f10 <_printf_i+0xa8>
  55274. 8016e9a: f1a7 0363 sub.w r3, r7, #99 @ 0x63
  55275. 8016e9e: 2b15 cmp r3, #21
  55276. 8016ea0: d8f6 bhi.n 8016e90 <_printf_i+0x28>
  55277. 8016ea2: a101 add r1, pc, #4 @ (adr r1, 8016ea8 <_printf_i+0x40>)
  55278. 8016ea4: f851 f023 ldr.w pc, [r1, r3, lsl #2]
  55279. 8016ea8: 08016f01 .word 0x08016f01
  55280. 8016eac: 08016f15 .word 0x08016f15
  55281. 8016eb0: 08016e91 .word 0x08016e91
  55282. 8016eb4: 08016e91 .word 0x08016e91
  55283. 8016eb8: 08016e91 .word 0x08016e91
  55284. 8016ebc: 08016e91 .word 0x08016e91
  55285. 8016ec0: 08016f15 .word 0x08016f15
  55286. 8016ec4: 08016e91 .word 0x08016e91
  55287. 8016ec8: 08016e91 .word 0x08016e91
  55288. 8016ecc: 08016e91 .word 0x08016e91
  55289. 8016ed0: 08016e91 .word 0x08016e91
  55290. 8016ed4: 08017015 .word 0x08017015
  55291. 8016ed8: 08016f3f .word 0x08016f3f
  55292. 8016edc: 08016fcf .word 0x08016fcf
  55293. 8016ee0: 08016e91 .word 0x08016e91
  55294. 8016ee4: 08016e91 .word 0x08016e91
  55295. 8016ee8: 08017037 .word 0x08017037
  55296. 8016eec: 08016e91 .word 0x08016e91
  55297. 8016ef0: 08016f3f .word 0x08016f3f
  55298. 8016ef4: 08016e91 .word 0x08016e91
  55299. 8016ef8: 08016e91 .word 0x08016e91
  55300. 8016efc: 08016fd7 .word 0x08016fd7
  55301. 8016f00: 6833 ldr r3, [r6, #0]
  55302. 8016f02: 1d1a adds r2, r3, #4
  55303. 8016f04: 681b ldr r3, [r3, #0]
  55304. 8016f06: 6032 str r2, [r6, #0]
  55305. 8016f08: f104 0642 add.w r6, r4, #66 @ 0x42
  55306. 8016f0c: f884 3042 strb.w r3, [r4, #66] @ 0x42
  55307. 8016f10: 2301 movs r3, #1
  55308. 8016f12: e09d b.n 8017050 <_printf_i+0x1e8>
  55309. 8016f14: 6833 ldr r3, [r6, #0]
  55310. 8016f16: 6820 ldr r0, [r4, #0]
  55311. 8016f18: 1d19 adds r1, r3, #4
  55312. 8016f1a: 6031 str r1, [r6, #0]
  55313. 8016f1c: 0606 lsls r6, r0, #24
  55314. 8016f1e: d501 bpl.n 8016f24 <_printf_i+0xbc>
  55315. 8016f20: 681d ldr r5, [r3, #0]
  55316. 8016f22: e003 b.n 8016f2c <_printf_i+0xc4>
  55317. 8016f24: 0645 lsls r5, r0, #25
  55318. 8016f26: d5fb bpl.n 8016f20 <_printf_i+0xb8>
  55319. 8016f28: f9b3 5000 ldrsh.w r5, [r3]
  55320. 8016f2c: 2d00 cmp r5, #0
  55321. 8016f2e: da03 bge.n 8016f38 <_printf_i+0xd0>
  55322. 8016f30: 232d movs r3, #45 @ 0x2d
  55323. 8016f32: 426d negs r5, r5
  55324. 8016f34: f884 3043 strb.w r3, [r4, #67] @ 0x43
  55325. 8016f38: 4859 ldr r0, [pc, #356] @ (80170a0 <_printf_i+0x238>)
  55326. 8016f3a: 230a movs r3, #10
  55327. 8016f3c: e011 b.n 8016f62 <_printf_i+0xfa>
  55328. 8016f3e: 6821 ldr r1, [r4, #0]
  55329. 8016f40: 6833 ldr r3, [r6, #0]
  55330. 8016f42: 0608 lsls r0, r1, #24
  55331. 8016f44: f853 5b04 ldr.w r5, [r3], #4
  55332. 8016f48: d402 bmi.n 8016f50 <_printf_i+0xe8>
  55333. 8016f4a: 0649 lsls r1, r1, #25
  55334. 8016f4c: bf48 it mi
  55335. 8016f4e: b2ad uxthmi r5, r5
  55336. 8016f50: 2f6f cmp r7, #111 @ 0x6f
  55337. 8016f52: 4853 ldr r0, [pc, #332] @ (80170a0 <_printf_i+0x238>)
  55338. 8016f54: 6033 str r3, [r6, #0]
  55339. 8016f56: bf14 ite ne
  55340. 8016f58: 230a movne r3, #10
  55341. 8016f5a: 2308 moveq r3, #8
  55342. 8016f5c: 2100 movs r1, #0
  55343. 8016f5e: f884 1043 strb.w r1, [r4, #67] @ 0x43
  55344. 8016f62: 6866 ldr r6, [r4, #4]
  55345. 8016f64: 60a6 str r6, [r4, #8]
  55346. 8016f66: 2e00 cmp r6, #0
  55347. 8016f68: bfa2 ittt ge
  55348. 8016f6a: 6821 ldrge r1, [r4, #0]
  55349. 8016f6c: f021 0104 bicge.w r1, r1, #4
  55350. 8016f70: 6021 strge r1, [r4, #0]
  55351. 8016f72: b90d cbnz r5, 8016f78 <_printf_i+0x110>
  55352. 8016f74: 2e00 cmp r6, #0
  55353. 8016f76: d04b beq.n 8017010 <_printf_i+0x1a8>
  55354. 8016f78: 4616 mov r6, r2
  55355. 8016f7a: fbb5 f1f3 udiv r1, r5, r3
  55356. 8016f7e: fb03 5711 mls r7, r3, r1, r5
  55357. 8016f82: 5dc7 ldrb r7, [r0, r7]
  55358. 8016f84: f806 7d01 strb.w r7, [r6, #-1]!
  55359. 8016f88: 462f mov r7, r5
  55360. 8016f8a: 42bb cmp r3, r7
  55361. 8016f8c: 460d mov r5, r1
  55362. 8016f8e: d9f4 bls.n 8016f7a <_printf_i+0x112>
  55363. 8016f90: 2b08 cmp r3, #8
  55364. 8016f92: d10b bne.n 8016fac <_printf_i+0x144>
  55365. 8016f94: 6823 ldr r3, [r4, #0]
  55366. 8016f96: 07df lsls r7, r3, #31
  55367. 8016f98: d508 bpl.n 8016fac <_printf_i+0x144>
  55368. 8016f9a: 6923 ldr r3, [r4, #16]
  55369. 8016f9c: 6861 ldr r1, [r4, #4]
  55370. 8016f9e: 4299 cmp r1, r3
  55371. 8016fa0: bfde ittt le
  55372. 8016fa2: 2330 movle r3, #48 @ 0x30
  55373. 8016fa4: f806 3c01 strble.w r3, [r6, #-1]
  55374. 8016fa8: f106 36ff addle.w r6, r6, #4294967295 @ 0xffffffff
  55375. 8016fac: 1b92 subs r2, r2, r6
  55376. 8016fae: 6122 str r2, [r4, #16]
  55377. 8016fb0: f8cd a000 str.w sl, [sp]
  55378. 8016fb4: 464b mov r3, r9
  55379. 8016fb6: aa03 add r2, sp, #12
  55380. 8016fb8: 4621 mov r1, r4
  55381. 8016fba: 4640 mov r0, r8
  55382. 8016fbc: f7ff fee6 bl 8016d8c <_printf_common>
  55383. 8016fc0: 3001 adds r0, #1
  55384. 8016fc2: d14a bne.n 801705a <_printf_i+0x1f2>
  55385. 8016fc4: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  55386. 8016fc8: b004 add sp, #16
  55387. 8016fca: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  55388. 8016fce: 6823 ldr r3, [r4, #0]
  55389. 8016fd0: f043 0320 orr.w r3, r3, #32
  55390. 8016fd4: 6023 str r3, [r4, #0]
  55391. 8016fd6: 4833 ldr r0, [pc, #204] @ (80170a4 <_printf_i+0x23c>)
  55392. 8016fd8: 2778 movs r7, #120 @ 0x78
  55393. 8016fda: f884 7045 strb.w r7, [r4, #69] @ 0x45
  55394. 8016fde: 6823 ldr r3, [r4, #0]
  55395. 8016fe0: 6831 ldr r1, [r6, #0]
  55396. 8016fe2: 061f lsls r7, r3, #24
  55397. 8016fe4: f851 5b04 ldr.w r5, [r1], #4
  55398. 8016fe8: d402 bmi.n 8016ff0 <_printf_i+0x188>
  55399. 8016fea: 065f lsls r7, r3, #25
  55400. 8016fec: bf48 it mi
  55401. 8016fee: b2ad uxthmi r5, r5
  55402. 8016ff0: 6031 str r1, [r6, #0]
  55403. 8016ff2: 07d9 lsls r1, r3, #31
  55404. 8016ff4: bf44 itt mi
  55405. 8016ff6: f043 0320 orrmi.w r3, r3, #32
  55406. 8016ffa: 6023 strmi r3, [r4, #0]
  55407. 8016ffc: b11d cbz r5, 8017006 <_printf_i+0x19e>
  55408. 8016ffe: 2310 movs r3, #16
  55409. 8017000: e7ac b.n 8016f5c <_printf_i+0xf4>
  55410. 8017002: 4827 ldr r0, [pc, #156] @ (80170a0 <_printf_i+0x238>)
  55411. 8017004: e7e9 b.n 8016fda <_printf_i+0x172>
  55412. 8017006: 6823 ldr r3, [r4, #0]
  55413. 8017008: f023 0320 bic.w r3, r3, #32
  55414. 801700c: 6023 str r3, [r4, #0]
  55415. 801700e: e7f6 b.n 8016ffe <_printf_i+0x196>
  55416. 8017010: 4616 mov r6, r2
  55417. 8017012: e7bd b.n 8016f90 <_printf_i+0x128>
  55418. 8017014: 6833 ldr r3, [r6, #0]
  55419. 8017016: 6825 ldr r5, [r4, #0]
  55420. 8017018: 6961 ldr r1, [r4, #20]
  55421. 801701a: 1d18 adds r0, r3, #4
  55422. 801701c: 6030 str r0, [r6, #0]
  55423. 801701e: 062e lsls r6, r5, #24
  55424. 8017020: 681b ldr r3, [r3, #0]
  55425. 8017022: d501 bpl.n 8017028 <_printf_i+0x1c0>
  55426. 8017024: 6019 str r1, [r3, #0]
  55427. 8017026: e002 b.n 801702e <_printf_i+0x1c6>
  55428. 8017028: 0668 lsls r0, r5, #25
  55429. 801702a: d5fb bpl.n 8017024 <_printf_i+0x1bc>
  55430. 801702c: 8019 strh r1, [r3, #0]
  55431. 801702e: 2300 movs r3, #0
  55432. 8017030: 6123 str r3, [r4, #16]
  55433. 8017032: 4616 mov r6, r2
  55434. 8017034: e7bc b.n 8016fb0 <_printf_i+0x148>
  55435. 8017036: 6833 ldr r3, [r6, #0]
  55436. 8017038: 1d1a adds r2, r3, #4
  55437. 801703a: 6032 str r2, [r6, #0]
  55438. 801703c: 681e ldr r6, [r3, #0]
  55439. 801703e: 6862 ldr r2, [r4, #4]
  55440. 8017040: 2100 movs r1, #0
  55441. 8017042: 4630 mov r0, r6
  55442. 8017044: f7e9 f94c bl 80002e0 <memchr>
  55443. 8017048: b108 cbz r0, 801704e <_printf_i+0x1e6>
  55444. 801704a: 1b80 subs r0, r0, r6
  55445. 801704c: 6060 str r0, [r4, #4]
  55446. 801704e: 6863 ldr r3, [r4, #4]
  55447. 8017050: 6123 str r3, [r4, #16]
  55448. 8017052: 2300 movs r3, #0
  55449. 8017054: f884 3043 strb.w r3, [r4, #67] @ 0x43
  55450. 8017058: e7aa b.n 8016fb0 <_printf_i+0x148>
  55451. 801705a: 6923 ldr r3, [r4, #16]
  55452. 801705c: 4632 mov r2, r6
  55453. 801705e: 4649 mov r1, r9
  55454. 8017060: 4640 mov r0, r8
  55455. 8017062: 47d0 blx sl
  55456. 8017064: 3001 adds r0, #1
  55457. 8017066: d0ad beq.n 8016fc4 <_printf_i+0x15c>
  55458. 8017068: 6823 ldr r3, [r4, #0]
  55459. 801706a: 079b lsls r3, r3, #30
  55460. 801706c: d413 bmi.n 8017096 <_printf_i+0x22e>
  55461. 801706e: 68e0 ldr r0, [r4, #12]
  55462. 8017070: 9b03 ldr r3, [sp, #12]
  55463. 8017072: 4298 cmp r0, r3
  55464. 8017074: bfb8 it lt
  55465. 8017076: 4618 movlt r0, r3
  55466. 8017078: e7a6 b.n 8016fc8 <_printf_i+0x160>
  55467. 801707a: 2301 movs r3, #1
  55468. 801707c: 4632 mov r2, r6
  55469. 801707e: 4649 mov r1, r9
  55470. 8017080: 4640 mov r0, r8
  55471. 8017082: 47d0 blx sl
  55472. 8017084: 3001 adds r0, #1
  55473. 8017086: d09d beq.n 8016fc4 <_printf_i+0x15c>
  55474. 8017088: 3501 adds r5, #1
  55475. 801708a: 68e3 ldr r3, [r4, #12]
  55476. 801708c: 9903 ldr r1, [sp, #12]
  55477. 801708e: 1a5b subs r3, r3, r1
  55478. 8017090: 42ab cmp r3, r5
  55479. 8017092: dcf2 bgt.n 801707a <_printf_i+0x212>
  55480. 8017094: e7eb b.n 801706e <_printf_i+0x206>
  55481. 8017096: 2500 movs r5, #0
  55482. 8017098: f104 0619 add.w r6, r4, #25
  55483. 801709c: e7f5 b.n 801708a <_printf_i+0x222>
  55484. 801709e: bf00 nop
  55485. 80170a0: 08017619 .word 0x08017619
  55486. 80170a4: 0801762a .word 0x0801762a
  55487. 080170a8 <__sflush_r>:
  55488. 80170a8: f9b1 200c ldrsh.w r2, [r1, #12]
  55489. 80170ac: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
  55490. 80170b0: 0716 lsls r6, r2, #28
  55491. 80170b2: 4605 mov r5, r0
  55492. 80170b4: 460c mov r4, r1
  55493. 80170b6: d454 bmi.n 8017162 <__sflush_r+0xba>
  55494. 80170b8: 684b ldr r3, [r1, #4]
  55495. 80170ba: 2b00 cmp r3, #0
  55496. 80170bc: dc02 bgt.n 80170c4 <__sflush_r+0x1c>
  55497. 80170be: 6c0b ldr r3, [r1, #64] @ 0x40
  55498. 80170c0: 2b00 cmp r3, #0
  55499. 80170c2: dd48 ble.n 8017156 <__sflush_r+0xae>
  55500. 80170c4: 6ae6 ldr r6, [r4, #44] @ 0x2c
  55501. 80170c6: 2e00 cmp r6, #0
  55502. 80170c8: d045 beq.n 8017156 <__sflush_r+0xae>
  55503. 80170ca: 2300 movs r3, #0
  55504. 80170cc: f412 5280 ands.w r2, r2, #4096 @ 0x1000
  55505. 80170d0: 682f ldr r7, [r5, #0]
  55506. 80170d2: 6a21 ldr r1, [r4, #32]
  55507. 80170d4: 602b str r3, [r5, #0]
  55508. 80170d6: d030 beq.n 801713a <__sflush_r+0x92>
  55509. 80170d8: 6d62 ldr r2, [r4, #84] @ 0x54
  55510. 80170da: 89a3 ldrh r3, [r4, #12]
  55511. 80170dc: 0759 lsls r1, r3, #29
  55512. 80170de: d505 bpl.n 80170ec <__sflush_r+0x44>
  55513. 80170e0: 6863 ldr r3, [r4, #4]
  55514. 80170e2: 1ad2 subs r2, r2, r3
  55515. 80170e4: 6b63 ldr r3, [r4, #52] @ 0x34
  55516. 80170e6: b10b cbz r3, 80170ec <__sflush_r+0x44>
  55517. 80170e8: 6c23 ldr r3, [r4, #64] @ 0x40
  55518. 80170ea: 1ad2 subs r2, r2, r3
  55519. 80170ec: 2300 movs r3, #0
  55520. 80170ee: 6ae6 ldr r6, [r4, #44] @ 0x2c
  55521. 80170f0: 6a21 ldr r1, [r4, #32]
  55522. 80170f2: 4628 mov r0, r5
  55523. 80170f4: 47b0 blx r6
  55524. 80170f6: 1c43 adds r3, r0, #1
  55525. 80170f8: 89a3 ldrh r3, [r4, #12]
  55526. 80170fa: d106 bne.n 801710a <__sflush_r+0x62>
  55527. 80170fc: 6829 ldr r1, [r5, #0]
  55528. 80170fe: 291d cmp r1, #29
  55529. 8017100: d82b bhi.n 801715a <__sflush_r+0xb2>
  55530. 8017102: 4a2a ldr r2, [pc, #168] @ (80171ac <__sflush_r+0x104>)
  55531. 8017104: 410a asrs r2, r1
  55532. 8017106: 07d6 lsls r6, r2, #31
  55533. 8017108: d427 bmi.n 801715a <__sflush_r+0xb2>
  55534. 801710a: 2200 movs r2, #0
  55535. 801710c: 6062 str r2, [r4, #4]
  55536. 801710e: 04d9 lsls r1, r3, #19
  55537. 8017110: 6922 ldr r2, [r4, #16]
  55538. 8017112: 6022 str r2, [r4, #0]
  55539. 8017114: d504 bpl.n 8017120 <__sflush_r+0x78>
  55540. 8017116: 1c42 adds r2, r0, #1
  55541. 8017118: d101 bne.n 801711e <__sflush_r+0x76>
  55542. 801711a: 682b ldr r3, [r5, #0]
  55543. 801711c: b903 cbnz r3, 8017120 <__sflush_r+0x78>
  55544. 801711e: 6560 str r0, [r4, #84] @ 0x54
  55545. 8017120: 6b61 ldr r1, [r4, #52] @ 0x34
  55546. 8017122: 602f str r7, [r5, #0]
  55547. 8017124: b1b9 cbz r1, 8017156 <__sflush_r+0xae>
  55548. 8017126: f104 0344 add.w r3, r4, #68 @ 0x44
  55549. 801712a: 4299 cmp r1, r3
  55550. 801712c: d002 beq.n 8017134 <__sflush_r+0x8c>
  55551. 801712e: 4628 mov r0, r5
  55552. 8017130: f7ff fbf2 bl 8016918 <_free_r>
  55553. 8017134: 2300 movs r3, #0
  55554. 8017136: 6363 str r3, [r4, #52] @ 0x34
  55555. 8017138: e00d b.n 8017156 <__sflush_r+0xae>
  55556. 801713a: 2301 movs r3, #1
  55557. 801713c: 4628 mov r0, r5
  55558. 801713e: 47b0 blx r6
  55559. 8017140: 4602 mov r2, r0
  55560. 8017142: 1c50 adds r0, r2, #1
  55561. 8017144: d1c9 bne.n 80170da <__sflush_r+0x32>
  55562. 8017146: 682b ldr r3, [r5, #0]
  55563. 8017148: 2b00 cmp r3, #0
  55564. 801714a: d0c6 beq.n 80170da <__sflush_r+0x32>
  55565. 801714c: 2b1d cmp r3, #29
  55566. 801714e: d001 beq.n 8017154 <__sflush_r+0xac>
  55567. 8017150: 2b16 cmp r3, #22
  55568. 8017152: d11e bne.n 8017192 <__sflush_r+0xea>
  55569. 8017154: 602f str r7, [r5, #0]
  55570. 8017156: 2000 movs r0, #0
  55571. 8017158: e022 b.n 80171a0 <__sflush_r+0xf8>
  55572. 801715a: f043 0340 orr.w r3, r3, #64 @ 0x40
  55573. 801715e: b21b sxth r3, r3
  55574. 8017160: e01b b.n 801719a <__sflush_r+0xf2>
  55575. 8017162: 690f ldr r7, [r1, #16]
  55576. 8017164: 2f00 cmp r7, #0
  55577. 8017166: d0f6 beq.n 8017156 <__sflush_r+0xae>
  55578. 8017168: 0793 lsls r3, r2, #30
  55579. 801716a: 680e ldr r6, [r1, #0]
  55580. 801716c: bf08 it eq
  55581. 801716e: 694b ldreq r3, [r1, #20]
  55582. 8017170: 600f str r7, [r1, #0]
  55583. 8017172: bf18 it ne
  55584. 8017174: 2300 movne r3, #0
  55585. 8017176: eba6 0807 sub.w r8, r6, r7
  55586. 801717a: 608b str r3, [r1, #8]
  55587. 801717c: f1b8 0f00 cmp.w r8, #0
  55588. 8017180: dde9 ble.n 8017156 <__sflush_r+0xae>
  55589. 8017182: 6a21 ldr r1, [r4, #32]
  55590. 8017184: 6aa6 ldr r6, [r4, #40] @ 0x28
  55591. 8017186: 4643 mov r3, r8
  55592. 8017188: 463a mov r2, r7
  55593. 801718a: 4628 mov r0, r5
  55594. 801718c: 47b0 blx r6
  55595. 801718e: 2800 cmp r0, #0
  55596. 8017190: dc08 bgt.n 80171a4 <__sflush_r+0xfc>
  55597. 8017192: f9b4 300c ldrsh.w r3, [r4, #12]
  55598. 8017196: f043 0340 orr.w r3, r3, #64 @ 0x40
  55599. 801719a: 81a3 strh r3, [r4, #12]
  55600. 801719c: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  55601. 80171a0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
  55602. 80171a4: 4407 add r7, r0
  55603. 80171a6: eba8 0800 sub.w r8, r8, r0
  55604. 80171aa: e7e7 b.n 801717c <__sflush_r+0xd4>
  55605. 80171ac: dfbffffe .word 0xdfbffffe
  55606. 080171b0 <_fflush_r>:
  55607. 80171b0: b538 push {r3, r4, r5, lr}
  55608. 80171b2: 690b ldr r3, [r1, #16]
  55609. 80171b4: 4605 mov r5, r0
  55610. 80171b6: 460c mov r4, r1
  55611. 80171b8: b913 cbnz r3, 80171c0 <_fflush_r+0x10>
  55612. 80171ba: 2500 movs r5, #0
  55613. 80171bc: 4628 mov r0, r5
  55614. 80171be: bd38 pop {r3, r4, r5, pc}
  55615. 80171c0: b118 cbz r0, 80171ca <_fflush_r+0x1a>
  55616. 80171c2: 6a03 ldr r3, [r0, #32]
  55617. 80171c4: b90b cbnz r3, 80171ca <_fflush_r+0x1a>
  55618. 80171c6: f7ff fa3b bl 8016640 <__sinit>
  55619. 80171ca: f9b4 300c ldrsh.w r3, [r4, #12]
  55620. 80171ce: 2b00 cmp r3, #0
  55621. 80171d0: d0f3 beq.n 80171ba <_fflush_r+0xa>
  55622. 80171d2: 6e62 ldr r2, [r4, #100] @ 0x64
  55623. 80171d4: 07d0 lsls r0, r2, #31
  55624. 80171d6: d404 bmi.n 80171e2 <_fflush_r+0x32>
  55625. 80171d8: 0599 lsls r1, r3, #22
  55626. 80171da: d402 bmi.n 80171e2 <_fflush_r+0x32>
  55627. 80171dc: 6da0 ldr r0, [r4, #88] @ 0x58
  55628. 80171de: f7ff fb8a bl 80168f6 <__retarget_lock_acquire_recursive>
  55629. 80171e2: 4628 mov r0, r5
  55630. 80171e4: 4621 mov r1, r4
  55631. 80171e6: f7ff ff5f bl 80170a8 <__sflush_r>
  55632. 80171ea: 6e63 ldr r3, [r4, #100] @ 0x64
  55633. 80171ec: 07da lsls r2, r3, #31
  55634. 80171ee: 4605 mov r5, r0
  55635. 80171f0: d4e4 bmi.n 80171bc <_fflush_r+0xc>
  55636. 80171f2: 89a3 ldrh r3, [r4, #12]
  55637. 80171f4: 059b lsls r3, r3, #22
  55638. 80171f6: d4e1 bmi.n 80171bc <_fflush_r+0xc>
  55639. 80171f8: 6da0 ldr r0, [r4, #88] @ 0x58
  55640. 80171fa: f7ff fb7d bl 80168f8 <__retarget_lock_release_recursive>
  55641. 80171fe: e7dd b.n 80171bc <_fflush_r+0xc>
  55642. 08017200 <__swbuf_r>:
  55643. 8017200: b5f8 push {r3, r4, r5, r6, r7, lr}
  55644. 8017202: 460e mov r6, r1
  55645. 8017204: 4614 mov r4, r2
  55646. 8017206: 4605 mov r5, r0
  55647. 8017208: b118 cbz r0, 8017212 <__swbuf_r+0x12>
  55648. 801720a: 6a03 ldr r3, [r0, #32]
  55649. 801720c: b90b cbnz r3, 8017212 <__swbuf_r+0x12>
  55650. 801720e: f7ff fa17 bl 8016640 <__sinit>
  55651. 8017212: 69a3 ldr r3, [r4, #24]
  55652. 8017214: 60a3 str r3, [r4, #8]
  55653. 8017216: 89a3 ldrh r3, [r4, #12]
  55654. 8017218: 071a lsls r2, r3, #28
  55655. 801721a: d501 bpl.n 8017220 <__swbuf_r+0x20>
  55656. 801721c: 6923 ldr r3, [r4, #16]
  55657. 801721e: b943 cbnz r3, 8017232 <__swbuf_r+0x32>
  55658. 8017220: 4621 mov r1, r4
  55659. 8017222: 4628 mov r0, r5
  55660. 8017224: f000 f82a bl 801727c <__swsetup_r>
  55661. 8017228: b118 cbz r0, 8017232 <__swbuf_r+0x32>
  55662. 801722a: f04f 37ff mov.w r7, #4294967295 @ 0xffffffff
  55663. 801722e: 4638 mov r0, r7
  55664. 8017230: bdf8 pop {r3, r4, r5, r6, r7, pc}
  55665. 8017232: 6823 ldr r3, [r4, #0]
  55666. 8017234: 6922 ldr r2, [r4, #16]
  55667. 8017236: 1a98 subs r0, r3, r2
  55668. 8017238: 6963 ldr r3, [r4, #20]
  55669. 801723a: b2f6 uxtb r6, r6
  55670. 801723c: 4283 cmp r3, r0
  55671. 801723e: 4637 mov r7, r6
  55672. 8017240: dc05 bgt.n 801724e <__swbuf_r+0x4e>
  55673. 8017242: 4621 mov r1, r4
  55674. 8017244: 4628 mov r0, r5
  55675. 8017246: f7ff ffb3 bl 80171b0 <_fflush_r>
  55676. 801724a: 2800 cmp r0, #0
  55677. 801724c: d1ed bne.n 801722a <__swbuf_r+0x2a>
  55678. 801724e: 68a3 ldr r3, [r4, #8]
  55679. 8017250: 3b01 subs r3, #1
  55680. 8017252: 60a3 str r3, [r4, #8]
  55681. 8017254: 6823 ldr r3, [r4, #0]
  55682. 8017256: 1c5a adds r2, r3, #1
  55683. 8017258: 6022 str r2, [r4, #0]
  55684. 801725a: 701e strb r6, [r3, #0]
  55685. 801725c: 6962 ldr r2, [r4, #20]
  55686. 801725e: 1c43 adds r3, r0, #1
  55687. 8017260: 429a cmp r2, r3
  55688. 8017262: d004 beq.n 801726e <__swbuf_r+0x6e>
  55689. 8017264: 89a3 ldrh r3, [r4, #12]
  55690. 8017266: 07db lsls r3, r3, #31
  55691. 8017268: d5e1 bpl.n 801722e <__swbuf_r+0x2e>
  55692. 801726a: 2e0a cmp r6, #10
  55693. 801726c: d1df bne.n 801722e <__swbuf_r+0x2e>
  55694. 801726e: 4621 mov r1, r4
  55695. 8017270: 4628 mov r0, r5
  55696. 8017272: f7ff ff9d bl 80171b0 <_fflush_r>
  55697. 8017276: 2800 cmp r0, #0
  55698. 8017278: d0d9 beq.n 801722e <__swbuf_r+0x2e>
  55699. 801727a: e7d6 b.n 801722a <__swbuf_r+0x2a>
  55700. 0801727c <__swsetup_r>:
  55701. 801727c: b538 push {r3, r4, r5, lr}
  55702. 801727e: 4b29 ldr r3, [pc, #164] @ (8017324 <__swsetup_r+0xa8>)
  55703. 8017280: 4605 mov r5, r0
  55704. 8017282: 6818 ldr r0, [r3, #0]
  55705. 8017284: 460c mov r4, r1
  55706. 8017286: b118 cbz r0, 8017290 <__swsetup_r+0x14>
  55707. 8017288: 6a03 ldr r3, [r0, #32]
  55708. 801728a: b90b cbnz r3, 8017290 <__swsetup_r+0x14>
  55709. 801728c: f7ff f9d8 bl 8016640 <__sinit>
  55710. 8017290: f9b4 300c ldrsh.w r3, [r4, #12]
  55711. 8017294: 0719 lsls r1, r3, #28
  55712. 8017296: d422 bmi.n 80172de <__swsetup_r+0x62>
  55713. 8017298: 06da lsls r2, r3, #27
  55714. 801729a: d407 bmi.n 80172ac <__swsetup_r+0x30>
  55715. 801729c: 2209 movs r2, #9
  55716. 801729e: 602a str r2, [r5, #0]
  55717. 80172a0: f043 0340 orr.w r3, r3, #64 @ 0x40
  55718. 80172a4: 81a3 strh r3, [r4, #12]
  55719. 80172a6: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  55720. 80172aa: e033 b.n 8017314 <__swsetup_r+0x98>
  55721. 80172ac: 0758 lsls r0, r3, #29
  55722. 80172ae: d512 bpl.n 80172d6 <__swsetup_r+0x5a>
  55723. 80172b0: 6b61 ldr r1, [r4, #52] @ 0x34
  55724. 80172b2: b141 cbz r1, 80172c6 <__swsetup_r+0x4a>
  55725. 80172b4: f104 0344 add.w r3, r4, #68 @ 0x44
  55726. 80172b8: 4299 cmp r1, r3
  55727. 80172ba: d002 beq.n 80172c2 <__swsetup_r+0x46>
  55728. 80172bc: 4628 mov r0, r5
  55729. 80172be: f7ff fb2b bl 8016918 <_free_r>
  55730. 80172c2: 2300 movs r3, #0
  55731. 80172c4: 6363 str r3, [r4, #52] @ 0x34
  55732. 80172c6: 89a3 ldrh r3, [r4, #12]
  55733. 80172c8: f023 0324 bic.w r3, r3, #36 @ 0x24
  55734. 80172cc: 81a3 strh r3, [r4, #12]
  55735. 80172ce: 2300 movs r3, #0
  55736. 80172d0: 6063 str r3, [r4, #4]
  55737. 80172d2: 6923 ldr r3, [r4, #16]
  55738. 80172d4: 6023 str r3, [r4, #0]
  55739. 80172d6: 89a3 ldrh r3, [r4, #12]
  55740. 80172d8: f043 0308 orr.w r3, r3, #8
  55741. 80172dc: 81a3 strh r3, [r4, #12]
  55742. 80172de: 6923 ldr r3, [r4, #16]
  55743. 80172e0: b94b cbnz r3, 80172f6 <__swsetup_r+0x7a>
  55744. 80172e2: 89a3 ldrh r3, [r4, #12]
  55745. 80172e4: f403 7320 and.w r3, r3, #640 @ 0x280
  55746. 80172e8: f5b3 7f00 cmp.w r3, #512 @ 0x200
  55747. 80172ec: d003 beq.n 80172f6 <__swsetup_r+0x7a>
  55748. 80172ee: 4621 mov r1, r4
  55749. 80172f0: 4628 mov r0, r5
  55750. 80172f2: f000 f84f bl 8017394 <__smakebuf_r>
  55751. 80172f6: f9b4 300c ldrsh.w r3, [r4, #12]
  55752. 80172fa: f013 0201 ands.w r2, r3, #1
  55753. 80172fe: d00a beq.n 8017316 <__swsetup_r+0x9a>
  55754. 8017300: 2200 movs r2, #0
  55755. 8017302: 60a2 str r2, [r4, #8]
  55756. 8017304: 6962 ldr r2, [r4, #20]
  55757. 8017306: 4252 negs r2, r2
  55758. 8017308: 61a2 str r2, [r4, #24]
  55759. 801730a: 6922 ldr r2, [r4, #16]
  55760. 801730c: b942 cbnz r2, 8017320 <__swsetup_r+0xa4>
  55761. 801730e: f013 0080 ands.w r0, r3, #128 @ 0x80
  55762. 8017312: d1c5 bne.n 80172a0 <__swsetup_r+0x24>
  55763. 8017314: bd38 pop {r3, r4, r5, pc}
  55764. 8017316: 0799 lsls r1, r3, #30
  55765. 8017318: bf58 it pl
  55766. 801731a: 6962 ldrpl r2, [r4, #20]
  55767. 801731c: 60a2 str r2, [r4, #8]
  55768. 801731e: e7f4 b.n 801730a <__swsetup_r+0x8e>
  55769. 8017320: 2000 movs r0, #0
  55770. 8017322: e7f7 b.n 8017314 <__swsetup_r+0x98>
  55771. 8017324: 24000054 .word 0x24000054
  55772. 08017328 <_sbrk_r>:
  55773. 8017328: b538 push {r3, r4, r5, lr}
  55774. 801732a: 4d06 ldr r5, [pc, #24] @ (8017344 <_sbrk_r+0x1c>)
  55775. 801732c: 2300 movs r3, #0
  55776. 801732e: 4604 mov r4, r0
  55777. 8017330: 4608 mov r0, r1
  55778. 8017332: 602b str r3, [r5, #0]
  55779. 8017334: f7ec fb42 bl 80039bc <_sbrk>
  55780. 8017338: 1c43 adds r3, r0, #1
  55781. 801733a: d102 bne.n 8017342 <_sbrk_r+0x1a>
  55782. 801733c: 682b ldr r3, [r5, #0]
  55783. 801733e: b103 cbz r3, 8017342 <_sbrk_r+0x1a>
  55784. 8017340: 6023 str r3, [r4, #0]
  55785. 8017342: bd38 pop {r3, r4, r5, pc}
  55786. 8017344: 24012d34 .word 0x24012d34
  55787. 08017348 <__swhatbuf_r>:
  55788. 8017348: b570 push {r4, r5, r6, lr}
  55789. 801734a: 460c mov r4, r1
  55790. 801734c: f9b1 100e ldrsh.w r1, [r1, #14]
  55791. 8017350: 2900 cmp r1, #0
  55792. 8017352: b096 sub sp, #88 @ 0x58
  55793. 8017354: 4615 mov r5, r2
  55794. 8017356: 461e mov r6, r3
  55795. 8017358: da0d bge.n 8017376 <__swhatbuf_r+0x2e>
  55796. 801735a: 89a3 ldrh r3, [r4, #12]
  55797. 801735c: f013 0f80 tst.w r3, #128 @ 0x80
  55798. 8017360: f04f 0100 mov.w r1, #0
  55799. 8017364: bf14 ite ne
  55800. 8017366: 2340 movne r3, #64 @ 0x40
  55801. 8017368: f44f 6380 moveq.w r3, #1024 @ 0x400
  55802. 801736c: 2000 movs r0, #0
  55803. 801736e: 6031 str r1, [r6, #0]
  55804. 8017370: 602b str r3, [r5, #0]
  55805. 8017372: b016 add sp, #88 @ 0x58
  55806. 8017374: bd70 pop {r4, r5, r6, pc}
  55807. 8017376: 466a mov r2, sp
  55808. 8017378: f000 f848 bl 801740c <_fstat_r>
  55809. 801737c: 2800 cmp r0, #0
  55810. 801737e: dbec blt.n 801735a <__swhatbuf_r+0x12>
  55811. 8017380: 9901 ldr r1, [sp, #4]
  55812. 8017382: f401 4170 and.w r1, r1, #61440 @ 0xf000
  55813. 8017386: f5a1 5300 sub.w r3, r1, #8192 @ 0x2000
  55814. 801738a: 4259 negs r1, r3
  55815. 801738c: 4159 adcs r1, r3
  55816. 801738e: f44f 6380 mov.w r3, #1024 @ 0x400
  55817. 8017392: e7eb b.n 801736c <__swhatbuf_r+0x24>
  55818. 08017394 <__smakebuf_r>:
  55819. 8017394: 898b ldrh r3, [r1, #12]
  55820. 8017396: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
  55821. 8017398: 079d lsls r5, r3, #30
  55822. 801739a: 4606 mov r6, r0
  55823. 801739c: 460c mov r4, r1
  55824. 801739e: d507 bpl.n 80173b0 <__smakebuf_r+0x1c>
  55825. 80173a0: f104 0347 add.w r3, r4, #71 @ 0x47
  55826. 80173a4: 6023 str r3, [r4, #0]
  55827. 80173a6: 6123 str r3, [r4, #16]
  55828. 80173a8: 2301 movs r3, #1
  55829. 80173aa: 6163 str r3, [r4, #20]
  55830. 80173ac: b003 add sp, #12
  55831. 80173ae: bdf0 pop {r4, r5, r6, r7, pc}
  55832. 80173b0: ab01 add r3, sp, #4
  55833. 80173b2: 466a mov r2, sp
  55834. 80173b4: f7ff ffc8 bl 8017348 <__swhatbuf_r>
  55835. 80173b8: 9f00 ldr r7, [sp, #0]
  55836. 80173ba: 4605 mov r5, r0
  55837. 80173bc: 4639 mov r1, r7
  55838. 80173be: 4630 mov r0, r6
  55839. 80173c0: f7ff fb16 bl 80169f0 <_malloc_r>
  55840. 80173c4: b948 cbnz r0, 80173da <__smakebuf_r+0x46>
  55841. 80173c6: f9b4 300c ldrsh.w r3, [r4, #12]
  55842. 80173ca: 059a lsls r2, r3, #22
  55843. 80173cc: d4ee bmi.n 80173ac <__smakebuf_r+0x18>
  55844. 80173ce: f023 0303 bic.w r3, r3, #3
  55845. 80173d2: f043 0302 orr.w r3, r3, #2
  55846. 80173d6: 81a3 strh r3, [r4, #12]
  55847. 80173d8: e7e2 b.n 80173a0 <__smakebuf_r+0xc>
  55848. 80173da: 89a3 ldrh r3, [r4, #12]
  55849. 80173dc: 6020 str r0, [r4, #0]
  55850. 80173de: f043 0380 orr.w r3, r3, #128 @ 0x80
  55851. 80173e2: 81a3 strh r3, [r4, #12]
  55852. 80173e4: 9b01 ldr r3, [sp, #4]
  55853. 80173e6: e9c4 0704 strd r0, r7, [r4, #16]
  55854. 80173ea: b15b cbz r3, 8017404 <__smakebuf_r+0x70>
  55855. 80173ec: f9b4 100e ldrsh.w r1, [r4, #14]
  55856. 80173f0: 4630 mov r0, r6
  55857. 80173f2: f000 f81d bl 8017430 <_isatty_r>
  55858. 80173f6: b128 cbz r0, 8017404 <__smakebuf_r+0x70>
  55859. 80173f8: 89a3 ldrh r3, [r4, #12]
  55860. 80173fa: f023 0303 bic.w r3, r3, #3
  55861. 80173fe: f043 0301 orr.w r3, r3, #1
  55862. 8017402: 81a3 strh r3, [r4, #12]
  55863. 8017404: 89a3 ldrh r3, [r4, #12]
  55864. 8017406: 431d orrs r5, r3
  55865. 8017408: 81a5 strh r5, [r4, #12]
  55866. 801740a: e7cf b.n 80173ac <__smakebuf_r+0x18>
  55867. 0801740c <_fstat_r>:
  55868. 801740c: b538 push {r3, r4, r5, lr}
  55869. 801740e: 4d07 ldr r5, [pc, #28] @ (801742c <_fstat_r+0x20>)
  55870. 8017410: 2300 movs r3, #0
  55871. 8017412: 4604 mov r4, r0
  55872. 8017414: 4608 mov r0, r1
  55873. 8017416: 4611 mov r1, r2
  55874. 8017418: 602b str r3, [r5, #0]
  55875. 801741a: f7ec faa6 bl 800396a <_fstat>
  55876. 801741e: 1c43 adds r3, r0, #1
  55877. 8017420: d102 bne.n 8017428 <_fstat_r+0x1c>
  55878. 8017422: 682b ldr r3, [r5, #0]
  55879. 8017424: b103 cbz r3, 8017428 <_fstat_r+0x1c>
  55880. 8017426: 6023 str r3, [r4, #0]
  55881. 8017428: bd38 pop {r3, r4, r5, pc}
  55882. 801742a: bf00 nop
  55883. 801742c: 24012d34 .word 0x24012d34
  55884. 08017430 <_isatty_r>:
  55885. 8017430: b538 push {r3, r4, r5, lr}
  55886. 8017432: 4d06 ldr r5, [pc, #24] @ (801744c <_isatty_r+0x1c>)
  55887. 8017434: 2300 movs r3, #0
  55888. 8017436: 4604 mov r4, r0
  55889. 8017438: 4608 mov r0, r1
  55890. 801743a: 602b str r3, [r5, #0]
  55891. 801743c: f7ec faa5 bl 800398a <_isatty>
  55892. 8017440: 1c43 adds r3, r0, #1
  55893. 8017442: d102 bne.n 801744a <_isatty_r+0x1a>
  55894. 8017444: 682b ldr r3, [r5, #0]
  55895. 8017446: b103 cbz r3, 801744a <_isatty_r+0x1a>
  55896. 8017448: 6023 str r3, [r4, #0]
  55897. 801744a: bd38 pop {r3, r4, r5, pc}
  55898. 801744c: 24012d34 .word 0x24012d34
  55899. 08017450 <_init>:
  55900. 8017450: b5f8 push {r3, r4, r5, r6, r7, lr}
  55901. 8017452: bf00 nop
  55902. 8017454: bcf8 pop {r3, r4, r5, r6, r7}
  55903. 8017456: bc08 pop {r3}
  55904. 8017458: 469e mov lr, r3
  55905. 801745a: 4770 bx lr
  55906. 0801745c <_fini>:
  55907. 801745c: b5f8 push {r3, r4, r5, r6, r7, lr}
  55908. 801745e: bf00 nop
  55909. 8017460: bcf8 pop {r3, r4, r5, r6, r7}
  55910. 8017462: bc08 pop {r3}
  55911. 8017464: 469e mov lr, r3
  55912. 8017466: 4770 bx lr