OZE_Sensor.list 1.5 MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765
  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 0000fd08 080002a0 080002a0 000012a0 2**4
  7. CONTENTS, ALLOC, LOAD, READONLY, CODE
  8. 2 .rodata 0000017c 0800ffa8 0800ffa8 00010fa8 2**2
  9. CONTENTS, ALLOC, LOAD, READONLY, DATA
  10. 3 .ARM 00000008 08010124 08010124 00011124 2**2
  11. CONTENTS, ALLOC, LOAD, READONLY, DATA
  12. 4 .init_array 00000004 0801012c 0801012c 0001112c 2**2
  13. CONTENTS, ALLOC, LOAD, READONLY, DATA
  14. 5 .fini_array 00000004 08010130 08010130 00011130 2**2
  15. CONTENTS, ALLOC, LOAD, READONLY, DATA
  16. 6 .data 00000070 24000000 08010134 00012000 2**2
  17. CONTENTS, ALLOC, LOAD, DATA
  18. 7 .bss 00012858 24000070 080101a4 00012070 2**2
  19. ALLOC
  20. 8 ._user_heap_stack 00000600 240128c8 080101a4 000128c8 2**0
  21. ALLOC
  22. 9 .ARM.attributes 0000002e 00000000 00000000 00012070 2**0
  23. CONTENTS, READONLY
  24. 10 .debug_info 000275d4 00000000 00000000 0001209e 2**0
  25. CONTENTS, READONLY, DEBUGGING, OCTETS
  26. 11 .debug_abbrev 00004fb6 00000000 00000000 00039672 2**0
  27. CONTENTS, READONLY, DEBUGGING, OCTETS
  28. 12 .debug_aranges 00001ca8 00000000 00000000 0003e628 2**3
  29. CONTENTS, READONLY, DEBUGGING, OCTETS
  30. 13 .debug_rnglists 00001627 00000000 00000000 000402d0 2**0
  31. CONTENTS, READONLY, DEBUGGING, OCTETS
  32. 14 .debug_macro 0003b149 00000000 00000000 000418f7 2**0
  33. CONTENTS, READONLY, DEBUGGING, OCTETS
  34. 15 .debug_line 00025aeb 00000000 00000000 0007ca40 2**0
  35. CONTENTS, READONLY, DEBUGGING, OCTETS
  36. 16 .debug_str 0016ddfb 00000000 00000000 000a252b 2**0
  37. CONTENTS, READONLY, DEBUGGING, OCTETS
  38. 17 .comment 00000043 00000000 00000000 00210326 2**0
  39. CONTENTS, READONLY
  40. 18 .debug_frame 00007f70 00000000 00000000 0021036c 2**2
  41. CONTENTS, READONLY, DEBUGGING, OCTETS
  42. 19 .debug_line_str 00000066 00000000 00000000 002182dc 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: 24000070 .word 0x24000070
  58. 80002bc: 00000000 .word 0x00000000
  59. 80002c0: 0800ff90 .word 0x0800ff90
  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: 24000074 .word 0x24000074
  70. 80002dc: 0800ff90 .word 0x0800ff90
  71. 080002e0 <memchr>:
  72. 80002e0: f001 01ff and.w r1, r1, #255 @ 0xff
  73. 80002e4: 2a10 cmp r2, #16
  74. 80002e6: db2b blt.n 8000340 <memchr+0x60>
  75. 80002e8: f010 0f07 tst.w r0, #7
  76. 80002ec: d008 beq.n 8000300 <memchr+0x20>
  77. 80002ee: f810 3b01 ldrb.w r3, [r0], #1
  78. 80002f2: 3a01 subs r2, #1
  79. 80002f4: 428b cmp r3, r1
  80. 80002f6: d02d beq.n 8000354 <memchr+0x74>
  81. 80002f8: f010 0f07 tst.w r0, #7
  82. 80002fc: b342 cbz r2, 8000350 <memchr+0x70>
  83. 80002fe: d1f6 bne.n 80002ee <memchr+0xe>
  84. 8000300: b4f0 push {r4, r5, r6, r7}
  85. 8000302: ea41 2101 orr.w r1, r1, r1, lsl #8
  86. 8000306: ea41 4101 orr.w r1, r1, r1, lsl #16
  87. 800030a: f022 0407 bic.w r4, r2, #7
  88. 800030e: f07f 0700 mvns.w r7, #0
  89. 8000312: 2300 movs r3, #0
  90. 8000314: e8f0 5602 ldrd r5, r6, [r0], #8
  91. 8000318: 3c08 subs r4, #8
  92. 800031a: ea85 0501 eor.w r5, r5, r1
  93. 800031e: ea86 0601 eor.w r6, r6, r1
  94. 8000322: fa85 f547 uadd8 r5, r5, r7
  95. 8000326: faa3 f587 sel r5, r3, r7
  96. 800032a: fa86 f647 uadd8 r6, r6, r7
  97. 800032e: faa5 f687 sel r6, r5, r7
  98. 8000332: b98e cbnz r6, 8000358 <memchr+0x78>
  99. 8000334: d1ee bne.n 8000314 <memchr+0x34>
  100. 8000336: bcf0 pop {r4, r5, r6, r7}
  101. 8000338: f001 01ff and.w r1, r1, #255 @ 0xff
  102. 800033c: f002 0207 and.w r2, r2, #7
  103. 8000340: b132 cbz r2, 8000350 <memchr+0x70>
  104. 8000342: f810 3b01 ldrb.w r3, [r0], #1
  105. 8000346: 3a01 subs r2, #1
  106. 8000348: ea83 0301 eor.w r3, r3, r1
  107. 800034c: b113 cbz r3, 8000354 <memchr+0x74>
  108. 800034e: d1f8 bne.n 8000342 <memchr+0x62>
  109. 8000350: 2000 movs r0, #0
  110. 8000352: 4770 bx lr
  111. 8000354: 3801 subs r0, #1
  112. 8000356: 4770 bx lr
  113. 8000358: 2d00 cmp r5, #0
  114. 800035a: bf06 itte eq
  115. 800035c: 4635 moveq r5, r6
  116. 800035e: 3803 subeq r0, #3
  117. 8000360: 3807 subne r0, #7
  118. 8000362: f015 0f01 tst.w r5, #1
  119. 8000366: d107 bne.n 8000378 <memchr+0x98>
  120. 8000368: 3001 adds r0, #1
  121. 800036a: f415 7f80 tst.w r5, #256 @ 0x100
  122. 800036e: bf02 ittt eq
  123. 8000370: 3001 addeq r0, #1
  124. 8000372: f415 3fc0 tsteq.w r5, #98304 @ 0x18000
  125. 8000376: 3001 addeq r0, #1
  126. 8000378: bcf0 pop {r4, r5, r6, r7}
  127. 800037a: 3801 subs r0, #1
  128. 800037c: 4770 bx lr
  129. 800037e: bf00 nop
  130. 08000380 <__aeabi_uldivmod>:
  131. 8000380: b953 cbnz r3, 8000398 <__aeabi_uldivmod+0x18>
  132. 8000382: b94a cbnz r2, 8000398 <__aeabi_uldivmod+0x18>
  133. 8000384: 2900 cmp r1, #0
  134. 8000386: bf08 it eq
  135. 8000388: 2800 cmpeq r0, #0
  136. 800038a: bf1c itt ne
  137. 800038c: f04f 31ff movne.w r1, #4294967295 @ 0xffffffff
  138. 8000390: f04f 30ff movne.w r0, #4294967295 @ 0xffffffff
  139. 8000394: f000 b96a b.w 800066c <__aeabi_idiv0>
  140. 8000398: f1ad 0c08 sub.w ip, sp, #8
  141. 800039c: e96d ce04 strd ip, lr, [sp, #-16]!
  142. 80003a0: f000 f806 bl 80003b0 <__udivmoddi4>
  143. 80003a4: f8dd e004 ldr.w lr, [sp, #4]
  144. 80003a8: e9dd 2302 ldrd r2, r3, [sp, #8]
  145. 80003ac: b004 add sp, #16
  146. 80003ae: 4770 bx lr
  147. 080003b0 <__udivmoddi4>:
  148. 80003b0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
  149. 80003b4: 9d08 ldr r5, [sp, #32]
  150. 80003b6: 460c mov r4, r1
  151. 80003b8: 2b00 cmp r3, #0
  152. 80003ba: d14e bne.n 800045a <__udivmoddi4+0xaa>
  153. 80003bc: 4694 mov ip, r2
  154. 80003be: 458c cmp ip, r1
  155. 80003c0: 4686 mov lr, r0
  156. 80003c2: fab2 f282 clz r2, r2
  157. 80003c6: d962 bls.n 800048e <__udivmoddi4+0xde>
  158. 80003c8: b14a cbz r2, 80003de <__udivmoddi4+0x2e>
  159. 80003ca: f1c2 0320 rsb r3, r2, #32
  160. 80003ce: 4091 lsls r1, r2
  161. 80003d0: fa20 f303 lsr.w r3, r0, r3
  162. 80003d4: fa0c fc02 lsl.w ip, ip, r2
  163. 80003d8: 4319 orrs r1, r3
  164. 80003da: fa00 fe02 lsl.w lr, r0, r2
  165. 80003de: ea4f 471c mov.w r7, ip, lsr #16
  166. 80003e2: fa1f f68c uxth.w r6, ip
  167. 80003e6: fbb1 f4f7 udiv r4, r1, r7
  168. 80003ea: ea4f 431e mov.w r3, lr, lsr #16
  169. 80003ee: fb07 1114 mls r1, r7, r4, r1
  170. 80003f2: ea43 4301 orr.w r3, r3, r1, lsl #16
  171. 80003f6: fb04 f106 mul.w r1, r4, r6
  172. 80003fa: 4299 cmp r1, r3
  173. 80003fc: d90a bls.n 8000414 <__udivmoddi4+0x64>
  174. 80003fe: eb1c 0303 adds.w r3, ip, r3
  175. 8000402: f104 30ff add.w r0, r4, #4294967295 @ 0xffffffff
  176. 8000406: f080 8112 bcs.w 800062e <__udivmoddi4+0x27e>
  177. 800040a: 4299 cmp r1, r3
  178. 800040c: f240 810f bls.w 800062e <__udivmoddi4+0x27e>
  179. 8000410: 3c02 subs r4, #2
  180. 8000412: 4463 add r3, ip
  181. 8000414: 1a59 subs r1, r3, r1
  182. 8000416: fa1f f38e uxth.w r3, lr
  183. 800041a: fbb1 f0f7 udiv r0, r1, r7
  184. 800041e: fb07 1110 mls r1, r7, r0, r1
  185. 8000422: ea43 4301 orr.w r3, r3, r1, lsl #16
  186. 8000426: fb00 f606 mul.w r6, r0, r6
  187. 800042a: 429e cmp r6, r3
  188. 800042c: d90a bls.n 8000444 <__udivmoddi4+0x94>
  189. 800042e: eb1c 0303 adds.w r3, ip, r3
  190. 8000432: f100 31ff add.w r1, r0, #4294967295 @ 0xffffffff
  191. 8000436: f080 80fc bcs.w 8000632 <__udivmoddi4+0x282>
  192. 800043a: 429e cmp r6, r3
  193. 800043c: f240 80f9 bls.w 8000632 <__udivmoddi4+0x282>
  194. 8000440: 4463 add r3, ip
  195. 8000442: 3802 subs r0, #2
  196. 8000444: 1b9b subs r3, r3, r6
  197. 8000446: ea40 4004 orr.w r0, r0, r4, lsl #16
  198. 800044a: 2100 movs r1, #0
  199. 800044c: b11d cbz r5, 8000456 <__udivmoddi4+0xa6>
  200. 800044e: 40d3 lsrs r3, r2
  201. 8000450: 2200 movs r2, #0
  202. 8000452: e9c5 3200 strd r3, r2, [r5]
  203. 8000456: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  204. 800045a: 428b cmp r3, r1
  205. 800045c: d905 bls.n 800046a <__udivmoddi4+0xba>
  206. 800045e: b10d cbz r5, 8000464 <__udivmoddi4+0xb4>
  207. 8000460: e9c5 0100 strd r0, r1, [r5]
  208. 8000464: 2100 movs r1, #0
  209. 8000466: 4608 mov r0, r1
  210. 8000468: e7f5 b.n 8000456 <__udivmoddi4+0xa6>
  211. 800046a: fab3 f183 clz r1, r3
  212. 800046e: 2900 cmp r1, #0
  213. 8000470: d146 bne.n 8000500 <__udivmoddi4+0x150>
  214. 8000472: 42a3 cmp r3, r4
  215. 8000474: d302 bcc.n 800047c <__udivmoddi4+0xcc>
  216. 8000476: 4290 cmp r0, r2
  217. 8000478: f0c0 80f0 bcc.w 800065c <__udivmoddi4+0x2ac>
  218. 800047c: 1a86 subs r6, r0, r2
  219. 800047e: eb64 0303 sbc.w r3, r4, r3
  220. 8000482: 2001 movs r0, #1
  221. 8000484: 2d00 cmp r5, #0
  222. 8000486: d0e6 beq.n 8000456 <__udivmoddi4+0xa6>
  223. 8000488: e9c5 6300 strd r6, r3, [r5]
  224. 800048c: e7e3 b.n 8000456 <__udivmoddi4+0xa6>
  225. 800048e: 2a00 cmp r2, #0
  226. 8000490: f040 8090 bne.w 80005b4 <__udivmoddi4+0x204>
  227. 8000494: eba1 040c sub.w r4, r1, ip
  228. 8000498: ea4f 481c mov.w r8, ip, lsr #16
  229. 800049c: fa1f f78c uxth.w r7, ip
  230. 80004a0: 2101 movs r1, #1
  231. 80004a2: fbb4 f6f8 udiv r6, r4, r8
  232. 80004a6: ea4f 431e mov.w r3, lr, lsr #16
  233. 80004aa: fb08 4416 mls r4, r8, r6, r4
  234. 80004ae: ea43 4304 orr.w r3, r3, r4, lsl #16
  235. 80004b2: fb07 f006 mul.w r0, r7, r6
  236. 80004b6: 4298 cmp r0, r3
  237. 80004b8: d908 bls.n 80004cc <__udivmoddi4+0x11c>
  238. 80004ba: eb1c 0303 adds.w r3, ip, r3
  239. 80004be: f106 34ff add.w r4, r6, #4294967295 @ 0xffffffff
  240. 80004c2: d202 bcs.n 80004ca <__udivmoddi4+0x11a>
  241. 80004c4: 4298 cmp r0, r3
  242. 80004c6: f200 80cd bhi.w 8000664 <__udivmoddi4+0x2b4>
  243. 80004ca: 4626 mov r6, r4
  244. 80004cc: 1a1c subs r4, r3, r0
  245. 80004ce: fa1f f38e uxth.w r3, lr
  246. 80004d2: fbb4 f0f8 udiv r0, r4, r8
  247. 80004d6: fb08 4410 mls r4, r8, r0, r4
  248. 80004da: ea43 4304 orr.w r3, r3, r4, lsl #16
  249. 80004de: fb00 f707 mul.w r7, r0, r7
  250. 80004e2: 429f cmp r7, r3
  251. 80004e4: d908 bls.n 80004f8 <__udivmoddi4+0x148>
  252. 80004e6: eb1c 0303 adds.w r3, ip, r3
  253. 80004ea: f100 34ff add.w r4, r0, #4294967295 @ 0xffffffff
  254. 80004ee: d202 bcs.n 80004f6 <__udivmoddi4+0x146>
  255. 80004f0: 429f cmp r7, r3
  256. 80004f2: f200 80b0 bhi.w 8000656 <__udivmoddi4+0x2a6>
  257. 80004f6: 4620 mov r0, r4
  258. 80004f8: 1bdb subs r3, r3, r7
  259. 80004fa: ea40 4006 orr.w r0, r0, r6, lsl #16
  260. 80004fe: e7a5 b.n 800044c <__udivmoddi4+0x9c>
  261. 8000500: f1c1 0620 rsb r6, r1, #32
  262. 8000504: 408b lsls r3, r1
  263. 8000506: fa22 f706 lsr.w r7, r2, r6
  264. 800050a: 431f orrs r7, r3
  265. 800050c: fa20 fc06 lsr.w ip, r0, r6
  266. 8000510: fa04 f301 lsl.w r3, r4, r1
  267. 8000514: ea43 030c orr.w r3, r3, ip
  268. 8000518: 40f4 lsrs r4, r6
  269. 800051a: fa00 f801 lsl.w r8, r0, r1
  270. 800051e: 0c38 lsrs r0, r7, #16
  271. 8000520: ea4f 4913 mov.w r9, r3, lsr #16
  272. 8000524: fbb4 fef0 udiv lr, r4, r0
  273. 8000528: fa1f fc87 uxth.w ip, r7
  274. 800052c: fb00 441e mls r4, r0, lr, r4
  275. 8000530: ea49 4404 orr.w r4, r9, r4, lsl #16
  276. 8000534: fb0e f90c mul.w r9, lr, ip
  277. 8000538: 45a1 cmp r9, r4
  278. 800053a: fa02 f201 lsl.w r2, r2, r1
  279. 800053e: d90a bls.n 8000556 <__udivmoddi4+0x1a6>
  280. 8000540: 193c adds r4, r7, r4
  281. 8000542: f10e 3aff add.w sl, lr, #4294967295 @ 0xffffffff
  282. 8000546: f080 8084 bcs.w 8000652 <__udivmoddi4+0x2a2>
  283. 800054a: 45a1 cmp r9, r4
  284. 800054c: f240 8081 bls.w 8000652 <__udivmoddi4+0x2a2>
  285. 8000550: f1ae 0e02 sub.w lr, lr, #2
  286. 8000554: 443c add r4, r7
  287. 8000556: eba4 0409 sub.w r4, r4, r9
  288. 800055a: fa1f f983 uxth.w r9, r3
  289. 800055e: fbb4 f3f0 udiv r3, r4, r0
  290. 8000562: fb00 4413 mls r4, r0, r3, r4
  291. 8000566: ea49 4404 orr.w r4, r9, r4, lsl #16
  292. 800056a: fb03 fc0c mul.w ip, r3, ip
  293. 800056e: 45a4 cmp ip, r4
  294. 8000570: d907 bls.n 8000582 <__udivmoddi4+0x1d2>
  295. 8000572: 193c adds r4, r7, r4
  296. 8000574: f103 30ff add.w r0, r3, #4294967295 @ 0xffffffff
  297. 8000578: d267 bcs.n 800064a <__udivmoddi4+0x29a>
  298. 800057a: 45a4 cmp ip, r4
  299. 800057c: d965 bls.n 800064a <__udivmoddi4+0x29a>
  300. 800057e: 3b02 subs r3, #2
  301. 8000580: 443c add r4, r7
  302. 8000582: ea43 400e orr.w r0, r3, lr, lsl #16
  303. 8000586: fba0 9302 umull r9, r3, r0, r2
  304. 800058a: eba4 040c sub.w r4, r4, ip
  305. 800058e: 429c cmp r4, r3
  306. 8000590: 46ce mov lr, r9
  307. 8000592: 469c mov ip, r3
  308. 8000594: d351 bcc.n 800063a <__udivmoddi4+0x28a>
  309. 8000596: d04e beq.n 8000636 <__udivmoddi4+0x286>
  310. 8000598: b155 cbz r5, 80005b0 <__udivmoddi4+0x200>
  311. 800059a: ebb8 030e subs.w r3, r8, lr
  312. 800059e: eb64 040c sbc.w r4, r4, ip
  313. 80005a2: fa04 f606 lsl.w r6, r4, r6
  314. 80005a6: 40cb lsrs r3, r1
  315. 80005a8: 431e orrs r6, r3
  316. 80005aa: 40cc lsrs r4, r1
  317. 80005ac: e9c5 6400 strd r6, r4, [r5]
  318. 80005b0: 2100 movs r1, #0
  319. 80005b2: e750 b.n 8000456 <__udivmoddi4+0xa6>
  320. 80005b4: f1c2 0320 rsb r3, r2, #32
  321. 80005b8: fa20 f103 lsr.w r1, r0, r3
  322. 80005bc: fa0c fc02 lsl.w ip, ip, r2
  323. 80005c0: fa24 f303 lsr.w r3, r4, r3
  324. 80005c4: 4094 lsls r4, r2
  325. 80005c6: 430c orrs r4, r1
  326. 80005c8: ea4f 481c mov.w r8, ip, lsr #16
  327. 80005cc: fa00 fe02 lsl.w lr, r0, r2
  328. 80005d0: fa1f f78c uxth.w r7, ip
  329. 80005d4: fbb3 f0f8 udiv r0, r3, r8
  330. 80005d8: fb08 3110 mls r1, r8, r0, r3
  331. 80005dc: 0c23 lsrs r3, r4, #16
  332. 80005de: ea43 4301 orr.w r3, r3, r1, lsl #16
  333. 80005e2: fb00 f107 mul.w r1, r0, r7
  334. 80005e6: 4299 cmp r1, r3
  335. 80005e8: d908 bls.n 80005fc <__udivmoddi4+0x24c>
  336. 80005ea: eb1c 0303 adds.w r3, ip, r3
  337. 80005ee: f100 36ff add.w r6, r0, #4294967295 @ 0xffffffff
  338. 80005f2: d22c bcs.n 800064e <__udivmoddi4+0x29e>
  339. 80005f4: 4299 cmp r1, r3
  340. 80005f6: d92a bls.n 800064e <__udivmoddi4+0x29e>
  341. 80005f8: 3802 subs r0, #2
  342. 80005fa: 4463 add r3, ip
  343. 80005fc: 1a5b subs r3, r3, r1
  344. 80005fe: b2a4 uxth r4, r4
  345. 8000600: fbb3 f1f8 udiv r1, r3, r8
  346. 8000604: fb08 3311 mls r3, r8, r1, r3
  347. 8000608: ea44 4403 orr.w r4, r4, r3, lsl #16
  348. 800060c: fb01 f307 mul.w r3, r1, r7
  349. 8000610: 42a3 cmp r3, r4
  350. 8000612: d908 bls.n 8000626 <__udivmoddi4+0x276>
  351. 8000614: eb1c 0404 adds.w r4, ip, r4
  352. 8000618: f101 36ff add.w r6, r1, #4294967295 @ 0xffffffff
  353. 800061c: d213 bcs.n 8000646 <__udivmoddi4+0x296>
  354. 800061e: 42a3 cmp r3, r4
  355. 8000620: d911 bls.n 8000646 <__udivmoddi4+0x296>
  356. 8000622: 3902 subs r1, #2
  357. 8000624: 4464 add r4, ip
  358. 8000626: 1ae4 subs r4, r4, r3
  359. 8000628: ea41 4100 orr.w r1, r1, r0, lsl #16
  360. 800062c: e739 b.n 80004a2 <__udivmoddi4+0xf2>
  361. 800062e: 4604 mov r4, r0
  362. 8000630: e6f0 b.n 8000414 <__udivmoddi4+0x64>
  363. 8000632: 4608 mov r0, r1
  364. 8000634: e706 b.n 8000444 <__udivmoddi4+0x94>
  365. 8000636: 45c8 cmp r8, r9
  366. 8000638: d2ae bcs.n 8000598 <__udivmoddi4+0x1e8>
  367. 800063a: ebb9 0e02 subs.w lr, r9, r2
  368. 800063e: eb63 0c07 sbc.w ip, r3, r7
  369. 8000642: 3801 subs r0, #1
  370. 8000644: e7a8 b.n 8000598 <__udivmoddi4+0x1e8>
  371. 8000646: 4631 mov r1, r6
  372. 8000648: e7ed b.n 8000626 <__udivmoddi4+0x276>
  373. 800064a: 4603 mov r3, r0
  374. 800064c: e799 b.n 8000582 <__udivmoddi4+0x1d2>
  375. 800064e: 4630 mov r0, r6
  376. 8000650: e7d4 b.n 80005fc <__udivmoddi4+0x24c>
  377. 8000652: 46d6 mov lr, sl
  378. 8000654: e77f b.n 8000556 <__udivmoddi4+0x1a6>
  379. 8000656: 4463 add r3, ip
  380. 8000658: 3802 subs r0, #2
  381. 800065a: e74d b.n 80004f8 <__udivmoddi4+0x148>
  382. 800065c: 4606 mov r6, r0
  383. 800065e: 4623 mov r3, r4
  384. 8000660: 4608 mov r0, r1
  385. 8000662: e70f b.n 8000484 <__udivmoddi4+0xd4>
  386. 8000664: 3e02 subs r6, #2
  387. 8000666: 4463 add r3, ip
  388. 8000668: e730 b.n 80004cc <__udivmoddi4+0x11c>
  389. 800066a: bf00 nop
  390. 0800066c <__aeabi_idiv0>:
  391. 800066c: 4770 bx lr
  392. 800066e: bf00 nop
  393. 08000670 <vApplicationStackOverflowHook>:
  394. /* Hook prototypes */
  395. void vApplicationStackOverflowHook(xTaskHandle xTask, signed char *pcTaskName);
  396. /* USER CODE BEGIN 4 */
  397. void vApplicationStackOverflowHook(xTaskHandle xTask, signed char *pcTaskName)
  398. {
  399. 8000670: b480 push {r7}
  400. 8000672: b083 sub sp, #12
  401. 8000674: af00 add r7, sp, #0
  402. 8000676: 6078 str r0, [r7, #4]
  403. 8000678: 6039 str r1, [r7, #0]
  404. /* Run time stack overflow checking is performed if
  405. configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook function is
  406. called if a stack overflow is detected. */
  407. }
  408. 800067a: bf00 nop
  409. 800067c: 370c adds r7, #12
  410. 800067e: 46bd mov sp, r7
  411. 8000680: f85d 7b04 ldr.w r7, [sp], #4
  412. 8000684: 4770 bx lr
  413. ...
  414. 08000688 <main>:
  415. /**
  416. * @brief The application entry point.
  417. * @retval int
  418. */
  419. int main(void)
  420. {
  421. 8000688: b580 push {r7, lr}
  422. 800068a: b084 sub sp, #16
  423. 800068c: af00 add r7, sp, #0
  424. /* USER CODE BEGIN 1 */
  425. /* USER CODE END 1 */
  426. /* MPU Configuration--------------------------------------------------------*/
  427. MPU_Config();
  428. 800068e: f000 fa77 bl 8000b80 <MPU_Config>
  429. \details Turns on I-Cache
  430. */
  431. __STATIC_FORCEINLINE void SCB_EnableICache (void)
  432. {
  433. #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
  434. if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */
  435. 8000692: 4b42 ldr r3, [pc, #264] @ (800079c <main+0x114>)
  436. 8000694: 695b ldr r3, [r3, #20]
  437. 8000696: f403 3300 and.w r3, r3, #131072 @ 0x20000
  438. 800069a: 2b00 cmp r3, #0
  439. 800069c: d11b bne.n 80006d6 <main+0x4e>
  440. \details Acts as a special kind of Data Memory Barrier.
  441. It completes when all explicit memory accesses before this instruction complete.
  442. */
  443. __STATIC_FORCEINLINE void __DSB(void)
  444. {
  445. __ASM volatile ("dsb 0xF":::"memory");
  446. 800069e: f3bf 8f4f dsb sy
  447. }
  448. 80006a2: bf00 nop
  449. __ASM volatile ("isb 0xF":::"memory");
  450. 80006a4: f3bf 8f6f isb sy
  451. }
  452. 80006a8: bf00 nop
  453. __DSB();
  454. __ISB();
  455. SCB->ICIALLU = 0UL; /* invalidate I-Cache */
  456. 80006aa: 4b3c ldr r3, [pc, #240] @ (800079c <main+0x114>)
  457. 80006ac: 2200 movs r2, #0
  458. 80006ae: f8c3 2250 str.w r2, [r3, #592] @ 0x250
  459. __ASM volatile ("dsb 0xF":::"memory");
  460. 80006b2: f3bf 8f4f dsb sy
  461. }
  462. 80006b6: bf00 nop
  463. __ASM volatile ("isb 0xF":::"memory");
  464. 80006b8: f3bf 8f6f isb sy
  465. }
  466. 80006bc: bf00 nop
  467. __DSB();
  468. __ISB();
  469. SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */
  470. 80006be: 4b37 ldr r3, [pc, #220] @ (800079c <main+0x114>)
  471. 80006c0: 695b ldr r3, [r3, #20]
  472. 80006c2: 4a36 ldr r2, [pc, #216] @ (800079c <main+0x114>)
  473. 80006c4: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  474. 80006c8: 6153 str r3, [r2, #20]
  475. __ASM volatile ("dsb 0xF":::"memory");
  476. 80006ca: f3bf 8f4f dsb sy
  477. }
  478. 80006ce: bf00 nop
  479. __ASM volatile ("isb 0xF":::"memory");
  480. 80006d0: f3bf 8f6f isb sy
  481. }
  482. 80006d4: e000 b.n 80006d8 <main+0x50>
  483. if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */
  484. 80006d6: bf00 nop
  485. #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
  486. uint32_t ccsidr;
  487. uint32_t sets;
  488. uint32_t ways;
  489. if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */
  490. 80006d8: 4b30 ldr r3, [pc, #192] @ (800079c <main+0x114>)
  491. 80006da: 695b ldr r3, [r3, #20]
  492. 80006dc: f403 3380 and.w r3, r3, #65536 @ 0x10000
  493. 80006e0: 2b00 cmp r3, #0
  494. 80006e2: d138 bne.n 8000756 <main+0xce>
  495. SCB->CSSELR = 0U; /* select Level 1 data cache */
  496. 80006e4: 4b2d ldr r3, [pc, #180] @ (800079c <main+0x114>)
  497. 80006e6: 2200 movs r2, #0
  498. 80006e8: f8c3 2084 str.w r2, [r3, #132] @ 0x84
  499. __ASM volatile ("dsb 0xF":::"memory");
  500. 80006ec: f3bf 8f4f dsb sy
  501. }
  502. 80006f0: bf00 nop
  503. __DSB();
  504. ccsidr = SCB->CCSIDR;
  505. 80006f2: 4b2a ldr r3, [pc, #168] @ (800079c <main+0x114>)
  506. 80006f4: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  507. 80006f8: 60fb str r3, [r7, #12]
  508. /* invalidate D-Cache */
  509. sets = (uint32_t)(CCSIDR_SETS(ccsidr));
  510. 80006fa: 68fb ldr r3, [r7, #12]
  511. 80006fc: 0b5b lsrs r3, r3, #13
  512. 80006fe: f3c3 030e ubfx r3, r3, #0, #15
  513. 8000702: 60bb str r3, [r7, #8]
  514. do {
  515. ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
  516. 8000704: 68fb ldr r3, [r7, #12]
  517. 8000706: 08db lsrs r3, r3, #3
  518. 8000708: f3c3 0309 ubfx r3, r3, #0, #10
  519. 800070c: 607b str r3, [r7, #4]
  520. do {
  521. SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
  522. 800070e: 68bb ldr r3, [r7, #8]
  523. 8000710: 015a lsls r2, r3, #5
  524. 8000712: f643 73e0 movw r3, #16352 @ 0x3fe0
  525. 8000716: 4013 ands r3, r2
  526. ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) );
  527. 8000718: 687a ldr r2, [r7, #4]
  528. 800071a: 0792 lsls r2, r2, #30
  529. SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
  530. 800071c: 491f ldr r1, [pc, #124] @ (800079c <main+0x114>)
  531. 800071e: 4313 orrs r3, r2
  532. 8000720: f8c1 3260 str.w r3, [r1, #608] @ 0x260
  533. #if defined ( __CC_ARM )
  534. __schedule_barrier();
  535. #endif
  536. } while (ways-- != 0U);
  537. 8000724: 687b ldr r3, [r7, #4]
  538. 8000726: 1e5a subs r2, r3, #1
  539. 8000728: 607a str r2, [r7, #4]
  540. 800072a: 2b00 cmp r3, #0
  541. 800072c: d1ef bne.n 800070e <main+0x86>
  542. } while(sets-- != 0U);
  543. 800072e: 68bb ldr r3, [r7, #8]
  544. 8000730: 1e5a subs r2, r3, #1
  545. 8000732: 60ba str r2, [r7, #8]
  546. 8000734: 2b00 cmp r3, #0
  547. 8000736: d1e5 bne.n 8000704 <main+0x7c>
  548. __ASM volatile ("dsb 0xF":::"memory");
  549. 8000738: f3bf 8f4f dsb sy
  550. }
  551. 800073c: bf00 nop
  552. __DSB();
  553. SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */
  554. 800073e: 4b17 ldr r3, [pc, #92] @ (800079c <main+0x114>)
  555. 8000740: 695b ldr r3, [r3, #20]
  556. 8000742: 4a16 ldr r2, [pc, #88] @ (800079c <main+0x114>)
  557. 8000744: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  558. 8000748: 6153 str r3, [r2, #20]
  559. __ASM volatile ("dsb 0xF":::"memory");
  560. 800074a: f3bf 8f4f dsb sy
  561. }
  562. 800074e: bf00 nop
  563. __ASM volatile ("isb 0xF":::"memory");
  564. 8000750: f3bf 8f6f isb sy
  565. }
  566. 8000754: e000 b.n 8000758 <main+0xd0>
  567. if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */
  568. 8000756: bf00 nop
  569. SCB_EnableDCache();
  570. /* MCU Configuration--------------------------------------------------------*/
  571. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  572. HAL_Init();
  573. 8000758: f001 ff32 bl 80025c0 <HAL_Init>
  574. /* USER CODE BEGIN Init */
  575. /* USER CODE END Init */
  576. /* Configure the system clock */
  577. SystemClock_Config();
  578. 800075c: f000 f826 bl 80007ac <SystemClock_Config>
  579. /* USER CODE BEGIN SysInit */
  580. /* USER CODE END SysInit */
  581. /* Initialize all configured peripherals */
  582. MX_GPIO_Init();
  583. 8000760: f000 f9a4 bl 8000aac <MX_GPIO_Init>
  584. MX_DMA_Init();
  585. 8000764: f000 f97a bl 8000a5c <MX_DMA_Init>
  586. MX_UART8_Init();
  587. 8000768: f000 f8dc bl 8000924 <MX_UART8_Init>
  588. MX_CRC_Init();
  589. 800076c: f000 f89a bl 80008a4 <MX_CRC_Init>
  590. MX_RNG_Init();
  591. 8000770: f000 f8c2 bl 80008f8 <MX_RNG_Init>
  592. MX_USART1_UART_Init();
  593. 8000774: f000 f922 bl 80009bc <MX_USART1_UART_Init>
  594. /* USER CODE BEGIN 2 */
  595. /* USER CODE END 2 */
  596. /* Init scheduler */
  597. osKernelInitialize();
  598. 8000778: f00a fe68 bl 800b44c <osKernelInitialize>
  599. /* add queues, ... */
  600. /* USER CODE END RTOS_QUEUES */
  601. /* Create the thread(s) */
  602. /* creation of defaultTask */
  603. defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
  604. 800077c: 4a08 ldr r2, [pc, #32] @ (80007a0 <main+0x118>)
  605. 800077e: 2100 movs r1, #0
  606. 8000780: 4808 ldr r0, [pc, #32] @ (80007a4 <main+0x11c>)
  607. 8000782: f00a fead bl 800b4e0 <osThreadNew>
  608. 8000786: 4603 mov r3, r0
  609. 8000788: 4a07 ldr r2, [pc, #28] @ (80007a8 <main+0x120>)
  610. 800078a: 6013 str r3, [r2, #0]
  611. /* USER CODE BEGIN RTOS_THREADS */
  612. /* add threads, ... */
  613. // Uart8TasksInit();
  614. UartTasksInit();
  615. 800078c: f001 f9f0 bl 8001b70 <UartTasksInit>
  616. #ifdef USER_MOCKS
  617. MockMeasurmetsTaskInit();
  618. 8000790: f000 fa60 bl 8000c54 <MockMeasurmetsTaskInit>
  619. /* USER CODE BEGIN RTOS_EVENTS */
  620. /* add events, ... */
  621. /* USER CODE END RTOS_EVENTS */
  622. /* Start scheduler */
  623. osKernelStart();
  624. 8000794: f00a fe7e bl 800b494 <osKernelStart>
  625. /* We should never get here as control is now taken by the scheduler */
  626. /* Infinite loop */
  627. /* USER CODE BEGIN WHILE */
  628. while (1)
  629. 8000798: bf00 nop
  630. 800079a: e7fd b.n 8000798 <main+0x110>
  631. 800079c: e000ed00 .word 0xe000ed00
  632. 80007a0: 0801008c .word 0x0801008c
  633. 80007a4: 08000b6d .word 0x08000b6d
  634. 80007a8: 240002dc .word 0x240002dc
  635. 080007ac <SystemClock_Config>:
  636. /**
  637. * @brief System Clock Configuration
  638. * @retval None
  639. */
  640. void SystemClock_Config(void)
  641. {
  642. 80007ac: b580 push {r7, lr}
  643. 80007ae: b09c sub sp, #112 @ 0x70
  644. 80007b0: af00 add r7, sp, #0
  645. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  646. 80007b2: f107 0324 add.w r3, r7, #36 @ 0x24
  647. 80007b6: 224c movs r2, #76 @ 0x4c
  648. 80007b8: 2100 movs r1, #0
  649. 80007ba: 4618 mov r0, r3
  650. 80007bc: f00e fd6b bl 800f296 <memset>
  651. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  652. 80007c0: 1d3b adds r3, r7, #4
  653. 80007c2: 2220 movs r2, #32
  654. 80007c4: 2100 movs r1, #0
  655. 80007c6: 4618 mov r0, r3
  656. 80007c8: f00e fd65 bl 800f296 <memset>
  657. /** Supply configuration update enable
  658. */
  659. HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
  660. 80007cc: 2002 movs r0, #2
  661. 80007ce: f004 fe93 bl 80054f8 <HAL_PWREx_ConfigSupply>
  662. /** Configure the main internal regulator output voltage
  663. */
  664. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  665. 80007d2: 2300 movs r3, #0
  666. 80007d4: 603b str r3, [r7, #0]
  667. 80007d6: 4b31 ldr r3, [pc, #196] @ (800089c <SystemClock_Config+0xf0>)
  668. 80007d8: 6adb ldr r3, [r3, #44] @ 0x2c
  669. 80007da: 4a30 ldr r2, [pc, #192] @ (800089c <SystemClock_Config+0xf0>)
  670. 80007dc: f023 0301 bic.w r3, r3, #1
  671. 80007e0: 62d3 str r3, [r2, #44] @ 0x2c
  672. 80007e2: 4b2e ldr r3, [pc, #184] @ (800089c <SystemClock_Config+0xf0>)
  673. 80007e4: 6adb ldr r3, [r3, #44] @ 0x2c
  674. 80007e6: f003 0301 and.w r3, r3, #1
  675. 80007ea: 603b str r3, [r7, #0]
  676. 80007ec: 4b2c ldr r3, [pc, #176] @ (80008a0 <SystemClock_Config+0xf4>)
  677. 80007ee: 699b ldr r3, [r3, #24]
  678. 80007f0: 4a2b ldr r2, [pc, #172] @ (80008a0 <SystemClock_Config+0xf4>)
  679. 80007f2: f443 4340 orr.w r3, r3, #49152 @ 0xc000
  680. 80007f6: 6193 str r3, [r2, #24]
  681. 80007f8: 4b29 ldr r3, [pc, #164] @ (80008a0 <SystemClock_Config+0xf4>)
  682. 80007fa: 699b ldr r3, [r3, #24]
  683. 80007fc: f403 4340 and.w r3, r3, #49152 @ 0xc000
  684. 8000800: 603b str r3, [r7, #0]
  685. 8000802: 683b ldr r3, [r7, #0]
  686. while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
  687. 8000804: bf00 nop
  688. 8000806: 4b26 ldr r3, [pc, #152] @ (80008a0 <SystemClock_Config+0xf4>)
  689. 8000808: 699b ldr r3, [r3, #24]
  690. 800080a: f403 5300 and.w r3, r3, #8192 @ 0x2000
  691. 800080e: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  692. 8000812: d1f8 bne.n 8000806 <SystemClock_Config+0x5a>
  693. /** Initializes the RCC Oscillators according to the specified parameters
  694. * in the RCC_OscInitTypeDef structure.
  695. */
  696. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSE;
  697. 8000814: 2321 movs r3, #33 @ 0x21
  698. 8000816: 627b str r3, [r7, #36] @ 0x24
  699. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  700. 8000818: f44f 3380 mov.w r3, #65536 @ 0x10000
  701. 800081c: 62bb str r3, [r7, #40] @ 0x28
  702. RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  703. 800081e: 2301 movs r3, #1
  704. 8000820: 63fb str r3, [r7, #60] @ 0x3c
  705. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  706. 8000822: 2302 movs r3, #2
  707. 8000824: 64bb str r3, [r7, #72] @ 0x48
  708. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  709. 8000826: 2302 movs r3, #2
  710. 8000828: 64fb str r3, [r7, #76] @ 0x4c
  711. RCC_OscInitStruct.PLL.PLLM = 5;
  712. 800082a: 2305 movs r3, #5
  713. 800082c: 653b str r3, [r7, #80] @ 0x50
  714. RCC_OscInitStruct.PLL.PLLN = 160;
  715. 800082e: 23a0 movs r3, #160 @ 0xa0
  716. 8000830: 657b str r3, [r7, #84] @ 0x54
  717. RCC_OscInitStruct.PLL.PLLP = 2;
  718. 8000832: 2302 movs r3, #2
  719. 8000834: 65bb str r3, [r7, #88] @ 0x58
  720. RCC_OscInitStruct.PLL.PLLQ = 2;
  721. 8000836: 2302 movs r3, #2
  722. 8000838: 65fb str r3, [r7, #92] @ 0x5c
  723. RCC_OscInitStruct.PLL.PLLR = 2;
  724. 800083a: 2302 movs r3, #2
  725. 800083c: 663b str r3, [r7, #96] @ 0x60
  726. RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
  727. 800083e: 2308 movs r3, #8
  728. 8000840: 667b str r3, [r7, #100] @ 0x64
  729. RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
  730. 8000842: 2300 movs r3, #0
  731. 8000844: 66bb str r3, [r7, #104] @ 0x68
  732. RCC_OscInitStruct.PLL.PLLFRACN = 0;
  733. 8000846: 2300 movs r3, #0
  734. 8000848: 66fb str r3, [r7, #108] @ 0x6c
  735. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  736. 800084a: f107 0324 add.w r3, r7, #36 @ 0x24
  737. 800084e: 4618 mov r0, r3
  738. 8000850: f004 fe8c bl 800556c <HAL_RCC_OscConfig>
  739. 8000854: 4603 mov r3, r0
  740. 8000856: 2b00 cmp r3, #0
  741. 8000858: d001 beq.n 800085e <SystemClock_Config+0xb2>
  742. {
  743. Error_Handler();
  744. 800085a: f000 f9f5 bl 8000c48 <Error_Handler>
  745. }
  746. /** Initializes the CPU, AHB and APB buses clocks
  747. */
  748. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  749. 800085e: 233f movs r3, #63 @ 0x3f
  750. 8000860: 607b str r3, [r7, #4]
  751. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
  752. |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
  753. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  754. 8000862: 2303 movs r3, #3
  755. 8000864: 60bb str r3, [r7, #8]
  756. RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  757. 8000866: 2300 movs r3, #0
  758. 8000868: 60fb str r3, [r7, #12]
  759. RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
  760. 800086a: 2308 movs r3, #8
  761. 800086c: 613b str r3, [r7, #16]
  762. RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
  763. 800086e: 2340 movs r3, #64 @ 0x40
  764. 8000870: 617b str r3, [r7, #20]
  765. RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
  766. 8000872: 2340 movs r3, #64 @ 0x40
  767. 8000874: 61bb str r3, [r7, #24]
  768. RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
  769. 8000876: f44f 6380 mov.w r3, #1024 @ 0x400
  770. 800087a: 61fb str r3, [r7, #28]
  771. RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
  772. 800087c: 2340 movs r3, #64 @ 0x40
  773. 800087e: 623b str r3, [r7, #32]
  774. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  775. 8000880: 1d3b adds r3, r7, #4
  776. 8000882: 2102 movs r1, #2
  777. 8000884: 4618 mov r0, r3
  778. 8000886: f005 facb bl 8005e20 <HAL_RCC_ClockConfig>
  779. 800088a: 4603 mov r3, r0
  780. 800088c: 2b00 cmp r3, #0
  781. 800088e: d001 beq.n 8000894 <SystemClock_Config+0xe8>
  782. {
  783. Error_Handler();
  784. 8000890: f000 f9da bl 8000c48 <Error_Handler>
  785. }
  786. }
  787. 8000894: bf00 nop
  788. 8000896: 3770 adds r7, #112 @ 0x70
  789. 8000898: 46bd mov sp, r7
  790. 800089a: bd80 pop {r7, pc}
  791. 800089c: 58000400 .word 0x58000400
  792. 80008a0: 58024800 .word 0x58024800
  793. 080008a4 <MX_CRC_Init>:
  794. * @brief CRC Initialization Function
  795. * @param None
  796. * @retval None
  797. */
  798. static void MX_CRC_Init(void)
  799. {
  800. 80008a4: b580 push {r7, lr}
  801. 80008a6: af00 add r7, sp, #0
  802. /* USER CODE END CRC_Init 0 */
  803. /* USER CODE BEGIN CRC_Init 1 */
  804. /* USER CODE END CRC_Init 1 */
  805. hcrc.Instance = CRC;
  806. 80008a8: 4b11 ldr r3, [pc, #68] @ (80008f0 <MX_CRC_Init+0x4c>)
  807. 80008aa: 4a12 ldr r2, [pc, #72] @ (80008f4 <MX_CRC_Init+0x50>)
  808. 80008ac: 601a str r2, [r3, #0]
  809. hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;
  810. 80008ae: 4b10 ldr r3, [pc, #64] @ (80008f0 <MX_CRC_Init+0x4c>)
  811. 80008b0: 2201 movs r2, #1
  812. 80008b2: 711a strb r2, [r3, #4]
  813. hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
  814. 80008b4: 4b0e ldr r3, [pc, #56] @ (80008f0 <MX_CRC_Init+0x4c>)
  815. 80008b6: 2200 movs r2, #0
  816. 80008b8: 715a strb r2, [r3, #5]
  817. hcrc.Init.GeneratingPolynomial = 4129;
  818. 80008ba: 4b0d ldr r3, [pc, #52] @ (80008f0 <MX_CRC_Init+0x4c>)
  819. 80008bc: f241 0221 movw r2, #4129 @ 0x1021
  820. 80008c0: 609a str r2, [r3, #8]
  821. hcrc.Init.CRCLength = CRC_POLYLENGTH_16B;
  822. 80008c2: 4b0b ldr r3, [pc, #44] @ (80008f0 <MX_CRC_Init+0x4c>)
  823. 80008c4: 2208 movs r2, #8
  824. 80008c6: 60da str r2, [r3, #12]
  825. hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
  826. 80008c8: 4b09 ldr r3, [pc, #36] @ (80008f0 <MX_CRC_Init+0x4c>)
  827. 80008ca: 2200 movs r2, #0
  828. 80008cc: 615a str r2, [r3, #20]
  829. hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
  830. 80008ce: 4b08 ldr r3, [pc, #32] @ (80008f0 <MX_CRC_Init+0x4c>)
  831. 80008d0: 2200 movs r2, #0
  832. 80008d2: 619a str r2, [r3, #24]
  833. hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
  834. 80008d4: 4b06 ldr r3, [pc, #24] @ (80008f0 <MX_CRC_Init+0x4c>)
  835. 80008d6: 2201 movs r2, #1
  836. 80008d8: 621a str r2, [r3, #32]
  837. if (HAL_CRC_Init(&hcrc) != HAL_OK)
  838. 80008da: 4805 ldr r0, [pc, #20] @ (80008f0 <MX_CRC_Init+0x4c>)
  839. 80008dc: f002 f830 bl 8002940 <HAL_CRC_Init>
  840. 80008e0: 4603 mov r3, r0
  841. 80008e2: 2b00 cmp r3, #0
  842. 80008e4: d001 beq.n 80008ea <MX_CRC_Init+0x46>
  843. {
  844. Error_Handler();
  845. 80008e6: f000 f9af bl 8000c48 <Error_Handler>
  846. }
  847. /* USER CODE BEGIN CRC_Init 2 */
  848. /* USER CODE END CRC_Init 2 */
  849. }
  850. 80008ea: bf00 nop
  851. 80008ec: bd80 pop {r7, pc}
  852. 80008ee: bf00 nop
  853. 80008f0: 2400008c .word 0x2400008c
  854. 80008f4: 58024c00 .word 0x58024c00
  855. 080008f8 <MX_RNG_Init>:
  856. * @brief RNG Initialization Function
  857. * @param None
  858. * @retval None
  859. */
  860. static void MX_RNG_Init(void)
  861. {
  862. 80008f8: b580 push {r7, lr}
  863. 80008fa: af00 add r7, sp, #0
  864. /* USER CODE END RNG_Init 0 */
  865. /* USER CODE BEGIN RNG_Init 1 */
  866. /* USER CODE END RNG_Init 1 */
  867. hrng.Instance = RNG;
  868. 80008fc: 4b07 ldr r3, [pc, #28] @ (800091c <MX_RNG_Init+0x24>)
  869. 80008fe: 4a08 ldr r2, [pc, #32] @ (8000920 <MX_RNG_Init+0x28>)
  870. 8000900: 601a str r2, [r3, #0]
  871. hrng.Init.ClockErrorDetection = RNG_CED_ENABLE;
  872. 8000902: 4b06 ldr r3, [pc, #24] @ (800091c <MX_RNG_Init+0x24>)
  873. 8000904: 2200 movs r2, #0
  874. 8000906: 605a str r2, [r3, #4]
  875. if (HAL_RNG_Init(&hrng) != HAL_OK)
  876. 8000908: 4804 ldr r0, [pc, #16] @ (800091c <MX_RNG_Init+0x24>)
  877. 800090a: f007 fc67 bl 80081dc <HAL_RNG_Init>
  878. 800090e: 4603 mov r3, r0
  879. 8000910: 2b00 cmp r3, #0
  880. 8000912: d001 beq.n 8000918 <MX_RNG_Init+0x20>
  881. {
  882. Error_Handler();
  883. 8000914: f000 f998 bl 8000c48 <Error_Handler>
  884. }
  885. /* USER CODE BEGIN RNG_Init 2 */
  886. /* USER CODE END RNG_Init 2 */
  887. }
  888. 8000918: bf00 nop
  889. 800091a: bd80 pop {r7, pc}
  890. 800091c: 240000b0 .word 0x240000b0
  891. 8000920: 48021800 .word 0x48021800
  892. 08000924 <MX_UART8_Init>:
  893. * @brief UART8 Initialization Function
  894. * @param None
  895. * @retval None
  896. */
  897. static void MX_UART8_Init(void)
  898. {
  899. 8000924: b580 push {r7, lr}
  900. 8000926: af00 add r7, sp, #0
  901. /* USER CODE END UART8_Init 0 */
  902. /* USER CODE BEGIN UART8_Init 1 */
  903. /* USER CODE END UART8_Init 1 */
  904. huart8.Instance = UART8;
  905. 8000928: 4b22 ldr r3, [pc, #136] @ (80009b4 <MX_UART8_Init+0x90>)
  906. 800092a: 4a23 ldr r2, [pc, #140] @ (80009b8 <MX_UART8_Init+0x94>)
  907. 800092c: 601a str r2, [r3, #0]
  908. huart8.Init.BaudRate = 115200;
  909. 800092e: 4b21 ldr r3, [pc, #132] @ (80009b4 <MX_UART8_Init+0x90>)
  910. 8000930: f44f 32e1 mov.w r2, #115200 @ 0x1c200
  911. 8000934: 605a str r2, [r3, #4]
  912. huart8.Init.WordLength = UART_WORDLENGTH_8B;
  913. 8000936: 4b1f ldr r3, [pc, #124] @ (80009b4 <MX_UART8_Init+0x90>)
  914. 8000938: 2200 movs r2, #0
  915. 800093a: 609a str r2, [r3, #8]
  916. huart8.Init.StopBits = UART_STOPBITS_1;
  917. 800093c: 4b1d ldr r3, [pc, #116] @ (80009b4 <MX_UART8_Init+0x90>)
  918. 800093e: 2200 movs r2, #0
  919. 8000940: 60da str r2, [r3, #12]
  920. huart8.Init.Parity = UART_PARITY_NONE;
  921. 8000942: 4b1c ldr r3, [pc, #112] @ (80009b4 <MX_UART8_Init+0x90>)
  922. 8000944: 2200 movs r2, #0
  923. 8000946: 611a str r2, [r3, #16]
  924. huart8.Init.Mode = UART_MODE_TX_RX;
  925. 8000948: 4b1a ldr r3, [pc, #104] @ (80009b4 <MX_UART8_Init+0x90>)
  926. 800094a: 220c movs r2, #12
  927. 800094c: 615a str r2, [r3, #20]
  928. huart8.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  929. 800094e: 4b19 ldr r3, [pc, #100] @ (80009b4 <MX_UART8_Init+0x90>)
  930. 8000950: 2200 movs r2, #0
  931. 8000952: 619a str r2, [r3, #24]
  932. huart8.Init.OverSampling = UART_OVERSAMPLING_16;
  933. 8000954: 4b17 ldr r3, [pc, #92] @ (80009b4 <MX_UART8_Init+0x90>)
  934. 8000956: 2200 movs r2, #0
  935. 8000958: 61da str r2, [r3, #28]
  936. huart8.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  937. 800095a: 4b16 ldr r3, [pc, #88] @ (80009b4 <MX_UART8_Init+0x90>)
  938. 800095c: 2200 movs r2, #0
  939. 800095e: 621a str r2, [r3, #32]
  940. huart8.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  941. 8000960: 4b14 ldr r3, [pc, #80] @ (80009b4 <MX_UART8_Init+0x90>)
  942. 8000962: 2200 movs r2, #0
  943. 8000964: 625a str r2, [r3, #36] @ 0x24
  944. huart8.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  945. 8000966: 4b13 ldr r3, [pc, #76] @ (80009b4 <MX_UART8_Init+0x90>)
  946. 8000968: 2200 movs r2, #0
  947. 800096a: 629a str r2, [r3, #40] @ 0x28
  948. if (HAL_UART_Init(&huart8) != HAL_OK)
  949. 800096c: 4811 ldr r0, [pc, #68] @ (80009b4 <MX_UART8_Init+0x90>)
  950. 800096e: f007 ff65 bl 800883c <HAL_UART_Init>
  951. 8000972: 4603 mov r3, r0
  952. 8000974: 2b00 cmp r3, #0
  953. 8000976: d001 beq.n 800097c <MX_UART8_Init+0x58>
  954. {
  955. Error_Handler();
  956. 8000978: f000 f966 bl 8000c48 <Error_Handler>
  957. }
  958. if (HAL_UARTEx_SetTxFifoThreshold(&huart8, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  959. 800097c: 2100 movs r1, #0
  960. 800097e: 480d ldr r0, [pc, #52] @ (80009b4 <MX_UART8_Init+0x90>)
  961. 8000980: f00a fc05 bl 800b18e <HAL_UARTEx_SetTxFifoThreshold>
  962. 8000984: 4603 mov r3, r0
  963. 8000986: 2b00 cmp r3, #0
  964. 8000988: d001 beq.n 800098e <MX_UART8_Init+0x6a>
  965. {
  966. Error_Handler();
  967. 800098a: f000 f95d bl 8000c48 <Error_Handler>
  968. }
  969. if (HAL_UARTEx_SetRxFifoThreshold(&huart8, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  970. 800098e: 2100 movs r1, #0
  971. 8000990: 4808 ldr r0, [pc, #32] @ (80009b4 <MX_UART8_Init+0x90>)
  972. 8000992: f00a fc3a bl 800b20a <HAL_UARTEx_SetRxFifoThreshold>
  973. 8000996: 4603 mov r3, r0
  974. 8000998: 2b00 cmp r3, #0
  975. 800099a: d001 beq.n 80009a0 <MX_UART8_Init+0x7c>
  976. {
  977. Error_Handler();
  978. 800099c: f000 f954 bl 8000c48 <Error_Handler>
  979. }
  980. if (HAL_UARTEx_DisableFifoMode(&huart8) != HAL_OK)
  981. 80009a0: 4804 ldr r0, [pc, #16] @ (80009b4 <MX_UART8_Init+0x90>)
  982. 80009a2: f00a fbbb bl 800b11c <HAL_UARTEx_DisableFifoMode>
  983. 80009a6: 4603 mov r3, r0
  984. 80009a8: 2b00 cmp r3, #0
  985. 80009aa: d001 beq.n 80009b0 <MX_UART8_Init+0x8c>
  986. {
  987. Error_Handler();
  988. 80009ac: f000 f94c bl 8000c48 <Error_Handler>
  989. }
  990. /* USER CODE BEGIN UART8_Init 2 */
  991. /* USER CODE END UART8_Init 2 */
  992. }
  993. 80009b0: bf00 nop
  994. 80009b2: bd80 pop {r7, pc}
  995. 80009b4: 240000c4 .word 0x240000c4
  996. 80009b8: 40007c00 .word 0x40007c00
  997. 080009bc <MX_USART1_UART_Init>:
  998. * @brief USART1 Initialization Function
  999. * @param None
  1000. * @retval None
  1001. */
  1002. static void MX_USART1_UART_Init(void)
  1003. {
  1004. 80009bc: b580 push {r7, lr}
  1005. 80009be: af00 add r7, sp, #0
  1006. /* USER CODE END USART1_Init 0 */
  1007. /* USER CODE BEGIN USART1_Init 1 */
  1008. /* USER CODE END USART1_Init 1 */
  1009. huart1.Instance = USART1;
  1010. 80009c0: 4b24 ldr r3, [pc, #144] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1011. 80009c2: 4a25 ldr r2, [pc, #148] @ (8000a58 <MX_USART1_UART_Init+0x9c>)
  1012. 80009c4: 601a str r2, [r3, #0]
  1013. huart1.Init.BaudRate = 115200;
  1014. 80009c6: 4b23 ldr r3, [pc, #140] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1015. 80009c8: f44f 32e1 mov.w r2, #115200 @ 0x1c200
  1016. 80009cc: 605a str r2, [r3, #4]
  1017. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  1018. 80009ce: 4b21 ldr r3, [pc, #132] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1019. 80009d0: 2200 movs r2, #0
  1020. 80009d2: 609a str r2, [r3, #8]
  1021. huart1.Init.StopBits = UART_STOPBITS_1;
  1022. 80009d4: 4b1f ldr r3, [pc, #124] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1023. 80009d6: 2200 movs r2, #0
  1024. 80009d8: 60da str r2, [r3, #12]
  1025. huart1.Init.Parity = UART_PARITY_NONE;
  1026. 80009da: 4b1e ldr r3, [pc, #120] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1027. 80009dc: 2200 movs r2, #0
  1028. 80009de: 611a str r2, [r3, #16]
  1029. huart1.Init.Mode = UART_MODE_TX_RX;
  1030. 80009e0: 4b1c ldr r3, [pc, #112] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1031. 80009e2: 220c movs r2, #12
  1032. 80009e4: 615a str r2, [r3, #20]
  1033. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  1034. 80009e6: 4b1b ldr r3, [pc, #108] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1035. 80009e8: 2200 movs r2, #0
  1036. 80009ea: 619a str r2, [r3, #24]
  1037. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  1038. 80009ec: 4b19 ldr r3, [pc, #100] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1039. 80009ee: 2200 movs r2, #0
  1040. 80009f0: 61da str r2, [r3, #28]
  1041. huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  1042. 80009f2: 4b18 ldr r3, [pc, #96] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1043. 80009f4: 2200 movs r2, #0
  1044. 80009f6: 621a str r2, [r3, #32]
  1045. huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  1046. 80009f8: 4b16 ldr r3, [pc, #88] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1047. 80009fa: 2200 movs r2, #0
  1048. 80009fc: 625a str r2, [r3, #36] @ 0x24
  1049. huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXINVERT_INIT;
  1050. 80009fe: 4b15 ldr r3, [pc, #84] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1051. 8000a00: 2202 movs r2, #2
  1052. 8000a02: 629a str r2, [r3, #40] @ 0x28
  1053. huart1.AdvancedInit.RxPinLevelInvert = UART_ADVFEATURE_RXINV_ENABLE;
  1054. 8000a04: 4b13 ldr r3, [pc, #76] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1055. 8000a06: f44f 3280 mov.w r2, #65536 @ 0x10000
  1056. 8000a0a: 631a str r2, [r3, #48] @ 0x30
  1057. if (HAL_UART_Init(&huart1) != HAL_OK)
  1058. 8000a0c: 4811 ldr r0, [pc, #68] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1059. 8000a0e: f007 ff15 bl 800883c <HAL_UART_Init>
  1060. 8000a12: 4603 mov r3, r0
  1061. 8000a14: 2b00 cmp r3, #0
  1062. 8000a16: d001 beq.n 8000a1c <MX_USART1_UART_Init+0x60>
  1063. {
  1064. Error_Handler();
  1065. 8000a18: f000 f916 bl 8000c48 <Error_Handler>
  1066. }
  1067. if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  1068. 8000a1c: 2100 movs r1, #0
  1069. 8000a1e: 480d ldr r0, [pc, #52] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1070. 8000a20: f00a fbb5 bl 800b18e <HAL_UARTEx_SetTxFifoThreshold>
  1071. 8000a24: 4603 mov r3, r0
  1072. 8000a26: 2b00 cmp r3, #0
  1073. 8000a28: d001 beq.n 8000a2e <MX_USART1_UART_Init+0x72>
  1074. {
  1075. Error_Handler();
  1076. 8000a2a: f000 f90d bl 8000c48 <Error_Handler>
  1077. }
  1078. if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  1079. 8000a2e: 2100 movs r1, #0
  1080. 8000a30: 4808 ldr r0, [pc, #32] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1081. 8000a32: f00a fbea bl 800b20a <HAL_UARTEx_SetRxFifoThreshold>
  1082. 8000a36: 4603 mov r3, r0
  1083. 8000a38: 2b00 cmp r3, #0
  1084. 8000a3a: d001 beq.n 8000a40 <MX_USART1_UART_Init+0x84>
  1085. {
  1086. Error_Handler();
  1087. 8000a3c: f000 f904 bl 8000c48 <Error_Handler>
  1088. }
  1089. if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
  1090. 8000a40: 4804 ldr r0, [pc, #16] @ (8000a54 <MX_USART1_UART_Init+0x98>)
  1091. 8000a42: f00a fb6b bl 800b11c <HAL_UARTEx_DisableFifoMode>
  1092. 8000a46: 4603 mov r3, r0
  1093. 8000a48: 2b00 cmp r3, #0
  1094. 8000a4a: d001 beq.n 8000a50 <MX_USART1_UART_Init+0x94>
  1095. {
  1096. Error_Handler();
  1097. 8000a4c: f000 f8fc bl 8000c48 <Error_Handler>
  1098. }
  1099. /* USER CODE BEGIN USART1_Init 2 */
  1100. /* USER CODE END USART1_Init 2 */
  1101. }
  1102. 8000a50: bf00 nop
  1103. 8000a52: bd80 pop {r7, pc}
  1104. 8000a54: 24000158 .word 0x24000158
  1105. 8000a58: 40011000 .word 0x40011000
  1106. 08000a5c <MX_DMA_Init>:
  1107. /**
  1108. * Enable DMA controller clock
  1109. */
  1110. static void MX_DMA_Init(void)
  1111. {
  1112. 8000a5c: b580 push {r7, lr}
  1113. 8000a5e: b082 sub sp, #8
  1114. 8000a60: af00 add r7, sp, #0
  1115. /* DMA controller clock enable */
  1116. __HAL_RCC_DMA2_CLK_ENABLE();
  1117. 8000a62: 4b11 ldr r3, [pc, #68] @ (8000aa8 <MX_DMA_Init+0x4c>)
  1118. 8000a64: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  1119. 8000a68: 4a0f ldr r2, [pc, #60] @ (8000aa8 <MX_DMA_Init+0x4c>)
  1120. 8000a6a: f043 0302 orr.w r3, r3, #2
  1121. 8000a6e: f8c2 30d8 str.w r3, [r2, #216] @ 0xd8
  1122. 8000a72: 4b0d ldr r3, [pc, #52] @ (8000aa8 <MX_DMA_Init+0x4c>)
  1123. 8000a74: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  1124. 8000a78: f003 0302 and.w r3, r3, #2
  1125. 8000a7c: 607b str r3, [r7, #4]
  1126. 8000a7e: 687b ldr r3, [r7, #4]
  1127. /* DMA interrupt init */
  1128. /* DMA2_Stream6_IRQn interrupt configuration */
  1129. HAL_NVIC_SetPriority(DMA2_Stream6_IRQn, 5, 0);
  1130. 8000a80: 2200 movs r2, #0
  1131. 8000a82: 2105 movs r1, #5
  1132. 8000a84: 2045 movs r0, #69 @ 0x45
  1133. 8000a86: f001 febb bl 8002800 <HAL_NVIC_SetPriority>
  1134. HAL_NVIC_EnableIRQ(DMA2_Stream6_IRQn);
  1135. 8000a8a: 2045 movs r0, #69 @ 0x45
  1136. 8000a8c: f001 fed2 bl 8002834 <HAL_NVIC_EnableIRQ>
  1137. /* DMA2_Stream7_IRQn interrupt configuration */
  1138. HAL_NVIC_SetPriority(DMA2_Stream7_IRQn, 5, 0);
  1139. 8000a90: 2200 movs r2, #0
  1140. 8000a92: 2105 movs r1, #5
  1141. 8000a94: 2046 movs r0, #70 @ 0x46
  1142. 8000a96: f001 feb3 bl 8002800 <HAL_NVIC_SetPriority>
  1143. HAL_NVIC_EnableIRQ(DMA2_Stream7_IRQn);
  1144. 8000a9a: 2046 movs r0, #70 @ 0x46
  1145. 8000a9c: f001 feca bl 8002834 <HAL_NVIC_EnableIRQ>
  1146. }
  1147. 8000aa0: bf00 nop
  1148. 8000aa2: 3708 adds r7, #8
  1149. 8000aa4: 46bd mov sp, r7
  1150. 8000aa6: bd80 pop {r7, pc}
  1151. 8000aa8: 58024400 .word 0x58024400
  1152. 08000aac <MX_GPIO_Init>:
  1153. * @brief GPIO Initialization Function
  1154. * @param None
  1155. * @retval None
  1156. */
  1157. static void MX_GPIO_Init(void)
  1158. {
  1159. 8000aac: b580 push {r7, lr}
  1160. 8000aae: b08a sub sp, #40 @ 0x28
  1161. 8000ab0: af00 add r7, sp, #0
  1162. GPIO_InitTypeDef GPIO_InitStruct = {0};
  1163. 8000ab2: f107 0314 add.w r3, r7, #20
  1164. 8000ab6: 2200 movs r2, #0
  1165. 8000ab8: 601a str r2, [r3, #0]
  1166. 8000aba: 605a str r2, [r3, #4]
  1167. 8000abc: 609a str r2, [r3, #8]
  1168. 8000abe: 60da str r2, [r3, #12]
  1169. 8000ac0: 611a str r2, [r3, #16]
  1170. /* USER CODE BEGIN MX_GPIO_Init_1 */
  1171. /* USER CODE END MX_GPIO_Init_1 */
  1172. /* GPIO Ports Clock Enable */
  1173. __HAL_RCC_GPIOH_CLK_ENABLE();
  1174. 8000ac2: 4b28 ldr r3, [pc, #160] @ (8000b64 <MX_GPIO_Init+0xb8>)
  1175. 8000ac4: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  1176. 8000ac8: 4a26 ldr r2, [pc, #152] @ (8000b64 <MX_GPIO_Init+0xb8>)
  1177. 8000aca: f043 0380 orr.w r3, r3, #128 @ 0x80
  1178. 8000ace: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  1179. 8000ad2: 4b24 ldr r3, [pc, #144] @ (8000b64 <MX_GPIO_Init+0xb8>)
  1180. 8000ad4: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  1181. 8000ad8: f003 0380 and.w r3, r3, #128 @ 0x80
  1182. 8000adc: 613b str r3, [r7, #16]
  1183. 8000ade: 693b ldr r3, [r7, #16]
  1184. __HAL_RCC_GPIOB_CLK_ENABLE();
  1185. 8000ae0: 4b20 ldr r3, [pc, #128] @ (8000b64 <MX_GPIO_Init+0xb8>)
  1186. 8000ae2: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  1187. 8000ae6: 4a1f ldr r2, [pc, #124] @ (8000b64 <MX_GPIO_Init+0xb8>)
  1188. 8000ae8: f043 0302 orr.w r3, r3, #2
  1189. 8000aec: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  1190. 8000af0: 4b1c ldr r3, [pc, #112] @ (8000b64 <MX_GPIO_Init+0xb8>)
  1191. 8000af2: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  1192. 8000af6: f003 0302 and.w r3, r3, #2
  1193. 8000afa: 60fb str r3, [r7, #12]
  1194. 8000afc: 68fb ldr r3, [r7, #12]
  1195. __HAL_RCC_GPIOA_CLK_ENABLE();
  1196. 8000afe: 4b19 ldr r3, [pc, #100] @ (8000b64 <MX_GPIO_Init+0xb8>)
  1197. 8000b00: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  1198. 8000b04: 4a17 ldr r2, [pc, #92] @ (8000b64 <MX_GPIO_Init+0xb8>)
  1199. 8000b06: f043 0301 orr.w r3, r3, #1
  1200. 8000b0a: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  1201. 8000b0e: 4b15 ldr r3, [pc, #84] @ (8000b64 <MX_GPIO_Init+0xb8>)
  1202. 8000b10: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  1203. 8000b14: f003 0301 and.w r3, r3, #1
  1204. 8000b18: 60bb str r3, [r7, #8]
  1205. 8000b1a: 68bb ldr r3, [r7, #8]
  1206. __HAL_RCC_GPIOE_CLK_ENABLE();
  1207. 8000b1c: 4b11 ldr r3, [pc, #68] @ (8000b64 <MX_GPIO_Init+0xb8>)
  1208. 8000b1e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  1209. 8000b22: 4a10 ldr r2, [pc, #64] @ (8000b64 <MX_GPIO_Init+0xb8>)
  1210. 8000b24: f043 0310 orr.w r3, r3, #16
  1211. 8000b28: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  1212. 8000b2c: 4b0d ldr r3, [pc, #52] @ (8000b64 <MX_GPIO_Init+0xb8>)
  1213. 8000b2e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  1214. 8000b32: f003 0310 and.w r3, r3, #16
  1215. 8000b36: 607b str r3, [r7, #4]
  1216. 8000b38: 687b ldr r3, [r7, #4]
  1217. /*Configure GPIO pin : PB8 */
  1218. GPIO_InitStruct.Pin = GPIO_PIN_8;
  1219. 8000b3a: f44f 7380 mov.w r3, #256 @ 0x100
  1220. 8000b3e: 617b str r3, [r7, #20]
  1221. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  1222. 8000b40: 2302 movs r3, #2
  1223. 8000b42: 61bb str r3, [r7, #24]
  1224. GPIO_InitStruct.Pull = GPIO_NOPULL;
  1225. 8000b44: 2300 movs r3, #0
  1226. 8000b46: 61fb str r3, [r7, #28]
  1227. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  1228. 8000b48: 2303 movs r3, #3
  1229. 8000b4a: 623b str r3, [r7, #32]
  1230. GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
  1231. 8000b4c: 230b movs r3, #11
  1232. 8000b4e: 627b str r3, [r7, #36] @ 0x24
  1233. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  1234. 8000b50: f107 0314 add.w r3, r7, #20
  1235. 8000b54: 4619 mov r1, r3
  1236. 8000b56: 4804 ldr r0, [pc, #16] @ (8000b68 <MX_GPIO_Init+0xbc>)
  1237. 8000b58: f004 fb1e bl 8005198 <HAL_GPIO_Init>
  1238. /* USER CODE BEGIN MX_GPIO_Init_2 */
  1239. /* USER CODE END MX_GPIO_Init_2 */
  1240. }
  1241. 8000b5c: bf00 nop
  1242. 8000b5e: 3728 adds r7, #40 @ 0x28
  1243. 8000b60: 46bd mov sp, r7
  1244. 8000b62: bd80 pop {r7, pc}
  1245. 8000b64: 58024400 .word 0x58024400
  1246. 8000b68: 58020400 .word 0x58020400
  1247. 08000b6c <StartDefaultTask>:
  1248. * @param argument: Not used
  1249. * @retval None
  1250. */
  1251. /* USER CODE END Header_StartDefaultTask */
  1252. void StartDefaultTask(void *argument)
  1253. {
  1254. 8000b6c: b580 push {r7, lr}
  1255. 8000b6e: b082 sub sp, #8
  1256. 8000b70: af00 add r7, sp, #0
  1257. 8000b72: 6078 str r0, [r7, #4]
  1258. /* USER CODE BEGIN 5 */
  1259. /* Infinite loop */
  1260. for(;;)
  1261. {
  1262. osDelay(pdMS_TO_TICKS(1000));
  1263. 8000b74: f44f 707a mov.w r0, #1000 @ 0x3e8
  1264. 8000b78: f00a fd45 bl 800b606 <osDelay>
  1265. 8000b7c: e7fa b.n 8000b74 <StartDefaultTask+0x8>
  1266. ...
  1267. 08000b80 <MPU_Config>:
  1268. }
  1269. /* MPU Configuration */
  1270. void MPU_Config(void)
  1271. {
  1272. 8000b80: b580 push {r7, lr}
  1273. 8000b82: b084 sub sp, #16
  1274. 8000b84: af00 add r7, sp, #0
  1275. MPU_Region_InitTypeDef MPU_InitStruct = {0};
  1276. 8000b86: 463b mov r3, r7
  1277. 8000b88: 2200 movs r2, #0
  1278. 8000b8a: 601a str r2, [r3, #0]
  1279. 8000b8c: 605a str r2, [r3, #4]
  1280. 8000b8e: 609a str r2, [r3, #8]
  1281. 8000b90: 60da str r2, [r3, #12]
  1282. /* Disables the MPU */
  1283. HAL_MPU_Disable();
  1284. 8000b92: f001 fe5d bl 8002850 <HAL_MPU_Disable>
  1285. /** Initializes and configures the Region and the memory to be protected
  1286. */
  1287. MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  1288. 8000b96: 2301 movs r3, #1
  1289. 8000b98: 703b strb r3, [r7, #0]
  1290. MPU_InitStruct.Number = MPU_REGION_NUMBER0;
  1291. 8000b9a: 2300 movs r3, #0
  1292. 8000b9c: 707b strb r3, [r7, #1]
  1293. MPU_InitStruct.BaseAddress = 0x0;
  1294. 8000b9e: 2300 movs r3, #0
  1295. 8000ba0: 607b str r3, [r7, #4]
  1296. MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;
  1297. 8000ba2: 231f movs r3, #31
  1298. 8000ba4: 723b strb r3, [r7, #8]
  1299. MPU_InitStruct.SubRegionDisable = 0x87;
  1300. 8000ba6: 2387 movs r3, #135 @ 0x87
  1301. 8000ba8: 727b strb r3, [r7, #9]
  1302. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  1303. 8000baa: 2300 movs r3, #0
  1304. 8000bac: 72bb strb r3, [r7, #10]
  1305. MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;
  1306. 8000bae: 2300 movs r3, #0
  1307. 8000bb0: 72fb strb r3, [r7, #11]
  1308. MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
  1309. 8000bb2: 2301 movs r3, #1
  1310. 8000bb4: 733b strb r3, [r7, #12]
  1311. MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
  1312. 8000bb6: 2301 movs r3, #1
  1313. 8000bb8: 737b strb r3, [r7, #13]
  1314. MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
  1315. 8000bba: 2300 movs r3, #0
  1316. 8000bbc: 73bb strb r3, [r7, #14]
  1317. MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
  1318. 8000bbe: 2300 movs r3, #0
  1319. 8000bc0: 73fb strb r3, [r7, #15]
  1320. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  1321. 8000bc2: 463b mov r3, r7
  1322. 8000bc4: 4618 mov r0, r3
  1323. 8000bc6: f001 fe7b bl 80028c0 <HAL_MPU_ConfigRegion>
  1324. /** Initializes and configures the Region and the memory to be protected
  1325. */
  1326. MPU_InitStruct.Number = MPU_REGION_NUMBER1;
  1327. 8000bca: 2301 movs r3, #1
  1328. 8000bcc: 707b strb r3, [r7, #1]
  1329. MPU_InitStruct.BaseAddress = 0x24020000;
  1330. 8000bce: 4b13 ldr r3, [pc, #76] @ (8000c1c <MPU_Config+0x9c>)
  1331. 8000bd0: 607b str r3, [r7, #4]
  1332. MPU_InitStruct.Size = MPU_REGION_SIZE_128KB;
  1333. 8000bd2: 2310 movs r3, #16
  1334. 8000bd4: 723b strb r3, [r7, #8]
  1335. MPU_InitStruct.SubRegionDisable = 0x0;
  1336. 8000bd6: 2300 movs r3, #0
  1337. 8000bd8: 727b strb r3, [r7, #9]
  1338. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
  1339. 8000bda: 2301 movs r3, #1
  1340. 8000bdc: 72bb strb r3, [r7, #10]
  1341. MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  1342. 8000bde: 2303 movs r3, #3
  1343. 8000be0: 72fb strb r3, [r7, #11]
  1344. MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
  1345. 8000be2: 2300 movs r3, #0
  1346. 8000be4: 737b strb r3, [r7, #13]
  1347. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  1348. 8000be6: 463b mov r3, r7
  1349. 8000be8: 4618 mov r0, r3
  1350. 8000bea: f001 fe69 bl 80028c0 <HAL_MPU_ConfigRegion>
  1351. /** Initializes and configures the Region and the memory to be protected
  1352. */
  1353. MPU_InitStruct.Number = MPU_REGION_NUMBER2;
  1354. 8000bee: 2302 movs r3, #2
  1355. 8000bf0: 707b strb r3, [r7, #1]
  1356. MPU_InitStruct.BaseAddress = 0x24040000;
  1357. 8000bf2: 4b0b ldr r3, [pc, #44] @ (8000c20 <MPU_Config+0xa0>)
  1358. 8000bf4: 607b str r3, [r7, #4]
  1359. MPU_InitStruct.Size = MPU_REGION_SIZE_512B;
  1360. 8000bf6: 2308 movs r3, #8
  1361. 8000bf8: 723b strb r3, [r7, #8]
  1362. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  1363. 8000bfa: 2300 movs r3, #0
  1364. 8000bfc: 72bb strb r3, [r7, #10]
  1365. MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
  1366. 8000bfe: 2301 movs r3, #1
  1367. 8000c00: 737b strb r3, [r7, #13]
  1368. MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
  1369. 8000c02: 2301 movs r3, #1
  1370. 8000c04: 73fb strb r3, [r7, #15]
  1371. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  1372. 8000c06: 463b mov r3, r7
  1373. 8000c08: 4618 mov r0, r3
  1374. 8000c0a: f001 fe59 bl 80028c0 <HAL_MPU_ConfigRegion>
  1375. /* Enables the MPU */
  1376. HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
  1377. 8000c0e: 2004 movs r0, #4
  1378. 8000c10: f001 fe36 bl 8002880 <HAL_MPU_Enable>
  1379. }
  1380. 8000c14: bf00 nop
  1381. 8000c16: 3710 adds r7, #16
  1382. 8000c18: 46bd mov sp, r7
  1383. 8000c1a: bd80 pop {r7, pc}
  1384. 8000c1c: 24020000 .word 0x24020000
  1385. 8000c20: 24040000 .word 0x24040000
  1386. 08000c24 <HAL_TIM_PeriodElapsedCallback>:
  1387. * a global variable "uwTick" used as application time base.
  1388. * @param htim : TIM handle
  1389. * @retval None
  1390. */
  1391. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  1392. {
  1393. 8000c24: b580 push {r7, lr}
  1394. 8000c26: b082 sub sp, #8
  1395. 8000c28: af00 add r7, sp, #0
  1396. 8000c2a: 6078 str r0, [r7, #4]
  1397. /* USER CODE BEGIN Callback 0 */
  1398. /* USER CODE END Callback 0 */
  1399. if (htim->Instance == TIM6) {
  1400. 8000c2c: 687b ldr r3, [r7, #4]
  1401. 8000c2e: 681b ldr r3, [r3, #0]
  1402. 8000c30: 4a04 ldr r2, [pc, #16] @ (8000c44 <HAL_TIM_PeriodElapsedCallback+0x20>)
  1403. 8000c32: 4293 cmp r3, r2
  1404. 8000c34: d101 bne.n 8000c3a <HAL_TIM_PeriodElapsedCallback+0x16>
  1405. HAL_IncTick();
  1406. 8000c36: f001 fcff bl 8002638 <HAL_IncTick>
  1407. }
  1408. /* USER CODE BEGIN Callback 1 */
  1409. /* USER CODE END Callback 1 */
  1410. }
  1411. 8000c3a: bf00 nop
  1412. 8000c3c: 3708 adds r7, #8
  1413. 8000c3e: 46bd mov sp, r7
  1414. 8000c40: bd80 pop {r7, pc}
  1415. 8000c42: bf00 nop
  1416. 8000c44: 40001000 .word 0x40001000
  1417. 08000c48 <Error_Handler>:
  1418. /**
  1419. * @brief This function is executed in case of error occurrence.
  1420. * @retval None
  1421. */
  1422. void Error_Handler(void)
  1423. {
  1424. 8000c48: b480 push {r7}
  1425. 8000c4a: af00 add r7, sp, #0
  1426. __ASM volatile ("cpsid i" : : : "memory");
  1427. 8000c4c: b672 cpsid i
  1428. }
  1429. 8000c4e: bf00 nop
  1430. /* USER CODE BEGIN Error_Handler_Debug */
  1431. /* User can add his own implementation to report the HAL error return state */
  1432. __disable_irq();
  1433. while (1)
  1434. 8000c50: bf00 nop
  1435. 8000c52: e7fd b.n 8000c50 <Error_Handler+0x8>
  1436. 08000c54 <MockMeasurmetsTaskInit>:
  1437. (void)rng;
  1438. return 0.0;
  1439. }
  1440. #endif
  1441. void MockMeasurmetsTaskInit(void) {
  1442. 8000c54: b580 push {r7, lr}
  1443. 8000c56: b08a sub sp, #40 @ 0x28
  1444. 8000c58: af00 add r7, sp, #0
  1445. osThreadAttr_t osThreadAttrMockMeasTask = { 0 };
  1446. 8000c5a: 1d3b adds r3, r7, #4
  1447. 8000c5c: 2224 movs r2, #36 @ 0x24
  1448. 8000c5e: 2100 movs r1, #0
  1449. 8000c60: 4618 mov r0, r3
  1450. 8000c62: f00e fb18 bl 800f296 <memset>
  1451. osThreadAttrMockMeasTask.name = "os_thread_mock_measurmets";
  1452. 8000c66: 4b08 ldr r3, [pc, #32] @ (8000c88 <MockMeasurmetsTaskInit+0x34>)
  1453. 8000c68: 607b str r3, [r7, #4]
  1454. osThreadAttrMockMeasTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  1455. 8000c6a: f44f 6380 mov.w r3, #1024 @ 0x400
  1456. 8000c6e: 61bb str r3, [r7, #24]
  1457. osThreadAttrMockMeasTask.priority = (osPriority_t)osPriorityNormal;
  1458. 8000c70: 2318 movs r3, #24
  1459. 8000c72: 61fb str r3, [r7, #28]
  1460. osThreadNew (MockMeasurmetsTask, NULL, &osThreadAttrMockMeasTask);
  1461. 8000c74: 1d3b adds r3, r7, #4
  1462. 8000c76: 461a mov r2, r3
  1463. 8000c78: 2100 movs r1, #0
  1464. 8000c7a: 4804 ldr r0, [pc, #16] @ (8000c8c <MockMeasurmetsTaskInit+0x38>)
  1465. 8000c7c: f00a fc30 bl 800b4e0 <osThreadNew>
  1466. }
  1467. 8000c80: bf00 nop
  1468. 8000c82: 3728 adds r7, #40 @ 0x28
  1469. 8000c84: 46bd mov sp, r7
  1470. 8000c86: bd80 pop {r7, pc}
  1471. 8000c88: 0800ffb4 .word 0x0800ffb4
  1472. 8000c8c: 08000c91 .word 0x08000c91
  1473. 08000c90 <MockMeasurmetsTask>:
  1474. void MockMeasurmetsTask (void* argument) {
  1475. 8000c90: b580 push {r7, lr}
  1476. 8000c92: b084 sub sp, #16
  1477. 8000c94: af00 add r7, sp, #0
  1478. 8000c96: 6078 str r0, [r7, #4]
  1479. uint16_t counter = 0;
  1480. 8000c98: 2300 movs r3, #0
  1481. 8000c9a: 81fb strh r3, [r7, #14]
  1482. while (pdTRUE) {
  1483. osMutexAcquire (resMeasurementsMutex, osWaitForever);
  1484. 8000c9c: 4bda ldr r3, [pc, #872] @ (8001008 <MockMeasurmetsTask+0x378>)
  1485. 8000c9e: 681b ldr r3, [r3, #0]
  1486. 8000ca0: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  1487. 8000ca4: 4618 mov r0, r3
  1488. 8000ca6: f00a fd4f bl 800b748 <osMutexAcquire>
  1489. resMeasurements.voltagePeak[0] = 60 + (0.01 * (counter % 100));
  1490. 8000caa: 89fb ldrh r3, [r7, #14]
  1491. 8000cac: 4ad7 ldr r2, [pc, #860] @ (800100c <MockMeasurmetsTask+0x37c>)
  1492. 8000cae: fba2 1203 umull r1, r2, r2, r3
  1493. 8000cb2: 0952 lsrs r2, r2, #5
  1494. 8000cb4: 2164 movs r1, #100 @ 0x64
  1495. 8000cb6: fb01 f202 mul.w r2, r1, r2
  1496. 8000cba: 1a9b subs r3, r3, r2
  1497. 8000cbc: b29b uxth r3, r3
  1498. 8000cbe: ee07 3a90 vmov s15, r3
  1499. 8000cc2: eeb8 7be7 vcvt.f64.s32 d7, s15
  1500. 8000cc6: ed9f 6bc0 vldr d6, [pc, #768] @ 8000fc8 <MockMeasurmetsTask+0x338>
  1501. 8000cca: ee27 7b06 vmul.f64 d7, d7, d6
  1502. 8000cce: ed9f 6bc0 vldr d6, [pc, #768] @ 8000fd0 <MockMeasurmetsTask+0x340>
  1503. 8000cd2: ee37 7b06 vadd.f64 d7, d7, d6
  1504. 8000cd6: eef7 7bc7 vcvt.f32.f64 s15, d7
  1505. 8000cda: 4bcd ldr r3, [pc, #820] @ (8001010 <MockMeasurmetsTask+0x380>)
  1506. 8000cdc: edc3 7a03 vstr s15, [r3, #12]
  1507. resMeasurements.voltagePeak[1] = 61 + (0.01 * (counter % 100));
  1508. 8000ce0: 89fb ldrh r3, [r7, #14]
  1509. 8000ce2: 4aca ldr r2, [pc, #808] @ (800100c <MockMeasurmetsTask+0x37c>)
  1510. 8000ce4: fba2 1203 umull r1, r2, r2, r3
  1511. 8000ce8: 0952 lsrs r2, r2, #5
  1512. 8000cea: 2164 movs r1, #100 @ 0x64
  1513. 8000cec: fb01 f202 mul.w r2, r1, r2
  1514. 8000cf0: 1a9b subs r3, r3, r2
  1515. 8000cf2: b29b uxth r3, r3
  1516. 8000cf4: ee07 3a90 vmov s15, r3
  1517. 8000cf8: eeb8 7be7 vcvt.f64.s32 d7, s15
  1518. 8000cfc: ed9f 6bb2 vldr d6, [pc, #712] @ 8000fc8 <MockMeasurmetsTask+0x338>
  1519. 8000d00: ee27 7b06 vmul.f64 d7, d7, d6
  1520. 8000d04: ed9f 6bb4 vldr d6, [pc, #720] @ 8000fd8 <MockMeasurmetsTask+0x348>
  1521. 8000d08: ee37 7b06 vadd.f64 d7, d7, d6
  1522. 8000d0c: eef7 7bc7 vcvt.f32.f64 s15, d7
  1523. 8000d10: 4bbf ldr r3, [pc, #764] @ (8001010 <MockMeasurmetsTask+0x380>)
  1524. 8000d12: edc3 7a04 vstr s15, [r3, #16]
  1525. resMeasurements.voltagePeak[2] = 62 + (0.01 * (counter % 100));
  1526. 8000d16: 89fb ldrh r3, [r7, #14]
  1527. 8000d18: 4abc ldr r2, [pc, #752] @ (800100c <MockMeasurmetsTask+0x37c>)
  1528. 8000d1a: fba2 1203 umull r1, r2, r2, r3
  1529. 8000d1e: 0952 lsrs r2, r2, #5
  1530. 8000d20: 2164 movs r1, #100 @ 0x64
  1531. 8000d22: fb01 f202 mul.w r2, r1, r2
  1532. 8000d26: 1a9b subs r3, r3, r2
  1533. 8000d28: b29b uxth r3, r3
  1534. 8000d2a: ee07 3a90 vmov s15, r3
  1535. 8000d2e: eeb8 7be7 vcvt.f64.s32 d7, s15
  1536. 8000d32: ed9f 6ba5 vldr d6, [pc, #660] @ 8000fc8 <MockMeasurmetsTask+0x338>
  1537. 8000d36: ee27 7b06 vmul.f64 d7, d7, d6
  1538. 8000d3a: ed9f 6ba9 vldr d6, [pc, #676] @ 8000fe0 <MockMeasurmetsTask+0x350>
  1539. 8000d3e: ee37 7b06 vadd.f64 d7, d7, d6
  1540. 8000d42: eef7 7bc7 vcvt.f32.f64 s15, d7
  1541. 8000d46: 4bb2 ldr r3, [pc, #712] @ (8001010 <MockMeasurmetsTask+0x380>)
  1542. 8000d48: edc3 7a05 vstr s15, [r3, #20]
  1543. resMeasurements.voltageRMS[0] = 46 + (0.01 * (counter % 100));
  1544. 8000d4c: 89fb ldrh r3, [r7, #14]
  1545. 8000d4e: 4aaf ldr r2, [pc, #700] @ (800100c <MockMeasurmetsTask+0x37c>)
  1546. 8000d50: fba2 1203 umull r1, r2, r2, r3
  1547. 8000d54: 0952 lsrs r2, r2, #5
  1548. 8000d56: 2164 movs r1, #100 @ 0x64
  1549. 8000d58: fb01 f202 mul.w r2, r1, r2
  1550. 8000d5c: 1a9b subs r3, r3, r2
  1551. 8000d5e: b29b uxth r3, r3
  1552. 8000d60: ee07 3a90 vmov s15, r3
  1553. 8000d64: eeb8 7be7 vcvt.f64.s32 d7, s15
  1554. 8000d68: ed9f 6b97 vldr d6, [pc, #604] @ 8000fc8 <MockMeasurmetsTask+0x338>
  1555. 8000d6c: ee27 7b06 vmul.f64 d7, d7, d6
  1556. 8000d70: ed9f 6b9d vldr d6, [pc, #628] @ 8000fe8 <MockMeasurmetsTask+0x358>
  1557. 8000d74: ee37 7b06 vadd.f64 d7, d7, d6
  1558. 8000d78: eef7 7bc7 vcvt.f32.f64 s15, d7
  1559. 8000d7c: 4ba4 ldr r3, [pc, #656] @ (8001010 <MockMeasurmetsTask+0x380>)
  1560. 8000d7e: edc3 7a00 vstr s15, [r3]
  1561. resMeasurements.voltageRMS[1] = 47 + (0.01 * (counter % 100));
  1562. 8000d82: 89fb ldrh r3, [r7, #14]
  1563. 8000d84: 4aa1 ldr r2, [pc, #644] @ (800100c <MockMeasurmetsTask+0x37c>)
  1564. 8000d86: fba2 1203 umull r1, r2, r2, r3
  1565. 8000d8a: 0952 lsrs r2, r2, #5
  1566. 8000d8c: 2164 movs r1, #100 @ 0x64
  1567. 8000d8e: fb01 f202 mul.w r2, r1, r2
  1568. 8000d92: 1a9b subs r3, r3, r2
  1569. 8000d94: b29b uxth r3, r3
  1570. 8000d96: ee07 3a90 vmov s15, r3
  1571. 8000d9a: eeb8 7be7 vcvt.f64.s32 d7, s15
  1572. 8000d9e: ed9f 6b8a vldr d6, [pc, #552] @ 8000fc8 <MockMeasurmetsTask+0x338>
  1573. 8000da2: ee27 7b06 vmul.f64 d7, d7, d6
  1574. 8000da6: ed9f 6b92 vldr d6, [pc, #584] @ 8000ff0 <MockMeasurmetsTask+0x360>
  1575. 8000daa: ee37 7b06 vadd.f64 d7, d7, d6
  1576. 8000dae: eef7 7bc7 vcvt.f32.f64 s15, d7
  1577. 8000db2: 4b97 ldr r3, [pc, #604] @ (8001010 <MockMeasurmetsTask+0x380>)
  1578. 8000db4: edc3 7a01 vstr s15, [r3, #4]
  1579. resMeasurements.voltageRMS[2] = 48 + (0.01 * (counter % 100));
  1580. 8000db8: 89fb ldrh r3, [r7, #14]
  1581. 8000dba: 4a94 ldr r2, [pc, #592] @ (800100c <MockMeasurmetsTask+0x37c>)
  1582. 8000dbc: fba2 1203 umull r1, r2, r2, r3
  1583. 8000dc0: 0952 lsrs r2, r2, #5
  1584. 8000dc2: 2164 movs r1, #100 @ 0x64
  1585. 8000dc4: fb01 f202 mul.w r2, r1, r2
  1586. 8000dc8: 1a9b subs r3, r3, r2
  1587. 8000dca: b29b uxth r3, r3
  1588. 8000dcc: ee07 3a90 vmov s15, r3
  1589. 8000dd0: eeb8 7be7 vcvt.f64.s32 d7, s15
  1590. 8000dd4: ed9f 6b7c vldr d6, [pc, #496] @ 8000fc8 <MockMeasurmetsTask+0x338>
  1591. 8000dd8: ee27 7b06 vmul.f64 d7, d7, d6
  1592. 8000ddc: ed9f 6b86 vldr d6, [pc, #536] @ 8000ff8 <MockMeasurmetsTask+0x368>
  1593. 8000de0: ee37 7b06 vadd.f64 d7, d7, d6
  1594. 8000de4: eef7 7bc7 vcvt.f32.f64 s15, d7
  1595. 8000de8: 4b89 ldr r3, [pc, #548] @ (8001010 <MockMeasurmetsTask+0x380>)
  1596. 8000dea: edc3 7a02 vstr s15, [r3, #8]
  1597. resMeasurements.currentPeak[0] = 3 + (0.01 * (counter % 100));
  1598. 8000dee: 89fb ldrh r3, [r7, #14]
  1599. 8000df0: 4a86 ldr r2, [pc, #536] @ (800100c <MockMeasurmetsTask+0x37c>)
  1600. 8000df2: fba2 1203 umull r1, r2, r2, r3
  1601. 8000df6: 0952 lsrs r2, r2, #5
  1602. 8000df8: 2164 movs r1, #100 @ 0x64
  1603. 8000dfa: fb01 f202 mul.w r2, r1, r2
  1604. 8000dfe: 1a9b subs r3, r3, r2
  1605. 8000e00: b29b uxth r3, r3
  1606. 8000e02: ee07 3a90 vmov s15, r3
  1607. 8000e06: eeb8 7be7 vcvt.f64.s32 d7, s15
  1608. 8000e0a: ed9f 6b6f vldr d6, [pc, #444] @ 8000fc8 <MockMeasurmetsTask+0x338>
  1609. 8000e0e: ee27 7b06 vmul.f64 d7, d7, d6
  1610. 8000e12: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  1611. 8000e16: ee37 7b06 vadd.f64 d7, d7, d6
  1612. 8000e1a: eef7 7bc7 vcvt.f32.f64 s15, d7
  1613. 8000e1e: 4b7c ldr r3, [pc, #496] @ (8001010 <MockMeasurmetsTask+0x380>)
  1614. 8000e20: edc3 7a09 vstr s15, [r3, #36] @ 0x24
  1615. resMeasurements.currentPeak[1] = 4 + (0.01 * (counter % 100));
  1616. 8000e24: 89fb ldrh r3, [r7, #14]
  1617. 8000e26: 4a79 ldr r2, [pc, #484] @ (800100c <MockMeasurmetsTask+0x37c>)
  1618. 8000e28: fba2 1203 umull r1, r2, r2, r3
  1619. 8000e2c: 0952 lsrs r2, r2, #5
  1620. 8000e2e: 2164 movs r1, #100 @ 0x64
  1621. 8000e30: fb01 f202 mul.w r2, r1, r2
  1622. 8000e34: 1a9b subs r3, r3, r2
  1623. 8000e36: b29b uxth r3, r3
  1624. 8000e38: ee07 3a90 vmov s15, r3
  1625. 8000e3c: eeb8 7be7 vcvt.f64.s32 d7, s15
  1626. 8000e40: ed9f 6b61 vldr d6, [pc, #388] @ 8000fc8 <MockMeasurmetsTask+0x338>
  1627. 8000e44: ee27 7b06 vmul.f64 d7, d7, d6
  1628. 8000e48: eeb1 6b00 vmov.f64 d6, #16 @ 0x40800000 4.0
  1629. 8000e4c: ee37 7b06 vadd.f64 d7, d7, d6
  1630. 8000e50: eef7 7bc7 vcvt.f32.f64 s15, d7
  1631. 8000e54: 4b6e ldr r3, [pc, #440] @ (8001010 <MockMeasurmetsTask+0x380>)
  1632. 8000e56: edc3 7a0a vstr s15, [r3, #40] @ 0x28
  1633. resMeasurements.currentPeak[2] = 5 + (0.01 * (counter % 100));
  1634. 8000e5a: 89fb ldrh r3, [r7, #14]
  1635. 8000e5c: 4a6b ldr r2, [pc, #428] @ (800100c <MockMeasurmetsTask+0x37c>)
  1636. 8000e5e: fba2 1203 umull r1, r2, r2, r3
  1637. 8000e62: 0952 lsrs r2, r2, #5
  1638. 8000e64: 2164 movs r1, #100 @ 0x64
  1639. 8000e66: fb01 f202 mul.w r2, r1, r2
  1640. 8000e6a: 1a9b subs r3, r3, r2
  1641. 8000e6c: b29b uxth r3, r3
  1642. 8000e6e: ee07 3a90 vmov s15, r3
  1643. 8000e72: eeb8 7be7 vcvt.f64.s32 d7, s15
  1644. 8000e76: ed9f 6b54 vldr d6, [pc, #336] @ 8000fc8 <MockMeasurmetsTask+0x338>
  1645. 8000e7a: ee27 7b06 vmul.f64 d7, d7, d6
  1646. 8000e7e: eeb1 6b04 vmov.f64 d6, #20 @ 0x40a00000 5.0
  1647. 8000e82: ee37 7b06 vadd.f64 d7, d7, d6
  1648. 8000e86: eef7 7bc7 vcvt.f32.f64 s15, d7
  1649. 8000e8a: 4b61 ldr r3, [pc, #388] @ (8001010 <MockMeasurmetsTask+0x380>)
  1650. 8000e8c: edc3 7a0b vstr s15, [r3, #44] @ 0x2c
  1651. resMeasurements.currentRMS[0] = 1 + (0.01 * (counter % 100));
  1652. 8000e90: 89fb ldrh r3, [r7, #14]
  1653. 8000e92: 4a5e ldr r2, [pc, #376] @ (800100c <MockMeasurmetsTask+0x37c>)
  1654. 8000e94: fba2 1203 umull r1, r2, r2, r3
  1655. 8000e98: 0952 lsrs r2, r2, #5
  1656. 8000e9a: 2164 movs r1, #100 @ 0x64
  1657. 8000e9c: fb01 f202 mul.w r2, r1, r2
  1658. 8000ea0: 1a9b subs r3, r3, r2
  1659. 8000ea2: b29b uxth r3, r3
  1660. 8000ea4: ee07 3a90 vmov s15, r3
  1661. 8000ea8: eeb8 7be7 vcvt.f64.s32 d7, s15
  1662. 8000eac: ed9f 6b46 vldr d6, [pc, #280] @ 8000fc8 <MockMeasurmetsTask+0x338>
  1663. 8000eb0: ee27 7b06 vmul.f64 d7, d7, d6
  1664. 8000eb4: eeb7 6b00 vmov.f64 d6, #112 @ 0x3f800000 1.0
  1665. 8000eb8: ee37 7b06 vadd.f64 d7, d7, d6
  1666. 8000ebc: eef7 7bc7 vcvt.f32.f64 s15, d7
  1667. 8000ec0: 4b53 ldr r3, [pc, #332] @ (8001010 <MockMeasurmetsTask+0x380>)
  1668. 8000ec2: edc3 7a06 vstr s15, [r3, #24]
  1669. resMeasurements.currentRMS[1] = 2 + (0.01 * (counter % 100));
  1670. 8000ec6: 89fb ldrh r3, [r7, #14]
  1671. 8000ec8: 4a50 ldr r2, [pc, #320] @ (800100c <MockMeasurmetsTask+0x37c>)
  1672. 8000eca: fba2 1203 umull r1, r2, r2, r3
  1673. 8000ece: 0952 lsrs r2, r2, #5
  1674. 8000ed0: 2164 movs r1, #100 @ 0x64
  1675. 8000ed2: fb01 f202 mul.w r2, r1, r2
  1676. 8000ed6: 1a9b subs r3, r3, r2
  1677. 8000ed8: b29b uxth r3, r3
  1678. 8000eda: ee07 3a90 vmov s15, r3
  1679. 8000ede: eeb8 7be7 vcvt.f64.s32 d7, s15
  1680. 8000ee2: ed9f 6b39 vldr d6, [pc, #228] @ 8000fc8 <MockMeasurmetsTask+0x338>
  1681. 8000ee6: ee27 7b06 vmul.f64 d7, d7, d6
  1682. 8000eea: eeb0 6b00 vmov.f64 d6, #0 @ 0x40000000 2.0
  1683. 8000eee: ee37 7b06 vadd.f64 d7, d7, d6
  1684. 8000ef2: eef7 7bc7 vcvt.f32.f64 s15, d7
  1685. 8000ef6: 4b46 ldr r3, [pc, #280] @ (8001010 <MockMeasurmetsTask+0x380>)
  1686. 8000ef8: edc3 7a07 vstr s15, [r3, #28]
  1687. resMeasurements.currentRMS[2] = 3 + (0.01 * (counter % 100));
  1688. 8000efc: 89fb ldrh r3, [r7, #14]
  1689. 8000efe: 4a43 ldr r2, [pc, #268] @ (800100c <MockMeasurmetsTask+0x37c>)
  1690. 8000f00: fba2 1203 umull r1, r2, r2, r3
  1691. 8000f04: 0952 lsrs r2, r2, #5
  1692. 8000f06: 2164 movs r1, #100 @ 0x64
  1693. 8000f08: fb01 f202 mul.w r2, r1, r2
  1694. 8000f0c: 1a9b subs r3, r3, r2
  1695. 8000f0e: b29b uxth r3, r3
  1696. 8000f10: ee07 3a90 vmov s15, r3
  1697. 8000f14: eeb8 7be7 vcvt.f64.s32 d7, s15
  1698. 8000f18: ed9f 6b2b vldr d6, [pc, #172] @ 8000fc8 <MockMeasurmetsTask+0x338>
  1699. 8000f1c: ee27 7b06 vmul.f64 d7, d7, d6
  1700. 8000f20: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  1701. 8000f24: ee37 7b06 vadd.f64 d7, d7, d6
  1702. 8000f28: eef7 7bc7 vcvt.f32.f64 s15, d7
  1703. 8000f2c: 4b38 ldr r3, [pc, #224] @ (8001010 <MockMeasurmetsTask+0x380>)
  1704. 8000f2e: edc3 7a08 vstr s15, [r3, #32]
  1705. resMeasurements.power[0] = resMeasurements.voltagePeak[0] * resMeasurements.currentRMS[0];
  1706. 8000f32: 4b37 ldr r3, [pc, #220] @ (8001010 <MockMeasurmetsTask+0x380>)
  1707. 8000f34: ed93 7a03 vldr s14, [r3, #12]
  1708. 8000f38: 4b35 ldr r3, [pc, #212] @ (8001010 <MockMeasurmetsTask+0x380>)
  1709. 8000f3a: edd3 7a06 vldr s15, [r3, #24]
  1710. 8000f3e: ee67 7a27 vmul.f32 s15, s14, s15
  1711. 8000f42: 4b33 ldr r3, [pc, #204] @ (8001010 <MockMeasurmetsTask+0x380>)
  1712. 8000f44: edc3 7a0c vstr s15, [r3, #48] @ 0x30
  1713. resMeasurements.power[1] = resMeasurements.voltagePeak[1] * resMeasurements.currentRMS[1];
  1714. 8000f48: 4b31 ldr r3, [pc, #196] @ (8001010 <MockMeasurmetsTask+0x380>)
  1715. 8000f4a: ed93 7a04 vldr s14, [r3, #16]
  1716. 8000f4e: 4b30 ldr r3, [pc, #192] @ (8001010 <MockMeasurmetsTask+0x380>)
  1717. 8000f50: edd3 7a07 vldr s15, [r3, #28]
  1718. 8000f54: ee67 7a27 vmul.f32 s15, s14, s15
  1719. 8000f58: 4b2d ldr r3, [pc, #180] @ (8001010 <MockMeasurmetsTask+0x380>)
  1720. 8000f5a: edc3 7a0d vstr s15, [r3, #52] @ 0x34
  1721. resMeasurements.power[2] = resMeasurements.voltagePeak[2] * resMeasurements.currentRMS[2];
  1722. 8000f5e: 4b2c ldr r3, [pc, #176] @ (8001010 <MockMeasurmetsTask+0x380>)
  1723. 8000f60: ed93 7a05 vldr s14, [r3, #20]
  1724. 8000f64: 4b2a ldr r3, [pc, #168] @ (8001010 <MockMeasurmetsTask+0x380>)
  1725. 8000f66: edd3 7a08 vldr s15, [r3, #32]
  1726. 8000f6a: ee67 7a27 vmul.f32 s15, s14, s15
  1727. 8000f6e: 4b28 ldr r3, [pc, #160] @ (8001010 <MockMeasurmetsTask+0x380>)
  1728. 8000f70: edc3 7a0e vstr s15, [r3, #56] @ 0x38
  1729. osMutexRelease(resMeasurementsMutex);
  1730. 8000f74: 4b24 ldr r3, [pc, #144] @ (8001008 <MockMeasurmetsTask+0x378>)
  1731. 8000f76: 681b ldr r3, [r3, #0]
  1732. 8000f78: 4618 mov r0, r3
  1733. 8000f7a: f00a fc30 bl 800b7de <osMutexRelease>
  1734. osMutexAcquire (sensorsInfoMutex, osWaitForever);
  1735. 8000f7e: 4b25 ldr r3, [pc, #148] @ (8001014 <MockMeasurmetsTask+0x384>)
  1736. 8000f80: 681b ldr r3, [r3, #0]
  1737. 8000f82: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  1738. 8000f86: 4618 mov r0, r3
  1739. 8000f88: f00a fbde bl 800b748 <osMutexAcquire>
  1740. sensorsInfo.pvTemperature[0] = 50 + (0.01 * (counter % 100));
  1741. 8000f8c: 89fb ldrh r3, [r7, #14]
  1742. 8000f8e: 4a1f ldr r2, [pc, #124] @ (800100c <MockMeasurmetsTask+0x37c>)
  1743. 8000f90: fba2 1203 umull r1, r2, r2, r3
  1744. 8000f94: 0952 lsrs r2, r2, #5
  1745. 8000f96: 2164 movs r1, #100 @ 0x64
  1746. 8000f98: fb01 f202 mul.w r2, r1, r2
  1747. 8000f9c: 1a9b subs r3, r3, r2
  1748. 8000f9e: b29b uxth r3, r3
  1749. 8000fa0: ee07 3a90 vmov s15, r3
  1750. 8000fa4: eeb8 7be7 vcvt.f64.s32 d7, s15
  1751. 8000fa8: ed9f 6b07 vldr d6, [pc, #28] @ 8000fc8 <MockMeasurmetsTask+0x338>
  1752. 8000fac: ee27 7b06 vmul.f64 d7, d7, d6
  1753. 8000fb0: ed9f 6b13 vldr d6, [pc, #76] @ 8001000 <MockMeasurmetsTask+0x370>
  1754. 8000fb4: ee37 7b06 vadd.f64 d7, d7, d6
  1755. 8000fb8: eef7 7bc7 vcvt.f32.f64 s15, d7
  1756. 8000fbc: 4b16 ldr r3, [pc, #88] @ (8001018 <MockMeasurmetsTask+0x388>)
  1757. 8000fbe: edc3 7a00 vstr s15, [r3]
  1758. sensorsInfo.pvTemperature[1] = 51 + (0.01 * (counter % 100));
  1759. 8000fc2: 89fb ldrh r3, [r7, #14]
  1760. 8000fc4: e02a b.n 800101c <MockMeasurmetsTask+0x38c>
  1761. 8000fc6: bf00 nop
  1762. 8000fc8: 47ae147b .word 0x47ae147b
  1763. 8000fcc: 3f847ae1 .word 0x3f847ae1
  1764. 8000fd0: 00000000 .word 0x00000000
  1765. 8000fd4: 404e0000 .word 0x404e0000
  1766. 8000fd8: 00000000 .word 0x00000000
  1767. 8000fdc: 404e8000 .word 0x404e8000
  1768. 8000fe0: 00000000 .word 0x00000000
  1769. 8000fe4: 404f0000 .word 0x404f0000
  1770. 8000fe8: 00000000 .word 0x00000000
  1771. 8000fec: 40470000 .word 0x40470000
  1772. 8000ff0: 00000000 .word 0x00000000
  1773. 8000ff4: 40478000 .word 0x40478000
  1774. 8000ff8: 00000000 .word 0x00000000
  1775. 8000ffc: 40480000 .word 0x40480000
  1776. 8001000: 00000000 .word 0x00000000
  1777. 8001004: 40490000 .word 0x40490000
  1778. 8001008: 24000788 .word 0x24000788
  1779. 800100c: 51eb851f .word 0x51eb851f
  1780. 8001010: 24000724 .word 0x24000724
  1781. 8001014: 2400078c .word 0x2400078c
  1782. 8001018: 24000760 .word 0x24000760
  1783. 800101c: 4a9a ldr r2, [pc, #616] @ (8001288 <MockMeasurmetsTask+0x5f8>)
  1784. 800101e: fba2 1203 umull r1, r2, r2, r3
  1785. 8001022: 0952 lsrs r2, r2, #5
  1786. 8001024: 2164 movs r1, #100 @ 0x64
  1787. 8001026: fb01 f202 mul.w r2, r1, r2
  1788. 800102a: 1a9b subs r3, r3, r2
  1789. 800102c: b29b uxth r3, r3
  1790. 800102e: ee07 3a90 vmov s15, r3
  1791. 8001032: eeb8 7be7 vcvt.f64.s32 d7, s15
  1792. 8001036: ed9f 6b90 vldr d6, [pc, #576] @ 8001278 <MockMeasurmetsTask+0x5e8>
  1793. 800103a: ee27 7b06 vmul.f64 d7, d7, d6
  1794. 800103e: ed9f 6b90 vldr d6, [pc, #576] @ 8001280 <MockMeasurmetsTask+0x5f0>
  1795. 8001042: ee37 7b06 vadd.f64 d7, d7, d6
  1796. 8001046: eef7 7bc7 vcvt.f32.f64 s15, d7
  1797. 800104a: 4b90 ldr r3, [pc, #576] @ (800128c <MockMeasurmetsTask+0x5fc>)
  1798. 800104c: edc3 7a01 vstr s15, [r3, #4]
  1799. sensorsInfo.fanVoltage = 12 + (0.01 * (counter % 100));
  1800. 8001050: 89fb ldrh r3, [r7, #14]
  1801. 8001052: 4a8d ldr r2, [pc, #564] @ (8001288 <MockMeasurmetsTask+0x5f8>)
  1802. 8001054: fba2 1203 umull r1, r2, r2, r3
  1803. 8001058: 0952 lsrs r2, r2, #5
  1804. 800105a: 2164 movs r1, #100 @ 0x64
  1805. 800105c: fb01 f202 mul.w r2, r1, r2
  1806. 8001060: 1a9b subs r3, r3, r2
  1807. 8001062: b29b uxth r3, r3
  1808. 8001064: ee07 3a90 vmov s15, r3
  1809. 8001068: eeb8 7be7 vcvt.f64.s32 d7, s15
  1810. 800106c: ed9f 6b82 vldr d6, [pc, #520] @ 8001278 <MockMeasurmetsTask+0x5e8>
  1811. 8001070: ee27 7b06 vmul.f64 d7, d7, d6
  1812. 8001074: eeb2 6b08 vmov.f64 d6, #40 @ 0x41400000 12.0
  1813. 8001078: ee37 7b06 vadd.f64 d7, d7, d6
  1814. 800107c: eef7 7bc7 vcvt.f32.f64 s15, d7
  1815. 8001080: 4b82 ldr r3, [pc, #520] @ (800128c <MockMeasurmetsTask+0x5fc>)
  1816. 8001082: edc3 7a02 vstr s15, [r3, #8]
  1817. sensorsInfo.pvEncoder = 15 + (0.01 * (counter % 100));
  1818. 8001086: 89fb ldrh r3, [r7, #14]
  1819. 8001088: 4a7f ldr r2, [pc, #508] @ (8001288 <MockMeasurmetsTask+0x5f8>)
  1820. 800108a: fba2 1203 umull r1, r2, r2, r3
  1821. 800108e: 0952 lsrs r2, r2, #5
  1822. 8001090: 2164 movs r1, #100 @ 0x64
  1823. 8001092: fb01 f202 mul.w r2, r1, r2
  1824. 8001096: 1a9b subs r3, r3, r2
  1825. 8001098: b29b uxth r3, r3
  1826. 800109a: ee07 3a90 vmov s15, r3
  1827. 800109e: eeb8 7be7 vcvt.f64.s32 d7, s15
  1828. 80010a2: ed9f 6b75 vldr d6, [pc, #468] @ 8001278 <MockMeasurmetsTask+0x5e8>
  1829. 80010a6: ee27 7b06 vmul.f64 d7, d7, d6
  1830. 80010aa: eeb2 6b0e vmov.f64 d6, #46 @ 0x41700000 15.0
  1831. 80010ae: ee37 7b06 vadd.f64 d7, d7, d6
  1832. 80010b2: eef7 7bc7 vcvt.f32.f64 s15, d7
  1833. 80010b6: 4b75 ldr r3, [pc, #468] @ (800128c <MockMeasurmetsTask+0x5fc>)
  1834. 80010b8: edc3 7a03 vstr s15, [r3, #12]
  1835. sensorsInfo.motorXStatus = (counter % 100) > 50 ? 1 : 0;
  1836. 80010bc: 89fb ldrh r3, [r7, #14]
  1837. 80010be: 4a72 ldr r2, [pc, #456] @ (8001288 <MockMeasurmetsTask+0x5f8>)
  1838. 80010c0: fba2 1203 umull r1, r2, r2, r3
  1839. 80010c4: 0952 lsrs r2, r2, #5
  1840. 80010c6: 2164 movs r1, #100 @ 0x64
  1841. 80010c8: fb01 f202 mul.w r2, r1, r2
  1842. 80010cc: 1a9b subs r3, r3, r2
  1843. 80010ce: b29b uxth r3, r3
  1844. 80010d0: 2b32 cmp r3, #50 @ 0x32
  1845. 80010d2: bf8c ite hi
  1846. 80010d4: 2301 movhi r3, #1
  1847. 80010d6: 2300 movls r3, #0
  1848. 80010d8: b2db uxtb r3, r3
  1849. 80010da: 461a mov r2, r3
  1850. 80010dc: 4b6b ldr r3, [pc, #428] @ (800128c <MockMeasurmetsTask+0x5fc>)
  1851. 80010de: 741a strb r2, [r3, #16]
  1852. sensorsInfo.motorYStatus = (counter % 100) > 75 ? 1 : 0;
  1853. 80010e0: 89fb ldrh r3, [r7, #14]
  1854. 80010e2: 4a69 ldr r2, [pc, #420] @ (8001288 <MockMeasurmetsTask+0x5f8>)
  1855. 80010e4: fba2 1203 umull r1, r2, r2, r3
  1856. 80010e8: 0952 lsrs r2, r2, #5
  1857. 80010ea: 2164 movs r1, #100 @ 0x64
  1858. 80010ec: fb01 f202 mul.w r2, r1, r2
  1859. 80010f0: 1a9b subs r3, r3, r2
  1860. 80010f2: b29b uxth r3, r3
  1861. 80010f4: 2b4b cmp r3, #75 @ 0x4b
  1862. 80010f6: bf8c ite hi
  1863. 80010f8: 2301 movhi r3, #1
  1864. 80010fa: 2300 movls r3, #0
  1865. 80010fc: b2db uxtb r3, r3
  1866. 80010fe: 461a mov r2, r3
  1867. 8001100: 4b62 ldr r3, [pc, #392] @ (800128c <MockMeasurmetsTask+0x5fc>)
  1868. 8001102: 745a strb r2, [r3, #17]
  1869. sensorsInfo.motorXAveCurrent = 3 + (0.01 * (counter % 100));
  1870. 8001104: 89fb ldrh r3, [r7, #14]
  1871. 8001106: 4a60 ldr r2, [pc, #384] @ (8001288 <MockMeasurmetsTask+0x5f8>)
  1872. 8001108: fba2 1203 umull r1, r2, r2, r3
  1873. 800110c: 0952 lsrs r2, r2, #5
  1874. 800110e: 2164 movs r1, #100 @ 0x64
  1875. 8001110: fb01 f202 mul.w r2, r1, r2
  1876. 8001114: 1a9b subs r3, r3, r2
  1877. 8001116: b29b uxth r3, r3
  1878. 8001118: ee07 3a90 vmov s15, r3
  1879. 800111c: eeb8 7be7 vcvt.f64.s32 d7, s15
  1880. 8001120: ed9f 6b55 vldr d6, [pc, #340] @ 8001278 <MockMeasurmetsTask+0x5e8>
  1881. 8001124: ee27 7b06 vmul.f64 d7, d7, d6
  1882. 8001128: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  1883. 800112c: ee37 7b06 vadd.f64 d7, d7, d6
  1884. 8001130: eef7 7bc7 vcvt.f32.f64 s15, d7
  1885. 8001134: 4b55 ldr r3, [pc, #340] @ (800128c <MockMeasurmetsTask+0x5fc>)
  1886. 8001136: edc3 7a05 vstr s15, [r3, #20]
  1887. sensorsInfo.motorYAveCurrent = 3 + (0.01 * (counter % 100));
  1888. 800113a: 89fb ldrh r3, [r7, #14]
  1889. 800113c: 4a52 ldr r2, [pc, #328] @ (8001288 <MockMeasurmetsTask+0x5f8>)
  1890. 800113e: fba2 1203 umull r1, r2, r2, r3
  1891. 8001142: 0952 lsrs r2, r2, #5
  1892. 8001144: 2164 movs r1, #100 @ 0x64
  1893. 8001146: fb01 f202 mul.w r2, r1, r2
  1894. 800114a: 1a9b subs r3, r3, r2
  1895. 800114c: b29b uxth r3, r3
  1896. 800114e: ee07 3a90 vmov s15, r3
  1897. 8001152: eeb8 7be7 vcvt.f64.s32 d7, s15
  1898. 8001156: ed9f 6b48 vldr d6, [pc, #288] @ 8001278 <MockMeasurmetsTask+0x5e8>
  1899. 800115a: ee27 7b06 vmul.f64 d7, d7, d6
  1900. 800115e: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  1901. 8001162: ee37 7b06 vadd.f64 d7, d7, d6
  1902. 8001166: eef7 7bc7 vcvt.f32.f64 s15, d7
  1903. 800116a: 4b48 ldr r3, [pc, #288] @ (800128c <MockMeasurmetsTask+0x5fc>)
  1904. 800116c: edc3 7a06 vstr s15, [r3, #24]
  1905. sensorsInfo.motorXPeakCurrent = 6 + (0.01 * (counter % 100));
  1906. 8001170: 89fb ldrh r3, [r7, #14]
  1907. 8001172: 4a45 ldr r2, [pc, #276] @ (8001288 <MockMeasurmetsTask+0x5f8>)
  1908. 8001174: fba2 1203 umull r1, r2, r2, r3
  1909. 8001178: 0952 lsrs r2, r2, #5
  1910. 800117a: 2164 movs r1, #100 @ 0x64
  1911. 800117c: fb01 f202 mul.w r2, r1, r2
  1912. 8001180: 1a9b subs r3, r3, r2
  1913. 8001182: b29b uxth r3, r3
  1914. 8001184: ee07 3a90 vmov s15, r3
  1915. 8001188: eeb8 7be7 vcvt.f64.s32 d7, s15
  1916. 800118c: ed9f 6b3a vldr d6, [pc, #232] @ 8001278 <MockMeasurmetsTask+0x5e8>
  1917. 8001190: ee27 7b06 vmul.f64 d7, d7, d6
  1918. 8001194: eeb1 6b08 vmov.f64 d6, #24 @ 0x40c00000 6.0
  1919. 8001198: ee37 7b06 vadd.f64 d7, d7, d6
  1920. 800119c: eef7 7bc7 vcvt.f32.f64 s15, d7
  1921. 80011a0: 4b3a ldr r3, [pc, #232] @ (800128c <MockMeasurmetsTask+0x5fc>)
  1922. 80011a2: edc3 7a07 vstr s15, [r3, #28]
  1923. sensorsInfo.motorYPeakCurrent = 6 + (0.01 * (counter % 100));
  1924. 80011a6: 89fb ldrh r3, [r7, #14]
  1925. 80011a8: 4a37 ldr r2, [pc, #220] @ (8001288 <MockMeasurmetsTask+0x5f8>)
  1926. 80011aa: fba2 1203 umull r1, r2, r2, r3
  1927. 80011ae: 0952 lsrs r2, r2, #5
  1928. 80011b0: 2164 movs r1, #100 @ 0x64
  1929. 80011b2: fb01 f202 mul.w r2, r1, r2
  1930. 80011b6: 1a9b subs r3, r3, r2
  1931. 80011b8: b29b uxth r3, r3
  1932. 80011ba: ee07 3a90 vmov s15, r3
  1933. 80011be: eeb8 7be7 vcvt.f64.s32 d7, s15
  1934. 80011c2: ed9f 6b2d vldr d6, [pc, #180] @ 8001278 <MockMeasurmetsTask+0x5e8>
  1935. 80011c6: ee27 7b06 vmul.f64 d7, d7, d6
  1936. 80011ca: eeb1 6b08 vmov.f64 d6, #24 @ 0x40c00000 6.0
  1937. 80011ce: ee37 7b06 vadd.f64 d7, d7, d6
  1938. 80011d2: eef7 7bc7 vcvt.f32.f64 s15, d7
  1939. 80011d6: 4b2d ldr r3, [pc, #180] @ (800128c <MockMeasurmetsTask+0x5fc>)
  1940. 80011d8: edc3 7a08 vstr s15, [r3, #32]
  1941. sensorsInfo.limitSwitchUp = (counter % 100) > 50 ? 1 : 0;
  1942. 80011dc: 89fb ldrh r3, [r7, #14]
  1943. 80011de: 4a2a ldr r2, [pc, #168] @ (8001288 <MockMeasurmetsTask+0x5f8>)
  1944. 80011e0: fba2 1203 umull r1, r2, r2, r3
  1945. 80011e4: 0952 lsrs r2, r2, #5
  1946. 80011e6: 2164 movs r1, #100 @ 0x64
  1947. 80011e8: fb01 f202 mul.w r2, r1, r2
  1948. 80011ec: 1a9b subs r3, r3, r2
  1949. 80011ee: b29b uxth r3, r3
  1950. 80011f0: 2b32 cmp r3, #50 @ 0x32
  1951. 80011f2: bf8c ite hi
  1952. 80011f4: 2301 movhi r3, #1
  1953. 80011f6: 2300 movls r3, #0
  1954. 80011f8: b2db uxtb r3, r3
  1955. 80011fa: 461a mov r2, r3
  1956. 80011fc: 4b23 ldr r3, [pc, #140] @ (800128c <MockMeasurmetsTask+0x5fc>)
  1957. 80011fe: f883 2024 strb.w r2, [r3, #36] @ 0x24
  1958. sensorsInfo.limitSwitchDown = (counter % 100) < 25 ? 1 : 0;
  1959. 8001202: 89fb ldrh r3, [r7, #14]
  1960. 8001204: 4a20 ldr r2, [pc, #128] @ (8001288 <MockMeasurmetsTask+0x5f8>)
  1961. 8001206: fba2 1203 umull r1, r2, r2, r3
  1962. 800120a: 0952 lsrs r2, r2, #5
  1963. 800120c: 2164 movs r1, #100 @ 0x64
  1964. 800120e: fb01 f202 mul.w r2, r1, r2
  1965. 8001212: 1a9b subs r3, r3, r2
  1966. 8001214: b29b uxth r3, r3
  1967. 8001216: 2b18 cmp r3, #24
  1968. 8001218: bf94 ite ls
  1969. 800121a: 2301 movls r3, #1
  1970. 800121c: 2300 movhi r3, #0
  1971. 800121e: b2db uxtb r3, r3
  1972. 8001220: 461a mov r2, r3
  1973. 8001222: 4b1a ldr r3, [pc, #104] @ (800128c <MockMeasurmetsTask+0x5fc>)
  1974. 8001224: f883 2025 strb.w r2, [r3, #37] @ 0x25
  1975. sensorsInfo.limitSwitchCenter = (counter % 100) > 35 ? 1 : 0;
  1976. 8001228: 89fb ldrh r3, [r7, #14]
  1977. 800122a: 4a17 ldr r2, [pc, #92] @ (8001288 <MockMeasurmetsTask+0x5f8>)
  1978. 800122c: fba2 1203 umull r1, r2, r2, r3
  1979. 8001230: 0952 lsrs r2, r2, #5
  1980. 8001232: 2164 movs r1, #100 @ 0x64
  1981. 8001234: fb01 f202 mul.w r2, r1, r2
  1982. 8001238: 1a9b subs r3, r3, r2
  1983. 800123a: b29b uxth r3, r3
  1984. 800123c: 2b23 cmp r3, #35 @ 0x23
  1985. 800123e: bf8c ite hi
  1986. 8001240: 2301 movhi r3, #1
  1987. 8001242: 2300 movls r3, #0
  1988. 8001244: b2db uxtb r3, r3
  1989. 8001246: 461a mov r2, r3
  1990. 8001248: 4b10 ldr r3, [pc, #64] @ (800128c <MockMeasurmetsTask+0x5fc>)
  1991. 800124a: f883 2026 strb.w r2, [r3, #38] @ 0x26
  1992. sensorsInfo.powerSupplyFailMask = 0;
  1993. 800124e: 4b0f ldr r3, [pc, #60] @ (800128c <MockMeasurmetsTask+0x5fc>)
  1994. 8001250: 2200 movs r2, #0
  1995. 8001252: f883 2027 strb.w r2, [r3, #39] @ 0x27
  1996. osMutexRelease(sensorsInfoMutex);
  1997. 8001256: 4b0e ldr r3, [pc, #56] @ (8001290 <MockMeasurmetsTask+0x600>)
  1998. 8001258: 681b ldr r3, [r3, #0]
  1999. 800125a: 4618 mov r0, r3
  2000. 800125c: f00a fabf bl 800b7de <osMutexRelease>
  2001. counter++;
  2002. 8001260: 89fb ldrh r3, [r7, #14]
  2003. 8001262: 3301 adds r3, #1
  2004. 8001264: 81fb strh r3, [r7, #14]
  2005. osDelay (pdMS_TO_TICKS (1000));
  2006. 8001266: f44f 707a mov.w r0, #1000 @ 0x3e8
  2007. 800126a: f00a f9cc bl 800b606 <osDelay>
  2008. osMutexAcquire (resMeasurementsMutex, osWaitForever);
  2009. 800126e: bf00 nop
  2010. 8001270: e514 b.n 8000c9c <MockMeasurmetsTask+0xc>
  2011. 8001272: bf00 nop
  2012. 8001274: f3af 8000 nop.w
  2013. 8001278: 47ae147b .word 0x47ae147b
  2014. 800127c: 3f847ae1 .word 0x3f847ae1
  2015. 8001280: 00000000 .word 0x00000000
  2016. 8001284: 40498000 .word 0x40498000
  2017. 8001288: 51eb851f .word 0x51eb851f
  2018. 800128c: 24000760 .word 0x24000760
  2019. 8001290: 2400078c .word 0x2400078c
  2020. 08001294 <WriteDataToBuffer>:
  2021. buff[newBuffPos++] = (uint8_t)((uData >> (i * 8)) & 0xFF);
  2022. }
  2023. *buffPos = newBuffPos;
  2024. }
  2025. void WriteDataToBuffer (uint8_t* buff, uint16_t* buffPos, void* data, uint8_t dataSize) {
  2026. 8001294: b480 push {r7}
  2027. 8001296: b089 sub sp, #36 @ 0x24
  2028. 8001298: af00 add r7, sp, #0
  2029. 800129a: 60f8 str r0, [r7, #12]
  2030. 800129c: 60b9 str r1, [r7, #8]
  2031. 800129e: 607a str r2, [r7, #4]
  2032. 80012a0: 70fb strb r3, [r7, #3]
  2033. uint32_t* uDataPtr = data;
  2034. 80012a2: 687b ldr r3, [r7, #4]
  2035. 80012a4: 61bb str r3, [r7, #24]
  2036. uint32_t uData = *uDataPtr;
  2037. 80012a6: 69bb ldr r3, [r7, #24]
  2038. 80012a8: 681b ldr r3, [r3, #0]
  2039. 80012aa: 617b str r3, [r7, #20]
  2040. uint8_t i = 0;
  2041. 80012ac: 2300 movs r3, #0
  2042. 80012ae: 77fb strb r3, [r7, #31]
  2043. uint8_t newBuffPos = *buffPos;
  2044. 80012b0: 68bb ldr r3, [r7, #8]
  2045. 80012b2: 881b ldrh r3, [r3, #0]
  2046. 80012b4: 77bb strb r3, [r7, #30]
  2047. for (i = 0; i < dataSize; i++) {
  2048. 80012b6: 2300 movs r3, #0
  2049. 80012b8: 77fb strb r3, [r7, #31]
  2050. 80012ba: e00e b.n 80012da <WriteDataToBuffer+0x46>
  2051. buff[newBuffPos++] = (uint8_t)((uData >> (i * 8)) & 0xFF);
  2052. 80012bc: 7ffb ldrb r3, [r7, #31]
  2053. 80012be: 00db lsls r3, r3, #3
  2054. 80012c0: 697a ldr r2, [r7, #20]
  2055. 80012c2: 40da lsrs r2, r3
  2056. 80012c4: 7fbb ldrb r3, [r7, #30]
  2057. 80012c6: 1c59 adds r1, r3, #1
  2058. 80012c8: 77b9 strb r1, [r7, #30]
  2059. 80012ca: 4619 mov r1, r3
  2060. 80012cc: 68fb ldr r3, [r7, #12]
  2061. 80012ce: 440b add r3, r1
  2062. 80012d0: b2d2 uxtb r2, r2
  2063. 80012d2: 701a strb r2, [r3, #0]
  2064. for (i = 0; i < dataSize; i++) {
  2065. 80012d4: 7ffb ldrb r3, [r7, #31]
  2066. 80012d6: 3301 adds r3, #1
  2067. 80012d8: 77fb strb r3, [r7, #31]
  2068. 80012da: 7ffa ldrb r2, [r7, #31]
  2069. 80012dc: 78fb ldrb r3, [r7, #3]
  2070. 80012de: 429a cmp r2, r3
  2071. 80012e0: d3ec bcc.n 80012bc <WriteDataToBuffer+0x28>
  2072. }
  2073. *buffPos = newBuffPos;
  2074. 80012e2: 7fbb ldrb r3, [r7, #30]
  2075. 80012e4: b29a uxth r2, r3
  2076. 80012e6: 68bb ldr r3, [r7, #8]
  2077. 80012e8: 801a strh r2, [r3, #0]
  2078. }
  2079. 80012ea: bf00 nop
  2080. 80012ec: 3724 adds r7, #36 @ 0x24
  2081. 80012ee: 46bd mov sp, r7
  2082. 80012f0: f85d 7b04 ldr.w r7, [sp], #4
  2083. 80012f4: 4770 bx lr
  2084. ...
  2085. 080012f8 <PrepareRespFrame>:
  2086. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (crc);
  2087. return txBufferPos;
  2088. }
  2089. uint16_t PrepareRespFrame (uint8_t* txBuffer, uint16_t frameId, SerialProtocolCommands frameCommand, SerialProtocolRespStatus respStatus, uint8_t* dataBuffer, uint16_t dataLength) {
  2090. 80012f8: b580 push {r7, lr}
  2091. 80012fa: b084 sub sp, #16
  2092. 80012fc: af00 add r7, sp, #0
  2093. 80012fe: 6078 str r0, [r7, #4]
  2094. 8001300: 4608 mov r0, r1
  2095. 8001302: 4611 mov r1, r2
  2096. 8001304: 461a mov r2, r3
  2097. 8001306: 4603 mov r3, r0
  2098. 8001308: 807b strh r3, [r7, #2]
  2099. 800130a: 460b mov r3, r1
  2100. 800130c: 707b strb r3, [r7, #1]
  2101. 800130e: 4613 mov r3, r2
  2102. 8001310: 703b strb r3, [r7, #0]
  2103. uint16_t crc = 0;
  2104. 8001312: 2300 movs r3, #0
  2105. 8001314: 81bb strh r3, [r7, #12]
  2106. uint16_t txBufferPos = 0;
  2107. 8001316: 2300 movs r3, #0
  2108. 8001318: 81fb strh r3, [r7, #14]
  2109. uint16_t frameCmd = ((uint16_t)frameCommand) | 0x8000; // MSB set means response
  2110. 800131a: 787b ldrb r3, [r7, #1]
  2111. 800131c: b21a sxth r2, r3
  2112. 800131e: 4b43 ldr r3, [pc, #268] @ (800142c <PrepareRespFrame+0x134>)
  2113. 8001320: 4313 orrs r3, r2
  2114. 8001322: b21b sxth r3, r3
  2115. 8001324: 817b strh r3, [r7, #10]
  2116. memset (txBuffer, 0x00, dataLength);
  2117. 8001326: 8bbb ldrh r3, [r7, #28]
  2118. 8001328: 461a mov r2, r3
  2119. 800132a: 2100 movs r1, #0
  2120. 800132c: 6878 ldr r0, [r7, #4]
  2121. 800132e: f00d ffb2 bl 800f296 <memset>
  2122. txBuffer[txBufferPos++] = FRAME_INDICATOR;
  2123. 8001332: 89fb ldrh r3, [r7, #14]
  2124. 8001334: 1c5a adds r2, r3, #1
  2125. 8001336: 81fa strh r2, [r7, #14]
  2126. 8001338: 461a mov r2, r3
  2127. 800133a: 687b ldr r3, [r7, #4]
  2128. 800133c: 4413 add r3, r2
  2129. 800133e: 22aa movs r2, #170 @ 0xaa
  2130. 8001340: 701a strb r2, [r3, #0]
  2131. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (frameId);
  2132. 8001342: 89fb ldrh r3, [r7, #14]
  2133. 8001344: 1c5a adds r2, r3, #1
  2134. 8001346: 81fa strh r2, [r7, #14]
  2135. 8001348: 461a mov r2, r3
  2136. 800134a: 687b ldr r3, [r7, #4]
  2137. 800134c: 4413 add r3, r2
  2138. 800134e: 887a ldrh r2, [r7, #2]
  2139. 8001350: b2d2 uxtb r2, r2
  2140. 8001352: 701a strb r2, [r3, #0]
  2141. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (frameId);
  2142. 8001354: 887b ldrh r3, [r7, #2]
  2143. 8001356: 0a1b lsrs r3, r3, #8
  2144. 8001358: b29a uxth r2, r3
  2145. 800135a: 89fb ldrh r3, [r7, #14]
  2146. 800135c: 1c59 adds r1, r3, #1
  2147. 800135e: 81f9 strh r1, [r7, #14]
  2148. 8001360: 4619 mov r1, r3
  2149. 8001362: 687b ldr r3, [r7, #4]
  2150. 8001364: 440b add r3, r1
  2151. 8001366: b2d2 uxtb r2, r2
  2152. 8001368: 701a strb r2, [r3, #0]
  2153. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (frameCmd);
  2154. 800136a: 89fb ldrh r3, [r7, #14]
  2155. 800136c: 1c5a adds r2, r3, #1
  2156. 800136e: 81fa strh r2, [r7, #14]
  2157. 8001370: 461a mov r2, r3
  2158. 8001372: 687b ldr r3, [r7, #4]
  2159. 8001374: 4413 add r3, r2
  2160. 8001376: 897a ldrh r2, [r7, #10]
  2161. 8001378: b2d2 uxtb r2, r2
  2162. 800137a: 701a strb r2, [r3, #0]
  2163. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (frameCmd);
  2164. 800137c: 897b ldrh r3, [r7, #10]
  2165. 800137e: 0a1b lsrs r3, r3, #8
  2166. 8001380: b29a uxth r2, r3
  2167. 8001382: 89fb ldrh r3, [r7, #14]
  2168. 8001384: 1c59 adds r1, r3, #1
  2169. 8001386: 81f9 strh r1, [r7, #14]
  2170. 8001388: 4619 mov r1, r3
  2171. 800138a: 687b ldr r3, [r7, #4]
  2172. 800138c: 440b add r3, r1
  2173. 800138e: b2d2 uxtb r2, r2
  2174. 8001390: 701a strb r2, [r3, #0]
  2175. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (dataLength);
  2176. 8001392: 89fb ldrh r3, [r7, #14]
  2177. 8001394: 1c5a adds r2, r3, #1
  2178. 8001396: 81fa strh r2, [r7, #14]
  2179. 8001398: 461a mov r2, r3
  2180. 800139a: 687b ldr r3, [r7, #4]
  2181. 800139c: 4413 add r3, r2
  2182. 800139e: 8bba ldrh r2, [r7, #28]
  2183. 80013a0: b2d2 uxtb r2, r2
  2184. 80013a2: 701a strb r2, [r3, #0]
  2185. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (dataLength);
  2186. 80013a4: 8bbb ldrh r3, [r7, #28]
  2187. 80013a6: 0a1b lsrs r3, r3, #8
  2188. 80013a8: b29a uxth r2, r3
  2189. 80013aa: 89fb ldrh r3, [r7, #14]
  2190. 80013ac: 1c59 adds r1, r3, #1
  2191. 80013ae: 81f9 strh r1, [r7, #14]
  2192. 80013b0: 4619 mov r1, r3
  2193. 80013b2: 687b ldr r3, [r7, #4]
  2194. 80013b4: 440b add r3, r1
  2195. 80013b6: b2d2 uxtb r2, r2
  2196. 80013b8: 701a strb r2, [r3, #0]
  2197. txBuffer[txBufferPos++] = (uint8_t)respStatus;
  2198. 80013ba: 89fb ldrh r3, [r7, #14]
  2199. 80013bc: 1c5a adds r2, r3, #1
  2200. 80013be: 81fa strh r2, [r7, #14]
  2201. 80013c0: 461a mov r2, r3
  2202. 80013c2: 687b ldr r3, [r7, #4]
  2203. 80013c4: 4413 add r3, r2
  2204. 80013c6: 783a ldrb r2, [r7, #0]
  2205. 80013c8: 701a strb r2, [r3, #0]
  2206. if (dataLength > 0) {
  2207. 80013ca: 8bbb ldrh r3, [r7, #28]
  2208. 80013cc: 2b00 cmp r3, #0
  2209. 80013ce: d00b beq.n 80013e8 <PrepareRespFrame+0xf0>
  2210. memcpy (&txBuffer[txBufferPos], dataBuffer, dataLength);
  2211. 80013d0: 89fb ldrh r3, [r7, #14]
  2212. 80013d2: 687a ldr r2, [r7, #4]
  2213. 80013d4: 4413 add r3, r2
  2214. 80013d6: 8bba ldrh r2, [r7, #28]
  2215. 80013d8: 69b9 ldr r1, [r7, #24]
  2216. 80013da: 4618 mov r0, r3
  2217. 80013dc: f00e f82d bl 800f43a <memcpy>
  2218. txBufferPos += dataLength;
  2219. 80013e0: 89fa ldrh r2, [r7, #14]
  2220. 80013e2: 8bbb ldrh r3, [r7, #28]
  2221. 80013e4: 4413 add r3, r2
  2222. 80013e6: 81fb strh r3, [r7, #14]
  2223. }
  2224. crc = HAL_CRC_Calculate (&hcrc, (uint32_t*)txBuffer, txBufferPos);
  2225. 80013e8: 89fb ldrh r3, [r7, #14]
  2226. 80013ea: 461a mov r2, r3
  2227. 80013ec: 6879 ldr r1, [r7, #4]
  2228. 80013ee: 4810 ldr r0, [pc, #64] @ (8001430 <PrepareRespFrame+0x138>)
  2229. 80013f0: f001 fb0a bl 8002a08 <HAL_CRC_Calculate>
  2230. 80013f4: 4603 mov r3, r0
  2231. 80013f6: 81bb strh r3, [r7, #12]
  2232. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (crc);
  2233. 80013f8: 89fb ldrh r3, [r7, #14]
  2234. 80013fa: 1c5a adds r2, r3, #1
  2235. 80013fc: 81fa strh r2, [r7, #14]
  2236. 80013fe: 461a mov r2, r3
  2237. 8001400: 687b ldr r3, [r7, #4]
  2238. 8001402: 4413 add r3, r2
  2239. 8001404: 89ba ldrh r2, [r7, #12]
  2240. 8001406: b2d2 uxtb r2, r2
  2241. 8001408: 701a strb r2, [r3, #0]
  2242. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (crc);
  2243. 800140a: 89bb ldrh r3, [r7, #12]
  2244. 800140c: 0a1b lsrs r3, r3, #8
  2245. 800140e: b29a uxth r2, r3
  2246. 8001410: 89fb ldrh r3, [r7, #14]
  2247. 8001412: 1c59 adds r1, r3, #1
  2248. 8001414: 81f9 strh r1, [r7, #14]
  2249. 8001416: 4619 mov r1, r3
  2250. 8001418: 687b ldr r3, [r7, #4]
  2251. 800141a: 440b add r3, r1
  2252. 800141c: b2d2 uxtb r2, r2
  2253. 800141e: 701a strb r2, [r3, #0]
  2254. return txBufferPos;
  2255. 8001420: 89fb ldrh r3, [r7, #14]
  2256. }
  2257. 8001422: 4618 mov r0, r3
  2258. 8001424: 3710 adds r7, #16
  2259. 8001426: 46bd mov sp, r7
  2260. 8001428: bd80 pop {r7, pc}
  2261. 800142a: bf00 nop
  2262. 800142c: ffff8000 .word 0xffff8000
  2263. 8001430: 2400008c .word 0x2400008c
  2264. 08001434 <HAL_MspInit>:
  2265. /* USER CODE END 0 */
  2266. /**
  2267. * Initializes the Global MSP.
  2268. */
  2269. void HAL_MspInit(void)
  2270. {
  2271. 8001434: b580 push {r7, lr}
  2272. 8001436: b082 sub sp, #8
  2273. 8001438: af00 add r7, sp, #0
  2274. /* USER CODE BEGIN MspInit 0 */
  2275. /* USER CODE END MspInit 0 */
  2276. __HAL_RCC_SYSCFG_CLK_ENABLE();
  2277. 800143a: 4b10 ldr r3, [pc, #64] @ (800147c <HAL_MspInit+0x48>)
  2278. 800143c: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  2279. 8001440: 4a0e ldr r2, [pc, #56] @ (800147c <HAL_MspInit+0x48>)
  2280. 8001442: f043 0302 orr.w r3, r3, #2
  2281. 8001446: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  2282. 800144a: 4b0c ldr r3, [pc, #48] @ (800147c <HAL_MspInit+0x48>)
  2283. 800144c: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  2284. 8001450: f003 0302 and.w r3, r3, #2
  2285. 8001454: 607b str r3, [r7, #4]
  2286. 8001456: 687b ldr r3, [r7, #4]
  2287. /* System interrupt init*/
  2288. /* PendSV_IRQn interrupt configuration */
  2289. HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
  2290. 8001458: 2200 movs r2, #0
  2291. 800145a: 210f movs r1, #15
  2292. 800145c: f06f 0001 mvn.w r0, #1
  2293. 8001460: f001 f9ce bl 8002800 <HAL_NVIC_SetPriority>
  2294. /* Peripheral interrupt init */
  2295. /* RCC_IRQn interrupt configuration */
  2296. HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
  2297. 8001464: 2200 movs r2, #0
  2298. 8001466: 2105 movs r1, #5
  2299. 8001468: 2005 movs r0, #5
  2300. 800146a: f001 f9c9 bl 8002800 <HAL_NVIC_SetPriority>
  2301. HAL_NVIC_EnableIRQ(RCC_IRQn);
  2302. 800146e: 2005 movs r0, #5
  2303. 8001470: f001 f9e0 bl 8002834 <HAL_NVIC_EnableIRQ>
  2304. /* USER CODE BEGIN MspInit 1 */
  2305. /* USER CODE END MspInit 1 */
  2306. }
  2307. 8001474: bf00 nop
  2308. 8001476: 3708 adds r7, #8
  2309. 8001478: 46bd mov sp, r7
  2310. 800147a: bd80 pop {r7, pc}
  2311. 800147c: 58024400 .word 0x58024400
  2312. 08001480 <HAL_CRC_MspInit>:
  2313. * This function configures the hardware resources used in this example
  2314. * @param hcrc: CRC handle pointer
  2315. * @retval None
  2316. */
  2317. void HAL_CRC_MspInit(CRC_HandleTypeDef* hcrc)
  2318. {
  2319. 8001480: b480 push {r7}
  2320. 8001482: b085 sub sp, #20
  2321. 8001484: af00 add r7, sp, #0
  2322. 8001486: 6078 str r0, [r7, #4]
  2323. if(hcrc->Instance==CRC)
  2324. 8001488: 687b ldr r3, [r7, #4]
  2325. 800148a: 681b ldr r3, [r3, #0]
  2326. 800148c: 4a0b ldr r2, [pc, #44] @ (80014bc <HAL_CRC_MspInit+0x3c>)
  2327. 800148e: 4293 cmp r3, r2
  2328. 8001490: d10e bne.n 80014b0 <HAL_CRC_MspInit+0x30>
  2329. {
  2330. /* USER CODE BEGIN CRC_MspInit 0 */
  2331. /* USER CODE END CRC_MspInit 0 */
  2332. /* Peripheral clock enable */
  2333. __HAL_RCC_CRC_CLK_ENABLE();
  2334. 8001492: 4b0b ldr r3, [pc, #44] @ (80014c0 <HAL_CRC_MspInit+0x40>)
  2335. 8001494: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2336. 8001498: 4a09 ldr r2, [pc, #36] @ (80014c0 <HAL_CRC_MspInit+0x40>)
  2337. 800149a: f443 2300 orr.w r3, r3, #524288 @ 0x80000
  2338. 800149e: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2339. 80014a2: 4b07 ldr r3, [pc, #28] @ (80014c0 <HAL_CRC_MspInit+0x40>)
  2340. 80014a4: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2341. 80014a8: f403 2300 and.w r3, r3, #524288 @ 0x80000
  2342. 80014ac: 60fb str r3, [r7, #12]
  2343. 80014ae: 68fb ldr r3, [r7, #12]
  2344. /* USER CODE BEGIN CRC_MspInit 1 */
  2345. /* USER CODE END CRC_MspInit 1 */
  2346. }
  2347. }
  2348. 80014b0: bf00 nop
  2349. 80014b2: 3714 adds r7, #20
  2350. 80014b4: 46bd mov sp, r7
  2351. 80014b6: f85d 7b04 ldr.w r7, [sp], #4
  2352. 80014ba: 4770 bx lr
  2353. 80014bc: 58024c00 .word 0x58024c00
  2354. 80014c0: 58024400 .word 0x58024400
  2355. 080014c4 <HAL_RNG_MspInit>:
  2356. * This function configures the hardware resources used in this example
  2357. * @param hrng: RNG handle pointer
  2358. * @retval None
  2359. */
  2360. void HAL_RNG_MspInit(RNG_HandleTypeDef* hrng)
  2361. {
  2362. 80014c4: b580 push {r7, lr}
  2363. 80014c6: b0b4 sub sp, #208 @ 0xd0
  2364. 80014c8: af00 add r7, sp, #0
  2365. 80014ca: 6078 str r0, [r7, #4]
  2366. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  2367. 80014cc: f107 0310 add.w r3, r7, #16
  2368. 80014d0: 22c0 movs r2, #192 @ 0xc0
  2369. 80014d2: 2100 movs r1, #0
  2370. 80014d4: 4618 mov r0, r3
  2371. 80014d6: f00d fede bl 800f296 <memset>
  2372. if(hrng->Instance==RNG)
  2373. 80014da: 687b ldr r3, [r7, #4]
  2374. 80014dc: 681b ldr r3, [r3, #0]
  2375. 80014de: 4a14 ldr r2, [pc, #80] @ (8001530 <HAL_RNG_MspInit+0x6c>)
  2376. 80014e0: 4293 cmp r3, r2
  2377. 80014e2: d121 bne.n 8001528 <HAL_RNG_MspInit+0x64>
  2378. /* USER CODE END RNG_MspInit 0 */
  2379. /** Initializes the peripherals clock
  2380. */
  2381. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RNG;
  2382. 80014e4: f44f 3200 mov.w r2, #131072 @ 0x20000
  2383. 80014e8: f04f 0300 mov.w r3, #0
  2384. 80014ec: e9c7 2304 strd r2, r3, [r7, #16]
  2385. PeriphClkInitStruct.RngClockSelection = RCC_RNGCLKSOURCE_HSI48;
  2386. 80014f0: 2300 movs r3, #0
  2387. 80014f2: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  2388. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  2389. 80014f6: f107 0310 add.w r3, r7, #16
  2390. 80014fa: 4618 mov r0, r3
  2391. 80014fc: f005 f85e bl 80065bc <HAL_RCCEx_PeriphCLKConfig>
  2392. 8001500: 4603 mov r3, r0
  2393. 8001502: 2b00 cmp r3, #0
  2394. 8001504: d001 beq.n 800150a <HAL_RNG_MspInit+0x46>
  2395. {
  2396. Error_Handler();
  2397. 8001506: f7ff fb9f bl 8000c48 <Error_Handler>
  2398. }
  2399. /* Peripheral clock enable */
  2400. __HAL_RCC_RNG_CLK_ENABLE();
  2401. 800150a: 4b0a ldr r3, [pc, #40] @ (8001534 <HAL_RNG_MspInit+0x70>)
  2402. 800150c: f8d3 30dc ldr.w r3, [r3, #220] @ 0xdc
  2403. 8001510: 4a08 ldr r2, [pc, #32] @ (8001534 <HAL_RNG_MspInit+0x70>)
  2404. 8001512: f043 0340 orr.w r3, r3, #64 @ 0x40
  2405. 8001516: f8c2 30dc str.w r3, [r2, #220] @ 0xdc
  2406. 800151a: 4b06 ldr r3, [pc, #24] @ (8001534 <HAL_RNG_MspInit+0x70>)
  2407. 800151c: f8d3 30dc ldr.w r3, [r3, #220] @ 0xdc
  2408. 8001520: f003 0340 and.w r3, r3, #64 @ 0x40
  2409. 8001524: 60fb str r3, [r7, #12]
  2410. 8001526: 68fb ldr r3, [r7, #12]
  2411. /* USER CODE BEGIN RNG_MspInit 1 */
  2412. /* USER CODE END RNG_MspInit 1 */
  2413. }
  2414. }
  2415. 8001528: bf00 nop
  2416. 800152a: 37d0 adds r7, #208 @ 0xd0
  2417. 800152c: 46bd mov sp, r7
  2418. 800152e: bd80 pop {r7, pc}
  2419. 8001530: 48021800 .word 0x48021800
  2420. 8001534: 58024400 .word 0x58024400
  2421. 08001538 <HAL_UART_MspInit>:
  2422. * This function configures the hardware resources used in this example
  2423. * @param huart: UART handle pointer
  2424. * @retval None
  2425. */
  2426. void HAL_UART_MspInit(UART_HandleTypeDef* huart)
  2427. {
  2428. 8001538: b580 push {r7, lr}
  2429. 800153a: b0bc sub sp, #240 @ 0xf0
  2430. 800153c: af00 add r7, sp, #0
  2431. 800153e: 6078 str r0, [r7, #4]
  2432. GPIO_InitTypeDef GPIO_InitStruct = {0};
  2433. 8001540: f107 03dc add.w r3, r7, #220 @ 0xdc
  2434. 8001544: 2200 movs r2, #0
  2435. 8001546: 601a str r2, [r3, #0]
  2436. 8001548: 605a str r2, [r3, #4]
  2437. 800154a: 609a str r2, [r3, #8]
  2438. 800154c: 60da str r2, [r3, #12]
  2439. 800154e: 611a str r2, [r3, #16]
  2440. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  2441. 8001550: f107 0318 add.w r3, r7, #24
  2442. 8001554: 22c0 movs r2, #192 @ 0xc0
  2443. 8001556: 2100 movs r1, #0
  2444. 8001558: 4618 mov r0, r3
  2445. 800155a: f00d fe9c bl 800f296 <memset>
  2446. if(huart->Instance==UART8)
  2447. 800155e: 687b ldr r3, [r7, #4]
  2448. 8001560: 681b ldr r3, [r3, #0]
  2449. 8001562: 4a84 ldr r2, [pc, #528] @ (8001774 <HAL_UART_MspInit+0x23c>)
  2450. 8001564: 4293 cmp r3, r2
  2451. 8001566: f040 80ac bne.w 80016c2 <HAL_UART_MspInit+0x18a>
  2452. /* USER CODE END UART8_MspInit 0 */
  2453. /** Initializes the peripherals clock
  2454. */
  2455. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_UART8;
  2456. 800156a: f04f 0202 mov.w r2, #2
  2457. 800156e: f04f 0300 mov.w r3, #0
  2458. 8001572: e9c7 2306 strd r2, r3, [r7, #24]
  2459. PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
  2460. 8001576: 2300 movs r3, #0
  2461. 8001578: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  2462. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  2463. 800157c: f107 0318 add.w r3, r7, #24
  2464. 8001580: 4618 mov r0, r3
  2465. 8001582: f005 f81b bl 80065bc <HAL_RCCEx_PeriphCLKConfig>
  2466. 8001586: 4603 mov r3, r0
  2467. 8001588: 2b00 cmp r3, #0
  2468. 800158a: d001 beq.n 8001590 <HAL_UART_MspInit+0x58>
  2469. {
  2470. Error_Handler();
  2471. 800158c: f7ff fb5c bl 8000c48 <Error_Handler>
  2472. }
  2473. /* Peripheral clock enable */
  2474. __HAL_RCC_UART8_CLK_ENABLE();
  2475. 8001590: 4b79 ldr r3, [pc, #484] @ (8001778 <HAL_UART_MspInit+0x240>)
  2476. 8001592: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  2477. 8001596: 4a78 ldr r2, [pc, #480] @ (8001778 <HAL_UART_MspInit+0x240>)
  2478. 8001598: f043 4300 orr.w r3, r3, #2147483648 @ 0x80000000
  2479. 800159c: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  2480. 80015a0: 4b75 ldr r3, [pc, #468] @ (8001778 <HAL_UART_MspInit+0x240>)
  2481. 80015a2: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  2482. 80015a6: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000
  2483. 80015aa: 617b str r3, [r7, #20]
  2484. 80015ac: 697b ldr r3, [r7, #20]
  2485. __HAL_RCC_GPIOE_CLK_ENABLE();
  2486. 80015ae: 4b72 ldr r3, [pc, #456] @ (8001778 <HAL_UART_MspInit+0x240>)
  2487. 80015b0: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2488. 80015b4: 4a70 ldr r2, [pc, #448] @ (8001778 <HAL_UART_MspInit+0x240>)
  2489. 80015b6: f043 0310 orr.w r3, r3, #16
  2490. 80015ba: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2491. 80015be: 4b6e ldr r3, [pc, #440] @ (8001778 <HAL_UART_MspInit+0x240>)
  2492. 80015c0: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2493. 80015c4: f003 0310 and.w r3, r3, #16
  2494. 80015c8: 613b str r3, [r7, #16]
  2495. 80015ca: 693b ldr r3, [r7, #16]
  2496. /**UART8 GPIO Configuration
  2497. PE0 ------> UART8_RX
  2498. PE1 ------> UART8_TX
  2499. */
  2500. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
  2501. 80015cc: 2303 movs r3, #3
  2502. 80015ce: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  2503. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  2504. 80015d2: 2302 movs r3, #2
  2505. 80015d4: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  2506. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2507. 80015d8: 2300 movs r3, #0
  2508. 80015da: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  2509. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  2510. 80015de: 2300 movs r3, #0
  2511. 80015e0: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  2512. GPIO_InitStruct.Alternate = GPIO_AF8_UART8;
  2513. 80015e4: 2308 movs r3, #8
  2514. 80015e6: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  2515. HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  2516. 80015ea: f107 03dc add.w r3, r7, #220 @ 0xdc
  2517. 80015ee: 4619 mov r1, r3
  2518. 80015f0: 4862 ldr r0, [pc, #392] @ (800177c <HAL_UART_MspInit+0x244>)
  2519. 80015f2: f003 fdd1 bl 8005198 <HAL_GPIO_Init>
  2520. /* UART8 DMA Init */
  2521. /* UART8_RX Init */
  2522. hdma_uart8_rx.Instance = DMA2_Stream7;
  2523. 80015f6: 4b62 ldr r3, [pc, #392] @ (8001780 <HAL_UART_MspInit+0x248>)
  2524. 80015f8: 4a62 ldr r2, [pc, #392] @ (8001784 <HAL_UART_MspInit+0x24c>)
  2525. 80015fa: 601a str r2, [r3, #0]
  2526. hdma_uart8_rx.Init.Request = DMA_REQUEST_UART8_RX;
  2527. 80015fc: 4b60 ldr r3, [pc, #384] @ (8001780 <HAL_UART_MspInit+0x248>)
  2528. 80015fe: 2251 movs r2, #81 @ 0x51
  2529. 8001600: 605a str r2, [r3, #4]
  2530. hdma_uart8_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
  2531. 8001602: 4b5f ldr r3, [pc, #380] @ (8001780 <HAL_UART_MspInit+0x248>)
  2532. 8001604: 2200 movs r2, #0
  2533. 8001606: 609a str r2, [r3, #8]
  2534. hdma_uart8_rx.Init.PeriphInc = DMA_PINC_DISABLE;
  2535. 8001608: 4b5d ldr r3, [pc, #372] @ (8001780 <HAL_UART_MspInit+0x248>)
  2536. 800160a: 2200 movs r2, #0
  2537. 800160c: 60da str r2, [r3, #12]
  2538. hdma_uart8_rx.Init.MemInc = DMA_MINC_ENABLE;
  2539. 800160e: 4b5c ldr r3, [pc, #368] @ (8001780 <HAL_UART_MspInit+0x248>)
  2540. 8001610: f44f 6280 mov.w r2, #1024 @ 0x400
  2541. 8001614: 611a str r2, [r3, #16]
  2542. hdma_uart8_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  2543. 8001616: 4b5a ldr r3, [pc, #360] @ (8001780 <HAL_UART_MspInit+0x248>)
  2544. 8001618: 2200 movs r2, #0
  2545. 800161a: 615a str r2, [r3, #20]
  2546. hdma_uart8_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  2547. 800161c: 4b58 ldr r3, [pc, #352] @ (8001780 <HAL_UART_MspInit+0x248>)
  2548. 800161e: 2200 movs r2, #0
  2549. 8001620: 619a str r2, [r3, #24]
  2550. hdma_uart8_rx.Init.Mode = DMA_NORMAL;
  2551. 8001622: 4b57 ldr r3, [pc, #348] @ (8001780 <HAL_UART_MspInit+0x248>)
  2552. 8001624: 2200 movs r2, #0
  2553. 8001626: 61da str r2, [r3, #28]
  2554. hdma_uart8_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH;
  2555. 8001628: 4b55 ldr r3, [pc, #340] @ (8001780 <HAL_UART_MspInit+0x248>)
  2556. 800162a: f44f 3240 mov.w r2, #196608 @ 0x30000
  2557. 800162e: 621a str r2, [r3, #32]
  2558. hdma_uart8_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  2559. 8001630: 4b53 ldr r3, [pc, #332] @ (8001780 <HAL_UART_MspInit+0x248>)
  2560. 8001632: 2200 movs r2, #0
  2561. 8001634: 625a str r2, [r3, #36] @ 0x24
  2562. if (HAL_DMA_Init(&hdma_uart8_rx) != HAL_OK)
  2563. 8001636: 4852 ldr r0, [pc, #328] @ (8001780 <HAL_UART_MspInit+0x248>)
  2564. 8001638: f001 fb88 bl 8002d4c <HAL_DMA_Init>
  2565. 800163c: 4603 mov r3, r0
  2566. 800163e: 2b00 cmp r3, #0
  2567. 8001640: d001 beq.n 8001646 <HAL_UART_MspInit+0x10e>
  2568. {
  2569. Error_Handler();
  2570. 8001642: f7ff fb01 bl 8000c48 <Error_Handler>
  2571. }
  2572. __HAL_LINKDMA(huart,hdmarx,hdma_uart8_rx);
  2573. 8001646: 687b ldr r3, [r7, #4]
  2574. 8001648: 4a4d ldr r2, [pc, #308] @ (8001780 <HAL_UART_MspInit+0x248>)
  2575. 800164a: f8c3 2080 str.w r2, [r3, #128] @ 0x80
  2576. 800164e: 4a4c ldr r2, [pc, #304] @ (8001780 <HAL_UART_MspInit+0x248>)
  2577. 8001650: 687b ldr r3, [r7, #4]
  2578. 8001652: 6393 str r3, [r2, #56] @ 0x38
  2579. /* UART8_TX Init */
  2580. hdma_uart8_tx.Instance = DMA2_Stream6;
  2581. 8001654: 4b4c ldr r3, [pc, #304] @ (8001788 <HAL_UART_MspInit+0x250>)
  2582. 8001656: 4a4d ldr r2, [pc, #308] @ (800178c <HAL_UART_MspInit+0x254>)
  2583. 8001658: 601a str r2, [r3, #0]
  2584. hdma_uart8_tx.Init.Request = DMA_REQUEST_UART8_TX;
  2585. 800165a: 4b4b ldr r3, [pc, #300] @ (8001788 <HAL_UART_MspInit+0x250>)
  2586. 800165c: 2252 movs r2, #82 @ 0x52
  2587. 800165e: 605a str r2, [r3, #4]
  2588. hdma_uart8_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
  2589. 8001660: 4b49 ldr r3, [pc, #292] @ (8001788 <HAL_UART_MspInit+0x250>)
  2590. 8001662: 2240 movs r2, #64 @ 0x40
  2591. 8001664: 609a str r2, [r3, #8]
  2592. hdma_uart8_tx.Init.PeriphInc = DMA_PINC_DISABLE;
  2593. 8001666: 4b48 ldr r3, [pc, #288] @ (8001788 <HAL_UART_MspInit+0x250>)
  2594. 8001668: 2200 movs r2, #0
  2595. 800166a: 60da str r2, [r3, #12]
  2596. hdma_uart8_tx.Init.MemInc = DMA_MINC_ENABLE;
  2597. 800166c: 4b46 ldr r3, [pc, #280] @ (8001788 <HAL_UART_MspInit+0x250>)
  2598. 800166e: f44f 6280 mov.w r2, #1024 @ 0x400
  2599. 8001672: 611a str r2, [r3, #16]
  2600. hdma_uart8_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  2601. 8001674: 4b44 ldr r3, [pc, #272] @ (8001788 <HAL_UART_MspInit+0x250>)
  2602. 8001676: 2200 movs r2, #0
  2603. 8001678: 615a str r2, [r3, #20]
  2604. hdma_uart8_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  2605. 800167a: 4b43 ldr r3, [pc, #268] @ (8001788 <HAL_UART_MspInit+0x250>)
  2606. 800167c: 2200 movs r2, #0
  2607. 800167e: 619a str r2, [r3, #24]
  2608. hdma_uart8_tx.Init.Mode = DMA_NORMAL;
  2609. 8001680: 4b41 ldr r3, [pc, #260] @ (8001788 <HAL_UART_MspInit+0x250>)
  2610. 8001682: 2200 movs r2, #0
  2611. 8001684: 61da str r2, [r3, #28]
  2612. hdma_uart8_tx.Init.Priority = DMA_PRIORITY_VERY_HIGH;
  2613. 8001686: 4b40 ldr r3, [pc, #256] @ (8001788 <HAL_UART_MspInit+0x250>)
  2614. 8001688: f44f 3240 mov.w r2, #196608 @ 0x30000
  2615. 800168c: 621a str r2, [r3, #32]
  2616. hdma_uart8_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  2617. 800168e: 4b3e ldr r3, [pc, #248] @ (8001788 <HAL_UART_MspInit+0x250>)
  2618. 8001690: 2200 movs r2, #0
  2619. 8001692: 625a str r2, [r3, #36] @ 0x24
  2620. if (HAL_DMA_Init(&hdma_uart8_tx) != HAL_OK)
  2621. 8001694: 483c ldr r0, [pc, #240] @ (8001788 <HAL_UART_MspInit+0x250>)
  2622. 8001696: f001 fb59 bl 8002d4c <HAL_DMA_Init>
  2623. 800169a: 4603 mov r3, r0
  2624. 800169c: 2b00 cmp r3, #0
  2625. 800169e: d001 beq.n 80016a4 <HAL_UART_MspInit+0x16c>
  2626. {
  2627. Error_Handler();
  2628. 80016a0: f7ff fad2 bl 8000c48 <Error_Handler>
  2629. }
  2630. __HAL_LINKDMA(huart,hdmatx,hdma_uart8_tx);
  2631. 80016a4: 687b ldr r3, [r7, #4]
  2632. 80016a6: 4a38 ldr r2, [pc, #224] @ (8001788 <HAL_UART_MspInit+0x250>)
  2633. 80016a8: 67da str r2, [r3, #124] @ 0x7c
  2634. 80016aa: 4a37 ldr r2, [pc, #220] @ (8001788 <HAL_UART_MspInit+0x250>)
  2635. 80016ac: 687b ldr r3, [r7, #4]
  2636. 80016ae: 6393 str r3, [r2, #56] @ 0x38
  2637. /* UART8 interrupt Init */
  2638. HAL_NVIC_SetPriority(UART8_IRQn, 5, 0);
  2639. 80016b0: 2200 movs r2, #0
  2640. 80016b2: 2105 movs r1, #5
  2641. 80016b4: 2053 movs r0, #83 @ 0x53
  2642. 80016b6: f001 f8a3 bl 8002800 <HAL_NVIC_SetPriority>
  2643. HAL_NVIC_EnableIRQ(UART8_IRQn);
  2644. 80016ba: 2053 movs r0, #83 @ 0x53
  2645. 80016bc: f001 f8ba bl 8002834 <HAL_NVIC_EnableIRQ>
  2646. /* USER CODE BEGIN USART1_MspInit 1 */
  2647. /* USER CODE END USART1_MspInit 1 */
  2648. }
  2649. }
  2650. 80016c0: e053 b.n 800176a <HAL_UART_MspInit+0x232>
  2651. else if(huart->Instance==USART1)
  2652. 80016c2: 687b ldr r3, [r7, #4]
  2653. 80016c4: 681b ldr r3, [r3, #0]
  2654. 80016c6: 4a32 ldr r2, [pc, #200] @ (8001790 <HAL_UART_MspInit+0x258>)
  2655. 80016c8: 4293 cmp r3, r2
  2656. 80016ca: d14e bne.n 800176a <HAL_UART_MspInit+0x232>
  2657. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1;
  2658. 80016cc: f04f 0201 mov.w r2, #1
  2659. 80016d0: f04f 0300 mov.w r3, #0
  2660. 80016d4: e9c7 2306 strd r2, r3, [r7, #24]
  2661. PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2;
  2662. 80016d8: 2300 movs r3, #0
  2663. 80016da: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  2664. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  2665. 80016de: f107 0318 add.w r3, r7, #24
  2666. 80016e2: 4618 mov r0, r3
  2667. 80016e4: f004 ff6a bl 80065bc <HAL_RCCEx_PeriphCLKConfig>
  2668. 80016e8: 4603 mov r3, r0
  2669. 80016ea: 2b00 cmp r3, #0
  2670. 80016ec: d001 beq.n 80016f2 <HAL_UART_MspInit+0x1ba>
  2671. Error_Handler();
  2672. 80016ee: f7ff faab bl 8000c48 <Error_Handler>
  2673. __HAL_RCC_USART1_CLK_ENABLE();
  2674. 80016f2: 4b21 ldr r3, [pc, #132] @ (8001778 <HAL_UART_MspInit+0x240>)
  2675. 80016f4: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  2676. 80016f8: 4a1f ldr r2, [pc, #124] @ (8001778 <HAL_UART_MspInit+0x240>)
  2677. 80016fa: f043 0310 orr.w r3, r3, #16
  2678. 80016fe: f8c2 30f0 str.w r3, [r2, #240] @ 0xf0
  2679. 8001702: 4b1d ldr r3, [pc, #116] @ (8001778 <HAL_UART_MspInit+0x240>)
  2680. 8001704: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  2681. 8001708: f003 0310 and.w r3, r3, #16
  2682. 800170c: 60fb str r3, [r7, #12]
  2683. 800170e: 68fb ldr r3, [r7, #12]
  2684. __HAL_RCC_GPIOB_CLK_ENABLE();
  2685. 8001710: 4b19 ldr r3, [pc, #100] @ (8001778 <HAL_UART_MspInit+0x240>)
  2686. 8001712: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2687. 8001716: 4a18 ldr r2, [pc, #96] @ (8001778 <HAL_UART_MspInit+0x240>)
  2688. 8001718: f043 0302 orr.w r3, r3, #2
  2689. 800171c: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2690. 8001720: 4b15 ldr r3, [pc, #84] @ (8001778 <HAL_UART_MspInit+0x240>)
  2691. 8001722: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2692. 8001726: f003 0302 and.w r3, r3, #2
  2693. 800172a: 60bb str r3, [r7, #8]
  2694. 800172c: 68bb ldr r3, [r7, #8]
  2695. GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
  2696. 800172e: f44f 4340 mov.w r3, #49152 @ 0xc000
  2697. 8001732: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  2698. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  2699. 8001736: 2302 movs r3, #2
  2700. 8001738: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  2701. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2702. 800173c: 2300 movs r3, #0
  2703. 800173e: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  2704. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  2705. 8001742: 2300 movs r3, #0
  2706. 8001744: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  2707. GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
  2708. 8001748: 2304 movs r3, #4
  2709. 800174a: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  2710. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  2711. 800174e: f107 03dc add.w r3, r7, #220 @ 0xdc
  2712. 8001752: 4619 mov r1, r3
  2713. 8001754: 480f ldr r0, [pc, #60] @ (8001794 <HAL_UART_MspInit+0x25c>)
  2714. 8001756: f003 fd1f bl 8005198 <HAL_GPIO_Init>
  2715. HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
  2716. 800175a: 2200 movs r2, #0
  2717. 800175c: 2105 movs r1, #5
  2718. 800175e: 2025 movs r0, #37 @ 0x25
  2719. 8001760: f001 f84e bl 8002800 <HAL_NVIC_SetPriority>
  2720. HAL_NVIC_EnableIRQ(USART1_IRQn);
  2721. 8001764: 2025 movs r0, #37 @ 0x25
  2722. 8001766: f001 f865 bl 8002834 <HAL_NVIC_EnableIRQ>
  2723. }
  2724. 800176a: bf00 nop
  2725. 800176c: 37f0 adds r7, #240 @ 0xf0
  2726. 800176e: 46bd mov sp, r7
  2727. 8001770: bd80 pop {r7, pc}
  2728. 8001772: bf00 nop
  2729. 8001774: 40007c00 .word 0x40007c00
  2730. 8001778: 58024400 .word 0x58024400
  2731. 800177c: 58021000 .word 0x58021000
  2732. 8001780: 240001ec .word 0x240001ec
  2733. 8001784: 400204b8 .word 0x400204b8
  2734. 8001788: 24000264 .word 0x24000264
  2735. 800178c: 400204a0 .word 0x400204a0
  2736. 8001790: 40011000 .word 0x40011000
  2737. 8001794: 58020400 .word 0x58020400
  2738. 08001798 <HAL_InitTick>:
  2739. * reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig().
  2740. * @param TickPriority: Tick interrupt priority.
  2741. * @retval HAL status
  2742. */
  2743. HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
  2744. {
  2745. 8001798: b580 push {r7, lr}
  2746. 800179a: b090 sub sp, #64 @ 0x40
  2747. 800179c: af00 add r7, sp, #0
  2748. 800179e: 6078 str r0, [r7, #4]
  2749. uint32_t uwTimclock, uwAPB1Prescaler;
  2750. uint32_t uwPrescalerValue;
  2751. uint32_t pFLatency;
  2752. /*Configure the TIM6 IRQ priority */
  2753. if (TickPriority < (1UL << __NVIC_PRIO_BITS))
  2754. 80017a0: 687b ldr r3, [r7, #4]
  2755. 80017a2: 2b0f cmp r3, #15
  2756. 80017a4: d827 bhi.n 80017f6 <HAL_InitTick+0x5e>
  2757. {
  2758. HAL_NVIC_SetPriority(TIM6_DAC_IRQn, TickPriority ,0U);
  2759. 80017a6: 2200 movs r2, #0
  2760. 80017a8: 6879 ldr r1, [r7, #4]
  2761. 80017aa: 2036 movs r0, #54 @ 0x36
  2762. 80017ac: f001 f828 bl 8002800 <HAL_NVIC_SetPriority>
  2763. /* Enable the TIM6 global Interrupt */
  2764. HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
  2765. 80017b0: 2036 movs r0, #54 @ 0x36
  2766. 80017b2: f001 f83f bl 8002834 <HAL_NVIC_EnableIRQ>
  2767. uwTickPrio = TickPriority;
  2768. 80017b6: 4a29 ldr r2, [pc, #164] @ (800185c <HAL_InitTick+0xc4>)
  2769. 80017b8: 687b ldr r3, [r7, #4]
  2770. 80017ba: 6013 str r3, [r2, #0]
  2771. {
  2772. return HAL_ERROR;
  2773. }
  2774. /* Enable TIM6 clock */
  2775. __HAL_RCC_TIM6_CLK_ENABLE();
  2776. 80017bc: 4b28 ldr r3, [pc, #160] @ (8001860 <HAL_InitTick+0xc8>)
  2777. 80017be: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  2778. 80017c2: 4a27 ldr r2, [pc, #156] @ (8001860 <HAL_InitTick+0xc8>)
  2779. 80017c4: f043 0310 orr.w r3, r3, #16
  2780. 80017c8: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  2781. 80017cc: 4b24 ldr r3, [pc, #144] @ (8001860 <HAL_InitTick+0xc8>)
  2782. 80017ce: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  2783. 80017d2: f003 0310 and.w r3, r3, #16
  2784. 80017d6: 60fb str r3, [r7, #12]
  2785. 80017d8: 68fb ldr r3, [r7, #12]
  2786. /* Get clock configuration */
  2787. HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);
  2788. 80017da: f107 0210 add.w r2, r7, #16
  2789. 80017de: f107 0314 add.w r3, r7, #20
  2790. 80017e2: 4611 mov r1, r2
  2791. 80017e4: 4618 mov r0, r3
  2792. 80017e6: f004 fea7 bl 8006538 <HAL_RCC_GetClockConfig>
  2793. /* Get APB1 prescaler */
  2794. uwAPB1Prescaler = clkconfig.APB1CLKDivider;
  2795. 80017ea: 6abb ldr r3, [r7, #40] @ 0x28
  2796. 80017ec: 63bb str r3, [r7, #56] @ 0x38
  2797. /* Compute TIM6 clock */
  2798. if (uwAPB1Prescaler == RCC_HCLK_DIV1)
  2799. 80017ee: 6bbb ldr r3, [r7, #56] @ 0x38
  2800. 80017f0: 2b00 cmp r3, #0
  2801. 80017f2: d106 bne.n 8001802 <HAL_InitTick+0x6a>
  2802. 80017f4: e001 b.n 80017fa <HAL_InitTick+0x62>
  2803. return HAL_ERROR;
  2804. 80017f6: 2301 movs r3, #1
  2805. 80017f8: e02b b.n 8001852 <HAL_InitTick+0xba>
  2806. {
  2807. uwTimclock = HAL_RCC_GetPCLK1Freq();
  2808. 80017fa: f004 fe71 bl 80064e0 <HAL_RCC_GetPCLK1Freq>
  2809. 80017fe: 63f8 str r0, [r7, #60] @ 0x3c
  2810. 8001800: e004 b.n 800180c <HAL_InitTick+0x74>
  2811. }
  2812. else
  2813. {
  2814. uwTimclock = 2UL * HAL_RCC_GetPCLK1Freq();
  2815. 8001802: f004 fe6d bl 80064e0 <HAL_RCC_GetPCLK1Freq>
  2816. 8001806: 4603 mov r3, r0
  2817. 8001808: 005b lsls r3, r3, #1
  2818. 800180a: 63fb str r3, [r7, #60] @ 0x3c
  2819. }
  2820. /* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */
  2821. uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U);
  2822. 800180c: 6bfb ldr r3, [r7, #60] @ 0x3c
  2823. 800180e: 4a15 ldr r2, [pc, #84] @ (8001864 <HAL_InitTick+0xcc>)
  2824. 8001810: fba2 2303 umull r2, r3, r2, r3
  2825. 8001814: 0c9b lsrs r3, r3, #18
  2826. 8001816: 3b01 subs r3, #1
  2827. 8001818: 637b str r3, [r7, #52] @ 0x34
  2828. /* Initialize TIM6 */
  2829. htim6.Instance = TIM6;
  2830. 800181a: 4b13 ldr r3, [pc, #76] @ (8001868 <HAL_InitTick+0xd0>)
  2831. 800181c: 4a13 ldr r2, [pc, #76] @ (800186c <HAL_InitTick+0xd4>)
  2832. 800181e: 601a str r2, [r3, #0]
  2833. + Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base.
  2834. + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.
  2835. + ClockDivision = 0
  2836. + Counter direction = Up
  2837. */
  2838. htim6.Init.Period = (1000000U / 1000U) - 1U;
  2839. 8001820: 4b11 ldr r3, [pc, #68] @ (8001868 <HAL_InitTick+0xd0>)
  2840. 8001822: f240 32e7 movw r2, #999 @ 0x3e7
  2841. 8001826: 60da str r2, [r3, #12]
  2842. htim6.Init.Prescaler = uwPrescalerValue;
  2843. 8001828: 4a0f ldr r2, [pc, #60] @ (8001868 <HAL_InitTick+0xd0>)
  2844. 800182a: 6b7b ldr r3, [r7, #52] @ 0x34
  2845. 800182c: 6053 str r3, [r2, #4]
  2846. htim6.Init.ClockDivision = 0;
  2847. 800182e: 4b0e ldr r3, [pc, #56] @ (8001868 <HAL_InitTick+0xd0>)
  2848. 8001830: 2200 movs r2, #0
  2849. 8001832: 611a str r2, [r3, #16]
  2850. htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
  2851. 8001834: 4b0c ldr r3, [pc, #48] @ (8001868 <HAL_InitTick+0xd0>)
  2852. 8001836: 2200 movs r2, #0
  2853. 8001838: 609a str r2, [r3, #8]
  2854. if(HAL_TIM_Base_Init(&htim6) == HAL_OK)
  2855. 800183a: 480b ldr r0, [pc, #44] @ (8001868 <HAL_InitTick+0xd0>)
  2856. 800183c: f006 fd30 bl 80082a0 <HAL_TIM_Base_Init>
  2857. 8001840: 4603 mov r3, r0
  2858. 8001842: 2b00 cmp r3, #0
  2859. 8001844: d104 bne.n 8001850 <HAL_InitTick+0xb8>
  2860. {
  2861. /* Start the TIM time Base generation in interrupt mode */
  2862. return HAL_TIM_Base_Start_IT(&htim6);
  2863. 8001846: 4808 ldr r0, [pc, #32] @ (8001868 <HAL_InitTick+0xd0>)
  2864. 8001848: f006 fd8c bl 8008364 <HAL_TIM_Base_Start_IT>
  2865. 800184c: 4603 mov r3, r0
  2866. 800184e: e000 b.n 8001852 <HAL_InitTick+0xba>
  2867. }
  2868. /* Return function status */
  2869. return HAL_ERROR;
  2870. 8001850: 2301 movs r3, #1
  2871. }
  2872. 8001852: 4618 mov r0, r3
  2873. 8001854: 3740 adds r7, #64 @ 0x40
  2874. 8001856: 46bd mov sp, r7
  2875. 8001858: bd80 pop {r7, pc}
  2876. 800185a: bf00 nop
  2877. 800185c: 24000008 .word 0x24000008
  2878. 8001860: 58024400 .word 0x58024400
  2879. 8001864: 431bde83 .word 0x431bde83
  2880. 8001868: 240002e0 .word 0x240002e0
  2881. 800186c: 40001000 .word 0x40001000
  2882. 08001870 <NMI_Handler>:
  2883. /******************************************************************************/
  2884. /**
  2885. * @brief This function handles Non maskable interrupt.
  2886. */
  2887. void NMI_Handler(void)
  2888. {
  2889. 8001870: b480 push {r7}
  2890. 8001872: af00 add r7, sp, #0
  2891. /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
  2892. /* USER CODE END NonMaskableInt_IRQn 0 */
  2893. /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
  2894. while (1)
  2895. 8001874: bf00 nop
  2896. 8001876: e7fd b.n 8001874 <NMI_Handler+0x4>
  2897. 08001878 <HardFault_Handler>:
  2898. /**
  2899. * @brief This function handles Hard fault interrupt.
  2900. */
  2901. void HardFault_Handler(void)
  2902. {
  2903. 8001878: b480 push {r7}
  2904. 800187a: af00 add r7, sp, #0
  2905. /* USER CODE BEGIN HardFault_IRQn 0 */
  2906. /* USER CODE END HardFault_IRQn 0 */
  2907. while (1)
  2908. 800187c: bf00 nop
  2909. 800187e: e7fd b.n 800187c <HardFault_Handler+0x4>
  2910. 08001880 <MemManage_Handler>:
  2911. /**
  2912. * @brief This function handles Memory management fault.
  2913. */
  2914. void MemManage_Handler(void)
  2915. {
  2916. 8001880: b480 push {r7}
  2917. 8001882: af00 add r7, sp, #0
  2918. /* USER CODE BEGIN MemoryManagement_IRQn 0 */
  2919. /* USER CODE END MemoryManagement_IRQn 0 */
  2920. while (1)
  2921. 8001884: bf00 nop
  2922. 8001886: e7fd b.n 8001884 <MemManage_Handler+0x4>
  2923. 08001888 <BusFault_Handler>:
  2924. /**
  2925. * @brief This function handles Pre-fetch fault, memory access fault.
  2926. */
  2927. void BusFault_Handler(void)
  2928. {
  2929. 8001888: b480 push {r7}
  2930. 800188a: af00 add r7, sp, #0
  2931. /* USER CODE BEGIN BusFault_IRQn 0 */
  2932. /* USER CODE END BusFault_IRQn 0 */
  2933. while (1)
  2934. 800188c: bf00 nop
  2935. 800188e: e7fd b.n 800188c <BusFault_Handler+0x4>
  2936. 08001890 <UsageFault_Handler>:
  2937. /**
  2938. * @brief This function handles Undefined instruction or illegal state.
  2939. */
  2940. void UsageFault_Handler(void)
  2941. {
  2942. 8001890: b480 push {r7}
  2943. 8001892: af00 add r7, sp, #0
  2944. /* USER CODE BEGIN UsageFault_IRQn 0 */
  2945. /* USER CODE END UsageFault_IRQn 0 */
  2946. while (1)
  2947. 8001894: bf00 nop
  2948. 8001896: e7fd b.n 8001894 <UsageFault_Handler+0x4>
  2949. 08001898 <DebugMon_Handler>:
  2950. /**
  2951. * @brief This function handles Debug monitor.
  2952. */
  2953. void DebugMon_Handler(void)
  2954. {
  2955. 8001898: b480 push {r7}
  2956. 800189a: af00 add r7, sp, #0
  2957. /* USER CODE END DebugMonitor_IRQn 0 */
  2958. /* USER CODE BEGIN DebugMonitor_IRQn 1 */
  2959. /* USER CODE END DebugMonitor_IRQn 1 */
  2960. }
  2961. 800189c: bf00 nop
  2962. 800189e: 46bd mov sp, r7
  2963. 80018a0: f85d 7b04 ldr.w r7, [sp], #4
  2964. 80018a4: 4770 bx lr
  2965. 080018a6 <RCC_IRQHandler>:
  2966. /**
  2967. * @brief This function handles RCC global interrupt.
  2968. */
  2969. void RCC_IRQHandler(void)
  2970. {
  2971. 80018a6: b480 push {r7}
  2972. 80018a8: af00 add r7, sp, #0
  2973. /* USER CODE END RCC_IRQn 0 */
  2974. /* USER CODE BEGIN RCC_IRQn 1 */
  2975. /* USER CODE END RCC_IRQn 1 */
  2976. }
  2977. 80018aa: bf00 nop
  2978. 80018ac: 46bd mov sp, r7
  2979. 80018ae: f85d 7b04 ldr.w r7, [sp], #4
  2980. 80018b2: 4770 bx lr
  2981. 080018b4 <USART1_IRQHandler>:
  2982. /**
  2983. * @brief This function handles USART1 global interrupt.
  2984. */
  2985. void USART1_IRQHandler(void)
  2986. {
  2987. 80018b4: b580 push {r7, lr}
  2988. 80018b6: af00 add r7, sp, #0
  2989. /* USER CODE BEGIN USART1_IRQn 0 */
  2990. /* USER CODE END USART1_IRQn 0 */
  2991. HAL_UART_IRQHandler(&huart1);
  2992. 80018b8: 4802 ldr r0, [pc, #8] @ (80018c4 <USART1_IRQHandler+0x10>)
  2993. 80018ba: f007 f8a3 bl 8008a04 <HAL_UART_IRQHandler>
  2994. /* USER CODE BEGIN USART1_IRQn 1 */
  2995. /* USER CODE END USART1_IRQn 1 */
  2996. }
  2997. 80018be: bf00 nop
  2998. 80018c0: bd80 pop {r7, pc}
  2999. 80018c2: bf00 nop
  3000. 80018c4: 24000158 .word 0x24000158
  3001. 080018c8 <TIM6_DAC_IRQHandler>:
  3002. /**
  3003. * @brief This function handles TIM6 global interrupt, DAC1_CH1 and DAC1_CH2 underrun error interrupts.
  3004. */
  3005. void TIM6_DAC_IRQHandler(void)
  3006. {
  3007. 80018c8: b580 push {r7, lr}
  3008. 80018ca: af00 add r7, sp, #0
  3009. /* USER CODE BEGIN TIM6_DAC_IRQn 0 */
  3010. /* USER CODE END TIM6_DAC_IRQn 0 */
  3011. HAL_TIM_IRQHandler(&htim6);
  3012. 80018cc: 4802 ldr r0, [pc, #8] @ (80018d8 <TIM6_DAC_IRQHandler+0x10>)
  3013. 80018ce: f006 fdc1 bl 8008454 <HAL_TIM_IRQHandler>
  3014. /* USER CODE BEGIN TIM6_DAC_IRQn 1 */
  3015. /* USER CODE END TIM6_DAC_IRQn 1 */
  3016. }
  3017. 80018d2: bf00 nop
  3018. 80018d4: bd80 pop {r7, pc}
  3019. 80018d6: bf00 nop
  3020. 80018d8: 240002e0 .word 0x240002e0
  3021. 080018dc <DMA2_Stream6_IRQHandler>:
  3022. /**
  3023. * @brief This function handles DMA2 stream6 global interrupt.
  3024. */
  3025. void DMA2_Stream6_IRQHandler(void)
  3026. {
  3027. 80018dc: b580 push {r7, lr}
  3028. 80018de: af00 add r7, sp, #0
  3029. /* USER CODE BEGIN DMA2_Stream6_IRQn 0 */
  3030. /* USER CODE END DMA2_Stream6_IRQn 0 */
  3031. HAL_DMA_IRQHandler(&hdma_uart8_tx);
  3032. 80018e0: 4802 ldr r0, [pc, #8] @ (80018ec <DMA2_Stream6_IRQHandler+0x10>)
  3033. 80018e2: f002 faf3 bl 8003ecc <HAL_DMA_IRQHandler>
  3034. /* USER CODE BEGIN DMA2_Stream6_IRQn 1 */
  3035. /* USER CODE END DMA2_Stream6_IRQn 1 */
  3036. }
  3037. 80018e6: bf00 nop
  3038. 80018e8: bd80 pop {r7, pc}
  3039. 80018ea: bf00 nop
  3040. 80018ec: 24000264 .word 0x24000264
  3041. 080018f0 <DMA2_Stream7_IRQHandler>:
  3042. /**
  3043. * @brief This function handles DMA2 stream7 global interrupt.
  3044. */
  3045. void DMA2_Stream7_IRQHandler(void)
  3046. {
  3047. 80018f0: b580 push {r7, lr}
  3048. 80018f2: af00 add r7, sp, #0
  3049. /* USER CODE BEGIN DMA2_Stream7_IRQn 0 */
  3050. /* USER CODE END DMA2_Stream7_IRQn 0 */
  3051. HAL_DMA_IRQHandler(&hdma_uart8_rx);
  3052. 80018f4: 4802 ldr r0, [pc, #8] @ (8001900 <DMA2_Stream7_IRQHandler+0x10>)
  3053. 80018f6: f002 fae9 bl 8003ecc <HAL_DMA_IRQHandler>
  3054. /* USER CODE BEGIN DMA2_Stream7_IRQn 1 */
  3055. /* USER CODE END DMA2_Stream7_IRQn 1 */
  3056. }
  3057. 80018fa: bf00 nop
  3058. 80018fc: bd80 pop {r7, pc}
  3059. 80018fe: bf00 nop
  3060. 8001900: 240001ec .word 0x240001ec
  3061. 08001904 <UART8_IRQHandler>:
  3062. /**
  3063. * @brief This function handles UART8 global interrupt.
  3064. */
  3065. void UART8_IRQHandler(void)
  3066. {
  3067. 8001904: b580 push {r7, lr}
  3068. 8001906: af00 add r7, sp, #0
  3069. /* USER CODE BEGIN UART8_IRQn 0 */
  3070. /* USER CODE END UART8_IRQn 0 */
  3071. HAL_UART_IRQHandler(&huart8);
  3072. 8001908: 4802 ldr r0, [pc, #8] @ (8001914 <UART8_IRQHandler+0x10>)
  3073. 800190a: f007 f87b bl 8008a04 <HAL_UART_IRQHandler>
  3074. /* USER CODE BEGIN UART8_IRQn 1 */
  3075. /* USER CODE END UART8_IRQn 1 */
  3076. }
  3077. 800190e: bf00 nop
  3078. 8001910: bd80 pop {r7, pc}
  3079. 8001912: bf00 nop
  3080. 8001914: 240000c4 .word 0x240000c4
  3081. 08001918 <_read>:
  3082. _kill(status, -1);
  3083. while (1) {} /* Make sure we hang here */
  3084. }
  3085. __attribute__((weak)) int _read(int file, char *ptr, int len)
  3086. {
  3087. 8001918: b580 push {r7, lr}
  3088. 800191a: b086 sub sp, #24
  3089. 800191c: af00 add r7, sp, #0
  3090. 800191e: 60f8 str r0, [r7, #12]
  3091. 8001920: 60b9 str r1, [r7, #8]
  3092. 8001922: 607a str r2, [r7, #4]
  3093. (void)file;
  3094. int DataIdx;
  3095. for (DataIdx = 0; DataIdx < len; DataIdx++)
  3096. 8001924: 2300 movs r3, #0
  3097. 8001926: 617b str r3, [r7, #20]
  3098. 8001928: e00a b.n 8001940 <_read+0x28>
  3099. {
  3100. *ptr++ = __io_getchar();
  3101. 800192a: f3af 8000 nop.w
  3102. 800192e: 4601 mov r1, r0
  3103. 8001930: 68bb ldr r3, [r7, #8]
  3104. 8001932: 1c5a adds r2, r3, #1
  3105. 8001934: 60ba str r2, [r7, #8]
  3106. 8001936: b2ca uxtb r2, r1
  3107. 8001938: 701a strb r2, [r3, #0]
  3108. for (DataIdx = 0; DataIdx < len; DataIdx++)
  3109. 800193a: 697b ldr r3, [r7, #20]
  3110. 800193c: 3301 adds r3, #1
  3111. 800193e: 617b str r3, [r7, #20]
  3112. 8001940: 697a ldr r2, [r7, #20]
  3113. 8001942: 687b ldr r3, [r7, #4]
  3114. 8001944: 429a cmp r2, r3
  3115. 8001946: dbf0 blt.n 800192a <_read+0x12>
  3116. }
  3117. return len;
  3118. 8001948: 687b ldr r3, [r7, #4]
  3119. }
  3120. 800194a: 4618 mov r0, r3
  3121. 800194c: 3718 adds r7, #24
  3122. 800194e: 46bd mov sp, r7
  3123. 8001950: bd80 pop {r7, pc}
  3124. 08001952 <_write>:
  3125. __attribute__((weak)) int _write(int file, char *ptr, int len)
  3126. {
  3127. 8001952: b580 push {r7, lr}
  3128. 8001954: b086 sub sp, #24
  3129. 8001956: af00 add r7, sp, #0
  3130. 8001958: 60f8 str r0, [r7, #12]
  3131. 800195a: 60b9 str r1, [r7, #8]
  3132. 800195c: 607a str r2, [r7, #4]
  3133. (void)file;
  3134. int DataIdx;
  3135. for (DataIdx = 0; DataIdx < len; DataIdx++)
  3136. 800195e: 2300 movs r3, #0
  3137. 8001960: 617b str r3, [r7, #20]
  3138. 8001962: e009 b.n 8001978 <_write+0x26>
  3139. {
  3140. __io_putchar(*ptr++);
  3141. 8001964: 68bb ldr r3, [r7, #8]
  3142. 8001966: 1c5a adds r2, r3, #1
  3143. 8001968: 60ba str r2, [r7, #8]
  3144. 800196a: 781b ldrb r3, [r3, #0]
  3145. 800196c: 4618 mov r0, r3
  3146. 800196e: f3af 8000 nop.w
  3147. for (DataIdx = 0; DataIdx < len; DataIdx++)
  3148. 8001972: 697b ldr r3, [r7, #20]
  3149. 8001974: 3301 adds r3, #1
  3150. 8001976: 617b str r3, [r7, #20]
  3151. 8001978: 697a ldr r2, [r7, #20]
  3152. 800197a: 687b ldr r3, [r7, #4]
  3153. 800197c: 429a cmp r2, r3
  3154. 800197e: dbf1 blt.n 8001964 <_write+0x12>
  3155. }
  3156. return len;
  3157. 8001980: 687b ldr r3, [r7, #4]
  3158. }
  3159. 8001982: 4618 mov r0, r3
  3160. 8001984: 3718 adds r7, #24
  3161. 8001986: 46bd mov sp, r7
  3162. 8001988: bd80 pop {r7, pc}
  3163. 0800198a <_close>:
  3164. int _close(int file)
  3165. {
  3166. 800198a: b480 push {r7}
  3167. 800198c: b083 sub sp, #12
  3168. 800198e: af00 add r7, sp, #0
  3169. 8001990: 6078 str r0, [r7, #4]
  3170. (void)file;
  3171. return -1;
  3172. 8001992: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  3173. }
  3174. 8001996: 4618 mov r0, r3
  3175. 8001998: 370c adds r7, #12
  3176. 800199a: 46bd mov sp, r7
  3177. 800199c: f85d 7b04 ldr.w r7, [sp], #4
  3178. 80019a0: 4770 bx lr
  3179. 080019a2 <_fstat>:
  3180. int _fstat(int file, struct stat *st)
  3181. {
  3182. 80019a2: b480 push {r7}
  3183. 80019a4: b083 sub sp, #12
  3184. 80019a6: af00 add r7, sp, #0
  3185. 80019a8: 6078 str r0, [r7, #4]
  3186. 80019aa: 6039 str r1, [r7, #0]
  3187. (void)file;
  3188. st->st_mode = S_IFCHR;
  3189. 80019ac: 683b ldr r3, [r7, #0]
  3190. 80019ae: f44f 5200 mov.w r2, #8192 @ 0x2000
  3191. 80019b2: 605a str r2, [r3, #4]
  3192. return 0;
  3193. 80019b4: 2300 movs r3, #0
  3194. }
  3195. 80019b6: 4618 mov r0, r3
  3196. 80019b8: 370c adds r7, #12
  3197. 80019ba: 46bd mov sp, r7
  3198. 80019bc: f85d 7b04 ldr.w r7, [sp], #4
  3199. 80019c0: 4770 bx lr
  3200. 080019c2 <_isatty>:
  3201. int _isatty(int file)
  3202. {
  3203. 80019c2: b480 push {r7}
  3204. 80019c4: b083 sub sp, #12
  3205. 80019c6: af00 add r7, sp, #0
  3206. 80019c8: 6078 str r0, [r7, #4]
  3207. (void)file;
  3208. return 1;
  3209. 80019ca: 2301 movs r3, #1
  3210. }
  3211. 80019cc: 4618 mov r0, r3
  3212. 80019ce: 370c adds r7, #12
  3213. 80019d0: 46bd mov sp, r7
  3214. 80019d2: f85d 7b04 ldr.w r7, [sp], #4
  3215. 80019d6: 4770 bx lr
  3216. 080019d8 <_lseek>:
  3217. int _lseek(int file, int ptr, int dir)
  3218. {
  3219. 80019d8: b480 push {r7}
  3220. 80019da: b085 sub sp, #20
  3221. 80019dc: af00 add r7, sp, #0
  3222. 80019de: 60f8 str r0, [r7, #12]
  3223. 80019e0: 60b9 str r1, [r7, #8]
  3224. 80019e2: 607a str r2, [r7, #4]
  3225. (void)file;
  3226. (void)ptr;
  3227. (void)dir;
  3228. return 0;
  3229. 80019e4: 2300 movs r3, #0
  3230. }
  3231. 80019e6: 4618 mov r0, r3
  3232. 80019e8: 3714 adds r7, #20
  3233. 80019ea: 46bd mov sp, r7
  3234. 80019ec: f85d 7b04 ldr.w r7, [sp], #4
  3235. 80019f0: 4770 bx lr
  3236. ...
  3237. 080019f4 <_sbrk>:
  3238. *
  3239. * @param incr Memory size
  3240. * @return Pointer to allocated memory
  3241. */
  3242. void *_sbrk(ptrdiff_t incr)
  3243. {
  3244. 80019f4: b580 push {r7, lr}
  3245. 80019f6: b086 sub sp, #24
  3246. 80019f8: af00 add r7, sp, #0
  3247. 80019fa: 6078 str r0, [r7, #4]
  3248. extern uint8_t _end; /* Symbol defined in the linker script */
  3249. extern uint8_t _estack; /* Symbol defined in the linker script */
  3250. extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */
  3251. const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size;
  3252. 80019fc: 4a14 ldr r2, [pc, #80] @ (8001a50 <_sbrk+0x5c>)
  3253. 80019fe: 4b15 ldr r3, [pc, #84] @ (8001a54 <_sbrk+0x60>)
  3254. 8001a00: 1ad3 subs r3, r2, r3
  3255. 8001a02: 617b str r3, [r7, #20]
  3256. const uint8_t *max_heap = (uint8_t *)stack_limit;
  3257. 8001a04: 697b ldr r3, [r7, #20]
  3258. 8001a06: 613b str r3, [r7, #16]
  3259. uint8_t *prev_heap_end;
  3260. /* Initialize heap end at first call */
  3261. if (NULL == __sbrk_heap_end)
  3262. 8001a08: 4b13 ldr r3, [pc, #76] @ (8001a58 <_sbrk+0x64>)
  3263. 8001a0a: 681b ldr r3, [r3, #0]
  3264. 8001a0c: 2b00 cmp r3, #0
  3265. 8001a0e: d102 bne.n 8001a16 <_sbrk+0x22>
  3266. {
  3267. __sbrk_heap_end = &_end;
  3268. 8001a10: 4b11 ldr r3, [pc, #68] @ (8001a58 <_sbrk+0x64>)
  3269. 8001a12: 4a12 ldr r2, [pc, #72] @ (8001a5c <_sbrk+0x68>)
  3270. 8001a14: 601a str r2, [r3, #0]
  3271. }
  3272. /* Protect heap from growing into the reserved MSP stack */
  3273. if (__sbrk_heap_end + incr > max_heap)
  3274. 8001a16: 4b10 ldr r3, [pc, #64] @ (8001a58 <_sbrk+0x64>)
  3275. 8001a18: 681a ldr r2, [r3, #0]
  3276. 8001a1a: 687b ldr r3, [r7, #4]
  3277. 8001a1c: 4413 add r3, r2
  3278. 8001a1e: 693a ldr r2, [r7, #16]
  3279. 8001a20: 429a cmp r2, r3
  3280. 8001a22: d207 bcs.n 8001a34 <_sbrk+0x40>
  3281. {
  3282. errno = ENOMEM;
  3283. 8001a24: f00d fcdc bl 800f3e0 <__errno>
  3284. 8001a28: 4603 mov r3, r0
  3285. 8001a2a: 220c movs r2, #12
  3286. 8001a2c: 601a str r2, [r3, #0]
  3287. return (void *)-1;
  3288. 8001a2e: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  3289. 8001a32: e009 b.n 8001a48 <_sbrk+0x54>
  3290. }
  3291. prev_heap_end = __sbrk_heap_end;
  3292. 8001a34: 4b08 ldr r3, [pc, #32] @ (8001a58 <_sbrk+0x64>)
  3293. 8001a36: 681b ldr r3, [r3, #0]
  3294. 8001a38: 60fb str r3, [r7, #12]
  3295. __sbrk_heap_end += incr;
  3296. 8001a3a: 4b07 ldr r3, [pc, #28] @ (8001a58 <_sbrk+0x64>)
  3297. 8001a3c: 681a ldr r2, [r3, #0]
  3298. 8001a3e: 687b ldr r3, [r7, #4]
  3299. 8001a40: 4413 add r3, r2
  3300. 8001a42: 4a05 ldr r2, [pc, #20] @ (8001a58 <_sbrk+0x64>)
  3301. 8001a44: 6013 str r3, [r2, #0]
  3302. return (void *)prev_heap_end;
  3303. 8001a46: 68fb ldr r3, [r7, #12]
  3304. }
  3305. 8001a48: 4618 mov r0, r3
  3306. 8001a4a: 3718 adds r7, #24
  3307. 8001a4c: 46bd mov sp, r7
  3308. 8001a4e: bd80 pop {r7, pc}
  3309. 8001a50: 24060000 .word 0x24060000
  3310. 8001a54: 00000400 .word 0x00000400
  3311. 8001a58: 2400032c .word 0x2400032c
  3312. 8001a5c: 240128c8 .word 0x240128c8
  3313. 08001a60 <SystemInit>:
  3314. * configuration.
  3315. * @param None
  3316. * @retval None
  3317. */
  3318. void SystemInit (void)
  3319. {
  3320. 8001a60: b480 push {r7}
  3321. 8001a62: af00 add r7, sp, #0
  3322. __IO uint32_t tmpreg;
  3323. #endif /* DATA_IN_D2_SRAM */
  3324. /* FPU settings ------------------------------------------------------------*/
  3325. #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
  3326. SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2))); /* set CP10 and CP11 Full Access */
  3327. 8001a64: 4b37 ldr r3, [pc, #220] @ (8001b44 <SystemInit+0xe4>)
  3328. 8001a66: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  3329. 8001a6a: 4a36 ldr r2, [pc, #216] @ (8001b44 <SystemInit+0xe4>)
  3330. 8001a6c: f443 0370 orr.w r3, r3, #15728640 @ 0xf00000
  3331. 8001a70: f8c2 3088 str.w r3, [r2, #136] @ 0x88
  3332. #endif
  3333. /* Reset the RCC clock configuration to the default reset state ------------*/
  3334. /* Increasing the CPU frequency */
  3335. if(FLASH_LATENCY_DEFAULT > (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)))
  3336. 8001a74: 4b34 ldr r3, [pc, #208] @ (8001b48 <SystemInit+0xe8>)
  3337. 8001a76: 681b ldr r3, [r3, #0]
  3338. 8001a78: f003 030f and.w r3, r3, #15
  3339. 8001a7c: 2b06 cmp r3, #6
  3340. 8001a7e: d807 bhi.n 8001a90 <SystemInit+0x30>
  3341. {
  3342. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  3343. MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT));
  3344. 8001a80: 4b31 ldr r3, [pc, #196] @ (8001b48 <SystemInit+0xe8>)
  3345. 8001a82: 681b ldr r3, [r3, #0]
  3346. 8001a84: f023 030f bic.w r3, r3, #15
  3347. 8001a88: 4a2f ldr r2, [pc, #188] @ (8001b48 <SystemInit+0xe8>)
  3348. 8001a8a: f043 0307 orr.w r3, r3, #7
  3349. 8001a8e: 6013 str r3, [r2, #0]
  3350. }
  3351. /* Set HSION bit */
  3352. RCC->CR |= RCC_CR_HSION;
  3353. 8001a90: 4b2e ldr r3, [pc, #184] @ (8001b4c <SystemInit+0xec>)
  3354. 8001a92: 681b ldr r3, [r3, #0]
  3355. 8001a94: 4a2d ldr r2, [pc, #180] @ (8001b4c <SystemInit+0xec>)
  3356. 8001a96: f043 0301 orr.w r3, r3, #1
  3357. 8001a9a: 6013 str r3, [r2, #0]
  3358. /* Reset CFGR register */
  3359. RCC->CFGR = 0x00000000;
  3360. 8001a9c: 4b2b ldr r3, [pc, #172] @ (8001b4c <SystemInit+0xec>)
  3361. 8001a9e: 2200 movs r2, #0
  3362. 8001aa0: 611a str r2, [r3, #16]
  3363. /* Reset HSEON, HSECSSON, CSION, HSI48ON, CSIKERON, PLL1ON, PLL2ON and PLL3ON bits */
  3364. RCC->CR &= 0xEAF6ED7FU;
  3365. 8001aa2: 4b2a ldr r3, [pc, #168] @ (8001b4c <SystemInit+0xec>)
  3366. 8001aa4: 681a ldr r2, [r3, #0]
  3367. 8001aa6: 4929 ldr r1, [pc, #164] @ (8001b4c <SystemInit+0xec>)
  3368. 8001aa8: 4b29 ldr r3, [pc, #164] @ (8001b50 <SystemInit+0xf0>)
  3369. 8001aaa: 4013 ands r3, r2
  3370. 8001aac: 600b str r3, [r1, #0]
  3371. /* Decreasing the number of wait states because of lower CPU frequency */
  3372. if(FLASH_LATENCY_DEFAULT < (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)))
  3373. 8001aae: 4b26 ldr r3, [pc, #152] @ (8001b48 <SystemInit+0xe8>)
  3374. 8001ab0: 681b ldr r3, [r3, #0]
  3375. 8001ab2: f003 0308 and.w r3, r3, #8
  3376. 8001ab6: 2b00 cmp r3, #0
  3377. 8001ab8: d007 beq.n 8001aca <SystemInit+0x6a>
  3378. {
  3379. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  3380. MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT));
  3381. 8001aba: 4b23 ldr r3, [pc, #140] @ (8001b48 <SystemInit+0xe8>)
  3382. 8001abc: 681b ldr r3, [r3, #0]
  3383. 8001abe: f023 030f bic.w r3, r3, #15
  3384. 8001ac2: 4a21 ldr r2, [pc, #132] @ (8001b48 <SystemInit+0xe8>)
  3385. 8001ac4: f043 0307 orr.w r3, r3, #7
  3386. 8001ac8: 6013 str r3, [r2, #0]
  3387. }
  3388. #if defined(D3_SRAM_BASE)
  3389. /* Reset D1CFGR register */
  3390. RCC->D1CFGR = 0x00000000;
  3391. 8001aca: 4b20 ldr r3, [pc, #128] @ (8001b4c <SystemInit+0xec>)
  3392. 8001acc: 2200 movs r2, #0
  3393. 8001ace: 619a str r2, [r3, #24]
  3394. /* Reset D2CFGR register */
  3395. RCC->D2CFGR = 0x00000000;
  3396. 8001ad0: 4b1e ldr r3, [pc, #120] @ (8001b4c <SystemInit+0xec>)
  3397. 8001ad2: 2200 movs r2, #0
  3398. 8001ad4: 61da str r2, [r3, #28]
  3399. /* Reset D3CFGR register */
  3400. RCC->D3CFGR = 0x00000000;
  3401. 8001ad6: 4b1d ldr r3, [pc, #116] @ (8001b4c <SystemInit+0xec>)
  3402. 8001ad8: 2200 movs r2, #0
  3403. 8001ada: 621a str r2, [r3, #32]
  3404. /* Reset SRDCFGR register */
  3405. RCC->SRDCFGR = 0x00000000;
  3406. #endif
  3407. /* Reset PLLCKSELR register */
  3408. RCC->PLLCKSELR = 0x02020200;
  3409. 8001adc: 4b1b ldr r3, [pc, #108] @ (8001b4c <SystemInit+0xec>)
  3410. 8001ade: 4a1d ldr r2, [pc, #116] @ (8001b54 <SystemInit+0xf4>)
  3411. 8001ae0: 629a str r2, [r3, #40] @ 0x28
  3412. /* Reset PLLCFGR register */
  3413. RCC->PLLCFGR = 0x01FF0000;
  3414. 8001ae2: 4b1a ldr r3, [pc, #104] @ (8001b4c <SystemInit+0xec>)
  3415. 8001ae4: 4a1c ldr r2, [pc, #112] @ (8001b58 <SystemInit+0xf8>)
  3416. 8001ae6: 62da str r2, [r3, #44] @ 0x2c
  3417. /* Reset PLL1DIVR register */
  3418. RCC->PLL1DIVR = 0x01010280;
  3419. 8001ae8: 4b18 ldr r3, [pc, #96] @ (8001b4c <SystemInit+0xec>)
  3420. 8001aea: 4a1c ldr r2, [pc, #112] @ (8001b5c <SystemInit+0xfc>)
  3421. 8001aec: 631a str r2, [r3, #48] @ 0x30
  3422. /* Reset PLL1FRACR register */
  3423. RCC->PLL1FRACR = 0x00000000;
  3424. 8001aee: 4b17 ldr r3, [pc, #92] @ (8001b4c <SystemInit+0xec>)
  3425. 8001af0: 2200 movs r2, #0
  3426. 8001af2: 635a str r2, [r3, #52] @ 0x34
  3427. /* Reset PLL2DIVR register */
  3428. RCC->PLL2DIVR = 0x01010280;
  3429. 8001af4: 4b15 ldr r3, [pc, #84] @ (8001b4c <SystemInit+0xec>)
  3430. 8001af6: 4a19 ldr r2, [pc, #100] @ (8001b5c <SystemInit+0xfc>)
  3431. 8001af8: 639a str r2, [r3, #56] @ 0x38
  3432. /* Reset PLL2FRACR register */
  3433. RCC->PLL2FRACR = 0x00000000;
  3434. 8001afa: 4b14 ldr r3, [pc, #80] @ (8001b4c <SystemInit+0xec>)
  3435. 8001afc: 2200 movs r2, #0
  3436. 8001afe: 63da str r2, [r3, #60] @ 0x3c
  3437. /* Reset PLL3DIVR register */
  3438. RCC->PLL3DIVR = 0x01010280;
  3439. 8001b00: 4b12 ldr r3, [pc, #72] @ (8001b4c <SystemInit+0xec>)
  3440. 8001b02: 4a16 ldr r2, [pc, #88] @ (8001b5c <SystemInit+0xfc>)
  3441. 8001b04: 641a str r2, [r3, #64] @ 0x40
  3442. /* Reset PLL3FRACR register */
  3443. RCC->PLL3FRACR = 0x00000000;
  3444. 8001b06: 4b11 ldr r3, [pc, #68] @ (8001b4c <SystemInit+0xec>)
  3445. 8001b08: 2200 movs r2, #0
  3446. 8001b0a: 645a str r2, [r3, #68] @ 0x44
  3447. /* Reset HSEBYP bit */
  3448. RCC->CR &= 0xFFFBFFFFU;
  3449. 8001b0c: 4b0f ldr r3, [pc, #60] @ (8001b4c <SystemInit+0xec>)
  3450. 8001b0e: 681b ldr r3, [r3, #0]
  3451. 8001b10: 4a0e ldr r2, [pc, #56] @ (8001b4c <SystemInit+0xec>)
  3452. 8001b12: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  3453. 8001b16: 6013 str r3, [r2, #0]
  3454. /* Disable all interrupts */
  3455. RCC->CIER = 0x00000000;
  3456. 8001b18: 4b0c ldr r3, [pc, #48] @ (8001b4c <SystemInit+0xec>)
  3457. 8001b1a: 2200 movs r2, #0
  3458. 8001b1c: 661a str r2, [r3, #96] @ 0x60
  3459. #if (STM32H7_DEV_ID == 0x450UL)
  3460. /* dual core CM7 or single core line */
  3461. if((DBGMCU->IDCODE & 0xFFFF0000U) < 0x20000000U)
  3462. 8001b1e: 4b10 ldr r3, [pc, #64] @ (8001b60 <SystemInit+0x100>)
  3463. 8001b20: 681a ldr r2, [r3, #0]
  3464. 8001b22: 4b10 ldr r3, [pc, #64] @ (8001b64 <SystemInit+0x104>)
  3465. 8001b24: 4013 ands r3, r2
  3466. 8001b26: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  3467. 8001b2a: d202 bcs.n 8001b32 <SystemInit+0xd2>
  3468. {
  3469. /* if stm32h7 revY*/
  3470. /* Change the switch matrix read issuing capability to 1 for the AXI SRAM target (Target 7) */
  3471. *((__IO uint32_t*)0x51008108) = 0x000000001U;
  3472. 8001b2c: 4b0e ldr r3, [pc, #56] @ (8001b68 <SystemInit+0x108>)
  3473. 8001b2e: 2201 movs r2, #1
  3474. 8001b30: 601a str r2, [r3, #0]
  3475. /*
  3476. * Disable the FMC bank1 (enabled after reset).
  3477. * This, prevents CPU speculation access on this bank which blocks the use of FMC during
  3478. * 24us. During this time the others FMC master (such as LTDC) cannot use it!
  3479. */
  3480. FMC_Bank1_R->BTCR[0] = 0x000030D2;
  3481. 8001b32: 4b0e ldr r3, [pc, #56] @ (8001b6c <SystemInit+0x10c>)
  3482. 8001b34: f243 02d2 movw r2, #12498 @ 0x30d2
  3483. 8001b38: 601a str r2, [r3, #0]
  3484. #if defined(USER_VECT_TAB_ADDRESS)
  3485. SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D1 AXI-RAM or in Internal FLASH */
  3486. #endif /* USER_VECT_TAB_ADDRESS */
  3487. #endif /*DUAL_CORE && CORE_CM4*/
  3488. }
  3489. 8001b3a: bf00 nop
  3490. 8001b3c: 46bd mov sp, r7
  3491. 8001b3e: f85d 7b04 ldr.w r7, [sp], #4
  3492. 8001b42: 4770 bx lr
  3493. 8001b44: e000ed00 .word 0xe000ed00
  3494. 8001b48: 52002000 .word 0x52002000
  3495. 8001b4c: 58024400 .word 0x58024400
  3496. 8001b50: eaf6ed7f .word 0xeaf6ed7f
  3497. 8001b54: 02020200 .word 0x02020200
  3498. 8001b58: 01ff0000 .word 0x01ff0000
  3499. 8001b5c: 01010280 .word 0x01010280
  3500. 8001b60: 5c001000 .word 0x5c001000
  3501. 8001b64: ffff0000 .word 0xffff0000
  3502. 8001b68: 51008108 .word 0x51008108
  3503. 8001b6c: 52004000 .word 0x52004000
  3504. 08001b70 <UartTasksInit>:
  3505. osMutexId_t resMeasurementsMutex;
  3506. osMutexId_t sensorsInfoMutex;
  3507. extern RNG_HandleTypeDef hrng;
  3508. void UartTasksInit(void) {
  3509. 8001b70: b580 push {r7, lr}
  3510. 8001b72: af00 add r7, sp, #0
  3511. uart1TaskData.uartRxBuffer = uart1RxBuffer;
  3512. 8001b74: 4b13 ldr r3, [pc, #76] @ (8001bc4 <UartTasksInit+0x54>)
  3513. 8001b76: 4a14 ldr r2, [pc, #80] @ (8001bc8 <UartTasksInit+0x58>)
  3514. 8001b78: 601a str r2, [r3, #0]
  3515. uart1TaskData.uartRxBufferLen = UART1_RX_BUFF_SIZE;
  3516. 8001b7a: 4b12 ldr r3, [pc, #72] @ (8001bc4 <UartTasksInit+0x54>)
  3517. 8001b7c: f44f 7280 mov.w r2, #256 @ 0x100
  3518. 8001b80: 809a strh r2, [r3, #4]
  3519. uart1TaskData.uartTxBuffer = uart1TxBuffer;
  3520. 8001b82: 4b10 ldr r3, [pc, #64] @ (8001bc4 <UartTasksInit+0x54>)
  3521. 8001b84: 4a11 ldr r2, [pc, #68] @ (8001bcc <UartTasksInit+0x5c>)
  3522. 8001b86: 609a str r2, [r3, #8]
  3523. uart1TaskData.uartRxBufferLen = UART1_TX_BUFF_SIZE;
  3524. 8001b88: 4b0e ldr r3, [pc, #56] @ (8001bc4 <UartTasksInit+0x54>)
  3525. 8001b8a: f44f 7280 mov.w r2, #256 @ 0x100
  3526. 8001b8e: 809a strh r2, [r3, #4]
  3527. uart1TaskData.frameData = uart1TaskFrameData;
  3528. 8001b90: 4b0c ldr r3, [pc, #48] @ (8001bc4 <UartTasksInit+0x54>)
  3529. 8001b92: 4a0f ldr r2, [pc, #60] @ (8001bd0 <UartTasksInit+0x60>)
  3530. 8001b94: 611a str r2, [r3, #16]
  3531. uart1TaskData.frameDataLen = UART1_RX_BUFF_SIZE;
  3532. 8001b96: 4b0b ldr r3, [pc, #44] @ (8001bc4 <UartTasksInit+0x54>)
  3533. 8001b98: f44f 7280 mov.w r2, #256 @ 0x100
  3534. 8001b9c: 829a strh r2, [r3, #20]
  3535. uart1TaskData.huart = &huart1;
  3536. 8001b9e: 4b09 ldr r3, [pc, #36] @ (8001bc4 <UartTasksInit+0x54>)
  3537. 8001ba0: 4a0c ldr r2, [pc, #48] @ (8001bd4 <UartTasksInit+0x64>)
  3538. 8001ba2: 631a str r2, [r3, #48] @ 0x30
  3539. uart1TaskData.uartNumber = 1;
  3540. 8001ba4: 4b07 ldr r3, [pc, #28] @ (8001bc4 <UartTasksInit+0x54>)
  3541. 8001ba6: 2201 movs r2, #1
  3542. 8001ba8: f883 2034 strb.w r2, [r3, #52] @ 0x34
  3543. uart1TaskData.processDataCb = Uart1ReceivedDataProcessCallback;
  3544. 8001bac: 4b05 ldr r3, [pc, #20] @ (8001bc4 <UartTasksInit+0x54>)
  3545. 8001bae: 4a0a ldr r2, [pc, #40] @ (8001bd8 <UartTasksInit+0x68>)
  3546. 8001bb0: 629a str r2, [r3, #40] @ 0x28
  3547. uart1TaskData.processRxDataMsgBuffer = NULL;
  3548. 8001bb2: 4b04 ldr r3, [pc, #16] @ (8001bc4 <UartTasksInit+0x54>)
  3549. 8001bb4: 2200 movs r2, #0
  3550. 8001bb6: 625a str r2, [r3, #36] @ 0x24
  3551. // uart8TaskData.huart = &huart8;
  3552. // uart8TaskData.uartNumber = 8;
  3553. // uart8TaskData.processDataCb = Uart8ReceivedDataProcessCallback;
  3554. // uart8TaskData.processRxDataMsgBuffer = NULL;
  3555. UartTaskCreate(&uart1TaskData);
  3556. 8001bb8: 4802 ldr r0, [pc, #8] @ (8001bc4 <UartTasksInit+0x54>)
  3557. 8001bba: f000 f80f bl 8001bdc <UartTaskCreate>
  3558. // UartTaskCreate(&uart8TaskData);
  3559. }
  3560. 8001bbe: bf00 nop
  3561. 8001bc0: bd80 pop {r7, pc}
  3562. 8001bc2: bf00 nop
  3563. 8001bc4: 24000630 .word 0x24000630
  3564. 8001bc8: 24000330 .word 0x24000330
  3565. 8001bcc: 24000430 .word 0x24000430
  3566. 8001bd0: 24000530 .word 0x24000530
  3567. 8001bd4: 24000158 .word 0x24000158
  3568. 8001bd8: 080022e1 .word 0x080022e1
  3569. 08001bdc <UartTaskCreate>:
  3570. void UartTaskCreate (UartTaskData* uartTaskData) {
  3571. 8001bdc: b580 push {r7, lr}
  3572. 8001bde: b08c sub sp, #48 @ 0x30
  3573. 8001be0: af00 add r7, sp, #0
  3574. 8001be2: 6078 str r0, [r7, #4]
  3575. osThreadAttr_t osThreadAttrRxUart = { 0 };
  3576. 8001be4: f107 030c add.w r3, r7, #12
  3577. 8001be8: 2224 movs r2, #36 @ 0x24
  3578. 8001bea: 2100 movs r1, #0
  3579. 8001bec: 4618 mov r0, r3
  3580. 8001bee: f00d fb52 bl 800f296 <memset>
  3581. // osThreadAttr_t osThreadAttrTxUart = { 0 };
  3582. osThreadAttrRxUart.stack_size = configMINIMAL_STACK_SIZE * 2;
  3583. 8001bf2: f44f 6380 mov.w r3, #1024 @ 0x400
  3584. 8001bf6: 623b str r3, [r7, #32]
  3585. osThreadAttrRxUart.priority = (osPriority_t)osPriorityHigh;
  3586. 8001bf8: 2328 movs r3, #40 @ 0x28
  3587. 8001bfa: 627b str r3, [r7, #36] @ 0x24
  3588. uartTaskData->uartRecieveTaskHandle = osThreadNew (UartRxTask, uartTaskData, &osThreadAttrRxUart);
  3589. 8001bfc: f107 030c add.w r3, r7, #12
  3590. 8001c00: 461a mov r2, r3
  3591. 8001c02: 6879 ldr r1, [r7, #4]
  3592. 8001c04: 4804 ldr r0, [pc, #16] @ (8001c18 <UartTaskCreate+0x3c>)
  3593. 8001c06: f009 fc6b bl 800b4e0 <osThreadNew>
  3594. 8001c0a: 4602 mov r2, r0
  3595. 8001c0c: 687b ldr r3, [r7, #4]
  3596. 8001c0e: 619a str r2, [r3, #24]
  3597. // uartTaskData->sendCmdToSlaveQueue = osMessageQueueNew (16, sizeof (InterProcessData), &uartTxMsgQueueAttr);
  3598. // osThreadAttrTxUart.stack_size = configMINIMAL_STACK_SIZE * 4;
  3599. // osThreadAttrTxUart.priority = (osPriority_t)osPriorityNormal;
  3600. // uartTaskData->uartTransmitTaskHandle = osThreadNew (UartTxTask, uartTaskData, &osThreadAttrTxUart);
  3601. }
  3602. 8001c10: bf00 nop
  3603. 8001c12: 3730 adds r7, #48 @ 0x30
  3604. 8001c14: 46bd mov sp, r7
  3605. 8001c16: bd80 pop {r7, pc}
  3606. 8001c18: 08001d31 .word 0x08001d31
  3607. 08001c1c <HAL_UART_RxCpltCallback>:
  3608. // osThreadAttrTxUart.stack_size = configMINIMAL_STACK_SIZE * 4;
  3609. // osThreadAttrTxUart.priority = (osPriority_t)osPriorityNormal;
  3610. // uart8TaskData.uartTransmitTaskHandle = osThreadNew (UartTxTask, &uart8TaskData, &osThreadAttrTxUart);
  3611. }
  3612. void HAL_UART_RxCpltCallback (UART_HandleTypeDef* huart) {
  3613. 8001c1c: b480 push {r7}
  3614. 8001c1e: b083 sub sp, #12
  3615. 8001c20: af00 add r7, sp, #0
  3616. 8001c22: 6078 str r0, [r7, #4]
  3617. // osSemaphoreRelease(uart8RxSemaphore);
  3618. }
  3619. 8001c24: bf00 nop
  3620. 8001c26: 370c adds r7, #12
  3621. 8001c28: 46bd mov sp, r7
  3622. 8001c2a: f85d 7b04 ldr.w r7, [sp], #4
  3623. 8001c2e: 4770 bx lr
  3624. 08001c30 <HAL_UARTEx_RxEventCallback>:
  3625. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef* huart, uint16_t Size) {
  3626. 8001c30: b580 push {r7, lr}
  3627. 8001c32: b082 sub sp, #8
  3628. 8001c34: af00 add r7, sp, #0
  3629. 8001c36: 6078 str r0, [r7, #4]
  3630. 8001c38: 460b mov r3, r1
  3631. 8001c3a: 807b strh r3, [r7, #2]
  3632. if (huart->Instance == USART1) {
  3633. 8001c3c: 687b ldr r3, [r7, #4]
  3634. 8001c3e: 681b ldr r3, [r3, #0]
  3635. 8001c40: 4a0c ldr r2, [pc, #48] @ (8001c74 <HAL_UARTEx_RxEventCallback+0x44>)
  3636. 8001c42: 4293 cmp r3, r2
  3637. 8001c44: d106 bne.n 8001c54 <HAL_UARTEx_RxEventCallback+0x24>
  3638. HandleUartRxCallback(&uart1TaskData, huart, Size);
  3639. 8001c46: 887b ldrh r3, [r7, #2]
  3640. 8001c48: 461a mov r2, r3
  3641. 8001c4a: 6879 ldr r1, [r7, #4]
  3642. 8001c4c: 480a ldr r0, [pc, #40] @ (8001c78 <HAL_UARTEx_RxEventCallback+0x48>)
  3643. 8001c4e: f000 f823 bl 8001c98 <HandleUartRxCallback>
  3644. } else if (huart->Instance == UART8) {
  3645. HandleUartRxCallback(&uart8TaskData, huart, Size);
  3646. }
  3647. }
  3648. 8001c52: e00a b.n 8001c6a <HAL_UARTEx_RxEventCallback+0x3a>
  3649. } else if (huart->Instance == UART8) {
  3650. 8001c54: 687b ldr r3, [r7, #4]
  3651. 8001c56: 681b ldr r3, [r3, #0]
  3652. 8001c58: 4a08 ldr r2, [pc, #32] @ (8001c7c <HAL_UARTEx_RxEventCallback+0x4c>)
  3653. 8001c5a: 4293 cmp r3, r2
  3654. 8001c5c: d105 bne.n 8001c6a <HAL_UARTEx_RxEventCallback+0x3a>
  3655. HandleUartRxCallback(&uart8TaskData, huart, Size);
  3656. 8001c5e: 887b ldrh r3, [r7, #2]
  3657. 8001c60: 461a mov r2, r3
  3658. 8001c62: 6879 ldr r1, [r7, #4]
  3659. 8001c64: 4806 ldr r0, [pc, #24] @ (8001c80 <HAL_UARTEx_RxEventCallback+0x50>)
  3660. 8001c66: f000 f817 bl 8001c98 <HandleUartRxCallback>
  3661. }
  3662. 8001c6a: bf00 nop
  3663. 8001c6c: 3708 adds r7, #8
  3664. 8001c6e: 46bd mov sp, r7
  3665. 8001c70: bd80 pop {r7, pc}
  3666. 8001c72: bf00 nop
  3667. 8001c74: 40011000 .word 0x40011000
  3668. 8001c78: 24000630 .word 0x24000630
  3669. 8001c7c: 40007c00 .word 0x40007c00
  3670. 8001c80: 24000668 .word 0x24000668
  3671. 08001c84 <HAL_UART_TxCpltCallback>:
  3672. void HAL_UART_TxCpltCallback (UART_HandleTypeDef* huart) {
  3673. 8001c84: b480 push {r7}
  3674. 8001c86: b083 sub sp, #12
  3675. 8001c88: af00 add r7, sp, #0
  3676. 8001c8a: 6078 str r0, [r7, #4]
  3677. if (huart->Instance == UART8) {
  3678. }
  3679. }
  3680. 8001c8c: bf00 nop
  3681. 8001c8e: 370c adds r7, #12
  3682. 8001c90: 46bd mov sp, r7
  3683. 8001c92: f85d 7b04 ldr.w r7, [sp], #4
  3684. 8001c96: 4770 bx lr
  3685. 08001c98 <HandleUartRxCallback>:
  3686. void HandleUartRxCallback (UartTaskData* uartTaskData, UART_HandleTypeDef* huart, uint16_t Size) {
  3687. 8001c98: b580 push {r7, lr}
  3688. 8001c9a: b088 sub sp, #32
  3689. 8001c9c: af02 add r7, sp, #8
  3690. 8001c9e: 60f8 str r0, [r7, #12]
  3691. 8001ca0: 60b9 str r1, [r7, #8]
  3692. 8001ca2: 4613 mov r3, r2
  3693. 8001ca4: 80fb strh r3, [r7, #6]
  3694. BaseType_t pxHigherPriorityTaskWoken = pdFALSE;
  3695. 8001ca6: 2300 movs r3, #0
  3696. 8001ca8: 617b str r3, [r7, #20]
  3697. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  3698. 8001caa: 68fb ldr r3, [r7, #12]
  3699. 8001cac: 6a1b ldr r3, [r3, #32]
  3700. 8001cae: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3701. 8001cb2: 4618 mov r0, r3
  3702. 8001cb4: f009 fd48 bl 800b748 <osMutexAcquire>
  3703. memcpy (&(uartTaskData->frameData[uartTaskData->frameBytesCount]), uartTaskData->uartRxBuffer, Size);
  3704. 8001cb8: 68fb ldr r3, [r7, #12]
  3705. 8001cba: 691b ldr r3, [r3, #16]
  3706. 8001cbc: 68fa ldr r2, [r7, #12]
  3707. 8001cbe: 8ad2 ldrh r2, [r2, #22]
  3708. 8001cc0: 1898 adds r0, r3, r2
  3709. 8001cc2: 68fb ldr r3, [r7, #12]
  3710. 8001cc4: 681b ldr r3, [r3, #0]
  3711. 8001cc6: 88fa ldrh r2, [r7, #6]
  3712. 8001cc8: 4619 mov r1, r3
  3713. 8001cca: f00d fbb6 bl 800f43a <memcpy>
  3714. uartTaskData->frameBytesCount += Size;
  3715. 8001cce: 68fb ldr r3, [r7, #12]
  3716. 8001cd0: 8ada ldrh r2, [r3, #22]
  3717. 8001cd2: 88fb ldrh r3, [r7, #6]
  3718. 8001cd4: 4413 add r3, r2
  3719. 8001cd6: b29a uxth r2, r3
  3720. 8001cd8: 68fb ldr r3, [r7, #12]
  3721. 8001cda: 82da strh r2, [r3, #22]
  3722. osMutexRelease (uartTaskData->rxDataBufferMutex);
  3723. 8001cdc: 68fb ldr r3, [r7, #12]
  3724. 8001cde: 6a1b ldr r3, [r3, #32]
  3725. 8001ce0: 4618 mov r0, r3
  3726. 8001ce2: f009 fd7c bl 800b7de <osMutexRelease>
  3727. xTaskNotifyFromISR (uartTaskData->uartRecieveTaskHandle, Size, eSetValueWithOverwrite, &pxHigherPriorityTaskWoken);
  3728. 8001ce6: 68fb ldr r3, [r7, #12]
  3729. 8001ce8: 6998 ldr r0, [r3, #24]
  3730. 8001cea: 88f9 ldrh r1, [r7, #6]
  3731. 8001cec: f107 0314 add.w r3, r7, #20
  3732. 8001cf0: 9300 str r3, [sp, #0]
  3733. 8001cf2: 2300 movs r3, #0
  3734. 8001cf4: 2203 movs r2, #3
  3735. 8001cf6: f00c f8b9 bl 800de6c <xTaskGenericNotifyFromISR>
  3736. // HAL_UARTEx_ReceiveToIdle_DMA(huart, uart8RxBuffer, UART8_RX_BUFF_SIZE);
  3737. // __HAL_DMA_DISABLE_IT(&hdma_uart8_rx, DMA_IT_HT);
  3738. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  3739. 8001cfa: 68fb ldr r3, [r7, #12]
  3740. 8001cfc: 6b18 ldr r0, [r3, #48] @ 0x30
  3741. 8001cfe: 68fb ldr r3, [r7, #12]
  3742. 8001d00: 6819 ldr r1, [r3, #0]
  3743. 8001d02: 68fb ldr r3, [r7, #12]
  3744. 8001d04: 889b ldrh r3, [r3, #4]
  3745. 8001d06: 461a mov r2, r3
  3746. 8001d08: f009 fabd bl 800b286 <HAL_UARTEx_ReceiveToIdle_IT>
  3747. portEND_SWITCHING_ISR (pxHigherPriorityTaskWoken);
  3748. 8001d0c: 697b ldr r3, [r7, #20]
  3749. 8001d0e: 2b00 cmp r3, #0
  3750. 8001d10: d007 beq.n 8001d22 <HandleUartRxCallback+0x8a>
  3751. 8001d12: 4b06 ldr r3, [pc, #24] @ (8001d2c <HandleUartRxCallback+0x94>)
  3752. 8001d14: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  3753. 8001d18: 601a str r2, [r3, #0]
  3754. 8001d1a: f3bf 8f4f dsb sy
  3755. 8001d1e: f3bf 8f6f isb sy
  3756. }
  3757. 8001d22: bf00 nop
  3758. 8001d24: 3718 adds r7, #24
  3759. 8001d26: 46bd mov sp, r7
  3760. 8001d28: bd80 pop {r7, pc}
  3761. 8001d2a: bf00 nop
  3762. 8001d2c: e000ed04 .word 0xe000ed04
  3763. 08001d30 <UartRxTask>:
  3764. void UartRxTask (void* argument) {
  3765. 8001d30: b580 push {r7, lr}
  3766. 8001d32: b0d2 sub sp, #328 @ 0x148
  3767. 8001d34: af02 add r7, sp, #8
  3768. 8001d36: f507 73a0 add.w r3, r7, #320 @ 0x140
  3769. 8001d3a: f5a3 739e sub.w r3, r3, #316 @ 0x13c
  3770. 8001d3e: 6018 str r0, [r3, #0]
  3771. UartTaskData* uartTaskData = (UartTaskData*)argument;
  3772. 8001d40: f507 73a0 add.w r3, r7, #320 @ 0x140
  3773. 8001d44: f5a3 739e sub.w r3, r3, #316 @ 0x13c
  3774. 8001d48: 681b ldr r3, [r3, #0]
  3775. 8001d4a: f8c7 312c str.w r3, [r7, #300] @ 0x12c
  3776. SerialProtocolFrameData spFrameData = { 0 };
  3777. 8001d4e: f507 73a0 add.w r3, r7, #320 @ 0x140
  3778. 8001d52: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  3779. 8001d56: 4618 mov r0, r3
  3780. 8001d58: f44f 7386 mov.w r3, #268 @ 0x10c
  3781. 8001d5c: 461a mov r2, r3
  3782. 8001d5e: 2100 movs r1, #0
  3783. 8001d60: f00d fa99 bl 800f296 <memset>
  3784. uint32_t bytesRec = 0;
  3785. 8001d64: f507 73a0 add.w r3, r7, #320 @ 0x140
  3786. 8001d68: f5a3 739a sub.w r3, r3, #308 @ 0x134
  3787. 8001d6c: 2200 movs r2, #0
  3788. 8001d6e: 601a str r2, [r3, #0]
  3789. uint32_t crc = 0;
  3790. 8001d70: 2300 movs r3, #0
  3791. 8001d72: f8c7 3128 str.w r3, [r7, #296] @ 0x128
  3792. uint16_t frameCommandRaw = 0x0000;
  3793. 8001d76: 2300 movs r3, #0
  3794. 8001d78: f8a7 3126 strh.w r3, [r7, #294] @ 0x126
  3795. uint16_t frameBytesCount = 0;
  3796. 8001d7c: 2300 movs r3, #0
  3797. 8001d7e: f8a7 3124 strh.w r3, [r7, #292] @ 0x124
  3798. uint16_t frameCrc = 0;
  3799. 8001d82: 2300 movs r3, #0
  3800. 8001d84: f8a7 3122 strh.w r3, [r7, #290] @ 0x122
  3801. uint16_t frameTotalLength = 0;
  3802. 8001d88: 2300 movs r3, #0
  3803. 8001d8a: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  3804. uint16_t dataToSend = 0;
  3805. 8001d8e: 2300 movs r3, #0
  3806. 8001d90: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  3807. portBASE_TYPE crcPass = pdFAIL;
  3808. 8001d94: 2300 movs r3, #0
  3809. 8001d96: f8c7 3138 str.w r3, [r7, #312] @ 0x138
  3810. portBASE_TYPE proceed = pdFALSE;
  3811. 8001d9a: 2300 movs r3, #0
  3812. 8001d9c: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  3813. portBASE_TYPE frameTimeout = pdFAIL;
  3814. 8001da0: 2300 movs r3, #0
  3815. 8001da2: f8c7 311c str.w r3, [r7, #284] @ 0x11c
  3816. enum SerialReceiverStates receverState = srWaitForHeader;
  3817. 8001da6: 2300 movs r3, #0
  3818. 8001da8: f887 3133 strb.w r3, [r7, #307] @ 0x133
  3819. uartTaskData->rxDataBufferMutex = osMutexNew (NULL);
  3820. 8001dac: 2000 movs r0, #0
  3821. 8001dae: f009 fc45 bl 800b63c <osMutexNew>
  3822. 8001db2: 4602 mov r2, r0
  3823. 8001db4: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3824. 8001db8: 621a str r2, [r3, #32]
  3825. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  3826. 8001dba: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3827. 8001dbe: 6b18 ldr r0, [r3, #48] @ 0x30
  3828. 8001dc0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3829. 8001dc4: 6819 ldr r1, [r3, #0]
  3830. 8001dc6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3831. 8001dca: 889b ldrh r3, [r3, #4]
  3832. 8001dcc: 461a mov r2, r3
  3833. 8001dce: f009 fa5a bl 800b286 <HAL_UARTEx_ReceiveToIdle_IT>
  3834. // HAL_UARTEx_ReceiveToIdle_DMA(&huart8, uart8RxBuffer, 32);
  3835. while (pdTRUE) {
  3836. // HAL_UART_Receive_IT(&huart8, uart8RxBuffer, 1);
  3837. // if(osSemaphoreAcquire(uart8RxSemaphore, pdMS_TO_TICKS(1000)) !=
  3838. // osOK) if(xTaskNotifyWait(0, 0, &bytesRec, portMAX_DELAY) == pdTrue)
  3839. frameTimeout = !(xTaskNotifyWait (0, 0, &bytesRec, pdMS_TO_TICKS (FRAME_TIMEOUT_MS)));
  3840. 8001dd2: f107 020c add.w r2, r7, #12
  3841. 8001dd6: f44f 63fa mov.w r3, #2000 @ 0x7d0
  3842. 8001dda: 2100 movs r1, #0
  3843. 8001ddc: 2000 movs r0, #0
  3844. 8001dde: f00b ff23 bl 800dc28 <xTaskNotifyWait>
  3845. 8001de2: 4603 mov r3, r0
  3846. 8001de4: 2b00 cmp r3, #0
  3847. 8001de6: bf0c ite eq
  3848. 8001de8: 2301 moveq r3, #1
  3849. 8001dea: 2300 movne r3, #0
  3850. 8001dec: b2db uxtb r3, r3
  3851. 8001dee: f8c7 311c str.w r3, [r7, #284] @ 0x11c
  3852. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  3853. 8001df2: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3854. 8001df6: 6a1b ldr r3, [r3, #32]
  3855. 8001df8: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3856. 8001dfc: 4618 mov r0, r3
  3857. 8001dfe: f009 fca3 bl 800b748 <osMutexAcquire>
  3858. frameBytesCount = uartTaskData->frameBytesCount;
  3859. 8001e02: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3860. 8001e06: 8adb ldrh r3, [r3, #22]
  3861. 8001e08: f8a7 3124 strh.w r3, [r7, #292] @ 0x124
  3862. osMutexRelease (uartTaskData->rxDataBufferMutex);
  3863. 8001e0c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3864. 8001e10: 6a1b ldr r3, [r3, #32]
  3865. 8001e12: 4618 mov r0, r3
  3866. 8001e14: f009 fce3 bl 800b7de <osMutexRelease>
  3867. if ((frameTimeout == pdTRUE) && (frameBytesCount > 0)) {
  3868. 8001e18: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  3869. 8001e1c: 2b01 cmp r3, #1
  3870. 8001e1e: d10a bne.n 8001e36 <UartRxTask+0x106>
  3871. 8001e20: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  3872. 8001e24: 2b00 cmp r3, #0
  3873. 8001e26: d006 beq.n 8001e36 <UartRxTask+0x106>
  3874. receverState = srFail;
  3875. 8001e28: 2304 movs r3, #4
  3876. 8001e2a: f887 3133 strb.w r3, [r7, #307] @ 0x133
  3877. proceed = pdTRUE;
  3878. 8001e2e: 2301 movs r3, #1
  3879. 8001e30: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  3880. 8001e34: e029 b.n 8001e8a <UartRxTask+0x15a>
  3881. } else {
  3882. if (frameTimeout == pdFALSE) {
  3883. 8001e36: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  3884. 8001e3a: 2b00 cmp r3, #0
  3885. 8001e3c: d111 bne.n 8001e62 <UartRxTask+0x132>
  3886. proceed = pdTRUE;
  3887. 8001e3e: 2301 movs r3, #1
  3888. 8001e40: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  3889. #if UART_TASK_LOGS
  3890. printf ("Uart%d: RX bytes received: %ld\n", uartTaskData->uartNumber, bytesRec);
  3891. 8001e44: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3892. 8001e48: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  3893. 8001e4c: 4619 mov r1, r3
  3894. 8001e4e: f507 73a0 add.w r3, r7, #320 @ 0x140
  3895. 8001e52: f5a3 739a sub.w r3, r3, #308 @ 0x134
  3896. 8001e56: 681b ldr r3, [r3, #0]
  3897. 8001e58: 461a mov r2, r3
  3898. 8001e5a: 48c1 ldr r0, [pc, #772] @ (8002160 <UartRxTask+0x430>)
  3899. 8001e5c: f00d f9c6 bl 800f1ec <iprintf>
  3900. 8001e60: e22f b.n 80022c2 <UartRxTask+0x592>
  3901. #endif
  3902. } else {
  3903. if (uartTaskData->huart->RxState == HAL_UART_STATE_READY) {
  3904. 8001e62: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3905. 8001e66: 6b1b ldr r3, [r3, #48] @ 0x30
  3906. 8001e68: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  3907. 8001e6c: 2b20 cmp r3, #32
  3908. 8001e6e: f040 8228 bne.w 80022c2 <UartRxTask+0x592>
  3909. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  3910. 8001e72: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3911. 8001e76: 6b18 ldr r0, [r3, #48] @ 0x30
  3912. 8001e78: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3913. 8001e7c: 6819 ldr r1, [r3, #0]
  3914. 8001e7e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3915. 8001e82: 889b ldrh r3, [r3, #4]
  3916. 8001e84: 461a mov r2, r3
  3917. 8001e86: f009 f9fe bl 800b286 <HAL_UARTEx_ReceiveToIdle_IT>
  3918. }
  3919. }
  3920. }
  3921. while (proceed) {
  3922. 8001e8a: e21a b.n 80022c2 <UartRxTask+0x592>
  3923. switch (receverState) {
  3924. 8001e8c: f897 3133 ldrb.w r3, [r7, #307] @ 0x133
  3925. 8001e90: 2b04 cmp r3, #4
  3926. 8001e92: f200 81f1 bhi.w 8002278 <UartRxTask+0x548>
  3927. 8001e96: a201 add r2, pc, #4 @ (adr r2, 8001e9c <UartRxTask+0x16c>)
  3928. 8001e98: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  3929. 8001e9c: 08001eb1 .word 0x08001eb1
  3930. 8001ea0: 08002013 .word 0x08002013
  3931. 8001ea4: 08001ff7 .word 0x08001ff7
  3932. 8001ea8: 080020b3 .word 0x080020b3
  3933. 8001eac: 0800216d .word 0x0800216d
  3934. case srWaitForHeader:
  3935. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  3936. 8001eb0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3937. 8001eb4: 6a1b ldr r3, [r3, #32]
  3938. 8001eb6: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3939. 8001eba: 4618 mov r0, r3
  3940. 8001ebc: f009 fc44 bl 800b748 <osMutexAcquire>
  3941. if (uartTaskData->frameData[0] == FRAME_INDICATOR) {
  3942. 8001ec0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3943. 8001ec4: 691b ldr r3, [r3, #16]
  3944. 8001ec6: 781b ldrb r3, [r3, #0]
  3945. 8001ec8: 2baa cmp r3, #170 @ 0xaa
  3946. 8001eca: f040 8082 bne.w 8001fd2 <UartRxTask+0x2a2>
  3947. if (frameBytesCount > FRAME_ID_LENGTH) {
  3948. 8001ece: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  3949. 8001ed2: 2b02 cmp r3, #2
  3950. 8001ed4: d914 bls.n 8001f00 <UartRxTask+0x1d0>
  3951. spFrameData.frameHeader.frameId =
  3952. CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH - FRAME_ID_LENGTH - FRAME_COMMAND_LENGTH]));
  3953. 8001ed6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3954. 8001eda: 691b ldr r3, [r3, #16]
  3955. 8001edc: 3302 adds r3, #2
  3956. 8001ede: 781b ldrb r3, [r3, #0]
  3957. 8001ee0: 021b lsls r3, r3, #8
  3958. 8001ee2: b21a sxth r2, r3
  3959. 8001ee4: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3960. 8001ee8: 691b ldr r3, [r3, #16]
  3961. 8001eea: 3301 adds r3, #1
  3962. 8001eec: 781b ldrb r3, [r3, #0]
  3963. 8001eee: b21b sxth r3, r3
  3964. 8001ef0: 4313 orrs r3, r2
  3965. 8001ef2: b21b sxth r3, r3
  3966. 8001ef4: b29a uxth r2, r3
  3967. spFrameData.frameHeader.frameId =
  3968. 8001ef6: f507 73a0 add.w r3, r7, #320 @ 0x140
  3969. 8001efa: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  3970. 8001efe: 801a strh r2, [r3, #0]
  3971. }
  3972. if (frameBytesCount > FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH) {
  3973. 8001f00: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  3974. 8001f04: 2b04 cmp r3, #4
  3975. 8001f06: d923 bls.n 8001f50 <UartRxTask+0x220>
  3976. frameCommandRaw = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH - FRAME_COMMAND_LENGTH]));
  3977. 8001f08: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3978. 8001f0c: 691b ldr r3, [r3, #16]
  3979. 8001f0e: 3304 adds r3, #4
  3980. 8001f10: 781b ldrb r3, [r3, #0]
  3981. 8001f12: 021b lsls r3, r3, #8
  3982. 8001f14: b21a sxth r2, r3
  3983. 8001f16: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  3984. 8001f1a: 691b ldr r3, [r3, #16]
  3985. 8001f1c: 3303 adds r3, #3
  3986. 8001f1e: 781b ldrb r3, [r3, #0]
  3987. 8001f20: b21b sxth r3, r3
  3988. 8001f22: 4313 orrs r3, r2
  3989. 8001f24: b21b sxth r3, r3
  3990. 8001f26: f8a7 3126 strh.w r3, [r7, #294] @ 0x126
  3991. spFrameData.frameHeader.frameCommand = (SerialProtocolCommands)(frameCommandRaw & 0x7FFF);
  3992. 8001f2a: f8b7 3126 ldrh.w r3, [r7, #294] @ 0x126
  3993. 8001f2e: b2da uxtb r2, r3
  3994. 8001f30: f507 73a0 add.w r3, r7, #320 @ 0x140
  3995. 8001f34: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  3996. 8001f38: 709a strb r2, [r3, #2]
  3997. spFrameData.frameHeader.isResponseFrame = (frameCommandRaw & 0x8000) != 0 ? pdTRUE : pdFALSE;
  3998. 8001f3a: f9b7 3126 ldrsh.w r3, [r7, #294] @ 0x126
  3999. 8001f3e: 13db asrs r3, r3, #15
  4000. 8001f40: b21b sxth r3, r3
  4001. 8001f42: f003 0201 and.w r2, r3, #1
  4002. 8001f46: f507 73a0 add.w r3, r7, #320 @ 0x140
  4003. 8001f4a: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  4004. 8001f4e: 609a str r2, [r3, #8]
  4005. }
  4006. if ((frameBytesCount > FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH + FRAME_RESP_STAT_LENGTH) && ((spFrameData.frameHeader.frameCommand & 0x8000) != 0)) {
  4007. 8001f50: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  4008. 8001f54: 2b05 cmp r3, #5
  4009. 8001f56: d913 bls.n 8001f80 <UartRxTask+0x250>
  4010. 8001f58: f507 73a0 add.w r3, r7, #320 @ 0x140
  4011. 8001f5c: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  4012. 8001f60: 789b ldrb r3, [r3, #2]
  4013. 8001f62: f403 4300 and.w r3, r3, #32768 @ 0x8000
  4014. 8001f66: 2b00 cmp r3, #0
  4015. 8001f68: d00a beq.n 8001f80 <UartRxTask+0x250>
  4016. spFrameData.frameHeader.respStatus = (SerialProtocolRespStatus)(uartTaskData->frameData[FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH + FRAME_RESP_STAT_LENGTH]);
  4017. 8001f6a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4018. 8001f6e: 691b ldr r3, [r3, #16]
  4019. 8001f70: 3305 adds r3, #5
  4020. 8001f72: 781b ldrb r3, [r3, #0]
  4021. 8001f74: b25a sxtb r2, r3
  4022. 8001f76: f507 73a0 add.w r3, r7, #320 @ 0x140
  4023. 8001f7a: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  4024. 8001f7e: 70da strb r2, [r3, #3]
  4025. }
  4026. if (frameBytesCount >= FRAME_HEADER_LENGTH) {
  4027. 8001f80: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  4028. 8001f84: 2b07 cmp r3, #7
  4029. 8001f86: d920 bls.n 8001fca <UartRxTask+0x29a>
  4030. spFrameData.frameHeader.frameDataLength = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH]));
  4031. 8001f88: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4032. 8001f8c: 691b ldr r3, [r3, #16]
  4033. 8001f8e: 3306 adds r3, #6
  4034. 8001f90: 781b ldrb r3, [r3, #0]
  4035. 8001f92: 021b lsls r3, r3, #8
  4036. 8001f94: b21a sxth r2, r3
  4037. 8001f96: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4038. 8001f9a: 691b ldr r3, [r3, #16]
  4039. 8001f9c: 3305 adds r3, #5
  4040. 8001f9e: 781b ldrb r3, [r3, #0]
  4041. 8001fa0: b21b sxth r3, r3
  4042. 8001fa2: 4313 orrs r3, r2
  4043. 8001fa4: b21b sxth r3, r3
  4044. 8001fa6: b29a uxth r2, r3
  4045. 8001fa8: f507 73a0 add.w r3, r7, #320 @ 0x140
  4046. 8001fac: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  4047. 8001fb0: 809a strh r2, [r3, #4]
  4048. frameTotalLength = FRAME_HEADER_LENGTH + spFrameData.frameHeader.frameDataLength + FRAME_CRC_LENGTH;
  4049. 8001fb2: f507 73a0 add.w r3, r7, #320 @ 0x140
  4050. 8001fb6: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  4051. 8001fba: 889b ldrh r3, [r3, #4]
  4052. 8001fbc: 330a adds r3, #10
  4053. 8001fbe: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  4054. receverState = srRecieveData;
  4055. 8001fc2: 2302 movs r3, #2
  4056. 8001fc4: f887 3133 strb.w r3, [r7, #307] @ 0x133
  4057. 8001fc8: e00e b.n 8001fe8 <UartRxTask+0x2b8>
  4058. } else {
  4059. proceed = pdFALSE;
  4060. 8001fca: 2300 movs r3, #0
  4061. 8001fcc: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  4062. 8001fd0: e00a b.n 8001fe8 <UartRxTask+0x2b8>
  4063. }
  4064. } else {
  4065. if (frameBytesCount > 0) {
  4066. 8001fd2: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  4067. 8001fd6: 2b00 cmp r3, #0
  4068. 8001fd8: d003 beq.n 8001fe2 <UartRxTask+0x2b2>
  4069. receverState = srFail;
  4070. 8001fda: 2304 movs r3, #4
  4071. 8001fdc: f887 3133 strb.w r3, [r7, #307] @ 0x133
  4072. 8001fe0: e002 b.n 8001fe8 <UartRxTask+0x2b8>
  4073. } else {
  4074. proceed = pdFALSE;
  4075. 8001fe2: 2300 movs r3, #0
  4076. 8001fe4: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  4077. }
  4078. }
  4079. osMutexRelease (uartTaskData->rxDataBufferMutex);
  4080. 8001fe8: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4081. 8001fec: 6a1b ldr r3, [r3, #32]
  4082. 8001fee: 4618 mov r0, r3
  4083. 8001ff0: f009 fbf5 bl 800b7de <osMutexRelease>
  4084. break;
  4085. 8001ff4: e165 b.n 80022c2 <UartRxTask+0x592>
  4086. case srRecieveData:
  4087. if (frameBytesCount >= frameTotalLength) {
  4088. 8001ff6: f8b7 2124 ldrh.w r2, [r7, #292] @ 0x124
  4089. 8001ffa: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  4090. 8001ffe: 429a cmp r2, r3
  4091. 8002000: d303 bcc.n 800200a <UartRxTask+0x2da>
  4092. receverState = srCheckCrc;
  4093. 8002002: 2301 movs r3, #1
  4094. 8002004: f887 3133 strb.w r3, [r7, #307] @ 0x133
  4095. } else {
  4096. proceed = pdFALSE;
  4097. }
  4098. break;
  4099. 8002008: e15b b.n 80022c2 <UartRxTask+0x592>
  4100. proceed = pdFALSE;
  4101. 800200a: 2300 movs r3, #0
  4102. 800200c: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  4103. break;
  4104. 8002010: e157 b.n 80022c2 <UartRxTask+0x592>
  4105. case srCheckCrc:
  4106. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  4107. 8002012: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4108. 8002016: 6a1b ldr r3, [r3, #32]
  4109. 8002018: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4110. 800201c: 4618 mov r0, r3
  4111. 800201e: f009 fb93 bl 800b748 <osMutexAcquire>
  4112. frameCrc = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[frameTotalLength - FRAME_CRC_LENGTH]));
  4113. 8002022: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4114. 8002026: 691a ldr r2, [r3, #16]
  4115. 8002028: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  4116. 800202c: 3b01 subs r3, #1
  4117. 800202e: 4413 add r3, r2
  4118. 8002030: 781b ldrb r3, [r3, #0]
  4119. 8002032: 021b lsls r3, r3, #8
  4120. 8002034: b21a sxth r2, r3
  4121. 8002036: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4122. 800203a: 6919 ldr r1, [r3, #16]
  4123. 800203c: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  4124. 8002040: 3b02 subs r3, #2
  4125. 8002042: 440b add r3, r1
  4126. 8002044: 781b ldrb r3, [r3, #0]
  4127. 8002046: b21b sxth r3, r3
  4128. 8002048: 4313 orrs r3, r2
  4129. 800204a: b21b sxth r3, r3
  4130. 800204c: f8a7 3122 strh.w r3, [r7, #290] @ 0x122
  4131. crc = HAL_CRC_Calculate (&hcrc, (uint32_t*)(uartTaskData->frameData), frameTotalLength - FRAME_CRC_LENGTH);
  4132. 8002050: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4133. 8002054: 6919 ldr r1, [r3, #16]
  4134. 8002056: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  4135. 800205a: 3b02 subs r3, #2
  4136. 800205c: 461a mov r2, r3
  4137. 800205e: 4841 ldr r0, [pc, #260] @ (8002164 <UartRxTask+0x434>)
  4138. 8002060: f000 fcd2 bl 8002a08 <HAL_CRC_Calculate>
  4139. 8002064: f8c7 0128 str.w r0, [r7, #296] @ 0x128
  4140. osMutexRelease (uartTaskData->rxDataBufferMutex);
  4141. 8002068: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4142. 800206c: 6a1b ldr r3, [r3, #32]
  4143. 800206e: 4618 mov r0, r3
  4144. 8002070: f009 fbb5 bl 800b7de <osMutexRelease>
  4145. crcPass = frameCrc == crc;
  4146. 8002074: f8b7 3122 ldrh.w r3, [r7, #290] @ 0x122
  4147. 8002078: f8d7 2128 ldr.w r2, [r7, #296] @ 0x128
  4148. 800207c: 429a cmp r2, r3
  4149. 800207e: bf0c ite eq
  4150. 8002080: 2301 moveq r3, #1
  4151. 8002082: 2300 movne r3, #0
  4152. 8002084: b2db uxtb r3, r3
  4153. 8002086: f8c7 3138 str.w r3, [r7, #312] @ 0x138
  4154. if (crcPass) {
  4155. 800208a: f8d7 3138 ldr.w r3, [r7, #312] @ 0x138
  4156. 800208e: 2b00 cmp r3, #0
  4157. 8002090: d00b beq.n 80020aa <UartRxTask+0x37a>
  4158. #if UART_TASK_LOGS
  4159. printf ("Uart%d: Frame CRC PASS\n", uartTaskData->uartNumber);
  4160. 8002092: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4161. 8002096: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  4162. 800209a: 4619 mov r1, r3
  4163. 800209c: 4832 ldr r0, [pc, #200] @ (8002168 <UartRxTask+0x438>)
  4164. 800209e: f00d f8a5 bl 800f1ec <iprintf>
  4165. #endif
  4166. receverState = srExecuteCmd;
  4167. 80020a2: 2303 movs r3, #3
  4168. 80020a4: f887 3133 strb.w r3, [r7, #307] @ 0x133
  4169. } else {
  4170. receverState = srFail;
  4171. }
  4172. break;
  4173. 80020a8: e10b b.n 80022c2 <UartRxTask+0x592>
  4174. receverState = srFail;
  4175. 80020aa: 2304 movs r3, #4
  4176. 80020ac: f887 3133 strb.w r3, [r7, #307] @ 0x133
  4177. break;
  4178. 80020b0: e107 b.n 80022c2 <UartRxTask+0x592>
  4179. case srExecuteCmd:
  4180. if ((uartTaskData->processDataCb != NULL) || (uartTaskData->processRxDataMsgBuffer != NULL)) {
  4181. 80020b2: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4182. 80020b6: 6a9b ldr r3, [r3, #40] @ 0x28
  4183. 80020b8: 2b00 cmp r3, #0
  4184. 80020ba: d104 bne.n 80020c6 <UartRxTask+0x396>
  4185. 80020bc: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4186. 80020c0: 6a5b ldr r3, [r3, #36] @ 0x24
  4187. 80020c2: 2b00 cmp r3, #0
  4188. 80020c4: d01e beq.n 8002104 <UartRxTask+0x3d4>
  4189. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  4190. 80020c6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4191. 80020ca: 6a1b ldr r3, [r3, #32]
  4192. 80020cc: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4193. 80020d0: 4618 mov r0, r3
  4194. 80020d2: f009 fb39 bl 800b748 <osMutexAcquire>
  4195. memcpy (spFrameData.dataBuffer, &(uartTaskData->frameData[FRAME_HEADER_LENGTH]), spFrameData.frameHeader.frameDataLength);
  4196. 80020d6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4197. 80020da: 691b ldr r3, [r3, #16]
  4198. 80020dc: f103 0108 add.w r1, r3, #8
  4199. 80020e0: f507 73a0 add.w r3, r7, #320 @ 0x140
  4200. 80020e4: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  4201. 80020e8: 889b ldrh r3, [r3, #4]
  4202. 80020ea: 461a mov r2, r3
  4203. 80020ec: f107 0310 add.w r3, r7, #16
  4204. 80020f0: 330c adds r3, #12
  4205. 80020f2: 4618 mov r0, r3
  4206. 80020f4: f00d f9a1 bl 800f43a <memcpy>
  4207. osMutexRelease (uartTaskData->rxDataBufferMutex);
  4208. 80020f8: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4209. 80020fc: 6a1b ldr r3, [r3, #32]
  4210. 80020fe: 4618 mov r0, r3
  4211. 8002100: f009 fb6d bl 800b7de <osMutexRelease>
  4212. }
  4213. if (uartTaskData->processRxDataMsgBuffer != NULL) {
  4214. 8002104: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4215. 8002108: 6a5b ldr r3, [r3, #36] @ 0x24
  4216. 800210a: 2b00 cmp r3, #0
  4217. 800210c: d015 beq.n 800213a <UartRxTask+0x40a>
  4218. if(xMessageBufferSend (uartTaskData->processRxDataMsgBuffer, &spFrameData, sizeof (SerialProtocolFrameHeader) + spFrameData.frameHeader.frameDataLength, pdMS_TO_TICKS (200)) == pdFALSE)
  4219. 800210e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4220. 8002112: 6a58 ldr r0, [r3, #36] @ 0x24
  4221. 8002114: f507 73a0 add.w r3, r7, #320 @ 0x140
  4222. 8002118: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  4223. 800211c: 889b ldrh r3, [r3, #4]
  4224. 800211e: f103 020c add.w r2, r3, #12
  4225. 8002122: f107 0110 add.w r1, r7, #16
  4226. 8002126: 23c8 movs r3, #200 @ 0xc8
  4227. 8002128: f00a fbc8 bl 800c8bc <xStreamBufferSend>
  4228. 800212c: 4603 mov r3, r0
  4229. 800212e: 2b00 cmp r3, #0
  4230. 8002130: d103 bne.n 800213a <UartRxTask+0x40a>
  4231. {
  4232. receverState = srFail;
  4233. 8002132: 2304 movs r3, #4
  4234. 8002134: f887 3133 strb.w r3, [r7, #307] @ 0x133
  4235. break;
  4236. 8002138: e0c3 b.n 80022c2 <UartRxTask+0x592>
  4237. }
  4238. }
  4239. if (uartTaskData->processDataCb != NULL) {
  4240. 800213a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4241. 800213e: 6a9b ldr r3, [r3, #40] @ 0x28
  4242. 8002140: 2b00 cmp r3, #0
  4243. 8002142: d008 beq.n 8002156 <UartRxTask+0x426>
  4244. uartTaskData->processDataCb (uartTaskData, &spFrameData);
  4245. 8002144: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4246. 8002148: 6a9b ldr r3, [r3, #40] @ 0x28
  4247. 800214a: f107 0210 add.w r2, r7, #16
  4248. 800214e: 4611 mov r1, r2
  4249. 8002150: f8d7 012c ldr.w r0, [r7, #300] @ 0x12c
  4250. 8002154: 4798 blx r3
  4251. }
  4252. receverState = srFinish;
  4253. 8002156: 2305 movs r3, #5
  4254. 8002158: f887 3133 strb.w r3, [r7, #307] @ 0x133
  4255. break;
  4256. 800215c: e0b1 b.n 80022c2 <UartRxTask+0x592>
  4257. 800215e: bf00 nop
  4258. 8002160: 0800ffe4 .word 0x0800ffe4
  4259. 8002164: 2400008c .word 0x2400008c
  4260. 8002168: 08010004 .word 0x08010004
  4261. case srFail:
  4262. dataToSend = 0;
  4263. 800216c: 2300 movs r3, #0
  4264. 800216e: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  4265. if ((frameTimeout == pdTRUE) && (frameBytesCount > 2)) {
  4266. 8002172: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  4267. 8002176: 2b01 cmp r3, #1
  4268. 8002178: d124 bne.n 80021c4 <UartRxTask+0x494>
  4269. 800217a: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  4270. 800217e: 2b02 cmp r3, #2
  4271. 8002180: d920 bls.n 80021c4 <UartRxTask+0x494>
  4272. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spTimeout, NULL, 0);
  4273. 8002182: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4274. 8002186: 6898 ldr r0, [r3, #8]
  4275. 8002188: f507 73a0 add.w r3, r7, #320 @ 0x140
  4276. 800218c: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  4277. 8002190: 8819 ldrh r1, [r3, #0]
  4278. 8002192: f507 73a0 add.w r3, r7, #320 @ 0x140
  4279. 8002196: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  4280. 800219a: 789a ldrb r2, [r3, #2]
  4281. 800219c: 2300 movs r3, #0
  4282. 800219e: 9301 str r3, [sp, #4]
  4283. 80021a0: 2300 movs r3, #0
  4284. 80021a2: 9300 str r3, [sp, #0]
  4285. 80021a4: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  4286. 80021a8: f7ff f8a6 bl 80012f8 <PrepareRespFrame>
  4287. 80021ac: 4603 mov r3, r0
  4288. 80021ae: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  4289. #if UART_TASK_LOGS
  4290. printf ("Uart%d: RX data receiver timeout!\n", uartTaskData->uartNumber);
  4291. 80021b2: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4292. 80021b6: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  4293. 80021ba: 4619 mov r1, r3
  4294. 80021bc: 4844 ldr r0, [pc, #272] @ (80022d0 <UartRxTask+0x5a0>)
  4295. 80021be: f00d f815 bl 800f1ec <iprintf>
  4296. 80021c2: e03c b.n 800223e <UartRxTask+0x50e>
  4297. #endif
  4298. } else if (!crcPass) {
  4299. 80021c4: f8d7 3138 ldr.w r3, [r7, #312] @ 0x138
  4300. 80021c8: 2b00 cmp r3, #0
  4301. 80021ca: d120 bne.n 800220e <UartRxTask+0x4de>
  4302. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spCrcFail, NULL, 0);
  4303. 80021cc: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4304. 80021d0: 6898 ldr r0, [r3, #8]
  4305. 80021d2: f507 73a0 add.w r3, r7, #320 @ 0x140
  4306. 80021d6: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  4307. 80021da: 8819 ldrh r1, [r3, #0]
  4308. 80021dc: f507 73a0 add.w r3, r7, #320 @ 0x140
  4309. 80021e0: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  4310. 80021e4: 789a ldrb r2, [r3, #2]
  4311. 80021e6: 2300 movs r3, #0
  4312. 80021e8: 9301 str r3, [sp, #4]
  4313. 80021ea: 2300 movs r3, #0
  4314. 80021ec: 9300 str r3, [sp, #0]
  4315. 80021ee: f06f 0301 mvn.w r3, #1
  4316. 80021f2: f7ff f881 bl 80012f8 <PrepareRespFrame>
  4317. 80021f6: 4603 mov r3, r0
  4318. 80021f8: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  4319. #if UART_TASK_LOGS
  4320. printf ("Uart%d: Frame CRC FAIL\n", uartTaskData->uartNumber);
  4321. 80021fc: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4322. 8002200: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  4323. 8002204: 4619 mov r1, r3
  4324. 8002206: 4833 ldr r0, [pc, #204] @ (80022d4 <UartRxTask+0x5a4>)
  4325. 8002208: f00c fff0 bl 800f1ec <iprintf>
  4326. 800220c: e017 b.n 800223e <UartRxTask+0x50e>
  4327. #endif
  4328. }
  4329. else
  4330. {
  4331. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spInternalError, NULL, 0);
  4332. 800220e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4333. 8002212: 6898 ldr r0, [r3, #8]
  4334. 8002214: f507 73a0 add.w r3, r7, #320 @ 0x140
  4335. 8002218: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  4336. 800221c: 8819 ldrh r1, [r3, #0]
  4337. 800221e: f507 73a0 add.w r3, r7, #320 @ 0x140
  4338. 8002222: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  4339. 8002226: 789a ldrb r2, [r3, #2]
  4340. 8002228: 2300 movs r3, #0
  4341. 800222a: 9301 str r3, [sp, #4]
  4342. 800222c: 2300 movs r3, #0
  4343. 800222e: 9300 str r3, [sp, #0]
  4344. 8002230: f06f 0302 mvn.w r3, #2
  4345. 8002234: f7ff f860 bl 80012f8 <PrepareRespFrame>
  4346. 8002238: 4603 mov r3, r0
  4347. 800223a: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  4348. }
  4349. if (dataToSend > 0) {
  4350. 800223e: f8b7 313c ldrh.w r3, [r7, #316] @ 0x13c
  4351. 8002242: 2b00 cmp r3, #0
  4352. 8002244: d00a beq.n 800225c <UartRxTask+0x52c>
  4353. HAL_UART_Transmit_IT (uartTaskData->huart, uartTaskData->uartTxBuffer, dataToSend);
  4354. 8002246: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4355. 800224a: 6b18 ldr r0, [r3, #48] @ 0x30
  4356. 800224c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4357. 8002250: 689b ldr r3, [r3, #8]
  4358. 8002252: f8b7 213c ldrh.w r2, [r7, #316] @ 0x13c
  4359. 8002256: 4619 mov r1, r3
  4360. 8002258: f006 fb40 bl 80088dc <HAL_UART_Transmit_IT>
  4361. }
  4362. #if UART_TASK_LOGS
  4363. printf ("Uart%d: TX bytes sent: %d\n", dataToSend, uartTaskData->uartNumber);
  4364. 800225c: f8b7 113c ldrh.w r1, [r7, #316] @ 0x13c
  4365. 8002260: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4366. 8002264: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  4367. 8002268: 461a mov r2, r3
  4368. 800226a: 481b ldr r0, [pc, #108] @ (80022d8 <UartRxTask+0x5a8>)
  4369. 800226c: f00c ffbe bl 800f1ec <iprintf>
  4370. #endif
  4371. receverState = srFinish;
  4372. 8002270: 2305 movs r3, #5
  4373. 8002272: f887 3133 strb.w r3, [r7, #307] @ 0x133
  4374. break;
  4375. 8002276: e024 b.n 80022c2 <UartRxTask+0x592>
  4376. case srFinish:
  4377. default:
  4378. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  4379. 8002278: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4380. 800227c: 6a1b ldr r3, [r3, #32]
  4381. 800227e: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4382. 8002282: 4618 mov r0, r3
  4383. 8002284: f009 fa60 bl 800b748 <osMutexAcquire>
  4384. uartTaskData->frameBytesCount = 0;
  4385. 8002288: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4386. 800228c: 2200 movs r2, #0
  4387. 800228e: 82da strh r2, [r3, #22]
  4388. osMutexRelease (uartTaskData->rxDataBufferMutex);
  4389. 8002290: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  4390. 8002294: 6a1b ldr r3, [r3, #32]
  4391. 8002296: 4618 mov r0, r3
  4392. 8002298: f009 faa1 bl 800b7de <osMutexRelease>
  4393. spFrameData.frameHeader.frameCommand = spUnknown;
  4394. 800229c: f507 73a0 add.w r3, r7, #320 @ 0x140
  4395. 80022a0: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  4396. 80022a4: 2208 movs r2, #8
  4397. 80022a6: 709a strb r2, [r3, #2]
  4398. frameTotalLength = 0;
  4399. 80022a8: 2300 movs r3, #0
  4400. 80022aa: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  4401. outputDataBufferPos = 0;
  4402. 80022ae: 4b0b ldr r3, [pc, #44] @ (80022dc <UartRxTask+0x5ac>)
  4403. 80022b0: 2200 movs r2, #0
  4404. 80022b2: 801a strh r2, [r3, #0]
  4405. receverState = srWaitForHeader;
  4406. 80022b4: 2300 movs r3, #0
  4407. 80022b6: f887 3133 strb.w r3, [r7, #307] @ 0x133
  4408. proceed = pdFALSE;
  4409. 80022ba: 2300 movs r3, #0
  4410. 80022bc: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  4411. break;
  4412. 80022c0: bf00 nop
  4413. while (proceed) {
  4414. 80022c2: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
  4415. 80022c6: 2b00 cmp r3, #0
  4416. 80022c8: f47f ade0 bne.w 8001e8c <UartRxTask+0x15c>
  4417. frameTimeout = !(xTaskNotifyWait (0, 0, &bytesRec, pdMS_TO_TICKS (FRAME_TIMEOUT_MS)));
  4418. 80022cc: e581 b.n 8001dd2 <UartRxTask+0xa2>
  4419. 80022ce: bf00 nop
  4420. 80022d0: 0801001c .word 0x0801001c
  4421. 80022d4: 08010040 .word 0x08010040
  4422. 80022d8: 08010058 .word 0x08010058
  4423. 80022dc: 24000720 .word 0x24000720
  4424. 080022e0 <Uart1ReceivedDataProcessCallback>:
  4425. void Uart8ReceivedDataProcessCallback (void* arg, SerialProtocolFrameData* spFrameData)
  4426. {
  4427. Uart1ReceivedDataProcessCallback(arg, spFrameData);
  4428. }
  4429. void Uart1ReceivedDataProcessCallback (void* arg, SerialProtocolFrameData* spFrameData) {
  4430. 80022e0: b580 push {r7, lr}
  4431. 80022e2: b08c sub sp, #48 @ 0x30
  4432. 80022e4: af02 add r7, sp, #8
  4433. 80022e6: 6078 str r0, [r7, #4]
  4434. 80022e8: 6039 str r1, [r7, #0]
  4435. UartTaskData* uartTaskData = (UartTaskData*)arg;
  4436. 80022ea: 687b ldr r3, [r7, #4]
  4437. 80022ec: 60fb str r3, [r7, #12]
  4438. uint16_t dataToSend = 0;
  4439. 80022ee: 2300 movs r3, #0
  4440. 80022f0: 84fb strh r3, [r7, #38] @ 0x26
  4441. outputDataBufferPos = 0;
  4442. 80022f2: 4b8b ldr r3, [pc, #556] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4443. 80022f4: 2200 movs r2, #0
  4444. 80022f6: 801a strh r2, [r3, #0]
  4445. switch (spFrameData->frameHeader.frameCommand) {
  4446. 80022f8: 683b ldr r3, [r7, #0]
  4447. 80022fa: 789b ldrb r3, [r3, #2]
  4448. 80022fc: 2b07 cmp r3, #7
  4449. 80022fe: f200 80e1 bhi.w 80024c4 <Uart1ReceivedDataProcessCallback+0x1e4>
  4450. 8002302: a201 add r2, pc, #4 @ (adr r2, 8002308 <Uart1ReceivedDataProcessCallback+0x28>)
  4451. 8002304: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  4452. 8002308: 08002329 .word 0x08002329
  4453. 800230c: 08002403 .word 0x08002403
  4454. 8002310: 080024c5 .word 0x080024c5
  4455. 8002314: 080024c5 .word 0x080024c5
  4456. 8002318: 080024c5 .word 0x080024c5
  4457. 800231c: 080024c5 .word 0x080024c5
  4458. 8002320: 080024c5 .word 0x080024c5
  4459. 8002324: 080024c5 .word 0x080024c5
  4460. case spGetElectricalMeasurments:
  4461. osMutexAcquire (resMeasurementsMutex, osWaitForever);
  4462. 8002328: 4b7e ldr r3, [pc, #504] @ (8002524 <Uart1ReceivedDataProcessCallback+0x244>)
  4463. 800232a: 681b ldr r3, [r3, #0]
  4464. 800232c: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4465. 8002330: 4618 mov r0, r3
  4466. 8002332: f009 fa09 bl 800b748 <osMutexAcquire>
  4467. for(int i = 0; i < 3; i++)
  4468. 8002336: 2300 movs r3, #0
  4469. 8002338: 623b str r3, [r7, #32]
  4470. 800233a: e00b b.n 8002354 <Uart1ReceivedDataProcessCallback+0x74>
  4471. {
  4472. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &resMeasurements.voltageRMS[i], sizeof(float));
  4473. 800233c: 6a3b ldr r3, [r7, #32]
  4474. 800233e: 009b lsls r3, r3, #2
  4475. 8002340: 4a79 ldr r2, [pc, #484] @ (8002528 <Uart1ReceivedDataProcessCallback+0x248>)
  4476. 8002342: 441a add r2, r3
  4477. 8002344: 2304 movs r3, #4
  4478. 8002346: 4976 ldr r1, [pc, #472] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4479. 8002348: 4878 ldr r0, [pc, #480] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4480. 800234a: f7fe ffa3 bl 8001294 <WriteDataToBuffer>
  4481. for(int i = 0; i < 3; i++)
  4482. 800234e: 6a3b ldr r3, [r7, #32]
  4483. 8002350: 3301 adds r3, #1
  4484. 8002352: 623b str r3, [r7, #32]
  4485. 8002354: 6a3b ldr r3, [r7, #32]
  4486. 8002356: 2b02 cmp r3, #2
  4487. 8002358: ddf0 ble.n 800233c <Uart1ReceivedDataProcessCallback+0x5c>
  4488. }
  4489. for(int i = 0; i < 3; i++)
  4490. 800235a: 2300 movs r3, #0
  4491. 800235c: 61fb str r3, [r7, #28]
  4492. 800235e: e00d b.n 800237c <Uart1ReceivedDataProcessCallback+0x9c>
  4493. {
  4494. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &resMeasurements.voltagePeak[i], sizeof(float));
  4495. 8002360: 69fb ldr r3, [r7, #28]
  4496. 8002362: 3302 adds r3, #2
  4497. 8002364: 009b lsls r3, r3, #2
  4498. 8002366: 4a70 ldr r2, [pc, #448] @ (8002528 <Uart1ReceivedDataProcessCallback+0x248>)
  4499. 8002368: 4413 add r3, r2
  4500. 800236a: 1d1a adds r2, r3, #4
  4501. 800236c: 2304 movs r3, #4
  4502. 800236e: 496c ldr r1, [pc, #432] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4503. 8002370: 486e ldr r0, [pc, #440] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4504. 8002372: f7fe ff8f bl 8001294 <WriteDataToBuffer>
  4505. for(int i = 0; i < 3; i++)
  4506. 8002376: 69fb ldr r3, [r7, #28]
  4507. 8002378: 3301 adds r3, #1
  4508. 800237a: 61fb str r3, [r7, #28]
  4509. 800237c: 69fb ldr r3, [r7, #28]
  4510. 800237e: 2b02 cmp r3, #2
  4511. 8002380: ddee ble.n 8002360 <Uart1ReceivedDataProcessCallback+0x80>
  4512. }
  4513. for(int i = 0; i < 3; i++)
  4514. 8002382: 2300 movs r3, #0
  4515. 8002384: 61bb str r3, [r7, #24]
  4516. 8002386: e00c b.n 80023a2 <Uart1ReceivedDataProcessCallback+0xc2>
  4517. {
  4518. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &resMeasurements.currentRMS[i], sizeof(float));
  4519. 8002388: 69bb ldr r3, [r7, #24]
  4520. 800238a: 3306 adds r3, #6
  4521. 800238c: 009b lsls r3, r3, #2
  4522. 800238e: 4a66 ldr r2, [pc, #408] @ (8002528 <Uart1ReceivedDataProcessCallback+0x248>)
  4523. 8002390: 441a add r2, r3
  4524. 8002392: 2304 movs r3, #4
  4525. 8002394: 4962 ldr r1, [pc, #392] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4526. 8002396: 4865 ldr r0, [pc, #404] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4527. 8002398: f7fe ff7c bl 8001294 <WriteDataToBuffer>
  4528. for(int i = 0; i < 3; i++)
  4529. 800239c: 69bb ldr r3, [r7, #24]
  4530. 800239e: 3301 adds r3, #1
  4531. 80023a0: 61bb str r3, [r7, #24]
  4532. 80023a2: 69bb ldr r3, [r7, #24]
  4533. 80023a4: 2b02 cmp r3, #2
  4534. 80023a6: ddef ble.n 8002388 <Uart1ReceivedDataProcessCallback+0xa8>
  4535. }
  4536. for(int i = 0; i < 3; i++)
  4537. 80023a8: 2300 movs r3, #0
  4538. 80023aa: 617b str r3, [r7, #20]
  4539. 80023ac: e00d b.n 80023ca <Uart1ReceivedDataProcessCallback+0xea>
  4540. {
  4541. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &resMeasurements.currentPeak[i], sizeof(float));
  4542. 80023ae: 697b ldr r3, [r7, #20]
  4543. 80023b0: 3308 adds r3, #8
  4544. 80023b2: 009b lsls r3, r3, #2
  4545. 80023b4: 4a5c ldr r2, [pc, #368] @ (8002528 <Uart1ReceivedDataProcessCallback+0x248>)
  4546. 80023b6: 4413 add r3, r2
  4547. 80023b8: 1d1a adds r2, r3, #4
  4548. 80023ba: 2304 movs r3, #4
  4549. 80023bc: 4958 ldr r1, [pc, #352] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4550. 80023be: 485b ldr r0, [pc, #364] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4551. 80023c0: f7fe ff68 bl 8001294 <WriteDataToBuffer>
  4552. for(int i = 0; i < 3; i++)
  4553. 80023c4: 697b ldr r3, [r7, #20]
  4554. 80023c6: 3301 adds r3, #1
  4555. 80023c8: 617b str r3, [r7, #20]
  4556. 80023ca: 697b ldr r3, [r7, #20]
  4557. 80023cc: 2b02 cmp r3, #2
  4558. 80023ce: ddee ble.n 80023ae <Uart1ReceivedDataProcessCallback+0xce>
  4559. }
  4560. for(int i = 0; i < 3; i++)
  4561. 80023d0: 2300 movs r3, #0
  4562. 80023d2: 613b str r3, [r7, #16]
  4563. 80023d4: e00c b.n 80023f0 <Uart1ReceivedDataProcessCallback+0x110>
  4564. {
  4565. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &resMeasurements.power[i], sizeof(float));
  4566. 80023d6: 693b ldr r3, [r7, #16]
  4567. 80023d8: 330c adds r3, #12
  4568. 80023da: 009b lsls r3, r3, #2
  4569. 80023dc: 4a52 ldr r2, [pc, #328] @ (8002528 <Uart1ReceivedDataProcessCallback+0x248>)
  4570. 80023de: 441a add r2, r3
  4571. 80023e0: 2304 movs r3, #4
  4572. 80023e2: 494f ldr r1, [pc, #316] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4573. 80023e4: 4851 ldr r0, [pc, #324] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4574. 80023e6: f7fe ff55 bl 8001294 <WriteDataToBuffer>
  4575. for(int i = 0; i < 3; i++)
  4576. 80023ea: 693b ldr r3, [r7, #16]
  4577. 80023ec: 3301 adds r3, #1
  4578. 80023ee: 613b str r3, [r7, #16]
  4579. 80023f0: 693b ldr r3, [r7, #16]
  4580. 80023f2: 2b02 cmp r3, #2
  4581. 80023f4: ddef ble.n 80023d6 <Uart1ReceivedDataProcessCallback+0xf6>
  4582. }
  4583. osMutexRelease(resMeasurementsMutex);
  4584. 80023f6: 4b4b ldr r3, [pc, #300] @ (8002524 <Uart1ReceivedDataProcessCallback+0x244>)
  4585. 80023f8: 681b ldr r3, [r3, #0]
  4586. 80023fa: 4618 mov r0, r3
  4587. 80023fc: f009 f9ef bl 800b7de <osMutexRelease>
  4588. break;
  4589. 8002400: e061 b.n 80024c6 <Uart1ReceivedDataProcessCallback+0x1e6>
  4590. case spGetSensorMeasurments:
  4591. osMutexAcquire (resMeasurementsMutex, osWaitForever);
  4592. 8002402: 4b48 ldr r3, [pc, #288] @ (8002524 <Uart1ReceivedDataProcessCallback+0x244>)
  4593. 8002404: 681b ldr r3, [r3, #0]
  4594. 8002406: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4595. 800240a: 4618 mov r0, r3
  4596. 800240c: f009 f99c bl 800b748 <osMutexAcquire>
  4597. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvTemperature[0], sizeof(float));
  4598. 8002410: 2304 movs r3, #4
  4599. 8002412: 4a47 ldr r2, [pc, #284] @ (8002530 <Uart1ReceivedDataProcessCallback+0x250>)
  4600. 8002414: 4942 ldr r1, [pc, #264] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4601. 8002416: 4845 ldr r0, [pc, #276] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4602. 8002418: f7fe ff3c bl 8001294 <WriteDataToBuffer>
  4603. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvTemperature[1], sizeof(float));
  4604. 800241c: 2304 movs r3, #4
  4605. 800241e: 4a45 ldr r2, [pc, #276] @ (8002534 <Uart1ReceivedDataProcessCallback+0x254>)
  4606. 8002420: 493f ldr r1, [pc, #252] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4607. 8002422: 4842 ldr r0, [pc, #264] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4608. 8002424: f7fe ff36 bl 8001294 <WriteDataToBuffer>
  4609. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.fanVoltage, sizeof(float));
  4610. 8002428: 2304 movs r3, #4
  4611. 800242a: 4a43 ldr r2, [pc, #268] @ (8002538 <Uart1ReceivedDataProcessCallback+0x258>)
  4612. 800242c: 493c ldr r1, [pc, #240] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4613. 800242e: 483f ldr r0, [pc, #252] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4614. 8002430: f7fe ff30 bl 8001294 <WriteDataToBuffer>
  4615. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvEncoder, sizeof(float));
  4616. 8002434: 2304 movs r3, #4
  4617. 8002436: 4a41 ldr r2, [pc, #260] @ (800253c <Uart1ReceivedDataProcessCallback+0x25c>)
  4618. 8002438: 4939 ldr r1, [pc, #228] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4619. 800243a: 483c ldr r0, [pc, #240] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4620. 800243c: f7fe ff2a bl 8001294 <WriteDataToBuffer>
  4621. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXStatus, sizeof(uint8_t));
  4622. 8002440: 2301 movs r3, #1
  4623. 8002442: 4a3f ldr r2, [pc, #252] @ (8002540 <Uart1ReceivedDataProcessCallback+0x260>)
  4624. 8002444: 4936 ldr r1, [pc, #216] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4625. 8002446: 4839 ldr r0, [pc, #228] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4626. 8002448: f7fe ff24 bl 8001294 <WriteDataToBuffer>
  4627. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYStatus, sizeof(uint8_t));
  4628. 800244c: 2301 movs r3, #1
  4629. 800244e: 4a3d ldr r2, [pc, #244] @ (8002544 <Uart1ReceivedDataProcessCallback+0x264>)
  4630. 8002450: 4933 ldr r1, [pc, #204] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4631. 8002452: 4836 ldr r0, [pc, #216] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4632. 8002454: f7fe ff1e bl 8001294 <WriteDataToBuffer>
  4633. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXAveCurrent, sizeof(float));
  4634. 8002458: 2304 movs r3, #4
  4635. 800245a: 4a3b ldr r2, [pc, #236] @ (8002548 <Uart1ReceivedDataProcessCallback+0x268>)
  4636. 800245c: 4930 ldr r1, [pc, #192] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4637. 800245e: 4833 ldr r0, [pc, #204] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4638. 8002460: f7fe ff18 bl 8001294 <WriteDataToBuffer>
  4639. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYAveCurrent, sizeof(float));
  4640. 8002464: 2304 movs r3, #4
  4641. 8002466: 4a39 ldr r2, [pc, #228] @ (800254c <Uart1ReceivedDataProcessCallback+0x26c>)
  4642. 8002468: 492d ldr r1, [pc, #180] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4643. 800246a: 4830 ldr r0, [pc, #192] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4644. 800246c: f7fe ff12 bl 8001294 <WriteDataToBuffer>
  4645. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXPeakCurrent, sizeof(float));
  4646. 8002470: 2304 movs r3, #4
  4647. 8002472: 4a37 ldr r2, [pc, #220] @ (8002550 <Uart1ReceivedDataProcessCallback+0x270>)
  4648. 8002474: 492a ldr r1, [pc, #168] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4649. 8002476: 482d ldr r0, [pc, #180] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4650. 8002478: f7fe ff0c bl 8001294 <WriteDataToBuffer>
  4651. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYPeakCurrent, sizeof(float));
  4652. 800247c: 2304 movs r3, #4
  4653. 800247e: 4a35 ldr r2, [pc, #212] @ (8002554 <Uart1ReceivedDataProcessCallback+0x274>)
  4654. 8002480: 4927 ldr r1, [pc, #156] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4655. 8002482: 482a ldr r0, [pc, #168] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4656. 8002484: f7fe ff06 bl 8001294 <WriteDataToBuffer>
  4657. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitSwitchUp, sizeof(uint8_t));
  4658. 8002488: 2301 movs r3, #1
  4659. 800248a: 4a33 ldr r2, [pc, #204] @ (8002558 <Uart1ReceivedDataProcessCallback+0x278>)
  4660. 800248c: 4924 ldr r1, [pc, #144] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4661. 800248e: 4827 ldr r0, [pc, #156] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4662. 8002490: f7fe ff00 bl 8001294 <WriteDataToBuffer>
  4663. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitSwitchDown, sizeof(uint8_t));
  4664. 8002494: 2301 movs r3, #1
  4665. 8002496: 4a31 ldr r2, [pc, #196] @ (800255c <Uart1ReceivedDataProcessCallback+0x27c>)
  4666. 8002498: 4921 ldr r1, [pc, #132] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4667. 800249a: 4824 ldr r0, [pc, #144] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4668. 800249c: f7fe fefa bl 8001294 <WriteDataToBuffer>
  4669. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitSwitchCenter, sizeof(uint8_t));
  4670. 80024a0: 2301 movs r3, #1
  4671. 80024a2: 4a2f ldr r2, [pc, #188] @ (8002560 <Uart1ReceivedDataProcessCallback+0x280>)
  4672. 80024a4: 491e ldr r1, [pc, #120] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4673. 80024a6: 4821 ldr r0, [pc, #132] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4674. 80024a8: f7fe fef4 bl 8001294 <WriteDataToBuffer>
  4675. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.powerSupplyFailMask, sizeof(uint8_t));
  4676. 80024ac: 2301 movs r3, #1
  4677. 80024ae: 4a2d ldr r2, [pc, #180] @ (8002564 <Uart1ReceivedDataProcessCallback+0x284>)
  4678. 80024b0: 491b ldr r1, [pc, #108] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4679. 80024b2: 481e ldr r0, [pc, #120] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4680. 80024b4: f7fe feee bl 8001294 <WriteDataToBuffer>
  4681. osMutexRelease(resMeasurementsMutex);
  4682. 80024b8: 4b1a ldr r3, [pc, #104] @ (8002524 <Uart1ReceivedDataProcessCallback+0x244>)
  4683. 80024ba: 681b ldr r3, [r3, #0]
  4684. 80024bc: 4618 mov r0, r3
  4685. 80024be: f009 f98e bl 800b7de <osMutexRelease>
  4686. break;
  4687. 80024c2: e000 b.n 80024c6 <Uart1ReceivedDataProcessCallback+0x1e6>
  4688. case spSetMotorYOn:
  4689. break;
  4690. case spSetDiodeOn: break;
  4691. case spSetmotorXMaxCurrent:
  4692. case spSetmotorYMaxCurrent: break;
  4693. default: break;
  4694. 80024c4: bf00 nop
  4695. }
  4696. if (outputDataBufferPos > 0) {
  4697. 80024c6: 4b16 ldr r3, [pc, #88] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4698. 80024c8: 881b ldrh r3, [r3, #0]
  4699. 80024ca: 2b00 cmp r3, #0
  4700. 80024cc: d00f beq.n 80024ee <Uart1ReceivedDataProcessCallback+0x20e>
  4701. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData->frameHeader.frameId, spFrameData->frameHeader.frameCommand, spOK, outputDataBuffer, outputDataBufferPos);
  4702. 80024ce: 68fb ldr r3, [r7, #12]
  4703. 80024d0: 6898 ldr r0, [r3, #8]
  4704. 80024d2: 683b ldr r3, [r7, #0]
  4705. 80024d4: 8819 ldrh r1, [r3, #0]
  4706. 80024d6: 683b ldr r3, [r7, #0]
  4707. 80024d8: 789a ldrb r2, [r3, #2]
  4708. 80024da: 4b11 ldr r3, [pc, #68] @ (8002520 <Uart1ReceivedDataProcessCallback+0x240>)
  4709. 80024dc: 881b ldrh r3, [r3, #0]
  4710. 80024de: 9301 str r3, [sp, #4]
  4711. 80024e0: 4b12 ldr r3, [pc, #72] @ (800252c <Uart1ReceivedDataProcessCallback+0x24c>)
  4712. 80024e2: 9300 str r3, [sp, #0]
  4713. 80024e4: 2300 movs r3, #0
  4714. 80024e6: f7fe ff07 bl 80012f8 <PrepareRespFrame>
  4715. 80024ea: 4603 mov r3, r0
  4716. 80024ec: 84fb strh r3, [r7, #38] @ 0x26
  4717. }
  4718. if (dataToSend > 0) {
  4719. 80024ee: 8cfb ldrh r3, [r7, #38] @ 0x26
  4720. 80024f0: 2b00 cmp r3, #0
  4721. 80024f2: d007 beq.n 8002504 <Uart1ReceivedDataProcessCallback+0x224>
  4722. HAL_UART_Transmit_IT (uartTaskData->huart, uartTaskData->uartTxBuffer, dataToSend);
  4723. 80024f4: 68fb ldr r3, [r7, #12]
  4724. 80024f6: 6b18 ldr r0, [r3, #48] @ 0x30
  4725. 80024f8: 68fb ldr r3, [r7, #12]
  4726. 80024fa: 689b ldr r3, [r3, #8]
  4727. 80024fc: 8cfa ldrh r2, [r7, #38] @ 0x26
  4728. 80024fe: 4619 mov r1, r3
  4729. 8002500: f006 f9ec bl 80088dc <HAL_UART_Transmit_IT>
  4730. }
  4731. #if UART_TASK_LOGS
  4732. printf ("Uart%d: TX bytes sent: %d\n", uartTaskData->uartNumber, dataToSend);
  4733. 8002504: 68fb ldr r3, [r7, #12]
  4734. 8002506: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  4735. 800250a: 4619 mov r1, r3
  4736. 800250c: 8cfb ldrh r3, [r7, #38] @ 0x26
  4737. 800250e: 461a mov r2, r3
  4738. 8002510: 4815 ldr r0, [pc, #84] @ (8002568 <Uart1ReceivedDataProcessCallback+0x288>)
  4739. 8002512: f00c fe6b bl 800f1ec <iprintf>
  4740. #endif
  4741. }
  4742. 8002516: bf00 nop
  4743. 8002518: 3728 adds r7, #40 @ 0x28
  4744. 800251a: 46bd mov sp, r7
  4745. 800251c: bd80 pop {r7, pc}
  4746. 800251e: bf00 nop
  4747. 8002520: 24000720 .word 0x24000720
  4748. 8002524: 24000788 .word 0x24000788
  4749. 8002528: 24000724 .word 0x24000724
  4750. 800252c: 240006a0 .word 0x240006a0
  4751. 8002530: 24000760 .word 0x24000760
  4752. 8002534: 24000764 .word 0x24000764
  4753. 8002538: 24000768 .word 0x24000768
  4754. 800253c: 2400076c .word 0x2400076c
  4755. 8002540: 24000770 .word 0x24000770
  4756. 8002544: 24000771 .word 0x24000771
  4757. 8002548: 24000774 .word 0x24000774
  4758. 800254c: 24000778 .word 0x24000778
  4759. 8002550: 2400077c .word 0x2400077c
  4760. 8002554: 24000780 .word 0x24000780
  4761. 8002558: 24000784 .word 0x24000784
  4762. 800255c: 24000785 .word 0x24000785
  4763. 8002560: 24000786 .word 0x24000786
  4764. 8002564: 24000787 .word 0x24000787
  4765. 8002568: 08010058 .word 0x08010058
  4766. 0800256c <Reset_Handler>:
  4767. .section .text.Reset_Handler
  4768. .weak Reset_Handler
  4769. .type Reset_Handler, %function
  4770. Reset_Handler:
  4771. ldr sp, =_estack /* set stack pointer */
  4772. 800256c: f8df d034 ldr.w sp, [pc, #52] @ 80025a4 <LoopFillZerobss+0xe>
  4773. /* Call the clock system initialization function.*/
  4774. bl SystemInit
  4775. 8002570: f7ff fa76 bl 8001a60 <SystemInit>
  4776. /* Copy the data segment initializers from flash to SRAM */
  4777. ldr r0, =_sdata
  4778. 8002574: 480c ldr r0, [pc, #48] @ (80025a8 <LoopFillZerobss+0x12>)
  4779. ldr r1, =_edata
  4780. 8002576: 490d ldr r1, [pc, #52] @ (80025ac <LoopFillZerobss+0x16>)
  4781. ldr r2, =_sidata
  4782. 8002578: 4a0d ldr r2, [pc, #52] @ (80025b0 <LoopFillZerobss+0x1a>)
  4783. movs r3, #0
  4784. 800257a: 2300 movs r3, #0
  4785. b LoopCopyDataInit
  4786. 800257c: e002 b.n 8002584 <LoopCopyDataInit>
  4787. 0800257e <CopyDataInit>:
  4788. CopyDataInit:
  4789. ldr r4, [r2, r3]
  4790. 800257e: 58d4 ldr r4, [r2, r3]
  4791. str r4, [r0, r3]
  4792. 8002580: 50c4 str r4, [r0, r3]
  4793. adds r3, r3, #4
  4794. 8002582: 3304 adds r3, #4
  4795. 08002584 <LoopCopyDataInit>:
  4796. LoopCopyDataInit:
  4797. adds r4, r0, r3
  4798. 8002584: 18c4 adds r4, r0, r3
  4799. cmp r4, r1
  4800. 8002586: 428c cmp r4, r1
  4801. bcc CopyDataInit
  4802. 8002588: d3f9 bcc.n 800257e <CopyDataInit>
  4803. /* Zero fill the bss segment. */
  4804. ldr r2, =_sbss
  4805. 800258a: 4a0a ldr r2, [pc, #40] @ (80025b4 <LoopFillZerobss+0x1e>)
  4806. ldr r4, =_ebss
  4807. 800258c: 4c0a ldr r4, [pc, #40] @ (80025b8 <LoopFillZerobss+0x22>)
  4808. movs r3, #0
  4809. 800258e: 2300 movs r3, #0
  4810. b LoopFillZerobss
  4811. 8002590: e001 b.n 8002596 <LoopFillZerobss>
  4812. 08002592 <FillZerobss>:
  4813. FillZerobss:
  4814. str r3, [r2]
  4815. 8002592: 6013 str r3, [r2, #0]
  4816. adds r2, r2, #4
  4817. 8002594: 3204 adds r2, #4
  4818. 08002596 <LoopFillZerobss>:
  4819. LoopFillZerobss:
  4820. cmp r2, r4
  4821. 8002596: 42a2 cmp r2, r4
  4822. bcc FillZerobss
  4823. 8002598: d3fb bcc.n 8002592 <FillZerobss>
  4824. /* Call static constructors */
  4825. bl __libc_init_array
  4826. 800259a: f00c ff27 bl 800f3ec <__libc_init_array>
  4827. /* Call the application's entry point.*/
  4828. bl main
  4829. 800259e: f7fe f873 bl 8000688 <main>
  4830. bx lr
  4831. 80025a2: 4770 bx lr
  4832. ldr sp, =_estack /* set stack pointer */
  4833. 80025a4: 24060000 .word 0x24060000
  4834. ldr r0, =_sdata
  4835. 80025a8: 24000000 .word 0x24000000
  4836. ldr r1, =_edata
  4837. 80025ac: 24000070 .word 0x24000070
  4838. ldr r2, =_sidata
  4839. 80025b0: 08010134 .word 0x08010134
  4840. ldr r2, =_sbss
  4841. 80025b4: 24000070 .word 0x24000070
  4842. ldr r4, =_ebss
  4843. 80025b8: 240128c8 .word 0x240128c8
  4844. 080025bc <ADC3_IRQHandler>:
  4845. * @retval None
  4846. */
  4847. .section .text.Default_Handler,"ax",%progbits
  4848. Default_Handler:
  4849. Infinite_Loop:
  4850. b Infinite_Loop
  4851. 80025bc: e7fe b.n 80025bc <ADC3_IRQHandler>
  4852. ...
  4853. 080025c0 <HAL_Init>:
  4854. * need to ensure that the SysTick time base is always set to 1 millisecond
  4855. * to have correct HAL operation.
  4856. * @retval HAL status
  4857. */
  4858. HAL_StatusTypeDef HAL_Init(void)
  4859. {
  4860. 80025c0: b580 push {r7, lr}
  4861. 80025c2: b082 sub sp, #8
  4862. 80025c4: af00 add r7, sp, #0
  4863. __HAL_ART_CONFIG_BASE_ADDRESS(0x08100000UL); /* Configure the Cortex-M4 ART Base address to the Flash Bank 2 : */
  4864. __HAL_ART_ENABLE(); /* Enable the Cortex-M4 ART */
  4865. #endif /* DUAL_CORE && CORE_CM4 */
  4866. /* Set Interrupt Group Priority */
  4867. HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
  4868. 80025c6: 2003 movs r0, #3
  4869. 80025c8: f000 f90f bl 80027ea <HAL_NVIC_SetPriorityGrouping>
  4870. /* Update the SystemCoreClock global variable */
  4871. #if defined(RCC_D1CFGR_D1CPRE)
  4872. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> RCC_D1CFGR_D1CPRE_Pos]) & 0x1FU);
  4873. 80025cc: f003 fdde bl 800618c <HAL_RCC_GetSysClockFreq>
  4874. 80025d0: 4602 mov r2, r0
  4875. 80025d2: 4b15 ldr r3, [pc, #84] @ (8002628 <HAL_Init+0x68>)
  4876. 80025d4: 699b ldr r3, [r3, #24]
  4877. 80025d6: 0a1b lsrs r3, r3, #8
  4878. 80025d8: f003 030f and.w r3, r3, #15
  4879. 80025dc: 4913 ldr r1, [pc, #76] @ (800262c <HAL_Init+0x6c>)
  4880. 80025de: 5ccb ldrb r3, [r1, r3]
  4881. 80025e0: f003 031f and.w r3, r3, #31
  4882. 80025e4: fa22 f303 lsr.w r3, r2, r3
  4883. 80025e8: 607b str r3, [r7, #4]
  4884. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE)>> RCC_CDCFGR1_CDCPRE_Pos]) & 0x1FU);
  4885. #endif
  4886. /* Update the SystemD2Clock global variable */
  4887. #if defined(RCC_D1CFGR_HPRE)
  4888. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE)>> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  4889. 80025ea: 4b0f ldr r3, [pc, #60] @ (8002628 <HAL_Init+0x68>)
  4890. 80025ec: 699b ldr r3, [r3, #24]
  4891. 80025ee: f003 030f and.w r3, r3, #15
  4892. 80025f2: 4a0e ldr r2, [pc, #56] @ (800262c <HAL_Init+0x6c>)
  4893. 80025f4: 5cd3 ldrb r3, [r2, r3]
  4894. 80025f6: f003 031f and.w r3, r3, #31
  4895. 80025fa: 687a ldr r2, [r7, #4]
  4896. 80025fc: fa22 f303 lsr.w r3, r2, r3
  4897. 8002600: 4a0b ldr r2, [pc, #44] @ (8002630 <HAL_Init+0x70>)
  4898. 8002602: 6013 str r3, [r2, #0]
  4899. #endif
  4900. #if defined(DUAL_CORE) && defined(CORE_CM4)
  4901. SystemCoreClock = SystemD2Clock;
  4902. #else
  4903. SystemCoreClock = common_system_clock;
  4904. 8002604: 4a0b ldr r2, [pc, #44] @ (8002634 <HAL_Init+0x74>)
  4905. 8002606: 687b ldr r3, [r7, #4]
  4906. 8002608: 6013 str r3, [r2, #0]
  4907. #endif /* DUAL_CORE && CORE_CM4 */
  4908. /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */
  4909. if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
  4910. 800260a: 200f movs r0, #15
  4911. 800260c: f7ff f8c4 bl 8001798 <HAL_InitTick>
  4912. 8002610: 4603 mov r3, r0
  4913. 8002612: 2b00 cmp r3, #0
  4914. 8002614: d001 beq.n 800261a <HAL_Init+0x5a>
  4915. {
  4916. return HAL_ERROR;
  4917. 8002616: 2301 movs r3, #1
  4918. 8002618: e002 b.n 8002620 <HAL_Init+0x60>
  4919. }
  4920. /* Init the low level hardware */
  4921. HAL_MspInit();
  4922. 800261a: f7fe ff0b bl 8001434 <HAL_MspInit>
  4923. /* Return function status */
  4924. return HAL_OK;
  4925. 800261e: 2300 movs r3, #0
  4926. }
  4927. 8002620: 4618 mov r0, r3
  4928. 8002622: 3708 adds r7, #8
  4929. 8002624: 46bd mov sp, r7
  4930. 8002626: bd80 pop {r7, pc}
  4931. 8002628: 58024400 .word 0x58024400
  4932. 800262c: 080100b0 .word 0x080100b0
  4933. 8002630: 24000004 .word 0x24000004
  4934. 8002634: 24000000 .word 0x24000000
  4935. 08002638 <HAL_IncTick>:
  4936. * @note This function is declared as __weak to be overwritten in case of other
  4937. * implementations in user file.
  4938. * @retval None
  4939. */
  4940. __weak void HAL_IncTick(void)
  4941. {
  4942. 8002638: b480 push {r7}
  4943. 800263a: af00 add r7, sp, #0
  4944. uwTick += (uint32_t)uwTickFreq;
  4945. 800263c: 4b06 ldr r3, [pc, #24] @ (8002658 <HAL_IncTick+0x20>)
  4946. 800263e: 781b ldrb r3, [r3, #0]
  4947. 8002640: 461a mov r2, r3
  4948. 8002642: 4b06 ldr r3, [pc, #24] @ (800265c <HAL_IncTick+0x24>)
  4949. 8002644: 681b ldr r3, [r3, #0]
  4950. 8002646: 4413 add r3, r2
  4951. 8002648: 4a04 ldr r2, [pc, #16] @ (800265c <HAL_IncTick+0x24>)
  4952. 800264a: 6013 str r3, [r2, #0]
  4953. }
  4954. 800264c: bf00 nop
  4955. 800264e: 46bd mov sp, r7
  4956. 8002650: f85d 7b04 ldr.w r7, [sp], #4
  4957. 8002654: 4770 bx lr
  4958. 8002656: bf00 nop
  4959. 8002658: 2400000c .word 0x2400000c
  4960. 800265c: 24000790 .word 0x24000790
  4961. 08002660 <HAL_GetTick>:
  4962. * @note This function is declared as __weak to be overwritten in case of other
  4963. * implementations in user file.
  4964. * @retval tick value
  4965. */
  4966. __weak uint32_t HAL_GetTick(void)
  4967. {
  4968. 8002660: b480 push {r7}
  4969. 8002662: af00 add r7, sp, #0
  4970. return uwTick;
  4971. 8002664: 4b03 ldr r3, [pc, #12] @ (8002674 <HAL_GetTick+0x14>)
  4972. 8002666: 681b ldr r3, [r3, #0]
  4973. }
  4974. 8002668: 4618 mov r0, r3
  4975. 800266a: 46bd mov sp, r7
  4976. 800266c: f85d 7b04 ldr.w r7, [sp], #4
  4977. 8002670: 4770 bx lr
  4978. 8002672: bf00 nop
  4979. 8002674: 24000790 .word 0x24000790
  4980. 08002678 <HAL_GetREVID>:
  4981. /**
  4982. * @brief Returns the device revision identifier.
  4983. * @retval Device revision identifier
  4984. */
  4985. uint32_t HAL_GetREVID(void)
  4986. {
  4987. 8002678: b480 push {r7}
  4988. 800267a: af00 add r7, sp, #0
  4989. return((DBGMCU->IDCODE) >> 16);
  4990. 800267c: 4b03 ldr r3, [pc, #12] @ (800268c <HAL_GetREVID+0x14>)
  4991. 800267e: 681b ldr r3, [r3, #0]
  4992. 8002680: 0c1b lsrs r3, r3, #16
  4993. }
  4994. 8002682: 4618 mov r0, r3
  4995. 8002684: 46bd mov sp, r7
  4996. 8002686: f85d 7b04 ldr.w r7, [sp], #4
  4997. 800268a: 4770 bx lr
  4998. 800268c: 5c001000 .word 0x5c001000
  4999. 08002690 <__NVIC_SetPriorityGrouping>:
  5000. {
  5001. 8002690: b480 push {r7}
  5002. 8002692: b085 sub sp, #20
  5003. 8002694: af00 add r7, sp, #0
  5004. 8002696: 6078 str r0, [r7, #4]
  5005. uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
  5006. 8002698: 687b ldr r3, [r7, #4]
  5007. 800269a: f003 0307 and.w r3, r3, #7
  5008. 800269e: 60fb str r3, [r7, #12]
  5009. reg_value = SCB->AIRCR; /* read old register configuration */
  5010. 80026a0: 4b0b ldr r3, [pc, #44] @ (80026d0 <__NVIC_SetPriorityGrouping+0x40>)
  5011. 80026a2: 68db ldr r3, [r3, #12]
  5012. 80026a4: 60bb str r3, [r7, #8]
  5013. reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */
  5014. 80026a6: 68ba ldr r2, [r7, #8]
  5015. 80026a8: f64f 03ff movw r3, #63743 @ 0xf8ff
  5016. 80026ac: 4013 ands r3, r2
  5017. 80026ae: 60bb str r3, [r7, #8]
  5018. (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */
  5019. 80026b0: 68fb ldr r3, [r7, #12]
  5020. 80026b2: 021a lsls r2, r3, #8
  5021. ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
  5022. 80026b4: 68bb ldr r3, [r7, #8]
  5023. 80026b6: 431a orrs r2, r3
  5024. reg_value = (reg_value |
  5025. 80026b8: 4b06 ldr r3, [pc, #24] @ (80026d4 <__NVIC_SetPriorityGrouping+0x44>)
  5026. 80026ba: 4313 orrs r3, r2
  5027. 80026bc: 60bb str r3, [r7, #8]
  5028. SCB->AIRCR = reg_value;
  5029. 80026be: 4a04 ldr r2, [pc, #16] @ (80026d0 <__NVIC_SetPriorityGrouping+0x40>)
  5030. 80026c0: 68bb ldr r3, [r7, #8]
  5031. 80026c2: 60d3 str r3, [r2, #12]
  5032. }
  5033. 80026c4: bf00 nop
  5034. 80026c6: 3714 adds r7, #20
  5035. 80026c8: 46bd mov sp, r7
  5036. 80026ca: f85d 7b04 ldr.w r7, [sp], #4
  5037. 80026ce: 4770 bx lr
  5038. 80026d0: e000ed00 .word 0xe000ed00
  5039. 80026d4: 05fa0000 .word 0x05fa0000
  5040. 080026d8 <__NVIC_GetPriorityGrouping>:
  5041. {
  5042. 80026d8: b480 push {r7}
  5043. 80026da: af00 add r7, sp, #0
  5044. return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));
  5045. 80026dc: 4b04 ldr r3, [pc, #16] @ (80026f0 <__NVIC_GetPriorityGrouping+0x18>)
  5046. 80026de: 68db ldr r3, [r3, #12]
  5047. 80026e0: 0a1b lsrs r3, r3, #8
  5048. 80026e2: f003 0307 and.w r3, r3, #7
  5049. }
  5050. 80026e6: 4618 mov r0, r3
  5051. 80026e8: 46bd mov sp, r7
  5052. 80026ea: f85d 7b04 ldr.w r7, [sp], #4
  5053. 80026ee: 4770 bx lr
  5054. 80026f0: e000ed00 .word 0xe000ed00
  5055. 080026f4 <__NVIC_EnableIRQ>:
  5056. {
  5057. 80026f4: b480 push {r7}
  5058. 80026f6: b083 sub sp, #12
  5059. 80026f8: af00 add r7, sp, #0
  5060. 80026fa: 4603 mov r3, r0
  5061. 80026fc: 80fb strh r3, [r7, #6]
  5062. if ((int32_t)(IRQn) >= 0)
  5063. 80026fe: f9b7 3006 ldrsh.w r3, [r7, #6]
  5064. 8002702: 2b00 cmp r3, #0
  5065. 8002704: db0b blt.n 800271e <__NVIC_EnableIRQ+0x2a>
  5066. NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
  5067. 8002706: 88fb ldrh r3, [r7, #6]
  5068. 8002708: f003 021f and.w r2, r3, #31
  5069. 800270c: 4907 ldr r1, [pc, #28] @ (800272c <__NVIC_EnableIRQ+0x38>)
  5070. 800270e: f9b7 3006 ldrsh.w r3, [r7, #6]
  5071. 8002712: 095b lsrs r3, r3, #5
  5072. 8002714: 2001 movs r0, #1
  5073. 8002716: fa00 f202 lsl.w r2, r0, r2
  5074. 800271a: f841 2023 str.w r2, [r1, r3, lsl #2]
  5075. }
  5076. 800271e: bf00 nop
  5077. 8002720: 370c adds r7, #12
  5078. 8002722: 46bd mov sp, r7
  5079. 8002724: f85d 7b04 ldr.w r7, [sp], #4
  5080. 8002728: 4770 bx lr
  5081. 800272a: bf00 nop
  5082. 800272c: e000e100 .word 0xe000e100
  5083. 08002730 <__NVIC_SetPriority>:
  5084. {
  5085. 8002730: b480 push {r7}
  5086. 8002732: b083 sub sp, #12
  5087. 8002734: af00 add r7, sp, #0
  5088. 8002736: 4603 mov r3, r0
  5089. 8002738: 6039 str r1, [r7, #0]
  5090. 800273a: 80fb strh r3, [r7, #6]
  5091. if ((int32_t)(IRQn) >= 0)
  5092. 800273c: f9b7 3006 ldrsh.w r3, [r7, #6]
  5093. 8002740: 2b00 cmp r3, #0
  5094. 8002742: db0a blt.n 800275a <__NVIC_SetPriority+0x2a>
  5095. NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  5096. 8002744: 683b ldr r3, [r7, #0]
  5097. 8002746: b2da uxtb r2, r3
  5098. 8002748: 490c ldr r1, [pc, #48] @ (800277c <__NVIC_SetPriority+0x4c>)
  5099. 800274a: f9b7 3006 ldrsh.w r3, [r7, #6]
  5100. 800274e: 0112 lsls r2, r2, #4
  5101. 8002750: b2d2 uxtb r2, r2
  5102. 8002752: 440b add r3, r1
  5103. 8002754: f883 2300 strb.w r2, [r3, #768] @ 0x300
  5104. }
  5105. 8002758: e00a b.n 8002770 <__NVIC_SetPriority+0x40>
  5106. SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  5107. 800275a: 683b ldr r3, [r7, #0]
  5108. 800275c: b2da uxtb r2, r3
  5109. 800275e: 4908 ldr r1, [pc, #32] @ (8002780 <__NVIC_SetPriority+0x50>)
  5110. 8002760: 88fb ldrh r3, [r7, #6]
  5111. 8002762: f003 030f and.w r3, r3, #15
  5112. 8002766: 3b04 subs r3, #4
  5113. 8002768: 0112 lsls r2, r2, #4
  5114. 800276a: b2d2 uxtb r2, r2
  5115. 800276c: 440b add r3, r1
  5116. 800276e: 761a strb r2, [r3, #24]
  5117. }
  5118. 8002770: bf00 nop
  5119. 8002772: 370c adds r7, #12
  5120. 8002774: 46bd mov sp, r7
  5121. 8002776: f85d 7b04 ldr.w r7, [sp], #4
  5122. 800277a: 4770 bx lr
  5123. 800277c: e000e100 .word 0xe000e100
  5124. 8002780: e000ed00 .word 0xe000ed00
  5125. 08002784 <NVIC_EncodePriority>:
  5126. {
  5127. 8002784: b480 push {r7}
  5128. 8002786: b089 sub sp, #36 @ 0x24
  5129. 8002788: af00 add r7, sp, #0
  5130. 800278a: 60f8 str r0, [r7, #12]
  5131. 800278c: 60b9 str r1, [r7, #8]
  5132. 800278e: 607a str r2, [r7, #4]
  5133. uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
  5134. 8002790: 68fb ldr r3, [r7, #12]
  5135. 8002792: f003 0307 and.w r3, r3, #7
  5136. 8002796: 61fb str r3, [r7, #28]
  5137. PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
  5138. 8002798: 69fb ldr r3, [r7, #28]
  5139. 800279a: f1c3 0307 rsb r3, r3, #7
  5140. 800279e: 2b04 cmp r3, #4
  5141. 80027a0: bf28 it cs
  5142. 80027a2: 2304 movcs r3, #4
  5143. 80027a4: 61bb str r3, [r7, #24]
  5144. SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
  5145. 80027a6: 69fb ldr r3, [r7, #28]
  5146. 80027a8: 3304 adds r3, #4
  5147. 80027aa: 2b06 cmp r3, #6
  5148. 80027ac: d902 bls.n 80027b4 <NVIC_EncodePriority+0x30>
  5149. 80027ae: 69fb ldr r3, [r7, #28]
  5150. 80027b0: 3b03 subs r3, #3
  5151. 80027b2: e000 b.n 80027b6 <NVIC_EncodePriority+0x32>
  5152. 80027b4: 2300 movs r3, #0
  5153. 80027b6: 617b str r3, [r7, #20]
  5154. ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
  5155. 80027b8: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  5156. 80027bc: 69bb ldr r3, [r7, #24]
  5157. 80027be: fa02 f303 lsl.w r3, r2, r3
  5158. 80027c2: 43da mvns r2, r3
  5159. 80027c4: 68bb ldr r3, [r7, #8]
  5160. 80027c6: 401a ands r2, r3
  5161. 80027c8: 697b ldr r3, [r7, #20]
  5162. 80027ca: 409a lsls r2, r3
  5163. ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL)))
  5164. 80027cc: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  5165. 80027d0: 697b ldr r3, [r7, #20]
  5166. 80027d2: fa01 f303 lsl.w r3, r1, r3
  5167. 80027d6: 43d9 mvns r1, r3
  5168. 80027d8: 687b ldr r3, [r7, #4]
  5169. 80027da: 400b ands r3, r1
  5170. ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
  5171. 80027dc: 4313 orrs r3, r2
  5172. }
  5173. 80027de: 4618 mov r0, r3
  5174. 80027e0: 3724 adds r7, #36 @ 0x24
  5175. 80027e2: 46bd mov sp, r7
  5176. 80027e4: f85d 7b04 ldr.w r7, [sp], #4
  5177. 80027e8: 4770 bx lr
  5178. 080027ea <HAL_NVIC_SetPriorityGrouping>:
  5179. * @note When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible.
  5180. * The pending IRQ priority will be managed only by the subpriority.
  5181. * @retval None
  5182. */
  5183. void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
  5184. {
  5185. 80027ea: b580 push {r7, lr}
  5186. 80027ec: b082 sub sp, #8
  5187. 80027ee: af00 add r7, sp, #0
  5188. 80027f0: 6078 str r0, [r7, #4]
  5189. /* Check the parameters */
  5190. assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));
  5191. /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */
  5192. NVIC_SetPriorityGrouping(PriorityGroup);
  5193. 80027f2: 6878 ldr r0, [r7, #4]
  5194. 80027f4: f7ff ff4c bl 8002690 <__NVIC_SetPriorityGrouping>
  5195. }
  5196. 80027f8: bf00 nop
  5197. 80027fa: 3708 adds r7, #8
  5198. 80027fc: 46bd mov sp, r7
  5199. 80027fe: bd80 pop {r7, pc}
  5200. 08002800 <HAL_NVIC_SetPriority>:
  5201. * This parameter can be a value between 0 and 15
  5202. * A lower priority value indicates a higher priority.
  5203. * @retval None
  5204. */
  5205. void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
  5206. {
  5207. 8002800: b580 push {r7, lr}
  5208. 8002802: b086 sub sp, #24
  5209. 8002804: af00 add r7, sp, #0
  5210. 8002806: 4603 mov r3, r0
  5211. 8002808: 60b9 str r1, [r7, #8]
  5212. 800280a: 607a str r2, [r7, #4]
  5213. 800280c: 81fb strh r3, [r7, #14]
  5214. /* Check the parameters */
  5215. assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));
  5216. assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));
  5217. prioritygroup = NVIC_GetPriorityGrouping();
  5218. 800280e: f7ff ff63 bl 80026d8 <__NVIC_GetPriorityGrouping>
  5219. 8002812: 6178 str r0, [r7, #20]
  5220. NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));
  5221. 8002814: 687a ldr r2, [r7, #4]
  5222. 8002816: 68b9 ldr r1, [r7, #8]
  5223. 8002818: 6978 ldr r0, [r7, #20]
  5224. 800281a: f7ff ffb3 bl 8002784 <NVIC_EncodePriority>
  5225. 800281e: 4602 mov r2, r0
  5226. 8002820: f9b7 300e ldrsh.w r3, [r7, #14]
  5227. 8002824: 4611 mov r1, r2
  5228. 8002826: 4618 mov r0, r3
  5229. 8002828: f7ff ff82 bl 8002730 <__NVIC_SetPriority>
  5230. }
  5231. 800282c: bf00 nop
  5232. 800282e: 3718 adds r7, #24
  5233. 8002830: 46bd mov sp, r7
  5234. 8002832: bd80 pop {r7, pc}
  5235. 08002834 <HAL_NVIC_EnableIRQ>:
  5236. * This parameter can be an enumerator of IRQn_Type enumeration
  5237. * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32h7xxxx.h))
  5238. * @retval None
  5239. */
  5240. void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
  5241. {
  5242. 8002834: b580 push {r7, lr}
  5243. 8002836: b082 sub sp, #8
  5244. 8002838: af00 add r7, sp, #0
  5245. 800283a: 4603 mov r3, r0
  5246. 800283c: 80fb strh r3, [r7, #6]
  5247. /* Check the parameters */
  5248. assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
  5249. /* Enable interrupt */
  5250. NVIC_EnableIRQ(IRQn);
  5251. 800283e: f9b7 3006 ldrsh.w r3, [r7, #6]
  5252. 8002842: 4618 mov r0, r3
  5253. 8002844: f7ff ff56 bl 80026f4 <__NVIC_EnableIRQ>
  5254. }
  5255. 8002848: bf00 nop
  5256. 800284a: 3708 adds r7, #8
  5257. 800284c: 46bd mov sp, r7
  5258. 800284e: bd80 pop {r7, pc}
  5259. 08002850 <HAL_MPU_Disable>:
  5260. /**
  5261. * @brief Disables the MPU
  5262. * @retval None
  5263. */
  5264. void HAL_MPU_Disable(void)
  5265. {
  5266. 8002850: b480 push {r7}
  5267. 8002852: af00 add r7, sp, #0
  5268. \details Ensures the apparent order of the explicit memory operations before
  5269. and after the instruction, without ensuring their completion.
  5270. */
  5271. __STATIC_FORCEINLINE void __DMB(void)
  5272. {
  5273. __ASM volatile ("dmb 0xF":::"memory");
  5274. 8002854: f3bf 8f5f dmb sy
  5275. }
  5276. 8002858: bf00 nop
  5277. /* Make sure outstanding transfers are done */
  5278. __DMB();
  5279. /* Disable fault exceptions */
  5280. SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
  5281. 800285a: 4b07 ldr r3, [pc, #28] @ (8002878 <HAL_MPU_Disable+0x28>)
  5282. 800285c: 6a5b ldr r3, [r3, #36] @ 0x24
  5283. 800285e: 4a06 ldr r2, [pc, #24] @ (8002878 <HAL_MPU_Disable+0x28>)
  5284. 8002860: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  5285. 8002864: 6253 str r3, [r2, #36] @ 0x24
  5286. /* Disable the MPU and clear the control register*/
  5287. MPU->CTRL = 0;
  5288. 8002866: 4b05 ldr r3, [pc, #20] @ (800287c <HAL_MPU_Disable+0x2c>)
  5289. 8002868: 2200 movs r2, #0
  5290. 800286a: 605a str r2, [r3, #4]
  5291. }
  5292. 800286c: bf00 nop
  5293. 800286e: 46bd mov sp, r7
  5294. 8002870: f85d 7b04 ldr.w r7, [sp], #4
  5295. 8002874: 4770 bx lr
  5296. 8002876: bf00 nop
  5297. 8002878: e000ed00 .word 0xe000ed00
  5298. 800287c: e000ed90 .word 0xe000ed90
  5299. 08002880 <HAL_MPU_Enable>:
  5300. * @arg MPU_PRIVILEGED_DEFAULT
  5301. * @arg MPU_HFNMI_PRIVDEF
  5302. * @retval None
  5303. */
  5304. void HAL_MPU_Enable(uint32_t MPU_Control)
  5305. {
  5306. 8002880: b480 push {r7}
  5307. 8002882: b083 sub sp, #12
  5308. 8002884: af00 add r7, sp, #0
  5309. 8002886: 6078 str r0, [r7, #4]
  5310. /* Enable the MPU */
  5311. MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
  5312. 8002888: 4a0b ldr r2, [pc, #44] @ (80028b8 <HAL_MPU_Enable+0x38>)
  5313. 800288a: 687b ldr r3, [r7, #4]
  5314. 800288c: f043 0301 orr.w r3, r3, #1
  5315. 8002890: 6053 str r3, [r2, #4]
  5316. /* Enable fault exceptions */
  5317. SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
  5318. 8002892: 4b0a ldr r3, [pc, #40] @ (80028bc <HAL_MPU_Enable+0x3c>)
  5319. 8002894: 6a5b ldr r3, [r3, #36] @ 0x24
  5320. 8002896: 4a09 ldr r2, [pc, #36] @ (80028bc <HAL_MPU_Enable+0x3c>)
  5321. 8002898: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  5322. 800289c: 6253 str r3, [r2, #36] @ 0x24
  5323. __ASM volatile ("dsb 0xF":::"memory");
  5324. 800289e: f3bf 8f4f dsb sy
  5325. }
  5326. 80028a2: bf00 nop
  5327. __ASM volatile ("isb 0xF":::"memory");
  5328. 80028a4: f3bf 8f6f isb sy
  5329. }
  5330. 80028a8: bf00 nop
  5331. /* Ensure MPU setting take effects */
  5332. __DSB();
  5333. __ISB();
  5334. }
  5335. 80028aa: bf00 nop
  5336. 80028ac: 370c adds r7, #12
  5337. 80028ae: 46bd mov sp, r7
  5338. 80028b0: f85d 7b04 ldr.w r7, [sp], #4
  5339. 80028b4: 4770 bx lr
  5340. 80028b6: bf00 nop
  5341. 80028b8: e000ed90 .word 0xe000ed90
  5342. 80028bc: e000ed00 .word 0xe000ed00
  5343. 080028c0 <HAL_MPU_ConfigRegion>:
  5344. * @param MPU_Init Pointer to a MPU_Region_InitTypeDef structure that contains
  5345. * the initialization and configuration information.
  5346. * @retval None
  5347. */
  5348. void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init)
  5349. {
  5350. 80028c0: b480 push {r7}
  5351. 80028c2: b083 sub sp, #12
  5352. 80028c4: af00 add r7, sp, #0
  5353. 80028c6: 6078 str r0, [r7, #4]
  5354. assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable));
  5355. assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable));
  5356. assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size));
  5357. /* Set the Region number */
  5358. MPU->RNR = MPU_Init->Number;
  5359. 80028c8: 687b ldr r3, [r7, #4]
  5360. 80028ca: 785a ldrb r2, [r3, #1]
  5361. 80028cc: 4b1b ldr r3, [pc, #108] @ (800293c <HAL_MPU_ConfigRegion+0x7c>)
  5362. 80028ce: 609a str r2, [r3, #8]
  5363. /* Disable the Region */
  5364. CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
  5365. 80028d0: 4b1a ldr r3, [pc, #104] @ (800293c <HAL_MPU_ConfigRegion+0x7c>)
  5366. 80028d2: 691b ldr r3, [r3, #16]
  5367. 80028d4: 4a19 ldr r2, [pc, #100] @ (800293c <HAL_MPU_ConfigRegion+0x7c>)
  5368. 80028d6: f023 0301 bic.w r3, r3, #1
  5369. 80028da: 6113 str r3, [r2, #16]
  5370. /* Apply configuration */
  5371. MPU->RBAR = MPU_Init->BaseAddress;
  5372. 80028dc: 4a17 ldr r2, [pc, #92] @ (800293c <HAL_MPU_ConfigRegion+0x7c>)
  5373. 80028de: 687b ldr r3, [r7, #4]
  5374. 80028e0: 685b ldr r3, [r3, #4]
  5375. 80028e2: 60d3 str r3, [r2, #12]
  5376. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  5377. 80028e4: 687b ldr r3, [r7, #4]
  5378. 80028e6: 7b1b ldrb r3, [r3, #12]
  5379. 80028e8: 071a lsls r2, r3, #28
  5380. ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) |
  5381. 80028ea: 687b ldr r3, [r7, #4]
  5382. 80028ec: 7adb ldrb r3, [r3, #11]
  5383. 80028ee: 061b lsls r3, r3, #24
  5384. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  5385. 80028f0: 431a orrs r2, r3
  5386. ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) |
  5387. 80028f2: 687b ldr r3, [r7, #4]
  5388. 80028f4: 7a9b ldrb r3, [r3, #10]
  5389. 80028f6: 04db lsls r3, r3, #19
  5390. ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) |
  5391. 80028f8: 431a orrs r2, r3
  5392. ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) |
  5393. 80028fa: 687b ldr r3, [r7, #4]
  5394. 80028fc: 7b5b ldrb r3, [r3, #13]
  5395. 80028fe: 049b lsls r3, r3, #18
  5396. ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) |
  5397. 8002900: 431a orrs r2, r3
  5398. ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) |
  5399. 8002902: 687b ldr r3, [r7, #4]
  5400. 8002904: 7b9b ldrb r3, [r3, #14]
  5401. 8002906: 045b lsls r3, r3, #17
  5402. ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) |
  5403. 8002908: 431a orrs r2, r3
  5404. ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) |
  5405. 800290a: 687b ldr r3, [r7, #4]
  5406. 800290c: 7bdb ldrb r3, [r3, #15]
  5407. 800290e: 041b lsls r3, r3, #16
  5408. ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) |
  5409. 8002910: 431a orrs r2, r3
  5410. ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) |
  5411. 8002912: 687b ldr r3, [r7, #4]
  5412. 8002914: 7a5b ldrb r3, [r3, #9]
  5413. 8002916: 021b lsls r3, r3, #8
  5414. ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) |
  5415. 8002918: 431a orrs r2, r3
  5416. ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) |
  5417. 800291a: 687b ldr r3, [r7, #4]
  5418. 800291c: 7a1b ldrb r3, [r3, #8]
  5419. 800291e: 005b lsls r3, r3, #1
  5420. ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) |
  5421. 8002920: 4313 orrs r3, r2
  5422. ((uint32_t)MPU_Init->Enable << MPU_RASR_ENABLE_Pos);
  5423. 8002922: 687a ldr r2, [r7, #4]
  5424. 8002924: 7812 ldrb r2, [r2, #0]
  5425. 8002926: 4611 mov r1, r2
  5426. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  5427. 8002928: 4a04 ldr r2, [pc, #16] @ (800293c <HAL_MPU_ConfigRegion+0x7c>)
  5428. ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) |
  5429. 800292a: 430b orrs r3, r1
  5430. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  5431. 800292c: 6113 str r3, [r2, #16]
  5432. }
  5433. 800292e: bf00 nop
  5434. 8002930: 370c adds r7, #12
  5435. 8002932: 46bd mov sp, r7
  5436. 8002934: f85d 7b04 ldr.w r7, [sp], #4
  5437. 8002938: 4770 bx lr
  5438. 800293a: bf00 nop
  5439. 800293c: e000ed90 .word 0xe000ed90
  5440. 08002940 <HAL_CRC_Init>:
  5441. * parameters in the CRC_InitTypeDef and create the associated handle.
  5442. * @param hcrc CRC handle
  5443. * @retval HAL status
  5444. */
  5445. HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc)
  5446. {
  5447. 8002940: b580 push {r7, lr}
  5448. 8002942: b082 sub sp, #8
  5449. 8002944: af00 add r7, sp, #0
  5450. 8002946: 6078 str r0, [r7, #4]
  5451. /* Check the CRC handle allocation */
  5452. if (hcrc == NULL)
  5453. 8002948: 687b ldr r3, [r7, #4]
  5454. 800294a: 2b00 cmp r3, #0
  5455. 800294c: d101 bne.n 8002952 <HAL_CRC_Init+0x12>
  5456. {
  5457. return HAL_ERROR;
  5458. 800294e: 2301 movs r3, #1
  5459. 8002950: e054 b.n 80029fc <HAL_CRC_Init+0xbc>
  5460. }
  5461. /* Check the parameters */
  5462. assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance));
  5463. if (hcrc->State == HAL_CRC_STATE_RESET)
  5464. 8002952: 687b ldr r3, [r7, #4]
  5465. 8002954: 7f5b ldrb r3, [r3, #29]
  5466. 8002956: b2db uxtb r3, r3
  5467. 8002958: 2b00 cmp r3, #0
  5468. 800295a: d105 bne.n 8002968 <HAL_CRC_Init+0x28>
  5469. {
  5470. /* Allocate lock resource and initialize it */
  5471. hcrc->Lock = HAL_UNLOCKED;
  5472. 800295c: 687b ldr r3, [r7, #4]
  5473. 800295e: 2200 movs r2, #0
  5474. 8002960: 771a strb r2, [r3, #28]
  5475. /* Init the low level hardware */
  5476. HAL_CRC_MspInit(hcrc);
  5477. 8002962: 6878 ldr r0, [r7, #4]
  5478. 8002964: f7fe fd8c bl 8001480 <HAL_CRC_MspInit>
  5479. }
  5480. hcrc->State = HAL_CRC_STATE_BUSY;
  5481. 8002968: 687b ldr r3, [r7, #4]
  5482. 800296a: 2202 movs r2, #2
  5483. 800296c: 775a strb r2, [r3, #29]
  5484. /* check whether or not non-default generating polynomial has been
  5485. * picked up by user */
  5486. assert_param(IS_DEFAULT_POLYNOMIAL(hcrc->Init.DefaultPolynomialUse));
  5487. if (hcrc->Init.DefaultPolynomialUse == DEFAULT_POLYNOMIAL_ENABLE)
  5488. 800296e: 687b ldr r3, [r7, #4]
  5489. 8002970: 791b ldrb r3, [r3, #4]
  5490. 8002972: 2b00 cmp r3, #0
  5491. 8002974: d10c bne.n 8002990 <HAL_CRC_Init+0x50>
  5492. {
  5493. /* initialize peripheral with default generating polynomial */
  5494. WRITE_REG(hcrc->Instance->POL, DEFAULT_CRC32_POLY);
  5495. 8002976: 687b ldr r3, [r7, #4]
  5496. 8002978: 681b ldr r3, [r3, #0]
  5497. 800297a: 4a22 ldr r2, [pc, #136] @ (8002a04 <HAL_CRC_Init+0xc4>)
  5498. 800297c: 615a str r2, [r3, #20]
  5499. MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, CRC_POLYLENGTH_32B);
  5500. 800297e: 687b ldr r3, [r7, #4]
  5501. 8002980: 681b ldr r3, [r3, #0]
  5502. 8002982: 689a ldr r2, [r3, #8]
  5503. 8002984: 687b ldr r3, [r7, #4]
  5504. 8002986: 681b ldr r3, [r3, #0]
  5505. 8002988: f022 0218 bic.w r2, r2, #24
  5506. 800298c: 609a str r2, [r3, #8]
  5507. 800298e: e00c b.n 80029aa <HAL_CRC_Init+0x6a>
  5508. }
  5509. else
  5510. {
  5511. /* initialize CRC peripheral with generating polynomial defined by user */
  5512. if (HAL_CRCEx_Polynomial_Set(hcrc, hcrc->Init.GeneratingPolynomial, hcrc->Init.CRCLength) != HAL_OK)
  5513. 8002990: 687b ldr r3, [r7, #4]
  5514. 8002992: 6899 ldr r1, [r3, #8]
  5515. 8002994: 687b ldr r3, [r7, #4]
  5516. 8002996: 68db ldr r3, [r3, #12]
  5517. 8002998: 461a mov r2, r3
  5518. 800299a: 6878 ldr r0, [r7, #4]
  5519. 800299c: f000 f948 bl 8002c30 <HAL_CRCEx_Polynomial_Set>
  5520. 80029a0: 4603 mov r3, r0
  5521. 80029a2: 2b00 cmp r3, #0
  5522. 80029a4: d001 beq.n 80029aa <HAL_CRC_Init+0x6a>
  5523. {
  5524. return HAL_ERROR;
  5525. 80029a6: 2301 movs r3, #1
  5526. 80029a8: e028 b.n 80029fc <HAL_CRC_Init+0xbc>
  5527. }
  5528. /* check whether or not non-default CRC initial value has been
  5529. * picked up by user */
  5530. assert_param(IS_DEFAULT_INIT_VALUE(hcrc->Init.DefaultInitValueUse));
  5531. if (hcrc->Init.DefaultInitValueUse == DEFAULT_INIT_VALUE_ENABLE)
  5532. 80029aa: 687b ldr r3, [r7, #4]
  5533. 80029ac: 795b ldrb r3, [r3, #5]
  5534. 80029ae: 2b00 cmp r3, #0
  5535. 80029b0: d105 bne.n 80029be <HAL_CRC_Init+0x7e>
  5536. {
  5537. WRITE_REG(hcrc->Instance->INIT, DEFAULT_CRC_INITVALUE);
  5538. 80029b2: 687b ldr r3, [r7, #4]
  5539. 80029b4: 681b ldr r3, [r3, #0]
  5540. 80029b6: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  5541. 80029ba: 611a str r2, [r3, #16]
  5542. 80029bc: e004 b.n 80029c8 <HAL_CRC_Init+0x88>
  5543. }
  5544. else
  5545. {
  5546. WRITE_REG(hcrc->Instance->INIT, hcrc->Init.InitValue);
  5547. 80029be: 687b ldr r3, [r7, #4]
  5548. 80029c0: 681b ldr r3, [r3, #0]
  5549. 80029c2: 687a ldr r2, [r7, #4]
  5550. 80029c4: 6912 ldr r2, [r2, #16]
  5551. 80029c6: 611a str r2, [r3, #16]
  5552. }
  5553. /* set input data inversion mode */
  5554. assert_param(IS_CRC_INPUTDATA_INVERSION_MODE(hcrc->Init.InputDataInversionMode));
  5555. MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_IN, hcrc->Init.InputDataInversionMode);
  5556. 80029c8: 687b ldr r3, [r7, #4]
  5557. 80029ca: 681b ldr r3, [r3, #0]
  5558. 80029cc: 689b ldr r3, [r3, #8]
  5559. 80029ce: f023 0160 bic.w r1, r3, #96 @ 0x60
  5560. 80029d2: 687b ldr r3, [r7, #4]
  5561. 80029d4: 695a ldr r2, [r3, #20]
  5562. 80029d6: 687b ldr r3, [r7, #4]
  5563. 80029d8: 681b ldr r3, [r3, #0]
  5564. 80029da: 430a orrs r2, r1
  5565. 80029dc: 609a str r2, [r3, #8]
  5566. /* set output data inversion mode */
  5567. assert_param(IS_CRC_OUTPUTDATA_INVERSION_MODE(hcrc->Init.OutputDataInversionMode));
  5568. MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_OUT, hcrc->Init.OutputDataInversionMode);
  5569. 80029de: 687b ldr r3, [r7, #4]
  5570. 80029e0: 681b ldr r3, [r3, #0]
  5571. 80029e2: 689b ldr r3, [r3, #8]
  5572. 80029e4: f023 0180 bic.w r1, r3, #128 @ 0x80
  5573. 80029e8: 687b ldr r3, [r7, #4]
  5574. 80029ea: 699a ldr r2, [r3, #24]
  5575. 80029ec: 687b ldr r3, [r7, #4]
  5576. 80029ee: 681b ldr r3, [r3, #0]
  5577. 80029f0: 430a orrs r2, r1
  5578. 80029f2: 609a str r2, [r3, #8]
  5579. /* makes sure the input data format (bytes, halfwords or words stream)
  5580. * is properly specified by user */
  5581. assert_param(IS_CRC_INPUTDATA_FORMAT(hcrc->InputDataFormat));
  5582. /* Change CRC peripheral state */
  5583. hcrc->State = HAL_CRC_STATE_READY;
  5584. 80029f4: 687b ldr r3, [r7, #4]
  5585. 80029f6: 2201 movs r2, #1
  5586. 80029f8: 775a strb r2, [r3, #29]
  5587. /* Return function status */
  5588. return HAL_OK;
  5589. 80029fa: 2300 movs r3, #0
  5590. }
  5591. 80029fc: 4618 mov r0, r3
  5592. 80029fe: 3708 adds r7, #8
  5593. 8002a00: 46bd mov sp, r7
  5594. 8002a02: bd80 pop {r7, pc}
  5595. 8002a04: 04c11db7 .word 0x04c11db7
  5596. 08002a08 <HAL_CRC_Calculate>:
  5597. * and the API will internally adjust its input data processing based on the
  5598. * handle field hcrc->InputDataFormat.
  5599. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  5600. */
  5601. uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)
  5602. {
  5603. 8002a08: b580 push {r7, lr}
  5604. 8002a0a: b086 sub sp, #24
  5605. 8002a0c: af00 add r7, sp, #0
  5606. 8002a0e: 60f8 str r0, [r7, #12]
  5607. 8002a10: 60b9 str r1, [r7, #8]
  5608. 8002a12: 607a str r2, [r7, #4]
  5609. uint32_t index; /* CRC input data buffer index */
  5610. uint32_t temp = 0U; /* CRC output (read from hcrc->Instance->DR register) */
  5611. 8002a14: 2300 movs r3, #0
  5612. 8002a16: 613b str r3, [r7, #16]
  5613. /* Change CRC peripheral state */
  5614. hcrc->State = HAL_CRC_STATE_BUSY;
  5615. 8002a18: 68fb ldr r3, [r7, #12]
  5616. 8002a1a: 2202 movs r2, #2
  5617. 8002a1c: 775a strb r2, [r3, #29]
  5618. /* Reset CRC Calculation Unit (hcrc->Instance->INIT is
  5619. * written in hcrc->Instance->DR) */
  5620. __HAL_CRC_DR_RESET(hcrc);
  5621. 8002a1e: 68fb ldr r3, [r7, #12]
  5622. 8002a20: 681b ldr r3, [r3, #0]
  5623. 8002a22: 689a ldr r2, [r3, #8]
  5624. 8002a24: 68fb ldr r3, [r7, #12]
  5625. 8002a26: 681b ldr r3, [r3, #0]
  5626. 8002a28: f042 0201 orr.w r2, r2, #1
  5627. 8002a2c: 609a str r2, [r3, #8]
  5628. switch (hcrc->InputDataFormat)
  5629. 8002a2e: 68fb ldr r3, [r7, #12]
  5630. 8002a30: 6a1b ldr r3, [r3, #32]
  5631. 8002a32: 2b03 cmp r3, #3
  5632. 8002a34: d006 beq.n 8002a44 <HAL_CRC_Calculate+0x3c>
  5633. 8002a36: 2b03 cmp r3, #3
  5634. 8002a38: d829 bhi.n 8002a8e <HAL_CRC_Calculate+0x86>
  5635. 8002a3a: 2b01 cmp r3, #1
  5636. 8002a3c: d019 beq.n 8002a72 <HAL_CRC_Calculate+0x6a>
  5637. 8002a3e: 2b02 cmp r3, #2
  5638. 8002a40: d01e beq.n 8002a80 <HAL_CRC_Calculate+0x78>
  5639. /* Specific 16-bit input data handling */
  5640. temp = CRC_Handle_16(hcrc, (uint16_t *)(void *)pBuffer, BufferLength); /* Derogation MisraC2012 R.11.5 */
  5641. break;
  5642. default:
  5643. break;
  5644. 8002a42: e024 b.n 8002a8e <HAL_CRC_Calculate+0x86>
  5645. for (index = 0U; index < BufferLength; index++)
  5646. 8002a44: 2300 movs r3, #0
  5647. 8002a46: 617b str r3, [r7, #20]
  5648. 8002a48: e00a b.n 8002a60 <HAL_CRC_Calculate+0x58>
  5649. hcrc->Instance->DR = pBuffer[index];
  5650. 8002a4a: 697b ldr r3, [r7, #20]
  5651. 8002a4c: 009b lsls r3, r3, #2
  5652. 8002a4e: 68ba ldr r2, [r7, #8]
  5653. 8002a50: 441a add r2, r3
  5654. 8002a52: 68fb ldr r3, [r7, #12]
  5655. 8002a54: 681b ldr r3, [r3, #0]
  5656. 8002a56: 6812 ldr r2, [r2, #0]
  5657. 8002a58: 601a str r2, [r3, #0]
  5658. for (index = 0U; index < BufferLength; index++)
  5659. 8002a5a: 697b ldr r3, [r7, #20]
  5660. 8002a5c: 3301 adds r3, #1
  5661. 8002a5e: 617b str r3, [r7, #20]
  5662. 8002a60: 697a ldr r2, [r7, #20]
  5663. 8002a62: 687b ldr r3, [r7, #4]
  5664. 8002a64: 429a cmp r2, r3
  5665. 8002a66: d3f0 bcc.n 8002a4a <HAL_CRC_Calculate+0x42>
  5666. temp = hcrc->Instance->DR;
  5667. 8002a68: 68fb ldr r3, [r7, #12]
  5668. 8002a6a: 681b ldr r3, [r3, #0]
  5669. 8002a6c: 681b ldr r3, [r3, #0]
  5670. 8002a6e: 613b str r3, [r7, #16]
  5671. break;
  5672. 8002a70: e00e b.n 8002a90 <HAL_CRC_Calculate+0x88>
  5673. temp = CRC_Handle_8(hcrc, (uint8_t *)pBuffer, BufferLength);
  5674. 8002a72: 687a ldr r2, [r7, #4]
  5675. 8002a74: 68b9 ldr r1, [r7, #8]
  5676. 8002a76: 68f8 ldr r0, [r7, #12]
  5677. 8002a78: f000 f812 bl 8002aa0 <CRC_Handle_8>
  5678. 8002a7c: 6138 str r0, [r7, #16]
  5679. break;
  5680. 8002a7e: e007 b.n 8002a90 <HAL_CRC_Calculate+0x88>
  5681. temp = CRC_Handle_16(hcrc, (uint16_t *)(void *)pBuffer, BufferLength); /* Derogation MisraC2012 R.11.5 */
  5682. 8002a80: 687a ldr r2, [r7, #4]
  5683. 8002a82: 68b9 ldr r1, [r7, #8]
  5684. 8002a84: 68f8 ldr r0, [r7, #12]
  5685. 8002a86: f000 f899 bl 8002bbc <CRC_Handle_16>
  5686. 8002a8a: 6138 str r0, [r7, #16]
  5687. break;
  5688. 8002a8c: e000 b.n 8002a90 <HAL_CRC_Calculate+0x88>
  5689. break;
  5690. 8002a8e: bf00 nop
  5691. }
  5692. /* Change CRC peripheral state */
  5693. hcrc->State = HAL_CRC_STATE_READY;
  5694. 8002a90: 68fb ldr r3, [r7, #12]
  5695. 8002a92: 2201 movs r2, #1
  5696. 8002a94: 775a strb r2, [r3, #29]
  5697. /* Return the CRC computed value */
  5698. return temp;
  5699. 8002a96: 693b ldr r3, [r7, #16]
  5700. }
  5701. 8002a98: 4618 mov r0, r3
  5702. 8002a9a: 3718 adds r7, #24
  5703. 8002a9c: 46bd mov sp, r7
  5704. 8002a9e: bd80 pop {r7, pc}
  5705. 08002aa0 <CRC_Handle_8>:
  5706. * @param pBuffer pointer to the input data buffer
  5707. * @param BufferLength input data buffer length
  5708. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  5709. */
  5710. static uint32_t CRC_Handle_8(CRC_HandleTypeDef *hcrc, uint8_t pBuffer[], uint32_t BufferLength)
  5711. {
  5712. 8002aa0: b480 push {r7}
  5713. 8002aa2: b089 sub sp, #36 @ 0x24
  5714. 8002aa4: af00 add r7, sp, #0
  5715. 8002aa6: 60f8 str r0, [r7, #12]
  5716. 8002aa8: 60b9 str r1, [r7, #8]
  5717. 8002aaa: 607a str r2, [r7, #4]
  5718. __IO uint16_t *pReg;
  5719. /* Processing time optimization: 4 bytes are entered in a row with a single word write,
  5720. * last bytes must be carefully fed to the CRC calculator to ensure a correct type
  5721. * handling by the peripheral */
  5722. for (i = 0U; i < (BufferLength / 4U); i++)
  5723. 8002aac: 2300 movs r3, #0
  5724. 8002aae: 61fb str r3, [r7, #28]
  5725. 8002ab0: e023 b.n 8002afa <CRC_Handle_8+0x5a>
  5726. {
  5727. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  5728. 8002ab2: 69fb ldr r3, [r7, #28]
  5729. 8002ab4: 009b lsls r3, r3, #2
  5730. 8002ab6: 68ba ldr r2, [r7, #8]
  5731. 8002ab8: 4413 add r3, r2
  5732. 8002aba: 781b ldrb r3, [r3, #0]
  5733. 8002abc: 061a lsls r2, r3, #24
  5734. ((uint32_t)pBuffer[(4U * i) + 1U] << 16U) | \
  5735. 8002abe: 69fb ldr r3, [r7, #28]
  5736. 8002ac0: 009b lsls r3, r3, #2
  5737. 8002ac2: 3301 adds r3, #1
  5738. 8002ac4: 68b9 ldr r1, [r7, #8]
  5739. 8002ac6: 440b add r3, r1
  5740. 8002ac8: 781b ldrb r3, [r3, #0]
  5741. 8002aca: 041b lsls r3, r3, #16
  5742. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  5743. 8002acc: 431a orrs r2, r3
  5744. ((uint32_t)pBuffer[(4U * i) + 2U] << 8U) | \
  5745. 8002ace: 69fb ldr r3, [r7, #28]
  5746. 8002ad0: 009b lsls r3, r3, #2
  5747. 8002ad2: 3302 adds r3, #2
  5748. 8002ad4: 68b9 ldr r1, [r7, #8]
  5749. 8002ad6: 440b add r3, r1
  5750. 8002ad8: 781b ldrb r3, [r3, #0]
  5751. 8002ada: 021b lsls r3, r3, #8
  5752. ((uint32_t)pBuffer[(4U * i) + 1U] << 16U) | \
  5753. 8002adc: 431a orrs r2, r3
  5754. (uint32_t)pBuffer[(4U * i) + 3U];
  5755. 8002ade: 69fb ldr r3, [r7, #28]
  5756. 8002ae0: 009b lsls r3, r3, #2
  5757. 8002ae2: 3303 adds r3, #3
  5758. 8002ae4: 68b9 ldr r1, [r7, #8]
  5759. 8002ae6: 440b add r3, r1
  5760. 8002ae8: 781b ldrb r3, [r3, #0]
  5761. 8002aea: 4619 mov r1, r3
  5762. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  5763. 8002aec: 68fb ldr r3, [r7, #12]
  5764. 8002aee: 681b ldr r3, [r3, #0]
  5765. ((uint32_t)pBuffer[(4U * i) + 2U] << 8U) | \
  5766. 8002af0: 430a orrs r2, r1
  5767. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  5768. 8002af2: 601a str r2, [r3, #0]
  5769. for (i = 0U; i < (BufferLength / 4U); i++)
  5770. 8002af4: 69fb ldr r3, [r7, #28]
  5771. 8002af6: 3301 adds r3, #1
  5772. 8002af8: 61fb str r3, [r7, #28]
  5773. 8002afa: 687b ldr r3, [r7, #4]
  5774. 8002afc: 089b lsrs r3, r3, #2
  5775. 8002afe: 69fa ldr r2, [r7, #28]
  5776. 8002b00: 429a cmp r2, r3
  5777. 8002b02: d3d6 bcc.n 8002ab2 <CRC_Handle_8+0x12>
  5778. }
  5779. /* last bytes specific handling */
  5780. if ((BufferLength % 4U) != 0U)
  5781. 8002b04: 687b ldr r3, [r7, #4]
  5782. 8002b06: f003 0303 and.w r3, r3, #3
  5783. 8002b0a: 2b00 cmp r3, #0
  5784. 8002b0c: d04d beq.n 8002baa <CRC_Handle_8+0x10a>
  5785. {
  5786. if ((BufferLength % 4U) == 1U)
  5787. 8002b0e: 687b ldr r3, [r7, #4]
  5788. 8002b10: f003 0303 and.w r3, r3, #3
  5789. 8002b14: 2b01 cmp r3, #1
  5790. 8002b16: d107 bne.n 8002b28 <CRC_Handle_8+0x88>
  5791. {
  5792. *(__IO uint8_t *)(__IO void *)(&hcrc->Instance->DR) = pBuffer[4U * i]; /* Derogation MisraC2012 R.11.5 */
  5793. 8002b18: 69fb ldr r3, [r7, #28]
  5794. 8002b1a: 009b lsls r3, r3, #2
  5795. 8002b1c: 68ba ldr r2, [r7, #8]
  5796. 8002b1e: 4413 add r3, r2
  5797. 8002b20: 68fa ldr r2, [r7, #12]
  5798. 8002b22: 6812 ldr r2, [r2, #0]
  5799. 8002b24: 781b ldrb r3, [r3, #0]
  5800. 8002b26: 7013 strb r3, [r2, #0]
  5801. }
  5802. if ((BufferLength % 4U) == 2U)
  5803. 8002b28: 687b ldr r3, [r7, #4]
  5804. 8002b2a: f003 0303 and.w r3, r3, #3
  5805. 8002b2e: 2b02 cmp r3, #2
  5806. 8002b30: d116 bne.n 8002b60 <CRC_Handle_8+0xc0>
  5807. {
  5808. data = ((uint16_t)(pBuffer[4U * i]) << 8U) | (uint16_t)pBuffer[(4U * i) + 1U];
  5809. 8002b32: 69fb ldr r3, [r7, #28]
  5810. 8002b34: 009b lsls r3, r3, #2
  5811. 8002b36: 68ba ldr r2, [r7, #8]
  5812. 8002b38: 4413 add r3, r2
  5813. 8002b3a: 781b ldrb r3, [r3, #0]
  5814. 8002b3c: 021b lsls r3, r3, #8
  5815. 8002b3e: b21a sxth r2, r3
  5816. 8002b40: 69fb ldr r3, [r7, #28]
  5817. 8002b42: 009b lsls r3, r3, #2
  5818. 8002b44: 3301 adds r3, #1
  5819. 8002b46: 68b9 ldr r1, [r7, #8]
  5820. 8002b48: 440b add r3, r1
  5821. 8002b4a: 781b ldrb r3, [r3, #0]
  5822. 8002b4c: b21b sxth r3, r3
  5823. 8002b4e: 4313 orrs r3, r2
  5824. 8002b50: b21b sxth r3, r3
  5825. 8002b52: 837b strh r3, [r7, #26]
  5826. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  5827. 8002b54: 68fb ldr r3, [r7, #12]
  5828. 8002b56: 681b ldr r3, [r3, #0]
  5829. 8002b58: 617b str r3, [r7, #20]
  5830. *pReg = data;
  5831. 8002b5a: 697b ldr r3, [r7, #20]
  5832. 8002b5c: 8b7a ldrh r2, [r7, #26]
  5833. 8002b5e: 801a strh r2, [r3, #0]
  5834. }
  5835. if ((BufferLength % 4U) == 3U)
  5836. 8002b60: 687b ldr r3, [r7, #4]
  5837. 8002b62: f003 0303 and.w r3, r3, #3
  5838. 8002b66: 2b03 cmp r3, #3
  5839. 8002b68: d11f bne.n 8002baa <CRC_Handle_8+0x10a>
  5840. {
  5841. data = ((uint16_t)(pBuffer[4U * i]) << 8U) | (uint16_t)pBuffer[(4U * i) + 1U];
  5842. 8002b6a: 69fb ldr r3, [r7, #28]
  5843. 8002b6c: 009b lsls r3, r3, #2
  5844. 8002b6e: 68ba ldr r2, [r7, #8]
  5845. 8002b70: 4413 add r3, r2
  5846. 8002b72: 781b ldrb r3, [r3, #0]
  5847. 8002b74: 021b lsls r3, r3, #8
  5848. 8002b76: b21a sxth r2, r3
  5849. 8002b78: 69fb ldr r3, [r7, #28]
  5850. 8002b7a: 009b lsls r3, r3, #2
  5851. 8002b7c: 3301 adds r3, #1
  5852. 8002b7e: 68b9 ldr r1, [r7, #8]
  5853. 8002b80: 440b add r3, r1
  5854. 8002b82: 781b ldrb r3, [r3, #0]
  5855. 8002b84: b21b sxth r3, r3
  5856. 8002b86: 4313 orrs r3, r2
  5857. 8002b88: b21b sxth r3, r3
  5858. 8002b8a: 837b strh r3, [r7, #26]
  5859. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  5860. 8002b8c: 68fb ldr r3, [r7, #12]
  5861. 8002b8e: 681b ldr r3, [r3, #0]
  5862. 8002b90: 617b str r3, [r7, #20]
  5863. *pReg = data;
  5864. 8002b92: 697b ldr r3, [r7, #20]
  5865. 8002b94: 8b7a ldrh r2, [r7, #26]
  5866. 8002b96: 801a strh r2, [r3, #0]
  5867. *(__IO uint8_t *)(__IO void *)(&hcrc->Instance->DR) = pBuffer[(4U * i) + 2U]; /* Derogation MisraC2012 R.11.5 */
  5868. 8002b98: 69fb ldr r3, [r7, #28]
  5869. 8002b9a: 009b lsls r3, r3, #2
  5870. 8002b9c: 3302 adds r3, #2
  5871. 8002b9e: 68ba ldr r2, [r7, #8]
  5872. 8002ba0: 4413 add r3, r2
  5873. 8002ba2: 68fa ldr r2, [r7, #12]
  5874. 8002ba4: 6812 ldr r2, [r2, #0]
  5875. 8002ba6: 781b ldrb r3, [r3, #0]
  5876. 8002ba8: 7013 strb r3, [r2, #0]
  5877. }
  5878. }
  5879. /* Return the CRC computed value */
  5880. return hcrc->Instance->DR;
  5881. 8002baa: 68fb ldr r3, [r7, #12]
  5882. 8002bac: 681b ldr r3, [r3, #0]
  5883. 8002bae: 681b ldr r3, [r3, #0]
  5884. }
  5885. 8002bb0: 4618 mov r0, r3
  5886. 8002bb2: 3724 adds r7, #36 @ 0x24
  5887. 8002bb4: 46bd mov sp, r7
  5888. 8002bb6: f85d 7b04 ldr.w r7, [sp], #4
  5889. 8002bba: 4770 bx lr
  5890. 08002bbc <CRC_Handle_16>:
  5891. * @param pBuffer pointer to the input data buffer
  5892. * @param BufferLength input data buffer length
  5893. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  5894. */
  5895. static uint32_t CRC_Handle_16(CRC_HandleTypeDef *hcrc, uint16_t pBuffer[], uint32_t BufferLength)
  5896. {
  5897. 8002bbc: b480 push {r7}
  5898. 8002bbe: b087 sub sp, #28
  5899. 8002bc0: af00 add r7, sp, #0
  5900. 8002bc2: 60f8 str r0, [r7, #12]
  5901. 8002bc4: 60b9 str r1, [r7, #8]
  5902. 8002bc6: 607a str r2, [r7, #4]
  5903. __IO uint16_t *pReg;
  5904. /* Processing time optimization: 2 HalfWords are entered in a row with a single word write,
  5905. * in case of odd length, last HalfWord must be carefully fed to the CRC calculator to ensure
  5906. * a correct type handling by the peripheral */
  5907. for (i = 0U; i < (BufferLength / 2U); i++)
  5908. 8002bc8: 2300 movs r3, #0
  5909. 8002bca: 617b str r3, [r7, #20]
  5910. 8002bcc: e013 b.n 8002bf6 <CRC_Handle_16+0x3a>
  5911. {
  5912. hcrc->Instance->DR = ((uint32_t)pBuffer[2U * i] << 16U) | (uint32_t)pBuffer[(2U * i) + 1U];
  5913. 8002bce: 697b ldr r3, [r7, #20]
  5914. 8002bd0: 009b lsls r3, r3, #2
  5915. 8002bd2: 68ba ldr r2, [r7, #8]
  5916. 8002bd4: 4413 add r3, r2
  5917. 8002bd6: 881b ldrh r3, [r3, #0]
  5918. 8002bd8: 041a lsls r2, r3, #16
  5919. 8002bda: 697b ldr r3, [r7, #20]
  5920. 8002bdc: 009b lsls r3, r3, #2
  5921. 8002bde: 3302 adds r3, #2
  5922. 8002be0: 68b9 ldr r1, [r7, #8]
  5923. 8002be2: 440b add r3, r1
  5924. 8002be4: 881b ldrh r3, [r3, #0]
  5925. 8002be6: 4619 mov r1, r3
  5926. 8002be8: 68fb ldr r3, [r7, #12]
  5927. 8002bea: 681b ldr r3, [r3, #0]
  5928. 8002bec: 430a orrs r2, r1
  5929. 8002bee: 601a str r2, [r3, #0]
  5930. for (i = 0U; i < (BufferLength / 2U); i++)
  5931. 8002bf0: 697b ldr r3, [r7, #20]
  5932. 8002bf2: 3301 adds r3, #1
  5933. 8002bf4: 617b str r3, [r7, #20]
  5934. 8002bf6: 687b ldr r3, [r7, #4]
  5935. 8002bf8: 085b lsrs r3, r3, #1
  5936. 8002bfa: 697a ldr r2, [r7, #20]
  5937. 8002bfc: 429a cmp r2, r3
  5938. 8002bfe: d3e6 bcc.n 8002bce <CRC_Handle_16+0x12>
  5939. }
  5940. if ((BufferLength % 2U) != 0U)
  5941. 8002c00: 687b ldr r3, [r7, #4]
  5942. 8002c02: f003 0301 and.w r3, r3, #1
  5943. 8002c06: 2b00 cmp r3, #0
  5944. 8002c08: d009 beq.n 8002c1e <CRC_Handle_16+0x62>
  5945. {
  5946. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  5947. 8002c0a: 68fb ldr r3, [r7, #12]
  5948. 8002c0c: 681b ldr r3, [r3, #0]
  5949. 8002c0e: 613b str r3, [r7, #16]
  5950. *pReg = pBuffer[2U * i];
  5951. 8002c10: 697b ldr r3, [r7, #20]
  5952. 8002c12: 009b lsls r3, r3, #2
  5953. 8002c14: 68ba ldr r2, [r7, #8]
  5954. 8002c16: 4413 add r3, r2
  5955. 8002c18: 881a ldrh r2, [r3, #0]
  5956. 8002c1a: 693b ldr r3, [r7, #16]
  5957. 8002c1c: 801a strh r2, [r3, #0]
  5958. }
  5959. /* Return the CRC computed value */
  5960. return hcrc->Instance->DR;
  5961. 8002c1e: 68fb ldr r3, [r7, #12]
  5962. 8002c20: 681b ldr r3, [r3, #0]
  5963. 8002c22: 681b ldr r3, [r3, #0]
  5964. }
  5965. 8002c24: 4618 mov r0, r3
  5966. 8002c26: 371c adds r7, #28
  5967. 8002c28: 46bd mov sp, r7
  5968. 8002c2a: f85d 7b04 ldr.w r7, [sp], #4
  5969. 8002c2e: 4770 bx lr
  5970. 08002c30 <HAL_CRCEx_Polynomial_Set>:
  5971. * @arg @ref CRC_POLYLENGTH_16B 16-bit long CRC (generating polynomial of degree 16)
  5972. * @arg @ref CRC_POLYLENGTH_32B 32-bit long CRC (generating polynomial of degree 32)
  5973. * @retval HAL status
  5974. */
  5975. HAL_StatusTypeDef HAL_CRCEx_Polynomial_Set(CRC_HandleTypeDef *hcrc, uint32_t Pol, uint32_t PolyLength)
  5976. {
  5977. 8002c30: b480 push {r7}
  5978. 8002c32: b087 sub sp, #28
  5979. 8002c34: af00 add r7, sp, #0
  5980. 8002c36: 60f8 str r0, [r7, #12]
  5981. 8002c38: 60b9 str r1, [r7, #8]
  5982. 8002c3a: 607a str r2, [r7, #4]
  5983. HAL_StatusTypeDef status = HAL_OK;
  5984. 8002c3c: 2300 movs r3, #0
  5985. 8002c3e: 75fb strb r3, [r7, #23]
  5986. uint32_t msb = 31U; /* polynomial degree is 32 at most, so msb is initialized to max value */
  5987. 8002c40: 231f movs r3, #31
  5988. 8002c42: 613b str r3, [r7, #16]
  5989. /* Check the parameters */
  5990. assert_param(IS_CRC_POL_LENGTH(PolyLength));
  5991. /* Ensure that the generating polynomial is odd */
  5992. if ((Pol & (uint32_t)(0x1U)) == 0U)
  5993. 8002c44: 68bb ldr r3, [r7, #8]
  5994. 8002c46: f003 0301 and.w r3, r3, #1
  5995. 8002c4a: 2b00 cmp r3, #0
  5996. 8002c4c: d102 bne.n 8002c54 <HAL_CRCEx_Polynomial_Set+0x24>
  5997. {
  5998. status = HAL_ERROR;
  5999. 8002c4e: 2301 movs r3, #1
  6000. 8002c50: 75fb strb r3, [r7, #23]
  6001. 8002c52: e063 b.n 8002d1c <HAL_CRCEx_Polynomial_Set+0xec>
  6002. * definition. HAL_ERROR is reported if Pol degree is
  6003. * larger than that indicated by PolyLength.
  6004. * Look for MSB position: msb will contain the degree of
  6005. * the second to the largest polynomial member. E.g., for
  6006. * X^7 + X^6 + X^5 + X^2 + 1, msb = 6. */
  6007. while ((msb-- > 0U) && ((Pol & ((uint32_t)(0x1U) << (msb & 0x1FU))) == 0U))
  6008. 8002c54: bf00 nop
  6009. 8002c56: 693b ldr r3, [r7, #16]
  6010. 8002c58: 1e5a subs r2, r3, #1
  6011. 8002c5a: 613a str r2, [r7, #16]
  6012. 8002c5c: 2b00 cmp r3, #0
  6013. 8002c5e: d009 beq.n 8002c74 <HAL_CRCEx_Polynomial_Set+0x44>
  6014. 8002c60: 693b ldr r3, [r7, #16]
  6015. 8002c62: f003 031f and.w r3, r3, #31
  6016. 8002c66: 68ba ldr r2, [r7, #8]
  6017. 8002c68: fa22 f303 lsr.w r3, r2, r3
  6018. 8002c6c: f003 0301 and.w r3, r3, #1
  6019. 8002c70: 2b00 cmp r3, #0
  6020. 8002c72: d0f0 beq.n 8002c56 <HAL_CRCEx_Polynomial_Set+0x26>
  6021. {
  6022. }
  6023. switch (PolyLength)
  6024. 8002c74: 687b ldr r3, [r7, #4]
  6025. 8002c76: 2b18 cmp r3, #24
  6026. 8002c78: d846 bhi.n 8002d08 <HAL_CRCEx_Polynomial_Set+0xd8>
  6027. 8002c7a: a201 add r2, pc, #4 @ (adr r2, 8002c80 <HAL_CRCEx_Polynomial_Set+0x50>)
  6028. 8002c7c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  6029. 8002c80: 08002d0f .word 0x08002d0f
  6030. 8002c84: 08002d09 .word 0x08002d09
  6031. 8002c88: 08002d09 .word 0x08002d09
  6032. 8002c8c: 08002d09 .word 0x08002d09
  6033. 8002c90: 08002d09 .word 0x08002d09
  6034. 8002c94: 08002d09 .word 0x08002d09
  6035. 8002c98: 08002d09 .word 0x08002d09
  6036. 8002c9c: 08002d09 .word 0x08002d09
  6037. 8002ca0: 08002cfd .word 0x08002cfd
  6038. 8002ca4: 08002d09 .word 0x08002d09
  6039. 8002ca8: 08002d09 .word 0x08002d09
  6040. 8002cac: 08002d09 .word 0x08002d09
  6041. 8002cb0: 08002d09 .word 0x08002d09
  6042. 8002cb4: 08002d09 .word 0x08002d09
  6043. 8002cb8: 08002d09 .word 0x08002d09
  6044. 8002cbc: 08002d09 .word 0x08002d09
  6045. 8002cc0: 08002cf1 .word 0x08002cf1
  6046. 8002cc4: 08002d09 .word 0x08002d09
  6047. 8002cc8: 08002d09 .word 0x08002d09
  6048. 8002ccc: 08002d09 .word 0x08002d09
  6049. 8002cd0: 08002d09 .word 0x08002d09
  6050. 8002cd4: 08002d09 .word 0x08002d09
  6051. 8002cd8: 08002d09 .word 0x08002d09
  6052. 8002cdc: 08002d09 .word 0x08002d09
  6053. 8002ce0: 08002ce5 .word 0x08002ce5
  6054. {
  6055. case CRC_POLYLENGTH_7B:
  6056. if (msb >= HAL_CRC_LENGTH_7B)
  6057. 8002ce4: 693b ldr r3, [r7, #16]
  6058. 8002ce6: 2b06 cmp r3, #6
  6059. 8002ce8: d913 bls.n 8002d12 <HAL_CRCEx_Polynomial_Set+0xe2>
  6060. {
  6061. status = HAL_ERROR;
  6062. 8002cea: 2301 movs r3, #1
  6063. 8002cec: 75fb strb r3, [r7, #23]
  6064. }
  6065. break;
  6066. 8002cee: e010 b.n 8002d12 <HAL_CRCEx_Polynomial_Set+0xe2>
  6067. case CRC_POLYLENGTH_8B:
  6068. if (msb >= HAL_CRC_LENGTH_8B)
  6069. 8002cf0: 693b ldr r3, [r7, #16]
  6070. 8002cf2: 2b07 cmp r3, #7
  6071. 8002cf4: d90f bls.n 8002d16 <HAL_CRCEx_Polynomial_Set+0xe6>
  6072. {
  6073. status = HAL_ERROR;
  6074. 8002cf6: 2301 movs r3, #1
  6075. 8002cf8: 75fb strb r3, [r7, #23]
  6076. }
  6077. break;
  6078. 8002cfa: e00c b.n 8002d16 <HAL_CRCEx_Polynomial_Set+0xe6>
  6079. case CRC_POLYLENGTH_16B:
  6080. if (msb >= HAL_CRC_LENGTH_16B)
  6081. 8002cfc: 693b ldr r3, [r7, #16]
  6082. 8002cfe: 2b0f cmp r3, #15
  6083. 8002d00: d90b bls.n 8002d1a <HAL_CRCEx_Polynomial_Set+0xea>
  6084. {
  6085. status = HAL_ERROR;
  6086. 8002d02: 2301 movs r3, #1
  6087. 8002d04: 75fb strb r3, [r7, #23]
  6088. }
  6089. break;
  6090. 8002d06: e008 b.n 8002d1a <HAL_CRCEx_Polynomial_Set+0xea>
  6091. case CRC_POLYLENGTH_32B:
  6092. /* no polynomial definition vs. polynomial length issue possible */
  6093. break;
  6094. default:
  6095. status = HAL_ERROR;
  6096. 8002d08: 2301 movs r3, #1
  6097. 8002d0a: 75fb strb r3, [r7, #23]
  6098. break;
  6099. 8002d0c: e006 b.n 8002d1c <HAL_CRCEx_Polynomial_Set+0xec>
  6100. break;
  6101. 8002d0e: bf00 nop
  6102. 8002d10: e004 b.n 8002d1c <HAL_CRCEx_Polynomial_Set+0xec>
  6103. break;
  6104. 8002d12: bf00 nop
  6105. 8002d14: e002 b.n 8002d1c <HAL_CRCEx_Polynomial_Set+0xec>
  6106. break;
  6107. 8002d16: bf00 nop
  6108. 8002d18: e000 b.n 8002d1c <HAL_CRCEx_Polynomial_Set+0xec>
  6109. break;
  6110. 8002d1a: bf00 nop
  6111. }
  6112. }
  6113. if (status == HAL_OK)
  6114. 8002d1c: 7dfb ldrb r3, [r7, #23]
  6115. 8002d1e: 2b00 cmp r3, #0
  6116. 8002d20: d10d bne.n 8002d3e <HAL_CRCEx_Polynomial_Set+0x10e>
  6117. {
  6118. /* set generating polynomial */
  6119. WRITE_REG(hcrc->Instance->POL, Pol);
  6120. 8002d22: 68fb ldr r3, [r7, #12]
  6121. 8002d24: 681b ldr r3, [r3, #0]
  6122. 8002d26: 68ba ldr r2, [r7, #8]
  6123. 8002d28: 615a str r2, [r3, #20]
  6124. /* set generating polynomial size */
  6125. MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, PolyLength);
  6126. 8002d2a: 68fb ldr r3, [r7, #12]
  6127. 8002d2c: 681b ldr r3, [r3, #0]
  6128. 8002d2e: 689b ldr r3, [r3, #8]
  6129. 8002d30: f023 0118 bic.w r1, r3, #24
  6130. 8002d34: 68fb ldr r3, [r7, #12]
  6131. 8002d36: 681b ldr r3, [r3, #0]
  6132. 8002d38: 687a ldr r2, [r7, #4]
  6133. 8002d3a: 430a orrs r2, r1
  6134. 8002d3c: 609a str r2, [r3, #8]
  6135. }
  6136. /* Return function status */
  6137. return status;
  6138. 8002d3e: 7dfb ldrb r3, [r7, #23]
  6139. }
  6140. 8002d40: 4618 mov r0, r3
  6141. 8002d42: 371c adds r7, #28
  6142. 8002d44: 46bd mov sp, r7
  6143. 8002d46: f85d 7b04 ldr.w r7, [sp], #4
  6144. 8002d4a: 4770 bx lr
  6145. 08002d4c <HAL_DMA_Init>:
  6146. * @param hdma: Pointer to a DMA_HandleTypeDef structure that contains
  6147. * the configuration information for the specified DMA Stream.
  6148. * @retval HAL status
  6149. */
  6150. HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma)
  6151. {
  6152. 8002d4c: b580 push {r7, lr}
  6153. 8002d4e: b086 sub sp, #24
  6154. 8002d50: af00 add r7, sp, #0
  6155. 8002d52: 6078 str r0, [r7, #4]
  6156. uint32_t registerValue;
  6157. uint32_t tickstart = HAL_GetTick();
  6158. 8002d54: f7ff fc84 bl 8002660 <HAL_GetTick>
  6159. 8002d58: 6138 str r0, [r7, #16]
  6160. DMA_Base_Registers *regs_dma;
  6161. BDMA_Base_Registers *regs_bdma;
  6162. /* Check the DMA peripheral handle */
  6163. if(hdma == NULL)
  6164. 8002d5a: 687b ldr r3, [r7, #4]
  6165. 8002d5c: 2b00 cmp r3, #0
  6166. 8002d5e: d101 bne.n 8002d64 <HAL_DMA_Init+0x18>
  6167. {
  6168. return HAL_ERROR;
  6169. 8002d60: 2301 movs r3, #1
  6170. 8002d62: e316 b.n 8003392 <HAL_DMA_Init+0x646>
  6171. assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(hdma->Init.PeriphDataAlignment));
  6172. assert_param(IS_DMA_MEMORY_DATA_SIZE(hdma->Init.MemDataAlignment));
  6173. assert_param(IS_DMA_MODE(hdma->Init.Mode));
  6174. assert_param(IS_DMA_PRIORITY(hdma->Init.Priority));
  6175. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  6176. 8002d64: 687b ldr r3, [r7, #4]
  6177. 8002d66: 681b ldr r3, [r3, #0]
  6178. 8002d68: 4a66 ldr r2, [pc, #408] @ (8002f04 <HAL_DMA_Init+0x1b8>)
  6179. 8002d6a: 4293 cmp r3, r2
  6180. 8002d6c: d04a beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6181. 8002d6e: 687b ldr r3, [r7, #4]
  6182. 8002d70: 681b ldr r3, [r3, #0]
  6183. 8002d72: 4a65 ldr r2, [pc, #404] @ (8002f08 <HAL_DMA_Init+0x1bc>)
  6184. 8002d74: 4293 cmp r3, r2
  6185. 8002d76: d045 beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6186. 8002d78: 687b ldr r3, [r7, #4]
  6187. 8002d7a: 681b ldr r3, [r3, #0]
  6188. 8002d7c: 4a63 ldr r2, [pc, #396] @ (8002f0c <HAL_DMA_Init+0x1c0>)
  6189. 8002d7e: 4293 cmp r3, r2
  6190. 8002d80: d040 beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6191. 8002d82: 687b ldr r3, [r7, #4]
  6192. 8002d84: 681b ldr r3, [r3, #0]
  6193. 8002d86: 4a62 ldr r2, [pc, #392] @ (8002f10 <HAL_DMA_Init+0x1c4>)
  6194. 8002d88: 4293 cmp r3, r2
  6195. 8002d8a: d03b beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6196. 8002d8c: 687b ldr r3, [r7, #4]
  6197. 8002d8e: 681b ldr r3, [r3, #0]
  6198. 8002d90: 4a60 ldr r2, [pc, #384] @ (8002f14 <HAL_DMA_Init+0x1c8>)
  6199. 8002d92: 4293 cmp r3, r2
  6200. 8002d94: d036 beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6201. 8002d96: 687b ldr r3, [r7, #4]
  6202. 8002d98: 681b ldr r3, [r3, #0]
  6203. 8002d9a: 4a5f ldr r2, [pc, #380] @ (8002f18 <HAL_DMA_Init+0x1cc>)
  6204. 8002d9c: 4293 cmp r3, r2
  6205. 8002d9e: d031 beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6206. 8002da0: 687b ldr r3, [r7, #4]
  6207. 8002da2: 681b ldr r3, [r3, #0]
  6208. 8002da4: 4a5d ldr r2, [pc, #372] @ (8002f1c <HAL_DMA_Init+0x1d0>)
  6209. 8002da6: 4293 cmp r3, r2
  6210. 8002da8: d02c beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6211. 8002daa: 687b ldr r3, [r7, #4]
  6212. 8002dac: 681b ldr r3, [r3, #0]
  6213. 8002dae: 4a5c ldr r2, [pc, #368] @ (8002f20 <HAL_DMA_Init+0x1d4>)
  6214. 8002db0: 4293 cmp r3, r2
  6215. 8002db2: d027 beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6216. 8002db4: 687b ldr r3, [r7, #4]
  6217. 8002db6: 681b ldr r3, [r3, #0]
  6218. 8002db8: 4a5a ldr r2, [pc, #360] @ (8002f24 <HAL_DMA_Init+0x1d8>)
  6219. 8002dba: 4293 cmp r3, r2
  6220. 8002dbc: d022 beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6221. 8002dbe: 687b ldr r3, [r7, #4]
  6222. 8002dc0: 681b ldr r3, [r3, #0]
  6223. 8002dc2: 4a59 ldr r2, [pc, #356] @ (8002f28 <HAL_DMA_Init+0x1dc>)
  6224. 8002dc4: 4293 cmp r3, r2
  6225. 8002dc6: d01d beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6226. 8002dc8: 687b ldr r3, [r7, #4]
  6227. 8002dca: 681b ldr r3, [r3, #0]
  6228. 8002dcc: 4a57 ldr r2, [pc, #348] @ (8002f2c <HAL_DMA_Init+0x1e0>)
  6229. 8002dce: 4293 cmp r3, r2
  6230. 8002dd0: d018 beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6231. 8002dd2: 687b ldr r3, [r7, #4]
  6232. 8002dd4: 681b ldr r3, [r3, #0]
  6233. 8002dd6: 4a56 ldr r2, [pc, #344] @ (8002f30 <HAL_DMA_Init+0x1e4>)
  6234. 8002dd8: 4293 cmp r3, r2
  6235. 8002dda: d013 beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6236. 8002ddc: 687b ldr r3, [r7, #4]
  6237. 8002dde: 681b ldr r3, [r3, #0]
  6238. 8002de0: 4a54 ldr r2, [pc, #336] @ (8002f34 <HAL_DMA_Init+0x1e8>)
  6239. 8002de2: 4293 cmp r3, r2
  6240. 8002de4: d00e beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6241. 8002de6: 687b ldr r3, [r7, #4]
  6242. 8002de8: 681b ldr r3, [r3, #0]
  6243. 8002dea: 4a53 ldr r2, [pc, #332] @ (8002f38 <HAL_DMA_Init+0x1ec>)
  6244. 8002dec: 4293 cmp r3, r2
  6245. 8002dee: d009 beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6246. 8002df0: 687b ldr r3, [r7, #4]
  6247. 8002df2: 681b ldr r3, [r3, #0]
  6248. 8002df4: 4a51 ldr r2, [pc, #324] @ (8002f3c <HAL_DMA_Init+0x1f0>)
  6249. 8002df6: 4293 cmp r3, r2
  6250. 8002df8: d004 beq.n 8002e04 <HAL_DMA_Init+0xb8>
  6251. 8002dfa: 687b ldr r3, [r7, #4]
  6252. 8002dfc: 681b ldr r3, [r3, #0]
  6253. 8002dfe: 4a50 ldr r2, [pc, #320] @ (8002f40 <HAL_DMA_Init+0x1f4>)
  6254. 8002e00: 4293 cmp r3, r2
  6255. 8002e02: d101 bne.n 8002e08 <HAL_DMA_Init+0xbc>
  6256. 8002e04: 2301 movs r3, #1
  6257. 8002e06: e000 b.n 8002e0a <HAL_DMA_Init+0xbe>
  6258. 8002e08: 2300 movs r3, #0
  6259. 8002e0a: 2b00 cmp r3, #0
  6260. 8002e0c: f000 813b beq.w 8003086 <HAL_DMA_Init+0x33a>
  6261. assert_param(IS_DMA_MEMORY_BURST(hdma->Init.MemBurst));
  6262. assert_param(IS_DMA_PERIPHERAL_BURST(hdma->Init.PeriphBurst));
  6263. }
  6264. /* Change DMA peripheral state */
  6265. hdma->State = HAL_DMA_STATE_BUSY;
  6266. 8002e10: 687b ldr r3, [r7, #4]
  6267. 8002e12: 2202 movs r2, #2
  6268. 8002e14: f883 2035 strb.w r2, [r3, #53] @ 0x35
  6269. /* Allocate lock resource */
  6270. __HAL_UNLOCK(hdma);
  6271. 8002e18: 687b ldr r3, [r7, #4]
  6272. 8002e1a: 2200 movs r2, #0
  6273. 8002e1c: f883 2034 strb.w r2, [r3, #52] @ 0x34
  6274. /* Disable the peripheral */
  6275. __HAL_DMA_DISABLE(hdma);
  6276. 8002e20: 687b ldr r3, [r7, #4]
  6277. 8002e22: 681b ldr r3, [r3, #0]
  6278. 8002e24: 4a37 ldr r2, [pc, #220] @ (8002f04 <HAL_DMA_Init+0x1b8>)
  6279. 8002e26: 4293 cmp r3, r2
  6280. 8002e28: d04a beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6281. 8002e2a: 687b ldr r3, [r7, #4]
  6282. 8002e2c: 681b ldr r3, [r3, #0]
  6283. 8002e2e: 4a36 ldr r2, [pc, #216] @ (8002f08 <HAL_DMA_Init+0x1bc>)
  6284. 8002e30: 4293 cmp r3, r2
  6285. 8002e32: d045 beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6286. 8002e34: 687b ldr r3, [r7, #4]
  6287. 8002e36: 681b ldr r3, [r3, #0]
  6288. 8002e38: 4a34 ldr r2, [pc, #208] @ (8002f0c <HAL_DMA_Init+0x1c0>)
  6289. 8002e3a: 4293 cmp r3, r2
  6290. 8002e3c: d040 beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6291. 8002e3e: 687b ldr r3, [r7, #4]
  6292. 8002e40: 681b ldr r3, [r3, #0]
  6293. 8002e42: 4a33 ldr r2, [pc, #204] @ (8002f10 <HAL_DMA_Init+0x1c4>)
  6294. 8002e44: 4293 cmp r3, r2
  6295. 8002e46: d03b beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6296. 8002e48: 687b ldr r3, [r7, #4]
  6297. 8002e4a: 681b ldr r3, [r3, #0]
  6298. 8002e4c: 4a31 ldr r2, [pc, #196] @ (8002f14 <HAL_DMA_Init+0x1c8>)
  6299. 8002e4e: 4293 cmp r3, r2
  6300. 8002e50: d036 beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6301. 8002e52: 687b ldr r3, [r7, #4]
  6302. 8002e54: 681b ldr r3, [r3, #0]
  6303. 8002e56: 4a30 ldr r2, [pc, #192] @ (8002f18 <HAL_DMA_Init+0x1cc>)
  6304. 8002e58: 4293 cmp r3, r2
  6305. 8002e5a: d031 beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6306. 8002e5c: 687b ldr r3, [r7, #4]
  6307. 8002e5e: 681b ldr r3, [r3, #0]
  6308. 8002e60: 4a2e ldr r2, [pc, #184] @ (8002f1c <HAL_DMA_Init+0x1d0>)
  6309. 8002e62: 4293 cmp r3, r2
  6310. 8002e64: d02c beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6311. 8002e66: 687b ldr r3, [r7, #4]
  6312. 8002e68: 681b ldr r3, [r3, #0]
  6313. 8002e6a: 4a2d ldr r2, [pc, #180] @ (8002f20 <HAL_DMA_Init+0x1d4>)
  6314. 8002e6c: 4293 cmp r3, r2
  6315. 8002e6e: d027 beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6316. 8002e70: 687b ldr r3, [r7, #4]
  6317. 8002e72: 681b ldr r3, [r3, #0]
  6318. 8002e74: 4a2b ldr r2, [pc, #172] @ (8002f24 <HAL_DMA_Init+0x1d8>)
  6319. 8002e76: 4293 cmp r3, r2
  6320. 8002e78: d022 beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6321. 8002e7a: 687b ldr r3, [r7, #4]
  6322. 8002e7c: 681b ldr r3, [r3, #0]
  6323. 8002e7e: 4a2a ldr r2, [pc, #168] @ (8002f28 <HAL_DMA_Init+0x1dc>)
  6324. 8002e80: 4293 cmp r3, r2
  6325. 8002e82: d01d beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6326. 8002e84: 687b ldr r3, [r7, #4]
  6327. 8002e86: 681b ldr r3, [r3, #0]
  6328. 8002e88: 4a28 ldr r2, [pc, #160] @ (8002f2c <HAL_DMA_Init+0x1e0>)
  6329. 8002e8a: 4293 cmp r3, r2
  6330. 8002e8c: d018 beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6331. 8002e8e: 687b ldr r3, [r7, #4]
  6332. 8002e90: 681b ldr r3, [r3, #0]
  6333. 8002e92: 4a27 ldr r2, [pc, #156] @ (8002f30 <HAL_DMA_Init+0x1e4>)
  6334. 8002e94: 4293 cmp r3, r2
  6335. 8002e96: d013 beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6336. 8002e98: 687b ldr r3, [r7, #4]
  6337. 8002e9a: 681b ldr r3, [r3, #0]
  6338. 8002e9c: 4a25 ldr r2, [pc, #148] @ (8002f34 <HAL_DMA_Init+0x1e8>)
  6339. 8002e9e: 4293 cmp r3, r2
  6340. 8002ea0: d00e beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6341. 8002ea2: 687b ldr r3, [r7, #4]
  6342. 8002ea4: 681b ldr r3, [r3, #0]
  6343. 8002ea6: 4a24 ldr r2, [pc, #144] @ (8002f38 <HAL_DMA_Init+0x1ec>)
  6344. 8002ea8: 4293 cmp r3, r2
  6345. 8002eaa: d009 beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6346. 8002eac: 687b ldr r3, [r7, #4]
  6347. 8002eae: 681b ldr r3, [r3, #0]
  6348. 8002eb0: 4a22 ldr r2, [pc, #136] @ (8002f3c <HAL_DMA_Init+0x1f0>)
  6349. 8002eb2: 4293 cmp r3, r2
  6350. 8002eb4: d004 beq.n 8002ec0 <HAL_DMA_Init+0x174>
  6351. 8002eb6: 687b ldr r3, [r7, #4]
  6352. 8002eb8: 681b ldr r3, [r3, #0]
  6353. 8002eba: 4a21 ldr r2, [pc, #132] @ (8002f40 <HAL_DMA_Init+0x1f4>)
  6354. 8002ebc: 4293 cmp r3, r2
  6355. 8002ebe: d108 bne.n 8002ed2 <HAL_DMA_Init+0x186>
  6356. 8002ec0: 687b ldr r3, [r7, #4]
  6357. 8002ec2: 681b ldr r3, [r3, #0]
  6358. 8002ec4: 681a ldr r2, [r3, #0]
  6359. 8002ec6: 687b ldr r3, [r7, #4]
  6360. 8002ec8: 681b ldr r3, [r3, #0]
  6361. 8002eca: f022 0201 bic.w r2, r2, #1
  6362. 8002ece: 601a str r2, [r3, #0]
  6363. 8002ed0: e007 b.n 8002ee2 <HAL_DMA_Init+0x196>
  6364. 8002ed2: 687b ldr r3, [r7, #4]
  6365. 8002ed4: 681b ldr r3, [r3, #0]
  6366. 8002ed6: 681a ldr r2, [r3, #0]
  6367. 8002ed8: 687b ldr r3, [r7, #4]
  6368. 8002eda: 681b ldr r3, [r3, #0]
  6369. 8002edc: f022 0201 bic.w r2, r2, #1
  6370. 8002ee0: 601a str r2, [r3, #0]
  6371. /* Check if the DMA Stream is effectively disabled */
  6372. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  6373. 8002ee2: e02f b.n 8002f44 <HAL_DMA_Init+0x1f8>
  6374. {
  6375. /* Check for the Timeout */
  6376. if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT)
  6377. 8002ee4: f7ff fbbc bl 8002660 <HAL_GetTick>
  6378. 8002ee8: 4602 mov r2, r0
  6379. 8002eea: 693b ldr r3, [r7, #16]
  6380. 8002eec: 1ad3 subs r3, r2, r3
  6381. 8002eee: 2b05 cmp r3, #5
  6382. 8002ef0: d928 bls.n 8002f44 <HAL_DMA_Init+0x1f8>
  6383. {
  6384. /* Update error code */
  6385. hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT;
  6386. 8002ef2: 687b ldr r3, [r7, #4]
  6387. 8002ef4: 2220 movs r2, #32
  6388. 8002ef6: 655a str r2, [r3, #84] @ 0x54
  6389. /* Change the DMA state */
  6390. hdma->State = HAL_DMA_STATE_ERROR;
  6391. 8002ef8: 687b ldr r3, [r7, #4]
  6392. 8002efa: 2203 movs r2, #3
  6393. 8002efc: f883 2035 strb.w r2, [r3, #53] @ 0x35
  6394. return HAL_ERROR;
  6395. 8002f00: 2301 movs r3, #1
  6396. 8002f02: e246 b.n 8003392 <HAL_DMA_Init+0x646>
  6397. 8002f04: 40020010 .word 0x40020010
  6398. 8002f08: 40020028 .word 0x40020028
  6399. 8002f0c: 40020040 .word 0x40020040
  6400. 8002f10: 40020058 .word 0x40020058
  6401. 8002f14: 40020070 .word 0x40020070
  6402. 8002f18: 40020088 .word 0x40020088
  6403. 8002f1c: 400200a0 .word 0x400200a0
  6404. 8002f20: 400200b8 .word 0x400200b8
  6405. 8002f24: 40020410 .word 0x40020410
  6406. 8002f28: 40020428 .word 0x40020428
  6407. 8002f2c: 40020440 .word 0x40020440
  6408. 8002f30: 40020458 .word 0x40020458
  6409. 8002f34: 40020470 .word 0x40020470
  6410. 8002f38: 40020488 .word 0x40020488
  6411. 8002f3c: 400204a0 .word 0x400204a0
  6412. 8002f40: 400204b8 .word 0x400204b8
  6413. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  6414. 8002f44: 687b ldr r3, [r7, #4]
  6415. 8002f46: 681b ldr r3, [r3, #0]
  6416. 8002f48: 681b ldr r3, [r3, #0]
  6417. 8002f4a: f003 0301 and.w r3, r3, #1
  6418. 8002f4e: 2b00 cmp r3, #0
  6419. 8002f50: d1c8 bne.n 8002ee4 <HAL_DMA_Init+0x198>
  6420. }
  6421. }
  6422. /* Get the CR register value */
  6423. registerValue = ((DMA_Stream_TypeDef *)hdma->Instance)->CR;
  6424. 8002f52: 687b ldr r3, [r7, #4]
  6425. 8002f54: 681b ldr r3, [r3, #0]
  6426. 8002f56: 681b ldr r3, [r3, #0]
  6427. 8002f58: 617b str r3, [r7, #20]
  6428. /* Clear CHSEL, MBURST, PBURST, PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR, CT and DBM bits */
  6429. registerValue &= ((uint32_t)~(DMA_SxCR_MBURST | DMA_SxCR_PBURST | \
  6430. 8002f5a: 697a ldr r2, [r7, #20]
  6431. 8002f5c: 4b83 ldr r3, [pc, #524] @ (800316c <HAL_DMA_Init+0x420>)
  6432. 8002f5e: 4013 ands r3, r2
  6433. 8002f60: 617b str r3, [r7, #20]
  6434. DMA_SxCR_PL | DMA_SxCR_MSIZE | DMA_SxCR_PSIZE | \
  6435. DMA_SxCR_MINC | DMA_SxCR_PINC | DMA_SxCR_CIRC | \
  6436. DMA_SxCR_DIR | DMA_SxCR_CT | DMA_SxCR_DBM));
  6437. /* Prepare the DMA Stream configuration */
  6438. registerValue |= hdma->Init.Direction |
  6439. 8002f62: 687b ldr r3, [r7, #4]
  6440. 8002f64: 689a ldr r2, [r3, #8]
  6441. hdma->Init.PeriphInc | hdma->Init.MemInc |
  6442. 8002f66: 687b ldr r3, [r7, #4]
  6443. 8002f68: 68db ldr r3, [r3, #12]
  6444. registerValue |= hdma->Init.Direction |
  6445. 8002f6a: 431a orrs r2, r3
  6446. hdma->Init.PeriphInc | hdma->Init.MemInc |
  6447. 8002f6c: 687b ldr r3, [r7, #4]
  6448. 8002f6e: 691b ldr r3, [r3, #16]
  6449. 8002f70: 431a orrs r2, r3
  6450. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  6451. 8002f72: 687b ldr r3, [r7, #4]
  6452. 8002f74: 695b ldr r3, [r3, #20]
  6453. hdma->Init.PeriphInc | hdma->Init.MemInc |
  6454. 8002f76: 431a orrs r2, r3
  6455. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  6456. 8002f78: 687b ldr r3, [r7, #4]
  6457. 8002f7a: 699b ldr r3, [r3, #24]
  6458. 8002f7c: 431a orrs r2, r3
  6459. hdma->Init.Mode | hdma->Init.Priority;
  6460. 8002f7e: 687b ldr r3, [r7, #4]
  6461. 8002f80: 69db ldr r3, [r3, #28]
  6462. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  6463. 8002f82: 431a orrs r2, r3
  6464. hdma->Init.Mode | hdma->Init.Priority;
  6465. 8002f84: 687b ldr r3, [r7, #4]
  6466. 8002f86: 6a1b ldr r3, [r3, #32]
  6467. 8002f88: 4313 orrs r3, r2
  6468. registerValue |= hdma->Init.Direction |
  6469. 8002f8a: 697a ldr r2, [r7, #20]
  6470. 8002f8c: 4313 orrs r3, r2
  6471. 8002f8e: 617b str r3, [r7, #20]
  6472. /* the Memory burst and peripheral burst are not used when the FIFO is disabled */
  6473. if(hdma->Init.FIFOMode == DMA_FIFOMODE_ENABLE)
  6474. 8002f90: 687b ldr r3, [r7, #4]
  6475. 8002f92: 6a5b ldr r3, [r3, #36] @ 0x24
  6476. 8002f94: 2b04 cmp r3, #4
  6477. 8002f96: d107 bne.n 8002fa8 <HAL_DMA_Init+0x25c>
  6478. {
  6479. /* Get memory burst and peripheral burst */
  6480. registerValue |= hdma->Init.MemBurst | hdma->Init.PeriphBurst;
  6481. 8002f98: 687b ldr r3, [r7, #4]
  6482. 8002f9a: 6ada ldr r2, [r3, #44] @ 0x2c
  6483. 8002f9c: 687b ldr r3, [r7, #4]
  6484. 8002f9e: 6b1b ldr r3, [r3, #48] @ 0x30
  6485. 8002fa0: 4313 orrs r3, r2
  6486. 8002fa2: 697a ldr r2, [r7, #20]
  6487. 8002fa4: 4313 orrs r3, r2
  6488. 8002fa6: 617b str r3, [r7, #20]
  6489. }
  6490. /* Work around for Errata 2.22: UART/USART- DMA transfer lock: DMA stream could be
  6491. lock when transferring data to/from USART/UART */
  6492. #if (STM32H7_DEV_ID == 0x450UL)
  6493. if((DBGMCU->IDCODE & 0xFFFF0000U) >= 0x20000000U)
  6494. 8002fa8: 4b71 ldr r3, [pc, #452] @ (8003170 <HAL_DMA_Init+0x424>)
  6495. 8002faa: 681a ldr r2, [r3, #0]
  6496. 8002fac: 4b71 ldr r3, [pc, #452] @ (8003174 <HAL_DMA_Init+0x428>)
  6497. 8002fae: 4013 ands r3, r2
  6498. 8002fb0: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  6499. 8002fb4: d328 bcc.n 8003008 <HAL_DMA_Init+0x2bc>
  6500. {
  6501. #endif /* STM32H7_DEV_ID == 0x450UL */
  6502. if(IS_DMA_UART_USART_REQUEST(hdma->Init.Request) != 0U)
  6503. 8002fb6: 687b ldr r3, [r7, #4]
  6504. 8002fb8: 685b ldr r3, [r3, #4]
  6505. 8002fba: 2b28 cmp r3, #40 @ 0x28
  6506. 8002fbc: d903 bls.n 8002fc6 <HAL_DMA_Init+0x27a>
  6507. 8002fbe: 687b ldr r3, [r7, #4]
  6508. 8002fc0: 685b ldr r3, [r3, #4]
  6509. 8002fc2: 2b2e cmp r3, #46 @ 0x2e
  6510. 8002fc4: d917 bls.n 8002ff6 <HAL_DMA_Init+0x2aa>
  6511. 8002fc6: 687b ldr r3, [r7, #4]
  6512. 8002fc8: 685b ldr r3, [r3, #4]
  6513. 8002fca: 2b3e cmp r3, #62 @ 0x3e
  6514. 8002fcc: d903 bls.n 8002fd6 <HAL_DMA_Init+0x28a>
  6515. 8002fce: 687b ldr r3, [r7, #4]
  6516. 8002fd0: 685b ldr r3, [r3, #4]
  6517. 8002fd2: 2b42 cmp r3, #66 @ 0x42
  6518. 8002fd4: d90f bls.n 8002ff6 <HAL_DMA_Init+0x2aa>
  6519. 8002fd6: 687b ldr r3, [r7, #4]
  6520. 8002fd8: 685b ldr r3, [r3, #4]
  6521. 8002fda: 2b46 cmp r3, #70 @ 0x46
  6522. 8002fdc: d903 bls.n 8002fe6 <HAL_DMA_Init+0x29a>
  6523. 8002fde: 687b ldr r3, [r7, #4]
  6524. 8002fe0: 685b ldr r3, [r3, #4]
  6525. 8002fe2: 2b48 cmp r3, #72 @ 0x48
  6526. 8002fe4: d907 bls.n 8002ff6 <HAL_DMA_Init+0x2aa>
  6527. 8002fe6: 687b ldr r3, [r7, #4]
  6528. 8002fe8: 685b ldr r3, [r3, #4]
  6529. 8002fea: 2b4e cmp r3, #78 @ 0x4e
  6530. 8002fec: d905 bls.n 8002ffa <HAL_DMA_Init+0x2ae>
  6531. 8002fee: 687b ldr r3, [r7, #4]
  6532. 8002ff0: 685b ldr r3, [r3, #4]
  6533. 8002ff2: 2b52 cmp r3, #82 @ 0x52
  6534. 8002ff4: d801 bhi.n 8002ffa <HAL_DMA_Init+0x2ae>
  6535. 8002ff6: 2301 movs r3, #1
  6536. 8002ff8: e000 b.n 8002ffc <HAL_DMA_Init+0x2b0>
  6537. 8002ffa: 2300 movs r3, #0
  6538. 8002ffc: 2b00 cmp r3, #0
  6539. 8002ffe: d003 beq.n 8003008 <HAL_DMA_Init+0x2bc>
  6540. {
  6541. registerValue |= DMA_SxCR_TRBUFF;
  6542. 8003000: 697b ldr r3, [r7, #20]
  6543. 8003002: f443 1380 orr.w r3, r3, #1048576 @ 0x100000
  6544. 8003006: 617b str r3, [r7, #20]
  6545. #if (STM32H7_DEV_ID == 0x450UL)
  6546. }
  6547. #endif /* STM32H7_DEV_ID == 0x450UL */
  6548. /* Write to DMA Stream CR register */
  6549. ((DMA_Stream_TypeDef *)hdma->Instance)->CR = registerValue;
  6550. 8003008: 687b ldr r3, [r7, #4]
  6551. 800300a: 681b ldr r3, [r3, #0]
  6552. 800300c: 697a ldr r2, [r7, #20]
  6553. 800300e: 601a str r2, [r3, #0]
  6554. /* Get the FCR register value */
  6555. registerValue = ((DMA_Stream_TypeDef *)hdma->Instance)->FCR;
  6556. 8003010: 687b ldr r3, [r7, #4]
  6557. 8003012: 681b ldr r3, [r3, #0]
  6558. 8003014: 695b ldr r3, [r3, #20]
  6559. 8003016: 617b str r3, [r7, #20]
  6560. /* Clear Direct mode and FIFO threshold bits */
  6561. registerValue &= (uint32_t)~(DMA_SxFCR_DMDIS | DMA_SxFCR_FTH);
  6562. 8003018: 697b ldr r3, [r7, #20]
  6563. 800301a: f023 0307 bic.w r3, r3, #7
  6564. 800301e: 617b str r3, [r7, #20]
  6565. /* Prepare the DMA Stream FIFO configuration */
  6566. registerValue |= hdma->Init.FIFOMode;
  6567. 8003020: 687b ldr r3, [r7, #4]
  6568. 8003022: 6a5b ldr r3, [r3, #36] @ 0x24
  6569. 8003024: 697a ldr r2, [r7, #20]
  6570. 8003026: 4313 orrs r3, r2
  6571. 8003028: 617b str r3, [r7, #20]
  6572. /* the FIFO threshold is not used when the FIFO mode is disabled */
  6573. if(hdma->Init.FIFOMode == DMA_FIFOMODE_ENABLE)
  6574. 800302a: 687b ldr r3, [r7, #4]
  6575. 800302c: 6a5b ldr r3, [r3, #36] @ 0x24
  6576. 800302e: 2b04 cmp r3, #4
  6577. 8003030: d117 bne.n 8003062 <HAL_DMA_Init+0x316>
  6578. {
  6579. /* Get the FIFO threshold */
  6580. registerValue |= hdma->Init.FIFOThreshold;
  6581. 8003032: 687b ldr r3, [r7, #4]
  6582. 8003034: 6a9b ldr r3, [r3, #40] @ 0x28
  6583. 8003036: 697a ldr r2, [r7, #20]
  6584. 8003038: 4313 orrs r3, r2
  6585. 800303a: 617b str r3, [r7, #20]
  6586. /* Check compatibility between FIFO threshold level and size of the memory burst */
  6587. /* for INCR4, INCR8, INCR16 */
  6588. if(hdma->Init.MemBurst != DMA_MBURST_SINGLE)
  6589. 800303c: 687b ldr r3, [r7, #4]
  6590. 800303e: 6adb ldr r3, [r3, #44] @ 0x2c
  6591. 8003040: 2b00 cmp r3, #0
  6592. 8003042: d00e beq.n 8003062 <HAL_DMA_Init+0x316>
  6593. {
  6594. if (DMA_CheckFifoParam(hdma) != HAL_OK)
  6595. 8003044: 6878 ldr r0, [r7, #4]
  6596. 8003046: f001 ff1d bl 8004e84 <DMA_CheckFifoParam>
  6597. 800304a: 4603 mov r3, r0
  6598. 800304c: 2b00 cmp r3, #0
  6599. 800304e: d008 beq.n 8003062 <HAL_DMA_Init+0x316>
  6600. {
  6601. /* Update error code */
  6602. hdma->ErrorCode = HAL_DMA_ERROR_PARAM;
  6603. 8003050: 687b ldr r3, [r7, #4]
  6604. 8003052: 2240 movs r2, #64 @ 0x40
  6605. 8003054: 655a str r2, [r3, #84] @ 0x54
  6606. /* Change the DMA state */
  6607. hdma->State = HAL_DMA_STATE_READY;
  6608. 8003056: 687b ldr r3, [r7, #4]
  6609. 8003058: 2201 movs r2, #1
  6610. 800305a: f883 2035 strb.w r2, [r3, #53] @ 0x35
  6611. return HAL_ERROR;
  6612. 800305e: 2301 movs r3, #1
  6613. 8003060: e197 b.n 8003392 <HAL_DMA_Init+0x646>
  6614. }
  6615. }
  6616. }
  6617. /* Write to DMA Stream FCR */
  6618. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR = registerValue;
  6619. 8003062: 687b ldr r3, [r7, #4]
  6620. 8003064: 681b ldr r3, [r3, #0]
  6621. 8003066: 697a ldr r2, [r7, #20]
  6622. 8003068: 615a str r2, [r3, #20]
  6623. /* Initialize StreamBaseAddress and StreamIndex parameters to be used to calculate
  6624. DMA steam Base Address needed by HAL_DMA_IRQHandler() and HAL_DMA_PollForTransfer() */
  6625. regs_dma = (DMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma);
  6626. 800306a: 6878 ldr r0, [r7, #4]
  6627. 800306c: f001 fe58 bl 8004d20 <DMA_CalcBaseAndBitshift>
  6628. 8003070: 4603 mov r3, r0
  6629. 8003072: 60bb str r3, [r7, #8]
  6630. /* Clear all interrupt flags */
  6631. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  6632. 8003074: 687b ldr r3, [r7, #4]
  6633. 8003076: 6ddb ldr r3, [r3, #92] @ 0x5c
  6634. 8003078: f003 031f and.w r3, r3, #31
  6635. 800307c: 223f movs r2, #63 @ 0x3f
  6636. 800307e: 409a lsls r2, r3
  6637. 8003080: 68bb ldr r3, [r7, #8]
  6638. 8003082: 609a str r2, [r3, #8]
  6639. 8003084: e0cd b.n 8003222 <HAL_DMA_Init+0x4d6>
  6640. }
  6641. else if(IS_BDMA_CHANNEL_INSTANCE(hdma->Instance) != 0U) /* BDMA instance(s) */
  6642. 8003086: 687b ldr r3, [r7, #4]
  6643. 8003088: 681b ldr r3, [r3, #0]
  6644. 800308a: 4a3b ldr r2, [pc, #236] @ (8003178 <HAL_DMA_Init+0x42c>)
  6645. 800308c: 4293 cmp r3, r2
  6646. 800308e: d022 beq.n 80030d6 <HAL_DMA_Init+0x38a>
  6647. 8003090: 687b ldr r3, [r7, #4]
  6648. 8003092: 681b ldr r3, [r3, #0]
  6649. 8003094: 4a39 ldr r2, [pc, #228] @ (800317c <HAL_DMA_Init+0x430>)
  6650. 8003096: 4293 cmp r3, r2
  6651. 8003098: d01d beq.n 80030d6 <HAL_DMA_Init+0x38a>
  6652. 800309a: 687b ldr r3, [r7, #4]
  6653. 800309c: 681b ldr r3, [r3, #0]
  6654. 800309e: 4a38 ldr r2, [pc, #224] @ (8003180 <HAL_DMA_Init+0x434>)
  6655. 80030a0: 4293 cmp r3, r2
  6656. 80030a2: d018 beq.n 80030d6 <HAL_DMA_Init+0x38a>
  6657. 80030a4: 687b ldr r3, [r7, #4]
  6658. 80030a6: 681b ldr r3, [r3, #0]
  6659. 80030a8: 4a36 ldr r2, [pc, #216] @ (8003184 <HAL_DMA_Init+0x438>)
  6660. 80030aa: 4293 cmp r3, r2
  6661. 80030ac: d013 beq.n 80030d6 <HAL_DMA_Init+0x38a>
  6662. 80030ae: 687b ldr r3, [r7, #4]
  6663. 80030b0: 681b ldr r3, [r3, #0]
  6664. 80030b2: 4a35 ldr r2, [pc, #212] @ (8003188 <HAL_DMA_Init+0x43c>)
  6665. 80030b4: 4293 cmp r3, r2
  6666. 80030b6: d00e beq.n 80030d6 <HAL_DMA_Init+0x38a>
  6667. 80030b8: 687b ldr r3, [r7, #4]
  6668. 80030ba: 681b ldr r3, [r3, #0]
  6669. 80030bc: 4a33 ldr r2, [pc, #204] @ (800318c <HAL_DMA_Init+0x440>)
  6670. 80030be: 4293 cmp r3, r2
  6671. 80030c0: d009 beq.n 80030d6 <HAL_DMA_Init+0x38a>
  6672. 80030c2: 687b ldr r3, [r7, #4]
  6673. 80030c4: 681b ldr r3, [r3, #0]
  6674. 80030c6: 4a32 ldr r2, [pc, #200] @ (8003190 <HAL_DMA_Init+0x444>)
  6675. 80030c8: 4293 cmp r3, r2
  6676. 80030ca: d004 beq.n 80030d6 <HAL_DMA_Init+0x38a>
  6677. 80030cc: 687b ldr r3, [r7, #4]
  6678. 80030ce: 681b ldr r3, [r3, #0]
  6679. 80030d0: 4a30 ldr r2, [pc, #192] @ (8003194 <HAL_DMA_Init+0x448>)
  6680. 80030d2: 4293 cmp r3, r2
  6681. 80030d4: d101 bne.n 80030da <HAL_DMA_Init+0x38e>
  6682. 80030d6: 2301 movs r3, #1
  6683. 80030d8: e000 b.n 80030dc <HAL_DMA_Init+0x390>
  6684. 80030da: 2300 movs r3, #0
  6685. 80030dc: 2b00 cmp r3, #0
  6686. 80030de: f000 8097 beq.w 8003210 <HAL_DMA_Init+0x4c4>
  6687. {
  6688. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  6689. 80030e2: 687b ldr r3, [r7, #4]
  6690. 80030e4: 681b ldr r3, [r3, #0]
  6691. 80030e6: 4a24 ldr r2, [pc, #144] @ (8003178 <HAL_DMA_Init+0x42c>)
  6692. 80030e8: 4293 cmp r3, r2
  6693. 80030ea: d021 beq.n 8003130 <HAL_DMA_Init+0x3e4>
  6694. 80030ec: 687b ldr r3, [r7, #4]
  6695. 80030ee: 681b ldr r3, [r3, #0]
  6696. 80030f0: 4a22 ldr r2, [pc, #136] @ (800317c <HAL_DMA_Init+0x430>)
  6697. 80030f2: 4293 cmp r3, r2
  6698. 80030f4: d01c beq.n 8003130 <HAL_DMA_Init+0x3e4>
  6699. 80030f6: 687b ldr r3, [r7, #4]
  6700. 80030f8: 681b ldr r3, [r3, #0]
  6701. 80030fa: 4a21 ldr r2, [pc, #132] @ (8003180 <HAL_DMA_Init+0x434>)
  6702. 80030fc: 4293 cmp r3, r2
  6703. 80030fe: d017 beq.n 8003130 <HAL_DMA_Init+0x3e4>
  6704. 8003100: 687b ldr r3, [r7, #4]
  6705. 8003102: 681b ldr r3, [r3, #0]
  6706. 8003104: 4a1f ldr r2, [pc, #124] @ (8003184 <HAL_DMA_Init+0x438>)
  6707. 8003106: 4293 cmp r3, r2
  6708. 8003108: d012 beq.n 8003130 <HAL_DMA_Init+0x3e4>
  6709. 800310a: 687b ldr r3, [r7, #4]
  6710. 800310c: 681b ldr r3, [r3, #0]
  6711. 800310e: 4a1e ldr r2, [pc, #120] @ (8003188 <HAL_DMA_Init+0x43c>)
  6712. 8003110: 4293 cmp r3, r2
  6713. 8003112: d00d beq.n 8003130 <HAL_DMA_Init+0x3e4>
  6714. 8003114: 687b ldr r3, [r7, #4]
  6715. 8003116: 681b ldr r3, [r3, #0]
  6716. 8003118: 4a1c ldr r2, [pc, #112] @ (800318c <HAL_DMA_Init+0x440>)
  6717. 800311a: 4293 cmp r3, r2
  6718. 800311c: d008 beq.n 8003130 <HAL_DMA_Init+0x3e4>
  6719. 800311e: 687b ldr r3, [r7, #4]
  6720. 8003120: 681b ldr r3, [r3, #0]
  6721. 8003122: 4a1b ldr r2, [pc, #108] @ (8003190 <HAL_DMA_Init+0x444>)
  6722. 8003124: 4293 cmp r3, r2
  6723. 8003126: d003 beq.n 8003130 <HAL_DMA_Init+0x3e4>
  6724. 8003128: 687b ldr r3, [r7, #4]
  6725. 800312a: 681b ldr r3, [r3, #0]
  6726. 800312c: 4a19 ldr r2, [pc, #100] @ (8003194 <HAL_DMA_Init+0x448>)
  6727. 800312e: 4293 cmp r3, r2
  6728. /* Check the request parameter */
  6729. assert_param(IS_BDMA_REQUEST(hdma->Init.Request));
  6730. }
  6731. /* Change DMA peripheral state */
  6732. hdma->State = HAL_DMA_STATE_BUSY;
  6733. 8003130: 687b ldr r3, [r7, #4]
  6734. 8003132: 2202 movs r2, #2
  6735. 8003134: f883 2035 strb.w r2, [r3, #53] @ 0x35
  6736. /* Allocate lock resource */
  6737. __HAL_UNLOCK(hdma);
  6738. 8003138: 687b ldr r3, [r7, #4]
  6739. 800313a: 2200 movs r2, #0
  6740. 800313c: f883 2034 strb.w r2, [r3, #52] @ 0x34
  6741. /* Get the CR register value */
  6742. registerValue = ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR;
  6743. 8003140: 687b ldr r3, [r7, #4]
  6744. 8003142: 681b ldr r3, [r3, #0]
  6745. 8003144: 681b ldr r3, [r3, #0]
  6746. 8003146: 617b str r3, [r7, #20]
  6747. /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR, MEM2MEM, DBM and CT bits */
  6748. registerValue &= ((uint32_t)~(BDMA_CCR_PL | BDMA_CCR_MSIZE | BDMA_CCR_PSIZE | \
  6749. 8003148: 697a ldr r2, [r7, #20]
  6750. 800314a: 4b13 ldr r3, [pc, #76] @ (8003198 <HAL_DMA_Init+0x44c>)
  6751. 800314c: 4013 ands r3, r2
  6752. 800314e: 617b str r3, [r7, #20]
  6753. BDMA_CCR_MINC | BDMA_CCR_PINC | BDMA_CCR_CIRC | \
  6754. BDMA_CCR_DIR | BDMA_CCR_MEM2MEM | BDMA_CCR_DBM | \
  6755. BDMA_CCR_CT));
  6756. /* Prepare the DMA Channel configuration */
  6757. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  6758. 8003150: 687b ldr r3, [r7, #4]
  6759. 8003152: 689b ldr r3, [r3, #8]
  6760. 8003154: 2b40 cmp r3, #64 @ 0x40
  6761. 8003156: d021 beq.n 800319c <HAL_DMA_Init+0x450>
  6762. 8003158: 687b ldr r3, [r7, #4]
  6763. 800315a: 689b ldr r3, [r3, #8]
  6764. 800315c: 2b80 cmp r3, #128 @ 0x80
  6765. 800315e: d102 bne.n 8003166 <HAL_DMA_Init+0x41a>
  6766. 8003160: f44f 4380 mov.w r3, #16384 @ 0x4000
  6767. 8003164: e01b b.n 800319e <HAL_DMA_Init+0x452>
  6768. 8003166: 2300 movs r3, #0
  6769. 8003168: e019 b.n 800319e <HAL_DMA_Init+0x452>
  6770. 800316a: bf00 nop
  6771. 800316c: fe10803f .word 0xfe10803f
  6772. 8003170: 5c001000 .word 0x5c001000
  6773. 8003174: ffff0000 .word 0xffff0000
  6774. 8003178: 58025408 .word 0x58025408
  6775. 800317c: 5802541c .word 0x5802541c
  6776. 8003180: 58025430 .word 0x58025430
  6777. 8003184: 58025444 .word 0x58025444
  6778. 8003188: 58025458 .word 0x58025458
  6779. 800318c: 5802546c .word 0x5802546c
  6780. 8003190: 58025480 .word 0x58025480
  6781. 8003194: 58025494 .word 0x58025494
  6782. 8003198: fffe000f .word 0xfffe000f
  6783. 800319c: 2310 movs r3, #16
  6784. DMA_TO_BDMA_PERIPHERAL_INC(hdma->Init.PeriphInc) |
  6785. 800319e: 687a ldr r2, [r7, #4]
  6786. 80031a0: 68d2 ldr r2, [r2, #12]
  6787. 80031a2: 08d2 lsrs r2, r2, #3
  6788. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  6789. 80031a4: 431a orrs r2, r3
  6790. DMA_TO_BDMA_MEMORY_INC(hdma->Init.MemInc) |
  6791. 80031a6: 687b ldr r3, [r7, #4]
  6792. 80031a8: 691b ldr r3, [r3, #16]
  6793. 80031aa: 08db lsrs r3, r3, #3
  6794. DMA_TO_BDMA_PERIPHERAL_INC(hdma->Init.PeriphInc) |
  6795. 80031ac: 431a orrs r2, r3
  6796. DMA_TO_BDMA_PDATA_SIZE(hdma->Init.PeriphDataAlignment) |
  6797. 80031ae: 687b ldr r3, [r7, #4]
  6798. 80031b0: 695b ldr r3, [r3, #20]
  6799. 80031b2: 08db lsrs r3, r3, #3
  6800. DMA_TO_BDMA_MEMORY_INC(hdma->Init.MemInc) |
  6801. 80031b4: 431a orrs r2, r3
  6802. DMA_TO_BDMA_MDATA_SIZE(hdma->Init.MemDataAlignment) |
  6803. 80031b6: 687b ldr r3, [r7, #4]
  6804. 80031b8: 699b ldr r3, [r3, #24]
  6805. 80031ba: 08db lsrs r3, r3, #3
  6806. DMA_TO_BDMA_PDATA_SIZE(hdma->Init.PeriphDataAlignment) |
  6807. 80031bc: 431a orrs r2, r3
  6808. DMA_TO_BDMA_MODE(hdma->Init.Mode) |
  6809. 80031be: 687b ldr r3, [r7, #4]
  6810. 80031c0: 69db ldr r3, [r3, #28]
  6811. 80031c2: 08db lsrs r3, r3, #3
  6812. DMA_TO_BDMA_MDATA_SIZE(hdma->Init.MemDataAlignment) |
  6813. 80031c4: 431a orrs r2, r3
  6814. DMA_TO_BDMA_PRIORITY(hdma->Init.Priority);
  6815. 80031c6: 687b ldr r3, [r7, #4]
  6816. 80031c8: 6a1b ldr r3, [r3, #32]
  6817. 80031ca: 091b lsrs r3, r3, #4
  6818. DMA_TO_BDMA_MODE(hdma->Init.Mode) |
  6819. 80031cc: 4313 orrs r3, r2
  6820. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  6821. 80031ce: 697a ldr r2, [r7, #20]
  6822. 80031d0: 4313 orrs r3, r2
  6823. 80031d2: 617b str r3, [r7, #20]
  6824. /* Write to DMA Channel CR register */
  6825. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR = registerValue;
  6826. 80031d4: 687b ldr r3, [r7, #4]
  6827. 80031d6: 681b ldr r3, [r3, #0]
  6828. 80031d8: 697a ldr r2, [r7, #20]
  6829. 80031da: 601a str r2, [r3, #0]
  6830. /* calculation of the channel index */
  6831. hdma->StreamIndex = (((uint32_t)((uint32_t*)hdma->Instance) - (uint32_t)BDMA_Channel0) / ((uint32_t)BDMA_Channel1 - (uint32_t)BDMA_Channel0)) << 2U;
  6832. 80031dc: 687b ldr r3, [r7, #4]
  6833. 80031de: 681b ldr r3, [r3, #0]
  6834. 80031e0: 461a mov r2, r3
  6835. 80031e2: 4b6e ldr r3, [pc, #440] @ (800339c <HAL_DMA_Init+0x650>)
  6836. 80031e4: 4413 add r3, r2
  6837. 80031e6: 4a6e ldr r2, [pc, #440] @ (80033a0 <HAL_DMA_Init+0x654>)
  6838. 80031e8: fba2 2303 umull r2, r3, r2, r3
  6839. 80031ec: 091b lsrs r3, r3, #4
  6840. 80031ee: 009a lsls r2, r3, #2
  6841. 80031f0: 687b ldr r3, [r7, #4]
  6842. 80031f2: 65da str r2, [r3, #92] @ 0x5c
  6843. /* Initialize StreamBaseAddress and StreamIndex parameters to be used to calculate
  6844. DMA steam Base Address needed by HAL_DMA_IRQHandler() and HAL_DMA_PollForTransfer() */
  6845. regs_bdma = (BDMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma);
  6846. 80031f4: 6878 ldr r0, [r7, #4]
  6847. 80031f6: f001 fd93 bl 8004d20 <DMA_CalcBaseAndBitshift>
  6848. 80031fa: 4603 mov r3, r0
  6849. 80031fc: 60fb str r3, [r7, #12]
  6850. /* Clear all interrupt flags */
  6851. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  6852. 80031fe: 687b ldr r3, [r7, #4]
  6853. 8003200: 6ddb ldr r3, [r3, #92] @ 0x5c
  6854. 8003202: f003 031f and.w r3, r3, #31
  6855. 8003206: 2201 movs r2, #1
  6856. 8003208: 409a lsls r2, r3
  6857. 800320a: 68fb ldr r3, [r7, #12]
  6858. 800320c: 605a str r2, [r3, #4]
  6859. 800320e: e008 b.n 8003222 <HAL_DMA_Init+0x4d6>
  6860. }
  6861. else
  6862. {
  6863. hdma->ErrorCode = HAL_DMA_ERROR_PARAM;
  6864. 8003210: 687b ldr r3, [r7, #4]
  6865. 8003212: 2240 movs r2, #64 @ 0x40
  6866. 8003214: 655a str r2, [r3, #84] @ 0x54
  6867. hdma->State = HAL_DMA_STATE_ERROR;
  6868. 8003216: 687b ldr r3, [r7, #4]
  6869. 8003218: 2203 movs r2, #3
  6870. 800321a: f883 2035 strb.w r2, [r3, #53] @ 0x35
  6871. return HAL_ERROR;
  6872. 800321e: 2301 movs r3, #1
  6873. 8003220: e0b7 b.n 8003392 <HAL_DMA_Init+0x646>
  6874. }
  6875. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  6876. 8003222: 687b ldr r3, [r7, #4]
  6877. 8003224: 681b ldr r3, [r3, #0]
  6878. 8003226: 4a5f ldr r2, [pc, #380] @ (80033a4 <HAL_DMA_Init+0x658>)
  6879. 8003228: 4293 cmp r3, r2
  6880. 800322a: d072 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6881. 800322c: 687b ldr r3, [r7, #4]
  6882. 800322e: 681b ldr r3, [r3, #0]
  6883. 8003230: 4a5d ldr r2, [pc, #372] @ (80033a8 <HAL_DMA_Init+0x65c>)
  6884. 8003232: 4293 cmp r3, r2
  6885. 8003234: d06d beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6886. 8003236: 687b ldr r3, [r7, #4]
  6887. 8003238: 681b ldr r3, [r3, #0]
  6888. 800323a: 4a5c ldr r2, [pc, #368] @ (80033ac <HAL_DMA_Init+0x660>)
  6889. 800323c: 4293 cmp r3, r2
  6890. 800323e: d068 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6891. 8003240: 687b ldr r3, [r7, #4]
  6892. 8003242: 681b ldr r3, [r3, #0]
  6893. 8003244: 4a5a ldr r2, [pc, #360] @ (80033b0 <HAL_DMA_Init+0x664>)
  6894. 8003246: 4293 cmp r3, r2
  6895. 8003248: d063 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6896. 800324a: 687b ldr r3, [r7, #4]
  6897. 800324c: 681b ldr r3, [r3, #0]
  6898. 800324e: 4a59 ldr r2, [pc, #356] @ (80033b4 <HAL_DMA_Init+0x668>)
  6899. 8003250: 4293 cmp r3, r2
  6900. 8003252: d05e beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6901. 8003254: 687b ldr r3, [r7, #4]
  6902. 8003256: 681b ldr r3, [r3, #0]
  6903. 8003258: 4a57 ldr r2, [pc, #348] @ (80033b8 <HAL_DMA_Init+0x66c>)
  6904. 800325a: 4293 cmp r3, r2
  6905. 800325c: d059 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6906. 800325e: 687b ldr r3, [r7, #4]
  6907. 8003260: 681b ldr r3, [r3, #0]
  6908. 8003262: 4a56 ldr r2, [pc, #344] @ (80033bc <HAL_DMA_Init+0x670>)
  6909. 8003264: 4293 cmp r3, r2
  6910. 8003266: d054 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6911. 8003268: 687b ldr r3, [r7, #4]
  6912. 800326a: 681b ldr r3, [r3, #0]
  6913. 800326c: 4a54 ldr r2, [pc, #336] @ (80033c0 <HAL_DMA_Init+0x674>)
  6914. 800326e: 4293 cmp r3, r2
  6915. 8003270: d04f beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6916. 8003272: 687b ldr r3, [r7, #4]
  6917. 8003274: 681b ldr r3, [r3, #0]
  6918. 8003276: 4a53 ldr r2, [pc, #332] @ (80033c4 <HAL_DMA_Init+0x678>)
  6919. 8003278: 4293 cmp r3, r2
  6920. 800327a: d04a beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6921. 800327c: 687b ldr r3, [r7, #4]
  6922. 800327e: 681b ldr r3, [r3, #0]
  6923. 8003280: 4a51 ldr r2, [pc, #324] @ (80033c8 <HAL_DMA_Init+0x67c>)
  6924. 8003282: 4293 cmp r3, r2
  6925. 8003284: d045 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6926. 8003286: 687b ldr r3, [r7, #4]
  6927. 8003288: 681b ldr r3, [r3, #0]
  6928. 800328a: 4a50 ldr r2, [pc, #320] @ (80033cc <HAL_DMA_Init+0x680>)
  6929. 800328c: 4293 cmp r3, r2
  6930. 800328e: d040 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6931. 8003290: 687b ldr r3, [r7, #4]
  6932. 8003292: 681b ldr r3, [r3, #0]
  6933. 8003294: 4a4e ldr r2, [pc, #312] @ (80033d0 <HAL_DMA_Init+0x684>)
  6934. 8003296: 4293 cmp r3, r2
  6935. 8003298: d03b beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6936. 800329a: 687b ldr r3, [r7, #4]
  6937. 800329c: 681b ldr r3, [r3, #0]
  6938. 800329e: 4a4d ldr r2, [pc, #308] @ (80033d4 <HAL_DMA_Init+0x688>)
  6939. 80032a0: 4293 cmp r3, r2
  6940. 80032a2: d036 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6941. 80032a4: 687b ldr r3, [r7, #4]
  6942. 80032a6: 681b ldr r3, [r3, #0]
  6943. 80032a8: 4a4b ldr r2, [pc, #300] @ (80033d8 <HAL_DMA_Init+0x68c>)
  6944. 80032aa: 4293 cmp r3, r2
  6945. 80032ac: d031 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6946. 80032ae: 687b ldr r3, [r7, #4]
  6947. 80032b0: 681b ldr r3, [r3, #0]
  6948. 80032b2: 4a4a ldr r2, [pc, #296] @ (80033dc <HAL_DMA_Init+0x690>)
  6949. 80032b4: 4293 cmp r3, r2
  6950. 80032b6: d02c beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6951. 80032b8: 687b ldr r3, [r7, #4]
  6952. 80032ba: 681b ldr r3, [r3, #0]
  6953. 80032bc: 4a48 ldr r2, [pc, #288] @ (80033e0 <HAL_DMA_Init+0x694>)
  6954. 80032be: 4293 cmp r3, r2
  6955. 80032c0: d027 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6956. 80032c2: 687b ldr r3, [r7, #4]
  6957. 80032c4: 681b ldr r3, [r3, #0]
  6958. 80032c6: 4a47 ldr r2, [pc, #284] @ (80033e4 <HAL_DMA_Init+0x698>)
  6959. 80032c8: 4293 cmp r3, r2
  6960. 80032ca: d022 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6961. 80032cc: 687b ldr r3, [r7, #4]
  6962. 80032ce: 681b ldr r3, [r3, #0]
  6963. 80032d0: 4a45 ldr r2, [pc, #276] @ (80033e8 <HAL_DMA_Init+0x69c>)
  6964. 80032d2: 4293 cmp r3, r2
  6965. 80032d4: d01d beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6966. 80032d6: 687b ldr r3, [r7, #4]
  6967. 80032d8: 681b ldr r3, [r3, #0]
  6968. 80032da: 4a44 ldr r2, [pc, #272] @ (80033ec <HAL_DMA_Init+0x6a0>)
  6969. 80032dc: 4293 cmp r3, r2
  6970. 80032de: d018 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6971. 80032e0: 687b ldr r3, [r7, #4]
  6972. 80032e2: 681b ldr r3, [r3, #0]
  6973. 80032e4: 4a42 ldr r2, [pc, #264] @ (80033f0 <HAL_DMA_Init+0x6a4>)
  6974. 80032e6: 4293 cmp r3, r2
  6975. 80032e8: d013 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6976. 80032ea: 687b ldr r3, [r7, #4]
  6977. 80032ec: 681b ldr r3, [r3, #0]
  6978. 80032ee: 4a41 ldr r2, [pc, #260] @ (80033f4 <HAL_DMA_Init+0x6a8>)
  6979. 80032f0: 4293 cmp r3, r2
  6980. 80032f2: d00e beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6981. 80032f4: 687b ldr r3, [r7, #4]
  6982. 80032f6: 681b ldr r3, [r3, #0]
  6983. 80032f8: 4a3f ldr r2, [pc, #252] @ (80033f8 <HAL_DMA_Init+0x6ac>)
  6984. 80032fa: 4293 cmp r3, r2
  6985. 80032fc: d009 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6986. 80032fe: 687b ldr r3, [r7, #4]
  6987. 8003300: 681b ldr r3, [r3, #0]
  6988. 8003302: 4a3e ldr r2, [pc, #248] @ (80033fc <HAL_DMA_Init+0x6b0>)
  6989. 8003304: 4293 cmp r3, r2
  6990. 8003306: d004 beq.n 8003312 <HAL_DMA_Init+0x5c6>
  6991. 8003308: 687b ldr r3, [r7, #4]
  6992. 800330a: 681b ldr r3, [r3, #0]
  6993. 800330c: 4a3c ldr r2, [pc, #240] @ (8003400 <HAL_DMA_Init+0x6b4>)
  6994. 800330e: 4293 cmp r3, r2
  6995. 8003310: d101 bne.n 8003316 <HAL_DMA_Init+0x5ca>
  6996. 8003312: 2301 movs r3, #1
  6997. 8003314: e000 b.n 8003318 <HAL_DMA_Init+0x5cc>
  6998. 8003316: 2300 movs r3, #0
  6999. 8003318: 2b00 cmp r3, #0
  7000. 800331a: d032 beq.n 8003382 <HAL_DMA_Init+0x636>
  7001. {
  7002. /* Initialize parameters for DMAMUX channel :
  7003. DMAmuxChannel, DMAmuxChannelStatus and DMAmuxChannelStatusMask
  7004. */
  7005. DMA_CalcDMAMUXChannelBaseAndMask(hdma);
  7006. 800331c: 6878 ldr r0, [r7, #4]
  7007. 800331e: f001 fe2d bl 8004f7c <DMA_CalcDMAMUXChannelBaseAndMask>
  7008. if(hdma->Init.Direction == DMA_MEMORY_TO_MEMORY)
  7009. 8003322: 687b ldr r3, [r7, #4]
  7010. 8003324: 689b ldr r3, [r3, #8]
  7011. 8003326: 2b80 cmp r3, #128 @ 0x80
  7012. 8003328: d102 bne.n 8003330 <HAL_DMA_Init+0x5e4>
  7013. {
  7014. /* if memory to memory force the request to 0*/
  7015. hdma->Init.Request = DMA_REQUEST_MEM2MEM;
  7016. 800332a: 687b ldr r3, [r7, #4]
  7017. 800332c: 2200 movs r2, #0
  7018. 800332e: 605a str r2, [r3, #4]
  7019. }
  7020. /* Set peripheral request to DMAMUX channel */
  7021. hdma->DMAmuxChannel->CCR = (hdma->Init.Request & DMAMUX_CxCR_DMAREQ_ID);
  7022. 8003330: 687b ldr r3, [r7, #4]
  7023. 8003332: 685a ldr r2, [r3, #4]
  7024. 8003334: 687b ldr r3, [r7, #4]
  7025. 8003336: 6e1b ldr r3, [r3, #96] @ 0x60
  7026. 8003338: b2d2 uxtb r2, r2
  7027. 800333a: 601a str r2, [r3, #0]
  7028. /* Clear the DMAMUX synchro overrun flag */
  7029. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  7030. 800333c: 687b ldr r3, [r7, #4]
  7031. 800333e: 6e5b ldr r3, [r3, #100] @ 0x64
  7032. 8003340: 687a ldr r2, [r7, #4]
  7033. 8003342: 6e92 ldr r2, [r2, #104] @ 0x68
  7034. 8003344: 605a str r2, [r3, #4]
  7035. /* Initialize parameters for DMAMUX request generator :
  7036. if the DMA request is DMA_REQUEST_GENERATOR0 to DMA_REQUEST_GENERATOR7
  7037. */
  7038. if((hdma->Init.Request >= DMA_REQUEST_GENERATOR0) && (hdma->Init.Request <= DMA_REQUEST_GENERATOR7))
  7039. 8003346: 687b ldr r3, [r7, #4]
  7040. 8003348: 685b ldr r3, [r3, #4]
  7041. 800334a: 2b00 cmp r3, #0
  7042. 800334c: d010 beq.n 8003370 <HAL_DMA_Init+0x624>
  7043. 800334e: 687b ldr r3, [r7, #4]
  7044. 8003350: 685b ldr r3, [r3, #4]
  7045. 8003352: 2b08 cmp r3, #8
  7046. 8003354: d80c bhi.n 8003370 <HAL_DMA_Init+0x624>
  7047. {
  7048. /* Initialize parameters for DMAMUX request generator :
  7049. DMAmuxRequestGen, DMAmuxRequestGenStatus and DMAmuxRequestGenStatusMask */
  7050. DMA_CalcDMAMUXRequestGenBaseAndMask(hdma);
  7051. 8003356: 6878 ldr r0, [r7, #4]
  7052. 8003358: f001 feaa bl 80050b0 <DMA_CalcDMAMUXRequestGenBaseAndMask>
  7053. /* Reset the DMAMUX request generator register */
  7054. hdma->DMAmuxRequestGen->RGCR = 0U;
  7055. 800335c: 687b ldr r3, [r7, #4]
  7056. 800335e: 6edb ldr r3, [r3, #108] @ 0x6c
  7057. 8003360: 2200 movs r2, #0
  7058. 8003362: 601a str r2, [r3, #0]
  7059. /* Clear the DMAMUX request generator overrun flag */
  7060. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  7061. 8003364: 687b ldr r3, [r7, #4]
  7062. 8003366: 6f1b ldr r3, [r3, #112] @ 0x70
  7063. 8003368: 687a ldr r2, [r7, #4]
  7064. 800336a: 6f52 ldr r2, [r2, #116] @ 0x74
  7065. 800336c: 605a str r2, [r3, #4]
  7066. 800336e: e008 b.n 8003382 <HAL_DMA_Init+0x636>
  7067. }
  7068. else
  7069. {
  7070. hdma->DMAmuxRequestGen = 0U;
  7071. 8003370: 687b ldr r3, [r7, #4]
  7072. 8003372: 2200 movs r2, #0
  7073. 8003374: 66da str r2, [r3, #108] @ 0x6c
  7074. hdma->DMAmuxRequestGenStatus = 0U;
  7075. 8003376: 687b ldr r3, [r7, #4]
  7076. 8003378: 2200 movs r2, #0
  7077. 800337a: 671a str r2, [r3, #112] @ 0x70
  7078. hdma->DMAmuxRequestGenStatusMask = 0U;
  7079. 800337c: 687b ldr r3, [r7, #4]
  7080. 800337e: 2200 movs r2, #0
  7081. 8003380: 675a str r2, [r3, #116] @ 0x74
  7082. }
  7083. }
  7084. /* Initialize the error code */
  7085. hdma->ErrorCode = HAL_DMA_ERROR_NONE;
  7086. 8003382: 687b ldr r3, [r7, #4]
  7087. 8003384: 2200 movs r2, #0
  7088. 8003386: 655a str r2, [r3, #84] @ 0x54
  7089. /* Initialize the DMA state */
  7090. hdma->State = HAL_DMA_STATE_READY;
  7091. 8003388: 687b ldr r3, [r7, #4]
  7092. 800338a: 2201 movs r2, #1
  7093. 800338c: f883 2035 strb.w r2, [r3, #53] @ 0x35
  7094. return HAL_OK;
  7095. 8003390: 2300 movs r3, #0
  7096. }
  7097. 8003392: 4618 mov r0, r3
  7098. 8003394: 3718 adds r7, #24
  7099. 8003396: 46bd mov sp, r7
  7100. 8003398: bd80 pop {r7, pc}
  7101. 800339a: bf00 nop
  7102. 800339c: a7fdabf8 .word 0xa7fdabf8
  7103. 80033a0: cccccccd .word 0xcccccccd
  7104. 80033a4: 40020010 .word 0x40020010
  7105. 80033a8: 40020028 .word 0x40020028
  7106. 80033ac: 40020040 .word 0x40020040
  7107. 80033b0: 40020058 .word 0x40020058
  7108. 80033b4: 40020070 .word 0x40020070
  7109. 80033b8: 40020088 .word 0x40020088
  7110. 80033bc: 400200a0 .word 0x400200a0
  7111. 80033c0: 400200b8 .word 0x400200b8
  7112. 80033c4: 40020410 .word 0x40020410
  7113. 80033c8: 40020428 .word 0x40020428
  7114. 80033cc: 40020440 .word 0x40020440
  7115. 80033d0: 40020458 .word 0x40020458
  7116. 80033d4: 40020470 .word 0x40020470
  7117. 80033d8: 40020488 .word 0x40020488
  7118. 80033dc: 400204a0 .word 0x400204a0
  7119. 80033e0: 400204b8 .word 0x400204b8
  7120. 80033e4: 58025408 .word 0x58025408
  7121. 80033e8: 5802541c .word 0x5802541c
  7122. 80033ec: 58025430 .word 0x58025430
  7123. 80033f0: 58025444 .word 0x58025444
  7124. 80033f4: 58025458 .word 0x58025458
  7125. 80033f8: 5802546c .word 0x5802546c
  7126. 80033fc: 58025480 .word 0x58025480
  7127. 8003400: 58025494 .word 0x58025494
  7128. 08003404 <HAL_DMA_Abort>:
  7129. * and the Stream will be effectively disabled only after the transfer of
  7130. * this single data is finished.
  7131. * @retval HAL status
  7132. */
  7133. HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
  7134. {
  7135. 8003404: b580 push {r7, lr}
  7136. 8003406: b086 sub sp, #24
  7137. 8003408: af00 add r7, sp, #0
  7138. 800340a: 6078 str r0, [r7, #4]
  7139. /* calculate DMA base and stream number */
  7140. DMA_Base_Registers *regs_dma;
  7141. BDMA_Base_Registers *regs_bdma;
  7142. const __IO uint32_t *enableRegister;
  7143. uint32_t tickstart = HAL_GetTick();
  7144. 800340c: f7ff f928 bl 8002660 <HAL_GetTick>
  7145. 8003410: 6138 str r0, [r7, #16]
  7146. /* Check the DMA peripheral handle */
  7147. if(hdma == NULL)
  7148. 8003412: 687b ldr r3, [r7, #4]
  7149. 8003414: 2b00 cmp r3, #0
  7150. 8003416: d101 bne.n 800341c <HAL_DMA_Abort+0x18>
  7151. {
  7152. return HAL_ERROR;
  7153. 8003418: 2301 movs r3, #1
  7154. 800341a: e2dc b.n 80039d6 <HAL_DMA_Abort+0x5d2>
  7155. }
  7156. /* Check the DMA peripheral state */
  7157. if(hdma->State != HAL_DMA_STATE_BUSY)
  7158. 800341c: 687b ldr r3, [r7, #4]
  7159. 800341e: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  7160. 8003422: b2db uxtb r3, r3
  7161. 8003424: 2b02 cmp r3, #2
  7162. 8003426: d008 beq.n 800343a <HAL_DMA_Abort+0x36>
  7163. {
  7164. hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;
  7165. 8003428: 687b ldr r3, [r7, #4]
  7166. 800342a: 2280 movs r2, #128 @ 0x80
  7167. 800342c: 655a str r2, [r3, #84] @ 0x54
  7168. /* Process Unlocked */
  7169. __HAL_UNLOCK(hdma);
  7170. 800342e: 687b ldr r3, [r7, #4]
  7171. 8003430: 2200 movs r2, #0
  7172. 8003432: f883 2034 strb.w r2, [r3, #52] @ 0x34
  7173. return HAL_ERROR;
  7174. 8003436: 2301 movs r3, #1
  7175. 8003438: e2cd b.n 80039d6 <HAL_DMA_Abort+0x5d2>
  7176. }
  7177. else
  7178. {
  7179. /* Disable all the transfer interrupts */
  7180. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  7181. 800343a: 687b ldr r3, [r7, #4]
  7182. 800343c: 681b ldr r3, [r3, #0]
  7183. 800343e: 4a76 ldr r2, [pc, #472] @ (8003618 <HAL_DMA_Abort+0x214>)
  7184. 8003440: 4293 cmp r3, r2
  7185. 8003442: d04a beq.n 80034da <HAL_DMA_Abort+0xd6>
  7186. 8003444: 687b ldr r3, [r7, #4]
  7187. 8003446: 681b ldr r3, [r3, #0]
  7188. 8003448: 4a74 ldr r2, [pc, #464] @ (800361c <HAL_DMA_Abort+0x218>)
  7189. 800344a: 4293 cmp r3, r2
  7190. 800344c: d045 beq.n 80034da <HAL_DMA_Abort+0xd6>
  7191. 800344e: 687b ldr r3, [r7, #4]
  7192. 8003450: 681b ldr r3, [r3, #0]
  7193. 8003452: 4a73 ldr r2, [pc, #460] @ (8003620 <HAL_DMA_Abort+0x21c>)
  7194. 8003454: 4293 cmp r3, r2
  7195. 8003456: d040 beq.n 80034da <HAL_DMA_Abort+0xd6>
  7196. 8003458: 687b ldr r3, [r7, #4]
  7197. 800345a: 681b ldr r3, [r3, #0]
  7198. 800345c: 4a71 ldr r2, [pc, #452] @ (8003624 <HAL_DMA_Abort+0x220>)
  7199. 800345e: 4293 cmp r3, r2
  7200. 8003460: d03b beq.n 80034da <HAL_DMA_Abort+0xd6>
  7201. 8003462: 687b ldr r3, [r7, #4]
  7202. 8003464: 681b ldr r3, [r3, #0]
  7203. 8003466: 4a70 ldr r2, [pc, #448] @ (8003628 <HAL_DMA_Abort+0x224>)
  7204. 8003468: 4293 cmp r3, r2
  7205. 800346a: d036 beq.n 80034da <HAL_DMA_Abort+0xd6>
  7206. 800346c: 687b ldr r3, [r7, #4]
  7207. 800346e: 681b ldr r3, [r3, #0]
  7208. 8003470: 4a6e ldr r2, [pc, #440] @ (800362c <HAL_DMA_Abort+0x228>)
  7209. 8003472: 4293 cmp r3, r2
  7210. 8003474: d031 beq.n 80034da <HAL_DMA_Abort+0xd6>
  7211. 8003476: 687b ldr r3, [r7, #4]
  7212. 8003478: 681b ldr r3, [r3, #0]
  7213. 800347a: 4a6d ldr r2, [pc, #436] @ (8003630 <HAL_DMA_Abort+0x22c>)
  7214. 800347c: 4293 cmp r3, r2
  7215. 800347e: d02c beq.n 80034da <HAL_DMA_Abort+0xd6>
  7216. 8003480: 687b ldr r3, [r7, #4]
  7217. 8003482: 681b ldr r3, [r3, #0]
  7218. 8003484: 4a6b ldr r2, [pc, #428] @ (8003634 <HAL_DMA_Abort+0x230>)
  7219. 8003486: 4293 cmp r3, r2
  7220. 8003488: d027 beq.n 80034da <HAL_DMA_Abort+0xd6>
  7221. 800348a: 687b ldr r3, [r7, #4]
  7222. 800348c: 681b ldr r3, [r3, #0]
  7223. 800348e: 4a6a ldr r2, [pc, #424] @ (8003638 <HAL_DMA_Abort+0x234>)
  7224. 8003490: 4293 cmp r3, r2
  7225. 8003492: d022 beq.n 80034da <HAL_DMA_Abort+0xd6>
  7226. 8003494: 687b ldr r3, [r7, #4]
  7227. 8003496: 681b ldr r3, [r3, #0]
  7228. 8003498: 4a68 ldr r2, [pc, #416] @ (800363c <HAL_DMA_Abort+0x238>)
  7229. 800349a: 4293 cmp r3, r2
  7230. 800349c: d01d beq.n 80034da <HAL_DMA_Abort+0xd6>
  7231. 800349e: 687b ldr r3, [r7, #4]
  7232. 80034a0: 681b ldr r3, [r3, #0]
  7233. 80034a2: 4a67 ldr r2, [pc, #412] @ (8003640 <HAL_DMA_Abort+0x23c>)
  7234. 80034a4: 4293 cmp r3, r2
  7235. 80034a6: d018 beq.n 80034da <HAL_DMA_Abort+0xd6>
  7236. 80034a8: 687b ldr r3, [r7, #4]
  7237. 80034aa: 681b ldr r3, [r3, #0]
  7238. 80034ac: 4a65 ldr r2, [pc, #404] @ (8003644 <HAL_DMA_Abort+0x240>)
  7239. 80034ae: 4293 cmp r3, r2
  7240. 80034b0: d013 beq.n 80034da <HAL_DMA_Abort+0xd6>
  7241. 80034b2: 687b ldr r3, [r7, #4]
  7242. 80034b4: 681b ldr r3, [r3, #0]
  7243. 80034b6: 4a64 ldr r2, [pc, #400] @ (8003648 <HAL_DMA_Abort+0x244>)
  7244. 80034b8: 4293 cmp r3, r2
  7245. 80034ba: d00e beq.n 80034da <HAL_DMA_Abort+0xd6>
  7246. 80034bc: 687b ldr r3, [r7, #4]
  7247. 80034be: 681b ldr r3, [r3, #0]
  7248. 80034c0: 4a62 ldr r2, [pc, #392] @ (800364c <HAL_DMA_Abort+0x248>)
  7249. 80034c2: 4293 cmp r3, r2
  7250. 80034c4: d009 beq.n 80034da <HAL_DMA_Abort+0xd6>
  7251. 80034c6: 687b ldr r3, [r7, #4]
  7252. 80034c8: 681b ldr r3, [r3, #0]
  7253. 80034ca: 4a61 ldr r2, [pc, #388] @ (8003650 <HAL_DMA_Abort+0x24c>)
  7254. 80034cc: 4293 cmp r3, r2
  7255. 80034ce: d004 beq.n 80034da <HAL_DMA_Abort+0xd6>
  7256. 80034d0: 687b ldr r3, [r7, #4]
  7257. 80034d2: 681b ldr r3, [r3, #0]
  7258. 80034d4: 4a5f ldr r2, [pc, #380] @ (8003654 <HAL_DMA_Abort+0x250>)
  7259. 80034d6: 4293 cmp r3, r2
  7260. 80034d8: d101 bne.n 80034de <HAL_DMA_Abort+0xda>
  7261. 80034da: 2301 movs r3, #1
  7262. 80034dc: e000 b.n 80034e0 <HAL_DMA_Abort+0xdc>
  7263. 80034de: 2300 movs r3, #0
  7264. 80034e0: 2b00 cmp r3, #0
  7265. 80034e2: d013 beq.n 800350c <HAL_DMA_Abort+0x108>
  7266. {
  7267. /* Disable DMA All Interrupts */
  7268. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME | DMA_IT_HT);
  7269. 80034e4: 687b ldr r3, [r7, #4]
  7270. 80034e6: 681b ldr r3, [r3, #0]
  7271. 80034e8: 681a ldr r2, [r3, #0]
  7272. 80034ea: 687b ldr r3, [r7, #4]
  7273. 80034ec: 681b ldr r3, [r3, #0]
  7274. 80034ee: f022 021e bic.w r2, r2, #30
  7275. 80034f2: 601a str r2, [r3, #0]
  7276. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR &= ~(DMA_IT_FE);
  7277. 80034f4: 687b ldr r3, [r7, #4]
  7278. 80034f6: 681b ldr r3, [r3, #0]
  7279. 80034f8: 695a ldr r2, [r3, #20]
  7280. 80034fa: 687b ldr r3, [r7, #4]
  7281. 80034fc: 681b ldr r3, [r3, #0]
  7282. 80034fe: f022 0280 bic.w r2, r2, #128 @ 0x80
  7283. 8003502: 615a str r2, [r3, #20]
  7284. enableRegister = (__IO uint32_t *)(&(((DMA_Stream_TypeDef *)hdma->Instance)->CR));
  7285. 8003504: 687b ldr r3, [r7, #4]
  7286. 8003506: 681b ldr r3, [r3, #0]
  7287. 8003508: 617b str r3, [r7, #20]
  7288. 800350a: e00a b.n 8003522 <HAL_DMA_Abort+0x11e>
  7289. }
  7290. else /* BDMA channel */
  7291. {
  7292. /* Disable DMA All Interrupts */
  7293. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR &= ~(BDMA_CCR_TCIE | BDMA_CCR_HTIE | BDMA_CCR_TEIE);
  7294. 800350c: 687b ldr r3, [r7, #4]
  7295. 800350e: 681b ldr r3, [r3, #0]
  7296. 8003510: 681a ldr r2, [r3, #0]
  7297. 8003512: 687b ldr r3, [r7, #4]
  7298. 8003514: 681b ldr r3, [r3, #0]
  7299. 8003516: f022 020e bic.w r2, r2, #14
  7300. 800351a: 601a str r2, [r3, #0]
  7301. enableRegister = (__IO uint32_t *)(&(((BDMA_Channel_TypeDef *)hdma->Instance)->CCR));
  7302. 800351c: 687b ldr r3, [r7, #4]
  7303. 800351e: 681b ldr r3, [r3, #0]
  7304. 8003520: 617b str r3, [r7, #20]
  7305. }
  7306. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  7307. 8003522: 687b ldr r3, [r7, #4]
  7308. 8003524: 681b ldr r3, [r3, #0]
  7309. 8003526: 4a3c ldr r2, [pc, #240] @ (8003618 <HAL_DMA_Abort+0x214>)
  7310. 8003528: 4293 cmp r3, r2
  7311. 800352a: d072 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7312. 800352c: 687b ldr r3, [r7, #4]
  7313. 800352e: 681b ldr r3, [r3, #0]
  7314. 8003530: 4a3a ldr r2, [pc, #232] @ (800361c <HAL_DMA_Abort+0x218>)
  7315. 8003532: 4293 cmp r3, r2
  7316. 8003534: d06d beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7317. 8003536: 687b ldr r3, [r7, #4]
  7318. 8003538: 681b ldr r3, [r3, #0]
  7319. 800353a: 4a39 ldr r2, [pc, #228] @ (8003620 <HAL_DMA_Abort+0x21c>)
  7320. 800353c: 4293 cmp r3, r2
  7321. 800353e: d068 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7322. 8003540: 687b ldr r3, [r7, #4]
  7323. 8003542: 681b ldr r3, [r3, #0]
  7324. 8003544: 4a37 ldr r2, [pc, #220] @ (8003624 <HAL_DMA_Abort+0x220>)
  7325. 8003546: 4293 cmp r3, r2
  7326. 8003548: d063 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7327. 800354a: 687b ldr r3, [r7, #4]
  7328. 800354c: 681b ldr r3, [r3, #0]
  7329. 800354e: 4a36 ldr r2, [pc, #216] @ (8003628 <HAL_DMA_Abort+0x224>)
  7330. 8003550: 4293 cmp r3, r2
  7331. 8003552: d05e beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7332. 8003554: 687b ldr r3, [r7, #4]
  7333. 8003556: 681b ldr r3, [r3, #0]
  7334. 8003558: 4a34 ldr r2, [pc, #208] @ (800362c <HAL_DMA_Abort+0x228>)
  7335. 800355a: 4293 cmp r3, r2
  7336. 800355c: d059 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7337. 800355e: 687b ldr r3, [r7, #4]
  7338. 8003560: 681b ldr r3, [r3, #0]
  7339. 8003562: 4a33 ldr r2, [pc, #204] @ (8003630 <HAL_DMA_Abort+0x22c>)
  7340. 8003564: 4293 cmp r3, r2
  7341. 8003566: d054 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7342. 8003568: 687b ldr r3, [r7, #4]
  7343. 800356a: 681b ldr r3, [r3, #0]
  7344. 800356c: 4a31 ldr r2, [pc, #196] @ (8003634 <HAL_DMA_Abort+0x230>)
  7345. 800356e: 4293 cmp r3, r2
  7346. 8003570: d04f beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7347. 8003572: 687b ldr r3, [r7, #4]
  7348. 8003574: 681b ldr r3, [r3, #0]
  7349. 8003576: 4a30 ldr r2, [pc, #192] @ (8003638 <HAL_DMA_Abort+0x234>)
  7350. 8003578: 4293 cmp r3, r2
  7351. 800357a: d04a beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7352. 800357c: 687b ldr r3, [r7, #4]
  7353. 800357e: 681b ldr r3, [r3, #0]
  7354. 8003580: 4a2e ldr r2, [pc, #184] @ (800363c <HAL_DMA_Abort+0x238>)
  7355. 8003582: 4293 cmp r3, r2
  7356. 8003584: d045 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7357. 8003586: 687b ldr r3, [r7, #4]
  7358. 8003588: 681b ldr r3, [r3, #0]
  7359. 800358a: 4a2d ldr r2, [pc, #180] @ (8003640 <HAL_DMA_Abort+0x23c>)
  7360. 800358c: 4293 cmp r3, r2
  7361. 800358e: d040 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7362. 8003590: 687b ldr r3, [r7, #4]
  7363. 8003592: 681b ldr r3, [r3, #0]
  7364. 8003594: 4a2b ldr r2, [pc, #172] @ (8003644 <HAL_DMA_Abort+0x240>)
  7365. 8003596: 4293 cmp r3, r2
  7366. 8003598: d03b beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7367. 800359a: 687b ldr r3, [r7, #4]
  7368. 800359c: 681b ldr r3, [r3, #0]
  7369. 800359e: 4a2a ldr r2, [pc, #168] @ (8003648 <HAL_DMA_Abort+0x244>)
  7370. 80035a0: 4293 cmp r3, r2
  7371. 80035a2: d036 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7372. 80035a4: 687b ldr r3, [r7, #4]
  7373. 80035a6: 681b ldr r3, [r3, #0]
  7374. 80035a8: 4a28 ldr r2, [pc, #160] @ (800364c <HAL_DMA_Abort+0x248>)
  7375. 80035aa: 4293 cmp r3, r2
  7376. 80035ac: d031 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7377. 80035ae: 687b ldr r3, [r7, #4]
  7378. 80035b0: 681b ldr r3, [r3, #0]
  7379. 80035b2: 4a27 ldr r2, [pc, #156] @ (8003650 <HAL_DMA_Abort+0x24c>)
  7380. 80035b4: 4293 cmp r3, r2
  7381. 80035b6: d02c beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7382. 80035b8: 687b ldr r3, [r7, #4]
  7383. 80035ba: 681b ldr r3, [r3, #0]
  7384. 80035bc: 4a25 ldr r2, [pc, #148] @ (8003654 <HAL_DMA_Abort+0x250>)
  7385. 80035be: 4293 cmp r3, r2
  7386. 80035c0: d027 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7387. 80035c2: 687b ldr r3, [r7, #4]
  7388. 80035c4: 681b ldr r3, [r3, #0]
  7389. 80035c6: 4a24 ldr r2, [pc, #144] @ (8003658 <HAL_DMA_Abort+0x254>)
  7390. 80035c8: 4293 cmp r3, r2
  7391. 80035ca: d022 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7392. 80035cc: 687b ldr r3, [r7, #4]
  7393. 80035ce: 681b ldr r3, [r3, #0]
  7394. 80035d0: 4a22 ldr r2, [pc, #136] @ (800365c <HAL_DMA_Abort+0x258>)
  7395. 80035d2: 4293 cmp r3, r2
  7396. 80035d4: d01d beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7397. 80035d6: 687b ldr r3, [r7, #4]
  7398. 80035d8: 681b ldr r3, [r3, #0]
  7399. 80035da: 4a21 ldr r2, [pc, #132] @ (8003660 <HAL_DMA_Abort+0x25c>)
  7400. 80035dc: 4293 cmp r3, r2
  7401. 80035de: d018 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7402. 80035e0: 687b ldr r3, [r7, #4]
  7403. 80035e2: 681b ldr r3, [r3, #0]
  7404. 80035e4: 4a1f ldr r2, [pc, #124] @ (8003664 <HAL_DMA_Abort+0x260>)
  7405. 80035e6: 4293 cmp r3, r2
  7406. 80035e8: d013 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7407. 80035ea: 687b ldr r3, [r7, #4]
  7408. 80035ec: 681b ldr r3, [r3, #0]
  7409. 80035ee: 4a1e ldr r2, [pc, #120] @ (8003668 <HAL_DMA_Abort+0x264>)
  7410. 80035f0: 4293 cmp r3, r2
  7411. 80035f2: d00e beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7412. 80035f4: 687b ldr r3, [r7, #4]
  7413. 80035f6: 681b ldr r3, [r3, #0]
  7414. 80035f8: 4a1c ldr r2, [pc, #112] @ (800366c <HAL_DMA_Abort+0x268>)
  7415. 80035fa: 4293 cmp r3, r2
  7416. 80035fc: d009 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7417. 80035fe: 687b ldr r3, [r7, #4]
  7418. 8003600: 681b ldr r3, [r3, #0]
  7419. 8003602: 4a1b ldr r2, [pc, #108] @ (8003670 <HAL_DMA_Abort+0x26c>)
  7420. 8003604: 4293 cmp r3, r2
  7421. 8003606: d004 beq.n 8003612 <HAL_DMA_Abort+0x20e>
  7422. 8003608: 687b ldr r3, [r7, #4]
  7423. 800360a: 681b ldr r3, [r3, #0]
  7424. 800360c: 4a19 ldr r2, [pc, #100] @ (8003674 <HAL_DMA_Abort+0x270>)
  7425. 800360e: 4293 cmp r3, r2
  7426. 8003610: d132 bne.n 8003678 <HAL_DMA_Abort+0x274>
  7427. 8003612: 2301 movs r3, #1
  7428. 8003614: e031 b.n 800367a <HAL_DMA_Abort+0x276>
  7429. 8003616: bf00 nop
  7430. 8003618: 40020010 .word 0x40020010
  7431. 800361c: 40020028 .word 0x40020028
  7432. 8003620: 40020040 .word 0x40020040
  7433. 8003624: 40020058 .word 0x40020058
  7434. 8003628: 40020070 .word 0x40020070
  7435. 800362c: 40020088 .word 0x40020088
  7436. 8003630: 400200a0 .word 0x400200a0
  7437. 8003634: 400200b8 .word 0x400200b8
  7438. 8003638: 40020410 .word 0x40020410
  7439. 800363c: 40020428 .word 0x40020428
  7440. 8003640: 40020440 .word 0x40020440
  7441. 8003644: 40020458 .word 0x40020458
  7442. 8003648: 40020470 .word 0x40020470
  7443. 800364c: 40020488 .word 0x40020488
  7444. 8003650: 400204a0 .word 0x400204a0
  7445. 8003654: 400204b8 .word 0x400204b8
  7446. 8003658: 58025408 .word 0x58025408
  7447. 800365c: 5802541c .word 0x5802541c
  7448. 8003660: 58025430 .word 0x58025430
  7449. 8003664: 58025444 .word 0x58025444
  7450. 8003668: 58025458 .word 0x58025458
  7451. 800366c: 5802546c .word 0x5802546c
  7452. 8003670: 58025480 .word 0x58025480
  7453. 8003674: 58025494 .word 0x58025494
  7454. 8003678: 2300 movs r3, #0
  7455. 800367a: 2b00 cmp r3, #0
  7456. 800367c: d007 beq.n 800368e <HAL_DMA_Abort+0x28a>
  7457. {
  7458. /* disable the DMAMUX sync overrun IT */
  7459. hdma->DMAmuxChannel->CCR &= ~DMAMUX_CxCR_SOIE;
  7460. 800367e: 687b ldr r3, [r7, #4]
  7461. 8003680: 6e1b ldr r3, [r3, #96] @ 0x60
  7462. 8003682: 681a ldr r2, [r3, #0]
  7463. 8003684: 687b ldr r3, [r7, #4]
  7464. 8003686: 6e1b ldr r3, [r3, #96] @ 0x60
  7465. 8003688: f422 7280 bic.w r2, r2, #256 @ 0x100
  7466. 800368c: 601a str r2, [r3, #0]
  7467. }
  7468. /* Disable the stream */
  7469. __HAL_DMA_DISABLE(hdma);
  7470. 800368e: 687b ldr r3, [r7, #4]
  7471. 8003690: 681b ldr r3, [r3, #0]
  7472. 8003692: 4a6d ldr r2, [pc, #436] @ (8003848 <HAL_DMA_Abort+0x444>)
  7473. 8003694: 4293 cmp r3, r2
  7474. 8003696: d04a beq.n 800372e <HAL_DMA_Abort+0x32a>
  7475. 8003698: 687b ldr r3, [r7, #4]
  7476. 800369a: 681b ldr r3, [r3, #0]
  7477. 800369c: 4a6b ldr r2, [pc, #428] @ (800384c <HAL_DMA_Abort+0x448>)
  7478. 800369e: 4293 cmp r3, r2
  7479. 80036a0: d045 beq.n 800372e <HAL_DMA_Abort+0x32a>
  7480. 80036a2: 687b ldr r3, [r7, #4]
  7481. 80036a4: 681b ldr r3, [r3, #0]
  7482. 80036a6: 4a6a ldr r2, [pc, #424] @ (8003850 <HAL_DMA_Abort+0x44c>)
  7483. 80036a8: 4293 cmp r3, r2
  7484. 80036aa: d040 beq.n 800372e <HAL_DMA_Abort+0x32a>
  7485. 80036ac: 687b ldr r3, [r7, #4]
  7486. 80036ae: 681b ldr r3, [r3, #0]
  7487. 80036b0: 4a68 ldr r2, [pc, #416] @ (8003854 <HAL_DMA_Abort+0x450>)
  7488. 80036b2: 4293 cmp r3, r2
  7489. 80036b4: d03b beq.n 800372e <HAL_DMA_Abort+0x32a>
  7490. 80036b6: 687b ldr r3, [r7, #4]
  7491. 80036b8: 681b ldr r3, [r3, #0]
  7492. 80036ba: 4a67 ldr r2, [pc, #412] @ (8003858 <HAL_DMA_Abort+0x454>)
  7493. 80036bc: 4293 cmp r3, r2
  7494. 80036be: d036 beq.n 800372e <HAL_DMA_Abort+0x32a>
  7495. 80036c0: 687b ldr r3, [r7, #4]
  7496. 80036c2: 681b ldr r3, [r3, #0]
  7497. 80036c4: 4a65 ldr r2, [pc, #404] @ (800385c <HAL_DMA_Abort+0x458>)
  7498. 80036c6: 4293 cmp r3, r2
  7499. 80036c8: d031 beq.n 800372e <HAL_DMA_Abort+0x32a>
  7500. 80036ca: 687b ldr r3, [r7, #4]
  7501. 80036cc: 681b ldr r3, [r3, #0]
  7502. 80036ce: 4a64 ldr r2, [pc, #400] @ (8003860 <HAL_DMA_Abort+0x45c>)
  7503. 80036d0: 4293 cmp r3, r2
  7504. 80036d2: d02c beq.n 800372e <HAL_DMA_Abort+0x32a>
  7505. 80036d4: 687b ldr r3, [r7, #4]
  7506. 80036d6: 681b ldr r3, [r3, #0]
  7507. 80036d8: 4a62 ldr r2, [pc, #392] @ (8003864 <HAL_DMA_Abort+0x460>)
  7508. 80036da: 4293 cmp r3, r2
  7509. 80036dc: d027 beq.n 800372e <HAL_DMA_Abort+0x32a>
  7510. 80036de: 687b ldr r3, [r7, #4]
  7511. 80036e0: 681b ldr r3, [r3, #0]
  7512. 80036e2: 4a61 ldr r2, [pc, #388] @ (8003868 <HAL_DMA_Abort+0x464>)
  7513. 80036e4: 4293 cmp r3, r2
  7514. 80036e6: d022 beq.n 800372e <HAL_DMA_Abort+0x32a>
  7515. 80036e8: 687b ldr r3, [r7, #4]
  7516. 80036ea: 681b ldr r3, [r3, #0]
  7517. 80036ec: 4a5f ldr r2, [pc, #380] @ (800386c <HAL_DMA_Abort+0x468>)
  7518. 80036ee: 4293 cmp r3, r2
  7519. 80036f0: d01d beq.n 800372e <HAL_DMA_Abort+0x32a>
  7520. 80036f2: 687b ldr r3, [r7, #4]
  7521. 80036f4: 681b ldr r3, [r3, #0]
  7522. 80036f6: 4a5e ldr r2, [pc, #376] @ (8003870 <HAL_DMA_Abort+0x46c>)
  7523. 80036f8: 4293 cmp r3, r2
  7524. 80036fa: d018 beq.n 800372e <HAL_DMA_Abort+0x32a>
  7525. 80036fc: 687b ldr r3, [r7, #4]
  7526. 80036fe: 681b ldr r3, [r3, #0]
  7527. 8003700: 4a5c ldr r2, [pc, #368] @ (8003874 <HAL_DMA_Abort+0x470>)
  7528. 8003702: 4293 cmp r3, r2
  7529. 8003704: d013 beq.n 800372e <HAL_DMA_Abort+0x32a>
  7530. 8003706: 687b ldr r3, [r7, #4]
  7531. 8003708: 681b ldr r3, [r3, #0]
  7532. 800370a: 4a5b ldr r2, [pc, #364] @ (8003878 <HAL_DMA_Abort+0x474>)
  7533. 800370c: 4293 cmp r3, r2
  7534. 800370e: d00e beq.n 800372e <HAL_DMA_Abort+0x32a>
  7535. 8003710: 687b ldr r3, [r7, #4]
  7536. 8003712: 681b ldr r3, [r3, #0]
  7537. 8003714: 4a59 ldr r2, [pc, #356] @ (800387c <HAL_DMA_Abort+0x478>)
  7538. 8003716: 4293 cmp r3, r2
  7539. 8003718: d009 beq.n 800372e <HAL_DMA_Abort+0x32a>
  7540. 800371a: 687b ldr r3, [r7, #4]
  7541. 800371c: 681b ldr r3, [r3, #0]
  7542. 800371e: 4a58 ldr r2, [pc, #352] @ (8003880 <HAL_DMA_Abort+0x47c>)
  7543. 8003720: 4293 cmp r3, r2
  7544. 8003722: d004 beq.n 800372e <HAL_DMA_Abort+0x32a>
  7545. 8003724: 687b ldr r3, [r7, #4]
  7546. 8003726: 681b ldr r3, [r3, #0]
  7547. 8003728: 4a56 ldr r2, [pc, #344] @ (8003884 <HAL_DMA_Abort+0x480>)
  7548. 800372a: 4293 cmp r3, r2
  7549. 800372c: d108 bne.n 8003740 <HAL_DMA_Abort+0x33c>
  7550. 800372e: 687b ldr r3, [r7, #4]
  7551. 8003730: 681b ldr r3, [r3, #0]
  7552. 8003732: 681a ldr r2, [r3, #0]
  7553. 8003734: 687b ldr r3, [r7, #4]
  7554. 8003736: 681b ldr r3, [r3, #0]
  7555. 8003738: f022 0201 bic.w r2, r2, #1
  7556. 800373c: 601a str r2, [r3, #0]
  7557. 800373e: e007 b.n 8003750 <HAL_DMA_Abort+0x34c>
  7558. 8003740: 687b ldr r3, [r7, #4]
  7559. 8003742: 681b ldr r3, [r3, #0]
  7560. 8003744: 681a ldr r2, [r3, #0]
  7561. 8003746: 687b ldr r3, [r7, #4]
  7562. 8003748: 681b ldr r3, [r3, #0]
  7563. 800374a: f022 0201 bic.w r2, r2, #1
  7564. 800374e: 601a str r2, [r3, #0]
  7565. /* Check if the DMA Stream is effectively disabled */
  7566. while(((*enableRegister) & DMA_SxCR_EN) != 0U)
  7567. 8003750: e013 b.n 800377a <HAL_DMA_Abort+0x376>
  7568. {
  7569. /* Check for the Timeout */
  7570. if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT)
  7571. 8003752: f7fe ff85 bl 8002660 <HAL_GetTick>
  7572. 8003756: 4602 mov r2, r0
  7573. 8003758: 693b ldr r3, [r7, #16]
  7574. 800375a: 1ad3 subs r3, r2, r3
  7575. 800375c: 2b05 cmp r3, #5
  7576. 800375e: d90c bls.n 800377a <HAL_DMA_Abort+0x376>
  7577. {
  7578. /* Update error code */
  7579. hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT;
  7580. 8003760: 687b ldr r3, [r7, #4]
  7581. 8003762: 2220 movs r2, #32
  7582. 8003764: 655a str r2, [r3, #84] @ 0x54
  7583. /* Change the DMA state */
  7584. hdma->State = HAL_DMA_STATE_ERROR;
  7585. 8003766: 687b ldr r3, [r7, #4]
  7586. 8003768: 2203 movs r2, #3
  7587. 800376a: f883 2035 strb.w r2, [r3, #53] @ 0x35
  7588. /* Process Unlocked */
  7589. __HAL_UNLOCK(hdma);
  7590. 800376e: 687b ldr r3, [r7, #4]
  7591. 8003770: 2200 movs r2, #0
  7592. 8003772: f883 2034 strb.w r2, [r3, #52] @ 0x34
  7593. return HAL_ERROR;
  7594. 8003776: 2301 movs r3, #1
  7595. 8003778: e12d b.n 80039d6 <HAL_DMA_Abort+0x5d2>
  7596. while(((*enableRegister) & DMA_SxCR_EN) != 0U)
  7597. 800377a: 697b ldr r3, [r7, #20]
  7598. 800377c: 681b ldr r3, [r3, #0]
  7599. 800377e: f003 0301 and.w r3, r3, #1
  7600. 8003782: 2b00 cmp r3, #0
  7601. 8003784: d1e5 bne.n 8003752 <HAL_DMA_Abort+0x34e>
  7602. }
  7603. }
  7604. /* Clear all interrupt flags at correct offset within the register */
  7605. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  7606. 8003786: 687b ldr r3, [r7, #4]
  7607. 8003788: 681b ldr r3, [r3, #0]
  7608. 800378a: 4a2f ldr r2, [pc, #188] @ (8003848 <HAL_DMA_Abort+0x444>)
  7609. 800378c: 4293 cmp r3, r2
  7610. 800378e: d04a beq.n 8003826 <HAL_DMA_Abort+0x422>
  7611. 8003790: 687b ldr r3, [r7, #4]
  7612. 8003792: 681b ldr r3, [r3, #0]
  7613. 8003794: 4a2d ldr r2, [pc, #180] @ (800384c <HAL_DMA_Abort+0x448>)
  7614. 8003796: 4293 cmp r3, r2
  7615. 8003798: d045 beq.n 8003826 <HAL_DMA_Abort+0x422>
  7616. 800379a: 687b ldr r3, [r7, #4]
  7617. 800379c: 681b ldr r3, [r3, #0]
  7618. 800379e: 4a2c ldr r2, [pc, #176] @ (8003850 <HAL_DMA_Abort+0x44c>)
  7619. 80037a0: 4293 cmp r3, r2
  7620. 80037a2: d040 beq.n 8003826 <HAL_DMA_Abort+0x422>
  7621. 80037a4: 687b ldr r3, [r7, #4]
  7622. 80037a6: 681b ldr r3, [r3, #0]
  7623. 80037a8: 4a2a ldr r2, [pc, #168] @ (8003854 <HAL_DMA_Abort+0x450>)
  7624. 80037aa: 4293 cmp r3, r2
  7625. 80037ac: d03b beq.n 8003826 <HAL_DMA_Abort+0x422>
  7626. 80037ae: 687b ldr r3, [r7, #4]
  7627. 80037b0: 681b ldr r3, [r3, #0]
  7628. 80037b2: 4a29 ldr r2, [pc, #164] @ (8003858 <HAL_DMA_Abort+0x454>)
  7629. 80037b4: 4293 cmp r3, r2
  7630. 80037b6: d036 beq.n 8003826 <HAL_DMA_Abort+0x422>
  7631. 80037b8: 687b ldr r3, [r7, #4]
  7632. 80037ba: 681b ldr r3, [r3, #0]
  7633. 80037bc: 4a27 ldr r2, [pc, #156] @ (800385c <HAL_DMA_Abort+0x458>)
  7634. 80037be: 4293 cmp r3, r2
  7635. 80037c0: d031 beq.n 8003826 <HAL_DMA_Abort+0x422>
  7636. 80037c2: 687b ldr r3, [r7, #4]
  7637. 80037c4: 681b ldr r3, [r3, #0]
  7638. 80037c6: 4a26 ldr r2, [pc, #152] @ (8003860 <HAL_DMA_Abort+0x45c>)
  7639. 80037c8: 4293 cmp r3, r2
  7640. 80037ca: d02c beq.n 8003826 <HAL_DMA_Abort+0x422>
  7641. 80037cc: 687b ldr r3, [r7, #4]
  7642. 80037ce: 681b ldr r3, [r3, #0]
  7643. 80037d0: 4a24 ldr r2, [pc, #144] @ (8003864 <HAL_DMA_Abort+0x460>)
  7644. 80037d2: 4293 cmp r3, r2
  7645. 80037d4: d027 beq.n 8003826 <HAL_DMA_Abort+0x422>
  7646. 80037d6: 687b ldr r3, [r7, #4]
  7647. 80037d8: 681b ldr r3, [r3, #0]
  7648. 80037da: 4a23 ldr r2, [pc, #140] @ (8003868 <HAL_DMA_Abort+0x464>)
  7649. 80037dc: 4293 cmp r3, r2
  7650. 80037de: d022 beq.n 8003826 <HAL_DMA_Abort+0x422>
  7651. 80037e0: 687b ldr r3, [r7, #4]
  7652. 80037e2: 681b ldr r3, [r3, #0]
  7653. 80037e4: 4a21 ldr r2, [pc, #132] @ (800386c <HAL_DMA_Abort+0x468>)
  7654. 80037e6: 4293 cmp r3, r2
  7655. 80037e8: d01d beq.n 8003826 <HAL_DMA_Abort+0x422>
  7656. 80037ea: 687b ldr r3, [r7, #4]
  7657. 80037ec: 681b ldr r3, [r3, #0]
  7658. 80037ee: 4a20 ldr r2, [pc, #128] @ (8003870 <HAL_DMA_Abort+0x46c>)
  7659. 80037f0: 4293 cmp r3, r2
  7660. 80037f2: d018 beq.n 8003826 <HAL_DMA_Abort+0x422>
  7661. 80037f4: 687b ldr r3, [r7, #4]
  7662. 80037f6: 681b ldr r3, [r3, #0]
  7663. 80037f8: 4a1e ldr r2, [pc, #120] @ (8003874 <HAL_DMA_Abort+0x470>)
  7664. 80037fa: 4293 cmp r3, r2
  7665. 80037fc: d013 beq.n 8003826 <HAL_DMA_Abort+0x422>
  7666. 80037fe: 687b ldr r3, [r7, #4]
  7667. 8003800: 681b ldr r3, [r3, #0]
  7668. 8003802: 4a1d ldr r2, [pc, #116] @ (8003878 <HAL_DMA_Abort+0x474>)
  7669. 8003804: 4293 cmp r3, r2
  7670. 8003806: d00e beq.n 8003826 <HAL_DMA_Abort+0x422>
  7671. 8003808: 687b ldr r3, [r7, #4]
  7672. 800380a: 681b ldr r3, [r3, #0]
  7673. 800380c: 4a1b ldr r2, [pc, #108] @ (800387c <HAL_DMA_Abort+0x478>)
  7674. 800380e: 4293 cmp r3, r2
  7675. 8003810: d009 beq.n 8003826 <HAL_DMA_Abort+0x422>
  7676. 8003812: 687b ldr r3, [r7, #4]
  7677. 8003814: 681b ldr r3, [r3, #0]
  7678. 8003816: 4a1a ldr r2, [pc, #104] @ (8003880 <HAL_DMA_Abort+0x47c>)
  7679. 8003818: 4293 cmp r3, r2
  7680. 800381a: d004 beq.n 8003826 <HAL_DMA_Abort+0x422>
  7681. 800381c: 687b ldr r3, [r7, #4]
  7682. 800381e: 681b ldr r3, [r3, #0]
  7683. 8003820: 4a18 ldr r2, [pc, #96] @ (8003884 <HAL_DMA_Abort+0x480>)
  7684. 8003822: 4293 cmp r3, r2
  7685. 8003824: d101 bne.n 800382a <HAL_DMA_Abort+0x426>
  7686. 8003826: 2301 movs r3, #1
  7687. 8003828: e000 b.n 800382c <HAL_DMA_Abort+0x428>
  7688. 800382a: 2300 movs r3, #0
  7689. 800382c: 2b00 cmp r3, #0
  7690. 800382e: d02b beq.n 8003888 <HAL_DMA_Abort+0x484>
  7691. {
  7692. regs_dma = (DMA_Base_Registers *)hdma->StreamBaseAddress;
  7693. 8003830: 687b ldr r3, [r7, #4]
  7694. 8003832: 6d9b ldr r3, [r3, #88] @ 0x58
  7695. 8003834: 60bb str r3, [r7, #8]
  7696. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  7697. 8003836: 687b ldr r3, [r7, #4]
  7698. 8003838: 6ddb ldr r3, [r3, #92] @ 0x5c
  7699. 800383a: f003 031f and.w r3, r3, #31
  7700. 800383e: 223f movs r2, #63 @ 0x3f
  7701. 8003840: 409a lsls r2, r3
  7702. 8003842: 68bb ldr r3, [r7, #8]
  7703. 8003844: 609a str r2, [r3, #8]
  7704. 8003846: e02a b.n 800389e <HAL_DMA_Abort+0x49a>
  7705. 8003848: 40020010 .word 0x40020010
  7706. 800384c: 40020028 .word 0x40020028
  7707. 8003850: 40020040 .word 0x40020040
  7708. 8003854: 40020058 .word 0x40020058
  7709. 8003858: 40020070 .word 0x40020070
  7710. 800385c: 40020088 .word 0x40020088
  7711. 8003860: 400200a0 .word 0x400200a0
  7712. 8003864: 400200b8 .word 0x400200b8
  7713. 8003868: 40020410 .word 0x40020410
  7714. 800386c: 40020428 .word 0x40020428
  7715. 8003870: 40020440 .word 0x40020440
  7716. 8003874: 40020458 .word 0x40020458
  7717. 8003878: 40020470 .word 0x40020470
  7718. 800387c: 40020488 .word 0x40020488
  7719. 8003880: 400204a0 .word 0x400204a0
  7720. 8003884: 400204b8 .word 0x400204b8
  7721. }
  7722. else /* BDMA channel */
  7723. {
  7724. regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  7725. 8003888: 687b ldr r3, [r7, #4]
  7726. 800388a: 6d9b ldr r3, [r3, #88] @ 0x58
  7727. 800388c: 60fb str r3, [r7, #12]
  7728. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  7729. 800388e: 687b ldr r3, [r7, #4]
  7730. 8003890: 6ddb ldr r3, [r3, #92] @ 0x5c
  7731. 8003892: f003 031f and.w r3, r3, #31
  7732. 8003896: 2201 movs r2, #1
  7733. 8003898: 409a lsls r2, r3
  7734. 800389a: 68fb ldr r3, [r7, #12]
  7735. 800389c: 605a str r2, [r3, #4]
  7736. }
  7737. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  7738. 800389e: 687b ldr r3, [r7, #4]
  7739. 80038a0: 681b ldr r3, [r3, #0]
  7740. 80038a2: 4a4f ldr r2, [pc, #316] @ (80039e0 <HAL_DMA_Abort+0x5dc>)
  7741. 80038a4: 4293 cmp r3, r2
  7742. 80038a6: d072 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7743. 80038a8: 687b ldr r3, [r7, #4]
  7744. 80038aa: 681b ldr r3, [r3, #0]
  7745. 80038ac: 4a4d ldr r2, [pc, #308] @ (80039e4 <HAL_DMA_Abort+0x5e0>)
  7746. 80038ae: 4293 cmp r3, r2
  7747. 80038b0: d06d beq.n 800398e <HAL_DMA_Abort+0x58a>
  7748. 80038b2: 687b ldr r3, [r7, #4]
  7749. 80038b4: 681b ldr r3, [r3, #0]
  7750. 80038b6: 4a4c ldr r2, [pc, #304] @ (80039e8 <HAL_DMA_Abort+0x5e4>)
  7751. 80038b8: 4293 cmp r3, r2
  7752. 80038ba: d068 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7753. 80038bc: 687b ldr r3, [r7, #4]
  7754. 80038be: 681b ldr r3, [r3, #0]
  7755. 80038c0: 4a4a ldr r2, [pc, #296] @ (80039ec <HAL_DMA_Abort+0x5e8>)
  7756. 80038c2: 4293 cmp r3, r2
  7757. 80038c4: d063 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7758. 80038c6: 687b ldr r3, [r7, #4]
  7759. 80038c8: 681b ldr r3, [r3, #0]
  7760. 80038ca: 4a49 ldr r2, [pc, #292] @ (80039f0 <HAL_DMA_Abort+0x5ec>)
  7761. 80038cc: 4293 cmp r3, r2
  7762. 80038ce: d05e beq.n 800398e <HAL_DMA_Abort+0x58a>
  7763. 80038d0: 687b ldr r3, [r7, #4]
  7764. 80038d2: 681b ldr r3, [r3, #0]
  7765. 80038d4: 4a47 ldr r2, [pc, #284] @ (80039f4 <HAL_DMA_Abort+0x5f0>)
  7766. 80038d6: 4293 cmp r3, r2
  7767. 80038d8: d059 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7768. 80038da: 687b ldr r3, [r7, #4]
  7769. 80038dc: 681b ldr r3, [r3, #0]
  7770. 80038de: 4a46 ldr r2, [pc, #280] @ (80039f8 <HAL_DMA_Abort+0x5f4>)
  7771. 80038e0: 4293 cmp r3, r2
  7772. 80038e2: d054 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7773. 80038e4: 687b ldr r3, [r7, #4]
  7774. 80038e6: 681b ldr r3, [r3, #0]
  7775. 80038e8: 4a44 ldr r2, [pc, #272] @ (80039fc <HAL_DMA_Abort+0x5f8>)
  7776. 80038ea: 4293 cmp r3, r2
  7777. 80038ec: d04f beq.n 800398e <HAL_DMA_Abort+0x58a>
  7778. 80038ee: 687b ldr r3, [r7, #4]
  7779. 80038f0: 681b ldr r3, [r3, #0]
  7780. 80038f2: 4a43 ldr r2, [pc, #268] @ (8003a00 <HAL_DMA_Abort+0x5fc>)
  7781. 80038f4: 4293 cmp r3, r2
  7782. 80038f6: d04a beq.n 800398e <HAL_DMA_Abort+0x58a>
  7783. 80038f8: 687b ldr r3, [r7, #4]
  7784. 80038fa: 681b ldr r3, [r3, #0]
  7785. 80038fc: 4a41 ldr r2, [pc, #260] @ (8003a04 <HAL_DMA_Abort+0x600>)
  7786. 80038fe: 4293 cmp r3, r2
  7787. 8003900: d045 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7788. 8003902: 687b ldr r3, [r7, #4]
  7789. 8003904: 681b ldr r3, [r3, #0]
  7790. 8003906: 4a40 ldr r2, [pc, #256] @ (8003a08 <HAL_DMA_Abort+0x604>)
  7791. 8003908: 4293 cmp r3, r2
  7792. 800390a: d040 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7793. 800390c: 687b ldr r3, [r7, #4]
  7794. 800390e: 681b ldr r3, [r3, #0]
  7795. 8003910: 4a3e ldr r2, [pc, #248] @ (8003a0c <HAL_DMA_Abort+0x608>)
  7796. 8003912: 4293 cmp r3, r2
  7797. 8003914: d03b beq.n 800398e <HAL_DMA_Abort+0x58a>
  7798. 8003916: 687b ldr r3, [r7, #4]
  7799. 8003918: 681b ldr r3, [r3, #0]
  7800. 800391a: 4a3d ldr r2, [pc, #244] @ (8003a10 <HAL_DMA_Abort+0x60c>)
  7801. 800391c: 4293 cmp r3, r2
  7802. 800391e: d036 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7803. 8003920: 687b ldr r3, [r7, #4]
  7804. 8003922: 681b ldr r3, [r3, #0]
  7805. 8003924: 4a3b ldr r2, [pc, #236] @ (8003a14 <HAL_DMA_Abort+0x610>)
  7806. 8003926: 4293 cmp r3, r2
  7807. 8003928: d031 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7808. 800392a: 687b ldr r3, [r7, #4]
  7809. 800392c: 681b ldr r3, [r3, #0]
  7810. 800392e: 4a3a ldr r2, [pc, #232] @ (8003a18 <HAL_DMA_Abort+0x614>)
  7811. 8003930: 4293 cmp r3, r2
  7812. 8003932: d02c beq.n 800398e <HAL_DMA_Abort+0x58a>
  7813. 8003934: 687b ldr r3, [r7, #4]
  7814. 8003936: 681b ldr r3, [r3, #0]
  7815. 8003938: 4a38 ldr r2, [pc, #224] @ (8003a1c <HAL_DMA_Abort+0x618>)
  7816. 800393a: 4293 cmp r3, r2
  7817. 800393c: d027 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7818. 800393e: 687b ldr r3, [r7, #4]
  7819. 8003940: 681b ldr r3, [r3, #0]
  7820. 8003942: 4a37 ldr r2, [pc, #220] @ (8003a20 <HAL_DMA_Abort+0x61c>)
  7821. 8003944: 4293 cmp r3, r2
  7822. 8003946: d022 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7823. 8003948: 687b ldr r3, [r7, #4]
  7824. 800394a: 681b ldr r3, [r3, #0]
  7825. 800394c: 4a35 ldr r2, [pc, #212] @ (8003a24 <HAL_DMA_Abort+0x620>)
  7826. 800394e: 4293 cmp r3, r2
  7827. 8003950: d01d beq.n 800398e <HAL_DMA_Abort+0x58a>
  7828. 8003952: 687b ldr r3, [r7, #4]
  7829. 8003954: 681b ldr r3, [r3, #0]
  7830. 8003956: 4a34 ldr r2, [pc, #208] @ (8003a28 <HAL_DMA_Abort+0x624>)
  7831. 8003958: 4293 cmp r3, r2
  7832. 800395a: d018 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7833. 800395c: 687b ldr r3, [r7, #4]
  7834. 800395e: 681b ldr r3, [r3, #0]
  7835. 8003960: 4a32 ldr r2, [pc, #200] @ (8003a2c <HAL_DMA_Abort+0x628>)
  7836. 8003962: 4293 cmp r3, r2
  7837. 8003964: d013 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7838. 8003966: 687b ldr r3, [r7, #4]
  7839. 8003968: 681b ldr r3, [r3, #0]
  7840. 800396a: 4a31 ldr r2, [pc, #196] @ (8003a30 <HAL_DMA_Abort+0x62c>)
  7841. 800396c: 4293 cmp r3, r2
  7842. 800396e: d00e beq.n 800398e <HAL_DMA_Abort+0x58a>
  7843. 8003970: 687b ldr r3, [r7, #4]
  7844. 8003972: 681b ldr r3, [r3, #0]
  7845. 8003974: 4a2f ldr r2, [pc, #188] @ (8003a34 <HAL_DMA_Abort+0x630>)
  7846. 8003976: 4293 cmp r3, r2
  7847. 8003978: d009 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7848. 800397a: 687b ldr r3, [r7, #4]
  7849. 800397c: 681b ldr r3, [r3, #0]
  7850. 800397e: 4a2e ldr r2, [pc, #184] @ (8003a38 <HAL_DMA_Abort+0x634>)
  7851. 8003980: 4293 cmp r3, r2
  7852. 8003982: d004 beq.n 800398e <HAL_DMA_Abort+0x58a>
  7853. 8003984: 687b ldr r3, [r7, #4]
  7854. 8003986: 681b ldr r3, [r3, #0]
  7855. 8003988: 4a2c ldr r2, [pc, #176] @ (8003a3c <HAL_DMA_Abort+0x638>)
  7856. 800398a: 4293 cmp r3, r2
  7857. 800398c: d101 bne.n 8003992 <HAL_DMA_Abort+0x58e>
  7858. 800398e: 2301 movs r3, #1
  7859. 8003990: e000 b.n 8003994 <HAL_DMA_Abort+0x590>
  7860. 8003992: 2300 movs r3, #0
  7861. 8003994: 2b00 cmp r3, #0
  7862. 8003996: d015 beq.n 80039c4 <HAL_DMA_Abort+0x5c0>
  7863. {
  7864. /* Clear the DMAMUX synchro overrun flag */
  7865. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  7866. 8003998: 687b ldr r3, [r7, #4]
  7867. 800399a: 6e5b ldr r3, [r3, #100] @ 0x64
  7868. 800399c: 687a ldr r2, [r7, #4]
  7869. 800399e: 6e92 ldr r2, [r2, #104] @ 0x68
  7870. 80039a0: 605a str r2, [r3, #4]
  7871. if(hdma->DMAmuxRequestGen != 0U)
  7872. 80039a2: 687b ldr r3, [r7, #4]
  7873. 80039a4: 6edb ldr r3, [r3, #108] @ 0x6c
  7874. 80039a6: 2b00 cmp r3, #0
  7875. 80039a8: d00c beq.n 80039c4 <HAL_DMA_Abort+0x5c0>
  7876. {
  7877. /* if using DMAMUX request generator, disable the DMAMUX request generator overrun IT */
  7878. /* disable the request gen overrun IT */
  7879. hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_OIE;
  7880. 80039aa: 687b ldr r3, [r7, #4]
  7881. 80039ac: 6edb ldr r3, [r3, #108] @ 0x6c
  7882. 80039ae: 681a ldr r2, [r3, #0]
  7883. 80039b0: 687b ldr r3, [r7, #4]
  7884. 80039b2: 6edb ldr r3, [r3, #108] @ 0x6c
  7885. 80039b4: f422 7280 bic.w r2, r2, #256 @ 0x100
  7886. 80039b8: 601a str r2, [r3, #0]
  7887. /* Clear the DMAMUX request generator overrun flag */
  7888. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  7889. 80039ba: 687b ldr r3, [r7, #4]
  7890. 80039bc: 6f1b ldr r3, [r3, #112] @ 0x70
  7891. 80039be: 687a ldr r2, [r7, #4]
  7892. 80039c0: 6f52 ldr r2, [r2, #116] @ 0x74
  7893. 80039c2: 605a str r2, [r3, #4]
  7894. }
  7895. }
  7896. /* Change the DMA state */
  7897. hdma->State = HAL_DMA_STATE_READY;
  7898. 80039c4: 687b ldr r3, [r7, #4]
  7899. 80039c6: 2201 movs r2, #1
  7900. 80039c8: f883 2035 strb.w r2, [r3, #53] @ 0x35
  7901. /* Process Unlocked */
  7902. __HAL_UNLOCK(hdma);
  7903. 80039cc: 687b ldr r3, [r7, #4]
  7904. 80039ce: 2200 movs r2, #0
  7905. 80039d0: f883 2034 strb.w r2, [r3, #52] @ 0x34
  7906. }
  7907. return HAL_OK;
  7908. 80039d4: 2300 movs r3, #0
  7909. }
  7910. 80039d6: 4618 mov r0, r3
  7911. 80039d8: 3718 adds r7, #24
  7912. 80039da: 46bd mov sp, r7
  7913. 80039dc: bd80 pop {r7, pc}
  7914. 80039de: bf00 nop
  7915. 80039e0: 40020010 .word 0x40020010
  7916. 80039e4: 40020028 .word 0x40020028
  7917. 80039e8: 40020040 .word 0x40020040
  7918. 80039ec: 40020058 .word 0x40020058
  7919. 80039f0: 40020070 .word 0x40020070
  7920. 80039f4: 40020088 .word 0x40020088
  7921. 80039f8: 400200a0 .word 0x400200a0
  7922. 80039fc: 400200b8 .word 0x400200b8
  7923. 8003a00: 40020410 .word 0x40020410
  7924. 8003a04: 40020428 .word 0x40020428
  7925. 8003a08: 40020440 .word 0x40020440
  7926. 8003a0c: 40020458 .word 0x40020458
  7927. 8003a10: 40020470 .word 0x40020470
  7928. 8003a14: 40020488 .word 0x40020488
  7929. 8003a18: 400204a0 .word 0x400204a0
  7930. 8003a1c: 400204b8 .word 0x400204b8
  7931. 8003a20: 58025408 .word 0x58025408
  7932. 8003a24: 5802541c .word 0x5802541c
  7933. 8003a28: 58025430 .word 0x58025430
  7934. 8003a2c: 58025444 .word 0x58025444
  7935. 8003a30: 58025458 .word 0x58025458
  7936. 8003a34: 5802546c .word 0x5802546c
  7937. 8003a38: 58025480 .word 0x58025480
  7938. 8003a3c: 58025494 .word 0x58025494
  7939. 08003a40 <HAL_DMA_Abort_IT>:
  7940. * @param hdma : pointer to a DMA_HandleTypeDef structure that contains
  7941. * the configuration information for the specified DMA Stream.
  7942. * @retval HAL status
  7943. */
  7944. HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
  7945. {
  7946. 8003a40: b580 push {r7, lr}
  7947. 8003a42: b084 sub sp, #16
  7948. 8003a44: af00 add r7, sp, #0
  7949. 8003a46: 6078 str r0, [r7, #4]
  7950. BDMA_Base_Registers *regs_bdma;
  7951. /* Check the DMA peripheral handle */
  7952. if(hdma == NULL)
  7953. 8003a48: 687b ldr r3, [r7, #4]
  7954. 8003a4a: 2b00 cmp r3, #0
  7955. 8003a4c: d101 bne.n 8003a52 <HAL_DMA_Abort_IT+0x12>
  7956. {
  7957. return HAL_ERROR;
  7958. 8003a4e: 2301 movs r3, #1
  7959. 8003a50: e237 b.n 8003ec2 <HAL_DMA_Abort_IT+0x482>
  7960. }
  7961. if(hdma->State != HAL_DMA_STATE_BUSY)
  7962. 8003a52: 687b ldr r3, [r7, #4]
  7963. 8003a54: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  7964. 8003a58: b2db uxtb r3, r3
  7965. 8003a5a: 2b02 cmp r3, #2
  7966. 8003a5c: d004 beq.n 8003a68 <HAL_DMA_Abort_IT+0x28>
  7967. {
  7968. hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;
  7969. 8003a5e: 687b ldr r3, [r7, #4]
  7970. 8003a60: 2280 movs r2, #128 @ 0x80
  7971. 8003a62: 655a str r2, [r3, #84] @ 0x54
  7972. return HAL_ERROR;
  7973. 8003a64: 2301 movs r3, #1
  7974. 8003a66: e22c b.n 8003ec2 <HAL_DMA_Abort_IT+0x482>
  7975. }
  7976. else
  7977. {
  7978. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  7979. 8003a68: 687b ldr r3, [r7, #4]
  7980. 8003a6a: 681b ldr r3, [r3, #0]
  7981. 8003a6c: 4a5c ldr r2, [pc, #368] @ (8003be0 <HAL_DMA_Abort_IT+0x1a0>)
  7982. 8003a6e: 4293 cmp r3, r2
  7983. 8003a70: d04a beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  7984. 8003a72: 687b ldr r3, [r7, #4]
  7985. 8003a74: 681b ldr r3, [r3, #0]
  7986. 8003a76: 4a5b ldr r2, [pc, #364] @ (8003be4 <HAL_DMA_Abort_IT+0x1a4>)
  7987. 8003a78: 4293 cmp r3, r2
  7988. 8003a7a: d045 beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  7989. 8003a7c: 687b ldr r3, [r7, #4]
  7990. 8003a7e: 681b ldr r3, [r3, #0]
  7991. 8003a80: 4a59 ldr r2, [pc, #356] @ (8003be8 <HAL_DMA_Abort_IT+0x1a8>)
  7992. 8003a82: 4293 cmp r3, r2
  7993. 8003a84: d040 beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  7994. 8003a86: 687b ldr r3, [r7, #4]
  7995. 8003a88: 681b ldr r3, [r3, #0]
  7996. 8003a8a: 4a58 ldr r2, [pc, #352] @ (8003bec <HAL_DMA_Abort_IT+0x1ac>)
  7997. 8003a8c: 4293 cmp r3, r2
  7998. 8003a8e: d03b beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  7999. 8003a90: 687b ldr r3, [r7, #4]
  8000. 8003a92: 681b ldr r3, [r3, #0]
  8001. 8003a94: 4a56 ldr r2, [pc, #344] @ (8003bf0 <HAL_DMA_Abort_IT+0x1b0>)
  8002. 8003a96: 4293 cmp r3, r2
  8003. 8003a98: d036 beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  8004. 8003a9a: 687b ldr r3, [r7, #4]
  8005. 8003a9c: 681b ldr r3, [r3, #0]
  8006. 8003a9e: 4a55 ldr r2, [pc, #340] @ (8003bf4 <HAL_DMA_Abort_IT+0x1b4>)
  8007. 8003aa0: 4293 cmp r3, r2
  8008. 8003aa2: d031 beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  8009. 8003aa4: 687b ldr r3, [r7, #4]
  8010. 8003aa6: 681b ldr r3, [r3, #0]
  8011. 8003aa8: 4a53 ldr r2, [pc, #332] @ (8003bf8 <HAL_DMA_Abort_IT+0x1b8>)
  8012. 8003aaa: 4293 cmp r3, r2
  8013. 8003aac: d02c beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  8014. 8003aae: 687b ldr r3, [r7, #4]
  8015. 8003ab0: 681b ldr r3, [r3, #0]
  8016. 8003ab2: 4a52 ldr r2, [pc, #328] @ (8003bfc <HAL_DMA_Abort_IT+0x1bc>)
  8017. 8003ab4: 4293 cmp r3, r2
  8018. 8003ab6: d027 beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  8019. 8003ab8: 687b ldr r3, [r7, #4]
  8020. 8003aba: 681b ldr r3, [r3, #0]
  8021. 8003abc: 4a50 ldr r2, [pc, #320] @ (8003c00 <HAL_DMA_Abort_IT+0x1c0>)
  8022. 8003abe: 4293 cmp r3, r2
  8023. 8003ac0: d022 beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  8024. 8003ac2: 687b ldr r3, [r7, #4]
  8025. 8003ac4: 681b ldr r3, [r3, #0]
  8026. 8003ac6: 4a4f ldr r2, [pc, #316] @ (8003c04 <HAL_DMA_Abort_IT+0x1c4>)
  8027. 8003ac8: 4293 cmp r3, r2
  8028. 8003aca: d01d beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  8029. 8003acc: 687b ldr r3, [r7, #4]
  8030. 8003ace: 681b ldr r3, [r3, #0]
  8031. 8003ad0: 4a4d ldr r2, [pc, #308] @ (8003c08 <HAL_DMA_Abort_IT+0x1c8>)
  8032. 8003ad2: 4293 cmp r3, r2
  8033. 8003ad4: d018 beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  8034. 8003ad6: 687b ldr r3, [r7, #4]
  8035. 8003ad8: 681b ldr r3, [r3, #0]
  8036. 8003ada: 4a4c ldr r2, [pc, #304] @ (8003c0c <HAL_DMA_Abort_IT+0x1cc>)
  8037. 8003adc: 4293 cmp r3, r2
  8038. 8003ade: d013 beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  8039. 8003ae0: 687b ldr r3, [r7, #4]
  8040. 8003ae2: 681b ldr r3, [r3, #0]
  8041. 8003ae4: 4a4a ldr r2, [pc, #296] @ (8003c10 <HAL_DMA_Abort_IT+0x1d0>)
  8042. 8003ae6: 4293 cmp r3, r2
  8043. 8003ae8: d00e beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  8044. 8003aea: 687b ldr r3, [r7, #4]
  8045. 8003aec: 681b ldr r3, [r3, #0]
  8046. 8003aee: 4a49 ldr r2, [pc, #292] @ (8003c14 <HAL_DMA_Abort_IT+0x1d4>)
  8047. 8003af0: 4293 cmp r3, r2
  8048. 8003af2: d009 beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  8049. 8003af4: 687b ldr r3, [r7, #4]
  8050. 8003af6: 681b ldr r3, [r3, #0]
  8051. 8003af8: 4a47 ldr r2, [pc, #284] @ (8003c18 <HAL_DMA_Abort_IT+0x1d8>)
  8052. 8003afa: 4293 cmp r3, r2
  8053. 8003afc: d004 beq.n 8003b08 <HAL_DMA_Abort_IT+0xc8>
  8054. 8003afe: 687b ldr r3, [r7, #4]
  8055. 8003b00: 681b ldr r3, [r3, #0]
  8056. 8003b02: 4a46 ldr r2, [pc, #280] @ (8003c1c <HAL_DMA_Abort_IT+0x1dc>)
  8057. 8003b04: 4293 cmp r3, r2
  8058. 8003b06: d101 bne.n 8003b0c <HAL_DMA_Abort_IT+0xcc>
  8059. 8003b08: 2301 movs r3, #1
  8060. 8003b0a: e000 b.n 8003b0e <HAL_DMA_Abort_IT+0xce>
  8061. 8003b0c: 2300 movs r3, #0
  8062. 8003b0e: 2b00 cmp r3, #0
  8063. 8003b10: f000 8086 beq.w 8003c20 <HAL_DMA_Abort_IT+0x1e0>
  8064. {
  8065. /* Set Abort State */
  8066. hdma->State = HAL_DMA_STATE_ABORT;
  8067. 8003b14: 687b ldr r3, [r7, #4]
  8068. 8003b16: 2204 movs r2, #4
  8069. 8003b18: f883 2035 strb.w r2, [r3, #53] @ 0x35
  8070. /* Disable the stream */
  8071. __HAL_DMA_DISABLE(hdma);
  8072. 8003b1c: 687b ldr r3, [r7, #4]
  8073. 8003b1e: 681b ldr r3, [r3, #0]
  8074. 8003b20: 4a2f ldr r2, [pc, #188] @ (8003be0 <HAL_DMA_Abort_IT+0x1a0>)
  8075. 8003b22: 4293 cmp r3, r2
  8076. 8003b24: d04a beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8077. 8003b26: 687b ldr r3, [r7, #4]
  8078. 8003b28: 681b ldr r3, [r3, #0]
  8079. 8003b2a: 4a2e ldr r2, [pc, #184] @ (8003be4 <HAL_DMA_Abort_IT+0x1a4>)
  8080. 8003b2c: 4293 cmp r3, r2
  8081. 8003b2e: d045 beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8082. 8003b30: 687b ldr r3, [r7, #4]
  8083. 8003b32: 681b ldr r3, [r3, #0]
  8084. 8003b34: 4a2c ldr r2, [pc, #176] @ (8003be8 <HAL_DMA_Abort_IT+0x1a8>)
  8085. 8003b36: 4293 cmp r3, r2
  8086. 8003b38: d040 beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8087. 8003b3a: 687b ldr r3, [r7, #4]
  8088. 8003b3c: 681b ldr r3, [r3, #0]
  8089. 8003b3e: 4a2b ldr r2, [pc, #172] @ (8003bec <HAL_DMA_Abort_IT+0x1ac>)
  8090. 8003b40: 4293 cmp r3, r2
  8091. 8003b42: d03b beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8092. 8003b44: 687b ldr r3, [r7, #4]
  8093. 8003b46: 681b ldr r3, [r3, #0]
  8094. 8003b48: 4a29 ldr r2, [pc, #164] @ (8003bf0 <HAL_DMA_Abort_IT+0x1b0>)
  8095. 8003b4a: 4293 cmp r3, r2
  8096. 8003b4c: d036 beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8097. 8003b4e: 687b ldr r3, [r7, #4]
  8098. 8003b50: 681b ldr r3, [r3, #0]
  8099. 8003b52: 4a28 ldr r2, [pc, #160] @ (8003bf4 <HAL_DMA_Abort_IT+0x1b4>)
  8100. 8003b54: 4293 cmp r3, r2
  8101. 8003b56: d031 beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8102. 8003b58: 687b ldr r3, [r7, #4]
  8103. 8003b5a: 681b ldr r3, [r3, #0]
  8104. 8003b5c: 4a26 ldr r2, [pc, #152] @ (8003bf8 <HAL_DMA_Abort_IT+0x1b8>)
  8105. 8003b5e: 4293 cmp r3, r2
  8106. 8003b60: d02c beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8107. 8003b62: 687b ldr r3, [r7, #4]
  8108. 8003b64: 681b ldr r3, [r3, #0]
  8109. 8003b66: 4a25 ldr r2, [pc, #148] @ (8003bfc <HAL_DMA_Abort_IT+0x1bc>)
  8110. 8003b68: 4293 cmp r3, r2
  8111. 8003b6a: d027 beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8112. 8003b6c: 687b ldr r3, [r7, #4]
  8113. 8003b6e: 681b ldr r3, [r3, #0]
  8114. 8003b70: 4a23 ldr r2, [pc, #140] @ (8003c00 <HAL_DMA_Abort_IT+0x1c0>)
  8115. 8003b72: 4293 cmp r3, r2
  8116. 8003b74: d022 beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8117. 8003b76: 687b ldr r3, [r7, #4]
  8118. 8003b78: 681b ldr r3, [r3, #0]
  8119. 8003b7a: 4a22 ldr r2, [pc, #136] @ (8003c04 <HAL_DMA_Abort_IT+0x1c4>)
  8120. 8003b7c: 4293 cmp r3, r2
  8121. 8003b7e: d01d beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8122. 8003b80: 687b ldr r3, [r7, #4]
  8123. 8003b82: 681b ldr r3, [r3, #0]
  8124. 8003b84: 4a20 ldr r2, [pc, #128] @ (8003c08 <HAL_DMA_Abort_IT+0x1c8>)
  8125. 8003b86: 4293 cmp r3, r2
  8126. 8003b88: d018 beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8127. 8003b8a: 687b ldr r3, [r7, #4]
  8128. 8003b8c: 681b ldr r3, [r3, #0]
  8129. 8003b8e: 4a1f ldr r2, [pc, #124] @ (8003c0c <HAL_DMA_Abort_IT+0x1cc>)
  8130. 8003b90: 4293 cmp r3, r2
  8131. 8003b92: d013 beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8132. 8003b94: 687b ldr r3, [r7, #4]
  8133. 8003b96: 681b ldr r3, [r3, #0]
  8134. 8003b98: 4a1d ldr r2, [pc, #116] @ (8003c10 <HAL_DMA_Abort_IT+0x1d0>)
  8135. 8003b9a: 4293 cmp r3, r2
  8136. 8003b9c: d00e beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8137. 8003b9e: 687b ldr r3, [r7, #4]
  8138. 8003ba0: 681b ldr r3, [r3, #0]
  8139. 8003ba2: 4a1c ldr r2, [pc, #112] @ (8003c14 <HAL_DMA_Abort_IT+0x1d4>)
  8140. 8003ba4: 4293 cmp r3, r2
  8141. 8003ba6: d009 beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8142. 8003ba8: 687b ldr r3, [r7, #4]
  8143. 8003baa: 681b ldr r3, [r3, #0]
  8144. 8003bac: 4a1a ldr r2, [pc, #104] @ (8003c18 <HAL_DMA_Abort_IT+0x1d8>)
  8145. 8003bae: 4293 cmp r3, r2
  8146. 8003bb0: d004 beq.n 8003bbc <HAL_DMA_Abort_IT+0x17c>
  8147. 8003bb2: 687b ldr r3, [r7, #4]
  8148. 8003bb4: 681b ldr r3, [r3, #0]
  8149. 8003bb6: 4a19 ldr r2, [pc, #100] @ (8003c1c <HAL_DMA_Abort_IT+0x1dc>)
  8150. 8003bb8: 4293 cmp r3, r2
  8151. 8003bba: d108 bne.n 8003bce <HAL_DMA_Abort_IT+0x18e>
  8152. 8003bbc: 687b ldr r3, [r7, #4]
  8153. 8003bbe: 681b ldr r3, [r3, #0]
  8154. 8003bc0: 681a ldr r2, [r3, #0]
  8155. 8003bc2: 687b ldr r3, [r7, #4]
  8156. 8003bc4: 681b ldr r3, [r3, #0]
  8157. 8003bc6: f022 0201 bic.w r2, r2, #1
  8158. 8003bca: 601a str r2, [r3, #0]
  8159. 8003bcc: e178 b.n 8003ec0 <HAL_DMA_Abort_IT+0x480>
  8160. 8003bce: 687b ldr r3, [r7, #4]
  8161. 8003bd0: 681b ldr r3, [r3, #0]
  8162. 8003bd2: 681a ldr r2, [r3, #0]
  8163. 8003bd4: 687b ldr r3, [r7, #4]
  8164. 8003bd6: 681b ldr r3, [r3, #0]
  8165. 8003bd8: f022 0201 bic.w r2, r2, #1
  8166. 8003bdc: 601a str r2, [r3, #0]
  8167. 8003bde: e16f b.n 8003ec0 <HAL_DMA_Abort_IT+0x480>
  8168. 8003be0: 40020010 .word 0x40020010
  8169. 8003be4: 40020028 .word 0x40020028
  8170. 8003be8: 40020040 .word 0x40020040
  8171. 8003bec: 40020058 .word 0x40020058
  8172. 8003bf0: 40020070 .word 0x40020070
  8173. 8003bf4: 40020088 .word 0x40020088
  8174. 8003bf8: 400200a0 .word 0x400200a0
  8175. 8003bfc: 400200b8 .word 0x400200b8
  8176. 8003c00: 40020410 .word 0x40020410
  8177. 8003c04: 40020428 .word 0x40020428
  8178. 8003c08: 40020440 .word 0x40020440
  8179. 8003c0c: 40020458 .word 0x40020458
  8180. 8003c10: 40020470 .word 0x40020470
  8181. 8003c14: 40020488 .word 0x40020488
  8182. 8003c18: 400204a0 .word 0x400204a0
  8183. 8003c1c: 400204b8 .word 0x400204b8
  8184. }
  8185. else /* BDMA channel */
  8186. {
  8187. /* Disable DMA All Interrupts */
  8188. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR &= ~(BDMA_CCR_TCIE | BDMA_CCR_HTIE | BDMA_CCR_TEIE);
  8189. 8003c20: 687b ldr r3, [r7, #4]
  8190. 8003c22: 681b ldr r3, [r3, #0]
  8191. 8003c24: 681a ldr r2, [r3, #0]
  8192. 8003c26: 687b ldr r3, [r7, #4]
  8193. 8003c28: 681b ldr r3, [r3, #0]
  8194. 8003c2a: f022 020e bic.w r2, r2, #14
  8195. 8003c2e: 601a str r2, [r3, #0]
  8196. /* Disable the channel */
  8197. __HAL_DMA_DISABLE(hdma);
  8198. 8003c30: 687b ldr r3, [r7, #4]
  8199. 8003c32: 681b ldr r3, [r3, #0]
  8200. 8003c34: 4a6c ldr r2, [pc, #432] @ (8003de8 <HAL_DMA_Abort_IT+0x3a8>)
  8201. 8003c36: 4293 cmp r3, r2
  8202. 8003c38: d04a beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8203. 8003c3a: 687b ldr r3, [r7, #4]
  8204. 8003c3c: 681b ldr r3, [r3, #0]
  8205. 8003c3e: 4a6b ldr r2, [pc, #428] @ (8003dec <HAL_DMA_Abort_IT+0x3ac>)
  8206. 8003c40: 4293 cmp r3, r2
  8207. 8003c42: d045 beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8208. 8003c44: 687b ldr r3, [r7, #4]
  8209. 8003c46: 681b ldr r3, [r3, #0]
  8210. 8003c48: 4a69 ldr r2, [pc, #420] @ (8003df0 <HAL_DMA_Abort_IT+0x3b0>)
  8211. 8003c4a: 4293 cmp r3, r2
  8212. 8003c4c: d040 beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8213. 8003c4e: 687b ldr r3, [r7, #4]
  8214. 8003c50: 681b ldr r3, [r3, #0]
  8215. 8003c52: 4a68 ldr r2, [pc, #416] @ (8003df4 <HAL_DMA_Abort_IT+0x3b4>)
  8216. 8003c54: 4293 cmp r3, r2
  8217. 8003c56: d03b beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8218. 8003c58: 687b ldr r3, [r7, #4]
  8219. 8003c5a: 681b ldr r3, [r3, #0]
  8220. 8003c5c: 4a66 ldr r2, [pc, #408] @ (8003df8 <HAL_DMA_Abort_IT+0x3b8>)
  8221. 8003c5e: 4293 cmp r3, r2
  8222. 8003c60: d036 beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8223. 8003c62: 687b ldr r3, [r7, #4]
  8224. 8003c64: 681b ldr r3, [r3, #0]
  8225. 8003c66: 4a65 ldr r2, [pc, #404] @ (8003dfc <HAL_DMA_Abort_IT+0x3bc>)
  8226. 8003c68: 4293 cmp r3, r2
  8227. 8003c6a: d031 beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8228. 8003c6c: 687b ldr r3, [r7, #4]
  8229. 8003c6e: 681b ldr r3, [r3, #0]
  8230. 8003c70: 4a63 ldr r2, [pc, #396] @ (8003e00 <HAL_DMA_Abort_IT+0x3c0>)
  8231. 8003c72: 4293 cmp r3, r2
  8232. 8003c74: d02c beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8233. 8003c76: 687b ldr r3, [r7, #4]
  8234. 8003c78: 681b ldr r3, [r3, #0]
  8235. 8003c7a: 4a62 ldr r2, [pc, #392] @ (8003e04 <HAL_DMA_Abort_IT+0x3c4>)
  8236. 8003c7c: 4293 cmp r3, r2
  8237. 8003c7e: d027 beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8238. 8003c80: 687b ldr r3, [r7, #4]
  8239. 8003c82: 681b ldr r3, [r3, #0]
  8240. 8003c84: 4a60 ldr r2, [pc, #384] @ (8003e08 <HAL_DMA_Abort_IT+0x3c8>)
  8241. 8003c86: 4293 cmp r3, r2
  8242. 8003c88: d022 beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8243. 8003c8a: 687b ldr r3, [r7, #4]
  8244. 8003c8c: 681b ldr r3, [r3, #0]
  8245. 8003c8e: 4a5f ldr r2, [pc, #380] @ (8003e0c <HAL_DMA_Abort_IT+0x3cc>)
  8246. 8003c90: 4293 cmp r3, r2
  8247. 8003c92: d01d beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8248. 8003c94: 687b ldr r3, [r7, #4]
  8249. 8003c96: 681b ldr r3, [r3, #0]
  8250. 8003c98: 4a5d ldr r2, [pc, #372] @ (8003e10 <HAL_DMA_Abort_IT+0x3d0>)
  8251. 8003c9a: 4293 cmp r3, r2
  8252. 8003c9c: d018 beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8253. 8003c9e: 687b ldr r3, [r7, #4]
  8254. 8003ca0: 681b ldr r3, [r3, #0]
  8255. 8003ca2: 4a5c ldr r2, [pc, #368] @ (8003e14 <HAL_DMA_Abort_IT+0x3d4>)
  8256. 8003ca4: 4293 cmp r3, r2
  8257. 8003ca6: d013 beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8258. 8003ca8: 687b ldr r3, [r7, #4]
  8259. 8003caa: 681b ldr r3, [r3, #0]
  8260. 8003cac: 4a5a ldr r2, [pc, #360] @ (8003e18 <HAL_DMA_Abort_IT+0x3d8>)
  8261. 8003cae: 4293 cmp r3, r2
  8262. 8003cb0: d00e beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8263. 8003cb2: 687b ldr r3, [r7, #4]
  8264. 8003cb4: 681b ldr r3, [r3, #0]
  8265. 8003cb6: 4a59 ldr r2, [pc, #356] @ (8003e1c <HAL_DMA_Abort_IT+0x3dc>)
  8266. 8003cb8: 4293 cmp r3, r2
  8267. 8003cba: d009 beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8268. 8003cbc: 687b ldr r3, [r7, #4]
  8269. 8003cbe: 681b ldr r3, [r3, #0]
  8270. 8003cc0: 4a57 ldr r2, [pc, #348] @ (8003e20 <HAL_DMA_Abort_IT+0x3e0>)
  8271. 8003cc2: 4293 cmp r3, r2
  8272. 8003cc4: d004 beq.n 8003cd0 <HAL_DMA_Abort_IT+0x290>
  8273. 8003cc6: 687b ldr r3, [r7, #4]
  8274. 8003cc8: 681b ldr r3, [r3, #0]
  8275. 8003cca: 4a56 ldr r2, [pc, #344] @ (8003e24 <HAL_DMA_Abort_IT+0x3e4>)
  8276. 8003ccc: 4293 cmp r3, r2
  8277. 8003cce: d108 bne.n 8003ce2 <HAL_DMA_Abort_IT+0x2a2>
  8278. 8003cd0: 687b ldr r3, [r7, #4]
  8279. 8003cd2: 681b ldr r3, [r3, #0]
  8280. 8003cd4: 681a ldr r2, [r3, #0]
  8281. 8003cd6: 687b ldr r3, [r7, #4]
  8282. 8003cd8: 681b ldr r3, [r3, #0]
  8283. 8003cda: f022 0201 bic.w r2, r2, #1
  8284. 8003cde: 601a str r2, [r3, #0]
  8285. 8003ce0: e007 b.n 8003cf2 <HAL_DMA_Abort_IT+0x2b2>
  8286. 8003ce2: 687b ldr r3, [r7, #4]
  8287. 8003ce4: 681b ldr r3, [r3, #0]
  8288. 8003ce6: 681a ldr r2, [r3, #0]
  8289. 8003ce8: 687b ldr r3, [r7, #4]
  8290. 8003cea: 681b ldr r3, [r3, #0]
  8291. 8003cec: f022 0201 bic.w r2, r2, #1
  8292. 8003cf0: 601a str r2, [r3, #0]
  8293. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  8294. 8003cf2: 687b ldr r3, [r7, #4]
  8295. 8003cf4: 681b ldr r3, [r3, #0]
  8296. 8003cf6: 4a3c ldr r2, [pc, #240] @ (8003de8 <HAL_DMA_Abort_IT+0x3a8>)
  8297. 8003cf8: 4293 cmp r3, r2
  8298. 8003cfa: d072 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8299. 8003cfc: 687b ldr r3, [r7, #4]
  8300. 8003cfe: 681b ldr r3, [r3, #0]
  8301. 8003d00: 4a3a ldr r2, [pc, #232] @ (8003dec <HAL_DMA_Abort_IT+0x3ac>)
  8302. 8003d02: 4293 cmp r3, r2
  8303. 8003d04: d06d beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8304. 8003d06: 687b ldr r3, [r7, #4]
  8305. 8003d08: 681b ldr r3, [r3, #0]
  8306. 8003d0a: 4a39 ldr r2, [pc, #228] @ (8003df0 <HAL_DMA_Abort_IT+0x3b0>)
  8307. 8003d0c: 4293 cmp r3, r2
  8308. 8003d0e: d068 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8309. 8003d10: 687b ldr r3, [r7, #4]
  8310. 8003d12: 681b ldr r3, [r3, #0]
  8311. 8003d14: 4a37 ldr r2, [pc, #220] @ (8003df4 <HAL_DMA_Abort_IT+0x3b4>)
  8312. 8003d16: 4293 cmp r3, r2
  8313. 8003d18: d063 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8314. 8003d1a: 687b ldr r3, [r7, #4]
  8315. 8003d1c: 681b ldr r3, [r3, #0]
  8316. 8003d1e: 4a36 ldr r2, [pc, #216] @ (8003df8 <HAL_DMA_Abort_IT+0x3b8>)
  8317. 8003d20: 4293 cmp r3, r2
  8318. 8003d22: d05e beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8319. 8003d24: 687b ldr r3, [r7, #4]
  8320. 8003d26: 681b ldr r3, [r3, #0]
  8321. 8003d28: 4a34 ldr r2, [pc, #208] @ (8003dfc <HAL_DMA_Abort_IT+0x3bc>)
  8322. 8003d2a: 4293 cmp r3, r2
  8323. 8003d2c: d059 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8324. 8003d2e: 687b ldr r3, [r7, #4]
  8325. 8003d30: 681b ldr r3, [r3, #0]
  8326. 8003d32: 4a33 ldr r2, [pc, #204] @ (8003e00 <HAL_DMA_Abort_IT+0x3c0>)
  8327. 8003d34: 4293 cmp r3, r2
  8328. 8003d36: d054 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8329. 8003d38: 687b ldr r3, [r7, #4]
  8330. 8003d3a: 681b ldr r3, [r3, #0]
  8331. 8003d3c: 4a31 ldr r2, [pc, #196] @ (8003e04 <HAL_DMA_Abort_IT+0x3c4>)
  8332. 8003d3e: 4293 cmp r3, r2
  8333. 8003d40: d04f beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8334. 8003d42: 687b ldr r3, [r7, #4]
  8335. 8003d44: 681b ldr r3, [r3, #0]
  8336. 8003d46: 4a30 ldr r2, [pc, #192] @ (8003e08 <HAL_DMA_Abort_IT+0x3c8>)
  8337. 8003d48: 4293 cmp r3, r2
  8338. 8003d4a: d04a beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8339. 8003d4c: 687b ldr r3, [r7, #4]
  8340. 8003d4e: 681b ldr r3, [r3, #0]
  8341. 8003d50: 4a2e ldr r2, [pc, #184] @ (8003e0c <HAL_DMA_Abort_IT+0x3cc>)
  8342. 8003d52: 4293 cmp r3, r2
  8343. 8003d54: d045 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8344. 8003d56: 687b ldr r3, [r7, #4]
  8345. 8003d58: 681b ldr r3, [r3, #0]
  8346. 8003d5a: 4a2d ldr r2, [pc, #180] @ (8003e10 <HAL_DMA_Abort_IT+0x3d0>)
  8347. 8003d5c: 4293 cmp r3, r2
  8348. 8003d5e: d040 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8349. 8003d60: 687b ldr r3, [r7, #4]
  8350. 8003d62: 681b ldr r3, [r3, #0]
  8351. 8003d64: 4a2b ldr r2, [pc, #172] @ (8003e14 <HAL_DMA_Abort_IT+0x3d4>)
  8352. 8003d66: 4293 cmp r3, r2
  8353. 8003d68: d03b beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8354. 8003d6a: 687b ldr r3, [r7, #4]
  8355. 8003d6c: 681b ldr r3, [r3, #0]
  8356. 8003d6e: 4a2a ldr r2, [pc, #168] @ (8003e18 <HAL_DMA_Abort_IT+0x3d8>)
  8357. 8003d70: 4293 cmp r3, r2
  8358. 8003d72: d036 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8359. 8003d74: 687b ldr r3, [r7, #4]
  8360. 8003d76: 681b ldr r3, [r3, #0]
  8361. 8003d78: 4a28 ldr r2, [pc, #160] @ (8003e1c <HAL_DMA_Abort_IT+0x3dc>)
  8362. 8003d7a: 4293 cmp r3, r2
  8363. 8003d7c: d031 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8364. 8003d7e: 687b ldr r3, [r7, #4]
  8365. 8003d80: 681b ldr r3, [r3, #0]
  8366. 8003d82: 4a27 ldr r2, [pc, #156] @ (8003e20 <HAL_DMA_Abort_IT+0x3e0>)
  8367. 8003d84: 4293 cmp r3, r2
  8368. 8003d86: d02c beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8369. 8003d88: 687b ldr r3, [r7, #4]
  8370. 8003d8a: 681b ldr r3, [r3, #0]
  8371. 8003d8c: 4a25 ldr r2, [pc, #148] @ (8003e24 <HAL_DMA_Abort_IT+0x3e4>)
  8372. 8003d8e: 4293 cmp r3, r2
  8373. 8003d90: d027 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8374. 8003d92: 687b ldr r3, [r7, #4]
  8375. 8003d94: 681b ldr r3, [r3, #0]
  8376. 8003d96: 4a24 ldr r2, [pc, #144] @ (8003e28 <HAL_DMA_Abort_IT+0x3e8>)
  8377. 8003d98: 4293 cmp r3, r2
  8378. 8003d9a: d022 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8379. 8003d9c: 687b ldr r3, [r7, #4]
  8380. 8003d9e: 681b ldr r3, [r3, #0]
  8381. 8003da0: 4a22 ldr r2, [pc, #136] @ (8003e2c <HAL_DMA_Abort_IT+0x3ec>)
  8382. 8003da2: 4293 cmp r3, r2
  8383. 8003da4: d01d beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8384. 8003da6: 687b ldr r3, [r7, #4]
  8385. 8003da8: 681b ldr r3, [r3, #0]
  8386. 8003daa: 4a21 ldr r2, [pc, #132] @ (8003e30 <HAL_DMA_Abort_IT+0x3f0>)
  8387. 8003dac: 4293 cmp r3, r2
  8388. 8003dae: d018 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8389. 8003db0: 687b ldr r3, [r7, #4]
  8390. 8003db2: 681b ldr r3, [r3, #0]
  8391. 8003db4: 4a1f ldr r2, [pc, #124] @ (8003e34 <HAL_DMA_Abort_IT+0x3f4>)
  8392. 8003db6: 4293 cmp r3, r2
  8393. 8003db8: d013 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8394. 8003dba: 687b ldr r3, [r7, #4]
  8395. 8003dbc: 681b ldr r3, [r3, #0]
  8396. 8003dbe: 4a1e ldr r2, [pc, #120] @ (8003e38 <HAL_DMA_Abort_IT+0x3f8>)
  8397. 8003dc0: 4293 cmp r3, r2
  8398. 8003dc2: d00e beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8399. 8003dc4: 687b ldr r3, [r7, #4]
  8400. 8003dc6: 681b ldr r3, [r3, #0]
  8401. 8003dc8: 4a1c ldr r2, [pc, #112] @ (8003e3c <HAL_DMA_Abort_IT+0x3fc>)
  8402. 8003dca: 4293 cmp r3, r2
  8403. 8003dcc: d009 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8404. 8003dce: 687b ldr r3, [r7, #4]
  8405. 8003dd0: 681b ldr r3, [r3, #0]
  8406. 8003dd2: 4a1b ldr r2, [pc, #108] @ (8003e40 <HAL_DMA_Abort_IT+0x400>)
  8407. 8003dd4: 4293 cmp r3, r2
  8408. 8003dd6: d004 beq.n 8003de2 <HAL_DMA_Abort_IT+0x3a2>
  8409. 8003dd8: 687b ldr r3, [r7, #4]
  8410. 8003dda: 681b ldr r3, [r3, #0]
  8411. 8003ddc: 4a19 ldr r2, [pc, #100] @ (8003e44 <HAL_DMA_Abort_IT+0x404>)
  8412. 8003dde: 4293 cmp r3, r2
  8413. 8003de0: d132 bne.n 8003e48 <HAL_DMA_Abort_IT+0x408>
  8414. 8003de2: 2301 movs r3, #1
  8415. 8003de4: e031 b.n 8003e4a <HAL_DMA_Abort_IT+0x40a>
  8416. 8003de6: bf00 nop
  8417. 8003de8: 40020010 .word 0x40020010
  8418. 8003dec: 40020028 .word 0x40020028
  8419. 8003df0: 40020040 .word 0x40020040
  8420. 8003df4: 40020058 .word 0x40020058
  8421. 8003df8: 40020070 .word 0x40020070
  8422. 8003dfc: 40020088 .word 0x40020088
  8423. 8003e00: 400200a0 .word 0x400200a0
  8424. 8003e04: 400200b8 .word 0x400200b8
  8425. 8003e08: 40020410 .word 0x40020410
  8426. 8003e0c: 40020428 .word 0x40020428
  8427. 8003e10: 40020440 .word 0x40020440
  8428. 8003e14: 40020458 .word 0x40020458
  8429. 8003e18: 40020470 .word 0x40020470
  8430. 8003e1c: 40020488 .word 0x40020488
  8431. 8003e20: 400204a0 .word 0x400204a0
  8432. 8003e24: 400204b8 .word 0x400204b8
  8433. 8003e28: 58025408 .word 0x58025408
  8434. 8003e2c: 5802541c .word 0x5802541c
  8435. 8003e30: 58025430 .word 0x58025430
  8436. 8003e34: 58025444 .word 0x58025444
  8437. 8003e38: 58025458 .word 0x58025458
  8438. 8003e3c: 5802546c .word 0x5802546c
  8439. 8003e40: 58025480 .word 0x58025480
  8440. 8003e44: 58025494 .word 0x58025494
  8441. 8003e48: 2300 movs r3, #0
  8442. 8003e4a: 2b00 cmp r3, #0
  8443. 8003e4c: d028 beq.n 8003ea0 <HAL_DMA_Abort_IT+0x460>
  8444. {
  8445. /* disable the DMAMUX sync overrun IT */
  8446. hdma->DMAmuxChannel->CCR &= ~DMAMUX_CxCR_SOIE;
  8447. 8003e4e: 687b ldr r3, [r7, #4]
  8448. 8003e50: 6e1b ldr r3, [r3, #96] @ 0x60
  8449. 8003e52: 681a ldr r2, [r3, #0]
  8450. 8003e54: 687b ldr r3, [r7, #4]
  8451. 8003e56: 6e1b ldr r3, [r3, #96] @ 0x60
  8452. 8003e58: f422 7280 bic.w r2, r2, #256 @ 0x100
  8453. 8003e5c: 601a str r2, [r3, #0]
  8454. /* Clear all flags */
  8455. regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  8456. 8003e5e: 687b ldr r3, [r7, #4]
  8457. 8003e60: 6d9b ldr r3, [r3, #88] @ 0x58
  8458. 8003e62: 60fb str r3, [r7, #12]
  8459. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  8460. 8003e64: 687b ldr r3, [r7, #4]
  8461. 8003e66: 6ddb ldr r3, [r3, #92] @ 0x5c
  8462. 8003e68: f003 031f and.w r3, r3, #31
  8463. 8003e6c: 2201 movs r2, #1
  8464. 8003e6e: 409a lsls r2, r3
  8465. 8003e70: 68fb ldr r3, [r7, #12]
  8466. 8003e72: 605a str r2, [r3, #4]
  8467. /* Clear the DMAMUX synchro overrun flag */
  8468. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  8469. 8003e74: 687b ldr r3, [r7, #4]
  8470. 8003e76: 6e5b ldr r3, [r3, #100] @ 0x64
  8471. 8003e78: 687a ldr r2, [r7, #4]
  8472. 8003e7a: 6e92 ldr r2, [r2, #104] @ 0x68
  8473. 8003e7c: 605a str r2, [r3, #4]
  8474. if(hdma->DMAmuxRequestGen != 0U)
  8475. 8003e7e: 687b ldr r3, [r7, #4]
  8476. 8003e80: 6edb ldr r3, [r3, #108] @ 0x6c
  8477. 8003e82: 2b00 cmp r3, #0
  8478. 8003e84: d00c beq.n 8003ea0 <HAL_DMA_Abort_IT+0x460>
  8479. {
  8480. /* if using DMAMUX request generator, disable the DMAMUX request generator overrun IT*/
  8481. /* disable the request gen overrun IT */
  8482. hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_OIE;
  8483. 8003e86: 687b ldr r3, [r7, #4]
  8484. 8003e88: 6edb ldr r3, [r3, #108] @ 0x6c
  8485. 8003e8a: 681a ldr r2, [r3, #0]
  8486. 8003e8c: 687b ldr r3, [r7, #4]
  8487. 8003e8e: 6edb ldr r3, [r3, #108] @ 0x6c
  8488. 8003e90: f422 7280 bic.w r2, r2, #256 @ 0x100
  8489. 8003e94: 601a str r2, [r3, #0]
  8490. /* Clear the DMAMUX request generator overrun flag */
  8491. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  8492. 8003e96: 687b ldr r3, [r7, #4]
  8493. 8003e98: 6f1b ldr r3, [r3, #112] @ 0x70
  8494. 8003e9a: 687a ldr r2, [r7, #4]
  8495. 8003e9c: 6f52 ldr r2, [r2, #116] @ 0x74
  8496. 8003e9e: 605a str r2, [r3, #4]
  8497. }
  8498. }
  8499. /* Change the DMA state */
  8500. hdma->State = HAL_DMA_STATE_READY;
  8501. 8003ea0: 687b ldr r3, [r7, #4]
  8502. 8003ea2: 2201 movs r2, #1
  8503. 8003ea4: f883 2035 strb.w r2, [r3, #53] @ 0x35
  8504. /* Process Unlocked */
  8505. __HAL_UNLOCK(hdma);
  8506. 8003ea8: 687b ldr r3, [r7, #4]
  8507. 8003eaa: 2200 movs r2, #0
  8508. 8003eac: f883 2034 strb.w r2, [r3, #52] @ 0x34
  8509. /* Call User Abort callback */
  8510. if(hdma->XferAbortCallback != NULL)
  8511. 8003eb0: 687b ldr r3, [r7, #4]
  8512. 8003eb2: 6d1b ldr r3, [r3, #80] @ 0x50
  8513. 8003eb4: 2b00 cmp r3, #0
  8514. 8003eb6: d003 beq.n 8003ec0 <HAL_DMA_Abort_IT+0x480>
  8515. {
  8516. hdma->XferAbortCallback(hdma);
  8517. 8003eb8: 687b ldr r3, [r7, #4]
  8518. 8003eba: 6d1b ldr r3, [r3, #80] @ 0x50
  8519. 8003ebc: 6878 ldr r0, [r7, #4]
  8520. 8003ebe: 4798 blx r3
  8521. }
  8522. }
  8523. }
  8524. return HAL_OK;
  8525. 8003ec0: 2300 movs r3, #0
  8526. }
  8527. 8003ec2: 4618 mov r0, r3
  8528. 8003ec4: 3710 adds r7, #16
  8529. 8003ec6: 46bd mov sp, r7
  8530. 8003ec8: bd80 pop {r7, pc}
  8531. 8003eca: bf00 nop
  8532. 08003ecc <HAL_DMA_IRQHandler>:
  8533. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  8534. * the configuration information for the specified DMA Stream.
  8535. * @retval None
  8536. */
  8537. void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
  8538. {
  8539. 8003ecc: b580 push {r7, lr}
  8540. 8003ece: b08a sub sp, #40 @ 0x28
  8541. 8003ed0: af00 add r7, sp, #0
  8542. 8003ed2: 6078 str r0, [r7, #4]
  8543. uint32_t tmpisr_dma, tmpisr_bdma;
  8544. uint32_t ccr_reg;
  8545. __IO uint32_t count = 0U;
  8546. 8003ed4: 2300 movs r3, #0
  8547. 8003ed6: 60fb str r3, [r7, #12]
  8548. uint32_t timeout = SystemCoreClock / 9600U;
  8549. 8003ed8: 4b67 ldr r3, [pc, #412] @ (8004078 <HAL_DMA_IRQHandler+0x1ac>)
  8550. 8003eda: 681b ldr r3, [r3, #0]
  8551. 8003edc: 4a67 ldr r2, [pc, #412] @ (800407c <HAL_DMA_IRQHandler+0x1b0>)
  8552. 8003ede: fba2 2303 umull r2, r3, r2, r3
  8553. 8003ee2: 0a9b lsrs r3, r3, #10
  8554. 8003ee4: 627b str r3, [r7, #36] @ 0x24
  8555. /* calculate DMA base and stream number */
  8556. DMA_Base_Registers *regs_dma = (DMA_Base_Registers *)hdma->StreamBaseAddress;
  8557. 8003ee6: 687b ldr r3, [r7, #4]
  8558. 8003ee8: 6d9b ldr r3, [r3, #88] @ 0x58
  8559. 8003eea: 623b str r3, [r7, #32]
  8560. BDMA_Base_Registers *regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  8561. 8003eec: 687b ldr r3, [r7, #4]
  8562. 8003eee: 6d9b ldr r3, [r3, #88] @ 0x58
  8563. 8003ef0: 61fb str r3, [r7, #28]
  8564. tmpisr_dma = regs_dma->ISR;
  8565. 8003ef2: 6a3b ldr r3, [r7, #32]
  8566. 8003ef4: 681b ldr r3, [r3, #0]
  8567. 8003ef6: 61bb str r3, [r7, #24]
  8568. tmpisr_bdma = regs_bdma->ISR;
  8569. 8003ef8: 69fb ldr r3, [r7, #28]
  8570. 8003efa: 681b ldr r3, [r3, #0]
  8571. 8003efc: 617b str r3, [r7, #20]
  8572. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  8573. 8003efe: 687b ldr r3, [r7, #4]
  8574. 8003f00: 681b ldr r3, [r3, #0]
  8575. 8003f02: 4a5f ldr r2, [pc, #380] @ (8004080 <HAL_DMA_IRQHandler+0x1b4>)
  8576. 8003f04: 4293 cmp r3, r2
  8577. 8003f06: d04a beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8578. 8003f08: 687b ldr r3, [r7, #4]
  8579. 8003f0a: 681b ldr r3, [r3, #0]
  8580. 8003f0c: 4a5d ldr r2, [pc, #372] @ (8004084 <HAL_DMA_IRQHandler+0x1b8>)
  8581. 8003f0e: 4293 cmp r3, r2
  8582. 8003f10: d045 beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8583. 8003f12: 687b ldr r3, [r7, #4]
  8584. 8003f14: 681b ldr r3, [r3, #0]
  8585. 8003f16: 4a5c ldr r2, [pc, #368] @ (8004088 <HAL_DMA_IRQHandler+0x1bc>)
  8586. 8003f18: 4293 cmp r3, r2
  8587. 8003f1a: d040 beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8588. 8003f1c: 687b ldr r3, [r7, #4]
  8589. 8003f1e: 681b ldr r3, [r3, #0]
  8590. 8003f20: 4a5a ldr r2, [pc, #360] @ (800408c <HAL_DMA_IRQHandler+0x1c0>)
  8591. 8003f22: 4293 cmp r3, r2
  8592. 8003f24: d03b beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8593. 8003f26: 687b ldr r3, [r7, #4]
  8594. 8003f28: 681b ldr r3, [r3, #0]
  8595. 8003f2a: 4a59 ldr r2, [pc, #356] @ (8004090 <HAL_DMA_IRQHandler+0x1c4>)
  8596. 8003f2c: 4293 cmp r3, r2
  8597. 8003f2e: d036 beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8598. 8003f30: 687b ldr r3, [r7, #4]
  8599. 8003f32: 681b ldr r3, [r3, #0]
  8600. 8003f34: 4a57 ldr r2, [pc, #348] @ (8004094 <HAL_DMA_IRQHandler+0x1c8>)
  8601. 8003f36: 4293 cmp r3, r2
  8602. 8003f38: d031 beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8603. 8003f3a: 687b ldr r3, [r7, #4]
  8604. 8003f3c: 681b ldr r3, [r3, #0]
  8605. 8003f3e: 4a56 ldr r2, [pc, #344] @ (8004098 <HAL_DMA_IRQHandler+0x1cc>)
  8606. 8003f40: 4293 cmp r3, r2
  8607. 8003f42: d02c beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8608. 8003f44: 687b ldr r3, [r7, #4]
  8609. 8003f46: 681b ldr r3, [r3, #0]
  8610. 8003f48: 4a54 ldr r2, [pc, #336] @ (800409c <HAL_DMA_IRQHandler+0x1d0>)
  8611. 8003f4a: 4293 cmp r3, r2
  8612. 8003f4c: d027 beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8613. 8003f4e: 687b ldr r3, [r7, #4]
  8614. 8003f50: 681b ldr r3, [r3, #0]
  8615. 8003f52: 4a53 ldr r2, [pc, #332] @ (80040a0 <HAL_DMA_IRQHandler+0x1d4>)
  8616. 8003f54: 4293 cmp r3, r2
  8617. 8003f56: d022 beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8618. 8003f58: 687b ldr r3, [r7, #4]
  8619. 8003f5a: 681b ldr r3, [r3, #0]
  8620. 8003f5c: 4a51 ldr r2, [pc, #324] @ (80040a4 <HAL_DMA_IRQHandler+0x1d8>)
  8621. 8003f5e: 4293 cmp r3, r2
  8622. 8003f60: d01d beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8623. 8003f62: 687b ldr r3, [r7, #4]
  8624. 8003f64: 681b ldr r3, [r3, #0]
  8625. 8003f66: 4a50 ldr r2, [pc, #320] @ (80040a8 <HAL_DMA_IRQHandler+0x1dc>)
  8626. 8003f68: 4293 cmp r3, r2
  8627. 8003f6a: d018 beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8628. 8003f6c: 687b ldr r3, [r7, #4]
  8629. 8003f6e: 681b ldr r3, [r3, #0]
  8630. 8003f70: 4a4e ldr r2, [pc, #312] @ (80040ac <HAL_DMA_IRQHandler+0x1e0>)
  8631. 8003f72: 4293 cmp r3, r2
  8632. 8003f74: d013 beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8633. 8003f76: 687b ldr r3, [r7, #4]
  8634. 8003f78: 681b ldr r3, [r3, #0]
  8635. 8003f7a: 4a4d ldr r2, [pc, #308] @ (80040b0 <HAL_DMA_IRQHandler+0x1e4>)
  8636. 8003f7c: 4293 cmp r3, r2
  8637. 8003f7e: d00e beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8638. 8003f80: 687b ldr r3, [r7, #4]
  8639. 8003f82: 681b ldr r3, [r3, #0]
  8640. 8003f84: 4a4b ldr r2, [pc, #300] @ (80040b4 <HAL_DMA_IRQHandler+0x1e8>)
  8641. 8003f86: 4293 cmp r3, r2
  8642. 8003f88: d009 beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8643. 8003f8a: 687b ldr r3, [r7, #4]
  8644. 8003f8c: 681b ldr r3, [r3, #0]
  8645. 8003f8e: 4a4a ldr r2, [pc, #296] @ (80040b8 <HAL_DMA_IRQHandler+0x1ec>)
  8646. 8003f90: 4293 cmp r3, r2
  8647. 8003f92: d004 beq.n 8003f9e <HAL_DMA_IRQHandler+0xd2>
  8648. 8003f94: 687b ldr r3, [r7, #4]
  8649. 8003f96: 681b ldr r3, [r3, #0]
  8650. 8003f98: 4a48 ldr r2, [pc, #288] @ (80040bc <HAL_DMA_IRQHandler+0x1f0>)
  8651. 8003f9a: 4293 cmp r3, r2
  8652. 8003f9c: d101 bne.n 8003fa2 <HAL_DMA_IRQHandler+0xd6>
  8653. 8003f9e: 2301 movs r3, #1
  8654. 8003fa0: e000 b.n 8003fa4 <HAL_DMA_IRQHandler+0xd8>
  8655. 8003fa2: 2300 movs r3, #0
  8656. 8003fa4: 2b00 cmp r3, #0
  8657. 8003fa6: f000 842b beq.w 8004800 <HAL_DMA_IRQHandler+0x934>
  8658. {
  8659. /* Transfer Error Interrupt management ***************************************/
  8660. if ((tmpisr_dma & (DMA_FLAG_TEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  8661. 8003faa: 687b ldr r3, [r7, #4]
  8662. 8003fac: 6ddb ldr r3, [r3, #92] @ 0x5c
  8663. 8003fae: f003 031f and.w r3, r3, #31
  8664. 8003fb2: 2208 movs r2, #8
  8665. 8003fb4: 409a lsls r2, r3
  8666. 8003fb6: 69bb ldr r3, [r7, #24]
  8667. 8003fb8: 4013 ands r3, r2
  8668. 8003fba: 2b00 cmp r3, #0
  8669. 8003fbc: f000 80a2 beq.w 8004104 <HAL_DMA_IRQHandler+0x238>
  8670. {
  8671. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TE) != 0U)
  8672. 8003fc0: 687b ldr r3, [r7, #4]
  8673. 8003fc2: 681b ldr r3, [r3, #0]
  8674. 8003fc4: 4a2e ldr r2, [pc, #184] @ (8004080 <HAL_DMA_IRQHandler+0x1b4>)
  8675. 8003fc6: 4293 cmp r3, r2
  8676. 8003fc8: d04a beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8677. 8003fca: 687b ldr r3, [r7, #4]
  8678. 8003fcc: 681b ldr r3, [r3, #0]
  8679. 8003fce: 4a2d ldr r2, [pc, #180] @ (8004084 <HAL_DMA_IRQHandler+0x1b8>)
  8680. 8003fd0: 4293 cmp r3, r2
  8681. 8003fd2: d045 beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8682. 8003fd4: 687b ldr r3, [r7, #4]
  8683. 8003fd6: 681b ldr r3, [r3, #0]
  8684. 8003fd8: 4a2b ldr r2, [pc, #172] @ (8004088 <HAL_DMA_IRQHandler+0x1bc>)
  8685. 8003fda: 4293 cmp r3, r2
  8686. 8003fdc: d040 beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8687. 8003fde: 687b ldr r3, [r7, #4]
  8688. 8003fe0: 681b ldr r3, [r3, #0]
  8689. 8003fe2: 4a2a ldr r2, [pc, #168] @ (800408c <HAL_DMA_IRQHandler+0x1c0>)
  8690. 8003fe4: 4293 cmp r3, r2
  8691. 8003fe6: d03b beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8692. 8003fe8: 687b ldr r3, [r7, #4]
  8693. 8003fea: 681b ldr r3, [r3, #0]
  8694. 8003fec: 4a28 ldr r2, [pc, #160] @ (8004090 <HAL_DMA_IRQHandler+0x1c4>)
  8695. 8003fee: 4293 cmp r3, r2
  8696. 8003ff0: d036 beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8697. 8003ff2: 687b ldr r3, [r7, #4]
  8698. 8003ff4: 681b ldr r3, [r3, #0]
  8699. 8003ff6: 4a27 ldr r2, [pc, #156] @ (8004094 <HAL_DMA_IRQHandler+0x1c8>)
  8700. 8003ff8: 4293 cmp r3, r2
  8701. 8003ffa: d031 beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8702. 8003ffc: 687b ldr r3, [r7, #4]
  8703. 8003ffe: 681b ldr r3, [r3, #0]
  8704. 8004000: 4a25 ldr r2, [pc, #148] @ (8004098 <HAL_DMA_IRQHandler+0x1cc>)
  8705. 8004002: 4293 cmp r3, r2
  8706. 8004004: d02c beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8707. 8004006: 687b ldr r3, [r7, #4]
  8708. 8004008: 681b ldr r3, [r3, #0]
  8709. 800400a: 4a24 ldr r2, [pc, #144] @ (800409c <HAL_DMA_IRQHandler+0x1d0>)
  8710. 800400c: 4293 cmp r3, r2
  8711. 800400e: d027 beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8712. 8004010: 687b ldr r3, [r7, #4]
  8713. 8004012: 681b ldr r3, [r3, #0]
  8714. 8004014: 4a22 ldr r2, [pc, #136] @ (80040a0 <HAL_DMA_IRQHandler+0x1d4>)
  8715. 8004016: 4293 cmp r3, r2
  8716. 8004018: d022 beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8717. 800401a: 687b ldr r3, [r7, #4]
  8718. 800401c: 681b ldr r3, [r3, #0]
  8719. 800401e: 4a21 ldr r2, [pc, #132] @ (80040a4 <HAL_DMA_IRQHandler+0x1d8>)
  8720. 8004020: 4293 cmp r3, r2
  8721. 8004022: d01d beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8722. 8004024: 687b ldr r3, [r7, #4]
  8723. 8004026: 681b ldr r3, [r3, #0]
  8724. 8004028: 4a1f ldr r2, [pc, #124] @ (80040a8 <HAL_DMA_IRQHandler+0x1dc>)
  8725. 800402a: 4293 cmp r3, r2
  8726. 800402c: d018 beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8727. 800402e: 687b ldr r3, [r7, #4]
  8728. 8004030: 681b ldr r3, [r3, #0]
  8729. 8004032: 4a1e ldr r2, [pc, #120] @ (80040ac <HAL_DMA_IRQHandler+0x1e0>)
  8730. 8004034: 4293 cmp r3, r2
  8731. 8004036: d013 beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8732. 8004038: 687b ldr r3, [r7, #4]
  8733. 800403a: 681b ldr r3, [r3, #0]
  8734. 800403c: 4a1c ldr r2, [pc, #112] @ (80040b0 <HAL_DMA_IRQHandler+0x1e4>)
  8735. 800403e: 4293 cmp r3, r2
  8736. 8004040: d00e beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8737. 8004042: 687b ldr r3, [r7, #4]
  8738. 8004044: 681b ldr r3, [r3, #0]
  8739. 8004046: 4a1b ldr r2, [pc, #108] @ (80040b4 <HAL_DMA_IRQHandler+0x1e8>)
  8740. 8004048: 4293 cmp r3, r2
  8741. 800404a: d009 beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8742. 800404c: 687b ldr r3, [r7, #4]
  8743. 800404e: 681b ldr r3, [r3, #0]
  8744. 8004050: 4a19 ldr r2, [pc, #100] @ (80040b8 <HAL_DMA_IRQHandler+0x1ec>)
  8745. 8004052: 4293 cmp r3, r2
  8746. 8004054: d004 beq.n 8004060 <HAL_DMA_IRQHandler+0x194>
  8747. 8004056: 687b ldr r3, [r7, #4]
  8748. 8004058: 681b ldr r3, [r3, #0]
  8749. 800405a: 4a18 ldr r2, [pc, #96] @ (80040bc <HAL_DMA_IRQHandler+0x1f0>)
  8750. 800405c: 4293 cmp r3, r2
  8751. 800405e: d12f bne.n 80040c0 <HAL_DMA_IRQHandler+0x1f4>
  8752. 8004060: 687b ldr r3, [r7, #4]
  8753. 8004062: 681b ldr r3, [r3, #0]
  8754. 8004064: 681b ldr r3, [r3, #0]
  8755. 8004066: f003 0304 and.w r3, r3, #4
  8756. 800406a: 2b00 cmp r3, #0
  8757. 800406c: bf14 ite ne
  8758. 800406e: 2301 movne r3, #1
  8759. 8004070: 2300 moveq r3, #0
  8760. 8004072: b2db uxtb r3, r3
  8761. 8004074: e02e b.n 80040d4 <HAL_DMA_IRQHandler+0x208>
  8762. 8004076: bf00 nop
  8763. 8004078: 24000000 .word 0x24000000
  8764. 800407c: 1b4e81b5 .word 0x1b4e81b5
  8765. 8004080: 40020010 .word 0x40020010
  8766. 8004084: 40020028 .word 0x40020028
  8767. 8004088: 40020040 .word 0x40020040
  8768. 800408c: 40020058 .word 0x40020058
  8769. 8004090: 40020070 .word 0x40020070
  8770. 8004094: 40020088 .word 0x40020088
  8771. 8004098: 400200a0 .word 0x400200a0
  8772. 800409c: 400200b8 .word 0x400200b8
  8773. 80040a0: 40020410 .word 0x40020410
  8774. 80040a4: 40020428 .word 0x40020428
  8775. 80040a8: 40020440 .word 0x40020440
  8776. 80040ac: 40020458 .word 0x40020458
  8777. 80040b0: 40020470 .word 0x40020470
  8778. 80040b4: 40020488 .word 0x40020488
  8779. 80040b8: 400204a0 .word 0x400204a0
  8780. 80040bc: 400204b8 .word 0x400204b8
  8781. 80040c0: 687b ldr r3, [r7, #4]
  8782. 80040c2: 681b ldr r3, [r3, #0]
  8783. 80040c4: 681b ldr r3, [r3, #0]
  8784. 80040c6: f003 0308 and.w r3, r3, #8
  8785. 80040ca: 2b00 cmp r3, #0
  8786. 80040cc: bf14 ite ne
  8787. 80040ce: 2301 movne r3, #1
  8788. 80040d0: 2300 moveq r3, #0
  8789. 80040d2: b2db uxtb r3, r3
  8790. 80040d4: 2b00 cmp r3, #0
  8791. 80040d6: d015 beq.n 8004104 <HAL_DMA_IRQHandler+0x238>
  8792. {
  8793. /* Disable the transfer error interrupt */
  8794. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TE);
  8795. 80040d8: 687b ldr r3, [r7, #4]
  8796. 80040da: 681b ldr r3, [r3, #0]
  8797. 80040dc: 681a ldr r2, [r3, #0]
  8798. 80040de: 687b ldr r3, [r7, #4]
  8799. 80040e0: 681b ldr r3, [r3, #0]
  8800. 80040e2: f022 0204 bic.w r2, r2, #4
  8801. 80040e6: 601a str r2, [r3, #0]
  8802. /* Clear the transfer error flag */
  8803. regs_dma->IFCR = DMA_FLAG_TEIF0_4 << (hdma->StreamIndex & 0x1FU);
  8804. 80040e8: 687b ldr r3, [r7, #4]
  8805. 80040ea: 6ddb ldr r3, [r3, #92] @ 0x5c
  8806. 80040ec: f003 031f and.w r3, r3, #31
  8807. 80040f0: 2208 movs r2, #8
  8808. 80040f2: 409a lsls r2, r3
  8809. 80040f4: 6a3b ldr r3, [r7, #32]
  8810. 80040f6: 609a str r2, [r3, #8]
  8811. /* Update error code */
  8812. hdma->ErrorCode |= HAL_DMA_ERROR_TE;
  8813. 80040f8: 687b ldr r3, [r7, #4]
  8814. 80040fa: 6d5b ldr r3, [r3, #84] @ 0x54
  8815. 80040fc: f043 0201 orr.w r2, r3, #1
  8816. 8004100: 687b ldr r3, [r7, #4]
  8817. 8004102: 655a str r2, [r3, #84] @ 0x54
  8818. }
  8819. }
  8820. /* FIFO Error Interrupt management ******************************************/
  8821. if ((tmpisr_dma & (DMA_FLAG_FEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  8822. 8004104: 687b ldr r3, [r7, #4]
  8823. 8004106: 6ddb ldr r3, [r3, #92] @ 0x5c
  8824. 8004108: f003 031f and.w r3, r3, #31
  8825. 800410c: 69ba ldr r2, [r7, #24]
  8826. 800410e: fa22 f303 lsr.w r3, r2, r3
  8827. 8004112: f003 0301 and.w r3, r3, #1
  8828. 8004116: 2b00 cmp r3, #0
  8829. 8004118: d06e beq.n 80041f8 <HAL_DMA_IRQHandler+0x32c>
  8830. {
  8831. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_FE) != 0U)
  8832. 800411a: 687b ldr r3, [r7, #4]
  8833. 800411c: 681b ldr r3, [r3, #0]
  8834. 800411e: 4a69 ldr r2, [pc, #420] @ (80042c4 <HAL_DMA_IRQHandler+0x3f8>)
  8835. 8004120: 4293 cmp r3, r2
  8836. 8004122: d04a beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8837. 8004124: 687b ldr r3, [r7, #4]
  8838. 8004126: 681b ldr r3, [r3, #0]
  8839. 8004128: 4a67 ldr r2, [pc, #412] @ (80042c8 <HAL_DMA_IRQHandler+0x3fc>)
  8840. 800412a: 4293 cmp r3, r2
  8841. 800412c: d045 beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8842. 800412e: 687b ldr r3, [r7, #4]
  8843. 8004130: 681b ldr r3, [r3, #0]
  8844. 8004132: 4a66 ldr r2, [pc, #408] @ (80042cc <HAL_DMA_IRQHandler+0x400>)
  8845. 8004134: 4293 cmp r3, r2
  8846. 8004136: d040 beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8847. 8004138: 687b ldr r3, [r7, #4]
  8848. 800413a: 681b ldr r3, [r3, #0]
  8849. 800413c: 4a64 ldr r2, [pc, #400] @ (80042d0 <HAL_DMA_IRQHandler+0x404>)
  8850. 800413e: 4293 cmp r3, r2
  8851. 8004140: d03b beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8852. 8004142: 687b ldr r3, [r7, #4]
  8853. 8004144: 681b ldr r3, [r3, #0]
  8854. 8004146: 4a63 ldr r2, [pc, #396] @ (80042d4 <HAL_DMA_IRQHandler+0x408>)
  8855. 8004148: 4293 cmp r3, r2
  8856. 800414a: d036 beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8857. 800414c: 687b ldr r3, [r7, #4]
  8858. 800414e: 681b ldr r3, [r3, #0]
  8859. 8004150: 4a61 ldr r2, [pc, #388] @ (80042d8 <HAL_DMA_IRQHandler+0x40c>)
  8860. 8004152: 4293 cmp r3, r2
  8861. 8004154: d031 beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8862. 8004156: 687b ldr r3, [r7, #4]
  8863. 8004158: 681b ldr r3, [r3, #0]
  8864. 800415a: 4a60 ldr r2, [pc, #384] @ (80042dc <HAL_DMA_IRQHandler+0x410>)
  8865. 800415c: 4293 cmp r3, r2
  8866. 800415e: d02c beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8867. 8004160: 687b ldr r3, [r7, #4]
  8868. 8004162: 681b ldr r3, [r3, #0]
  8869. 8004164: 4a5e ldr r2, [pc, #376] @ (80042e0 <HAL_DMA_IRQHandler+0x414>)
  8870. 8004166: 4293 cmp r3, r2
  8871. 8004168: d027 beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8872. 800416a: 687b ldr r3, [r7, #4]
  8873. 800416c: 681b ldr r3, [r3, #0]
  8874. 800416e: 4a5d ldr r2, [pc, #372] @ (80042e4 <HAL_DMA_IRQHandler+0x418>)
  8875. 8004170: 4293 cmp r3, r2
  8876. 8004172: d022 beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8877. 8004174: 687b ldr r3, [r7, #4]
  8878. 8004176: 681b ldr r3, [r3, #0]
  8879. 8004178: 4a5b ldr r2, [pc, #364] @ (80042e8 <HAL_DMA_IRQHandler+0x41c>)
  8880. 800417a: 4293 cmp r3, r2
  8881. 800417c: d01d beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8882. 800417e: 687b ldr r3, [r7, #4]
  8883. 8004180: 681b ldr r3, [r3, #0]
  8884. 8004182: 4a5a ldr r2, [pc, #360] @ (80042ec <HAL_DMA_IRQHandler+0x420>)
  8885. 8004184: 4293 cmp r3, r2
  8886. 8004186: d018 beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8887. 8004188: 687b ldr r3, [r7, #4]
  8888. 800418a: 681b ldr r3, [r3, #0]
  8889. 800418c: 4a58 ldr r2, [pc, #352] @ (80042f0 <HAL_DMA_IRQHandler+0x424>)
  8890. 800418e: 4293 cmp r3, r2
  8891. 8004190: d013 beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8892. 8004192: 687b ldr r3, [r7, #4]
  8893. 8004194: 681b ldr r3, [r3, #0]
  8894. 8004196: 4a57 ldr r2, [pc, #348] @ (80042f4 <HAL_DMA_IRQHandler+0x428>)
  8895. 8004198: 4293 cmp r3, r2
  8896. 800419a: d00e beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8897. 800419c: 687b ldr r3, [r7, #4]
  8898. 800419e: 681b ldr r3, [r3, #0]
  8899. 80041a0: 4a55 ldr r2, [pc, #340] @ (80042f8 <HAL_DMA_IRQHandler+0x42c>)
  8900. 80041a2: 4293 cmp r3, r2
  8901. 80041a4: d009 beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8902. 80041a6: 687b ldr r3, [r7, #4]
  8903. 80041a8: 681b ldr r3, [r3, #0]
  8904. 80041aa: 4a54 ldr r2, [pc, #336] @ (80042fc <HAL_DMA_IRQHandler+0x430>)
  8905. 80041ac: 4293 cmp r3, r2
  8906. 80041ae: d004 beq.n 80041ba <HAL_DMA_IRQHandler+0x2ee>
  8907. 80041b0: 687b ldr r3, [r7, #4]
  8908. 80041b2: 681b ldr r3, [r3, #0]
  8909. 80041b4: 4a52 ldr r2, [pc, #328] @ (8004300 <HAL_DMA_IRQHandler+0x434>)
  8910. 80041b6: 4293 cmp r3, r2
  8911. 80041b8: d10a bne.n 80041d0 <HAL_DMA_IRQHandler+0x304>
  8912. 80041ba: 687b ldr r3, [r7, #4]
  8913. 80041bc: 681b ldr r3, [r3, #0]
  8914. 80041be: 695b ldr r3, [r3, #20]
  8915. 80041c0: f003 0380 and.w r3, r3, #128 @ 0x80
  8916. 80041c4: 2b00 cmp r3, #0
  8917. 80041c6: bf14 ite ne
  8918. 80041c8: 2301 movne r3, #1
  8919. 80041ca: 2300 moveq r3, #0
  8920. 80041cc: b2db uxtb r3, r3
  8921. 80041ce: e003 b.n 80041d8 <HAL_DMA_IRQHandler+0x30c>
  8922. 80041d0: 687b ldr r3, [r7, #4]
  8923. 80041d2: 681b ldr r3, [r3, #0]
  8924. 80041d4: 681b ldr r3, [r3, #0]
  8925. 80041d6: 2300 movs r3, #0
  8926. 80041d8: 2b00 cmp r3, #0
  8927. 80041da: d00d beq.n 80041f8 <HAL_DMA_IRQHandler+0x32c>
  8928. {
  8929. /* Clear the FIFO error flag */
  8930. regs_dma->IFCR = DMA_FLAG_FEIF0_4 << (hdma->StreamIndex & 0x1FU);
  8931. 80041dc: 687b ldr r3, [r7, #4]
  8932. 80041de: 6ddb ldr r3, [r3, #92] @ 0x5c
  8933. 80041e0: f003 031f and.w r3, r3, #31
  8934. 80041e4: 2201 movs r2, #1
  8935. 80041e6: 409a lsls r2, r3
  8936. 80041e8: 6a3b ldr r3, [r7, #32]
  8937. 80041ea: 609a str r2, [r3, #8]
  8938. /* Update error code */
  8939. hdma->ErrorCode |= HAL_DMA_ERROR_FE;
  8940. 80041ec: 687b ldr r3, [r7, #4]
  8941. 80041ee: 6d5b ldr r3, [r3, #84] @ 0x54
  8942. 80041f0: f043 0202 orr.w r2, r3, #2
  8943. 80041f4: 687b ldr r3, [r7, #4]
  8944. 80041f6: 655a str r2, [r3, #84] @ 0x54
  8945. }
  8946. }
  8947. /* Direct Mode Error Interrupt management ***********************************/
  8948. if ((tmpisr_dma & (DMA_FLAG_DMEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  8949. 80041f8: 687b ldr r3, [r7, #4]
  8950. 80041fa: 6ddb ldr r3, [r3, #92] @ 0x5c
  8951. 80041fc: f003 031f and.w r3, r3, #31
  8952. 8004200: 2204 movs r2, #4
  8953. 8004202: 409a lsls r2, r3
  8954. 8004204: 69bb ldr r3, [r7, #24]
  8955. 8004206: 4013 ands r3, r2
  8956. 8004208: 2b00 cmp r3, #0
  8957. 800420a: f000 808f beq.w 800432c <HAL_DMA_IRQHandler+0x460>
  8958. {
  8959. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_DME) != 0U)
  8960. 800420e: 687b ldr r3, [r7, #4]
  8961. 8004210: 681b ldr r3, [r3, #0]
  8962. 8004212: 4a2c ldr r2, [pc, #176] @ (80042c4 <HAL_DMA_IRQHandler+0x3f8>)
  8963. 8004214: 4293 cmp r3, r2
  8964. 8004216: d04a beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  8965. 8004218: 687b ldr r3, [r7, #4]
  8966. 800421a: 681b ldr r3, [r3, #0]
  8967. 800421c: 4a2a ldr r2, [pc, #168] @ (80042c8 <HAL_DMA_IRQHandler+0x3fc>)
  8968. 800421e: 4293 cmp r3, r2
  8969. 8004220: d045 beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  8970. 8004222: 687b ldr r3, [r7, #4]
  8971. 8004224: 681b ldr r3, [r3, #0]
  8972. 8004226: 4a29 ldr r2, [pc, #164] @ (80042cc <HAL_DMA_IRQHandler+0x400>)
  8973. 8004228: 4293 cmp r3, r2
  8974. 800422a: d040 beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  8975. 800422c: 687b ldr r3, [r7, #4]
  8976. 800422e: 681b ldr r3, [r3, #0]
  8977. 8004230: 4a27 ldr r2, [pc, #156] @ (80042d0 <HAL_DMA_IRQHandler+0x404>)
  8978. 8004232: 4293 cmp r3, r2
  8979. 8004234: d03b beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  8980. 8004236: 687b ldr r3, [r7, #4]
  8981. 8004238: 681b ldr r3, [r3, #0]
  8982. 800423a: 4a26 ldr r2, [pc, #152] @ (80042d4 <HAL_DMA_IRQHandler+0x408>)
  8983. 800423c: 4293 cmp r3, r2
  8984. 800423e: d036 beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  8985. 8004240: 687b ldr r3, [r7, #4]
  8986. 8004242: 681b ldr r3, [r3, #0]
  8987. 8004244: 4a24 ldr r2, [pc, #144] @ (80042d8 <HAL_DMA_IRQHandler+0x40c>)
  8988. 8004246: 4293 cmp r3, r2
  8989. 8004248: d031 beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  8990. 800424a: 687b ldr r3, [r7, #4]
  8991. 800424c: 681b ldr r3, [r3, #0]
  8992. 800424e: 4a23 ldr r2, [pc, #140] @ (80042dc <HAL_DMA_IRQHandler+0x410>)
  8993. 8004250: 4293 cmp r3, r2
  8994. 8004252: d02c beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  8995. 8004254: 687b ldr r3, [r7, #4]
  8996. 8004256: 681b ldr r3, [r3, #0]
  8997. 8004258: 4a21 ldr r2, [pc, #132] @ (80042e0 <HAL_DMA_IRQHandler+0x414>)
  8998. 800425a: 4293 cmp r3, r2
  8999. 800425c: d027 beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  9000. 800425e: 687b ldr r3, [r7, #4]
  9001. 8004260: 681b ldr r3, [r3, #0]
  9002. 8004262: 4a20 ldr r2, [pc, #128] @ (80042e4 <HAL_DMA_IRQHandler+0x418>)
  9003. 8004264: 4293 cmp r3, r2
  9004. 8004266: d022 beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  9005. 8004268: 687b ldr r3, [r7, #4]
  9006. 800426a: 681b ldr r3, [r3, #0]
  9007. 800426c: 4a1e ldr r2, [pc, #120] @ (80042e8 <HAL_DMA_IRQHandler+0x41c>)
  9008. 800426e: 4293 cmp r3, r2
  9009. 8004270: d01d beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  9010. 8004272: 687b ldr r3, [r7, #4]
  9011. 8004274: 681b ldr r3, [r3, #0]
  9012. 8004276: 4a1d ldr r2, [pc, #116] @ (80042ec <HAL_DMA_IRQHandler+0x420>)
  9013. 8004278: 4293 cmp r3, r2
  9014. 800427a: d018 beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  9015. 800427c: 687b ldr r3, [r7, #4]
  9016. 800427e: 681b ldr r3, [r3, #0]
  9017. 8004280: 4a1b ldr r2, [pc, #108] @ (80042f0 <HAL_DMA_IRQHandler+0x424>)
  9018. 8004282: 4293 cmp r3, r2
  9019. 8004284: d013 beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  9020. 8004286: 687b ldr r3, [r7, #4]
  9021. 8004288: 681b ldr r3, [r3, #0]
  9022. 800428a: 4a1a ldr r2, [pc, #104] @ (80042f4 <HAL_DMA_IRQHandler+0x428>)
  9023. 800428c: 4293 cmp r3, r2
  9024. 800428e: d00e beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  9025. 8004290: 687b ldr r3, [r7, #4]
  9026. 8004292: 681b ldr r3, [r3, #0]
  9027. 8004294: 4a18 ldr r2, [pc, #96] @ (80042f8 <HAL_DMA_IRQHandler+0x42c>)
  9028. 8004296: 4293 cmp r3, r2
  9029. 8004298: d009 beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  9030. 800429a: 687b ldr r3, [r7, #4]
  9031. 800429c: 681b ldr r3, [r3, #0]
  9032. 800429e: 4a17 ldr r2, [pc, #92] @ (80042fc <HAL_DMA_IRQHandler+0x430>)
  9033. 80042a0: 4293 cmp r3, r2
  9034. 80042a2: d004 beq.n 80042ae <HAL_DMA_IRQHandler+0x3e2>
  9035. 80042a4: 687b ldr r3, [r7, #4]
  9036. 80042a6: 681b ldr r3, [r3, #0]
  9037. 80042a8: 4a15 ldr r2, [pc, #84] @ (8004300 <HAL_DMA_IRQHandler+0x434>)
  9038. 80042aa: 4293 cmp r3, r2
  9039. 80042ac: d12a bne.n 8004304 <HAL_DMA_IRQHandler+0x438>
  9040. 80042ae: 687b ldr r3, [r7, #4]
  9041. 80042b0: 681b ldr r3, [r3, #0]
  9042. 80042b2: 681b ldr r3, [r3, #0]
  9043. 80042b4: f003 0302 and.w r3, r3, #2
  9044. 80042b8: 2b00 cmp r3, #0
  9045. 80042ba: bf14 ite ne
  9046. 80042bc: 2301 movne r3, #1
  9047. 80042be: 2300 moveq r3, #0
  9048. 80042c0: b2db uxtb r3, r3
  9049. 80042c2: e023 b.n 800430c <HAL_DMA_IRQHandler+0x440>
  9050. 80042c4: 40020010 .word 0x40020010
  9051. 80042c8: 40020028 .word 0x40020028
  9052. 80042cc: 40020040 .word 0x40020040
  9053. 80042d0: 40020058 .word 0x40020058
  9054. 80042d4: 40020070 .word 0x40020070
  9055. 80042d8: 40020088 .word 0x40020088
  9056. 80042dc: 400200a0 .word 0x400200a0
  9057. 80042e0: 400200b8 .word 0x400200b8
  9058. 80042e4: 40020410 .word 0x40020410
  9059. 80042e8: 40020428 .word 0x40020428
  9060. 80042ec: 40020440 .word 0x40020440
  9061. 80042f0: 40020458 .word 0x40020458
  9062. 80042f4: 40020470 .word 0x40020470
  9063. 80042f8: 40020488 .word 0x40020488
  9064. 80042fc: 400204a0 .word 0x400204a0
  9065. 8004300: 400204b8 .word 0x400204b8
  9066. 8004304: 687b ldr r3, [r7, #4]
  9067. 8004306: 681b ldr r3, [r3, #0]
  9068. 8004308: 681b ldr r3, [r3, #0]
  9069. 800430a: 2300 movs r3, #0
  9070. 800430c: 2b00 cmp r3, #0
  9071. 800430e: d00d beq.n 800432c <HAL_DMA_IRQHandler+0x460>
  9072. {
  9073. /* Clear the direct mode error flag */
  9074. regs_dma->IFCR = DMA_FLAG_DMEIF0_4 << (hdma->StreamIndex & 0x1FU);
  9075. 8004310: 687b ldr r3, [r7, #4]
  9076. 8004312: 6ddb ldr r3, [r3, #92] @ 0x5c
  9077. 8004314: f003 031f and.w r3, r3, #31
  9078. 8004318: 2204 movs r2, #4
  9079. 800431a: 409a lsls r2, r3
  9080. 800431c: 6a3b ldr r3, [r7, #32]
  9081. 800431e: 609a str r2, [r3, #8]
  9082. /* Update error code */
  9083. hdma->ErrorCode |= HAL_DMA_ERROR_DME;
  9084. 8004320: 687b ldr r3, [r7, #4]
  9085. 8004322: 6d5b ldr r3, [r3, #84] @ 0x54
  9086. 8004324: f043 0204 orr.w r2, r3, #4
  9087. 8004328: 687b ldr r3, [r7, #4]
  9088. 800432a: 655a str r2, [r3, #84] @ 0x54
  9089. }
  9090. }
  9091. /* Half Transfer Complete Interrupt management ******************************/
  9092. if ((tmpisr_dma & (DMA_FLAG_HTIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  9093. 800432c: 687b ldr r3, [r7, #4]
  9094. 800432e: 6ddb ldr r3, [r3, #92] @ 0x5c
  9095. 8004330: f003 031f and.w r3, r3, #31
  9096. 8004334: 2210 movs r2, #16
  9097. 8004336: 409a lsls r2, r3
  9098. 8004338: 69bb ldr r3, [r7, #24]
  9099. 800433a: 4013 ands r3, r2
  9100. 800433c: 2b00 cmp r3, #0
  9101. 800433e: f000 80a6 beq.w 800448e <HAL_DMA_IRQHandler+0x5c2>
  9102. {
  9103. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_HT) != 0U)
  9104. 8004342: 687b ldr r3, [r7, #4]
  9105. 8004344: 681b ldr r3, [r3, #0]
  9106. 8004346: 4a85 ldr r2, [pc, #532] @ (800455c <HAL_DMA_IRQHandler+0x690>)
  9107. 8004348: 4293 cmp r3, r2
  9108. 800434a: d04a beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9109. 800434c: 687b ldr r3, [r7, #4]
  9110. 800434e: 681b ldr r3, [r3, #0]
  9111. 8004350: 4a83 ldr r2, [pc, #524] @ (8004560 <HAL_DMA_IRQHandler+0x694>)
  9112. 8004352: 4293 cmp r3, r2
  9113. 8004354: d045 beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9114. 8004356: 687b ldr r3, [r7, #4]
  9115. 8004358: 681b ldr r3, [r3, #0]
  9116. 800435a: 4a82 ldr r2, [pc, #520] @ (8004564 <HAL_DMA_IRQHandler+0x698>)
  9117. 800435c: 4293 cmp r3, r2
  9118. 800435e: d040 beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9119. 8004360: 687b ldr r3, [r7, #4]
  9120. 8004362: 681b ldr r3, [r3, #0]
  9121. 8004364: 4a80 ldr r2, [pc, #512] @ (8004568 <HAL_DMA_IRQHandler+0x69c>)
  9122. 8004366: 4293 cmp r3, r2
  9123. 8004368: d03b beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9124. 800436a: 687b ldr r3, [r7, #4]
  9125. 800436c: 681b ldr r3, [r3, #0]
  9126. 800436e: 4a7f ldr r2, [pc, #508] @ (800456c <HAL_DMA_IRQHandler+0x6a0>)
  9127. 8004370: 4293 cmp r3, r2
  9128. 8004372: d036 beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9129. 8004374: 687b ldr r3, [r7, #4]
  9130. 8004376: 681b ldr r3, [r3, #0]
  9131. 8004378: 4a7d ldr r2, [pc, #500] @ (8004570 <HAL_DMA_IRQHandler+0x6a4>)
  9132. 800437a: 4293 cmp r3, r2
  9133. 800437c: d031 beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9134. 800437e: 687b ldr r3, [r7, #4]
  9135. 8004380: 681b ldr r3, [r3, #0]
  9136. 8004382: 4a7c ldr r2, [pc, #496] @ (8004574 <HAL_DMA_IRQHandler+0x6a8>)
  9137. 8004384: 4293 cmp r3, r2
  9138. 8004386: d02c beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9139. 8004388: 687b ldr r3, [r7, #4]
  9140. 800438a: 681b ldr r3, [r3, #0]
  9141. 800438c: 4a7a ldr r2, [pc, #488] @ (8004578 <HAL_DMA_IRQHandler+0x6ac>)
  9142. 800438e: 4293 cmp r3, r2
  9143. 8004390: d027 beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9144. 8004392: 687b ldr r3, [r7, #4]
  9145. 8004394: 681b ldr r3, [r3, #0]
  9146. 8004396: 4a79 ldr r2, [pc, #484] @ (800457c <HAL_DMA_IRQHandler+0x6b0>)
  9147. 8004398: 4293 cmp r3, r2
  9148. 800439a: d022 beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9149. 800439c: 687b ldr r3, [r7, #4]
  9150. 800439e: 681b ldr r3, [r3, #0]
  9151. 80043a0: 4a77 ldr r2, [pc, #476] @ (8004580 <HAL_DMA_IRQHandler+0x6b4>)
  9152. 80043a2: 4293 cmp r3, r2
  9153. 80043a4: d01d beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9154. 80043a6: 687b ldr r3, [r7, #4]
  9155. 80043a8: 681b ldr r3, [r3, #0]
  9156. 80043aa: 4a76 ldr r2, [pc, #472] @ (8004584 <HAL_DMA_IRQHandler+0x6b8>)
  9157. 80043ac: 4293 cmp r3, r2
  9158. 80043ae: d018 beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9159. 80043b0: 687b ldr r3, [r7, #4]
  9160. 80043b2: 681b ldr r3, [r3, #0]
  9161. 80043b4: 4a74 ldr r2, [pc, #464] @ (8004588 <HAL_DMA_IRQHandler+0x6bc>)
  9162. 80043b6: 4293 cmp r3, r2
  9163. 80043b8: d013 beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9164. 80043ba: 687b ldr r3, [r7, #4]
  9165. 80043bc: 681b ldr r3, [r3, #0]
  9166. 80043be: 4a73 ldr r2, [pc, #460] @ (800458c <HAL_DMA_IRQHandler+0x6c0>)
  9167. 80043c0: 4293 cmp r3, r2
  9168. 80043c2: d00e beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9169. 80043c4: 687b ldr r3, [r7, #4]
  9170. 80043c6: 681b ldr r3, [r3, #0]
  9171. 80043c8: 4a71 ldr r2, [pc, #452] @ (8004590 <HAL_DMA_IRQHandler+0x6c4>)
  9172. 80043ca: 4293 cmp r3, r2
  9173. 80043cc: d009 beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9174. 80043ce: 687b ldr r3, [r7, #4]
  9175. 80043d0: 681b ldr r3, [r3, #0]
  9176. 80043d2: 4a70 ldr r2, [pc, #448] @ (8004594 <HAL_DMA_IRQHandler+0x6c8>)
  9177. 80043d4: 4293 cmp r3, r2
  9178. 80043d6: d004 beq.n 80043e2 <HAL_DMA_IRQHandler+0x516>
  9179. 80043d8: 687b ldr r3, [r7, #4]
  9180. 80043da: 681b ldr r3, [r3, #0]
  9181. 80043dc: 4a6e ldr r2, [pc, #440] @ (8004598 <HAL_DMA_IRQHandler+0x6cc>)
  9182. 80043de: 4293 cmp r3, r2
  9183. 80043e0: d10a bne.n 80043f8 <HAL_DMA_IRQHandler+0x52c>
  9184. 80043e2: 687b ldr r3, [r7, #4]
  9185. 80043e4: 681b ldr r3, [r3, #0]
  9186. 80043e6: 681b ldr r3, [r3, #0]
  9187. 80043e8: f003 0308 and.w r3, r3, #8
  9188. 80043ec: 2b00 cmp r3, #0
  9189. 80043ee: bf14 ite ne
  9190. 80043f0: 2301 movne r3, #1
  9191. 80043f2: 2300 moveq r3, #0
  9192. 80043f4: b2db uxtb r3, r3
  9193. 80043f6: e009 b.n 800440c <HAL_DMA_IRQHandler+0x540>
  9194. 80043f8: 687b ldr r3, [r7, #4]
  9195. 80043fa: 681b ldr r3, [r3, #0]
  9196. 80043fc: 681b ldr r3, [r3, #0]
  9197. 80043fe: f003 0304 and.w r3, r3, #4
  9198. 8004402: 2b00 cmp r3, #0
  9199. 8004404: bf14 ite ne
  9200. 8004406: 2301 movne r3, #1
  9201. 8004408: 2300 moveq r3, #0
  9202. 800440a: b2db uxtb r3, r3
  9203. 800440c: 2b00 cmp r3, #0
  9204. 800440e: d03e beq.n 800448e <HAL_DMA_IRQHandler+0x5c2>
  9205. {
  9206. /* Clear the half transfer complete flag */
  9207. regs_dma->IFCR = DMA_FLAG_HTIF0_4 << (hdma->StreamIndex & 0x1FU);
  9208. 8004410: 687b ldr r3, [r7, #4]
  9209. 8004412: 6ddb ldr r3, [r3, #92] @ 0x5c
  9210. 8004414: f003 031f and.w r3, r3, #31
  9211. 8004418: 2210 movs r2, #16
  9212. 800441a: 409a lsls r2, r3
  9213. 800441c: 6a3b ldr r3, [r7, #32]
  9214. 800441e: 609a str r2, [r3, #8]
  9215. /* Multi_Buffering mode enabled */
  9216. if(((((DMA_Stream_TypeDef *)hdma->Instance)->CR) & (uint32_t)(DMA_SxCR_DBM)) != 0U)
  9217. 8004420: 687b ldr r3, [r7, #4]
  9218. 8004422: 681b ldr r3, [r3, #0]
  9219. 8004424: 681b ldr r3, [r3, #0]
  9220. 8004426: f403 2380 and.w r3, r3, #262144 @ 0x40000
  9221. 800442a: 2b00 cmp r3, #0
  9222. 800442c: d018 beq.n 8004460 <HAL_DMA_IRQHandler+0x594>
  9223. {
  9224. /* Current memory buffer used is Memory 0 */
  9225. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CT) == 0U)
  9226. 800442e: 687b ldr r3, [r7, #4]
  9227. 8004430: 681b ldr r3, [r3, #0]
  9228. 8004432: 681b ldr r3, [r3, #0]
  9229. 8004434: f403 2300 and.w r3, r3, #524288 @ 0x80000
  9230. 8004438: 2b00 cmp r3, #0
  9231. 800443a: d108 bne.n 800444e <HAL_DMA_IRQHandler+0x582>
  9232. {
  9233. if(hdma->XferHalfCpltCallback != NULL)
  9234. 800443c: 687b ldr r3, [r7, #4]
  9235. 800443e: 6c1b ldr r3, [r3, #64] @ 0x40
  9236. 8004440: 2b00 cmp r3, #0
  9237. 8004442: d024 beq.n 800448e <HAL_DMA_IRQHandler+0x5c2>
  9238. {
  9239. /* Half transfer callback */
  9240. hdma->XferHalfCpltCallback(hdma);
  9241. 8004444: 687b ldr r3, [r7, #4]
  9242. 8004446: 6c1b ldr r3, [r3, #64] @ 0x40
  9243. 8004448: 6878 ldr r0, [r7, #4]
  9244. 800444a: 4798 blx r3
  9245. 800444c: e01f b.n 800448e <HAL_DMA_IRQHandler+0x5c2>
  9246. }
  9247. }
  9248. /* Current memory buffer used is Memory 1 */
  9249. else
  9250. {
  9251. if(hdma->XferM1HalfCpltCallback != NULL)
  9252. 800444e: 687b ldr r3, [r7, #4]
  9253. 8004450: 6c9b ldr r3, [r3, #72] @ 0x48
  9254. 8004452: 2b00 cmp r3, #0
  9255. 8004454: d01b beq.n 800448e <HAL_DMA_IRQHandler+0x5c2>
  9256. {
  9257. /* Half transfer callback */
  9258. hdma->XferM1HalfCpltCallback(hdma);
  9259. 8004456: 687b ldr r3, [r7, #4]
  9260. 8004458: 6c9b ldr r3, [r3, #72] @ 0x48
  9261. 800445a: 6878 ldr r0, [r7, #4]
  9262. 800445c: 4798 blx r3
  9263. 800445e: e016 b.n 800448e <HAL_DMA_IRQHandler+0x5c2>
  9264. }
  9265. }
  9266. else
  9267. {
  9268. /* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */
  9269. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CIRC) == 0U)
  9270. 8004460: 687b ldr r3, [r7, #4]
  9271. 8004462: 681b ldr r3, [r3, #0]
  9272. 8004464: 681b ldr r3, [r3, #0]
  9273. 8004466: f403 7380 and.w r3, r3, #256 @ 0x100
  9274. 800446a: 2b00 cmp r3, #0
  9275. 800446c: d107 bne.n 800447e <HAL_DMA_IRQHandler+0x5b2>
  9276. {
  9277. /* Disable the half transfer interrupt */
  9278. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_HT);
  9279. 800446e: 687b ldr r3, [r7, #4]
  9280. 8004470: 681b ldr r3, [r3, #0]
  9281. 8004472: 681a ldr r2, [r3, #0]
  9282. 8004474: 687b ldr r3, [r7, #4]
  9283. 8004476: 681b ldr r3, [r3, #0]
  9284. 8004478: f022 0208 bic.w r2, r2, #8
  9285. 800447c: 601a str r2, [r3, #0]
  9286. }
  9287. if(hdma->XferHalfCpltCallback != NULL)
  9288. 800447e: 687b ldr r3, [r7, #4]
  9289. 8004480: 6c1b ldr r3, [r3, #64] @ 0x40
  9290. 8004482: 2b00 cmp r3, #0
  9291. 8004484: d003 beq.n 800448e <HAL_DMA_IRQHandler+0x5c2>
  9292. {
  9293. /* Half transfer callback */
  9294. hdma->XferHalfCpltCallback(hdma);
  9295. 8004486: 687b ldr r3, [r7, #4]
  9296. 8004488: 6c1b ldr r3, [r3, #64] @ 0x40
  9297. 800448a: 6878 ldr r0, [r7, #4]
  9298. 800448c: 4798 blx r3
  9299. }
  9300. }
  9301. }
  9302. }
  9303. /* Transfer Complete Interrupt management ***********************************/
  9304. if ((tmpisr_dma & (DMA_FLAG_TCIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  9305. 800448e: 687b ldr r3, [r7, #4]
  9306. 8004490: 6ddb ldr r3, [r3, #92] @ 0x5c
  9307. 8004492: f003 031f and.w r3, r3, #31
  9308. 8004496: 2220 movs r2, #32
  9309. 8004498: 409a lsls r2, r3
  9310. 800449a: 69bb ldr r3, [r7, #24]
  9311. 800449c: 4013 ands r3, r2
  9312. 800449e: 2b00 cmp r3, #0
  9313. 80044a0: f000 8110 beq.w 80046c4 <HAL_DMA_IRQHandler+0x7f8>
  9314. {
  9315. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TC) != 0U)
  9316. 80044a4: 687b ldr r3, [r7, #4]
  9317. 80044a6: 681b ldr r3, [r3, #0]
  9318. 80044a8: 4a2c ldr r2, [pc, #176] @ (800455c <HAL_DMA_IRQHandler+0x690>)
  9319. 80044aa: 4293 cmp r3, r2
  9320. 80044ac: d04a beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9321. 80044ae: 687b ldr r3, [r7, #4]
  9322. 80044b0: 681b ldr r3, [r3, #0]
  9323. 80044b2: 4a2b ldr r2, [pc, #172] @ (8004560 <HAL_DMA_IRQHandler+0x694>)
  9324. 80044b4: 4293 cmp r3, r2
  9325. 80044b6: d045 beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9326. 80044b8: 687b ldr r3, [r7, #4]
  9327. 80044ba: 681b ldr r3, [r3, #0]
  9328. 80044bc: 4a29 ldr r2, [pc, #164] @ (8004564 <HAL_DMA_IRQHandler+0x698>)
  9329. 80044be: 4293 cmp r3, r2
  9330. 80044c0: d040 beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9331. 80044c2: 687b ldr r3, [r7, #4]
  9332. 80044c4: 681b ldr r3, [r3, #0]
  9333. 80044c6: 4a28 ldr r2, [pc, #160] @ (8004568 <HAL_DMA_IRQHandler+0x69c>)
  9334. 80044c8: 4293 cmp r3, r2
  9335. 80044ca: d03b beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9336. 80044cc: 687b ldr r3, [r7, #4]
  9337. 80044ce: 681b ldr r3, [r3, #0]
  9338. 80044d0: 4a26 ldr r2, [pc, #152] @ (800456c <HAL_DMA_IRQHandler+0x6a0>)
  9339. 80044d2: 4293 cmp r3, r2
  9340. 80044d4: d036 beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9341. 80044d6: 687b ldr r3, [r7, #4]
  9342. 80044d8: 681b ldr r3, [r3, #0]
  9343. 80044da: 4a25 ldr r2, [pc, #148] @ (8004570 <HAL_DMA_IRQHandler+0x6a4>)
  9344. 80044dc: 4293 cmp r3, r2
  9345. 80044de: d031 beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9346. 80044e0: 687b ldr r3, [r7, #4]
  9347. 80044e2: 681b ldr r3, [r3, #0]
  9348. 80044e4: 4a23 ldr r2, [pc, #140] @ (8004574 <HAL_DMA_IRQHandler+0x6a8>)
  9349. 80044e6: 4293 cmp r3, r2
  9350. 80044e8: d02c beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9351. 80044ea: 687b ldr r3, [r7, #4]
  9352. 80044ec: 681b ldr r3, [r3, #0]
  9353. 80044ee: 4a22 ldr r2, [pc, #136] @ (8004578 <HAL_DMA_IRQHandler+0x6ac>)
  9354. 80044f0: 4293 cmp r3, r2
  9355. 80044f2: d027 beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9356. 80044f4: 687b ldr r3, [r7, #4]
  9357. 80044f6: 681b ldr r3, [r3, #0]
  9358. 80044f8: 4a20 ldr r2, [pc, #128] @ (800457c <HAL_DMA_IRQHandler+0x6b0>)
  9359. 80044fa: 4293 cmp r3, r2
  9360. 80044fc: d022 beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9361. 80044fe: 687b ldr r3, [r7, #4]
  9362. 8004500: 681b ldr r3, [r3, #0]
  9363. 8004502: 4a1f ldr r2, [pc, #124] @ (8004580 <HAL_DMA_IRQHandler+0x6b4>)
  9364. 8004504: 4293 cmp r3, r2
  9365. 8004506: d01d beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9366. 8004508: 687b ldr r3, [r7, #4]
  9367. 800450a: 681b ldr r3, [r3, #0]
  9368. 800450c: 4a1d ldr r2, [pc, #116] @ (8004584 <HAL_DMA_IRQHandler+0x6b8>)
  9369. 800450e: 4293 cmp r3, r2
  9370. 8004510: d018 beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9371. 8004512: 687b ldr r3, [r7, #4]
  9372. 8004514: 681b ldr r3, [r3, #0]
  9373. 8004516: 4a1c ldr r2, [pc, #112] @ (8004588 <HAL_DMA_IRQHandler+0x6bc>)
  9374. 8004518: 4293 cmp r3, r2
  9375. 800451a: d013 beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9376. 800451c: 687b ldr r3, [r7, #4]
  9377. 800451e: 681b ldr r3, [r3, #0]
  9378. 8004520: 4a1a ldr r2, [pc, #104] @ (800458c <HAL_DMA_IRQHandler+0x6c0>)
  9379. 8004522: 4293 cmp r3, r2
  9380. 8004524: d00e beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9381. 8004526: 687b ldr r3, [r7, #4]
  9382. 8004528: 681b ldr r3, [r3, #0]
  9383. 800452a: 4a19 ldr r2, [pc, #100] @ (8004590 <HAL_DMA_IRQHandler+0x6c4>)
  9384. 800452c: 4293 cmp r3, r2
  9385. 800452e: d009 beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9386. 8004530: 687b ldr r3, [r7, #4]
  9387. 8004532: 681b ldr r3, [r3, #0]
  9388. 8004534: 4a17 ldr r2, [pc, #92] @ (8004594 <HAL_DMA_IRQHandler+0x6c8>)
  9389. 8004536: 4293 cmp r3, r2
  9390. 8004538: d004 beq.n 8004544 <HAL_DMA_IRQHandler+0x678>
  9391. 800453a: 687b ldr r3, [r7, #4]
  9392. 800453c: 681b ldr r3, [r3, #0]
  9393. 800453e: 4a16 ldr r2, [pc, #88] @ (8004598 <HAL_DMA_IRQHandler+0x6cc>)
  9394. 8004540: 4293 cmp r3, r2
  9395. 8004542: d12b bne.n 800459c <HAL_DMA_IRQHandler+0x6d0>
  9396. 8004544: 687b ldr r3, [r7, #4]
  9397. 8004546: 681b ldr r3, [r3, #0]
  9398. 8004548: 681b ldr r3, [r3, #0]
  9399. 800454a: f003 0310 and.w r3, r3, #16
  9400. 800454e: 2b00 cmp r3, #0
  9401. 8004550: bf14 ite ne
  9402. 8004552: 2301 movne r3, #1
  9403. 8004554: 2300 moveq r3, #0
  9404. 8004556: b2db uxtb r3, r3
  9405. 8004558: e02a b.n 80045b0 <HAL_DMA_IRQHandler+0x6e4>
  9406. 800455a: bf00 nop
  9407. 800455c: 40020010 .word 0x40020010
  9408. 8004560: 40020028 .word 0x40020028
  9409. 8004564: 40020040 .word 0x40020040
  9410. 8004568: 40020058 .word 0x40020058
  9411. 800456c: 40020070 .word 0x40020070
  9412. 8004570: 40020088 .word 0x40020088
  9413. 8004574: 400200a0 .word 0x400200a0
  9414. 8004578: 400200b8 .word 0x400200b8
  9415. 800457c: 40020410 .word 0x40020410
  9416. 8004580: 40020428 .word 0x40020428
  9417. 8004584: 40020440 .word 0x40020440
  9418. 8004588: 40020458 .word 0x40020458
  9419. 800458c: 40020470 .word 0x40020470
  9420. 8004590: 40020488 .word 0x40020488
  9421. 8004594: 400204a0 .word 0x400204a0
  9422. 8004598: 400204b8 .word 0x400204b8
  9423. 800459c: 687b ldr r3, [r7, #4]
  9424. 800459e: 681b ldr r3, [r3, #0]
  9425. 80045a0: 681b ldr r3, [r3, #0]
  9426. 80045a2: f003 0302 and.w r3, r3, #2
  9427. 80045a6: 2b00 cmp r3, #0
  9428. 80045a8: bf14 ite ne
  9429. 80045aa: 2301 movne r3, #1
  9430. 80045ac: 2300 moveq r3, #0
  9431. 80045ae: b2db uxtb r3, r3
  9432. 80045b0: 2b00 cmp r3, #0
  9433. 80045b2: f000 8087 beq.w 80046c4 <HAL_DMA_IRQHandler+0x7f8>
  9434. {
  9435. /* Clear the transfer complete flag */
  9436. regs_dma->IFCR = DMA_FLAG_TCIF0_4 << (hdma->StreamIndex & 0x1FU);
  9437. 80045b6: 687b ldr r3, [r7, #4]
  9438. 80045b8: 6ddb ldr r3, [r3, #92] @ 0x5c
  9439. 80045ba: f003 031f and.w r3, r3, #31
  9440. 80045be: 2220 movs r2, #32
  9441. 80045c0: 409a lsls r2, r3
  9442. 80045c2: 6a3b ldr r3, [r7, #32]
  9443. 80045c4: 609a str r2, [r3, #8]
  9444. if(HAL_DMA_STATE_ABORT == hdma->State)
  9445. 80045c6: 687b ldr r3, [r7, #4]
  9446. 80045c8: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  9447. 80045cc: b2db uxtb r3, r3
  9448. 80045ce: 2b04 cmp r3, #4
  9449. 80045d0: d139 bne.n 8004646 <HAL_DMA_IRQHandler+0x77a>
  9450. {
  9451. /* Disable all the transfer interrupts */
  9452. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME);
  9453. 80045d2: 687b ldr r3, [r7, #4]
  9454. 80045d4: 681b ldr r3, [r3, #0]
  9455. 80045d6: 681a ldr r2, [r3, #0]
  9456. 80045d8: 687b ldr r3, [r7, #4]
  9457. 80045da: 681b ldr r3, [r3, #0]
  9458. 80045dc: f022 0216 bic.w r2, r2, #22
  9459. 80045e0: 601a str r2, [r3, #0]
  9460. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR &= ~(DMA_IT_FE);
  9461. 80045e2: 687b ldr r3, [r7, #4]
  9462. 80045e4: 681b ldr r3, [r3, #0]
  9463. 80045e6: 695a ldr r2, [r3, #20]
  9464. 80045e8: 687b ldr r3, [r7, #4]
  9465. 80045ea: 681b ldr r3, [r3, #0]
  9466. 80045ec: f022 0280 bic.w r2, r2, #128 @ 0x80
  9467. 80045f0: 615a str r2, [r3, #20]
  9468. if((hdma->XferHalfCpltCallback != NULL) || (hdma->XferM1HalfCpltCallback != NULL))
  9469. 80045f2: 687b ldr r3, [r7, #4]
  9470. 80045f4: 6c1b ldr r3, [r3, #64] @ 0x40
  9471. 80045f6: 2b00 cmp r3, #0
  9472. 80045f8: d103 bne.n 8004602 <HAL_DMA_IRQHandler+0x736>
  9473. 80045fa: 687b ldr r3, [r7, #4]
  9474. 80045fc: 6c9b ldr r3, [r3, #72] @ 0x48
  9475. 80045fe: 2b00 cmp r3, #0
  9476. 8004600: d007 beq.n 8004612 <HAL_DMA_IRQHandler+0x746>
  9477. {
  9478. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_HT);
  9479. 8004602: 687b ldr r3, [r7, #4]
  9480. 8004604: 681b ldr r3, [r3, #0]
  9481. 8004606: 681a ldr r2, [r3, #0]
  9482. 8004608: 687b ldr r3, [r7, #4]
  9483. 800460a: 681b ldr r3, [r3, #0]
  9484. 800460c: f022 0208 bic.w r2, r2, #8
  9485. 8004610: 601a str r2, [r3, #0]
  9486. }
  9487. /* Clear all interrupt flags at correct offset within the register */
  9488. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  9489. 8004612: 687b ldr r3, [r7, #4]
  9490. 8004614: 6ddb ldr r3, [r3, #92] @ 0x5c
  9491. 8004616: f003 031f and.w r3, r3, #31
  9492. 800461a: 223f movs r2, #63 @ 0x3f
  9493. 800461c: 409a lsls r2, r3
  9494. 800461e: 6a3b ldr r3, [r7, #32]
  9495. 8004620: 609a str r2, [r3, #8]
  9496. /* Change the DMA state */
  9497. hdma->State = HAL_DMA_STATE_READY;
  9498. 8004622: 687b ldr r3, [r7, #4]
  9499. 8004624: 2201 movs r2, #1
  9500. 8004626: f883 2035 strb.w r2, [r3, #53] @ 0x35
  9501. /* Process Unlocked */
  9502. __HAL_UNLOCK(hdma);
  9503. 800462a: 687b ldr r3, [r7, #4]
  9504. 800462c: 2200 movs r2, #0
  9505. 800462e: f883 2034 strb.w r2, [r3, #52] @ 0x34
  9506. if(hdma->XferAbortCallback != NULL)
  9507. 8004632: 687b ldr r3, [r7, #4]
  9508. 8004634: 6d1b ldr r3, [r3, #80] @ 0x50
  9509. 8004636: 2b00 cmp r3, #0
  9510. 8004638: f000 834a beq.w 8004cd0 <HAL_DMA_IRQHandler+0xe04>
  9511. {
  9512. hdma->XferAbortCallback(hdma);
  9513. 800463c: 687b ldr r3, [r7, #4]
  9514. 800463e: 6d1b ldr r3, [r3, #80] @ 0x50
  9515. 8004640: 6878 ldr r0, [r7, #4]
  9516. 8004642: 4798 blx r3
  9517. }
  9518. return;
  9519. 8004644: e344 b.n 8004cd0 <HAL_DMA_IRQHandler+0xe04>
  9520. }
  9521. if(((((DMA_Stream_TypeDef *)hdma->Instance)->CR) & (uint32_t)(DMA_SxCR_DBM)) != 0U)
  9522. 8004646: 687b ldr r3, [r7, #4]
  9523. 8004648: 681b ldr r3, [r3, #0]
  9524. 800464a: 681b ldr r3, [r3, #0]
  9525. 800464c: f403 2380 and.w r3, r3, #262144 @ 0x40000
  9526. 8004650: 2b00 cmp r3, #0
  9527. 8004652: d018 beq.n 8004686 <HAL_DMA_IRQHandler+0x7ba>
  9528. {
  9529. /* Current memory buffer used is Memory 0 */
  9530. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CT) == 0U)
  9531. 8004654: 687b ldr r3, [r7, #4]
  9532. 8004656: 681b ldr r3, [r3, #0]
  9533. 8004658: 681b ldr r3, [r3, #0]
  9534. 800465a: f403 2300 and.w r3, r3, #524288 @ 0x80000
  9535. 800465e: 2b00 cmp r3, #0
  9536. 8004660: d108 bne.n 8004674 <HAL_DMA_IRQHandler+0x7a8>
  9537. {
  9538. if(hdma->XferM1CpltCallback != NULL)
  9539. 8004662: 687b ldr r3, [r7, #4]
  9540. 8004664: 6c5b ldr r3, [r3, #68] @ 0x44
  9541. 8004666: 2b00 cmp r3, #0
  9542. 8004668: d02c beq.n 80046c4 <HAL_DMA_IRQHandler+0x7f8>
  9543. {
  9544. /* Transfer complete Callback for memory1 */
  9545. hdma->XferM1CpltCallback(hdma);
  9546. 800466a: 687b ldr r3, [r7, #4]
  9547. 800466c: 6c5b ldr r3, [r3, #68] @ 0x44
  9548. 800466e: 6878 ldr r0, [r7, #4]
  9549. 8004670: 4798 blx r3
  9550. 8004672: e027 b.n 80046c4 <HAL_DMA_IRQHandler+0x7f8>
  9551. }
  9552. }
  9553. /* Current memory buffer used is Memory 1 */
  9554. else
  9555. {
  9556. if(hdma->XferCpltCallback != NULL)
  9557. 8004674: 687b ldr r3, [r7, #4]
  9558. 8004676: 6bdb ldr r3, [r3, #60] @ 0x3c
  9559. 8004678: 2b00 cmp r3, #0
  9560. 800467a: d023 beq.n 80046c4 <HAL_DMA_IRQHandler+0x7f8>
  9561. {
  9562. /* Transfer complete Callback for memory0 */
  9563. hdma->XferCpltCallback(hdma);
  9564. 800467c: 687b ldr r3, [r7, #4]
  9565. 800467e: 6bdb ldr r3, [r3, #60] @ 0x3c
  9566. 8004680: 6878 ldr r0, [r7, #4]
  9567. 8004682: 4798 blx r3
  9568. 8004684: e01e b.n 80046c4 <HAL_DMA_IRQHandler+0x7f8>
  9569. }
  9570. }
  9571. /* Disable the transfer complete interrupt if the DMA mode is not CIRCULAR */
  9572. else
  9573. {
  9574. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CIRC) == 0U)
  9575. 8004686: 687b ldr r3, [r7, #4]
  9576. 8004688: 681b ldr r3, [r3, #0]
  9577. 800468a: 681b ldr r3, [r3, #0]
  9578. 800468c: f403 7380 and.w r3, r3, #256 @ 0x100
  9579. 8004690: 2b00 cmp r3, #0
  9580. 8004692: d10f bne.n 80046b4 <HAL_DMA_IRQHandler+0x7e8>
  9581. {
  9582. /* Disable the transfer complete interrupt */
  9583. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC);
  9584. 8004694: 687b ldr r3, [r7, #4]
  9585. 8004696: 681b ldr r3, [r3, #0]
  9586. 8004698: 681a ldr r2, [r3, #0]
  9587. 800469a: 687b ldr r3, [r7, #4]
  9588. 800469c: 681b ldr r3, [r3, #0]
  9589. 800469e: f022 0210 bic.w r2, r2, #16
  9590. 80046a2: 601a str r2, [r3, #0]
  9591. /* Change the DMA state */
  9592. hdma->State = HAL_DMA_STATE_READY;
  9593. 80046a4: 687b ldr r3, [r7, #4]
  9594. 80046a6: 2201 movs r2, #1
  9595. 80046a8: f883 2035 strb.w r2, [r3, #53] @ 0x35
  9596. /* Process Unlocked */
  9597. __HAL_UNLOCK(hdma);
  9598. 80046ac: 687b ldr r3, [r7, #4]
  9599. 80046ae: 2200 movs r2, #0
  9600. 80046b0: f883 2034 strb.w r2, [r3, #52] @ 0x34
  9601. }
  9602. if(hdma->XferCpltCallback != NULL)
  9603. 80046b4: 687b ldr r3, [r7, #4]
  9604. 80046b6: 6bdb ldr r3, [r3, #60] @ 0x3c
  9605. 80046b8: 2b00 cmp r3, #0
  9606. 80046ba: d003 beq.n 80046c4 <HAL_DMA_IRQHandler+0x7f8>
  9607. {
  9608. /* Transfer complete callback */
  9609. hdma->XferCpltCallback(hdma);
  9610. 80046bc: 687b ldr r3, [r7, #4]
  9611. 80046be: 6bdb ldr r3, [r3, #60] @ 0x3c
  9612. 80046c0: 6878 ldr r0, [r7, #4]
  9613. 80046c2: 4798 blx r3
  9614. }
  9615. }
  9616. }
  9617. /* manage error case */
  9618. if(hdma->ErrorCode != HAL_DMA_ERROR_NONE)
  9619. 80046c4: 687b ldr r3, [r7, #4]
  9620. 80046c6: 6d5b ldr r3, [r3, #84] @ 0x54
  9621. 80046c8: 2b00 cmp r3, #0
  9622. 80046ca: f000 8306 beq.w 8004cda <HAL_DMA_IRQHandler+0xe0e>
  9623. {
  9624. if((hdma->ErrorCode & HAL_DMA_ERROR_TE) != 0U)
  9625. 80046ce: 687b ldr r3, [r7, #4]
  9626. 80046d0: 6d5b ldr r3, [r3, #84] @ 0x54
  9627. 80046d2: f003 0301 and.w r3, r3, #1
  9628. 80046d6: 2b00 cmp r3, #0
  9629. 80046d8: f000 8088 beq.w 80047ec <HAL_DMA_IRQHandler+0x920>
  9630. {
  9631. hdma->State = HAL_DMA_STATE_ABORT;
  9632. 80046dc: 687b ldr r3, [r7, #4]
  9633. 80046de: 2204 movs r2, #4
  9634. 80046e0: f883 2035 strb.w r2, [r3, #53] @ 0x35
  9635. /* Disable the stream */
  9636. __HAL_DMA_DISABLE(hdma);
  9637. 80046e4: 687b ldr r3, [r7, #4]
  9638. 80046e6: 681b ldr r3, [r3, #0]
  9639. 80046e8: 4a7a ldr r2, [pc, #488] @ (80048d4 <HAL_DMA_IRQHandler+0xa08>)
  9640. 80046ea: 4293 cmp r3, r2
  9641. 80046ec: d04a beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9642. 80046ee: 687b ldr r3, [r7, #4]
  9643. 80046f0: 681b ldr r3, [r3, #0]
  9644. 80046f2: 4a79 ldr r2, [pc, #484] @ (80048d8 <HAL_DMA_IRQHandler+0xa0c>)
  9645. 80046f4: 4293 cmp r3, r2
  9646. 80046f6: d045 beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9647. 80046f8: 687b ldr r3, [r7, #4]
  9648. 80046fa: 681b ldr r3, [r3, #0]
  9649. 80046fc: 4a77 ldr r2, [pc, #476] @ (80048dc <HAL_DMA_IRQHandler+0xa10>)
  9650. 80046fe: 4293 cmp r3, r2
  9651. 8004700: d040 beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9652. 8004702: 687b ldr r3, [r7, #4]
  9653. 8004704: 681b ldr r3, [r3, #0]
  9654. 8004706: 4a76 ldr r2, [pc, #472] @ (80048e0 <HAL_DMA_IRQHandler+0xa14>)
  9655. 8004708: 4293 cmp r3, r2
  9656. 800470a: d03b beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9657. 800470c: 687b ldr r3, [r7, #4]
  9658. 800470e: 681b ldr r3, [r3, #0]
  9659. 8004710: 4a74 ldr r2, [pc, #464] @ (80048e4 <HAL_DMA_IRQHandler+0xa18>)
  9660. 8004712: 4293 cmp r3, r2
  9661. 8004714: d036 beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9662. 8004716: 687b ldr r3, [r7, #4]
  9663. 8004718: 681b ldr r3, [r3, #0]
  9664. 800471a: 4a73 ldr r2, [pc, #460] @ (80048e8 <HAL_DMA_IRQHandler+0xa1c>)
  9665. 800471c: 4293 cmp r3, r2
  9666. 800471e: d031 beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9667. 8004720: 687b ldr r3, [r7, #4]
  9668. 8004722: 681b ldr r3, [r3, #0]
  9669. 8004724: 4a71 ldr r2, [pc, #452] @ (80048ec <HAL_DMA_IRQHandler+0xa20>)
  9670. 8004726: 4293 cmp r3, r2
  9671. 8004728: d02c beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9672. 800472a: 687b ldr r3, [r7, #4]
  9673. 800472c: 681b ldr r3, [r3, #0]
  9674. 800472e: 4a70 ldr r2, [pc, #448] @ (80048f0 <HAL_DMA_IRQHandler+0xa24>)
  9675. 8004730: 4293 cmp r3, r2
  9676. 8004732: d027 beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9677. 8004734: 687b ldr r3, [r7, #4]
  9678. 8004736: 681b ldr r3, [r3, #0]
  9679. 8004738: 4a6e ldr r2, [pc, #440] @ (80048f4 <HAL_DMA_IRQHandler+0xa28>)
  9680. 800473a: 4293 cmp r3, r2
  9681. 800473c: d022 beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9682. 800473e: 687b ldr r3, [r7, #4]
  9683. 8004740: 681b ldr r3, [r3, #0]
  9684. 8004742: 4a6d ldr r2, [pc, #436] @ (80048f8 <HAL_DMA_IRQHandler+0xa2c>)
  9685. 8004744: 4293 cmp r3, r2
  9686. 8004746: d01d beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9687. 8004748: 687b ldr r3, [r7, #4]
  9688. 800474a: 681b ldr r3, [r3, #0]
  9689. 800474c: 4a6b ldr r2, [pc, #428] @ (80048fc <HAL_DMA_IRQHandler+0xa30>)
  9690. 800474e: 4293 cmp r3, r2
  9691. 8004750: d018 beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9692. 8004752: 687b ldr r3, [r7, #4]
  9693. 8004754: 681b ldr r3, [r3, #0]
  9694. 8004756: 4a6a ldr r2, [pc, #424] @ (8004900 <HAL_DMA_IRQHandler+0xa34>)
  9695. 8004758: 4293 cmp r3, r2
  9696. 800475a: d013 beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9697. 800475c: 687b ldr r3, [r7, #4]
  9698. 800475e: 681b ldr r3, [r3, #0]
  9699. 8004760: 4a68 ldr r2, [pc, #416] @ (8004904 <HAL_DMA_IRQHandler+0xa38>)
  9700. 8004762: 4293 cmp r3, r2
  9701. 8004764: d00e beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9702. 8004766: 687b ldr r3, [r7, #4]
  9703. 8004768: 681b ldr r3, [r3, #0]
  9704. 800476a: 4a67 ldr r2, [pc, #412] @ (8004908 <HAL_DMA_IRQHandler+0xa3c>)
  9705. 800476c: 4293 cmp r3, r2
  9706. 800476e: d009 beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9707. 8004770: 687b ldr r3, [r7, #4]
  9708. 8004772: 681b ldr r3, [r3, #0]
  9709. 8004774: 4a65 ldr r2, [pc, #404] @ (800490c <HAL_DMA_IRQHandler+0xa40>)
  9710. 8004776: 4293 cmp r3, r2
  9711. 8004778: d004 beq.n 8004784 <HAL_DMA_IRQHandler+0x8b8>
  9712. 800477a: 687b ldr r3, [r7, #4]
  9713. 800477c: 681b ldr r3, [r3, #0]
  9714. 800477e: 4a64 ldr r2, [pc, #400] @ (8004910 <HAL_DMA_IRQHandler+0xa44>)
  9715. 8004780: 4293 cmp r3, r2
  9716. 8004782: d108 bne.n 8004796 <HAL_DMA_IRQHandler+0x8ca>
  9717. 8004784: 687b ldr r3, [r7, #4]
  9718. 8004786: 681b ldr r3, [r3, #0]
  9719. 8004788: 681a ldr r2, [r3, #0]
  9720. 800478a: 687b ldr r3, [r7, #4]
  9721. 800478c: 681b ldr r3, [r3, #0]
  9722. 800478e: f022 0201 bic.w r2, r2, #1
  9723. 8004792: 601a str r2, [r3, #0]
  9724. 8004794: e007 b.n 80047a6 <HAL_DMA_IRQHandler+0x8da>
  9725. 8004796: 687b ldr r3, [r7, #4]
  9726. 8004798: 681b ldr r3, [r3, #0]
  9727. 800479a: 681a ldr r2, [r3, #0]
  9728. 800479c: 687b ldr r3, [r7, #4]
  9729. 800479e: 681b ldr r3, [r3, #0]
  9730. 80047a0: f022 0201 bic.w r2, r2, #1
  9731. 80047a4: 601a str r2, [r3, #0]
  9732. do
  9733. {
  9734. if (++count > timeout)
  9735. 80047a6: 68fb ldr r3, [r7, #12]
  9736. 80047a8: 3301 adds r3, #1
  9737. 80047aa: 60fb str r3, [r7, #12]
  9738. 80047ac: 6a7a ldr r2, [r7, #36] @ 0x24
  9739. 80047ae: 429a cmp r2, r3
  9740. 80047b0: d307 bcc.n 80047c2 <HAL_DMA_IRQHandler+0x8f6>
  9741. {
  9742. break;
  9743. }
  9744. }
  9745. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U);
  9746. 80047b2: 687b ldr r3, [r7, #4]
  9747. 80047b4: 681b ldr r3, [r3, #0]
  9748. 80047b6: 681b ldr r3, [r3, #0]
  9749. 80047b8: f003 0301 and.w r3, r3, #1
  9750. 80047bc: 2b00 cmp r3, #0
  9751. 80047be: d1f2 bne.n 80047a6 <HAL_DMA_IRQHandler+0x8da>
  9752. 80047c0: e000 b.n 80047c4 <HAL_DMA_IRQHandler+0x8f8>
  9753. break;
  9754. 80047c2: bf00 nop
  9755. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  9756. 80047c4: 687b ldr r3, [r7, #4]
  9757. 80047c6: 681b ldr r3, [r3, #0]
  9758. 80047c8: 681b ldr r3, [r3, #0]
  9759. 80047ca: f003 0301 and.w r3, r3, #1
  9760. 80047ce: 2b00 cmp r3, #0
  9761. 80047d0: d004 beq.n 80047dc <HAL_DMA_IRQHandler+0x910>
  9762. {
  9763. /* Change the DMA state to error if DMA disable fails */
  9764. hdma->State = HAL_DMA_STATE_ERROR;
  9765. 80047d2: 687b ldr r3, [r7, #4]
  9766. 80047d4: 2203 movs r2, #3
  9767. 80047d6: f883 2035 strb.w r2, [r3, #53] @ 0x35
  9768. 80047da: e003 b.n 80047e4 <HAL_DMA_IRQHandler+0x918>
  9769. }
  9770. else
  9771. {
  9772. /* Change the DMA state to Ready if DMA disable success */
  9773. hdma->State = HAL_DMA_STATE_READY;
  9774. 80047dc: 687b ldr r3, [r7, #4]
  9775. 80047de: 2201 movs r2, #1
  9776. 80047e0: f883 2035 strb.w r2, [r3, #53] @ 0x35
  9777. }
  9778. /* Process Unlocked */
  9779. __HAL_UNLOCK(hdma);
  9780. 80047e4: 687b ldr r3, [r7, #4]
  9781. 80047e6: 2200 movs r2, #0
  9782. 80047e8: f883 2034 strb.w r2, [r3, #52] @ 0x34
  9783. }
  9784. if(hdma->XferErrorCallback != NULL)
  9785. 80047ec: 687b ldr r3, [r7, #4]
  9786. 80047ee: 6cdb ldr r3, [r3, #76] @ 0x4c
  9787. 80047f0: 2b00 cmp r3, #0
  9788. 80047f2: f000 8272 beq.w 8004cda <HAL_DMA_IRQHandler+0xe0e>
  9789. {
  9790. /* Transfer error callback */
  9791. hdma->XferErrorCallback(hdma);
  9792. 80047f6: 687b ldr r3, [r7, #4]
  9793. 80047f8: 6cdb ldr r3, [r3, #76] @ 0x4c
  9794. 80047fa: 6878 ldr r0, [r7, #4]
  9795. 80047fc: 4798 blx r3
  9796. 80047fe: e26c b.n 8004cda <HAL_DMA_IRQHandler+0xe0e>
  9797. }
  9798. }
  9799. }
  9800. else if(IS_BDMA_CHANNEL_INSTANCE(hdma->Instance) != 0U) /* BDMA instance(s) */
  9801. 8004800: 687b ldr r3, [r7, #4]
  9802. 8004802: 681b ldr r3, [r3, #0]
  9803. 8004804: 4a43 ldr r2, [pc, #268] @ (8004914 <HAL_DMA_IRQHandler+0xa48>)
  9804. 8004806: 4293 cmp r3, r2
  9805. 8004808: d022 beq.n 8004850 <HAL_DMA_IRQHandler+0x984>
  9806. 800480a: 687b ldr r3, [r7, #4]
  9807. 800480c: 681b ldr r3, [r3, #0]
  9808. 800480e: 4a42 ldr r2, [pc, #264] @ (8004918 <HAL_DMA_IRQHandler+0xa4c>)
  9809. 8004810: 4293 cmp r3, r2
  9810. 8004812: d01d beq.n 8004850 <HAL_DMA_IRQHandler+0x984>
  9811. 8004814: 687b ldr r3, [r7, #4]
  9812. 8004816: 681b ldr r3, [r3, #0]
  9813. 8004818: 4a40 ldr r2, [pc, #256] @ (800491c <HAL_DMA_IRQHandler+0xa50>)
  9814. 800481a: 4293 cmp r3, r2
  9815. 800481c: d018 beq.n 8004850 <HAL_DMA_IRQHandler+0x984>
  9816. 800481e: 687b ldr r3, [r7, #4]
  9817. 8004820: 681b ldr r3, [r3, #0]
  9818. 8004822: 4a3f ldr r2, [pc, #252] @ (8004920 <HAL_DMA_IRQHandler+0xa54>)
  9819. 8004824: 4293 cmp r3, r2
  9820. 8004826: d013 beq.n 8004850 <HAL_DMA_IRQHandler+0x984>
  9821. 8004828: 687b ldr r3, [r7, #4]
  9822. 800482a: 681b ldr r3, [r3, #0]
  9823. 800482c: 4a3d ldr r2, [pc, #244] @ (8004924 <HAL_DMA_IRQHandler+0xa58>)
  9824. 800482e: 4293 cmp r3, r2
  9825. 8004830: d00e beq.n 8004850 <HAL_DMA_IRQHandler+0x984>
  9826. 8004832: 687b ldr r3, [r7, #4]
  9827. 8004834: 681b ldr r3, [r3, #0]
  9828. 8004836: 4a3c ldr r2, [pc, #240] @ (8004928 <HAL_DMA_IRQHandler+0xa5c>)
  9829. 8004838: 4293 cmp r3, r2
  9830. 800483a: d009 beq.n 8004850 <HAL_DMA_IRQHandler+0x984>
  9831. 800483c: 687b ldr r3, [r7, #4]
  9832. 800483e: 681b ldr r3, [r3, #0]
  9833. 8004840: 4a3a ldr r2, [pc, #232] @ (800492c <HAL_DMA_IRQHandler+0xa60>)
  9834. 8004842: 4293 cmp r3, r2
  9835. 8004844: d004 beq.n 8004850 <HAL_DMA_IRQHandler+0x984>
  9836. 8004846: 687b ldr r3, [r7, #4]
  9837. 8004848: 681b ldr r3, [r3, #0]
  9838. 800484a: 4a39 ldr r2, [pc, #228] @ (8004930 <HAL_DMA_IRQHandler+0xa64>)
  9839. 800484c: 4293 cmp r3, r2
  9840. 800484e: d101 bne.n 8004854 <HAL_DMA_IRQHandler+0x988>
  9841. 8004850: 2301 movs r3, #1
  9842. 8004852: e000 b.n 8004856 <HAL_DMA_IRQHandler+0x98a>
  9843. 8004854: 2300 movs r3, #0
  9844. 8004856: 2b00 cmp r3, #0
  9845. 8004858: f000 823f beq.w 8004cda <HAL_DMA_IRQHandler+0xe0e>
  9846. {
  9847. ccr_reg = (((BDMA_Channel_TypeDef *)hdma->Instance)->CCR);
  9848. 800485c: 687b ldr r3, [r7, #4]
  9849. 800485e: 681b ldr r3, [r3, #0]
  9850. 8004860: 681b ldr r3, [r3, #0]
  9851. 8004862: 613b str r3, [r7, #16]
  9852. /* Half Transfer Complete Interrupt management ******************************/
  9853. if (((tmpisr_bdma & (BDMA_FLAG_HT0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_HTIE) != 0U))
  9854. 8004864: 687b ldr r3, [r7, #4]
  9855. 8004866: 6ddb ldr r3, [r3, #92] @ 0x5c
  9856. 8004868: f003 031f and.w r3, r3, #31
  9857. 800486c: 2204 movs r2, #4
  9858. 800486e: 409a lsls r2, r3
  9859. 8004870: 697b ldr r3, [r7, #20]
  9860. 8004872: 4013 ands r3, r2
  9861. 8004874: 2b00 cmp r3, #0
  9862. 8004876: f000 80cd beq.w 8004a14 <HAL_DMA_IRQHandler+0xb48>
  9863. 800487a: 693b ldr r3, [r7, #16]
  9864. 800487c: f003 0304 and.w r3, r3, #4
  9865. 8004880: 2b00 cmp r3, #0
  9866. 8004882: f000 80c7 beq.w 8004a14 <HAL_DMA_IRQHandler+0xb48>
  9867. {
  9868. /* Clear the half transfer complete flag */
  9869. regs_bdma->IFCR = (BDMA_ISR_HTIF0 << (hdma->StreamIndex & 0x1FU));
  9870. 8004886: 687b ldr r3, [r7, #4]
  9871. 8004888: 6ddb ldr r3, [r3, #92] @ 0x5c
  9872. 800488a: f003 031f and.w r3, r3, #31
  9873. 800488e: 2204 movs r2, #4
  9874. 8004890: 409a lsls r2, r3
  9875. 8004892: 69fb ldr r3, [r7, #28]
  9876. 8004894: 605a str r2, [r3, #4]
  9877. /* Disable the transfer complete interrupt if the DMA mode is Double Buffering */
  9878. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  9879. 8004896: 693b ldr r3, [r7, #16]
  9880. 8004898: f403 4300 and.w r3, r3, #32768 @ 0x8000
  9881. 800489c: 2b00 cmp r3, #0
  9882. 800489e: d049 beq.n 8004934 <HAL_DMA_IRQHandler+0xa68>
  9883. {
  9884. /* Current memory buffer used is Memory 0 */
  9885. if((ccr_reg & BDMA_CCR_CT) == 0U)
  9886. 80048a0: 693b ldr r3, [r7, #16]
  9887. 80048a2: f403 3380 and.w r3, r3, #65536 @ 0x10000
  9888. 80048a6: 2b00 cmp r3, #0
  9889. 80048a8: d109 bne.n 80048be <HAL_DMA_IRQHandler+0x9f2>
  9890. {
  9891. if(hdma->XferM1HalfCpltCallback != NULL)
  9892. 80048aa: 687b ldr r3, [r7, #4]
  9893. 80048ac: 6c9b ldr r3, [r3, #72] @ 0x48
  9894. 80048ae: 2b00 cmp r3, #0
  9895. 80048b0: f000 8210 beq.w 8004cd4 <HAL_DMA_IRQHandler+0xe08>
  9896. {
  9897. /* Half transfer Callback for Memory 1 */
  9898. hdma->XferM1HalfCpltCallback(hdma);
  9899. 80048b4: 687b ldr r3, [r7, #4]
  9900. 80048b6: 6c9b ldr r3, [r3, #72] @ 0x48
  9901. 80048b8: 6878 ldr r0, [r7, #4]
  9902. 80048ba: 4798 blx r3
  9903. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  9904. 80048bc: e20a b.n 8004cd4 <HAL_DMA_IRQHandler+0xe08>
  9905. }
  9906. }
  9907. /* Current memory buffer used is Memory 1 */
  9908. else
  9909. {
  9910. if(hdma->XferHalfCpltCallback != NULL)
  9911. 80048be: 687b ldr r3, [r7, #4]
  9912. 80048c0: 6c1b ldr r3, [r3, #64] @ 0x40
  9913. 80048c2: 2b00 cmp r3, #0
  9914. 80048c4: f000 8206 beq.w 8004cd4 <HAL_DMA_IRQHandler+0xe08>
  9915. {
  9916. /* Half transfer Callback for Memory 0 */
  9917. hdma->XferHalfCpltCallback(hdma);
  9918. 80048c8: 687b ldr r3, [r7, #4]
  9919. 80048ca: 6c1b ldr r3, [r3, #64] @ 0x40
  9920. 80048cc: 6878 ldr r0, [r7, #4]
  9921. 80048ce: 4798 blx r3
  9922. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  9923. 80048d0: e200 b.n 8004cd4 <HAL_DMA_IRQHandler+0xe08>
  9924. 80048d2: bf00 nop
  9925. 80048d4: 40020010 .word 0x40020010
  9926. 80048d8: 40020028 .word 0x40020028
  9927. 80048dc: 40020040 .word 0x40020040
  9928. 80048e0: 40020058 .word 0x40020058
  9929. 80048e4: 40020070 .word 0x40020070
  9930. 80048e8: 40020088 .word 0x40020088
  9931. 80048ec: 400200a0 .word 0x400200a0
  9932. 80048f0: 400200b8 .word 0x400200b8
  9933. 80048f4: 40020410 .word 0x40020410
  9934. 80048f8: 40020428 .word 0x40020428
  9935. 80048fc: 40020440 .word 0x40020440
  9936. 8004900: 40020458 .word 0x40020458
  9937. 8004904: 40020470 .word 0x40020470
  9938. 8004908: 40020488 .word 0x40020488
  9939. 800490c: 400204a0 .word 0x400204a0
  9940. 8004910: 400204b8 .word 0x400204b8
  9941. 8004914: 58025408 .word 0x58025408
  9942. 8004918: 5802541c .word 0x5802541c
  9943. 800491c: 58025430 .word 0x58025430
  9944. 8004920: 58025444 .word 0x58025444
  9945. 8004924: 58025458 .word 0x58025458
  9946. 8004928: 5802546c .word 0x5802546c
  9947. 800492c: 58025480 .word 0x58025480
  9948. 8004930: 58025494 .word 0x58025494
  9949. }
  9950. }
  9951. }
  9952. else
  9953. {
  9954. if((ccr_reg & BDMA_CCR_CIRC) == 0U)
  9955. 8004934: 693b ldr r3, [r7, #16]
  9956. 8004936: f003 0320 and.w r3, r3, #32
  9957. 800493a: 2b00 cmp r3, #0
  9958. 800493c: d160 bne.n 8004a00 <HAL_DMA_IRQHandler+0xb34>
  9959. {
  9960. /* Disable the half transfer interrupt */
  9961. __HAL_DMA_DISABLE_IT(hdma, DMA_IT_HT);
  9962. 800493e: 687b ldr r3, [r7, #4]
  9963. 8004940: 681b ldr r3, [r3, #0]
  9964. 8004942: 4a7f ldr r2, [pc, #508] @ (8004b40 <HAL_DMA_IRQHandler+0xc74>)
  9965. 8004944: 4293 cmp r3, r2
  9966. 8004946: d04a beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  9967. 8004948: 687b ldr r3, [r7, #4]
  9968. 800494a: 681b ldr r3, [r3, #0]
  9969. 800494c: 4a7d ldr r2, [pc, #500] @ (8004b44 <HAL_DMA_IRQHandler+0xc78>)
  9970. 800494e: 4293 cmp r3, r2
  9971. 8004950: d045 beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  9972. 8004952: 687b ldr r3, [r7, #4]
  9973. 8004954: 681b ldr r3, [r3, #0]
  9974. 8004956: 4a7c ldr r2, [pc, #496] @ (8004b48 <HAL_DMA_IRQHandler+0xc7c>)
  9975. 8004958: 4293 cmp r3, r2
  9976. 800495a: d040 beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  9977. 800495c: 687b ldr r3, [r7, #4]
  9978. 800495e: 681b ldr r3, [r3, #0]
  9979. 8004960: 4a7a ldr r2, [pc, #488] @ (8004b4c <HAL_DMA_IRQHandler+0xc80>)
  9980. 8004962: 4293 cmp r3, r2
  9981. 8004964: d03b beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  9982. 8004966: 687b ldr r3, [r7, #4]
  9983. 8004968: 681b ldr r3, [r3, #0]
  9984. 800496a: 4a79 ldr r2, [pc, #484] @ (8004b50 <HAL_DMA_IRQHandler+0xc84>)
  9985. 800496c: 4293 cmp r3, r2
  9986. 800496e: d036 beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  9987. 8004970: 687b ldr r3, [r7, #4]
  9988. 8004972: 681b ldr r3, [r3, #0]
  9989. 8004974: 4a77 ldr r2, [pc, #476] @ (8004b54 <HAL_DMA_IRQHandler+0xc88>)
  9990. 8004976: 4293 cmp r3, r2
  9991. 8004978: d031 beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  9992. 800497a: 687b ldr r3, [r7, #4]
  9993. 800497c: 681b ldr r3, [r3, #0]
  9994. 800497e: 4a76 ldr r2, [pc, #472] @ (8004b58 <HAL_DMA_IRQHandler+0xc8c>)
  9995. 8004980: 4293 cmp r3, r2
  9996. 8004982: d02c beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  9997. 8004984: 687b ldr r3, [r7, #4]
  9998. 8004986: 681b ldr r3, [r3, #0]
  9999. 8004988: 4a74 ldr r2, [pc, #464] @ (8004b5c <HAL_DMA_IRQHandler+0xc90>)
  10000. 800498a: 4293 cmp r3, r2
  10001. 800498c: d027 beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  10002. 800498e: 687b ldr r3, [r7, #4]
  10003. 8004990: 681b ldr r3, [r3, #0]
  10004. 8004992: 4a73 ldr r2, [pc, #460] @ (8004b60 <HAL_DMA_IRQHandler+0xc94>)
  10005. 8004994: 4293 cmp r3, r2
  10006. 8004996: d022 beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  10007. 8004998: 687b ldr r3, [r7, #4]
  10008. 800499a: 681b ldr r3, [r3, #0]
  10009. 800499c: 4a71 ldr r2, [pc, #452] @ (8004b64 <HAL_DMA_IRQHandler+0xc98>)
  10010. 800499e: 4293 cmp r3, r2
  10011. 80049a0: d01d beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  10012. 80049a2: 687b ldr r3, [r7, #4]
  10013. 80049a4: 681b ldr r3, [r3, #0]
  10014. 80049a6: 4a70 ldr r2, [pc, #448] @ (8004b68 <HAL_DMA_IRQHandler+0xc9c>)
  10015. 80049a8: 4293 cmp r3, r2
  10016. 80049aa: d018 beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  10017. 80049ac: 687b ldr r3, [r7, #4]
  10018. 80049ae: 681b ldr r3, [r3, #0]
  10019. 80049b0: 4a6e ldr r2, [pc, #440] @ (8004b6c <HAL_DMA_IRQHandler+0xca0>)
  10020. 80049b2: 4293 cmp r3, r2
  10021. 80049b4: d013 beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  10022. 80049b6: 687b ldr r3, [r7, #4]
  10023. 80049b8: 681b ldr r3, [r3, #0]
  10024. 80049ba: 4a6d ldr r2, [pc, #436] @ (8004b70 <HAL_DMA_IRQHandler+0xca4>)
  10025. 80049bc: 4293 cmp r3, r2
  10026. 80049be: d00e beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  10027. 80049c0: 687b ldr r3, [r7, #4]
  10028. 80049c2: 681b ldr r3, [r3, #0]
  10029. 80049c4: 4a6b ldr r2, [pc, #428] @ (8004b74 <HAL_DMA_IRQHandler+0xca8>)
  10030. 80049c6: 4293 cmp r3, r2
  10031. 80049c8: d009 beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  10032. 80049ca: 687b ldr r3, [r7, #4]
  10033. 80049cc: 681b ldr r3, [r3, #0]
  10034. 80049ce: 4a6a ldr r2, [pc, #424] @ (8004b78 <HAL_DMA_IRQHandler+0xcac>)
  10035. 80049d0: 4293 cmp r3, r2
  10036. 80049d2: d004 beq.n 80049de <HAL_DMA_IRQHandler+0xb12>
  10037. 80049d4: 687b ldr r3, [r7, #4]
  10038. 80049d6: 681b ldr r3, [r3, #0]
  10039. 80049d8: 4a68 ldr r2, [pc, #416] @ (8004b7c <HAL_DMA_IRQHandler+0xcb0>)
  10040. 80049da: 4293 cmp r3, r2
  10041. 80049dc: d108 bne.n 80049f0 <HAL_DMA_IRQHandler+0xb24>
  10042. 80049de: 687b ldr r3, [r7, #4]
  10043. 80049e0: 681b ldr r3, [r3, #0]
  10044. 80049e2: 681a ldr r2, [r3, #0]
  10045. 80049e4: 687b ldr r3, [r7, #4]
  10046. 80049e6: 681b ldr r3, [r3, #0]
  10047. 80049e8: f022 0208 bic.w r2, r2, #8
  10048. 80049ec: 601a str r2, [r3, #0]
  10049. 80049ee: e007 b.n 8004a00 <HAL_DMA_IRQHandler+0xb34>
  10050. 80049f0: 687b ldr r3, [r7, #4]
  10051. 80049f2: 681b ldr r3, [r3, #0]
  10052. 80049f4: 681a ldr r2, [r3, #0]
  10053. 80049f6: 687b ldr r3, [r7, #4]
  10054. 80049f8: 681b ldr r3, [r3, #0]
  10055. 80049fa: f022 0204 bic.w r2, r2, #4
  10056. 80049fe: 601a str r2, [r3, #0]
  10057. }
  10058. /* DMA peripheral state is not updated in Half Transfer */
  10059. /* but in Transfer Complete case */
  10060. if(hdma->XferHalfCpltCallback != NULL)
  10061. 8004a00: 687b ldr r3, [r7, #4]
  10062. 8004a02: 6c1b ldr r3, [r3, #64] @ 0x40
  10063. 8004a04: 2b00 cmp r3, #0
  10064. 8004a06: f000 8165 beq.w 8004cd4 <HAL_DMA_IRQHandler+0xe08>
  10065. {
  10066. /* Half transfer callback */
  10067. hdma->XferHalfCpltCallback(hdma);
  10068. 8004a0a: 687b ldr r3, [r7, #4]
  10069. 8004a0c: 6c1b ldr r3, [r3, #64] @ 0x40
  10070. 8004a0e: 6878 ldr r0, [r7, #4]
  10071. 8004a10: 4798 blx r3
  10072. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  10073. 8004a12: e15f b.n 8004cd4 <HAL_DMA_IRQHandler+0xe08>
  10074. }
  10075. }
  10076. }
  10077. /* Transfer Complete Interrupt management ***********************************/
  10078. else if (((tmpisr_bdma & (BDMA_FLAG_TC0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_TCIE) != 0U))
  10079. 8004a14: 687b ldr r3, [r7, #4]
  10080. 8004a16: 6ddb ldr r3, [r3, #92] @ 0x5c
  10081. 8004a18: f003 031f and.w r3, r3, #31
  10082. 8004a1c: 2202 movs r2, #2
  10083. 8004a1e: 409a lsls r2, r3
  10084. 8004a20: 697b ldr r3, [r7, #20]
  10085. 8004a22: 4013 ands r3, r2
  10086. 8004a24: 2b00 cmp r3, #0
  10087. 8004a26: f000 80c5 beq.w 8004bb4 <HAL_DMA_IRQHandler+0xce8>
  10088. 8004a2a: 693b ldr r3, [r7, #16]
  10089. 8004a2c: f003 0302 and.w r3, r3, #2
  10090. 8004a30: 2b00 cmp r3, #0
  10091. 8004a32: f000 80bf beq.w 8004bb4 <HAL_DMA_IRQHandler+0xce8>
  10092. {
  10093. /* Clear the transfer complete flag */
  10094. regs_bdma->IFCR = (BDMA_ISR_TCIF0) << (hdma->StreamIndex & 0x1FU);
  10095. 8004a36: 687b ldr r3, [r7, #4]
  10096. 8004a38: 6ddb ldr r3, [r3, #92] @ 0x5c
  10097. 8004a3a: f003 031f and.w r3, r3, #31
  10098. 8004a3e: 2202 movs r2, #2
  10099. 8004a40: 409a lsls r2, r3
  10100. 8004a42: 69fb ldr r3, [r7, #28]
  10101. 8004a44: 605a str r2, [r3, #4]
  10102. /* Disable the transfer complete interrupt if the DMA mode is Double Buffering */
  10103. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  10104. 8004a46: 693b ldr r3, [r7, #16]
  10105. 8004a48: f403 4300 and.w r3, r3, #32768 @ 0x8000
  10106. 8004a4c: 2b00 cmp r3, #0
  10107. 8004a4e: d018 beq.n 8004a82 <HAL_DMA_IRQHandler+0xbb6>
  10108. {
  10109. /* Current memory buffer used is Memory 0 */
  10110. if((ccr_reg & BDMA_CCR_CT) == 0U)
  10111. 8004a50: 693b ldr r3, [r7, #16]
  10112. 8004a52: f403 3380 and.w r3, r3, #65536 @ 0x10000
  10113. 8004a56: 2b00 cmp r3, #0
  10114. 8004a58: d109 bne.n 8004a6e <HAL_DMA_IRQHandler+0xba2>
  10115. {
  10116. if(hdma->XferM1CpltCallback != NULL)
  10117. 8004a5a: 687b ldr r3, [r7, #4]
  10118. 8004a5c: 6c5b ldr r3, [r3, #68] @ 0x44
  10119. 8004a5e: 2b00 cmp r3, #0
  10120. 8004a60: f000 813a beq.w 8004cd8 <HAL_DMA_IRQHandler+0xe0c>
  10121. {
  10122. /* Transfer complete Callback for Memory 1 */
  10123. hdma->XferM1CpltCallback(hdma);
  10124. 8004a64: 687b ldr r3, [r7, #4]
  10125. 8004a66: 6c5b ldr r3, [r3, #68] @ 0x44
  10126. 8004a68: 6878 ldr r0, [r7, #4]
  10127. 8004a6a: 4798 blx r3
  10128. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  10129. 8004a6c: e134 b.n 8004cd8 <HAL_DMA_IRQHandler+0xe0c>
  10130. }
  10131. }
  10132. /* Current memory buffer used is Memory 1 */
  10133. else
  10134. {
  10135. if(hdma->XferCpltCallback != NULL)
  10136. 8004a6e: 687b ldr r3, [r7, #4]
  10137. 8004a70: 6bdb ldr r3, [r3, #60] @ 0x3c
  10138. 8004a72: 2b00 cmp r3, #0
  10139. 8004a74: f000 8130 beq.w 8004cd8 <HAL_DMA_IRQHandler+0xe0c>
  10140. {
  10141. /* Transfer complete Callback for Memory 0 */
  10142. hdma->XferCpltCallback(hdma);
  10143. 8004a78: 687b ldr r3, [r7, #4]
  10144. 8004a7a: 6bdb ldr r3, [r3, #60] @ 0x3c
  10145. 8004a7c: 6878 ldr r0, [r7, #4]
  10146. 8004a7e: 4798 blx r3
  10147. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  10148. 8004a80: e12a b.n 8004cd8 <HAL_DMA_IRQHandler+0xe0c>
  10149. }
  10150. }
  10151. }
  10152. else
  10153. {
  10154. if((ccr_reg & BDMA_CCR_CIRC) == 0U)
  10155. 8004a82: 693b ldr r3, [r7, #16]
  10156. 8004a84: f003 0320 and.w r3, r3, #32
  10157. 8004a88: 2b00 cmp r3, #0
  10158. 8004a8a: f040 8089 bne.w 8004ba0 <HAL_DMA_IRQHandler+0xcd4>
  10159. {
  10160. /* Disable the transfer complete and error interrupt, if the DMA mode is not CIRCULAR */
  10161. __HAL_DMA_DISABLE_IT(hdma, DMA_IT_TE | DMA_IT_TC);
  10162. 8004a8e: 687b ldr r3, [r7, #4]
  10163. 8004a90: 681b ldr r3, [r3, #0]
  10164. 8004a92: 4a2b ldr r2, [pc, #172] @ (8004b40 <HAL_DMA_IRQHandler+0xc74>)
  10165. 8004a94: 4293 cmp r3, r2
  10166. 8004a96: d04a beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10167. 8004a98: 687b ldr r3, [r7, #4]
  10168. 8004a9a: 681b ldr r3, [r3, #0]
  10169. 8004a9c: 4a29 ldr r2, [pc, #164] @ (8004b44 <HAL_DMA_IRQHandler+0xc78>)
  10170. 8004a9e: 4293 cmp r3, r2
  10171. 8004aa0: d045 beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10172. 8004aa2: 687b ldr r3, [r7, #4]
  10173. 8004aa4: 681b ldr r3, [r3, #0]
  10174. 8004aa6: 4a28 ldr r2, [pc, #160] @ (8004b48 <HAL_DMA_IRQHandler+0xc7c>)
  10175. 8004aa8: 4293 cmp r3, r2
  10176. 8004aaa: d040 beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10177. 8004aac: 687b ldr r3, [r7, #4]
  10178. 8004aae: 681b ldr r3, [r3, #0]
  10179. 8004ab0: 4a26 ldr r2, [pc, #152] @ (8004b4c <HAL_DMA_IRQHandler+0xc80>)
  10180. 8004ab2: 4293 cmp r3, r2
  10181. 8004ab4: d03b beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10182. 8004ab6: 687b ldr r3, [r7, #4]
  10183. 8004ab8: 681b ldr r3, [r3, #0]
  10184. 8004aba: 4a25 ldr r2, [pc, #148] @ (8004b50 <HAL_DMA_IRQHandler+0xc84>)
  10185. 8004abc: 4293 cmp r3, r2
  10186. 8004abe: d036 beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10187. 8004ac0: 687b ldr r3, [r7, #4]
  10188. 8004ac2: 681b ldr r3, [r3, #0]
  10189. 8004ac4: 4a23 ldr r2, [pc, #140] @ (8004b54 <HAL_DMA_IRQHandler+0xc88>)
  10190. 8004ac6: 4293 cmp r3, r2
  10191. 8004ac8: d031 beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10192. 8004aca: 687b ldr r3, [r7, #4]
  10193. 8004acc: 681b ldr r3, [r3, #0]
  10194. 8004ace: 4a22 ldr r2, [pc, #136] @ (8004b58 <HAL_DMA_IRQHandler+0xc8c>)
  10195. 8004ad0: 4293 cmp r3, r2
  10196. 8004ad2: d02c beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10197. 8004ad4: 687b ldr r3, [r7, #4]
  10198. 8004ad6: 681b ldr r3, [r3, #0]
  10199. 8004ad8: 4a20 ldr r2, [pc, #128] @ (8004b5c <HAL_DMA_IRQHandler+0xc90>)
  10200. 8004ada: 4293 cmp r3, r2
  10201. 8004adc: d027 beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10202. 8004ade: 687b ldr r3, [r7, #4]
  10203. 8004ae0: 681b ldr r3, [r3, #0]
  10204. 8004ae2: 4a1f ldr r2, [pc, #124] @ (8004b60 <HAL_DMA_IRQHandler+0xc94>)
  10205. 8004ae4: 4293 cmp r3, r2
  10206. 8004ae6: d022 beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10207. 8004ae8: 687b ldr r3, [r7, #4]
  10208. 8004aea: 681b ldr r3, [r3, #0]
  10209. 8004aec: 4a1d ldr r2, [pc, #116] @ (8004b64 <HAL_DMA_IRQHandler+0xc98>)
  10210. 8004aee: 4293 cmp r3, r2
  10211. 8004af0: d01d beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10212. 8004af2: 687b ldr r3, [r7, #4]
  10213. 8004af4: 681b ldr r3, [r3, #0]
  10214. 8004af6: 4a1c ldr r2, [pc, #112] @ (8004b68 <HAL_DMA_IRQHandler+0xc9c>)
  10215. 8004af8: 4293 cmp r3, r2
  10216. 8004afa: d018 beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10217. 8004afc: 687b ldr r3, [r7, #4]
  10218. 8004afe: 681b ldr r3, [r3, #0]
  10219. 8004b00: 4a1a ldr r2, [pc, #104] @ (8004b6c <HAL_DMA_IRQHandler+0xca0>)
  10220. 8004b02: 4293 cmp r3, r2
  10221. 8004b04: d013 beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10222. 8004b06: 687b ldr r3, [r7, #4]
  10223. 8004b08: 681b ldr r3, [r3, #0]
  10224. 8004b0a: 4a19 ldr r2, [pc, #100] @ (8004b70 <HAL_DMA_IRQHandler+0xca4>)
  10225. 8004b0c: 4293 cmp r3, r2
  10226. 8004b0e: d00e beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10227. 8004b10: 687b ldr r3, [r7, #4]
  10228. 8004b12: 681b ldr r3, [r3, #0]
  10229. 8004b14: 4a17 ldr r2, [pc, #92] @ (8004b74 <HAL_DMA_IRQHandler+0xca8>)
  10230. 8004b16: 4293 cmp r3, r2
  10231. 8004b18: d009 beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10232. 8004b1a: 687b ldr r3, [r7, #4]
  10233. 8004b1c: 681b ldr r3, [r3, #0]
  10234. 8004b1e: 4a16 ldr r2, [pc, #88] @ (8004b78 <HAL_DMA_IRQHandler+0xcac>)
  10235. 8004b20: 4293 cmp r3, r2
  10236. 8004b22: d004 beq.n 8004b2e <HAL_DMA_IRQHandler+0xc62>
  10237. 8004b24: 687b ldr r3, [r7, #4]
  10238. 8004b26: 681b ldr r3, [r3, #0]
  10239. 8004b28: 4a14 ldr r2, [pc, #80] @ (8004b7c <HAL_DMA_IRQHandler+0xcb0>)
  10240. 8004b2a: 4293 cmp r3, r2
  10241. 8004b2c: d128 bne.n 8004b80 <HAL_DMA_IRQHandler+0xcb4>
  10242. 8004b2e: 687b ldr r3, [r7, #4]
  10243. 8004b30: 681b ldr r3, [r3, #0]
  10244. 8004b32: 681a ldr r2, [r3, #0]
  10245. 8004b34: 687b ldr r3, [r7, #4]
  10246. 8004b36: 681b ldr r3, [r3, #0]
  10247. 8004b38: f022 0214 bic.w r2, r2, #20
  10248. 8004b3c: 601a str r2, [r3, #0]
  10249. 8004b3e: e027 b.n 8004b90 <HAL_DMA_IRQHandler+0xcc4>
  10250. 8004b40: 40020010 .word 0x40020010
  10251. 8004b44: 40020028 .word 0x40020028
  10252. 8004b48: 40020040 .word 0x40020040
  10253. 8004b4c: 40020058 .word 0x40020058
  10254. 8004b50: 40020070 .word 0x40020070
  10255. 8004b54: 40020088 .word 0x40020088
  10256. 8004b58: 400200a0 .word 0x400200a0
  10257. 8004b5c: 400200b8 .word 0x400200b8
  10258. 8004b60: 40020410 .word 0x40020410
  10259. 8004b64: 40020428 .word 0x40020428
  10260. 8004b68: 40020440 .word 0x40020440
  10261. 8004b6c: 40020458 .word 0x40020458
  10262. 8004b70: 40020470 .word 0x40020470
  10263. 8004b74: 40020488 .word 0x40020488
  10264. 8004b78: 400204a0 .word 0x400204a0
  10265. 8004b7c: 400204b8 .word 0x400204b8
  10266. 8004b80: 687b ldr r3, [r7, #4]
  10267. 8004b82: 681b ldr r3, [r3, #0]
  10268. 8004b84: 681a ldr r2, [r3, #0]
  10269. 8004b86: 687b ldr r3, [r7, #4]
  10270. 8004b88: 681b ldr r3, [r3, #0]
  10271. 8004b8a: f022 020a bic.w r2, r2, #10
  10272. 8004b8e: 601a str r2, [r3, #0]
  10273. /* Change the DMA state */
  10274. hdma->State = HAL_DMA_STATE_READY;
  10275. 8004b90: 687b ldr r3, [r7, #4]
  10276. 8004b92: 2201 movs r2, #1
  10277. 8004b94: f883 2035 strb.w r2, [r3, #53] @ 0x35
  10278. /* Process Unlocked */
  10279. __HAL_UNLOCK(hdma);
  10280. 8004b98: 687b ldr r3, [r7, #4]
  10281. 8004b9a: 2200 movs r2, #0
  10282. 8004b9c: f883 2034 strb.w r2, [r3, #52] @ 0x34
  10283. }
  10284. if(hdma->XferCpltCallback != NULL)
  10285. 8004ba0: 687b ldr r3, [r7, #4]
  10286. 8004ba2: 6bdb ldr r3, [r3, #60] @ 0x3c
  10287. 8004ba4: 2b00 cmp r3, #0
  10288. 8004ba6: f000 8097 beq.w 8004cd8 <HAL_DMA_IRQHandler+0xe0c>
  10289. {
  10290. /* Transfer complete callback */
  10291. hdma->XferCpltCallback(hdma);
  10292. 8004baa: 687b ldr r3, [r7, #4]
  10293. 8004bac: 6bdb ldr r3, [r3, #60] @ 0x3c
  10294. 8004bae: 6878 ldr r0, [r7, #4]
  10295. 8004bb0: 4798 blx r3
  10296. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  10297. 8004bb2: e091 b.n 8004cd8 <HAL_DMA_IRQHandler+0xe0c>
  10298. }
  10299. }
  10300. }
  10301. /* Transfer Error Interrupt management **************************************/
  10302. else if (((tmpisr_bdma & (BDMA_FLAG_TE0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_TEIE) != 0U))
  10303. 8004bb4: 687b ldr r3, [r7, #4]
  10304. 8004bb6: 6ddb ldr r3, [r3, #92] @ 0x5c
  10305. 8004bb8: f003 031f and.w r3, r3, #31
  10306. 8004bbc: 2208 movs r2, #8
  10307. 8004bbe: 409a lsls r2, r3
  10308. 8004bc0: 697b ldr r3, [r7, #20]
  10309. 8004bc2: 4013 ands r3, r2
  10310. 8004bc4: 2b00 cmp r3, #0
  10311. 8004bc6: f000 8088 beq.w 8004cda <HAL_DMA_IRQHandler+0xe0e>
  10312. 8004bca: 693b ldr r3, [r7, #16]
  10313. 8004bcc: f003 0308 and.w r3, r3, #8
  10314. 8004bd0: 2b00 cmp r3, #0
  10315. 8004bd2: f000 8082 beq.w 8004cda <HAL_DMA_IRQHandler+0xe0e>
  10316. {
  10317. /* When a DMA transfer error occurs */
  10318. /* A hardware clear of its EN bits is performed */
  10319. /* Disable ALL DMA IT */
  10320. __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));
  10321. 8004bd6: 687b ldr r3, [r7, #4]
  10322. 8004bd8: 681b ldr r3, [r3, #0]
  10323. 8004bda: 4a41 ldr r2, [pc, #260] @ (8004ce0 <HAL_DMA_IRQHandler+0xe14>)
  10324. 8004bdc: 4293 cmp r3, r2
  10325. 8004bde: d04a beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10326. 8004be0: 687b ldr r3, [r7, #4]
  10327. 8004be2: 681b ldr r3, [r3, #0]
  10328. 8004be4: 4a3f ldr r2, [pc, #252] @ (8004ce4 <HAL_DMA_IRQHandler+0xe18>)
  10329. 8004be6: 4293 cmp r3, r2
  10330. 8004be8: d045 beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10331. 8004bea: 687b ldr r3, [r7, #4]
  10332. 8004bec: 681b ldr r3, [r3, #0]
  10333. 8004bee: 4a3e ldr r2, [pc, #248] @ (8004ce8 <HAL_DMA_IRQHandler+0xe1c>)
  10334. 8004bf0: 4293 cmp r3, r2
  10335. 8004bf2: d040 beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10336. 8004bf4: 687b ldr r3, [r7, #4]
  10337. 8004bf6: 681b ldr r3, [r3, #0]
  10338. 8004bf8: 4a3c ldr r2, [pc, #240] @ (8004cec <HAL_DMA_IRQHandler+0xe20>)
  10339. 8004bfa: 4293 cmp r3, r2
  10340. 8004bfc: d03b beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10341. 8004bfe: 687b ldr r3, [r7, #4]
  10342. 8004c00: 681b ldr r3, [r3, #0]
  10343. 8004c02: 4a3b ldr r2, [pc, #236] @ (8004cf0 <HAL_DMA_IRQHandler+0xe24>)
  10344. 8004c04: 4293 cmp r3, r2
  10345. 8004c06: d036 beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10346. 8004c08: 687b ldr r3, [r7, #4]
  10347. 8004c0a: 681b ldr r3, [r3, #0]
  10348. 8004c0c: 4a39 ldr r2, [pc, #228] @ (8004cf4 <HAL_DMA_IRQHandler+0xe28>)
  10349. 8004c0e: 4293 cmp r3, r2
  10350. 8004c10: d031 beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10351. 8004c12: 687b ldr r3, [r7, #4]
  10352. 8004c14: 681b ldr r3, [r3, #0]
  10353. 8004c16: 4a38 ldr r2, [pc, #224] @ (8004cf8 <HAL_DMA_IRQHandler+0xe2c>)
  10354. 8004c18: 4293 cmp r3, r2
  10355. 8004c1a: d02c beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10356. 8004c1c: 687b ldr r3, [r7, #4]
  10357. 8004c1e: 681b ldr r3, [r3, #0]
  10358. 8004c20: 4a36 ldr r2, [pc, #216] @ (8004cfc <HAL_DMA_IRQHandler+0xe30>)
  10359. 8004c22: 4293 cmp r3, r2
  10360. 8004c24: d027 beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10361. 8004c26: 687b ldr r3, [r7, #4]
  10362. 8004c28: 681b ldr r3, [r3, #0]
  10363. 8004c2a: 4a35 ldr r2, [pc, #212] @ (8004d00 <HAL_DMA_IRQHandler+0xe34>)
  10364. 8004c2c: 4293 cmp r3, r2
  10365. 8004c2e: d022 beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10366. 8004c30: 687b ldr r3, [r7, #4]
  10367. 8004c32: 681b ldr r3, [r3, #0]
  10368. 8004c34: 4a33 ldr r2, [pc, #204] @ (8004d04 <HAL_DMA_IRQHandler+0xe38>)
  10369. 8004c36: 4293 cmp r3, r2
  10370. 8004c38: d01d beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10371. 8004c3a: 687b ldr r3, [r7, #4]
  10372. 8004c3c: 681b ldr r3, [r3, #0]
  10373. 8004c3e: 4a32 ldr r2, [pc, #200] @ (8004d08 <HAL_DMA_IRQHandler+0xe3c>)
  10374. 8004c40: 4293 cmp r3, r2
  10375. 8004c42: d018 beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10376. 8004c44: 687b ldr r3, [r7, #4]
  10377. 8004c46: 681b ldr r3, [r3, #0]
  10378. 8004c48: 4a30 ldr r2, [pc, #192] @ (8004d0c <HAL_DMA_IRQHandler+0xe40>)
  10379. 8004c4a: 4293 cmp r3, r2
  10380. 8004c4c: d013 beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10381. 8004c4e: 687b ldr r3, [r7, #4]
  10382. 8004c50: 681b ldr r3, [r3, #0]
  10383. 8004c52: 4a2f ldr r2, [pc, #188] @ (8004d10 <HAL_DMA_IRQHandler+0xe44>)
  10384. 8004c54: 4293 cmp r3, r2
  10385. 8004c56: d00e beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10386. 8004c58: 687b ldr r3, [r7, #4]
  10387. 8004c5a: 681b ldr r3, [r3, #0]
  10388. 8004c5c: 4a2d ldr r2, [pc, #180] @ (8004d14 <HAL_DMA_IRQHandler+0xe48>)
  10389. 8004c5e: 4293 cmp r3, r2
  10390. 8004c60: d009 beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10391. 8004c62: 687b ldr r3, [r7, #4]
  10392. 8004c64: 681b ldr r3, [r3, #0]
  10393. 8004c66: 4a2c ldr r2, [pc, #176] @ (8004d18 <HAL_DMA_IRQHandler+0xe4c>)
  10394. 8004c68: 4293 cmp r3, r2
  10395. 8004c6a: d004 beq.n 8004c76 <HAL_DMA_IRQHandler+0xdaa>
  10396. 8004c6c: 687b ldr r3, [r7, #4]
  10397. 8004c6e: 681b ldr r3, [r3, #0]
  10398. 8004c70: 4a2a ldr r2, [pc, #168] @ (8004d1c <HAL_DMA_IRQHandler+0xe50>)
  10399. 8004c72: 4293 cmp r3, r2
  10400. 8004c74: d108 bne.n 8004c88 <HAL_DMA_IRQHandler+0xdbc>
  10401. 8004c76: 687b ldr r3, [r7, #4]
  10402. 8004c78: 681b ldr r3, [r3, #0]
  10403. 8004c7a: 681a ldr r2, [r3, #0]
  10404. 8004c7c: 687b ldr r3, [r7, #4]
  10405. 8004c7e: 681b ldr r3, [r3, #0]
  10406. 8004c80: f022 021c bic.w r2, r2, #28
  10407. 8004c84: 601a str r2, [r3, #0]
  10408. 8004c86: e007 b.n 8004c98 <HAL_DMA_IRQHandler+0xdcc>
  10409. 8004c88: 687b ldr r3, [r7, #4]
  10410. 8004c8a: 681b ldr r3, [r3, #0]
  10411. 8004c8c: 681a ldr r2, [r3, #0]
  10412. 8004c8e: 687b ldr r3, [r7, #4]
  10413. 8004c90: 681b ldr r3, [r3, #0]
  10414. 8004c92: f022 020e bic.w r2, r2, #14
  10415. 8004c96: 601a str r2, [r3, #0]
  10416. /* Clear all flags */
  10417. regs_bdma->IFCR = (BDMA_ISR_GIF0) << (hdma->StreamIndex & 0x1FU);
  10418. 8004c98: 687b ldr r3, [r7, #4]
  10419. 8004c9a: 6ddb ldr r3, [r3, #92] @ 0x5c
  10420. 8004c9c: f003 031f and.w r3, r3, #31
  10421. 8004ca0: 2201 movs r2, #1
  10422. 8004ca2: 409a lsls r2, r3
  10423. 8004ca4: 69fb ldr r3, [r7, #28]
  10424. 8004ca6: 605a str r2, [r3, #4]
  10425. /* Update error code */
  10426. hdma->ErrorCode = HAL_DMA_ERROR_TE;
  10427. 8004ca8: 687b ldr r3, [r7, #4]
  10428. 8004caa: 2201 movs r2, #1
  10429. 8004cac: 655a str r2, [r3, #84] @ 0x54
  10430. /* Change the DMA state */
  10431. hdma->State = HAL_DMA_STATE_READY;
  10432. 8004cae: 687b ldr r3, [r7, #4]
  10433. 8004cb0: 2201 movs r2, #1
  10434. 8004cb2: f883 2035 strb.w r2, [r3, #53] @ 0x35
  10435. /* Process Unlocked */
  10436. __HAL_UNLOCK(hdma);
  10437. 8004cb6: 687b ldr r3, [r7, #4]
  10438. 8004cb8: 2200 movs r2, #0
  10439. 8004cba: f883 2034 strb.w r2, [r3, #52] @ 0x34
  10440. if (hdma->XferErrorCallback != NULL)
  10441. 8004cbe: 687b ldr r3, [r7, #4]
  10442. 8004cc0: 6cdb ldr r3, [r3, #76] @ 0x4c
  10443. 8004cc2: 2b00 cmp r3, #0
  10444. 8004cc4: d009 beq.n 8004cda <HAL_DMA_IRQHandler+0xe0e>
  10445. {
  10446. /* Transfer error callback */
  10447. hdma->XferErrorCallback(hdma);
  10448. 8004cc6: 687b ldr r3, [r7, #4]
  10449. 8004cc8: 6cdb ldr r3, [r3, #76] @ 0x4c
  10450. 8004cca: 6878 ldr r0, [r7, #4]
  10451. 8004ccc: 4798 blx r3
  10452. 8004cce: e004 b.n 8004cda <HAL_DMA_IRQHandler+0xe0e>
  10453. return;
  10454. 8004cd0: bf00 nop
  10455. 8004cd2: e002 b.n 8004cda <HAL_DMA_IRQHandler+0xe0e>
  10456. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  10457. 8004cd4: bf00 nop
  10458. 8004cd6: e000 b.n 8004cda <HAL_DMA_IRQHandler+0xe0e>
  10459. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  10460. 8004cd8: bf00 nop
  10461. }
  10462. else
  10463. {
  10464. /* Nothing To Do */
  10465. }
  10466. }
  10467. 8004cda: 3728 adds r7, #40 @ 0x28
  10468. 8004cdc: 46bd mov sp, r7
  10469. 8004cde: bd80 pop {r7, pc}
  10470. 8004ce0: 40020010 .word 0x40020010
  10471. 8004ce4: 40020028 .word 0x40020028
  10472. 8004ce8: 40020040 .word 0x40020040
  10473. 8004cec: 40020058 .word 0x40020058
  10474. 8004cf0: 40020070 .word 0x40020070
  10475. 8004cf4: 40020088 .word 0x40020088
  10476. 8004cf8: 400200a0 .word 0x400200a0
  10477. 8004cfc: 400200b8 .word 0x400200b8
  10478. 8004d00: 40020410 .word 0x40020410
  10479. 8004d04: 40020428 .word 0x40020428
  10480. 8004d08: 40020440 .word 0x40020440
  10481. 8004d0c: 40020458 .word 0x40020458
  10482. 8004d10: 40020470 .word 0x40020470
  10483. 8004d14: 40020488 .word 0x40020488
  10484. 8004d18: 400204a0 .word 0x400204a0
  10485. 8004d1c: 400204b8 .word 0x400204b8
  10486. 08004d20 <DMA_CalcBaseAndBitshift>:
  10487. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  10488. * the configuration information for the specified DMA Stream.
  10489. * @retval Stream base address
  10490. */
  10491. static uint32_t DMA_CalcBaseAndBitshift(DMA_HandleTypeDef *hdma)
  10492. {
  10493. 8004d20: b480 push {r7}
  10494. 8004d22: b085 sub sp, #20
  10495. 8004d24: af00 add r7, sp, #0
  10496. 8004d26: 6078 str r0, [r7, #4]
  10497. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  10498. 8004d28: 687b ldr r3, [r7, #4]
  10499. 8004d2a: 681b ldr r3, [r3, #0]
  10500. 8004d2c: 4a42 ldr r2, [pc, #264] @ (8004e38 <DMA_CalcBaseAndBitshift+0x118>)
  10501. 8004d2e: 4293 cmp r3, r2
  10502. 8004d30: d04a beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10503. 8004d32: 687b ldr r3, [r7, #4]
  10504. 8004d34: 681b ldr r3, [r3, #0]
  10505. 8004d36: 4a41 ldr r2, [pc, #260] @ (8004e3c <DMA_CalcBaseAndBitshift+0x11c>)
  10506. 8004d38: 4293 cmp r3, r2
  10507. 8004d3a: d045 beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10508. 8004d3c: 687b ldr r3, [r7, #4]
  10509. 8004d3e: 681b ldr r3, [r3, #0]
  10510. 8004d40: 4a3f ldr r2, [pc, #252] @ (8004e40 <DMA_CalcBaseAndBitshift+0x120>)
  10511. 8004d42: 4293 cmp r3, r2
  10512. 8004d44: d040 beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10513. 8004d46: 687b ldr r3, [r7, #4]
  10514. 8004d48: 681b ldr r3, [r3, #0]
  10515. 8004d4a: 4a3e ldr r2, [pc, #248] @ (8004e44 <DMA_CalcBaseAndBitshift+0x124>)
  10516. 8004d4c: 4293 cmp r3, r2
  10517. 8004d4e: d03b beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10518. 8004d50: 687b ldr r3, [r7, #4]
  10519. 8004d52: 681b ldr r3, [r3, #0]
  10520. 8004d54: 4a3c ldr r2, [pc, #240] @ (8004e48 <DMA_CalcBaseAndBitshift+0x128>)
  10521. 8004d56: 4293 cmp r3, r2
  10522. 8004d58: d036 beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10523. 8004d5a: 687b ldr r3, [r7, #4]
  10524. 8004d5c: 681b ldr r3, [r3, #0]
  10525. 8004d5e: 4a3b ldr r2, [pc, #236] @ (8004e4c <DMA_CalcBaseAndBitshift+0x12c>)
  10526. 8004d60: 4293 cmp r3, r2
  10527. 8004d62: d031 beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10528. 8004d64: 687b ldr r3, [r7, #4]
  10529. 8004d66: 681b ldr r3, [r3, #0]
  10530. 8004d68: 4a39 ldr r2, [pc, #228] @ (8004e50 <DMA_CalcBaseAndBitshift+0x130>)
  10531. 8004d6a: 4293 cmp r3, r2
  10532. 8004d6c: d02c beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10533. 8004d6e: 687b ldr r3, [r7, #4]
  10534. 8004d70: 681b ldr r3, [r3, #0]
  10535. 8004d72: 4a38 ldr r2, [pc, #224] @ (8004e54 <DMA_CalcBaseAndBitshift+0x134>)
  10536. 8004d74: 4293 cmp r3, r2
  10537. 8004d76: d027 beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10538. 8004d78: 687b ldr r3, [r7, #4]
  10539. 8004d7a: 681b ldr r3, [r3, #0]
  10540. 8004d7c: 4a36 ldr r2, [pc, #216] @ (8004e58 <DMA_CalcBaseAndBitshift+0x138>)
  10541. 8004d7e: 4293 cmp r3, r2
  10542. 8004d80: d022 beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10543. 8004d82: 687b ldr r3, [r7, #4]
  10544. 8004d84: 681b ldr r3, [r3, #0]
  10545. 8004d86: 4a35 ldr r2, [pc, #212] @ (8004e5c <DMA_CalcBaseAndBitshift+0x13c>)
  10546. 8004d88: 4293 cmp r3, r2
  10547. 8004d8a: d01d beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10548. 8004d8c: 687b ldr r3, [r7, #4]
  10549. 8004d8e: 681b ldr r3, [r3, #0]
  10550. 8004d90: 4a33 ldr r2, [pc, #204] @ (8004e60 <DMA_CalcBaseAndBitshift+0x140>)
  10551. 8004d92: 4293 cmp r3, r2
  10552. 8004d94: d018 beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10553. 8004d96: 687b ldr r3, [r7, #4]
  10554. 8004d98: 681b ldr r3, [r3, #0]
  10555. 8004d9a: 4a32 ldr r2, [pc, #200] @ (8004e64 <DMA_CalcBaseAndBitshift+0x144>)
  10556. 8004d9c: 4293 cmp r3, r2
  10557. 8004d9e: d013 beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10558. 8004da0: 687b ldr r3, [r7, #4]
  10559. 8004da2: 681b ldr r3, [r3, #0]
  10560. 8004da4: 4a30 ldr r2, [pc, #192] @ (8004e68 <DMA_CalcBaseAndBitshift+0x148>)
  10561. 8004da6: 4293 cmp r3, r2
  10562. 8004da8: d00e beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10563. 8004daa: 687b ldr r3, [r7, #4]
  10564. 8004dac: 681b ldr r3, [r3, #0]
  10565. 8004dae: 4a2f ldr r2, [pc, #188] @ (8004e6c <DMA_CalcBaseAndBitshift+0x14c>)
  10566. 8004db0: 4293 cmp r3, r2
  10567. 8004db2: d009 beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10568. 8004db4: 687b ldr r3, [r7, #4]
  10569. 8004db6: 681b ldr r3, [r3, #0]
  10570. 8004db8: 4a2d ldr r2, [pc, #180] @ (8004e70 <DMA_CalcBaseAndBitshift+0x150>)
  10571. 8004dba: 4293 cmp r3, r2
  10572. 8004dbc: d004 beq.n 8004dc8 <DMA_CalcBaseAndBitshift+0xa8>
  10573. 8004dbe: 687b ldr r3, [r7, #4]
  10574. 8004dc0: 681b ldr r3, [r3, #0]
  10575. 8004dc2: 4a2c ldr r2, [pc, #176] @ (8004e74 <DMA_CalcBaseAndBitshift+0x154>)
  10576. 8004dc4: 4293 cmp r3, r2
  10577. 8004dc6: d101 bne.n 8004dcc <DMA_CalcBaseAndBitshift+0xac>
  10578. 8004dc8: 2301 movs r3, #1
  10579. 8004dca: e000 b.n 8004dce <DMA_CalcBaseAndBitshift+0xae>
  10580. 8004dcc: 2300 movs r3, #0
  10581. 8004dce: 2b00 cmp r3, #0
  10582. 8004dd0: d024 beq.n 8004e1c <DMA_CalcBaseAndBitshift+0xfc>
  10583. {
  10584. uint32_t stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 16U) / 24U;
  10585. 8004dd2: 687b ldr r3, [r7, #4]
  10586. 8004dd4: 681b ldr r3, [r3, #0]
  10587. 8004dd6: b2db uxtb r3, r3
  10588. 8004dd8: 3b10 subs r3, #16
  10589. 8004dda: 4a27 ldr r2, [pc, #156] @ (8004e78 <DMA_CalcBaseAndBitshift+0x158>)
  10590. 8004ddc: fba2 2303 umull r2, r3, r2, r3
  10591. 8004de0: 091b lsrs r3, r3, #4
  10592. 8004de2: 60fb str r3, [r7, #12]
  10593. /* lookup table for necessary bitshift of flags within status registers */
  10594. static const uint8_t flagBitshiftOffset[8U] = {0U, 6U, 16U, 22U, 0U, 6U, 16U, 22U};
  10595. hdma->StreamIndex = flagBitshiftOffset[stream_number & 0x7U];
  10596. 8004de4: 68fb ldr r3, [r7, #12]
  10597. 8004de6: f003 0307 and.w r3, r3, #7
  10598. 8004dea: 4a24 ldr r2, [pc, #144] @ (8004e7c <DMA_CalcBaseAndBitshift+0x15c>)
  10599. 8004dec: 5cd3 ldrb r3, [r2, r3]
  10600. 8004dee: 461a mov r2, r3
  10601. 8004df0: 687b ldr r3, [r7, #4]
  10602. 8004df2: 65da str r2, [r3, #92] @ 0x5c
  10603. if (stream_number > 3U)
  10604. 8004df4: 68fb ldr r3, [r7, #12]
  10605. 8004df6: 2b03 cmp r3, #3
  10606. 8004df8: d908 bls.n 8004e0c <DMA_CalcBaseAndBitshift+0xec>
  10607. {
  10608. /* return pointer to HISR and HIFCR */
  10609. hdma->StreamBaseAddress = (((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0x3FFU)) + 4U);
  10610. 8004dfa: 687b ldr r3, [r7, #4]
  10611. 8004dfc: 681b ldr r3, [r3, #0]
  10612. 8004dfe: 461a mov r2, r3
  10613. 8004e00: 4b1f ldr r3, [pc, #124] @ (8004e80 <DMA_CalcBaseAndBitshift+0x160>)
  10614. 8004e02: 4013 ands r3, r2
  10615. 8004e04: 1d1a adds r2, r3, #4
  10616. 8004e06: 687b ldr r3, [r7, #4]
  10617. 8004e08: 659a str r2, [r3, #88] @ 0x58
  10618. 8004e0a: e00d b.n 8004e28 <DMA_CalcBaseAndBitshift+0x108>
  10619. }
  10620. else
  10621. {
  10622. /* return pointer to LISR and LIFCR */
  10623. hdma->StreamBaseAddress = ((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0x3FFU));
  10624. 8004e0c: 687b ldr r3, [r7, #4]
  10625. 8004e0e: 681b ldr r3, [r3, #0]
  10626. 8004e10: 461a mov r2, r3
  10627. 8004e12: 4b1b ldr r3, [pc, #108] @ (8004e80 <DMA_CalcBaseAndBitshift+0x160>)
  10628. 8004e14: 4013 ands r3, r2
  10629. 8004e16: 687a ldr r2, [r7, #4]
  10630. 8004e18: 6593 str r3, [r2, #88] @ 0x58
  10631. 8004e1a: e005 b.n 8004e28 <DMA_CalcBaseAndBitshift+0x108>
  10632. }
  10633. }
  10634. else /* BDMA instance(s) */
  10635. {
  10636. /* return pointer to ISR and IFCR */
  10637. hdma->StreamBaseAddress = ((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0xFFU));
  10638. 8004e1c: 687b ldr r3, [r7, #4]
  10639. 8004e1e: 681b ldr r3, [r3, #0]
  10640. 8004e20: f023 02ff bic.w r2, r3, #255 @ 0xff
  10641. 8004e24: 687b ldr r3, [r7, #4]
  10642. 8004e26: 659a str r2, [r3, #88] @ 0x58
  10643. }
  10644. return hdma->StreamBaseAddress;
  10645. 8004e28: 687b ldr r3, [r7, #4]
  10646. 8004e2a: 6d9b ldr r3, [r3, #88] @ 0x58
  10647. }
  10648. 8004e2c: 4618 mov r0, r3
  10649. 8004e2e: 3714 adds r7, #20
  10650. 8004e30: 46bd mov sp, r7
  10651. 8004e32: f85d 7b04 ldr.w r7, [sp], #4
  10652. 8004e36: 4770 bx lr
  10653. 8004e38: 40020010 .word 0x40020010
  10654. 8004e3c: 40020028 .word 0x40020028
  10655. 8004e40: 40020040 .word 0x40020040
  10656. 8004e44: 40020058 .word 0x40020058
  10657. 8004e48: 40020070 .word 0x40020070
  10658. 8004e4c: 40020088 .word 0x40020088
  10659. 8004e50: 400200a0 .word 0x400200a0
  10660. 8004e54: 400200b8 .word 0x400200b8
  10661. 8004e58: 40020410 .word 0x40020410
  10662. 8004e5c: 40020428 .word 0x40020428
  10663. 8004e60: 40020440 .word 0x40020440
  10664. 8004e64: 40020458 .word 0x40020458
  10665. 8004e68: 40020470 .word 0x40020470
  10666. 8004e6c: 40020488 .word 0x40020488
  10667. 8004e70: 400204a0 .word 0x400204a0
  10668. 8004e74: 400204b8 .word 0x400204b8
  10669. 8004e78: aaaaaaab .word 0xaaaaaaab
  10670. 8004e7c: 080100c0 .word 0x080100c0
  10671. 8004e80: fffffc00 .word 0xfffffc00
  10672. 08004e84 <DMA_CheckFifoParam>:
  10673. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  10674. * the configuration information for the specified DMA Stream.
  10675. * @retval HAL status
  10676. */
  10677. static HAL_StatusTypeDef DMA_CheckFifoParam(DMA_HandleTypeDef *hdma)
  10678. {
  10679. 8004e84: b480 push {r7}
  10680. 8004e86: b085 sub sp, #20
  10681. 8004e88: af00 add r7, sp, #0
  10682. 8004e8a: 6078 str r0, [r7, #4]
  10683. HAL_StatusTypeDef status = HAL_OK;
  10684. 8004e8c: 2300 movs r3, #0
  10685. 8004e8e: 73fb strb r3, [r7, #15]
  10686. /* Memory Data size equal to Byte */
  10687. if (hdma->Init.MemDataAlignment == DMA_MDATAALIGN_BYTE)
  10688. 8004e90: 687b ldr r3, [r7, #4]
  10689. 8004e92: 699b ldr r3, [r3, #24]
  10690. 8004e94: 2b00 cmp r3, #0
  10691. 8004e96: d120 bne.n 8004eda <DMA_CheckFifoParam+0x56>
  10692. {
  10693. switch (hdma->Init.FIFOThreshold)
  10694. 8004e98: 687b ldr r3, [r7, #4]
  10695. 8004e9a: 6a9b ldr r3, [r3, #40] @ 0x28
  10696. 8004e9c: 2b03 cmp r3, #3
  10697. 8004e9e: d858 bhi.n 8004f52 <DMA_CheckFifoParam+0xce>
  10698. 8004ea0: a201 add r2, pc, #4 @ (adr r2, 8004ea8 <DMA_CheckFifoParam+0x24>)
  10699. 8004ea2: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  10700. 8004ea6: bf00 nop
  10701. 8004ea8: 08004eb9 .word 0x08004eb9
  10702. 8004eac: 08004ecb .word 0x08004ecb
  10703. 8004eb0: 08004eb9 .word 0x08004eb9
  10704. 8004eb4: 08004f53 .word 0x08004f53
  10705. {
  10706. case DMA_FIFO_THRESHOLD_1QUARTERFULL:
  10707. case DMA_FIFO_THRESHOLD_3QUARTERSFULL:
  10708. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  10709. 8004eb8: 687b ldr r3, [r7, #4]
  10710. 8004eba: 6adb ldr r3, [r3, #44] @ 0x2c
  10711. 8004ebc: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  10712. 8004ec0: 2b00 cmp r3, #0
  10713. 8004ec2: d048 beq.n 8004f56 <DMA_CheckFifoParam+0xd2>
  10714. {
  10715. status = HAL_ERROR;
  10716. 8004ec4: 2301 movs r3, #1
  10717. 8004ec6: 73fb strb r3, [r7, #15]
  10718. }
  10719. break;
  10720. 8004ec8: e045 b.n 8004f56 <DMA_CheckFifoParam+0xd2>
  10721. case DMA_FIFO_THRESHOLD_HALFFULL:
  10722. if (hdma->Init.MemBurst == DMA_MBURST_INC16)
  10723. 8004eca: 687b ldr r3, [r7, #4]
  10724. 8004ecc: 6adb ldr r3, [r3, #44] @ 0x2c
  10725. 8004ece: f1b3 7fc0 cmp.w r3, #25165824 @ 0x1800000
  10726. 8004ed2: d142 bne.n 8004f5a <DMA_CheckFifoParam+0xd6>
  10727. {
  10728. status = HAL_ERROR;
  10729. 8004ed4: 2301 movs r3, #1
  10730. 8004ed6: 73fb strb r3, [r7, #15]
  10731. }
  10732. break;
  10733. 8004ed8: e03f b.n 8004f5a <DMA_CheckFifoParam+0xd6>
  10734. break;
  10735. }
  10736. }
  10737. /* Memory Data size equal to Half-Word */
  10738. else if (hdma->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD)
  10739. 8004eda: 687b ldr r3, [r7, #4]
  10740. 8004edc: 699b ldr r3, [r3, #24]
  10741. 8004ede: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  10742. 8004ee2: d123 bne.n 8004f2c <DMA_CheckFifoParam+0xa8>
  10743. {
  10744. switch (hdma->Init.FIFOThreshold)
  10745. 8004ee4: 687b ldr r3, [r7, #4]
  10746. 8004ee6: 6a9b ldr r3, [r3, #40] @ 0x28
  10747. 8004ee8: 2b03 cmp r3, #3
  10748. 8004eea: d838 bhi.n 8004f5e <DMA_CheckFifoParam+0xda>
  10749. 8004eec: a201 add r2, pc, #4 @ (adr r2, 8004ef4 <DMA_CheckFifoParam+0x70>)
  10750. 8004eee: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  10751. 8004ef2: bf00 nop
  10752. 8004ef4: 08004f05 .word 0x08004f05
  10753. 8004ef8: 08004f0b .word 0x08004f0b
  10754. 8004efc: 08004f05 .word 0x08004f05
  10755. 8004f00: 08004f1d .word 0x08004f1d
  10756. {
  10757. case DMA_FIFO_THRESHOLD_1QUARTERFULL:
  10758. case DMA_FIFO_THRESHOLD_3QUARTERSFULL:
  10759. status = HAL_ERROR;
  10760. 8004f04: 2301 movs r3, #1
  10761. 8004f06: 73fb strb r3, [r7, #15]
  10762. break;
  10763. 8004f08: e030 b.n 8004f6c <DMA_CheckFifoParam+0xe8>
  10764. case DMA_FIFO_THRESHOLD_HALFFULL:
  10765. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  10766. 8004f0a: 687b ldr r3, [r7, #4]
  10767. 8004f0c: 6adb ldr r3, [r3, #44] @ 0x2c
  10768. 8004f0e: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  10769. 8004f12: 2b00 cmp r3, #0
  10770. 8004f14: d025 beq.n 8004f62 <DMA_CheckFifoParam+0xde>
  10771. {
  10772. status = HAL_ERROR;
  10773. 8004f16: 2301 movs r3, #1
  10774. 8004f18: 73fb strb r3, [r7, #15]
  10775. }
  10776. break;
  10777. 8004f1a: e022 b.n 8004f62 <DMA_CheckFifoParam+0xde>
  10778. case DMA_FIFO_THRESHOLD_FULL:
  10779. if (hdma->Init.MemBurst == DMA_MBURST_INC16)
  10780. 8004f1c: 687b ldr r3, [r7, #4]
  10781. 8004f1e: 6adb ldr r3, [r3, #44] @ 0x2c
  10782. 8004f20: f1b3 7fc0 cmp.w r3, #25165824 @ 0x1800000
  10783. 8004f24: d11f bne.n 8004f66 <DMA_CheckFifoParam+0xe2>
  10784. {
  10785. status = HAL_ERROR;
  10786. 8004f26: 2301 movs r3, #1
  10787. 8004f28: 73fb strb r3, [r7, #15]
  10788. }
  10789. break;
  10790. 8004f2a: e01c b.n 8004f66 <DMA_CheckFifoParam+0xe2>
  10791. }
  10792. /* Memory Data size equal to Word */
  10793. else
  10794. {
  10795. switch (hdma->Init.FIFOThreshold)
  10796. 8004f2c: 687b ldr r3, [r7, #4]
  10797. 8004f2e: 6a9b ldr r3, [r3, #40] @ 0x28
  10798. 8004f30: 2b02 cmp r3, #2
  10799. 8004f32: d902 bls.n 8004f3a <DMA_CheckFifoParam+0xb6>
  10800. 8004f34: 2b03 cmp r3, #3
  10801. 8004f36: d003 beq.n 8004f40 <DMA_CheckFifoParam+0xbc>
  10802. status = HAL_ERROR;
  10803. }
  10804. break;
  10805. default:
  10806. break;
  10807. 8004f38: e018 b.n 8004f6c <DMA_CheckFifoParam+0xe8>
  10808. status = HAL_ERROR;
  10809. 8004f3a: 2301 movs r3, #1
  10810. 8004f3c: 73fb strb r3, [r7, #15]
  10811. break;
  10812. 8004f3e: e015 b.n 8004f6c <DMA_CheckFifoParam+0xe8>
  10813. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  10814. 8004f40: 687b ldr r3, [r7, #4]
  10815. 8004f42: 6adb ldr r3, [r3, #44] @ 0x2c
  10816. 8004f44: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  10817. 8004f48: 2b00 cmp r3, #0
  10818. 8004f4a: d00e beq.n 8004f6a <DMA_CheckFifoParam+0xe6>
  10819. status = HAL_ERROR;
  10820. 8004f4c: 2301 movs r3, #1
  10821. 8004f4e: 73fb strb r3, [r7, #15]
  10822. break;
  10823. 8004f50: e00b b.n 8004f6a <DMA_CheckFifoParam+0xe6>
  10824. break;
  10825. 8004f52: bf00 nop
  10826. 8004f54: e00a b.n 8004f6c <DMA_CheckFifoParam+0xe8>
  10827. break;
  10828. 8004f56: bf00 nop
  10829. 8004f58: e008 b.n 8004f6c <DMA_CheckFifoParam+0xe8>
  10830. break;
  10831. 8004f5a: bf00 nop
  10832. 8004f5c: e006 b.n 8004f6c <DMA_CheckFifoParam+0xe8>
  10833. break;
  10834. 8004f5e: bf00 nop
  10835. 8004f60: e004 b.n 8004f6c <DMA_CheckFifoParam+0xe8>
  10836. break;
  10837. 8004f62: bf00 nop
  10838. 8004f64: e002 b.n 8004f6c <DMA_CheckFifoParam+0xe8>
  10839. break;
  10840. 8004f66: bf00 nop
  10841. 8004f68: e000 b.n 8004f6c <DMA_CheckFifoParam+0xe8>
  10842. break;
  10843. 8004f6a: bf00 nop
  10844. }
  10845. }
  10846. return status;
  10847. 8004f6c: 7bfb ldrb r3, [r7, #15]
  10848. }
  10849. 8004f6e: 4618 mov r0, r3
  10850. 8004f70: 3714 adds r7, #20
  10851. 8004f72: 46bd mov sp, r7
  10852. 8004f74: f85d 7b04 ldr.w r7, [sp], #4
  10853. 8004f78: 4770 bx lr
  10854. 8004f7a: bf00 nop
  10855. 08004f7c <DMA_CalcDMAMUXChannelBaseAndMask>:
  10856. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  10857. * the configuration information for the specified DMA Stream.
  10858. * @retval HAL status
  10859. */
  10860. static void DMA_CalcDMAMUXChannelBaseAndMask(DMA_HandleTypeDef *hdma)
  10861. {
  10862. 8004f7c: b480 push {r7}
  10863. 8004f7e: b085 sub sp, #20
  10864. 8004f80: af00 add r7, sp, #0
  10865. 8004f82: 6078 str r0, [r7, #4]
  10866. uint32_t stream_number;
  10867. uint32_t stream_baseaddress = (uint32_t)((uint32_t*)hdma->Instance);
  10868. 8004f84: 687b ldr r3, [r7, #4]
  10869. 8004f86: 681b ldr r3, [r3, #0]
  10870. 8004f88: 60bb str r3, [r7, #8]
  10871. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  10872. 8004f8a: 687b ldr r3, [r7, #4]
  10873. 8004f8c: 681b ldr r3, [r3, #0]
  10874. 8004f8e: 4a38 ldr r2, [pc, #224] @ (8005070 <DMA_CalcDMAMUXChannelBaseAndMask+0xf4>)
  10875. 8004f90: 4293 cmp r3, r2
  10876. 8004f92: d022 beq.n 8004fda <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  10877. 8004f94: 687b ldr r3, [r7, #4]
  10878. 8004f96: 681b ldr r3, [r3, #0]
  10879. 8004f98: 4a36 ldr r2, [pc, #216] @ (8005074 <DMA_CalcDMAMUXChannelBaseAndMask+0xf8>)
  10880. 8004f9a: 4293 cmp r3, r2
  10881. 8004f9c: d01d beq.n 8004fda <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  10882. 8004f9e: 687b ldr r3, [r7, #4]
  10883. 8004fa0: 681b ldr r3, [r3, #0]
  10884. 8004fa2: 4a35 ldr r2, [pc, #212] @ (8005078 <DMA_CalcDMAMUXChannelBaseAndMask+0xfc>)
  10885. 8004fa4: 4293 cmp r3, r2
  10886. 8004fa6: d018 beq.n 8004fda <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  10887. 8004fa8: 687b ldr r3, [r7, #4]
  10888. 8004faa: 681b ldr r3, [r3, #0]
  10889. 8004fac: 4a33 ldr r2, [pc, #204] @ (800507c <DMA_CalcDMAMUXChannelBaseAndMask+0x100>)
  10890. 8004fae: 4293 cmp r3, r2
  10891. 8004fb0: d013 beq.n 8004fda <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  10892. 8004fb2: 687b ldr r3, [r7, #4]
  10893. 8004fb4: 681b ldr r3, [r3, #0]
  10894. 8004fb6: 4a32 ldr r2, [pc, #200] @ (8005080 <DMA_CalcDMAMUXChannelBaseAndMask+0x104>)
  10895. 8004fb8: 4293 cmp r3, r2
  10896. 8004fba: d00e beq.n 8004fda <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  10897. 8004fbc: 687b ldr r3, [r7, #4]
  10898. 8004fbe: 681b ldr r3, [r3, #0]
  10899. 8004fc0: 4a30 ldr r2, [pc, #192] @ (8005084 <DMA_CalcDMAMUXChannelBaseAndMask+0x108>)
  10900. 8004fc2: 4293 cmp r3, r2
  10901. 8004fc4: d009 beq.n 8004fda <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  10902. 8004fc6: 687b ldr r3, [r7, #4]
  10903. 8004fc8: 681b ldr r3, [r3, #0]
  10904. 8004fca: 4a2f ldr r2, [pc, #188] @ (8005088 <DMA_CalcDMAMUXChannelBaseAndMask+0x10c>)
  10905. 8004fcc: 4293 cmp r3, r2
  10906. 8004fce: d004 beq.n 8004fda <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  10907. 8004fd0: 687b ldr r3, [r7, #4]
  10908. 8004fd2: 681b ldr r3, [r3, #0]
  10909. 8004fd4: 4a2d ldr r2, [pc, #180] @ (800508c <DMA_CalcDMAMUXChannelBaseAndMask+0x110>)
  10910. 8004fd6: 4293 cmp r3, r2
  10911. 8004fd8: d101 bne.n 8004fde <DMA_CalcDMAMUXChannelBaseAndMask+0x62>
  10912. 8004fda: 2301 movs r3, #1
  10913. 8004fdc: e000 b.n 8004fe0 <DMA_CalcDMAMUXChannelBaseAndMask+0x64>
  10914. 8004fde: 2300 movs r3, #0
  10915. 8004fe0: 2b00 cmp r3, #0
  10916. 8004fe2: d01a beq.n 800501a <DMA_CalcDMAMUXChannelBaseAndMask+0x9e>
  10917. {
  10918. /* BDMA Channels are connected to DMAMUX2 channels */
  10919. stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 8U) / 20U;
  10920. 8004fe4: 687b ldr r3, [r7, #4]
  10921. 8004fe6: 681b ldr r3, [r3, #0]
  10922. 8004fe8: b2db uxtb r3, r3
  10923. 8004fea: 3b08 subs r3, #8
  10924. 8004fec: 4a28 ldr r2, [pc, #160] @ (8005090 <DMA_CalcDMAMUXChannelBaseAndMask+0x114>)
  10925. 8004fee: fba2 2303 umull r2, r3, r2, r3
  10926. 8004ff2: 091b lsrs r3, r3, #4
  10927. 8004ff4: 60fb str r3, [r7, #12]
  10928. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX2_Channel0) + (stream_number * 4U)));
  10929. 8004ff6: 68fa ldr r2, [r7, #12]
  10930. 8004ff8: 4b26 ldr r3, [pc, #152] @ (8005094 <DMA_CalcDMAMUXChannelBaseAndMask+0x118>)
  10931. 8004ffa: 4413 add r3, r2
  10932. 8004ffc: 009b lsls r3, r3, #2
  10933. 8004ffe: 461a mov r2, r3
  10934. 8005000: 687b ldr r3, [r7, #4]
  10935. 8005002: 661a str r2, [r3, #96] @ 0x60
  10936. hdma->DMAmuxChannelStatus = DMAMUX2_ChannelStatus;
  10937. 8005004: 687b ldr r3, [r7, #4]
  10938. 8005006: 4a24 ldr r2, [pc, #144] @ (8005098 <DMA_CalcDMAMUXChannelBaseAndMask+0x11c>)
  10939. 8005008: 665a str r2, [r3, #100] @ 0x64
  10940. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  10941. 800500a: 68fb ldr r3, [r7, #12]
  10942. 800500c: f003 031f and.w r3, r3, #31
  10943. 8005010: 2201 movs r2, #1
  10944. 8005012: 409a lsls r2, r3
  10945. 8005014: 687b ldr r3, [r7, #4]
  10946. 8005016: 669a str r2, [r3, #104] @ 0x68
  10947. }
  10948. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_Channel0) + (stream_number * 4U)));
  10949. hdma->DMAmuxChannelStatus = DMAMUX1_ChannelStatus;
  10950. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  10951. }
  10952. }
  10953. 8005018: e024 b.n 8005064 <DMA_CalcDMAMUXChannelBaseAndMask+0xe8>
  10954. stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 16U) / 24U;
  10955. 800501a: 687b ldr r3, [r7, #4]
  10956. 800501c: 681b ldr r3, [r3, #0]
  10957. 800501e: b2db uxtb r3, r3
  10958. 8005020: 3b10 subs r3, #16
  10959. 8005022: 4a1e ldr r2, [pc, #120] @ (800509c <DMA_CalcDMAMUXChannelBaseAndMask+0x120>)
  10960. 8005024: fba2 2303 umull r2, r3, r2, r3
  10961. 8005028: 091b lsrs r3, r3, #4
  10962. 800502a: 60fb str r3, [r7, #12]
  10963. if((stream_baseaddress <= ((uint32_t)DMA2_Stream7) ) && \
  10964. 800502c: 68bb ldr r3, [r7, #8]
  10965. 800502e: 4a1c ldr r2, [pc, #112] @ (80050a0 <DMA_CalcDMAMUXChannelBaseAndMask+0x124>)
  10966. 8005030: 4293 cmp r3, r2
  10967. 8005032: d806 bhi.n 8005042 <DMA_CalcDMAMUXChannelBaseAndMask+0xc6>
  10968. 8005034: 68bb ldr r3, [r7, #8]
  10969. 8005036: 4a1b ldr r2, [pc, #108] @ (80050a4 <DMA_CalcDMAMUXChannelBaseAndMask+0x128>)
  10970. 8005038: 4293 cmp r3, r2
  10971. 800503a: d902 bls.n 8005042 <DMA_CalcDMAMUXChannelBaseAndMask+0xc6>
  10972. stream_number += 8U;
  10973. 800503c: 68fb ldr r3, [r7, #12]
  10974. 800503e: 3308 adds r3, #8
  10975. 8005040: 60fb str r3, [r7, #12]
  10976. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_Channel0) + (stream_number * 4U)));
  10977. 8005042: 68fa ldr r2, [r7, #12]
  10978. 8005044: 4b18 ldr r3, [pc, #96] @ (80050a8 <DMA_CalcDMAMUXChannelBaseAndMask+0x12c>)
  10979. 8005046: 4413 add r3, r2
  10980. 8005048: 009b lsls r3, r3, #2
  10981. 800504a: 461a mov r2, r3
  10982. 800504c: 687b ldr r3, [r7, #4]
  10983. 800504e: 661a str r2, [r3, #96] @ 0x60
  10984. hdma->DMAmuxChannelStatus = DMAMUX1_ChannelStatus;
  10985. 8005050: 687b ldr r3, [r7, #4]
  10986. 8005052: 4a16 ldr r2, [pc, #88] @ (80050ac <DMA_CalcDMAMUXChannelBaseAndMask+0x130>)
  10987. 8005054: 665a str r2, [r3, #100] @ 0x64
  10988. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  10989. 8005056: 68fb ldr r3, [r7, #12]
  10990. 8005058: f003 031f and.w r3, r3, #31
  10991. 800505c: 2201 movs r2, #1
  10992. 800505e: 409a lsls r2, r3
  10993. 8005060: 687b ldr r3, [r7, #4]
  10994. 8005062: 669a str r2, [r3, #104] @ 0x68
  10995. }
  10996. 8005064: bf00 nop
  10997. 8005066: 3714 adds r7, #20
  10998. 8005068: 46bd mov sp, r7
  10999. 800506a: f85d 7b04 ldr.w r7, [sp], #4
  11000. 800506e: 4770 bx lr
  11001. 8005070: 58025408 .word 0x58025408
  11002. 8005074: 5802541c .word 0x5802541c
  11003. 8005078: 58025430 .word 0x58025430
  11004. 800507c: 58025444 .word 0x58025444
  11005. 8005080: 58025458 .word 0x58025458
  11006. 8005084: 5802546c .word 0x5802546c
  11007. 8005088: 58025480 .word 0x58025480
  11008. 800508c: 58025494 .word 0x58025494
  11009. 8005090: cccccccd .word 0xcccccccd
  11010. 8005094: 16009600 .word 0x16009600
  11011. 8005098: 58025880 .word 0x58025880
  11012. 800509c: aaaaaaab .word 0xaaaaaaab
  11013. 80050a0: 400204b8 .word 0x400204b8
  11014. 80050a4: 4002040f .word 0x4002040f
  11015. 80050a8: 10008200 .word 0x10008200
  11016. 80050ac: 40020880 .word 0x40020880
  11017. 080050b0 <DMA_CalcDMAMUXRequestGenBaseAndMask>:
  11018. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  11019. * the configuration information for the specified DMA Stream.
  11020. * @retval HAL status
  11021. */
  11022. static void DMA_CalcDMAMUXRequestGenBaseAndMask(DMA_HandleTypeDef *hdma)
  11023. {
  11024. 80050b0: b480 push {r7}
  11025. 80050b2: b085 sub sp, #20
  11026. 80050b4: af00 add r7, sp, #0
  11027. 80050b6: 6078 str r0, [r7, #4]
  11028. uint32_t request = hdma->Init.Request & DMAMUX_CxCR_DMAREQ_ID;
  11029. 80050b8: 687b ldr r3, [r7, #4]
  11030. 80050ba: 685b ldr r3, [r3, #4]
  11031. 80050bc: b2db uxtb r3, r3
  11032. 80050be: 60fb str r3, [r7, #12]
  11033. if((request >= DMA_REQUEST_GENERATOR0) && (request <= DMA_REQUEST_GENERATOR7))
  11034. 80050c0: 68fb ldr r3, [r7, #12]
  11035. 80050c2: 2b00 cmp r3, #0
  11036. 80050c4: d04a beq.n 800515c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xac>
  11037. 80050c6: 68fb ldr r3, [r7, #12]
  11038. 80050c8: 2b08 cmp r3, #8
  11039. 80050ca: d847 bhi.n 800515c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xac>
  11040. {
  11041. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  11042. 80050cc: 687b ldr r3, [r7, #4]
  11043. 80050ce: 681b ldr r3, [r3, #0]
  11044. 80050d0: 4a25 ldr r2, [pc, #148] @ (8005168 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xb8>)
  11045. 80050d2: 4293 cmp r3, r2
  11046. 80050d4: d022 beq.n 800511c <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  11047. 80050d6: 687b ldr r3, [r7, #4]
  11048. 80050d8: 681b ldr r3, [r3, #0]
  11049. 80050da: 4a24 ldr r2, [pc, #144] @ (800516c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xbc>)
  11050. 80050dc: 4293 cmp r3, r2
  11051. 80050de: d01d beq.n 800511c <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  11052. 80050e0: 687b ldr r3, [r7, #4]
  11053. 80050e2: 681b ldr r3, [r3, #0]
  11054. 80050e4: 4a22 ldr r2, [pc, #136] @ (8005170 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc0>)
  11055. 80050e6: 4293 cmp r3, r2
  11056. 80050e8: d018 beq.n 800511c <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  11057. 80050ea: 687b ldr r3, [r7, #4]
  11058. 80050ec: 681b ldr r3, [r3, #0]
  11059. 80050ee: 4a21 ldr r2, [pc, #132] @ (8005174 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc4>)
  11060. 80050f0: 4293 cmp r3, r2
  11061. 80050f2: d013 beq.n 800511c <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  11062. 80050f4: 687b ldr r3, [r7, #4]
  11063. 80050f6: 681b ldr r3, [r3, #0]
  11064. 80050f8: 4a1f ldr r2, [pc, #124] @ (8005178 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc8>)
  11065. 80050fa: 4293 cmp r3, r2
  11066. 80050fc: d00e beq.n 800511c <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  11067. 80050fe: 687b ldr r3, [r7, #4]
  11068. 8005100: 681b ldr r3, [r3, #0]
  11069. 8005102: 4a1e ldr r2, [pc, #120] @ (800517c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xcc>)
  11070. 8005104: 4293 cmp r3, r2
  11071. 8005106: d009 beq.n 800511c <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  11072. 8005108: 687b ldr r3, [r7, #4]
  11073. 800510a: 681b ldr r3, [r3, #0]
  11074. 800510c: 4a1c ldr r2, [pc, #112] @ (8005180 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd0>)
  11075. 800510e: 4293 cmp r3, r2
  11076. 8005110: d004 beq.n 800511c <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  11077. 8005112: 687b ldr r3, [r7, #4]
  11078. 8005114: 681b ldr r3, [r3, #0]
  11079. 8005116: 4a1b ldr r2, [pc, #108] @ (8005184 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd4>)
  11080. 8005118: 4293 cmp r3, r2
  11081. 800511a: d101 bne.n 8005120 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x70>
  11082. 800511c: 2301 movs r3, #1
  11083. 800511e: e000 b.n 8005122 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x72>
  11084. 8005120: 2300 movs r3, #0
  11085. 8005122: 2b00 cmp r3, #0
  11086. 8005124: d00a beq.n 800513c <DMA_CalcDMAMUXRequestGenBaseAndMask+0x8c>
  11087. {
  11088. /* BDMA Channels are connected to DMAMUX2 request generator blocks */
  11089. hdma->DMAmuxRequestGen = (DMAMUX_RequestGen_TypeDef *)((uint32_t)(((uint32_t)DMAMUX2_RequestGenerator0) + ((request - 1U) * 4U)));
  11090. 8005126: 68fa ldr r2, [r7, #12]
  11091. 8005128: 4b17 ldr r3, [pc, #92] @ (8005188 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd8>)
  11092. 800512a: 4413 add r3, r2
  11093. 800512c: 009b lsls r3, r3, #2
  11094. 800512e: 461a mov r2, r3
  11095. 8005130: 687b ldr r3, [r7, #4]
  11096. 8005132: 66da str r2, [r3, #108] @ 0x6c
  11097. hdma->DMAmuxRequestGenStatus = DMAMUX2_RequestGenStatus;
  11098. 8005134: 687b ldr r3, [r7, #4]
  11099. 8005136: 4a15 ldr r2, [pc, #84] @ (800518c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xdc>)
  11100. 8005138: 671a str r2, [r3, #112] @ 0x70
  11101. 800513a: e009 b.n 8005150 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xa0>
  11102. }
  11103. else
  11104. {
  11105. /* DMA1 and DMA2 Streams use DMAMUX1 request generator blocks */
  11106. hdma->DMAmuxRequestGen = (DMAMUX_RequestGen_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_RequestGenerator0) + ((request - 1U) * 4U)));
  11107. 800513c: 68fa ldr r2, [r7, #12]
  11108. 800513e: 4b14 ldr r3, [pc, #80] @ (8005190 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xe0>)
  11109. 8005140: 4413 add r3, r2
  11110. 8005142: 009b lsls r3, r3, #2
  11111. 8005144: 461a mov r2, r3
  11112. 8005146: 687b ldr r3, [r7, #4]
  11113. 8005148: 66da str r2, [r3, #108] @ 0x6c
  11114. hdma->DMAmuxRequestGenStatus = DMAMUX1_RequestGenStatus;
  11115. 800514a: 687b ldr r3, [r7, #4]
  11116. 800514c: 4a11 ldr r2, [pc, #68] @ (8005194 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xe4>)
  11117. 800514e: 671a str r2, [r3, #112] @ 0x70
  11118. }
  11119. hdma->DMAmuxRequestGenStatusMask = 1UL << (request - 1U);
  11120. 8005150: 68fb ldr r3, [r7, #12]
  11121. 8005152: 3b01 subs r3, #1
  11122. 8005154: 2201 movs r2, #1
  11123. 8005156: 409a lsls r2, r3
  11124. 8005158: 687b ldr r3, [r7, #4]
  11125. 800515a: 675a str r2, [r3, #116] @ 0x74
  11126. }
  11127. }
  11128. 800515c: bf00 nop
  11129. 800515e: 3714 adds r7, #20
  11130. 8005160: 46bd mov sp, r7
  11131. 8005162: f85d 7b04 ldr.w r7, [sp], #4
  11132. 8005166: 4770 bx lr
  11133. 8005168: 58025408 .word 0x58025408
  11134. 800516c: 5802541c .word 0x5802541c
  11135. 8005170: 58025430 .word 0x58025430
  11136. 8005174: 58025444 .word 0x58025444
  11137. 8005178: 58025458 .word 0x58025458
  11138. 800517c: 5802546c .word 0x5802546c
  11139. 8005180: 58025480 .word 0x58025480
  11140. 8005184: 58025494 .word 0x58025494
  11141. 8005188: 1600963f .word 0x1600963f
  11142. 800518c: 58025940 .word 0x58025940
  11143. 8005190: 1000823f .word 0x1000823f
  11144. 8005194: 40020940 .word 0x40020940
  11145. 08005198 <HAL_GPIO_Init>:
  11146. * @param GPIO_Init: pointer to a GPIO_InitTypeDef structure that contains
  11147. * the configuration information for the specified GPIO peripheral.
  11148. * @retval None
  11149. */
  11150. void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
  11151. {
  11152. 8005198: b480 push {r7}
  11153. 800519a: b089 sub sp, #36 @ 0x24
  11154. 800519c: af00 add r7, sp, #0
  11155. 800519e: 6078 str r0, [r7, #4]
  11156. 80051a0: 6039 str r1, [r7, #0]
  11157. uint32_t position = 0x00U;
  11158. 80051a2: 2300 movs r3, #0
  11159. 80051a4: 61fb str r3, [r7, #28]
  11160. EXTI_Core_TypeDef *EXTI_CurrentCPU;
  11161. #if defined(DUAL_CORE) && defined(CORE_CM4)
  11162. EXTI_CurrentCPU = EXTI_D2; /* EXTI for CM4 CPU */
  11163. #else
  11164. EXTI_CurrentCPU = EXTI_D1; /* EXTI for CM7 CPU */
  11165. 80051a6: 4b89 ldr r3, [pc, #548] @ (80053cc <HAL_GPIO_Init+0x234>)
  11166. 80051a8: 617b str r3, [r7, #20]
  11167. assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
  11168. assert_param(IS_GPIO_PIN(GPIO_Init->Pin));
  11169. assert_param(IS_GPIO_MODE(GPIO_Init->Mode));
  11170. /* Configure the port pins */
  11171. while (((GPIO_Init->Pin) >> position) != 0x00U)
  11172. 80051aa: e194 b.n 80054d6 <HAL_GPIO_Init+0x33e>
  11173. {
  11174. /* Get current io position */
  11175. iocurrent = (GPIO_Init->Pin) & (1UL << position);
  11176. 80051ac: 683b ldr r3, [r7, #0]
  11177. 80051ae: 681a ldr r2, [r3, #0]
  11178. 80051b0: 2101 movs r1, #1
  11179. 80051b2: 69fb ldr r3, [r7, #28]
  11180. 80051b4: fa01 f303 lsl.w r3, r1, r3
  11181. 80051b8: 4013 ands r3, r2
  11182. 80051ba: 613b str r3, [r7, #16]
  11183. if (iocurrent != 0x00U)
  11184. 80051bc: 693b ldr r3, [r7, #16]
  11185. 80051be: 2b00 cmp r3, #0
  11186. 80051c0: f000 8186 beq.w 80054d0 <HAL_GPIO_Init+0x338>
  11187. {
  11188. /*--------------------- GPIO Mode Configuration ------------------------*/
  11189. /* In case of Output or Alternate function mode selection */
  11190. if (((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF))
  11191. 80051c4: 683b ldr r3, [r7, #0]
  11192. 80051c6: 685b ldr r3, [r3, #4]
  11193. 80051c8: f003 0303 and.w r3, r3, #3
  11194. 80051cc: 2b01 cmp r3, #1
  11195. 80051ce: d005 beq.n 80051dc <HAL_GPIO_Init+0x44>
  11196. 80051d0: 683b ldr r3, [r7, #0]
  11197. 80051d2: 685b ldr r3, [r3, #4]
  11198. 80051d4: f003 0303 and.w r3, r3, #3
  11199. 80051d8: 2b02 cmp r3, #2
  11200. 80051da: d130 bne.n 800523e <HAL_GPIO_Init+0xa6>
  11201. {
  11202. /* Check the Speed parameter */
  11203. assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));
  11204. /* Configure the IO Speed */
  11205. temp = GPIOx->OSPEEDR;
  11206. 80051dc: 687b ldr r3, [r7, #4]
  11207. 80051de: 689b ldr r3, [r3, #8]
  11208. 80051e0: 61bb str r3, [r7, #24]
  11209. temp &= ~(GPIO_OSPEEDR_OSPEED0 << (position * 2U));
  11210. 80051e2: 69fb ldr r3, [r7, #28]
  11211. 80051e4: 005b lsls r3, r3, #1
  11212. 80051e6: 2203 movs r2, #3
  11213. 80051e8: fa02 f303 lsl.w r3, r2, r3
  11214. 80051ec: 43db mvns r3, r3
  11215. 80051ee: 69ba ldr r2, [r7, #24]
  11216. 80051f0: 4013 ands r3, r2
  11217. 80051f2: 61bb str r3, [r7, #24]
  11218. temp |= (GPIO_Init->Speed << (position * 2U));
  11219. 80051f4: 683b ldr r3, [r7, #0]
  11220. 80051f6: 68da ldr r2, [r3, #12]
  11221. 80051f8: 69fb ldr r3, [r7, #28]
  11222. 80051fa: 005b lsls r3, r3, #1
  11223. 80051fc: fa02 f303 lsl.w r3, r2, r3
  11224. 8005200: 69ba ldr r2, [r7, #24]
  11225. 8005202: 4313 orrs r3, r2
  11226. 8005204: 61bb str r3, [r7, #24]
  11227. GPIOx->OSPEEDR = temp;
  11228. 8005206: 687b ldr r3, [r7, #4]
  11229. 8005208: 69ba ldr r2, [r7, #24]
  11230. 800520a: 609a str r2, [r3, #8]
  11231. /* Configure the IO Output Type */
  11232. temp = GPIOx->OTYPER;
  11233. 800520c: 687b ldr r3, [r7, #4]
  11234. 800520e: 685b ldr r3, [r3, #4]
  11235. 8005210: 61bb str r3, [r7, #24]
  11236. temp &= ~(GPIO_OTYPER_OT0 << position) ;
  11237. 8005212: 2201 movs r2, #1
  11238. 8005214: 69fb ldr r3, [r7, #28]
  11239. 8005216: fa02 f303 lsl.w r3, r2, r3
  11240. 800521a: 43db mvns r3, r3
  11241. 800521c: 69ba ldr r2, [r7, #24]
  11242. 800521e: 4013 ands r3, r2
  11243. 8005220: 61bb str r3, [r7, #24]
  11244. temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position);
  11245. 8005222: 683b ldr r3, [r7, #0]
  11246. 8005224: 685b ldr r3, [r3, #4]
  11247. 8005226: 091b lsrs r3, r3, #4
  11248. 8005228: f003 0201 and.w r2, r3, #1
  11249. 800522c: 69fb ldr r3, [r7, #28]
  11250. 800522e: fa02 f303 lsl.w r3, r2, r3
  11251. 8005232: 69ba ldr r2, [r7, #24]
  11252. 8005234: 4313 orrs r3, r2
  11253. 8005236: 61bb str r3, [r7, #24]
  11254. GPIOx->OTYPER = temp;
  11255. 8005238: 687b ldr r3, [r7, #4]
  11256. 800523a: 69ba ldr r2, [r7, #24]
  11257. 800523c: 605a str r2, [r3, #4]
  11258. }
  11259. if ((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG)
  11260. 800523e: 683b ldr r3, [r7, #0]
  11261. 8005240: 685b ldr r3, [r3, #4]
  11262. 8005242: f003 0303 and.w r3, r3, #3
  11263. 8005246: 2b03 cmp r3, #3
  11264. 8005248: d017 beq.n 800527a <HAL_GPIO_Init+0xe2>
  11265. {
  11266. /* Check the Pull parameter */
  11267. assert_param(IS_GPIO_PULL(GPIO_Init->Pull));
  11268. /* Activate the Pull-up or Pull down resistor for the current IO */
  11269. temp = GPIOx->PUPDR;
  11270. 800524a: 687b ldr r3, [r7, #4]
  11271. 800524c: 68db ldr r3, [r3, #12]
  11272. 800524e: 61bb str r3, [r7, #24]
  11273. temp &= ~(GPIO_PUPDR_PUPD0 << (position * 2U));
  11274. 8005250: 69fb ldr r3, [r7, #28]
  11275. 8005252: 005b lsls r3, r3, #1
  11276. 8005254: 2203 movs r2, #3
  11277. 8005256: fa02 f303 lsl.w r3, r2, r3
  11278. 800525a: 43db mvns r3, r3
  11279. 800525c: 69ba ldr r2, [r7, #24]
  11280. 800525e: 4013 ands r3, r2
  11281. 8005260: 61bb str r3, [r7, #24]
  11282. temp |= ((GPIO_Init->Pull) << (position * 2U));
  11283. 8005262: 683b ldr r3, [r7, #0]
  11284. 8005264: 689a ldr r2, [r3, #8]
  11285. 8005266: 69fb ldr r3, [r7, #28]
  11286. 8005268: 005b lsls r3, r3, #1
  11287. 800526a: fa02 f303 lsl.w r3, r2, r3
  11288. 800526e: 69ba ldr r2, [r7, #24]
  11289. 8005270: 4313 orrs r3, r2
  11290. 8005272: 61bb str r3, [r7, #24]
  11291. GPIOx->PUPDR = temp;
  11292. 8005274: 687b ldr r3, [r7, #4]
  11293. 8005276: 69ba ldr r2, [r7, #24]
  11294. 8005278: 60da str r2, [r3, #12]
  11295. }
  11296. /* In case of Alternate function mode selection */
  11297. if ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)
  11298. 800527a: 683b ldr r3, [r7, #0]
  11299. 800527c: 685b ldr r3, [r3, #4]
  11300. 800527e: f003 0303 and.w r3, r3, #3
  11301. 8005282: 2b02 cmp r3, #2
  11302. 8005284: d123 bne.n 80052ce <HAL_GPIO_Init+0x136>
  11303. /* Check the Alternate function parameters */
  11304. assert_param(IS_GPIO_AF_INSTANCE(GPIOx));
  11305. assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
  11306. /* Configure Alternate function mapped with the current IO */
  11307. temp = GPIOx->AFR[position >> 3U];
  11308. 8005286: 69fb ldr r3, [r7, #28]
  11309. 8005288: 08da lsrs r2, r3, #3
  11310. 800528a: 687b ldr r3, [r7, #4]
  11311. 800528c: 3208 adds r2, #8
  11312. 800528e: f853 3022 ldr.w r3, [r3, r2, lsl #2]
  11313. 8005292: 61bb str r3, [r7, #24]
  11314. temp &= ~(0xFU << ((position & 0x07U) * 4U));
  11315. 8005294: 69fb ldr r3, [r7, #28]
  11316. 8005296: f003 0307 and.w r3, r3, #7
  11317. 800529a: 009b lsls r3, r3, #2
  11318. 800529c: 220f movs r2, #15
  11319. 800529e: fa02 f303 lsl.w r3, r2, r3
  11320. 80052a2: 43db mvns r3, r3
  11321. 80052a4: 69ba ldr r2, [r7, #24]
  11322. 80052a6: 4013 ands r3, r2
  11323. 80052a8: 61bb str r3, [r7, #24]
  11324. temp |= ((GPIO_Init->Alternate) << ((position & 0x07U) * 4U));
  11325. 80052aa: 683b ldr r3, [r7, #0]
  11326. 80052ac: 691a ldr r2, [r3, #16]
  11327. 80052ae: 69fb ldr r3, [r7, #28]
  11328. 80052b0: f003 0307 and.w r3, r3, #7
  11329. 80052b4: 009b lsls r3, r3, #2
  11330. 80052b6: fa02 f303 lsl.w r3, r2, r3
  11331. 80052ba: 69ba ldr r2, [r7, #24]
  11332. 80052bc: 4313 orrs r3, r2
  11333. 80052be: 61bb str r3, [r7, #24]
  11334. GPIOx->AFR[position >> 3U] = temp;
  11335. 80052c0: 69fb ldr r3, [r7, #28]
  11336. 80052c2: 08da lsrs r2, r3, #3
  11337. 80052c4: 687b ldr r3, [r7, #4]
  11338. 80052c6: 3208 adds r2, #8
  11339. 80052c8: 69b9 ldr r1, [r7, #24]
  11340. 80052ca: f843 1022 str.w r1, [r3, r2, lsl #2]
  11341. }
  11342. /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
  11343. temp = GPIOx->MODER;
  11344. 80052ce: 687b ldr r3, [r7, #4]
  11345. 80052d0: 681b ldr r3, [r3, #0]
  11346. 80052d2: 61bb str r3, [r7, #24]
  11347. temp &= ~(GPIO_MODER_MODE0 << (position * 2U));
  11348. 80052d4: 69fb ldr r3, [r7, #28]
  11349. 80052d6: 005b lsls r3, r3, #1
  11350. 80052d8: 2203 movs r2, #3
  11351. 80052da: fa02 f303 lsl.w r3, r2, r3
  11352. 80052de: 43db mvns r3, r3
  11353. 80052e0: 69ba ldr r2, [r7, #24]
  11354. 80052e2: 4013 ands r3, r2
  11355. 80052e4: 61bb str r3, [r7, #24]
  11356. temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2U));
  11357. 80052e6: 683b ldr r3, [r7, #0]
  11358. 80052e8: 685b ldr r3, [r3, #4]
  11359. 80052ea: f003 0203 and.w r2, r3, #3
  11360. 80052ee: 69fb ldr r3, [r7, #28]
  11361. 80052f0: 005b lsls r3, r3, #1
  11362. 80052f2: fa02 f303 lsl.w r3, r2, r3
  11363. 80052f6: 69ba ldr r2, [r7, #24]
  11364. 80052f8: 4313 orrs r3, r2
  11365. 80052fa: 61bb str r3, [r7, #24]
  11366. GPIOx->MODER = temp;
  11367. 80052fc: 687b ldr r3, [r7, #4]
  11368. 80052fe: 69ba ldr r2, [r7, #24]
  11369. 8005300: 601a str r2, [r3, #0]
  11370. /*--------------------- EXTI Mode Configuration ------------------------*/
  11371. /* Configure the External Interrupt or event for the current IO */
  11372. if ((GPIO_Init->Mode & EXTI_MODE) != 0x00U)
  11373. 8005302: 683b ldr r3, [r7, #0]
  11374. 8005304: 685b ldr r3, [r3, #4]
  11375. 8005306: f403 3340 and.w r3, r3, #196608 @ 0x30000
  11376. 800530a: 2b00 cmp r3, #0
  11377. 800530c: f000 80e0 beq.w 80054d0 <HAL_GPIO_Init+0x338>
  11378. {
  11379. /* Enable SYSCFG Clock */
  11380. __HAL_RCC_SYSCFG_CLK_ENABLE();
  11381. 8005310: 4b2f ldr r3, [pc, #188] @ (80053d0 <HAL_GPIO_Init+0x238>)
  11382. 8005312: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  11383. 8005316: 4a2e ldr r2, [pc, #184] @ (80053d0 <HAL_GPIO_Init+0x238>)
  11384. 8005318: f043 0302 orr.w r3, r3, #2
  11385. 800531c: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  11386. 8005320: 4b2b ldr r3, [pc, #172] @ (80053d0 <HAL_GPIO_Init+0x238>)
  11387. 8005322: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  11388. 8005326: f003 0302 and.w r3, r3, #2
  11389. 800532a: 60fb str r3, [r7, #12]
  11390. 800532c: 68fb ldr r3, [r7, #12]
  11391. temp = SYSCFG->EXTICR[position >> 2U];
  11392. 800532e: 4a29 ldr r2, [pc, #164] @ (80053d4 <HAL_GPIO_Init+0x23c>)
  11393. 8005330: 69fb ldr r3, [r7, #28]
  11394. 8005332: 089b lsrs r3, r3, #2
  11395. 8005334: 3302 adds r3, #2
  11396. 8005336: f852 3023 ldr.w r3, [r2, r3, lsl #2]
  11397. 800533a: 61bb str r3, [r7, #24]
  11398. temp &= ~(0x0FUL << (4U * (position & 0x03U)));
  11399. 800533c: 69fb ldr r3, [r7, #28]
  11400. 800533e: f003 0303 and.w r3, r3, #3
  11401. 8005342: 009b lsls r3, r3, #2
  11402. 8005344: 220f movs r2, #15
  11403. 8005346: fa02 f303 lsl.w r3, r2, r3
  11404. 800534a: 43db mvns r3, r3
  11405. 800534c: 69ba ldr r2, [r7, #24]
  11406. 800534e: 4013 ands r3, r2
  11407. 8005350: 61bb str r3, [r7, #24]
  11408. temp |= (GPIO_GET_INDEX(GPIOx) << (4U * (position & 0x03U)));
  11409. 8005352: 687b ldr r3, [r7, #4]
  11410. 8005354: 4a20 ldr r2, [pc, #128] @ (80053d8 <HAL_GPIO_Init+0x240>)
  11411. 8005356: 4293 cmp r3, r2
  11412. 8005358: d052 beq.n 8005400 <HAL_GPIO_Init+0x268>
  11413. 800535a: 687b ldr r3, [r7, #4]
  11414. 800535c: 4a1f ldr r2, [pc, #124] @ (80053dc <HAL_GPIO_Init+0x244>)
  11415. 800535e: 4293 cmp r3, r2
  11416. 8005360: d031 beq.n 80053c6 <HAL_GPIO_Init+0x22e>
  11417. 8005362: 687b ldr r3, [r7, #4]
  11418. 8005364: 4a1e ldr r2, [pc, #120] @ (80053e0 <HAL_GPIO_Init+0x248>)
  11419. 8005366: 4293 cmp r3, r2
  11420. 8005368: d02b beq.n 80053c2 <HAL_GPIO_Init+0x22a>
  11421. 800536a: 687b ldr r3, [r7, #4]
  11422. 800536c: 4a1d ldr r2, [pc, #116] @ (80053e4 <HAL_GPIO_Init+0x24c>)
  11423. 800536e: 4293 cmp r3, r2
  11424. 8005370: d025 beq.n 80053be <HAL_GPIO_Init+0x226>
  11425. 8005372: 687b ldr r3, [r7, #4]
  11426. 8005374: 4a1c ldr r2, [pc, #112] @ (80053e8 <HAL_GPIO_Init+0x250>)
  11427. 8005376: 4293 cmp r3, r2
  11428. 8005378: d01f beq.n 80053ba <HAL_GPIO_Init+0x222>
  11429. 800537a: 687b ldr r3, [r7, #4]
  11430. 800537c: 4a1b ldr r2, [pc, #108] @ (80053ec <HAL_GPIO_Init+0x254>)
  11431. 800537e: 4293 cmp r3, r2
  11432. 8005380: d019 beq.n 80053b6 <HAL_GPIO_Init+0x21e>
  11433. 8005382: 687b ldr r3, [r7, #4]
  11434. 8005384: 4a1a ldr r2, [pc, #104] @ (80053f0 <HAL_GPIO_Init+0x258>)
  11435. 8005386: 4293 cmp r3, r2
  11436. 8005388: d013 beq.n 80053b2 <HAL_GPIO_Init+0x21a>
  11437. 800538a: 687b ldr r3, [r7, #4]
  11438. 800538c: 4a19 ldr r2, [pc, #100] @ (80053f4 <HAL_GPIO_Init+0x25c>)
  11439. 800538e: 4293 cmp r3, r2
  11440. 8005390: d00d beq.n 80053ae <HAL_GPIO_Init+0x216>
  11441. 8005392: 687b ldr r3, [r7, #4]
  11442. 8005394: 4a18 ldr r2, [pc, #96] @ (80053f8 <HAL_GPIO_Init+0x260>)
  11443. 8005396: 4293 cmp r3, r2
  11444. 8005398: d007 beq.n 80053aa <HAL_GPIO_Init+0x212>
  11445. 800539a: 687b ldr r3, [r7, #4]
  11446. 800539c: 4a17 ldr r2, [pc, #92] @ (80053fc <HAL_GPIO_Init+0x264>)
  11447. 800539e: 4293 cmp r3, r2
  11448. 80053a0: d101 bne.n 80053a6 <HAL_GPIO_Init+0x20e>
  11449. 80053a2: 2309 movs r3, #9
  11450. 80053a4: e02d b.n 8005402 <HAL_GPIO_Init+0x26a>
  11451. 80053a6: 230a movs r3, #10
  11452. 80053a8: e02b b.n 8005402 <HAL_GPIO_Init+0x26a>
  11453. 80053aa: 2308 movs r3, #8
  11454. 80053ac: e029 b.n 8005402 <HAL_GPIO_Init+0x26a>
  11455. 80053ae: 2307 movs r3, #7
  11456. 80053b0: e027 b.n 8005402 <HAL_GPIO_Init+0x26a>
  11457. 80053b2: 2306 movs r3, #6
  11458. 80053b4: e025 b.n 8005402 <HAL_GPIO_Init+0x26a>
  11459. 80053b6: 2305 movs r3, #5
  11460. 80053b8: e023 b.n 8005402 <HAL_GPIO_Init+0x26a>
  11461. 80053ba: 2304 movs r3, #4
  11462. 80053bc: e021 b.n 8005402 <HAL_GPIO_Init+0x26a>
  11463. 80053be: 2303 movs r3, #3
  11464. 80053c0: e01f b.n 8005402 <HAL_GPIO_Init+0x26a>
  11465. 80053c2: 2302 movs r3, #2
  11466. 80053c4: e01d b.n 8005402 <HAL_GPIO_Init+0x26a>
  11467. 80053c6: 2301 movs r3, #1
  11468. 80053c8: e01b b.n 8005402 <HAL_GPIO_Init+0x26a>
  11469. 80053ca: bf00 nop
  11470. 80053cc: 58000080 .word 0x58000080
  11471. 80053d0: 58024400 .word 0x58024400
  11472. 80053d4: 58000400 .word 0x58000400
  11473. 80053d8: 58020000 .word 0x58020000
  11474. 80053dc: 58020400 .word 0x58020400
  11475. 80053e0: 58020800 .word 0x58020800
  11476. 80053e4: 58020c00 .word 0x58020c00
  11477. 80053e8: 58021000 .word 0x58021000
  11478. 80053ec: 58021400 .word 0x58021400
  11479. 80053f0: 58021800 .word 0x58021800
  11480. 80053f4: 58021c00 .word 0x58021c00
  11481. 80053f8: 58022000 .word 0x58022000
  11482. 80053fc: 58022400 .word 0x58022400
  11483. 8005400: 2300 movs r3, #0
  11484. 8005402: 69fa ldr r2, [r7, #28]
  11485. 8005404: f002 0203 and.w r2, r2, #3
  11486. 8005408: 0092 lsls r2, r2, #2
  11487. 800540a: 4093 lsls r3, r2
  11488. 800540c: 69ba ldr r2, [r7, #24]
  11489. 800540e: 4313 orrs r3, r2
  11490. 8005410: 61bb str r3, [r7, #24]
  11491. SYSCFG->EXTICR[position >> 2U] = temp;
  11492. 8005412: 4938 ldr r1, [pc, #224] @ (80054f4 <HAL_GPIO_Init+0x35c>)
  11493. 8005414: 69fb ldr r3, [r7, #28]
  11494. 8005416: 089b lsrs r3, r3, #2
  11495. 8005418: 3302 adds r3, #2
  11496. 800541a: 69ba ldr r2, [r7, #24]
  11497. 800541c: f841 2023 str.w r2, [r1, r3, lsl #2]
  11498. /* Clear Rising Falling edge configuration */
  11499. temp = EXTI->RTSR1;
  11500. 8005420: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  11501. 8005424: 681b ldr r3, [r3, #0]
  11502. 8005426: 61bb str r3, [r7, #24]
  11503. temp &= ~(iocurrent);
  11504. 8005428: 693b ldr r3, [r7, #16]
  11505. 800542a: 43db mvns r3, r3
  11506. 800542c: 69ba ldr r2, [r7, #24]
  11507. 800542e: 4013 ands r3, r2
  11508. 8005430: 61bb str r3, [r7, #24]
  11509. if ((GPIO_Init->Mode & TRIGGER_RISING) != 0x00U)
  11510. 8005432: 683b ldr r3, [r7, #0]
  11511. 8005434: 685b ldr r3, [r3, #4]
  11512. 8005436: f403 1380 and.w r3, r3, #1048576 @ 0x100000
  11513. 800543a: 2b00 cmp r3, #0
  11514. 800543c: d003 beq.n 8005446 <HAL_GPIO_Init+0x2ae>
  11515. {
  11516. temp |= iocurrent;
  11517. 800543e: 69ba ldr r2, [r7, #24]
  11518. 8005440: 693b ldr r3, [r7, #16]
  11519. 8005442: 4313 orrs r3, r2
  11520. 8005444: 61bb str r3, [r7, #24]
  11521. }
  11522. EXTI->RTSR1 = temp;
  11523. 8005446: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  11524. 800544a: 69bb ldr r3, [r7, #24]
  11525. 800544c: 6013 str r3, [r2, #0]
  11526. temp = EXTI->FTSR1;
  11527. 800544e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  11528. 8005452: 685b ldr r3, [r3, #4]
  11529. 8005454: 61bb str r3, [r7, #24]
  11530. temp &= ~(iocurrent);
  11531. 8005456: 693b ldr r3, [r7, #16]
  11532. 8005458: 43db mvns r3, r3
  11533. 800545a: 69ba ldr r2, [r7, #24]
  11534. 800545c: 4013 ands r3, r2
  11535. 800545e: 61bb str r3, [r7, #24]
  11536. if ((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00U)
  11537. 8005460: 683b ldr r3, [r7, #0]
  11538. 8005462: 685b ldr r3, [r3, #4]
  11539. 8005464: f403 1300 and.w r3, r3, #2097152 @ 0x200000
  11540. 8005468: 2b00 cmp r3, #0
  11541. 800546a: d003 beq.n 8005474 <HAL_GPIO_Init+0x2dc>
  11542. {
  11543. temp |= iocurrent;
  11544. 800546c: 69ba ldr r2, [r7, #24]
  11545. 800546e: 693b ldr r3, [r7, #16]
  11546. 8005470: 4313 orrs r3, r2
  11547. 8005472: 61bb str r3, [r7, #24]
  11548. }
  11549. EXTI->FTSR1 = temp;
  11550. 8005474: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  11551. 8005478: 69bb ldr r3, [r7, #24]
  11552. 800547a: 6053 str r3, [r2, #4]
  11553. temp = EXTI_CurrentCPU->EMR1;
  11554. 800547c: 697b ldr r3, [r7, #20]
  11555. 800547e: 685b ldr r3, [r3, #4]
  11556. 8005480: 61bb str r3, [r7, #24]
  11557. temp &= ~(iocurrent);
  11558. 8005482: 693b ldr r3, [r7, #16]
  11559. 8005484: 43db mvns r3, r3
  11560. 8005486: 69ba ldr r2, [r7, #24]
  11561. 8005488: 4013 ands r3, r2
  11562. 800548a: 61bb str r3, [r7, #24]
  11563. if ((GPIO_Init->Mode & EXTI_EVT) != 0x00U)
  11564. 800548c: 683b ldr r3, [r7, #0]
  11565. 800548e: 685b ldr r3, [r3, #4]
  11566. 8005490: f403 3300 and.w r3, r3, #131072 @ 0x20000
  11567. 8005494: 2b00 cmp r3, #0
  11568. 8005496: d003 beq.n 80054a0 <HAL_GPIO_Init+0x308>
  11569. {
  11570. temp |= iocurrent;
  11571. 8005498: 69ba ldr r2, [r7, #24]
  11572. 800549a: 693b ldr r3, [r7, #16]
  11573. 800549c: 4313 orrs r3, r2
  11574. 800549e: 61bb str r3, [r7, #24]
  11575. }
  11576. EXTI_CurrentCPU->EMR1 = temp;
  11577. 80054a0: 697b ldr r3, [r7, #20]
  11578. 80054a2: 69ba ldr r2, [r7, #24]
  11579. 80054a4: 605a str r2, [r3, #4]
  11580. /* Clear EXTI line configuration */
  11581. temp = EXTI_CurrentCPU->IMR1;
  11582. 80054a6: 697b ldr r3, [r7, #20]
  11583. 80054a8: 681b ldr r3, [r3, #0]
  11584. 80054aa: 61bb str r3, [r7, #24]
  11585. temp &= ~(iocurrent);
  11586. 80054ac: 693b ldr r3, [r7, #16]
  11587. 80054ae: 43db mvns r3, r3
  11588. 80054b0: 69ba ldr r2, [r7, #24]
  11589. 80054b2: 4013 ands r3, r2
  11590. 80054b4: 61bb str r3, [r7, #24]
  11591. if ((GPIO_Init->Mode & EXTI_IT) != 0x00U)
  11592. 80054b6: 683b ldr r3, [r7, #0]
  11593. 80054b8: 685b ldr r3, [r3, #4]
  11594. 80054ba: f403 3380 and.w r3, r3, #65536 @ 0x10000
  11595. 80054be: 2b00 cmp r3, #0
  11596. 80054c0: d003 beq.n 80054ca <HAL_GPIO_Init+0x332>
  11597. {
  11598. temp |= iocurrent;
  11599. 80054c2: 69ba ldr r2, [r7, #24]
  11600. 80054c4: 693b ldr r3, [r7, #16]
  11601. 80054c6: 4313 orrs r3, r2
  11602. 80054c8: 61bb str r3, [r7, #24]
  11603. }
  11604. EXTI_CurrentCPU->IMR1 = temp;
  11605. 80054ca: 697b ldr r3, [r7, #20]
  11606. 80054cc: 69ba ldr r2, [r7, #24]
  11607. 80054ce: 601a str r2, [r3, #0]
  11608. }
  11609. }
  11610. position++;
  11611. 80054d0: 69fb ldr r3, [r7, #28]
  11612. 80054d2: 3301 adds r3, #1
  11613. 80054d4: 61fb str r3, [r7, #28]
  11614. while (((GPIO_Init->Pin) >> position) != 0x00U)
  11615. 80054d6: 683b ldr r3, [r7, #0]
  11616. 80054d8: 681a ldr r2, [r3, #0]
  11617. 80054da: 69fb ldr r3, [r7, #28]
  11618. 80054dc: fa22 f303 lsr.w r3, r2, r3
  11619. 80054e0: 2b00 cmp r3, #0
  11620. 80054e2: f47f ae63 bne.w 80051ac <HAL_GPIO_Init+0x14>
  11621. }
  11622. }
  11623. 80054e6: bf00 nop
  11624. 80054e8: bf00 nop
  11625. 80054ea: 3724 adds r7, #36 @ 0x24
  11626. 80054ec: 46bd mov sp, r7
  11627. 80054ee: f85d 7b04 ldr.w r7, [sp], #4
  11628. 80054f2: 4770 bx lr
  11629. 80054f4: 58000400 .word 0x58000400
  11630. 080054f8 <HAL_PWREx_ConfigSupply>:
  11631. * PWR_SMPS_2V5_SUPPLIES_EXT are used only for lines that supports SMPS
  11632. * regulator.
  11633. * @retval HAL status.
  11634. */
  11635. HAL_StatusTypeDef HAL_PWREx_ConfigSupply (uint32_t SupplySource)
  11636. {
  11637. 80054f8: b580 push {r7, lr}
  11638. 80054fa: b084 sub sp, #16
  11639. 80054fc: af00 add r7, sp, #0
  11640. 80054fe: 6078 str r0, [r7, #4]
  11641. /* Check the parameters */
  11642. assert_param (IS_PWR_SUPPLY (SupplySource));
  11643. /* Check if supply source was configured */
  11644. #if defined (PWR_FLAG_SCUEN)
  11645. if (__HAL_PWR_GET_FLAG (PWR_FLAG_SCUEN) == 0U)
  11646. 8005500: 4b19 ldr r3, [pc, #100] @ (8005568 <HAL_PWREx_ConfigSupply+0x70>)
  11647. 8005502: 68db ldr r3, [r3, #12]
  11648. 8005504: f003 0304 and.w r3, r3, #4
  11649. 8005508: 2b04 cmp r3, #4
  11650. 800550a: d00a beq.n 8005522 <HAL_PWREx_ConfigSupply+0x2a>
  11651. #else
  11652. if ((PWR->CR3 & (PWR_CR3_SMPSEN | PWR_CR3_LDOEN | PWR_CR3_BYPASS)) != (PWR_CR3_SMPSEN | PWR_CR3_LDOEN))
  11653. #endif /* defined (PWR_FLAG_SCUEN) */
  11654. {
  11655. /* Check supply configuration */
  11656. if ((PWR->CR3 & PWR_SUPPLY_CONFIG_MASK) != SupplySource)
  11657. 800550c: 4b16 ldr r3, [pc, #88] @ (8005568 <HAL_PWREx_ConfigSupply+0x70>)
  11658. 800550e: 68db ldr r3, [r3, #12]
  11659. 8005510: f003 0307 and.w r3, r3, #7
  11660. 8005514: 687a ldr r2, [r7, #4]
  11661. 8005516: 429a cmp r2, r3
  11662. 8005518: d001 beq.n 800551e <HAL_PWREx_ConfigSupply+0x26>
  11663. {
  11664. /* Supply configuration update locked, can't apply a new supply config */
  11665. return HAL_ERROR;
  11666. 800551a: 2301 movs r3, #1
  11667. 800551c: e01f b.n 800555e <HAL_PWREx_ConfigSupply+0x66>
  11668. else
  11669. {
  11670. /* Supply configuration update locked, but new supply configuration
  11671. matches with old supply configuration : nothing to do
  11672. */
  11673. return HAL_OK;
  11674. 800551e: 2300 movs r3, #0
  11675. 8005520: e01d b.n 800555e <HAL_PWREx_ConfigSupply+0x66>
  11676. }
  11677. }
  11678. /* Set the power supply configuration */
  11679. MODIFY_REG (PWR->CR3, PWR_SUPPLY_CONFIG_MASK, SupplySource);
  11680. 8005522: 4b11 ldr r3, [pc, #68] @ (8005568 <HAL_PWREx_ConfigSupply+0x70>)
  11681. 8005524: 68db ldr r3, [r3, #12]
  11682. 8005526: f023 0207 bic.w r2, r3, #7
  11683. 800552a: 490f ldr r1, [pc, #60] @ (8005568 <HAL_PWREx_ConfigSupply+0x70>)
  11684. 800552c: 687b ldr r3, [r7, #4]
  11685. 800552e: 4313 orrs r3, r2
  11686. 8005530: 60cb str r3, [r1, #12]
  11687. /* Get tick */
  11688. tickstart = HAL_GetTick ();
  11689. 8005532: f7fd f895 bl 8002660 <HAL_GetTick>
  11690. 8005536: 60f8 str r0, [r7, #12]
  11691. /* Wait till voltage level flag is set */
  11692. while (__HAL_PWR_GET_FLAG (PWR_FLAG_ACTVOSRDY) == 0U)
  11693. 8005538: e009 b.n 800554e <HAL_PWREx_ConfigSupply+0x56>
  11694. {
  11695. if ((HAL_GetTick () - tickstart) > PWR_FLAG_SETTING_DELAY)
  11696. 800553a: f7fd f891 bl 8002660 <HAL_GetTick>
  11697. 800553e: 4602 mov r2, r0
  11698. 8005540: 68fb ldr r3, [r7, #12]
  11699. 8005542: 1ad3 subs r3, r2, r3
  11700. 8005544: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8
  11701. 8005548: d901 bls.n 800554e <HAL_PWREx_ConfigSupply+0x56>
  11702. {
  11703. return HAL_ERROR;
  11704. 800554a: 2301 movs r3, #1
  11705. 800554c: e007 b.n 800555e <HAL_PWREx_ConfigSupply+0x66>
  11706. while (__HAL_PWR_GET_FLAG (PWR_FLAG_ACTVOSRDY) == 0U)
  11707. 800554e: 4b06 ldr r3, [pc, #24] @ (8005568 <HAL_PWREx_ConfigSupply+0x70>)
  11708. 8005550: 685b ldr r3, [r3, #4]
  11709. 8005552: f403 5300 and.w r3, r3, #8192 @ 0x2000
  11710. 8005556: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  11711. 800555a: d1ee bne.n 800553a <HAL_PWREx_ConfigSupply+0x42>
  11712. }
  11713. }
  11714. }
  11715. #endif /* defined (SMPS) */
  11716. return HAL_OK;
  11717. 800555c: 2300 movs r3, #0
  11718. }
  11719. 800555e: 4618 mov r0, r3
  11720. 8005560: 3710 adds r7, #16
  11721. 8005562: 46bd mov sp, r7
  11722. 8005564: bd80 pop {r7, pc}
  11723. 8005566: bf00 nop
  11724. 8005568: 58024800 .word 0x58024800
  11725. 0800556c <HAL_RCC_OscConfig>:
  11726. * supported by this function. User should request a transition to HSE Off
  11727. * first and then HSE On or HSE Bypass.
  11728. * @retval HAL status
  11729. */
  11730. __weak HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
  11731. {
  11732. 800556c: b580 push {r7, lr}
  11733. 800556e: b08c sub sp, #48 @ 0x30
  11734. 8005570: af00 add r7, sp, #0
  11735. 8005572: 6078 str r0, [r7, #4]
  11736. uint32_t tickstart;
  11737. uint32_t temp1_pllckcfg, temp2_pllckcfg;
  11738. /* Check Null pointer */
  11739. if (RCC_OscInitStruct == NULL)
  11740. 8005574: 687b ldr r3, [r7, #4]
  11741. 8005576: 2b00 cmp r3, #0
  11742. 8005578: d102 bne.n 8005580 <HAL_RCC_OscConfig+0x14>
  11743. {
  11744. return HAL_ERROR;
  11745. 800557a: 2301 movs r3, #1
  11746. 800557c: f000 bc48 b.w 8005e10 <HAL_RCC_OscConfig+0x8a4>
  11747. }
  11748. /* Check the parameters */
  11749. assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
  11750. /*------------------------------- HSE Configuration ------------------------*/
  11751. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
  11752. 8005580: 687b ldr r3, [r7, #4]
  11753. 8005582: 681b ldr r3, [r3, #0]
  11754. 8005584: f003 0301 and.w r3, r3, #1
  11755. 8005588: 2b00 cmp r3, #0
  11756. 800558a: f000 8088 beq.w 800569e <HAL_RCC_OscConfig+0x132>
  11757. {
  11758. /* Check the parameters */
  11759. assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
  11760. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  11761. 800558e: 4b99 ldr r3, [pc, #612] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11762. 8005590: 691b ldr r3, [r3, #16]
  11763. 8005592: f003 0338 and.w r3, r3, #56 @ 0x38
  11764. 8005596: 62fb str r3, [r7, #44] @ 0x2c
  11765. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  11766. 8005598: 4b96 ldr r3, [pc, #600] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11767. 800559a: 6a9b ldr r3, [r3, #40] @ 0x28
  11768. 800559c: 62bb str r3, [r7, #40] @ 0x28
  11769. /* When the HSE is used as system clock or clock source for PLL in these cases HSE will not disabled */
  11770. if ((temp_sysclksrc == RCC_CFGR_SWS_HSE) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_HSE)))
  11771. 800559e: 6afb ldr r3, [r7, #44] @ 0x2c
  11772. 80055a0: 2b10 cmp r3, #16
  11773. 80055a2: d007 beq.n 80055b4 <HAL_RCC_OscConfig+0x48>
  11774. 80055a4: 6afb ldr r3, [r7, #44] @ 0x2c
  11775. 80055a6: 2b18 cmp r3, #24
  11776. 80055a8: d111 bne.n 80055ce <HAL_RCC_OscConfig+0x62>
  11777. 80055aa: 6abb ldr r3, [r7, #40] @ 0x28
  11778. 80055ac: f003 0303 and.w r3, r3, #3
  11779. 80055b0: 2b02 cmp r3, #2
  11780. 80055b2: d10c bne.n 80055ce <HAL_RCC_OscConfig+0x62>
  11781. {
  11782. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
  11783. 80055b4: 4b8f ldr r3, [pc, #572] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11784. 80055b6: 681b ldr r3, [r3, #0]
  11785. 80055b8: f403 3300 and.w r3, r3, #131072 @ 0x20000
  11786. 80055bc: 2b00 cmp r3, #0
  11787. 80055be: d06d beq.n 800569c <HAL_RCC_OscConfig+0x130>
  11788. 80055c0: 687b ldr r3, [r7, #4]
  11789. 80055c2: 685b ldr r3, [r3, #4]
  11790. 80055c4: 2b00 cmp r3, #0
  11791. 80055c6: d169 bne.n 800569c <HAL_RCC_OscConfig+0x130>
  11792. {
  11793. return HAL_ERROR;
  11794. 80055c8: 2301 movs r3, #1
  11795. 80055ca: f000 bc21 b.w 8005e10 <HAL_RCC_OscConfig+0x8a4>
  11796. }
  11797. }
  11798. else
  11799. {
  11800. /* Set the new HSE configuration ---------------------------------------*/
  11801. __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
  11802. 80055ce: 687b ldr r3, [r7, #4]
  11803. 80055d0: 685b ldr r3, [r3, #4]
  11804. 80055d2: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  11805. 80055d6: d106 bne.n 80055e6 <HAL_RCC_OscConfig+0x7a>
  11806. 80055d8: 4b86 ldr r3, [pc, #536] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11807. 80055da: 681b ldr r3, [r3, #0]
  11808. 80055dc: 4a85 ldr r2, [pc, #532] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11809. 80055de: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  11810. 80055e2: 6013 str r3, [r2, #0]
  11811. 80055e4: e02e b.n 8005644 <HAL_RCC_OscConfig+0xd8>
  11812. 80055e6: 687b ldr r3, [r7, #4]
  11813. 80055e8: 685b ldr r3, [r3, #4]
  11814. 80055ea: 2b00 cmp r3, #0
  11815. 80055ec: d10c bne.n 8005608 <HAL_RCC_OscConfig+0x9c>
  11816. 80055ee: 4b81 ldr r3, [pc, #516] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11817. 80055f0: 681b ldr r3, [r3, #0]
  11818. 80055f2: 4a80 ldr r2, [pc, #512] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11819. 80055f4: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  11820. 80055f8: 6013 str r3, [r2, #0]
  11821. 80055fa: 4b7e ldr r3, [pc, #504] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11822. 80055fc: 681b ldr r3, [r3, #0]
  11823. 80055fe: 4a7d ldr r2, [pc, #500] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11824. 8005600: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  11825. 8005604: 6013 str r3, [r2, #0]
  11826. 8005606: e01d b.n 8005644 <HAL_RCC_OscConfig+0xd8>
  11827. 8005608: 687b ldr r3, [r7, #4]
  11828. 800560a: 685b ldr r3, [r3, #4]
  11829. 800560c: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  11830. 8005610: d10c bne.n 800562c <HAL_RCC_OscConfig+0xc0>
  11831. 8005612: 4b78 ldr r3, [pc, #480] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11832. 8005614: 681b ldr r3, [r3, #0]
  11833. 8005616: 4a77 ldr r2, [pc, #476] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11834. 8005618: f443 2380 orr.w r3, r3, #262144 @ 0x40000
  11835. 800561c: 6013 str r3, [r2, #0]
  11836. 800561e: 4b75 ldr r3, [pc, #468] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11837. 8005620: 681b ldr r3, [r3, #0]
  11838. 8005622: 4a74 ldr r2, [pc, #464] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11839. 8005624: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  11840. 8005628: 6013 str r3, [r2, #0]
  11841. 800562a: e00b b.n 8005644 <HAL_RCC_OscConfig+0xd8>
  11842. 800562c: 4b71 ldr r3, [pc, #452] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11843. 800562e: 681b ldr r3, [r3, #0]
  11844. 8005630: 4a70 ldr r2, [pc, #448] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11845. 8005632: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  11846. 8005636: 6013 str r3, [r2, #0]
  11847. 8005638: 4b6e ldr r3, [pc, #440] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11848. 800563a: 681b ldr r3, [r3, #0]
  11849. 800563c: 4a6d ldr r2, [pc, #436] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11850. 800563e: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  11851. 8005642: 6013 str r3, [r2, #0]
  11852. /* Check the HSE State */
  11853. if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
  11854. 8005644: 687b ldr r3, [r7, #4]
  11855. 8005646: 685b ldr r3, [r3, #4]
  11856. 8005648: 2b00 cmp r3, #0
  11857. 800564a: d013 beq.n 8005674 <HAL_RCC_OscConfig+0x108>
  11858. {
  11859. /* Get Start Tick*/
  11860. tickstart = HAL_GetTick();
  11861. 800564c: f7fd f808 bl 8002660 <HAL_GetTick>
  11862. 8005650: 6278 str r0, [r7, #36] @ 0x24
  11863. /* Wait till HSE is ready */
  11864. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  11865. 8005652: e008 b.n 8005666 <HAL_RCC_OscConfig+0xfa>
  11866. {
  11867. if ((uint32_t)(HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
  11868. 8005654: f7fd f804 bl 8002660 <HAL_GetTick>
  11869. 8005658: 4602 mov r2, r0
  11870. 800565a: 6a7b ldr r3, [r7, #36] @ 0x24
  11871. 800565c: 1ad3 subs r3, r2, r3
  11872. 800565e: 2b64 cmp r3, #100 @ 0x64
  11873. 8005660: d901 bls.n 8005666 <HAL_RCC_OscConfig+0xfa>
  11874. {
  11875. return HAL_TIMEOUT;
  11876. 8005662: 2303 movs r3, #3
  11877. 8005664: e3d4 b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  11878. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  11879. 8005666: 4b63 ldr r3, [pc, #396] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11880. 8005668: 681b ldr r3, [r3, #0]
  11881. 800566a: f403 3300 and.w r3, r3, #131072 @ 0x20000
  11882. 800566e: 2b00 cmp r3, #0
  11883. 8005670: d0f0 beq.n 8005654 <HAL_RCC_OscConfig+0xe8>
  11884. 8005672: e014 b.n 800569e <HAL_RCC_OscConfig+0x132>
  11885. }
  11886. }
  11887. else
  11888. {
  11889. /* Get Start Tick*/
  11890. tickstart = HAL_GetTick();
  11891. 8005674: f7fc fff4 bl 8002660 <HAL_GetTick>
  11892. 8005678: 6278 str r0, [r7, #36] @ 0x24
  11893. /* Wait till HSE is disabled */
  11894. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U)
  11895. 800567a: e008 b.n 800568e <HAL_RCC_OscConfig+0x122>
  11896. {
  11897. if ((uint32_t)(HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
  11898. 800567c: f7fc fff0 bl 8002660 <HAL_GetTick>
  11899. 8005680: 4602 mov r2, r0
  11900. 8005682: 6a7b ldr r3, [r7, #36] @ 0x24
  11901. 8005684: 1ad3 subs r3, r2, r3
  11902. 8005686: 2b64 cmp r3, #100 @ 0x64
  11903. 8005688: d901 bls.n 800568e <HAL_RCC_OscConfig+0x122>
  11904. {
  11905. return HAL_TIMEOUT;
  11906. 800568a: 2303 movs r3, #3
  11907. 800568c: e3c0 b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  11908. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U)
  11909. 800568e: 4b59 ldr r3, [pc, #356] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11910. 8005690: 681b ldr r3, [r3, #0]
  11911. 8005692: f403 3300 and.w r3, r3, #131072 @ 0x20000
  11912. 8005696: 2b00 cmp r3, #0
  11913. 8005698: d1f0 bne.n 800567c <HAL_RCC_OscConfig+0x110>
  11914. 800569a: e000 b.n 800569e <HAL_RCC_OscConfig+0x132>
  11915. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
  11916. 800569c: bf00 nop
  11917. }
  11918. }
  11919. }
  11920. }
  11921. /*----------------------------- HSI Configuration --------------------------*/
  11922. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
  11923. 800569e: 687b ldr r3, [r7, #4]
  11924. 80056a0: 681b ldr r3, [r3, #0]
  11925. 80056a2: f003 0302 and.w r3, r3, #2
  11926. 80056a6: 2b00 cmp r3, #0
  11927. 80056a8: f000 80ca beq.w 8005840 <HAL_RCC_OscConfig+0x2d4>
  11928. /* Check the parameters */
  11929. assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
  11930. assert_param(IS_RCC_HSICALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
  11931. /* When the HSI is used as system clock it will not be disabled */
  11932. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  11933. 80056ac: 4b51 ldr r3, [pc, #324] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11934. 80056ae: 691b ldr r3, [r3, #16]
  11935. 80056b0: f003 0338 and.w r3, r3, #56 @ 0x38
  11936. 80056b4: 623b str r3, [r7, #32]
  11937. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  11938. 80056b6: 4b4f ldr r3, [pc, #316] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11939. 80056b8: 6a9b ldr r3, [r3, #40] @ 0x28
  11940. 80056ba: 61fb str r3, [r7, #28]
  11941. if ((temp_sysclksrc == RCC_CFGR_SWS_HSI) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_HSI)))
  11942. 80056bc: 6a3b ldr r3, [r7, #32]
  11943. 80056be: 2b00 cmp r3, #0
  11944. 80056c0: d007 beq.n 80056d2 <HAL_RCC_OscConfig+0x166>
  11945. 80056c2: 6a3b ldr r3, [r7, #32]
  11946. 80056c4: 2b18 cmp r3, #24
  11947. 80056c6: d156 bne.n 8005776 <HAL_RCC_OscConfig+0x20a>
  11948. 80056c8: 69fb ldr r3, [r7, #28]
  11949. 80056ca: f003 0303 and.w r3, r3, #3
  11950. 80056ce: 2b00 cmp r3, #0
  11951. 80056d0: d151 bne.n 8005776 <HAL_RCC_OscConfig+0x20a>
  11952. {
  11953. /* When HSI is used as system clock it will not be disabled */
  11954. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  11955. 80056d2: 4b48 ldr r3, [pc, #288] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11956. 80056d4: 681b ldr r3, [r3, #0]
  11957. 80056d6: f003 0304 and.w r3, r3, #4
  11958. 80056da: 2b00 cmp r3, #0
  11959. 80056dc: d005 beq.n 80056ea <HAL_RCC_OscConfig+0x17e>
  11960. 80056de: 687b ldr r3, [r7, #4]
  11961. 80056e0: 68db ldr r3, [r3, #12]
  11962. 80056e2: 2b00 cmp r3, #0
  11963. 80056e4: d101 bne.n 80056ea <HAL_RCC_OscConfig+0x17e>
  11964. {
  11965. return HAL_ERROR;
  11966. 80056e6: 2301 movs r3, #1
  11967. 80056e8: e392 b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  11968. }
  11969. /* Otherwise, only HSI division and calibration are allowed */
  11970. else
  11971. {
  11972. /* Enable the Internal High Speed oscillator (HSI, HSIDIV2, HSIDIV4, or HSIDIV8) */
  11973. __HAL_RCC_HSI_CONFIG(RCC_OscInitStruct->HSIState);
  11974. 80056ea: 4b42 ldr r3, [pc, #264] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11975. 80056ec: 681b ldr r3, [r3, #0]
  11976. 80056ee: f023 0219 bic.w r2, r3, #25
  11977. 80056f2: 687b ldr r3, [r7, #4]
  11978. 80056f4: 68db ldr r3, [r3, #12]
  11979. 80056f6: 493f ldr r1, [pc, #252] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  11980. 80056f8: 4313 orrs r3, r2
  11981. 80056fa: 600b str r3, [r1, #0]
  11982. /* Get Start Tick*/
  11983. tickstart = HAL_GetTick();
  11984. 80056fc: f7fc ffb0 bl 8002660 <HAL_GetTick>
  11985. 8005700: 6278 str r0, [r7, #36] @ 0x24
  11986. /* Wait till HSI is ready */
  11987. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  11988. 8005702: e008 b.n 8005716 <HAL_RCC_OscConfig+0x1aa>
  11989. {
  11990. if ((uint32_t)(HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  11991. 8005704: f7fc ffac bl 8002660 <HAL_GetTick>
  11992. 8005708: 4602 mov r2, r0
  11993. 800570a: 6a7b ldr r3, [r7, #36] @ 0x24
  11994. 800570c: 1ad3 subs r3, r2, r3
  11995. 800570e: 2b02 cmp r3, #2
  11996. 8005710: d901 bls.n 8005716 <HAL_RCC_OscConfig+0x1aa>
  11997. {
  11998. return HAL_TIMEOUT;
  11999. 8005712: 2303 movs r3, #3
  12000. 8005714: e37c b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12001. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  12002. 8005716: 4b37 ldr r3, [pc, #220] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  12003. 8005718: 681b ldr r3, [r3, #0]
  12004. 800571a: f003 0304 and.w r3, r3, #4
  12005. 800571e: 2b00 cmp r3, #0
  12006. 8005720: d0f0 beq.n 8005704 <HAL_RCC_OscConfig+0x198>
  12007. }
  12008. }
  12009. /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/
  12010. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  12011. 8005722: f7fc ffa9 bl 8002678 <HAL_GetREVID>
  12012. 8005726: 4603 mov r3, r0
  12013. 8005728: f241 0203 movw r2, #4099 @ 0x1003
  12014. 800572c: 4293 cmp r3, r2
  12015. 800572e: d817 bhi.n 8005760 <HAL_RCC_OscConfig+0x1f4>
  12016. 8005730: 687b ldr r3, [r7, #4]
  12017. 8005732: 691b ldr r3, [r3, #16]
  12018. 8005734: 2b40 cmp r3, #64 @ 0x40
  12019. 8005736: d108 bne.n 800574a <HAL_RCC_OscConfig+0x1de>
  12020. 8005738: 4b2e ldr r3, [pc, #184] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  12021. 800573a: 685b ldr r3, [r3, #4]
  12022. 800573c: f423 337c bic.w r3, r3, #258048 @ 0x3f000
  12023. 8005740: 4a2c ldr r2, [pc, #176] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  12024. 8005742: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  12025. 8005746: 6053 str r3, [r2, #4]
  12026. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  12027. 8005748: e07a b.n 8005840 <HAL_RCC_OscConfig+0x2d4>
  12028. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  12029. 800574a: 4b2a ldr r3, [pc, #168] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  12030. 800574c: 685b ldr r3, [r3, #4]
  12031. 800574e: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  12032. 8005752: 687b ldr r3, [r7, #4]
  12033. 8005754: 691b ldr r3, [r3, #16]
  12034. 8005756: 031b lsls r3, r3, #12
  12035. 8005758: 4926 ldr r1, [pc, #152] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  12036. 800575a: 4313 orrs r3, r2
  12037. 800575c: 604b str r3, [r1, #4]
  12038. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  12039. 800575e: e06f b.n 8005840 <HAL_RCC_OscConfig+0x2d4>
  12040. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  12041. 8005760: 4b24 ldr r3, [pc, #144] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  12042. 8005762: 685b ldr r3, [r3, #4]
  12043. 8005764: f023 42fe bic.w r2, r3, #2130706432 @ 0x7f000000
  12044. 8005768: 687b ldr r3, [r7, #4]
  12045. 800576a: 691b ldr r3, [r3, #16]
  12046. 800576c: 061b lsls r3, r3, #24
  12047. 800576e: 4921 ldr r1, [pc, #132] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  12048. 8005770: 4313 orrs r3, r2
  12049. 8005772: 604b str r3, [r1, #4]
  12050. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  12051. 8005774: e064 b.n 8005840 <HAL_RCC_OscConfig+0x2d4>
  12052. }
  12053. else
  12054. {
  12055. /* Check the HSI State */
  12056. if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF)
  12057. 8005776: 687b ldr r3, [r7, #4]
  12058. 8005778: 68db ldr r3, [r3, #12]
  12059. 800577a: 2b00 cmp r3, #0
  12060. 800577c: d047 beq.n 800580e <HAL_RCC_OscConfig+0x2a2>
  12061. {
  12062. /* Enable the Internal High Speed oscillator (HSI, HSIDIV2,HSIDIV4, or HSIDIV8) */
  12063. __HAL_RCC_HSI_CONFIG(RCC_OscInitStruct->HSIState);
  12064. 800577e: 4b1d ldr r3, [pc, #116] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  12065. 8005780: 681b ldr r3, [r3, #0]
  12066. 8005782: f023 0219 bic.w r2, r3, #25
  12067. 8005786: 687b ldr r3, [r7, #4]
  12068. 8005788: 68db ldr r3, [r3, #12]
  12069. 800578a: 491a ldr r1, [pc, #104] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  12070. 800578c: 4313 orrs r3, r2
  12071. 800578e: 600b str r3, [r1, #0]
  12072. /* Get Start Tick*/
  12073. tickstart = HAL_GetTick();
  12074. 8005790: f7fc ff66 bl 8002660 <HAL_GetTick>
  12075. 8005794: 6278 str r0, [r7, #36] @ 0x24
  12076. /* Wait till HSI is ready */
  12077. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  12078. 8005796: e008 b.n 80057aa <HAL_RCC_OscConfig+0x23e>
  12079. {
  12080. if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  12081. 8005798: f7fc ff62 bl 8002660 <HAL_GetTick>
  12082. 800579c: 4602 mov r2, r0
  12083. 800579e: 6a7b ldr r3, [r7, #36] @ 0x24
  12084. 80057a0: 1ad3 subs r3, r2, r3
  12085. 80057a2: 2b02 cmp r3, #2
  12086. 80057a4: d901 bls.n 80057aa <HAL_RCC_OscConfig+0x23e>
  12087. {
  12088. return HAL_TIMEOUT;
  12089. 80057a6: 2303 movs r3, #3
  12090. 80057a8: e332 b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12091. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  12092. 80057aa: 4b12 ldr r3, [pc, #72] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  12093. 80057ac: 681b ldr r3, [r3, #0]
  12094. 80057ae: f003 0304 and.w r3, r3, #4
  12095. 80057b2: 2b00 cmp r3, #0
  12096. 80057b4: d0f0 beq.n 8005798 <HAL_RCC_OscConfig+0x22c>
  12097. }
  12098. }
  12099. /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/
  12100. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  12101. 80057b6: f7fc ff5f bl 8002678 <HAL_GetREVID>
  12102. 80057ba: 4603 mov r3, r0
  12103. 80057bc: f241 0203 movw r2, #4099 @ 0x1003
  12104. 80057c0: 4293 cmp r3, r2
  12105. 80057c2: d819 bhi.n 80057f8 <HAL_RCC_OscConfig+0x28c>
  12106. 80057c4: 687b ldr r3, [r7, #4]
  12107. 80057c6: 691b ldr r3, [r3, #16]
  12108. 80057c8: 2b40 cmp r3, #64 @ 0x40
  12109. 80057ca: d108 bne.n 80057de <HAL_RCC_OscConfig+0x272>
  12110. 80057cc: 4b09 ldr r3, [pc, #36] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  12111. 80057ce: 685b ldr r3, [r3, #4]
  12112. 80057d0: f423 337c bic.w r3, r3, #258048 @ 0x3f000
  12113. 80057d4: 4a07 ldr r2, [pc, #28] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  12114. 80057d6: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  12115. 80057da: 6053 str r3, [r2, #4]
  12116. 80057dc: e030 b.n 8005840 <HAL_RCC_OscConfig+0x2d4>
  12117. 80057de: 4b05 ldr r3, [pc, #20] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  12118. 80057e0: 685b ldr r3, [r3, #4]
  12119. 80057e2: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  12120. 80057e6: 687b ldr r3, [r7, #4]
  12121. 80057e8: 691b ldr r3, [r3, #16]
  12122. 80057ea: 031b lsls r3, r3, #12
  12123. 80057ec: 4901 ldr r1, [pc, #4] @ (80057f4 <HAL_RCC_OscConfig+0x288>)
  12124. 80057ee: 4313 orrs r3, r2
  12125. 80057f0: 604b str r3, [r1, #4]
  12126. 80057f2: e025 b.n 8005840 <HAL_RCC_OscConfig+0x2d4>
  12127. 80057f4: 58024400 .word 0x58024400
  12128. 80057f8: 4b9a ldr r3, [pc, #616] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12129. 80057fa: 685b ldr r3, [r3, #4]
  12130. 80057fc: f023 42fe bic.w r2, r3, #2130706432 @ 0x7f000000
  12131. 8005800: 687b ldr r3, [r7, #4]
  12132. 8005802: 691b ldr r3, [r3, #16]
  12133. 8005804: 061b lsls r3, r3, #24
  12134. 8005806: 4997 ldr r1, [pc, #604] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12135. 8005808: 4313 orrs r3, r2
  12136. 800580a: 604b str r3, [r1, #4]
  12137. 800580c: e018 b.n 8005840 <HAL_RCC_OscConfig+0x2d4>
  12138. }
  12139. else
  12140. {
  12141. /* Disable the Internal High Speed oscillator (HSI). */
  12142. __HAL_RCC_HSI_DISABLE();
  12143. 800580e: 4b95 ldr r3, [pc, #596] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12144. 8005810: 681b ldr r3, [r3, #0]
  12145. 8005812: 4a94 ldr r2, [pc, #592] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12146. 8005814: f023 0301 bic.w r3, r3, #1
  12147. 8005818: 6013 str r3, [r2, #0]
  12148. /* Get Start Tick*/
  12149. tickstart = HAL_GetTick();
  12150. 800581a: f7fc ff21 bl 8002660 <HAL_GetTick>
  12151. 800581e: 6278 str r0, [r7, #36] @ 0x24
  12152. /* Wait till HSI is disabled */
  12153. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U)
  12154. 8005820: e008 b.n 8005834 <HAL_RCC_OscConfig+0x2c8>
  12155. {
  12156. if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  12157. 8005822: f7fc ff1d bl 8002660 <HAL_GetTick>
  12158. 8005826: 4602 mov r2, r0
  12159. 8005828: 6a7b ldr r3, [r7, #36] @ 0x24
  12160. 800582a: 1ad3 subs r3, r2, r3
  12161. 800582c: 2b02 cmp r3, #2
  12162. 800582e: d901 bls.n 8005834 <HAL_RCC_OscConfig+0x2c8>
  12163. {
  12164. return HAL_TIMEOUT;
  12165. 8005830: 2303 movs r3, #3
  12166. 8005832: e2ed b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12167. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U)
  12168. 8005834: 4b8b ldr r3, [pc, #556] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12169. 8005836: 681b ldr r3, [r3, #0]
  12170. 8005838: f003 0304 and.w r3, r3, #4
  12171. 800583c: 2b00 cmp r3, #0
  12172. 800583e: d1f0 bne.n 8005822 <HAL_RCC_OscConfig+0x2b6>
  12173. }
  12174. }
  12175. }
  12176. }
  12177. /*----------------------------- CSI Configuration --------------------------*/
  12178. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_CSI) == RCC_OSCILLATORTYPE_CSI)
  12179. 8005840: 687b ldr r3, [r7, #4]
  12180. 8005842: 681b ldr r3, [r3, #0]
  12181. 8005844: f003 0310 and.w r3, r3, #16
  12182. 8005848: 2b00 cmp r3, #0
  12183. 800584a: f000 80a9 beq.w 80059a0 <HAL_RCC_OscConfig+0x434>
  12184. /* Check the parameters */
  12185. assert_param(IS_RCC_CSI(RCC_OscInitStruct->CSIState));
  12186. assert_param(IS_RCC_CSICALIBRATION_VALUE(RCC_OscInitStruct->CSICalibrationValue));
  12187. /* When the CSI is used as system clock it will not disabled */
  12188. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  12189. 800584e: 4b85 ldr r3, [pc, #532] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12190. 8005850: 691b ldr r3, [r3, #16]
  12191. 8005852: f003 0338 and.w r3, r3, #56 @ 0x38
  12192. 8005856: 61bb str r3, [r7, #24]
  12193. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  12194. 8005858: 4b82 ldr r3, [pc, #520] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12195. 800585a: 6a9b ldr r3, [r3, #40] @ 0x28
  12196. 800585c: 617b str r3, [r7, #20]
  12197. if ((temp_sysclksrc == RCC_CFGR_SWS_CSI) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_CSI)))
  12198. 800585e: 69bb ldr r3, [r7, #24]
  12199. 8005860: 2b08 cmp r3, #8
  12200. 8005862: d007 beq.n 8005874 <HAL_RCC_OscConfig+0x308>
  12201. 8005864: 69bb ldr r3, [r7, #24]
  12202. 8005866: 2b18 cmp r3, #24
  12203. 8005868: d13a bne.n 80058e0 <HAL_RCC_OscConfig+0x374>
  12204. 800586a: 697b ldr r3, [r7, #20]
  12205. 800586c: f003 0303 and.w r3, r3, #3
  12206. 8005870: 2b01 cmp r3, #1
  12207. 8005872: d135 bne.n 80058e0 <HAL_RCC_OscConfig+0x374>
  12208. {
  12209. /* When CSI is used as system clock it will not disabled */
  12210. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  12211. 8005874: 4b7b ldr r3, [pc, #492] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12212. 8005876: 681b ldr r3, [r3, #0]
  12213. 8005878: f403 7380 and.w r3, r3, #256 @ 0x100
  12214. 800587c: 2b00 cmp r3, #0
  12215. 800587e: d005 beq.n 800588c <HAL_RCC_OscConfig+0x320>
  12216. 8005880: 687b ldr r3, [r7, #4]
  12217. 8005882: 69db ldr r3, [r3, #28]
  12218. 8005884: 2b80 cmp r3, #128 @ 0x80
  12219. 8005886: d001 beq.n 800588c <HAL_RCC_OscConfig+0x320>
  12220. {
  12221. return HAL_ERROR;
  12222. 8005888: 2301 movs r3, #1
  12223. 800588a: e2c1 b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12224. }
  12225. /* Otherwise, just the calibration is allowed */
  12226. else
  12227. {
  12228. /* Adjusts the Internal High Speed oscillator (CSI) calibration value.*/
  12229. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  12230. 800588c: f7fc fef4 bl 8002678 <HAL_GetREVID>
  12231. 8005890: 4603 mov r3, r0
  12232. 8005892: f241 0203 movw r2, #4099 @ 0x1003
  12233. 8005896: 4293 cmp r3, r2
  12234. 8005898: d817 bhi.n 80058ca <HAL_RCC_OscConfig+0x35e>
  12235. 800589a: 687b ldr r3, [r7, #4]
  12236. 800589c: 6a1b ldr r3, [r3, #32]
  12237. 800589e: 2b20 cmp r3, #32
  12238. 80058a0: d108 bne.n 80058b4 <HAL_RCC_OscConfig+0x348>
  12239. 80058a2: 4b70 ldr r3, [pc, #448] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12240. 80058a4: 685b ldr r3, [r3, #4]
  12241. 80058a6: f023 43f8 bic.w r3, r3, #2080374784 @ 0x7c000000
  12242. 80058aa: 4a6e ldr r2, [pc, #440] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12243. 80058ac: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000
  12244. 80058b0: 6053 str r3, [r2, #4]
  12245. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  12246. 80058b2: e075 b.n 80059a0 <HAL_RCC_OscConfig+0x434>
  12247. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  12248. 80058b4: 4b6b ldr r3, [pc, #428] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12249. 80058b6: 685b ldr r3, [r3, #4]
  12250. 80058b8: f023 42f8 bic.w r2, r3, #2080374784 @ 0x7c000000
  12251. 80058bc: 687b ldr r3, [r7, #4]
  12252. 80058be: 6a1b ldr r3, [r3, #32]
  12253. 80058c0: 069b lsls r3, r3, #26
  12254. 80058c2: 4968 ldr r1, [pc, #416] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12255. 80058c4: 4313 orrs r3, r2
  12256. 80058c6: 604b str r3, [r1, #4]
  12257. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  12258. 80058c8: e06a b.n 80059a0 <HAL_RCC_OscConfig+0x434>
  12259. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  12260. 80058ca: 4b66 ldr r3, [pc, #408] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12261. 80058cc: 68db ldr r3, [r3, #12]
  12262. 80058ce: f023 527c bic.w r2, r3, #1056964608 @ 0x3f000000
  12263. 80058d2: 687b ldr r3, [r7, #4]
  12264. 80058d4: 6a1b ldr r3, [r3, #32]
  12265. 80058d6: 061b lsls r3, r3, #24
  12266. 80058d8: 4962 ldr r1, [pc, #392] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12267. 80058da: 4313 orrs r3, r2
  12268. 80058dc: 60cb str r3, [r1, #12]
  12269. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  12270. 80058de: e05f b.n 80059a0 <HAL_RCC_OscConfig+0x434>
  12271. }
  12272. }
  12273. else
  12274. {
  12275. /* Check the CSI State */
  12276. if ((RCC_OscInitStruct->CSIState) != RCC_CSI_OFF)
  12277. 80058e0: 687b ldr r3, [r7, #4]
  12278. 80058e2: 69db ldr r3, [r3, #28]
  12279. 80058e4: 2b00 cmp r3, #0
  12280. 80058e6: d042 beq.n 800596e <HAL_RCC_OscConfig+0x402>
  12281. {
  12282. /* Enable the Internal High Speed oscillator (CSI). */
  12283. __HAL_RCC_CSI_ENABLE();
  12284. 80058e8: 4b5e ldr r3, [pc, #376] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12285. 80058ea: 681b ldr r3, [r3, #0]
  12286. 80058ec: 4a5d ldr r2, [pc, #372] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12287. 80058ee: f043 0380 orr.w r3, r3, #128 @ 0x80
  12288. 80058f2: 6013 str r3, [r2, #0]
  12289. /* Get Start Tick*/
  12290. tickstart = HAL_GetTick();
  12291. 80058f4: f7fc feb4 bl 8002660 <HAL_GetTick>
  12292. 80058f8: 6278 str r0, [r7, #36] @ 0x24
  12293. /* Wait till CSI is ready */
  12294. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  12295. 80058fa: e008 b.n 800590e <HAL_RCC_OscConfig+0x3a2>
  12296. {
  12297. if ((HAL_GetTick() - tickstart) > CSI_TIMEOUT_VALUE)
  12298. 80058fc: f7fc feb0 bl 8002660 <HAL_GetTick>
  12299. 8005900: 4602 mov r2, r0
  12300. 8005902: 6a7b ldr r3, [r7, #36] @ 0x24
  12301. 8005904: 1ad3 subs r3, r2, r3
  12302. 8005906: 2b02 cmp r3, #2
  12303. 8005908: d901 bls.n 800590e <HAL_RCC_OscConfig+0x3a2>
  12304. {
  12305. return HAL_TIMEOUT;
  12306. 800590a: 2303 movs r3, #3
  12307. 800590c: e280 b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12308. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  12309. 800590e: 4b55 ldr r3, [pc, #340] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12310. 8005910: 681b ldr r3, [r3, #0]
  12311. 8005912: f403 7380 and.w r3, r3, #256 @ 0x100
  12312. 8005916: 2b00 cmp r3, #0
  12313. 8005918: d0f0 beq.n 80058fc <HAL_RCC_OscConfig+0x390>
  12314. }
  12315. }
  12316. /* Adjusts the Internal High Speed oscillator (CSI) calibration value.*/
  12317. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  12318. 800591a: f7fc fead bl 8002678 <HAL_GetREVID>
  12319. 800591e: 4603 mov r3, r0
  12320. 8005920: f241 0203 movw r2, #4099 @ 0x1003
  12321. 8005924: 4293 cmp r3, r2
  12322. 8005926: d817 bhi.n 8005958 <HAL_RCC_OscConfig+0x3ec>
  12323. 8005928: 687b ldr r3, [r7, #4]
  12324. 800592a: 6a1b ldr r3, [r3, #32]
  12325. 800592c: 2b20 cmp r3, #32
  12326. 800592e: d108 bne.n 8005942 <HAL_RCC_OscConfig+0x3d6>
  12327. 8005930: 4b4c ldr r3, [pc, #304] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12328. 8005932: 685b ldr r3, [r3, #4]
  12329. 8005934: f023 43f8 bic.w r3, r3, #2080374784 @ 0x7c000000
  12330. 8005938: 4a4a ldr r2, [pc, #296] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12331. 800593a: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000
  12332. 800593e: 6053 str r3, [r2, #4]
  12333. 8005940: e02e b.n 80059a0 <HAL_RCC_OscConfig+0x434>
  12334. 8005942: 4b48 ldr r3, [pc, #288] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12335. 8005944: 685b ldr r3, [r3, #4]
  12336. 8005946: f023 42f8 bic.w r2, r3, #2080374784 @ 0x7c000000
  12337. 800594a: 687b ldr r3, [r7, #4]
  12338. 800594c: 6a1b ldr r3, [r3, #32]
  12339. 800594e: 069b lsls r3, r3, #26
  12340. 8005950: 4944 ldr r1, [pc, #272] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12341. 8005952: 4313 orrs r3, r2
  12342. 8005954: 604b str r3, [r1, #4]
  12343. 8005956: e023 b.n 80059a0 <HAL_RCC_OscConfig+0x434>
  12344. 8005958: 4b42 ldr r3, [pc, #264] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12345. 800595a: 68db ldr r3, [r3, #12]
  12346. 800595c: f023 527c bic.w r2, r3, #1056964608 @ 0x3f000000
  12347. 8005960: 687b ldr r3, [r7, #4]
  12348. 8005962: 6a1b ldr r3, [r3, #32]
  12349. 8005964: 061b lsls r3, r3, #24
  12350. 8005966: 493f ldr r1, [pc, #252] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12351. 8005968: 4313 orrs r3, r2
  12352. 800596a: 60cb str r3, [r1, #12]
  12353. 800596c: e018 b.n 80059a0 <HAL_RCC_OscConfig+0x434>
  12354. }
  12355. else
  12356. {
  12357. /* Disable the Internal High Speed oscillator (CSI). */
  12358. __HAL_RCC_CSI_DISABLE();
  12359. 800596e: 4b3d ldr r3, [pc, #244] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12360. 8005970: 681b ldr r3, [r3, #0]
  12361. 8005972: 4a3c ldr r2, [pc, #240] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12362. 8005974: f023 0380 bic.w r3, r3, #128 @ 0x80
  12363. 8005978: 6013 str r3, [r2, #0]
  12364. /* Get Start Tick*/
  12365. tickstart = HAL_GetTick();
  12366. 800597a: f7fc fe71 bl 8002660 <HAL_GetTick>
  12367. 800597e: 6278 str r0, [r7, #36] @ 0x24
  12368. /* Wait till CSI is disabled */
  12369. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U)
  12370. 8005980: e008 b.n 8005994 <HAL_RCC_OscConfig+0x428>
  12371. {
  12372. if ((HAL_GetTick() - tickstart) > CSI_TIMEOUT_VALUE)
  12373. 8005982: f7fc fe6d bl 8002660 <HAL_GetTick>
  12374. 8005986: 4602 mov r2, r0
  12375. 8005988: 6a7b ldr r3, [r7, #36] @ 0x24
  12376. 800598a: 1ad3 subs r3, r2, r3
  12377. 800598c: 2b02 cmp r3, #2
  12378. 800598e: d901 bls.n 8005994 <HAL_RCC_OscConfig+0x428>
  12379. {
  12380. return HAL_TIMEOUT;
  12381. 8005990: 2303 movs r3, #3
  12382. 8005992: e23d b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12383. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U)
  12384. 8005994: 4b33 ldr r3, [pc, #204] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12385. 8005996: 681b ldr r3, [r3, #0]
  12386. 8005998: f403 7380 and.w r3, r3, #256 @ 0x100
  12387. 800599c: 2b00 cmp r3, #0
  12388. 800599e: d1f0 bne.n 8005982 <HAL_RCC_OscConfig+0x416>
  12389. }
  12390. }
  12391. }
  12392. }
  12393. /*------------------------------ LSI Configuration -------------------------*/
  12394. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
  12395. 80059a0: 687b ldr r3, [r7, #4]
  12396. 80059a2: 681b ldr r3, [r3, #0]
  12397. 80059a4: f003 0308 and.w r3, r3, #8
  12398. 80059a8: 2b00 cmp r3, #0
  12399. 80059aa: d036 beq.n 8005a1a <HAL_RCC_OscConfig+0x4ae>
  12400. {
  12401. /* Check the parameters */
  12402. assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
  12403. /* Check the LSI State */
  12404. if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF)
  12405. 80059ac: 687b ldr r3, [r7, #4]
  12406. 80059ae: 695b ldr r3, [r3, #20]
  12407. 80059b0: 2b00 cmp r3, #0
  12408. 80059b2: d019 beq.n 80059e8 <HAL_RCC_OscConfig+0x47c>
  12409. {
  12410. /* Enable the Internal Low Speed oscillator (LSI). */
  12411. __HAL_RCC_LSI_ENABLE();
  12412. 80059b4: 4b2b ldr r3, [pc, #172] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12413. 80059b6: 6f5b ldr r3, [r3, #116] @ 0x74
  12414. 80059b8: 4a2a ldr r2, [pc, #168] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12415. 80059ba: f043 0301 orr.w r3, r3, #1
  12416. 80059be: 6753 str r3, [r2, #116] @ 0x74
  12417. /* Get Start Tick*/
  12418. tickstart = HAL_GetTick();
  12419. 80059c0: f7fc fe4e bl 8002660 <HAL_GetTick>
  12420. 80059c4: 6278 str r0, [r7, #36] @ 0x24
  12421. /* Wait till LSI is ready */
  12422. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == 0U)
  12423. 80059c6: e008 b.n 80059da <HAL_RCC_OscConfig+0x46e>
  12424. {
  12425. if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
  12426. 80059c8: f7fc fe4a bl 8002660 <HAL_GetTick>
  12427. 80059cc: 4602 mov r2, r0
  12428. 80059ce: 6a7b ldr r3, [r7, #36] @ 0x24
  12429. 80059d0: 1ad3 subs r3, r2, r3
  12430. 80059d2: 2b02 cmp r3, #2
  12431. 80059d4: d901 bls.n 80059da <HAL_RCC_OscConfig+0x46e>
  12432. {
  12433. return HAL_TIMEOUT;
  12434. 80059d6: 2303 movs r3, #3
  12435. 80059d8: e21a b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12436. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == 0U)
  12437. 80059da: 4b22 ldr r3, [pc, #136] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12438. 80059dc: 6f5b ldr r3, [r3, #116] @ 0x74
  12439. 80059de: f003 0302 and.w r3, r3, #2
  12440. 80059e2: 2b00 cmp r3, #0
  12441. 80059e4: d0f0 beq.n 80059c8 <HAL_RCC_OscConfig+0x45c>
  12442. 80059e6: e018 b.n 8005a1a <HAL_RCC_OscConfig+0x4ae>
  12443. }
  12444. }
  12445. else
  12446. {
  12447. /* Disable the Internal Low Speed oscillator (LSI). */
  12448. __HAL_RCC_LSI_DISABLE();
  12449. 80059e8: 4b1e ldr r3, [pc, #120] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12450. 80059ea: 6f5b ldr r3, [r3, #116] @ 0x74
  12451. 80059ec: 4a1d ldr r2, [pc, #116] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12452. 80059ee: f023 0301 bic.w r3, r3, #1
  12453. 80059f2: 6753 str r3, [r2, #116] @ 0x74
  12454. /* Get Start Tick*/
  12455. tickstart = HAL_GetTick();
  12456. 80059f4: f7fc fe34 bl 8002660 <HAL_GetTick>
  12457. 80059f8: 6278 str r0, [r7, #36] @ 0x24
  12458. /* Wait till LSI is ready */
  12459. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != 0U)
  12460. 80059fa: e008 b.n 8005a0e <HAL_RCC_OscConfig+0x4a2>
  12461. {
  12462. if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
  12463. 80059fc: f7fc fe30 bl 8002660 <HAL_GetTick>
  12464. 8005a00: 4602 mov r2, r0
  12465. 8005a02: 6a7b ldr r3, [r7, #36] @ 0x24
  12466. 8005a04: 1ad3 subs r3, r2, r3
  12467. 8005a06: 2b02 cmp r3, #2
  12468. 8005a08: d901 bls.n 8005a0e <HAL_RCC_OscConfig+0x4a2>
  12469. {
  12470. return HAL_TIMEOUT;
  12471. 8005a0a: 2303 movs r3, #3
  12472. 8005a0c: e200 b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12473. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != 0U)
  12474. 8005a0e: 4b15 ldr r3, [pc, #84] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12475. 8005a10: 6f5b ldr r3, [r3, #116] @ 0x74
  12476. 8005a12: f003 0302 and.w r3, r3, #2
  12477. 8005a16: 2b00 cmp r3, #0
  12478. 8005a18: d1f0 bne.n 80059fc <HAL_RCC_OscConfig+0x490>
  12479. }
  12480. }
  12481. }
  12482. /*------------------------------ HSI48 Configuration -------------------------*/
  12483. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI48) == RCC_OSCILLATORTYPE_HSI48)
  12484. 8005a1a: 687b ldr r3, [r7, #4]
  12485. 8005a1c: 681b ldr r3, [r3, #0]
  12486. 8005a1e: f003 0320 and.w r3, r3, #32
  12487. 8005a22: 2b00 cmp r3, #0
  12488. 8005a24: d039 beq.n 8005a9a <HAL_RCC_OscConfig+0x52e>
  12489. {
  12490. /* Check the parameters */
  12491. assert_param(IS_RCC_HSI48(RCC_OscInitStruct->HSI48State));
  12492. /* Check the HSI48 State */
  12493. if ((RCC_OscInitStruct->HSI48State) != RCC_HSI48_OFF)
  12494. 8005a26: 687b ldr r3, [r7, #4]
  12495. 8005a28: 699b ldr r3, [r3, #24]
  12496. 8005a2a: 2b00 cmp r3, #0
  12497. 8005a2c: d01c beq.n 8005a68 <HAL_RCC_OscConfig+0x4fc>
  12498. {
  12499. /* Enable the Internal Low Speed oscillator (HSI48). */
  12500. __HAL_RCC_HSI48_ENABLE();
  12501. 8005a2e: 4b0d ldr r3, [pc, #52] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12502. 8005a30: 681b ldr r3, [r3, #0]
  12503. 8005a32: 4a0c ldr r2, [pc, #48] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12504. 8005a34: f443 5380 orr.w r3, r3, #4096 @ 0x1000
  12505. 8005a38: 6013 str r3, [r2, #0]
  12506. /* Get time-out */
  12507. tickstart = HAL_GetTick();
  12508. 8005a3a: f7fc fe11 bl 8002660 <HAL_GetTick>
  12509. 8005a3e: 6278 str r0, [r7, #36] @ 0x24
  12510. /* Wait till HSI48 is ready */
  12511. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) == 0U)
  12512. 8005a40: e008 b.n 8005a54 <HAL_RCC_OscConfig+0x4e8>
  12513. {
  12514. if ((HAL_GetTick() - tickstart) > HSI48_TIMEOUT_VALUE)
  12515. 8005a42: f7fc fe0d bl 8002660 <HAL_GetTick>
  12516. 8005a46: 4602 mov r2, r0
  12517. 8005a48: 6a7b ldr r3, [r7, #36] @ 0x24
  12518. 8005a4a: 1ad3 subs r3, r2, r3
  12519. 8005a4c: 2b02 cmp r3, #2
  12520. 8005a4e: d901 bls.n 8005a54 <HAL_RCC_OscConfig+0x4e8>
  12521. {
  12522. return HAL_TIMEOUT;
  12523. 8005a50: 2303 movs r3, #3
  12524. 8005a52: e1dd b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12525. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) == 0U)
  12526. 8005a54: 4b03 ldr r3, [pc, #12] @ (8005a64 <HAL_RCC_OscConfig+0x4f8>)
  12527. 8005a56: 681b ldr r3, [r3, #0]
  12528. 8005a58: f403 5300 and.w r3, r3, #8192 @ 0x2000
  12529. 8005a5c: 2b00 cmp r3, #0
  12530. 8005a5e: d0f0 beq.n 8005a42 <HAL_RCC_OscConfig+0x4d6>
  12531. 8005a60: e01b b.n 8005a9a <HAL_RCC_OscConfig+0x52e>
  12532. 8005a62: bf00 nop
  12533. 8005a64: 58024400 .word 0x58024400
  12534. }
  12535. }
  12536. else
  12537. {
  12538. /* Disable the Internal Low Speed oscillator (HSI48). */
  12539. __HAL_RCC_HSI48_DISABLE();
  12540. 8005a68: 4b9b ldr r3, [pc, #620] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12541. 8005a6a: 681b ldr r3, [r3, #0]
  12542. 8005a6c: 4a9a ldr r2, [pc, #616] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12543. 8005a6e: f423 5380 bic.w r3, r3, #4096 @ 0x1000
  12544. 8005a72: 6013 str r3, [r2, #0]
  12545. /* Get time-out */
  12546. tickstart = HAL_GetTick();
  12547. 8005a74: f7fc fdf4 bl 8002660 <HAL_GetTick>
  12548. 8005a78: 6278 str r0, [r7, #36] @ 0x24
  12549. /* Wait till HSI48 is ready */
  12550. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) != 0U)
  12551. 8005a7a: e008 b.n 8005a8e <HAL_RCC_OscConfig+0x522>
  12552. {
  12553. if ((HAL_GetTick() - tickstart) > HSI48_TIMEOUT_VALUE)
  12554. 8005a7c: f7fc fdf0 bl 8002660 <HAL_GetTick>
  12555. 8005a80: 4602 mov r2, r0
  12556. 8005a82: 6a7b ldr r3, [r7, #36] @ 0x24
  12557. 8005a84: 1ad3 subs r3, r2, r3
  12558. 8005a86: 2b02 cmp r3, #2
  12559. 8005a88: d901 bls.n 8005a8e <HAL_RCC_OscConfig+0x522>
  12560. {
  12561. return HAL_TIMEOUT;
  12562. 8005a8a: 2303 movs r3, #3
  12563. 8005a8c: e1c0 b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12564. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) != 0U)
  12565. 8005a8e: 4b92 ldr r3, [pc, #584] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12566. 8005a90: 681b ldr r3, [r3, #0]
  12567. 8005a92: f403 5300 and.w r3, r3, #8192 @ 0x2000
  12568. 8005a96: 2b00 cmp r3, #0
  12569. 8005a98: d1f0 bne.n 8005a7c <HAL_RCC_OscConfig+0x510>
  12570. }
  12571. }
  12572. }
  12573. }
  12574. /*------------------------------ LSE Configuration -------------------------*/
  12575. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
  12576. 8005a9a: 687b ldr r3, [r7, #4]
  12577. 8005a9c: 681b ldr r3, [r3, #0]
  12578. 8005a9e: f003 0304 and.w r3, r3, #4
  12579. 8005aa2: 2b00 cmp r3, #0
  12580. 8005aa4: f000 8081 beq.w 8005baa <HAL_RCC_OscConfig+0x63e>
  12581. {
  12582. /* Check the parameters */
  12583. assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
  12584. /* Enable write access to Backup domain */
  12585. PWR->CR1 |= PWR_CR1_DBP;
  12586. 8005aa8: 4b8c ldr r3, [pc, #560] @ (8005cdc <HAL_RCC_OscConfig+0x770>)
  12587. 8005aaa: 681b ldr r3, [r3, #0]
  12588. 8005aac: 4a8b ldr r2, [pc, #556] @ (8005cdc <HAL_RCC_OscConfig+0x770>)
  12589. 8005aae: f443 7380 orr.w r3, r3, #256 @ 0x100
  12590. 8005ab2: 6013 str r3, [r2, #0]
  12591. /* Wait for Backup domain Write protection disable */
  12592. tickstart = HAL_GetTick();
  12593. 8005ab4: f7fc fdd4 bl 8002660 <HAL_GetTick>
  12594. 8005ab8: 6278 str r0, [r7, #36] @ 0x24
  12595. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  12596. 8005aba: e008 b.n 8005ace <HAL_RCC_OscConfig+0x562>
  12597. {
  12598. if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
  12599. 8005abc: f7fc fdd0 bl 8002660 <HAL_GetTick>
  12600. 8005ac0: 4602 mov r2, r0
  12601. 8005ac2: 6a7b ldr r3, [r7, #36] @ 0x24
  12602. 8005ac4: 1ad3 subs r3, r2, r3
  12603. 8005ac6: 2b64 cmp r3, #100 @ 0x64
  12604. 8005ac8: d901 bls.n 8005ace <HAL_RCC_OscConfig+0x562>
  12605. {
  12606. return HAL_TIMEOUT;
  12607. 8005aca: 2303 movs r3, #3
  12608. 8005acc: e1a0 b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12609. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  12610. 8005ace: 4b83 ldr r3, [pc, #524] @ (8005cdc <HAL_RCC_OscConfig+0x770>)
  12611. 8005ad0: 681b ldr r3, [r3, #0]
  12612. 8005ad2: f403 7380 and.w r3, r3, #256 @ 0x100
  12613. 8005ad6: 2b00 cmp r3, #0
  12614. 8005ad8: d0f0 beq.n 8005abc <HAL_RCC_OscConfig+0x550>
  12615. }
  12616. }
  12617. /* Set the new LSE configuration -----------------------------------------*/
  12618. __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
  12619. 8005ada: 687b ldr r3, [r7, #4]
  12620. 8005adc: 689b ldr r3, [r3, #8]
  12621. 8005ade: 2b01 cmp r3, #1
  12622. 8005ae0: d106 bne.n 8005af0 <HAL_RCC_OscConfig+0x584>
  12623. 8005ae2: 4b7d ldr r3, [pc, #500] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12624. 8005ae4: 6f1b ldr r3, [r3, #112] @ 0x70
  12625. 8005ae6: 4a7c ldr r2, [pc, #496] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12626. 8005ae8: f043 0301 orr.w r3, r3, #1
  12627. 8005aec: 6713 str r3, [r2, #112] @ 0x70
  12628. 8005aee: e02d b.n 8005b4c <HAL_RCC_OscConfig+0x5e0>
  12629. 8005af0: 687b ldr r3, [r7, #4]
  12630. 8005af2: 689b ldr r3, [r3, #8]
  12631. 8005af4: 2b00 cmp r3, #0
  12632. 8005af6: d10c bne.n 8005b12 <HAL_RCC_OscConfig+0x5a6>
  12633. 8005af8: 4b77 ldr r3, [pc, #476] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12634. 8005afa: 6f1b ldr r3, [r3, #112] @ 0x70
  12635. 8005afc: 4a76 ldr r2, [pc, #472] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12636. 8005afe: f023 0301 bic.w r3, r3, #1
  12637. 8005b02: 6713 str r3, [r2, #112] @ 0x70
  12638. 8005b04: 4b74 ldr r3, [pc, #464] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12639. 8005b06: 6f1b ldr r3, [r3, #112] @ 0x70
  12640. 8005b08: 4a73 ldr r2, [pc, #460] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12641. 8005b0a: f023 0304 bic.w r3, r3, #4
  12642. 8005b0e: 6713 str r3, [r2, #112] @ 0x70
  12643. 8005b10: e01c b.n 8005b4c <HAL_RCC_OscConfig+0x5e0>
  12644. 8005b12: 687b ldr r3, [r7, #4]
  12645. 8005b14: 689b ldr r3, [r3, #8]
  12646. 8005b16: 2b05 cmp r3, #5
  12647. 8005b18: d10c bne.n 8005b34 <HAL_RCC_OscConfig+0x5c8>
  12648. 8005b1a: 4b6f ldr r3, [pc, #444] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12649. 8005b1c: 6f1b ldr r3, [r3, #112] @ 0x70
  12650. 8005b1e: 4a6e ldr r2, [pc, #440] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12651. 8005b20: f043 0304 orr.w r3, r3, #4
  12652. 8005b24: 6713 str r3, [r2, #112] @ 0x70
  12653. 8005b26: 4b6c ldr r3, [pc, #432] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12654. 8005b28: 6f1b ldr r3, [r3, #112] @ 0x70
  12655. 8005b2a: 4a6b ldr r2, [pc, #428] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12656. 8005b2c: f043 0301 orr.w r3, r3, #1
  12657. 8005b30: 6713 str r3, [r2, #112] @ 0x70
  12658. 8005b32: e00b b.n 8005b4c <HAL_RCC_OscConfig+0x5e0>
  12659. 8005b34: 4b68 ldr r3, [pc, #416] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12660. 8005b36: 6f1b ldr r3, [r3, #112] @ 0x70
  12661. 8005b38: 4a67 ldr r2, [pc, #412] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12662. 8005b3a: f023 0301 bic.w r3, r3, #1
  12663. 8005b3e: 6713 str r3, [r2, #112] @ 0x70
  12664. 8005b40: 4b65 ldr r3, [pc, #404] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12665. 8005b42: 6f1b ldr r3, [r3, #112] @ 0x70
  12666. 8005b44: 4a64 ldr r2, [pc, #400] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12667. 8005b46: f023 0304 bic.w r3, r3, #4
  12668. 8005b4a: 6713 str r3, [r2, #112] @ 0x70
  12669. /* Check the LSE State */
  12670. if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
  12671. 8005b4c: 687b ldr r3, [r7, #4]
  12672. 8005b4e: 689b ldr r3, [r3, #8]
  12673. 8005b50: 2b00 cmp r3, #0
  12674. 8005b52: d015 beq.n 8005b80 <HAL_RCC_OscConfig+0x614>
  12675. {
  12676. /* Get Start Tick*/
  12677. tickstart = HAL_GetTick();
  12678. 8005b54: f7fc fd84 bl 8002660 <HAL_GetTick>
  12679. 8005b58: 6278 str r0, [r7, #36] @ 0x24
  12680. /* Wait till LSE is ready */
  12681. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  12682. 8005b5a: e00a b.n 8005b72 <HAL_RCC_OscConfig+0x606>
  12683. {
  12684. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  12685. 8005b5c: f7fc fd80 bl 8002660 <HAL_GetTick>
  12686. 8005b60: 4602 mov r2, r0
  12687. 8005b62: 6a7b ldr r3, [r7, #36] @ 0x24
  12688. 8005b64: 1ad3 subs r3, r2, r3
  12689. 8005b66: f241 3288 movw r2, #5000 @ 0x1388
  12690. 8005b6a: 4293 cmp r3, r2
  12691. 8005b6c: d901 bls.n 8005b72 <HAL_RCC_OscConfig+0x606>
  12692. {
  12693. return HAL_TIMEOUT;
  12694. 8005b6e: 2303 movs r3, #3
  12695. 8005b70: e14e b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12696. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  12697. 8005b72: 4b59 ldr r3, [pc, #356] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12698. 8005b74: 6f1b ldr r3, [r3, #112] @ 0x70
  12699. 8005b76: f003 0302 and.w r3, r3, #2
  12700. 8005b7a: 2b00 cmp r3, #0
  12701. 8005b7c: d0ee beq.n 8005b5c <HAL_RCC_OscConfig+0x5f0>
  12702. 8005b7e: e014 b.n 8005baa <HAL_RCC_OscConfig+0x63e>
  12703. }
  12704. }
  12705. else
  12706. {
  12707. /* Get Start Tick*/
  12708. tickstart = HAL_GetTick();
  12709. 8005b80: f7fc fd6e bl 8002660 <HAL_GetTick>
  12710. 8005b84: 6278 str r0, [r7, #36] @ 0x24
  12711. /* Wait till LSE is disabled */
  12712. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != 0U)
  12713. 8005b86: e00a b.n 8005b9e <HAL_RCC_OscConfig+0x632>
  12714. {
  12715. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  12716. 8005b88: f7fc fd6a bl 8002660 <HAL_GetTick>
  12717. 8005b8c: 4602 mov r2, r0
  12718. 8005b8e: 6a7b ldr r3, [r7, #36] @ 0x24
  12719. 8005b90: 1ad3 subs r3, r2, r3
  12720. 8005b92: f241 3288 movw r2, #5000 @ 0x1388
  12721. 8005b96: 4293 cmp r3, r2
  12722. 8005b98: d901 bls.n 8005b9e <HAL_RCC_OscConfig+0x632>
  12723. {
  12724. return HAL_TIMEOUT;
  12725. 8005b9a: 2303 movs r3, #3
  12726. 8005b9c: e138 b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12727. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != 0U)
  12728. 8005b9e: 4b4e ldr r3, [pc, #312] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12729. 8005ba0: 6f1b ldr r3, [r3, #112] @ 0x70
  12730. 8005ba2: f003 0302 and.w r3, r3, #2
  12731. 8005ba6: 2b00 cmp r3, #0
  12732. 8005ba8: d1ee bne.n 8005b88 <HAL_RCC_OscConfig+0x61c>
  12733. }
  12734. }
  12735. /*-------------------------------- PLL Configuration -----------------------*/
  12736. /* Check the parameters */
  12737. assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState));
  12738. if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
  12739. 8005baa: 687b ldr r3, [r7, #4]
  12740. 8005bac: 6a5b ldr r3, [r3, #36] @ 0x24
  12741. 8005bae: 2b00 cmp r3, #0
  12742. 8005bb0: f000 812d beq.w 8005e0e <HAL_RCC_OscConfig+0x8a2>
  12743. {
  12744. /* Check if the PLL is used as system clock or not */
  12745. if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL1)
  12746. 8005bb4: 4b48 ldr r3, [pc, #288] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12747. 8005bb6: 691b ldr r3, [r3, #16]
  12748. 8005bb8: f003 0338 and.w r3, r3, #56 @ 0x38
  12749. 8005bbc: 2b18 cmp r3, #24
  12750. 8005bbe: f000 80bd beq.w 8005d3c <HAL_RCC_OscConfig+0x7d0>
  12751. {
  12752. if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
  12753. 8005bc2: 687b ldr r3, [r7, #4]
  12754. 8005bc4: 6a5b ldr r3, [r3, #36] @ 0x24
  12755. 8005bc6: 2b02 cmp r3, #2
  12756. 8005bc8: f040 809e bne.w 8005d08 <HAL_RCC_OscConfig+0x79c>
  12757. assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ));
  12758. assert_param(IS_RCC_PLLR_VALUE(RCC_OscInitStruct->PLL.PLLR));
  12759. assert_param(IS_RCC_PLLFRACN_VALUE(RCC_OscInitStruct->PLL.PLLFRACN));
  12760. /* Disable the main PLL. */
  12761. __HAL_RCC_PLL_DISABLE();
  12762. 8005bcc: 4b42 ldr r3, [pc, #264] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12763. 8005bce: 681b ldr r3, [r3, #0]
  12764. 8005bd0: 4a41 ldr r2, [pc, #260] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12765. 8005bd2: f023 7380 bic.w r3, r3, #16777216 @ 0x1000000
  12766. 8005bd6: 6013 str r3, [r2, #0]
  12767. /* Get Start Tick*/
  12768. tickstart = HAL_GetTick();
  12769. 8005bd8: f7fc fd42 bl 8002660 <HAL_GetTick>
  12770. 8005bdc: 6278 str r0, [r7, #36] @ 0x24
  12771. /* Wait till PLL is disabled */
  12772. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  12773. 8005bde: e008 b.n 8005bf2 <HAL_RCC_OscConfig+0x686>
  12774. {
  12775. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  12776. 8005be0: f7fc fd3e bl 8002660 <HAL_GetTick>
  12777. 8005be4: 4602 mov r2, r0
  12778. 8005be6: 6a7b ldr r3, [r7, #36] @ 0x24
  12779. 8005be8: 1ad3 subs r3, r2, r3
  12780. 8005bea: 2b02 cmp r3, #2
  12781. 8005bec: d901 bls.n 8005bf2 <HAL_RCC_OscConfig+0x686>
  12782. {
  12783. return HAL_TIMEOUT;
  12784. 8005bee: 2303 movs r3, #3
  12785. 8005bf0: e10e b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12786. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  12787. 8005bf2: 4b39 ldr r3, [pc, #228] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12788. 8005bf4: 681b ldr r3, [r3, #0]
  12789. 8005bf6: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  12790. 8005bfa: 2b00 cmp r3, #0
  12791. 8005bfc: d1f0 bne.n 8005be0 <HAL_RCC_OscConfig+0x674>
  12792. }
  12793. }
  12794. /* Configure the main PLL clock source, multiplication and division factors. */
  12795. __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource,
  12796. 8005bfe: 4b36 ldr r3, [pc, #216] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12797. 8005c00: 6a9a ldr r2, [r3, #40] @ 0x28
  12798. 8005c02: 4b37 ldr r3, [pc, #220] @ (8005ce0 <HAL_RCC_OscConfig+0x774>)
  12799. 8005c04: 4013 ands r3, r2
  12800. 8005c06: 687a ldr r2, [r7, #4]
  12801. 8005c08: 6a91 ldr r1, [r2, #40] @ 0x28
  12802. 8005c0a: 687a ldr r2, [r7, #4]
  12803. 8005c0c: 6ad2 ldr r2, [r2, #44] @ 0x2c
  12804. 8005c0e: 0112 lsls r2, r2, #4
  12805. 8005c10: 430a orrs r2, r1
  12806. 8005c12: 4931 ldr r1, [pc, #196] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12807. 8005c14: 4313 orrs r3, r2
  12808. 8005c16: 628b str r3, [r1, #40] @ 0x28
  12809. 8005c18: 687b ldr r3, [r7, #4]
  12810. 8005c1a: 6b1b ldr r3, [r3, #48] @ 0x30
  12811. 8005c1c: 3b01 subs r3, #1
  12812. 8005c1e: f3c3 0208 ubfx r2, r3, #0, #9
  12813. 8005c22: 687b ldr r3, [r7, #4]
  12814. 8005c24: 6b5b ldr r3, [r3, #52] @ 0x34
  12815. 8005c26: 3b01 subs r3, #1
  12816. 8005c28: 025b lsls r3, r3, #9
  12817. 8005c2a: b29b uxth r3, r3
  12818. 8005c2c: 431a orrs r2, r3
  12819. 8005c2e: 687b ldr r3, [r7, #4]
  12820. 8005c30: 6b9b ldr r3, [r3, #56] @ 0x38
  12821. 8005c32: 3b01 subs r3, #1
  12822. 8005c34: 041b lsls r3, r3, #16
  12823. 8005c36: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  12824. 8005c3a: 431a orrs r2, r3
  12825. 8005c3c: 687b ldr r3, [r7, #4]
  12826. 8005c3e: 6bdb ldr r3, [r3, #60] @ 0x3c
  12827. 8005c40: 3b01 subs r3, #1
  12828. 8005c42: 061b lsls r3, r3, #24
  12829. 8005c44: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  12830. 8005c48: 4923 ldr r1, [pc, #140] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12831. 8005c4a: 4313 orrs r3, r2
  12832. 8005c4c: 630b str r3, [r1, #48] @ 0x30
  12833. RCC_OscInitStruct->PLL.PLLP,
  12834. RCC_OscInitStruct->PLL.PLLQ,
  12835. RCC_OscInitStruct->PLL.PLLR);
  12836. /* Disable PLLFRACN . */
  12837. __HAL_RCC_PLLFRACN_DISABLE();
  12838. 8005c4e: 4b22 ldr r3, [pc, #136] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12839. 8005c50: 6adb ldr r3, [r3, #44] @ 0x2c
  12840. 8005c52: 4a21 ldr r2, [pc, #132] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12841. 8005c54: f023 0301 bic.w r3, r3, #1
  12842. 8005c58: 62d3 str r3, [r2, #44] @ 0x2c
  12843. /* Configure PLL PLL1FRACN */
  12844. __HAL_RCC_PLLFRACN_CONFIG(RCC_OscInitStruct->PLL.PLLFRACN);
  12845. 8005c5a: 4b1f ldr r3, [pc, #124] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12846. 8005c5c: 6b5a ldr r2, [r3, #52] @ 0x34
  12847. 8005c5e: 4b21 ldr r3, [pc, #132] @ (8005ce4 <HAL_RCC_OscConfig+0x778>)
  12848. 8005c60: 4013 ands r3, r2
  12849. 8005c62: 687a ldr r2, [r7, #4]
  12850. 8005c64: 6c92 ldr r2, [r2, #72] @ 0x48
  12851. 8005c66: 00d2 lsls r2, r2, #3
  12852. 8005c68: 491b ldr r1, [pc, #108] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12853. 8005c6a: 4313 orrs r3, r2
  12854. 8005c6c: 634b str r3, [r1, #52] @ 0x34
  12855. /* Select PLL1 input reference frequency range: VCI */
  12856. __HAL_RCC_PLL_VCIRANGE(RCC_OscInitStruct->PLL.PLLRGE) ;
  12857. 8005c6e: 4b1a ldr r3, [pc, #104] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12858. 8005c70: 6adb ldr r3, [r3, #44] @ 0x2c
  12859. 8005c72: f023 020c bic.w r2, r3, #12
  12860. 8005c76: 687b ldr r3, [r7, #4]
  12861. 8005c78: 6c1b ldr r3, [r3, #64] @ 0x40
  12862. 8005c7a: 4917 ldr r1, [pc, #92] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12863. 8005c7c: 4313 orrs r3, r2
  12864. 8005c7e: 62cb str r3, [r1, #44] @ 0x2c
  12865. /* Select PLL1 output frequency range : VCO */
  12866. __HAL_RCC_PLL_VCORANGE(RCC_OscInitStruct->PLL.PLLVCOSEL) ;
  12867. 8005c80: 4b15 ldr r3, [pc, #84] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12868. 8005c82: 6adb ldr r3, [r3, #44] @ 0x2c
  12869. 8005c84: f023 0202 bic.w r2, r3, #2
  12870. 8005c88: 687b ldr r3, [r7, #4]
  12871. 8005c8a: 6c5b ldr r3, [r3, #68] @ 0x44
  12872. 8005c8c: 4912 ldr r1, [pc, #72] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12873. 8005c8e: 4313 orrs r3, r2
  12874. 8005c90: 62cb str r3, [r1, #44] @ 0x2c
  12875. /* Enable PLL System Clock output. */
  12876. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVP);
  12877. 8005c92: 4b11 ldr r3, [pc, #68] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12878. 8005c94: 6adb ldr r3, [r3, #44] @ 0x2c
  12879. 8005c96: 4a10 ldr r2, [pc, #64] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12880. 8005c98: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  12881. 8005c9c: 62d3 str r3, [r2, #44] @ 0x2c
  12882. /* Enable PLL1Q Clock output. */
  12883. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  12884. 8005c9e: 4b0e ldr r3, [pc, #56] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12885. 8005ca0: 6adb ldr r3, [r3, #44] @ 0x2c
  12886. 8005ca2: 4a0d ldr r2, [pc, #52] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12887. 8005ca4: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  12888. 8005ca8: 62d3 str r3, [r2, #44] @ 0x2c
  12889. /* Enable PLL1R Clock output. */
  12890. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVR);
  12891. 8005caa: 4b0b ldr r3, [pc, #44] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12892. 8005cac: 6adb ldr r3, [r3, #44] @ 0x2c
  12893. 8005cae: 4a0a ldr r2, [pc, #40] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12894. 8005cb0: f443 2380 orr.w r3, r3, #262144 @ 0x40000
  12895. 8005cb4: 62d3 str r3, [r2, #44] @ 0x2c
  12896. /* Enable PLL1FRACN . */
  12897. __HAL_RCC_PLLFRACN_ENABLE();
  12898. 8005cb6: 4b08 ldr r3, [pc, #32] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12899. 8005cb8: 6adb ldr r3, [r3, #44] @ 0x2c
  12900. 8005cba: 4a07 ldr r2, [pc, #28] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12901. 8005cbc: f043 0301 orr.w r3, r3, #1
  12902. 8005cc0: 62d3 str r3, [r2, #44] @ 0x2c
  12903. /* Enable the main PLL. */
  12904. __HAL_RCC_PLL_ENABLE();
  12905. 8005cc2: 4b05 ldr r3, [pc, #20] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12906. 8005cc4: 681b ldr r3, [r3, #0]
  12907. 8005cc6: 4a04 ldr r2, [pc, #16] @ (8005cd8 <HAL_RCC_OscConfig+0x76c>)
  12908. 8005cc8: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  12909. 8005ccc: 6013 str r3, [r2, #0]
  12910. /* Get Start Tick*/
  12911. tickstart = HAL_GetTick();
  12912. 8005cce: f7fc fcc7 bl 8002660 <HAL_GetTick>
  12913. 8005cd2: 6278 str r0, [r7, #36] @ 0x24
  12914. /* Wait till PLL is ready */
  12915. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  12916. 8005cd4: e011 b.n 8005cfa <HAL_RCC_OscConfig+0x78e>
  12917. 8005cd6: bf00 nop
  12918. 8005cd8: 58024400 .word 0x58024400
  12919. 8005cdc: 58024800 .word 0x58024800
  12920. 8005ce0: fffffc0c .word 0xfffffc0c
  12921. 8005ce4: ffff0007 .word 0xffff0007
  12922. {
  12923. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  12924. 8005ce8: f7fc fcba bl 8002660 <HAL_GetTick>
  12925. 8005cec: 4602 mov r2, r0
  12926. 8005cee: 6a7b ldr r3, [r7, #36] @ 0x24
  12927. 8005cf0: 1ad3 subs r3, r2, r3
  12928. 8005cf2: 2b02 cmp r3, #2
  12929. 8005cf4: d901 bls.n 8005cfa <HAL_RCC_OscConfig+0x78e>
  12930. {
  12931. return HAL_TIMEOUT;
  12932. 8005cf6: 2303 movs r3, #3
  12933. 8005cf8: e08a b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12934. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  12935. 8005cfa: 4b47 ldr r3, [pc, #284] @ (8005e18 <HAL_RCC_OscConfig+0x8ac>)
  12936. 8005cfc: 681b ldr r3, [r3, #0]
  12937. 8005cfe: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  12938. 8005d02: 2b00 cmp r3, #0
  12939. 8005d04: d0f0 beq.n 8005ce8 <HAL_RCC_OscConfig+0x77c>
  12940. 8005d06: e082 b.n 8005e0e <HAL_RCC_OscConfig+0x8a2>
  12941. }
  12942. }
  12943. else
  12944. {
  12945. /* Disable the main PLL. */
  12946. __HAL_RCC_PLL_DISABLE();
  12947. 8005d08: 4b43 ldr r3, [pc, #268] @ (8005e18 <HAL_RCC_OscConfig+0x8ac>)
  12948. 8005d0a: 681b ldr r3, [r3, #0]
  12949. 8005d0c: 4a42 ldr r2, [pc, #264] @ (8005e18 <HAL_RCC_OscConfig+0x8ac>)
  12950. 8005d0e: f023 7380 bic.w r3, r3, #16777216 @ 0x1000000
  12951. 8005d12: 6013 str r3, [r2, #0]
  12952. /* Get Start Tick*/
  12953. tickstart = HAL_GetTick();
  12954. 8005d14: f7fc fca4 bl 8002660 <HAL_GetTick>
  12955. 8005d18: 6278 str r0, [r7, #36] @ 0x24
  12956. /* Wait till PLL is disabled */
  12957. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  12958. 8005d1a: e008 b.n 8005d2e <HAL_RCC_OscConfig+0x7c2>
  12959. {
  12960. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  12961. 8005d1c: f7fc fca0 bl 8002660 <HAL_GetTick>
  12962. 8005d20: 4602 mov r2, r0
  12963. 8005d22: 6a7b ldr r3, [r7, #36] @ 0x24
  12964. 8005d24: 1ad3 subs r3, r2, r3
  12965. 8005d26: 2b02 cmp r3, #2
  12966. 8005d28: d901 bls.n 8005d2e <HAL_RCC_OscConfig+0x7c2>
  12967. {
  12968. return HAL_TIMEOUT;
  12969. 8005d2a: 2303 movs r3, #3
  12970. 8005d2c: e070 b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  12971. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  12972. 8005d2e: 4b3a ldr r3, [pc, #232] @ (8005e18 <HAL_RCC_OscConfig+0x8ac>)
  12973. 8005d30: 681b ldr r3, [r3, #0]
  12974. 8005d32: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  12975. 8005d36: 2b00 cmp r3, #0
  12976. 8005d38: d1f0 bne.n 8005d1c <HAL_RCC_OscConfig+0x7b0>
  12977. 8005d3a: e068 b.n 8005e0e <HAL_RCC_OscConfig+0x8a2>
  12978. }
  12979. }
  12980. else
  12981. {
  12982. /* Do not return HAL_ERROR if request repeats the current configuration */
  12983. temp1_pllckcfg = RCC->PLLCKSELR;
  12984. 8005d3c: 4b36 ldr r3, [pc, #216] @ (8005e18 <HAL_RCC_OscConfig+0x8ac>)
  12985. 8005d3e: 6a9b ldr r3, [r3, #40] @ 0x28
  12986. 8005d40: 613b str r3, [r7, #16]
  12987. temp2_pllckcfg = RCC->PLL1DIVR;
  12988. 8005d42: 4b35 ldr r3, [pc, #212] @ (8005e18 <HAL_RCC_OscConfig+0x8ac>)
  12989. 8005d44: 6b1b ldr r3, [r3, #48] @ 0x30
  12990. 8005d46: 60fb str r3, [r7, #12]
  12991. if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
  12992. 8005d48: 687b ldr r3, [r7, #4]
  12993. 8005d4a: 6a5b ldr r3, [r3, #36] @ 0x24
  12994. 8005d4c: 2b01 cmp r3, #1
  12995. 8005d4e: d031 beq.n 8005db4 <HAL_RCC_OscConfig+0x848>
  12996. (READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
  12997. 8005d50: 693b ldr r3, [r7, #16]
  12998. 8005d52: f003 0203 and.w r2, r3, #3
  12999. 8005d56: 687b ldr r3, [r7, #4]
  13000. 8005d58: 6a9b ldr r3, [r3, #40] @ 0x28
  13001. if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
  13002. 8005d5a: 429a cmp r2, r3
  13003. 8005d5c: d12a bne.n 8005db4 <HAL_RCC_OscConfig+0x848>
  13004. ((READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_DIVM1) >> RCC_PLLCKSELR_DIVM1_Pos) != RCC_OscInitStruct->PLL.PLLM) ||
  13005. 8005d5e: 693b ldr r3, [r7, #16]
  13006. 8005d60: 091b lsrs r3, r3, #4
  13007. 8005d62: f003 023f and.w r2, r3, #63 @ 0x3f
  13008. 8005d66: 687b ldr r3, [r7, #4]
  13009. 8005d68: 6adb ldr r3, [r3, #44] @ 0x2c
  13010. (READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
  13011. 8005d6a: 429a cmp r2, r3
  13012. 8005d6c: d122 bne.n 8005db4 <HAL_RCC_OscConfig+0x848>
  13013. (READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_N1) != (RCC_OscInitStruct->PLL.PLLN - 1U)) ||
  13014. 8005d6e: 68fb ldr r3, [r7, #12]
  13015. 8005d70: f3c3 0208 ubfx r2, r3, #0, #9
  13016. 8005d74: 687b ldr r3, [r7, #4]
  13017. 8005d76: 6b1b ldr r3, [r3, #48] @ 0x30
  13018. 8005d78: 3b01 subs r3, #1
  13019. ((READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_DIVM1) >> RCC_PLLCKSELR_DIVM1_Pos) != RCC_OscInitStruct->PLL.PLLM) ||
  13020. 8005d7a: 429a cmp r2, r3
  13021. 8005d7c: d11a bne.n 8005db4 <HAL_RCC_OscConfig+0x848>
  13022. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_P1) >> RCC_PLL1DIVR_P1_Pos) != (RCC_OscInitStruct->PLL.PLLP - 1U)) ||
  13023. 8005d7e: 68fb ldr r3, [r7, #12]
  13024. 8005d80: 0a5b lsrs r3, r3, #9
  13025. 8005d82: f003 027f and.w r2, r3, #127 @ 0x7f
  13026. 8005d86: 687b ldr r3, [r7, #4]
  13027. 8005d88: 6b5b ldr r3, [r3, #52] @ 0x34
  13028. 8005d8a: 3b01 subs r3, #1
  13029. (READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_N1) != (RCC_OscInitStruct->PLL.PLLN - 1U)) ||
  13030. 8005d8c: 429a cmp r2, r3
  13031. 8005d8e: d111 bne.n 8005db4 <HAL_RCC_OscConfig+0x848>
  13032. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_Q1) >> RCC_PLL1DIVR_Q1_Pos) != (RCC_OscInitStruct->PLL.PLLQ - 1U)) ||
  13033. 8005d90: 68fb ldr r3, [r7, #12]
  13034. 8005d92: 0c1b lsrs r3, r3, #16
  13035. 8005d94: f003 027f and.w r2, r3, #127 @ 0x7f
  13036. 8005d98: 687b ldr r3, [r7, #4]
  13037. 8005d9a: 6b9b ldr r3, [r3, #56] @ 0x38
  13038. 8005d9c: 3b01 subs r3, #1
  13039. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_P1) >> RCC_PLL1DIVR_P1_Pos) != (RCC_OscInitStruct->PLL.PLLP - 1U)) ||
  13040. 8005d9e: 429a cmp r2, r3
  13041. 8005da0: d108 bne.n 8005db4 <HAL_RCC_OscConfig+0x848>
  13042. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_R1) >> RCC_PLL1DIVR_R1_Pos) != (RCC_OscInitStruct->PLL.PLLR - 1U)))
  13043. 8005da2: 68fb ldr r3, [r7, #12]
  13044. 8005da4: 0e1b lsrs r3, r3, #24
  13045. 8005da6: f003 027f and.w r2, r3, #127 @ 0x7f
  13046. 8005daa: 687b ldr r3, [r7, #4]
  13047. 8005dac: 6bdb ldr r3, [r3, #60] @ 0x3c
  13048. 8005dae: 3b01 subs r3, #1
  13049. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_Q1) >> RCC_PLL1DIVR_Q1_Pos) != (RCC_OscInitStruct->PLL.PLLQ - 1U)) ||
  13050. 8005db0: 429a cmp r2, r3
  13051. 8005db2: d001 beq.n 8005db8 <HAL_RCC_OscConfig+0x84c>
  13052. {
  13053. return HAL_ERROR;
  13054. 8005db4: 2301 movs r3, #1
  13055. 8005db6: e02b b.n 8005e10 <HAL_RCC_OscConfig+0x8a4>
  13056. }
  13057. else
  13058. {
  13059. /* Check if only fractional part needs to be updated */
  13060. temp1_pllckcfg = ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> RCC_PLL1FRACR_FRACN1_Pos);
  13061. 8005db8: 4b17 ldr r3, [pc, #92] @ (8005e18 <HAL_RCC_OscConfig+0x8ac>)
  13062. 8005dba: 6b5b ldr r3, [r3, #52] @ 0x34
  13063. 8005dbc: 08db lsrs r3, r3, #3
  13064. 8005dbe: f3c3 030c ubfx r3, r3, #0, #13
  13065. 8005dc2: 613b str r3, [r7, #16]
  13066. if (RCC_OscInitStruct->PLL.PLLFRACN != temp1_pllckcfg)
  13067. 8005dc4: 687b ldr r3, [r7, #4]
  13068. 8005dc6: 6c9b ldr r3, [r3, #72] @ 0x48
  13069. 8005dc8: 693a ldr r2, [r7, #16]
  13070. 8005dca: 429a cmp r2, r3
  13071. 8005dcc: d01f beq.n 8005e0e <HAL_RCC_OscConfig+0x8a2>
  13072. {
  13073. assert_param(IS_RCC_PLLFRACN_VALUE(RCC_OscInitStruct->PLL.PLLFRACN));
  13074. /* Disable PLL1FRACEN */
  13075. __HAL_RCC_PLLFRACN_DISABLE();
  13076. 8005dce: 4b12 ldr r3, [pc, #72] @ (8005e18 <HAL_RCC_OscConfig+0x8ac>)
  13077. 8005dd0: 6adb ldr r3, [r3, #44] @ 0x2c
  13078. 8005dd2: 4a11 ldr r2, [pc, #68] @ (8005e18 <HAL_RCC_OscConfig+0x8ac>)
  13079. 8005dd4: f023 0301 bic.w r3, r3, #1
  13080. 8005dd8: 62d3 str r3, [r2, #44] @ 0x2c
  13081. /* Get Start Tick*/
  13082. tickstart = HAL_GetTick();
  13083. 8005dda: f7fc fc41 bl 8002660 <HAL_GetTick>
  13084. 8005dde: 6278 str r0, [r7, #36] @ 0x24
  13085. /* Wait at least 2 CK_REF (PLL input source divided by M) period to make sure next latched value will be taken into account. */
  13086. while ((HAL_GetTick() - tickstart) < PLL_FRAC_TIMEOUT_VALUE)
  13087. 8005de0: bf00 nop
  13088. 8005de2: f7fc fc3d bl 8002660 <HAL_GetTick>
  13089. 8005de6: 4602 mov r2, r0
  13090. 8005de8: 6a7b ldr r3, [r7, #36] @ 0x24
  13091. 8005dea: 4293 cmp r3, r2
  13092. 8005dec: d0f9 beq.n 8005de2 <HAL_RCC_OscConfig+0x876>
  13093. {
  13094. }
  13095. /* Configure PLL1 PLL1FRACN */
  13096. __HAL_RCC_PLLFRACN_CONFIG(RCC_OscInitStruct->PLL.PLLFRACN);
  13097. 8005dee: 4b0a ldr r3, [pc, #40] @ (8005e18 <HAL_RCC_OscConfig+0x8ac>)
  13098. 8005df0: 6b5a ldr r2, [r3, #52] @ 0x34
  13099. 8005df2: 4b0a ldr r3, [pc, #40] @ (8005e1c <HAL_RCC_OscConfig+0x8b0>)
  13100. 8005df4: 4013 ands r3, r2
  13101. 8005df6: 687a ldr r2, [r7, #4]
  13102. 8005df8: 6c92 ldr r2, [r2, #72] @ 0x48
  13103. 8005dfa: 00d2 lsls r2, r2, #3
  13104. 8005dfc: 4906 ldr r1, [pc, #24] @ (8005e18 <HAL_RCC_OscConfig+0x8ac>)
  13105. 8005dfe: 4313 orrs r3, r2
  13106. 8005e00: 634b str r3, [r1, #52] @ 0x34
  13107. /* Enable PLL1FRACEN to latch new value. */
  13108. __HAL_RCC_PLLFRACN_ENABLE();
  13109. 8005e02: 4b05 ldr r3, [pc, #20] @ (8005e18 <HAL_RCC_OscConfig+0x8ac>)
  13110. 8005e04: 6adb ldr r3, [r3, #44] @ 0x2c
  13111. 8005e06: 4a04 ldr r2, [pc, #16] @ (8005e18 <HAL_RCC_OscConfig+0x8ac>)
  13112. 8005e08: f043 0301 orr.w r3, r3, #1
  13113. 8005e0c: 62d3 str r3, [r2, #44] @ 0x2c
  13114. }
  13115. }
  13116. }
  13117. }
  13118. return HAL_OK;
  13119. 8005e0e: 2300 movs r3, #0
  13120. }
  13121. 8005e10: 4618 mov r0, r3
  13122. 8005e12: 3730 adds r7, #48 @ 0x30
  13123. 8005e14: 46bd mov sp, r7
  13124. 8005e16: bd80 pop {r7, pc}
  13125. 8005e18: 58024400 .word 0x58024400
  13126. 8005e1c: ffff0007 .word 0xffff0007
  13127. 08005e20 <HAL_RCC_ClockConfig>:
  13128. * D1CPRE[3:0] bits to ensure that Domain1 core clock not exceed the maximum allowed frequency
  13129. * (for more details refer to section above "Initialization/de-initialization functions")
  13130. * @retval None
  13131. */
  13132. HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency)
  13133. {
  13134. 8005e20: b580 push {r7, lr}
  13135. 8005e22: b086 sub sp, #24
  13136. 8005e24: af00 add r7, sp, #0
  13137. 8005e26: 6078 str r0, [r7, #4]
  13138. 8005e28: 6039 str r1, [r7, #0]
  13139. HAL_StatusTypeDef halstatus;
  13140. uint32_t tickstart;
  13141. uint32_t common_system_clock;
  13142. /* Check Null pointer */
  13143. if (RCC_ClkInitStruct == NULL)
  13144. 8005e2a: 687b ldr r3, [r7, #4]
  13145. 8005e2c: 2b00 cmp r3, #0
  13146. 8005e2e: d101 bne.n 8005e34 <HAL_RCC_ClockConfig+0x14>
  13147. {
  13148. return HAL_ERROR;
  13149. 8005e30: 2301 movs r3, #1
  13150. 8005e32: e19c b.n 800616e <HAL_RCC_ClockConfig+0x34e>
  13151. /* To correctly read data from FLASH memory, the number of wait states (LATENCY)
  13152. must be correctly programmed according to the frequency of the CPU clock
  13153. (HCLK) and the supply voltage of the device. */
  13154. /* Increasing the CPU frequency */
  13155. if (FLatency > __HAL_FLASH_GET_LATENCY())
  13156. 8005e34: 4b8a ldr r3, [pc, #552] @ (8006060 <HAL_RCC_ClockConfig+0x240>)
  13157. 8005e36: 681b ldr r3, [r3, #0]
  13158. 8005e38: f003 030f and.w r3, r3, #15
  13159. 8005e3c: 683a ldr r2, [r7, #0]
  13160. 8005e3e: 429a cmp r2, r3
  13161. 8005e40: d910 bls.n 8005e64 <HAL_RCC_ClockConfig+0x44>
  13162. {
  13163. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  13164. __HAL_FLASH_SET_LATENCY(FLatency);
  13165. 8005e42: 4b87 ldr r3, [pc, #540] @ (8006060 <HAL_RCC_ClockConfig+0x240>)
  13166. 8005e44: 681b ldr r3, [r3, #0]
  13167. 8005e46: f023 020f bic.w r2, r3, #15
  13168. 8005e4a: 4985 ldr r1, [pc, #532] @ (8006060 <HAL_RCC_ClockConfig+0x240>)
  13169. 8005e4c: 683b ldr r3, [r7, #0]
  13170. 8005e4e: 4313 orrs r3, r2
  13171. 8005e50: 600b str r3, [r1, #0]
  13172. /* Check that the new number of wait states is taken into account to access the Flash
  13173. memory by reading the FLASH_ACR register */
  13174. if (__HAL_FLASH_GET_LATENCY() != FLatency)
  13175. 8005e52: 4b83 ldr r3, [pc, #524] @ (8006060 <HAL_RCC_ClockConfig+0x240>)
  13176. 8005e54: 681b ldr r3, [r3, #0]
  13177. 8005e56: f003 030f and.w r3, r3, #15
  13178. 8005e5a: 683a ldr r2, [r7, #0]
  13179. 8005e5c: 429a cmp r2, r3
  13180. 8005e5e: d001 beq.n 8005e64 <HAL_RCC_ClockConfig+0x44>
  13181. {
  13182. return HAL_ERROR;
  13183. 8005e60: 2301 movs r3, #1
  13184. 8005e62: e184 b.n 800616e <HAL_RCC_ClockConfig+0x34e>
  13185. }
  13186. /* Increasing the BUS frequency divider */
  13187. /*-------------------------- D1PCLK1/CDPCLK1 Configuration ---------------------------*/
  13188. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D1PCLK1) == RCC_CLOCKTYPE_D1PCLK1)
  13189. 8005e64: 687b ldr r3, [r7, #4]
  13190. 8005e66: 681b ldr r3, [r3, #0]
  13191. 8005e68: f003 0304 and.w r3, r3, #4
  13192. 8005e6c: 2b00 cmp r3, #0
  13193. 8005e6e: d010 beq.n 8005e92 <HAL_RCC_ClockConfig+0x72>
  13194. {
  13195. #if defined (RCC_D1CFGR_D1PPRE)
  13196. if ((RCC_ClkInitStruct->APB3CLKDivider) > (RCC->D1CFGR & RCC_D1CFGR_D1PPRE))
  13197. 8005e70: 687b ldr r3, [r7, #4]
  13198. 8005e72: 691a ldr r2, [r3, #16]
  13199. 8005e74: 4b7b ldr r3, [pc, #492] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13200. 8005e76: 699b ldr r3, [r3, #24]
  13201. 8005e78: f003 0370 and.w r3, r3, #112 @ 0x70
  13202. 8005e7c: 429a cmp r2, r3
  13203. 8005e7e: d908 bls.n 8005e92 <HAL_RCC_ClockConfig+0x72>
  13204. {
  13205. assert_param(IS_RCC_D1PCLK1(RCC_ClkInitStruct->APB3CLKDivider));
  13206. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1PPRE, RCC_ClkInitStruct->APB3CLKDivider);
  13207. 8005e80: 4b78 ldr r3, [pc, #480] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13208. 8005e82: 699b ldr r3, [r3, #24]
  13209. 8005e84: f023 0270 bic.w r2, r3, #112 @ 0x70
  13210. 8005e88: 687b ldr r3, [r7, #4]
  13211. 8005e8a: 691b ldr r3, [r3, #16]
  13212. 8005e8c: 4975 ldr r1, [pc, #468] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13213. 8005e8e: 4313 orrs r3, r2
  13214. 8005e90: 618b str r3, [r1, #24]
  13215. }
  13216. #endif
  13217. }
  13218. /*-------------------------- PCLK1 Configuration ---------------------------*/
  13219. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
  13220. 8005e92: 687b ldr r3, [r7, #4]
  13221. 8005e94: 681b ldr r3, [r3, #0]
  13222. 8005e96: f003 0308 and.w r3, r3, #8
  13223. 8005e9a: 2b00 cmp r3, #0
  13224. 8005e9c: d010 beq.n 8005ec0 <HAL_RCC_ClockConfig+0xa0>
  13225. {
  13226. #if defined (RCC_D2CFGR_D2PPRE1)
  13227. if ((RCC_ClkInitStruct->APB1CLKDivider) > (RCC->D2CFGR & RCC_D2CFGR_D2PPRE1))
  13228. 8005e9e: 687b ldr r3, [r7, #4]
  13229. 8005ea0: 695a ldr r2, [r3, #20]
  13230. 8005ea2: 4b70 ldr r3, [pc, #448] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13231. 8005ea4: 69db ldr r3, [r3, #28]
  13232. 8005ea6: f003 0370 and.w r3, r3, #112 @ 0x70
  13233. 8005eaa: 429a cmp r2, r3
  13234. 8005eac: d908 bls.n 8005ec0 <HAL_RCC_ClockConfig+0xa0>
  13235. {
  13236. assert_param(IS_RCC_PCLK1(RCC_ClkInitStruct->APB1CLKDivider));
  13237. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  13238. 8005eae: 4b6d ldr r3, [pc, #436] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13239. 8005eb0: 69db ldr r3, [r3, #28]
  13240. 8005eb2: f023 0270 bic.w r2, r3, #112 @ 0x70
  13241. 8005eb6: 687b ldr r3, [r7, #4]
  13242. 8005eb8: 695b ldr r3, [r3, #20]
  13243. 8005eba: 496a ldr r1, [pc, #424] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13244. 8005ebc: 4313 orrs r3, r2
  13245. 8005ebe: 61cb str r3, [r1, #28]
  13246. MODIFY_REG(RCC->CDCFGR2, RCC_CDCFGR2_CDPPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  13247. }
  13248. #endif
  13249. }
  13250. /*-------------------------- PCLK2 Configuration ---------------------------*/
  13251. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
  13252. 8005ec0: 687b ldr r3, [r7, #4]
  13253. 8005ec2: 681b ldr r3, [r3, #0]
  13254. 8005ec4: f003 0310 and.w r3, r3, #16
  13255. 8005ec8: 2b00 cmp r3, #0
  13256. 8005eca: d010 beq.n 8005eee <HAL_RCC_ClockConfig+0xce>
  13257. {
  13258. #if defined(RCC_D2CFGR_D2PPRE2)
  13259. if ((RCC_ClkInitStruct->APB2CLKDivider) > (RCC->D2CFGR & RCC_D2CFGR_D2PPRE2))
  13260. 8005ecc: 687b ldr r3, [r7, #4]
  13261. 8005ece: 699a ldr r2, [r3, #24]
  13262. 8005ed0: 4b64 ldr r3, [pc, #400] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13263. 8005ed2: 69db ldr r3, [r3, #28]
  13264. 8005ed4: f403 63e0 and.w r3, r3, #1792 @ 0x700
  13265. 8005ed8: 429a cmp r2, r3
  13266. 8005eda: d908 bls.n 8005eee <HAL_RCC_ClockConfig+0xce>
  13267. {
  13268. assert_param(IS_RCC_PCLK2(RCC_ClkInitStruct->APB2CLKDivider));
  13269. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2, (RCC_ClkInitStruct->APB2CLKDivider));
  13270. 8005edc: 4b61 ldr r3, [pc, #388] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13271. 8005ede: 69db ldr r3, [r3, #28]
  13272. 8005ee0: f423 62e0 bic.w r2, r3, #1792 @ 0x700
  13273. 8005ee4: 687b ldr r3, [r7, #4]
  13274. 8005ee6: 699b ldr r3, [r3, #24]
  13275. 8005ee8: 495e ldr r1, [pc, #376] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13276. 8005eea: 4313 orrs r3, r2
  13277. 8005eec: 61cb str r3, [r1, #28]
  13278. }
  13279. #endif
  13280. }
  13281. /*-------------------------- D3PCLK1 Configuration ---------------------------*/
  13282. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D3PCLK1) == RCC_CLOCKTYPE_D3PCLK1)
  13283. 8005eee: 687b ldr r3, [r7, #4]
  13284. 8005ef0: 681b ldr r3, [r3, #0]
  13285. 8005ef2: f003 0320 and.w r3, r3, #32
  13286. 8005ef6: 2b00 cmp r3, #0
  13287. 8005ef8: d010 beq.n 8005f1c <HAL_RCC_ClockConfig+0xfc>
  13288. {
  13289. #if defined(RCC_D3CFGR_D3PPRE)
  13290. if ((RCC_ClkInitStruct->APB4CLKDivider) > (RCC->D3CFGR & RCC_D3CFGR_D3PPRE))
  13291. 8005efa: 687b ldr r3, [r7, #4]
  13292. 8005efc: 69da ldr r2, [r3, #28]
  13293. 8005efe: 4b59 ldr r3, [pc, #356] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13294. 8005f00: 6a1b ldr r3, [r3, #32]
  13295. 8005f02: f003 0370 and.w r3, r3, #112 @ 0x70
  13296. 8005f06: 429a cmp r2, r3
  13297. 8005f08: d908 bls.n 8005f1c <HAL_RCC_ClockConfig+0xfc>
  13298. {
  13299. assert_param(IS_RCC_D3PCLK1(RCC_ClkInitStruct->APB4CLKDivider));
  13300. MODIFY_REG(RCC->D3CFGR, RCC_D3CFGR_D3PPRE, (RCC_ClkInitStruct->APB4CLKDivider));
  13301. 8005f0a: 4b56 ldr r3, [pc, #344] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13302. 8005f0c: 6a1b ldr r3, [r3, #32]
  13303. 8005f0e: f023 0270 bic.w r2, r3, #112 @ 0x70
  13304. 8005f12: 687b ldr r3, [r7, #4]
  13305. 8005f14: 69db ldr r3, [r3, #28]
  13306. 8005f16: 4953 ldr r1, [pc, #332] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13307. 8005f18: 4313 orrs r3, r2
  13308. 8005f1a: 620b str r3, [r1, #32]
  13309. }
  13310. #endif
  13311. }
  13312. /*-------------------------- HCLK Configuration --------------------------*/
  13313. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
  13314. 8005f1c: 687b ldr r3, [r7, #4]
  13315. 8005f1e: 681b ldr r3, [r3, #0]
  13316. 8005f20: f003 0302 and.w r3, r3, #2
  13317. 8005f24: 2b00 cmp r3, #0
  13318. 8005f26: d010 beq.n 8005f4a <HAL_RCC_ClockConfig+0x12a>
  13319. {
  13320. #if defined (RCC_D1CFGR_HPRE)
  13321. if ((RCC_ClkInitStruct->AHBCLKDivider) > (RCC->D1CFGR & RCC_D1CFGR_HPRE))
  13322. 8005f28: 687b ldr r3, [r7, #4]
  13323. 8005f2a: 68da ldr r2, [r3, #12]
  13324. 8005f2c: 4b4d ldr r3, [pc, #308] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13325. 8005f2e: 699b ldr r3, [r3, #24]
  13326. 8005f30: f003 030f and.w r3, r3, #15
  13327. 8005f34: 429a cmp r2, r3
  13328. 8005f36: d908 bls.n 8005f4a <HAL_RCC_ClockConfig+0x12a>
  13329. {
  13330. /* Set the new HCLK clock divider */
  13331. assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));
  13332. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);
  13333. 8005f38: 4b4a ldr r3, [pc, #296] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13334. 8005f3a: 699b ldr r3, [r3, #24]
  13335. 8005f3c: f023 020f bic.w r2, r3, #15
  13336. 8005f40: 687b ldr r3, [r7, #4]
  13337. 8005f42: 68db ldr r3, [r3, #12]
  13338. 8005f44: 4947 ldr r1, [pc, #284] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13339. 8005f46: 4313 orrs r3, r2
  13340. 8005f48: 618b str r3, [r1, #24]
  13341. }
  13342. #endif
  13343. }
  13344. /*------------------------- SYSCLK Configuration -------------------------*/
  13345. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
  13346. 8005f4a: 687b ldr r3, [r7, #4]
  13347. 8005f4c: 681b ldr r3, [r3, #0]
  13348. 8005f4e: f003 0301 and.w r3, r3, #1
  13349. 8005f52: 2b00 cmp r3, #0
  13350. 8005f54: d055 beq.n 8006002 <HAL_RCC_ClockConfig+0x1e2>
  13351. {
  13352. assert_param(IS_RCC_SYSCLK(RCC_ClkInitStruct->SYSCLKDivider));
  13353. assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
  13354. #if defined(RCC_D1CFGR_D1CPRE)
  13355. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1CPRE, RCC_ClkInitStruct->SYSCLKDivider);
  13356. 8005f56: 4b43 ldr r3, [pc, #268] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13357. 8005f58: 699b ldr r3, [r3, #24]
  13358. 8005f5a: f423 6270 bic.w r2, r3, #3840 @ 0xf00
  13359. 8005f5e: 687b ldr r3, [r7, #4]
  13360. 8005f60: 689b ldr r3, [r3, #8]
  13361. 8005f62: 4940 ldr r1, [pc, #256] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13362. 8005f64: 4313 orrs r3, r2
  13363. 8005f66: 618b str r3, [r1, #24]
  13364. #else
  13365. MODIFY_REG(RCC->CDCFGR1, RCC_CDCFGR1_CDCPRE, RCC_ClkInitStruct->SYSCLKDivider);
  13366. #endif
  13367. /* HSE is selected as System Clock Source */
  13368. if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
  13369. 8005f68: 687b ldr r3, [r7, #4]
  13370. 8005f6a: 685b ldr r3, [r3, #4]
  13371. 8005f6c: 2b02 cmp r3, #2
  13372. 8005f6e: d107 bne.n 8005f80 <HAL_RCC_ClockConfig+0x160>
  13373. {
  13374. /* Check the HSE ready flag */
  13375. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  13376. 8005f70: 4b3c ldr r3, [pc, #240] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13377. 8005f72: 681b ldr r3, [r3, #0]
  13378. 8005f74: f403 3300 and.w r3, r3, #131072 @ 0x20000
  13379. 8005f78: 2b00 cmp r3, #0
  13380. 8005f7a: d121 bne.n 8005fc0 <HAL_RCC_ClockConfig+0x1a0>
  13381. {
  13382. return HAL_ERROR;
  13383. 8005f7c: 2301 movs r3, #1
  13384. 8005f7e: e0f6 b.n 800616e <HAL_RCC_ClockConfig+0x34e>
  13385. }
  13386. }
  13387. /* PLL is selected as System Clock Source */
  13388. else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
  13389. 8005f80: 687b ldr r3, [r7, #4]
  13390. 8005f82: 685b ldr r3, [r3, #4]
  13391. 8005f84: 2b03 cmp r3, #3
  13392. 8005f86: d107 bne.n 8005f98 <HAL_RCC_ClockConfig+0x178>
  13393. {
  13394. /* Check the PLL ready flag */
  13395. if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  13396. 8005f88: 4b36 ldr r3, [pc, #216] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13397. 8005f8a: 681b ldr r3, [r3, #0]
  13398. 8005f8c: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  13399. 8005f90: 2b00 cmp r3, #0
  13400. 8005f92: d115 bne.n 8005fc0 <HAL_RCC_ClockConfig+0x1a0>
  13401. {
  13402. return HAL_ERROR;
  13403. 8005f94: 2301 movs r3, #1
  13404. 8005f96: e0ea b.n 800616e <HAL_RCC_ClockConfig+0x34e>
  13405. }
  13406. }
  13407. /* CSI is selected as System Clock Source */
  13408. else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_CSI)
  13409. 8005f98: 687b ldr r3, [r7, #4]
  13410. 8005f9a: 685b ldr r3, [r3, #4]
  13411. 8005f9c: 2b01 cmp r3, #1
  13412. 8005f9e: d107 bne.n 8005fb0 <HAL_RCC_ClockConfig+0x190>
  13413. {
  13414. /* Check the PLL ready flag */
  13415. if (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  13416. 8005fa0: 4b30 ldr r3, [pc, #192] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13417. 8005fa2: 681b ldr r3, [r3, #0]
  13418. 8005fa4: f403 7380 and.w r3, r3, #256 @ 0x100
  13419. 8005fa8: 2b00 cmp r3, #0
  13420. 8005faa: d109 bne.n 8005fc0 <HAL_RCC_ClockConfig+0x1a0>
  13421. {
  13422. return HAL_ERROR;
  13423. 8005fac: 2301 movs r3, #1
  13424. 8005fae: e0de b.n 800616e <HAL_RCC_ClockConfig+0x34e>
  13425. }
  13426. /* HSI is selected as System Clock Source */
  13427. else
  13428. {
  13429. /* Check the HSI ready flag */
  13430. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  13431. 8005fb0: 4b2c ldr r3, [pc, #176] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13432. 8005fb2: 681b ldr r3, [r3, #0]
  13433. 8005fb4: f003 0304 and.w r3, r3, #4
  13434. 8005fb8: 2b00 cmp r3, #0
  13435. 8005fba: d101 bne.n 8005fc0 <HAL_RCC_ClockConfig+0x1a0>
  13436. {
  13437. return HAL_ERROR;
  13438. 8005fbc: 2301 movs r3, #1
  13439. 8005fbe: e0d6 b.n 800616e <HAL_RCC_ClockConfig+0x34e>
  13440. }
  13441. }
  13442. MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, RCC_ClkInitStruct->SYSCLKSource);
  13443. 8005fc0: 4b28 ldr r3, [pc, #160] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13444. 8005fc2: 691b ldr r3, [r3, #16]
  13445. 8005fc4: f023 0207 bic.w r2, r3, #7
  13446. 8005fc8: 687b ldr r3, [r7, #4]
  13447. 8005fca: 685b ldr r3, [r3, #4]
  13448. 8005fcc: 4925 ldr r1, [pc, #148] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13449. 8005fce: 4313 orrs r3, r2
  13450. 8005fd0: 610b str r3, [r1, #16]
  13451. /* Get Start Tick*/
  13452. tickstart = HAL_GetTick();
  13453. 8005fd2: f7fc fb45 bl 8002660 <HAL_GetTick>
  13454. 8005fd6: 6178 str r0, [r7, #20]
  13455. while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
  13456. 8005fd8: e00a b.n 8005ff0 <HAL_RCC_ClockConfig+0x1d0>
  13457. {
  13458. if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE)
  13459. 8005fda: f7fc fb41 bl 8002660 <HAL_GetTick>
  13460. 8005fde: 4602 mov r2, r0
  13461. 8005fe0: 697b ldr r3, [r7, #20]
  13462. 8005fe2: 1ad3 subs r3, r2, r3
  13463. 8005fe4: f241 3288 movw r2, #5000 @ 0x1388
  13464. 8005fe8: 4293 cmp r3, r2
  13465. 8005fea: d901 bls.n 8005ff0 <HAL_RCC_ClockConfig+0x1d0>
  13466. {
  13467. return HAL_TIMEOUT;
  13468. 8005fec: 2303 movs r3, #3
  13469. 8005fee: e0be b.n 800616e <HAL_RCC_ClockConfig+0x34e>
  13470. while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
  13471. 8005ff0: 4b1c ldr r3, [pc, #112] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13472. 8005ff2: 691b ldr r3, [r3, #16]
  13473. 8005ff4: f003 0238 and.w r2, r3, #56 @ 0x38
  13474. 8005ff8: 687b ldr r3, [r7, #4]
  13475. 8005ffa: 685b ldr r3, [r3, #4]
  13476. 8005ffc: 00db lsls r3, r3, #3
  13477. 8005ffe: 429a cmp r2, r3
  13478. 8006000: d1eb bne.n 8005fda <HAL_RCC_ClockConfig+0x1ba>
  13479. }
  13480. /* Decreasing the BUS frequency divider */
  13481. /*-------------------------- HCLK Configuration --------------------------*/
  13482. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
  13483. 8006002: 687b ldr r3, [r7, #4]
  13484. 8006004: 681b ldr r3, [r3, #0]
  13485. 8006006: f003 0302 and.w r3, r3, #2
  13486. 800600a: 2b00 cmp r3, #0
  13487. 800600c: d010 beq.n 8006030 <HAL_RCC_ClockConfig+0x210>
  13488. {
  13489. #if defined(RCC_D1CFGR_HPRE)
  13490. if ((RCC_ClkInitStruct->AHBCLKDivider) < (RCC->D1CFGR & RCC_D1CFGR_HPRE))
  13491. 800600e: 687b ldr r3, [r7, #4]
  13492. 8006010: 68da ldr r2, [r3, #12]
  13493. 8006012: 4b14 ldr r3, [pc, #80] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13494. 8006014: 699b ldr r3, [r3, #24]
  13495. 8006016: f003 030f and.w r3, r3, #15
  13496. 800601a: 429a cmp r2, r3
  13497. 800601c: d208 bcs.n 8006030 <HAL_RCC_ClockConfig+0x210>
  13498. {
  13499. /* Set the new HCLK clock divider */
  13500. assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));
  13501. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);
  13502. 800601e: 4b11 ldr r3, [pc, #68] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13503. 8006020: 699b ldr r3, [r3, #24]
  13504. 8006022: f023 020f bic.w r2, r3, #15
  13505. 8006026: 687b ldr r3, [r7, #4]
  13506. 8006028: 68db ldr r3, [r3, #12]
  13507. 800602a: 490e ldr r1, [pc, #56] @ (8006064 <HAL_RCC_ClockConfig+0x244>)
  13508. 800602c: 4313 orrs r3, r2
  13509. 800602e: 618b str r3, [r1, #24]
  13510. }
  13511. #endif
  13512. }
  13513. /* Decreasing the number of wait states because of lower CPU frequency */
  13514. if (FLatency < __HAL_FLASH_GET_LATENCY())
  13515. 8006030: 4b0b ldr r3, [pc, #44] @ (8006060 <HAL_RCC_ClockConfig+0x240>)
  13516. 8006032: 681b ldr r3, [r3, #0]
  13517. 8006034: f003 030f and.w r3, r3, #15
  13518. 8006038: 683a ldr r2, [r7, #0]
  13519. 800603a: 429a cmp r2, r3
  13520. 800603c: d214 bcs.n 8006068 <HAL_RCC_ClockConfig+0x248>
  13521. {
  13522. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  13523. __HAL_FLASH_SET_LATENCY(FLatency);
  13524. 800603e: 4b08 ldr r3, [pc, #32] @ (8006060 <HAL_RCC_ClockConfig+0x240>)
  13525. 8006040: 681b ldr r3, [r3, #0]
  13526. 8006042: f023 020f bic.w r2, r3, #15
  13527. 8006046: 4906 ldr r1, [pc, #24] @ (8006060 <HAL_RCC_ClockConfig+0x240>)
  13528. 8006048: 683b ldr r3, [r7, #0]
  13529. 800604a: 4313 orrs r3, r2
  13530. 800604c: 600b str r3, [r1, #0]
  13531. /* Check that the new number of wait states is taken into account to access the Flash
  13532. memory by reading the FLASH_ACR register */
  13533. if (__HAL_FLASH_GET_LATENCY() != FLatency)
  13534. 800604e: 4b04 ldr r3, [pc, #16] @ (8006060 <HAL_RCC_ClockConfig+0x240>)
  13535. 8006050: 681b ldr r3, [r3, #0]
  13536. 8006052: f003 030f and.w r3, r3, #15
  13537. 8006056: 683a ldr r2, [r7, #0]
  13538. 8006058: 429a cmp r2, r3
  13539. 800605a: d005 beq.n 8006068 <HAL_RCC_ClockConfig+0x248>
  13540. {
  13541. return HAL_ERROR;
  13542. 800605c: 2301 movs r3, #1
  13543. 800605e: e086 b.n 800616e <HAL_RCC_ClockConfig+0x34e>
  13544. 8006060: 52002000 .word 0x52002000
  13545. 8006064: 58024400 .word 0x58024400
  13546. }
  13547. }
  13548. /*-------------------------- D1PCLK1/CDPCLK Configuration ---------------------------*/
  13549. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D1PCLK1) == RCC_CLOCKTYPE_D1PCLK1)
  13550. 8006068: 687b ldr r3, [r7, #4]
  13551. 800606a: 681b ldr r3, [r3, #0]
  13552. 800606c: f003 0304 and.w r3, r3, #4
  13553. 8006070: 2b00 cmp r3, #0
  13554. 8006072: d010 beq.n 8006096 <HAL_RCC_ClockConfig+0x276>
  13555. {
  13556. #if defined(RCC_D1CFGR_D1PPRE)
  13557. if ((RCC_ClkInitStruct->APB3CLKDivider) < (RCC->D1CFGR & RCC_D1CFGR_D1PPRE))
  13558. 8006074: 687b ldr r3, [r7, #4]
  13559. 8006076: 691a ldr r2, [r3, #16]
  13560. 8006078: 4b3f ldr r3, [pc, #252] @ (8006178 <HAL_RCC_ClockConfig+0x358>)
  13561. 800607a: 699b ldr r3, [r3, #24]
  13562. 800607c: f003 0370 and.w r3, r3, #112 @ 0x70
  13563. 8006080: 429a cmp r2, r3
  13564. 8006082: d208 bcs.n 8006096 <HAL_RCC_ClockConfig+0x276>
  13565. {
  13566. assert_param(IS_RCC_D1PCLK1(RCC_ClkInitStruct->APB3CLKDivider));
  13567. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1PPRE, RCC_ClkInitStruct->APB3CLKDivider);
  13568. 8006084: 4b3c ldr r3, [pc, #240] @ (8006178 <HAL_RCC_ClockConfig+0x358>)
  13569. 8006086: 699b ldr r3, [r3, #24]
  13570. 8006088: f023 0270 bic.w r2, r3, #112 @ 0x70
  13571. 800608c: 687b ldr r3, [r7, #4]
  13572. 800608e: 691b ldr r3, [r3, #16]
  13573. 8006090: 4939 ldr r1, [pc, #228] @ (8006178 <HAL_RCC_ClockConfig+0x358>)
  13574. 8006092: 4313 orrs r3, r2
  13575. 8006094: 618b str r3, [r1, #24]
  13576. }
  13577. #endif
  13578. }
  13579. /*-------------------------- PCLK1 Configuration ---------------------------*/
  13580. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
  13581. 8006096: 687b ldr r3, [r7, #4]
  13582. 8006098: 681b ldr r3, [r3, #0]
  13583. 800609a: f003 0308 and.w r3, r3, #8
  13584. 800609e: 2b00 cmp r3, #0
  13585. 80060a0: d010 beq.n 80060c4 <HAL_RCC_ClockConfig+0x2a4>
  13586. {
  13587. #if defined(RCC_D2CFGR_D2PPRE1)
  13588. if ((RCC_ClkInitStruct->APB1CLKDivider) < (RCC->D2CFGR & RCC_D2CFGR_D2PPRE1))
  13589. 80060a2: 687b ldr r3, [r7, #4]
  13590. 80060a4: 695a ldr r2, [r3, #20]
  13591. 80060a6: 4b34 ldr r3, [pc, #208] @ (8006178 <HAL_RCC_ClockConfig+0x358>)
  13592. 80060a8: 69db ldr r3, [r3, #28]
  13593. 80060aa: f003 0370 and.w r3, r3, #112 @ 0x70
  13594. 80060ae: 429a cmp r2, r3
  13595. 80060b0: d208 bcs.n 80060c4 <HAL_RCC_ClockConfig+0x2a4>
  13596. {
  13597. assert_param(IS_RCC_PCLK1(RCC_ClkInitStruct->APB1CLKDivider));
  13598. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  13599. 80060b2: 4b31 ldr r3, [pc, #196] @ (8006178 <HAL_RCC_ClockConfig+0x358>)
  13600. 80060b4: 69db ldr r3, [r3, #28]
  13601. 80060b6: f023 0270 bic.w r2, r3, #112 @ 0x70
  13602. 80060ba: 687b ldr r3, [r7, #4]
  13603. 80060bc: 695b ldr r3, [r3, #20]
  13604. 80060be: 492e ldr r1, [pc, #184] @ (8006178 <HAL_RCC_ClockConfig+0x358>)
  13605. 80060c0: 4313 orrs r3, r2
  13606. 80060c2: 61cb str r3, [r1, #28]
  13607. }
  13608. #endif
  13609. }
  13610. /*-------------------------- PCLK2 Configuration ---------------------------*/
  13611. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
  13612. 80060c4: 687b ldr r3, [r7, #4]
  13613. 80060c6: 681b ldr r3, [r3, #0]
  13614. 80060c8: f003 0310 and.w r3, r3, #16
  13615. 80060cc: 2b00 cmp r3, #0
  13616. 80060ce: d010 beq.n 80060f2 <HAL_RCC_ClockConfig+0x2d2>
  13617. {
  13618. #if defined (RCC_D2CFGR_D2PPRE2)
  13619. if ((RCC_ClkInitStruct->APB2CLKDivider) < (RCC->D2CFGR & RCC_D2CFGR_D2PPRE2))
  13620. 80060d0: 687b ldr r3, [r7, #4]
  13621. 80060d2: 699a ldr r2, [r3, #24]
  13622. 80060d4: 4b28 ldr r3, [pc, #160] @ (8006178 <HAL_RCC_ClockConfig+0x358>)
  13623. 80060d6: 69db ldr r3, [r3, #28]
  13624. 80060d8: f403 63e0 and.w r3, r3, #1792 @ 0x700
  13625. 80060dc: 429a cmp r2, r3
  13626. 80060de: d208 bcs.n 80060f2 <HAL_RCC_ClockConfig+0x2d2>
  13627. {
  13628. assert_param(IS_RCC_PCLK2(RCC_ClkInitStruct->APB2CLKDivider));
  13629. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2, (RCC_ClkInitStruct->APB2CLKDivider));
  13630. 80060e0: 4b25 ldr r3, [pc, #148] @ (8006178 <HAL_RCC_ClockConfig+0x358>)
  13631. 80060e2: 69db ldr r3, [r3, #28]
  13632. 80060e4: f423 62e0 bic.w r2, r3, #1792 @ 0x700
  13633. 80060e8: 687b ldr r3, [r7, #4]
  13634. 80060ea: 699b ldr r3, [r3, #24]
  13635. 80060ec: 4922 ldr r1, [pc, #136] @ (8006178 <HAL_RCC_ClockConfig+0x358>)
  13636. 80060ee: 4313 orrs r3, r2
  13637. 80060f0: 61cb str r3, [r1, #28]
  13638. }
  13639. #endif
  13640. }
  13641. /*-------------------------- D3PCLK1/SRDPCLK1 Configuration ---------------------------*/
  13642. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D3PCLK1) == RCC_CLOCKTYPE_D3PCLK1)
  13643. 80060f2: 687b ldr r3, [r7, #4]
  13644. 80060f4: 681b ldr r3, [r3, #0]
  13645. 80060f6: f003 0320 and.w r3, r3, #32
  13646. 80060fa: 2b00 cmp r3, #0
  13647. 80060fc: d010 beq.n 8006120 <HAL_RCC_ClockConfig+0x300>
  13648. {
  13649. #if defined(RCC_D3CFGR_D3PPRE)
  13650. if ((RCC_ClkInitStruct->APB4CLKDivider) < (RCC->D3CFGR & RCC_D3CFGR_D3PPRE))
  13651. 80060fe: 687b ldr r3, [r7, #4]
  13652. 8006100: 69da ldr r2, [r3, #28]
  13653. 8006102: 4b1d ldr r3, [pc, #116] @ (8006178 <HAL_RCC_ClockConfig+0x358>)
  13654. 8006104: 6a1b ldr r3, [r3, #32]
  13655. 8006106: f003 0370 and.w r3, r3, #112 @ 0x70
  13656. 800610a: 429a cmp r2, r3
  13657. 800610c: d208 bcs.n 8006120 <HAL_RCC_ClockConfig+0x300>
  13658. {
  13659. assert_param(IS_RCC_D3PCLK1(RCC_ClkInitStruct->APB4CLKDivider));
  13660. MODIFY_REG(RCC->D3CFGR, RCC_D3CFGR_D3PPRE, (RCC_ClkInitStruct->APB4CLKDivider));
  13661. 800610e: 4b1a ldr r3, [pc, #104] @ (8006178 <HAL_RCC_ClockConfig+0x358>)
  13662. 8006110: 6a1b ldr r3, [r3, #32]
  13663. 8006112: f023 0270 bic.w r2, r3, #112 @ 0x70
  13664. 8006116: 687b ldr r3, [r7, #4]
  13665. 8006118: 69db ldr r3, [r3, #28]
  13666. 800611a: 4917 ldr r1, [pc, #92] @ (8006178 <HAL_RCC_ClockConfig+0x358>)
  13667. 800611c: 4313 orrs r3, r2
  13668. 800611e: 620b str r3, [r1, #32]
  13669. #endif
  13670. }
  13671. /* Update the SystemCoreClock global variable */
  13672. #if defined(RCC_D1CFGR_D1CPRE)
  13673. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE) >> RCC_D1CFGR_D1CPRE_Pos]) & 0x1FU);
  13674. 8006120: f000 f834 bl 800618c <HAL_RCC_GetSysClockFreq>
  13675. 8006124: 4602 mov r2, r0
  13676. 8006126: 4b14 ldr r3, [pc, #80] @ (8006178 <HAL_RCC_ClockConfig+0x358>)
  13677. 8006128: 699b ldr r3, [r3, #24]
  13678. 800612a: 0a1b lsrs r3, r3, #8
  13679. 800612c: f003 030f and.w r3, r3, #15
  13680. 8006130: 4912 ldr r1, [pc, #72] @ (800617c <HAL_RCC_ClockConfig+0x35c>)
  13681. 8006132: 5ccb ldrb r3, [r1, r3]
  13682. 8006134: f003 031f and.w r3, r3, #31
  13683. 8006138: fa22 f303 lsr.w r3, r2, r3
  13684. 800613c: 613b str r3, [r7, #16]
  13685. #else
  13686. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE) >> RCC_CDCFGR1_CDCPRE_Pos]) & 0x1FU);
  13687. #endif
  13688. #if defined(RCC_D1CFGR_HPRE)
  13689. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE) >> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  13690. 800613e: 4b0e ldr r3, [pc, #56] @ (8006178 <HAL_RCC_ClockConfig+0x358>)
  13691. 8006140: 699b ldr r3, [r3, #24]
  13692. 8006142: f003 030f and.w r3, r3, #15
  13693. 8006146: 4a0d ldr r2, [pc, #52] @ (800617c <HAL_RCC_ClockConfig+0x35c>)
  13694. 8006148: 5cd3 ldrb r3, [r2, r3]
  13695. 800614a: f003 031f and.w r3, r3, #31
  13696. 800614e: 693a ldr r2, [r7, #16]
  13697. 8006150: fa22 f303 lsr.w r3, r2, r3
  13698. 8006154: 4a0a ldr r2, [pc, #40] @ (8006180 <HAL_RCC_ClockConfig+0x360>)
  13699. 8006156: 6013 str r3, [r2, #0]
  13700. #endif
  13701. #if defined(DUAL_CORE) && defined(CORE_CM4)
  13702. SystemCoreClock = SystemD2Clock;
  13703. #else
  13704. SystemCoreClock = common_system_clock;
  13705. 8006158: 4a0a ldr r2, [pc, #40] @ (8006184 <HAL_RCC_ClockConfig+0x364>)
  13706. 800615a: 693b ldr r3, [r7, #16]
  13707. 800615c: 6013 str r3, [r2, #0]
  13708. #endif /* DUAL_CORE && CORE_CM4 */
  13709. /* Configure the source of time base considering new system clocks settings*/
  13710. halstatus = HAL_InitTick(uwTickPrio);
  13711. 800615e: 4b0a ldr r3, [pc, #40] @ (8006188 <HAL_RCC_ClockConfig+0x368>)
  13712. 8006160: 681b ldr r3, [r3, #0]
  13713. 8006162: 4618 mov r0, r3
  13714. 8006164: f7fb fb18 bl 8001798 <HAL_InitTick>
  13715. 8006168: 4603 mov r3, r0
  13716. 800616a: 73fb strb r3, [r7, #15]
  13717. return halstatus;
  13718. 800616c: 7bfb ldrb r3, [r7, #15]
  13719. }
  13720. 800616e: 4618 mov r0, r3
  13721. 8006170: 3718 adds r7, #24
  13722. 8006172: 46bd mov sp, r7
  13723. 8006174: bd80 pop {r7, pc}
  13724. 8006176: bf00 nop
  13725. 8006178: 58024400 .word 0x58024400
  13726. 800617c: 080100b0 .word 0x080100b0
  13727. 8006180: 24000004 .word 0x24000004
  13728. 8006184: 24000000 .word 0x24000000
  13729. 8006188: 24000008 .word 0x24000008
  13730. 0800618c <HAL_RCC_GetSysClockFreq>:
  13731. *
  13732. *
  13733. * @retval SYSCLK frequency
  13734. */
  13735. uint32_t HAL_RCC_GetSysClockFreq(void)
  13736. {
  13737. 800618c: b480 push {r7}
  13738. 800618e: b089 sub sp, #36 @ 0x24
  13739. 8006190: af00 add r7, sp, #0
  13740. float_t fracn1, pllvco;
  13741. uint32_t sysclockfreq;
  13742. /* Get SYSCLK source -------------------------------------------------------*/
  13743. switch (RCC->CFGR & RCC_CFGR_SWS)
  13744. 8006192: 4bb3 ldr r3, [pc, #716] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  13745. 8006194: 691b ldr r3, [r3, #16]
  13746. 8006196: f003 0338 and.w r3, r3, #56 @ 0x38
  13747. 800619a: 2b18 cmp r3, #24
  13748. 800619c: f200 8155 bhi.w 800644a <HAL_RCC_GetSysClockFreq+0x2be>
  13749. 80061a0: a201 add r2, pc, #4 @ (adr r2, 80061a8 <HAL_RCC_GetSysClockFreq+0x1c>)
  13750. 80061a2: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  13751. 80061a6: bf00 nop
  13752. 80061a8: 0800620d .word 0x0800620d
  13753. 80061ac: 0800644b .word 0x0800644b
  13754. 80061b0: 0800644b .word 0x0800644b
  13755. 80061b4: 0800644b .word 0x0800644b
  13756. 80061b8: 0800644b .word 0x0800644b
  13757. 80061bc: 0800644b .word 0x0800644b
  13758. 80061c0: 0800644b .word 0x0800644b
  13759. 80061c4: 0800644b .word 0x0800644b
  13760. 80061c8: 08006233 .word 0x08006233
  13761. 80061cc: 0800644b .word 0x0800644b
  13762. 80061d0: 0800644b .word 0x0800644b
  13763. 80061d4: 0800644b .word 0x0800644b
  13764. 80061d8: 0800644b .word 0x0800644b
  13765. 80061dc: 0800644b .word 0x0800644b
  13766. 80061e0: 0800644b .word 0x0800644b
  13767. 80061e4: 0800644b .word 0x0800644b
  13768. 80061e8: 08006239 .word 0x08006239
  13769. 80061ec: 0800644b .word 0x0800644b
  13770. 80061f0: 0800644b .word 0x0800644b
  13771. 80061f4: 0800644b .word 0x0800644b
  13772. 80061f8: 0800644b .word 0x0800644b
  13773. 80061fc: 0800644b .word 0x0800644b
  13774. 8006200: 0800644b .word 0x0800644b
  13775. 8006204: 0800644b .word 0x0800644b
  13776. 8006208: 0800623f .word 0x0800623f
  13777. {
  13778. case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */
  13779. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  13780. 800620c: 4b94 ldr r3, [pc, #592] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  13781. 800620e: 681b ldr r3, [r3, #0]
  13782. 8006210: f003 0320 and.w r3, r3, #32
  13783. 8006214: 2b00 cmp r3, #0
  13784. 8006216: d009 beq.n 800622c <HAL_RCC_GetSysClockFreq+0xa0>
  13785. {
  13786. sysclockfreq = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  13787. 8006218: 4b91 ldr r3, [pc, #580] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  13788. 800621a: 681b ldr r3, [r3, #0]
  13789. 800621c: 08db lsrs r3, r3, #3
  13790. 800621e: f003 0303 and.w r3, r3, #3
  13791. 8006222: 4a90 ldr r2, [pc, #576] @ (8006464 <HAL_RCC_GetSysClockFreq+0x2d8>)
  13792. 8006224: fa22 f303 lsr.w r3, r2, r3
  13793. 8006228: 61bb str r3, [r7, #24]
  13794. else
  13795. {
  13796. sysclockfreq = (uint32_t) HSI_VALUE;
  13797. }
  13798. break;
  13799. 800622a: e111 b.n 8006450 <HAL_RCC_GetSysClockFreq+0x2c4>
  13800. sysclockfreq = (uint32_t) HSI_VALUE;
  13801. 800622c: 4b8d ldr r3, [pc, #564] @ (8006464 <HAL_RCC_GetSysClockFreq+0x2d8>)
  13802. 800622e: 61bb str r3, [r7, #24]
  13803. break;
  13804. 8006230: e10e b.n 8006450 <HAL_RCC_GetSysClockFreq+0x2c4>
  13805. case RCC_CFGR_SWS_CSI: /* CSI used as system clock source */
  13806. sysclockfreq = CSI_VALUE;
  13807. 8006232: 4b8d ldr r3, [pc, #564] @ (8006468 <HAL_RCC_GetSysClockFreq+0x2dc>)
  13808. 8006234: 61bb str r3, [r7, #24]
  13809. break;
  13810. 8006236: e10b b.n 8006450 <HAL_RCC_GetSysClockFreq+0x2c4>
  13811. case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */
  13812. sysclockfreq = HSE_VALUE;
  13813. 8006238: 4b8c ldr r3, [pc, #560] @ (800646c <HAL_RCC_GetSysClockFreq+0x2e0>)
  13814. 800623a: 61bb str r3, [r7, #24]
  13815. break;
  13816. 800623c: e108 b.n 8006450 <HAL_RCC_GetSysClockFreq+0x2c4>
  13817. case RCC_CFGR_SWS_PLL1: /* PLL1 used as system clock source */
  13818. /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLLM) * PLLN
  13819. SYSCLK = PLL_VCO / PLLR
  13820. */
  13821. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  13822. 800623e: 4b88 ldr r3, [pc, #544] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  13823. 8006240: 6a9b ldr r3, [r3, #40] @ 0x28
  13824. 8006242: f003 0303 and.w r3, r3, #3
  13825. 8006246: 617b str r3, [r7, #20]
  13826. pllm = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1) >> 4) ;
  13827. 8006248: 4b85 ldr r3, [pc, #532] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  13828. 800624a: 6a9b ldr r3, [r3, #40] @ 0x28
  13829. 800624c: 091b lsrs r3, r3, #4
  13830. 800624e: f003 033f and.w r3, r3, #63 @ 0x3f
  13831. 8006252: 613b str r3, [r7, #16]
  13832. pllfracen = ((RCC-> PLLCFGR & RCC_PLLCFGR_PLL1FRACEN) >> RCC_PLLCFGR_PLL1FRACEN_Pos);
  13833. 8006254: 4b82 ldr r3, [pc, #520] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  13834. 8006256: 6adb ldr r3, [r3, #44] @ 0x2c
  13835. 8006258: f003 0301 and.w r3, r3, #1
  13836. 800625c: 60fb str r3, [r7, #12]
  13837. fracn1 = (float_t)(uint32_t)(pllfracen * ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> 3));
  13838. 800625e: 4b80 ldr r3, [pc, #512] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  13839. 8006260: 6b5b ldr r3, [r3, #52] @ 0x34
  13840. 8006262: 08db lsrs r3, r3, #3
  13841. 8006264: f3c3 030c ubfx r3, r3, #0, #13
  13842. 8006268: 68fa ldr r2, [r7, #12]
  13843. 800626a: fb02 f303 mul.w r3, r2, r3
  13844. 800626e: ee07 3a90 vmov s15, r3
  13845. 8006272: eef8 7a67 vcvt.f32.u32 s15, s15
  13846. 8006276: edc7 7a02 vstr s15, [r7, #8]
  13847. if (pllm != 0U)
  13848. 800627a: 693b ldr r3, [r7, #16]
  13849. 800627c: 2b00 cmp r3, #0
  13850. 800627e: f000 80e1 beq.w 8006444 <HAL_RCC_GetSysClockFreq+0x2b8>
  13851. 8006282: 697b ldr r3, [r7, #20]
  13852. 8006284: 2b02 cmp r3, #2
  13853. 8006286: f000 8083 beq.w 8006390 <HAL_RCC_GetSysClockFreq+0x204>
  13854. 800628a: 697b ldr r3, [r7, #20]
  13855. 800628c: 2b02 cmp r3, #2
  13856. 800628e: f200 80a1 bhi.w 80063d4 <HAL_RCC_GetSysClockFreq+0x248>
  13857. 8006292: 697b ldr r3, [r7, #20]
  13858. 8006294: 2b00 cmp r3, #0
  13859. 8006296: d003 beq.n 80062a0 <HAL_RCC_GetSysClockFreq+0x114>
  13860. 8006298: 697b ldr r3, [r7, #20]
  13861. 800629a: 2b01 cmp r3, #1
  13862. 800629c: d056 beq.n 800634c <HAL_RCC_GetSysClockFreq+0x1c0>
  13863. 800629e: e099 b.n 80063d4 <HAL_RCC_GetSysClockFreq+0x248>
  13864. {
  13865. switch (pllsource)
  13866. {
  13867. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  13868. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  13869. 80062a0: 4b6f ldr r3, [pc, #444] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  13870. 80062a2: 681b ldr r3, [r3, #0]
  13871. 80062a4: f003 0320 and.w r3, r3, #32
  13872. 80062a8: 2b00 cmp r3, #0
  13873. 80062aa: d02d beq.n 8006308 <HAL_RCC_GetSysClockFreq+0x17c>
  13874. {
  13875. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  13876. 80062ac: 4b6c ldr r3, [pc, #432] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  13877. 80062ae: 681b ldr r3, [r3, #0]
  13878. 80062b0: 08db lsrs r3, r3, #3
  13879. 80062b2: f003 0303 and.w r3, r3, #3
  13880. 80062b6: 4a6b ldr r2, [pc, #428] @ (8006464 <HAL_RCC_GetSysClockFreq+0x2d8>)
  13881. 80062b8: fa22 f303 lsr.w r3, r2, r3
  13882. 80062bc: 607b str r3, [r7, #4]
  13883. pllvco = ((float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  13884. 80062be: 687b ldr r3, [r7, #4]
  13885. 80062c0: ee07 3a90 vmov s15, r3
  13886. 80062c4: eef8 6a67 vcvt.f32.u32 s13, s15
  13887. 80062c8: 693b ldr r3, [r7, #16]
  13888. 80062ca: ee07 3a90 vmov s15, r3
  13889. 80062ce: eef8 7a67 vcvt.f32.u32 s15, s15
  13890. 80062d2: ee86 7aa7 vdiv.f32 s14, s13, s15
  13891. 80062d6: 4b62 ldr r3, [pc, #392] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  13892. 80062d8: 6b1b ldr r3, [r3, #48] @ 0x30
  13893. 80062da: f3c3 0308 ubfx r3, r3, #0, #9
  13894. 80062de: ee07 3a90 vmov s15, r3
  13895. 80062e2: eef8 6a67 vcvt.f32.u32 s13, s15
  13896. 80062e6: ed97 6a02 vldr s12, [r7, #8]
  13897. 80062ea: eddf 5a61 vldr s11, [pc, #388] @ 8006470 <HAL_RCC_GetSysClockFreq+0x2e4>
  13898. 80062ee: eec6 7a25 vdiv.f32 s15, s12, s11
  13899. 80062f2: ee76 7aa7 vadd.f32 s15, s13, s15
  13900. 80062f6: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  13901. 80062fa: ee77 7aa6 vadd.f32 s15, s15, s13
  13902. 80062fe: ee67 7a27 vmul.f32 s15, s14, s15
  13903. 8006302: edc7 7a07 vstr s15, [r7, #28]
  13904. }
  13905. else
  13906. {
  13907. pllvco = ((float_t)HSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  13908. }
  13909. break;
  13910. 8006306: e087 b.n 8006418 <HAL_RCC_GetSysClockFreq+0x28c>
  13911. pllvco = ((float_t)HSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  13912. 8006308: 693b ldr r3, [r7, #16]
  13913. 800630a: ee07 3a90 vmov s15, r3
  13914. 800630e: eef8 7a67 vcvt.f32.u32 s15, s15
  13915. 8006312: eddf 6a58 vldr s13, [pc, #352] @ 8006474 <HAL_RCC_GetSysClockFreq+0x2e8>
  13916. 8006316: ee86 7aa7 vdiv.f32 s14, s13, s15
  13917. 800631a: 4b51 ldr r3, [pc, #324] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  13918. 800631c: 6b1b ldr r3, [r3, #48] @ 0x30
  13919. 800631e: f3c3 0308 ubfx r3, r3, #0, #9
  13920. 8006322: ee07 3a90 vmov s15, r3
  13921. 8006326: eef8 6a67 vcvt.f32.u32 s13, s15
  13922. 800632a: ed97 6a02 vldr s12, [r7, #8]
  13923. 800632e: eddf 5a50 vldr s11, [pc, #320] @ 8006470 <HAL_RCC_GetSysClockFreq+0x2e4>
  13924. 8006332: eec6 7a25 vdiv.f32 s15, s12, s11
  13925. 8006336: ee76 7aa7 vadd.f32 s15, s13, s15
  13926. 800633a: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  13927. 800633e: ee77 7aa6 vadd.f32 s15, s15, s13
  13928. 8006342: ee67 7a27 vmul.f32 s15, s14, s15
  13929. 8006346: edc7 7a07 vstr s15, [r7, #28]
  13930. break;
  13931. 800634a: e065 b.n 8006418 <HAL_RCC_GetSysClockFreq+0x28c>
  13932. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  13933. pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  13934. 800634c: 693b ldr r3, [r7, #16]
  13935. 800634e: ee07 3a90 vmov s15, r3
  13936. 8006352: eef8 7a67 vcvt.f32.u32 s15, s15
  13937. 8006356: eddf 6a48 vldr s13, [pc, #288] @ 8006478 <HAL_RCC_GetSysClockFreq+0x2ec>
  13938. 800635a: ee86 7aa7 vdiv.f32 s14, s13, s15
  13939. 800635e: 4b40 ldr r3, [pc, #256] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  13940. 8006360: 6b1b ldr r3, [r3, #48] @ 0x30
  13941. 8006362: f3c3 0308 ubfx r3, r3, #0, #9
  13942. 8006366: ee07 3a90 vmov s15, r3
  13943. 800636a: eef8 6a67 vcvt.f32.u32 s13, s15
  13944. 800636e: ed97 6a02 vldr s12, [r7, #8]
  13945. 8006372: eddf 5a3f vldr s11, [pc, #252] @ 8006470 <HAL_RCC_GetSysClockFreq+0x2e4>
  13946. 8006376: eec6 7a25 vdiv.f32 s15, s12, s11
  13947. 800637a: ee76 7aa7 vadd.f32 s15, s13, s15
  13948. 800637e: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  13949. 8006382: ee77 7aa6 vadd.f32 s15, s15, s13
  13950. 8006386: ee67 7a27 vmul.f32 s15, s14, s15
  13951. 800638a: edc7 7a07 vstr s15, [r7, #28]
  13952. break;
  13953. 800638e: e043 b.n 8006418 <HAL_RCC_GetSysClockFreq+0x28c>
  13954. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  13955. pllvco = ((float_t)HSE_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  13956. 8006390: 693b ldr r3, [r7, #16]
  13957. 8006392: ee07 3a90 vmov s15, r3
  13958. 8006396: eef8 7a67 vcvt.f32.u32 s15, s15
  13959. 800639a: eddf 6a38 vldr s13, [pc, #224] @ 800647c <HAL_RCC_GetSysClockFreq+0x2f0>
  13960. 800639e: ee86 7aa7 vdiv.f32 s14, s13, s15
  13961. 80063a2: 4b2f ldr r3, [pc, #188] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  13962. 80063a4: 6b1b ldr r3, [r3, #48] @ 0x30
  13963. 80063a6: f3c3 0308 ubfx r3, r3, #0, #9
  13964. 80063aa: ee07 3a90 vmov s15, r3
  13965. 80063ae: eef8 6a67 vcvt.f32.u32 s13, s15
  13966. 80063b2: ed97 6a02 vldr s12, [r7, #8]
  13967. 80063b6: eddf 5a2e vldr s11, [pc, #184] @ 8006470 <HAL_RCC_GetSysClockFreq+0x2e4>
  13968. 80063ba: eec6 7a25 vdiv.f32 s15, s12, s11
  13969. 80063be: ee76 7aa7 vadd.f32 s15, s13, s15
  13970. 80063c2: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  13971. 80063c6: ee77 7aa6 vadd.f32 s15, s15, s13
  13972. 80063ca: ee67 7a27 vmul.f32 s15, s14, s15
  13973. 80063ce: edc7 7a07 vstr s15, [r7, #28]
  13974. break;
  13975. 80063d2: e021 b.n 8006418 <HAL_RCC_GetSysClockFreq+0x28c>
  13976. default:
  13977. pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  13978. 80063d4: 693b ldr r3, [r7, #16]
  13979. 80063d6: ee07 3a90 vmov s15, r3
  13980. 80063da: eef8 7a67 vcvt.f32.u32 s15, s15
  13981. 80063de: eddf 6a26 vldr s13, [pc, #152] @ 8006478 <HAL_RCC_GetSysClockFreq+0x2ec>
  13982. 80063e2: ee86 7aa7 vdiv.f32 s14, s13, s15
  13983. 80063e6: 4b1e ldr r3, [pc, #120] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  13984. 80063e8: 6b1b ldr r3, [r3, #48] @ 0x30
  13985. 80063ea: f3c3 0308 ubfx r3, r3, #0, #9
  13986. 80063ee: ee07 3a90 vmov s15, r3
  13987. 80063f2: eef8 6a67 vcvt.f32.u32 s13, s15
  13988. 80063f6: ed97 6a02 vldr s12, [r7, #8]
  13989. 80063fa: eddf 5a1d vldr s11, [pc, #116] @ 8006470 <HAL_RCC_GetSysClockFreq+0x2e4>
  13990. 80063fe: eec6 7a25 vdiv.f32 s15, s12, s11
  13991. 8006402: ee76 7aa7 vadd.f32 s15, s13, s15
  13992. 8006406: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  13993. 800640a: ee77 7aa6 vadd.f32 s15, s15, s13
  13994. 800640e: ee67 7a27 vmul.f32 s15, s14, s15
  13995. 8006412: edc7 7a07 vstr s15, [r7, #28]
  13996. break;
  13997. 8006416: bf00 nop
  13998. }
  13999. pllp = (((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >> 9) + 1U) ;
  14000. 8006418: 4b11 ldr r3, [pc, #68] @ (8006460 <HAL_RCC_GetSysClockFreq+0x2d4>)
  14001. 800641a: 6b1b ldr r3, [r3, #48] @ 0x30
  14002. 800641c: 0a5b lsrs r3, r3, #9
  14003. 800641e: f003 037f and.w r3, r3, #127 @ 0x7f
  14004. 8006422: 3301 adds r3, #1
  14005. 8006424: 603b str r3, [r7, #0]
  14006. sysclockfreq = (uint32_t)(float_t)(pllvco / (float_t)pllp);
  14007. 8006426: 683b ldr r3, [r7, #0]
  14008. 8006428: ee07 3a90 vmov s15, r3
  14009. 800642c: eeb8 7a67 vcvt.f32.u32 s14, s15
  14010. 8006430: edd7 6a07 vldr s13, [r7, #28]
  14011. 8006434: eec6 7a87 vdiv.f32 s15, s13, s14
  14012. 8006438: eefc 7ae7 vcvt.u32.f32 s15, s15
  14013. 800643c: ee17 3a90 vmov r3, s15
  14014. 8006440: 61bb str r3, [r7, #24]
  14015. }
  14016. else
  14017. {
  14018. sysclockfreq = 0U;
  14019. }
  14020. break;
  14021. 8006442: e005 b.n 8006450 <HAL_RCC_GetSysClockFreq+0x2c4>
  14022. sysclockfreq = 0U;
  14023. 8006444: 2300 movs r3, #0
  14024. 8006446: 61bb str r3, [r7, #24]
  14025. break;
  14026. 8006448: e002 b.n 8006450 <HAL_RCC_GetSysClockFreq+0x2c4>
  14027. default:
  14028. sysclockfreq = CSI_VALUE;
  14029. 800644a: 4b07 ldr r3, [pc, #28] @ (8006468 <HAL_RCC_GetSysClockFreq+0x2dc>)
  14030. 800644c: 61bb str r3, [r7, #24]
  14031. break;
  14032. 800644e: bf00 nop
  14033. }
  14034. return sysclockfreq;
  14035. 8006450: 69bb ldr r3, [r7, #24]
  14036. }
  14037. 8006452: 4618 mov r0, r3
  14038. 8006454: 3724 adds r7, #36 @ 0x24
  14039. 8006456: 46bd mov sp, r7
  14040. 8006458: f85d 7b04 ldr.w r7, [sp], #4
  14041. 800645c: 4770 bx lr
  14042. 800645e: bf00 nop
  14043. 8006460: 58024400 .word 0x58024400
  14044. 8006464: 03d09000 .word 0x03d09000
  14045. 8006468: 003d0900 .word 0x003d0900
  14046. 800646c: 017d7840 .word 0x017d7840
  14047. 8006470: 46000000 .word 0x46000000
  14048. 8006474: 4c742400 .word 0x4c742400
  14049. 8006478: 4a742400 .word 0x4a742400
  14050. 800647c: 4bbebc20 .word 0x4bbebc20
  14051. 08006480 <HAL_RCC_GetHCLKFreq>:
  14052. * @note The SystemD2Clock CMSIS variable is used to store System domain2 Clock Frequency
  14053. * and updated within this function
  14054. * @retval HCLK frequency
  14055. */
  14056. uint32_t HAL_RCC_GetHCLKFreq(void)
  14057. {
  14058. 8006480: b580 push {r7, lr}
  14059. 8006482: b082 sub sp, #8
  14060. 8006484: af00 add r7, sp, #0
  14061. uint32_t common_system_clock;
  14062. #if defined(RCC_D1CFGR_D1CPRE)
  14063. common_system_clock = HAL_RCC_GetSysClockFreq() >> (D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE) >> RCC_D1CFGR_D1CPRE_Pos] & 0x1FU);
  14064. 8006486: f7ff fe81 bl 800618c <HAL_RCC_GetSysClockFreq>
  14065. 800648a: 4602 mov r2, r0
  14066. 800648c: 4b10 ldr r3, [pc, #64] @ (80064d0 <HAL_RCC_GetHCLKFreq+0x50>)
  14067. 800648e: 699b ldr r3, [r3, #24]
  14068. 8006490: 0a1b lsrs r3, r3, #8
  14069. 8006492: f003 030f and.w r3, r3, #15
  14070. 8006496: 490f ldr r1, [pc, #60] @ (80064d4 <HAL_RCC_GetHCLKFreq+0x54>)
  14071. 8006498: 5ccb ldrb r3, [r1, r3]
  14072. 800649a: f003 031f and.w r3, r3, #31
  14073. 800649e: fa22 f303 lsr.w r3, r2, r3
  14074. 80064a2: 607b str r3, [r7, #4]
  14075. #else
  14076. common_system_clock = HAL_RCC_GetSysClockFreq() >> (D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE) >> RCC_CDCFGR1_CDCPRE_Pos] & 0x1FU);
  14077. #endif
  14078. #if defined(RCC_D1CFGR_HPRE)
  14079. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE) >> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  14080. 80064a4: 4b0a ldr r3, [pc, #40] @ (80064d0 <HAL_RCC_GetHCLKFreq+0x50>)
  14081. 80064a6: 699b ldr r3, [r3, #24]
  14082. 80064a8: f003 030f and.w r3, r3, #15
  14083. 80064ac: 4a09 ldr r2, [pc, #36] @ (80064d4 <HAL_RCC_GetHCLKFreq+0x54>)
  14084. 80064ae: 5cd3 ldrb r3, [r2, r3]
  14085. 80064b0: f003 031f and.w r3, r3, #31
  14086. 80064b4: 687a ldr r2, [r7, #4]
  14087. 80064b6: fa22 f303 lsr.w r3, r2, r3
  14088. 80064ba: 4a07 ldr r2, [pc, #28] @ (80064d8 <HAL_RCC_GetHCLKFreq+0x58>)
  14089. 80064bc: 6013 str r3, [r2, #0]
  14090. #endif
  14091. #if defined(DUAL_CORE) && defined(CORE_CM4)
  14092. SystemCoreClock = SystemD2Clock;
  14093. #else
  14094. SystemCoreClock = common_system_clock;
  14095. 80064be: 4a07 ldr r2, [pc, #28] @ (80064dc <HAL_RCC_GetHCLKFreq+0x5c>)
  14096. 80064c0: 687b ldr r3, [r7, #4]
  14097. 80064c2: 6013 str r3, [r2, #0]
  14098. #endif /* DUAL_CORE && CORE_CM4 */
  14099. return SystemD2Clock;
  14100. 80064c4: 4b04 ldr r3, [pc, #16] @ (80064d8 <HAL_RCC_GetHCLKFreq+0x58>)
  14101. 80064c6: 681b ldr r3, [r3, #0]
  14102. }
  14103. 80064c8: 4618 mov r0, r3
  14104. 80064ca: 3708 adds r7, #8
  14105. 80064cc: 46bd mov sp, r7
  14106. 80064ce: bd80 pop {r7, pc}
  14107. 80064d0: 58024400 .word 0x58024400
  14108. 80064d4: 080100b0 .word 0x080100b0
  14109. 80064d8: 24000004 .word 0x24000004
  14110. 80064dc: 24000000 .word 0x24000000
  14111. 080064e0 <HAL_RCC_GetPCLK1Freq>:
  14112. * @note Each time PCLK1 changes, this function must be called to update the
  14113. * right PCLK1 value. Otherwise, any configuration based on this function will be incorrect.
  14114. * @retval PCLK1 frequency
  14115. */
  14116. uint32_t HAL_RCC_GetPCLK1Freq(void)
  14117. {
  14118. 80064e0: b580 push {r7, lr}
  14119. 80064e2: af00 add r7, sp, #0
  14120. #if defined (RCC_D2CFGR_D2PPRE1)
  14121. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  14122. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->D2CFGR & RCC_D2CFGR_D2PPRE1) >> RCC_D2CFGR_D2PPRE1_Pos]) & 0x1FU));
  14123. 80064e4: f7ff ffcc bl 8006480 <HAL_RCC_GetHCLKFreq>
  14124. 80064e8: 4602 mov r2, r0
  14125. 80064ea: 4b06 ldr r3, [pc, #24] @ (8006504 <HAL_RCC_GetPCLK1Freq+0x24>)
  14126. 80064ec: 69db ldr r3, [r3, #28]
  14127. 80064ee: 091b lsrs r3, r3, #4
  14128. 80064f0: f003 0307 and.w r3, r3, #7
  14129. 80064f4: 4904 ldr r1, [pc, #16] @ (8006508 <HAL_RCC_GetPCLK1Freq+0x28>)
  14130. 80064f6: 5ccb ldrb r3, [r1, r3]
  14131. 80064f8: f003 031f and.w r3, r3, #31
  14132. 80064fc: fa22 f303 lsr.w r3, r2, r3
  14133. #else
  14134. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  14135. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->CDCFGR2 & RCC_CDCFGR2_CDPPRE1) >> RCC_CDCFGR2_CDPPRE1_Pos]) & 0x1FU));
  14136. #endif
  14137. }
  14138. 8006500: 4618 mov r0, r3
  14139. 8006502: bd80 pop {r7, pc}
  14140. 8006504: 58024400 .word 0x58024400
  14141. 8006508: 080100b0 .word 0x080100b0
  14142. 0800650c <HAL_RCC_GetPCLK2Freq>:
  14143. * @note Each time PCLK2 changes, this function must be called to update the
  14144. * right PCLK2 value. Otherwise, any configuration based on this function will be incorrect.
  14145. * @retval PCLK1 frequency
  14146. */
  14147. uint32_t HAL_RCC_GetPCLK2Freq(void)
  14148. {
  14149. 800650c: b580 push {r7, lr}
  14150. 800650e: af00 add r7, sp, #0
  14151. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  14152. #if defined(RCC_D2CFGR_D2PPRE2)
  14153. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->D2CFGR & RCC_D2CFGR_D2PPRE2) >> RCC_D2CFGR_D2PPRE2_Pos]) & 0x1FU));
  14154. 8006510: f7ff ffb6 bl 8006480 <HAL_RCC_GetHCLKFreq>
  14155. 8006514: 4602 mov r2, r0
  14156. 8006516: 4b06 ldr r3, [pc, #24] @ (8006530 <HAL_RCC_GetPCLK2Freq+0x24>)
  14157. 8006518: 69db ldr r3, [r3, #28]
  14158. 800651a: 0a1b lsrs r3, r3, #8
  14159. 800651c: f003 0307 and.w r3, r3, #7
  14160. 8006520: 4904 ldr r1, [pc, #16] @ (8006534 <HAL_RCC_GetPCLK2Freq+0x28>)
  14161. 8006522: 5ccb ldrb r3, [r1, r3]
  14162. 8006524: f003 031f and.w r3, r3, #31
  14163. 8006528: fa22 f303 lsr.w r3, r2, r3
  14164. #else
  14165. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->CDCFGR2 & RCC_CDCFGR2_CDPPRE2) >> RCC_CDCFGR2_CDPPRE2_Pos]) & 0x1FU));
  14166. #endif
  14167. }
  14168. 800652c: 4618 mov r0, r3
  14169. 800652e: bd80 pop {r7, pc}
  14170. 8006530: 58024400 .word 0x58024400
  14171. 8006534: 080100b0 .word 0x080100b0
  14172. 08006538 <HAL_RCC_GetClockConfig>:
  14173. * will be configured.
  14174. * @param pFLatency: Pointer on the Flash Latency.
  14175. * @retval None
  14176. */
  14177. void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency)
  14178. {
  14179. 8006538: b480 push {r7}
  14180. 800653a: b083 sub sp, #12
  14181. 800653c: af00 add r7, sp, #0
  14182. 800653e: 6078 str r0, [r7, #4]
  14183. 8006540: 6039 str r1, [r7, #0]
  14184. /* Set all possible values for the Clock type parameter --------------------*/
  14185. RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 |
  14186. 8006542: 687b ldr r3, [r7, #4]
  14187. 8006544: 223f movs r2, #63 @ 0x3f
  14188. 8006546: 601a str r2, [r3, #0]
  14189. RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_D3PCLK1 ;
  14190. /* Get the SYSCLK configuration --------------------------------------------*/
  14191. RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW);
  14192. 8006548: 4b1a ldr r3, [pc, #104] @ (80065b4 <HAL_RCC_GetClockConfig+0x7c>)
  14193. 800654a: 691b ldr r3, [r3, #16]
  14194. 800654c: f003 0207 and.w r2, r3, #7
  14195. 8006550: 687b ldr r3, [r7, #4]
  14196. 8006552: 605a str r2, [r3, #4]
  14197. #if defined(RCC_D1CFGR_D1CPRE)
  14198. /* Get the SYSCLK configuration ----------------------------------------------*/
  14199. RCC_ClkInitStruct->SYSCLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_D1CPRE);
  14200. 8006554: 4b17 ldr r3, [pc, #92] @ (80065b4 <HAL_RCC_GetClockConfig+0x7c>)
  14201. 8006556: 699b ldr r3, [r3, #24]
  14202. 8006558: f403 6270 and.w r2, r3, #3840 @ 0xf00
  14203. 800655c: 687b ldr r3, [r7, #4]
  14204. 800655e: 609a str r2, [r3, #8]
  14205. /* Get the D1HCLK configuration ----------------------------------------------*/
  14206. RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_HPRE);
  14207. 8006560: 4b14 ldr r3, [pc, #80] @ (80065b4 <HAL_RCC_GetClockConfig+0x7c>)
  14208. 8006562: 699b ldr r3, [r3, #24]
  14209. 8006564: f003 020f and.w r2, r3, #15
  14210. 8006568: 687b ldr r3, [r7, #4]
  14211. 800656a: 60da str r2, [r3, #12]
  14212. /* Get the APB3 configuration ----------------------------------------------*/
  14213. RCC_ClkInitStruct->APB3CLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_D1PPRE);
  14214. 800656c: 4b11 ldr r3, [pc, #68] @ (80065b4 <HAL_RCC_GetClockConfig+0x7c>)
  14215. 800656e: 699b ldr r3, [r3, #24]
  14216. 8006570: f003 0270 and.w r2, r3, #112 @ 0x70
  14217. 8006574: 687b ldr r3, [r7, #4]
  14218. 8006576: 611a str r2, [r3, #16]
  14219. /* Get the APB1 configuration ----------------------------------------------*/
  14220. RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->D2CFGR & RCC_D2CFGR_D2PPRE1);
  14221. 8006578: 4b0e ldr r3, [pc, #56] @ (80065b4 <HAL_RCC_GetClockConfig+0x7c>)
  14222. 800657a: 69db ldr r3, [r3, #28]
  14223. 800657c: f003 0270 and.w r2, r3, #112 @ 0x70
  14224. 8006580: 687b ldr r3, [r7, #4]
  14225. 8006582: 615a str r2, [r3, #20]
  14226. /* Get the APB2 configuration ----------------------------------------------*/
  14227. RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)(RCC->D2CFGR & RCC_D2CFGR_D2PPRE2);
  14228. 8006584: 4b0b ldr r3, [pc, #44] @ (80065b4 <HAL_RCC_GetClockConfig+0x7c>)
  14229. 8006586: 69db ldr r3, [r3, #28]
  14230. 8006588: f403 62e0 and.w r2, r3, #1792 @ 0x700
  14231. 800658c: 687b ldr r3, [r7, #4]
  14232. 800658e: 619a str r2, [r3, #24]
  14233. /* Get the APB4 configuration ----------------------------------------------*/
  14234. RCC_ClkInitStruct->APB4CLKDivider = (uint32_t)(RCC->D3CFGR & RCC_D3CFGR_D3PPRE);
  14235. 8006590: 4b08 ldr r3, [pc, #32] @ (80065b4 <HAL_RCC_GetClockConfig+0x7c>)
  14236. 8006592: 6a1b ldr r3, [r3, #32]
  14237. 8006594: f003 0270 and.w r2, r3, #112 @ 0x70
  14238. 8006598: 687b ldr r3, [r7, #4]
  14239. 800659a: 61da str r2, [r3, #28]
  14240. /* Get the APB4 configuration ----------------------------------------------*/
  14241. RCC_ClkInitStruct->APB4CLKDivider = (uint32_t)(RCC->SRDCFGR & RCC_SRDCFGR_SRDPPRE);
  14242. #endif
  14243. /* Get the Flash Wait State (Latency) configuration ------------------------*/
  14244. *pFLatency = (uint32_t)(FLASH->ACR & FLASH_ACR_LATENCY);
  14245. 800659c: 4b06 ldr r3, [pc, #24] @ (80065b8 <HAL_RCC_GetClockConfig+0x80>)
  14246. 800659e: 681b ldr r3, [r3, #0]
  14247. 80065a0: f003 020f and.w r2, r3, #15
  14248. 80065a4: 683b ldr r3, [r7, #0]
  14249. 80065a6: 601a str r2, [r3, #0]
  14250. }
  14251. 80065a8: bf00 nop
  14252. 80065aa: 370c adds r7, #12
  14253. 80065ac: 46bd mov sp, r7
  14254. 80065ae: f85d 7b04 ldr.w r7, [sp], #4
  14255. 80065b2: 4770 bx lr
  14256. 80065b4: 58024400 .word 0x58024400
  14257. 80065b8: 52002000 .word 0x52002000
  14258. 080065bc <HAL_RCCEx_PeriphCLKConfig>:
  14259. * (*) : Available on some STM32H7 lines only.
  14260. *
  14261. * @retval HAL status
  14262. */
  14263. HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
  14264. {
  14265. 80065bc: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr}
  14266. 80065c0: b0c8 sub sp, #288 @ 0x120
  14267. 80065c2: af00 add r7, sp, #0
  14268. 80065c4: f8c7 010c str.w r0, [r7, #268] @ 0x10c
  14269. uint32_t tmpreg;
  14270. uint32_t tickstart;
  14271. HAL_StatusTypeDef ret = HAL_OK; /* Intermediate status */
  14272. 80065c8: 2300 movs r3, #0
  14273. 80065ca: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14274. HAL_StatusTypeDef status = HAL_OK; /* Final status */
  14275. 80065ce: 2300 movs r3, #0
  14276. 80065d0: f887 311e strb.w r3, [r7, #286] @ 0x11e
  14277. /*---------------------------- SPDIFRX configuration -------------------------------*/
  14278. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPDIFRX) == RCC_PERIPHCLK_SPDIFRX)
  14279. 80065d4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14280. 80065d8: e9d3 2300 ldrd r2, r3, [r3]
  14281. 80065dc: f002 6400 and.w r4, r2, #134217728 @ 0x8000000
  14282. 80065e0: 2500 movs r5, #0
  14283. 80065e2: ea54 0305 orrs.w r3, r4, r5
  14284. 80065e6: d049 beq.n 800667c <HAL_RCCEx_PeriphCLKConfig+0xc0>
  14285. {
  14286. switch (PeriphClkInit->SpdifrxClockSelection)
  14287. 80065e8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14288. 80065ec: 6e9b ldr r3, [r3, #104] @ 0x68
  14289. 80065ee: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  14290. 80065f2: d02f beq.n 8006654 <HAL_RCCEx_PeriphCLKConfig+0x98>
  14291. 80065f4: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  14292. 80065f8: d828 bhi.n 800664c <HAL_RCCEx_PeriphCLKConfig+0x90>
  14293. 80065fa: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  14294. 80065fe: d01a beq.n 8006636 <HAL_RCCEx_PeriphCLKConfig+0x7a>
  14295. 8006600: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  14296. 8006604: d822 bhi.n 800664c <HAL_RCCEx_PeriphCLKConfig+0x90>
  14297. 8006606: 2b00 cmp r3, #0
  14298. 8006608: d003 beq.n 8006612 <HAL_RCCEx_PeriphCLKConfig+0x56>
  14299. 800660a: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  14300. 800660e: d007 beq.n 8006620 <HAL_RCCEx_PeriphCLKConfig+0x64>
  14301. 8006610: e01c b.n 800664c <HAL_RCCEx_PeriphCLKConfig+0x90>
  14302. {
  14303. case RCC_SPDIFRXCLKSOURCE_PLL: /* PLL is used as clock source for SPDIFRX*/
  14304. /* Enable PLL1Q Clock output generated form System PLL . */
  14305. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  14306. 8006612: 4bb8 ldr r3, [pc, #736] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14307. 8006614: 6adb ldr r3, [r3, #44] @ 0x2c
  14308. 8006616: 4ab7 ldr r2, [pc, #732] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14309. 8006618: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  14310. 800661c: 62d3 str r3, [r2, #44] @ 0x2c
  14311. /* SPDIFRX clock source configuration done later after clock selection check */
  14312. break;
  14313. 800661e: e01a b.n 8006656 <HAL_RCCEx_PeriphCLKConfig+0x9a>
  14314. case RCC_SPDIFRXCLKSOURCE_PLL2: /* PLL2 is used as clock source for SPDIFRX*/
  14315. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  14316. 8006620: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14317. 8006624: 3308 adds r3, #8
  14318. 8006626: 2102 movs r1, #2
  14319. 8006628: 4618 mov r0, r3
  14320. 800662a: f001 fc73 bl 8007f14 <RCCEx_PLL2_Config>
  14321. 800662e: 4603 mov r3, r0
  14322. 8006630: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14323. /* SPDIFRX clock source configuration done later after clock selection check */
  14324. break;
  14325. 8006634: e00f b.n 8006656 <HAL_RCCEx_PeriphCLKConfig+0x9a>
  14326. case RCC_SPDIFRXCLKSOURCE_PLL3: /* PLL3 is used as clock source for SPDIFRX*/
  14327. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  14328. 8006636: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14329. 800663a: 3328 adds r3, #40 @ 0x28
  14330. 800663c: 2102 movs r1, #2
  14331. 800663e: 4618 mov r0, r3
  14332. 8006640: f001 fd1a bl 8008078 <RCCEx_PLL3_Config>
  14333. 8006644: 4603 mov r3, r0
  14334. 8006646: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14335. /* SPDIFRX clock source configuration done later after clock selection check */
  14336. break;
  14337. 800664a: e004 b.n 8006656 <HAL_RCCEx_PeriphCLKConfig+0x9a>
  14338. /* Internal OSC clock is used as source of SPDIFRX clock*/
  14339. /* SPDIFRX clock source configuration done later after clock selection check */
  14340. break;
  14341. default:
  14342. ret = HAL_ERROR;
  14343. 800664c: 2301 movs r3, #1
  14344. 800664e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14345. break;
  14346. 8006652: e000 b.n 8006656 <HAL_RCCEx_PeriphCLKConfig+0x9a>
  14347. break;
  14348. 8006654: bf00 nop
  14349. }
  14350. if (ret == HAL_OK)
  14351. 8006656: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  14352. 800665a: 2b00 cmp r3, #0
  14353. 800665c: d10a bne.n 8006674 <HAL_RCCEx_PeriphCLKConfig+0xb8>
  14354. {
  14355. /* Set the source of SPDIFRX clock*/
  14356. __HAL_RCC_SPDIFRX_CONFIG(PeriphClkInit->SpdifrxClockSelection);
  14357. 800665e: 4ba5 ldr r3, [pc, #660] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14358. 8006660: 6d1b ldr r3, [r3, #80] @ 0x50
  14359. 8006662: f423 1140 bic.w r1, r3, #3145728 @ 0x300000
  14360. 8006666: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14361. 800666a: 6e9b ldr r3, [r3, #104] @ 0x68
  14362. 800666c: 4aa1 ldr r2, [pc, #644] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14363. 800666e: 430b orrs r3, r1
  14364. 8006670: 6513 str r3, [r2, #80] @ 0x50
  14365. 8006672: e003 b.n 800667c <HAL_RCCEx_PeriphCLKConfig+0xc0>
  14366. }
  14367. else
  14368. {
  14369. /* set overall return value */
  14370. status = ret;
  14371. 8006674: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  14372. 8006678: f887 311e strb.w r3, [r7, #286] @ 0x11e
  14373. }
  14374. }
  14375. /*---------------------------- SAI1 configuration -------------------------------*/
  14376. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1)
  14377. 800667c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14378. 8006680: e9d3 2300 ldrd r2, r3, [r3]
  14379. 8006684: f402 7880 and.w r8, r2, #256 @ 0x100
  14380. 8006688: f04f 0900 mov.w r9, #0
  14381. 800668c: ea58 0309 orrs.w r3, r8, r9
  14382. 8006690: d047 beq.n 8006722 <HAL_RCCEx_PeriphCLKConfig+0x166>
  14383. {
  14384. switch (PeriphClkInit->Sai1ClockSelection)
  14385. 8006692: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14386. 8006696: 6d9b ldr r3, [r3, #88] @ 0x58
  14387. 8006698: 2b04 cmp r3, #4
  14388. 800669a: d82a bhi.n 80066f2 <HAL_RCCEx_PeriphCLKConfig+0x136>
  14389. 800669c: a201 add r2, pc, #4 @ (adr r2, 80066a4 <HAL_RCCEx_PeriphCLKConfig+0xe8>)
  14390. 800669e: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  14391. 80066a2: bf00 nop
  14392. 80066a4: 080066b9 .word 0x080066b9
  14393. 80066a8: 080066c7 .word 0x080066c7
  14394. 80066ac: 080066dd .word 0x080066dd
  14395. 80066b0: 080066fb .word 0x080066fb
  14396. 80066b4: 080066fb .word 0x080066fb
  14397. {
  14398. case RCC_SAI1CLKSOURCE_PLL: /* PLL is used as clock source for SAI1*/
  14399. /* Enable SAI Clock output generated form System PLL . */
  14400. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  14401. 80066b8: 4b8e ldr r3, [pc, #568] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14402. 80066ba: 6adb ldr r3, [r3, #44] @ 0x2c
  14403. 80066bc: 4a8d ldr r2, [pc, #564] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14404. 80066be: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  14405. 80066c2: 62d3 str r3, [r2, #44] @ 0x2c
  14406. /* SAI1 clock source configuration done later after clock selection check */
  14407. break;
  14408. 80066c4: e01a b.n 80066fc <HAL_RCCEx_PeriphCLKConfig+0x140>
  14409. case RCC_SAI1CLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI1*/
  14410. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  14411. 80066c6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14412. 80066ca: 3308 adds r3, #8
  14413. 80066cc: 2100 movs r1, #0
  14414. 80066ce: 4618 mov r0, r3
  14415. 80066d0: f001 fc20 bl 8007f14 <RCCEx_PLL2_Config>
  14416. 80066d4: 4603 mov r3, r0
  14417. 80066d6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14418. /* SAI1 clock source configuration done later after clock selection check */
  14419. break;
  14420. 80066da: e00f b.n 80066fc <HAL_RCCEx_PeriphCLKConfig+0x140>
  14421. case RCC_SAI1CLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI1*/
  14422. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  14423. 80066dc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14424. 80066e0: 3328 adds r3, #40 @ 0x28
  14425. 80066e2: 2100 movs r1, #0
  14426. 80066e4: 4618 mov r0, r3
  14427. 80066e6: f001 fcc7 bl 8008078 <RCCEx_PLL3_Config>
  14428. 80066ea: 4603 mov r3, r0
  14429. 80066ec: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14430. /* SAI1 clock source configuration done later after clock selection check */
  14431. break;
  14432. 80066f0: e004 b.n 80066fc <HAL_RCCEx_PeriphCLKConfig+0x140>
  14433. /* HSI, HSE, or CSI oscillator is used as source of SAI1 clock */
  14434. /* SAI1 clock source configuration done later after clock selection check */
  14435. break;
  14436. default:
  14437. ret = HAL_ERROR;
  14438. 80066f2: 2301 movs r3, #1
  14439. 80066f4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14440. break;
  14441. 80066f8: e000 b.n 80066fc <HAL_RCCEx_PeriphCLKConfig+0x140>
  14442. break;
  14443. 80066fa: bf00 nop
  14444. }
  14445. if (ret == HAL_OK)
  14446. 80066fc: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  14447. 8006700: 2b00 cmp r3, #0
  14448. 8006702: d10a bne.n 800671a <HAL_RCCEx_PeriphCLKConfig+0x15e>
  14449. {
  14450. /* Set the source of SAI1 clock*/
  14451. __HAL_RCC_SAI1_CONFIG(PeriphClkInit->Sai1ClockSelection);
  14452. 8006704: 4b7b ldr r3, [pc, #492] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14453. 8006706: 6d1b ldr r3, [r3, #80] @ 0x50
  14454. 8006708: f023 0107 bic.w r1, r3, #7
  14455. 800670c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14456. 8006710: 6d9b ldr r3, [r3, #88] @ 0x58
  14457. 8006712: 4a78 ldr r2, [pc, #480] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14458. 8006714: 430b orrs r3, r1
  14459. 8006716: 6513 str r3, [r2, #80] @ 0x50
  14460. 8006718: e003 b.n 8006722 <HAL_RCCEx_PeriphCLKConfig+0x166>
  14461. }
  14462. else
  14463. {
  14464. /* set overall return value */
  14465. status = ret;
  14466. 800671a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  14467. 800671e: f887 311e strb.w r3, [r7, #286] @ 0x11e
  14468. }
  14469. }
  14470. #if defined(SAI3)
  14471. /*---------------------------- SAI2/3 configuration -------------------------------*/
  14472. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI23) == RCC_PERIPHCLK_SAI23)
  14473. 8006722: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14474. 8006726: e9d3 2300 ldrd r2, r3, [r3]
  14475. 800672a: f402 7a00 and.w sl, r2, #512 @ 0x200
  14476. 800672e: f04f 0b00 mov.w fp, #0
  14477. 8006732: ea5a 030b orrs.w r3, sl, fp
  14478. 8006736: d04c beq.n 80067d2 <HAL_RCCEx_PeriphCLKConfig+0x216>
  14479. {
  14480. switch (PeriphClkInit->Sai23ClockSelection)
  14481. 8006738: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14482. 800673c: 6ddb ldr r3, [r3, #92] @ 0x5c
  14483. 800673e: f5b3 7f80 cmp.w r3, #256 @ 0x100
  14484. 8006742: d030 beq.n 80067a6 <HAL_RCCEx_PeriphCLKConfig+0x1ea>
  14485. 8006744: f5b3 7f80 cmp.w r3, #256 @ 0x100
  14486. 8006748: d829 bhi.n 800679e <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  14487. 800674a: 2bc0 cmp r3, #192 @ 0xc0
  14488. 800674c: d02d beq.n 80067aa <HAL_RCCEx_PeriphCLKConfig+0x1ee>
  14489. 800674e: 2bc0 cmp r3, #192 @ 0xc0
  14490. 8006750: d825 bhi.n 800679e <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  14491. 8006752: 2b80 cmp r3, #128 @ 0x80
  14492. 8006754: d018 beq.n 8006788 <HAL_RCCEx_PeriphCLKConfig+0x1cc>
  14493. 8006756: 2b80 cmp r3, #128 @ 0x80
  14494. 8006758: d821 bhi.n 800679e <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  14495. 800675a: 2b00 cmp r3, #0
  14496. 800675c: d002 beq.n 8006764 <HAL_RCCEx_PeriphCLKConfig+0x1a8>
  14497. 800675e: 2b40 cmp r3, #64 @ 0x40
  14498. 8006760: d007 beq.n 8006772 <HAL_RCCEx_PeriphCLKConfig+0x1b6>
  14499. 8006762: e01c b.n 800679e <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  14500. {
  14501. case RCC_SAI23CLKSOURCE_PLL: /* PLL is used as clock source for SAI2/3 */
  14502. /* Enable SAI Clock output generated form System PLL . */
  14503. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  14504. 8006764: 4b63 ldr r3, [pc, #396] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14505. 8006766: 6adb ldr r3, [r3, #44] @ 0x2c
  14506. 8006768: 4a62 ldr r2, [pc, #392] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14507. 800676a: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  14508. 800676e: 62d3 str r3, [r2, #44] @ 0x2c
  14509. /* SAI2/3 clock source configuration done later after clock selection check */
  14510. break;
  14511. 8006770: e01c b.n 80067ac <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  14512. case RCC_SAI23CLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2/3 */
  14513. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  14514. 8006772: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14515. 8006776: 3308 adds r3, #8
  14516. 8006778: 2100 movs r1, #0
  14517. 800677a: 4618 mov r0, r3
  14518. 800677c: f001 fbca bl 8007f14 <RCCEx_PLL2_Config>
  14519. 8006780: 4603 mov r3, r0
  14520. 8006782: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14521. /* SAI2/3 clock source configuration done later after clock selection check */
  14522. break;
  14523. 8006786: e011 b.n 80067ac <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  14524. case RCC_SAI23CLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2/3 */
  14525. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  14526. 8006788: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14527. 800678c: 3328 adds r3, #40 @ 0x28
  14528. 800678e: 2100 movs r1, #0
  14529. 8006790: 4618 mov r0, r3
  14530. 8006792: f001 fc71 bl 8008078 <RCCEx_PLL3_Config>
  14531. 8006796: 4603 mov r3, r0
  14532. 8006798: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14533. /* SAI2/3 clock source configuration done later after clock selection check */
  14534. break;
  14535. 800679c: e006 b.n 80067ac <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  14536. /* HSI, HSE, or CSI oscillator is used as source of SAI2/3 clock */
  14537. /* SAI2/3 clock source configuration done later after clock selection check */
  14538. break;
  14539. default:
  14540. ret = HAL_ERROR;
  14541. 800679e: 2301 movs r3, #1
  14542. 80067a0: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14543. break;
  14544. 80067a4: e002 b.n 80067ac <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  14545. break;
  14546. 80067a6: bf00 nop
  14547. 80067a8: e000 b.n 80067ac <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  14548. break;
  14549. 80067aa: bf00 nop
  14550. }
  14551. if (ret == HAL_OK)
  14552. 80067ac: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  14553. 80067b0: 2b00 cmp r3, #0
  14554. 80067b2: d10a bne.n 80067ca <HAL_RCCEx_PeriphCLKConfig+0x20e>
  14555. {
  14556. /* Set the source of SAI2/3 clock*/
  14557. __HAL_RCC_SAI23_CONFIG(PeriphClkInit->Sai23ClockSelection);
  14558. 80067b4: 4b4f ldr r3, [pc, #316] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14559. 80067b6: 6d1b ldr r3, [r3, #80] @ 0x50
  14560. 80067b8: f423 71e0 bic.w r1, r3, #448 @ 0x1c0
  14561. 80067bc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14562. 80067c0: 6ddb ldr r3, [r3, #92] @ 0x5c
  14563. 80067c2: 4a4c ldr r2, [pc, #304] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14564. 80067c4: 430b orrs r3, r1
  14565. 80067c6: 6513 str r3, [r2, #80] @ 0x50
  14566. 80067c8: e003 b.n 80067d2 <HAL_RCCEx_PeriphCLKConfig+0x216>
  14567. }
  14568. else
  14569. {
  14570. /* set overall return value */
  14571. status = ret;
  14572. 80067ca: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  14573. 80067ce: f887 311e strb.w r3, [r7, #286] @ 0x11e
  14574. }
  14575. #endif /*SAI2B*/
  14576. #if defined(SAI4)
  14577. /*---------------------------- SAI4A configuration -------------------------------*/
  14578. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI4A) == RCC_PERIPHCLK_SAI4A)
  14579. 80067d2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14580. 80067d6: e9d3 2300 ldrd r2, r3, [r3]
  14581. 80067da: f402 6380 and.w r3, r2, #1024 @ 0x400
  14582. 80067de: f8c7 3100 str.w r3, [r7, #256] @ 0x100
  14583. 80067e2: 2300 movs r3, #0
  14584. 80067e4: f8c7 3104 str.w r3, [r7, #260] @ 0x104
  14585. 80067e8: e9d7 1240 ldrd r1, r2, [r7, #256] @ 0x100
  14586. 80067ec: 460b mov r3, r1
  14587. 80067ee: 4313 orrs r3, r2
  14588. 80067f0: d053 beq.n 800689a <HAL_RCCEx_PeriphCLKConfig+0x2de>
  14589. {
  14590. switch (PeriphClkInit->Sai4AClockSelection)
  14591. 80067f2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14592. 80067f6: f8d3 30a8 ldr.w r3, [r3, #168] @ 0xa8
  14593. 80067fa: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  14594. 80067fe: d035 beq.n 800686c <HAL_RCCEx_PeriphCLKConfig+0x2b0>
  14595. 8006800: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  14596. 8006804: d82e bhi.n 8006864 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  14597. 8006806: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  14598. 800680a: d031 beq.n 8006870 <HAL_RCCEx_PeriphCLKConfig+0x2b4>
  14599. 800680c: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  14600. 8006810: d828 bhi.n 8006864 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  14601. 8006812: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  14602. 8006816: d01a beq.n 800684e <HAL_RCCEx_PeriphCLKConfig+0x292>
  14603. 8006818: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  14604. 800681c: d822 bhi.n 8006864 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  14605. 800681e: 2b00 cmp r3, #0
  14606. 8006820: d003 beq.n 800682a <HAL_RCCEx_PeriphCLKConfig+0x26e>
  14607. 8006822: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  14608. 8006826: d007 beq.n 8006838 <HAL_RCCEx_PeriphCLKConfig+0x27c>
  14609. 8006828: e01c b.n 8006864 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  14610. {
  14611. case RCC_SAI4ACLKSOURCE_PLL: /* PLL is used as clock source for SAI2*/
  14612. /* Enable SAI Clock output generated form System PLL . */
  14613. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  14614. 800682a: 4b32 ldr r3, [pc, #200] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14615. 800682c: 6adb ldr r3, [r3, #44] @ 0x2c
  14616. 800682e: 4a31 ldr r2, [pc, #196] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14617. 8006830: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  14618. 8006834: 62d3 str r3, [r2, #44] @ 0x2c
  14619. /* SAI1 clock source configuration done later after clock selection check */
  14620. break;
  14621. 8006836: e01c b.n 8006872 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  14622. case RCC_SAI4ACLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2*/
  14623. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  14624. 8006838: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14625. 800683c: 3308 adds r3, #8
  14626. 800683e: 2100 movs r1, #0
  14627. 8006840: 4618 mov r0, r3
  14628. 8006842: f001 fb67 bl 8007f14 <RCCEx_PLL2_Config>
  14629. 8006846: 4603 mov r3, r0
  14630. 8006848: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14631. /* SAI2 clock source configuration done later after clock selection check */
  14632. break;
  14633. 800684c: e011 b.n 8006872 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  14634. case RCC_SAI4ACLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2*/
  14635. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  14636. 800684e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14637. 8006852: 3328 adds r3, #40 @ 0x28
  14638. 8006854: 2100 movs r1, #0
  14639. 8006856: 4618 mov r0, r3
  14640. 8006858: f001 fc0e bl 8008078 <RCCEx_PLL3_Config>
  14641. 800685c: 4603 mov r3, r0
  14642. 800685e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14643. /* SAI1 clock source configuration done later after clock selection check */
  14644. break;
  14645. 8006862: e006 b.n 8006872 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  14646. /* SAI4A clock source configuration done later after clock selection check */
  14647. break;
  14648. #endif /* RCC_VER_3_0 */
  14649. default:
  14650. ret = HAL_ERROR;
  14651. 8006864: 2301 movs r3, #1
  14652. 8006866: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14653. break;
  14654. 800686a: e002 b.n 8006872 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  14655. break;
  14656. 800686c: bf00 nop
  14657. 800686e: e000 b.n 8006872 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  14658. break;
  14659. 8006870: bf00 nop
  14660. }
  14661. if (ret == HAL_OK)
  14662. 8006872: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  14663. 8006876: 2b00 cmp r3, #0
  14664. 8006878: d10b bne.n 8006892 <HAL_RCCEx_PeriphCLKConfig+0x2d6>
  14665. {
  14666. /* Set the source of SAI4A clock*/
  14667. __HAL_RCC_SAI4A_CONFIG(PeriphClkInit->Sai4AClockSelection);
  14668. 800687a: 4b1e ldr r3, [pc, #120] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14669. 800687c: 6d9b ldr r3, [r3, #88] @ 0x58
  14670. 800687e: f423 0160 bic.w r1, r3, #14680064 @ 0xe00000
  14671. 8006882: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14672. 8006886: f8d3 30a8 ldr.w r3, [r3, #168] @ 0xa8
  14673. 800688a: 4a1a ldr r2, [pc, #104] @ (80068f4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  14674. 800688c: 430b orrs r3, r1
  14675. 800688e: 6593 str r3, [r2, #88] @ 0x58
  14676. 8006890: e003 b.n 800689a <HAL_RCCEx_PeriphCLKConfig+0x2de>
  14677. }
  14678. else
  14679. {
  14680. /* set overall return value */
  14681. status = ret;
  14682. 8006892: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  14683. 8006896: f887 311e strb.w r3, [r7, #286] @ 0x11e
  14684. }
  14685. }
  14686. /*---------------------------- SAI4B configuration -------------------------------*/
  14687. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI4B) == RCC_PERIPHCLK_SAI4B)
  14688. 800689a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14689. 800689e: e9d3 2300 ldrd r2, r3, [r3]
  14690. 80068a2: f402 6300 and.w r3, r2, #2048 @ 0x800
  14691. 80068a6: f8c7 30f8 str.w r3, [r7, #248] @ 0xf8
  14692. 80068aa: 2300 movs r3, #0
  14693. 80068ac: f8c7 30fc str.w r3, [r7, #252] @ 0xfc
  14694. 80068b0: e9d7 123e ldrd r1, r2, [r7, #248] @ 0xf8
  14695. 80068b4: 460b mov r3, r1
  14696. 80068b6: 4313 orrs r3, r2
  14697. 80068b8: d056 beq.n 8006968 <HAL_RCCEx_PeriphCLKConfig+0x3ac>
  14698. {
  14699. switch (PeriphClkInit->Sai4BClockSelection)
  14700. 80068ba: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14701. 80068be: f8d3 30ac ldr.w r3, [r3, #172] @ 0xac
  14702. 80068c2: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  14703. 80068c6: d038 beq.n 800693a <HAL_RCCEx_PeriphCLKConfig+0x37e>
  14704. 80068c8: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  14705. 80068cc: d831 bhi.n 8006932 <HAL_RCCEx_PeriphCLKConfig+0x376>
  14706. 80068ce: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  14707. 80068d2: d034 beq.n 800693e <HAL_RCCEx_PeriphCLKConfig+0x382>
  14708. 80068d4: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  14709. 80068d8: d82b bhi.n 8006932 <HAL_RCCEx_PeriphCLKConfig+0x376>
  14710. 80068da: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  14711. 80068de: d01d beq.n 800691c <HAL_RCCEx_PeriphCLKConfig+0x360>
  14712. 80068e0: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  14713. 80068e4: d825 bhi.n 8006932 <HAL_RCCEx_PeriphCLKConfig+0x376>
  14714. 80068e6: 2b00 cmp r3, #0
  14715. 80068e8: d006 beq.n 80068f8 <HAL_RCCEx_PeriphCLKConfig+0x33c>
  14716. 80068ea: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000
  14717. 80068ee: d00a beq.n 8006906 <HAL_RCCEx_PeriphCLKConfig+0x34a>
  14718. 80068f0: e01f b.n 8006932 <HAL_RCCEx_PeriphCLKConfig+0x376>
  14719. 80068f2: bf00 nop
  14720. 80068f4: 58024400 .word 0x58024400
  14721. {
  14722. case RCC_SAI4BCLKSOURCE_PLL: /* PLL is used as clock source for SAI2*/
  14723. /* Enable SAI Clock output generated form System PLL . */
  14724. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  14725. 80068f8: 4ba2 ldr r3, [pc, #648] @ (8006b84 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  14726. 80068fa: 6adb ldr r3, [r3, #44] @ 0x2c
  14727. 80068fc: 4aa1 ldr r2, [pc, #644] @ (8006b84 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  14728. 80068fe: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  14729. 8006902: 62d3 str r3, [r2, #44] @ 0x2c
  14730. /* SAI1 clock source configuration done later after clock selection check */
  14731. break;
  14732. 8006904: e01c b.n 8006940 <HAL_RCCEx_PeriphCLKConfig+0x384>
  14733. case RCC_SAI4BCLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2*/
  14734. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  14735. 8006906: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14736. 800690a: 3308 adds r3, #8
  14737. 800690c: 2100 movs r1, #0
  14738. 800690e: 4618 mov r0, r3
  14739. 8006910: f001 fb00 bl 8007f14 <RCCEx_PLL2_Config>
  14740. 8006914: 4603 mov r3, r0
  14741. 8006916: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14742. /* SAI2 clock source configuration done later after clock selection check */
  14743. break;
  14744. 800691a: e011 b.n 8006940 <HAL_RCCEx_PeriphCLKConfig+0x384>
  14745. case RCC_SAI4BCLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2*/
  14746. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  14747. 800691c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14748. 8006920: 3328 adds r3, #40 @ 0x28
  14749. 8006922: 2100 movs r1, #0
  14750. 8006924: 4618 mov r0, r3
  14751. 8006926: f001 fba7 bl 8008078 <RCCEx_PLL3_Config>
  14752. 800692a: 4603 mov r3, r0
  14753. 800692c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14754. /* SAI1 clock source configuration done later after clock selection check */
  14755. break;
  14756. 8006930: e006 b.n 8006940 <HAL_RCCEx_PeriphCLKConfig+0x384>
  14757. /* SAI4B clock source configuration done later after clock selection check */
  14758. break;
  14759. #endif /* RCC_VER_3_0 */
  14760. default:
  14761. ret = HAL_ERROR;
  14762. 8006932: 2301 movs r3, #1
  14763. 8006934: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14764. break;
  14765. 8006938: e002 b.n 8006940 <HAL_RCCEx_PeriphCLKConfig+0x384>
  14766. break;
  14767. 800693a: bf00 nop
  14768. 800693c: e000 b.n 8006940 <HAL_RCCEx_PeriphCLKConfig+0x384>
  14769. break;
  14770. 800693e: bf00 nop
  14771. }
  14772. if (ret == HAL_OK)
  14773. 8006940: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  14774. 8006944: 2b00 cmp r3, #0
  14775. 8006946: d10b bne.n 8006960 <HAL_RCCEx_PeriphCLKConfig+0x3a4>
  14776. {
  14777. /* Set the source of SAI4B clock*/
  14778. __HAL_RCC_SAI4B_CONFIG(PeriphClkInit->Sai4BClockSelection);
  14779. 8006948: 4b8e ldr r3, [pc, #568] @ (8006b84 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  14780. 800694a: 6d9b ldr r3, [r3, #88] @ 0x58
  14781. 800694c: f023 61e0 bic.w r1, r3, #117440512 @ 0x7000000
  14782. 8006950: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14783. 8006954: f8d3 30ac ldr.w r3, [r3, #172] @ 0xac
  14784. 8006958: 4a8a ldr r2, [pc, #552] @ (8006b84 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  14785. 800695a: 430b orrs r3, r1
  14786. 800695c: 6593 str r3, [r2, #88] @ 0x58
  14787. 800695e: e003 b.n 8006968 <HAL_RCCEx_PeriphCLKConfig+0x3ac>
  14788. }
  14789. else
  14790. {
  14791. /* set overall return value */
  14792. status = ret;
  14793. 8006960: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  14794. 8006964: f887 311e strb.w r3, [r7, #286] @ 0x11e
  14795. }
  14796. #endif /*SAI4*/
  14797. #if defined(QUADSPI)
  14798. /*---------------------------- QSPI configuration -------------------------------*/
  14799. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_QSPI) == RCC_PERIPHCLK_QSPI)
  14800. 8006968: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14801. 800696c: e9d3 2300 ldrd r2, r3, [r3]
  14802. 8006970: f002 7300 and.w r3, r2, #33554432 @ 0x2000000
  14803. 8006974: f8c7 30f0 str.w r3, [r7, #240] @ 0xf0
  14804. 8006978: 2300 movs r3, #0
  14805. 800697a: f8c7 30f4 str.w r3, [r7, #244] @ 0xf4
  14806. 800697e: e9d7 123c ldrd r1, r2, [r7, #240] @ 0xf0
  14807. 8006982: 460b mov r3, r1
  14808. 8006984: 4313 orrs r3, r2
  14809. 8006986: d03a beq.n 80069fe <HAL_RCCEx_PeriphCLKConfig+0x442>
  14810. {
  14811. switch (PeriphClkInit->QspiClockSelection)
  14812. 8006988: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14813. 800698c: 6cdb ldr r3, [r3, #76] @ 0x4c
  14814. 800698e: 2b30 cmp r3, #48 @ 0x30
  14815. 8006990: d01f beq.n 80069d2 <HAL_RCCEx_PeriphCLKConfig+0x416>
  14816. 8006992: 2b30 cmp r3, #48 @ 0x30
  14817. 8006994: d819 bhi.n 80069ca <HAL_RCCEx_PeriphCLKConfig+0x40e>
  14818. 8006996: 2b20 cmp r3, #32
  14819. 8006998: d00c beq.n 80069b4 <HAL_RCCEx_PeriphCLKConfig+0x3f8>
  14820. 800699a: 2b20 cmp r3, #32
  14821. 800699c: d815 bhi.n 80069ca <HAL_RCCEx_PeriphCLKConfig+0x40e>
  14822. 800699e: 2b00 cmp r3, #0
  14823. 80069a0: d019 beq.n 80069d6 <HAL_RCCEx_PeriphCLKConfig+0x41a>
  14824. 80069a2: 2b10 cmp r3, #16
  14825. 80069a4: d111 bne.n 80069ca <HAL_RCCEx_PeriphCLKConfig+0x40e>
  14826. {
  14827. case RCC_QSPICLKSOURCE_PLL: /* PLL is used as clock source for QSPI*/
  14828. /* Enable QSPI Clock output generated form System PLL . */
  14829. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  14830. 80069a6: 4b77 ldr r3, [pc, #476] @ (8006b84 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  14831. 80069a8: 6adb ldr r3, [r3, #44] @ 0x2c
  14832. 80069aa: 4a76 ldr r2, [pc, #472] @ (8006b84 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  14833. 80069ac: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  14834. 80069b0: 62d3 str r3, [r2, #44] @ 0x2c
  14835. /* QSPI clock source configuration done later after clock selection check */
  14836. break;
  14837. 80069b2: e011 b.n 80069d8 <HAL_RCCEx_PeriphCLKConfig+0x41c>
  14838. case RCC_QSPICLKSOURCE_PLL2: /* PLL2 is used as clock source for QSPI*/
  14839. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  14840. 80069b4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14841. 80069b8: 3308 adds r3, #8
  14842. 80069ba: 2102 movs r1, #2
  14843. 80069bc: 4618 mov r0, r3
  14844. 80069be: f001 faa9 bl 8007f14 <RCCEx_PLL2_Config>
  14845. 80069c2: 4603 mov r3, r0
  14846. 80069c4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14847. /* QSPI clock source configuration done later after clock selection check */
  14848. break;
  14849. 80069c8: e006 b.n 80069d8 <HAL_RCCEx_PeriphCLKConfig+0x41c>
  14850. case RCC_QSPICLKSOURCE_D1HCLK:
  14851. /* Domain1 HCLK clock selected as QSPI kernel peripheral clock */
  14852. break;
  14853. default:
  14854. ret = HAL_ERROR;
  14855. 80069ca: 2301 movs r3, #1
  14856. 80069cc: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14857. break;
  14858. 80069d0: e002 b.n 80069d8 <HAL_RCCEx_PeriphCLKConfig+0x41c>
  14859. break;
  14860. 80069d2: bf00 nop
  14861. 80069d4: e000 b.n 80069d8 <HAL_RCCEx_PeriphCLKConfig+0x41c>
  14862. break;
  14863. 80069d6: bf00 nop
  14864. }
  14865. if (ret == HAL_OK)
  14866. 80069d8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  14867. 80069dc: 2b00 cmp r3, #0
  14868. 80069de: d10a bne.n 80069f6 <HAL_RCCEx_PeriphCLKConfig+0x43a>
  14869. {
  14870. /* Set the source of QSPI clock*/
  14871. __HAL_RCC_QSPI_CONFIG(PeriphClkInit->QspiClockSelection);
  14872. 80069e0: 4b68 ldr r3, [pc, #416] @ (8006b84 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  14873. 80069e2: 6cdb ldr r3, [r3, #76] @ 0x4c
  14874. 80069e4: f023 0130 bic.w r1, r3, #48 @ 0x30
  14875. 80069e8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14876. 80069ec: 6cdb ldr r3, [r3, #76] @ 0x4c
  14877. 80069ee: 4a65 ldr r2, [pc, #404] @ (8006b84 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  14878. 80069f0: 430b orrs r3, r1
  14879. 80069f2: 64d3 str r3, [r2, #76] @ 0x4c
  14880. 80069f4: e003 b.n 80069fe <HAL_RCCEx_PeriphCLKConfig+0x442>
  14881. }
  14882. else
  14883. {
  14884. /* set overall return value */
  14885. status = ret;
  14886. 80069f6: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  14887. 80069fa: f887 311e strb.w r3, [r7, #286] @ 0x11e
  14888. }
  14889. }
  14890. #endif /*OCTOSPI*/
  14891. /*---------------------------- SPI1/2/3 configuration -------------------------------*/
  14892. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI123) == RCC_PERIPHCLK_SPI123)
  14893. 80069fe: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14894. 8006a02: e9d3 2300 ldrd r2, r3, [r3]
  14895. 8006a06: f402 5380 and.w r3, r2, #4096 @ 0x1000
  14896. 8006a0a: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  14897. 8006a0e: 2300 movs r3, #0
  14898. 8006a10: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  14899. 8006a14: e9d7 123a ldrd r1, r2, [r7, #232] @ 0xe8
  14900. 8006a18: 460b mov r3, r1
  14901. 8006a1a: 4313 orrs r3, r2
  14902. 8006a1c: d051 beq.n 8006ac2 <HAL_RCCEx_PeriphCLKConfig+0x506>
  14903. {
  14904. switch (PeriphClkInit->Spi123ClockSelection)
  14905. 8006a1e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14906. 8006a22: 6e1b ldr r3, [r3, #96] @ 0x60
  14907. 8006a24: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  14908. 8006a28: d035 beq.n 8006a96 <HAL_RCCEx_PeriphCLKConfig+0x4da>
  14909. 8006a2a: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  14910. 8006a2e: d82e bhi.n 8006a8e <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  14911. 8006a30: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  14912. 8006a34: d031 beq.n 8006a9a <HAL_RCCEx_PeriphCLKConfig+0x4de>
  14913. 8006a36: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  14914. 8006a3a: d828 bhi.n 8006a8e <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  14915. 8006a3c: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  14916. 8006a40: d01a beq.n 8006a78 <HAL_RCCEx_PeriphCLKConfig+0x4bc>
  14917. 8006a42: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  14918. 8006a46: d822 bhi.n 8006a8e <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  14919. 8006a48: 2b00 cmp r3, #0
  14920. 8006a4a: d003 beq.n 8006a54 <HAL_RCCEx_PeriphCLKConfig+0x498>
  14921. 8006a4c: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  14922. 8006a50: d007 beq.n 8006a62 <HAL_RCCEx_PeriphCLKConfig+0x4a6>
  14923. 8006a52: e01c b.n 8006a8e <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  14924. {
  14925. case RCC_SPI123CLKSOURCE_PLL: /* PLL is used as clock source for SPI1/2/3 */
  14926. /* Enable SPI Clock output generated form System PLL . */
  14927. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  14928. 8006a54: 4b4b ldr r3, [pc, #300] @ (8006b84 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  14929. 8006a56: 6adb ldr r3, [r3, #44] @ 0x2c
  14930. 8006a58: 4a4a ldr r2, [pc, #296] @ (8006b84 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  14931. 8006a5a: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  14932. 8006a5e: 62d3 str r3, [r2, #44] @ 0x2c
  14933. /* SPI1/2/3 clock source configuration done later after clock selection check */
  14934. break;
  14935. 8006a60: e01c b.n 8006a9c <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  14936. case RCC_SPI123CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI1/2/3 */
  14937. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  14938. 8006a62: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14939. 8006a66: 3308 adds r3, #8
  14940. 8006a68: 2100 movs r1, #0
  14941. 8006a6a: 4618 mov r0, r3
  14942. 8006a6c: f001 fa52 bl 8007f14 <RCCEx_PLL2_Config>
  14943. 8006a70: 4603 mov r3, r0
  14944. 8006a72: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14945. /* SPI1/2/3 clock source configuration done later after clock selection check */
  14946. break;
  14947. 8006a76: e011 b.n 8006a9c <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  14948. case RCC_SPI123CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI1/2/3 */
  14949. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  14950. 8006a78: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14951. 8006a7c: 3328 adds r3, #40 @ 0x28
  14952. 8006a7e: 2100 movs r1, #0
  14953. 8006a80: 4618 mov r0, r3
  14954. 8006a82: f001 faf9 bl 8008078 <RCCEx_PLL3_Config>
  14955. 8006a86: 4603 mov r3, r0
  14956. 8006a88: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14957. /* SPI1/2/3 clock source configuration done later after clock selection check */
  14958. break;
  14959. 8006a8c: e006 b.n 8006a9c <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  14960. /* HSI, HSE, or CSI oscillator is used as source of SPI1/2/3 clock */
  14961. /* SPI1/2/3 clock source configuration done later after clock selection check */
  14962. break;
  14963. default:
  14964. ret = HAL_ERROR;
  14965. 8006a8e: 2301 movs r3, #1
  14966. 8006a90: f887 311f strb.w r3, [r7, #287] @ 0x11f
  14967. break;
  14968. 8006a94: e002 b.n 8006a9c <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  14969. break;
  14970. 8006a96: bf00 nop
  14971. 8006a98: e000 b.n 8006a9c <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  14972. break;
  14973. 8006a9a: bf00 nop
  14974. }
  14975. if (ret == HAL_OK)
  14976. 8006a9c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  14977. 8006aa0: 2b00 cmp r3, #0
  14978. 8006aa2: d10a bne.n 8006aba <HAL_RCCEx_PeriphCLKConfig+0x4fe>
  14979. {
  14980. /* Set the source of SPI1/2/3 clock*/
  14981. __HAL_RCC_SPI123_CONFIG(PeriphClkInit->Spi123ClockSelection);
  14982. 8006aa4: 4b37 ldr r3, [pc, #220] @ (8006b84 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  14983. 8006aa6: 6d1b ldr r3, [r3, #80] @ 0x50
  14984. 8006aa8: f423 41e0 bic.w r1, r3, #28672 @ 0x7000
  14985. 8006aac: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  14986. 8006ab0: 6e1b ldr r3, [r3, #96] @ 0x60
  14987. 8006ab2: 4a34 ldr r2, [pc, #208] @ (8006b84 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  14988. 8006ab4: 430b orrs r3, r1
  14989. 8006ab6: 6513 str r3, [r2, #80] @ 0x50
  14990. 8006ab8: e003 b.n 8006ac2 <HAL_RCCEx_PeriphCLKConfig+0x506>
  14991. }
  14992. else
  14993. {
  14994. /* set overall return value */
  14995. status = ret;
  14996. 8006aba: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  14997. 8006abe: f887 311e strb.w r3, [r7, #286] @ 0x11e
  14998. }
  14999. }
  15000. /*---------------------------- SPI4/5 configuration -------------------------------*/
  15001. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI45) == RCC_PERIPHCLK_SPI45)
  15002. 8006ac2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15003. 8006ac6: e9d3 2300 ldrd r2, r3, [r3]
  15004. 8006aca: f402 5300 and.w r3, r2, #8192 @ 0x2000
  15005. 8006ace: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  15006. 8006ad2: 2300 movs r3, #0
  15007. 8006ad4: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  15008. 8006ad8: e9d7 1238 ldrd r1, r2, [r7, #224] @ 0xe0
  15009. 8006adc: 460b mov r3, r1
  15010. 8006ade: 4313 orrs r3, r2
  15011. 8006ae0: d056 beq.n 8006b90 <HAL_RCCEx_PeriphCLKConfig+0x5d4>
  15012. {
  15013. switch (PeriphClkInit->Spi45ClockSelection)
  15014. 8006ae2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15015. 8006ae6: 6e5b ldr r3, [r3, #100] @ 0x64
  15016. 8006ae8: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  15017. 8006aec: d033 beq.n 8006b56 <HAL_RCCEx_PeriphCLKConfig+0x59a>
  15018. 8006aee: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  15019. 8006af2: d82c bhi.n 8006b4e <HAL_RCCEx_PeriphCLKConfig+0x592>
  15020. 8006af4: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  15021. 8006af8: d02f beq.n 8006b5a <HAL_RCCEx_PeriphCLKConfig+0x59e>
  15022. 8006afa: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  15023. 8006afe: d826 bhi.n 8006b4e <HAL_RCCEx_PeriphCLKConfig+0x592>
  15024. 8006b00: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  15025. 8006b04: d02b beq.n 8006b5e <HAL_RCCEx_PeriphCLKConfig+0x5a2>
  15026. 8006b06: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  15027. 8006b0a: d820 bhi.n 8006b4e <HAL_RCCEx_PeriphCLKConfig+0x592>
  15028. 8006b0c: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  15029. 8006b10: d012 beq.n 8006b38 <HAL_RCCEx_PeriphCLKConfig+0x57c>
  15030. 8006b12: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  15031. 8006b16: d81a bhi.n 8006b4e <HAL_RCCEx_PeriphCLKConfig+0x592>
  15032. 8006b18: 2b00 cmp r3, #0
  15033. 8006b1a: d022 beq.n 8006b62 <HAL_RCCEx_PeriphCLKConfig+0x5a6>
  15034. 8006b1c: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  15035. 8006b20: d115 bne.n 8006b4e <HAL_RCCEx_PeriphCLKConfig+0x592>
  15036. /* SPI4/5 clock source configuration done later after clock selection check */
  15037. break;
  15038. case RCC_SPI45CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI4/5 */
  15039. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  15040. 8006b22: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15041. 8006b26: 3308 adds r3, #8
  15042. 8006b28: 2101 movs r1, #1
  15043. 8006b2a: 4618 mov r0, r3
  15044. 8006b2c: f001 f9f2 bl 8007f14 <RCCEx_PLL2_Config>
  15045. 8006b30: 4603 mov r3, r0
  15046. 8006b32: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15047. /* SPI4/5 clock source configuration done later after clock selection check */
  15048. break;
  15049. 8006b36: e015 b.n 8006b64 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  15050. case RCC_SPI45CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI4/5 */
  15051. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  15052. 8006b38: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15053. 8006b3c: 3328 adds r3, #40 @ 0x28
  15054. 8006b3e: 2101 movs r1, #1
  15055. 8006b40: 4618 mov r0, r3
  15056. 8006b42: f001 fa99 bl 8008078 <RCCEx_PLL3_Config>
  15057. 8006b46: 4603 mov r3, r0
  15058. 8006b48: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15059. /* SPI4/5 clock source configuration done later after clock selection check */
  15060. break;
  15061. 8006b4c: e00a b.n 8006b64 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  15062. /* HSE, oscillator is used as source of SPI4/5 clock */
  15063. /* SPI4/5 clock source configuration done later after clock selection check */
  15064. break;
  15065. default:
  15066. ret = HAL_ERROR;
  15067. 8006b4e: 2301 movs r3, #1
  15068. 8006b50: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15069. break;
  15070. 8006b54: e006 b.n 8006b64 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  15071. break;
  15072. 8006b56: bf00 nop
  15073. 8006b58: e004 b.n 8006b64 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  15074. break;
  15075. 8006b5a: bf00 nop
  15076. 8006b5c: e002 b.n 8006b64 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  15077. break;
  15078. 8006b5e: bf00 nop
  15079. 8006b60: e000 b.n 8006b64 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  15080. break;
  15081. 8006b62: bf00 nop
  15082. }
  15083. if (ret == HAL_OK)
  15084. 8006b64: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15085. 8006b68: 2b00 cmp r3, #0
  15086. 8006b6a: d10d bne.n 8006b88 <HAL_RCCEx_PeriphCLKConfig+0x5cc>
  15087. {
  15088. /* Set the source of SPI4/5 clock*/
  15089. __HAL_RCC_SPI45_CONFIG(PeriphClkInit->Spi45ClockSelection);
  15090. 8006b6c: 4b05 ldr r3, [pc, #20] @ (8006b84 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  15091. 8006b6e: 6d1b ldr r3, [r3, #80] @ 0x50
  15092. 8006b70: f423 21e0 bic.w r1, r3, #458752 @ 0x70000
  15093. 8006b74: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15094. 8006b78: 6e5b ldr r3, [r3, #100] @ 0x64
  15095. 8006b7a: 4a02 ldr r2, [pc, #8] @ (8006b84 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  15096. 8006b7c: 430b orrs r3, r1
  15097. 8006b7e: 6513 str r3, [r2, #80] @ 0x50
  15098. 8006b80: e006 b.n 8006b90 <HAL_RCCEx_PeriphCLKConfig+0x5d4>
  15099. 8006b82: bf00 nop
  15100. 8006b84: 58024400 .word 0x58024400
  15101. }
  15102. else
  15103. {
  15104. /* set overall return value */
  15105. status = ret;
  15106. 8006b88: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15107. 8006b8c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  15108. }
  15109. }
  15110. /*---------------------------- SPI6 configuration -------------------------------*/
  15111. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI6) == RCC_PERIPHCLK_SPI6)
  15112. 8006b90: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15113. 8006b94: e9d3 2300 ldrd r2, r3, [r3]
  15114. 8006b98: f402 4380 and.w r3, r2, #16384 @ 0x4000
  15115. 8006b9c: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8
  15116. 8006ba0: 2300 movs r3, #0
  15117. 8006ba2: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  15118. 8006ba6: e9d7 1236 ldrd r1, r2, [r7, #216] @ 0xd8
  15119. 8006baa: 460b mov r3, r1
  15120. 8006bac: 4313 orrs r3, r2
  15121. 8006bae: d055 beq.n 8006c5c <HAL_RCCEx_PeriphCLKConfig+0x6a0>
  15122. {
  15123. switch (PeriphClkInit->Spi6ClockSelection)
  15124. 8006bb0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15125. 8006bb4: f8d3 30b0 ldr.w r3, [r3, #176] @ 0xb0
  15126. 8006bb8: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  15127. 8006bbc: d033 beq.n 8006c26 <HAL_RCCEx_PeriphCLKConfig+0x66a>
  15128. 8006bbe: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  15129. 8006bc2: d82c bhi.n 8006c1e <HAL_RCCEx_PeriphCLKConfig+0x662>
  15130. 8006bc4: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  15131. 8006bc8: d02f beq.n 8006c2a <HAL_RCCEx_PeriphCLKConfig+0x66e>
  15132. 8006bca: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  15133. 8006bce: d826 bhi.n 8006c1e <HAL_RCCEx_PeriphCLKConfig+0x662>
  15134. 8006bd0: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  15135. 8006bd4: d02b beq.n 8006c2e <HAL_RCCEx_PeriphCLKConfig+0x672>
  15136. 8006bd6: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  15137. 8006bda: d820 bhi.n 8006c1e <HAL_RCCEx_PeriphCLKConfig+0x662>
  15138. 8006bdc: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  15139. 8006be0: d012 beq.n 8006c08 <HAL_RCCEx_PeriphCLKConfig+0x64c>
  15140. 8006be2: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  15141. 8006be6: d81a bhi.n 8006c1e <HAL_RCCEx_PeriphCLKConfig+0x662>
  15142. 8006be8: 2b00 cmp r3, #0
  15143. 8006bea: d022 beq.n 8006c32 <HAL_RCCEx_PeriphCLKConfig+0x676>
  15144. 8006bec: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  15145. 8006bf0: d115 bne.n 8006c1e <HAL_RCCEx_PeriphCLKConfig+0x662>
  15146. /* SPI6 clock source configuration done later after clock selection check */
  15147. break;
  15148. case RCC_SPI6CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI6*/
  15149. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  15150. 8006bf2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15151. 8006bf6: 3308 adds r3, #8
  15152. 8006bf8: 2101 movs r1, #1
  15153. 8006bfa: 4618 mov r0, r3
  15154. 8006bfc: f001 f98a bl 8007f14 <RCCEx_PLL2_Config>
  15155. 8006c00: 4603 mov r3, r0
  15156. 8006c02: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15157. /* SPI6 clock source configuration done later after clock selection check */
  15158. break;
  15159. 8006c06: e015 b.n 8006c34 <HAL_RCCEx_PeriphCLKConfig+0x678>
  15160. case RCC_SPI6CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI6*/
  15161. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  15162. 8006c08: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15163. 8006c0c: 3328 adds r3, #40 @ 0x28
  15164. 8006c0e: 2101 movs r1, #1
  15165. 8006c10: 4618 mov r0, r3
  15166. 8006c12: f001 fa31 bl 8008078 <RCCEx_PLL3_Config>
  15167. 8006c16: 4603 mov r3, r0
  15168. 8006c18: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15169. /* SPI6 clock source configuration done later after clock selection check */
  15170. break;
  15171. 8006c1c: e00a b.n 8006c34 <HAL_RCCEx_PeriphCLKConfig+0x678>
  15172. /* SPI6 clock source configuration done later after clock selection check */
  15173. break;
  15174. #endif
  15175. default:
  15176. ret = HAL_ERROR;
  15177. 8006c1e: 2301 movs r3, #1
  15178. 8006c20: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15179. break;
  15180. 8006c24: e006 b.n 8006c34 <HAL_RCCEx_PeriphCLKConfig+0x678>
  15181. break;
  15182. 8006c26: bf00 nop
  15183. 8006c28: e004 b.n 8006c34 <HAL_RCCEx_PeriphCLKConfig+0x678>
  15184. break;
  15185. 8006c2a: bf00 nop
  15186. 8006c2c: e002 b.n 8006c34 <HAL_RCCEx_PeriphCLKConfig+0x678>
  15187. break;
  15188. 8006c2e: bf00 nop
  15189. 8006c30: e000 b.n 8006c34 <HAL_RCCEx_PeriphCLKConfig+0x678>
  15190. break;
  15191. 8006c32: bf00 nop
  15192. }
  15193. if (ret == HAL_OK)
  15194. 8006c34: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15195. 8006c38: 2b00 cmp r3, #0
  15196. 8006c3a: d10b bne.n 8006c54 <HAL_RCCEx_PeriphCLKConfig+0x698>
  15197. {
  15198. /* Set the source of SPI6 clock*/
  15199. __HAL_RCC_SPI6_CONFIG(PeriphClkInit->Spi6ClockSelection);
  15200. 8006c3c: 4ba3 ldr r3, [pc, #652] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15201. 8006c3e: 6d9b ldr r3, [r3, #88] @ 0x58
  15202. 8006c40: f023 41e0 bic.w r1, r3, #1879048192 @ 0x70000000
  15203. 8006c44: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15204. 8006c48: f8d3 30b0 ldr.w r3, [r3, #176] @ 0xb0
  15205. 8006c4c: 4a9f ldr r2, [pc, #636] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15206. 8006c4e: 430b orrs r3, r1
  15207. 8006c50: 6593 str r3, [r2, #88] @ 0x58
  15208. 8006c52: e003 b.n 8006c5c <HAL_RCCEx_PeriphCLKConfig+0x6a0>
  15209. }
  15210. else
  15211. {
  15212. /* set overall return value */
  15213. status = ret;
  15214. 8006c54: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15215. 8006c58: f887 311e strb.w r3, [r7, #286] @ 0x11e
  15216. }
  15217. #endif /*DSI*/
  15218. #if defined(FDCAN1) || defined(FDCAN2)
  15219. /*---------------------------- FDCAN configuration -------------------------------*/
  15220. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FDCAN) == RCC_PERIPHCLK_FDCAN)
  15221. 8006c5c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15222. 8006c60: e9d3 2300 ldrd r2, r3, [r3]
  15223. 8006c64: f402 4300 and.w r3, r2, #32768 @ 0x8000
  15224. 8006c68: f8c7 30d0 str.w r3, [r7, #208] @ 0xd0
  15225. 8006c6c: 2300 movs r3, #0
  15226. 8006c6e: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4
  15227. 8006c72: e9d7 1234 ldrd r1, r2, [r7, #208] @ 0xd0
  15228. 8006c76: 460b mov r3, r1
  15229. 8006c78: 4313 orrs r3, r2
  15230. 8006c7a: d037 beq.n 8006cec <HAL_RCCEx_PeriphCLKConfig+0x730>
  15231. {
  15232. switch (PeriphClkInit->FdcanClockSelection)
  15233. 8006c7c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15234. 8006c80: 6f1b ldr r3, [r3, #112] @ 0x70
  15235. 8006c82: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  15236. 8006c86: d00e beq.n 8006ca6 <HAL_RCCEx_PeriphCLKConfig+0x6ea>
  15237. 8006c88: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  15238. 8006c8c: d816 bhi.n 8006cbc <HAL_RCCEx_PeriphCLKConfig+0x700>
  15239. 8006c8e: 2b00 cmp r3, #0
  15240. 8006c90: d018 beq.n 8006cc4 <HAL_RCCEx_PeriphCLKConfig+0x708>
  15241. 8006c92: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  15242. 8006c96: d111 bne.n 8006cbc <HAL_RCCEx_PeriphCLKConfig+0x700>
  15243. {
  15244. case RCC_FDCANCLKSOURCE_PLL: /* PLL is used as clock source for FDCAN*/
  15245. /* Enable FDCAN Clock output generated form System PLL . */
  15246. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  15247. 8006c98: 4b8c ldr r3, [pc, #560] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15248. 8006c9a: 6adb ldr r3, [r3, #44] @ 0x2c
  15249. 8006c9c: 4a8b ldr r2, [pc, #556] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15250. 8006c9e: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  15251. 8006ca2: 62d3 str r3, [r2, #44] @ 0x2c
  15252. /* FDCAN clock source configuration done later after clock selection check */
  15253. break;
  15254. 8006ca4: e00f b.n 8006cc6 <HAL_RCCEx_PeriphCLKConfig+0x70a>
  15255. case RCC_FDCANCLKSOURCE_PLL2: /* PLL2 is used as clock source for FDCAN*/
  15256. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  15257. 8006ca6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15258. 8006caa: 3308 adds r3, #8
  15259. 8006cac: 2101 movs r1, #1
  15260. 8006cae: 4618 mov r0, r3
  15261. 8006cb0: f001 f930 bl 8007f14 <RCCEx_PLL2_Config>
  15262. 8006cb4: 4603 mov r3, r0
  15263. 8006cb6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15264. /* FDCAN clock source configuration done later after clock selection check */
  15265. break;
  15266. 8006cba: e004 b.n 8006cc6 <HAL_RCCEx_PeriphCLKConfig+0x70a>
  15267. /* HSE is used as clock source for FDCAN*/
  15268. /* FDCAN clock source configuration done later after clock selection check */
  15269. break;
  15270. default:
  15271. ret = HAL_ERROR;
  15272. 8006cbc: 2301 movs r3, #1
  15273. 8006cbe: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15274. break;
  15275. 8006cc2: e000 b.n 8006cc6 <HAL_RCCEx_PeriphCLKConfig+0x70a>
  15276. break;
  15277. 8006cc4: bf00 nop
  15278. }
  15279. if (ret == HAL_OK)
  15280. 8006cc6: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15281. 8006cca: 2b00 cmp r3, #0
  15282. 8006ccc: d10a bne.n 8006ce4 <HAL_RCCEx_PeriphCLKConfig+0x728>
  15283. {
  15284. /* Set the source of FDCAN clock*/
  15285. __HAL_RCC_FDCAN_CONFIG(PeriphClkInit->FdcanClockSelection);
  15286. 8006cce: 4b7f ldr r3, [pc, #508] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15287. 8006cd0: 6d1b ldr r3, [r3, #80] @ 0x50
  15288. 8006cd2: f023 5140 bic.w r1, r3, #805306368 @ 0x30000000
  15289. 8006cd6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15290. 8006cda: 6f1b ldr r3, [r3, #112] @ 0x70
  15291. 8006cdc: 4a7b ldr r2, [pc, #492] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15292. 8006cde: 430b orrs r3, r1
  15293. 8006ce0: 6513 str r3, [r2, #80] @ 0x50
  15294. 8006ce2: e003 b.n 8006cec <HAL_RCCEx_PeriphCLKConfig+0x730>
  15295. }
  15296. else
  15297. {
  15298. /* set overall return value */
  15299. status = ret;
  15300. 8006ce4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15301. 8006ce8: f887 311e strb.w r3, [r7, #286] @ 0x11e
  15302. }
  15303. }
  15304. #endif /*FDCAN1 || FDCAN2*/
  15305. /*---------------------------- FMC configuration -------------------------------*/
  15306. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FMC) == RCC_PERIPHCLK_FMC)
  15307. 8006cec: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15308. 8006cf0: e9d3 2300 ldrd r2, r3, [r3]
  15309. 8006cf4: f002 7380 and.w r3, r2, #16777216 @ 0x1000000
  15310. 8006cf8: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8
  15311. 8006cfc: 2300 movs r3, #0
  15312. 8006cfe: f8c7 30cc str.w r3, [r7, #204] @ 0xcc
  15313. 8006d02: e9d7 1232 ldrd r1, r2, [r7, #200] @ 0xc8
  15314. 8006d06: 460b mov r3, r1
  15315. 8006d08: 4313 orrs r3, r2
  15316. 8006d0a: d039 beq.n 8006d80 <HAL_RCCEx_PeriphCLKConfig+0x7c4>
  15317. {
  15318. switch (PeriphClkInit->FmcClockSelection)
  15319. 8006d0c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15320. 8006d10: 6c9b ldr r3, [r3, #72] @ 0x48
  15321. 8006d12: 2b03 cmp r3, #3
  15322. 8006d14: d81c bhi.n 8006d50 <HAL_RCCEx_PeriphCLKConfig+0x794>
  15323. 8006d16: a201 add r2, pc, #4 @ (adr r2, 8006d1c <HAL_RCCEx_PeriphCLKConfig+0x760>)
  15324. 8006d18: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  15325. 8006d1c: 08006d59 .word 0x08006d59
  15326. 8006d20: 08006d2d .word 0x08006d2d
  15327. 8006d24: 08006d3b .word 0x08006d3b
  15328. 8006d28: 08006d59 .word 0x08006d59
  15329. {
  15330. case RCC_FMCCLKSOURCE_PLL: /* PLL is used as clock source for FMC*/
  15331. /* Enable FMC Clock output generated form System PLL . */
  15332. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  15333. 8006d2c: 4b67 ldr r3, [pc, #412] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15334. 8006d2e: 6adb ldr r3, [r3, #44] @ 0x2c
  15335. 8006d30: 4a66 ldr r2, [pc, #408] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15336. 8006d32: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  15337. 8006d36: 62d3 str r3, [r2, #44] @ 0x2c
  15338. /* FMC clock source configuration done later after clock selection check */
  15339. break;
  15340. 8006d38: e00f b.n 8006d5a <HAL_RCCEx_PeriphCLKConfig+0x79e>
  15341. case RCC_FMCCLKSOURCE_PLL2: /* PLL2 is used as clock source for FMC*/
  15342. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  15343. 8006d3a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15344. 8006d3e: 3308 adds r3, #8
  15345. 8006d40: 2102 movs r1, #2
  15346. 8006d42: 4618 mov r0, r3
  15347. 8006d44: f001 f8e6 bl 8007f14 <RCCEx_PLL2_Config>
  15348. 8006d48: 4603 mov r3, r0
  15349. 8006d4a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15350. /* FMC clock source configuration done later after clock selection check */
  15351. break;
  15352. 8006d4e: e004 b.n 8006d5a <HAL_RCCEx_PeriphCLKConfig+0x79e>
  15353. case RCC_FMCCLKSOURCE_HCLK:
  15354. /* D1/CD HCLK clock selected as FMC kernel peripheral clock */
  15355. break;
  15356. default:
  15357. ret = HAL_ERROR;
  15358. 8006d50: 2301 movs r3, #1
  15359. 8006d52: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15360. break;
  15361. 8006d56: e000 b.n 8006d5a <HAL_RCCEx_PeriphCLKConfig+0x79e>
  15362. break;
  15363. 8006d58: bf00 nop
  15364. }
  15365. if (ret == HAL_OK)
  15366. 8006d5a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15367. 8006d5e: 2b00 cmp r3, #0
  15368. 8006d60: d10a bne.n 8006d78 <HAL_RCCEx_PeriphCLKConfig+0x7bc>
  15369. {
  15370. /* Set the source of FMC clock*/
  15371. __HAL_RCC_FMC_CONFIG(PeriphClkInit->FmcClockSelection);
  15372. 8006d62: 4b5a ldr r3, [pc, #360] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15373. 8006d64: 6cdb ldr r3, [r3, #76] @ 0x4c
  15374. 8006d66: f023 0103 bic.w r1, r3, #3
  15375. 8006d6a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15376. 8006d6e: 6c9b ldr r3, [r3, #72] @ 0x48
  15377. 8006d70: 4a56 ldr r2, [pc, #344] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15378. 8006d72: 430b orrs r3, r1
  15379. 8006d74: 64d3 str r3, [r2, #76] @ 0x4c
  15380. 8006d76: e003 b.n 8006d80 <HAL_RCCEx_PeriphCLKConfig+0x7c4>
  15381. }
  15382. else
  15383. {
  15384. /* set overall return value */
  15385. status = ret;
  15386. 8006d78: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15387. 8006d7c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  15388. }
  15389. }
  15390. /*---------------------------- RTC configuration -------------------------------*/
  15391. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)
  15392. 8006d80: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15393. 8006d84: e9d3 2300 ldrd r2, r3, [r3]
  15394. 8006d88: f402 0380 and.w r3, r2, #4194304 @ 0x400000
  15395. 8006d8c: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0
  15396. 8006d90: 2300 movs r3, #0
  15397. 8006d92: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4
  15398. 8006d96: e9d7 1230 ldrd r1, r2, [r7, #192] @ 0xc0
  15399. 8006d9a: 460b mov r3, r1
  15400. 8006d9c: 4313 orrs r3, r2
  15401. 8006d9e: f000 809f beq.w 8006ee0 <HAL_RCCEx_PeriphCLKConfig+0x924>
  15402. {
  15403. /* check for RTC Parameters used to output RTCCLK */
  15404. assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection));
  15405. /* Enable write access to Backup domain */
  15406. SET_BIT(PWR->CR1, PWR_CR1_DBP);
  15407. 8006da2: 4b4b ldr r3, [pc, #300] @ (8006ed0 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  15408. 8006da4: 681b ldr r3, [r3, #0]
  15409. 8006da6: 4a4a ldr r2, [pc, #296] @ (8006ed0 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  15410. 8006da8: f443 7380 orr.w r3, r3, #256 @ 0x100
  15411. 8006dac: 6013 str r3, [r2, #0]
  15412. /* Wait for Backup domain Write protection disable */
  15413. tickstart = HAL_GetTick();
  15414. 8006dae: f7fb fc57 bl 8002660 <HAL_GetTick>
  15415. 8006db2: f8c7 0118 str.w r0, [r7, #280] @ 0x118
  15416. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  15417. 8006db6: e00b b.n 8006dd0 <HAL_RCCEx_PeriphCLKConfig+0x814>
  15418. {
  15419. if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
  15420. 8006db8: f7fb fc52 bl 8002660 <HAL_GetTick>
  15421. 8006dbc: 4602 mov r2, r0
  15422. 8006dbe: f8d7 3118 ldr.w r3, [r7, #280] @ 0x118
  15423. 8006dc2: 1ad3 subs r3, r2, r3
  15424. 8006dc4: 2b64 cmp r3, #100 @ 0x64
  15425. 8006dc6: d903 bls.n 8006dd0 <HAL_RCCEx_PeriphCLKConfig+0x814>
  15426. {
  15427. ret = HAL_TIMEOUT;
  15428. 8006dc8: 2303 movs r3, #3
  15429. 8006dca: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15430. break;
  15431. 8006dce: e005 b.n 8006ddc <HAL_RCCEx_PeriphCLKConfig+0x820>
  15432. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  15433. 8006dd0: 4b3f ldr r3, [pc, #252] @ (8006ed0 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  15434. 8006dd2: 681b ldr r3, [r3, #0]
  15435. 8006dd4: f403 7380 and.w r3, r3, #256 @ 0x100
  15436. 8006dd8: 2b00 cmp r3, #0
  15437. 8006dda: d0ed beq.n 8006db8 <HAL_RCCEx_PeriphCLKConfig+0x7fc>
  15438. }
  15439. }
  15440. if (ret == HAL_OK)
  15441. 8006ddc: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15442. 8006de0: 2b00 cmp r3, #0
  15443. 8006de2: d179 bne.n 8006ed8 <HAL_RCCEx_PeriphCLKConfig+0x91c>
  15444. {
  15445. /* Reset the Backup domain only if the RTC Clock source selection is modified */
  15446. if ((RCC->BDCR & RCC_BDCR_RTCSEL) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))
  15447. 8006de4: 4b39 ldr r3, [pc, #228] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15448. 8006de6: 6f1a ldr r2, [r3, #112] @ 0x70
  15449. 8006de8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15450. 8006dec: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  15451. 8006df0: 4053 eors r3, r2
  15452. 8006df2: f403 7340 and.w r3, r3, #768 @ 0x300
  15453. 8006df6: 2b00 cmp r3, #0
  15454. 8006df8: d015 beq.n 8006e26 <HAL_RCCEx_PeriphCLKConfig+0x86a>
  15455. {
  15456. /* Store the content of BDCR register before the reset of Backup Domain */
  15457. tmpreg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL));
  15458. 8006dfa: 4b34 ldr r3, [pc, #208] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15459. 8006dfc: 6f1b ldr r3, [r3, #112] @ 0x70
  15460. 8006dfe: f423 7340 bic.w r3, r3, #768 @ 0x300
  15461. 8006e02: f8c7 3114 str.w r3, [r7, #276] @ 0x114
  15462. /* RTC Clock selection can be changed only if the Backup Domain is reset */
  15463. __HAL_RCC_BACKUPRESET_FORCE();
  15464. 8006e06: 4b31 ldr r3, [pc, #196] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15465. 8006e08: 6f1b ldr r3, [r3, #112] @ 0x70
  15466. 8006e0a: 4a30 ldr r2, [pc, #192] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15467. 8006e0c: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  15468. 8006e10: 6713 str r3, [r2, #112] @ 0x70
  15469. __HAL_RCC_BACKUPRESET_RELEASE();
  15470. 8006e12: 4b2e ldr r3, [pc, #184] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15471. 8006e14: 6f1b ldr r3, [r3, #112] @ 0x70
  15472. 8006e16: 4a2d ldr r2, [pc, #180] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15473. 8006e18: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  15474. 8006e1c: 6713 str r3, [r2, #112] @ 0x70
  15475. /* Restore the Content of BDCR register */
  15476. RCC->BDCR = tmpreg;
  15477. 8006e1e: 4a2b ldr r2, [pc, #172] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15478. 8006e20: f8d7 3114 ldr.w r3, [r7, #276] @ 0x114
  15479. 8006e24: 6713 str r3, [r2, #112] @ 0x70
  15480. }
  15481. /* If LSE is selected as RTC clock source (and enabled prior to Backup Domain reset), wait for LSE reactivation */
  15482. if (PeriphClkInit->RTCClockSelection == RCC_RTCCLKSOURCE_LSE)
  15483. 8006e26: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15484. 8006e2a: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  15485. 8006e2e: f5b3 7f80 cmp.w r3, #256 @ 0x100
  15486. 8006e32: d118 bne.n 8006e66 <HAL_RCCEx_PeriphCLKConfig+0x8aa>
  15487. {
  15488. /* Get Start Tick*/
  15489. tickstart = HAL_GetTick();
  15490. 8006e34: f7fb fc14 bl 8002660 <HAL_GetTick>
  15491. 8006e38: f8c7 0118 str.w r0, [r7, #280] @ 0x118
  15492. /* Wait till LSE is ready */
  15493. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  15494. 8006e3c: e00d b.n 8006e5a <HAL_RCCEx_PeriphCLKConfig+0x89e>
  15495. {
  15496. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  15497. 8006e3e: f7fb fc0f bl 8002660 <HAL_GetTick>
  15498. 8006e42: 4602 mov r2, r0
  15499. 8006e44: f8d7 3118 ldr.w r3, [r7, #280] @ 0x118
  15500. 8006e48: 1ad2 subs r2, r2, r3
  15501. 8006e4a: f241 3388 movw r3, #5000 @ 0x1388
  15502. 8006e4e: 429a cmp r2, r3
  15503. 8006e50: d903 bls.n 8006e5a <HAL_RCCEx_PeriphCLKConfig+0x89e>
  15504. {
  15505. ret = HAL_TIMEOUT;
  15506. 8006e52: 2303 movs r3, #3
  15507. 8006e54: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15508. break;
  15509. 8006e58: e005 b.n 8006e66 <HAL_RCCEx_PeriphCLKConfig+0x8aa>
  15510. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  15511. 8006e5a: 4b1c ldr r3, [pc, #112] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15512. 8006e5c: 6f1b ldr r3, [r3, #112] @ 0x70
  15513. 8006e5e: f003 0302 and.w r3, r3, #2
  15514. 8006e62: 2b00 cmp r3, #0
  15515. 8006e64: d0eb beq.n 8006e3e <HAL_RCCEx_PeriphCLKConfig+0x882>
  15516. }
  15517. }
  15518. }
  15519. if (ret == HAL_OK)
  15520. 8006e66: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15521. 8006e6a: 2b00 cmp r3, #0
  15522. 8006e6c: d129 bne.n 8006ec2 <HAL_RCCEx_PeriphCLKConfig+0x906>
  15523. {
  15524. __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection);
  15525. 8006e6e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15526. 8006e72: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  15527. 8006e76: f403 7340 and.w r3, r3, #768 @ 0x300
  15528. 8006e7a: f5b3 7f40 cmp.w r3, #768 @ 0x300
  15529. 8006e7e: d10e bne.n 8006e9e <HAL_RCCEx_PeriphCLKConfig+0x8e2>
  15530. 8006e80: 4b12 ldr r3, [pc, #72] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15531. 8006e82: 691b ldr r3, [r3, #16]
  15532. 8006e84: f423 517c bic.w r1, r3, #16128 @ 0x3f00
  15533. 8006e88: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15534. 8006e8c: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  15535. 8006e90: 091a lsrs r2, r3, #4
  15536. 8006e92: 4b10 ldr r3, [pc, #64] @ (8006ed4 <HAL_RCCEx_PeriphCLKConfig+0x918>)
  15537. 8006e94: 4013 ands r3, r2
  15538. 8006e96: 4a0d ldr r2, [pc, #52] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15539. 8006e98: 430b orrs r3, r1
  15540. 8006e9a: 6113 str r3, [r2, #16]
  15541. 8006e9c: e005 b.n 8006eaa <HAL_RCCEx_PeriphCLKConfig+0x8ee>
  15542. 8006e9e: 4b0b ldr r3, [pc, #44] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15543. 8006ea0: 691b ldr r3, [r3, #16]
  15544. 8006ea2: 4a0a ldr r2, [pc, #40] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15545. 8006ea4: f423 537c bic.w r3, r3, #16128 @ 0x3f00
  15546. 8006ea8: 6113 str r3, [r2, #16]
  15547. 8006eaa: 4b08 ldr r3, [pc, #32] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15548. 8006eac: 6f19 ldr r1, [r3, #112] @ 0x70
  15549. 8006eae: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15550. 8006eb2: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  15551. 8006eb6: f3c3 030b ubfx r3, r3, #0, #12
  15552. 8006eba: 4a04 ldr r2, [pc, #16] @ (8006ecc <HAL_RCCEx_PeriphCLKConfig+0x910>)
  15553. 8006ebc: 430b orrs r3, r1
  15554. 8006ebe: 6713 str r3, [r2, #112] @ 0x70
  15555. 8006ec0: e00e b.n 8006ee0 <HAL_RCCEx_PeriphCLKConfig+0x924>
  15556. }
  15557. else
  15558. {
  15559. /* set overall return value */
  15560. status = ret;
  15561. 8006ec2: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15562. 8006ec6: f887 311e strb.w r3, [r7, #286] @ 0x11e
  15563. 8006eca: e009 b.n 8006ee0 <HAL_RCCEx_PeriphCLKConfig+0x924>
  15564. 8006ecc: 58024400 .word 0x58024400
  15565. 8006ed0: 58024800 .word 0x58024800
  15566. 8006ed4: 00ffffcf .word 0x00ffffcf
  15567. }
  15568. }
  15569. else
  15570. {
  15571. /* set overall return value */
  15572. status = ret;
  15573. 8006ed8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15574. 8006edc: f887 311e strb.w r3, [r7, #286] @ 0x11e
  15575. }
  15576. }
  15577. /*-------------------------- USART1/6 configuration --------------------------*/
  15578. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART16) == RCC_PERIPHCLK_USART16)
  15579. 8006ee0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15580. 8006ee4: e9d3 2300 ldrd r2, r3, [r3]
  15581. 8006ee8: f002 0301 and.w r3, r2, #1
  15582. 8006eec: f8c7 30b8 str.w r3, [r7, #184] @ 0xb8
  15583. 8006ef0: 2300 movs r3, #0
  15584. 8006ef2: f8c7 30bc str.w r3, [r7, #188] @ 0xbc
  15585. 8006ef6: e9d7 122e ldrd r1, r2, [r7, #184] @ 0xb8
  15586. 8006efa: 460b mov r3, r1
  15587. 8006efc: 4313 orrs r3, r2
  15588. 8006efe: f000 8089 beq.w 8007014 <HAL_RCCEx_PeriphCLKConfig+0xa58>
  15589. {
  15590. switch (PeriphClkInit->Usart16ClockSelection)
  15591. 8006f02: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15592. 8006f06: 6fdb ldr r3, [r3, #124] @ 0x7c
  15593. 8006f08: 2b28 cmp r3, #40 @ 0x28
  15594. 8006f0a: d86b bhi.n 8006fe4 <HAL_RCCEx_PeriphCLKConfig+0xa28>
  15595. 8006f0c: a201 add r2, pc, #4 @ (adr r2, 8006f14 <HAL_RCCEx_PeriphCLKConfig+0x958>)
  15596. 8006f0e: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  15597. 8006f12: bf00 nop
  15598. 8006f14: 08006fed .word 0x08006fed
  15599. 8006f18: 08006fe5 .word 0x08006fe5
  15600. 8006f1c: 08006fe5 .word 0x08006fe5
  15601. 8006f20: 08006fe5 .word 0x08006fe5
  15602. 8006f24: 08006fe5 .word 0x08006fe5
  15603. 8006f28: 08006fe5 .word 0x08006fe5
  15604. 8006f2c: 08006fe5 .word 0x08006fe5
  15605. 8006f30: 08006fe5 .word 0x08006fe5
  15606. 8006f34: 08006fb9 .word 0x08006fb9
  15607. 8006f38: 08006fe5 .word 0x08006fe5
  15608. 8006f3c: 08006fe5 .word 0x08006fe5
  15609. 8006f40: 08006fe5 .word 0x08006fe5
  15610. 8006f44: 08006fe5 .word 0x08006fe5
  15611. 8006f48: 08006fe5 .word 0x08006fe5
  15612. 8006f4c: 08006fe5 .word 0x08006fe5
  15613. 8006f50: 08006fe5 .word 0x08006fe5
  15614. 8006f54: 08006fcf .word 0x08006fcf
  15615. 8006f58: 08006fe5 .word 0x08006fe5
  15616. 8006f5c: 08006fe5 .word 0x08006fe5
  15617. 8006f60: 08006fe5 .word 0x08006fe5
  15618. 8006f64: 08006fe5 .word 0x08006fe5
  15619. 8006f68: 08006fe5 .word 0x08006fe5
  15620. 8006f6c: 08006fe5 .word 0x08006fe5
  15621. 8006f70: 08006fe5 .word 0x08006fe5
  15622. 8006f74: 08006fed .word 0x08006fed
  15623. 8006f78: 08006fe5 .word 0x08006fe5
  15624. 8006f7c: 08006fe5 .word 0x08006fe5
  15625. 8006f80: 08006fe5 .word 0x08006fe5
  15626. 8006f84: 08006fe5 .word 0x08006fe5
  15627. 8006f88: 08006fe5 .word 0x08006fe5
  15628. 8006f8c: 08006fe5 .word 0x08006fe5
  15629. 8006f90: 08006fe5 .word 0x08006fe5
  15630. 8006f94: 08006fed .word 0x08006fed
  15631. 8006f98: 08006fe5 .word 0x08006fe5
  15632. 8006f9c: 08006fe5 .word 0x08006fe5
  15633. 8006fa0: 08006fe5 .word 0x08006fe5
  15634. 8006fa4: 08006fe5 .word 0x08006fe5
  15635. 8006fa8: 08006fe5 .word 0x08006fe5
  15636. 8006fac: 08006fe5 .word 0x08006fe5
  15637. 8006fb0: 08006fe5 .word 0x08006fe5
  15638. 8006fb4: 08006fed .word 0x08006fed
  15639. case RCC_USART16CLKSOURCE_PCLK2: /* CD/D2 PCLK2 as clock source for USART1/6 */
  15640. /* USART1/6 clock source configuration done later after clock selection check */
  15641. break;
  15642. case RCC_USART16CLKSOURCE_PLL2: /* PLL2 is used as clock source for USART1/6 */
  15643. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  15644. 8006fb8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15645. 8006fbc: 3308 adds r3, #8
  15646. 8006fbe: 2101 movs r1, #1
  15647. 8006fc0: 4618 mov r0, r3
  15648. 8006fc2: f000 ffa7 bl 8007f14 <RCCEx_PLL2_Config>
  15649. 8006fc6: 4603 mov r3, r0
  15650. 8006fc8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15651. /* USART1/6 clock source configuration done later after clock selection check */
  15652. break;
  15653. 8006fcc: e00f b.n 8006fee <HAL_RCCEx_PeriphCLKConfig+0xa32>
  15654. case RCC_USART16CLKSOURCE_PLL3: /* PLL3 is used as clock source for USART1/6 */
  15655. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  15656. 8006fce: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15657. 8006fd2: 3328 adds r3, #40 @ 0x28
  15658. 8006fd4: 2101 movs r1, #1
  15659. 8006fd6: 4618 mov r0, r3
  15660. 8006fd8: f001 f84e bl 8008078 <RCCEx_PLL3_Config>
  15661. 8006fdc: 4603 mov r3, r0
  15662. 8006fde: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15663. /* USART1/6 clock source configuration done later after clock selection check */
  15664. break;
  15665. 8006fe2: e004 b.n 8006fee <HAL_RCCEx_PeriphCLKConfig+0xa32>
  15666. /* LSE, oscillator is used as source of USART1/6 clock */
  15667. /* USART1/6 clock source configuration done later after clock selection check */
  15668. break;
  15669. default:
  15670. ret = HAL_ERROR;
  15671. 8006fe4: 2301 movs r3, #1
  15672. 8006fe6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15673. break;
  15674. 8006fea: e000 b.n 8006fee <HAL_RCCEx_PeriphCLKConfig+0xa32>
  15675. break;
  15676. 8006fec: bf00 nop
  15677. }
  15678. if (ret == HAL_OK)
  15679. 8006fee: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15680. 8006ff2: 2b00 cmp r3, #0
  15681. 8006ff4: d10a bne.n 800700c <HAL_RCCEx_PeriphCLKConfig+0xa50>
  15682. {
  15683. /* Set the source of USART1/6 clock */
  15684. __HAL_RCC_USART16_CONFIG(PeriphClkInit->Usart16ClockSelection);
  15685. 8006ff6: 4bbf ldr r3, [pc, #764] @ (80072f4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  15686. 8006ff8: 6d5b ldr r3, [r3, #84] @ 0x54
  15687. 8006ffa: f023 0138 bic.w r1, r3, #56 @ 0x38
  15688. 8006ffe: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15689. 8007002: 6fdb ldr r3, [r3, #124] @ 0x7c
  15690. 8007004: 4abb ldr r2, [pc, #748] @ (80072f4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  15691. 8007006: 430b orrs r3, r1
  15692. 8007008: 6553 str r3, [r2, #84] @ 0x54
  15693. 800700a: e003 b.n 8007014 <HAL_RCCEx_PeriphCLKConfig+0xa58>
  15694. }
  15695. else
  15696. {
  15697. /* set overall return value */
  15698. status = ret;
  15699. 800700c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15700. 8007010: f887 311e strb.w r3, [r7, #286] @ 0x11e
  15701. }
  15702. }
  15703. /*-------------------------- USART2/3/4/5/7/8 Configuration --------------------------*/
  15704. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART234578) == RCC_PERIPHCLK_USART234578)
  15705. 8007014: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15706. 8007018: e9d3 2300 ldrd r2, r3, [r3]
  15707. 800701c: f002 0302 and.w r3, r2, #2
  15708. 8007020: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0
  15709. 8007024: 2300 movs r3, #0
  15710. 8007026: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  15711. 800702a: e9d7 122c ldrd r1, r2, [r7, #176] @ 0xb0
  15712. 800702e: 460b mov r3, r1
  15713. 8007030: 4313 orrs r3, r2
  15714. 8007032: d041 beq.n 80070b8 <HAL_RCCEx_PeriphCLKConfig+0xafc>
  15715. {
  15716. switch (PeriphClkInit->Usart234578ClockSelection)
  15717. 8007034: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15718. 8007038: 6f9b ldr r3, [r3, #120] @ 0x78
  15719. 800703a: 2b05 cmp r3, #5
  15720. 800703c: d824 bhi.n 8007088 <HAL_RCCEx_PeriphCLKConfig+0xacc>
  15721. 800703e: a201 add r2, pc, #4 @ (adr r2, 8007044 <HAL_RCCEx_PeriphCLKConfig+0xa88>)
  15722. 8007040: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  15723. 8007044: 08007091 .word 0x08007091
  15724. 8007048: 0800705d .word 0x0800705d
  15725. 800704c: 08007073 .word 0x08007073
  15726. 8007050: 08007091 .word 0x08007091
  15727. 8007054: 08007091 .word 0x08007091
  15728. 8007058: 08007091 .word 0x08007091
  15729. case RCC_USART234578CLKSOURCE_PCLK1: /* CD/D2 PCLK1 as clock source for USART2/3/4/5/7/8 */
  15730. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  15731. break;
  15732. case RCC_USART234578CLKSOURCE_PLL2: /* PLL2 is used as clock source for USART2/3/4/5/7/8 */
  15733. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  15734. 800705c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15735. 8007060: 3308 adds r3, #8
  15736. 8007062: 2101 movs r1, #1
  15737. 8007064: 4618 mov r0, r3
  15738. 8007066: f000 ff55 bl 8007f14 <RCCEx_PLL2_Config>
  15739. 800706a: 4603 mov r3, r0
  15740. 800706c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15741. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  15742. break;
  15743. 8007070: e00f b.n 8007092 <HAL_RCCEx_PeriphCLKConfig+0xad6>
  15744. case RCC_USART234578CLKSOURCE_PLL3: /* PLL3 is used as clock source for USART2/3/4/5/7/8 */
  15745. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  15746. 8007072: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15747. 8007076: 3328 adds r3, #40 @ 0x28
  15748. 8007078: 2101 movs r1, #1
  15749. 800707a: 4618 mov r0, r3
  15750. 800707c: f000 fffc bl 8008078 <RCCEx_PLL3_Config>
  15751. 8007080: 4603 mov r3, r0
  15752. 8007082: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15753. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  15754. break;
  15755. 8007086: e004 b.n 8007092 <HAL_RCCEx_PeriphCLKConfig+0xad6>
  15756. /* LSE, oscillator is used as source of USART2/3/4/5/7/8 clock */
  15757. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  15758. break;
  15759. default:
  15760. ret = HAL_ERROR;
  15761. 8007088: 2301 movs r3, #1
  15762. 800708a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15763. break;
  15764. 800708e: e000 b.n 8007092 <HAL_RCCEx_PeriphCLKConfig+0xad6>
  15765. break;
  15766. 8007090: bf00 nop
  15767. }
  15768. if (ret == HAL_OK)
  15769. 8007092: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15770. 8007096: 2b00 cmp r3, #0
  15771. 8007098: d10a bne.n 80070b0 <HAL_RCCEx_PeriphCLKConfig+0xaf4>
  15772. {
  15773. /* Set the source of USART2/3/4/5/7/8 clock */
  15774. __HAL_RCC_USART234578_CONFIG(PeriphClkInit->Usart234578ClockSelection);
  15775. 800709a: 4b96 ldr r3, [pc, #600] @ (80072f4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  15776. 800709c: 6d5b ldr r3, [r3, #84] @ 0x54
  15777. 800709e: f023 0107 bic.w r1, r3, #7
  15778. 80070a2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15779. 80070a6: 6f9b ldr r3, [r3, #120] @ 0x78
  15780. 80070a8: 4a92 ldr r2, [pc, #584] @ (80072f4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  15781. 80070aa: 430b orrs r3, r1
  15782. 80070ac: 6553 str r3, [r2, #84] @ 0x54
  15783. 80070ae: e003 b.n 80070b8 <HAL_RCCEx_PeriphCLKConfig+0xafc>
  15784. }
  15785. else
  15786. {
  15787. /* set overall return value */
  15788. status = ret;
  15789. 80070b0: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15790. 80070b4: f887 311e strb.w r3, [r7, #286] @ 0x11e
  15791. }
  15792. }
  15793. /*-------------------------- LPUART1 Configuration -------------------------*/
  15794. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1)
  15795. 80070b8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15796. 80070bc: e9d3 2300 ldrd r2, r3, [r3]
  15797. 80070c0: f002 0304 and.w r3, r2, #4
  15798. 80070c4: f8c7 30a8 str.w r3, [r7, #168] @ 0xa8
  15799. 80070c8: 2300 movs r3, #0
  15800. 80070ca: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  15801. 80070ce: e9d7 122a ldrd r1, r2, [r7, #168] @ 0xa8
  15802. 80070d2: 460b mov r3, r1
  15803. 80070d4: 4313 orrs r3, r2
  15804. 80070d6: d044 beq.n 8007162 <HAL_RCCEx_PeriphCLKConfig+0xba6>
  15805. {
  15806. switch (PeriphClkInit->Lpuart1ClockSelection)
  15807. 80070d8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15808. 80070dc: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
  15809. 80070e0: 2b05 cmp r3, #5
  15810. 80070e2: d825 bhi.n 8007130 <HAL_RCCEx_PeriphCLKConfig+0xb74>
  15811. 80070e4: a201 add r2, pc, #4 @ (adr r2, 80070ec <HAL_RCCEx_PeriphCLKConfig+0xb30>)
  15812. 80070e6: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  15813. 80070ea: bf00 nop
  15814. 80070ec: 08007139 .word 0x08007139
  15815. 80070f0: 08007105 .word 0x08007105
  15816. 80070f4: 0800711b .word 0x0800711b
  15817. 80070f8: 08007139 .word 0x08007139
  15818. 80070fc: 08007139 .word 0x08007139
  15819. 8007100: 08007139 .word 0x08007139
  15820. case RCC_LPUART1CLKSOURCE_PCLK4: /* SRD/D3 PCLK1 (PCLK4) as clock source for LPUART1 */
  15821. /* LPUART1 clock source configuration done later after clock selection check */
  15822. break;
  15823. case RCC_LPUART1CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPUART1 */
  15824. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  15825. 8007104: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15826. 8007108: 3308 adds r3, #8
  15827. 800710a: 2101 movs r1, #1
  15828. 800710c: 4618 mov r0, r3
  15829. 800710e: f000 ff01 bl 8007f14 <RCCEx_PLL2_Config>
  15830. 8007112: 4603 mov r3, r0
  15831. 8007114: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15832. /* LPUART1 clock source configuration done later after clock selection check */
  15833. break;
  15834. 8007118: e00f b.n 800713a <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  15835. case RCC_LPUART1CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPUART1 */
  15836. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  15837. 800711a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15838. 800711e: 3328 adds r3, #40 @ 0x28
  15839. 8007120: 2101 movs r1, #1
  15840. 8007122: 4618 mov r0, r3
  15841. 8007124: f000 ffa8 bl 8008078 <RCCEx_PLL3_Config>
  15842. 8007128: 4603 mov r3, r0
  15843. 800712a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15844. /* LPUART1 clock source configuration done later after clock selection check */
  15845. break;
  15846. 800712e: e004 b.n 800713a <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  15847. /* LSE, oscillator is used as source of LPUART1 clock */
  15848. /* LPUART1 clock source configuration done later after clock selection check */
  15849. break;
  15850. default:
  15851. ret = HAL_ERROR;
  15852. 8007130: 2301 movs r3, #1
  15853. 8007132: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15854. break;
  15855. 8007136: e000 b.n 800713a <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  15856. break;
  15857. 8007138: bf00 nop
  15858. }
  15859. if (ret == HAL_OK)
  15860. 800713a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15861. 800713e: 2b00 cmp r3, #0
  15862. 8007140: d10b bne.n 800715a <HAL_RCCEx_PeriphCLKConfig+0xb9e>
  15863. {
  15864. /* Set the source of LPUART1 clock */
  15865. __HAL_RCC_LPUART1_CONFIG(PeriphClkInit->Lpuart1ClockSelection);
  15866. 8007142: 4b6c ldr r3, [pc, #432] @ (80072f4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  15867. 8007144: 6d9b ldr r3, [r3, #88] @ 0x58
  15868. 8007146: f023 0107 bic.w r1, r3, #7
  15869. 800714a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15870. 800714e: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
  15871. 8007152: 4a68 ldr r2, [pc, #416] @ (80072f4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  15872. 8007154: 430b orrs r3, r1
  15873. 8007156: 6593 str r3, [r2, #88] @ 0x58
  15874. 8007158: e003 b.n 8007162 <HAL_RCCEx_PeriphCLKConfig+0xba6>
  15875. }
  15876. else
  15877. {
  15878. /* set overall return value */
  15879. status = ret;
  15880. 800715a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15881. 800715e: f887 311e strb.w r3, [r7, #286] @ 0x11e
  15882. }
  15883. }
  15884. /*---------------------------- LPTIM1 configuration -------------------------------*/
  15885. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1)
  15886. 8007162: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15887. 8007166: e9d3 2300 ldrd r2, r3, [r3]
  15888. 800716a: f002 0320 and.w r3, r2, #32
  15889. 800716e: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  15890. 8007172: 2300 movs r3, #0
  15891. 8007174: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  15892. 8007178: e9d7 1228 ldrd r1, r2, [r7, #160] @ 0xa0
  15893. 800717c: 460b mov r3, r1
  15894. 800717e: 4313 orrs r3, r2
  15895. 8007180: d055 beq.n 800722e <HAL_RCCEx_PeriphCLKConfig+0xc72>
  15896. {
  15897. switch (PeriphClkInit->Lptim1ClockSelection)
  15898. 8007182: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15899. 8007186: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  15900. 800718a: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  15901. 800718e: d033 beq.n 80071f8 <HAL_RCCEx_PeriphCLKConfig+0xc3c>
  15902. 8007190: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  15903. 8007194: d82c bhi.n 80071f0 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  15904. 8007196: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  15905. 800719a: d02f beq.n 80071fc <HAL_RCCEx_PeriphCLKConfig+0xc40>
  15906. 800719c: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  15907. 80071a0: d826 bhi.n 80071f0 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  15908. 80071a2: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  15909. 80071a6: d02b beq.n 8007200 <HAL_RCCEx_PeriphCLKConfig+0xc44>
  15910. 80071a8: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  15911. 80071ac: d820 bhi.n 80071f0 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  15912. 80071ae: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  15913. 80071b2: d012 beq.n 80071da <HAL_RCCEx_PeriphCLKConfig+0xc1e>
  15914. 80071b4: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  15915. 80071b8: d81a bhi.n 80071f0 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  15916. 80071ba: 2b00 cmp r3, #0
  15917. 80071bc: d022 beq.n 8007204 <HAL_RCCEx_PeriphCLKConfig+0xc48>
  15918. 80071be: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  15919. 80071c2: d115 bne.n 80071f0 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  15920. /* LPTIM1 clock source configuration done later after clock selection check */
  15921. break;
  15922. case RCC_LPTIM1CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM1*/
  15923. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  15924. 80071c4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15925. 80071c8: 3308 adds r3, #8
  15926. 80071ca: 2100 movs r1, #0
  15927. 80071cc: 4618 mov r0, r3
  15928. 80071ce: f000 fea1 bl 8007f14 <RCCEx_PLL2_Config>
  15929. 80071d2: 4603 mov r3, r0
  15930. 80071d4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15931. /* LPTIM1 clock source configuration done later after clock selection check */
  15932. break;
  15933. 80071d8: e015 b.n 8007206 <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  15934. case RCC_LPTIM1CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM1*/
  15935. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  15936. 80071da: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15937. 80071de: 3328 adds r3, #40 @ 0x28
  15938. 80071e0: 2102 movs r1, #2
  15939. 80071e2: 4618 mov r0, r3
  15940. 80071e4: f000 ff48 bl 8008078 <RCCEx_PLL3_Config>
  15941. 80071e8: 4603 mov r3, r0
  15942. 80071ea: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15943. /* LPTIM1 clock source configuration done later after clock selection check */
  15944. break;
  15945. 80071ee: e00a b.n 8007206 <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  15946. /* HSI, HSE, or CSI oscillator is used as source of LPTIM1 clock */
  15947. /* LPTIM1 clock source configuration done later after clock selection check */
  15948. break;
  15949. default:
  15950. ret = HAL_ERROR;
  15951. 80071f0: 2301 movs r3, #1
  15952. 80071f2: f887 311f strb.w r3, [r7, #287] @ 0x11f
  15953. break;
  15954. 80071f6: e006 b.n 8007206 <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  15955. break;
  15956. 80071f8: bf00 nop
  15957. 80071fa: e004 b.n 8007206 <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  15958. break;
  15959. 80071fc: bf00 nop
  15960. 80071fe: e002 b.n 8007206 <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  15961. break;
  15962. 8007200: bf00 nop
  15963. 8007202: e000 b.n 8007206 <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  15964. break;
  15965. 8007204: bf00 nop
  15966. }
  15967. if (ret == HAL_OK)
  15968. 8007206: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15969. 800720a: 2b00 cmp r3, #0
  15970. 800720c: d10b bne.n 8007226 <HAL_RCCEx_PeriphCLKConfig+0xc6a>
  15971. {
  15972. /* Set the source of LPTIM1 clock*/
  15973. __HAL_RCC_LPTIM1_CONFIG(PeriphClkInit->Lptim1ClockSelection);
  15974. 800720e: 4b39 ldr r3, [pc, #228] @ (80072f4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  15975. 8007210: 6d5b ldr r3, [r3, #84] @ 0x54
  15976. 8007212: f023 41e0 bic.w r1, r3, #1879048192 @ 0x70000000
  15977. 8007216: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15978. 800721a: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  15979. 800721e: 4a35 ldr r2, [pc, #212] @ (80072f4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  15980. 8007220: 430b orrs r3, r1
  15981. 8007222: 6553 str r3, [r2, #84] @ 0x54
  15982. 8007224: e003 b.n 800722e <HAL_RCCEx_PeriphCLKConfig+0xc72>
  15983. }
  15984. else
  15985. {
  15986. /* set overall return value */
  15987. status = ret;
  15988. 8007226: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  15989. 800722a: f887 311e strb.w r3, [r7, #286] @ 0x11e
  15990. }
  15991. }
  15992. /*---------------------------- LPTIM2 configuration -------------------------------*/
  15993. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2)
  15994. 800722e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  15995. 8007232: e9d3 2300 ldrd r2, r3, [r3]
  15996. 8007236: f002 0340 and.w r3, r2, #64 @ 0x40
  15997. 800723a: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  15998. 800723e: 2300 movs r3, #0
  15999. 8007240: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  16000. 8007244: e9d7 1226 ldrd r1, r2, [r7, #152] @ 0x98
  16001. 8007248: 460b mov r3, r1
  16002. 800724a: 4313 orrs r3, r2
  16003. 800724c: d058 beq.n 8007300 <HAL_RCCEx_PeriphCLKConfig+0xd44>
  16004. {
  16005. switch (PeriphClkInit->Lptim2ClockSelection)
  16006. 800724e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16007. 8007252: f8d3 309c ldr.w r3, [r3, #156] @ 0x9c
  16008. 8007256: f5b3 5fa0 cmp.w r3, #5120 @ 0x1400
  16009. 800725a: d033 beq.n 80072c4 <HAL_RCCEx_PeriphCLKConfig+0xd08>
  16010. 800725c: f5b3 5fa0 cmp.w r3, #5120 @ 0x1400
  16011. 8007260: d82c bhi.n 80072bc <HAL_RCCEx_PeriphCLKConfig+0xd00>
  16012. 8007262: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  16013. 8007266: d02f beq.n 80072c8 <HAL_RCCEx_PeriphCLKConfig+0xd0c>
  16014. 8007268: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  16015. 800726c: d826 bhi.n 80072bc <HAL_RCCEx_PeriphCLKConfig+0xd00>
  16016. 800726e: f5b3 6f40 cmp.w r3, #3072 @ 0xc00
  16017. 8007272: d02b beq.n 80072cc <HAL_RCCEx_PeriphCLKConfig+0xd10>
  16018. 8007274: f5b3 6f40 cmp.w r3, #3072 @ 0xc00
  16019. 8007278: d820 bhi.n 80072bc <HAL_RCCEx_PeriphCLKConfig+0xd00>
  16020. 800727a: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  16021. 800727e: d012 beq.n 80072a6 <HAL_RCCEx_PeriphCLKConfig+0xcea>
  16022. 8007280: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  16023. 8007284: d81a bhi.n 80072bc <HAL_RCCEx_PeriphCLKConfig+0xd00>
  16024. 8007286: 2b00 cmp r3, #0
  16025. 8007288: d022 beq.n 80072d0 <HAL_RCCEx_PeriphCLKConfig+0xd14>
  16026. 800728a: f5b3 6f80 cmp.w r3, #1024 @ 0x400
  16027. 800728e: d115 bne.n 80072bc <HAL_RCCEx_PeriphCLKConfig+0xd00>
  16028. /* LPTIM2 clock source configuration done later after clock selection check */
  16029. break;
  16030. case RCC_LPTIM2CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM2*/
  16031. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  16032. 8007290: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16033. 8007294: 3308 adds r3, #8
  16034. 8007296: 2100 movs r1, #0
  16035. 8007298: 4618 mov r0, r3
  16036. 800729a: f000 fe3b bl 8007f14 <RCCEx_PLL2_Config>
  16037. 800729e: 4603 mov r3, r0
  16038. 80072a0: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16039. /* LPTIM2 clock source configuration done later after clock selection check */
  16040. break;
  16041. 80072a4: e015 b.n 80072d2 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  16042. case RCC_LPTIM2CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM2*/
  16043. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  16044. 80072a6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16045. 80072aa: 3328 adds r3, #40 @ 0x28
  16046. 80072ac: 2102 movs r1, #2
  16047. 80072ae: 4618 mov r0, r3
  16048. 80072b0: f000 fee2 bl 8008078 <RCCEx_PLL3_Config>
  16049. 80072b4: 4603 mov r3, r0
  16050. 80072b6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16051. /* LPTIM2 clock source configuration done later after clock selection check */
  16052. break;
  16053. 80072ba: e00a b.n 80072d2 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  16054. /* HSI, HSE, or CSI oscillator is used as source of LPTIM2 clock */
  16055. /* LPTIM2 clock source configuration done later after clock selection check */
  16056. break;
  16057. default:
  16058. ret = HAL_ERROR;
  16059. 80072bc: 2301 movs r3, #1
  16060. 80072be: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16061. break;
  16062. 80072c2: e006 b.n 80072d2 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  16063. break;
  16064. 80072c4: bf00 nop
  16065. 80072c6: e004 b.n 80072d2 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  16066. break;
  16067. 80072c8: bf00 nop
  16068. 80072ca: e002 b.n 80072d2 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  16069. break;
  16070. 80072cc: bf00 nop
  16071. 80072ce: e000 b.n 80072d2 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  16072. break;
  16073. 80072d0: bf00 nop
  16074. }
  16075. if (ret == HAL_OK)
  16076. 80072d2: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16077. 80072d6: 2b00 cmp r3, #0
  16078. 80072d8: d10e bne.n 80072f8 <HAL_RCCEx_PeriphCLKConfig+0xd3c>
  16079. {
  16080. /* Set the source of LPTIM2 clock*/
  16081. __HAL_RCC_LPTIM2_CONFIG(PeriphClkInit->Lptim2ClockSelection);
  16082. 80072da: 4b06 ldr r3, [pc, #24] @ (80072f4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  16083. 80072dc: 6d9b ldr r3, [r3, #88] @ 0x58
  16084. 80072de: f423 51e0 bic.w r1, r3, #7168 @ 0x1c00
  16085. 80072e2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16086. 80072e6: f8d3 309c ldr.w r3, [r3, #156] @ 0x9c
  16087. 80072ea: 4a02 ldr r2, [pc, #8] @ (80072f4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  16088. 80072ec: 430b orrs r3, r1
  16089. 80072ee: 6593 str r3, [r2, #88] @ 0x58
  16090. 80072f0: e006 b.n 8007300 <HAL_RCCEx_PeriphCLKConfig+0xd44>
  16091. 80072f2: bf00 nop
  16092. 80072f4: 58024400 .word 0x58024400
  16093. }
  16094. else
  16095. {
  16096. /* set overall return value */
  16097. status = ret;
  16098. 80072f8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16099. 80072fc: f887 311e strb.w r3, [r7, #286] @ 0x11e
  16100. }
  16101. }
  16102. /*---------------------------- LPTIM345 configuration -------------------------------*/
  16103. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM345) == RCC_PERIPHCLK_LPTIM345)
  16104. 8007300: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16105. 8007304: e9d3 2300 ldrd r2, r3, [r3]
  16106. 8007308: f002 0380 and.w r3, r2, #128 @ 0x80
  16107. 800730c: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  16108. 8007310: 2300 movs r3, #0
  16109. 8007312: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  16110. 8007316: e9d7 1224 ldrd r1, r2, [r7, #144] @ 0x90
  16111. 800731a: 460b mov r3, r1
  16112. 800731c: 4313 orrs r3, r2
  16113. 800731e: d055 beq.n 80073cc <HAL_RCCEx_PeriphCLKConfig+0xe10>
  16114. {
  16115. switch (PeriphClkInit->Lptim345ClockSelection)
  16116. 8007320: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16117. 8007324: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  16118. 8007328: f5b3 4f20 cmp.w r3, #40960 @ 0xa000
  16119. 800732c: d033 beq.n 8007396 <HAL_RCCEx_PeriphCLKConfig+0xdda>
  16120. 800732e: f5b3 4f20 cmp.w r3, #40960 @ 0xa000
  16121. 8007332: d82c bhi.n 800738e <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  16122. 8007334: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  16123. 8007338: d02f beq.n 800739a <HAL_RCCEx_PeriphCLKConfig+0xdde>
  16124. 800733a: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  16125. 800733e: d826 bhi.n 800738e <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  16126. 8007340: f5b3 4fc0 cmp.w r3, #24576 @ 0x6000
  16127. 8007344: d02b beq.n 800739e <HAL_RCCEx_PeriphCLKConfig+0xde2>
  16128. 8007346: f5b3 4fc0 cmp.w r3, #24576 @ 0x6000
  16129. 800734a: d820 bhi.n 800738e <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  16130. 800734c: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  16131. 8007350: d012 beq.n 8007378 <HAL_RCCEx_PeriphCLKConfig+0xdbc>
  16132. 8007352: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  16133. 8007356: d81a bhi.n 800738e <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  16134. 8007358: 2b00 cmp r3, #0
  16135. 800735a: d022 beq.n 80073a2 <HAL_RCCEx_PeriphCLKConfig+0xde6>
  16136. 800735c: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  16137. 8007360: d115 bne.n 800738e <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  16138. case RCC_LPTIM345CLKSOURCE_PCLK4: /* SRD/D3 PCLK1 (PCLK4) as clock source for LPTIM3/4/5 */
  16139. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  16140. break;
  16141. case RCC_LPTIM345CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM3/4/5 */
  16142. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  16143. 8007362: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16144. 8007366: 3308 adds r3, #8
  16145. 8007368: 2100 movs r1, #0
  16146. 800736a: 4618 mov r0, r3
  16147. 800736c: f000 fdd2 bl 8007f14 <RCCEx_PLL2_Config>
  16148. 8007370: 4603 mov r3, r0
  16149. 8007372: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16150. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  16151. break;
  16152. 8007376: e015 b.n 80073a4 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  16153. case RCC_LPTIM345CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM3/4/5 */
  16154. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  16155. 8007378: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16156. 800737c: 3328 adds r3, #40 @ 0x28
  16157. 800737e: 2102 movs r1, #2
  16158. 8007380: 4618 mov r0, r3
  16159. 8007382: f000 fe79 bl 8008078 <RCCEx_PLL3_Config>
  16160. 8007386: 4603 mov r3, r0
  16161. 8007388: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16162. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  16163. break;
  16164. 800738c: e00a b.n 80073a4 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  16165. /* HSI, HSE, or CSI oscillator is used as source of LPTIM3/4/5 clock */
  16166. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  16167. break;
  16168. default:
  16169. ret = HAL_ERROR;
  16170. 800738e: 2301 movs r3, #1
  16171. 8007390: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16172. break;
  16173. 8007394: e006 b.n 80073a4 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  16174. break;
  16175. 8007396: bf00 nop
  16176. 8007398: e004 b.n 80073a4 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  16177. break;
  16178. 800739a: bf00 nop
  16179. 800739c: e002 b.n 80073a4 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  16180. break;
  16181. 800739e: bf00 nop
  16182. 80073a0: e000 b.n 80073a4 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  16183. break;
  16184. 80073a2: bf00 nop
  16185. }
  16186. if (ret == HAL_OK)
  16187. 80073a4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16188. 80073a8: 2b00 cmp r3, #0
  16189. 80073aa: d10b bne.n 80073c4 <HAL_RCCEx_PeriphCLKConfig+0xe08>
  16190. {
  16191. /* Set the source of LPTIM3/4/5 clock */
  16192. __HAL_RCC_LPTIM345_CONFIG(PeriphClkInit->Lptim345ClockSelection);
  16193. 80073ac: 4bbb ldr r3, [pc, #748] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16194. 80073ae: 6d9b ldr r3, [r3, #88] @ 0x58
  16195. 80073b0: f423 4160 bic.w r1, r3, #57344 @ 0xe000
  16196. 80073b4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16197. 80073b8: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  16198. 80073bc: 4ab7 ldr r2, [pc, #732] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16199. 80073be: 430b orrs r3, r1
  16200. 80073c0: 6593 str r3, [r2, #88] @ 0x58
  16201. 80073c2: e003 b.n 80073cc <HAL_RCCEx_PeriphCLKConfig+0xe10>
  16202. }
  16203. else
  16204. {
  16205. /* set overall return value */
  16206. status = ret;
  16207. 80073c4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16208. 80073c8: f887 311e strb.w r3, [r7, #286] @ 0x11e
  16209. __HAL_RCC_I2C1235_CONFIG(PeriphClkInit->I2c1235ClockSelection);
  16210. }
  16211. #else
  16212. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C123) == RCC_PERIPHCLK_I2C123)
  16213. 80073cc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16214. 80073d0: e9d3 2300 ldrd r2, r3, [r3]
  16215. 80073d4: f002 0308 and.w r3, r2, #8
  16216. 80073d8: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  16217. 80073dc: 2300 movs r3, #0
  16218. 80073de: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  16219. 80073e2: e9d7 1222 ldrd r1, r2, [r7, #136] @ 0x88
  16220. 80073e6: 460b mov r3, r1
  16221. 80073e8: 4313 orrs r3, r2
  16222. 80073ea: d01e beq.n 800742a <HAL_RCCEx_PeriphCLKConfig+0xe6e>
  16223. {
  16224. /* Check the parameters */
  16225. assert_param(IS_RCC_I2C123CLKSOURCE(PeriphClkInit->I2c123ClockSelection));
  16226. if ((PeriphClkInit->I2c123ClockSelection) == RCC_I2C123CLKSOURCE_PLL3)
  16227. 80073ec: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16228. 80073f0: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  16229. 80073f4: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  16230. 80073f8: d10c bne.n 8007414 <HAL_RCCEx_PeriphCLKConfig+0xe58>
  16231. {
  16232. if (RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE) != HAL_OK)
  16233. 80073fa: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16234. 80073fe: 3328 adds r3, #40 @ 0x28
  16235. 8007400: 2102 movs r1, #2
  16236. 8007402: 4618 mov r0, r3
  16237. 8007404: f000 fe38 bl 8008078 <RCCEx_PLL3_Config>
  16238. 8007408: 4603 mov r3, r0
  16239. 800740a: 2b00 cmp r3, #0
  16240. 800740c: d002 beq.n 8007414 <HAL_RCCEx_PeriphCLKConfig+0xe58>
  16241. {
  16242. status = HAL_ERROR;
  16243. 800740e: 2301 movs r3, #1
  16244. 8007410: f887 311e strb.w r3, [r7, #286] @ 0x11e
  16245. }
  16246. }
  16247. __HAL_RCC_I2C123_CONFIG(PeriphClkInit->I2c123ClockSelection);
  16248. 8007414: 4ba1 ldr r3, [pc, #644] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16249. 8007416: 6d5b ldr r3, [r3, #84] @ 0x54
  16250. 8007418: f423 5140 bic.w r1, r3, #12288 @ 0x3000
  16251. 800741c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16252. 8007420: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  16253. 8007424: 4a9d ldr r2, [pc, #628] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16254. 8007426: 430b orrs r3, r1
  16255. 8007428: 6553 str r3, [r2, #84] @ 0x54
  16256. }
  16257. #endif /* I2C5 */
  16258. /*------------------------------ I2C4 Configuration ------------------------*/
  16259. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C4) == RCC_PERIPHCLK_I2C4)
  16260. 800742a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16261. 800742e: e9d3 2300 ldrd r2, r3, [r3]
  16262. 8007432: f002 0310 and.w r3, r2, #16
  16263. 8007436: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  16264. 800743a: 2300 movs r3, #0
  16265. 800743c: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  16266. 8007440: e9d7 1220 ldrd r1, r2, [r7, #128] @ 0x80
  16267. 8007444: 460b mov r3, r1
  16268. 8007446: 4313 orrs r3, r2
  16269. 8007448: d01e beq.n 8007488 <HAL_RCCEx_PeriphCLKConfig+0xecc>
  16270. {
  16271. /* Check the parameters */
  16272. assert_param(IS_RCC_I2C4CLKSOURCE(PeriphClkInit->I2c4ClockSelection));
  16273. if ((PeriphClkInit->I2c4ClockSelection) == RCC_I2C4CLKSOURCE_PLL3)
  16274. 800744a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16275. 800744e: f8d3 3098 ldr.w r3, [r3, #152] @ 0x98
  16276. 8007452: f5b3 7f80 cmp.w r3, #256 @ 0x100
  16277. 8007456: d10c bne.n 8007472 <HAL_RCCEx_PeriphCLKConfig+0xeb6>
  16278. {
  16279. if (RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE) != HAL_OK)
  16280. 8007458: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16281. 800745c: 3328 adds r3, #40 @ 0x28
  16282. 800745e: 2102 movs r1, #2
  16283. 8007460: 4618 mov r0, r3
  16284. 8007462: f000 fe09 bl 8008078 <RCCEx_PLL3_Config>
  16285. 8007466: 4603 mov r3, r0
  16286. 8007468: 2b00 cmp r3, #0
  16287. 800746a: d002 beq.n 8007472 <HAL_RCCEx_PeriphCLKConfig+0xeb6>
  16288. {
  16289. status = HAL_ERROR;
  16290. 800746c: 2301 movs r3, #1
  16291. 800746e: f887 311e strb.w r3, [r7, #286] @ 0x11e
  16292. }
  16293. }
  16294. __HAL_RCC_I2C4_CONFIG(PeriphClkInit->I2c4ClockSelection);
  16295. 8007472: 4b8a ldr r3, [pc, #552] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16296. 8007474: 6d9b ldr r3, [r3, #88] @ 0x58
  16297. 8007476: f423 7140 bic.w r1, r3, #768 @ 0x300
  16298. 800747a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16299. 800747e: f8d3 3098 ldr.w r3, [r3, #152] @ 0x98
  16300. 8007482: 4a86 ldr r2, [pc, #536] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16301. 8007484: 430b orrs r3, r1
  16302. 8007486: 6593 str r3, [r2, #88] @ 0x58
  16303. }
  16304. /*---------------------------- ADC configuration -------------------------------*/
  16305. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC)
  16306. 8007488: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16307. 800748c: e9d3 2300 ldrd r2, r3, [r3]
  16308. 8007490: f402 2300 and.w r3, r2, #524288 @ 0x80000
  16309. 8007494: 67bb str r3, [r7, #120] @ 0x78
  16310. 8007496: 2300 movs r3, #0
  16311. 8007498: 67fb str r3, [r7, #124] @ 0x7c
  16312. 800749a: e9d7 121e ldrd r1, r2, [r7, #120] @ 0x78
  16313. 800749e: 460b mov r3, r1
  16314. 80074a0: 4313 orrs r3, r2
  16315. 80074a2: d03e beq.n 8007522 <HAL_RCCEx_PeriphCLKConfig+0xf66>
  16316. {
  16317. switch (PeriphClkInit->AdcClockSelection)
  16318. 80074a4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16319. 80074a8: f8d3 30a4 ldr.w r3, [r3, #164] @ 0xa4
  16320. 80074ac: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  16321. 80074b0: d022 beq.n 80074f8 <HAL_RCCEx_PeriphCLKConfig+0xf3c>
  16322. 80074b2: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  16323. 80074b6: d81b bhi.n 80074f0 <HAL_RCCEx_PeriphCLKConfig+0xf34>
  16324. 80074b8: 2b00 cmp r3, #0
  16325. 80074ba: d003 beq.n 80074c4 <HAL_RCCEx_PeriphCLKConfig+0xf08>
  16326. 80074bc: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  16327. 80074c0: d00b beq.n 80074da <HAL_RCCEx_PeriphCLKConfig+0xf1e>
  16328. 80074c2: e015 b.n 80074f0 <HAL_RCCEx_PeriphCLKConfig+0xf34>
  16329. {
  16330. case RCC_ADCCLKSOURCE_PLL2: /* PLL2 is used as clock source for ADC*/
  16331. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  16332. 80074c4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16333. 80074c8: 3308 adds r3, #8
  16334. 80074ca: 2100 movs r1, #0
  16335. 80074cc: 4618 mov r0, r3
  16336. 80074ce: f000 fd21 bl 8007f14 <RCCEx_PLL2_Config>
  16337. 80074d2: 4603 mov r3, r0
  16338. 80074d4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16339. /* ADC clock source configuration done later after clock selection check */
  16340. break;
  16341. 80074d8: e00f b.n 80074fa <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  16342. case RCC_ADCCLKSOURCE_PLL3: /* PLL3 is used as clock source for ADC*/
  16343. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  16344. 80074da: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16345. 80074de: 3328 adds r3, #40 @ 0x28
  16346. 80074e0: 2102 movs r1, #2
  16347. 80074e2: 4618 mov r0, r3
  16348. 80074e4: f000 fdc8 bl 8008078 <RCCEx_PLL3_Config>
  16349. 80074e8: 4603 mov r3, r0
  16350. 80074ea: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16351. /* ADC clock source configuration done later after clock selection check */
  16352. break;
  16353. 80074ee: e004 b.n 80074fa <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  16354. /* HSI, HSE, or CSI oscillator is used as source of ADC clock */
  16355. /* ADC clock source configuration done later after clock selection check */
  16356. break;
  16357. default:
  16358. ret = HAL_ERROR;
  16359. 80074f0: 2301 movs r3, #1
  16360. 80074f2: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16361. break;
  16362. 80074f6: e000 b.n 80074fa <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  16363. break;
  16364. 80074f8: bf00 nop
  16365. }
  16366. if (ret == HAL_OK)
  16367. 80074fa: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16368. 80074fe: 2b00 cmp r3, #0
  16369. 8007500: d10b bne.n 800751a <HAL_RCCEx_PeriphCLKConfig+0xf5e>
  16370. {
  16371. /* Set the source of ADC clock*/
  16372. __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection);
  16373. 8007502: 4b66 ldr r3, [pc, #408] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16374. 8007504: 6d9b ldr r3, [r3, #88] @ 0x58
  16375. 8007506: f423 3140 bic.w r1, r3, #196608 @ 0x30000
  16376. 800750a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16377. 800750e: f8d3 30a4 ldr.w r3, [r3, #164] @ 0xa4
  16378. 8007512: 4a62 ldr r2, [pc, #392] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16379. 8007514: 430b orrs r3, r1
  16380. 8007516: 6593 str r3, [r2, #88] @ 0x58
  16381. 8007518: e003 b.n 8007522 <HAL_RCCEx_PeriphCLKConfig+0xf66>
  16382. }
  16383. else
  16384. {
  16385. /* set overall return value */
  16386. status = ret;
  16387. 800751a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16388. 800751e: f887 311e strb.w r3, [r7, #286] @ 0x11e
  16389. }
  16390. }
  16391. /*------------------------------ USB Configuration -------------------------*/
  16392. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB)
  16393. 8007522: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16394. 8007526: e9d3 2300 ldrd r2, r3, [r3]
  16395. 800752a: f402 2380 and.w r3, r2, #262144 @ 0x40000
  16396. 800752e: 673b str r3, [r7, #112] @ 0x70
  16397. 8007530: 2300 movs r3, #0
  16398. 8007532: 677b str r3, [r7, #116] @ 0x74
  16399. 8007534: e9d7 121c ldrd r1, r2, [r7, #112] @ 0x70
  16400. 8007538: 460b mov r3, r1
  16401. 800753a: 4313 orrs r3, r2
  16402. 800753c: d03b beq.n 80075b6 <HAL_RCCEx_PeriphCLKConfig+0xffa>
  16403. {
  16404. switch (PeriphClkInit->UsbClockSelection)
  16405. 800753e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16406. 8007542: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  16407. 8007546: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  16408. 800754a: d01f beq.n 800758c <HAL_RCCEx_PeriphCLKConfig+0xfd0>
  16409. 800754c: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  16410. 8007550: d818 bhi.n 8007584 <HAL_RCCEx_PeriphCLKConfig+0xfc8>
  16411. 8007552: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  16412. 8007556: d003 beq.n 8007560 <HAL_RCCEx_PeriphCLKConfig+0xfa4>
  16413. 8007558: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  16414. 800755c: d007 beq.n 800756e <HAL_RCCEx_PeriphCLKConfig+0xfb2>
  16415. 800755e: e011 b.n 8007584 <HAL_RCCEx_PeriphCLKConfig+0xfc8>
  16416. {
  16417. case RCC_USBCLKSOURCE_PLL: /* PLL is used as clock source for USB*/
  16418. /* Enable USB Clock output generated form System USB . */
  16419. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  16420. 8007560: 4b4e ldr r3, [pc, #312] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16421. 8007562: 6adb ldr r3, [r3, #44] @ 0x2c
  16422. 8007564: 4a4d ldr r2, [pc, #308] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16423. 8007566: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  16424. 800756a: 62d3 str r3, [r2, #44] @ 0x2c
  16425. /* USB clock source configuration done later after clock selection check */
  16426. break;
  16427. 800756c: e00f b.n 800758e <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  16428. case RCC_USBCLKSOURCE_PLL3: /* PLL3 is used as clock source for USB*/
  16429. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  16430. 800756e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16431. 8007572: 3328 adds r3, #40 @ 0x28
  16432. 8007574: 2101 movs r1, #1
  16433. 8007576: 4618 mov r0, r3
  16434. 8007578: f000 fd7e bl 8008078 <RCCEx_PLL3_Config>
  16435. 800757c: 4603 mov r3, r0
  16436. 800757e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16437. /* USB clock source configuration done later after clock selection check */
  16438. break;
  16439. 8007582: e004 b.n 800758e <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  16440. /* HSI48 oscillator is used as source of USB clock */
  16441. /* USB clock source configuration done later after clock selection check */
  16442. break;
  16443. default:
  16444. ret = HAL_ERROR;
  16445. 8007584: 2301 movs r3, #1
  16446. 8007586: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16447. break;
  16448. 800758a: e000 b.n 800758e <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  16449. break;
  16450. 800758c: bf00 nop
  16451. }
  16452. if (ret == HAL_OK)
  16453. 800758e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16454. 8007592: 2b00 cmp r3, #0
  16455. 8007594: d10b bne.n 80075ae <HAL_RCCEx_PeriphCLKConfig+0xff2>
  16456. {
  16457. /* Set the source of USB clock*/
  16458. __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection);
  16459. 8007596: 4b41 ldr r3, [pc, #260] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16460. 8007598: 6d5b ldr r3, [r3, #84] @ 0x54
  16461. 800759a: f423 1140 bic.w r1, r3, #3145728 @ 0x300000
  16462. 800759e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16463. 80075a2: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  16464. 80075a6: 4a3d ldr r2, [pc, #244] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16465. 80075a8: 430b orrs r3, r1
  16466. 80075aa: 6553 str r3, [r2, #84] @ 0x54
  16467. 80075ac: e003 b.n 80075b6 <HAL_RCCEx_PeriphCLKConfig+0xffa>
  16468. }
  16469. else
  16470. {
  16471. /* set overall return value */
  16472. status = ret;
  16473. 80075ae: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16474. 80075b2: f887 311e strb.w r3, [r7, #286] @ 0x11e
  16475. }
  16476. }
  16477. /*------------------------------------- SDMMC Configuration ------------------------------------*/
  16478. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDMMC) == RCC_PERIPHCLK_SDMMC)
  16479. 80075b6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16480. 80075ba: e9d3 2300 ldrd r2, r3, [r3]
  16481. 80075be: f402 3380 and.w r3, r2, #65536 @ 0x10000
  16482. 80075c2: 66bb str r3, [r7, #104] @ 0x68
  16483. 80075c4: 2300 movs r3, #0
  16484. 80075c6: 66fb str r3, [r7, #108] @ 0x6c
  16485. 80075c8: e9d7 121a ldrd r1, r2, [r7, #104] @ 0x68
  16486. 80075cc: 460b mov r3, r1
  16487. 80075ce: 4313 orrs r3, r2
  16488. 80075d0: d031 beq.n 8007636 <HAL_RCCEx_PeriphCLKConfig+0x107a>
  16489. {
  16490. /* Check the parameters */
  16491. assert_param(IS_RCC_SDMMC(PeriphClkInit->SdmmcClockSelection));
  16492. switch (PeriphClkInit->SdmmcClockSelection)
  16493. 80075d2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16494. 80075d6: 6d1b ldr r3, [r3, #80] @ 0x50
  16495. 80075d8: 2b00 cmp r3, #0
  16496. 80075da: d003 beq.n 80075e4 <HAL_RCCEx_PeriphCLKConfig+0x1028>
  16497. 80075dc: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  16498. 80075e0: d007 beq.n 80075f2 <HAL_RCCEx_PeriphCLKConfig+0x1036>
  16499. 80075e2: e011 b.n 8007608 <HAL_RCCEx_PeriphCLKConfig+0x104c>
  16500. {
  16501. case RCC_SDMMCCLKSOURCE_PLL: /* PLL is used as clock source for SDMMC*/
  16502. /* Enable SDMMC Clock output generated form System PLL . */
  16503. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  16504. 80075e4: 4b2d ldr r3, [pc, #180] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16505. 80075e6: 6adb ldr r3, [r3, #44] @ 0x2c
  16506. 80075e8: 4a2c ldr r2, [pc, #176] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16507. 80075ea: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  16508. 80075ee: 62d3 str r3, [r2, #44] @ 0x2c
  16509. /* SDMMC clock source configuration done later after clock selection check */
  16510. break;
  16511. 80075f0: e00e b.n 8007610 <HAL_RCCEx_PeriphCLKConfig+0x1054>
  16512. case RCC_SDMMCCLKSOURCE_PLL2: /* PLL2 is used as clock source for SDMMC*/
  16513. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  16514. 80075f2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16515. 80075f6: 3308 adds r3, #8
  16516. 80075f8: 2102 movs r1, #2
  16517. 80075fa: 4618 mov r0, r3
  16518. 80075fc: f000 fc8a bl 8007f14 <RCCEx_PLL2_Config>
  16519. 8007600: 4603 mov r3, r0
  16520. 8007602: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16521. /* SDMMC clock source configuration done later after clock selection check */
  16522. break;
  16523. 8007606: e003 b.n 8007610 <HAL_RCCEx_PeriphCLKConfig+0x1054>
  16524. default:
  16525. ret = HAL_ERROR;
  16526. 8007608: 2301 movs r3, #1
  16527. 800760a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16528. break;
  16529. 800760e: bf00 nop
  16530. }
  16531. if (ret == HAL_OK)
  16532. 8007610: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16533. 8007614: 2b00 cmp r3, #0
  16534. 8007616: d10a bne.n 800762e <HAL_RCCEx_PeriphCLKConfig+0x1072>
  16535. {
  16536. /* Set the source of SDMMC clock*/
  16537. __HAL_RCC_SDMMC_CONFIG(PeriphClkInit->SdmmcClockSelection);
  16538. 8007618: 4b20 ldr r3, [pc, #128] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16539. 800761a: 6cdb ldr r3, [r3, #76] @ 0x4c
  16540. 800761c: f423 3180 bic.w r1, r3, #65536 @ 0x10000
  16541. 8007620: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16542. 8007624: 6d1b ldr r3, [r3, #80] @ 0x50
  16543. 8007626: 4a1d ldr r2, [pc, #116] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16544. 8007628: 430b orrs r3, r1
  16545. 800762a: 64d3 str r3, [r2, #76] @ 0x4c
  16546. 800762c: e003 b.n 8007636 <HAL_RCCEx_PeriphCLKConfig+0x107a>
  16547. }
  16548. else
  16549. {
  16550. /* set overall return value */
  16551. status = ret;
  16552. 800762e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16553. 8007632: f887 311e strb.w r3, [r7, #286] @ 0x11e
  16554. }
  16555. }
  16556. #endif /* LTDC */
  16557. /*------------------------------ RNG Configuration -------------------------*/
  16558. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG)
  16559. 8007636: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16560. 800763a: e9d3 2300 ldrd r2, r3, [r3]
  16561. 800763e: f402 3300 and.w r3, r2, #131072 @ 0x20000
  16562. 8007642: 663b str r3, [r7, #96] @ 0x60
  16563. 8007644: 2300 movs r3, #0
  16564. 8007646: 667b str r3, [r7, #100] @ 0x64
  16565. 8007648: e9d7 1218 ldrd r1, r2, [r7, #96] @ 0x60
  16566. 800764c: 460b mov r3, r1
  16567. 800764e: 4313 orrs r3, r2
  16568. 8007650: d03b beq.n 80076ca <HAL_RCCEx_PeriphCLKConfig+0x110e>
  16569. {
  16570. switch (PeriphClkInit->RngClockSelection)
  16571. 8007652: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16572. 8007656: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  16573. 800765a: f5b3 7f40 cmp.w r3, #768 @ 0x300
  16574. 800765e: d018 beq.n 8007692 <HAL_RCCEx_PeriphCLKConfig+0x10d6>
  16575. 8007660: f5b3 7f40 cmp.w r3, #768 @ 0x300
  16576. 8007664: d811 bhi.n 800768a <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  16577. 8007666: f5b3 7f00 cmp.w r3, #512 @ 0x200
  16578. 800766a: d014 beq.n 8007696 <HAL_RCCEx_PeriphCLKConfig+0x10da>
  16579. 800766c: f5b3 7f00 cmp.w r3, #512 @ 0x200
  16580. 8007670: d80b bhi.n 800768a <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  16581. 8007672: 2b00 cmp r3, #0
  16582. 8007674: d014 beq.n 80076a0 <HAL_RCCEx_PeriphCLKConfig+0x10e4>
  16583. 8007676: f5b3 7f80 cmp.w r3, #256 @ 0x100
  16584. 800767a: d106 bne.n 800768a <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  16585. {
  16586. case RCC_RNGCLKSOURCE_PLL: /* PLL is used as clock source for RNG*/
  16587. /* Enable RNG Clock output generated form System RNG . */
  16588. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  16589. 800767c: 4b07 ldr r3, [pc, #28] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16590. 800767e: 6adb ldr r3, [r3, #44] @ 0x2c
  16591. 8007680: 4a06 ldr r2, [pc, #24] @ (800769c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  16592. 8007682: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  16593. 8007686: 62d3 str r3, [r2, #44] @ 0x2c
  16594. /* RNG clock source configuration done later after clock selection check */
  16595. break;
  16596. 8007688: e00b b.n 80076a2 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  16597. /* HSI48 oscillator is used as source of RNG clock */
  16598. /* RNG clock source configuration done later after clock selection check */
  16599. break;
  16600. default:
  16601. ret = HAL_ERROR;
  16602. 800768a: 2301 movs r3, #1
  16603. 800768c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16604. break;
  16605. 8007690: e007 b.n 80076a2 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  16606. break;
  16607. 8007692: bf00 nop
  16608. 8007694: e005 b.n 80076a2 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  16609. break;
  16610. 8007696: bf00 nop
  16611. 8007698: e003 b.n 80076a2 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  16612. 800769a: bf00 nop
  16613. 800769c: 58024400 .word 0x58024400
  16614. break;
  16615. 80076a0: bf00 nop
  16616. }
  16617. if (ret == HAL_OK)
  16618. 80076a2: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16619. 80076a6: 2b00 cmp r3, #0
  16620. 80076a8: d10b bne.n 80076c2 <HAL_RCCEx_PeriphCLKConfig+0x1106>
  16621. {
  16622. /* Set the source of RNG clock*/
  16623. __HAL_RCC_RNG_CONFIG(PeriphClkInit->RngClockSelection);
  16624. 80076aa: 4bba ldr r3, [pc, #744] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16625. 80076ac: 6d5b ldr r3, [r3, #84] @ 0x54
  16626. 80076ae: f423 7140 bic.w r1, r3, #768 @ 0x300
  16627. 80076b2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16628. 80076b6: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  16629. 80076ba: 4ab6 ldr r2, [pc, #728] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16630. 80076bc: 430b orrs r3, r1
  16631. 80076be: 6553 str r3, [r2, #84] @ 0x54
  16632. 80076c0: e003 b.n 80076ca <HAL_RCCEx_PeriphCLKConfig+0x110e>
  16633. }
  16634. else
  16635. {
  16636. /* set overall return value */
  16637. status = ret;
  16638. 80076c2: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16639. 80076c6: f887 311e strb.w r3, [r7, #286] @ 0x11e
  16640. }
  16641. }
  16642. /*------------------------------ SWPMI1 Configuration ------------------------*/
  16643. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SWPMI1) == RCC_PERIPHCLK_SWPMI1)
  16644. 80076ca: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16645. 80076ce: e9d3 2300 ldrd r2, r3, [r3]
  16646. 80076d2: f402 1380 and.w r3, r2, #1048576 @ 0x100000
  16647. 80076d6: 65bb str r3, [r7, #88] @ 0x58
  16648. 80076d8: 2300 movs r3, #0
  16649. 80076da: 65fb str r3, [r7, #92] @ 0x5c
  16650. 80076dc: e9d7 1216 ldrd r1, r2, [r7, #88] @ 0x58
  16651. 80076e0: 460b mov r3, r1
  16652. 80076e2: 4313 orrs r3, r2
  16653. 80076e4: d009 beq.n 80076fa <HAL_RCCEx_PeriphCLKConfig+0x113e>
  16654. {
  16655. /* Check the parameters */
  16656. assert_param(IS_RCC_SWPMI1CLKSOURCE(PeriphClkInit->Swpmi1ClockSelection));
  16657. /* Configure the SWPMI1 interface clock source */
  16658. __HAL_RCC_SWPMI1_CONFIG(PeriphClkInit->Swpmi1ClockSelection);
  16659. 80076e6: 4bab ldr r3, [pc, #684] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16660. 80076e8: 6d1b ldr r3, [r3, #80] @ 0x50
  16661. 80076ea: f023 4100 bic.w r1, r3, #2147483648 @ 0x80000000
  16662. 80076ee: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16663. 80076f2: 6f5b ldr r3, [r3, #116] @ 0x74
  16664. 80076f4: 4aa7 ldr r2, [pc, #668] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16665. 80076f6: 430b orrs r3, r1
  16666. 80076f8: 6513 str r3, [r2, #80] @ 0x50
  16667. }
  16668. #if defined(HRTIM1)
  16669. /*------------------------------ HRTIM1 clock Configuration ----------------*/
  16670. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_HRTIM1) == RCC_PERIPHCLK_HRTIM1)
  16671. 80076fa: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16672. 80076fe: e9d3 2300 ldrd r2, r3, [r3]
  16673. 8007702: f002 5380 and.w r3, r2, #268435456 @ 0x10000000
  16674. 8007706: 653b str r3, [r7, #80] @ 0x50
  16675. 8007708: 2300 movs r3, #0
  16676. 800770a: 657b str r3, [r7, #84] @ 0x54
  16677. 800770c: e9d7 1214 ldrd r1, r2, [r7, #80] @ 0x50
  16678. 8007710: 460b mov r3, r1
  16679. 8007712: 4313 orrs r3, r2
  16680. 8007714: d00a beq.n 800772c <HAL_RCCEx_PeriphCLKConfig+0x1170>
  16681. {
  16682. /* Check the parameters */
  16683. assert_param(IS_RCC_HRTIM1CLKSOURCE(PeriphClkInit->Hrtim1ClockSelection));
  16684. /* Configure the HRTIM1 clock source */
  16685. __HAL_RCC_HRTIM1_CONFIG(PeriphClkInit->Hrtim1ClockSelection);
  16686. 8007716: 4b9f ldr r3, [pc, #636] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16687. 8007718: 691b ldr r3, [r3, #16]
  16688. 800771a: f423 4180 bic.w r1, r3, #16384 @ 0x4000
  16689. 800771e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16690. 8007722: f8d3 30b8 ldr.w r3, [r3, #184] @ 0xb8
  16691. 8007726: 4a9b ldr r2, [pc, #620] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16692. 8007728: 430b orrs r3, r1
  16693. 800772a: 6113 str r3, [r2, #16]
  16694. }
  16695. #endif /*HRTIM1*/
  16696. /*------------------------------ DFSDM1 Configuration ------------------------*/
  16697. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1)
  16698. 800772c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16699. 8007730: e9d3 2300 ldrd r2, r3, [r3]
  16700. 8007734: f402 1300 and.w r3, r2, #2097152 @ 0x200000
  16701. 8007738: 64bb str r3, [r7, #72] @ 0x48
  16702. 800773a: 2300 movs r3, #0
  16703. 800773c: 64fb str r3, [r7, #76] @ 0x4c
  16704. 800773e: e9d7 1212 ldrd r1, r2, [r7, #72] @ 0x48
  16705. 8007742: 460b mov r3, r1
  16706. 8007744: 4313 orrs r3, r2
  16707. 8007746: d009 beq.n 800775c <HAL_RCCEx_PeriphCLKConfig+0x11a0>
  16708. {
  16709. /* Check the parameters */
  16710. assert_param(IS_RCC_DFSDM1CLKSOURCE(PeriphClkInit->Dfsdm1ClockSelection));
  16711. /* Configure the DFSDM1 interface clock source */
  16712. __HAL_RCC_DFSDM1_CONFIG(PeriphClkInit->Dfsdm1ClockSelection);
  16713. 8007748: 4b92 ldr r3, [pc, #584] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16714. 800774a: 6d1b ldr r3, [r3, #80] @ 0x50
  16715. 800774c: f023 7180 bic.w r1, r3, #16777216 @ 0x1000000
  16716. 8007750: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16717. 8007754: 6edb ldr r3, [r3, #108] @ 0x6c
  16718. 8007756: 4a8f ldr r2, [pc, #572] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16719. 8007758: 430b orrs r3, r1
  16720. 800775a: 6513 str r3, [r2, #80] @ 0x50
  16721. __HAL_RCC_DFSDM2_CONFIG(PeriphClkInit->Dfsdm2ClockSelection);
  16722. }
  16723. #endif /* DFSDM2 */
  16724. /*------------------------------------ TIM configuration --------------------------------------*/
  16725. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == RCC_PERIPHCLK_TIM)
  16726. 800775c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16727. 8007760: e9d3 2300 ldrd r2, r3, [r3]
  16728. 8007764: f002 4380 and.w r3, r2, #1073741824 @ 0x40000000
  16729. 8007768: 643b str r3, [r7, #64] @ 0x40
  16730. 800776a: 2300 movs r3, #0
  16731. 800776c: 647b str r3, [r7, #68] @ 0x44
  16732. 800776e: e9d7 1210 ldrd r1, r2, [r7, #64] @ 0x40
  16733. 8007772: 460b mov r3, r1
  16734. 8007774: 4313 orrs r3, r2
  16735. 8007776: d00e beq.n 8007796 <HAL_RCCEx_PeriphCLKConfig+0x11da>
  16736. {
  16737. /* Check the parameters */
  16738. assert_param(IS_RCC_TIMPRES(PeriphClkInit->TIMPresSelection));
  16739. /* Configure Timer Prescaler */
  16740. __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection);
  16741. 8007778: 4b86 ldr r3, [pc, #536] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16742. 800777a: 691b ldr r3, [r3, #16]
  16743. 800777c: 4a85 ldr r2, [pc, #532] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16744. 800777e: f423 4300 bic.w r3, r3, #32768 @ 0x8000
  16745. 8007782: 6113 str r3, [r2, #16]
  16746. 8007784: 4b83 ldr r3, [pc, #524] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16747. 8007786: 6919 ldr r1, [r3, #16]
  16748. 8007788: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16749. 800778c: f8d3 30bc ldr.w r3, [r3, #188] @ 0xbc
  16750. 8007790: 4a80 ldr r2, [pc, #512] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16751. 8007792: 430b orrs r3, r1
  16752. 8007794: 6113 str r3, [r2, #16]
  16753. }
  16754. /*------------------------------------ CKPER configuration --------------------------------------*/
  16755. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CKPER) == RCC_PERIPHCLK_CKPER)
  16756. 8007796: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16757. 800779a: e9d3 2300 ldrd r2, r3, [r3]
  16758. 800779e: f002 4300 and.w r3, r2, #2147483648 @ 0x80000000
  16759. 80077a2: 63bb str r3, [r7, #56] @ 0x38
  16760. 80077a4: 2300 movs r3, #0
  16761. 80077a6: 63fb str r3, [r7, #60] @ 0x3c
  16762. 80077a8: e9d7 120e ldrd r1, r2, [r7, #56] @ 0x38
  16763. 80077ac: 460b mov r3, r1
  16764. 80077ae: 4313 orrs r3, r2
  16765. 80077b0: d009 beq.n 80077c6 <HAL_RCCEx_PeriphCLKConfig+0x120a>
  16766. {
  16767. /* Check the parameters */
  16768. assert_param(IS_RCC_CLKPSOURCE(PeriphClkInit->CkperClockSelection));
  16769. /* Configure the CKPER clock source */
  16770. __HAL_RCC_CLKP_CONFIG(PeriphClkInit->CkperClockSelection);
  16771. 80077b2: 4b78 ldr r3, [pc, #480] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16772. 80077b4: 6cdb ldr r3, [r3, #76] @ 0x4c
  16773. 80077b6: f023 5140 bic.w r1, r3, #805306368 @ 0x30000000
  16774. 80077ba: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16775. 80077be: 6d5b ldr r3, [r3, #84] @ 0x54
  16776. 80077c0: 4a74 ldr r2, [pc, #464] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16777. 80077c2: 430b orrs r3, r1
  16778. 80077c4: 64d3 str r3, [r2, #76] @ 0x4c
  16779. }
  16780. /*------------------------------ CEC Configuration ------------------------*/
  16781. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CEC) == RCC_PERIPHCLK_CEC)
  16782. 80077c6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16783. 80077ca: e9d3 2300 ldrd r2, r3, [r3]
  16784. 80077ce: f402 0300 and.w r3, r2, #8388608 @ 0x800000
  16785. 80077d2: 633b str r3, [r7, #48] @ 0x30
  16786. 80077d4: 2300 movs r3, #0
  16787. 80077d6: 637b str r3, [r7, #52] @ 0x34
  16788. 80077d8: e9d7 120c ldrd r1, r2, [r7, #48] @ 0x30
  16789. 80077dc: 460b mov r3, r1
  16790. 80077de: 4313 orrs r3, r2
  16791. 80077e0: d00a beq.n 80077f8 <HAL_RCCEx_PeriphCLKConfig+0x123c>
  16792. {
  16793. /* Check the parameters */
  16794. assert_param(IS_RCC_CECCLKSOURCE(PeriphClkInit->CecClockSelection));
  16795. /* Configure the CEC interface clock source */
  16796. __HAL_RCC_CEC_CONFIG(PeriphClkInit->CecClockSelection);
  16797. 80077e2: 4b6c ldr r3, [pc, #432] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16798. 80077e4: 6d5b ldr r3, [r3, #84] @ 0x54
  16799. 80077e6: f423 0140 bic.w r1, r3, #12582912 @ 0xc00000
  16800. 80077ea: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16801. 80077ee: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  16802. 80077f2: 4a68 ldr r2, [pc, #416] @ (8007994 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  16803. 80077f4: 430b orrs r3, r1
  16804. 80077f6: 6553 str r3, [r2, #84] @ 0x54
  16805. }
  16806. /*---------------------------- PLL2 configuration -------------------------------*/
  16807. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVP) == RCC_PERIPHCLK_PLL2_DIVP)
  16808. 80077f8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16809. 80077fc: e9d3 2300 ldrd r2, r3, [r3]
  16810. 8007800: 2100 movs r1, #0
  16811. 8007802: 62b9 str r1, [r7, #40] @ 0x28
  16812. 8007804: f003 0301 and.w r3, r3, #1
  16813. 8007808: 62fb str r3, [r7, #44] @ 0x2c
  16814. 800780a: e9d7 120a ldrd r1, r2, [r7, #40] @ 0x28
  16815. 800780e: 460b mov r3, r1
  16816. 8007810: 4313 orrs r3, r2
  16817. 8007812: d011 beq.n 8007838 <HAL_RCCEx_PeriphCLKConfig+0x127c>
  16818. {
  16819. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  16820. 8007814: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16821. 8007818: 3308 adds r3, #8
  16822. 800781a: 2100 movs r1, #0
  16823. 800781c: 4618 mov r0, r3
  16824. 800781e: f000 fb79 bl 8007f14 <RCCEx_PLL2_Config>
  16825. 8007822: 4603 mov r3, r0
  16826. 8007824: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16827. if (ret == HAL_OK)
  16828. 8007828: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16829. 800782c: 2b00 cmp r3, #0
  16830. 800782e: d003 beq.n 8007838 <HAL_RCCEx_PeriphCLKConfig+0x127c>
  16831. /*Nothing to do*/
  16832. }
  16833. else
  16834. {
  16835. /* set overall return value */
  16836. status = ret;
  16837. 8007830: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16838. 8007834: f887 311e strb.w r3, [r7, #286] @ 0x11e
  16839. }
  16840. }
  16841. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVQ) == RCC_PERIPHCLK_PLL2_DIVQ)
  16842. 8007838: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16843. 800783c: e9d3 2300 ldrd r2, r3, [r3]
  16844. 8007840: 2100 movs r1, #0
  16845. 8007842: 6239 str r1, [r7, #32]
  16846. 8007844: f003 0302 and.w r3, r3, #2
  16847. 8007848: 627b str r3, [r7, #36] @ 0x24
  16848. 800784a: e9d7 1208 ldrd r1, r2, [r7, #32]
  16849. 800784e: 460b mov r3, r1
  16850. 8007850: 4313 orrs r3, r2
  16851. 8007852: d011 beq.n 8007878 <HAL_RCCEx_PeriphCLKConfig+0x12bc>
  16852. {
  16853. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  16854. 8007854: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16855. 8007858: 3308 adds r3, #8
  16856. 800785a: 2101 movs r1, #1
  16857. 800785c: 4618 mov r0, r3
  16858. 800785e: f000 fb59 bl 8007f14 <RCCEx_PLL2_Config>
  16859. 8007862: 4603 mov r3, r0
  16860. 8007864: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16861. if (ret == HAL_OK)
  16862. 8007868: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16863. 800786c: 2b00 cmp r3, #0
  16864. 800786e: d003 beq.n 8007878 <HAL_RCCEx_PeriphCLKConfig+0x12bc>
  16865. /*Nothing to do*/
  16866. }
  16867. else
  16868. {
  16869. /* set overall return value */
  16870. status = ret;
  16871. 8007870: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16872. 8007874: f887 311e strb.w r3, [r7, #286] @ 0x11e
  16873. }
  16874. }
  16875. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVR) == RCC_PERIPHCLK_PLL2_DIVR)
  16876. 8007878: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16877. 800787c: e9d3 2300 ldrd r2, r3, [r3]
  16878. 8007880: 2100 movs r1, #0
  16879. 8007882: 61b9 str r1, [r7, #24]
  16880. 8007884: f003 0304 and.w r3, r3, #4
  16881. 8007888: 61fb str r3, [r7, #28]
  16882. 800788a: e9d7 1206 ldrd r1, r2, [r7, #24]
  16883. 800788e: 460b mov r3, r1
  16884. 8007890: 4313 orrs r3, r2
  16885. 8007892: d011 beq.n 80078b8 <HAL_RCCEx_PeriphCLKConfig+0x12fc>
  16886. {
  16887. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  16888. 8007894: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16889. 8007898: 3308 adds r3, #8
  16890. 800789a: 2102 movs r1, #2
  16891. 800789c: 4618 mov r0, r3
  16892. 800789e: f000 fb39 bl 8007f14 <RCCEx_PLL2_Config>
  16893. 80078a2: 4603 mov r3, r0
  16894. 80078a4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16895. if (ret == HAL_OK)
  16896. 80078a8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16897. 80078ac: 2b00 cmp r3, #0
  16898. 80078ae: d003 beq.n 80078b8 <HAL_RCCEx_PeriphCLKConfig+0x12fc>
  16899. /*Nothing to do*/
  16900. }
  16901. else
  16902. {
  16903. /* set overall return value */
  16904. status = ret;
  16905. 80078b0: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16906. 80078b4: f887 311e strb.w r3, [r7, #286] @ 0x11e
  16907. }
  16908. }
  16909. /*---------------------------- PLL3 configuration -------------------------------*/
  16910. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVP) == RCC_PERIPHCLK_PLL3_DIVP)
  16911. 80078b8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16912. 80078bc: e9d3 2300 ldrd r2, r3, [r3]
  16913. 80078c0: 2100 movs r1, #0
  16914. 80078c2: 6139 str r1, [r7, #16]
  16915. 80078c4: f003 0308 and.w r3, r3, #8
  16916. 80078c8: 617b str r3, [r7, #20]
  16917. 80078ca: e9d7 1204 ldrd r1, r2, [r7, #16]
  16918. 80078ce: 460b mov r3, r1
  16919. 80078d0: 4313 orrs r3, r2
  16920. 80078d2: d011 beq.n 80078f8 <HAL_RCCEx_PeriphCLKConfig+0x133c>
  16921. {
  16922. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  16923. 80078d4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16924. 80078d8: 3328 adds r3, #40 @ 0x28
  16925. 80078da: 2100 movs r1, #0
  16926. 80078dc: 4618 mov r0, r3
  16927. 80078de: f000 fbcb bl 8008078 <RCCEx_PLL3_Config>
  16928. 80078e2: 4603 mov r3, r0
  16929. 80078e4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16930. if (ret == HAL_OK)
  16931. 80078e8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16932. 80078ec: 2b00 cmp r3, #0
  16933. 80078ee: d003 beq.n 80078f8 <HAL_RCCEx_PeriphCLKConfig+0x133c>
  16934. /*Nothing to do*/
  16935. }
  16936. else
  16937. {
  16938. /* set overall return value */
  16939. status = ret;
  16940. 80078f0: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16941. 80078f4: f887 311e strb.w r3, [r7, #286] @ 0x11e
  16942. }
  16943. }
  16944. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVQ) == RCC_PERIPHCLK_PLL3_DIVQ)
  16945. 80078f8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16946. 80078fc: e9d3 2300 ldrd r2, r3, [r3]
  16947. 8007900: 2100 movs r1, #0
  16948. 8007902: 60b9 str r1, [r7, #8]
  16949. 8007904: f003 0310 and.w r3, r3, #16
  16950. 8007908: 60fb str r3, [r7, #12]
  16951. 800790a: e9d7 1202 ldrd r1, r2, [r7, #8]
  16952. 800790e: 460b mov r3, r1
  16953. 8007910: 4313 orrs r3, r2
  16954. 8007912: d011 beq.n 8007938 <HAL_RCCEx_PeriphCLKConfig+0x137c>
  16955. {
  16956. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  16957. 8007914: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16958. 8007918: 3328 adds r3, #40 @ 0x28
  16959. 800791a: 2101 movs r1, #1
  16960. 800791c: 4618 mov r0, r3
  16961. 800791e: f000 fbab bl 8008078 <RCCEx_PLL3_Config>
  16962. 8007922: 4603 mov r3, r0
  16963. 8007924: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16964. if (ret == HAL_OK)
  16965. 8007928: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16966. 800792c: 2b00 cmp r3, #0
  16967. 800792e: d003 beq.n 8007938 <HAL_RCCEx_PeriphCLKConfig+0x137c>
  16968. /*Nothing to do*/
  16969. }
  16970. else
  16971. {
  16972. /* set overall return value */
  16973. status = ret;
  16974. 8007930: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  16975. 8007934: f887 311e strb.w r3, [r7, #286] @ 0x11e
  16976. }
  16977. }
  16978. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVR) == RCC_PERIPHCLK_PLL3_DIVR)
  16979. 8007938: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16980. 800793c: e9d3 2300 ldrd r2, r3, [r3]
  16981. 8007940: 2100 movs r1, #0
  16982. 8007942: 6039 str r1, [r7, #0]
  16983. 8007944: f003 0320 and.w r3, r3, #32
  16984. 8007948: 607b str r3, [r7, #4]
  16985. 800794a: e9d7 1200 ldrd r1, r2, [r7]
  16986. 800794e: 460b mov r3, r1
  16987. 8007950: 4313 orrs r3, r2
  16988. 8007952: d011 beq.n 8007978 <HAL_RCCEx_PeriphCLKConfig+0x13bc>
  16989. {
  16990. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  16991. 8007954: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  16992. 8007958: 3328 adds r3, #40 @ 0x28
  16993. 800795a: 2102 movs r1, #2
  16994. 800795c: 4618 mov r0, r3
  16995. 800795e: f000 fb8b bl 8008078 <RCCEx_PLL3_Config>
  16996. 8007962: 4603 mov r3, r0
  16997. 8007964: f887 311f strb.w r3, [r7, #287] @ 0x11f
  16998. if (ret == HAL_OK)
  16999. 8007968: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  17000. 800796c: 2b00 cmp r3, #0
  17001. 800796e: d003 beq.n 8007978 <HAL_RCCEx_PeriphCLKConfig+0x13bc>
  17002. /*Nothing to do*/
  17003. }
  17004. else
  17005. {
  17006. /* set overall return value */
  17007. status = ret;
  17008. 8007970: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  17009. 8007974: f887 311e strb.w r3, [r7, #286] @ 0x11e
  17010. }
  17011. }
  17012. if (status == HAL_OK)
  17013. 8007978: f897 311e ldrb.w r3, [r7, #286] @ 0x11e
  17014. 800797c: 2b00 cmp r3, #0
  17015. 800797e: d101 bne.n 8007984 <HAL_RCCEx_PeriphCLKConfig+0x13c8>
  17016. {
  17017. return HAL_OK;
  17018. 8007980: 2300 movs r3, #0
  17019. 8007982: e000 b.n 8007986 <HAL_RCCEx_PeriphCLKConfig+0x13ca>
  17020. }
  17021. return HAL_ERROR;
  17022. 8007984: 2301 movs r3, #1
  17023. }
  17024. 8007986: 4618 mov r0, r3
  17025. 8007988: f507 7790 add.w r7, r7, #288 @ 0x120
  17026. 800798c: 46bd mov sp, r7
  17027. 800798e: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc}
  17028. 8007992: bf00 nop
  17029. 8007994: 58024400 .word 0x58024400
  17030. 08007998 <HAL_RCCEx_GetD3PCLK1Freq>:
  17031. * @note Each time D3PCLK1 changes, this function must be called to update the
  17032. * right D3PCLK1 value. Otherwise, any configuration based on this function will be incorrect.
  17033. * @retval D3PCLK1 frequency
  17034. */
  17035. uint32_t HAL_RCCEx_GetD3PCLK1Freq(void)
  17036. {
  17037. 8007998: b580 push {r7, lr}
  17038. 800799a: af00 add r7, sp, #0
  17039. #if defined(RCC_D3CFGR_D3PPRE)
  17040. /* Get HCLK source and Compute D3PCLK1 frequency ---------------------------*/
  17041. return (HAL_RCC_GetHCLKFreq() >> (D1CorePrescTable[(RCC->D3CFGR & RCC_D3CFGR_D3PPRE) >> RCC_D3CFGR_D3PPRE_Pos] & 0x1FU));
  17042. 800799c: f7fe fd70 bl 8006480 <HAL_RCC_GetHCLKFreq>
  17043. 80079a0: 4602 mov r2, r0
  17044. 80079a2: 4b06 ldr r3, [pc, #24] @ (80079bc <HAL_RCCEx_GetD3PCLK1Freq+0x24>)
  17045. 80079a4: 6a1b ldr r3, [r3, #32]
  17046. 80079a6: 091b lsrs r3, r3, #4
  17047. 80079a8: f003 0307 and.w r3, r3, #7
  17048. 80079ac: 4904 ldr r1, [pc, #16] @ (80079c0 <HAL_RCCEx_GetD3PCLK1Freq+0x28>)
  17049. 80079ae: 5ccb ldrb r3, [r1, r3]
  17050. 80079b0: f003 031f and.w r3, r3, #31
  17051. 80079b4: fa22 f303 lsr.w r3, r2, r3
  17052. #else
  17053. /* Get HCLK source and Compute D3PCLK1 frequency ---------------------------*/
  17054. return (HAL_RCC_GetHCLKFreq() >> (D1CorePrescTable[(RCC->SRDCFGR & RCC_SRDCFGR_SRDPPRE) >> RCC_SRDCFGR_SRDPPRE_Pos] & 0x1FU));
  17055. #endif
  17056. }
  17057. 80079b8: 4618 mov r0, r3
  17058. 80079ba: bd80 pop {r7, pc}
  17059. 80079bc: 58024400 .word 0x58024400
  17060. 80079c0: 080100b0 .word 0x080100b0
  17061. 080079c4 <HAL_RCCEx_GetPLL2ClockFreq>:
  17062. * right PLL2CLK value. Otherwise, any configuration based on this function will be incorrect.
  17063. * @param PLL2_Clocks structure.
  17064. * @retval None
  17065. */
  17066. void HAL_RCCEx_GetPLL2ClockFreq(PLL2_ClocksTypeDef *PLL2_Clocks)
  17067. {
  17068. 80079c4: b480 push {r7}
  17069. 80079c6: b089 sub sp, #36 @ 0x24
  17070. 80079c8: af00 add r7, sp, #0
  17071. 80079ca: 6078 str r0, [r7, #4]
  17072. float_t fracn2, pll2vco;
  17073. /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLL2M) * PLL2N
  17074. PLL2xCLK = PLL2_VCO / PLL2x
  17075. */
  17076. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  17077. 80079cc: 4ba1 ldr r3, [pc, #644] @ (8007c54 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  17078. 80079ce: 6a9b ldr r3, [r3, #40] @ 0x28
  17079. 80079d0: f003 0303 and.w r3, r3, #3
  17080. 80079d4: 61bb str r3, [r7, #24]
  17081. pll2m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM2) >> 12);
  17082. 80079d6: 4b9f ldr r3, [pc, #636] @ (8007c54 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  17083. 80079d8: 6a9b ldr r3, [r3, #40] @ 0x28
  17084. 80079da: 0b1b lsrs r3, r3, #12
  17085. 80079dc: f003 033f and.w r3, r3, #63 @ 0x3f
  17086. 80079e0: 617b str r3, [r7, #20]
  17087. pll2fracen = (RCC->PLLCFGR & RCC_PLLCFGR_PLL2FRACEN) >> RCC_PLLCFGR_PLL2FRACEN_Pos;
  17088. 80079e2: 4b9c ldr r3, [pc, #624] @ (8007c54 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  17089. 80079e4: 6adb ldr r3, [r3, #44] @ 0x2c
  17090. 80079e6: 091b lsrs r3, r3, #4
  17091. 80079e8: f003 0301 and.w r3, r3, #1
  17092. 80079ec: 613b str r3, [r7, #16]
  17093. fracn2 = (float_t)(uint32_t)(pll2fracen * ((RCC->PLL2FRACR & RCC_PLL2FRACR_FRACN2) >> 3));
  17094. 80079ee: 4b99 ldr r3, [pc, #612] @ (8007c54 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  17095. 80079f0: 6bdb ldr r3, [r3, #60] @ 0x3c
  17096. 80079f2: 08db lsrs r3, r3, #3
  17097. 80079f4: f3c3 030c ubfx r3, r3, #0, #13
  17098. 80079f8: 693a ldr r2, [r7, #16]
  17099. 80079fa: fb02 f303 mul.w r3, r2, r3
  17100. 80079fe: ee07 3a90 vmov s15, r3
  17101. 8007a02: eef8 7a67 vcvt.f32.u32 s15, s15
  17102. 8007a06: edc7 7a03 vstr s15, [r7, #12]
  17103. if (pll2m != 0U)
  17104. 8007a0a: 697b ldr r3, [r7, #20]
  17105. 8007a0c: 2b00 cmp r3, #0
  17106. 8007a0e: f000 8111 beq.w 8007c34 <HAL_RCCEx_GetPLL2ClockFreq+0x270>
  17107. {
  17108. switch (pllsource)
  17109. 8007a12: 69bb ldr r3, [r7, #24]
  17110. 8007a14: 2b02 cmp r3, #2
  17111. 8007a16: f000 8083 beq.w 8007b20 <HAL_RCCEx_GetPLL2ClockFreq+0x15c>
  17112. 8007a1a: 69bb ldr r3, [r7, #24]
  17113. 8007a1c: 2b02 cmp r3, #2
  17114. 8007a1e: f200 80a1 bhi.w 8007b64 <HAL_RCCEx_GetPLL2ClockFreq+0x1a0>
  17115. 8007a22: 69bb ldr r3, [r7, #24]
  17116. 8007a24: 2b00 cmp r3, #0
  17117. 8007a26: d003 beq.n 8007a30 <HAL_RCCEx_GetPLL2ClockFreq+0x6c>
  17118. 8007a28: 69bb ldr r3, [r7, #24]
  17119. 8007a2a: 2b01 cmp r3, #1
  17120. 8007a2c: d056 beq.n 8007adc <HAL_RCCEx_GetPLL2ClockFreq+0x118>
  17121. 8007a2e: e099 b.n 8007b64 <HAL_RCCEx_GetPLL2ClockFreq+0x1a0>
  17122. {
  17123. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  17124. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  17125. 8007a30: 4b88 ldr r3, [pc, #544] @ (8007c54 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  17126. 8007a32: 681b ldr r3, [r3, #0]
  17127. 8007a34: f003 0320 and.w r3, r3, #32
  17128. 8007a38: 2b00 cmp r3, #0
  17129. 8007a3a: d02d beq.n 8007a98 <HAL_RCCEx_GetPLL2ClockFreq+0xd4>
  17130. {
  17131. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  17132. 8007a3c: 4b85 ldr r3, [pc, #532] @ (8007c54 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  17133. 8007a3e: 681b ldr r3, [r3, #0]
  17134. 8007a40: 08db lsrs r3, r3, #3
  17135. 8007a42: f003 0303 and.w r3, r3, #3
  17136. 8007a46: 4a84 ldr r2, [pc, #528] @ (8007c58 <HAL_RCCEx_GetPLL2ClockFreq+0x294>)
  17137. 8007a48: fa22 f303 lsr.w r3, r2, r3
  17138. 8007a4c: 60bb str r3, [r7, #8]
  17139. pll2vco = ((float_t)hsivalue / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  17140. 8007a4e: 68bb ldr r3, [r7, #8]
  17141. 8007a50: ee07 3a90 vmov s15, r3
  17142. 8007a54: eef8 6a67 vcvt.f32.u32 s13, s15
  17143. 8007a58: 697b ldr r3, [r7, #20]
  17144. 8007a5a: ee07 3a90 vmov s15, r3
  17145. 8007a5e: eef8 7a67 vcvt.f32.u32 s15, s15
  17146. 8007a62: ee86 7aa7 vdiv.f32 s14, s13, s15
  17147. 8007a66: 4b7b ldr r3, [pc, #492] @ (8007c54 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  17148. 8007a68: 6b9b ldr r3, [r3, #56] @ 0x38
  17149. 8007a6a: f3c3 0308 ubfx r3, r3, #0, #9
  17150. 8007a6e: ee07 3a90 vmov s15, r3
  17151. 8007a72: eef8 6a67 vcvt.f32.u32 s13, s15
  17152. 8007a76: ed97 6a03 vldr s12, [r7, #12]
  17153. 8007a7a: eddf 5a78 vldr s11, [pc, #480] @ 8007c5c <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  17154. 8007a7e: eec6 7a25 vdiv.f32 s15, s12, s11
  17155. 8007a82: ee76 7aa7 vadd.f32 s15, s13, s15
  17156. 8007a86: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  17157. 8007a8a: ee77 7aa6 vadd.f32 s15, s15, s13
  17158. 8007a8e: ee67 7a27 vmul.f32 s15, s14, s15
  17159. 8007a92: edc7 7a07 vstr s15, [r7, #28]
  17160. }
  17161. else
  17162. {
  17163. pll2vco = ((float_t)HSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  17164. }
  17165. break;
  17166. 8007a96: e087 b.n 8007ba8 <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  17167. pll2vco = ((float_t)HSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  17168. 8007a98: 697b ldr r3, [r7, #20]
  17169. 8007a9a: ee07 3a90 vmov s15, r3
  17170. 8007a9e: eef8 7a67 vcvt.f32.u32 s15, s15
  17171. 8007aa2: eddf 6a6f vldr s13, [pc, #444] @ 8007c60 <HAL_RCCEx_GetPLL2ClockFreq+0x29c>
  17172. 8007aa6: ee86 7aa7 vdiv.f32 s14, s13, s15
  17173. 8007aaa: 4b6a ldr r3, [pc, #424] @ (8007c54 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  17174. 8007aac: 6b9b ldr r3, [r3, #56] @ 0x38
  17175. 8007aae: f3c3 0308 ubfx r3, r3, #0, #9
  17176. 8007ab2: ee07 3a90 vmov s15, r3
  17177. 8007ab6: eef8 6a67 vcvt.f32.u32 s13, s15
  17178. 8007aba: ed97 6a03 vldr s12, [r7, #12]
  17179. 8007abe: eddf 5a67 vldr s11, [pc, #412] @ 8007c5c <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  17180. 8007ac2: eec6 7a25 vdiv.f32 s15, s12, s11
  17181. 8007ac6: ee76 7aa7 vadd.f32 s15, s13, s15
  17182. 8007aca: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  17183. 8007ace: ee77 7aa6 vadd.f32 s15, s15, s13
  17184. 8007ad2: ee67 7a27 vmul.f32 s15, s14, s15
  17185. 8007ad6: edc7 7a07 vstr s15, [r7, #28]
  17186. break;
  17187. 8007ada: e065 b.n 8007ba8 <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  17188. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  17189. pll2vco = ((float_t)CSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  17190. 8007adc: 697b ldr r3, [r7, #20]
  17191. 8007ade: ee07 3a90 vmov s15, r3
  17192. 8007ae2: eef8 7a67 vcvt.f32.u32 s15, s15
  17193. 8007ae6: eddf 6a5f vldr s13, [pc, #380] @ 8007c64 <HAL_RCCEx_GetPLL2ClockFreq+0x2a0>
  17194. 8007aea: ee86 7aa7 vdiv.f32 s14, s13, s15
  17195. 8007aee: 4b59 ldr r3, [pc, #356] @ (8007c54 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  17196. 8007af0: 6b9b ldr r3, [r3, #56] @ 0x38
  17197. 8007af2: f3c3 0308 ubfx r3, r3, #0, #9
  17198. 8007af6: ee07 3a90 vmov s15, r3
  17199. 8007afa: eef8 6a67 vcvt.f32.u32 s13, s15
  17200. 8007afe: ed97 6a03 vldr s12, [r7, #12]
  17201. 8007b02: eddf 5a56 vldr s11, [pc, #344] @ 8007c5c <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  17202. 8007b06: eec6 7a25 vdiv.f32 s15, s12, s11
  17203. 8007b0a: ee76 7aa7 vadd.f32 s15, s13, s15
  17204. 8007b0e: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  17205. 8007b12: ee77 7aa6 vadd.f32 s15, s15, s13
  17206. 8007b16: ee67 7a27 vmul.f32 s15, s14, s15
  17207. 8007b1a: edc7 7a07 vstr s15, [r7, #28]
  17208. break;
  17209. 8007b1e: e043 b.n 8007ba8 <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  17210. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  17211. pll2vco = ((float_t)HSE_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  17212. 8007b20: 697b ldr r3, [r7, #20]
  17213. 8007b22: ee07 3a90 vmov s15, r3
  17214. 8007b26: eef8 7a67 vcvt.f32.u32 s15, s15
  17215. 8007b2a: eddf 6a4f vldr s13, [pc, #316] @ 8007c68 <HAL_RCCEx_GetPLL2ClockFreq+0x2a4>
  17216. 8007b2e: ee86 7aa7 vdiv.f32 s14, s13, s15
  17217. 8007b32: 4b48 ldr r3, [pc, #288] @ (8007c54 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  17218. 8007b34: 6b9b ldr r3, [r3, #56] @ 0x38
  17219. 8007b36: f3c3 0308 ubfx r3, r3, #0, #9
  17220. 8007b3a: ee07 3a90 vmov s15, r3
  17221. 8007b3e: eef8 6a67 vcvt.f32.u32 s13, s15
  17222. 8007b42: ed97 6a03 vldr s12, [r7, #12]
  17223. 8007b46: eddf 5a45 vldr s11, [pc, #276] @ 8007c5c <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  17224. 8007b4a: eec6 7a25 vdiv.f32 s15, s12, s11
  17225. 8007b4e: ee76 7aa7 vadd.f32 s15, s13, s15
  17226. 8007b52: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  17227. 8007b56: ee77 7aa6 vadd.f32 s15, s15, s13
  17228. 8007b5a: ee67 7a27 vmul.f32 s15, s14, s15
  17229. 8007b5e: edc7 7a07 vstr s15, [r7, #28]
  17230. break;
  17231. 8007b62: e021 b.n 8007ba8 <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  17232. default:
  17233. pll2vco = ((float_t)CSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  17234. 8007b64: 697b ldr r3, [r7, #20]
  17235. 8007b66: ee07 3a90 vmov s15, r3
  17236. 8007b6a: eef8 7a67 vcvt.f32.u32 s15, s15
  17237. 8007b6e: eddf 6a3d vldr s13, [pc, #244] @ 8007c64 <HAL_RCCEx_GetPLL2ClockFreq+0x2a0>
  17238. 8007b72: ee86 7aa7 vdiv.f32 s14, s13, s15
  17239. 8007b76: 4b37 ldr r3, [pc, #220] @ (8007c54 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  17240. 8007b78: 6b9b ldr r3, [r3, #56] @ 0x38
  17241. 8007b7a: f3c3 0308 ubfx r3, r3, #0, #9
  17242. 8007b7e: ee07 3a90 vmov s15, r3
  17243. 8007b82: eef8 6a67 vcvt.f32.u32 s13, s15
  17244. 8007b86: ed97 6a03 vldr s12, [r7, #12]
  17245. 8007b8a: eddf 5a34 vldr s11, [pc, #208] @ 8007c5c <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  17246. 8007b8e: eec6 7a25 vdiv.f32 s15, s12, s11
  17247. 8007b92: ee76 7aa7 vadd.f32 s15, s13, s15
  17248. 8007b96: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  17249. 8007b9a: ee77 7aa6 vadd.f32 s15, s15, s13
  17250. 8007b9e: ee67 7a27 vmul.f32 s15, s14, s15
  17251. 8007ba2: edc7 7a07 vstr s15, [r7, #28]
  17252. break;
  17253. 8007ba6: bf00 nop
  17254. }
  17255. PLL2_Clocks->PLL2_P_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_P2) >> 9) + (float_t)1)) ;
  17256. 8007ba8: 4b2a ldr r3, [pc, #168] @ (8007c54 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  17257. 8007baa: 6b9b ldr r3, [r3, #56] @ 0x38
  17258. 8007bac: 0a5b lsrs r3, r3, #9
  17259. 8007bae: f003 037f and.w r3, r3, #127 @ 0x7f
  17260. 8007bb2: ee07 3a90 vmov s15, r3
  17261. 8007bb6: eef8 7a67 vcvt.f32.u32 s15, s15
  17262. 8007bba: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  17263. 8007bbe: ee37 7a87 vadd.f32 s14, s15, s14
  17264. 8007bc2: edd7 6a07 vldr s13, [r7, #28]
  17265. 8007bc6: eec6 7a87 vdiv.f32 s15, s13, s14
  17266. 8007bca: eefc 7ae7 vcvt.u32.f32 s15, s15
  17267. 8007bce: ee17 2a90 vmov r2, s15
  17268. 8007bd2: 687b ldr r3, [r7, #4]
  17269. 8007bd4: 601a str r2, [r3, #0]
  17270. PLL2_Clocks->PLL2_Q_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_Q2) >> 16) + (float_t)1)) ;
  17271. 8007bd6: 4b1f ldr r3, [pc, #124] @ (8007c54 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  17272. 8007bd8: 6b9b ldr r3, [r3, #56] @ 0x38
  17273. 8007bda: 0c1b lsrs r3, r3, #16
  17274. 8007bdc: f003 037f and.w r3, r3, #127 @ 0x7f
  17275. 8007be0: ee07 3a90 vmov s15, r3
  17276. 8007be4: eef8 7a67 vcvt.f32.u32 s15, s15
  17277. 8007be8: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  17278. 8007bec: ee37 7a87 vadd.f32 s14, s15, s14
  17279. 8007bf0: edd7 6a07 vldr s13, [r7, #28]
  17280. 8007bf4: eec6 7a87 vdiv.f32 s15, s13, s14
  17281. 8007bf8: eefc 7ae7 vcvt.u32.f32 s15, s15
  17282. 8007bfc: ee17 2a90 vmov r2, s15
  17283. 8007c00: 687b ldr r3, [r7, #4]
  17284. 8007c02: 605a str r2, [r3, #4]
  17285. PLL2_Clocks->PLL2_R_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_R2) >> 24) + (float_t)1)) ;
  17286. 8007c04: 4b13 ldr r3, [pc, #76] @ (8007c54 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  17287. 8007c06: 6b9b ldr r3, [r3, #56] @ 0x38
  17288. 8007c08: 0e1b lsrs r3, r3, #24
  17289. 8007c0a: f003 037f and.w r3, r3, #127 @ 0x7f
  17290. 8007c0e: ee07 3a90 vmov s15, r3
  17291. 8007c12: eef8 7a67 vcvt.f32.u32 s15, s15
  17292. 8007c16: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  17293. 8007c1a: ee37 7a87 vadd.f32 s14, s15, s14
  17294. 8007c1e: edd7 6a07 vldr s13, [r7, #28]
  17295. 8007c22: eec6 7a87 vdiv.f32 s15, s13, s14
  17296. 8007c26: eefc 7ae7 vcvt.u32.f32 s15, s15
  17297. 8007c2a: ee17 2a90 vmov r2, s15
  17298. 8007c2e: 687b ldr r3, [r7, #4]
  17299. 8007c30: 609a str r2, [r3, #8]
  17300. {
  17301. PLL2_Clocks->PLL2_P_Frequency = 0U;
  17302. PLL2_Clocks->PLL2_Q_Frequency = 0U;
  17303. PLL2_Clocks->PLL2_R_Frequency = 0U;
  17304. }
  17305. }
  17306. 8007c32: e008 b.n 8007c46 <HAL_RCCEx_GetPLL2ClockFreq+0x282>
  17307. PLL2_Clocks->PLL2_P_Frequency = 0U;
  17308. 8007c34: 687b ldr r3, [r7, #4]
  17309. 8007c36: 2200 movs r2, #0
  17310. 8007c38: 601a str r2, [r3, #0]
  17311. PLL2_Clocks->PLL2_Q_Frequency = 0U;
  17312. 8007c3a: 687b ldr r3, [r7, #4]
  17313. 8007c3c: 2200 movs r2, #0
  17314. 8007c3e: 605a str r2, [r3, #4]
  17315. PLL2_Clocks->PLL2_R_Frequency = 0U;
  17316. 8007c40: 687b ldr r3, [r7, #4]
  17317. 8007c42: 2200 movs r2, #0
  17318. 8007c44: 609a str r2, [r3, #8]
  17319. }
  17320. 8007c46: bf00 nop
  17321. 8007c48: 3724 adds r7, #36 @ 0x24
  17322. 8007c4a: 46bd mov sp, r7
  17323. 8007c4c: f85d 7b04 ldr.w r7, [sp], #4
  17324. 8007c50: 4770 bx lr
  17325. 8007c52: bf00 nop
  17326. 8007c54: 58024400 .word 0x58024400
  17327. 8007c58: 03d09000 .word 0x03d09000
  17328. 8007c5c: 46000000 .word 0x46000000
  17329. 8007c60: 4c742400 .word 0x4c742400
  17330. 8007c64: 4a742400 .word 0x4a742400
  17331. 8007c68: 4bbebc20 .word 0x4bbebc20
  17332. 08007c6c <HAL_RCCEx_GetPLL3ClockFreq>:
  17333. * right PLL3CLK value. Otherwise, any configuration based on this function will be incorrect.
  17334. * @param PLL3_Clocks structure.
  17335. * @retval None
  17336. */
  17337. void HAL_RCCEx_GetPLL3ClockFreq(PLL3_ClocksTypeDef *PLL3_Clocks)
  17338. {
  17339. 8007c6c: b480 push {r7}
  17340. 8007c6e: b089 sub sp, #36 @ 0x24
  17341. 8007c70: af00 add r7, sp, #0
  17342. 8007c72: 6078 str r0, [r7, #4]
  17343. float_t fracn3, pll3vco;
  17344. /* PLL3_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLL3M) * PLL3N
  17345. PLL3xCLK = PLL3_VCO / PLLxR
  17346. */
  17347. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  17348. 8007c74: 4ba1 ldr r3, [pc, #644] @ (8007efc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  17349. 8007c76: 6a9b ldr r3, [r3, #40] @ 0x28
  17350. 8007c78: f003 0303 and.w r3, r3, #3
  17351. 8007c7c: 61bb str r3, [r7, #24]
  17352. pll3m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM3) >> 20) ;
  17353. 8007c7e: 4b9f ldr r3, [pc, #636] @ (8007efc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  17354. 8007c80: 6a9b ldr r3, [r3, #40] @ 0x28
  17355. 8007c82: 0d1b lsrs r3, r3, #20
  17356. 8007c84: f003 033f and.w r3, r3, #63 @ 0x3f
  17357. 8007c88: 617b str r3, [r7, #20]
  17358. pll3fracen = (RCC->PLLCFGR & RCC_PLLCFGR_PLL3FRACEN) >> RCC_PLLCFGR_PLL3FRACEN_Pos;
  17359. 8007c8a: 4b9c ldr r3, [pc, #624] @ (8007efc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  17360. 8007c8c: 6adb ldr r3, [r3, #44] @ 0x2c
  17361. 8007c8e: 0a1b lsrs r3, r3, #8
  17362. 8007c90: f003 0301 and.w r3, r3, #1
  17363. 8007c94: 613b str r3, [r7, #16]
  17364. fracn3 = (float_t)(uint32_t)(pll3fracen * ((RCC->PLL3FRACR & RCC_PLL3FRACR_FRACN3) >> 3));
  17365. 8007c96: 4b99 ldr r3, [pc, #612] @ (8007efc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  17366. 8007c98: 6c5b ldr r3, [r3, #68] @ 0x44
  17367. 8007c9a: 08db lsrs r3, r3, #3
  17368. 8007c9c: f3c3 030c ubfx r3, r3, #0, #13
  17369. 8007ca0: 693a ldr r2, [r7, #16]
  17370. 8007ca2: fb02 f303 mul.w r3, r2, r3
  17371. 8007ca6: ee07 3a90 vmov s15, r3
  17372. 8007caa: eef8 7a67 vcvt.f32.u32 s15, s15
  17373. 8007cae: edc7 7a03 vstr s15, [r7, #12]
  17374. if (pll3m != 0U)
  17375. 8007cb2: 697b ldr r3, [r7, #20]
  17376. 8007cb4: 2b00 cmp r3, #0
  17377. 8007cb6: f000 8111 beq.w 8007edc <HAL_RCCEx_GetPLL3ClockFreq+0x270>
  17378. {
  17379. switch (pllsource)
  17380. 8007cba: 69bb ldr r3, [r7, #24]
  17381. 8007cbc: 2b02 cmp r3, #2
  17382. 8007cbe: f000 8083 beq.w 8007dc8 <HAL_RCCEx_GetPLL3ClockFreq+0x15c>
  17383. 8007cc2: 69bb ldr r3, [r7, #24]
  17384. 8007cc4: 2b02 cmp r3, #2
  17385. 8007cc6: f200 80a1 bhi.w 8007e0c <HAL_RCCEx_GetPLL3ClockFreq+0x1a0>
  17386. 8007cca: 69bb ldr r3, [r7, #24]
  17387. 8007ccc: 2b00 cmp r3, #0
  17388. 8007cce: d003 beq.n 8007cd8 <HAL_RCCEx_GetPLL3ClockFreq+0x6c>
  17389. 8007cd0: 69bb ldr r3, [r7, #24]
  17390. 8007cd2: 2b01 cmp r3, #1
  17391. 8007cd4: d056 beq.n 8007d84 <HAL_RCCEx_GetPLL3ClockFreq+0x118>
  17392. 8007cd6: e099 b.n 8007e0c <HAL_RCCEx_GetPLL3ClockFreq+0x1a0>
  17393. {
  17394. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  17395. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  17396. 8007cd8: 4b88 ldr r3, [pc, #544] @ (8007efc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  17397. 8007cda: 681b ldr r3, [r3, #0]
  17398. 8007cdc: f003 0320 and.w r3, r3, #32
  17399. 8007ce0: 2b00 cmp r3, #0
  17400. 8007ce2: d02d beq.n 8007d40 <HAL_RCCEx_GetPLL3ClockFreq+0xd4>
  17401. {
  17402. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  17403. 8007ce4: 4b85 ldr r3, [pc, #532] @ (8007efc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  17404. 8007ce6: 681b ldr r3, [r3, #0]
  17405. 8007ce8: 08db lsrs r3, r3, #3
  17406. 8007cea: f003 0303 and.w r3, r3, #3
  17407. 8007cee: 4a84 ldr r2, [pc, #528] @ (8007f00 <HAL_RCCEx_GetPLL3ClockFreq+0x294>)
  17408. 8007cf0: fa22 f303 lsr.w r3, r2, r3
  17409. 8007cf4: 60bb str r3, [r7, #8]
  17410. pll3vco = ((float_t)hsivalue / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  17411. 8007cf6: 68bb ldr r3, [r7, #8]
  17412. 8007cf8: ee07 3a90 vmov s15, r3
  17413. 8007cfc: eef8 6a67 vcvt.f32.u32 s13, s15
  17414. 8007d00: 697b ldr r3, [r7, #20]
  17415. 8007d02: ee07 3a90 vmov s15, r3
  17416. 8007d06: eef8 7a67 vcvt.f32.u32 s15, s15
  17417. 8007d0a: ee86 7aa7 vdiv.f32 s14, s13, s15
  17418. 8007d0e: 4b7b ldr r3, [pc, #492] @ (8007efc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  17419. 8007d10: 6c1b ldr r3, [r3, #64] @ 0x40
  17420. 8007d12: f3c3 0308 ubfx r3, r3, #0, #9
  17421. 8007d16: ee07 3a90 vmov s15, r3
  17422. 8007d1a: eef8 6a67 vcvt.f32.u32 s13, s15
  17423. 8007d1e: ed97 6a03 vldr s12, [r7, #12]
  17424. 8007d22: eddf 5a78 vldr s11, [pc, #480] @ 8007f04 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  17425. 8007d26: eec6 7a25 vdiv.f32 s15, s12, s11
  17426. 8007d2a: ee76 7aa7 vadd.f32 s15, s13, s15
  17427. 8007d2e: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  17428. 8007d32: ee77 7aa6 vadd.f32 s15, s15, s13
  17429. 8007d36: ee67 7a27 vmul.f32 s15, s14, s15
  17430. 8007d3a: edc7 7a07 vstr s15, [r7, #28]
  17431. }
  17432. else
  17433. {
  17434. pll3vco = ((float_t)HSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  17435. }
  17436. break;
  17437. 8007d3e: e087 b.n 8007e50 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  17438. pll3vco = ((float_t)HSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  17439. 8007d40: 697b ldr r3, [r7, #20]
  17440. 8007d42: ee07 3a90 vmov s15, r3
  17441. 8007d46: eef8 7a67 vcvt.f32.u32 s15, s15
  17442. 8007d4a: eddf 6a6f vldr s13, [pc, #444] @ 8007f08 <HAL_RCCEx_GetPLL3ClockFreq+0x29c>
  17443. 8007d4e: ee86 7aa7 vdiv.f32 s14, s13, s15
  17444. 8007d52: 4b6a ldr r3, [pc, #424] @ (8007efc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  17445. 8007d54: 6c1b ldr r3, [r3, #64] @ 0x40
  17446. 8007d56: f3c3 0308 ubfx r3, r3, #0, #9
  17447. 8007d5a: ee07 3a90 vmov s15, r3
  17448. 8007d5e: eef8 6a67 vcvt.f32.u32 s13, s15
  17449. 8007d62: ed97 6a03 vldr s12, [r7, #12]
  17450. 8007d66: eddf 5a67 vldr s11, [pc, #412] @ 8007f04 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  17451. 8007d6a: eec6 7a25 vdiv.f32 s15, s12, s11
  17452. 8007d6e: ee76 7aa7 vadd.f32 s15, s13, s15
  17453. 8007d72: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  17454. 8007d76: ee77 7aa6 vadd.f32 s15, s15, s13
  17455. 8007d7a: ee67 7a27 vmul.f32 s15, s14, s15
  17456. 8007d7e: edc7 7a07 vstr s15, [r7, #28]
  17457. break;
  17458. 8007d82: e065 b.n 8007e50 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  17459. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  17460. pll3vco = ((float_t)CSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  17461. 8007d84: 697b ldr r3, [r7, #20]
  17462. 8007d86: ee07 3a90 vmov s15, r3
  17463. 8007d8a: eef8 7a67 vcvt.f32.u32 s15, s15
  17464. 8007d8e: eddf 6a5f vldr s13, [pc, #380] @ 8007f0c <HAL_RCCEx_GetPLL3ClockFreq+0x2a0>
  17465. 8007d92: ee86 7aa7 vdiv.f32 s14, s13, s15
  17466. 8007d96: 4b59 ldr r3, [pc, #356] @ (8007efc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  17467. 8007d98: 6c1b ldr r3, [r3, #64] @ 0x40
  17468. 8007d9a: f3c3 0308 ubfx r3, r3, #0, #9
  17469. 8007d9e: ee07 3a90 vmov s15, r3
  17470. 8007da2: eef8 6a67 vcvt.f32.u32 s13, s15
  17471. 8007da6: ed97 6a03 vldr s12, [r7, #12]
  17472. 8007daa: eddf 5a56 vldr s11, [pc, #344] @ 8007f04 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  17473. 8007dae: eec6 7a25 vdiv.f32 s15, s12, s11
  17474. 8007db2: ee76 7aa7 vadd.f32 s15, s13, s15
  17475. 8007db6: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  17476. 8007dba: ee77 7aa6 vadd.f32 s15, s15, s13
  17477. 8007dbe: ee67 7a27 vmul.f32 s15, s14, s15
  17478. 8007dc2: edc7 7a07 vstr s15, [r7, #28]
  17479. break;
  17480. 8007dc6: e043 b.n 8007e50 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  17481. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  17482. pll3vco = ((float_t)HSE_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  17483. 8007dc8: 697b ldr r3, [r7, #20]
  17484. 8007dca: ee07 3a90 vmov s15, r3
  17485. 8007dce: eef8 7a67 vcvt.f32.u32 s15, s15
  17486. 8007dd2: eddf 6a4f vldr s13, [pc, #316] @ 8007f10 <HAL_RCCEx_GetPLL3ClockFreq+0x2a4>
  17487. 8007dd6: ee86 7aa7 vdiv.f32 s14, s13, s15
  17488. 8007dda: 4b48 ldr r3, [pc, #288] @ (8007efc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  17489. 8007ddc: 6c1b ldr r3, [r3, #64] @ 0x40
  17490. 8007dde: f3c3 0308 ubfx r3, r3, #0, #9
  17491. 8007de2: ee07 3a90 vmov s15, r3
  17492. 8007de6: eef8 6a67 vcvt.f32.u32 s13, s15
  17493. 8007dea: ed97 6a03 vldr s12, [r7, #12]
  17494. 8007dee: eddf 5a45 vldr s11, [pc, #276] @ 8007f04 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  17495. 8007df2: eec6 7a25 vdiv.f32 s15, s12, s11
  17496. 8007df6: ee76 7aa7 vadd.f32 s15, s13, s15
  17497. 8007dfa: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  17498. 8007dfe: ee77 7aa6 vadd.f32 s15, s15, s13
  17499. 8007e02: ee67 7a27 vmul.f32 s15, s14, s15
  17500. 8007e06: edc7 7a07 vstr s15, [r7, #28]
  17501. break;
  17502. 8007e0a: e021 b.n 8007e50 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  17503. default:
  17504. pll3vco = ((float_t)CSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  17505. 8007e0c: 697b ldr r3, [r7, #20]
  17506. 8007e0e: ee07 3a90 vmov s15, r3
  17507. 8007e12: eef8 7a67 vcvt.f32.u32 s15, s15
  17508. 8007e16: eddf 6a3d vldr s13, [pc, #244] @ 8007f0c <HAL_RCCEx_GetPLL3ClockFreq+0x2a0>
  17509. 8007e1a: ee86 7aa7 vdiv.f32 s14, s13, s15
  17510. 8007e1e: 4b37 ldr r3, [pc, #220] @ (8007efc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  17511. 8007e20: 6c1b ldr r3, [r3, #64] @ 0x40
  17512. 8007e22: f3c3 0308 ubfx r3, r3, #0, #9
  17513. 8007e26: ee07 3a90 vmov s15, r3
  17514. 8007e2a: eef8 6a67 vcvt.f32.u32 s13, s15
  17515. 8007e2e: ed97 6a03 vldr s12, [r7, #12]
  17516. 8007e32: eddf 5a34 vldr s11, [pc, #208] @ 8007f04 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  17517. 8007e36: eec6 7a25 vdiv.f32 s15, s12, s11
  17518. 8007e3a: ee76 7aa7 vadd.f32 s15, s13, s15
  17519. 8007e3e: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  17520. 8007e42: ee77 7aa6 vadd.f32 s15, s15, s13
  17521. 8007e46: ee67 7a27 vmul.f32 s15, s14, s15
  17522. 8007e4a: edc7 7a07 vstr s15, [r7, #28]
  17523. break;
  17524. 8007e4e: bf00 nop
  17525. }
  17526. PLL3_Clocks->PLL3_P_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_P3) >> 9) + (float_t)1)) ;
  17527. 8007e50: 4b2a ldr r3, [pc, #168] @ (8007efc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  17528. 8007e52: 6c1b ldr r3, [r3, #64] @ 0x40
  17529. 8007e54: 0a5b lsrs r3, r3, #9
  17530. 8007e56: f003 037f and.w r3, r3, #127 @ 0x7f
  17531. 8007e5a: ee07 3a90 vmov s15, r3
  17532. 8007e5e: eef8 7a67 vcvt.f32.u32 s15, s15
  17533. 8007e62: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  17534. 8007e66: ee37 7a87 vadd.f32 s14, s15, s14
  17535. 8007e6a: edd7 6a07 vldr s13, [r7, #28]
  17536. 8007e6e: eec6 7a87 vdiv.f32 s15, s13, s14
  17537. 8007e72: eefc 7ae7 vcvt.u32.f32 s15, s15
  17538. 8007e76: ee17 2a90 vmov r2, s15
  17539. 8007e7a: 687b ldr r3, [r7, #4]
  17540. 8007e7c: 601a str r2, [r3, #0]
  17541. PLL3_Clocks->PLL3_Q_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_Q3) >> 16) + (float_t)1)) ;
  17542. 8007e7e: 4b1f ldr r3, [pc, #124] @ (8007efc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  17543. 8007e80: 6c1b ldr r3, [r3, #64] @ 0x40
  17544. 8007e82: 0c1b lsrs r3, r3, #16
  17545. 8007e84: f003 037f and.w r3, r3, #127 @ 0x7f
  17546. 8007e88: ee07 3a90 vmov s15, r3
  17547. 8007e8c: eef8 7a67 vcvt.f32.u32 s15, s15
  17548. 8007e90: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  17549. 8007e94: ee37 7a87 vadd.f32 s14, s15, s14
  17550. 8007e98: edd7 6a07 vldr s13, [r7, #28]
  17551. 8007e9c: eec6 7a87 vdiv.f32 s15, s13, s14
  17552. 8007ea0: eefc 7ae7 vcvt.u32.f32 s15, s15
  17553. 8007ea4: ee17 2a90 vmov r2, s15
  17554. 8007ea8: 687b ldr r3, [r7, #4]
  17555. 8007eaa: 605a str r2, [r3, #4]
  17556. PLL3_Clocks->PLL3_R_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_R3) >> 24) + (float_t)1)) ;
  17557. 8007eac: 4b13 ldr r3, [pc, #76] @ (8007efc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  17558. 8007eae: 6c1b ldr r3, [r3, #64] @ 0x40
  17559. 8007eb0: 0e1b lsrs r3, r3, #24
  17560. 8007eb2: f003 037f and.w r3, r3, #127 @ 0x7f
  17561. 8007eb6: ee07 3a90 vmov s15, r3
  17562. 8007eba: eef8 7a67 vcvt.f32.u32 s15, s15
  17563. 8007ebe: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  17564. 8007ec2: ee37 7a87 vadd.f32 s14, s15, s14
  17565. 8007ec6: edd7 6a07 vldr s13, [r7, #28]
  17566. 8007eca: eec6 7a87 vdiv.f32 s15, s13, s14
  17567. 8007ece: eefc 7ae7 vcvt.u32.f32 s15, s15
  17568. 8007ed2: ee17 2a90 vmov r2, s15
  17569. 8007ed6: 687b ldr r3, [r7, #4]
  17570. 8007ed8: 609a str r2, [r3, #8]
  17571. PLL3_Clocks->PLL3_P_Frequency = 0U;
  17572. PLL3_Clocks->PLL3_Q_Frequency = 0U;
  17573. PLL3_Clocks->PLL3_R_Frequency = 0U;
  17574. }
  17575. }
  17576. 8007eda: e008 b.n 8007eee <HAL_RCCEx_GetPLL3ClockFreq+0x282>
  17577. PLL3_Clocks->PLL3_P_Frequency = 0U;
  17578. 8007edc: 687b ldr r3, [r7, #4]
  17579. 8007ede: 2200 movs r2, #0
  17580. 8007ee0: 601a str r2, [r3, #0]
  17581. PLL3_Clocks->PLL3_Q_Frequency = 0U;
  17582. 8007ee2: 687b ldr r3, [r7, #4]
  17583. 8007ee4: 2200 movs r2, #0
  17584. 8007ee6: 605a str r2, [r3, #4]
  17585. PLL3_Clocks->PLL3_R_Frequency = 0U;
  17586. 8007ee8: 687b ldr r3, [r7, #4]
  17587. 8007eea: 2200 movs r2, #0
  17588. 8007eec: 609a str r2, [r3, #8]
  17589. }
  17590. 8007eee: bf00 nop
  17591. 8007ef0: 3724 adds r7, #36 @ 0x24
  17592. 8007ef2: 46bd mov sp, r7
  17593. 8007ef4: f85d 7b04 ldr.w r7, [sp], #4
  17594. 8007ef8: 4770 bx lr
  17595. 8007efa: bf00 nop
  17596. 8007efc: 58024400 .word 0x58024400
  17597. 8007f00: 03d09000 .word 0x03d09000
  17598. 8007f04: 46000000 .word 0x46000000
  17599. 8007f08: 4c742400 .word 0x4c742400
  17600. 8007f0c: 4a742400 .word 0x4a742400
  17601. 8007f10: 4bbebc20 .word 0x4bbebc20
  17602. 08007f14 <RCCEx_PLL2_Config>:
  17603. * @note PLL2 is temporary disabled to apply new parameters
  17604. *
  17605. * @retval HAL status
  17606. */
  17607. static HAL_StatusTypeDef RCCEx_PLL2_Config(RCC_PLL2InitTypeDef *pll2, uint32_t Divider)
  17608. {
  17609. 8007f14: b580 push {r7, lr}
  17610. 8007f16: b084 sub sp, #16
  17611. 8007f18: af00 add r7, sp, #0
  17612. 8007f1a: 6078 str r0, [r7, #4]
  17613. 8007f1c: 6039 str r1, [r7, #0]
  17614. uint32_t tickstart;
  17615. HAL_StatusTypeDef status = HAL_OK;
  17616. 8007f1e: 2300 movs r3, #0
  17617. 8007f20: 73fb strb r3, [r7, #15]
  17618. assert_param(IS_RCC_PLL2RGE_VALUE(pll2->PLL2RGE));
  17619. assert_param(IS_RCC_PLL2VCO_VALUE(pll2->PLL2VCOSEL));
  17620. assert_param(IS_RCC_PLLFRACN_VALUE(pll2->PLL2FRACN));
  17621. /* Check that PLL2 OSC clock source is already set */
  17622. if (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_NONE)
  17623. 8007f22: 4b53 ldr r3, [pc, #332] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17624. 8007f24: 6a9b ldr r3, [r3, #40] @ 0x28
  17625. 8007f26: f003 0303 and.w r3, r3, #3
  17626. 8007f2a: 2b03 cmp r3, #3
  17627. 8007f2c: d101 bne.n 8007f32 <RCCEx_PLL2_Config+0x1e>
  17628. {
  17629. return HAL_ERROR;
  17630. 8007f2e: 2301 movs r3, #1
  17631. 8007f30: e099 b.n 8008066 <RCCEx_PLL2_Config+0x152>
  17632. else
  17633. {
  17634. /* Disable PLL2. */
  17635. __HAL_RCC_PLL2_DISABLE();
  17636. 8007f32: 4b4f ldr r3, [pc, #316] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17637. 8007f34: 681b ldr r3, [r3, #0]
  17638. 8007f36: 4a4e ldr r2, [pc, #312] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17639. 8007f38: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  17640. 8007f3c: 6013 str r3, [r2, #0]
  17641. /* Get Start Tick*/
  17642. tickstart = HAL_GetTick();
  17643. 8007f3e: f7fa fb8f bl 8002660 <HAL_GetTick>
  17644. 8007f42: 60b8 str r0, [r7, #8]
  17645. /* Wait till PLL is disabled */
  17646. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != 0U)
  17647. 8007f44: e008 b.n 8007f58 <RCCEx_PLL2_Config+0x44>
  17648. {
  17649. if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE)
  17650. 8007f46: f7fa fb8b bl 8002660 <HAL_GetTick>
  17651. 8007f4a: 4602 mov r2, r0
  17652. 8007f4c: 68bb ldr r3, [r7, #8]
  17653. 8007f4e: 1ad3 subs r3, r2, r3
  17654. 8007f50: 2b02 cmp r3, #2
  17655. 8007f52: d901 bls.n 8007f58 <RCCEx_PLL2_Config+0x44>
  17656. {
  17657. return HAL_TIMEOUT;
  17658. 8007f54: 2303 movs r3, #3
  17659. 8007f56: e086 b.n 8008066 <RCCEx_PLL2_Config+0x152>
  17660. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != 0U)
  17661. 8007f58: 4b45 ldr r3, [pc, #276] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17662. 8007f5a: 681b ldr r3, [r3, #0]
  17663. 8007f5c: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  17664. 8007f60: 2b00 cmp r3, #0
  17665. 8007f62: d1f0 bne.n 8007f46 <RCCEx_PLL2_Config+0x32>
  17666. }
  17667. }
  17668. /* Configure PLL2 multiplication and division factors. */
  17669. __HAL_RCC_PLL2_CONFIG(pll2->PLL2M,
  17670. 8007f64: 4b42 ldr r3, [pc, #264] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17671. 8007f66: 6a9b ldr r3, [r3, #40] @ 0x28
  17672. 8007f68: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  17673. 8007f6c: 687b ldr r3, [r7, #4]
  17674. 8007f6e: 681b ldr r3, [r3, #0]
  17675. 8007f70: 031b lsls r3, r3, #12
  17676. 8007f72: 493f ldr r1, [pc, #252] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17677. 8007f74: 4313 orrs r3, r2
  17678. 8007f76: 628b str r3, [r1, #40] @ 0x28
  17679. 8007f78: 687b ldr r3, [r7, #4]
  17680. 8007f7a: 685b ldr r3, [r3, #4]
  17681. 8007f7c: 3b01 subs r3, #1
  17682. 8007f7e: f3c3 0208 ubfx r2, r3, #0, #9
  17683. 8007f82: 687b ldr r3, [r7, #4]
  17684. 8007f84: 689b ldr r3, [r3, #8]
  17685. 8007f86: 3b01 subs r3, #1
  17686. 8007f88: 025b lsls r3, r3, #9
  17687. 8007f8a: b29b uxth r3, r3
  17688. 8007f8c: 431a orrs r2, r3
  17689. 8007f8e: 687b ldr r3, [r7, #4]
  17690. 8007f90: 68db ldr r3, [r3, #12]
  17691. 8007f92: 3b01 subs r3, #1
  17692. 8007f94: 041b lsls r3, r3, #16
  17693. 8007f96: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  17694. 8007f9a: 431a orrs r2, r3
  17695. 8007f9c: 687b ldr r3, [r7, #4]
  17696. 8007f9e: 691b ldr r3, [r3, #16]
  17697. 8007fa0: 3b01 subs r3, #1
  17698. 8007fa2: 061b lsls r3, r3, #24
  17699. 8007fa4: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  17700. 8007fa8: 4931 ldr r1, [pc, #196] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17701. 8007faa: 4313 orrs r3, r2
  17702. 8007fac: 638b str r3, [r1, #56] @ 0x38
  17703. pll2->PLL2P,
  17704. pll2->PLL2Q,
  17705. pll2->PLL2R);
  17706. /* Select PLL2 input reference frequency range: VCI */
  17707. __HAL_RCC_PLL2_VCIRANGE(pll2->PLL2RGE) ;
  17708. 8007fae: 4b30 ldr r3, [pc, #192] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17709. 8007fb0: 6adb ldr r3, [r3, #44] @ 0x2c
  17710. 8007fb2: f023 02c0 bic.w r2, r3, #192 @ 0xc0
  17711. 8007fb6: 687b ldr r3, [r7, #4]
  17712. 8007fb8: 695b ldr r3, [r3, #20]
  17713. 8007fba: 492d ldr r1, [pc, #180] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17714. 8007fbc: 4313 orrs r3, r2
  17715. 8007fbe: 62cb str r3, [r1, #44] @ 0x2c
  17716. /* Select PLL2 output frequency range : VCO */
  17717. __HAL_RCC_PLL2_VCORANGE(pll2->PLL2VCOSEL) ;
  17718. 8007fc0: 4b2b ldr r3, [pc, #172] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17719. 8007fc2: 6adb ldr r3, [r3, #44] @ 0x2c
  17720. 8007fc4: f023 0220 bic.w r2, r3, #32
  17721. 8007fc8: 687b ldr r3, [r7, #4]
  17722. 8007fca: 699b ldr r3, [r3, #24]
  17723. 8007fcc: 4928 ldr r1, [pc, #160] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17724. 8007fce: 4313 orrs r3, r2
  17725. 8007fd0: 62cb str r3, [r1, #44] @ 0x2c
  17726. /* Disable PLL2FRACN . */
  17727. __HAL_RCC_PLL2FRACN_DISABLE();
  17728. 8007fd2: 4b27 ldr r3, [pc, #156] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17729. 8007fd4: 6adb ldr r3, [r3, #44] @ 0x2c
  17730. 8007fd6: 4a26 ldr r2, [pc, #152] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17731. 8007fd8: f023 0310 bic.w r3, r3, #16
  17732. 8007fdc: 62d3 str r3, [r2, #44] @ 0x2c
  17733. /* Configures PLL2 clock Fractional Part Of The Multiplication Factor */
  17734. __HAL_RCC_PLL2FRACN_CONFIG(pll2->PLL2FRACN);
  17735. 8007fde: 4b24 ldr r3, [pc, #144] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17736. 8007fe0: 6bda ldr r2, [r3, #60] @ 0x3c
  17737. 8007fe2: 4b24 ldr r3, [pc, #144] @ (8008074 <RCCEx_PLL2_Config+0x160>)
  17738. 8007fe4: 4013 ands r3, r2
  17739. 8007fe6: 687a ldr r2, [r7, #4]
  17740. 8007fe8: 69d2 ldr r2, [r2, #28]
  17741. 8007fea: 00d2 lsls r2, r2, #3
  17742. 8007fec: 4920 ldr r1, [pc, #128] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17743. 8007fee: 4313 orrs r3, r2
  17744. 8007ff0: 63cb str r3, [r1, #60] @ 0x3c
  17745. /* Enable PLL2FRACN . */
  17746. __HAL_RCC_PLL2FRACN_ENABLE();
  17747. 8007ff2: 4b1f ldr r3, [pc, #124] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17748. 8007ff4: 6adb ldr r3, [r3, #44] @ 0x2c
  17749. 8007ff6: 4a1e ldr r2, [pc, #120] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17750. 8007ff8: f043 0310 orr.w r3, r3, #16
  17751. 8007ffc: 62d3 str r3, [r2, #44] @ 0x2c
  17752. /* Enable the PLL2 clock output */
  17753. if (Divider == DIVIDER_P_UPDATE)
  17754. 8007ffe: 683b ldr r3, [r7, #0]
  17755. 8008000: 2b00 cmp r3, #0
  17756. 8008002: d106 bne.n 8008012 <RCCEx_PLL2_Config+0xfe>
  17757. {
  17758. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVP);
  17759. 8008004: 4b1a ldr r3, [pc, #104] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17760. 8008006: 6adb ldr r3, [r3, #44] @ 0x2c
  17761. 8008008: 4a19 ldr r2, [pc, #100] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17762. 800800a: f443 2300 orr.w r3, r3, #524288 @ 0x80000
  17763. 800800e: 62d3 str r3, [r2, #44] @ 0x2c
  17764. 8008010: e00f b.n 8008032 <RCCEx_PLL2_Config+0x11e>
  17765. }
  17766. else if (Divider == DIVIDER_Q_UPDATE)
  17767. 8008012: 683b ldr r3, [r7, #0]
  17768. 8008014: 2b01 cmp r3, #1
  17769. 8008016: d106 bne.n 8008026 <RCCEx_PLL2_Config+0x112>
  17770. {
  17771. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVQ);
  17772. 8008018: 4b15 ldr r3, [pc, #84] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17773. 800801a: 6adb ldr r3, [r3, #44] @ 0x2c
  17774. 800801c: 4a14 ldr r2, [pc, #80] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17775. 800801e: f443 1380 orr.w r3, r3, #1048576 @ 0x100000
  17776. 8008022: 62d3 str r3, [r2, #44] @ 0x2c
  17777. 8008024: e005 b.n 8008032 <RCCEx_PLL2_Config+0x11e>
  17778. }
  17779. else
  17780. {
  17781. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVR);
  17782. 8008026: 4b12 ldr r3, [pc, #72] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17783. 8008028: 6adb ldr r3, [r3, #44] @ 0x2c
  17784. 800802a: 4a11 ldr r2, [pc, #68] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17785. 800802c: f443 1300 orr.w r3, r3, #2097152 @ 0x200000
  17786. 8008030: 62d3 str r3, [r2, #44] @ 0x2c
  17787. }
  17788. /* Enable PLL2. */
  17789. __HAL_RCC_PLL2_ENABLE();
  17790. 8008032: 4b0f ldr r3, [pc, #60] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17791. 8008034: 681b ldr r3, [r3, #0]
  17792. 8008036: 4a0e ldr r2, [pc, #56] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17793. 8008038: f043 6380 orr.w r3, r3, #67108864 @ 0x4000000
  17794. 800803c: 6013 str r3, [r2, #0]
  17795. /* Get Start Tick*/
  17796. tickstart = HAL_GetTick();
  17797. 800803e: f7fa fb0f bl 8002660 <HAL_GetTick>
  17798. 8008042: 60b8 str r0, [r7, #8]
  17799. /* Wait till PLL2 is ready */
  17800. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == 0U)
  17801. 8008044: e008 b.n 8008058 <RCCEx_PLL2_Config+0x144>
  17802. {
  17803. if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE)
  17804. 8008046: f7fa fb0b bl 8002660 <HAL_GetTick>
  17805. 800804a: 4602 mov r2, r0
  17806. 800804c: 68bb ldr r3, [r7, #8]
  17807. 800804e: 1ad3 subs r3, r2, r3
  17808. 8008050: 2b02 cmp r3, #2
  17809. 8008052: d901 bls.n 8008058 <RCCEx_PLL2_Config+0x144>
  17810. {
  17811. return HAL_TIMEOUT;
  17812. 8008054: 2303 movs r3, #3
  17813. 8008056: e006 b.n 8008066 <RCCEx_PLL2_Config+0x152>
  17814. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == 0U)
  17815. 8008058: 4b05 ldr r3, [pc, #20] @ (8008070 <RCCEx_PLL2_Config+0x15c>)
  17816. 800805a: 681b ldr r3, [r3, #0]
  17817. 800805c: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  17818. 8008060: 2b00 cmp r3, #0
  17819. 8008062: d0f0 beq.n 8008046 <RCCEx_PLL2_Config+0x132>
  17820. }
  17821. }
  17822. return status;
  17823. 8008064: 7bfb ldrb r3, [r7, #15]
  17824. }
  17825. 8008066: 4618 mov r0, r3
  17826. 8008068: 3710 adds r7, #16
  17827. 800806a: 46bd mov sp, r7
  17828. 800806c: bd80 pop {r7, pc}
  17829. 800806e: bf00 nop
  17830. 8008070: 58024400 .word 0x58024400
  17831. 8008074: ffff0007 .word 0xffff0007
  17832. 08008078 <RCCEx_PLL3_Config>:
  17833. * @note PLL3 is temporary disabled to apply new parameters
  17834. *
  17835. * @retval HAL status
  17836. */
  17837. static HAL_StatusTypeDef RCCEx_PLL3_Config(RCC_PLL3InitTypeDef *pll3, uint32_t Divider)
  17838. {
  17839. 8008078: b580 push {r7, lr}
  17840. 800807a: b084 sub sp, #16
  17841. 800807c: af00 add r7, sp, #0
  17842. 800807e: 6078 str r0, [r7, #4]
  17843. 8008080: 6039 str r1, [r7, #0]
  17844. uint32_t tickstart;
  17845. HAL_StatusTypeDef status = HAL_OK;
  17846. 8008082: 2300 movs r3, #0
  17847. 8008084: 73fb strb r3, [r7, #15]
  17848. assert_param(IS_RCC_PLL3RGE_VALUE(pll3->PLL3RGE));
  17849. assert_param(IS_RCC_PLL3VCO_VALUE(pll3->PLL3VCOSEL));
  17850. assert_param(IS_RCC_PLLFRACN_VALUE(pll3->PLL3FRACN));
  17851. /* Check that PLL3 OSC clock source is already set */
  17852. if (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_NONE)
  17853. 8008086: 4b53 ldr r3, [pc, #332] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17854. 8008088: 6a9b ldr r3, [r3, #40] @ 0x28
  17855. 800808a: f003 0303 and.w r3, r3, #3
  17856. 800808e: 2b03 cmp r3, #3
  17857. 8008090: d101 bne.n 8008096 <RCCEx_PLL3_Config+0x1e>
  17858. {
  17859. return HAL_ERROR;
  17860. 8008092: 2301 movs r3, #1
  17861. 8008094: e099 b.n 80081ca <RCCEx_PLL3_Config+0x152>
  17862. else
  17863. {
  17864. /* Disable PLL3. */
  17865. __HAL_RCC_PLL3_DISABLE();
  17866. 8008096: 4b4f ldr r3, [pc, #316] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17867. 8008098: 681b ldr r3, [r3, #0]
  17868. 800809a: 4a4e ldr r2, [pc, #312] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17869. 800809c: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  17870. 80080a0: 6013 str r3, [r2, #0]
  17871. /* Get Start Tick*/
  17872. tickstart = HAL_GetTick();
  17873. 80080a2: f7fa fadd bl 8002660 <HAL_GetTick>
  17874. 80080a6: 60b8 str r0, [r7, #8]
  17875. /* Wait till PLL3 is ready */
  17876. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) != 0U)
  17877. 80080a8: e008 b.n 80080bc <RCCEx_PLL3_Config+0x44>
  17878. {
  17879. if ((HAL_GetTick() - tickstart) > PLL3_TIMEOUT_VALUE)
  17880. 80080aa: f7fa fad9 bl 8002660 <HAL_GetTick>
  17881. 80080ae: 4602 mov r2, r0
  17882. 80080b0: 68bb ldr r3, [r7, #8]
  17883. 80080b2: 1ad3 subs r3, r2, r3
  17884. 80080b4: 2b02 cmp r3, #2
  17885. 80080b6: d901 bls.n 80080bc <RCCEx_PLL3_Config+0x44>
  17886. {
  17887. return HAL_TIMEOUT;
  17888. 80080b8: 2303 movs r3, #3
  17889. 80080ba: e086 b.n 80081ca <RCCEx_PLL3_Config+0x152>
  17890. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) != 0U)
  17891. 80080bc: 4b45 ldr r3, [pc, #276] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17892. 80080be: 681b ldr r3, [r3, #0]
  17893. 80080c0: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  17894. 80080c4: 2b00 cmp r3, #0
  17895. 80080c6: d1f0 bne.n 80080aa <RCCEx_PLL3_Config+0x32>
  17896. }
  17897. }
  17898. /* Configure the PLL3 multiplication and division factors. */
  17899. __HAL_RCC_PLL3_CONFIG(pll3->PLL3M,
  17900. 80080c8: 4b42 ldr r3, [pc, #264] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17901. 80080ca: 6a9b ldr r3, [r3, #40] @ 0x28
  17902. 80080cc: f023 727c bic.w r2, r3, #66060288 @ 0x3f00000
  17903. 80080d0: 687b ldr r3, [r7, #4]
  17904. 80080d2: 681b ldr r3, [r3, #0]
  17905. 80080d4: 051b lsls r3, r3, #20
  17906. 80080d6: 493f ldr r1, [pc, #252] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17907. 80080d8: 4313 orrs r3, r2
  17908. 80080da: 628b str r3, [r1, #40] @ 0x28
  17909. 80080dc: 687b ldr r3, [r7, #4]
  17910. 80080de: 685b ldr r3, [r3, #4]
  17911. 80080e0: 3b01 subs r3, #1
  17912. 80080e2: f3c3 0208 ubfx r2, r3, #0, #9
  17913. 80080e6: 687b ldr r3, [r7, #4]
  17914. 80080e8: 689b ldr r3, [r3, #8]
  17915. 80080ea: 3b01 subs r3, #1
  17916. 80080ec: 025b lsls r3, r3, #9
  17917. 80080ee: b29b uxth r3, r3
  17918. 80080f0: 431a orrs r2, r3
  17919. 80080f2: 687b ldr r3, [r7, #4]
  17920. 80080f4: 68db ldr r3, [r3, #12]
  17921. 80080f6: 3b01 subs r3, #1
  17922. 80080f8: 041b lsls r3, r3, #16
  17923. 80080fa: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  17924. 80080fe: 431a orrs r2, r3
  17925. 8008100: 687b ldr r3, [r7, #4]
  17926. 8008102: 691b ldr r3, [r3, #16]
  17927. 8008104: 3b01 subs r3, #1
  17928. 8008106: 061b lsls r3, r3, #24
  17929. 8008108: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  17930. 800810c: 4931 ldr r1, [pc, #196] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17931. 800810e: 4313 orrs r3, r2
  17932. 8008110: 640b str r3, [r1, #64] @ 0x40
  17933. pll3->PLL3P,
  17934. pll3->PLL3Q,
  17935. pll3->PLL3R);
  17936. /* Select PLL3 input reference frequency range: VCI */
  17937. __HAL_RCC_PLL3_VCIRANGE(pll3->PLL3RGE) ;
  17938. 8008112: 4b30 ldr r3, [pc, #192] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17939. 8008114: 6adb ldr r3, [r3, #44] @ 0x2c
  17940. 8008116: f423 6240 bic.w r2, r3, #3072 @ 0xc00
  17941. 800811a: 687b ldr r3, [r7, #4]
  17942. 800811c: 695b ldr r3, [r3, #20]
  17943. 800811e: 492d ldr r1, [pc, #180] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17944. 8008120: 4313 orrs r3, r2
  17945. 8008122: 62cb str r3, [r1, #44] @ 0x2c
  17946. /* Select PLL3 output frequency range : VCO */
  17947. __HAL_RCC_PLL3_VCORANGE(pll3->PLL3VCOSEL) ;
  17948. 8008124: 4b2b ldr r3, [pc, #172] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17949. 8008126: 6adb ldr r3, [r3, #44] @ 0x2c
  17950. 8008128: f423 7200 bic.w r2, r3, #512 @ 0x200
  17951. 800812c: 687b ldr r3, [r7, #4]
  17952. 800812e: 699b ldr r3, [r3, #24]
  17953. 8008130: 4928 ldr r1, [pc, #160] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17954. 8008132: 4313 orrs r3, r2
  17955. 8008134: 62cb str r3, [r1, #44] @ 0x2c
  17956. /* Disable PLL3FRACN . */
  17957. __HAL_RCC_PLL3FRACN_DISABLE();
  17958. 8008136: 4b27 ldr r3, [pc, #156] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17959. 8008138: 6adb ldr r3, [r3, #44] @ 0x2c
  17960. 800813a: 4a26 ldr r2, [pc, #152] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17961. 800813c: f423 7380 bic.w r3, r3, #256 @ 0x100
  17962. 8008140: 62d3 str r3, [r2, #44] @ 0x2c
  17963. /* Configures PLL3 clock Fractional Part Of The Multiplication Factor */
  17964. __HAL_RCC_PLL3FRACN_CONFIG(pll3->PLL3FRACN);
  17965. 8008142: 4b24 ldr r3, [pc, #144] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17966. 8008144: 6c5a ldr r2, [r3, #68] @ 0x44
  17967. 8008146: 4b24 ldr r3, [pc, #144] @ (80081d8 <RCCEx_PLL3_Config+0x160>)
  17968. 8008148: 4013 ands r3, r2
  17969. 800814a: 687a ldr r2, [r7, #4]
  17970. 800814c: 69d2 ldr r2, [r2, #28]
  17971. 800814e: 00d2 lsls r2, r2, #3
  17972. 8008150: 4920 ldr r1, [pc, #128] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17973. 8008152: 4313 orrs r3, r2
  17974. 8008154: 644b str r3, [r1, #68] @ 0x44
  17975. /* Enable PLL3FRACN . */
  17976. __HAL_RCC_PLL3FRACN_ENABLE();
  17977. 8008156: 4b1f ldr r3, [pc, #124] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17978. 8008158: 6adb ldr r3, [r3, #44] @ 0x2c
  17979. 800815a: 4a1e ldr r2, [pc, #120] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17980. 800815c: f443 7380 orr.w r3, r3, #256 @ 0x100
  17981. 8008160: 62d3 str r3, [r2, #44] @ 0x2c
  17982. /* Enable the PLL3 clock output */
  17983. if (Divider == DIVIDER_P_UPDATE)
  17984. 8008162: 683b ldr r3, [r7, #0]
  17985. 8008164: 2b00 cmp r3, #0
  17986. 8008166: d106 bne.n 8008176 <RCCEx_PLL3_Config+0xfe>
  17987. {
  17988. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVP);
  17989. 8008168: 4b1a ldr r3, [pc, #104] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17990. 800816a: 6adb ldr r3, [r3, #44] @ 0x2c
  17991. 800816c: 4a19 ldr r2, [pc, #100] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  17992. 800816e: f443 0380 orr.w r3, r3, #4194304 @ 0x400000
  17993. 8008172: 62d3 str r3, [r2, #44] @ 0x2c
  17994. 8008174: e00f b.n 8008196 <RCCEx_PLL3_Config+0x11e>
  17995. }
  17996. else if (Divider == DIVIDER_Q_UPDATE)
  17997. 8008176: 683b ldr r3, [r7, #0]
  17998. 8008178: 2b01 cmp r3, #1
  17999. 800817a: d106 bne.n 800818a <RCCEx_PLL3_Config+0x112>
  18000. {
  18001. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVQ);
  18002. 800817c: 4b15 ldr r3, [pc, #84] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  18003. 800817e: 6adb ldr r3, [r3, #44] @ 0x2c
  18004. 8008180: 4a14 ldr r2, [pc, #80] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  18005. 8008182: f443 0300 orr.w r3, r3, #8388608 @ 0x800000
  18006. 8008186: 62d3 str r3, [r2, #44] @ 0x2c
  18007. 8008188: e005 b.n 8008196 <RCCEx_PLL3_Config+0x11e>
  18008. }
  18009. else
  18010. {
  18011. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVR);
  18012. 800818a: 4b12 ldr r3, [pc, #72] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  18013. 800818c: 6adb ldr r3, [r3, #44] @ 0x2c
  18014. 800818e: 4a11 ldr r2, [pc, #68] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  18015. 8008190: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  18016. 8008194: 62d3 str r3, [r2, #44] @ 0x2c
  18017. }
  18018. /* Enable PLL3. */
  18019. __HAL_RCC_PLL3_ENABLE();
  18020. 8008196: 4b0f ldr r3, [pc, #60] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  18021. 8008198: 681b ldr r3, [r3, #0]
  18022. 800819a: 4a0e ldr r2, [pc, #56] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  18023. 800819c: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000
  18024. 80081a0: 6013 str r3, [r2, #0]
  18025. /* Get Start Tick*/
  18026. tickstart = HAL_GetTick();
  18027. 80081a2: f7fa fa5d bl 8002660 <HAL_GetTick>
  18028. 80081a6: 60b8 str r0, [r7, #8]
  18029. /* Wait till PLL3 is ready */
  18030. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) == 0U)
  18031. 80081a8: e008 b.n 80081bc <RCCEx_PLL3_Config+0x144>
  18032. {
  18033. if ((HAL_GetTick() - tickstart) > PLL3_TIMEOUT_VALUE)
  18034. 80081aa: f7fa fa59 bl 8002660 <HAL_GetTick>
  18035. 80081ae: 4602 mov r2, r0
  18036. 80081b0: 68bb ldr r3, [r7, #8]
  18037. 80081b2: 1ad3 subs r3, r2, r3
  18038. 80081b4: 2b02 cmp r3, #2
  18039. 80081b6: d901 bls.n 80081bc <RCCEx_PLL3_Config+0x144>
  18040. {
  18041. return HAL_TIMEOUT;
  18042. 80081b8: 2303 movs r3, #3
  18043. 80081ba: e006 b.n 80081ca <RCCEx_PLL3_Config+0x152>
  18044. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) == 0U)
  18045. 80081bc: 4b05 ldr r3, [pc, #20] @ (80081d4 <RCCEx_PLL3_Config+0x15c>)
  18046. 80081be: 681b ldr r3, [r3, #0]
  18047. 80081c0: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  18048. 80081c4: 2b00 cmp r3, #0
  18049. 80081c6: d0f0 beq.n 80081aa <RCCEx_PLL3_Config+0x132>
  18050. }
  18051. }
  18052. return status;
  18053. 80081c8: 7bfb ldrb r3, [r7, #15]
  18054. }
  18055. 80081ca: 4618 mov r0, r3
  18056. 80081cc: 3710 adds r7, #16
  18057. 80081ce: 46bd mov sp, r7
  18058. 80081d0: bd80 pop {r7, pc}
  18059. 80081d2: bf00 nop
  18060. 80081d4: 58024400 .word 0x58024400
  18061. 80081d8: ffff0007 .word 0xffff0007
  18062. 080081dc <HAL_RNG_Init>:
  18063. * @param hrng pointer to a RNG_HandleTypeDef structure that contains
  18064. * the configuration information for RNG.
  18065. * @retval HAL status
  18066. */
  18067. HAL_StatusTypeDef HAL_RNG_Init(RNG_HandleTypeDef *hrng)
  18068. {
  18069. 80081dc: b580 push {r7, lr}
  18070. 80081de: b084 sub sp, #16
  18071. 80081e0: af00 add r7, sp, #0
  18072. 80081e2: 6078 str r0, [r7, #4]
  18073. uint32_t tickstart;
  18074. /* Check the RNG handle allocation */
  18075. if (hrng == NULL)
  18076. 80081e4: 687b ldr r3, [r7, #4]
  18077. 80081e6: 2b00 cmp r3, #0
  18078. 80081e8: d101 bne.n 80081ee <HAL_RNG_Init+0x12>
  18079. {
  18080. return HAL_ERROR;
  18081. 80081ea: 2301 movs r3, #1
  18082. 80081ec: e054 b.n 8008298 <HAL_RNG_Init+0xbc>
  18083. /* Init the low level hardware */
  18084. hrng->MspInitCallback(hrng);
  18085. }
  18086. #else
  18087. if (hrng->State == HAL_RNG_STATE_RESET)
  18088. 80081ee: 687b ldr r3, [r7, #4]
  18089. 80081f0: 7a5b ldrb r3, [r3, #9]
  18090. 80081f2: b2db uxtb r3, r3
  18091. 80081f4: 2b00 cmp r3, #0
  18092. 80081f6: d105 bne.n 8008204 <HAL_RNG_Init+0x28>
  18093. {
  18094. /* Allocate lock resource and initialize it */
  18095. hrng->Lock = HAL_UNLOCKED;
  18096. 80081f8: 687b ldr r3, [r7, #4]
  18097. 80081fa: 2200 movs r2, #0
  18098. 80081fc: 721a strb r2, [r3, #8]
  18099. /* Init the low level hardware */
  18100. HAL_RNG_MspInit(hrng);
  18101. 80081fe: 6878 ldr r0, [r7, #4]
  18102. 8008200: f7f9 f960 bl 80014c4 <HAL_RNG_MspInit>
  18103. }
  18104. #endif /* USE_HAL_RNG_REGISTER_CALLBACKS */
  18105. /* Change RNG peripheral state */
  18106. hrng->State = HAL_RNG_STATE_BUSY;
  18107. 8008204: 687b ldr r3, [r7, #4]
  18108. 8008206: 2202 movs r2, #2
  18109. 8008208: 725a strb r2, [r3, #9]
  18110. }
  18111. }
  18112. }
  18113. #else
  18114. /* Clock Error Detection Configuration */
  18115. MODIFY_REG(hrng->Instance->CR, RNG_CR_CED, hrng->Init.ClockErrorDetection);
  18116. 800820a: 687b ldr r3, [r7, #4]
  18117. 800820c: 681b ldr r3, [r3, #0]
  18118. 800820e: 681b ldr r3, [r3, #0]
  18119. 8008210: f023 0120 bic.w r1, r3, #32
  18120. 8008214: 687b ldr r3, [r7, #4]
  18121. 8008216: 685a ldr r2, [r3, #4]
  18122. 8008218: 687b ldr r3, [r7, #4]
  18123. 800821a: 681b ldr r3, [r3, #0]
  18124. 800821c: 430a orrs r2, r1
  18125. 800821e: 601a str r2, [r3, #0]
  18126. #endif /* RNG_CR_CONDRST */
  18127. /* Enable the RNG Peripheral */
  18128. __HAL_RNG_ENABLE(hrng);
  18129. 8008220: 687b ldr r3, [r7, #4]
  18130. 8008222: 681b ldr r3, [r3, #0]
  18131. 8008224: 681a ldr r2, [r3, #0]
  18132. 8008226: 687b ldr r3, [r7, #4]
  18133. 8008228: 681b ldr r3, [r3, #0]
  18134. 800822a: f042 0204 orr.w r2, r2, #4
  18135. 800822e: 601a str r2, [r3, #0]
  18136. /* verify that no seed error */
  18137. if (__HAL_RNG_GET_IT(hrng, RNG_IT_SEI) != RESET)
  18138. 8008230: 687b ldr r3, [r7, #4]
  18139. 8008232: 681b ldr r3, [r3, #0]
  18140. 8008234: 685b ldr r3, [r3, #4]
  18141. 8008236: f003 0340 and.w r3, r3, #64 @ 0x40
  18142. 800823a: 2b40 cmp r3, #64 @ 0x40
  18143. 800823c: d104 bne.n 8008248 <HAL_RNG_Init+0x6c>
  18144. {
  18145. hrng->State = HAL_RNG_STATE_ERROR;
  18146. 800823e: 687b ldr r3, [r7, #4]
  18147. 8008240: 2204 movs r2, #4
  18148. 8008242: 725a strb r2, [r3, #9]
  18149. return HAL_ERROR;
  18150. 8008244: 2301 movs r3, #1
  18151. 8008246: e027 b.n 8008298 <HAL_RNG_Init+0xbc>
  18152. }
  18153. /* Get tick */
  18154. tickstart = HAL_GetTick();
  18155. 8008248: f7fa fa0a bl 8002660 <HAL_GetTick>
  18156. 800824c: 60f8 str r0, [r7, #12]
  18157. /* Check if data register contains valid random data */
  18158. while (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  18159. 800824e: e015 b.n 800827c <HAL_RNG_Init+0xa0>
  18160. {
  18161. if ((HAL_GetTick() - tickstart) > RNG_TIMEOUT_VALUE)
  18162. 8008250: f7fa fa06 bl 8002660 <HAL_GetTick>
  18163. 8008254: 4602 mov r2, r0
  18164. 8008256: 68fb ldr r3, [r7, #12]
  18165. 8008258: 1ad3 subs r3, r2, r3
  18166. 800825a: 2b02 cmp r3, #2
  18167. 800825c: d90e bls.n 800827c <HAL_RNG_Init+0xa0>
  18168. {
  18169. /* New check to avoid false timeout detection in case of preemption */
  18170. if (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  18171. 800825e: 687b ldr r3, [r7, #4]
  18172. 8008260: 681b ldr r3, [r3, #0]
  18173. 8008262: 685b ldr r3, [r3, #4]
  18174. 8008264: f003 0304 and.w r3, r3, #4
  18175. 8008268: 2b04 cmp r3, #4
  18176. 800826a: d107 bne.n 800827c <HAL_RNG_Init+0xa0>
  18177. {
  18178. hrng->State = HAL_RNG_STATE_ERROR;
  18179. 800826c: 687b ldr r3, [r7, #4]
  18180. 800826e: 2204 movs r2, #4
  18181. 8008270: 725a strb r2, [r3, #9]
  18182. hrng->ErrorCode = HAL_RNG_ERROR_TIMEOUT;
  18183. 8008272: 687b ldr r3, [r7, #4]
  18184. 8008274: 2202 movs r2, #2
  18185. 8008276: 60da str r2, [r3, #12]
  18186. return HAL_ERROR;
  18187. 8008278: 2301 movs r3, #1
  18188. 800827a: e00d b.n 8008298 <HAL_RNG_Init+0xbc>
  18189. while (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  18190. 800827c: 687b ldr r3, [r7, #4]
  18191. 800827e: 681b ldr r3, [r3, #0]
  18192. 8008280: 685b ldr r3, [r3, #4]
  18193. 8008282: f003 0304 and.w r3, r3, #4
  18194. 8008286: 2b04 cmp r3, #4
  18195. 8008288: d0e2 beq.n 8008250 <HAL_RNG_Init+0x74>
  18196. }
  18197. }
  18198. }
  18199. /* Initialize the RNG state */
  18200. hrng->State = HAL_RNG_STATE_READY;
  18201. 800828a: 687b ldr r3, [r7, #4]
  18202. 800828c: 2201 movs r2, #1
  18203. 800828e: 725a strb r2, [r3, #9]
  18204. /* Initialise the error code */
  18205. hrng->ErrorCode = HAL_RNG_ERROR_NONE;
  18206. 8008290: 687b ldr r3, [r7, #4]
  18207. 8008292: 2200 movs r2, #0
  18208. 8008294: 60da str r2, [r3, #12]
  18209. /* Return function status */
  18210. return HAL_OK;
  18211. 8008296: 2300 movs r3, #0
  18212. }
  18213. 8008298: 4618 mov r0, r3
  18214. 800829a: 3710 adds r7, #16
  18215. 800829c: 46bd mov sp, r7
  18216. 800829e: bd80 pop {r7, pc}
  18217. 080082a0 <HAL_TIM_Base_Init>:
  18218. * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init()
  18219. * @param htim TIM Base handle
  18220. * @retval HAL status
  18221. */
  18222. HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim)
  18223. {
  18224. 80082a0: b580 push {r7, lr}
  18225. 80082a2: b082 sub sp, #8
  18226. 80082a4: af00 add r7, sp, #0
  18227. 80082a6: 6078 str r0, [r7, #4]
  18228. /* Check the TIM handle allocation */
  18229. if (htim == NULL)
  18230. 80082a8: 687b ldr r3, [r7, #4]
  18231. 80082aa: 2b00 cmp r3, #0
  18232. 80082ac: d101 bne.n 80082b2 <HAL_TIM_Base_Init+0x12>
  18233. {
  18234. return HAL_ERROR;
  18235. 80082ae: 2301 movs r3, #1
  18236. 80082b0: e049 b.n 8008346 <HAL_TIM_Base_Init+0xa6>
  18237. assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
  18238. assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
  18239. assert_param(IS_TIM_PERIOD(htim, htim->Init.Period));
  18240. assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
  18241. if (htim->State == HAL_TIM_STATE_RESET)
  18242. 80082b2: 687b ldr r3, [r7, #4]
  18243. 80082b4: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  18244. 80082b8: b2db uxtb r3, r3
  18245. 80082ba: 2b00 cmp r3, #0
  18246. 80082bc: d106 bne.n 80082cc <HAL_TIM_Base_Init+0x2c>
  18247. {
  18248. /* Allocate lock resource and initialize it */
  18249. htim->Lock = HAL_UNLOCKED;
  18250. 80082be: 687b ldr r3, [r7, #4]
  18251. 80082c0: 2200 movs r2, #0
  18252. 80082c2: f883 203c strb.w r2, [r3, #60] @ 0x3c
  18253. }
  18254. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  18255. htim->Base_MspInitCallback(htim);
  18256. #else
  18257. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  18258. HAL_TIM_Base_MspInit(htim);
  18259. 80082c6: 6878 ldr r0, [r7, #4]
  18260. 80082c8: f000 f841 bl 800834e <HAL_TIM_Base_MspInit>
  18261. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  18262. }
  18263. /* Set the TIM state */
  18264. htim->State = HAL_TIM_STATE_BUSY;
  18265. 80082cc: 687b ldr r3, [r7, #4]
  18266. 80082ce: 2202 movs r2, #2
  18267. 80082d0: f883 203d strb.w r2, [r3, #61] @ 0x3d
  18268. /* Set the Time Base configuration */
  18269. TIM_Base_SetConfig(htim->Instance, &htim->Init);
  18270. 80082d4: 687b ldr r3, [r7, #4]
  18271. 80082d6: 681a ldr r2, [r3, #0]
  18272. 80082d8: 687b ldr r3, [r7, #4]
  18273. 80082da: 3304 adds r3, #4
  18274. 80082dc: 4619 mov r1, r3
  18275. 80082de: 4610 mov r0, r2
  18276. 80082e0: f000 f9e8 bl 80086b4 <TIM_Base_SetConfig>
  18277. /* Initialize the DMA burst operation state */
  18278. htim->DMABurstState = HAL_DMA_BURST_STATE_READY;
  18279. 80082e4: 687b ldr r3, [r7, #4]
  18280. 80082e6: 2201 movs r2, #1
  18281. 80082e8: f883 2048 strb.w r2, [r3, #72] @ 0x48
  18282. /* Initialize the TIM channels state */
  18283. TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  18284. 80082ec: 687b ldr r3, [r7, #4]
  18285. 80082ee: 2201 movs r2, #1
  18286. 80082f0: f883 203e strb.w r2, [r3, #62] @ 0x3e
  18287. 80082f4: 687b ldr r3, [r7, #4]
  18288. 80082f6: 2201 movs r2, #1
  18289. 80082f8: f883 203f strb.w r2, [r3, #63] @ 0x3f
  18290. 80082fc: 687b ldr r3, [r7, #4]
  18291. 80082fe: 2201 movs r2, #1
  18292. 8008300: f883 2040 strb.w r2, [r3, #64] @ 0x40
  18293. 8008304: 687b ldr r3, [r7, #4]
  18294. 8008306: 2201 movs r2, #1
  18295. 8008308: f883 2041 strb.w r2, [r3, #65] @ 0x41
  18296. 800830c: 687b ldr r3, [r7, #4]
  18297. 800830e: 2201 movs r2, #1
  18298. 8008310: f883 2042 strb.w r2, [r3, #66] @ 0x42
  18299. 8008314: 687b ldr r3, [r7, #4]
  18300. 8008316: 2201 movs r2, #1
  18301. 8008318: f883 2043 strb.w r2, [r3, #67] @ 0x43
  18302. TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  18303. 800831c: 687b ldr r3, [r7, #4]
  18304. 800831e: 2201 movs r2, #1
  18305. 8008320: f883 2044 strb.w r2, [r3, #68] @ 0x44
  18306. 8008324: 687b ldr r3, [r7, #4]
  18307. 8008326: 2201 movs r2, #1
  18308. 8008328: f883 2045 strb.w r2, [r3, #69] @ 0x45
  18309. 800832c: 687b ldr r3, [r7, #4]
  18310. 800832e: 2201 movs r2, #1
  18311. 8008330: f883 2046 strb.w r2, [r3, #70] @ 0x46
  18312. 8008334: 687b ldr r3, [r7, #4]
  18313. 8008336: 2201 movs r2, #1
  18314. 8008338: f883 2047 strb.w r2, [r3, #71] @ 0x47
  18315. /* Initialize the TIM state*/
  18316. htim->State = HAL_TIM_STATE_READY;
  18317. 800833c: 687b ldr r3, [r7, #4]
  18318. 800833e: 2201 movs r2, #1
  18319. 8008340: f883 203d strb.w r2, [r3, #61] @ 0x3d
  18320. return HAL_OK;
  18321. 8008344: 2300 movs r3, #0
  18322. }
  18323. 8008346: 4618 mov r0, r3
  18324. 8008348: 3708 adds r7, #8
  18325. 800834a: 46bd mov sp, r7
  18326. 800834c: bd80 pop {r7, pc}
  18327. 0800834e <HAL_TIM_Base_MspInit>:
  18328. * @brief Initializes the TIM Base MSP.
  18329. * @param htim TIM Base handle
  18330. * @retval None
  18331. */
  18332. __weak void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
  18333. {
  18334. 800834e: b480 push {r7}
  18335. 8008350: b083 sub sp, #12
  18336. 8008352: af00 add r7, sp, #0
  18337. 8008354: 6078 str r0, [r7, #4]
  18338. UNUSED(htim);
  18339. /* NOTE : This function should not be modified, when the callback is needed,
  18340. the HAL_TIM_Base_MspInit could be implemented in the user file
  18341. */
  18342. }
  18343. 8008356: bf00 nop
  18344. 8008358: 370c adds r7, #12
  18345. 800835a: 46bd mov sp, r7
  18346. 800835c: f85d 7b04 ldr.w r7, [sp], #4
  18347. 8008360: 4770 bx lr
  18348. ...
  18349. 08008364 <HAL_TIM_Base_Start_IT>:
  18350. * @brief Starts the TIM Base generation in interrupt mode.
  18351. * @param htim TIM Base handle
  18352. * @retval HAL status
  18353. */
  18354. HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
  18355. {
  18356. 8008364: b480 push {r7}
  18357. 8008366: b085 sub sp, #20
  18358. 8008368: af00 add r7, sp, #0
  18359. 800836a: 6078 str r0, [r7, #4]
  18360. /* Check the parameters */
  18361. assert_param(IS_TIM_INSTANCE(htim->Instance));
  18362. /* Check the TIM state */
  18363. if (htim->State != HAL_TIM_STATE_READY)
  18364. 800836c: 687b ldr r3, [r7, #4]
  18365. 800836e: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  18366. 8008372: b2db uxtb r3, r3
  18367. 8008374: 2b01 cmp r3, #1
  18368. 8008376: d001 beq.n 800837c <HAL_TIM_Base_Start_IT+0x18>
  18369. {
  18370. return HAL_ERROR;
  18371. 8008378: 2301 movs r3, #1
  18372. 800837a: e054 b.n 8008426 <HAL_TIM_Base_Start_IT+0xc2>
  18373. }
  18374. /* Set the TIM state */
  18375. htim->State = HAL_TIM_STATE_BUSY;
  18376. 800837c: 687b ldr r3, [r7, #4]
  18377. 800837e: 2202 movs r2, #2
  18378. 8008380: f883 203d strb.w r2, [r3, #61] @ 0x3d
  18379. /* Enable the TIM Update interrupt */
  18380. __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);
  18381. 8008384: 687b ldr r3, [r7, #4]
  18382. 8008386: 681b ldr r3, [r3, #0]
  18383. 8008388: 68da ldr r2, [r3, #12]
  18384. 800838a: 687b ldr r3, [r7, #4]
  18385. 800838c: 681b ldr r3, [r3, #0]
  18386. 800838e: f042 0201 orr.w r2, r2, #1
  18387. 8008392: 60da str r2, [r3, #12]
  18388. /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  18389. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  18390. 8008394: 687b ldr r3, [r7, #4]
  18391. 8008396: 681b ldr r3, [r3, #0]
  18392. 8008398: 4a26 ldr r2, [pc, #152] @ (8008434 <HAL_TIM_Base_Start_IT+0xd0>)
  18393. 800839a: 4293 cmp r3, r2
  18394. 800839c: d022 beq.n 80083e4 <HAL_TIM_Base_Start_IT+0x80>
  18395. 800839e: 687b ldr r3, [r7, #4]
  18396. 80083a0: 681b ldr r3, [r3, #0]
  18397. 80083a2: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  18398. 80083a6: d01d beq.n 80083e4 <HAL_TIM_Base_Start_IT+0x80>
  18399. 80083a8: 687b ldr r3, [r7, #4]
  18400. 80083aa: 681b ldr r3, [r3, #0]
  18401. 80083ac: 4a22 ldr r2, [pc, #136] @ (8008438 <HAL_TIM_Base_Start_IT+0xd4>)
  18402. 80083ae: 4293 cmp r3, r2
  18403. 80083b0: d018 beq.n 80083e4 <HAL_TIM_Base_Start_IT+0x80>
  18404. 80083b2: 687b ldr r3, [r7, #4]
  18405. 80083b4: 681b ldr r3, [r3, #0]
  18406. 80083b6: 4a21 ldr r2, [pc, #132] @ (800843c <HAL_TIM_Base_Start_IT+0xd8>)
  18407. 80083b8: 4293 cmp r3, r2
  18408. 80083ba: d013 beq.n 80083e4 <HAL_TIM_Base_Start_IT+0x80>
  18409. 80083bc: 687b ldr r3, [r7, #4]
  18410. 80083be: 681b ldr r3, [r3, #0]
  18411. 80083c0: 4a1f ldr r2, [pc, #124] @ (8008440 <HAL_TIM_Base_Start_IT+0xdc>)
  18412. 80083c2: 4293 cmp r3, r2
  18413. 80083c4: d00e beq.n 80083e4 <HAL_TIM_Base_Start_IT+0x80>
  18414. 80083c6: 687b ldr r3, [r7, #4]
  18415. 80083c8: 681b ldr r3, [r3, #0]
  18416. 80083ca: 4a1e ldr r2, [pc, #120] @ (8008444 <HAL_TIM_Base_Start_IT+0xe0>)
  18417. 80083cc: 4293 cmp r3, r2
  18418. 80083ce: d009 beq.n 80083e4 <HAL_TIM_Base_Start_IT+0x80>
  18419. 80083d0: 687b ldr r3, [r7, #4]
  18420. 80083d2: 681b ldr r3, [r3, #0]
  18421. 80083d4: 4a1c ldr r2, [pc, #112] @ (8008448 <HAL_TIM_Base_Start_IT+0xe4>)
  18422. 80083d6: 4293 cmp r3, r2
  18423. 80083d8: d004 beq.n 80083e4 <HAL_TIM_Base_Start_IT+0x80>
  18424. 80083da: 687b ldr r3, [r7, #4]
  18425. 80083dc: 681b ldr r3, [r3, #0]
  18426. 80083de: 4a1b ldr r2, [pc, #108] @ (800844c <HAL_TIM_Base_Start_IT+0xe8>)
  18427. 80083e0: 4293 cmp r3, r2
  18428. 80083e2: d115 bne.n 8008410 <HAL_TIM_Base_Start_IT+0xac>
  18429. {
  18430. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  18431. 80083e4: 687b ldr r3, [r7, #4]
  18432. 80083e6: 681b ldr r3, [r3, #0]
  18433. 80083e8: 689a ldr r2, [r3, #8]
  18434. 80083ea: 4b19 ldr r3, [pc, #100] @ (8008450 <HAL_TIM_Base_Start_IT+0xec>)
  18435. 80083ec: 4013 ands r3, r2
  18436. 80083ee: 60fb str r3, [r7, #12]
  18437. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  18438. 80083f0: 68fb ldr r3, [r7, #12]
  18439. 80083f2: 2b06 cmp r3, #6
  18440. 80083f4: d015 beq.n 8008422 <HAL_TIM_Base_Start_IT+0xbe>
  18441. 80083f6: 68fb ldr r3, [r7, #12]
  18442. 80083f8: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  18443. 80083fc: d011 beq.n 8008422 <HAL_TIM_Base_Start_IT+0xbe>
  18444. {
  18445. __HAL_TIM_ENABLE(htim);
  18446. 80083fe: 687b ldr r3, [r7, #4]
  18447. 8008400: 681b ldr r3, [r3, #0]
  18448. 8008402: 681a ldr r2, [r3, #0]
  18449. 8008404: 687b ldr r3, [r7, #4]
  18450. 8008406: 681b ldr r3, [r3, #0]
  18451. 8008408: f042 0201 orr.w r2, r2, #1
  18452. 800840c: 601a str r2, [r3, #0]
  18453. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  18454. 800840e: e008 b.n 8008422 <HAL_TIM_Base_Start_IT+0xbe>
  18455. }
  18456. }
  18457. else
  18458. {
  18459. __HAL_TIM_ENABLE(htim);
  18460. 8008410: 687b ldr r3, [r7, #4]
  18461. 8008412: 681b ldr r3, [r3, #0]
  18462. 8008414: 681a ldr r2, [r3, #0]
  18463. 8008416: 687b ldr r3, [r7, #4]
  18464. 8008418: 681b ldr r3, [r3, #0]
  18465. 800841a: f042 0201 orr.w r2, r2, #1
  18466. 800841e: 601a str r2, [r3, #0]
  18467. 8008420: e000 b.n 8008424 <HAL_TIM_Base_Start_IT+0xc0>
  18468. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  18469. 8008422: bf00 nop
  18470. }
  18471. /* Return function status */
  18472. return HAL_OK;
  18473. 8008424: 2300 movs r3, #0
  18474. }
  18475. 8008426: 4618 mov r0, r3
  18476. 8008428: 3714 adds r7, #20
  18477. 800842a: 46bd mov sp, r7
  18478. 800842c: f85d 7b04 ldr.w r7, [sp], #4
  18479. 8008430: 4770 bx lr
  18480. 8008432: bf00 nop
  18481. 8008434: 40010000 .word 0x40010000
  18482. 8008438: 40000400 .word 0x40000400
  18483. 800843c: 40000800 .word 0x40000800
  18484. 8008440: 40000c00 .word 0x40000c00
  18485. 8008444: 40010400 .word 0x40010400
  18486. 8008448: 40001800 .word 0x40001800
  18487. 800844c: 40014000 .word 0x40014000
  18488. 8008450: 00010007 .word 0x00010007
  18489. 08008454 <HAL_TIM_IRQHandler>:
  18490. * @brief This function handles TIM interrupts requests.
  18491. * @param htim TIM handle
  18492. * @retval None
  18493. */
  18494. void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
  18495. {
  18496. 8008454: b580 push {r7, lr}
  18497. 8008456: b084 sub sp, #16
  18498. 8008458: af00 add r7, sp, #0
  18499. 800845a: 6078 str r0, [r7, #4]
  18500. uint32_t itsource = htim->Instance->DIER;
  18501. 800845c: 687b ldr r3, [r7, #4]
  18502. 800845e: 681b ldr r3, [r3, #0]
  18503. 8008460: 68db ldr r3, [r3, #12]
  18504. 8008462: 60fb str r3, [r7, #12]
  18505. uint32_t itflag = htim->Instance->SR;
  18506. 8008464: 687b ldr r3, [r7, #4]
  18507. 8008466: 681b ldr r3, [r3, #0]
  18508. 8008468: 691b ldr r3, [r3, #16]
  18509. 800846a: 60bb str r3, [r7, #8]
  18510. /* Capture compare 1 event */
  18511. if ((itflag & (TIM_FLAG_CC1)) == (TIM_FLAG_CC1))
  18512. 800846c: 68bb ldr r3, [r7, #8]
  18513. 800846e: f003 0302 and.w r3, r3, #2
  18514. 8008472: 2b00 cmp r3, #0
  18515. 8008474: d020 beq.n 80084b8 <HAL_TIM_IRQHandler+0x64>
  18516. {
  18517. if ((itsource & (TIM_IT_CC1)) == (TIM_IT_CC1))
  18518. 8008476: 68fb ldr r3, [r7, #12]
  18519. 8008478: f003 0302 and.w r3, r3, #2
  18520. 800847c: 2b00 cmp r3, #0
  18521. 800847e: d01b beq.n 80084b8 <HAL_TIM_IRQHandler+0x64>
  18522. {
  18523. {
  18524. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC1);
  18525. 8008480: 687b ldr r3, [r7, #4]
  18526. 8008482: 681b ldr r3, [r3, #0]
  18527. 8008484: f06f 0202 mvn.w r2, #2
  18528. 8008488: 611a str r2, [r3, #16]
  18529. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;
  18530. 800848a: 687b ldr r3, [r7, #4]
  18531. 800848c: 2201 movs r2, #1
  18532. 800848e: 771a strb r2, [r3, #28]
  18533. /* Input capture event */
  18534. if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U)
  18535. 8008490: 687b ldr r3, [r7, #4]
  18536. 8008492: 681b ldr r3, [r3, #0]
  18537. 8008494: 699b ldr r3, [r3, #24]
  18538. 8008496: f003 0303 and.w r3, r3, #3
  18539. 800849a: 2b00 cmp r3, #0
  18540. 800849c: d003 beq.n 80084a6 <HAL_TIM_IRQHandler+0x52>
  18541. {
  18542. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  18543. htim->IC_CaptureCallback(htim);
  18544. #else
  18545. HAL_TIM_IC_CaptureCallback(htim);
  18546. 800849e: 6878 ldr r0, [r7, #4]
  18547. 80084a0: f000 f8e9 bl 8008676 <HAL_TIM_IC_CaptureCallback>
  18548. 80084a4: e005 b.n 80084b2 <HAL_TIM_IRQHandler+0x5e>
  18549. {
  18550. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  18551. htim->OC_DelayElapsedCallback(htim);
  18552. htim->PWM_PulseFinishedCallback(htim);
  18553. #else
  18554. HAL_TIM_OC_DelayElapsedCallback(htim);
  18555. 80084a6: 6878 ldr r0, [r7, #4]
  18556. 80084a8: f000 f8db bl 8008662 <HAL_TIM_OC_DelayElapsedCallback>
  18557. HAL_TIM_PWM_PulseFinishedCallback(htim);
  18558. 80084ac: 6878 ldr r0, [r7, #4]
  18559. 80084ae: f000 f8ec bl 800868a <HAL_TIM_PWM_PulseFinishedCallback>
  18560. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  18561. }
  18562. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  18563. 80084b2: 687b ldr r3, [r7, #4]
  18564. 80084b4: 2200 movs r2, #0
  18565. 80084b6: 771a strb r2, [r3, #28]
  18566. }
  18567. }
  18568. }
  18569. /* Capture compare 2 event */
  18570. if ((itflag & (TIM_FLAG_CC2)) == (TIM_FLAG_CC2))
  18571. 80084b8: 68bb ldr r3, [r7, #8]
  18572. 80084ba: f003 0304 and.w r3, r3, #4
  18573. 80084be: 2b00 cmp r3, #0
  18574. 80084c0: d020 beq.n 8008504 <HAL_TIM_IRQHandler+0xb0>
  18575. {
  18576. if ((itsource & (TIM_IT_CC2)) == (TIM_IT_CC2))
  18577. 80084c2: 68fb ldr r3, [r7, #12]
  18578. 80084c4: f003 0304 and.w r3, r3, #4
  18579. 80084c8: 2b00 cmp r3, #0
  18580. 80084ca: d01b beq.n 8008504 <HAL_TIM_IRQHandler+0xb0>
  18581. {
  18582. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC2);
  18583. 80084cc: 687b ldr r3, [r7, #4]
  18584. 80084ce: 681b ldr r3, [r3, #0]
  18585. 80084d0: f06f 0204 mvn.w r2, #4
  18586. 80084d4: 611a str r2, [r3, #16]
  18587. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;
  18588. 80084d6: 687b ldr r3, [r7, #4]
  18589. 80084d8: 2202 movs r2, #2
  18590. 80084da: 771a strb r2, [r3, #28]
  18591. /* Input capture event */
  18592. if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U)
  18593. 80084dc: 687b ldr r3, [r7, #4]
  18594. 80084de: 681b ldr r3, [r3, #0]
  18595. 80084e0: 699b ldr r3, [r3, #24]
  18596. 80084e2: f403 7340 and.w r3, r3, #768 @ 0x300
  18597. 80084e6: 2b00 cmp r3, #0
  18598. 80084e8: d003 beq.n 80084f2 <HAL_TIM_IRQHandler+0x9e>
  18599. {
  18600. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  18601. htim->IC_CaptureCallback(htim);
  18602. #else
  18603. HAL_TIM_IC_CaptureCallback(htim);
  18604. 80084ea: 6878 ldr r0, [r7, #4]
  18605. 80084ec: f000 f8c3 bl 8008676 <HAL_TIM_IC_CaptureCallback>
  18606. 80084f0: e005 b.n 80084fe <HAL_TIM_IRQHandler+0xaa>
  18607. {
  18608. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  18609. htim->OC_DelayElapsedCallback(htim);
  18610. htim->PWM_PulseFinishedCallback(htim);
  18611. #else
  18612. HAL_TIM_OC_DelayElapsedCallback(htim);
  18613. 80084f2: 6878 ldr r0, [r7, #4]
  18614. 80084f4: f000 f8b5 bl 8008662 <HAL_TIM_OC_DelayElapsedCallback>
  18615. HAL_TIM_PWM_PulseFinishedCallback(htim);
  18616. 80084f8: 6878 ldr r0, [r7, #4]
  18617. 80084fa: f000 f8c6 bl 800868a <HAL_TIM_PWM_PulseFinishedCallback>
  18618. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  18619. }
  18620. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  18621. 80084fe: 687b ldr r3, [r7, #4]
  18622. 8008500: 2200 movs r2, #0
  18623. 8008502: 771a strb r2, [r3, #28]
  18624. }
  18625. }
  18626. /* Capture compare 3 event */
  18627. if ((itflag & (TIM_FLAG_CC3)) == (TIM_FLAG_CC3))
  18628. 8008504: 68bb ldr r3, [r7, #8]
  18629. 8008506: f003 0308 and.w r3, r3, #8
  18630. 800850a: 2b00 cmp r3, #0
  18631. 800850c: d020 beq.n 8008550 <HAL_TIM_IRQHandler+0xfc>
  18632. {
  18633. if ((itsource & (TIM_IT_CC3)) == (TIM_IT_CC3))
  18634. 800850e: 68fb ldr r3, [r7, #12]
  18635. 8008510: f003 0308 and.w r3, r3, #8
  18636. 8008514: 2b00 cmp r3, #0
  18637. 8008516: d01b beq.n 8008550 <HAL_TIM_IRQHandler+0xfc>
  18638. {
  18639. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC3);
  18640. 8008518: 687b ldr r3, [r7, #4]
  18641. 800851a: 681b ldr r3, [r3, #0]
  18642. 800851c: f06f 0208 mvn.w r2, #8
  18643. 8008520: 611a str r2, [r3, #16]
  18644. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;
  18645. 8008522: 687b ldr r3, [r7, #4]
  18646. 8008524: 2204 movs r2, #4
  18647. 8008526: 771a strb r2, [r3, #28]
  18648. /* Input capture event */
  18649. if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U)
  18650. 8008528: 687b ldr r3, [r7, #4]
  18651. 800852a: 681b ldr r3, [r3, #0]
  18652. 800852c: 69db ldr r3, [r3, #28]
  18653. 800852e: f003 0303 and.w r3, r3, #3
  18654. 8008532: 2b00 cmp r3, #0
  18655. 8008534: d003 beq.n 800853e <HAL_TIM_IRQHandler+0xea>
  18656. {
  18657. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  18658. htim->IC_CaptureCallback(htim);
  18659. #else
  18660. HAL_TIM_IC_CaptureCallback(htim);
  18661. 8008536: 6878 ldr r0, [r7, #4]
  18662. 8008538: f000 f89d bl 8008676 <HAL_TIM_IC_CaptureCallback>
  18663. 800853c: e005 b.n 800854a <HAL_TIM_IRQHandler+0xf6>
  18664. {
  18665. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  18666. htim->OC_DelayElapsedCallback(htim);
  18667. htim->PWM_PulseFinishedCallback(htim);
  18668. #else
  18669. HAL_TIM_OC_DelayElapsedCallback(htim);
  18670. 800853e: 6878 ldr r0, [r7, #4]
  18671. 8008540: f000 f88f bl 8008662 <HAL_TIM_OC_DelayElapsedCallback>
  18672. HAL_TIM_PWM_PulseFinishedCallback(htim);
  18673. 8008544: 6878 ldr r0, [r7, #4]
  18674. 8008546: f000 f8a0 bl 800868a <HAL_TIM_PWM_PulseFinishedCallback>
  18675. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  18676. }
  18677. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  18678. 800854a: 687b ldr r3, [r7, #4]
  18679. 800854c: 2200 movs r2, #0
  18680. 800854e: 771a strb r2, [r3, #28]
  18681. }
  18682. }
  18683. /* Capture compare 4 event */
  18684. if ((itflag & (TIM_FLAG_CC4)) == (TIM_FLAG_CC4))
  18685. 8008550: 68bb ldr r3, [r7, #8]
  18686. 8008552: f003 0310 and.w r3, r3, #16
  18687. 8008556: 2b00 cmp r3, #0
  18688. 8008558: d020 beq.n 800859c <HAL_TIM_IRQHandler+0x148>
  18689. {
  18690. if ((itsource & (TIM_IT_CC4)) == (TIM_IT_CC4))
  18691. 800855a: 68fb ldr r3, [r7, #12]
  18692. 800855c: f003 0310 and.w r3, r3, #16
  18693. 8008560: 2b00 cmp r3, #0
  18694. 8008562: d01b beq.n 800859c <HAL_TIM_IRQHandler+0x148>
  18695. {
  18696. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC4);
  18697. 8008564: 687b ldr r3, [r7, #4]
  18698. 8008566: 681b ldr r3, [r3, #0]
  18699. 8008568: f06f 0210 mvn.w r2, #16
  18700. 800856c: 611a str r2, [r3, #16]
  18701. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;
  18702. 800856e: 687b ldr r3, [r7, #4]
  18703. 8008570: 2208 movs r2, #8
  18704. 8008572: 771a strb r2, [r3, #28]
  18705. /* Input capture event */
  18706. if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U)
  18707. 8008574: 687b ldr r3, [r7, #4]
  18708. 8008576: 681b ldr r3, [r3, #0]
  18709. 8008578: 69db ldr r3, [r3, #28]
  18710. 800857a: f403 7340 and.w r3, r3, #768 @ 0x300
  18711. 800857e: 2b00 cmp r3, #0
  18712. 8008580: d003 beq.n 800858a <HAL_TIM_IRQHandler+0x136>
  18713. {
  18714. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  18715. htim->IC_CaptureCallback(htim);
  18716. #else
  18717. HAL_TIM_IC_CaptureCallback(htim);
  18718. 8008582: 6878 ldr r0, [r7, #4]
  18719. 8008584: f000 f877 bl 8008676 <HAL_TIM_IC_CaptureCallback>
  18720. 8008588: e005 b.n 8008596 <HAL_TIM_IRQHandler+0x142>
  18721. {
  18722. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  18723. htim->OC_DelayElapsedCallback(htim);
  18724. htim->PWM_PulseFinishedCallback(htim);
  18725. #else
  18726. HAL_TIM_OC_DelayElapsedCallback(htim);
  18727. 800858a: 6878 ldr r0, [r7, #4]
  18728. 800858c: f000 f869 bl 8008662 <HAL_TIM_OC_DelayElapsedCallback>
  18729. HAL_TIM_PWM_PulseFinishedCallback(htim);
  18730. 8008590: 6878 ldr r0, [r7, #4]
  18731. 8008592: f000 f87a bl 800868a <HAL_TIM_PWM_PulseFinishedCallback>
  18732. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  18733. }
  18734. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  18735. 8008596: 687b ldr r3, [r7, #4]
  18736. 8008598: 2200 movs r2, #0
  18737. 800859a: 771a strb r2, [r3, #28]
  18738. }
  18739. }
  18740. /* TIM Update event */
  18741. if ((itflag & (TIM_FLAG_UPDATE)) == (TIM_FLAG_UPDATE))
  18742. 800859c: 68bb ldr r3, [r7, #8]
  18743. 800859e: f003 0301 and.w r3, r3, #1
  18744. 80085a2: 2b00 cmp r3, #0
  18745. 80085a4: d00c beq.n 80085c0 <HAL_TIM_IRQHandler+0x16c>
  18746. {
  18747. if ((itsource & (TIM_IT_UPDATE)) == (TIM_IT_UPDATE))
  18748. 80085a6: 68fb ldr r3, [r7, #12]
  18749. 80085a8: f003 0301 and.w r3, r3, #1
  18750. 80085ac: 2b00 cmp r3, #0
  18751. 80085ae: d007 beq.n 80085c0 <HAL_TIM_IRQHandler+0x16c>
  18752. {
  18753. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_UPDATE);
  18754. 80085b0: 687b ldr r3, [r7, #4]
  18755. 80085b2: 681b ldr r3, [r3, #0]
  18756. 80085b4: f06f 0201 mvn.w r2, #1
  18757. 80085b8: 611a str r2, [r3, #16]
  18758. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  18759. htim->PeriodElapsedCallback(htim);
  18760. #else
  18761. HAL_TIM_PeriodElapsedCallback(htim);
  18762. 80085ba: 6878 ldr r0, [r7, #4]
  18763. 80085bc: f7f8 fb32 bl 8000c24 <HAL_TIM_PeriodElapsedCallback>
  18764. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  18765. }
  18766. }
  18767. /* TIM Break input event */
  18768. if (((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK)) || \
  18769. 80085c0: 68bb ldr r3, [r7, #8]
  18770. 80085c2: f003 0380 and.w r3, r3, #128 @ 0x80
  18771. 80085c6: 2b00 cmp r3, #0
  18772. 80085c8: d104 bne.n 80085d4 <HAL_TIM_IRQHandler+0x180>
  18773. ((itflag & (TIM_FLAG_SYSTEM_BREAK)) == (TIM_FLAG_SYSTEM_BREAK)))
  18774. 80085ca: 68bb ldr r3, [r7, #8]
  18775. 80085cc: f403 5300 and.w r3, r3, #8192 @ 0x2000
  18776. if (((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK)) || \
  18777. 80085d0: 2b00 cmp r3, #0
  18778. 80085d2: d00c beq.n 80085ee <HAL_TIM_IRQHandler+0x19a>
  18779. {
  18780. if ((itsource & (TIM_IT_BREAK)) == (TIM_IT_BREAK))
  18781. 80085d4: 68fb ldr r3, [r7, #12]
  18782. 80085d6: f003 0380 and.w r3, r3, #128 @ 0x80
  18783. 80085da: 2b00 cmp r3, #0
  18784. 80085dc: d007 beq.n 80085ee <HAL_TIM_IRQHandler+0x19a>
  18785. {
  18786. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK | TIM_FLAG_SYSTEM_BREAK);
  18787. 80085de: 687b ldr r3, [r7, #4]
  18788. 80085e0: 681b ldr r3, [r3, #0]
  18789. 80085e2: f46f 5202 mvn.w r2, #8320 @ 0x2080
  18790. 80085e6: 611a str r2, [r3, #16]
  18791. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  18792. htim->BreakCallback(htim);
  18793. #else
  18794. HAL_TIMEx_BreakCallback(htim);
  18795. 80085e8: 6878 ldr r0, [r7, #4]
  18796. 80085ea: f000 f913 bl 8008814 <HAL_TIMEx_BreakCallback>
  18797. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  18798. }
  18799. }
  18800. /* TIM Break2 input event */
  18801. if ((itflag & (TIM_FLAG_BREAK2)) == (TIM_FLAG_BREAK2))
  18802. 80085ee: 68bb ldr r3, [r7, #8]
  18803. 80085f0: f403 7380 and.w r3, r3, #256 @ 0x100
  18804. 80085f4: 2b00 cmp r3, #0
  18805. 80085f6: d00c beq.n 8008612 <HAL_TIM_IRQHandler+0x1be>
  18806. {
  18807. if ((itsource & (TIM_IT_BREAK)) == (TIM_IT_BREAK))
  18808. 80085f8: 68fb ldr r3, [r7, #12]
  18809. 80085fa: f003 0380 and.w r3, r3, #128 @ 0x80
  18810. 80085fe: 2b00 cmp r3, #0
  18811. 8008600: d007 beq.n 8008612 <HAL_TIM_IRQHandler+0x1be>
  18812. {
  18813. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK2);
  18814. 8008602: 687b ldr r3, [r7, #4]
  18815. 8008604: 681b ldr r3, [r3, #0]
  18816. 8008606: f46f 7280 mvn.w r2, #256 @ 0x100
  18817. 800860a: 611a str r2, [r3, #16]
  18818. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  18819. htim->Break2Callback(htim);
  18820. #else
  18821. HAL_TIMEx_Break2Callback(htim);
  18822. 800860c: 6878 ldr r0, [r7, #4]
  18823. 800860e: f000 f90b bl 8008828 <HAL_TIMEx_Break2Callback>
  18824. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  18825. }
  18826. }
  18827. /* TIM Trigger detection event */
  18828. if ((itflag & (TIM_FLAG_TRIGGER)) == (TIM_FLAG_TRIGGER))
  18829. 8008612: 68bb ldr r3, [r7, #8]
  18830. 8008614: f003 0340 and.w r3, r3, #64 @ 0x40
  18831. 8008618: 2b00 cmp r3, #0
  18832. 800861a: d00c beq.n 8008636 <HAL_TIM_IRQHandler+0x1e2>
  18833. {
  18834. if ((itsource & (TIM_IT_TRIGGER)) == (TIM_IT_TRIGGER))
  18835. 800861c: 68fb ldr r3, [r7, #12]
  18836. 800861e: f003 0340 and.w r3, r3, #64 @ 0x40
  18837. 8008622: 2b00 cmp r3, #0
  18838. 8008624: d007 beq.n 8008636 <HAL_TIM_IRQHandler+0x1e2>
  18839. {
  18840. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_TRIGGER);
  18841. 8008626: 687b ldr r3, [r7, #4]
  18842. 8008628: 681b ldr r3, [r3, #0]
  18843. 800862a: f06f 0240 mvn.w r2, #64 @ 0x40
  18844. 800862e: 611a str r2, [r3, #16]
  18845. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  18846. htim->TriggerCallback(htim);
  18847. #else
  18848. HAL_TIM_TriggerCallback(htim);
  18849. 8008630: 6878 ldr r0, [r7, #4]
  18850. 8008632: f000 f834 bl 800869e <HAL_TIM_TriggerCallback>
  18851. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  18852. }
  18853. }
  18854. /* TIM commutation event */
  18855. if ((itflag & (TIM_FLAG_COM)) == (TIM_FLAG_COM))
  18856. 8008636: 68bb ldr r3, [r7, #8]
  18857. 8008638: f003 0320 and.w r3, r3, #32
  18858. 800863c: 2b00 cmp r3, #0
  18859. 800863e: d00c beq.n 800865a <HAL_TIM_IRQHandler+0x206>
  18860. {
  18861. if ((itsource & (TIM_IT_COM)) == (TIM_IT_COM))
  18862. 8008640: 68fb ldr r3, [r7, #12]
  18863. 8008642: f003 0320 and.w r3, r3, #32
  18864. 8008646: 2b00 cmp r3, #0
  18865. 8008648: d007 beq.n 800865a <HAL_TIM_IRQHandler+0x206>
  18866. {
  18867. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_COM);
  18868. 800864a: 687b ldr r3, [r7, #4]
  18869. 800864c: 681b ldr r3, [r3, #0]
  18870. 800864e: f06f 0220 mvn.w r2, #32
  18871. 8008652: 611a str r2, [r3, #16]
  18872. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  18873. htim->CommutationCallback(htim);
  18874. #else
  18875. HAL_TIMEx_CommutCallback(htim);
  18876. 8008654: 6878 ldr r0, [r7, #4]
  18877. 8008656: f000 f8d3 bl 8008800 <HAL_TIMEx_CommutCallback>
  18878. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  18879. }
  18880. }
  18881. }
  18882. 800865a: bf00 nop
  18883. 800865c: 3710 adds r7, #16
  18884. 800865e: 46bd mov sp, r7
  18885. 8008660: bd80 pop {r7, pc}
  18886. 08008662 <HAL_TIM_OC_DelayElapsedCallback>:
  18887. * @brief Output Compare callback in non-blocking mode
  18888. * @param htim TIM OC handle
  18889. * @retval None
  18890. */
  18891. __weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
  18892. {
  18893. 8008662: b480 push {r7}
  18894. 8008664: b083 sub sp, #12
  18895. 8008666: af00 add r7, sp, #0
  18896. 8008668: 6078 str r0, [r7, #4]
  18897. UNUSED(htim);
  18898. /* NOTE : This function should not be modified, when the callback is needed,
  18899. the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file
  18900. */
  18901. }
  18902. 800866a: bf00 nop
  18903. 800866c: 370c adds r7, #12
  18904. 800866e: 46bd mov sp, r7
  18905. 8008670: f85d 7b04 ldr.w r7, [sp], #4
  18906. 8008674: 4770 bx lr
  18907. 08008676 <HAL_TIM_IC_CaptureCallback>:
  18908. * @brief Input Capture callback in non-blocking mode
  18909. * @param htim TIM IC handle
  18910. * @retval None
  18911. */
  18912. __weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
  18913. {
  18914. 8008676: b480 push {r7}
  18915. 8008678: b083 sub sp, #12
  18916. 800867a: af00 add r7, sp, #0
  18917. 800867c: 6078 str r0, [r7, #4]
  18918. UNUSED(htim);
  18919. /* NOTE : This function should not be modified, when the callback is needed,
  18920. the HAL_TIM_IC_CaptureCallback could be implemented in the user file
  18921. */
  18922. }
  18923. 800867e: bf00 nop
  18924. 8008680: 370c adds r7, #12
  18925. 8008682: 46bd mov sp, r7
  18926. 8008684: f85d 7b04 ldr.w r7, [sp], #4
  18927. 8008688: 4770 bx lr
  18928. 0800868a <HAL_TIM_PWM_PulseFinishedCallback>:
  18929. * @brief PWM Pulse finished callback in non-blocking mode
  18930. * @param htim TIM handle
  18931. * @retval None
  18932. */
  18933. __weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
  18934. {
  18935. 800868a: b480 push {r7}
  18936. 800868c: b083 sub sp, #12
  18937. 800868e: af00 add r7, sp, #0
  18938. 8008690: 6078 str r0, [r7, #4]
  18939. UNUSED(htim);
  18940. /* NOTE : This function should not be modified, when the callback is needed,
  18941. the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file
  18942. */
  18943. }
  18944. 8008692: bf00 nop
  18945. 8008694: 370c adds r7, #12
  18946. 8008696: 46bd mov sp, r7
  18947. 8008698: f85d 7b04 ldr.w r7, [sp], #4
  18948. 800869c: 4770 bx lr
  18949. 0800869e <HAL_TIM_TriggerCallback>:
  18950. * @brief Hall Trigger detection callback in non-blocking mode
  18951. * @param htim TIM handle
  18952. * @retval None
  18953. */
  18954. __weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim)
  18955. {
  18956. 800869e: b480 push {r7}
  18957. 80086a0: b083 sub sp, #12
  18958. 80086a2: af00 add r7, sp, #0
  18959. 80086a4: 6078 str r0, [r7, #4]
  18960. UNUSED(htim);
  18961. /* NOTE : This function should not be modified, when the callback is needed,
  18962. the HAL_TIM_TriggerCallback could be implemented in the user file
  18963. */
  18964. }
  18965. 80086a6: bf00 nop
  18966. 80086a8: 370c adds r7, #12
  18967. 80086aa: 46bd mov sp, r7
  18968. 80086ac: f85d 7b04 ldr.w r7, [sp], #4
  18969. 80086b0: 4770 bx lr
  18970. ...
  18971. 080086b4 <TIM_Base_SetConfig>:
  18972. * @param TIMx TIM peripheral
  18973. * @param Structure TIM Base configuration structure
  18974. * @retval None
  18975. */
  18976. void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure)
  18977. {
  18978. 80086b4: b480 push {r7}
  18979. 80086b6: b085 sub sp, #20
  18980. 80086b8: af00 add r7, sp, #0
  18981. 80086ba: 6078 str r0, [r7, #4]
  18982. 80086bc: 6039 str r1, [r7, #0]
  18983. uint32_t tmpcr1;
  18984. tmpcr1 = TIMx->CR1;
  18985. 80086be: 687b ldr r3, [r7, #4]
  18986. 80086c0: 681b ldr r3, [r3, #0]
  18987. 80086c2: 60fb str r3, [r7, #12]
  18988. /* Set TIM Time Base Unit parameters ---------------------------------------*/
  18989. if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx))
  18990. 80086c4: 687b ldr r3, [r7, #4]
  18991. 80086c6: 4a46 ldr r2, [pc, #280] @ (80087e0 <TIM_Base_SetConfig+0x12c>)
  18992. 80086c8: 4293 cmp r3, r2
  18993. 80086ca: d013 beq.n 80086f4 <TIM_Base_SetConfig+0x40>
  18994. 80086cc: 687b ldr r3, [r7, #4]
  18995. 80086ce: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  18996. 80086d2: d00f beq.n 80086f4 <TIM_Base_SetConfig+0x40>
  18997. 80086d4: 687b ldr r3, [r7, #4]
  18998. 80086d6: 4a43 ldr r2, [pc, #268] @ (80087e4 <TIM_Base_SetConfig+0x130>)
  18999. 80086d8: 4293 cmp r3, r2
  19000. 80086da: d00b beq.n 80086f4 <TIM_Base_SetConfig+0x40>
  19001. 80086dc: 687b ldr r3, [r7, #4]
  19002. 80086de: 4a42 ldr r2, [pc, #264] @ (80087e8 <TIM_Base_SetConfig+0x134>)
  19003. 80086e0: 4293 cmp r3, r2
  19004. 80086e2: d007 beq.n 80086f4 <TIM_Base_SetConfig+0x40>
  19005. 80086e4: 687b ldr r3, [r7, #4]
  19006. 80086e6: 4a41 ldr r2, [pc, #260] @ (80087ec <TIM_Base_SetConfig+0x138>)
  19007. 80086e8: 4293 cmp r3, r2
  19008. 80086ea: d003 beq.n 80086f4 <TIM_Base_SetConfig+0x40>
  19009. 80086ec: 687b ldr r3, [r7, #4]
  19010. 80086ee: 4a40 ldr r2, [pc, #256] @ (80087f0 <TIM_Base_SetConfig+0x13c>)
  19011. 80086f0: 4293 cmp r3, r2
  19012. 80086f2: d108 bne.n 8008706 <TIM_Base_SetConfig+0x52>
  19013. {
  19014. /* Select the Counter Mode */
  19015. tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);
  19016. 80086f4: 68fb ldr r3, [r7, #12]
  19017. 80086f6: f023 0370 bic.w r3, r3, #112 @ 0x70
  19018. 80086fa: 60fb str r3, [r7, #12]
  19019. tmpcr1 |= Structure->CounterMode;
  19020. 80086fc: 683b ldr r3, [r7, #0]
  19021. 80086fe: 685b ldr r3, [r3, #4]
  19022. 8008700: 68fa ldr r2, [r7, #12]
  19023. 8008702: 4313 orrs r3, r2
  19024. 8008704: 60fb str r3, [r7, #12]
  19025. }
  19026. if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx))
  19027. 8008706: 687b ldr r3, [r7, #4]
  19028. 8008708: 4a35 ldr r2, [pc, #212] @ (80087e0 <TIM_Base_SetConfig+0x12c>)
  19029. 800870a: 4293 cmp r3, r2
  19030. 800870c: d01f beq.n 800874e <TIM_Base_SetConfig+0x9a>
  19031. 800870e: 687b ldr r3, [r7, #4]
  19032. 8008710: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  19033. 8008714: d01b beq.n 800874e <TIM_Base_SetConfig+0x9a>
  19034. 8008716: 687b ldr r3, [r7, #4]
  19035. 8008718: 4a32 ldr r2, [pc, #200] @ (80087e4 <TIM_Base_SetConfig+0x130>)
  19036. 800871a: 4293 cmp r3, r2
  19037. 800871c: d017 beq.n 800874e <TIM_Base_SetConfig+0x9a>
  19038. 800871e: 687b ldr r3, [r7, #4]
  19039. 8008720: 4a31 ldr r2, [pc, #196] @ (80087e8 <TIM_Base_SetConfig+0x134>)
  19040. 8008722: 4293 cmp r3, r2
  19041. 8008724: d013 beq.n 800874e <TIM_Base_SetConfig+0x9a>
  19042. 8008726: 687b ldr r3, [r7, #4]
  19043. 8008728: 4a30 ldr r2, [pc, #192] @ (80087ec <TIM_Base_SetConfig+0x138>)
  19044. 800872a: 4293 cmp r3, r2
  19045. 800872c: d00f beq.n 800874e <TIM_Base_SetConfig+0x9a>
  19046. 800872e: 687b ldr r3, [r7, #4]
  19047. 8008730: 4a2f ldr r2, [pc, #188] @ (80087f0 <TIM_Base_SetConfig+0x13c>)
  19048. 8008732: 4293 cmp r3, r2
  19049. 8008734: d00b beq.n 800874e <TIM_Base_SetConfig+0x9a>
  19050. 8008736: 687b ldr r3, [r7, #4]
  19051. 8008738: 4a2e ldr r2, [pc, #184] @ (80087f4 <TIM_Base_SetConfig+0x140>)
  19052. 800873a: 4293 cmp r3, r2
  19053. 800873c: d007 beq.n 800874e <TIM_Base_SetConfig+0x9a>
  19054. 800873e: 687b ldr r3, [r7, #4]
  19055. 8008740: 4a2d ldr r2, [pc, #180] @ (80087f8 <TIM_Base_SetConfig+0x144>)
  19056. 8008742: 4293 cmp r3, r2
  19057. 8008744: d003 beq.n 800874e <TIM_Base_SetConfig+0x9a>
  19058. 8008746: 687b ldr r3, [r7, #4]
  19059. 8008748: 4a2c ldr r2, [pc, #176] @ (80087fc <TIM_Base_SetConfig+0x148>)
  19060. 800874a: 4293 cmp r3, r2
  19061. 800874c: d108 bne.n 8008760 <TIM_Base_SetConfig+0xac>
  19062. {
  19063. /* Set the clock division */
  19064. tmpcr1 &= ~TIM_CR1_CKD;
  19065. 800874e: 68fb ldr r3, [r7, #12]
  19066. 8008750: f423 7340 bic.w r3, r3, #768 @ 0x300
  19067. 8008754: 60fb str r3, [r7, #12]
  19068. tmpcr1 |= (uint32_t)Structure->ClockDivision;
  19069. 8008756: 683b ldr r3, [r7, #0]
  19070. 8008758: 68db ldr r3, [r3, #12]
  19071. 800875a: 68fa ldr r2, [r7, #12]
  19072. 800875c: 4313 orrs r3, r2
  19073. 800875e: 60fb str r3, [r7, #12]
  19074. }
  19075. /* Set the auto-reload preload */
  19076. MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload);
  19077. 8008760: 68fb ldr r3, [r7, #12]
  19078. 8008762: f023 0280 bic.w r2, r3, #128 @ 0x80
  19079. 8008766: 683b ldr r3, [r7, #0]
  19080. 8008768: 695b ldr r3, [r3, #20]
  19081. 800876a: 4313 orrs r3, r2
  19082. 800876c: 60fb str r3, [r7, #12]
  19083. TIMx->CR1 = tmpcr1;
  19084. 800876e: 687b ldr r3, [r7, #4]
  19085. 8008770: 68fa ldr r2, [r7, #12]
  19086. 8008772: 601a str r2, [r3, #0]
  19087. /* Set the Autoreload value */
  19088. TIMx->ARR = (uint32_t)Structure->Period ;
  19089. 8008774: 683b ldr r3, [r7, #0]
  19090. 8008776: 689a ldr r2, [r3, #8]
  19091. 8008778: 687b ldr r3, [r7, #4]
  19092. 800877a: 62da str r2, [r3, #44] @ 0x2c
  19093. /* Set the Prescaler value */
  19094. TIMx->PSC = Structure->Prescaler;
  19095. 800877c: 683b ldr r3, [r7, #0]
  19096. 800877e: 681a ldr r2, [r3, #0]
  19097. 8008780: 687b ldr r3, [r7, #4]
  19098. 8008782: 629a str r2, [r3, #40] @ 0x28
  19099. if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx))
  19100. 8008784: 687b ldr r3, [r7, #4]
  19101. 8008786: 4a16 ldr r2, [pc, #88] @ (80087e0 <TIM_Base_SetConfig+0x12c>)
  19102. 8008788: 4293 cmp r3, r2
  19103. 800878a: d00f beq.n 80087ac <TIM_Base_SetConfig+0xf8>
  19104. 800878c: 687b ldr r3, [r7, #4]
  19105. 800878e: 4a18 ldr r2, [pc, #96] @ (80087f0 <TIM_Base_SetConfig+0x13c>)
  19106. 8008790: 4293 cmp r3, r2
  19107. 8008792: d00b beq.n 80087ac <TIM_Base_SetConfig+0xf8>
  19108. 8008794: 687b ldr r3, [r7, #4]
  19109. 8008796: 4a17 ldr r2, [pc, #92] @ (80087f4 <TIM_Base_SetConfig+0x140>)
  19110. 8008798: 4293 cmp r3, r2
  19111. 800879a: d007 beq.n 80087ac <TIM_Base_SetConfig+0xf8>
  19112. 800879c: 687b ldr r3, [r7, #4]
  19113. 800879e: 4a16 ldr r2, [pc, #88] @ (80087f8 <TIM_Base_SetConfig+0x144>)
  19114. 80087a0: 4293 cmp r3, r2
  19115. 80087a2: d003 beq.n 80087ac <TIM_Base_SetConfig+0xf8>
  19116. 80087a4: 687b ldr r3, [r7, #4]
  19117. 80087a6: 4a15 ldr r2, [pc, #84] @ (80087fc <TIM_Base_SetConfig+0x148>)
  19118. 80087a8: 4293 cmp r3, r2
  19119. 80087aa: d103 bne.n 80087b4 <TIM_Base_SetConfig+0x100>
  19120. {
  19121. /* Set the Repetition Counter value */
  19122. TIMx->RCR = Structure->RepetitionCounter;
  19123. 80087ac: 683b ldr r3, [r7, #0]
  19124. 80087ae: 691a ldr r2, [r3, #16]
  19125. 80087b0: 687b ldr r3, [r7, #4]
  19126. 80087b2: 631a str r2, [r3, #48] @ 0x30
  19127. }
  19128. /* Generate an update event to reload the Prescaler
  19129. and the repetition counter (only for advanced timer) value immediately */
  19130. TIMx->EGR = TIM_EGR_UG;
  19131. 80087b4: 687b ldr r3, [r7, #4]
  19132. 80087b6: 2201 movs r2, #1
  19133. 80087b8: 615a str r2, [r3, #20]
  19134. /* Check if the update flag is set after the Update Generation, if so clear the UIF flag */
  19135. if (HAL_IS_BIT_SET(TIMx->SR, TIM_FLAG_UPDATE))
  19136. 80087ba: 687b ldr r3, [r7, #4]
  19137. 80087bc: 691b ldr r3, [r3, #16]
  19138. 80087be: f003 0301 and.w r3, r3, #1
  19139. 80087c2: 2b01 cmp r3, #1
  19140. 80087c4: d105 bne.n 80087d2 <TIM_Base_SetConfig+0x11e>
  19141. {
  19142. /* Clear the update flag */
  19143. CLEAR_BIT(TIMx->SR, TIM_FLAG_UPDATE);
  19144. 80087c6: 687b ldr r3, [r7, #4]
  19145. 80087c8: 691b ldr r3, [r3, #16]
  19146. 80087ca: f023 0201 bic.w r2, r3, #1
  19147. 80087ce: 687b ldr r3, [r7, #4]
  19148. 80087d0: 611a str r2, [r3, #16]
  19149. }
  19150. }
  19151. 80087d2: bf00 nop
  19152. 80087d4: 3714 adds r7, #20
  19153. 80087d6: 46bd mov sp, r7
  19154. 80087d8: f85d 7b04 ldr.w r7, [sp], #4
  19155. 80087dc: 4770 bx lr
  19156. 80087de: bf00 nop
  19157. 80087e0: 40010000 .word 0x40010000
  19158. 80087e4: 40000400 .word 0x40000400
  19159. 80087e8: 40000800 .word 0x40000800
  19160. 80087ec: 40000c00 .word 0x40000c00
  19161. 80087f0: 40010400 .word 0x40010400
  19162. 80087f4: 40014000 .word 0x40014000
  19163. 80087f8: 40014400 .word 0x40014400
  19164. 80087fc: 40014800 .word 0x40014800
  19165. 08008800 <HAL_TIMEx_CommutCallback>:
  19166. * @brief Commutation callback in non-blocking mode
  19167. * @param htim TIM handle
  19168. * @retval None
  19169. */
  19170. __weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim)
  19171. {
  19172. 8008800: b480 push {r7}
  19173. 8008802: b083 sub sp, #12
  19174. 8008804: af00 add r7, sp, #0
  19175. 8008806: 6078 str r0, [r7, #4]
  19176. UNUSED(htim);
  19177. /* NOTE : This function should not be modified, when the callback is needed,
  19178. the HAL_TIMEx_CommutCallback could be implemented in the user file
  19179. */
  19180. }
  19181. 8008808: bf00 nop
  19182. 800880a: 370c adds r7, #12
  19183. 800880c: 46bd mov sp, r7
  19184. 800880e: f85d 7b04 ldr.w r7, [sp], #4
  19185. 8008812: 4770 bx lr
  19186. 08008814 <HAL_TIMEx_BreakCallback>:
  19187. * @brief Break detection callback in non-blocking mode
  19188. * @param htim TIM handle
  19189. * @retval None
  19190. */
  19191. __weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim)
  19192. {
  19193. 8008814: b480 push {r7}
  19194. 8008816: b083 sub sp, #12
  19195. 8008818: af00 add r7, sp, #0
  19196. 800881a: 6078 str r0, [r7, #4]
  19197. UNUSED(htim);
  19198. /* NOTE : This function should not be modified, when the callback is needed,
  19199. the HAL_TIMEx_BreakCallback could be implemented in the user file
  19200. */
  19201. }
  19202. 800881c: bf00 nop
  19203. 800881e: 370c adds r7, #12
  19204. 8008820: 46bd mov sp, r7
  19205. 8008822: f85d 7b04 ldr.w r7, [sp], #4
  19206. 8008826: 4770 bx lr
  19207. 08008828 <HAL_TIMEx_Break2Callback>:
  19208. * @brief Break2 detection callback in non blocking mode
  19209. * @param htim: TIM handle
  19210. * @retval None
  19211. */
  19212. __weak void HAL_TIMEx_Break2Callback(TIM_HandleTypeDef *htim)
  19213. {
  19214. 8008828: b480 push {r7}
  19215. 800882a: b083 sub sp, #12
  19216. 800882c: af00 add r7, sp, #0
  19217. 800882e: 6078 str r0, [r7, #4]
  19218. UNUSED(htim);
  19219. /* NOTE : This function Should not be modified, when the callback is needed,
  19220. the HAL_TIMEx_Break2Callback could be implemented in the user file
  19221. */
  19222. }
  19223. 8008830: bf00 nop
  19224. 8008832: 370c adds r7, #12
  19225. 8008834: 46bd mov sp, r7
  19226. 8008836: f85d 7b04 ldr.w r7, [sp], #4
  19227. 800883a: 4770 bx lr
  19228. 0800883c <HAL_UART_Init>:
  19229. * parameters in the UART_InitTypeDef and initialize the associated handle.
  19230. * @param huart UART handle.
  19231. * @retval HAL status
  19232. */
  19233. HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
  19234. {
  19235. 800883c: b580 push {r7, lr}
  19236. 800883e: b082 sub sp, #8
  19237. 8008840: af00 add r7, sp, #0
  19238. 8008842: 6078 str r0, [r7, #4]
  19239. /* Check the UART handle allocation */
  19240. if (huart == NULL)
  19241. 8008844: 687b ldr r3, [r7, #4]
  19242. 8008846: 2b00 cmp r3, #0
  19243. 8008848: d101 bne.n 800884e <HAL_UART_Init+0x12>
  19244. {
  19245. return HAL_ERROR;
  19246. 800884a: 2301 movs r3, #1
  19247. 800884c: e042 b.n 80088d4 <HAL_UART_Init+0x98>
  19248. {
  19249. /* Check the parameters */
  19250. assert_param((IS_UART_INSTANCE(huart->Instance)) || (IS_LPUART_INSTANCE(huart->Instance)));
  19251. }
  19252. if (huart->gState == HAL_UART_STATE_RESET)
  19253. 800884e: 687b ldr r3, [r7, #4]
  19254. 8008850: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  19255. 8008854: 2b00 cmp r3, #0
  19256. 8008856: d106 bne.n 8008866 <HAL_UART_Init+0x2a>
  19257. {
  19258. /* Allocate lock resource and initialize it */
  19259. huart->Lock = HAL_UNLOCKED;
  19260. 8008858: 687b ldr r3, [r7, #4]
  19261. 800885a: 2200 movs r2, #0
  19262. 800885c: f883 2084 strb.w r2, [r3, #132] @ 0x84
  19263. /* Init the low level hardware */
  19264. huart->MspInitCallback(huart);
  19265. #else
  19266. /* Init the low level hardware : GPIO, CLOCK */
  19267. HAL_UART_MspInit(huart);
  19268. 8008860: 6878 ldr r0, [r7, #4]
  19269. 8008862: f7f8 fe69 bl 8001538 <HAL_UART_MspInit>
  19270. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  19271. }
  19272. huart->gState = HAL_UART_STATE_BUSY;
  19273. 8008866: 687b ldr r3, [r7, #4]
  19274. 8008868: 2224 movs r2, #36 @ 0x24
  19275. 800886a: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  19276. __HAL_UART_DISABLE(huart);
  19277. 800886e: 687b ldr r3, [r7, #4]
  19278. 8008870: 681b ldr r3, [r3, #0]
  19279. 8008872: 681a ldr r2, [r3, #0]
  19280. 8008874: 687b ldr r3, [r7, #4]
  19281. 8008876: 681b ldr r3, [r3, #0]
  19282. 8008878: f022 0201 bic.w r2, r2, #1
  19283. 800887c: 601a str r2, [r3, #0]
  19284. /* Perform advanced settings configuration */
  19285. /* For some items, configuration requires to be done prior TE and RE bits are set */
  19286. if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
  19287. 800887e: 687b ldr r3, [r7, #4]
  19288. 8008880: 6a9b ldr r3, [r3, #40] @ 0x28
  19289. 8008882: 2b00 cmp r3, #0
  19290. 8008884: d002 beq.n 800888c <HAL_UART_Init+0x50>
  19291. {
  19292. UART_AdvFeatureConfig(huart);
  19293. 8008886: 6878 ldr r0, [r7, #4]
  19294. 8008888: f001 f9e8 bl 8009c5c <UART_AdvFeatureConfig>
  19295. }
  19296. /* Set the UART Communication parameters */
  19297. if (UART_SetConfig(huart) == HAL_ERROR)
  19298. 800888c: 6878 ldr r0, [r7, #4]
  19299. 800888e: f000 fc7d bl 800918c <UART_SetConfig>
  19300. 8008892: 4603 mov r3, r0
  19301. 8008894: 2b01 cmp r3, #1
  19302. 8008896: d101 bne.n 800889c <HAL_UART_Init+0x60>
  19303. {
  19304. return HAL_ERROR;
  19305. 8008898: 2301 movs r3, #1
  19306. 800889a: e01b b.n 80088d4 <HAL_UART_Init+0x98>
  19307. }
  19308. /* In asynchronous mode, the following bits must be kept cleared:
  19309. - LINEN and CLKEN bits in the USART_CR2 register,
  19310. - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/
  19311. CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
  19312. 800889c: 687b ldr r3, [r7, #4]
  19313. 800889e: 681b ldr r3, [r3, #0]
  19314. 80088a0: 685a ldr r2, [r3, #4]
  19315. 80088a2: 687b ldr r3, [r7, #4]
  19316. 80088a4: 681b ldr r3, [r3, #0]
  19317. 80088a6: f422 4290 bic.w r2, r2, #18432 @ 0x4800
  19318. 80088aa: 605a str r2, [r3, #4]
  19319. CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
  19320. 80088ac: 687b ldr r3, [r7, #4]
  19321. 80088ae: 681b ldr r3, [r3, #0]
  19322. 80088b0: 689a ldr r2, [r3, #8]
  19323. 80088b2: 687b ldr r3, [r7, #4]
  19324. 80088b4: 681b ldr r3, [r3, #0]
  19325. 80088b6: f022 022a bic.w r2, r2, #42 @ 0x2a
  19326. 80088ba: 609a str r2, [r3, #8]
  19327. __HAL_UART_ENABLE(huart);
  19328. 80088bc: 687b ldr r3, [r7, #4]
  19329. 80088be: 681b ldr r3, [r3, #0]
  19330. 80088c0: 681a ldr r2, [r3, #0]
  19331. 80088c2: 687b ldr r3, [r7, #4]
  19332. 80088c4: 681b ldr r3, [r3, #0]
  19333. 80088c6: f042 0201 orr.w r2, r2, #1
  19334. 80088ca: 601a str r2, [r3, #0]
  19335. /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
  19336. return (UART_CheckIdleState(huart));
  19337. 80088cc: 6878 ldr r0, [r7, #4]
  19338. 80088ce: f001 fa67 bl 8009da0 <UART_CheckIdleState>
  19339. 80088d2: 4603 mov r3, r0
  19340. }
  19341. 80088d4: 4618 mov r0, r3
  19342. 80088d6: 3708 adds r7, #8
  19343. 80088d8: 46bd mov sp, r7
  19344. 80088da: bd80 pop {r7, pc}
  19345. 080088dc <HAL_UART_Transmit_IT>:
  19346. * @param pData Pointer to data buffer (u8 or u16 data elements).
  19347. * @param Size Amount of data elements (u8 or u16) to be sent.
  19348. * @retval HAL status
  19349. */
  19350. HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)
  19351. {
  19352. 80088dc: b480 push {r7}
  19353. 80088de: b091 sub sp, #68 @ 0x44
  19354. 80088e0: af00 add r7, sp, #0
  19355. 80088e2: 60f8 str r0, [r7, #12]
  19356. 80088e4: 60b9 str r1, [r7, #8]
  19357. 80088e6: 4613 mov r3, r2
  19358. 80088e8: 80fb strh r3, [r7, #6]
  19359. /* Check that a Tx process is not already ongoing */
  19360. if (huart->gState == HAL_UART_STATE_READY)
  19361. 80088ea: 68fb ldr r3, [r7, #12]
  19362. 80088ec: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  19363. 80088f0: 2b20 cmp r3, #32
  19364. 80088f2: d178 bne.n 80089e6 <HAL_UART_Transmit_IT+0x10a>
  19365. {
  19366. if ((pData == NULL) || (Size == 0U))
  19367. 80088f4: 68bb ldr r3, [r7, #8]
  19368. 80088f6: 2b00 cmp r3, #0
  19369. 80088f8: d002 beq.n 8008900 <HAL_UART_Transmit_IT+0x24>
  19370. 80088fa: 88fb ldrh r3, [r7, #6]
  19371. 80088fc: 2b00 cmp r3, #0
  19372. 80088fe: d101 bne.n 8008904 <HAL_UART_Transmit_IT+0x28>
  19373. {
  19374. return HAL_ERROR;
  19375. 8008900: 2301 movs r3, #1
  19376. 8008902: e071 b.n 80089e8 <HAL_UART_Transmit_IT+0x10c>
  19377. }
  19378. huart->pTxBuffPtr = pData;
  19379. 8008904: 68fb ldr r3, [r7, #12]
  19380. 8008906: 68ba ldr r2, [r7, #8]
  19381. 8008908: 651a str r2, [r3, #80] @ 0x50
  19382. huart->TxXferSize = Size;
  19383. 800890a: 68fb ldr r3, [r7, #12]
  19384. 800890c: 88fa ldrh r2, [r7, #6]
  19385. 800890e: f8a3 2054 strh.w r2, [r3, #84] @ 0x54
  19386. huart->TxXferCount = Size;
  19387. 8008912: 68fb ldr r3, [r7, #12]
  19388. 8008914: 88fa ldrh r2, [r7, #6]
  19389. 8008916: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  19390. huart->TxISR = NULL;
  19391. 800891a: 68fb ldr r3, [r7, #12]
  19392. 800891c: 2200 movs r2, #0
  19393. 800891e: 679a str r2, [r3, #120] @ 0x78
  19394. huart->ErrorCode = HAL_UART_ERROR_NONE;
  19395. 8008920: 68fb ldr r3, [r7, #12]
  19396. 8008922: 2200 movs r2, #0
  19397. 8008924: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  19398. huart->gState = HAL_UART_STATE_BUSY_TX;
  19399. 8008928: 68fb ldr r3, [r7, #12]
  19400. 800892a: 2221 movs r2, #33 @ 0x21
  19401. 800892c: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  19402. /* Configure Tx interrupt processing */
  19403. if (huart->FifoMode == UART_FIFOMODE_ENABLE)
  19404. 8008930: 68fb ldr r3, [r7, #12]
  19405. 8008932: 6e5b ldr r3, [r3, #100] @ 0x64
  19406. 8008934: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  19407. 8008938: d12a bne.n 8008990 <HAL_UART_Transmit_IT+0xb4>
  19408. {
  19409. /* Set the Tx ISR function pointer according to the data word length */
  19410. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  19411. 800893a: 68fb ldr r3, [r7, #12]
  19412. 800893c: 689b ldr r3, [r3, #8]
  19413. 800893e: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  19414. 8008942: d107 bne.n 8008954 <HAL_UART_Transmit_IT+0x78>
  19415. 8008944: 68fb ldr r3, [r7, #12]
  19416. 8008946: 691b ldr r3, [r3, #16]
  19417. 8008948: 2b00 cmp r3, #0
  19418. 800894a: d103 bne.n 8008954 <HAL_UART_Transmit_IT+0x78>
  19419. {
  19420. huart->TxISR = UART_TxISR_16BIT_FIFOEN;
  19421. 800894c: 68fb ldr r3, [r7, #12]
  19422. 800894e: 4a29 ldr r2, [pc, #164] @ (80089f4 <HAL_UART_Transmit_IT+0x118>)
  19423. 8008950: 679a str r2, [r3, #120] @ 0x78
  19424. 8008952: e002 b.n 800895a <HAL_UART_Transmit_IT+0x7e>
  19425. }
  19426. else
  19427. {
  19428. huart->TxISR = UART_TxISR_8BIT_FIFOEN;
  19429. 8008954: 68fb ldr r3, [r7, #12]
  19430. 8008956: 4a28 ldr r2, [pc, #160] @ (80089f8 <HAL_UART_Transmit_IT+0x11c>)
  19431. 8008958: 679a str r2, [r3, #120] @ 0x78
  19432. }
  19433. /* Enable the TX FIFO threshold interrupt */
  19434. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  19435. 800895a: 68fb ldr r3, [r7, #12]
  19436. 800895c: 681b ldr r3, [r3, #0]
  19437. 800895e: 3308 adds r3, #8
  19438. 8008960: 62bb str r3, [r7, #40] @ 0x28
  19439. */
  19440. __STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr)
  19441. {
  19442. uint32_t result;
  19443. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  19444. 8008962: 6abb ldr r3, [r7, #40] @ 0x28
  19445. 8008964: e853 3f00 ldrex r3, [r3]
  19446. 8008968: 627b str r3, [r7, #36] @ 0x24
  19447. return(result);
  19448. 800896a: 6a7b ldr r3, [r7, #36] @ 0x24
  19449. 800896c: f443 0300 orr.w r3, r3, #8388608 @ 0x800000
  19450. 8008970: 63bb str r3, [r7, #56] @ 0x38
  19451. 8008972: 68fb ldr r3, [r7, #12]
  19452. 8008974: 681b ldr r3, [r3, #0]
  19453. 8008976: 3308 adds r3, #8
  19454. 8008978: 6bba ldr r2, [r7, #56] @ 0x38
  19455. 800897a: 637a str r2, [r7, #52] @ 0x34
  19456. 800897c: 633b str r3, [r7, #48] @ 0x30
  19457. */
  19458. __STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr)
  19459. {
  19460. uint32_t result;
  19461. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  19462. 800897e: 6b39 ldr r1, [r7, #48] @ 0x30
  19463. 8008980: 6b7a ldr r2, [r7, #52] @ 0x34
  19464. 8008982: e841 2300 strex r3, r2, [r1]
  19465. 8008986: 62fb str r3, [r7, #44] @ 0x2c
  19466. return(result);
  19467. 8008988: 6afb ldr r3, [r7, #44] @ 0x2c
  19468. 800898a: 2b00 cmp r3, #0
  19469. 800898c: d1e5 bne.n 800895a <HAL_UART_Transmit_IT+0x7e>
  19470. 800898e: e028 b.n 80089e2 <HAL_UART_Transmit_IT+0x106>
  19471. }
  19472. else
  19473. {
  19474. /* Set the Tx ISR function pointer according to the data word length */
  19475. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  19476. 8008990: 68fb ldr r3, [r7, #12]
  19477. 8008992: 689b ldr r3, [r3, #8]
  19478. 8008994: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  19479. 8008998: d107 bne.n 80089aa <HAL_UART_Transmit_IT+0xce>
  19480. 800899a: 68fb ldr r3, [r7, #12]
  19481. 800899c: 691b ldr r3, [r3, #16]
  19482. 800899e: 2b00 cmp r3, #0
  19483. 80089a0: d103 bne.n 80089aa <HAL_UART_Transmit_IT+0xce>
  19484. {
  19485. huart->TxISR = UART_TxISR_16BIT;
  19486. 80089a2: 68fb ldr r3, [r7, #12]
  19487. 80089a4: 4a15 ldr r2, [pc, #84] @ (80089fc <HAL_UART_Transmit_IT+0x120>)
  19488. 80089a6: 679a str r2, [r3, #120] @ 0x78
  19489. 80089a8: e002 b.n 80089b0 <HAL_UART_Transmit_IT+0xd4>
  19490. }
  19491. else
  19492. {
  19493. huart->TxISR = UART_TxISR_8BIT;
  19494. 80089aa: 68fb ldr r3, [r7, #12]
  19495. 80089ac: 4a14 ldr r2, [pc, #80] @ (8008a00 <HAL_UART_Transmit_IT+0x124>)
  19496. 80089ae: 679a str r2, [r3, #120] @ 0x78
  19497. }
  19498. /* Enable the Transmit Data Register Empty interrupt */
  19499. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  19500. 80089b0: 68fb ldr r3, [r7, #12]
  19501. 80089b2: 681b ldr r3, [r3, #0]
  19502. 80089b4: 617b str r3, [r7, #20]
  19503. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  19504. 80089b6: 697b ldr r3, [r7, #20]
  19505. 80089b8: e853 3f00 ldrex r3, [r3]
  19506. 80089bc: 613b str r3, [r7, #16]
  19507. return(result);
  19508. 80089be: 693b ldr r3, [r7, #16]
  19509. 80089c0: f043 0380 orr.w r3, r3, #128 @ 0x80
  19510. 80089c4: 63fb str r3, [r7, #60] @ 0x3c
  19511. 80089c6: 68fb ldr r3, [r7, #12]
  19512. 80089c8: 681b ldr r3, [r3, #0]
  19513. 80089ca: 461a mov r2, r3
  19514. 80089cc: 6bfb ldr r3, [r7, #60] @ 0x3c
  19515. 80089ce: 623b str r3, [r7, #32]
  19516. 80089d0: 61fa str r2, [r7, #28]
  19517. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  19518. 80089d2: 69f9 ldr r1, [r7, #28]
  19519. 80089d4: 6a3a ldr r2, [r7, #32]
  19520. 80089d6: e841 2300 strex r3, r2, [r1]
  19521. 80089da: 61bb str r3, [r7, #24]
  19522. return(result);
  19523. 80089dc: 69bb ldr r3, [r7, #24]
  19524. 80089de: 2b00 cmp r3, #0
  19525. 80089e0: d1e6 bne.n 80089b0 <HAL_UART_Transmit_IT+0xd4>
  19526. }
  19527. return HAL_OK;
  19528. 80089e2: 2300 movs r3, #0
  19529. 80089e4: e000 b.n 80089e8 <HAL_UART_Transmit_IT+0x10c>
  19530. }
  19531. else
  19532. {
  19533. return HAL_BUSY;
  19534. 80089e6: 2302 movs r3, #2
  19535. }
  19536. }
  19537. 80089e8: 4618 mov r0, r3
  19538. 80089ea: 3744 adds r7, #68 @ 0x44
  19539. 80089ec: 46bd mov sp, r7
  19540. 80089ee: f85d 7b04 ldr.w r7, [sp], #4
  19541. 80089f2: 4770 bx lr
  19542. 80089f4: 0800a567 .word 0x0800a567
  19543. 80089f8: 0800a487 .word 0x0800a487
  19544. 80089fc: 0800a3c5 .word 0x0800a3c5
  19545. 8008a00: 0800a30d .word 0x0800a30d
  19546. 08008a04 <HAL_UART_IRQHandler>:
  19547. * @brief Handle UART interrupt request.
  19548. * @param huart UART handle.
  19549. * @retval None
  19550. */
  19551. void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
  19552. {
  19553. 8008a04: b580 push {r7, lr}
  19554. 8008a06: b0ba sub sp, #232 @ 0xe8
  19555. 8008a08: af00 add r7, sp, #0
  19556. 8008a0a: 6078 str r0, [r7, #4]
  19557. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  19558. 8008a0c: 687b ldr r3, [r7, #4]
  19559. 8008a0e: 681b ldr r3, [r3, #0]
  19560. 8008a10: 69db ldr r3, [r3, #28]
  19561. 8008a12: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  19562. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  19563. 8008a16: 687b ldr r3, [r7, #4]
  19564. 8008a18: 681b ldr r3, [r3, #0]
  19565. 8008a1a: 681b ldr r3, [r3, #0]
  19566. 8008a1c: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  19567. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  19568. 8008a20: 687b ldr r3, [r7, #4]
  19569. 8008a22: 681b ldr r3, [r3, #0]
  19570. 8008a24: 689b ldr r3, [r3, #8]
  19571. 8008a26: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  19572. uint32_t errorflags;
  19573. uint32_t errorcode;
  19574. /* If no error occurs */
  19575. errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_RTOF));
  19576. 8008a2a: f8d7 20e4 ldr.w r2, [r7, #228] @ 0xe4
  19577. 8008a2e: f640 030f movw r3, #2063 @ 0x80f
  19578. 8008a32: 4013 ands r3, r2
  19579. 8008a34: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8
  19580. if (errorflags == 0U)
  19581. 8008a38: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8
  19582. 8008a3c: 2b00 cmp r3, #0
  19583. 8008a3e: d11b bne.n 8008a78 <HAL_UART_IRQHandler+0x74>
  19584. {
  19585. /* UART in mode Receiver ---------------------------------------------------*/
  19586. if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U)
  19587. 8008a40: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  19588. 8008a44: f003 0320 and.w r3, r3, #32
  19589. 8008a48: 2b00 cmp r3, #0
  19590. 8008a4a: d015 beq.n 8008a78 <HAL_UART_IRQHandler+0x74>
  19591. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)
  19592. 8008a4c: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  19593. 8008a50: f003 0320 and.w r3, r3, #32
  19594. 8008a54: 2b00 cmp r3, #0
  19595. 8008a56: d105 bne.n 8008a64 <HAL_UART_IRQHandler+0x60>
  19596. || ((cr3its & USART_CR3_RXFTIE) != 0U)))
  19597. 8008a58: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  19598. 8008a5c: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
  19599. 8008a60: 2b00 cmp r3, #0
  19600. 8008a62: d009 beq.n 8008a78 <HAL_UART_IRQHandler+0x74>
  19601. {
  19602. if (huart->RxISR != NULL)
  19603. 8008a64: 687b ldr r3, [r7, #4]
  19604. 8008a66: 6f5b ldr r3, [r3, #116] @ 0x74
  19605. 8008a68: 2b00 cmp r3, #0
  19606. 8008a6a: f000 8377 beq.w 800915c <HAL_UART_IRQHandler+0x758>
  19607. {
  19608. huart->RxISR(huart);
  19609. 8008a6e: 687b ldr r3, [r7, #4]
  19610. 8008a70: 6f5b ldr r3, [r3, #116] @ 0x74
  19611. 8008a72: 6878 ldr r0, [r7, #4]
  19612. 8008a74: 4798 blx r3
  19613. }
  19614. return;
  19615. 8008a76: e371 b.n 800915c <HAL_UART_IRQHandler+0x758>
  19616. }
  19617. }
  19618. /* If some errors occur */
  19619. if ((errorflags != 0U)
  19620. 8008a78: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8
  19621. 8008a7c: 2b00 cmp r3, #0
  19622. 8008a7e: f000 8123 beq.w 8008cc8 <HAL_UART_IRQHandler+0x2c4>
  19623. && ((((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != 0U)
  19624. 8008a82: f8d7 20dc ldr.w r2, [r7, #220] @ 0xdc
  19625. 8008a86: 4b8d ldr r3, [pc, #564] @ (8008cbc <HAL_UART_IRQHandler+0x2b8>)
  19626. 8008a88: 4013 ands r3, r2
  19627. 8008a8a: 2b00 cmp r3, #0
  19628. 8008a8c: d106 bne.n 8008a9c <HAL_UART_IRQHandler+0x98>
  19629. || ((cr1its & (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_RTOIE)) != 0U))))
  19630. 8008a8e: f8d7 20e0 ldr.w r2, [r7, #224] @ 0xe0
  19631. 8008a92: 4b8b ldr r3, [pc, #556] @ (8008cc0 <HAL_UART_IRQHandler+0x2bc>)
  19632. 8008a94: 4013 ands r3, r2
  19633. 8008a96: 2b00 cmp r3, #0
  19634. 8008a98: f000 8116 beq.w 8008cc8 <HAL_UART_IRQHandler+0x2c4>
  19635. {
  19636. /* UART parity error interrupt occurred -------------------------------------*/
  19637. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  19638. 8008a9c: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  19639. 8008aa0: f003 0301 and.w r3, r3, #1
  19640. 8008aa4: 2b00 cmp r3, #0
  19641. 8008aa6: d011 beq.n 8008acc <HAL_UART_IRQHandler+0xc8>
  19642. 8008aa8: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  19643. 8008aac: f403 7380 and.w r3, r3, #256 @ 0x100
  19644. 8008ab0: 2b00 cmp r3, #0
  19645. 8008ab2: d00b beq.n 8008acc <HAL_UART_IRQHandler+0xc8>
  19646. {
  19647. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  19648. 8008ab4: 687b ldr r3, [r7, #4]
  19649. 8008ab6: 681b ldr r3, [r3, #0]
  19650. 8008ab8: 2201 movs r2, #1
  19651. 8008aba: 621a str r2, [r3, #32]
  19652. huart->ErrorCode |= HAL_UART_ERROR_PE;
  19653. 8008abc: 687b ldr r3, [r7, #4]
  19654. 8008abe: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  19655. 8008ac2: f043 0201 orr.w r2, r3, #1
  19656. 8008ac6: 687b ldr r3, [r7, #4]
  19657. 8008ac8: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  19658. }
  19659. /* UART frame error interrupt occurred --------------------------------------*/
  19660. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  19661. 8008acc: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  19662. 8008ad0: f003 0302 and.w r3, r3, #2
  19663. 8008ad4: 2b00 cmp r3, #0
  19664. 8008ad6: d011 beq.n 8008afc <HAL_UART_IRQHandler+0xf8>
  19665. 8008ad8: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  19666. 8008adc: f003 0301 and.w r3, r3, #1
  19667. 8008ae0: 2b00 cmp r3, #0
  19668. 8008ae2: d00b beq.n 8008afc <HAL_UART_IRQHandler+0xf8>
  19669. {
  19670. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  19671. 8008ae4: 687b ldr r3, [r7, #4]
  19672. 8008ae6: 681b ldr r3, [r3, #0]
  19673. 8008ae8: 2202 movs r2, #2
  19674. 8008aea: 621a str r2, [r3, #32]
  19675. huart->ErrorCode |= HAL_UART_ERROR_FE;
  19676. 8008aec: 687b ldr r3, [r7, #4]
  19677. 8008aee: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  19678. 8008af2: f043 0204 orr.w r2, r3, #4
  19679. 8008af6: 687b ldr r3, [r7, #4]
  19680. 8008af8: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  19681. }
  19682. /* UART noise error interrupt occurred --------------------------------------*/
  19683. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  19684. 8008afc: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  19685. 8008b00: f003 0304 and.w r3, r3, #4
  19686. 8008b04: 2b00 cmp r3, #0
  19687. 8008b06: d011 beq.n 8008b2c <HAL_UART_IRQHandler+0x128>
  19688. 8008b08: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  19689. 8008b0c: f003 0301 and.w r3, r3, #1
  19690. 8008b10: 2b00 cmp r3, #0
  19691. 8008b12: d00b beq.n 8008b2c <HAL_UART_IRQHandler+0x128>
  19692. {
  19693. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  19694. 8008b14: 687b ldr r3, [r7, #4]
  19695. 8008b16: 681b ldr r3, [r3, #0]
  19696. 8008b18: 2204 movs r2, #4
  19697. 8008b1a: 621a str r2, [r3, #32]
  19698. huart->ErrorCode |= HAL_UART_ERROR_NE;
  19699. 8008b1c: 687b ldr r3, [r7, #4]
  19700. 8008b1e: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  19701. 8008b22: f043 0202 orr.w r2, r3, #2
  19702. 8008b26: 687b ldr r3, [r7, #4]
  19703. 8008b28: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  19704. }
  19705. /* UART Over-Run interrupt occurred -----------------------------------------*/
  19706. if (((isrflags & USART_ISR_ORE) != 0U)
  19707. 8008b2c: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  19708. 8008b30: f003 0308 and.w r3, r3, #8
  19709. 8008b34: 2b00 cmp r3, #0
  19710. 8008b36: d017 beq.n 8008b68 <HAL_UART_IRQHandler+0x164>
  19711. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U) ||
  19712. 8008b38: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  19713. 8008b3c: f003 0320 and.w r3, r3, #32
  19714. 8008b40: 2b00 cmp r3, #0
  19715. 8008b42: d105 bne.n 8008b50 <HAL_UART_IRQHandler+0x14c>
  19716. ((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != 0U)))
  19717. 8008b44: f8d7 20dc ldr.w r2, [r7, #220] @ 0xdc
  19718. 8008b48: 4b5c ldr r3, [pc, #368] @ (8008cbc <HAL_UART_IRQHandler+0x2b8>)
  19719. 8008b4a: 4013 ands r3, r2
  19720. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U) ||
  19721. 8008b4c: 2b00 cmp r3, #0
  19722. 8008b4e: d00b beq.n 8008b68 <HAL_UART_IRQHandler+0x164>
  19723. {
  19724. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF);
  19725. 8008b50: 687b ldr r3, [r7, #4]
  19726. 8008b52: 681b ldr r3, [r3, #0]
  19727. 8008b54: 2208 movs r2, #8
  19728. 8008b56: 621a str r2, [r3, #32]
  19729. huart->ErrorCode |= HAL_UART_ERROR_ORE;
  19730. 8008b58: 687b ldr r3, [r7, #4]
  19731. 8008b5a: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  19732. 8008b5e: f043 0208 orr.w r2, r3, #8
  19733. 8008b62: 687b ldr r3, [r7, #4]
  19734. 8008b64: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  19735. }
  19736. /* UART Receiver Timeout interrupt occurred ---------------------------------*/
  19737. if (((isrflags & USART_ISR_RTOF) != 0U) && ((cr1its & USART_CR1_RTOIE) != 0U))
  19738. 8008b68: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  19739. 8008b6c: f403 6300 and.w r3, r3, #2048 @ 0x800
  19740. 8008b70: 2b00 cmp r3, #0
  19741. 8008b72: d012 beq.n 8008b9a <HAL_UART_IRQHandler+0x196>
  19742. 8008b74: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  19743. 8008b78: f003 6380 and.w r3, r3, #67108864 @ 0x4000000
  19744. 8008b7c: 2b00 cmp r3, #0
  19745. 8008b7e: d00c beq.n 8008b9a <HAL_UART_IRQHandler+0x196>
  19746. {
  19747. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
  19748. 8008b80: 687b ldr r3, [r7, #4]
  19749. 8008b82: 681b ldr r3, [r3, #0]
  19750. 8008b84: f44f 6200 mov.w r2, #2048 @ 0x800
  19751. 8008b88: 621a str r2, [r3, #32]
  19752. huart->ErrorCode |= HAL_UART_ERROR_RTO;
  19753. 8008b8a: 687b ldr r3, [r7, #4]
  19754. 8008b8c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  19755. 8008b90: f043 0220 orr.w r2, r3, #32
  19756. 8008b94: 687b ldr r3, [r7, #4]
  19757. 8008b96: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  19758. }
  19759. /* Call UART Error Call back function if need be ----------------------------*/
  19760. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  19761. 8008b9a: 687b ldr r3, [r7, #4]
  19762. 8008b9c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  19763. 8008ba0: 2b00 cmp r3, #0
  19764. 8008ba2: f000 82dd beq.w 8009160 <HAL_UART_IRQHandler+0x75c>
  19765. {
  19766. /* UART in mode Receiver --------------------------------------------------*/
  19767. if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U)
  19768. 8008ba6: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  19769. 8008baa: f003 0320 and.w r3, r3, #32
  19770. 8008bae: 2b00 cmp r3, #0
  19771. 8008bb0: d013 beq.n 8008bda <HAL_UART_IRQHandler+0x1d6>
  19772. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)
  19773. 8008bb2: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  19774. 8008bb6: f003 0320 and.w r3, r3, #32
  19775. 8008bba: 2b00 cmp r3, #0
  19776. 8008bbc: d105 bne.n 8008bca <HAL_UART_IRQHandler+0x1c6>
  19777. || ((cr3its & USART_CR3_RXFTIE) != 0U)))
  19778. 8008bbe: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  19779. 8008bc2: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
  19780. 8008bc6: 2b00 cmp r3, #0
  19781. 8008bc8: d007 beq.n 8008bda <HAL_UART_IRQHandler+0x1d6>
  19782. {
  19783. if (huart->RxISR != NULL)
  19784. 8008bca: 687b ldr r3, [r7, #4]
  19785. 8008bcc: 6f5b ldr r3, [r3, #116] @ 0x74
  19786. 8008bce: 2b00 cmp r3, #0
  19787. 8008bd0: d003 beq.n 8008bda <HAL_UART_IRQHandler+0x1d6>
  19788. {
  19789. huart->RxISR(huart);
  19790. 8008bd2: 687b ldr r3, [r7, #4]
  19791. 8008bd4: 6f5b ldr r3, [r3, #116] @ 0x74
  19792. 8008bd6: 6878 ldr r0, [r7, #4]
  19793. 8008bd8: 4798 blx r3
  19794. /* If Error is to be considered as blocking :
  19795. - Receiver Timeout error in Reception
  19796. - Overrun error in Reception
  19797. - any error occurs in DMA mode reception
  19798. */
  19799. errorcode = huart->ErrorCode;
  19800. 8008bda: 687b ldr r3, [r7, #4]
  19801. 8008bdc: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  19802. 8008be0: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4
  19803. if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ||
  19804. 8008be4: 687b ldr r3, [r7, #4]
  19805. 8008be6: 681b ldr r3, [r3, #0]
  19806. 8008be8: 689b ldr r3, [r3, #8]
  19807. 8008bea: f003 0340 and.w r3, r3, #64 @ 0x40
  19808. 8008bee: 2b40 cmp r3, #64 @ 0x40
  19809. 8008bf0: d005 beq.n 8008bfe <HAL_UART_IRQHandler+0x1fa>
  19810. ((errorcode & (HAL_UART_ERROR_RTO | HAL_UART_ERROR_ORE)) != 0U))
  19811. 8008bf2: f8d7 30d4 ldr.w r3, [r7, #212] @ 0xd4
  19812. 8008bf6: f003 0328 and.w r3, r3, #40 @ 0x28
  19813. if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ||
  19814. 8008bfa: 2b00 cmp r3, #0
  19815. 8008bfc: d054 beq.n 8008ca8 <HAL_UART_IRQHandler+0x2a4>
  19816. {
  19817. /* Blocking error : transfer is aborted
  19818. Set the UART state ready to be able to start again the process,
  19819. Disable Rx Interrupts, and disable Rx DMA request, if ongoing */
  19820. UART_EndRxTransfer(huart);
  19821. 8008bfe: 6878 ldr r0, [r7, #4]
  19822. 8008c00: f001 fb08 bl 800a214 <UART_EndRxTransfer>
  19823. /* Abort the UART DMA Rx channel if enabled */
  19824. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  19825. 8008c04: 687b ldr r3, [r7, #4]
  19826. 8008c06: 681b ldr r3, [r3, #0]
  19827. 8008c08: 689b ldr r3, [r3, #8]
  19828. 8008c0a: f003 0340 and.w r3, r3, #64 @ 0x40
  19829. 8008c0e: 2b40 cmp r3, #64 @ 0x40
  19830. 8008c10: d146 bne.n 8008ca0 <HAL_UART_IRQHandler+0x29c>
  19831. {
  19832. /* Disable the UART DMA Rx request if enabled */
  19833. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
  19834. 8008c12: 687b ldr r3, [r7, #4]
  19835. 8008c14: 681b ldr r3, [r3, #0]
  19836. 8008c16: 3308 adds r3, #8
  19837. 8008c18: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  19838. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  19839. 8008c1c: f8d7 309c ldr.w r3, [r7, #156] @ 0x9c
  19840. 8008c20: e853 3f00 ldrex r3, [r3]
  19841. 8008c24: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  19842. return(result);
  19843. 8008c28: f8d7 3098 ldr.w r3, [r7, #152] @ 0x98
  19844. 8008c2c: f023 0340 bic.w r3, r3, #64 @ 0x40
  19845. 8008c30: f8c7 30d0 str.w r3, [r7, #208] @ 0xd0
  19846. 8008c34: 687b ldr r3, [r7, #4]
  19847. 8008c36: 681b ldr r3, [r3, #0]
  19848. 8008c38: 3308 adds r3, #8
  19849. 8008c3a: f8d7 20d0 ldr.w r2, [r7, #208] @ 0xd0
  19850. 8008c3e: f8c7 20a8 str.w r2, [r7, #168] @ 0xa8
  19851. 8008c42: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  19852. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  19853. 8008c46: f8d7 10a4 ldr.w r1, [r7, #164] @ 0xa4
  19854. 8008c4a: f8d7 20a8 ldr.w r2, [r7, #168] @ 0xa8
  19855. 8008c4e: e841 2300 strex r3, r2, [r1]
  19856. 8008c52: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  19857. return(result);
  19858. 8008c56: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  19859. 8008c5a: 2b00 cmp r3, #0
  19860. 8008c5c: d1d9 bne.n 8008c12 <HAL_UART_IRQHandler+0x20e>
  19861. /* Abort the UART DMA Rx channel */
  19862. if (huart->hdmarx != NULL)
  19863. 8008c5e: 687b ldr r3, [r7, #4]
  19864. 8008c60: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  19865. 8008c64: 2b00 cmp r3, #0
  19866. 8008c66: d017 beq.n 8008c98 <HAL_UART_IRQHandler+0x294>
  19867. {
  19868. /* Set the UART DMA Abort callback :
  19869. will lead to call HAL_UART_ErrorCallback() at end of DMA abort procedure */
  19870. huart->hdmarx->XferAbortCallback = UART_DMAAbortOnError;
  19871. 8008c68: 687b ldr r3, [r7, #4]
  19872. 8008c6a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  19873. 8008c6e: 4a15 ldr r2, [pc, #84] @ (8008cc4 <HAL_UART_IRQHandler+0x2c0>)
  19874. 8008c70: 651a str r2, [r3, #80] @ 0x50
  19875. /* Abort DMA RX */
  19876. if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK)
  19877. 8008c72: 687b ldr r3, [r7, #4]
  19878. 8008c74: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  19879. 8008c78: 4618 mov r0, r3
  19880. 8008c7a: f7fa fee1 bl 8003a40 <HAL_DMA_Abort_IT>
  19881. 8008c7e: 4603 mov r3, r0
  19882. 8008c80: 2b00 cmp r3, #0
  19883. 8008c82: d019 beq.n 8008cb8 <HAL_UART_IRQHandler+0x2b4>
  19884. {
  19885. /* Call Directly huart->hdmarx->XferAbortCallback function in case of error */
  19886. huart->hdmarx->XferAbortCallback(huart->hdmarx);
  19887. 8008c84: 687b ldr r3, [r7, #4]
  19888. 8008c86: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  19889. 8008c8a: 6d1b ldr r3, [r3, #80] @ 0x50
  19890. 8008c8c: 687a ldr r2, [r7, #4]
  19891. 8008c8e: f8d2 2080 ldr.w r2, [r2, #128] @ 0x80
  19892. 8008c92: 4610 mov r0, r2
  19893. 8008c94: 4798 blx r3
  19894. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  19895. 8008c96: e00f b.n 8008cb8 <HAL_UART_IRQHandler+0x2b4>
  19896. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  19897. /*Call registered error callback*/
  19898. huart->ErrorCallback(huart);
  19899. #else
  19900. /*Call legacy weak error callback*/
  19901. HAL_UART_ErrorCallback(huart);
  19902. 8008c98: 6878 ldr r0, [r7, #4]
  19903. 8008c9a: f000 fa6d bl 8009178 <HAL_UART_ErrorCallback>
  19904. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  19905. 8008c9e: e00b b.n 8008cb8 <HAL_UART_IRQHandler+0x2b4>
  19906. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  19907. /*Call registered error callback*/
  19908. huart->ErrorCallback(huart);
  19909. #else
  19910. /*Call legacy weak error callback*/
  19911. HAL_UART_ErrorCallback(huart);
  19912. 8008ca0: 6878 ldr r0, [r7, #4]
  19913. 8008ca2: f000 fa69 bl 8009178 <HAL_UART_ErrorCallback>
  19914. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  19915. 8008ca6: e007 b.n 8008cb8 <HAL_UART_IRQHandler+0x2b4>
  19916. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  19917. /*Call registered error callback*/
  19918. huart->ErrorCallback(huart);
  19919. #else
  19920. /*Call legacy weak error callback*/
  19921. HAL_UART_ErrorCallback(huart);
  19922. 8008ca8: 6878 ldr r0, [r7, #4]
  19923. 8008caa: f000 fa65 bl 8009178 <HAL_UART_ErrorCallback>
  19924. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  19925. huart->ErrorCode = HAL_UART_ERROR_NONE;
  19926. 8008cae: 687b ldr r3, [r7, #4]
  19927. 8008cb0: 2200 movs r2, #0
  19928. 8008cb2: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  19929. }
  19930. }
  19931. return;
  19932. 8008cb6: e253 b.n 8009160 <HAL_UART_IRQHandler+0x75c>
  19933. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  19934. 8008cb8: bf00 nop
  19935. return;
  19936. 8008cba: e251 b.n 8009160 <HAL_UART_IRQHandler+0x75c>
  19937. 8008cbc: 10000001 .word 0x10000001
  19938. 8008cc0: 04000120 .word 0x04000120
  19939. 8008cc4: 0800a2e1 .word 0x0800a2e1
  19940. } /* End if some error occurs */
  19941. /* Check current reception Mode :
  19942. If Reception till IDLE event has been selected : */
  19943. if ((huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  19944. 8008cc8: 687b ldr r3, [r7, #4]
  19945. 8008cca: 6edb ldr r3, [r3, #108] @ 0x6c
  19946. 8008ccc: 2b01 cmp r3, #1
  19947. 8008cce: f040 81e7 bne.w 80090a0 <HAL_UART_IRQHandler+0x69c>
  19948. && ((isrflags & USART_ISR_IDLE) != 0U)
  19949. 8008cd2: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  19950. 8008cd6: f003 0310 and.w r3, r3, #16
  19951. 8008cda: 2b00 cmp r3, #0
  19952. 8008cdc: f000 81e0 beq.w 80090a0 <HAL_UART_IRQHandler+0x69c>
  19953. && ((cr1its & USART_ISR_IDLE) != 0U))
  19954. 8008ce0: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  19955. 8008ce4: f003 0310 and.w r3, r3, #16
  19956. 8008ce8: 2b00 cmp r3, #0
  19957. 8008cea: f000 81d9 beq.w 80090a0 <HAL_UART_IRQHandler+0x69c>
  19958. {
  19959. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  19960. 8008cee: 687b ldr r3, [r7, #4]
  19961. 8008cf0: 681b ldr r3, [r3, #0]
  19962. 8008cf2: 2210 movs r2, #16
  19963. 8008cf4: 621a str r2, [r3, #32]
  19964. /* Check if DMA mode is enabled in UART */
  19965. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  19966. 8008cf6: 687b ldr r3, [r7, #4]
  19967. 8008cf8: 681b ldr r3, [r3, #0]
  19968. 8008cfa: 689b ldr r3, [r3, #8]
  19969. 8008cfc: f003 0340 and.w r3, r3, #64 @ 0x40
  19970. 8008d00: 2b40 cmp r3, #64 @ 0x40
  19971. 8008d02: f040 8151 bne.w 8008fa8 <HAL_UART_IRQHandler+0x5a4>
  19972. {
  19973. /* DMA mode enabled */
  19974. /* Check received length : If all expected data are received, do nothing,
  19975. (DMA cplt callback will be called).
  19976. Otherwise, if at least one data has already been received, IDLE event is to be notified to user */
  19977. uint16_t nb_remaining_rx_data = (uint16_t) __HAL_DMA_GET_COUNTER(huart->hdmarx);
  19978. 8008d06: 687b ldr r3, [r7, #4]
  19979. 8008d08: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  19980. 8008d0c: 681b ldr r3, [r3, #0]
  19981. 8008d0e: 4a96 ldr r2, [pc, #600] @ (8008f68 <HAL_UART_IRQHandler+0x564>)
  19982. 8008d10: 4293 cmp r3, r2
  19983. 8008d12: d068 beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  19984. 8008d14: 687b ldr r3, [r7, #4]
  19985. 8008d16: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  19986. 8008d1a: 681b ldr r3, [r3, #0]
  19987. 8008d1c: 4a93 ldr r2, [pc, #588] @ (8008f6c <HAL_UART_IRQHandler+0x568>)
  19988. 8008d1e: 4293 cmp r3, r2
  19989. 8008d20: d061 beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  19990. 8008d22: 687b ldr r3, [r7, #4]
  19991. 8008d24: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  19992. 8008d28: 681b ldr r3, [r3, #0]
  19993. 8008d2a: 4a91 ldr r2, [pc, #580] @ (8008f70 <HAL_UART_IRQHandler+0x56c>)
  19994. 8008d2c: 4293 cmp r3, r2
  19995. 8008d2e: d05a beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  19996. 8008d30: 687b ldr r3, [r7, #4]
  19997. 8008d32: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  19998. 8008d36: 681b ldr r3, [r3, #0]
  19999. 8008d38: 4a8e ldr r2, [pc, #568] @ (8008f74 <HAL_UART_IRQHandler+0x570>)
  20000. 8008d3a: 4293 cmp r3, r2
  20001. 8008d3c: d053 beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  20002. 8008d3e: 687b ldr r3, [r7, #4]
  20003. 8008d40: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20004. 8008d44: 681b ldr r3, [r3, #0]
  20005. 8008d46: 4a8c ldr r2, [pc, #560] @ (8008f78 <HAL_UART_IRQHandler+0x574>)
  20006. 8008d48: 4293 cmp r3, r2
  20007. 8008d4a: d04c beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  20008. 8008d4c: 687b ldr r3, [r7, #4]
  20009. 8008d4e: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20010. 8008d52: 681b ldr r3, [r3, #0]
  20011. 8008d54: 4a89 ldr r2, [pc, #548] @ (8008f7c <HAL_UART_IRQHandler+0x578>)
  20012. 8008d56: 4293 cmp r3, r2
  20013. 8008d58: d045 beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  20014. 8008d5a: 687b ldr r3, [r7, #4]
  20015. 8008d5c: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20016. 8008d60: 681b ldr r3, [r3, #0]
  20017. 8008d62: 4a87 ldr r2, [pc, #540] @ (8008f80 <HAL_UART_IRQHandler+0x57c>)
  20018. 8008d64: 4293 cmp r3, r2
  20019. 8008d66: d03e beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  20020. 8008d68: 687b ldr r3, [r7, #4]
  20021. 8008d6a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20022. 8008d6e: 681b ldr r3, [r3, #0]
  20023. 8008d70: 4a84 ldr r2, [pc, #528] @ (8008f84 <HAL_UART_IRQHandler+0x580>)
  20024. 8008d72: 4293 cmp r3, r2
  20025. 8008d74: d037 beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  20026. 8008d76: 687b ldr r3, [r7, #4]
  20027. 8008d78: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20028. 8008d7c: 681b ldr r3, [r3, #0]
  20029. 8008d7e: 4a82 ldr r2, [pc, #520] @ (8008f88 <HAL_UART_IRQHandler+0x584>)
  20030. 8008d80: 4293 cmp r3, r2
  20031. 8008d82: d030 beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  20032. 8008d84: 687b ldr r3, [r7, #4]
  20033. 8008d86: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20034. 8008d8a: 681b ldr r3, [r3, #0]
  20035. 8008d8c: 4a7f ldr r2, [pc, #508] @ (8008f8c <HAL_UART_IRQHandler+0x588>)
  20036. 8008d8e: 4293 cmp r3, r2
  20037. 8008d90: d029 beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  20038. 8008d92: 687b ldr r3, [r7, #4]
  20039. 8008d94: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20040. 8008d98: 681b ldr r3, [r3, #0]
  20041. 8008d9a: 4a7d ldr r2, [pc, #500] @ (8008f90 <HAL_UART_IRQHandler+0x58c>)
  20042. 8008d9c: 4293 cmp r3, r2
  20043. 8008d9e: d022 beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  20044. 8008da0: 687b ldr r3, [r7, #4]
  20045. 8008da2: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20046. 8008da6: 681b ldr r3, [r3, #0]
  20047. 8008da8: 4a7a ldr r2, [pc, #488] @ (8008f94 <HAL_UART_IRQHandler+0x590>)
  20048. 8008daa: 4293 cmp r3, r2
  20049. 8008dac: d01b beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  20050. 8008dae: 687b ldr r3, [r7, #4]
  20051. 8008db0: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20052. 8008db4: 681b ldr r3, [r3, #0]
  20053. 8008db6: 4a78 ldr r2, [pc, #480] @ (8008f98 <HAL_UART_IRQHandler+0x594>)
  20054. 8008db8: 4293 cmp r3, r2
  20055. 8008dba: d014 beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  20056. 8008dbc: 687b ldr r3, [r7, #4]
  20057. 8008dbe: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20058. 8008dc2: 681b ldr r3, [r3, #0]
  20059. 8008dc4: 4a75 ldr r2, [pc, #468] @ (8008f9c <HAL_UART_IRQHandler+0x598>)
  20060. 8008dc6: 4293 cmp r3, r2
  20061. 8008dc8: d00d beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  20062. 8008dca: 687b ldr r3, [r7, #4]
  20063. 8008dcc: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20064. 8008dd0: 681b ldr r3, [r3, #0]
  20065. 8008dd2: 4a73 ldr r2, [pc, #460] @ (8008fa0 <HAL_UART_IRQHandler+0x59c>)
  20066. 8008dd4: 4293 cmp r3, r2
  20067. 8008dd6: d006 beq.n 8008de6 <HAL_UART_IRQHandler+0x3e2>
  20068. 8008dd8: 687b ldr r3, [r7, #4]
  20069. 8008dda: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20070. 8008dde: 681b ldr r3, [r3, #0]
  20071. 8008de0: 4a70 ldr r2, [pc, #448] @ (8008fa4 <HAL_UART_IRQHandler+0x5a0>)
  20072. 8008de2: 4293 cmp r3, r2
  20073. 8008de4: d106 bne.n 8008df4 <HAL_UART_IRQHandler+0x3f0>
  20074. 8008de6: 687b ldr r3, [r7, #4]
  20075. 8008de8: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20076. 8008dec: 681b ldr r3, [r3, #0]
  20077. 8008dee: 685b ldr r3, [r3, #4]
  20078. 8008df0: b29b uxth r3, r3
  20079. 8008df2: e005 b.n 8008e00 <HAL_UART_IRQHandler+0x3fc>
  20080. 8008df4: 687b ldr r3, [r7, #4]
  20081. 8008df6: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20082. 8008dfa: 681b ldr r3, [r3, #0]
  20083. 8008dfc: 685b ldr r3, [r3, #4]
  20084. 8008dfe: b29b uxth r3, r3
  20085. 8008e00: f8a7 30be strh.w r3, [r7, #190] @ 0xbe
  20086. if ((nb_remaining_rx_data > 0U)
  20087. 8008e04: f8b7 30be ldrh.w r3, [r7, #190] @ 0xbe
  20088. 8008e08: 2b00 cmp r3, #0
  20089. 8008e0a: f000 81ab beq.w 8009164 <HAL_UART_IRQHandler+0x760>
  20090. && (nb_remaining_rx_data < huart->RxXferSize))
  20091. 8008e0e: 687b ldr r3, [r7, #4]
  20092. 8008e10: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  20093. 8008e14: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe
  20094. 8008e18: 429a cmp r2, r3
  20095. 8008e1a: f080 81a3 bcs.w 8009164 <HAL_UART_IRQHandler+0x760>
  20096. {
  20097. /* Reception is not complete */
  20098. huart->RxXferCount = nb_remaining_rx_data;
  20099. 8008e1e: 687b ldr r3, [r7, #4]
  20100. 8008e20: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe
  20101. 8008e24: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  20102. /* In Normal mode, end DMA xfer and HAL UART Rx process*/
  20103. if (huart->hdmarx->Init.Mode != DMA_CIRCULAR)
  20104. 8008e28: 687b ldr r3, [r7, #4]
  20105. 8008e2a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20106. 8008e2e: 69db ldr r3, [r3, #28]
  20107. 8008e30: f5b3 7f80 cmp.w r3, #256 @ 0x100
  20108. 8008e34: f000 8087 beq.w 8008f46 <HAL_UART_IRQHandler+0x542>
  20109. {
  20110. /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */
  20111. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  20112. 8008e38: 687b ldr r3, [r7, #4]
  20113. 8008e3a: 681b ldr r3, [r3, #0]
  20114. 8008e3c: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  20115. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  20116. 8008e40: f8d7 3088 ldr.w r3, [r7, #136] @ 0x88
  20117. 8008e44: e853 3f00 ldrex r3, [r3]
  20118. 8008e48: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  20119. return(result);
  20120. 8008e4c: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84
  20121. 8008e50: f423 7380 bic.w r3, r3, #256 @ 0x100
  20122. 8008e54: f8c7 30b8 str.w r3, [r7, #184] @ 0xb8
  20123. 8008e58: 687b ldr r3, [r7, #4]
  20124. 8008e5a: 681b ldr r3, [r3, #0]
  20125. 8008e5c: 461a mov r2, r3
  20126. 8008e5e: f8d7 30b8 ldr.w r3, [r7, #184] @ 0xb8
  20127. 8008e62: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  20128. 8008e66: f8c7 2090 str.w r2, [r7, #144] @ 0x90
  20129. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  20130. 8008e6a: f8d7 1090 ldr.w r1, [r7, #144] @ 0x90
  20131. 8008e6e: f8d7 2094 ldr.w r2, [r7, #148] @ 0x94
  20132. 8008e72: e841 2300 strex r3, r2, [r1]
  20133. 8008e76: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  20134. return(result);
  20135. 8008e7a: f8d7 308c ldr.w r3, [r7, #140] @ 0x8c
  20136. 8008e7e: 2b00 cmp r3, #0
  20137. 8008e80: d1da bne.n 8008e38 <HAL_UART_IRQHandler+0x434>
  20138. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  20139. 8008e82: 687b ldr r3, [r7, #4]
  20140. 8008e84: 681b ldr r3, [r3, #0]
  20141. 8008e86: 3308 adds r3, #8
  20142. 8008e88: 677b str r3, [r7, #116] @ 0x74
  20143. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  20144. 8008e8a: 6f7b ldr r3, [r7, #116] @ 0x74
  20145. 8008e8c: e853 3f00 ldrex r3, [r3]
  20146. 8008e90: 673b str r3, [r7, #112] @ 0x70
  20147. return(result);
  20148. 8008e92: 6f3b ldr r3, [r7, #112] @ 0x70
  20149. 8008e94: f023 0301 bic.w r3, r3, #1
  20150. 8008e98: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  20151. 8008e9c: 687b ldr r3, [r7, #4]
  20152. 8008e9e: 681b ldr r3, [r3, #0]
  20153. 8008ea0: 3308 adds r3, #8
  20154. 8008ea2: f8d7 20b4 ldr.w r2, [r7, #180] @ 0xb4
  20155. 8008ea6: f8c7 2080 str.w r2, [r7, #128] @ 0x80
  20156. 8008eaa: 67fb str r3, [r7, #124] @ 0x7c
  20157. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  20158. 8008eac: 6ff9 ldr r1, [r7, #124] @ 0x7c
  20159. 8008eae: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80
  20160. 8008eb2: e841 2300 strex r3, r2, [r1]
  20161. 8008eb6: 67bb str r3, [r7, #120] @ 0x78
  20162. return(result);
  20163. 8008eb8: 6fbb ldr r3, [r7, #120] @ 0x78
  20164. 8008eba: 2b00 cmp r3, #0
  20165. 8008ebc: d1e1 bne.n 8008e82 <HAL_UART_IRQHandler+0x47e>
  20166. /* Disable the DMA transfer for the receiver request by resetting the DMAR bit
  20167. in the UART CR3 register */
  20168. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
  20169. 8008ebe: 687b ldr r3, [r7, #4]
  20170. 8008ec0: 681b ldr r3, [r3, #0]
  20171. 8008ec2: 3308 adds r3, #8
  20172. 8008ec4: 663b str r3, [r7, #96] @ 0x60
  20173. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  20174. 8008ec6: 6e3b ldr r3, [r7, #96] @ 0x60
  20175. 8008ec8: e853 3f00 ldrex r3, [r3]
  20176. 8008ecc: 65fb str r3, [r7, #92] @ 0x5c
  20177. return(result);
  20178. 8008ece: 6dfb ldr r3, [r7, #92] @ 0x5c
  20179. 8008ed0: f023 0340 bic.w r3, r3, #64 @ 0x40
  20180. 8008ed4: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0
  20181. 8008ed8: 687b ldr r3, [r7, #4]
  20182. 8008eda: 681b ldr r3, [r3, #0]
  20183. 8008edc: 3308 adds r3, #8
  20184. 8008ede: f8d7 20b0 ldr.w r2, [r7, #176] @ 0xb0
  20185. 8008ee2: 66fa str r2, [r7, #108] @ 0x6c
  20186. 8008ee4: 66bb str r3, [r7, #104] @ 0x68
  20187. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  20188. 8008ee6: 6eb9 ldr r1, [r7, #104] @ 0x68
  20189. 8008ee8: 6efa ldr r2, [r7, #108] @ 0x6c
  20190. 8008eea: e841 2300 strex r3, r2, [r1]
  20191. 8008eee: 667b str r3, [r7, #100] @ 0x64
  20192. return(result);
  20193. 8008ef0: 6e7b ldr r3, [r7, #100] @ 0x64
  20194. 8008ef2: 2b00 cmp r3, #0
  20195. 8008ef4: d1e3 bne.n 8008ebe <HAL_UART_IRQHandler+0x4ba>
  20196. /* At end of Rx process, restore huart->RxState to Ready */
  20197. huart->RxState = HAL_UART_STATE_READY;
  20198. 8008ef6: 687b ldr r3, [r7, #4]
  20199. 8008ef8: 2220 movs r2, #32
  20200. 8008efa: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  20201. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  20202. 8008efe: 687b ldr r3, [r7, #4]
  20203. 8008f00: 2200 movs r2, #0
  20204. 8008f02: 66da str r2, [r3, #108] @ 0x6c
  20205. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  20206. 8008f04: 687b ldr r3, [r7, #4]
  20207. 8008f06: 681b ldr r3, [r3, #0]
  20208. 8008f08: 64fb str r3, [r7, #76] @ 0x4c
  20209. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  20210. 8008f0a: 6cfb ldr r3, [r7, #76] @ 0x4c
  20211. 8008f0c: e853 3f00 ldrex r3, [r3]
  20212. 8008f10: 64bb str r3, [r7, #72] @ 0x48
  20213. return(result);
  20214. 8008f12: 6cbb ldr r3, [r7, #72] @ 0x48
  20215. 8008f14: f023 0310 bic.w r3, r3, #16
  20216. 8008f18: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  20217. 8008f1c: 687b ldr r3, [r7, #4]
  20218. 8008f1e: 681b ldr r3, [r3, #0]
  20219. 8008f20: 461a mov r2, r3
  20220. 8008f22: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  20221. 8008f26: 65bb str r3, [r7, #88] @ 0x58
  20222. 8008f28: 657a str r2, [r7, #84] @ 0x54
  20223. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  20224. 8008f2a: 6d79 ldr r1, [r7, #84] @ 0x54
  20225. 8008f2c: 6dba ldr r2, [r7, #88] @ 0x58
  20226. 8008f2e: e841 2300 strex r3, r2, [r1]
  20227. 8008f32: 653b str r3, [r7, #80] @ 0x50
  20228. return(result);
  20229. 8008f34: 6d3b ldr r3, [r7, #80] @ 0x50
  20230. 8008f36: 2b00 cmp r3, #0
  20231. 8008f38: d1e4 bne.n 8008f04 <HAL_UART_IRQHandler+0x500>
  20232. /* Last bytes received, so no need as the abort is immediate */
  20233. (void)HAL_DMA_Abort(huart->hdmarx);
  20234. 8008f3a: 687b ldr r3, [r7, #4]
  20235. 8008f3c: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  20236. 8008f40: 4618 mov r0, r3
  20237. 8008f42: f7fa fa5f bl 8003404 <HAL_DMA_Abort>
  20238. }
  20239. /* Initialize type of RxEvent that correspond to RxEvent callback execution;
  20240. In this case, Rx Event type is Idle Event */
  20241. huart->RxEventType = HAL_UART_RXEVENT_IDLE;
  20242. 8008f46: 687b ldr r3, [r7, #4]
  20243. 8008f48: 2202 movs r2, #2
  20244. 8008f4a: 671a str r2, [r3, #112] @ 0x70
  20245. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  20246. /*Call registered Rx Event callback*/
  20247. huart->RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
  20248. #else
  20249. /*Call legacy weak Rx Event callback*/
  20250. HAL_UARTEx_RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
  20251. 8008f4c: 687b ldr r3, [r7, #4]
  20252. 8008f4e: f8b3 205c ldrh.w r2, [r3, #92] @ 0x5c
  20253. 8008f52: 687b ldr r3, [r7, #4]
  20254. 8008f54: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  20255. 8008f58: b29b uxth r3, r3
  20256. 8008f5a: 1ad3 subs r3, r2, r3
  20257. 8008f5c: b29b uxth r3, r3
  20258. 8008f5e: 4619 mov r1, r3
  20259. 8008f60: 6878 ldr r0, [r7, #4]
  20260. 8008f62: f7f8 fe65 bl 8001c30 <HAL_UARTEx_RxEventCallback>
  20261. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  20262. }
  20263. return;
  20264. 8008f66: e0fd b.n 8009164 <HAL_UART_IRQHandler+0x760>
  20265. 8008f68: 40020010 .word 0x40020010
  20266. 8008f6c: 40020028 .word 0x40020028
  20267. 8008f70: 40020040 .word 0x40020040
  20268. 8008f74: 40020058 .word 0x40020058
  20269. 8008f78: 40020070 .word 0x40020070
  20270. 8008f7c: 40020088 .word 0x40020088
  20271. 8008f80: 400200a0 .word 0x400200a0
  20272. 8008f84: 400200b8 .word 0x400200b8
  20273. 8008f88: 40020410 .word 0x40020410
  20274. 8008f8c: 40020428 .word 0x40020428
  20275. 8008f90: 40020440 .word 0x40020440
  20276. 8008f94: 40020458 .word 0x40020458
  20277. 8008f98: 40020470 .word 0x40020470
  20278. 8008f9c: 40020488 .word 0x40020488
  20279. 8008fa0: 400204a0 .word 0x400204a0
  20280. 8008fa4: 400204b8 .word 0x400204b8
  20281. else
  20282. {
  20283. /* DMA mode not enabled */
  20284. /* Check received length : If all expected data are received, do nothing.
  20285. Otherwise, if at least one data has already been received, IDLE event is to be notified to user */
  20286. uint16_t nb_rx_data = huart->RxXferSize - huart->RxXferCount;
  20287. 8008fa8: 687b ldr r3, [r7, #4]
  20288. 8008faa: f8b3 205c ldrh.w r2, [r3, #92] @ 0x5c
  20289. 8008fae: 687b ldr r3, [r7, #4]
  20290. 8008fb0: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  20291. 8008fb4: b29b uxth r3, r3
  20292. 8008fb6: 1ad3 subs r3, r2, r3
  20293. 8008fb8: f8a7 30ce strh.w r3, [r7, #206] @ 0xce
  20294. if ((huart->RxXferCount > 0U)
  20295. 8008fbc: 687b ldr r3, [r7, #4]
  20296. 8008fbe: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  20297. 8008fc2: b29b uxth r3, r3
  20298. 8008fc4: 2b00 cmp r3, #0
  20299. 8008fc6: f000 80cf beq.w 8009168 <HAL_UART_IRQHandler+0x764>
  20300. && (nb_rx_data > 0U))
  20301. 8008fca: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce
  20302. 8008fce: 2b00 cmp r3, #0
  20303. 8008fd0: f000 80ca beq.w 8009168 <HAL_UART_IRQHandler+0x764>
  20304. {
  20305. /* Disable the UART Parity Error Interrupt and RXNE interrupts */
  20306. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  20307. 8008fd4: 687b ldr r3, [r7, #4]
  20308. 8008fd6: 681b ldr r3, [r3, #0]
  20309. 8008fd8: 63bb str r3, [r7, #56] @ 0x38
  20310. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  20311. 8008fda: 6bbb ldr r3, [r7, #56] @ 0x38
  20312. 8008fdc: e853 3f00 ldrex r3, [r3]
  20313. 8008fe0: 637b str r3, [r7, #52] @ 0x34
  20314. return(result);
  20315. 8008fe2: 6b7b ldr r3, [r7, #52] @ 0x34
  20316. 8008fe4: f423 7390 bic.w r3, r3, #288 @ 0x120
  20317. 8008fe8: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8
  20318. 8008fec: 687b ldr r3, [r7, #4]
  20319. 8008fee: 681b ldr r3, [r3, #0]
  20320. 8008ff0: 461a mov r2, r3
  20321. 8008ff2: f8d7 30c8 ldr.w r3, [r7, #200] @ 0xc8
  20322. 8008ff6: 647b str r3, [r7, #68] @ 0x44
  20323. 8008ff8: 643a str r2, [r7, #64] @ 0x40
  20324. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  20325. 8008ffa: 6c39 ldr r1, [r7, #64] @ 0x40
  20326. 8008ffc: 6c7a ldr r2, [r7, #68] @ 0x44
  20327. 8008ffe: e841 2300 strex r3, r2, [r1]
  20328. 8009002: 63fb str r3, [r7, #60] @ 0x3c
  20329. return(result);
  20330. 8009004: 6bfb ldr r3, [r7, #60] @ 0x3c
  20331. 8009006: 2b00 cmp r3, #0
  20332. 8009008: d1e4 bne.n 8008fd4 <HAL_UART_IRQHandler+0x5d0>
  20333. /* Disable the UART Error Interrupt:(Frame error, noise error, overrun error) and RX FIFO Threshold interrupt */
  20334. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  20335. 800900a: 687b ldr r3, [r7, #4]
  20336. 800900c: 681b ldr r3, [r3, #0]
  20337. 800900e: 3308 adds r3, #8
  20338. 8009010: 627b str r3, [r7, #36] @ 0x24
  20339. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  20340. 8009012: 6a7b ldr r3, [r7, #36] @ 0x24
  20341. 8009014: e853 3f00 ldrex r3, [r3]
  20342. 8009018: 623b str r3, [r7, #32]
  20343. return(result);
  20344. 800901a: 6a3a ldr r2, [r7, #32]
  20345. 800901c: 4b55 ldr r3, [pc, #340] @ (8009174 <HAL_UART_IRQHandler+0x770>)
  20346. 800901e: 4013 ands r3, r2
  20347. 8009020: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4
  20348. 8009024: 687b ldr r3, [r7, #4]
  20349. 8009026: 681b ldr r3, [r3, #0]
  20350. 8009028: 3308 adds r3, #8
  20351. 800902a: f8d7 20c4 ldr.w r2, [r7, #196] @ 0xc4
  20352. 800902e: 633a str r2, [r7, #48] @ 0x30
  20353. 8009030: 62fb str r3, [r7, #44] @ 0x2c
  20354. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  20355. 8009032: 6af9 ldr r1, [r7, #44] @ 0x2c
  20356. 8009034: 6b3a ldr r2, [r7, #48] @ 0x30
  20357. 8009036: e841 2300 strex r3, r2, [r1]
  20358. 800903a: 62bb str r3, [r7, #40] @ 0x28
  20359. return(result);
  20360. 800903c: 6abb ldr r3, [r7, #40] @ 0x28
  20361. 800903e: 2b00 cmp r3, #0
  20362. 8009040: d1e3 bne.n 800900a <HAL_UART_IRQHandler+0x606>
  20363. /* Rx process is completed, restore huart->RxState to Ready */
  20364. huart->RxState = HAL_UART_STATE_READY;
  20365. 8009042: 687b ldr r3, [r7, #4]
  20366. 8009044: 2220 movs r2, #32
  20367. 8009046: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  20368. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  20369. 800904a: 687b ldr r3, [r7, #4]
  20370. 800904c: 2200 movs r2, #0
  20371. 800904e: 66da str r2, [r3, #108] @ 0x6c
  20372. /* Clear RxISR function pointer */
  20373. huart->RxISR = NULL;
  20374. 8009050: 687b ldr r3, [r7, #4]
  20375. 8009052: 2200 movs r2, #0
  20376. 8009054: 675a str r2, [r3, #116] @ 0x74
  20377. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  20378. 8009056: 687b ldr r3, [r7, #4]
  20379. 8009058: 681b ldr r3, [r3, #0]
  20380. 800905a: 613b str r3, [r7, #16]
  20381. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  20382. 800905c: 693b ldr r3, [r7, #16]
  20383. 800905e: e853 3f00 ldrex r3, [r3]
  20384. 8009062: 60fb str r3, [r7, #12]
  20385. return(result);
  20386. 8009064: 68fb ldr r3, [r7, #12]
  20387. 8009066: f023 0310 bic.w r3, r3, #16
  20388. 800906a: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0
  20389. 800906e: 687b ldr r3, [r7, #4]
  20390. 8009070: 681b ldr r3, [r3, #0]
  20391. 8009072: 461a mov r2, r3
  20392. 8009074: f8d7 30c0 ldr.w r3, [r7, #192] @ 0xc0
  20393. 8009078: 61fb str r3, [r7, #28]
  20394. 800907a: 61ba str r2, [r7, #24]
  20395. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  20396. 800907c: 69b9 ldr r1, [r7, #24]
  20397. 800907e: 69fa ldr r2, [r7, #28]
  20398. 8009080: e841 2300 strex r3, r2, [r1]
  20399. 8009084: 617b str r3, [r7, #20]
  20400. return(result);
  20401. 8009086: 697b ldr r3, [r7, #20]
  20402. 8009088: 2b00 cmp r3, #0
  20403. 800908a: d1e4 bne.n 8009056 <HAL_UART_IRQHandler+0x652>
  20404. /* Initialize type of RxEvent that correspond to RxEvent callback execution;
  20405. In this case, Rx Event type is Idle Event */
  20406. huart->RxEventType = HAL_UART_RXEVENT_IDLE;
  20407. 800908c: 687b ldr r3, [r7, #4]
  20408. 800908e: 2202 movs r2, #2
  20409. 8009090: 671a str r2, [r3, #112] @ 0x70
  20410. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  20411. /*Call registered Rx complete callback*/
  20412. huart->RxEventCallback(huart, nb_rx_data);
  20413. #else
  20414. /*Call legacy weak Rx Event callback*/
  20415. HAL_UARTEx_RxEventCallback(huart, nb_rx_data);
  20416. 8009092: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce
  20417. 8009096: 4619 mov r1, r3
  20418. 8009098: 6878 ldr r0, [r7, #4]
  20419. 800909a: f7f8 fdc9 bl 8001c30 <HAL_UARTEx_RxEventCallback>
  20420. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  20421. }
  20422. return;
  20423. 800909e: e063 b.n 8009168 <HAL_UART_IRQHandler+0x764>
  20424. }
  20425. }
  20426. /* UART wakeup from Stop mode interrupt occurred ---------------------------*/
  20427. if (((isrflags & USART_ISR_WUF) != 0U) && ((cr3its & USART_CR3_WUFIE) != 0U))
  20428. 80090a0: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  20429. 80090a4: f403 1380 and.w r3, r3, #1048576 @ 0x100000
  20430. 80090a8: 2b00 cmp r3, #0
  20431. 80090aa: d00e beq.n 80090ca <HAL_UART_IRQHandler+0x6c6>
  20432. 80090ac: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  20433. 80090b0: f403 0380 and.w r3, r3, #4194304 @ 0x400000
  20434. 80090b4: 2b00 cmp r3, #0
  20435. 80090b6: d008 beq.n 80090ca <HAL_UART_IRQHandler+0x6c6>
  20436. {
  20437. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_WUF);
  20438. 80090b8: 687b ldr r3, [r7, #4]
  20439. 80090ba: 681b ldr r3, [r3, #0]
  20440. 80090bc: f44f 1280 mov.w r2, #1048576 @ 0x100000
  20441. 80090c0: 621a str r2, [r3, #32]
  20442. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  20443. /* Call registered Wakeup Callback */
  20444. huart->WakeupCallback(huart);
  20445. #else
  20446. /* Call legacy weak Wakeup Callback */
  20447. HAL_UARTEx_WakeupCallback(huart);
  20448. 80090c2: 6878 ldr r0, [r7, #4]
  20449. 80090c4: f002 f80c bl 800b0e0 <HAL_UARTEx_WakeupCallback>
  20450. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  20451. return;
  20452. 80090c8: e051 b.n 800916e <HAL_UART_IRQHandler+0x76a>
  20453. }
  20454. /* UART in mode Transmitter ------------------------------------------------*/
  20455. if (((isrflags & USART_ISR_TXE_TXFNF) != 0U)
  20456. 80090ca: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  20457. 80090ce: f003 0380 and.w r3, r3, #128 @ 0x80
  20458. 80090d2: 2b00 cmp r3, #0
  20459. 80090d4: d014 beq.n 8009100 <HAL_UART_IRQHandler+0x6fc>
  20460. && (((cr1its & USART_CR1_TXEIE_TXFNFIE) != 0U)
  20461. 80090d6: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  20462. 80090da: f003 0380 and.w r3, r3, #128 @ 0x80
  20463. 80090de: 2b00 cmp r3, #0
  20464. 80090e0: d105 bne.n 80090ee <HAL_UART_IRQHandler+0x6ea>
  20465. || ((cr3its & USART_CR3_TXFTIE) != 0U)))
  20466. 80090e2: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  20467. 80090e6: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  20468. 80090ea: 2b00 cmp r3, #0
  20469. 80090ec: d008 beq.n 8009100 <HAL_UART_IRQHandler+0x6fc>
  20470. {
  20471. if (huart->TxISR != NULL)
  20472. 80090ee: 687b ldr r3, [r7, #4]
  20473. 80090f0: 6f9b ldr r3, [r3, #120] @ 0x78
  20474. 80090f2: 2b00 cmp r3, #0
  20475. 80090f4: d03a beq.n 800916c <HAL_UART_IRQHandler+0x768>
  20476. {
  20477. huart->TxISR(huart);
  20478. 80090f6: 687b ldr r3, [r7, #4]
  20479. 80090f8: 6f9b ldr r3, [r3, #120] @ 0x78
  20480. 80090fa: 6878 ldr r0, [r7, #4]
  20481. 80090fc: 4798 blx r3
  20482. }
  20483. return;
  20484. 80090fe: e035 b.n 800916c <HAL_UART_IRQHandler+0x768>
  20485. }
  20486. /* UART in mode Transmitter (transmission end) -----------------------------*/
  20487. if (((isrflags & USART_ISR_TC) != 0U) && ((cr1its & USART_CR1_TCIE) != 0U))
  20488. 8009100: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  20489. 8009104: f003 0340 and.w r3, r3, #64 @ 0x40
  20490. 8009108: 2b00 cmp r3, #0
  20491. 800910a: d009 beq.n 8009120 <HAL_UART_IRQHandler+0x71c>
  20492. 800910c: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  20493. 8009110: f003 0340 and.w r3, r3, #64 @ 0x40
  20494. 8009114: 2b00 cmp r3, #0
  20495. 8009116: d003 beq.n 8009120 <HAL_UART_IRQHandler+0x71c>
  20496. {
  20497. UART_EndTransmit_IT(huart);
  20498. 8009118: 6878 ldr r0, [r7, #4]
  20499. 800911a: f001 fa99 bl 800a650 <UART_EndTransmit_IT>
  20500. return;
  20501. 800911e: e026 b.n 800916e <HAL_UART_IRQHandler+0x76a>
  20502. }
  20503. /* UART TX Fifo Empty occurred ----------------------------------------------*/
  20504. if (((isrflags & USART_ISR_TXFE) != 0U) && ((cr1its & USART_CR1_TXFEIE) != 0U))
  20505. 8009120: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  20506. 8009124: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  20507. 8009128: 2b00 cmp r3, #0
  20508. 800912a: d009 beq.n 8009140 <HAL_UART_IRQHandler+0x73c>
  20509. 800912c: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  20510. 8009130: f003 4380 and.w r3, r3, #1073741824 @ 0x40000000
  20511. 8009134: 2b00 cmp r3, #0
  20512. 8009136: d003 beq.n 8009140 <HAL_UART_IRQHandler+0x73c>
  20513. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  20514. /* Call registered Tx Fifo Empty Callback */
  20515. huart->TxFifoEmptyCallback(huart);
  20516. #else
  20517. /* Call legacy weak Tx Fifo Empty Callback */
  20518. HAL_UARTEx_TxFifoEmptyCallback(huart);
  20519. 8009138: 6878 ldr r0, [r7, #4]
  20520. 800913a: f001 ffe5 bl 800b108 <HAL_UARTEx_TxFifoEmptyCallback>
  20521. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  20522. return;
  20523. 800913e: e016 b.n 800916e <HAL_UART_IRQHandler+0x76a>
  20524. }
  20525. /* UART RX Fifo Full occurred ----------------------------------------------*/
  20526. if (((isrflags & USART_ISR_RXFF) != 0U) && ((cr1its & USART_CR1_RXFFIE) != 0U))
  20527. 8009140: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  20528. 8009144: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  20529. 8009148: 2b00 cmp r3, #0
  20530. 800914a: d010 beq.n 800916e <HAL_UART_IRQHandler+0x76a>
  20531. 800914c: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  20532. 8009150: 2b00 cmp r3, #0
  20533. 8009152: da0c bge.n 800916e <HAL_UART_IRQHandler+0x76a>
  20534. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  20535. /* Call registered Rx Fifo Full Callback */
  20536. huart->RxFifoFullCallback(huart);
  20537. #else
  20538. /* Call legacy weak Rx Fifo Full Callback */
  20539. HAL_UARTEx_RxFifoFullCallback(huart);
  20540. 8009154: 6878 ldr r0, [r7, #4]
  20541. 8009156: f001 ffcd bl 800b0f4 <HAL_UARTEx_RxFifoFullCallback>
  20542. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  20543. return;
  20544. 800915a: e008 b.n 800916e <HAL_UART_IRQHandler+0x76a>
  20545. return;
  20546. 800915c: bf00 nop
  20547. 800915e: e006 b.n 800916e <HAL_UART_IRQHandler+0x76a>
  20548. return;
  20549. 8009160: bf00 nop
  20550. 8009162: e004 b.n 800916e <HAL_UART_IRQHandler+0x76a>
  20551. return;
  20552. 8009164: bf00 nop
  20553. 8009166: e002 b.n 800916e <HAL_UART_IRQHandler+0x76a>
  20554. return;
  20555. 8009168: bf00 nop
  20556. 800916a: e000 b.n 800916e <HAL_UART_IRQHandler+0x76a>
  20557. return;
  20558. 800916c: bf00 nop
  20559. }
  20560. }
  20561. 800916e: 37e8 adds r7, #232 @ 0xe8
  20562. 8009170: 46bd mov sp, r7
  20563. 8009172: bd80 pop {r7, pc}
  20564. 8009174: effffffe .word 0xeffffffe
  20565. 08009178 <HAL_UART_ErrorCallback>:
  20566. * @brief UART error callback.
  20567. * @param huart UART handle.
  20568. * @retval None
  20569. */
  20570. __weak void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
  20571. {
  20572. 8009178: b480 push {r7}
  20573. 800917a: b083 sub sp, #12
  20574. 800917c: af00 add r7, sp, #0
  20575. 800917e: 6078 str r0, [r7, #4]
  20576. UNUSED(huart);
  20577. /* NOTE : This function should not be modified, when the callback is needed,
  20578. the HAL_UART_ErrorCallback can be implemented in the user file.
  20579. */
  20580. }
  20581. 8009180: bf00 nop
  20582. 8009182: 370c adds r7, #12
  20583. 8009184: 46bd mov sp, r7
  20584. 8009186: f85d 7b04 ldr.w r7, [sp], #4
  20585. 800918a: 4770 bx lr
  20586. 0800918c <UART_SetConfig>:
  20587. * @brief Configure the UART peripheral.
  20588. * @param huart UART handle.
  20589. * @retval HAL status
  20590. */
  20591. HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
  20592. {
  20593. 800918c: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr}
  20594. 8009190: b092 sub sp, #72 @ 0x48
  20595. 8009192: af00 add r7, sp, #0
  20596. 8009194: 6178 str r0, [r7, #20]
  20597. uint32_t tmpreg;
  20598. uint16_t brrtemp;
  20599. UART_ClockSourceTypeDef clocksource;
  20600. uint32_t usartdiv;
  20601. HAL_StatusTypeDef ret = HAL_OK;
  20602. 8009196: 2300 movs r3, #0
  20603. 8009198: f887 3042 strb.w r3, [r7, #66] @ 0x42
  20604. * the UART Word Length, Parity, Mode and oversampling:
  20605. * set the M bits according to huart->Init.WordLength value
  20606. * set PCE and PS bits according to huart->Init.Parity value
  20607. * set TE and RE bits according to huart->Init.Mode value
  20608. * set OVER8 bit according to huart->Init.OverSampling value */
  20609. tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode | huart->Init.OverSampling ;
  20610. 800919c: 697b ldr r3, [r7, #20]
  20611. 800919e: 689a ldr r2, [r3, #8]
  20612. 80091a0: 697b ldr r3, [r7, #20]
  20613. 80091a2: 691b ldr r3, [r3, #16]
  20614. 80091a4: 431a orrs r2, r3
  20615. 80091a6: 697b ldr r3, [r7, #20]
  20616. 80091a8: 695b ldr r3, [r3, #20]
  20617. 80091aa: 431a orrs r2, r3
  20618. 80091ac: 697b ldr r3, [r7, #20]
  20619. 80091ae: 69db ldr r3, [r3, #28]
  20620. 80091b0: 4313 orrs r3, r2
  20621. 80091b2: 647b str r3, [r7, #68] @ 0x44
  20622. MODIFY_REG(huart->Instance->CR1, USART_CR1_FIELDS, tmpreg);
  20623. 80091b4: 697b ldr r3, [r7, #20]
  20624. 80091b6: 681b ldr r3, [r3, #0]
  20625. 80091b8: 681a ldr r2, [r3, #0]
  20626. 80091ba: 4bbe ldr r3, [pc, #760] @ (80094b4 <UART_SetConfig+0x328>)
  20627. 80091bc: 4013 ands r3, r2
  20628. 80091be: 697a ldr r2, [r7, #20]
  20629. 80091c0: 6812 ldr r2, [r2, #0]
  20630. 80091c2: 6c79 ldr r1, [r7, #68] @ 0x44
  20631. 80091c4: 430b orrs r3, r1
  20632. 80091c6: 6013 str r3, [r2, #0]
  20633. /*-------------------------- USART CR2 Configuration -----------------------*/
  20634. /* Configure the UART Stop Bits: Set STOP[13:12] bits according
  20635. * to huart->Init.StopBits value */
  20636. MODIFY_REG(huart->Instance->CR2, USART_CR2_STOP, huart->Init.StopBits);
  20637. 80091c8: 697b ldr r3, [r7, #20]
  20638. 80091ca: 681b ldr r3, [r3, #0]
  20639. 80091cc: 685b ldr r3, [r3, #4]
  20640. 80091ce: f423 5140 bic.w r1, r3, #12288 @ 0x3000
  20641. 80091d2: 697b ldr r3, [r7, #20]
  20642. 80091d4: 68da ldr r2, [r3, #12]
  20643. 80091d6: 697b ldr r3, [r7, #20]
  20644. 80091d8: 681b ldr r3, [r3, #0]
  20645. 80091da: 430a orrs r2, r1
  20646. 80091dc: 605a str r2, [r3, #4]
  20647. /* Configure
  20648. * - UART HardWare Flow Control: set CTSE and RTSE bits according
  20649. * to huart->Init.HwFlowCtl value
  20650. * - one-bit sampling method versus three samples' majority rule according
  20651. * to huart->Init.OneBitSampling (not applicable to LPUART) */
  20652. tmpreg = (uint32_t)huart->Init.HwFlowCtl;
  20653. 80091de: 697b ldr r3, [r7, #20]
  20654. 80091e0: 699b ldr r3, [r3, #24]
  20655. 80091e2: 647b str r3, [r7, #68] @ 0x44
  20656. if (!(UART_INSTANCE_LOWPOWER(huart)))
  20657. 80091e4: 697b ldr r3, [r7, #20]
  20658. 80091e6: 681b ldr r3, [r3, #0]
  20659. 80091e8: 4ab3 ldr r2, [pc, #716] @ (80094b8 <UART_SetConfig+0x32c>)
  20660. 80091ea: 4293 cmp r3, r2
  20661. 80091ec: d004 beq.n 80091f8 <UART_SetConfig+0x6c>
  20662. {
  20663. tmpreg |= huart->Init.OneBitSampling;
  20664. 80091ee: 697b ldr r3, [r7, #20]
  20665. 80091f0: 6a1b ldr r3, [r3, #32]
  20666. 80091f2: 6c7a ldr r2, [r7, #68] @ 0x44
  20667. 80091f4: 4313 orrs r3, r2
  20668. 80091f6: 647b str r3, [r7, #68] @ 0x44
  20669. }
  20670. MODIFY_REG(huart->Instance->CR3, USART_CR3_FIELDS, tmpreg);
  20671. 80091f8: 697b ldr r3, [r7, #20]
  20672. 80091fa: 681b ldr r3, [r3, #0]
  20673. 80091fc: 689a ldr r2, [r3, #8]
  20674. 80091fe: 4baf ldr r3, [pc, #700] @ (80094bc <UART_SetConfig+0x330>)
  20675. 8009200: 4013 ands r3, r2
  20676. 8009202: 697a ldr r2, [r7, #20]
  20677. 8009204: 6812 ldr r2, [r2, #0]
  20678. 8009206: 6c79 ldr r1, [r7, #68] @ 0x44
  20679. 8009208: 430b orrs r3, r1
  20680. 800920a: 6093 str r3, [r2, #8]
  20681. /*-------------------------- USART PRESC Configuration -----------------------*/
  20682. /* Configure
  20683. * - UART Clock Prescaler : set PRESCALER according to huart->Init.ClockPrescaler value */
  20684. MODIFY_REG(huart->Instance->PRESC, USART_PRESC_PRESCALER, huart->Init.ClockPrescaler);
  20685. 800920c: 697b ldr r3, [r7, #20]
  20686. 800920e: 681b ldr r3, [r3, #0]
  20687. 8009210: 6adb ldr r3, [r3, #44] @ 0x2c
  20688. 8009212: f023 010f bic.w r1, r3, #15
  20689. 8009216: 697b ldr r3, [r7, #20]
  20690. 8009218: 6a5a ldr r2, [r3, #36] @ 0x24
  20691. 800921a: 697b ldr r3, [r7, #20]
  20692. 800921c: 681b ldr r3, [r3, #0]
  20693. 800921e: 430a orrs r2, r1
  20694. 8009220: 62da str r2, [r3, #44] @ 0x2c
  20695. /*-------------------------- USART BRR Configuration -----------------------*/
  20696. UART_GETCLOCKSOURCE(huart, clocksource);
  20697. 8009222: 697b ldr r3, [r7, #20]
  20698. 8009224: 681b ldr r3, [r3, #0]
  20699. 8009226: 4aa6 ldr r2, [pc, #664] @ (80094c0 <UART_SetConfig+0x334>)
  20700. 8009228: 4293 cmp r3, r2
  20701. 800922a: d177 bne.n 800931c <UART_SetConfig+0x190>
  20702. 800922c: 4ba5 ldr r3, [pc, #660] @ (80094c4 <UART_SetConfig+0x338>)
  20703. 800922e: 6d5b ldr r3, [r3, #84] @ 0x54
  20704. 8009230: f003 0338 and.w r3, r3, #56 @ 0x38
  20705. 8009234: 2b28 cmp r3, #40 @ 0x28
  20706. 8009236: d86d bhi.n 8009314 <UART_SetConfig+0x188>
  20707. 8009238: a201 add r2, pc, #4 @ (adr r2, 8009240 <UART_SetConfig+0xb4>)
  20708. 800923a: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  20709. 800923e: bf00 nop
  20710. 8009240: 080092e5 .word 0x080092e5
  20711. 8009244: 08009315 .word 0x08009315
  20712. 8009248: 08009315 .word 0x08009315
  20713. 800924c: 08009315 .word 0x08009315
  20714. 8009250: 08009315 .word 0x08009315
  20715. 8009254: 08009315 .word 0x08009315
  20716. 8009258: 08009315 .word 0x08009315
  20717. 800925c: 08009315 .word 0x08009315
  20718. 8009260: 080092ed .word 0x080092ed
  20719. 8009264: 08009315 .word 0x08009315
  20720. 8009268: 08009315 .word 0x08009315
  20721. 800926c: 08009315 .word 0x08009315
  20722. 8009270: 08009315 .word 0x08009315
  20723. 8009274: 08009315 .word 0x08009315
  20724. 8009278: 08009315 .word 0x08009315
  20725. 800927c: 08009315 .word 0x08009315
  20726. 8009280: 080092f5 .word 0x080092f5
  20727. 8009284: 08009315 .word 0x08009315
  20728. 8009288: 08009315 .word 0x08009315
  20729. 800928c: 08009315 .word 0x08009315
  20730. 8009290: 08009315 .word 0x08009315
  20731. 8009294: 08009315 .word 0x08009315
  20732. 8009298: 08009315 .word 0x08009315
  20733. 800929c: 08009315 .word 0x08009315
  20734. 80092a0: 080092fd .word 0x080092fd
  20735. 80092a4: 08009315 .word 0x08009315
  20736. 80092a8: 08009315 .word 0x08009315
  20737. 80092ac: 08009315 .word 0x08009315
  20738. 80092b0: 08009315 .word 0x08009315
  20739. 80092b4: 08009315 .word 0x08009315
  20740. 80092b8: 08009315 .word 0x08009315
  20741. 80092bc: 08009315 .word 0x08009315
  20742. 80092c0: 08009305 .word 0x08009305
  20743. 80092c4: 08009315 .word 0x08009315
  20744. 80092c8: 08009315 .word 0x08009315
  20745. 80092cc: 08009315 .word 0x08009315
  20746. 80092d0: 08009315 .word 0x08009315
  20747. 80092d4: 08009315 .word 0x08009315
  20748. 80092d8: 08009315 .word 0x08009315
  20749. 80092dc: 08009315 .word 0x08009315
  20750. 80092e0: 0800930d .word 0x0800930d
  20751. 80092e4: 2301 movs r3, #1
  20752. 80092e6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20753. 80092ea: e222 b.n 8009732 <UART_SetConfig+0x5a6>
  20754. 80092ec: 2304 movs r3, #4
  20755. 80092ee: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20756. 80092f2: e21e b.n 8009732 <UART_SetConfig+0x5a6>
  20757. 80092f4: 2308 movs r3, #8
  20758. 80092f6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20759. 80092fa: e21a b.n 8009732 <UART_SetConfig+0x5a6>
  20760. 80092fc: 2310 movs r3, #16
  20761. 80092fe: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20762. 8009302: e216 b.n 8009732 <UART_SetConfig+0x5a6>
  20763. 8009304: 2320 movs r3, #32
  20764. 8009306: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20765. 800930a: e212 b.n 8009732 <UART_SetConfig+0x5a6>
  20766. 800930c: 2340 movs r3, #64 @ 0x40
  20767. 800930e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20768. 8009312: e20e b.n 8009732 <UART_SetConfig+0x5a6>
  20769. 8009314: 2380 movs r3, #128 @ 0x80
  20770. 8009316: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20771. 800931a: e20a b.n 8009732 <UART_SetConfig+0x5a6>
  20772. 800931c: 697b ldr r3, [r7, #20]
  20773. 800931e: 681b ldr r3, [r3, #0]
  20774. 8009320: 4a69 ldr r2, [pc, #420] @ (80094c8 <UART_SetConfig+0x33c>)
  20775. 8009322: 4293 cmp r3, r2
  20776. 8009324: d130 bne.n 8009388 <UART_SetConfig+0x1fc>
  20777. 8009326: 4b67 ldr r3, [pc, #412] @ (80094c4 <UART_SetConfig+0x338>)
  20778. 8009328: 6d5b ldr r3, [r3, #84] @ 0x54
  20779. 800932a: f003 0307 and.w r3, r3, #7
  20780. 800932e: 2b05 cmp r3, #5
  20781. 8009330: d826 bhi.n 8009380 <UART_SetConfig+0x1f4>
  20782. 8009332: a201 add r2, pc, #4 @ (adr r2, 8009338 <UART_SetConfig+0x1ac>)
  20783. 8009334: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  20784. 8009338: 08009351 .word 0x08009351
  20785. 800933c: 08009359 .word 0x08009359
  20786. 8009340: 08009361 .word 0x08009361
  20787. 8009344: 08009369 .word 0x08009369
  20788. 8009348: 08009371 .word 0x08009371
  20789. 800934c: 08009379 .word 0x08009379
  20790. 8009350: 2300 movs r3, #0
  20791. 8009352: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20792. 8009356: e1ec b.n 8009732 <UART_SetConfig+0x5a6>
  20793. 8009358: 2304 movs r3, #4
  20794. 800935a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20795. 800935e: e1e8 b.n 8009732 <UART_SetConfig+0x5a6>
  20796. 8009360: 2308 movs r3, #8
  20797. 8009362: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20798. 8009366: e1e4 b.n 8009732 <UART_SetConfig+0x5a6>
  20799. 8009368: 2310 movs r3, #16
  20800. 800936a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20801. 800936e: e1e0 b.n 8009732 <UART_SetConfig+0x5a6>
  20802. 8009370: 2320 movs r3, #32
  20803. 8009372: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20804. 8009376: e1dc b.n 8009732 <UART_SetConfig+0x5a6>
  20805. 8009378: 2340 movs r3, #64 @ 0x40
  20806. 800937a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20807. 800937e: e1d8 b.n 8009732 <UART_SetConfig+0x5a6>
  20808. 8009380: 2380 movs r3, #128 @ 0x80
  20809. 8009382: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20810. 8009386: e1d4 b.n 8009732 <UART_SetConfig+0x5a6>
  20811. 8009388: 697b ldr r3, [r7, #20]
  20812. 800938a: 681b ldr r3, [r3, #0]
  20813. 800938c: 4a4f ldr r2, [pc, #316] @ (80094cc <UART_SetConfig+0x340>)
  20814. 800938e: 4293 cmp r3, r2
  20815. 8009390: d130 bne.n 80093f4 <UART_SetConfig+0x268>
  20816. 8009392: 4b4c ldr r3, [pc, #304] @ (80094c4 <UART_SetConfig+0x338>)
  20817. 8009394: 6d5b ldr r3, [r3, #84] @ 0x54
  20818. 8009396: f003 0307 and.w r3, r3, #7
  20819. 800939a: 2b05 cmp r3, #5
  20820. 800939c: d826 bhi.n 80093ec <UART_SetConfig+0x260>
  20821. 800939e: a201 add r2, pc, #4 @ (adr r2, 80093a4 <UART_SetConfig+0x218>)
  20822. 80093a0: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  20823. 80093a4: 080093bd .word 0x080093bd
  20824. 80093a8: 080093c5 .word 0x080093c5
  20825. 80093ac: 080093cd .word 0x080093cd
  20826. 80093b0: 080093d5 .word 0x080093d5
  20827. 80093b4: 080093dd .word 0x080093dd
  20828. 80093b8: 080093e5 .word 0x080093e5
  20829. 80093bc: 2300 movs r3, #0
  20830. 80093be: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20831. 80093c2: e1b6 b.n 8009732 <UART_SetConfig+0x5a6>
  20832. 80093c4: 2304 movs r3, #4
  20833. 80093c6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20834. 80093ca: e1b2 b.n 8009732 <UART_SetConfig+0x5a6>
  20835. 80093cc: 2308 movs r3, #8
  20836. 80093ce: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20837. 80093d2: e1ae b.n 8009732 <UART_SetConfig+0x5a6>
  20838. 80093d4: 2310 movs r3, #16
  20839. 80093d6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20840. 80093da: e1aa b.n 8009732 <UART_SetConfig+0x5a6>
  20841. 80093dc: 2320 movs r3, #32
  20842. 80093de: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20843. 80093e2: e1a6 b.n 8009732 <UART_SetConfig+0x5a6>
  20844. 80093e4: 2340 movs r3, #64 @ 0x40
  20845. 80093e6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20846. 80093ea: e1a2 b.n 8009732 <UART_SetConfig+0x5a6>
  20847. 80093ec: 2380 movs r3, #128 @ 0x80
  20848. 80093ee: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20849. 80093f2: e19e b.n 8009732 <UART_SetConfig+0x5a6>
  20850. 80093f4: 697b ldr r3, [r7, #20]
  20851. 80093f6: 681b ldr r3, [r3, #0]
  20852. 80093f8: 4a35 ldr r2, [pc, #212] @ (80094d0 <UART_SetConfig+0x344>)
  20853. 80093fa: 4293 cmp r3, r2
  20854. 80093fc: d130 bne.n 8009460 <UART_SetConfig+0x2d4>
  20855. 80093fe: 4b31 ldr r3, [pc, #196] @ (80094c4 <UART_SetConfig+0x338>)
  20856. 8009400: 6d5b ldr r3, [r3, #84] @ 0x54
  20857. 8009402: f003 0307 and.w r3, r3, #7
  20858. 8009406: 2b05 cmp r3, #5
  20859. 8009408: d826 bhi.n 8009458 <UART_SetConfig+0x2cc>
  20860. 800940a: a201 add r2, pc, #4 @ (adr r2, 8009410 <UART_SetConfig+0x284>)
  20861. 800940c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  20862. 8009410: 08009429 .word 0x08009429
  20863. 8009414: 08009431 .word 0x08009431
  20864. 8009418: 08009439 .word 0x08009439
  20865. 800941c: 08009441 .word 0x08009441
  20866. 8009420: 08009449 .word 0x08009449
  20867. 8009424: 08009451 .word 0x08009451
  20868. 8009428: 2300 movs r3, #0
  20869. 800942a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20870. 800942e: e180 b.n 8009732 <UART_SetConfig+0x5a6>
  20871. 8009430: 2304 movs r3, #4
  20872. 8009432: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20873. 8009436: e17c b.n 8009732 <UART_SetConfig+0x5a6>
  20874. 8009438: 2308 movs r3, #8
  20875. 800943a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20876. 800943e: e178 b.n 8009732 <UART_SetConfig+0x5a6>
  20877. 8009440: 2310 movs r3, #16
  20878. 8009442: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20879. 8009446: e174 b.n 8009732 <UART_SetConfig+0x5a6>
  20880. 8009448: 2320 movs r3, #32
  20881. 800944a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20882. 800944e: e170 b.n 8009732 <UART_SetConfig+0x5a6>
  20883. 8009450: 2340 movs r3, #64 @ 0x40
  20884. 8009452: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20885. 8009456: e16c b.n 8009732 <UART_SetConfig+0x5a6>
  20886. 8009458: 2380 movs r3, #128 @ 0x80
  20887. 800945a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20888. 800945e: e168 b.n 8009732 <UART_SetConfig+0x5a6>
  20889. 8009460: 697b ldr r3, [r7, #20]
  20890. 8009462: 681b ldr r3, [r3, #0]
  20891. 8009464: 4a1b ldr r2, [pc, #108] @ (80094d4 <UART_SetConfig+0x348>)
  20892. 8009466: 4293 cmp r3, r2
  20893. 8009468: d142 bne.n 80094f0 <UART_SetConfig+0x364>
  20894. 800946a: 4b16 ldr r3, [pc, #88] @ (80094c4 <UART_SetConfig+0x338>)
  20895. 800946c: 6d5b ldr r3, [r3, #84] @ 0x54
  20896. 800946e: f003 0307 and.w r3, r3, #7
  20897. 8009472: 2b05 cmp r3, #5
  20898. 8009474: d838 bhi.n 80094e8 <UART_SetConfig+0x35c>
  20899. 8009476: a201 add r2, pc, #4 @ (adr r2, 800947c <UART_SetConfig+0x2f0>)
  20900. 8009478: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  20901. 800947c: 08009495 .word 0x08009495
  20902. 8009480: 0800949d .word 0x0800949d
  20903. 8009484: 080094a5 .word 0x080094a5
  20904. 8009488: 080094ad .word 0x080094ad
  20905. 800948c: 080094d9 .word 0x080094d9
  20906. 8009490: 080094e1 .word 0x080094e1
  20907. 8009494: 2300 movs r3, #0
  20908. 8009496: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20909. 800949a: e14a b.n 8009732 <UART_SetConfig+0x5a6>
  20910. 800949c: 2304 movs r3, #4
  20911. 800949e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20912. 80094a2: e146 b.n 8009732 <UART_SetConfig+0x5a6>
  20913. 80094a4: 2308 movs r3, #8
  20914. 80094a6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20915. 80094aa: e142 b.n 8009732 <UART_SetConfig+0x5a6>
  20916. 80094ac: 2310 movs r3, #16
  20917. 80094ae: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20918. 80094b2: e13e b.n 8009732 <UART_SetConfig+0x5a6>
  20919. 80094b4: cfff69f3 .word 0xcfff69f3
  20920. 80094b8: 58000c00 .word 0x58000c00
  20921. 80094bc: 11fff4ff .word 0x11fff4ff
  20922. 80094c0: 40011000 .word 0x40011000
  20923. 80094c4: 58024400 .word 0x58024400
  20924. 80094c8: 40004400 .word 0x40004400
  20925. 80094cc: 40004800 .word 0x40004800
  20926. 80094d0: 40004c00 .word 0x40004c00
  20927. 80094d4: 40005000 .word 0x40005000
  20928. 80094d8: 2320 movs r3, #32
  20929. 80094da: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20930. 80094de: e128 b.n 8009732 <UART_SetConfig+0x5a6>
  20931. 80094e0: 2340 movs r3, #64 @ 0x40
  20932. 80094e2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20933. 80094e6: e124 b.n 8009732 <UART_SetConfig+0x5a6>
  20934. 80094e8: 2380 movs r3, #128 @ 0x80
  20935. 80094ea: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20936. 80094ee: e120 b.n 8009732 <UART_SetConfig+0x5a6>
  20937. 80094f0: 697b ldr r3, [r7, #20]
  20938. 80094f2: 681b ldr r3, [r3, #0]
  20939. 80094f4: 4acb ldr r2, [pc, #812] @ (8009824 <UART_SetConfig+0x698>)
  20940. 80094f6: 4293 cmp r3, r2
  20941. 80094f8: d176 bne.n 80095e8 <UART_SetConfig+0x45c>
  20942. 80094fa: 4bcb ldr r3, [pc, #812] @ (8009828 <UART_SetConfig+0x69c>)
  20943. 80094fc: 6d5b ldr r3, [r3, #84] @ 0x54
  20944. 80094fe: f003 0338 and.w r3, r3, #56 @ 0x38
  20945. 8009502: 2b28 cmp r3, #40 @ 0x28
  20946. 8009504: d86c bhi.n 80095e0 <UART_SetConfig+0x454>
  20947. 8009506: a201 add r2, pc, #4 @ (adr r2, 800950c <UART_SetConfig+0x380>)
  20948. 8009508: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  20949. 800950c: 080095b1 .word 0x080095b1
  20950. 8009510: 080095e1 .word 0x080095e1
  20951. 8009514: 080095e1 .word 0x080095e1
  20952. 8009518: 080095e1 .word 0x080095e1
  20953. 800951c: 080095e1 .word 0x080095e1
  20954. 8009520: 080095e1 .word 0x080095e1
  20955. 8009524: 080095e1 .word 0x080095e1
  20956. 8009528: 080095e1 .word 0x080095e1
  20957. 800952c: 080095b9 .word 0x080095b9
  20958. 8009530: 080095e1 .word 0x080095e1
  20959. 8009534: 080095e1 .word 0x080095e1
  20960. 8009538: 080095e1 .word 0x080095e1
  20961. 800953c: 080095e1 .word 0x080095e1
  20962. 8009540: 080095e1 .word 0x080095e1
  20963. 8009544: 080095e1 .word 0x080095e1
  20964. 8009548: 080095e1 .word 0x080095e1
  20965. 800954c: 080095c1 .word 0x080095c1
  20966. 8009550: 080095e1 .word 0x080095e1
  20967. 8009554: 080095e1 .word 0x080095e1
  20968. 8009558: 080095e1 .word 0x080095e1
  20969. 800955c: 080095e1 .word 0x080095e1
  20970. 8009560: 080095e1 .word 0x080095e1
  20971. 8009564: 080095e1 .word 0x080095e1
  20972. 8009568: 080095e1 .word 0x080095e1
  20973. 800956c: 080095c9 .word 0x080095c9
  20974. 8009570: 080095e1 .word 0x080095e1
  20975. 8009574: 080095e1 .word 0x080095e1
  20976. 8009578: 080095e1 .word 0x080095e1
  20977. 800957c: 080095e1 .word 0x080095e1
  20978. 8009580: 080095e1 .word 0x080095e1
  20979. 8009584: 080095e1 .word 0x080095e1
  20980. 8009588: 080095e1 .word 0x080095e1
  20981. 800958c: 080095d1 .word 0x080095d1
  20982. 8009590: 080095e1 .word 0x080095e1
  20983. 8009594: 080095e1 .word 0x080095e1
  20984. 8009598: 080095e1 .word 0x080095e1
  20985. 800959c: 080095e1 .word 0x080095e1
  20986. 80095a0: 080095e1 .word 0x080095e1
  20987. 80095a4: 080095e1 .word 0x080095e1
  20988. 80095a8: 080095e1 .word 0x080095e1
  20989. 80095ac: 080095d9 .word 0x080095d9
  20990. 80095b0: 2301 movs r3, #1
  20991. 80095b2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20992. 80095b6: e0bc b.n 8009732 <UART_SetConfig+0x5a6>
  20993. 80095b8: 2304 movs r3, #4
  20994. 80095ba: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20995. 80095be: e0b8 b.n 8009732 <UART_SetConfig+0x5a6>
  20996. 80095c0: 2308 movs r3, #8
  20997. 80095c2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  20998. 80095c6: e0b4 b.n 8009732 <UART_SetConfig+0x5a6>
  20999. 80095c8: 2310 movs r3, #16
  21000. 80095ca: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21001. 80095ce: e0b0 b.n 8009732 <UART_SetConfig+0x5a6>
  21002. 80095d0: 2320 movs r3, #32
  21003. 80095d2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21004. 80095d6: e0ac b.n 8009732 <UART_SetConfig+0x5a6>
  21005. 80095d8: 2340 movs r3, #64 @ 0x40
  21006. 80095da: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21007. 80095de: e0a8 b.n 8009732 <UART_SetConfig+0x5a6>
  21008. 80095e0: 2380 movs r3, #128 @ 0x80
  21009. 80095e2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21010. 80095e6: e0a4 b.n 8009732 <UART_SetConfig+0x5a6>
  21011. 80095e8: 697b ldr r3, [r7, #20]
  21012. 80095ea: 681b ldr r3, [r3, #0]
  21013. 80095ec: 4a8f ldr r2, [pc, #572] @ (800982c <UART_SetConfig+0x6a0>)
  21014. 80095ee: 4293 cmp r3, r2
  21015. 80095f0: d130 bne.n 8009654 <UART_SetConfig+0x4c8>
  21016. 80095f2: 4b8d ldr r3, [pc, #564] @ (8009828 <UART_SetConfig+0x69c>)
  21017. 80095f4: 6d5b ldr r3, [r3, #84] @ 0x54
  21018. 80095f6: f003 0307 and.w r3, r3, #7
  21019. 80095fa: 2b05 cmp r3, #5
  21020. 80095fc: d826 bhi.n 800964c <UART_SetConfig+0x4c0>
  21021. 80095fe: a201 add r2, pc, #4 @ (adr r2, 8009604 <UART_SetConfig+0x478>)
  21022. 8009600: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  21023. 8009604: 0800961d .word 0x0800961d
  21024. 8009608: 08009625 .word 0x08009625
  21025. 800960c: 0800962d .word 0x0800962d
  21026. 8009610: 08009635 .word 0x08009635
  21027. 8009614: 0800963d .word 0x0800963d
  21028. 8009618: 08009645 .word 0x08009645
  21029. 800961c: 2300 movs r3, #0
  21030. 800961e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21031. 8009622: e086 b.n 8009732 <UART_SetConfig+0x5a6>
  21032. 8009624: 2304 movs r3, #4
  21033. 8009626: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21034. 800962a: e082 b.n 8009732 <UART_SetConfig+0x5a6>
  21035. 800962c: 2308 movs r3, #8
  21036. 800962e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21037. 8009632: e07e b.n 8009732 <UART_SetConfig+0x5a6>
  21038. 8009634: 2310 movs r3, #16
  21039. 8009636: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21040. 800963a: e07a b.n 8009732 <UART_SetConfig+0x5a6>
  21041. 800963c: 2320 movs r3, #32
  21042. 800963e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21043. 8009642: e076 b.n 8009732 <UART_SetConfig+0x5a6>
  21044. 8009644: 2340 movs r3, #64 @ 0x40
  21045. 8009646: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21046. 800964a: e072 b.n 8009732 <UART_SetConfig+0x5a6>
  21047. 800964c: 2380 movs r3, #128 @ 0x80
  21048. 800964e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21049. 8009652: e06e b.n 8009732 <UART_SetConfig+0x5a6>
  21050. 8009654: 697b ldr r3, [r7, #20]
  21051. 8009656: 681b ldr r3, [r3, #0]
  21052. 8009658: 4a75 ldr r2, [pc, #468] @ (8009830 <UART_SetConfig+0x6a4>)
  21053. 800965a: 4293 cmp r3, r2
  21054. 800965c: d130 bne.n 80096c0 <UART_SetConfig+0x534>
  21055. 800965e: 4b72 ldr r3, [pc, #456] @ (8009828 <UART_SetConfig+0x69c>)
  21056. 8009660: 6d5b ldr r3, [r3, #84] @ 0x54
  21057. 8009662: f003 0307 and.w r3, r3, #7
  21058. 8009666: 2b05 cmp r3, #5
  21059. 8009668: d826 bhi.n 80096b8 <UART_SetConfig+0x52c>
  21060. 800966a: a201 add r2, pc, #4 @ (adr r2, 8009670 <UART_SetConfig+0x4e4>)
  21061. 800966c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  21062. 8009670: 08009689 .word 0x08009689
  21063. 8009674: 08009691 .word 0x08009691
  21064. 8009678: 08009699 .word 0x08009699
  21065. 800967c: 080096a1 .word 0x080096a1
  21066. 8009680: 080096a9 .word 0x080096a9
  21067. 8009684: 080096b1 .word 0x080096b1
  21068. 8009688: 2300 movs r3, #0
  21069. 800968a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21070. 800968e: e050 b.n 8009732 <UART_SetConfig+0x5a6>
  21071. 8009690: 2304 movs r3, #4
  21072. 8009692: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21073. 8009696: e04c b.n 8009732 <UART_SetConfig+0x5a6>
  21074. 8009698: 2308 movs r3, #8
  21075. 800969a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21076. 800969e: e048 b.n 8009732 <UART_SetConfig+0x5a6>
  21077. 80096a0: 2310 movs r3, #16
  21078. 80096a2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21079. 80096a6: e044 b.n 8009732 <UART_SetConfig+0x5a6>
  21080. 80096a8: 2320 movs r3, #32
  21081. 80096aa: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21082. 80096ae: e040 b.n 8009732 <UART_SetConfig+0x5a6>
  21083. 80096b0: 2340 movs r3, #64 @ 0x40
  21084. 80096b2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21085. 80096b6: e03c b.n 8009732 <UART_SetConfig+0x5a6>
  21086. 80096b8: 2380 movs r3, #128 @ 0x80
  21087. 80096ba: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21088. 80096be: e038 b.n 8009732 <UART_SetConfig+0x5a6>
  21089. 80096c0: 697b ldr r3, [r7, #20]
  21090. 80096c2: 681b ldr r3, [r3, #0]
  21091. 80096c4: 4a5b ldr r2, [pc, #364] @ (8009834 <UART_SetConfig+0x6a8>)
  21092. 80096c6: 4293 cmp r3, r2
  21093. 80096c8: d130 bne.n 800972c <UART_SetConfig+0x5a0>
  21094. 80096ca: 4b57 ldr r3, [pc, #348] @ (8009828 <UART_SetConfig+0x69c>)
  21095. 80096cc: 6d9b ldr r3, [r3, #88] @ 0x58
  21096. 80096ce: f003 0307 and.w r3, r3, #7
  21097. 80096d2: 2b05 cmp r3, #5
  21098. 80096d4: d826 bhi.n 8009724 <UART_SetConfig+0x598>
  21099. 80096d6: a201 add r2, pc, #4 @ (adr r2, 80096dc <UART_SetConfig+0x550>)
  21100. 80096d8: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  21101. 80096dc: 080096f5 .word 0x080096f5
  21102. 80096e0: 080096fd .word 0x080096fd
  21103. 80096e4: 08009705 .word 0x08009705
  21104. 80096e8: 0800970d .word 0x0800970d
  21105. 80096ec: 08009715 .word 0x08009715
  21106. 80096f0: 0800971d .word 0x0800971d
  21107. 80096f4: 2302 movs r3, #2
  21108. 80096f6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21109. 80096fa: e01a b.n 8009732 <UART_SetConfig+0x5a6>
  21110. 80096fc: 2304 movs r3, #4
  21111. 80096fe: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21112. 8009702: e016 b.n 8009732 <UART_SetConfig+0x5a6>
  21113. 8009704: 2308 movs r3, #8
  21114. 8009706: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21115. 800970a: e012 b.n 8009732 <UART_SetConfig+0x5a6>
  21116. 800970c: 2310 movs r3, #16
  21117. 800970e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21118. 8009712: e00e b.n 8009732 <UART_SetConfig+0x5a6>
  21119. 8009714: 2320 movs r3, #32
  21120. 8009716: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21121. 800971a: e00a b.n 8009732 <UART_SetConfig+0x5a6>
  21122. 800971c: 2340 movs r3, #64 @ 0x40
  21123. 800971e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21124. 8009722: e006 b.n 8009732 <UART_SetConfig+0x5a6>
  21125. 8009724: 2380 movs r3, #128 @ 0x80
  21126. 8009726: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21127. 800972a: e002 b.n 8009732 <UART_SetConfig+0x5a6>
  21128. 800972c: 2380 movs r3, #128 @ 0x80
  21129. 800972e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  21130. /* Check LPUART instance */
  21131. if (UART_INSTANCE_LOWPOWER(huart))
  21132. 8009732: 697b ldr r3, [r7, #20]
  21133. 8009734: 681b ldr r3, [r3, #0]
  21134. 8009736: 4a3f ldr r2, [pc, #252] @ (8009834 <UART_SetConfig+0x6a8>)
  21135. 8009738: 4293 cmp r3, r2
  21136. 800973a: f040 80f8 bne.w 800992e <UART_SetConfig+0x7a2>
  21137. {
  21138. /* Retrieve frequency clock */
  21139. switch (clocksource)
  21140. 800973e: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  21141. 8009742: 2b20 cmp r3, #32
  21142. 8009744: dc46 bgt.n 80097d4 <UART_SetConfig+0x648>
  21143. 8009746: 2b02 cmp r3, #2
  21144. 8009748: f2c0 8082 blt.w 8009850 <UART_SetConfig+0x6c4>
  21145. 800974c: 3b02 subs r3, #2
  21146. 800974e: 2b1e cmp r3, #30
  21147. 8009750: d87e bhi.n 8009850 <UART_SetConfig+0x6c4>
  21148. 8009752: a201 add r2, pc, #4 @ (adr r2, 8009758 <UART_SetConfig+0x5cc>)
  21149. 8009754: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  21150. 8009758: 080097db .word 0x080097db
  21151. 800975c: 08009851 .word 0x08009851
  21152. 8009760: 080097e3 .word 0x080097e3
  21153. 8009764: 08009851 .word 0x08009851
  21154. 8009768: 08009851 .word 0x08009851
  21155. 800976c: 08009851 .word 0x08009851
  21156. 8009770: 080097f3 .word 0x080097f3
  21157. 8009774: 08009851 .word 0x08009851
  21158. 8009778: 08009851 .word 0x08009851
  21159. 800977c: 08009851 .word 0x08009851
  21160. 8009780: 08009851 .word 0x08009851
  21161. 8009784: 08009851 .word 0x08009851
  21162. 8009788: 08009851 .word 0x08009851
  21163. 800978c: 08009851 .word 0x08009851
  21164. 8009790: 08009803 .word 0x08009803
  21165. 8009794: 08009851 .word 0x08009851
  21166. 8009798: 08009851 .word 0x08009851
  21167. 800979c: 08009851 .word 0x08009851
  21168. 80097a0: 08009851 .word 0x08009851
  21169. 80097a4: 08009851 .word 0x08009851
  21170. 80097a8: 08009851 .word 0x08009851
  21171. 80097ac: 08009851 .word 0x08009851
  21172. 80097b0: 08009851 .word 0x08009851
  21173. 80097b4: 08009851 .word 0x08009851
  21174. 80097b8: 08009851 .word 0x08009851
  21175. 80097bc: 08009851 .word 0x08009851
  21176. 80097c0: 08009851 .word 0x08009851
  21177. 80097c4: 08009851 .word 0x08009851
  21178. 80097c8: 08009851 .word 0x08009851
  21179. 80097cc: 08009851 .word 0x08009851
  21180. 80097d0: 08009843 .word 0x08009843
  21181. 80097d4: 2b40 cmp r3, #64 @ 0x40
  21182. 80097d6: d037 beq.n 8009848 <UART_SetConfig+0x6bc>
  21183. 80097d8: e03a b.n 8009850 <UART_SetConfig+0x6c4>
  21184. {
  21185. case UART_CLOCKSOURCE_D3PCLK1:
  21186. pclk = HAL_RCCEx_GetD3PCLK1Freq();
  21187. 80097da: f7fe f8dd bl 8007998 <HAL_RCCEx_GetD3PCLK1Freq>
  21188. 80097de: 63f8 str r0, [r7, #60] @ 0x3c
  21189. break;
  21190. 80097e0: e03c b.n 800985c <UART_SetConfig+0x6d0>
  21191. case UART_CLOCKSOURCE_PLL2:
  21192. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  21193. 80097e2: f107 0324 add.w r3, r7, #36 @ 0x24
  21194. 80097e6: 4618 mov r0, r3
  21195. 80097e8: f7fe f8ec bl 80079c4 <HAL_RCCEx_GetPLL2ClockFreq>
  21196. pclk = pll2_clocks.PLL2_Q_Frequency;
  21197. 80097ec: 6abb ldr r3, [r7, #40] @ 0x28
  21198. 80097ee: 63fb str r3, [r7, #60] @ 0x3c
  21199. break;
  21200. 80097f0: e034 b.n 800985c <UART_SetConfig+0x6d0>
  21201. case UART_CLOCKSOURCE_PLL3:
  21202. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  21203. 80097f2: f107 0318 add.w r3, r7, #24
  21204. 80097f6: 4618 mov r0, r3
  21205. 80097f8: f7fe fa38 bl 8007c6c <HAL_RCCEx_GetPLL3ClockFreq>
  21206. pclk = pll3_clocks.PLL3_Q_Frequency;
  21207. 80097fc: 69fb ldr r3, [r7, #28]
  21208. 80097fe: 63fb str r3, [r7, #60] @ 0x3c
  21209. break;
  21210. 8009800: e02c b.n 800985c <UART_SetConfig+0x6d0>
  21211. case UART_CLOCKSOURCE_HSI:
  21212. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  21213. 8009802: 4b09 ldr r3, [pc, #36] @ (8009828 <UART_SetConfig+0x69c>)
  21214. 8009804: 681b ldr r3, [r3, #0]
  21215. 8009806: f003 0320 and.w r3, r3, #32
  21216. 800980a: 2b00 cmp r3, #0
  21217. 800980c: d016 beq.n 800983c <UART_SetConfig+0x6b0>
  21218. {
  21219. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  21220. 800980e: 4b06 ldr r3, [pc, #24] @ (8009828 <UART_SetConfig+0x69c>)
  21221. 8009810: 681b ldr r3, [r3, #0]
  21222. 8009812: 08db lsrs r3, r3, #3
  21223. 8009814: f003 0303 and.w r3, r3, #3
  21224. 8009818: 4a07 ldr r2, [pc, #28] @ (8009838 <UART_SetConfig+0x6ac>)
  21225. 800981a: fa22 f303 lsr.w r3, r2, r3
  21226. 800981e: 63fb str r3, [r7, #60] @ 0x3c
  21227. }
  21228. else
  21229. {
  21230. pclk = (uint32_t) HSI_VALUE;
  21231. }
  21232. break;
  21233. 8009820: e01c b.n 800985c <UART_SetConfig+0x6d0>
  21234. 8009822: bf00 nop
  21235. 8009824: 40011400 .word 0x40011400
  21236. 8009828: 58024400 .word 0x58024400
  21237. 800982c: 40007800 .word 0x40007800
  21238. 8009830: 40007c00 .word 0x40007c00
  21239. 8009834: 58000c00 .word 0x58000c00
  21240. 8009838: 03d09000 .word 0x03d09000
  21241. pclk = (uint32_t) HSI_VALUE;
  21242. 800983c: 4b9d ldr r3, [pc, #628] @ (8009ab4 <UART_SetConfig+0x928>)
  21243. 800983e: 63fb str r3, [r7, #60] @ 0x3c
  21244. break;
  21245. 8009840: e00c b.n 800985c <UART_SetConfig+0x6d0>
  21246. case UART_CLOCKSOURCE_CSI:
  21247. pclk = (uint32_t) CSI_VALUE;
  21248. 8009842: 4b9d ldr r3, [pc, #628] @ (8009ab8 <UART_SetConfig+0x92c>)
  21249. 8009844: 63fb str r3, [r7, #60] @ 0x3c
  21250. break;
  21251. 8009846: e009 b.n 800985c <UART_SetConfig+0x6d0>
  21252. case UART_CLOCKSOURCE_LSE:
  21253. pclk = (uint32_t) LSE_VALUE;
  21254. 8009848: f44f 4300 mov.w r3, #32768 @ 0x8000
  21255. 800984c: 63fb str r3, [r7, #60] @ 0x3c
  21256. break;
  21257. 800984e: e005 b.n 800985c <UART_SetConfig+0x6d0>
  21258. default:
  21259. pclk = 0U;
  21260. 8009850: 2300 movs r3, #0
  21261. 8009852: 63fb str r3, [r7, #60] @ 0x3c
  21262. ret = HAL_ERROR;
  21263. 8009854: 2301 movs r3, #1
  21264. 8009856: f887 3042 strb.w r3, [r7, #66] @ 0x42
  21265. break;
  21266. 800985a: bf00 nop
  21267. }
  21268. /* If proper clock source reported */
  21269. if (pclk != 0U)
  21270. 800985c: 6bfb ldr r3, [r7, #60] @ 0x3c
  21271. 800985e: 2b00 cmp r3, #0
  21272. 8009860: f000 81de beq.w 8009c20 <UART_SetConfig+0xa94>
  21273. {
  21274. /* Compute clock after Prescaler */
  21275. lpuart_ker_ck_pres = (pclk / UARTPrescTable[huart->Init.ClockPrescaler]);
  21276. 8009864: 697b ldr r3, [r7, #20]
  21277. 8009866: 6a5b ldr r3, [r3, #36] @ 0x24
  21278. 8009868: 4a94 ldr r2, [pc, #592] @ (8009abc <UART_SetConfig+0x930>)
  21279. 800986a: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  21280. 800986e: 461a mov r2, r3
  21281. 8009870: 6bfb ldr r3, [r7, #60] @ 0x3c
  21282. 8009872: fbb3 f3f2 udiv r3, r3, r2
  21283. 8009876: 633b str r3, [r7, #48] @ 0x30
  21284. /* Ensure that Frequency clock is in the range [3 * baudrate, 4096 * baudrate] */
  21285. if ((lpuart_ker_ck_pres < (3U * huart->Init.BaudRate)) ||
  21286. 8009878: 697b ldr r3, [r7, #20]
  21287. 800987a: 685a ldr r2, [r3, #4]
  21288. 800987c: 4613 mov r3, r2
  21289. 800987e: 005b lsls r3, r3, #1
  21290. 8009880: 4413 add r3, r2
  21291. 8009882: 6b3a ldr r2, [r7, #48] @ 0x30
  21292. 8009884: 429a cmp r2, r3
  21293. 8009886: d305 bcc.n 8009894 <UART_SetConfig+0x708>
  21294. (lpuart_ker_ck_pres > (4096U * huart->Init.BaudRate)))
  21295. 8009888: 697b ldr r3, [r7, #20]
  21296. 800988a: 685b ldr r3, [r3, #4]
  21297. 800988c: 031b lsls r3, r3, #12
  21298. if ((lpuart_ker_ck_pres < (3U * huart->Init.BaudRate)) ||
  21299. 800988e: 6b3a ldr r2, [r7, #48] @ 0x30
  21300. 8009890: 429a cmp r2, r3
  21301. 8009892: d903 bls.n 800989c <UART_SetConfig+0x710>
  21302. {
  21303. ret = HAL_ERROR;
  21304. 8009894: 2301 movs r3, #1
  21305. 8009896: f887 3042 strb.w r3, [r7, #66] @ 0x42
  21306. 800989a: e1c1 b.n 8009c20 <UART_SetConfig+0xa94>
  21307. }
  21308. else
  21309. {
  21310. /* Check computed UsartDiv value is in allocated range
  21311. (it is forbidden to write values lower than 0x300 in the LPUART_BRR register) */
  21312. usartdiv = (uint32_t)(UART_DIV_LPUART(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  21313. 800989c: 6bfb ldr r3, [r7, #60] @ 0x3c
  21314. 800989e: 2200 movs r2, #0
  21315. 80098a0: 60bb str r3, [r7, #8]
  21316. 80098a2: 60fa str r2, [r7, #12]
  21317. 80098a4: 697b ldr r3, [r7, #20]
  21318. 80098a6: 6a5b ldr r3, [r3, #36] @ 0x24
  21319. 80098a8: 4a84 ldr r2, [pc, #528] @ (8009abc <UART_SetConfig+0x930>)
  21320. 80098aa: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  21321. 80098ae: b29b uxth r3, r3
  21322. 80098b0: 2200 movs r2, #0
  21323. 80098b2: 603b str r3, [r7, #0]
  21324. 80098b4: 607a str r2, [r7, #4]
  21325. 80098b6: e9d7 2300 ldrd r2, r3, [r7]
  21326. 80098ba: e9d7 0102 ldrd r0, r1, [r7, #8]
  21327. 80098be: f7f6 fd5f bl 8000380 <__aeabi_uldivmod>
  21328. 80098c2: 4602 mov r2, r0
  21329. 80098c4: 460b mov r3, r1
  21330. 80098c6: 4610 mov r0, r2
  21331. 80098c8: 4619 mov r1, r3
  21332. 80098ca: f04f 0200 mov.w r2, #0
  21333. 80098ce: f04f 0300 mov.w r3, #0
  21334. 80098d2: 020b lsls r3, r1, #8
  21335. 80098d4: ea43 6310 orr.w r3, r3, r0, lsr #24
  21336. 80098d8: 0202 lsls r2, r0, #8
  21337. 80098da: 6979 ldr r1, [r7, #20]
  21338. 80098dc: 6849 ldr r1, [r1, #4]
  21339. 80098de: 0849 lsrs r1, r1, #1
  21340. 80098e0: 2000 movs r0, #0
  21341. 80098e2: 460c mov r4, r1
  21342. 80098e4: 4605 mov r5, r0
  21343. 80098e6: eb12 0804 adds.w r8, r2, r4
  21344. 80098ea: eb43 0905 adc.w r9, r3, r5
  21345. 80098ee: 697b ldr r3, [r7, #20]
  21346. 80098f0: 685b ldr r3, [r3, #4]
  21347. 80098f2: 2200 movs r2, #0
  21348. 80098f4: 469a mov sl, r3
  21349. 80098f6: 4693 mov fp, r2
  21350. 80098f8: 4652 mov r2, sl
  21351. 80098fa: 465b mov r3, fp
  21352. 80098fc: 4640 mov r0, r8
  21353. 80098fe: 4649 mov r1, r9
  21354. 8009900: f7f6 fd3e bl 8000380 <__aeabi_uldivmod>
  21355. 8009904: 4602 mov r2, r0
  21356. 8009906: 460b mov r3, r1
  21357. 8009908: 4613 mov r3, r2
  21358. 800990a: 63bb str r3, [r7, #56] @ 0x38
  21359. if ((usartdiv >= LPUART_BRR_MIN) && (usartdiv <= LPUART_BRR_MAX))
  21360. 800990c: 6bbb ldr r3, [r7, #56] @ 0x38
  21361. 800990e: f5b3 7f40 cmp.w r3, #768 @ 0x300
  21362. 8009912: d308 bcc.n 8009926 <UART_SetConfig+0x79a>
  21363. 8009914: 6bbb ldr r3, [r7, #56] @ 0x38
  21364. 8009916: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  21365. 800991a: d204 bcs.n 8009926 <UART_SetConfig+0x79a>
  21366. {
  21367. huart->Instance->BRR = usartdiv;
  21368. 800991c: 697b ldr r3, [r7, #20]
  21369. 800991e: 681b ldr r3, [r3, #0]
  21370. 8009920: 6bba ldr r2, [r7, #56] @ 0x38
  21371. 8009922: 60da str r2, [r3, #12]
  21372. 8009924: e17c b.n 8009c20 <UART_SetConfig+0xa94>
  21373. }
  21374. else
  21375. {
  21376. ret = HAL_ERROR;
  21377. 8009926: 2301 movs r3, #1
  21378. 8009928: f887 3042 strb.w r3, [r7, #66] @ 0x42
  21379. 800992c: e178 b.n 8009c20 <UART_SetConfig+0xa94>
  21380. } /* if ( (lpuart_ker_ck_pres < (3 * huart->Init.BaudRate) ) ||
  21381. (lpuart_ker_ck_pres > (4096 * huart->Init.BaudRate) )) */
  21382. } /* if (pclk != 0) */
  21383. }
  21384. /* Check UART Over Sampling to set Baud Rate Register */
  21385. else if (huart->Init.OverSampling == UART_OVERSAMPLING_8)
  21386. 800992e: 697b ldr r3, [r7, #20]
  21387. 8009930: 69db ldr r3, [r3, #28]
  21388. 8009932: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  21389. 8009936: f040 80c5 bne.w 8009ac4 <UART_SetConfig+0x938>
  21390. {
  21391. switch (clocksource)
  21392. 800993a: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  21393. 800993e: 2b20 cmp r3, #32
  21394. 8009940: dc48 bgt.n 80099d4 <UART_SetConfig+0x848>
  21395. 8009942: 2b00 cmp r3, #0
  21396. 8009944: db7b blt.n 8009a3e <UART_SetConfig+0x8b2>
  21397. 8009946: 2b20 cmp r3, #32
  21398. 8009948: d879 bhi.n 8009a3e <UART_SetConfig+0x8b2>
  21399. 800994a: a201 add r2, pc, #4 @ (adr r2, 8009950 <UART_SetConfig+0x7c4>)
  21400. 800994c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  21401. 8009950: 080099db .word 0x080099db
  21402. 8009954: 080099e3 .word 0x080099e3
  21403. 8009958: 08009a3f .word 0x08009a3f
  21404. 800995c: 08009a3f .word 0x08009a3f
  21405. 8009960: 080099eb .word 0x080099eb
  21406. 8009964: 08009a3f .word 0x08009a3f
  21407. 8009968: 08009a3f .word 0x08009a3f
  21408. 800996c: 08009a3f .word 0x08009a3f
  21409. 8009970: 080099fb .word 0x080099fb
  21410. 8009974: 08009a3f .word 0x08009a3f
  21411. 8009978: 08009a3f .word 0x08009a3f
  21412. 800997c: 08009a3f .word 0x08009a3f
  21413. 8009980: 08009a3f .word 0x08009a3f
  21414. 8009984: 08009a3f .word 0x08009a3f
  21415. 8009988: 08009a3f .word 0x08009a3f
  21416. 800998c: 08009a3f .word 0x08009a3f
  21417. 8009990: 08009a0b .word 0x08009a0b
  21418. 8009994: 08009a3f .word 0x08009a3f
  21419. 8009998: 08009a3f .word 0x08009a3f
  21420. 800999c: 08009a3f .word 0x08009a3f
  21421. 80099a0: 08009a3f .word 0x08009a3f
  21422. 80099a4: 08009a3f .word 0x08009a3f
  21423. 80099a8: 08009a3f .word 0x08009a3f
  21424. 80099ac: 08009a3f .word 0x08009a3f
  21425. 80099b0: 08009a3f .word 0x08009a3f
  21426. 80099b4: 08009a3f .word 0x08009a3f
  21427. 80099b8: 08009a3f .word 0x08009a3f
  21428. 80099bc: 08009a3f .word 0x08009a3f
  21429. 80099c0: 08009a3f .word 0x08009a3f
  21430. 80099c4: 08009a3f .word 0x08009a3f
  21431. 80099c8: 08009a3f .word 0x08009a3f
  21432. 80099cc: 08009a3f .word 0x08009a3f
  21433. 80099d0: 08009a31 .word 0x08009a31
  21434. 80099d4: 2b40 cmp r3, #64 @ 0x40
  21435. 80099d6: d02e beq.n 8009a36 <UART_SetConfig+0x8aa>
  21436. 80099d8: e031 b.n 8009a3e <UART_SetConfig+0x8b2>
  21437. {
  21438. case UART_CLOCKSOURCE_D2PCLK1:
  21439. pclk = HAL_RCC_GetPCLK1Freq();
  21440. 80099da: f7fc fd81 bl 80064e0 <HAL_RCC_GetPCLK1Freq>
  21441. 80099de: 63f8 str r0, [r7, #60] @ 0x3c
  21442. break;
  21443. 80099e0: e033 b.n 8009a4a <UART_SetConfig+0x8be>
  21444. case UART_CLOCKSOURCE_D2PCLK2:
  21445. pclk = HAL_RCC_GetPCLK2Freq();
  21446. 80099e2: f7fc fd93 bl 800650c <HAL_RCC_GetPCLK2Freq>
  21447. 80099e6: 63f8 str r0, [r7, #60] @ 0x3c
  21448. break;
  21449. 80099e8: e02f b.n 8009a4a <UART_SetConfig+0x8be>
  21450. case UART_CLOCKSOURCE_PLL2:
  21451. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  21452. 80099ea: f107 0324 add.w r3, r7, #36 @ 0x24
  21453. 80099ee: 4618 mov r0, r3
  21454. 80099f0: f7fd ffe8 bl 80079c4 <HAL_RCCEx_GetPLL2ClockFreq>
  21455. pclk = pll2_clocks.PLL2_Q_Frequency;
  21456. 80099f4: 6abb ldr r3, [r7, #40] @ 0x28
  21457. 80099f6: 63fb str r3, [r7, #60] @ 0x3c
  21458. break;
  21459. 80099f8: e027 b.n 8009a4a <UART_SetConfig+0x8be>
  21460. case UART_CLOCKSOURCE_PLL3:
  21461. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  21462. 80099fa: f107 0318 add.w r3, r7, #24
  21463. 80099fe: 4618 mov r0, r3
  21464. 8009a00: f7fe f934 bl 8007c6c <HAL_RCCEx_GetPLL3ClockFreq>
  21465. pclk = pll3_clocks.PLL3_Q_Frequency;
  21466. 8009a04: 69fb ldr r3, [r7, #28]
  21467. 8009a06: 63fb str r3, [r7, #60] @ 0x3c
  21468. break;
  21469. 8009a08: e01f b.n 8009a4a <UART_SetConfig+0x8be>
  21470. case UART_CLOCKSOURCE_HSI:
  21471. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  21472. 8009a0a: 4b2d ldr r3, [pc, #180] @ (8009ac0 <UART_SetConfig+0x934>)
  21473. 8009a0c: 681b ldr r3, [r3, #0]
  21474. 8009a0e: f003 0320 and.w r3, r3, #32
  21475. 8009a12: 2b00 cmp r3, #0
  21476. 8009a14: d009 beq.n 8009a2a <UART_SetConfig+0x89e>
  21477. {
  21478. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  21479. 8009a16: 4b2a ldr r3, [pc, #168] @ (8009ac0 <UART_SetConfig+0x934>)
  21480. 8009a18: 681b ldr r3, [r3, #0]
  21481. 8009a1a: 08db lsrs r3, r3, #3
  21482. 8009a1c: f003 0303 and.w r3, r3, #3
  21483. 8009a20: 4a24 ldr r2, [pc, #144] @ (8009ab4 <UART_SetConfig+0x928>)
  21484. 8009a22: fa22 f303 lsr.w r3, r2, r3
  21485. 8009a26: 63fb str r3, [r7, #60] @ 0x3c
  21486. }
  21487. else
  21488. {
  21489. pclk = (uint32_t) HSI_VALUE;
  21490. }
  21491. break;
  21492. 8009a28: e00f b.n 8009a4a <UART_SetConfig+0x8be>
  21493. pclk = (uint32_t) HSI_VALUE;
  21494. 8009a2a: 4b22 ldr r3, [pc, #136] @ (8009ab4 <UART_SetConfig+0x928>)
  21495. 8009a2c: 63fb str r3, [r7, #60] @ 0x3c
  21496. break;
  21497. 8009a2e: e00c b.n 8009a4a <UART_SetConfig+0x8be>
  21498. case UART_CLOCKSOURCE_CSI:
  21499. pclk = (uint32_t) CSI_VALUE;
  21500. 8009a30: 4b21 ldr r3, [pc, #132] @ (8009ab8 <UART_SetConfig+0x92c>)
  21501. 8009a32: 63fb str r3, [r7, #60] @ 0x3c
  21502. break;
  21503. 8009a34: e009 b.n 8009a4a <UART_SetConfig+0x8be>
  21504. case UART_CLOCKSOURCE_LSE:
  21505. pclk = (uint32_t) LSE_VALUE;
  21506. 8009a36: f44f 4300 mov.w r3, #32768 @ 0x8000
  21507. 8009a3a: 63fb str r3, [r7, #60] @ 0x3c
  21508. break;
  21509. 8009a3c: e005 b.n 8009a4a <UART_SetConfig+0x8be>
  21510. default:
  21511. pclk = 0U;
  21512. 8009a3e: 2300 movs r3, #0
  21513. 8009a40: 63fb str r3, [r7, #60] @ 0x3c
  21514. ret = HAL_ERROR;
  21515. 8009a42: 2301 movs r3, #1
  21516. 8009a44: f887 3042 strb.w r3, [r7, #66] @ 0x42
  21517. break;
  21518. 8009a48: bf00 nop
  21519. }
  21520. /* USARTDIV must be greater than or equal to 0d16 */
  21521. if (pclk != 0U)
  21522. 8009a4a: 6bfb ldr r3, [r7, #60] @ 0x3c
  21523. 8009a4c: 2b00 cmp r3, #0
  21524. 8009a4e: f000 80e7 beq.w 8009c20 <UART_SetConfig+0xa94>
  21525. {
  21526. usartdiv = (uint32_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  21527. 8009a52: 697b ldr r3, [r7, #20]
  21528. 8009a54: 6a5b ldr r3, [r3, #36] @ 0x24
  21529. 8009a56: 4a19 ldr r2, [pc, #100] @ (8009abc <UART_SetConfig+0x930>)
  21530. 8009a58: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  21531. 8009a5c: 461a mov r2, r3
  21532. 8009a5e: 6bfb ldr r3, [r7, #60] @ 0x3c
  21533. 8009a60: fbb3 f3f2 udiv r3, r3, r2
  21534. 8009a64: 005a lsls r2, r3, #1
  21535. 8009a66: 697b ldr r3, [r7, #20]
  21536. 8009a68: 685b ldr r3, [r3, #4]
  21537. 8009a6a: 085b lsrs r3, r3, #1
  21538. 8009a6c: 441a add r2, r3
  21539. 8009a6e: 697b ldr r3, [r7, #20]
  21540. 8009a70: 685b ldr r3, [r3, #4]
  21541. 8009a72: fbb2 f3f3 udiv r3, r2, r3
  21542. 8009a76: 63bb str r3, [r7, #56] @ 0x38
  21543. if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX))
  21544. 8009a78: 6bbb ldr r3, [r7, #56] @ 0x38
  21545. 8009a7a: 2b0f cmp r3, #15
  21546. 8009a7c: d916 bls.n 8009aac <UART_SetConfig+0x920>
  21547. 8009a7e: 6bbb ldr r3, [r7, #56] @ 0x38
  21548. 8009a80: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  21549. 8009a84: d212 bcs.n 8009aac <UART_SetConfig+0x920>
  21550. {
  21551. brrtemp = (uint16_t)(usartdiv & 0xFFF0U);
  21552. 8009a86: 6bbb ldr r3, [r7, #56] @ 0x38
  21553. 8009a88: b29b uxth r3, r3
  21554. 8009a8a: f023 030f bic.w r3, r3, #15
  21555. 8009a8e: 86fb strh r3, [r7, #54] @ 0x36
  21556. brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000FU) >> 1U);
  21557. 8009a90: 6bbb ldr r3, [r7, #56] @ 0x38
  21558. 8009a92: 085b lsrs r3, r3, #1
  21559. 8009a94: b29b uxth r3, r3
  21560. 8009a96: f003 0307 and.w r3, r3, #7
  21561. 8009a9a: b29a uxth r2, r3
  21562. 8009a9c: 8efb ldrh r3, [r7, #54] @ 0x36
  21563. 8009a9e: 4313 orrs r3, r2
  21564. 8009aa0: 86fb strh r3, [r7, #54] @ 0x36
  21565. huart->Instance->BRR = brrtemp;
  21566. 8009aa2: 697b ldr r3, [r7, #20]
  21567. 8009aa4: 681b ldr r3, [r3, #0]
  21568. 8009aa6: 8efa ldrh r2, [r7, #54] @ 0x36
  21569. 8009aa8: 60da str r2, [r3, #12]
  21570. 8009aaa: e0b9 b.n 8009c20 <UART_SetConfig+0xa94>
  21571. }
  21572. else
  21573. {
  21574. ret = HAL_ERROR;
  21575. 8009aac: 2301 movs r3, #1
  21576. 8009aae: f887 3042 strb.w r3, [r7, #66] @ 0x42
  21577. 8009ab2: e0b5 b.n 8009c20 <UART_SetConfig+0xa94>
  21578. 8009ab4: 03d09000 .word 0x03d09000
  21579. 8009ab8: 003d0900 .word 0x003d0900
  21580. 8009abc: 080100c8 .word 0x080100c8
  21581. 8009ac0: 58024400 .word 0x58024400
  21582. }
  21583. }
  21584. }
  21585. else
  21586. {
  21587. switch (clocksource)
  21588. 8009ac4: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  21589. 8009ac8: 2b20 cmp r3, #32
  21590. 8009aca: dc49 bgt.n 8009b60 <UART_SetConfig+0x9d4>
  21591. 8009acc: 2b00 cmp r3, #0
  21592. 8009ace: db7c blt.n 8009bca <UART_SetConfig+0xa3e>
  21593. 8009ad0: 2b20 cmp r3, #32
  21594. 8009ad2: d87a bhi.n 8009bca <UART_SetConfig+0xa3e>
  21595. 8009ad4: a201 add r2, pc, #4 @ (adr r2, 8009adc <UART_SetConfig+0x950>)
  21596. 8009ad6: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  21597. 8009ada: bf00 nop
  21598. 8009adc: 08009b67 .word 0x08009b67
  21599. 8009ae0: 08009b6f .word 0x08009b6f
  21600. 8009ae4: 08009bcb .word 0x08009bcb
  21601. 8009ae8: 08009bcb .word 0x08009bcb
  21602. 8009aec: 08009b77 .word 0x08009b77
  21603. 8009af0: 08009bcb .word 0x08009bcb
  21604. 8009af4: 08009bcb .word 0x08009bcb
  21605. 8009af8: 08009bcb .word 0x08009bcb
  21606. 8009afc: 08009b87 .word 0x08009b87
  21607. 8009b00: 08009bcb .word 0x08009bcb
  21608. 8009b04: 08009bcb .word 0x08009bcb
  21609. 8009b08: 08009bcb .word 0x08009bcb
  21610. 8009b0c: 08009bcb .word 0x08009bcb
  21611. 8009b10: 08009bcb .word 0x08009bcb
  21612. 8009b14: 08009bcb .word 0x08009bcb
  21613. 8009b18: 08009bcb .word 0x08009bcb
  21614. 8009b1c: 08009b97 .word 0x08009b97
  21615. 8009b20: 08009bcb .word 0x08009bcb
  21616. 8009b24: 08009bcb .word 0x08009bcb
  21617. 8009b28: 08009bcb .word 0x08009bcb
  21618. 8009b2c: 08009bcb .word 0x08009bcb
  21619. 8009b30: 08009bcb .word 0x08009bcb
  21620. 8009b34: 08009bcb .word 0x08009bcb
  21621. 8009b38: 08009bcb .word 0x08009bcb
  21622. 8009b3c: 08009bcb .word 0x08009bcb
  21623. 8009b40: 08009bcb .word 0x08009bcb
  21624. 8009b44: 08009bcb .word 0x08009bcb
  21625. 8009b48: 08009bcb .word 0x08009bcb
  21626. 8009b4c: 08009bcb .word 0x08009bcb
  21627. 8009b50: 08009bcb .word 0x08009bcb
  21628. 8009b54: 08009bcb .word 0x08009bcb
  21629. 8009b58: 08009bcb .word 0x08009bcb
  21630. 8009b5c: 08009bbd .word 0x08009bbd
  21631. 8009b60: 2b40 cmp r3, #64 @ 0x40
  21632. 8009b62: d02e beq.n 8009bc2 <UART_SetConfig+0xa36>
  21633. 8009b64: e031 b.n 8009bca <UART_SetConfig+0xa3e>
  21634. {
  21635. case UART_CLOCKSOURCE_D2PCLK1:
  21636. pclk = HAL_RCC_GetPCLK1Freq();
  21637. 8009b66: f7fc fcbb bl 80064e0 <HAL_RCC_GetPCLK1Freq>
  21638. 8009b6a: 63f8 str r0, [r7, #60] @ 0x3c
  21639. break;
  21640. 8009b6c: e033 b.n 8009bd6 <UART_SetConfig+0xa4a>
  21641. case UART_CLOCKSOURCE_D2PCLK2:
  21642. pclk = HAL_RCC_GetPCLK2Freq();
  21643. 8009b6e: f7fc fccd bl 800650c <HAL_RCC_GetPCLK2Freq>
  21644. 8009b72: 63f8 str r0, [r7, #60] @ 0x3c
  21645. break;
  21646. 8009b74: e02f b.n 8009bd6 <UART_SetConfig+0xa4a>
  21647. case UART_CLOCKSOURCE_PLL2:
  21648. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  21649. 8009b76: f107 0324 add.w r3, r7, #36 @ 0x24
  21650. 8009b7a: 4618 mov r0, r3
  21651. 8009b7c: f7fd ff22 bl 80079c4 <HAL_RCCEx_GetPLL2ClockFreq>
  21652. pclk = pll2_clocks.PLL2_Q_Frequency;
  21653. 8009b80: 6abb ldr r3, [r7, #40] @ 0x28
  21654. 8009b82: 63fb str r3, [r7, #60] @ 0x3c
  21655. break;
  21656. 8009b84: e027 b.n 8009bd6 <UART_SetConfig+0xa4a>
  21657. case UART_CLOCKSOURCE_PLL3:
  21658. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  21659. 8009b86: f107 0318 add.w r3, r7, #24
  21660. 8009b8a: 4618 mov r0, r3
  21661. 8009b8c: f7fe f86e bl 8007c6c <HAL_RCCEx_GetPLL3ClockFreq>
  21662. pclk = pll3_clocks.PLL3_Q_Frequency;
  21663. 8009b90: 69fb ldr r3, [r7, #28]
  21664. 8009b92: 63fb str r3, [r7, #60] @ 0x3c
  21665. break;
  21666. 8009b94: e01f b.n 8009bd6 <UART_SetConfig+0xa4a>
  21667. case UART_CLOCKSOURCE_HSI:
  21668. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  21669. 8009b96: 4b2d ldr r3, [pc, #180] @ (8009c4c <UART_SetConfig+0xac0>)
  21670. 8009b98: 681b ldr r3, [r3, #0]
  21671. 8009b9a: f003 0320 and.w r3, r3, #32
  21672. 8009b9e: 2b00 cmp r3, #0
  21673. 8009ba0: d009 beq.n 8009bb6 <UART_SetConfig+0xa2a>
  21674. {
  21675. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  21676. 8009ba2: 4b2a ldr r3, [pc, #168] @ (8009c4c <UART_SetConfig+0xac0>)
  21677. 8009ba4: 681b ldr r3, [r3, #0]
  21678. 8009ba6: 08db lsrs r3, r3, #3
  21679. 8009ba8: f003 0303 and.w r3, r3, #3
  21680. 8009bac: 4a28 ldr r2, [pc, #160] @ (8009c50 <UART_SetConfig+0xac4>)
  21681. 8009bae: fa22 f303 lsr.w r3, r2, r3
  21682. 8009bb2: 63fb str r3, [r7, #60] @ 0x3c
  21683. }
  21684. else
  21685. {
  21686. pclk = (uint32_t) HSI_VALUE;
  21687. }
  21688. break;
  21689. 8009bb4: e00f b.n 8009bd6 <UART_SetConfig+0xa4a>
  21690. pclk = (uint32_t) HSI_VALUE;
  21691. 8009bb6: 4b26 ldr r3, [pc, #152] @ (8009c50 <UART_SetConfig+0xac4>)
  21692. 8009bb8: 63fb str r3, [r7, #60] @ 0x3c
  21693. break;
  21694. 8009bba: e00c b.n 8009bd6 <UART_SetConfig+0xa4a>
  21695. case UART_CLOCKSOURCE_CSI:
  21696. pclk = (uint32_t) CSI_VALUE;
  21697. 8009bbc: 4b25 ldr r3, [pc, #148] @ (8009c54 <UART_SetConfig+0xac8>)
  21698. 8009bbe: 63fb str r3, [r7, #60] @ 0x3c
  21699. break;
  21700. 8009bc0: e009 b.n 8009bd6 <UART_SetConfig+0xa4a>
  21701. case UART_CLOCKSOURCE_LSE:
  21702. pclk = (uint32_t) LSE_VALUE;
  21703. 8009bc2: f44f 4300 mov.w r3, #32768 @ 0x8000
  21704. 8009bc6: 63fb str r3, [r7, #60] @ 0x3c
  21705. break;
  21706. 8009bc8: e005 b.n 8009bd6 <UART_SetConfig+0xa4a>
  21707. default:
  21708. pclk = 0U;
  21709. 8009bca: 2300 movs r3, #0
  21710. 8009bcc: 63fb str r3, [r7, #60] @ 0x3c
  21711. ret = HAL_ERROR;
  21712. 8009bce: 2301 movs r3, #1
  21713. 8009bd0: f887 3042 strb.w r3, [r7, #66] @ 0x42
  21714. break;
  21715. 8009bd4: bf00 nop
  21716. }
  21717. if (pclk != 0U)
  21718. 8009bd6: 6bfb ldr r3, [r7, #60] @ 0x3c
  21719. 8009bd8: 2b00 cmp r3, #0
  21720. 8009bda: d021 beq.n 8009c20 <UART_SetConfig+0xa94>
  21721. {
  21722. /* USARTDIV must be greater than or equal to 0d16 */
  21723. usartdiv = (uint32_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  21724. 8009bdc: 697b ldr r3, [r7, #20]
  21725. 8009bde: 6a5b ldr r3, [r3, #36] @ 0x24
  21726. 8009be0: 4a1d ldr r2, [pc, #116] @ (8009c58 <UART_SetConfig+0xacc>)
  21727. 8009be2: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  21728. 8009be6: 461a mov r2, r3
  21729. 8009be8: 6bfb ldr r3, [r7, #60] @ 0x3c
  21730. 8009bea: fbb3 f2f2 udiv r2, r3, r2
  21731. 8009bee: 697b ldr r3, [r7, #20]
  21732. 8009bf0: 685b ldr r3, [r3, #4]
  21733. 8009bf2: 085b lsrs r3, r3, #1
  21734. 8009bf4: 441a add r2, r3
  21735. 8009bf6: 697b ldr r3, [r7, #20]
  21736. 8009bf8: 685b ldr r3, [r3, #4]
  21737. 8009bfa: fbb2 f3f3 udiv r3, r2, r3
  21738. 8009bfe: 63bb str r3, [r7, #56] @ 0x38
  21739. if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX))
  21740. 8009c00: 6bbb ldr r3, [r7, #56] @ 0x38
  21741. 8009c02: 2b0f cmp r3, #15
  21742. 8009c04: d909 bls.n 8009c1a <UART_SetConfig+0xa8e>
  21743. 8009c06: 6bbb ldr r3, [r7, #56] @ 0x38
  21744. 8009c08: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  21745. 8009c0c: d205 bcs.n 8009c1a <UART_SetConfig+0xa8e>
  21746. {
  21747. huart->Instance->BRR = (uint16_t)usartdiv;
  21748. 8009c0e: 6bbb ldr r3, [r7, #56] @ 0x38
  21749. 8009c10: b29a uxth r2, r3
  21750. 8009c12: 697b ldr r3, [r7, #20]
  21751. 8009c14: 681b ldr r3, [r3, #0]
  21752. 8009c16: 60da str r2, [r3, #12]
  21753. 8009c18: e002 b.n 8009c20 <UART_SetConfig+0xa94>
  21754. }
  21755. else
  21756. {
  21757. ret = HAL_ERROR;
  21758. 8009c1a: 2301 movs r3, #1
  21759. 8009c1c: f887 3042 strb.w r3, [r7, #66] @ 0x42
  21760. }
  21761. }
  21762. }
  21763. /* Initialize the number of data to process during RX/TX ISR execution */
  21764. huart->NbTxDataToProcess = 1;
  21765. 8009c20: 697b ldr r3, [r7, #20]
  21766. 8009c22: 2201 movs r2, #1
  21767. 8009c24: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  21768. huart->NbRxDataToProcess = 1;
  21769. 8009c28: 697b ldr r3, [r7, #20]
  21770. 8009c2a: 2201 movs r2, #1
  21771. 8009c2c: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  21772. /* Clear ISR function pointers */
  21773. huart->RxISR = NULL;
  21774. 8009c30: 697b ldr r3, [r7, #20]
  21775. 8009c32: 2200 movs r2, #0
  21776. 8009c34: 675a str r2, [r3, #116] @ 0x74
  21777. huart->TxISR = NULL;
  21778. 8009c36: 697b ldr r3, [r7, #20]
  21779. 8009c38: 2200 movs r2, #0
  21780. 8009c3a: 679a str r2, [r3, #120] @ 0x78
  21781. return ret;
  21782. 8009c3c: f897 3042 ldrb.w r3, [r7, #66] @ 0x42
  21783. }
  21784. 8009c40: 4618 mov r0, r3
  21785. 8009c42: 3748 adds r7, #72 @ 0x48
  21786. 8009c44: 46bd mov sp, r7
  21787. 8009c46: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc}
  21788. 8009c4a: bf00 nop
  21789. 8009c4c: 58024400 .word 0x58024400
  21790. 8009c50: 03d09000 .word 0x03d09000
  21791. 8009c54: 003d0900 .word 0x003d0900
  21792. 8009c58: 080100c8 .word 0x080100c8
  21793. 08009c5c <UART_AdvFeatureConfig>:
  21794. * @brief Configure the UART peripheral advanced features.
  21795. * @param huart UART handle.
  21796. * @retval None
  21797. */
  21798. void UART_AdvFeatureConfig(UART_HandleTypeDef *huart)
  21799. {
  21800. 8009c5c: b480 push {r7}
  21801. 8009c5e: b083 sub sp, #12
  21802. 8009c60: af00 add r7, sp, #0
  21803. 8009c62: 6078 str r0, [r7, #4]
  21804. /* Check whether the set of advanced features to configure is properly set */
  21805. assert_param(IS_UART_ADVFEATURE_INIT(huart->AdvancedInit.AdvFeatureInit));
  21806. /* if required, configure RX/TX pins swap */
  21807. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_SWAP_INIT))
  21808. 8009c64: 687b ldr r3, [r7, #4]
  21809. 8009c66: 6a9b ldr r3, [r3, #40] @ 0x28
  21810. 8009c68: f003 0308 and.w r3, r3, #8
  21811. 8009c6c: 2b00 cmp r3, #0
  21812. 8009c6e: d00a beq.n 8009c86 <UART_AdvFeatureConfig+0x2a>
  21813. {
  21814. assert_param(IS_UART_ADVFEATURE_SWAP(huart->AdvancedInit.Swap));
  21815. MODIFY_REG(huart->Instance->CR2, USART_CR2_SWAP, huart->AdvancedInit.Swap);
  21816. 8009c70: 687b ldr r3, [r7, #4]
  21817. 8009c72: 681b ldr r3, [r3, #0]
  21818. 8009c74: 685b ldr r3, [r3, #4]
  21819. 8009c76: f423 4100 bic.w r1, r3, #32768 @ 0x8000
  21820. 8009c7a: 687b ldr r3, [r7, #4]
  21821. 8009c7c: 6b9a ldr r2, [r3, #56] @ 0x38
  21822. 8009c7e: 687b ldr r3, [r7, #4]
  21823. 8009c80: 681b ldr r3, [r3, #0]
  21824. 8009c82: 430a orrs r2, r1
  21825. 8009c84: 605a str r2, [r3, #4]
  21826. }
  21827. /* if required, configure TX pin active level inversion */
  21828. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_TXINVERT_INIT))
  21829. 8009c86: 687b ldr r3, [r7, #4]
  21830. 8009c88: 6a9b ldr r3, [r3, #40] @ 0x28
  21831. 8009c8a: f003 0301 and.w r3, r3, #1
  21832. 8009c8e: 2b00 cmp r3, #0
  21833. 8009c90: d00a beq.n 8009ca8 <UART_AdvFeatureConfig+0x4c>
  21834. {
  21835. assert_param(IS_UART_ADVFEATURE_TXINV(huart->AdvancedInit.TxPinLevelInvert));
  21836. MODIFY_REG(huart->Instance->CR2, USART_CR2_TXINV, huart->AdvancedInit.TxPinLevelInvert);
  21837. 8009c92: 687b ldr r3, [r7, #4]
  21838. 8009c94: 681b ldr r3, [r3, #0]
  21839. 8009c96: 685b ldr r3, [r3, #4]
  21840. 8009c98: f423 3100 bic.w r1, r3, #131072 @ 0x20000
  21841. 8009c9c: 687b ldr r3, [r7, #4]
  21842. 8009c9e: 6ada ldr r2, [r3, #44] @ 0x2c
  21843. 8009ca0: 687b ldr r3, [r7, #4]
  21844. 8009ca2: 681b ldr r3, [r3, #0]
  21845. 8009ca4: 430a orrs r2, r1
  21846. 8009ca6: 605a str r2, [r3, #4]
  21847. }
  21848. /* if required, configure RX pin active level inversion */
  21849. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXINVERT_INIT))
  21850. 8009ca8: 687b ldr r3, [r7, #4]
  21851. 8009caa: 6a9b ldr r3, [r3, #40] @ 0x28
  21852. 8009cac: f003 0302 and.w r3, r3, #2
  21853. 8009cb0: 2b00 cmp r3, #0
  21854. 8009cb2: d00a beq.n 8009cca <UART_AdvFeatureConfig+0x6e>
  21855. {
  21856. assert_param(IS_UART_ADVFEATURE_RXINV(huart->AdvancedInit.RxPinLevelInvert));
  21857. MODIFY_REG(huart->Instance->CR2, USART_CR2_RXINV, huart->AdvancedInit.RxPinLevelInvert);
  21858. 8009cb4: 687b ldr r3, [r7, #4]
  21859. 8009cb6: 681b ldr r3, [r3, #0]
  21860. 8009cb8: 685b ldr r3, [r3, #4]
  21861. 8009cba: f423 3180 bic.w r1, r3, #65536 @ 0x10000
  21862. 8009cbe: 687b ldr r3, [r7, #4]
  21863. 8009cc0: 6b1a ldr r2, [r3, #48] @ 0x30
  21864. 8009cc2: 687b ldr r3, [r7, #4]
  21865. 8009cc4: 681b ldr r3, [r3, #0]
  21866. 8009cc6: 430a orrs r2, r1
  21867. 8009cc8: 605a str r2, [r3, #4]
  21868. }
  21869. /* if required, configure data inversion */
  21870. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DATAINVERT_INIT))
  21871. 8009cca: 687b ldr r3, [r7, #4]
  21872. 8009ccc: 6a9b ldr r3, [r3, #40] @ 0x28
  21873. 8009cce: f003 0304 and.w r3, r3, #4
  21874. 8009cd2: 2b00 cmp r3, #0
  21875. 8009cd4: d00a beq.n 8009cec <UART_AdvFeatureConfig+0x90>
  21876. {
  21877. assert_param(IS_UART_ADVFEATURE_DATAINV(huart->AdvancedInit.DataInvert));
  21878. MODIFY_REG(huart->Instance->CR2, USART_CR2_DATAINV, huart->AdvancedInit.DataInvert);
  21879. 8009cd6: 687b ldr r3, [r7, #4]
  21880. 8009cd8: 681b ldr r3, [r3, #0]
  21881. 8009cda: 685b ldr r3, [r3, #4]
  21882. 8009cdc: f423 2180 bic.w r1, r3, #262144 @ 0x40000
  21883. 8009ce0: 687b ldr r3, [r7, #4]
  21884. 8009ce2: 6b5a ldr r2, [r3, #52] @ 0x34
  21885. 8009ce4: 687b ldr r3, [r7, #4]
  21886. 8009ce6: 681b ldr r3, [r3, #0]
  21887. 8009ce8: 430a orrs r2, r1
  21888. 8009cea: 605a str r2, [r3, #4]
  21889. }
  21890. /* if required, configure RX overrun detection disabling */
  21891. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXOVERRUNDISABLE_INIT))
  21892. 8009cec: 687b ldr r3, [r7, #4]
  21893. 8009cee: 6a9b ldr r3, [r3, #40] @ 0x28
  21894. 8009cf0: f003 0310 and.w r3, r3, #16
  21895. 8009cf4: 2b00 cmp r3, #0
  21896. 8009cf6: d00a beq.n 8009d0e <UART_AdvFeatureConfig+0xb2>
  21897. {
  21898. assert_param(IS_UART_OVERRUN(huart->AdvancedInit.OverrunDisable));
  21899. MODIFY_REG(huart->Instance->CR3, USART_CR3_OVRDIS, huart->AdvancedInit.OverrunDisable);
  21900. 8009cf8: 687b ldr r3, [r7, #4]
  21901. 8009cfa: 681b ldr r3, [r3, #0]
  21902. 8009cfc: 689b ldr r3, [r3, #8]
  21903. 8009cfe: f423 5180 bic.w r1, r3, #4096 @ 0x1000
  21904. 8009d02: 687b ldr r3, [r7, #4]
  21905. 8009d04: 6bda ldr r2, [r3, #60] @ 0x3c
  21906. 8009d06: 687b ldr r3, [r7, #4]
  21907. 8009d08: 681b ldr r3, [r3, #0]
  21908. 8009d0a: 430a orrs r2, r1
  21909. 8009d0c: 609a str r2, [r3, #8]
  21910. }
  21911. /* if required, configure DMA disabling on reception error */
  21912. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DMADISABLEONERROR_INIT))
  21913. 8009d0e: 687b ldr r3, [r7, #4]
  21914. 8009d10: 6a9b ldr r3, [r3, #40] @ 0x28
  21915. 8009d12: f003 0320 and.w r3, r3, #32
  21916. 8009d16: 2b00 cmp r3, #0
  21917. 8009d18: d00a beq.n 8009d30 <UART_AdvFeatureConfig+0xd4>
  21918. {
  21919. assert_param(IS_UART_ADVFEATURE_DMAONRXERROR(huart->AdvancedInit.DMADisableonRxError));
  21920. MODIFY_REG(huart->Instance->CR3, USART_CR3_DDRE, huart->AdvancedInit.DMADisableonRxError);
  21921. 8009d1a: 687b ldr r3, [r7, #4]
  21922. 8009d1c: 681b ldr r3, [r3, #0]
  21923. 8009d1e: 689b ldr r3, [r3, #8]
  21924. 8009d20: f423 5100 bic.w r1, r3, #8192 @ 0x2000
  21925. 8009d24: 687b ldr r3, [r7, #4]
  21926. 8009d26: 6c1a ldr r2, [r3, #64] @ 0x40
  21927. 8009d28: 687b ldr r3, [r7, #4]
  21928. 8009d2a: 681b ldr r3, [r3, #0]
  21929. 8009d2c: 430a orrs r2, r1
  21930. 8009d2e: 609a str r2, [r3, #8]
  21931. }
  21932. /* if required, configure auto Baud rate detection scheme */
  21933. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_AUTOBAUDRATE_INIT))
  21934. 8009d30: 687b ldr r3, [r7, #4]
  21935. 8009d32: 6a9b ldr r3, [r3, #40] @ 0x28
  21936. 8009d34: f003 0340 and.w r3, r3, #64 @ 0x40
  21937. 8009d38: 2b00 cmp r3, #0
  21938. 8009d3a: d01a beq.n 8009d72 <UART_AdvFeatureConfig+0x116>
  21939. {
  21940. assert_param(IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(huart->Instance));
  21941. assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATE(huart->AdvancedInit.AutoBaudRateEnable));
  21942. MODIFY_REG(huart->Instance->CR2, USART_CR2_ABREN, huart->AdvancedInit.AutoBaudRateEnable);
  21943. 8009d3c: 687b ldr r3, [r7, #4]
  21944. 8009d3e: 681b ldr r3, [r3, #0]
  21945. 8009d40: 685b ldr r3, [r3, #4]
  21946. 8009d42: f423 1180 bic.w r1, r3, #1048576 @ 0x100000
  21947. 8009d46: 687b ldr r3, [r7, #4]
  21948. 8009d48: 6c5a ldr r2, [r3, #68] @ 0x44
  21949. 8009d4a: 687b ldr r3, [r7, #4]
  21950. 8009d4c: 681b ldr r3, [r3, #0]
  21951. 8009d4e: 430a orrs r2, r1
  21952. 8009d50: 605a str r2, [r3, #4]
  21953. /* set auto Baudrate detection parameters if detection is enabled */
  21954. if (huart->AdvancedInit.AutoBaudRateEnable == UART_ADVFEATURE_AUTOBAUDRATE_ENABLE)
  21955. 8009d52: 687b ldr r3, [r7, #4]
  21956. 8009d54: 6c5b ldr r3, [r3, #68] @ 0x44
  21957. 8009d56: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  21958. 8009d5a: d10a bne.n 8009d72 <UART_AdvFeatureConfig+0x116>
  21959. {
  21960. assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(huart->AdvancedInit.AutoBaudRateMode));
  21961. MODIFY_REG(huart->Instance->CR2, USART_CR2_ABRMODE, huart->AdvancedInit.AutoBaudRateMode);
  21962. 8009d5c: 687b ldr r3, [r7, #4]
  21963. 8009d5e: 681b ldr r3, [r3, #0]
  21964. 8009d60: 685b ldr r3, [r3, #4]
  21965. 8009d62: f423 01c0 bic.w r1, r3, #6291456 @ 0x600000
  21966. 8009d66: 687b ldr r3, [r7, #4]
  21967. 8009d68: 6c9a ldr r2, [r3, #72] @ 0x48
  21968. 8009d6a: 687b ldr r3, [r7, #4]
  21969. 8009d6c: 681b ldr r3, [r3, #0]
  21970. 8009d6e: 430a orrs r2, r1
  21971. 8009d70: 605a str r2, [r3, #4]
  21972. }
  21973. }
  21974. /* if required, configure MSB first on communication line */
  21975. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_MSBFIRST_INIT))
  21976. 8009d72: 687b ldr r3, [r7, #4]
  21977. 8009d74: 6a9b ldr r3, [r3, #40] @ 0x28
  21978. 8009d76: f003 0380 and.w r3, r3, #128 @ 0x80
  21979. 8009d7a: 2b00 cmp r3, #0
  21980. 8009d7c: d00a beq.n 8009d94 <UART_AdvFeatureConfig+0x138>
  21981. {
  21982. assert_param(IS_UART_ADVFEATURE_MSBFIRST(huart->AdvancedInit.MSBFirst));
  21983. MODIFY_REG(huart->Instance->CR2, USART_CR2_MSBFIRST, huart->AdvancedInit.MSBFirst);
  21984. 8009d7e: 687b ldr r3, [r7, #4]
  21985. 8009d80: 681b ldr r3, [r3, #0]
  21986. 8009d82: 685b ldr r3, [r3, #4]
  21987. 8009d84: f423 2100 bic.w r1, r3, #524288 @ 0x80000
  21988. 8009d88: 687b ldr r3, [r7, #4]
  21989. 8009d8a: 6cda ldr r2, [r3, #76] @ 0x4c
  21990. 8009d8c: 687b ldr r3, [r7, #4]
  21991. 8009d8e: 681b ldr r3, [r3, #0]
  21992. 8009d90: 430a orrs r2, r1
  21993. 8009d92: 605a str r2, [r3, #4]
  21994. }
  21995. }
  21996. 8009d94: bf00 nop
  21997. 8009d96: 370c adds r7, #12
  21998. 8009d98: 46bd mov sp, r7
  21999. 8009d9a: f85d 7b04 ldr.w r7, [sp], #4
  22000. 8009d9e: 4770 bx lr
  22001. 08009da0 <UART_CheckIdleState>:
  22002. * @brief Check the UART Idle State.
  22003. * @param huart UART handle.
  22004. * @retval HAL status
  22005. */
  22006. HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
  22007. {
  22008. 8009da0: b580 push {r7, lr}
  22009. 8009da2: b098 sub sp, #96 @ 0x60
  22010. 8009da4: af02 add r7, sp, #8
  22011. 8009da6: 6078 str r0, [r7, #4]
  22012. uint32_t tickstart;
  22013. /* Initialize the UART ErrorCode */
  22014. huart->ErrorCode = HAL_UART_ERROR_NONE;
  22015. 8009da8: 687b ldr r3, [r7, #4]
  22016. 8009daa: 2200 movs r2, #0
  22017. 8009dac: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  22018. /* Init tickstart for timeout management */
  22019. tickstart = HAL_GetTick();
  22020. 8009db0: f7f8 fc56 bl 8002660 <HAL_GetTick>
  22021. 8009db4: 6578 str r0, [r7, #84] @ 0x54
  22022. /* Check if the Transmitter is enabled */
  22023. if ((huart->Instance->CR1 & USART_CR1_TE) == USART_CR1_TE)
  22024. 8009db6: 687b ldr r3, [r7, #4]
  22025. 8009db8: 681b ldr r3, [r3, #0]
  22026. 8009dba: 681b ldr r3, [r3, #0]
  22027. 8009dbc: f003 0308 and.w r3, r3, #8
  22028. 8009dc0: 2b08 cmp r3, #8
  22029. 8009dc2: d12f bne.n 8009e24 <UART_CheckIdleState+0x84>
  22030. {
  22031. /* Wait until TEACK flag is set */
  22032. if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_TEACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
  22033. 8009dc4: f06f 437e mvn.w r3, #4261412864 @ 0xfe000000
  22034. 8009dc8: 9300 str r3, [sp, #0]
  22035. 8009dca: 6d7b ldr r3, [r7, #84] @ 0x54
  22036. 8009dcc: 2200 movs r2, #0
  22037. 8009dce: f44f 1100 mov.w r1, #2097152 @ 0x200000
  22038. 8009dd2: 6878 ldr r0, [r7, #4]
  22039. 8009dd4: f000 f88e bl 8009ef4 <UART_WaitOnFlagUntilTimeout>
  22040. 8009dd8: 4603 mov r3, r0
  22041. 8009dda: 2b00 cmp r3, #0
  22042. 8009ddc: d022 beq.n 8009e24 <UART_CheckIdleState+0x84>
  22043. {
  22044. /* Disable TXE interrupt for the interrupt process */
  22045. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE));
  22046. 8009dde: 687b ldr r3, [r7, #4]
  22047. 8009de0: 681b ldr r3, [r3, #0]
  22048. 8009de2: 63bb str r3, [r7, #56] @ 0x38
  22049. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  22050. 8009de4: 6bbb ldr r3, [r7, #56] @ 0x38
  22051. 8009de6: e853 3f00 ldrex r3, [r3]
  22052. 8009dea: 637b str r3, [r7, #52] @ 0x34
  22053. return(result);
  22054. 8009dec: 6b7b ldr r3, [r7, #52] @ 0x34
  22055. 8009dee: f023 0380 bic.w r3, r3, #128 @ 0x80
  22056. 8009df2: 653b str r3, [r7, #80] @ 0x50
  22057. 8009df4: 687b ldr r3, [r7, #4]
  22058. 8009df6: 681b ldr r3, [r3, #0]
  22059. 8009df8: 461a mov r2, r3
  22060. 8009dfa: 6d3b ldr r3, [r7, #80] @ 0x50
  22061. 8009dfc: 647b str r3, [r7, #68] @ 0x44
  22062. 8009dfe: 643a str r2, [r7, #64] @ 0x40
  22063. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  22064. 8009e00: 6c39 ldr r1, [r7, #64] @ 0x40
  22065. 8009e02: 6c7a ldr r2, [r7, #68] @ 0x44
  22066. 8009e04: e841 2300 strex r3, r2, [r1]
  22067. 8009e08: 63fb str r3, [r7, #60] @ 0x3c
  22068. return(result);
  22069. 8009e0a: 6bfb ldr r3, [r7, #60] @ 0x3c
  22070. 8009e0c: 2b00 cmp r3, #0
  22071. 8009e0e: d1e6 bne.n 8009dde <UART_CheckIdleState+0x3e>
  22072. huart->gState = HAL_UART_STATE_READY;
  22073. 8009e10: 687b ldr r3, [r7, #4]
  22074. 8009e12: 2220 movs r2, #32
  22075. 8009e14: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  22076. __HAL_UNLOCK(huart);
  22077. 8009e18: 687b ldr r3, [r7, #4]
  22078. 8009e1a: 2200 movs r2, #0
  22079. 8009e1c: f883 2084 strb.w r2, [r3, #132] @ 0x84
  22080. /* Timeout occurred */
  22081. return HAL_TIMEOUT;
  22082. 8009e20: 2303 movs r3, #3
  22083. 8009e22: e063 b.n 8009eec <UART_CheckIdleState+0x14c>
  22084. }
  22085. }
  22086. /* Check if the Receiver is enabled */
  22087. if ((huart->Instance->CR1 & USART_CR1_RE) == USART_CR1_RE)
  22088. 8009e24: 687b ldr r3, [r7, #4]
  22089. 8009e26: 681b ldr r3, [r3, #0]
  22090. 8009e28: 681b ldr r3, [r3, #0]
  22091. 8009e2a: f003 0304 and.w r3, r3, #4
  22092. 8009e2e: 2b04 cmp r3, #4
  22093. 8009e30: d149 bne.n 8009ec6 <UART_CheckIdleState+0x126>
  22094. {
  22095. /* Wait until REACK flag is set */
  22096. if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
  22097. 8009e32: f06f 437e mvn.w r3, #4261412864 @ 0xfe000000
  22098. 8009e36: 9300 str r3, [sp, #0]
  22099. 8009e38: 6d7b ldr r3, [r7, #84] @ 0x54
  22100. 8009e3a: 2200 movs r2, #0
  22101. 8009e3c: f44f 0180 mov.w r1, #4194304 @ 0x400000
  22102. 8009e40: 6878 ldr r0, [r7, #4]
  22103. 8009e42: f000 f857 bl 8009ef4 <UART_WaitOnFlagUntilTimeout>
  22104. 8009e46: 4603 mov r3, r0
  22105. 8009e48: 2b00 cmp r3, #0
  22106. 8009e4a: d03c beq.n 8009ec6 <UART_CheckIdleState+0x126>
  22107. {
  22108. /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error)
  22109. interrupts for the interrupt process */
  22110. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  22111. 8009e4c: 687b ldr r3, [r7, #4]
  22112. 8009e4e: 681b ldr r3, [r3, #0]
  22113. 8009e50: 627b str r3, [r7, #36] @ 0x24
  22114. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  22115. 8009e52: 6a7b ldr r3, [r7, #36] @ 0x24
  22116. 8009e54: e853 3f00 ldrex r3, [r3]
  22117. 8009e58: 623b str r3, [r7, #32]
  22118. return(result);
  22119. 8009e5a: 6a3b ldr r3, [r7, #32]
  22120. 8009e5c: f423 7390 bic.w r3, r3, #288 @ 0x120
  22121. 8009e60: 64fb str r3, [r7, #76] @ 0x4c
  22122. 8009e62: 687b ldr r3, [r7, #4]
  22123. 8009e64: 681b ldr r3, [r3, #0]
  22124. 8009e66: 461a mov r2, r3
  22125. 8009e68: 6cfb ldr r3, [r7, #76] @ 0x4c
  22126. 8009e6a: 633b str r3, [r7, #48] @ 0x30
  22127. 8009e6c: 62fa str r2, [r7, #44] @ 0x2c
  22128. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  22129. 8009e6e: 6af9 ldr r1, [r7, #44] @ 0x2c
  22130. 8009e70: 6b3a ldr r2, [r7, #48] @ 0x30
  22131. 8009e72: e841 2300 strex r3, r2, [r1]
  22132. 8009e76: 62bb str r3, [r7, #40] @ 0x28
  22133. return(result);
  22134. 8009e78: 6abb ldr r3, [r7, #40] @ 0x28
  22135. 8009e7a: 2b00 cmp r3, #0
  22136. 8009e7c: d1e6 bne.n 8009e4c <UART_CheckIdleState+0xac>
  22137. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  22138. 8009e7e: 687b ldr r3, [r7, #4]
  22139. 8009e80: 681b ldr r3, [r3, #0]
  22140. 8009e82: 3308 adds r3, #8
  22141. 8009e84: 613b str r3, [r7, #16]
  22142. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  22143. 8009e86: 693b ldr r3, [r7, #16]
  22144. 8009e88: e853 3f00 ldrex r3, [r3]
  22145. 8009e8c: 60fb str r3, [r7, #12]
  22146. return(result);
  22147. 8009e8e: 68fb ldr r3, [r7, #12]
  22148. 8009e90: f023 0301 bic.w r3, r3, #1
  22149. 8009e94: 64bb str r3, [r7, #72] @ 0x48
  22150. 8009e96: 687b ldr r3, [r7, #4]
  22151. 8009e98: 681b ldr r3, [r3, #0]
  22152. 8009e9a: 3308 adds r3, #8
  22153. 8009e9c: 6cba ldr r2, [r7, #72] @ 0x48
  22154. 8009e9e: 61fa str r2, [r7, #28]
  22155. 8009ea0: 61bb str r3, [r7, #24]
  22156. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  22157. 8009ea2: 69b9 ldr r1, [r7, #24]
  22158. 8009ea4: 69fa ldr r2, [r7, #28]
  22159. 8009ea6: e841 2300 strex r3, r2, [r1]
  22160. 8009eaa: 617b str r3, [r7, #20]
  22161. return(result);
  22162. 8009eac: 697b ldr r3, [r7, #20]
  22163. 8009eae: 2b00 cmp r3, #0
  22164. 8009eb0: d1e5 bne.n 8009e7e <UART_CheckIdleState+0xde>
  22165. huart->RxState = HAL_UART_STATE_READY;
  22166. 8009eb2: 687b ldr r3, [r7, #4]
  22167. 8009eb4: 2220 movs r2, #32
  22168. 8009eb6: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  22169. __HAL_UNLOCK(huart);
  22170. 8009eba: 687b ldr r3, [r7, #4]
  22171. 8009ebc: 2200 movs r2, #0
  22172. 8009ebe: f883 2084 strb.w r2, [r3, #132] @ 0x84
  22173. /* Timeout occurred */
  22174. return HAL_TIMEOUT;
  22175. 8009ec2: 2303 movs r3, #3
  22176. 8009ec4: e012 b.n 8009eec <UART_CheckIdleState+0x14c>
  22177. }
  22178. }
  22179. /* Initialize the UART State */
  22180. huart->gState = HAL_UART_STATE_READY;
  22181. 8009ec6: 687b ldr r3, [r7, #4]
  22182. 8009ec8: 2220 movs r2, #32
  22183. 8009eca: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  22184. huart->RxState = HAL_UART_STATE_READY;
  22185. 8009ece: 687b ldr r3, [r7, #4]
  22186. 8009ed0: 2220 movs r2, #32
  22187. 8009ed2: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  22188. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  22189. 8009ed6: 687b ldr r3, [r7, #4]
  22190. 8009ed8: 2200 movs r2, #0
  22191. 8009eda: 66da str r2, [r3, #108] @ 0x6c
  22192. huart->RxEventType = HAL_UART_RXEVENT_TC;
  22193. 8009edc: 687b ldr r3, [r7, #4]
  22194. 8009ede: 2200 movs r2, #0
  22195. 8009ee0: 671a str r2, [r3, #112] @ 0x70
  22196. __HAL_UNLOCK(huart);
  22197. 8009ee2: 687b ldr r3, [r7, #4]
  22198. 8009ee4: 2200 movs r2, #0
  22199. 8009ee6: f883 2084 strb.w r2, [r3, #132] @ 0x84
  22200. return HAL_OK;
  22201. 8009eea: 2300 movs r3, #0
  22202. }
  22203. 8009eec: 4618 mov r0, r3
  22204. 8009eee: 3758 adds r7, #88 @ 0x58
  22205. 8009ef0: 46bd mov sp, r7
  22206. 8009ef2: bd80 pop {r7, pc}
  22207. 08009ef4 <UART_WaitOnFlagUntilTimeout>:
  22208. * @param Timeout Timeout duration
  22209. * @retval HAL status
  22210. */
  22211. HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
  22212. uint32_t Tickstart, uint32_t Timeout)
  22213. {
  22214. 8009ef4: b580 push {r7, lr}
  22215. 8009ef6: b084 sub sp, #16
  22216. 8009ef8: af00 add r7, sp, #0
  22217. 8009efa: 60f8 str r0, [r7, #12]
  22218. 8009efc: 60b9 str r1, [r7, #8]
  22219. 8009efe: 603b str r3, [r7, #0]
  22220. 8009f00: 4613 mov r3, r2
  22221. 8009f02: 71fb strb r3, [r7, #7]
  22222. /* Wait until flag is set */
  22223. while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
  22224. 8009f04: e04f b.n 8009fa6 <UART_WaitOnFlagUntilTimeout+0xb2>
  22225. {
  22226. /* Check for the Timeout */
  22227. if (Timeout != HAL_MAX_DELAY)
  22228. 8009f06: 69bb ldr r3, [r7, #24]
  22229. 8009f08: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  22230. 8009f0c: d04b beq.n 8009fa6 <UART_WaitOnFlagUntilTimeout+0xb2>
  22231. {
  22232. if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
  22233. 8009f0e: f7f8 fba7 bl 8002660 <HAL_GetTick>
  22234. 8009f12: 4602 mov r2, r0
  22235. 8009f14: 683b ldr r3, [r7, #0]
  22236. 8009f16: 1ad3 subs r3, r2, r3
  22237. 8009f18: 69ba ldr r2, [r7, #24]
  22238. 8009f1a: 429a cmp r2, r3
  22239. 8009f1c: d302 bcc.n 8009f24 <UART_WaitOnFlagUntilTimeout+0x30>
  22240. 8009f1e: 69bb ldr r3, [r7, #24]
  22241. 8009f20: 2b00 cmp r3, #0
  22242. 8009f22: d101 bne.n 8009f28 <UART_WaitOnFlagUntilTimeout+0x34>
  22243. {
  22244. return HAL_TIMEOUT;
  22245. 8009f24: 2303 movs r3, #3
  22246. 8009f26: e04e b.n 8009fc6 <UART_WaitOnFlagUntilTimeout+0xd2>
  22247. }
  22248. if ((READ_BIT(huart->Instance->CR1, USART_CR1_RE) != 0U) && (Flag != UART_FLAG_TXE) && (Flag != UART_FLAG_TC))
  22249. 8009f28: 68fb ldr r3, [r7, #12]
  22250. 8009f2a: 681b ldr r3, [r3, #0]
  22251. 8009f2c: 681b ldr r3, [r3, #0]
  22252. 8009f2e: f003 0304 and.w r3, r3, #4
  22253. 8009f32: 2b00 cmp r3, #0
  22254. 8009f34: d037 beq.n 8009fa6 <UART_WaitOnFlagUntilTimeout+0xb2>
  22255. 8009f36: 68bb ldr r3, [r7, #8]
  22256. 8009f38: 2b80 cmp r3, #128 @ 0x80
  22257. 8009f3a: d034 beq.n 8009fa6 <UART_WaitOnFlagUntilTimeout+0xb2>
  22258. 8009f3c: 68bb ldr r3, [r7, #8]
  22259. 8009f3e: 2b40 cmp r3, #64 @ 0x40
  22260. 8009f40: d031 beq.n 8009fa6 <UART_WaitOnFlagUntilTimeout+0xb2>
  22261. {
  22262. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) == SET)
  22263. 8009f42: 68fb ldr r3, [r7, #12]
  22264. 8009f44: 681b ldr r3, [r3, #0]
  22265. 8009f46: 69db ldr r3, [r3, #28]
  22266. 8009f48: f003 0308 and.w r3, r3, #8
  22267. 8009f4c: 2b08 cmp r3, #8
  22268. 8009f4e: d110 bne.n 8009f72 <UART_WaitOnFlagUntilTimeout+0x7e>
  22269. {
  22270. /* Clear Overrun Error flag*/
  22271. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF);
  22272. 8009f50: 68fb ldr r3, [r7, #12]
  22273. 8009f52: 681b ldr r3, [r3, #0]
  22274. 8009f54: 2208 movs r2, #8
  22275. 8009f56: 621a str r2, [r3, #32]
  22276. /* Blocking error : transfer is aborted
  22277. Set the UART state ready to be able to start again the process,
  22278. Disable Rx Interrupts if ongoing */
  22279. UART_EndRxTransfer(huart);
  22280. 8009f58: 68f8 ldr r0, [r7, #12]
  22281. 8009f5a: f000 f95b bl 800a214 <UART_EndRxTransfer>
  22282. huart->ErrorCode = HAL_UART_ERROR_ORE;
  22283. 8009f5e: 68fb ldr r3, [r7, #12]
  22284. 8009f60: 2208 movs r2, #8
  22285. 8009f62: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  22286. /* Process Unlocked */
  22287. __HAL_UNLOCK(huart);
  22288. 8009f66: 68fb ldr r3, [r7, #12]
  22289. 8009f68: 2200 movs r2, #0
  22290. 8009f6a: f883 2084 strb.w r2, [r3, #132] @ 0x84
  22291. return HAL_ERROR;
  22292. 8009f6e: 2301 movs r3, #1
  22293. 8009f70: e029 b.n 8009fc6 <UART_WaitOnFlagUntilTimeout+0xd2>
  22294. }
  22295. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF) == SET)
  22296. 8009f72: 68fb ldr r3, [r7, #12]
  22297. 8009f74: 681b ldr r3, [r3, #0]
  22298. 8009f76: 69db ldr r3, [r3, #28]
  22299. 8009f78: f403 6300 and.w r3, r3, #2048 @ 0x800
  22300. 8009f7c: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  22301. 8009f80: d111 bne.n 8009fa6 <UART_WaitOnFlagUntilTimeout+0xb2>
  22302. {
  22303. /* Clear Receiver Timeout flag*/
  22304. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
  22305. 8009f82: 68fb ldr r3, [r7, #12]
  22306. 8009f84: 681b ldr r3, [r3, #0]
  22307. 8009f86: f44f 6200 mov.w r2, #2048 @ 0x800
  22308. 8009f8a: 621a str r2, [r3, #32]
  22309. /* Blocking error : transfer is aborted
  22310. Set the UART state ready to be able to start again the process,
  22311. Disable Rx Interrupts if ongoing */
  22312. UART_EndRxTransfer(huart);
  22313. 8009f8c: 68f8 ldr r0, [r7, #12]
  22314. 8009f8e: f000 f941 bl 800a214 <UART_EndRxTransfer>
  22315. huart->ErrorCode = HAL_UART_ERROR_RTO;
  22316. 8009f92: 68fb ldr r3, [r7, #12]
  22317. 8009f94: 2220 movs r2, #32
  22318. 8009f96: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  22319. /* Process Unlocked */
  22320. __HAL_UNLOCK(huart);
  22321. 8009f9a: 68fb ldr r3, [r7, #12]
  22322. 8009f9c: 2200 movs r2, #0
  22323. 8009f9e: f883 2084 strb.w r2, [r3, #132] @ 0x84
  22324. return HAL_TIMEOUT;
  22325. 8009fa2: 2303 movs r3, #3
  22326. 8009fa4: e00f b.n 8009fc6 <UART_WaitOnFlagUntilTimeout+0xd2>
  22327. while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
  22328. 8009fa6: 68fb ldr r3, [r7, #12]
  22329. 8009fa8: 681b ldr r3, [r3, #0]
  22330. 8009faa: 69da ldr r2, [r3, #28]
  22331. 8009fac: 68bb ldr r3, [r7, #8]
  22332. 8009fae: 4013 ands r3, r2
  22333. 8009fb0: 68ba ldr r2, [r7, #8]
  22334. 8009fb2: 429a cmp r2, r3
  22335. 8009fb4: bf0c ite eq
  22336. 8009fb6: 2301 moveq r3, #1
  22337. 8009fb8: 2300 movne r3, #0
  22338. 8009fba: b2db uxtb r3, r3
  22339. 8009fbc: 461a mov r2, r3
  22340. 8009fbe: 79fb ldrb r3, [r7, #7]
  22341. 8009fc0: 429a cmp r2, r3
  22342. 8009fc2: d0a0 beq.n 8009f06 <UART_WaitOnFlagUntilTimeout+0x12>
  22343. }
  22344. }
  22345. }
  22346. }
  22347. return HAL_OK;
  22348. 8009fc4: 2300 movs r3, #0
  22349. }
  22350. 8009fc6: 4618 mov r0, r3
  22351. 8009fc8: 3710 adds r7, #16
  22352. 8009fca: 46bd mov sp, r7
  22353. 8009fcc: bd80 pop {r7, pc}
  22354. ...
  22355. 08009fd0 <UART_Start_Receive_IT>:
  22356. * @param pData Pointer to data buffer (u8 or u16 data elements).
  22357. * @param Size Amount of data elements (u8 or u16) to be received.
  22358. * @retval HAL status
  22359. */
  22360. HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
  22361. {
  22362. 8009fd0: b480 push {r7}
  22363. 8009fd2: b0a3 sub sp, #140 @ 0x8c
  22364. 8009fd4: af00 add r7, sp, #0
  22365. 8009fd6: 60f8 str r0, [r7, #12]
  22366. 8009fd8: 60b9 str r1, [r7, #8]
  22367. 8009fda: 4613 mov r3, r2
  22368. 8009fdc: 80fb strh r3, [r7, #6]
  22369. huart->pRxBuffPtr = pData;
  22370. 8009fde: 68fb ldr r3, [r7, #12]
  22371. 8009fe0: 68ba ldr r2, [r7, #8]
  22372. 8009fe2: 659a str r2, [r3, #88] @ 0x58
  22373. huart->RxXferSize = Size;
  22374. 8009fe4: 68fb ldr r3, [r7, #12]
  22375. 8009fe6: 88fa ldrh r2, [r7, #6]
  22376. 8009fe8: f8a3 205c strh.w r2, [r3, #92] @ 0x5c
  22377. huart->RxXferCount = Size;
  22378. 8009fec: 68fb ldr r3, [r7, #12]
  22379. 8009fee: 88fa ldrh r2, [r7, #6]
  22380. 8009ff0: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  22381. huart->RxISR = NULL;
  22382. 8009ff4: 68fb ldr r3, [r7, #12]
  22383. 8009ff6: 2200 movs r2, #0
  22384. 8009ff8: 675a str r2, [r3, #116] @ 0x74
  22385. /* Computation of UART mask to apply to RDR register */
  22386. UART_MASK_COMPUTATION(huart);
  22387. 8009ffa: 68fb ldr r3, [r7, #12]
  22388. 8009ffc: 689b ldr r3, [r3, #8]
  22389. 8009ffe: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  22390. 800a002: d10e bne.n 800a022 <UART_Start_Receive_IT+0x52>
  22391. 800a004: 68fb ldr r3, [r7, #12]
  22392. 800a006: 691b ldr r3, [r3, #16]
  22393. 800a008: 2b00 cmp r3, #0
  22394. 800a00a: d105 bne.n 800a018 <UART_Start_Receive_IT+0x48>
  22395. 800a00c: 68fb ldr r3, [r7, #12]
  22396. 800a00e: f240 12ff movw r2, #511 @ 0x1ff
  22397. 800a012: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  22398. 800a016: e02d b.n 800a074 <UART_Start_Receive_IT+0xa4>
  22399. 800a018: 68fb ldr r3, [r7, #12]
  22400. 800a01a: 22ff movs r2, #255 @ 0xff
  22401. 800a01c: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  22402. 800a020: e028 b.n 800a074 <UART_Start_Receive_IT+0xa4>
  22403. 800a022: 68fb ldr r3, [r7, #12]
  22404. 800a024: 689b ldr r3, [r3, #8]
  22405. 800a026: 2b00 cmp r3, #0
  22406. 800a028: d10d bne.n 800a046 <UART_Start_Receive_IT+0x76>
  22407. 800a02a: 68fb ldr r3, [r7, #12]
  22408. 800a02c: 691b ldr r3, [r3, #16]
  22409. 800a02e: 2b00 cmp r3, #0
  22410. 800a030: d104 bne.n 800a03c <UART_Start_Receive_IT+0x6c>
  22411. 800a032: 68fb ldr r3, [r7, #12]
  22412. 800a034: 22ff movs r2, #255 @ 0xff
  22413. 800a036: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  22414. 800a03a: e01b b.n 800a074 <UART_Start_Receive_IT+0xa4>
  22415. 800a03c: 68fb ldr r3, [r7, #12]
  22416. 800a03e: 227f movs r2, #127 @ 0x7f
  22417. 800a040: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  22418. 800a044: e016 b.n 800a074 <UART_Start_Receive_IT+0xa4>
  22419. 800a046: 68fb ldr r3, [r7, #12]
  22420. 800a048: 689b ldr r3, [r3, #8]
  22421. 800a04a: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  22422. 800a04e: d10d bne.n 800a06c <UART_Start_Receive_IT+0x9c>
  22423. 800a050: 68fb ldr r3, [r7, #12]
  22424. 800a052: 691b ldr r3, [r3, #16]
  22425. 800a054: 2b00 cmp r3, #0
  22426. 800a056: d104 bne.n 800a062 <UART_Start_Receive_IT+0x92>
  22427. 800a058: 68fb ldr r3, [r7, #12]
  22428. 800a05a: 227f movs r2, #127 @ 0x7f
  22429. 800a05c: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  22430. 800a060: e008 b.n 800a074 <UART_Start_Receive_IT+0xa4>
  22431. 800a062: 68fb ldr r3, [r7, #12]
  22432. 800a064: 223f movs r2, #63 @ 0x3f
  22433. 800a066: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  22434. 800a06a: e003 b.n 800a074 <UART_Start_Receive_IT+0xa4>
  22435. 800a06c: 68fb ldr r3, [r7, #12]
  22436. 800a06e: 2200 movs r2, #0
  22437. 800a070: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  22438. huart->ErrorCode = HAL_UART_ERROR_NONE;
  22439. 800a074: 68fb ldr r3, [r7, #12]
  22440. 800a076: 2200 movs r2, #0
  22441. 800a078: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  22442. huart->RxState = HAL_UART_STATE_BUSY_RX;
  22443. 800a07c: 68fb ldr r3, [r7, #12]
  22444. 800a07e: 2222 movs r2, #34 @ 0x22
  22445. 800a080: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  22446. /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  22447. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_EIE);
  22448. 800a084: 68fb ldr r3, [r7, #12]
  22449. 800a086: 681b ldr r3, [r3, #0]
  22450. 800a088: 3308 adds r3, #8
  22451. 800a08a: 667b str r3, [r7, #100] @ 0x64
  22452. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  22453. 800a08c: 6e7b ldr r3, [r7, #100] @ 0x64
  22454. 800a08e: e853 3f00 ldrex r3, [r3]
  22455. 800a092: 663b str r3, [r7, #96] @ 0x60
  22456. return(result);
  22457. 800a094: 6e3b ldr r3, [r7, #96] @ 0x60
  22458. 800a096: f043 0301 orr.w r3, r3, #1
  22459. 800a09a: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  22460. 800a09e: 68fb ldr r3, [r7, #12]
  22461. 800a0a0: 681b ldr r3, [r3, #0]
  22462. 800a0a2: 3308 adds r3, #8
  22463. 800a0a4: f8d7 2084 ldr.w r2, [r7, #132] @ 0x84
  22464. 800a0a8: 673a str r2, [r7, #112] @ 0x70
  22465. 800a0aa: 66fb str r3, [r7, #108] @ 0x6c
  22466. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  22467. 800a0ac: 6ef9 ldr r1, [r7, #108] @ 0x6c
  22468. 800a0ae: 6f3a ldr r2, [r7, #112] @ 0x70
  22469. 800a0b0: e841 2300 strex r3, r2, [r1]
  22470. 800a0b4: 66bb str r3, [r7, #104] @ 0x68
  22471. return(result);
  22472. 800a0b6: 6ebb ldr r3, [r7, #104] @ 0x68
  22473. 800a0b8: 2b00 cmp r3, #0
  22474. 800a0ba: d1e3 bne.n 800a084 <UART_Start_Receive_IT+0xb4>
  22475. /* Configure Rx interrupt processing */
  22476. if ((huart->FifoMode == UART_FIFOMODE_ENABLE) && (Size >= huart->NbRxDataToProcess))
  22477. 800a0bc: 68fb ldr r3, [r7, #12]
  22478. 800a0be: 6e5b ldr r3, [r3, #100] @ 0x64
  22479. 800a0c0: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  22480. 800a0c4: d14f bne.n 800a166 <UART_Start_Receive_IT+0x196>
  22481. 800a0c6: 68fb ldr r3, [r7, #12]
  22482. 800a0c8: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  22483. 800a0cc: 88fa ldrh r2, [r7, #6]
  22484. 800a0ce: 429a cmp r2, r3
  22485. 800a0d0: d349 bcc.n 800a166 <UART_Start_Receive_IT+0x196>
  22486. {
  22487. /* Set the Rx ISR function pointer according to the data word length */
  22488. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  22489. 800a0d2: 68fb ldr r3, [r7, #12]
  22490. 800a0d4: 689b ldr r3, [r3, #8]
  22491. 800a0d6: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  22492. 800a0da: d107 bne.n 800a0ec <UART_Start_Receive_IT+0x11c>
  22493. 800a0dc: 68fb ldr r3, [r7, #12]
  22494. 800a0de: 691b ldr r3, [r3, #16]
  22495. 800a0e0: 2b00 cmp r3, #0
  22496. 800a0e2: d103 bne.n 800a0ec <UART_Start_Receive_IT+0x11c>
  22497. {
  22498. huart->RxISR = UART_RxISR_16BIT_FIFOEN;
  22499. 800a0e4: 68fb ldr r3, [r7, #12]
  22500. 800a0e6: 4a47 ldr r2, [pc, #284] @ (800a204 <UART_Start_Receive_IT+0x234>)
  22501. 800a0e8: 675a str r2, [r3, #116] @ 0x74
  22502. 800a0ea: e002 b.n 800a0f2 <UART_Start_Receive_IT+0x122>
  22503. }
  22504. else
  22505. {
  22506. huart->RxISR = UART_RxISR_8BIT_FIFOEN;
  22507. 800a0ec: 68fb ldr r3, [r7, #12]
  22508. 800a0ee: 4a46 ldr r2, [pc, #280] @ (800a208 <UART_Start_Receive_IT+0x238>)
  22509. 800a0f0: 675a str r2, [r3, #116] @ 0x74
  22510. }
  22511. /* Enable the UART Parity Error interrupt and RX FIFO Threshold interrupt */
  22512. if (huart->Init.Parity != UART_PARITY_NONE)
  22513. 800a0f2: 68fb ldr r3, [r7, #12]
  22514. 800a0f4: 691b ldr r3, [r3, #16]
  22515. 800a0f6: 2b00 cmp r3, #0
  22516. 800a0f8: d01a beq.n 800a130 <UART_Start_Receive_IT+0x160>
  22517. {
  22518. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  22519. 800a0fa: 68fb ldr r3, [r7, #12]
  22520. 800a0fc: 681b ldr r3, [r3, #0]
  22521. 800a0fe: 653b str r3, [r7, #80] @ 0x50
  22522. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  22523. 800a100: 6d3b ldr r3, [r7, #80] @ 0x50
  22524. 800a102: e853 3f00 ldrex r3, [r3]
  22525. 800a106: 64fb str r3, [r7, #76] @ 0x4c
  22526. return(result);
  22527. 800a108: 6cfb ldr r3, [r7, #76] @ 0x4c
  22528. 800a10a: f443 7380 orr.w r3, r3, #256 @ 0x100
  22529. 800a10e: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  22530. 800a112: 68fb ldr r3, [r7, #12]
  22531. 800a114: 681b ldr r3, [r3, #0]
  22532. 800a116: 461a mov r2, r3
  22533. 800a118: f8d7 3080 ldr.w r3, [r7, #128] @ 0x80
  22534. 800a11c: 65fb str r3, [r7, #92] @ 0x5c
  22535. 800a11e: 65ba str r2, [r7, #88] @ 0x58
  22536. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  22537. 800a120: 6db9 ldr r1, [r7, #88] @ 0x58
  22538. 800a122: 6dfa ldr r2, [r7, #92] @ 0x5c
  22539. 800a124: e841 2300 strex r3, r2, [r1]
  22540. 800a128: 657b str r3, [r7, #84] @ 0x54
  22541. return(result);
  22542. 800a12a: 6d7b ldr r3, [r7, #84] @ 0x54
  22543. 800a12c: 2b00 cmp r3, #0
  22544. 800a12e: d1e4 bne.n 800a0fa <UART_Start_Receive_IT+0x12a>
  22545. }
  22546. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  22547. 800a130: 68fb ldr r3, [r7, #12]
  22548. 800a132: 681b ldr r3, [r3, #0]
  22549. 800a134: 3308 adds r3, #8
  22550. 800a136: 63fb str r3, [r7, #60] @ 0x3c
  22551. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  22552. 800a138: 6bfb ldr r3, [r7, #60] @ 0x3c
  22553. 800a13a: e853 3f00 ldrex r3, [r3]
  22554. 800a13e: 63bb str r3, [r7, #56] @ 0x38
  22555. return(result);
  22556. 800a140: 6bbb ldr r3, [r7, #56] @ 0x38
  22557. 800a142: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000
  22558. 800a146: 67fb str r3, [r7, #124] @ 0x7c
  22559. 800a148: 68fb ldr r3, [r7, #12]
  22560. 800a14a: 681b ldr r3, [r3, #0]
  22561. 800a14c: 3308 adds r3, #8
  22562. 800a14e: 6ffa ldr r2, [r7, #124] @ 0x7c
  22563. 800a150: 64ba str r2, [r7, #72] @ 0x48
  22564. 800a152: 647b str r3, [r7, #68] @ 0x44
  22565. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  22566. 800a154: 6c79 ldr r1, [r7, #68] @ 0x44
  22567. 800a156: 6cba ldr r2, [r7, #72] @ 0x48
  22568. 800a158: e841 2300 strex r3, r2, [r1]
  22569. 800a15c: 643b str r3, [r7, #64] @ 0x40
  22570. return(result);
  22571. 800a15e: 6c3b ldr r3, [r7, #64] @ 0x40
  22572. 800a160: 2b00 cmp r3, #0
  22573. 800a162: d1e5 bne.n 800a130 <UART_Start_Receive_IT+0x160>
  22574. 800a164: e046 b.n 800a1f4 <UART_Start_Receive_IT+0x224>
  22575. }
  22576. else
  22577. {
  22578. /* Set the Rx ISR function pointer according to the data word length */
  22579. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  22580. 800a166: 68fb ldr r3, [r7, #12]
  22581. 800a168: 689b ldr r3, [r3, #8]
  22582. 800a16a: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  22583. 800a16e: d107 bne.n 800a180 <UART_Start_Receive_IT+0x1b0>
  22584. 800a170: 68fb ldr r3, [r7, #12]
  22585. 800a172: 691b ldr r3, [r3, #16]
  22586. 800a174: 2b00 cmp r3, #0
  22587. 800a176: d103 bne.n 800a180 <UART_Start_Receive_IT+0x1b0>
  22588. {
  22589. huart->RxISR = UART_RxISR_16BIT;
  22590. 800a178: 68fb ldr r3, [r7, #12]
  22591. 800a17a: 4a24 ldr r2, [pc, #144] @ (800a20c <UART_Start_Receive_IT+0x23c>)
  22592. 800a17c: 675a str r2, [r3, #116] @ 0x74
  22593. 800a17e: e002 b.n 800a186 <UART_Start_Receive_IT+0x1b6>
  22594. }
  22595. else
  22596. {
  22597. huart->RxISR = UART_RxISR_8BIT;
  22598. 800a180: 68fb ldr r3, [r7, #12]
  22599. 800a182: 4a23 ldr r2, [pc, #140] @ (800a210 <UART_Start_Receive_IT+0x240>)
  22600. 800a184: 675a str r2, [r3, #116] @ 0x74
  22601. }
  22602. /* Enable the UART Parity Error interrupt and Data Register Not Empty interrupt */
  22603. if (huart->Init.Parity != UART_PARITY_NONE)
  22604. 800a186: 68fb ldr r3, [r7, #12]
  22605. 800a188: 691b ldr r3, [r3, #16]
  22606. 800a18a: 2b00 cmp r3, #0
  22607. 800a18c: d019 beq.n 800a1c2 <UART_Start_Receive_IT+0x1f2>
  22608. {
  22609. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE_RXFNEIE);
  22610. 800a18e: 68fb ldr r3, [r7, #12]
  22611. 800a190: 681b ldr r3, [r3, #0]
  22612. 800a192: 62bb str r3, [r7, #40] @ 0x28
  22613. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  22614. 800a194: 6abb ldr r3, [r7, #40] @ 0x28
  22615. 800a196: e853 3f00 ldrex r3, [r3]
  22616. 800a19a: 627b str r3, [r7, #36] @ 0x24
  22617. return(result);
  22618. 800a19c: 6a7b ldr r3, [r7, #36] @ 0x24
  22619. 800a19e: f443 7390 orr.w r3, r3, #288 @ 0x120
  22620. 800a1a2: 677b str r3, [r7, #116] @ 0x74
  22621. 800a1a4: 68fb ldr r3, [r7, #12]
  22622. 800a1a6: 681b ldr r3, [r3, #0]
  22623. 800a1a8: 461a mov r2, r3
  22624. 800a1aa: 6f7b ldr r3, [r7, #116] @ 0x74
  22625. 800a1ac: 637b str r3, [r7, #52] @ 0x34
  22626. 800a1ae: 633a str r2, [r7, #48] @ 0x30
  22627. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  22628. 800a1b0: 6b39 ldr r1, [r7, #48] @ 0x30
  22629. 800a1b2: 6b7a ldr r2, [r7, #52] @ 0x34
  22630. 800a1b4: e841 2300 strex r3, r2, [r1]
  22631. 800a1b8: 62fb str r3, [r7, #44] @ 0x2c
  22632. return(result);
  22633. 800a1ba: 6afb ldr r3, [r7, #44] @ 0x2c
  22634. 800a1bc: 2b00 cmp r3, #0
  22635. 800a1be: d1e6 bne.n 800a18e <UART_Start_Receive_IT+0x1be>
  22636. 800a1c0: e018 b.n 800a1f4 <UART_Start_Receive_IT+0x224>
  22637. }
  22638. else
  22639. {
  22640. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  22641. 800a1c2: 68fb ldr r3, [r7, #12]
  22642. 800a1c4: 681b ldr r3, [r3, #0]
  22643. 800a1c6: 617b str r3, [r7, #20]
  22644. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  22645. 800a1c8: 697b ldr r3, [r7, #20]
  22646. 800a1ca: e853 3f00 ldrex r3, [r3]
  22647. 800a1ce: 613b str r3, [r7, #16]
  22648. return(result);
  22649. 800a1d0: 693b ldr r3, [r7, #16]
  22650. 800a1d2: f043 0320 orr.w r3, r3, #32
  22651. 800a1d6: 67bb str r3, [r7, #120] @ 0x78
  22652. 800a1d8: 68fb ldr r3, [r7, #12]
  22653. 800a1da: 681b ldr r3, [r3, #0]
  22654. 800a1dc: 461a mov r2, r3
  22655. 800a1de: 6fbb ldr r3, [r7, #120] @ 0x78
  22656. 800a1e0: 623b str r3, [r7, #32]
  22657. 800a1e2: 61fa str r2, [r7, #28]
  22658. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  22659. 800a1e4: 69f9 ldr r1, [r7, #28]
  22660. 800a1e6: 6a3a ldr r2, [r7, #32]
  22661. 800a1e8: e841 2300 strex r3, r2, [r1]
  22662. 800a1ec: 61bb str r3, [r7, #24]
  22663. return(result);
  22664. 800a1ee: 69bb ldr r3, [r7, #24]
  22665. 800a1f0: 2b00 cmp r3, #0
  22666. 800a1f2: d1e6 bne.n 800a1c2 <UART_Start_Receive_IT+0x1f2>
  22667. }
  22668. }
  22669. return HAL_OK;
  22670. 800a1f4: 2300 movs r3, #0
  22671. }
  22672. 800a1f6: 4618 mov r0, r3
  22673. 800a1f8: 378c adds r7, #140 @ 0x8c
  22674. 800a1fa: 46bd mov sp, r7
  22675. 800a1fc: f85d 7b04 ldr.w r7, [sp], #4
  22676. 800a200: 4770 bx lr
  22677. 800a202: bf00 nop
  22678. 800a204: 0800ad79 .word 0x0800ad79
  22679. 800a208: 0800aa19 .word 0x0800aa19
  22680. 800a20c: 0800a861 .word 0x0800a861
  22681. 800a210: 0800a6a9 .word 0x0800a6a9
  22682. 0800a214 <UART_EndRxTransfer>:
  22683. * @brief End ongoing Rx transfer on UART peripheral (following error detection or Reception completion).
  22684. * @param huart UART handle.
  22685. * @retval None
  22686. */
  22687. static void UART_EndRxTransfer(UART_HandleTypeDef *huart)
  22688. {
  22689. 800a214: b480 push {r7}
  22690. 800a216: b095 sub sp, #84 @ 0x54
  22691. 800a218: af00 add r7, sp, #0
  22692. 800a21a: 6078 str r0, [r7, #4]
  22693. /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
  22694. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  22695. 800a21c: 687b ldr r3, [r7, #4]
  22696. 800a21e: 681b ldr r3, [r3, #0]
  22697. 800a220: 637b str r3, [r7, #52] @ 0x34
  22698. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  22699. 800a222: 6b7b ldr r3, [r7, #52] @ 0x34
  22700. 800a224: e853 3f00 ldrex r3, [r3]
  22701. 800a228: 633b str r3, [r7, #48] @ 0x30
  22702. return(result);
  22703. 800a22a: 6b3b ldr r3, [r7, #48] @ 0x30
  22704. 800a22c: f423 7390 bic.w r3, r3, #288 @ 0x120
  22705. 800a230: 64fb str r3, [r7, #76] @ 0x4c
  22706. 800a232: 687b ldr r3, [r7, #4]
  22707. 800a234: 681b ldr r3, [r3, #0]
  22708. 800a236: 461a mov r2, r3
  22709. 800a238: 6cfb ldr r3, [r7, #76] @ 0x4c
  22710. 800a23a: 643b str r3, [r7, #64] @ 0x40
  22711. 800a23c: 63fa str r2, [r7, #60] @ 0x3c
  22712. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  22713. 800a23e: 6bf9 ldr r1, [r7, #60] @ 0x3c
  22714. 800a240: 6c3a ldr r2, [r7, #64] @ 0x40
  22715. 800a242: e841 2300 strex r3, r2, [r1]
  22716. 800a246: 63bb str r3, [r7, #56] @ 0x38
  22717. return(result);
  22718. 800a248: 6bbb ldr r3, [r7, #56] @ 0x38
  22719. 800a24a: 2b00 cmp r3, #0
  22720. 800a24c: d1e6 bne.n 800a21c <UART_EndRxTransfer+0x8>
  22721. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  22722. 800a24e: 687b ldr r3, [r7, #4]
  22723. 800a250: 681b ldr r3, [r3, #0]
  22724. 800a252: 3308 adds r3, #8
  22725. 800a254: 623b str r3, [r7, #32]
  22726. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  22727. 800a256: 6a3b ldr r3, [r7, #32]
  22728. 800a258: e853 3f00 ldrex r3, [r3]
  22729. 800a25c: 61fb str r3, [r7, #28]
  22730. return(result);
  22731. 800a25e: 69fa ldr r2, [r7, #28]
  22732. 800a260: 4b1e ldr r3, [pc, #120] @ (800a2dc <UART_EndRxTransfer+0xc8>)
  22733. 800a262: 4013 ands r3, r2
  22734. 800a264: 64bb str r3, [r7, #72] @ 0x48
  22735. 800a266: 687b ldr r3, [r7, #4]
  22736. 800a268: 681b ldr r3, [r3, #0]
  22737. 800a26a: 3308 adds r3, #8
  22738. 800a26c: 6cba ldr r2, [r7, #72] @ 0x48
  22739. 800a26e: 62fa str r2, [r7, #44] @ 0x2c
  22740. 800a270: 62bb str r3, [r7, #40] @ 0x28
  22741. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  22742. 800a272: 6ab9 ldr r1, [r7, #40] @ 0x28
  22743. 800a274: 6afa ldr r2, [r7, #44] @ 0x2c
  22744. 800a276: e841 2300 strex r3, r2, [r1]
  22745. 800a27a: 627b str r3, [r7, #36] @ 0x24
  22746. return(result);
  22747. 800a27c: 6a7b ldr r3, [r7, #36] @ 0x24
  22748. 800a27e: 2b00 cmp r3, #0
  22749. 800a280: d1e5 bne.n 800a24e <UART_EndRxTransfer+0x3a>
  22750. /* In case of reception waiting for IDLE event, disable also the IDLE IE interrupt source */
  22751. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  22752. 800a282: 687b ldr r3, [r7, #4]
  22753. 800a284: 6edb ldr r3, [r3, #108] @ 0x6c
  22754. 800a286: 2b01 cmp r3, #1
  22755. 800a288: d118 bne.n 800a2bc <UART_EndRxTransfer+0xa8>
  22756. {
  22757. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  22758. 800a28a: 687b ldr r3, [r7, #4]
  22759. 800a28c: 681b ldr r3, [r3, #0]
  22760. 800a28e: 60fb str r3, [r7, #12]
  22761. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  22762. 800a290: 68fb ldr r3, [r7, #12]
  22763. 800a292: e853 3f00 ldrex r3, [r3]
  22764. 800a296: 60bb str r3, [r7, #8]
  22765. return(result);
  22766. 800a298: 68bb ldr r3, [r7, #8]
  22767. 800a29a: f023 0310 bic.w r3, r3, #16
  22768. 800a29e: 647b str r3, [r7, #68] @ 0x44
  22769. 800a2a0: 687b ldr r3, [r7, #4]
  22770. 800a2a2: 681b ldr r3, [r3, #0]
  22771. 800a2a4: 461a mov r2, r3
  22772. 800a2a6: 6c7b ldr r3, [r7, #68] @ 0x44
  22773. 800a2a8: 61bb str r3, [r7, #24]
  22774. 800a2aa: 617a str r2, [r7, #20]
  22775. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  22776. 800a2ac: 6979 ldr r1, [r7, #20]
  22777. 800a2ae: 69ba ldr r2, [r7, #24]
  22778. 800a2b0: e841 2300 strex r3, r2, [r1]
  22779. 800a2b4: 613b str r3, [r7, #16]
  22780. return(result);
  22781. 800a2b6: 693b ldr r3, [r7, #16]
  22782. 800a2b8: 2b00 cmp r3, #0
  22783. 800a2ba: d1e6 bne.n 800a28a <UART_EndRxTransfer+0x76>
  22784. }
  22785. /* At end of Rx process, restore huart->RxState to Ready */
  22786. huart->RxState = HAL_UART_STATE_READY;
  22787. 800a2bc: 687b ldr r3, [r7, #4]
  22788. 800a2be: 2220 movs r2, #32
  22789. 800a2c0: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  22790. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  22791. 800a2c4: 687b ldr r3, [r7, #4]
  22792. 800a2c6: 2200 movs r2, #0
  22793. 800a2c8: 66da str r2, [r3, #108] @ 0x6c
  22794. /* Reset RxIsr function pointer */
  22795. huart->RxISR = NULL;
  22796. 800a2ca: 687b ldr r3, [r7, #4]
  22797. 800a2cc: 2200 movs r2, #0
  22798. 800a2ce: 675a str r2, [r3, #116] @ 0x74
  22799. }
  22800. 800a2d0: bf00 nop
  22801. 800a2d2: 3754 adds r7, #84 @ 0x54
  22802. 800a2d4: 46bd mov sp, r7
  22803. 800a2d6: f85d 7b04 ldr.w r7, [sp], #4
  22804. 800a2da: 4770 bx lr
  22805. 800a2dc: effffffe .word 0xeffffffe
  22806. 0800a2e0 <UART_DMAAbortOnError>:
  22807. * (To be called at end of DMA Abort procedure following error occurrence).
  22808. * @param hdma DMA handle.
  22809. * @retval None
  22810. */
  22811. static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma)
  22812. {
  22813. 800a2e0: b580 push {r7, lr}
  22814. 800a2e2: b084 sub sp, #16
  22815. 800a2e4: af00 add r7, sp, #0
  22816. 800a2e6: 6078 str r0, [r7, #4]
  22817. UART_HandleTypeDef *huart = (UART_HandleTypeDef *)(hdma->Parent);
  22818. 800a2e8: 687b ldr r3, [r7, #4]
  22819. 800a2ea: 6b9b ldr r3, [r3, #56] @ 0x38
  22820. 800a2ec: 60fb str r3, [r7, #12]
  22821. huart->RxXferCount = 0U;
  22822. 800a2ee: 68fb ldr r3, [r7, #12]
  22823. 800a2f0: 2200 movs r2, #0
  22824. 800a2f2: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  22825. huart->TxXferCount = 0U;
  22826. 800a2f6: 68fb ldr r3, [r7, #12]
  22827. 800a2f8: 2200 movs r2, #0
  22828. 800a2fa: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  22829. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  22830. /*Call registered error callback*/
  22831. huart->ErrorCallback(huart);
  22832. #else
  22833. /*Call legacy weak error callback*/
  22834. HAL_UART_ErrorCallback(huart);
  22835. 800a2fe: 68f8 ldr r0, [r7, #12]
  22836. 800a300: f7fe ff3a bl 8009178 <HAL_UART_ErrorCallback>
  22837. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  22838. }
  22839. 800a304: bf00 nop
  22840. 800a306: 3710 adds r7, #16
  22841. 800a308: 46bd mov sp, r7
  22842. 800a30a: bd80 pop {r7, pc}
  22843. 0800a30c <UART_TxISR_8BIT>:
  22844. * interruptions have been enabled by HAL_UART_Transmit_IT().
  22845. * @param huart UART handle.
  22846. * @retval None
  22847. */
  22848. static void UART_TxISR_8BIT(UART_HandleTypeDef *huart)
  22849. {
  22850. 800a30c: b480 push {r7}
  22851. 800a30e: b08f sub sp, #60 @ 0x3c
  22852. 800a310: af00 add r7, sp, #0
  22853. 800a312: 6078 str r0, [r7, #4]
  22854. /* Check that a Tx process is ongoing */
  22855. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  22856. 800a314: 687b ldr r3, [r7, #4]
  22857. 800a316: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  22858. 800a31a: 2b21 cmp r3, #33 @ 0x21
  22859. 800a31c: d14c bne.n 800a3b8 <UART_TxISR_8BIT+0xac>
  22860. {
  22861. if (huart->TxXferCount == 0U)
  22862. 800a31e: 687b ldr r3, [r7, #4]
  22863. 800a320: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  22864. 800a324: b29b uxth r3, r3
  22865. 800a326: 2b00 cmp r3, #0
  22866. 800a328: d132 bne.n 800a390 <UART_TxISR_8BIT+0x84>
  22867. {
  22868. /* Disable the UART Transmit Data Register Empty Interrupt */
  22869. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  22870. 800a32a: 687b ldr r3, [r7, #4]
  22871. 800a32c: 681b ldr r3, [r3, #0]
  22872. 800a32e: 623b str r3, [r7, #32]
  22873. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  22874. 800a330: 6a3b ldr r3, [r7, #32]
  22875. 800a332: e853 3f00 ldrex r3, [r3]
  22876. 800a336: 61fb str r3, [r7, #28]
  22877. return(result);
  22878. 800a338: 69fb ldr r3, [r7, #28]
  22879. 800a33a: f023 0380 bic.w r3, r3, #128 @ 0x80
  22880. 800a33e: 637b str r3, [r7, #52] @ 0x34
  22881. 800a340: 687b ldr r3, [r7, #4]
  22882. 800a342: 681b ldr r3, [r3, #0]
  22883. 800a344: 461a mov r2, r3
  22884. 800a346: 6b7b ldr r3, [r7, #52] @ 0x34
  22885. 800a348: 62fb str r3, [r7, #44] @ 0x2c
  22886. 800a34a: 62ba str r2, [r7, #40] @ 0x28
  22887. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  22888. 800a34c: 6ab9 ldr r1, [r7, #40] @ 0x28
  22889. 800a34e: 6afa ldr r2, [r7, #44] @ 0x2c
  22890. 800a350: e841 2300 strex r3, r2, [r1]
  22891. 800a354: 627b str r3, [r7, #36] @ 0x24
  22892. return(result);
  22893. 800a356: 6a7b ldr r3, [r7, #36] @ 0x24
  22894. 800a358: 2b00 cmp r3, #0
  22895. 800a35a: d1e6 bne.n 800a32a <UART_TxISR_8BIT+0x1e>
  22896. /* Enable the UART Transmit Complete Interrupt */
  22897. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  22898. 800a35c: 687b ldr r3, [r7, #4]
  22899. 800a35e: 681b ldr r3, [r3, #0]
  22900. 800a360: 60fb str r3, [r7, #12]
  22901. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  22902. 800a362: 68fb ldr r3, [r7, #12]
  22903. 800a364: e853 3f00 ldrex r3, [r3]
  22904. 800a368: 60bb str r3, [r7, #8]
  22905. return(result);
  22906. 800a36a: 68bb ldr r3, [r7, #8]
  22907. 800a36c: f043 0340 orr.w r3, r3, #64 @ 0x40
  22908. 800a370: 633b str r3, [r7, #48] @ 0x30
  22909. 800a372: 687b ldr r3, [r7, #4]
  22910. 800a374: 681b ldr r3, [r3, #0]
  22911. 800a376: 461a mov r2, r3
  22912. 800a378: 6b3b ldr r3, [r7, #48] @ 0x30
  22913. 800a37a: 61bb str r3, [r7, #24]
  22914. 800a37c: 617a str r2, [r7, #20]
  22915. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  22916. 800a37e: 6979 ldr r1, [r7, #20]
  22917. 800a380: 69ba ldr r2, [r7, #24]
  22918. 800a382: e841 2300 strex r3, r2, [r1]
  22919. 800a386: 613b str r3, [r7, #16]
  22920. return(result);
  22921. 800a388: 693b ldr r3, [r7, #16]
  22922. 800a38a: 2b00 cmp r3, #0
  22923. 800a38c: d1e6 bne.n 800a35c <UART_TxISR_8BIT+0x50>
  22924. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  22925. huart->pTxBuffPtr++;
  22926. huart->TxXferCount--;
  22927. }
  22928. }
  22929. }
  22930. 800a38e: e013 b.n 800a3b8 <UART_TxISR_8BIT+0xac>
  22931. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  22932. 800a390: 687b ldr r3, [r7, #4]
  22933. 800a392: 6d1b ldr r3, [r3, #80] @ 0x50
  22934. 800a394: 781a ldrb r2, [r3, #0]
  22935. 800a396: 687b ldr r3, [r7, #4]
  22936. 800a398: 681b ldr r3, [r3, #0]
  22937. 800a39a: 629a str r2, [r3, #40] @ 0x28
  22938. huart->pTxBuffPtr++;
  22939. 800a39c: 687b ldr r3, [r7, #4]
  22940. 800a39e: 6d1b ldr r3, [r3, #80] @ 0x50
  22941. 800a3a0: 1c5a adds r2, r3, #1
  22942. 800a3a2: 687b ldr r3, [r7, #4]
  22943. 800a3a4: 651a str r2, [r3, #80] @ 0x50
  22944. huart->TxXferCount--;
  22945. 800a3a6: 687b ldr r3, [r7, #4]
  22946. 800a3a8: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  22947. 800a3ac: b29b uxth r3, r3
  22948. 800a3ae: 3b01 subs r3, #1
  22949. 800a3b0: b29a uxth r2, r3
  22950. 800a3b2: 687b ldr r3, [r7, #4]
  22951. 800a3b4: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  22952. }
  22953. 800a3b8: bf00 nop
  22954. 800a3ba: 373c adds r7, #60 @ 0x3c
  22955. 800a3bc: 46bd mov sp, r7
  22956. 800a3be: f85d 7b04 ldr.w r7, [sp], #4
  22957. 800a3c2: 4770 bx lr
  22958. 0800a3c4 <UART_TxISR_16BIT>:
  22959. * interruptions have been enabled by HAL_UART_Transmit_IT().
  22960. * @param huart UART handle.
  22961. * @retval None
  22962. */
  22963. static void UART_TxISR_16BIT(UART_HandleTypeDef *huart)
  22964. {
  22965. 800a3c4: b480 push {r7}
  22966. 800a3c6: b091 sub sp, #68 @ 0x44
  22967. 800a3c8: af00 add r7, sp, #0
  22968. 800a3ca: 6078 str r0, [r7, #4]
  22969. const uint16_t *tmp;
  22970. /* Check that a Tx process is ongoing */
  22971. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  22972. 800a3cc: 687b ldr r3, [r7, #4]
  22973. 800a3ce: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  22974. 800a3d2: 2b21 cmp r3, #33 @ 0x21
  22975. 800a3d4: d151 bne.n 800a47a <UART_TxISR_16BIT+0xb6>
  22976. {
  22977. if (huart->TxXferCount == 0U)
  22978. 800a3d6: 687b ldr r3, [r7, #4]
  22979. 800a3d8: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  22980. 800a3dc: b29b uxth r3, r3
  22981. 800a3de: 2b00 cmp r3, #0
  22982. 800a3e0: d132 bne.n 800a448 <UART_TxISR_16BIT+0x84>
  22983. {
  22984. /* Disable the UART Transmit Data Register Empty Interrupt */
  22985. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  22986. 800a3e2: 687b ldr r3, [r7, #4]
  22987. 800a3e4: 681b ldr r3, [r3, #0]
  22988. 800a3e6: 627b str r3, [r7, #36] @ 0x24
  22989. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  22990. 800a3e8: 6a7b ldr r3, [r7, #36] @ 0x24
  22991. 800a3ea: e853 3f00 ldrex r3, [r3]
  22992. 800a3ee: 623b str r3, [r7, #32]
  22993. return(result);
  22994. 800a3f0: 6a3b ldr r3, [r7, #32]
  22995. 800a3f2: f023 0380 bic.w r3, r3, #128 @ 0x80
  22996. 800a3f6: 63bb str r3, [r7, #56] @ 0x38
  22997. 800a3f8: 687b ldr r3, [r7, #4]
  22998. 800a3fa: 681b ldr r3, [r3, #0]
  22999. 800a3fc: 461a mov r2, r3
  23000. 800a3fe: 6bbb ldr r3, [r7, #56] @ 0x38
  23001. 800a400: 633b str r3, [r7, #48] @ 0x30
  23002. 800a402: 62fa str r2, [r7, #44] @ 0x2c
  23003. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23004. 800a404: 6af9 ldr r1, [r7, #44] @ 0x2c
  23005. 800a406: 6b3a ldr r2, [r7, #48] @ 0x30
  23006. 800a408: e841 2300 strex r3, r2, [r1]
  23007. 800a40c: 62bb str r3, [r7, #40] @ 0x28
  23008. return(result);
  23009. 800a40e: 6abb ldr r3, [r7, #40] @ 0x28
  23010. 800a410: 2b00 cmp r3, #0
  23011. 800a412: d1e6 bne.n 800a3e2 <UART_TxISR_16BIT+0x1e>
  23012. /* Enable the UART Transmit Complete Interrupt */
  23013. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  23014. 800a414: 687b ldr r3, [r7, #4]
  23015. 800a416: 681b ldr r3, [r3, #0]
  23016. 800a418: 613b str r3, [r7, #16]
  23017. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  23018. 800a41a: 693b ldr r3, [r7, #16]
  23019. 800a41c: e853 3f00 ldrex r3, [r3]
  23020. 800a420: 60fb str r3, [r7, #12]
  23021. return(result);
  23022. 800a422: 68fb ldr r3, [r7, #12]
  23023. 800a424: f043 0340 orr.w r3, r3, #64 @ 0x40
  23024. 800a428: 637b str r3, [r7, #52] @ 0x34
  23025. 800a42a: 687b ldr r3, [r7, #4]
  23026. 800a42c: 681b ldr r3, [r3, #0]
  23027. 800a42e: 461a mov r2, r3
  23028. 800a430: 6b7b ldr r3, [r7, #52] @ 0x34
  23029. 800a432: 61fb str r3, [r7, #28]
  23030. 800a434: 61ba str r2, [r7, #24]
  23031. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23032. 800a436: 69b9 ldr r1, [r7, #24]
  23033. 800a438: 69fa ldr r2, [r7, #28]
  23034. 800a43a: e841 2300 strex r3, r2, [r1]
  23035. 800a43e: 617b str r3, [r7, #20]
  23036. return(result);
  23037. 800a440: 697b ldr r3, [r7, #20]
  23038. 800a442: 2b00 cmp r3, #0
  23039. 800a444: d1e6 bne.n 800a414 <UART_TxISR_16BIT+0x50>
  23040. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  23041. huart->pTxBuffPtr += 2U;
  23042. huart->TxXferCount--;
  23043. }
  23044. }
  23045. }
  23046. 800a446: e018 b.n 800a47a <UART_TxISR_16BIT+0xb6>
  23047. tmp = (const uint16_t *) huart->pTxBuffPtr;
  23048. 800a448: 687b ldr r3, [r7, #4]
  23049. 800a44a: 6d1b ldr r3, [r3, #80] @ 0x50
  23050. 800a44c: 63fb str r3, [r7, #60] @ 0x3c
  23051. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  23052. 800a44e: 6bfb ldr r3, [r7, #60] @ 0x3c
  23053. 800a450: 881b ldrh r3, [r3, #0]
  23054. 800a452: 461a mov r2, r3
  23055. 800a454: 687b ldr r3, [r7, #4]
  23056. 800a456: 681b ldr r3, [r3, #0]
  23057. 800a458: f3c2 0208 ubfx r2, r2, #0, #9
  23058. 800a45c: 629a str r2, [r3, #40] @ 0x28
  23059. huart->pTxBuffPtr += 2U;
  23060. 800a45e: 687b ldr r3, [r7, #4]
  23061. 800a460: 6d1b ldr r3, [r3, #80] @ 0x50
  23062. 800a462: 1c9a adds r2, r3, #2
  23063. 800a464: 687b ldr r3, [r7, #4]
  23064. 800a466: 651a str r2, [r3, #80] @ 0x50
  23065. huart->TxXferCount--;
  23066. 800a468: 687b ldr r3, [r7, #4]
  23067. 800a46a: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  23068. 800a46e: b29b uxth r3, r3
  23069. 800a470: 3b01 subs r3, #1
  23070. 800a472: b29a uxth r2, r3
  23071. 800a474: 687b ldr r3, [r7, #4]
  23072. 800a476: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  23073. }
  23074. 800a47a: bf00 nop
  23075. 800a47c: 3744 adds r7, #68 @ 0x44
  23076. 800a47e: 46bd mov sp, r7
  23077. 800a480: f85d 7b04 ldr.w r7, [sp], #4
  23078. 800a484: 4770 bx lr
  23079. 0800a486 <UART_TxISR_8BIT_FIFOEN>:
  23080. * interruptions have been enabled by HAL_UART_Transmit_IT().
  23081. * @param huart UART handle.
  23082. * @retval None
  23083. */
  23084. static void UART_TxISR_8BIT_FIFOEN(UART_HandleTypeDef *huart)
  23085. {
  23086. 800a486: b480 push {r7}
  23087. 800a488: b091 sub sp, #68 @ 0x44
  23088. 800a48a: af00 add r7, sp, #0
  23089. 800a48c: 6078 str r0, [r7, #4]
  23090. uint16_t nb_tx_data;
  23091. /* Check that a Tx process is ongoing */
  23092. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  23093. 800a48e: 687b ldr r3, [r7, #4]
  23094. 800a490: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  23095. 800a494: 2b21 cmp r3, #33 @ 0x21
  23096. 800a496: d160 bne.n 800a55a <UART_TxISR_8BIT_FIFOEN+0xd4>
  23097. {
  23098. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  23099. 800a498: 687b ldr r3, [r7, #4]
  23100. 800a49a: f8b3 306a ldrh.w r3, [r3, #106] @ 0x6a
  23101. 800a49e: 87fb strh r3, [r7, #62] @ 0x3e
  23102. 800a4a0: e057 b.n 800a552 <UART_TxISR_8BIT_FIFOEN+0xcc>
  23103. {
  23104. if (huart->TxXferCount == 0U)
  23105. 800a4a2: 687b ldr r3, [r7, #4]
  23106. 800a4a4: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  23107. 800a4a8: b29b uxth r3, r3
  23108. 800a4aa: 2b00 cmp r3, #0
  23109. 800a4ac: d133 bne.n 800a516 <UART_TxISR_8BIT_FIFOEN+0x90>
  23110. {
  23111. /* Disable the TX FIFO threshold interrupt */
  23112. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  23113. 800a4ae: 687b ldr r3, [r7, #4]
  23114. 800a4b0: 681b ldr r3, [r3, #0]
  23115. 800a4b2: 3308 adds r3, #8
  23116. 800a4b4: 627b str r3, [r7, #36] @ 0x24
  23117. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  23118. 800a4b6: 6a7b ldr r3, [r7, #36] @ 0x24
  23119. 800a4b8: e853 3f00 ldrex r3, [r3]
  23120. 800a4bc: 623b str r3, [r7, #32]
  23121. return(result);
  23122. 800a4be: 6a3b ldr r3, [r7, #32]
  23123. 800a4c0: f423 0300 bic.w r3, r3, #8388608 @ 0x800000
  23124. 800a4c4: 63bb str r3, [r7, #56] @ 0x38
  23125. 800a4c6: 687b ldr r3, [r7, #4]
  23126. 800a4c8: 681b ldr r3, [r3, #0]
  23127. 800a4ca: 3308 adds r3, #8
  23128. 800a4cc: 6bba ldr r2, [r7, #56] @ 0x38
  23129. 800a4ce: 633a str r2, [r7, #48] @ 0x30
  23130. 800a4d0: 62fb str r3, [r7, #44] @ 0x2c
  23131. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23132. 800a4d2: 6af9 ldr r1, [r7, #44] @ 0x2c
  23133. 800a4d4: 6b3a ldr r2, [r7, #48] @ 0x30
  23134. 800a4d6: e841 2300 strex r3, r2, [r1]
  23135. 800a4da: 62bb str r3, [r7, #40] @ 0x28
  23136. return(result);
  23137. 800a4dc: 6abb ldr r3, [r7, #40] @ 0x28
  23138. 800a4de: 2b00 cmp r3, #0
  23139. 800a4e0: d1e5 bne.n 800a4ae <UART_TxISR_8BIT_FIFOEN+0x28>
  23140. /* Enable the UART Transmit Complete Interrupt */
  23141. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  23142. 800a4e2: 687b ldr r3, [r7, #4]
  23143. 800a4e4: 681b ldr r3, [r3, #0]
  23144. 800a4e6: 613b str r3, [r7, #16]
  23145. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  23146. 800a4e8: 693b ldr r3, [r7, #16]
  23147. 800a4ea: e853 3f00 ldrex r3, [r3]
  23148. 800a4ee: 60fb str r3, [r7, #12]
  23149. return(result);
  23150. 800a4f0: 68fb ldr r3, [r7, #12]
  23151. 800a4f2: f043 0340 orr.w r3, r3, #64 @ 0x40
  23152. 800a4f6: 637b str r3, [r7, #52] @ 0x34
  23153. 800a4f8: 687b ldr r3, [r7, #4]
  23154. 800a4fa: 681b ldr r3, [r3, #0]
  23155. 800a4fc: 461a mov r2, r3
  23156. 800a4fe: 6b7b ldr r3, [r7, #52] @ 0x34
  23157. 800a500: 61fb str r3, [r7, #28]
  23158. 800a502: 61ba str r2, [r7, #24]
  23159. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23160. 800a504: 69b9 ldr r1, [r7, #24]
  23161. 800a506: 69fa ldr r2, [r7, #28]
  23162. 800a508: e841 2300 strex r3, r2, [r1]
  23163. 800a50c: 617b str r3, [r7, #20]
  23164. return(result);
  23165. 800a50e: 697b ldr r3, [r7, #20]
  23166. 800a510: 2b00 cmp r3, #0
  23167. 800a512: d1e6 bne.n 800a4e2 <UART_TxISR_8BIT_FIFOEN+0x5c>
  23168. break; /* force exit loop */
  23169. 800a514: e021 b.n 800a55a <UART_TxISR_8BIT_FIFOEN+0xd4>
  23170. }
  23171. else if (READ_BIT(huart->Instance->ISR, USART_ISR_TXE_TXFNF) != 0U)
  23172. 800a516: 687b ldr r3, [r7, #4]
  23173. 800a518: 681b ldr r3, [r3, #0]
  23174. 800a51a: 69db ldr r3, [r3, #28]
  23175. 800a51c: f003 0380 and.w r3, r3, #128 @ 0x80
  23176. 800a520: 2b00 cmp r3, #0
  23177. 800a522: d013 beq.n 800a54c <UART_TxISR_8BIT_FIFOEN+0xc6>
  23178. {
  23179. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  23180. 800a524: 687b ldr r3, [r7, #4]
  23181. 800a526: 6d1b ldr r3, [r3, #80] @ 0x50
  23182. 800a528: 781a ldrb r2, [r3, #0]
  23183. 800a52a: 687b ldr r3, [r7, #4]
  23184. 800a52c: 681b ldr r3, [r3, #0]
  23185. 800a52e: 629a str r2, [r3, #40] @ 0x28
  23186. huart->pTxBuffPtr++;
  23187. 800a530: 687b ldr r3, [r7, #4]
  23188. 800a532: 6d1b ldr r3, [r3, #80] @ 0x50
  23189. 800a534: 1c5a adds r2, r3, #1
  23190. 800a536: 687b ldr r3, [r7, #4]
  23191. 800a538: 651a str r2, [r3, #80] @ 0x50
  23192. huart->TxXferCount--;
  23193. 800a53a: 687b ldr r3, [r7, #4]
  23194. 800a53c: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  23195. 800a540: b29b uxth r3, r3
  23196. 800a542: 3b01 subs r3, #1
  23197. 800a544: b29a uxth r2, r3
  23198. 800a546: 687b ldr r3, [r7, #4]
  23199. 800a548: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  23200. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  23201. 800a54c: 8ffb ldrh r3, [r7, #62] @ 0x3e
  23202. 800a54e: 3b01 subs r3, #1
  23203. 800a550: 87fb strh r3, [r7, #62] @ 0x3e
  23204. 800a552: 8ffb ldrh r3, [r7, #62] @ 0x3e
  23205. 800a554: 2b00 cmp r3, #0
  23206. 800a556: d1a4 bne.n 800a4a2 <UART_TxISR_8BIT_FIFOEN+0x1c>
  23207. {
  23208. /* Nothing to do */
  23209. }
  23210. }
  23211. }
  23212. }
  23213. 800a558: e7ff b.n 800a55a <UART_TxISR_8BIT_FIFOEN+0xd4>
  23214. 800a55a: bf00 nop
  23215. 800a55c: 3744 adds r7, #68 @ 0x44
  23216. 800a55e: 46bd mov sp, r7
  23217. 800a560: f85d 7b04 ldr.w r7, [sp], #4
  23218. 800a564: 4770 bx lr
  23219. 0800a566 <UART_TxISR_16BIT_FIFOEN>:
  23220. * interruptions have been enabled by HAL_UART_Transmit_IT().
  23221. * @param huart UART handle.
  23222. * @retval None
  23223. */
  23224. static void UART_TxISR_16BIT_FIFOEN(UART_HandleTypeDef *huart)
  23225. {
  23226. 800a566: b480 push {r7}
  23227. 800a568: b091 sub sp, #68 @ 0x44
  23228. 800a56a: af00 add r7, sp, #0
  23229. 800a56c: 6078 str r0, [r7, #4]
  23230. const uint16_t *tmp;
  23231. uint16_t nb_tx_data;
  23232. /* Check that a Tx process is ongoing */
  23233. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  23234. 800a56e: 687b ldr r3, [r7, #4]
  23235. 800a570: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  23236. 800a574: 2b21 cmp r3, #33 @ 0x21
  23237. 800a576: d165 bne.n 800a644 <UART_TxISR_16BIT_FIFOEN+0xde>
  23238. {
  23239. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  23240. 800a578: 687b ldr r3, [r7, #4]
  23241. 800a57a: f8b3 306a ldrh.w r3, [r3, #106] @ 0x6a
  23242. 800a57e: 87fb strh r3, [r7, #62] @ 0x3e
  23243. 800a580: e05c b.n 800a63c <UART_TxISR_16BIT_FIFOEN+0xd6>
  23244. {
  23245. if (huart->TxXferCount == 0U)
  23246. 800a582: 687b ldr r3, [r7, #4]
  23247. 800a584: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  23248. 800a588: b29b uxth r3, r3
  23249. 800a58a: 2b00 cmp r3, #0
  23250. 800a58c: d133 bne.n 800a5f6 <UART_TxISR_16BIT_FIFOEN+0x90>
  23251. {
  23252. /* Disable the TX FIFO threshold interrupt */
  23253. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  23254. 800a58e: 687b ldr r3, [r7, #4]
  23255. 800a590: 681b ldr r3, [r3, #0]
  23256. 800a592: 3308 adds r3, #8
  23257. 800a594: 623b str r3, [r7, #32]
  23258. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  23259. 800a596: 6a3b ldr r3, [r7, #32]
  23260. 800a598: e853 3f00 ldrex r3, [r3]
  23261. 800a59c: 61fb str r3, [r7, #28]
  23262. return(result);
  23263. 800a59e: 69fb ldr r3, [r7, #28]
  23264. 800a5a0: f423 0300 bic.w r3, r3, #8388608 @ 0x800000
  23265. 800a5a4: 637b str r3, [r7, #52] @ 0x34
  23266. 800a5a6: 687b ldr r3, [r7, #4]
  23267. 800a5a8: 681b ldr r3, [r3, #0]
  23268. 800a5aa: 3308 adds r3, #8
  23269. 800a5ac: 6b7a ldr r2, [r7, #52] @ 0x34
  23270. 800a5ae: 62fa str r2, [r7, #44] @ 0x2c
  23271. 800a5b0: 62bb str r3, [r7, #40] @ 0x28
  23272. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23273. 800a5b2: 6ab9 ldr r1, [r7, #40] @ 0x28
  23274. 800a5b4: 6afa ldr r2, [r7, #44] @ 0x2c
  23275. 800a5b6: e841 2300 strex r3, r2, [r1]
  23276. 800a5ba: 627b str r3, [r7, #36] @ 0x24
  23277. return(result);
  23278. 800a5bc: 6a7b ldr r3, [r7, #36] @ 0x24
  23279. 800a5be: 2b00 cmp r3, #0
  23280. 800a5c0: d1e5 bne.n 800a58e <UART_TxISR_16BIT_FIFOEN+0x28>
  23281. /* Enable the UART Transmit Complete Interrupt */
  23282. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  23283. 800a5c2: 687b ldr r3, [r7, #4]
  23284. 800a5c4: 681b ldr r3, [r3, #0]
  23285. 800a5c6: 60fb str r3, [r7, #12]
  23286. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  23287. 800a5c8: 68fb ldr r3, [r7, #12]
  23288. 800a5ca: e853 3f00 ldrex r3, [r3]
  23289. 800a5ce: 60bb str r3, [r7, #8]
  23290. return(result);
  23291. 800a5d0: 68bb ldr r3, [r7, #8]
  23292. 800a5d2: f043 0340 orr.w r3, r3, #64 @ 0x40
  23293. 800a5d6: 633b str r3, [r7, #48] @ 0x30
  23294. 800a5d8: 687b ldr r3, [r7, #4]
  23295. 800a5da: 681b ldr r3, [r3, #0]
  23296. 800a5dc: 461a mov r2, r3
  23297. 800a5de: 6b3b ldr r3, [r7, #48] @ 0x30
  23298. 800a5e0: 61bb str r3, [r7, #24]
  23299. 800a5e2: 617a str r2, [r7, #20]
  23300. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23301. 800a5e4: 6979 ldr r1, [r7, #20]
  23302. 800a5e6: 69ba ldr r2, [r7, #24]
  23303. 800a5e8: e841 2300 strex r3, r2, [r1]
  23304. 800a5ec: 613b str r3, [r7, #16]
  23305. return(result);
  23306. 800a5ee: 693b ldr r3, [r7, #16]
  23307. 800a5f0: 2b00 cmp r3, #0
  23308. 800a5f2: d1e6 bne.n 800a5c2 <UART_TxISR_16BIT_FIFOEN+0x5c>
  23309. break; /* force exit loop */
  23310. 800a5f4: e026 b.n 800a644 <UART_TxISR_16BIT_FIFOEN+0xde>
  23311. }
  23312. else if (READ_BIT(huart->Instance->ISR, USART_ISR_TXE_TXFNF) != 0U)
  23313. 800a5f6: 687b ldr r3, [r7, #4]
  23314. 800a5f8: 681b ldr r3, [r3, #0]
  23315. 800a5fa: 69db ldr r3, [r3, #28]
  23316. 800a5fc: f003 0380 and.w r3, r3, #128 @ 0x80
  23317. 800a600: 2b00 cmp r3, #0
  23318. 800a602: d018 beq.n 800a636 <UART_TxISR_16BIT_FIFOEN+0xd0>
  23319. {
  23320. tmp = (const uint16_t *) huart->pTxBuffPtr;
  23321. 800a604: 687b ldr r3, [r7, #4]
  23322. 800a606: 6d1b ldr r3, [r3, #80] @ 0x50
  23323. 800a608: 63bb str r3, [r7, #56] @ 0x38
  23324. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  23325. 800a60a: 6bbb ldr r3, [r7, #56] @ 0x38
  23326. 800a60c: 881b ldrh r3, [r3, #0]
  23327. 800a60e: 461a mov r2, r3
  23328. 800a610: 687b ldr r3, [r7, #4]
  23329. 800a612: 681b ldr r3, [r3, #0]
  23330. 800a614: f3c2 0208 ubfx r2, r2, #0, #9
  23331. 800a618: 629a str r2, [r3, #40] @ 0x28
  23332. huart->pTxBuffPtr += 2U;
  23333. 800a61a: 687b ldr r3, [r7, #4]
  23334. 800a61c: 6d1b ldr r3, [r3, #80] @ 0x50
  23335. 800a61e: 1c9a adds r2, r3, #2
  23336. 800a620: 687b ldr r3, [r7, #4]
  23337. 800a622: 651a str r2, [r3, #80] @ 0x50
  23338. huart->TxXferCount--;
  23339. 800a624: 687b ldr r3, [r7, #4]
  23340. 800a626: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  23341. 800a62a: b29b uxth r3, r3
  23342. 800a62c: 3b01 subs r3, #1
  23343. 800a62e: b29a uxth r2, r3
  23344. 800a630: 687b ldr r3, [r7, #4]
  23345. 800a632: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  23346. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  23347. 800a636: 8ffb ldrh r3, [r7, #62] @ 0x3e
  23348. 800a638: 3b01 subs r3, #1
  23349. 800a63a: 87fb strh r3, [r7, #62] @ 0x3e
  23350. 800a63c: 8ffb ldrh r3, [r7, #62] @ 0x3e
  23351. 800a63e: 2b00 cmp r3, #0
  23352. 800a640: d19f bne.n 800a582 <UART_TxISR_16BIT_FIFOEN+0x1c>
  23353. {
  23354. /* Nothing to do */
  23355. }
  23356. }
  23357. }
  23358. }
  23359. 800a642: e7ff b.n 800a644 <UART_TxISR_16BIT_FIFOEN+0xde>
  23360. 800a644: bf00 nop
  23361. 800a646: 3744 adds r7, #68 @ 0x44
  23362. 800a648: 46bd mov sp, r7
  23363. 800a64a: f85d 7b04 ldr.w r7, [sp], #4
  23364. 800a64e: 4770 bx lr
  23365. 0800a650 <UART_EndTransmit_IT>:
  23366. * @param huart pointer to a UART_HandleTypeDef structure that contains
  23367. * the configuration information for the specified UART module.
  23368. * @retval None
  23369. */
  23370. static void UART_EndTransmit_IT(UART_HandleTypeDef *huart)
  23371. {
  23372. 800a650: b580 push {r7, lr}
  23373. 800a652: b088 sub sp, #32
  23374. 800a654: af00 add r7, sp, #0
  23375. 800a656: 6078 str r0, [r7, #4]
  23376. /* Disable the UART Transmit Complete Interrupt */
  23377. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  23378. 800a658: 687b ldr r3, [r7, #4]
  23379. 800a65a: 681b ldr r3, [r3, #0]
  23380. 800a65c: 60fb str r3, [r7, #12]
  23381. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  23382. 800a65e: 68fb ldr r3, [r7, #12]
  23383. 800a660: e853 3f00 ldrex r3, [r3]
  23384. 800a664: 60bb str r3, [r7, #8]
  23385. return(result);
  23386. 800a666: 68bb ldr r3, [r7, #8]
  23387. 800a668: f023 0340 bic.w r3, r3, #64 @ 0x40
  23388. 800a66c: 61fb str r3, [r7, #28]
  23389. 800a66e: 687b ldr r3, [r7, #4]
  23390. 800a670: 681b ldr r3, [r3, #0]
  23391. 800a672: 461a mov r2, r3
  23392. 800a674: 69fb ldr r3, [r7, #28]
  23393. 800a676: 61bb str r3, [r7, #24]
  23394. 800a678: 617a str r2, [r7, #20]
  23395. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23396. 800a67a: 6979 ldr r1, [r7, #20]
  23397. 800a67c: 69ba ldr r2, [r7, #24]
  23398. 800a67e: e841 2300 strex r3, r2, [r1]
  23399. 800a682: 613b str r3, [r7, #16]
  23400. return(result);
  23401. 800a684: 693b ldr r3, [r7, #16]
  23402. 800a686: 2b00 cmp r3, #0
  23403. 800a688: d1e6 bne.n 800a658 <UART_EndTransmit_IT+0x8>
  23404. /* Tx process is ended, restore huart->gState to Ready */
  23405. huart->gState = HAL_UART_STATE_READY;
  23406. 800a68a: 687b ldr r3, [r7, #4]
  23407. 800a68c: 2220 movs r2, #32
  23408. 800a68e: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  23409. /* Cleat TxISR function pointer */
  23410. huart->TxISR = NULL;
  23411. 800a692: 687b ldr r3, [r7, #4]
  23412. 800a694: 2200 movs r2, #0
  23413. 800a696: 679a str r2, [r3, #120] @ 0x78
  23414. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  23415. /*Call registered Tx complete callback*/
  23416. huart->TxCpltCallback(huart);
  23417. #else
  23418. /*Call legacy weak Tx complete callback*/
  23419. HAL_UART_TxCpltCallback(huart);
  23420. 800a698: 6878 ldr r0, [r7, #4]
  23421. 800a69a: f7f7 faf3 bl 8001c84 <HAL_UART_TxCpltCallback>
  23422. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  23423. }
  23424. 800a69e: bf00 nop
  23425. 800a6a0: 3720 adds r7, #32
  23426. 800a6a2: 46bd mov sp, r7
  23427. 800a6a4: bd80 pop {r7, pc}
  23428. ...
  23429. 0800a6a8 <UART_RxISR_8BIT>:
  23430. * @brief RX interrupt handler for 7 or 8 bits data word length .
  23431. * @param huart UART handle.
  23432. * @retval None
  23433. */
  23434. static void UART_RxISR_8BIT(UART_HandleTypeDef *huart)
  23435. {
  23436. 800a6a8: b580 push {r7, lr}
  23437. 800a6aa: b09c sub sp, #112 @ 0x70
  23438. 800a6ac: af00 add r7, sp, #0
  23439. 800a6ae: 6078 str r0, [r7, #4]
  23440. uint16_t uhMask = huart->Mask;
  23441. 800a6b0: 687b ldr r3, [r7, #4]
  23442. 800a6b2: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  23443. 800a6b6: f8a7 306e strh.w r3, [r7, #110] @ 0x6e
  23444. uint16_t uhdata;
  23445. /* Check that a Rx process is ongoing */
  23446. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  23447. 800a6ba: 687b ldr r3, [r7, #4]
  23448. 800a6bc: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  23449. 800a6c0: 2b22 cmp r3, #34 @ 0x22
  23450. 800a6c2: f040 80be bne.w 800a842 <UART_RxISR_8BIT+0x19a>
  23451. {
  23452. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  23453. 800a6c6: 687b ldr r3, [r7, #4]
  23454. 800a6c8: 681b ldr r3, [r3, #0]
  23455. 800a6ca: 6a5b ldr r3, [r3, #36] @ 0x24
  23456. 800a6cc: f8a7 306c strh.w r3, [r7, #108] @ 0x6c
  23457. *huart->pRxBuffPtr = (uint8_t)(uhdata & (uint8_t)uhMask);
  23458. 800a6d0: f8b7 306c ldrh.w r3, [r7, #108] @ 0x6c
  23459. 800a6d4: b2d9 uxtb r1, r3
  23460. 800a6d6: f8b7 306e ldrh.w r3, [r7, #110] @ 0x6e
  23461. 800a6da: b2da uxtb r2, r3
  23462. 800a6dc: 687b ldr r3, [r7, #4]
  23463. 800a6de: 6d9b ldr r3, [r3, #88] @ 0x58
  23464. 800a6e0: 400a ands r2, r1
  23465. 800a6e2: b2d2 uxtb r2, r2
  23466. 800a6e4: 701a strb r2, [r3, #0]
  23467. huart->pRxBuffPtr++;
  23468. 800a6e6: 687b ldr r3, [r7, #4]
  23469. 800a6e8: 6d9b ldr r3, [r3, #88] @ 0x58
  23470. 800a6ea: 1c5a adds r2, r3, #1
  23471. 800a6ec: 687b ldr r3, [r7, #4]
  23472. 800a6ee: 659a str r2, [r3, #88] @ 0x58
  23473. huart->RxXferCount--;
  23474. 800a6f0: 687b ldr r3, [r7, #4]
  23475. 800a6f2: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  23476. 800a6f6: b29b uxth r3, r3
  23477. 800a6f8: 3b01 subs r3, #1
  23478. 800a6fa: b29a uxth r2, r3
  23479. 800a6fc: 687b ldr r3, [r7, #4]
  23480. 800a6fe: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  23481. if (huart->RxXferCount == 0U)
  23482. 800a702: 687b ldr r3, [r7, #4]
  23483. 800a704: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  23484. 800a708: b29b uxth r3, r3
  23485. 800a70a: 2b00 cmp r3, #0
  23486. 800a70c: f040 80a1 bne.w 800a852 <UART_RxISR_8BIT+0x1aa>
  23487. {
  23488. /* Disable the UART Parity Error Interrupt and RXNE interrupts */
  23489. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  23490. 800a710: 687b ldr r3, [r7, #4]
  23491. 800a712: 681b ldr r3, [r3, #0]
  23492. 800a714: 64fb str r3, [r7, #76] @ 0x4c
  23493. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  23494. 800a716: 6cfb ldr r3, [r7, #76] @ 0x4c
  23495. 800a718: e853 3f00 ldrex r3, [r3]
  23496. 800a71c: 64bb str r3, [r7, #72] @ 0x48
  23497. return(result);
  23498. 800a71e: 6cbb ldr r3, [r7, #72] @ 0x48
  23499. 800a720: f423 7390 bic.w r3, r3, #288 @ 0x120
  23500. 800a724: 66bb str r3, [r7, #104] @ 0x68
  23501. 800a726: 687b ldr r3, [r7, #4]
  23502. 800a728: 681b ldr r3, [r3, #0]
  23503. 800a72a: 461a mov r2, r3
  23504. 800a72c: 6ebb ldr r3, [r7, #104] @ 0x68
  23505. 800a72e: 65bb str r3, [r7, #88] @ 0x58
  23506. 800a730: 657a str r2, [r7, #84] @ 0x54
  23507. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23508. 800a732: 6d79 ldr r1, [r7, #84] @ 0x54
  23509. 800a734: 6dba ldr r2, [r7, #88] @ 0x58
  23510. 800a736: e841 2300 strex r3, r2, [r1]
  23511. 800a73a: 653b str r3, [r7, #80] @ 0x50
  23512. return(result);
  23513. 800a73c: 6d3b ldr r3, [r7, #80] @ 0x50
  23514. 800a73e: 2b00 cmp r3, #0
  23515. 800a740: d1e6 bne.n 800a710 <UART_RxISR_8BIT+0x68>
  23516. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  23517. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  23518. 800a742: 687b ldr r3, [r7, #4]
  23519. 800a744: 681b ldr r3, [r3, #0]
  23520. 800a746: 3308 adds r3, #8
  23521. 800a748: 63bb str r3, [r7, #56] @ 0x38
  23522. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  23523. 800a74a: 6bbb ldr r3, [r7, #56] @ 0x38
  23524. 800a74c: e853 3f00 ldrex r3, [r3]
  23525. 800a750: 637b str r3, [r7, #52] @ 0x34
  23526. return(result);
  23527. 800a752: 6b7b ldr r3, [r7, #52] @ 0x34
  23528. 800a754: f023 0301 bic.w r3, r3, #1
  23529. 800a758: 667b str r3, [r7, #100] @ 0x64
  23530. 800a75a: 687b ldr r3, [r7, #4]
  23531. 800a75c: 681b ldr r3, [r3, #0]
  23532. 800a75e: 3308 adds r3, #8
  23533. 800a760: 6e7a ldr r2, [r7, #100] @ 0x64
  23534. 800a762: 647a str r2, [r7, #68] @ 0x44
  23535. 800a764: 643b str r3, [r7, #64] @ 0x40
  23536. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23537. 800a766: 6c39 ldr r1, [r7, #64] @ 0x40
  23538. 800a768: 6c7a ldr r2, [r7, #68] @ 0x44
  23539. 800a76a: e841 2300 strex r3, r2, [r1]
  23540. 800a76e: 63fb str r3, [r7, #60] @ 0x3c
  23541. return(result);
  23542. 800a770: 6bfb ldr r3, [r7, #60] @ 0x3c
  23543. 800a772: 2b00 cmp r3, #0
  23544. 800a774: d1e5 bne.n 800a742 <UART_RxISR_8BIT+0x9a>
  23545. /* Rx process is completed, restore huart->RxState to Ready */
  23546. huart->RxState = HAL_UART_STATE_READY;
  23547. 800a776: 687b ldr r3, [r7, #4]
  23548. 800a778: 2220 movs r2, #32
  23549. 800a77a: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  23550. /* Clear RxISR function pointer */
  23551. huart->RxISR = NULL;
  23552. 800a77e: 687b ldr r3, [r7, #4]
  23553. 800a780: 2200 movs r2, #0
  23554. 800a782: 675a str r2, [r3, #116] @ 0x74
  23555. /* Initialize type of RxEvent to Transfer Complete */
  23556. huart->RxEventType = HAL_UART_RXEVENT_TC;
  23557. 800a784: 687b ldr r3, [r7, #4]
  23558. 800a786: 2200 movs r2, #0
  23559. 800a788: 671a str r2, [r3, #112] @ 0x70
  23560. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  23561. 800a78a: 687b ldr r3, [r7, #4]
  23562. 800a78c: 681b ldr r3, [r3, #0]
  23563. 800a78e: 4a33 ldr r2, [pc, #204] @ (800a85c <UART_RxISR_8BIT+0x1b4>)
  23564. 800a790: 4293 cmp r3, r2
  23565. 800a792: d01f beq.n 800a7d4 <UART_RxISR_8BIT+0x12c>
  23566. {
  23567. /* Check that USART RTOEN bit is set */
  23568. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  23569. 800a794: 687b ldr r3, [r7, #4]
  23570. 800a796: 681b ldr r3, [r3, #0]
  23571. 800a798: 685b ldr r3, [r3, #4]
  23572. 800a79a: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  23573. 800a79e: 2b00 cmp r3, #0
  23574. 800a7a0: d018 beq.n 800a7d4 <UART_RxISR_8BIT+0x12c>
  23575. {
  23576. /* Enable the UART Receiver Timeout Interrupt */
  23577. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  23578. 800a7a2: 687b ldr r3, [r7, #4]
  23579. 800a7a4: 681b ldr r3, [r3, #0]
  23580. 800a7a6: 627b str r3, [r7, #36] @ 0x24
  23581. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  23582. 800a7a8: 6a7b ldr r3, [r7, #36] @ 0x24
  23583. 800a7aa: e853 3f00 ldrex r3, [r3]
  23584. 800a7ae: 623b str r3, [r7, #32]
  23585. return(result);
  23586. 800a7b0: 6a3b ldr r3, [r7, #32]
  23587. 800a7b2: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  23588. 800a7b6: 663b str r3, [r7, #96] @ 0x60
  23589. 800a7b8: 687b ldr r3, [r7, #4]
  23590. 800a7ba: 681b ldr r3, [r3, #0]
  23591. 800a7bc: 461a mov r2, r3
  23592. 800a7be: 6e3b ldr r3, [r7, #96] @ 0x60
  23593. 800a7c0: 633b str r3, [r7, #48] @ 0x30
  23594. 800a7c2: 62fa str r2, [r7, #44] @ 0x2c
  23595. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23596. 800a7c4: 6af9 ldr r1, [r7, #44] @ 0x2c
  23597. 800a7c6: 6b3a ldr r2, [r7, #48] @ 0x30
  23598. 800a7c8: e841 2300 strex r3, r2, [r1]
  23599. 800a7cc: 62bb str r3, [r7, #40] @ 0x28
  23600. return(result);
  23601. 800a7ce: 6abb ldr r3, [r7, #40] @ 0x28
  23602. 800a7d0: 2b00 cmp r3, #0
  23603. 800a7d2: d1e6 bne.n 800a7a2 <UART_RxISR_8BIT+0xfa>
  23604. }
  23605. }
  23606. /* Check current reception Mode :
  23607. If Reception till IDLE event has been selected : */
  23608. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  23609. 800a7d4: 687b ldr r3, [r7, #4]
  23610. 800a7d6: 6edb ldr r3, [r3, #108] @ 0x6c
  23611. 800a7d8: 2b01 cmp r3, #1
  23612. 800a7da: d12e bne.n 800a83a <UART_RxISR_8BIT+0x192>
  23613. {
  23614. /* Set reception type to Standard */
  23615. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  23616. 800a7dc: 687b ldr r3, [r7, #4]
  23617. 800a7de: 2200 movs r2, #0
  23618. 800a7e0: 66da str r2, [r3, #108] @ 0x6c
  23619. /* Disable IDLE interrupt */
  23620. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  23621. 800a7e2: 687b ldr r3, [r7, #4]
  23622. 800a7e4: 681b ldr r3, [r3, #0]
  23623. 800a7e6: 613b str r3, [r7, #16]
  23624. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  23625. 800a7e8: 693b ldr r3, [r7, #16]
  23626. 800a7ea: e853 3f00 ldrex r3, [r3]
  23627. 800a7ee: 60fb str r3, [r7, #12]
  23628. return(result);
  23629. 800a7f0: 68fb ldr r3, [r7, #12]
  23630. 800a7f2: f023 0310 bic.w r3, r3, #16
  23631. 800a7f6: 65fb str r3, [r7, #92] @ 0x5c
  23632. 800a7f8: 687b ldr r3, [r7, #4]
  23633. 800a7fa: 681b ldr r3, [r3, #0]
  23634. 800a7fc: 461a mov r2, r3
  23635. 800a7fe: 6dfb ldr r3, [r7, #92] @ 0x5c
  23636. 800a800: 61fb str r3, [r7, #28]
  23637. 800a802: 61ba str r2, [r7, #24]
  23638. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23639. 800a804: 69b9 ldr r1, [r7, #24]
  23640. 800a806: 69fa ldr r2, [r7, #28]
  23641. 800a808: e841 2300 strex r3, r2, [r1]
  23642. 800a80c: 617b str r3, [r7, #20]
  23643. return(result);
  23644. 800a80e: 697b ldr r3, [r7, #20]
  23645. 800a810: 2b00 cmp r3, #0
  23646. 800a812: d1e6 bne.n 800a7e2 <UART_RxISR_8BIT+0x13a>
  23647. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  23648. 800a814: 687b ldr r3, [r7, #4]
  23649. 800a816: 681b ldr r3, [r3, #0]
  23650. 800a818: 69db ldr r3, [r3, #28]
  23651. 800a81a: f003 0310 and.w r3, r3, #16
  23652. 800a81e: 2b10 cmp r3, #16
  23653. 800a820: d103 bne.n 800a82a <UART_RxISR_8BIT+0x182>
  23654. {
  23655. /* Clear IDLE Flag */
  23656. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  23657. 800a822: 687b ldr r3, [r7, #4]
  23658. 800a824: 681b ldr r3, [r3, #0]
  23659. 800a826: 2210 movs r2, #16
  23660. 800a828: 621a str r2, [r3, #32]
  23661. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  23662. /*Call registered Rx Event callback*/
  23663. huart->RxEventCallback(huart, huart->RxXferSize);
  23664. #else
  23665. /*Call legacy weak Rx Event callback*/
  23666. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  23667. 800a82a: 687b ldr r3, [r7, #4]
  23668. 800a82c: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  23669. 800a830: 4619 mov r1, r3
  23670. 800a832: 6878 ldr r0, [r7, #4]
  23671. 800a834: f7f7 f9fc bl 8001c30 <HAL_UARTEx_RxEventCallback>
  23672. else
  23673. {
  23674. /* Clear RXNE interrupt flag */
  23675. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  23676. }
  23677. }
  23678. 800a838: e00b b.n 800a852 <UART_RxISR_8BIT+0x1aa>
  23679. HAL_UART_RxCpltCallback(huart);
  23680. 800a83a: 6878 ldr r0, [r7, #4]
  23681. 800a83c: f7f7 f9ee bl 8001c1c <HAL_UART_RxCpltCallback>
  23682. }
  23683. 800a840: e007 b.n 800a852 <UART_RxISR_8BIT+0x1aa>
  23684. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  23685. 800a842: 687b ldr r3, [r7, #4]
  23686. 800a844: 681b ldr r3, [r3, #0]
  23687. 800a846: 699a ldr r2, [r3, #24]
  23688. 800a848: 687b ldr r3, [r7, #4]
  23689. 800a84a: 681b ldr r3, [r3, #0]
  23690. 800a84c: f042 0208 orr.w r2, r2, #8
  23691. 800a850: 619a str r2, [r3, #24]
  23692. }
  23693. 800a852: bf00 nop
  23694. 800a854: 3770 adds r7, #112 @ 0x70
  23695. 800a856: 46bd mov sp, r7
  23696. 800a858: bd80 pop {r7, pc}
  23697. 800a85a: bf00 nop
  23698. 800a85c: 58000c00 .word 0x58000c00
  23699. 0800a860 <UART_RxISR_16BIT>:
  23700. * interruptions have been enabled by HAL_UART_Receive_IT()
  23701. * @param huart UART handle.
  23702. * @retval None
  23703. */
  23704. static void UART_RxISR_16BIT(UART_HandleTypeDef *huart)
  23705. {
  23706. 800a860: b580 push {r7, lr}
  23707. 800a862: b09c sub sp, #112 @ 0x70
  23708. 800a864: af00 add r7, sp, #0
  23709. 800a866: 6078 str r0, [r7, #4]
  23710. uint16_t *tmp;
  23711. uint16_t uhMask = huart->Mask;
  23712. 800a868: 687b ldr r3, [r7, #4]
  23713. 800a86a: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  23714. 800a86e: f8a7 306e strh.w r3, [r7, #110] @ 0x6e
  23715. uint16_t uhdata;
  23716. /* Check that a Rx process is ongoing */
  23717. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  23718. 800a872: 687b ldr r3, [r7, #4]
  23719. 800a874: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  23720. 800a878: 2b22 cmp r3, #34 @ 0x22
  23721. 800a87a: f040 80be bne.w 800a9fa <UART_RxISR_16BIT+0x19a>
  23722. {
  23723. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  23724. 800a87e: 687b ldr r3, [r7, #4]
  23725. 800a880: 681b ldr r3, [r3, #0]
  23726. 800a882: 6a5b ldr r3, [r3, #36] @ 0x24
  23727. 800a884: f8a7 306c strh.w r3, [r7, #108] @ 0x6c
  23728. tmp = (uint16_t *) huart->pRxBuffPtr ;
  23729. 800a888: 687b ldr r3, [r7, #4]
  23730. 800a88a: 6d9b ldr r3, [r3, #88] @ 0x58
  23731. 800a88c: 66bb str r3, [r7, #104] @ 0x68
  23732. *tmp = (uint16_t)(uhdata & uhMask);
  23733. 800a88e: f8b7 206c ldrh.w r2, [r7, #108] @ 0x6c
  23734. 800a892: f8b7 306e ldrh.w r3, [r7, #110] @ 0x6e
  23735. 800a896: 4013 ands r3, r2
  23736. 800a898: b29a uxth r2, r3
  23737. 800a89a: 6ebb ldr r3, [r7, #104] @ 0x68
  23738. 800a89c: 801a strh r2, [r3, #0]
  23739. huart->pRxBuffPtr += 2U;
  23740. 800a89e: 687b ldr r3, [r7, #4]
  23741. 800a8a0: 6d9b ldr r3, [r3, #88] @ 0x58
  23742. 800a8a2: 1c9a adds r2, r3, #2
  23743. 800a8a4: 687b ldr r3, [r7, #4]
  23744. 800a8a6: 659a str r2, [r3, #88] @ 0x58
  23745. huart->RxXferCount--;
  23746. 800a8a8: 687b ldr r3, [r7, #4]
  23747. 800a8aa: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  23748. 800a8ae: b29b uxth r3, r3
  23749. 800a8b0: 3b01 subs r3, #1
  23750. 800a8b2: b29a uxth r2, r3
  23751. 800a8b4: 687b ldr r3, [r7, #4]
  23752. 800a8b6: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  23753. if (huart->RxXferCount == 0U)
  23754. 800a8ba: 687b ldr r3, [r7, #4]
  23755. 800a8bc: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  23756. 800a8c0: b29b uxth r3, r3
  23757. 800a8c2: 2b00 cmp r3, #0
  23758. 800a8c4: f040 80a1 bne.w 800aa0a <UART_RxISR_16BIT+0x1aa>
  23759. {
  23760. /* Disable the UART Parity Error Interrupt and RXNE interrupt*/
  23761. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  23762. 800a8c8: 687b ldr r3, [r7, #4]
  23763. 800a8ca: 681b ldr r3, [r3, #0]
  23764. 800a8cc: 64bb str r3, [r7, #72] @ 0x48
  23765. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  23766. 800a8ce: 6cbb ldr r3, [r7, #72] @ 0x48
  23767. 800a8d0: e853 3f00 ldrex r3, [r3]
  23768. 800a8d4: 647b str r3, [r7, #68] @ 0x44
  23769. return(result);
  23770. 800a8d6: 6c7b ldr r3, [r7, #68] @ 0x44
  23771. 800a8d8: f423 7390 bic.w r3, r3, #288 @ 0x120
  23772. 800a8dc: 667b str r3, [r7, #100] @ 0x64
  23773. 800a8de: 687b ldr r3, [r7, #4]
  23774. 800a8e0: 681b ldr r3, [r3, #0]
  23775. 800a8e2: 461a mov r2, r3
  23776. 800a8e4: 6e7b ldr r3, [r7, #100] @ 0x64
  23777. 800a8e6: 657b str r3, [r7, #84] @ 0x54
  23778. 800a8e8: 653a str r2, [r7, #80] @ 0x50
  23779. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23780. 800a8ea: 6d39 ldr r1, [r7, #80] @ 0x50
  23781. 800a8ec: 6d7a ldr r2, [r7, #84] @ 0x54
  23782. 800a8ee: e841 2300 strex r3, r2, [r1]
  23783. 800a8f2: 64fb str r3, [r7, #76] @ 0x4c
  23784. return(result);
  23785. 800a8f4: 6cfb ldr r3, [r7, #76] @ 0x4c
  23786. 800a8f6: 2b00 cmp r3, #0
  23787. 800a8f8: d1e6 bne.n 800a8c8 <UART_RxISR_16BIT+0x68>
  23788. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  23789. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  23790. 800a8fa: 687b ldr r3, [r7, #4]
  23791. 800a8fc: 681b ldr r3, [r3, #0]
  23792. 800a8fe: 3308 adds r3, #8
  23793. 800a900: 637b str r3, [r7, #52] @ 0x34
  23794. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  23795. 800a902: 6b7b ldr r3, [r7, #52] @ 0x34
  23796. 800a904: e853 3f00 ldrex r3, [r3]
  23797. 800a908: 633b str r3, [r7, #48] @ 0x30
  23798. return(result);
  23799. 800a90a: 6b3b ldr r3, [r7, #48] @ 0x30
  23800. 800a90c: f023 0301 bic.w r3, r3, #1
  23801. 800a910: 663b str r3, [r7, #96] @ 0x60
  23802. 800a912: 687b ldr r3, [r7, #4]
  23803. 800a914: 681b ldr r3, [r3, #0]
  23804. 800a916: 3308 adds r3, #8
  23805. 800a918: 6e3a ldr r2, [r7, #96] @ 0x60
  23806. 800a91a: 643a str r2, [r7, #64] @ 0x40
  23807. 800a91c: 63fb str r3, [r7, #60] @ 0x3c
  23808. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23809. 800a91e: 6bf9 ldr r1, [r7, #60] @ 0x3c
  23810. 800a920: 6c3a ldr r2, [r7, #64] @ 0x40
  23811. 800a922: e841 2300 strex r3, r2, [r1]
  23812. 800a926: 63bb str r3, [r7, #56] @ 0x38
  23813. return(result);
  23814. 800a928: 6bbb ldr r3, [r7, #56] @ 0x38
  23815. 800a92a: 2b00 cmp r3, #0
  23816. 800a92c: d1e5 bne.n 800a8fa <UART_RxISR_16BIT+0x9a>
  23817. /* Rx process is completed, restore huart->RxState to Ready */
  23818. huart->RxState = HAL_UART_STATE_READY;
  23819. 800a92e: 687b ldr r3, [r7, #4]
  23820. 800a930: 2220 movs r2, #32
  23821. 800a932: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  23822. /* Clear RxISR function pointer */
  23823. huart->RxISR = NULL;
  23824. 800a936: 687b ldr r3, [r7, #4]
  23825. 800a938: 2200 movs r2, #0
  23826. 800a93a: 675a str r2, [r3, #116] @ 0x74
  23827. /* Initialize type of RxEvent to Transfer Complete */
  23828. huart->RxEventType = HAL_UART_RXEVENT_TC;
  23829. 800a93c: 687b ldr r3, [r7, #4]
  23830. 800a93e: 2200 movs r2, #0
  23831. 800a940: 671a str r2, [r3, #112] @ 0x70
  23832. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  23833. 800a942: 687b ldr r3, [r7, #4]
  23834. 800a944: 681b ldr r3, [r3, #0]
  23835. 800a946: 4a33 ldr r2, [pc, #204] @ (800aa14 <UART_RxISR_16BIT+0x1b4>)
  23836. 800a948: 4293 cmp r3, r2
  23837. 800a94a: d01f beq.n 800a98c <UART_RxISR_16BIT+0x12c>
  23838. {
  23839. /* Check that USART RTOEN bit is set */
  23840. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  23841. 800a94c: 687b ldr r3, [r7, #4]
  23842. 800a94e: 681b ldr r3, [r3, #0]
  23843. 800a950: 685b ldr r3, [r3, #4]
  23844. 800a952: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  23845. 800a956: 2b00 cmp r3, #0
  23846. 800a958: d018 beq.n 800a98c <UART_RxISR_16BIT+0x12c>
  23847. {
  23848. /* Enable the UART Receiver Timeout Interrupt */
  23849. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  23850. 800a95a: 687b ldr r3, [r7, #4]
  23851. 800a95c: 681b ldr r3, [r3, #0]
  23852. 800a95e: 623b str r3, [r7, #32]
  23853. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  23854. 800a960: 6a3b ldr r3, [r7, #32]
  23855. 800a962: e853 3f00 ldrex r3, [r3]
  23856. 800a966: 61fb str r3, [r7, #28]
  23857. return(result);
  23858. 800a968: 69fb ldr r3, [r7, #28]
  23859. 800a96a: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  23860. 800a96e: 65fb str r3, [r7, #92] @ 0x5c
  23861. 800a970: 687b ldr r3, [r7, #4]
  23862. 800a972: 681b ldr r3, [r3, #0]
  23863. 800a974: 461a mov r2, r3
  23864. 800a976: 6dfb ldr r3, [r7, #92] @ 0x5c
  23865. 800a978: 62fb str r3, [r7, #44] @ 0x2c
  23866. 800a97a: 62ba str r2, [r7, #40] @ 0x28
  23867. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23868. 800a97c: 6ab9 ldr r1, [r7, #40] @ 0x28
  23869. 800a97e: 6afa ldr r2, [r7, #44] @ 0x2c
  23870. 800a980: e841 2300 strex r3, r2, [r1]
  23871. 800a984: 627b str r3, [r7, #36] @ 0x24
  23872. return(result);
  23873. 800a986: 6a7b ldr r3, [r7, #36] @ 0x24
  23874. 800a988: 2b00 cmp r3, #0
  23875. 800a98a: d1e6 bne.n 800a95a <UART_RxISR_16BIT+0xfa>
  23876. }
  23877. }
  23878. /* Check current reception Mode :
  23879. If Reception till IDLE event has been selected : */
  23880. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  23881. 800a98c: 687b ldr r3, [r7, #4]
  23882. 800a98e: 6edb ldr r3, [r3, #108] @ 0x6c
  23883. 800a990: 2b01 cmp r3, #1
  23884. 800a992: d12e bne.n 800a9f2 <UART_RxISR_16BIT+0x192>
  23885. {
  23886. /* Set reception type to Standard */
  23887. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  23888. 800a994: 687b ldr r3, [r7, #4]
  23889. 800a996: 2200 movs r2, #0
  23890. 800a998: 66da str r2, [r3, #108] @ 0x6c
  23891. /* Disable IDLE interrupt */
  23892. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  23893. 800a99a: 687b ldr r3, [r7, #4]
  23894. 800a99c: 681b ldr r3, [r3, #0]
  23895. 800a99e: 60fb str r3, [r7, #12]
  23896. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  23897. 800a9a0: 68fb ldr r3, [r7, #12]
  23898. 800a9a2: e853 3f00 ldrex r3, [r3]
  23899. 800a9a6: 60bb str r3, [r7, #8]
  23900. return(result);
  23901. 800a9a8: 68bb ldr r3, [r7, #8]
  23902. 800a9aa: f023 0310 bic.w r3, r3, #16
  23903. 800a9ae: 65bb str r3, [r7, #88] @ 0x58
  23904. 800a9b0: 687b ldr r3, [r7, #4]
  23905. 800a9b2: 681b ldr r3, [r3, #0]
  23906. 800a9b4: 461a mov r2, r3
  23907. 800a9b6: 6dbb ldr r3, [r7, #88] @ 0x58
  23908. 800a9b8: 61bb str r3, [r7, #24]
  23909. 800a9ba: 617a str r2, [r7, #20]
  23910. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  23911. 800a9bc: 6979 ldr r1, [r7, #20]
  23912. 800a9be: 69ba ldr r2, [r7, #24]
  23913. 800a9c0: e841 2300 strex r3, r2, [r1]
  23914. 800a9c4: 613b str r3, [r7, #16]
  23915. return(result);
  23916. 800a9c6: 693b ldr r3, [r7, #16]
  23917. 800a9c8: 2b00 cmp r3, #0
  23918. 800a9ca: d1e6 bne.n 800a99a <UART_RxISR_16BIT+0x13a>
  23919. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  23920. 800a9cc: 687b ldr r3, [r7, #4]
  23921. 800a9ce: 681b ldr r3, [r3, #0]
  23922. 800a9d0: 69db ldr r3, [r3, #28]
  23923. 800a9d2: f003 0310 and.w r3, r3, #16
  23924. 800a9d6: 2b10 cmp r3, #16
  23925. 800a9d8: d103 bne.n 800a9e2 <UART_RxISR_16BIT+0x182>
  23926. {
  23927. /* Clear IDLE Flag */
  23928. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  23929. 800a9da: 687b ldr r3, [r7, #4]
  23930. 800a9dc: 681b ldr r3, [r3, #0]
  23931. 800a9de: 2210 movs r2, #16
  23932. 800a9e0: 621a str r2, [r3, #32]
  23933. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  23934. /*Call registered Rx Event callback*/
  23935. huart->RxEventCallback(huart, huart->RxXferSize);
  23936. #else
  23937. /*Call legacy weak Rx Event callback*/
  23938. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  23939. 800a9e2: 687b ldr r3, [r7, #4]
  23940. 800a9e4: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  23941. 800a9e8: 4619 mov r1, r3
  23942. 800a9ea: 6878 ldr r0, [r7, #4]
  23943. 800a9ec: f7f7 f920 bl 8001c30 <HAL_UARTEx_RxEventCallback>
  23944. else
  23945. {
  23946. /* Clear RXNE interrupt flag */
  23947. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  23948. }
  23949. }
  23950. 800a9f0: e00b b.n 800aa0a <UART_RxISR_16BIT+0x1aa>
  23951. HAL_UART_RxCpltCallback(huart);
  23952. 800a9f2: 6878 ldr r0, [r7, #4]
  23953. 800a9f4: f7f7 f912 bl 8001c1c <HAL_UART_RxCpltCallback>
  23954. }
  23955. 800a9f8: e007 b.n 800aa0a <UART_RxISR_16BIT+0x1aa>
  23956. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  23957. 800a9fa: 687b ldr r3, [r7, #4]
  23958. 800a9fc: 681b ldr r3, [r3, #0]
  23959. 800a9fe: 699a ldr r2, [r3, #24]
  23960. 800aa00: 687b ldr r3, [r7, #4]
  23961. 800aa02: 681b ldr r3, [r3, #0]
  23962. 800aa04: f042 0208 orr.w r2, r2, #8
  23963. 800aa08: 619a str r2, [r3, #24]
  23964. }
  23965. 800aa0a: bf00 nop
  23966. 800aa0c: 3770 adds r7, #112 @ 0x70
  23967. 800aa0e: 46bd mov sp, r7
  23968. 800aa10: bd80 pop {r7, pc}
  23969. 800aa12: bf00 nop
  23970. 800aa14: 58000c00 .word 0x58000c00
  23971. 0800aa18 <UART_RxISR_8BIT_FIFOEN>:
  23972. * interruptions have been enabled by HAL_UART_Receive_IT()
  23973. * @param huart UART handle.
  23974. * @retval None
  23975. */
  23976. static void UART_RxISR_8BIT_FIFOEN(UART_HandleTypeDef *huart)
  23977. {
  23978. 800aa18: b580 push {r7, lr}
  23979. 800aa1a: b0ac sub sp, #176 @ 0xb0
  23980. 800aa1c: af00 add r7, sp, #0
  23981. 800aa1e: 6078 str r0, [r7, #4]
  23982. uint16_t uhMask = huart->Mask;
  23983. 800aa20: 687b ldr r3, [r7, #4]
  23984. 800aa22: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  23985. 800aa26: f8a7 30aa strh.w r3, [r7, #170] @ 0xaa
  23986. uint16_t uhdata;
  23987. uint16_t nb_rx_data;
  23988. uint16_t rxdatacount;
  23989. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  23990. 800aa2a: 687b ldr r3, [r7, #4]
  23991. 800aa2c: 681b ldr r3, [r3, #0]
  23992. 800aa2e: 69db ldr r3, [r3, #28]
  23993. 800aa30: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  23994. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  23995. 800aa34: 687b ldr r3, [r7, #4]
  23996. 800aa36: 681b ldr r3, [r3, #0]
  23997. 800aa38: 681b ldr r3, [r3, #0]
  23998. 800aa3a: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  23999. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  24000. 800aa3e: 687b ldr r3, [r7, #4]
  24001. 800aa40: 681b ldr r3, [r3, #0]
  24002. 800aa42: 689b ldr r3, [r3, #8]
  24003. 800aa44: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  24004. /* Check that a Rx process is ongoing */
  24005. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  24006. 800aa48: 687b ldr r3, [r7, #4]
  24007. 800aa4a: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  24008. 800aa4e: 2b22 cmp r3, #34 @ 0x22
  24009. 800aa50: f040 8180 bne.w 800ad54 <UART_RxISR_8BIT_FIFOEN+0x33c>
  24010. {
  24011. nb_rx_data = huart->NbRxDataToProcess;
  24012. 800aa54: 687b ldr r3, [r7, #4]
  24013. 800aa56: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  24014. 800aa5a: f8a7 309e strh.w r3, [r7, #158] @ 0x9e
  24015. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  24016. 800aa5e: e123 b.n 800aca8 <UART_RxISR_8BIT_FIFOEN+0x290>
  24017. {
  24018. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  24019. 800aa60: 687b ldr r3, [r7, #4]
  24020. 800aa62: 681b ldr r3, [r3, #0]
  24021. 800aa64: 6a5b ldr r3, [r3, #36] @ 0x24
  24022. 800aa66: f8a7 309c strh.w r3, [r7, #156] @ 0x9c
  24023. *huart->pRxBuffPtr = (uint8_t)(uhdata & (uint8_t)uhMask);
  24024. 800aa6a: f8b7 309c ldrh.w r3, [r7, #156] @ 0x9c
  24025. 800aa6e: b2d9 uxtb r1, r3
  24026. 800aa70: f8b7 30aa ldrh.w r3, [r7, #170] @ 0xaa
  24027. 800aa74: b2da uxtb r2, r3
  24028. 800aa76: 687b ldr r3, [r7, #4]
  24029. 800aa78: 6d9b ldr r3, [r3, #88] @ 0x58
  24030. 800aa7a: 400a ands r2, r1
  24031. 800aa7c: b2d2 uxtb r2, r2
  24032. 800aa7e: 701a strb r2, [r3, #0]
  24033. huart->pRxBuffPtr++;
  24034. 800aa80: 687b ldr r3, [r7, #4]
  24035. 800aa82: 6d9b ldr r3, [r3, #88] @ 0x58
  24036. 800aa84: 1c5a adds r2, r3, #1
  24037. 800aa86: 687b ldr r3, [r7, #4]
  24038. 800aa88: 659a str r2, [r3, #88] @ 0x58
  24039. huart->RxXferCount--;
  24040. 800aa8a: 687b ldr r3, [r7, #4]
  24041. 800aa8c: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  24042. 800aa90: b29b uxth r3, r3
  24043. 800aa92: 3b01 subs r3, #1
  24044. 800aa94: b29a uxth r2, r3
  24045. 800aa96: 687b ldr r3, [r7, #4]
  24046. 800aa98: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  24047. isrflags = READ_REG(huart->Instance->ISR);
  24048. 800aa9c: 687b ldr r3, [r7, #4]
  24049. 800aa9e: 681b ldr r3, [r3, #0]
  24050. 800aaa0: 69db ldr r3, [r3, #28]
  24051. 800aaa2: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  24052. /* If some non blocking errors occurred */
  24053. if ((isrflags & (USART_ISR_PE | USART_ISR_FE | USART_ISR_NE)) != 0U)
  24054. 800aaa6: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  24055. 800aaaa: f003 0307 and.w r3, r3, #7
  24056. 800aaae: 2b00 cmp r3, #0
  24057. 800aab0: d053 beq.n 800ab5a <UART_RxISR_8BIT_FIFOEN+0x142>
  24058. {
  24059. /* UART parity error interrupt occurred -------------------------------------*/
  24060. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  24061. 800aab2: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  24062. 800aab6: f003 0301 and.w r3, r3, #1
  24063. 800aaba: 2b00 cmp r3, #0
  24064. 800aabc: d011 beq.n 800aae2 <UART_RxISR_8BIT_FIFOEN+0xca>
  24065. 800aabe: f8d7 30a4 ldr.w r3, [r7, #164] @ 0xa4
  24066. 800aac2: f403 7380 and.w r3, r3, #256 @ 0x100
  24067. 800aac6: 2b00 cmp r3, #0
  24068. 800aac8: d00b beq.n 800aae2 <UART_RxISR_8BIT_FIFOEN+0xca>
  24069. {
  24070. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  24071. 800aaca: 687b ldr r3, [r7, #4]
  24072. 800aacc: 681b ldr r3, [r3, #0]
  24073. 800aace: 2201 movs r2, #1
  24074. 800aad0: 621a str r2, [r3, #32]
  24075. huart->ErrorCode |= HAL_UART_ERROR_PE;
  24076. 800aad2: 687b ldr r3, [r7, #4]
  24077. 800aad4: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  24078. 800aad8: f043 0201 orr.w r2, r3, #1
  24079. 800aadc: 687b ldr r3, [r7, #4]
  24080. 800aade: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  24081. }
  24082. /* UART frame error interrupt occurred --------------------------------------*/
  24083. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  24084. 800aae2: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  24085. 800aae6: f003 0302 and.w r3, r3, #2
  24086. 800aaea: 2b00 cmp r3, #0
  24087. 800aaec: d011 beq.n 800ab12 <UART_RxISR_8BIT_FIFOEN+0xfa>
  24088. 800aaee: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  24089. 800aaf2: f003 0301 and.w r3, r3, #1
  24090. 800aaf6: 2b00 cmp r3, #0
  24091. 800aaf8: d00b beq.n 800ab12 <UART_RxISR_8BIT_FIFOEN+0xfa>
  24092. {
  24093. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  24094. 800aafa: 687b ldr r3, [r7, #4]
  24095. 800aafc: 681b ldr r3, [r3, #0]
  24096. 800aafe: 2202 movs r2, #2
  24097. 800ab00: 621a str r2, [r3, #32]
  24098. huart->ErrorCode |= HAL_UART_ERROR_FE;
  24099. 800ab02: 687b ldr r3, [r7, #4]
  24100. 800ab04: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  24101. 800ab08: f043 0204 orr.w r2, r3, #4
  24102. 800ab0c: 687b ldr r3, [r7, #4]
  24103. 800ab0e: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  24104. }
  24105. /* UART noise error interrupt occurred --------------------------------------*/
  24106. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  24107. 800ab12: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  24108. 800ab16: f003 0304 and.w r3, r3, #4
  24109. 800ab1a: 2b00 cmp r3, #0
  24110. 800ab1c: d011 beq.n 800ab42 <UART_RxISR_8BIT_FIFOEN+0x12a>
  24111. 800ab1e: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  24112. 800ab22: f003 0301 and.w r3, r3, #1
  24113. 800ab26: 2b00 cmp r3, #0
  24114. 800ab28: d00b beq.n 800ab42 <UART_RxISR_8BIT_FIFOEN+0x12a>
  24115. {
  24116. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  24117. 800ab2a: 687b ldr r3, [r7, #4]
  24118. 800ab2c: 681b ldr r3, [r3, #0]
  24119. 800ab2e: 2204 movs r2, #4
  24120. 800ab30: 621a str r2, [r3, #32]
  24121. huart->ErrorCode |= HAL_UART_ERROR_NE;
  24122. 800ab32: 687b ldr r3, [r7, #4]
  24123. 800ab34: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  24124. 800ab38: f043 0202 orr.w r2, r3, #2
  24125. 800ab3c: 687b ldr r3, [r7, #4]
  24126. 800ab3e: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  24127. }
  24128. /* Call UART Error Call back function if need be ----------------------------*/
  24129. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  24130. 800ab42: 687b ldr r3, [r7, #4]
  24131. 800ab44: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  24132. 800ab48: 2b00 cmp r3, #0
  24133. 800ab4a: d006 beq.n 800ab5a <UART_RxISR_8BIT_FIFOEN+0x142>
  24134. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  24135. /*Call registered error callback*/
  24136. huart->ErrorCallback(huart);
  24137. #else
  24138. /*Call legacy weak error callback*/
  24139. HAL_UART_ErrorCallback(huart);
  24140. 800ab4c: 6878 ldr r0, [r7, #4]
  24141. 800ab4e: f7fe fb13 bl 8009178 <HAL_UART_ErrorCallback>
  24142. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  24143. huart->ErrorCode = HAL_UART_ERROR_NONE;
  24144. 800ab52: 687b ldr r3, [r7, #4]
  24145. 800ab54: 2200 movs r2, #0
  24146. 800ab56: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  24147. }
  24148. }
  24149. if (huart->RxXferCount == 0U)
  24150. 800ab5a: 687b ldr r3, [r7, #4]
  24151. 800ab5c: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  24152. 800ab60: b29b uxth r3, r3
  24153. 800ab62: 2b00 cmp r3, #0
  24154. 800ab64: f040 80a0 bne.w 800aca8 <UART_RxISR_8BIT_FIFOEN+0x290>
  24155. {
  24156. /* Disable the UART Parity Error Interrupt and RXFT interrupt*/
  24157. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  24158. 800ab68: 687b ldr r3, [r7, #4]
  24159. 800ab6a: 681b ldr r3, [r3, #0]
  24160. 800ab6c: 673b str r3, [r7, #112] @ 0x70
  24161. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  24162. 800ab6e: 6f3b ldr r3, [r7, #112] @ 0x70
  24163. 800ab70: e853 3f00 ldrex r3, [r3]
  24164. 800ab74: 66fb str r3, [r7, #108] @ 0x6c
  24165. return(result);
  24166. 800ab76: 6efb ldr r3, [r7, #108] @ 0x6c
  24167. 800ab78: f423 7380 bic.w r3, r3, #256 @ 0x100
  24168. 800ab7c: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  24169. 800ab80: 687b ldr r3, [r7, #4]
  24170. 800ab82: 681b ldr r3, [r3, #0]
  24171. 800ab84: 461a mov r2, r3
  24172. 800ab86: f8d7 3098 ldr.w r3, [r7, #152] @ 0x98
  24173. 800ab8a: 67fb str r3, [r7, #124] @ 0x7c
  24174. 800ab8c: 67ba str r2, [r7, #120] @ 0x78
  24175. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  24176. 800ab8e: 6fb9 ldr r1, [r7, #120] @ 0x78
  24177. 800ab90: 6ffa ldr r2, [r7, #124] @ 0x7c
  24178. 800ab92: e841 2300 strex r3, r2, [r1]
  24179. 800ab96: 677b str r3, [r7, #116] @ 0x74
  24180. return(result);
  24181. 800ab98: 6f7b ldr r3, [r7, #116] @ 0x74
  24182. 800ab9a: 2b00 cmp r3, #0
  24183. 800ab9c: d1e4 bne.n 800ab68 <UART_RxISR_8BIT_FIFOEN+0x150>
  24184. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error)
  24185. and RX FIFO Threshold interrupt */
  24186. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  24187. 800ab9e: 687b ldr r3, [r7, #4]
  24188. 800aba0: 681b ldr r3, [r3, #0]
  24189. 800aba2: 3308 adds r3, #8
  24190. 800aba4: 65fb str r3, [r7, #92] @ 0x5c
  24191. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  24192. 800aba6: 6dfb ldr r3, [r7, #92] @ 0x5c
  24193. 800aba8: e853 3f00 ldrex r3, [r3]
  24194. 800abac: 65bb str r3, [r7, #88] @ 0x58
  24195. return(result);
  24196. 800abae: 6dba ldr r2, [r7, #88] @ 0x58
  24197. 800abb0: 4b6e ldr r3, [pc, #440] @ (800ad6c <UART_RxISR_8BIT_FIFOEN+0x354>)
  24198. 800abb2: 4013 ands r3, r2
  24199. 800abb4: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  24200. 800abb8: 687b ldr r3, [r7, #4]
  24201. 800abba: 681b ldr r3, [r3, #0]
  24202. 800abbc: 3308 adds r3, #8
  24203. 800abbe: f8d7 2094 ldr.w r2, [r7, #148] @ 0x94
  24204. 800abc2: 66ba str r2, [r7, #104] @ 0x68
  24205. 800abc4: 667b str r3, [r7, #100] @ 0x64
  24206. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  24207. 800abc6: 6e79 ldr r1, [r7, #100] @ 0x64
  24208. 800abc8: 6eba ldr r2, [r7, #104] @ 0x68
  24209. 800abca: e841 2300 strex r3, r2, [r1]
  24210. 800abce: 663b str r3, [r7, #96] @ 0x60
  24211. return(result);
  24212. 800abd0: 6e3b ldr r3, [r7, #96] @ 0x60
  24213. 800abd2: 2b00 cmp r3, #0
  24214. 800abd4: d1e3 bne.n 800ab9e <UART_RxISR_8BIT_FIFOEN+0x186>
  24215. /* Rx process is completed, restore huart->RxState to Ready */
  24216. huart->RxState = HAL_UART_STATE_READY;
  24217. 800abd6: 687b ldr r3, [r7, #4]
  24218. 800abd8: 2220 movs r2, #32
  24219. 800abda: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  24220. /* Clear RxISR function pointer */
  24221. huart->RxISR = NULL;
  24222. 800abde: 687b ldr r3, [r7, #4]
  24223. 800abe0: 2200 movs r2, #0
  24224. 800abe2: 675a str r2, [r3, #116] @ 0x74
  24225. /* Initialize type of RxEvent to Transfer Complete */
  24226. huart->RxEventType = HAL_UART_RXEVENT_TC;
  24227. 800abe4: 687b ldr r3, [r7, #4]
  24228. 800abe6: 2200 movs r2, #0
  24229. 800abe8: 671a str r2, [r3, #112] @ 0x70
  24230. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  24231. 800abea: 687b ldr r3, [r7, #4]
  24232. 800abec: 681b ldr r3, [r3, #0]
  24233. 800abee: 4a60 ldr r2, [pc, #384] @ (800ad70 <UART_RxISR_8BIT_FIFOEN+0x358>)
  24234. 800abf0: 4293 cmp r3, r2
  24235. 800abf2: d021 beq.n 800ac38 <UART_RxISR_8BIT_FIFOEN+0x220>
  24236. {
  24237. /* Check that USART RTOEN bit is set */
  24238. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  24239. 800abf4: 687b ldr r3, [r7, #4]
  24240. 800abf6: 681b ldr r3, [r3, #0]
  24241. 800abf8: 685b ldr r3, [r3, #4]
  24242. 800abfa: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  24243. 800abfe: 2b00 cmp r3, #0
  24244. 800ac00: d01a beq.n 800ac38 <UART_RxISR_8BIT_FIFOEN+0x220>
  24245. {
  24246. /* Enable the UART Receiver Timeout Interrupt */
  24247. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  24248. 800ac02: 687b ldr r3, [r7, #4]
  24249. 800ac04: 681b ldr r3, [r3, #0]
  24250. 800ac06: 64bb str r3, [r7, #72] @ 0x48
  24251. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  24252. 800ac08: 6cbb ldr r3, [r7, #72] @ 0x48
  24253. 800ac0a: e853 3f00 ldrex r3, [r3]
  24254. 800ac0e: 647b str r3, [r7, #68] @ 0x44
  24255. return(result);
  24256. 800ac10: 6c7b ldr r3, [r7, #68] @ 0x44
  24257. 800ac12: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  24258. 800ac16: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  24259. 800ac1a: 687b ldr r3, [r7, #4]
  24260. 800ac1c: 681b ldr r3, [r3, #0]
  24261. 800ac1e: 461a mov r2, r3
  24262. 800ac20: f8d7 3090 ldr.w r3, [r7, #144] @ 0x90
  24263. 800ac24: 657b str r3, [r7, #84] @ 0x54
  24264. 800ac26: 653a str r2, [r7, #80] @ 0x50
  24265. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  24266. 800ac28: 6d39 ldr r1, [r7, #80] @ 0x50
  24267. 800ac2a: 6d7a ldr r2, [r7, #84] @ 0x54
  24268. 800ac2c: e841 2300 strex r3, r2, [r1]
  24269. 800ac30: 64fb str r3, [r7, #76] @ 0x4c
  24270. return(result);
  24271. 800ac32: 6cfb ldr r3, [r7, #76] @ 0x4c
  24272. 800ac34: 2b00 cmp r3, #0
  24273. 800ac36: d1e4 bne.n 800ac02 <UART_RxISR_8BIT_FIFOEN+0x1ea>
  24274. }
  24275. }
  24276. /* Check current reception Mode :
  24277. If Reception till IDLE event has been selected : */
  24278. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  24279. 800ac38: 687b ldr r3, [r7, #4]
  24280. 800ac3a: 6edb ldr r3, [r3, #108] @ 0x6c
  24281. 800ac3c: 2b01 cmp r3, #1
  24282. 800ac3e: d130 bne.n 800aca2 <UART_RxISR_8BIT_FIFOEN+0x28a>
  24283. {
  24284. /* Set reception type to Standard */
  24285. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  24286. 800ac40: 687b ldr r3, [r7, #4]
  24287. 800ac42: 2200 movs r2, #0
  24288. 800ac44: 66da str r2, [r3, #108] @ 0x6c
  24289. /* Disable IDLE interrupt */
  24290. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  24291. 800ac46: 687b ldr r3, [r7, #4]
  24292. 800ac48: 681b ldr r3, [r3, #0]
  24293. 800ac4a: 637b str r3, [r7, #52] @ 0x34
  24294. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  24295. 800ac4c: 6b7b ldr r3, [r7, #52] @ 0x34
  24296. 800ac4e: e853 3f00 ldrex r3, [r3]
  24297. 800ac52: 633b str r3, [r7, #48] @ 0x30
  24298. return(result);
  24299. 800ac54: 6b3b ldr r3, [r7, #48] @ 0x30
  24300. 800ac56: f023 0310 bic.w r3, r3, #16
  24301. 800ac5a: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  24302. 800ac5e: 687b ldr r3, [r7, #4]
  24303. 800ac60: 681b ldr r3, [r3, #0]
  24304. 800ac62: 461a mov r2, r3
  24305. 800ac64: f8d7 308c ldr.w r3, [r7, #140] @ 0x8c
  24306. 800ac68: 643b str r3, [r7, #64] @ 0x40
  24307. 800ac6a: 63fa str r2, [r7, #60] @ 0x3c
  24308. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  24309. 800ac6c: 6bf9 ldr r1, [r7, #60] @ 0x3c
  24310. 800ac6e: 6c3a ldr r2, [r7, #64] @ 0x40
  24311. 800ac70: e841 2300 strex r3, r2, [r1]
  24312. 800ac74: 63bb str r3, [r7, #56] @ 0x38
  24313. return(result);
  24314. 800ac76: 6bbb ldr r3, [r7, #56] @ 0x38
  24315. 800ac78: 2b00 cmp r3, #0
  24316. 800ac7a: d1e4 bne.n 800ac46 <UART_RxISR_8BIT_FIFOEN+0x22e>
  24317. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  24318. 800ac7c: 687b ldr r3, [r7, #4]
  24319. 800ac7e: 681b ldr r3, [r3, #0]
  24320. 800ac80: 69db ldr r3, [r3, #28]
  24321. 800ac82: f003 0310 and.w r3, r3, #16
  24322. 800ac86: 2b10 cmp r3, #16
  24323. 800ac88: d103 bne.n 800ac92 <UART_RxISR_8BIT_FIFOEN+0x27a>
  24324. {
  24325. /* Clear IDLE Flag */
  24326. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  24327. 800ac8a: 687b ldr r3, [r7, #4]
  24328. 800ac8c: 681b ldr r3, [r3, #0]
  24329. 800ac8e: 2210 movs r2, #16
  24330. 800ac90: 621a str r2, [r3, #32]
  24331. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  24332. /*Call registered Rx Event callback*/
  24333. huart->RxEventCallback(huart, huart->RxXferSize);
  24334. #else
  24335. /*Call legacy weak Rx Event callback*/
  24336. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  24337. 800ac92: 687b ldr r3, [r7, #4]
  24338. 800ac94: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  24339. 800ac98: 4619 mov r1, r3
  24340. 800ac9a: 6878 ldr r0, [r7, #4]
  24341. 800ac9c: f7f6 ffc8 bl 8001c30 <HAL_UARTEx_RxEventCallback>
  24342. 800aca0: e002 b.n 800aca8 <UART_RxISR_8BIT_FIFOEN+0x290>
  24343. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  24344. /*Call registered Rx complete callback*/
  24345. huart->RxCpltCallback(huart);
  24346. #else
  24347. /*Call legacy weak Rx complete callback*/
  24348. HAL_UART_RxCpltCallback(huart);
  24349. 800aca2: 6878 ldr r0, [r7, #4]
  24350. 800aca4: f7f6 ffba bl 8001c1c <HAL_UART_RxCpltCallback>
  24351. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  24352. 800aca8: f8b7 309e ldrh.w r3, [r7, #158] @ 0x9e
  24353. 800acac: 2b00 cmp r3, #0
  24354. 800acae: d006 beq.n 800acbe <UART_RxISR_8BIT_FIFOEN+0x2a6>
  24355. 800acb0: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  24356. 800acb4: f003 0320 and.w r3, r3, #32
  24357. 800acb8: 2b00 cmp r3, #0
  24358. 800acba: f47f aed1 bne.w 800aa60 <UART_RxISR_8BIT_FIFOEN+0x48>
  24359. /* When remaining number of bytes to receive is less than the RX FIFO
  24360. threshold, next incoming frames are processed as if FIFO mode was
  24361. disabled (i.e. one interrupt per received frame).
  24362. */
  24363. rxdatacount = huart->RxXferCount;
  24364. 800acbe: 687b ldr r3, [r7, #4]
  24365. 800acc0: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  24366. 800acc4: f8a7 308a strh.w r3, [r7, #138] @ 0x8a
  24367. if ((rxdatacount != 0U) && (rxdatacount < huart->NbRxDataToProcess))
  24368. 800acc8: f8b7 308a ldrh.w r3, [r7, #138] @ 0x8a
  24369. 800accc: 2b00 cmp r3, #0
  24370. 800acce: d049 beq.n 800ad64 <UART_RxISR_8BIT_FIFOEN+0x34c>
  24371. 800acd0: 687b ldr r3, [r7, #4]
  24372. 800acd2: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  24373. 800acd6: f8b7 208a ldrh.w r2, [r7, #138] @ 0x8a
  24374. 800acda: 429a cmp r2, r3
  24375. 800acdc: d242 bcs.n 800ad64 <UART_RxISR_8BIT_FIFOEN+0x34c>
  24376. {
  24377. /* Disable the UART RXFT interrupt*/
  24378. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  24379. 800acde: 687b ldr r3, [r7, #4]
  24380. 800ace0: 681b ldr r3, [r3, #0]
  24381. 800ace2: 3308 adds r3, #8
  24382. 800ace4: 623b str r3, [r7, #32]
  24383. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  24384. 800ace6: 6a3b ldr r3, [r7, #32]
  24385. 800ace8: e853 3f00 ldrex r3, [r3]
  24386. 800acec: 61fb str r3, [r7, #28]
  24387. return(result);
  24388. 800acee: 69fb ldr r3, [r7, #28]
  24389. 800acf0: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  24390. 800acf4: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  24391. 800acf8: 687b ldr r3, [r7, #4]
  24392. 800acfa: 681b ldr r3, [r3, #0]
  24393. 800acfc: 3308 adds r3, #8
  24394. 800acfe: f8d7 2084 ldr.w r2, [r7, #132] @ 0x84
  24395. 800ad02: 62fa str r2, [r7, #44] @ 0x2c
  24396. 800ad04: 62bb str r3, [r7, #40] @ 0x28
  24397. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  24398. 800ad06: 6ab9 ldr r1, [r7, #40] @ 0x28
  24399. 800ad08: 6afa ldr r2, [r7, #44] @ 0x2c
  24400. 800ad0a: e841 2300 strex r3, r2, [r1]
  24401. 800ad0e: 627b str r3, [r7, #36] @ 0x24
  24402. return(result);
  24403. 800ad10: 6a7b ldr r3, [r7, #36] @ 0x24
  24404. 800ad12: 2b00 cmp r3, #0
  24405. 800ad14: d1e3 bne.n 800acde <UART_RxISR_8BIT_FIFOEN+0x2c6>
  24406. /* Update the RxISR function pointer */
  24407. huart->RxISR = UART_RxISR_8BIT;
  24408. 800ad16: 687b ldr r3, [r7, #4]
  24409. 800ad18: 4a16 ldr r2, [pc, #88] @ (800ad74 <UART_RxISR_8BIT_FIFOEN+0x35c>)
  24410. 800ad1a: 675a str r2, [r3, #116] @ 0x74
  24411. /* Enable the UART Data Register Not Empty interrupt */
  24412. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  24413. 800ad1c: 687b ldr r3, [r7, #4]
  24414. 800ad1e: 681b ldr r3, [r3, #0]
  24415. 800ad20: 60fb str r3, [r7, #12]
  24416. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  24417. 800ad22: 68fb ldr r3, [r7, #12]
  24418. 800ad24: e853 3f00 ldrex r3, [r3]
  24419. 800ad28: 60bb str r3, [r7, #8]
  24420. return(result);
  24421. 800ad2a: 68bb ldr r3, [r7, #8]
  24422. 800ad2c: f043 0320 orr.w r3, r3, #32
  24423. 800ad30: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  24424. 800ad34: 687b ldr r3, [r7, #4]
  24425. 800ad36: 681b ldr r3, [r3, #0]
  24426. 800ad38: 461a mov r2, r3
  24427. 800ad3a: f8d7 3080 ldr.w r3, [r7, #128] @ 0x80
  24428. 800ad3e: 61bb str r3, [r7, #24]
  24429. 800ad40: 617a str r2, [r7, #20]
  24430. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  24431. 800ad42: 6979 ldr r1, [r7, #20]
  24432. 800ad44: 69ba ldr r2, [r7, #24]
  24433. 800ad46: e841 2300 strex r3, r2, [r1]
  24434. 800ad4a: 613b str r3, [r7, #16]
  24435. return(result);
  24436. 800ad4c: 693b ldr r3, [r7, #16]
  24437. 800ad4e: 2b00 cmp r3, #0
  24438. 800ad50: d1e4 bne.n 800ad1c <UART_RxISR_8BIT_FIFOEN+0x304>
  24439. else
  24440. {
  24441. /* Clear RXNE interrupt flag */
  24442. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  24443. }
  24444. }
  24445. 800ad52: e007 b.n 800ad64 <UART_RxISR_8BIT_FIFOEN+0x34c>
  24446. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  24447. 800ad54: 687b ldr r3, [r7, #4]
  24448. 800ad56: 681b ldr r3, [r3, #0]
  24449. 800ad58: 699a ldr r2, [r3, #24]
  24450. 800ad5a: 687b ldr r3, [r7, #4]
  24451. 800ad5c: 681b ldr r3, [r3, #0]
  24452. 800ad5e: f042 0208 orr.w r2, r2, #8
  24453. 800ad62: 619a str r2, [r3, #24]
  24454. }
  24455. 800ad64: bf00 nop
  24456. 800ad66: 37b0 adds r7, #176 @ 0xb0
  24457. 800ad68: 46bd mov sp, r7
  24458. 800ad6a: bd80 pop {r7, pc}
  24459. 800ad6c: effffffe .word 0xeffffffe
  24460. 800ad70: 58000c00 .word 0x58000c00
  24461. 800ad74: 0800a6a9 .word 0x0800a6a9
  24462. 0800ad78 <UART_RxISR_16BIT_FIFOEN>:
  24463. * interruptions have been enabled by HAL_UART_Receive_IT()
  24464. * @param huart UART handle.
  24465. * @retval None
  24466. */
  24467. static void UART_RxISR_16BIT_FIFOEN(UART_HandleTypeDef *huart)
  24468. {
  24469. 800ad78: b580 push {r7, lr}
  24470. 800ad7a: b0ae sub sp, #184 @ 0xb8
  24471. 800ad7c: af00 add r7, sp, #0
  24472. 800ad7e: 6078 str r0, [r7, #4]
  24473. uint16_t *tmp;
  24474. uint16_t uhMask = huart->Mask;
  24475. 800ad80: 687b ldr r3, [r7, #4]
  24476. 800ad82: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  24477. 800ad86: f8a7 30b2 strh.w r3, [r7, #178] @ 0xb2
  24478. uint16_t uhdata;
  24479. uint16_t nb_rx_data;
  24480. uint16_t rxdatacount;
  24481. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  24482. 800ad8a: 687b ldr r3, [r7, #4]
  24483. 800ad8c: 681b ldr r3, [r3, #0]
  24484. 800ad8e: 69db ldr r3, [r3, #28]
  24485. 800ad90: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  24486. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  24487. 800ad94: 687b ldr r3, [r7, #4]
  24488. 800ad96: 681b ldr r3, [r3, #0]
  24489. 800ad98: 681b ldr r3, [r3, #0]
  24490. 800ad9a: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  24491. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  24492. 800ad9e: 687b ldr r3, [r7, #4]
  24493. 800ada0: 681b ldr r3, [r3, #0]
  24494. 800ada2: 689b ldr r3, [r3, #8]
  24495. 800ada4: f8c7 30a8 str.w r3, [r7, #168] @ 0xa8
  24496. /* Check that a Rx process is ongoing */
  24497. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  24498. 800ada8: 687b ldr r3, [r7, #4]
  24499. 800adaa: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  24500. 800adae: 2b22 cmp r3, #34 @ 0x22
  24501. 800adb0: f040 8184 bne.w 800b0bc <UART_RxISR_16BIT_FIFOEN+0x344>
  24502. {
  24503. nb_rx_data = huart->NbRxDataToProcess;
  24504. 800adb4: 687b ldr r3, [r7, #4]
  24505. 800adb6: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  24506. 800adba: f8a7 30a6 strh.w r3, [r7, #166] @ 0xa6
  24507. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  24508. 800adbe: e127 b.n 800b010 <UART_RxISR_16BIT_FIFOEN+0x298>
  24509. {
  24510. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  24511. 800adc0: 687b ldr r3, [r7, #4]
  24512. 800adc2: 681b ldr r3, [r3, #0]
  24513. 800adc4: 6a5b ldr r3, [r3, #36] @ 0x24
  24514. 800adc6: f8a7 30a4 strh.w r3, [r7, #164] @ 0xa4
  24515. tmp = (uint16_t *) huart->pRxBuffPtr ;
  24516. 800adca: 687b ldr r3, [r7, #4]
  24517. 800adcc: 6d9b ldr r3, [r3, #88] @ 0x58
  24518. 800adce: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  24519. *tmp = (uint16_t)(uhdata & uhMask);
  24520. 800add2: f8b7 20a4 ldrh.w r2, [r7, #164] @ 0xa4
  24521. 800add6: f8b7 30b2 ldrh.w r3, [r7, #178] @ 0xb2
  24522. 800adda: 4013 ands r3, r2
  24523. 800addc: b29a uxth r2, r3
  24524. 800adde: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  24525. 800ade2: 801a strh r2, [r3, #0]
  24526. huart->pRxBuffPtr += 2U;
  24527. 800ade4: 687b ldr r3, [r7, #4]
  24528. 800ade6: 6d9b ldr r3, [r3, #88] @ 0x58
  24529. 800ade8: 1c9a adds r2, r3, #2
  24530. 800adea: 687b ldr r3, [r7, #4]
  24531. 800adec: 659a str r2, [r3, #88] @ 0x58
  24532. huart->RxXferCount--;
  24533. 800adee: 687b ldr r3, [r7, #4]
  24534. 800adf0: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  24535. 800adf4: b29b uxth r3, r3
  24536. 800adf6: 3b01 subs r3, #1
  24537. 800adf8: b29a uxth r2, r3
  24538. 800adfa: 687b ldr r3, [r7, #4]
  24539. 800adfc: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  24540. isrflags = READ_REG(huart->Instance->ISR);
  24541. 800ae00: 687b ldr r3, [r7, #4]
  24542. 800ae02: 681b ldr r3, [r3, #0]
  24543. 800ae04: 69db ldr r3, [r3, #28]
  24544. 800ae06: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  24545. /* If some non blocking errors occurred */
  24546. if ((isrflags & (USART_ISR_PE | USART_ISR_FE | USART_ISR_NE)) != 0U)
  24547. 800ae0a: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  24548. 800ae0e: f003 0307 and.w r3, r3, #7
  24549. 800ae12: 2b00 cmp r3, #0
  24550. 800ae14: d053 beq.n 800aebe <UART_RxISR_16BIT_FIFOEN+0x146>
  24551. {
  24552. /* UART parity error interrupt occurred -------------------------------------*/
  24553. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  24554. 800ae16: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  24555. 800ae1a: f003 0301 and.w r3, r3, #1
  24556. 800ae1e: 2b00 cmp r3, #0
  24557. 800ae20: d011 beq.n 800ae46 <UART_RxISR_16BIT_FIFOEN+0xce>
  24558. 800ae22: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  24559. 800ae26: f403 7380 and.w r3, r3, #256 @ 0x100
  24560. 800ae2a: 2b00 cmp r3, #0
  24561. 800ae2c: d00b beq.n 800ae46 <UART_RxISR_16BIT_FIFOEN+0xce>
  24562. {
  24563. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  24564. 800ae2e: 687b ldr r3, [r7, #4]
  24565. 800ae30: 681b ldr r3, [r3, #0]
  24566. 800ae32: 2201 movs r2, #1
  24567. 800ae34: 621a str r2, [r3, #32]
  24568. huart->ErrorCode |= HAL_UART_ERROR_PE;
  24569. 800ae36: 687b ldr r3, [r7, #4]
  24570. 800ae38: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  24571. 800ae3c: f043 0201 orr.w r2, r3, #1
  24572. 800ae40: 687b ldr r3, [r7, #4]
  24573. 800ae42: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  24574. }
  24575. /* UART frame error interrupt occurred --------------------------------------*/
  24576. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  24577. 800ae46: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  24578. 800ae4a: f003 0302 and.w r3, r3, #2
  24579. 800ae4e: 2b00 cmp r3, #0
  24580. 800ae50: d011 beq.n 800ae76 <UART_RxISR_16BIT_FIFOEN+0xfe>
  24581. 800ae52: f8d7 30a8 ldr.w r3, [r7, #168] @ 0xa8
  24582. 800ae56: f003 0301 and.w r3, r3, #1
  24583. 800ae5a: 2b00 cmp r3, #0
  24584. 800ae5c: d00b beq.n 800ae76 <UART_RxISR_16BIT_FIFOEN+0xfe>
  24585. {
  24586. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  24587. 800ae5e: 687b ldr r3, [r7, #4]
  24588. 800ae60: 681b ldr r3, [r3, #0]
  24589. 800ae62: 2202 movs r2, #2
  24590. 800ae64: 621a str r2, [r3, #32]
  24591. huart->ErrorCode |= HAL_UART_ERROR_FE;
  24592. 800ae66: 687b ldr r3, [r7, #4]
  24593. 800ae68: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  24594. 800ae6c: f043 0204 orr.w r2, r3, #4
  24595. 800ae70: 687b ldr r3, [r7, #4]
  24596. 800ae72: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  24597. }
  24598. /* UART noise error interrupt occurred --------------------------------------*/
  24599. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  24600. 800ae76: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  24601. 800ae7a: f003 0304 and.w r3, r3, #4
  24602. 800ae7e: 2b00 cmp r3, #0
  24603. 800ae80: d011 beq.n 800aea6 <UART_RxISR_16BIT_FIFOEN+0x12e>
  24604. 800ae82: f8d7 30a8 ldr.w r3, [r7, #168] @ 0xa8
  24605. 800ae86: f003 0301 and.w r3, r3, #1
  24606. 800ae8a: 2b00 cmp r3, #0
  24607. 800ae8c: d00b beq.n 800aea6 <UART_RxISR_16BIT_FIFOEN+0x12e>
  24608. {
  24609. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  24610. 800ae8e: 687b ldr r3, [r7, #4]
  24611. 800ae90: 681b ldr r3, [r3, #0]
  24612. 800ae92: 2204 movs r2, #4
  24613. 800ae94: 621a str r2, [r3, #32]
  24614. huart->ErrorCode |= HAL_UART_ERROR_NE;
  24615. 800ae96: 687b ldr r3, [r7, #4]
  24616. 800ae98: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  24617. 800ae9c: f043 0202 orr.w r2, r3, #2
  24618. 800aea0: 687b ldr r3, [r7, #4]
  24619. 800aea2: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  24620. }
  24621. /* Call UART Error Call back function if need be ----------------------------*/
  24622. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  24623. 800aea6: 687b ldr r3, [r7, #4]
  24624. 800aea8: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  24625. 800aeac: 2b00 cmp r3, #0
  24626. 800aeae: d006 beq.n 800aebe <UART_RxISR_16BIT_FIFOEN+0x146>
  24627. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  24628. /*Call registered error callback*/
  24629. huart->ErrorCallback(huart);
  24630. #else
  24631. /*Call legacy weak error callback*/
  24632. HAL_UART_ErrorCallback(huart);
  24633. 800aeb0: 6878 ldr r0, [r7, #4]
  24634. 800aeb2: f7fe f961 bl 8009178 <HAL_UART_ErrorCallback>
  24635. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  24636. huart->ErrorCode = HAL_UART_ERROR_NONE;
  24637. 800aeb6: 687b ldr r3, [r7, #4]
  24638. 800aeb8: 2200 movs r2, #0
  24639. 800aeba: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  24640. }
  24641. }
  24642. if (huart->RxXferCount == 0U)
  24643. 800aebe: 687b ldr r3, [r7, #4]
  24644. 800aec0: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  24645. 800aec4: b29b uxth r3, r3
  24646. 800aec6: 2b00 cmp r3, #0
  24647. 800aec8: f040 80a2 bne.w 800b010 <UART_RxISR_16BIT_FIFOEN+0x298>
  24648. {
  24649. /* Disable the UART Parity Error Interrupt and RXFT interrupt*/
  24650. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  24651. 800aecc: 687b ldr r3, [r7, #4]
  24652. 800aece: 681b ldr r3, [r3, #0]
  24653. 800aed0: 677b str r3, [r7, #116] @ 0x74
  24654. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  24655. 800aed2: 6f7b ldr r3, [r7, #116] @ 0x74
  24656. 800aed4: e853 3f00 ldrex r3, [r3]
  24657. 800aed8: 673b str r3, [r7, #112] @ 0x70
  24658. return(result);
  24659. 800aeda: 6f3b ldr r3, [r7, #112] @ 0x70
  24660. 800aedc: f423 7380 bic.w r3, r3, #256 @ 0x100
  24661. 800aee0: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  24662. 800aee4: 687b ldr r3, [r7, #4]
  24663. 800aee6: 681b ldr r3, [r3, #0]
  24664. 800aee8: 461a mov r2, r3
  24665. 800aeea: f8d7 309c ldr.w r3, [r7, #156] @ 0x9c
  24666. 800aeee: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  24667. 800aef2: 67fa str r2, [r7, #124] @ 0x7c
  24668. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  24669. 800aef4: 6ff9 ldr r1, [r7, #124] @ 0x7c
  24670. 800aef6: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80
  24671. 800aefa: e841 2300 strex r3, r2, [r1]
  24672. 800aefe: 67bb str r3, [r7, #120] @ 0x78
  24673. return(result);
  24674. 800af00: 6fbb ldr r3, [r7, #120] @ 0x78
  24675. 800af02: 2b00 cmp r3, #0
  24676. 800af04: d1e2 bne.n 800aecc <UART_RxISR_16BIT_FIFOEN+0x154>
  24677. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error)
  24678. and RX FIFO Threshold interrupt */
  24679. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  24680. 800af06: 687b ldr r3, [r7, #4]
  24681. 800af08: 681b ldr r3, [r3, #0]
  24682. 800af0a: 3308 adds r3, #8
  24683. 800af0c: 663b str r3, [r7, #96] @ 0x60
  24684. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  24685. 800af0e: 6e3b ldr r3, [r7, #96] @ 0x60
  24686. 800af10: e853 3f00 ldrex r3, [r3]
  24687. 800af14: 65fb str r3, [r7, #92] @ 0x5c
  24688. return(result);
  24689. 800af16: 6dfa ldr r2, [r7, #92] @ 0x5c
  24690. 800af18: 4b6e ldr r3, [pc, #440] @ (800b0d4 <UART_RxISR_16BIT_FIFOEN+0x35c>)
  24691. 800af1a: 4013 ands r3, r2
  24692. 800af1c: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  24693. 800af20: 687b ldr r3, [r7, #4]
  24694. 800af22: 681b ldr r3, [r3, #0]
  24695. 800af24: 3308 adds r3, #8
  24696. 800af26: f8d7 2098 ldr.w r2, [r7, #152] @ 0x98
  24697. 800af2a: 66fa str r2, [r7, #108] @ 0x6c
  24698. 800af2c: 66bb str r3, [r7, #104] @ 0x68
  24699. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  24700. 800af2e: 6eb9 ldr r1, [r7, #104] @ 0x68
  24701. 800af30: 6efa ldr r2, [r7, #108] @ 0x6c
  24702. 800af32: e841 2300 strex r3, r2, [r1]
  24703. 800af36: 667b str r3, [r7, #100] @ 0x64
  24704. return(result);
  24705. 800af38: 6e7b ldr r3, [r7, #100] @ 0x64
  24706. 800af3a: 2b00 cmp r3, #0
  24707. 800af3c: d1e3 bne.n 800af06 <UART_RxISR_16BIT_FIFOEN+0x18e>
  24708. /* Rx process is completed, restore huart->RxState to Ready */
  24709. huart->RxState = HAL_UART_STATE_READY;
  24710. 800af3e: 687b ldr r3, [r7, #4]
  24711. 800af40: 2220 movs r2, #32
  24712. 800af42: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  24713. /* Clear RxISR function pointer */
  24714. huart->RxISR = NULL;
  24715. 800af46: 687b ldr r3, [r7, #4]
  24716. 800af48: 2200 movs r2, #0
  24717. 800af4a: 675a str r2, [r3, #116] @ 0x74
  24718. /* Initialize type of RxEvent to Transfer Complete */
  24719. huart->RxEventType = HAL_UART_RXEVENT_TC;
  24720. 800af4c: 687b ldr r3, [r7, #4]
  24721. 800af4e: 2200 movs r2, #0
  24722. 800af50: 671a str r2, [r3, #112] @ 0x70
  24723. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  24724. 800af52: 687b ldr r3, [r7, #4]
  24725. 800af54: 681b ldr r3, [r3, #0]
  24726. 800af56: 4a60 ldr r2, [pc, #384] @ (800b0d8 <UART_RxISR_16BIT_FIFOEN+0x360>)
  24727. 800af58: 4293 cmp r3, r2
  24728. 800af5a: d021 beq.n 800afa0 <UART_RxISR_16BIT_FIFOEN+0x228>
  24729. {
  24730. /* Check that USART RTOEN bit is set */
  24731. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  24732. 800af5c: 687b ldr r3, [r7, #4]
  24733. 800af5e: 681b ldr r3, [r3, #0]
  24734. 800af60: 685b ldr r3, [r3, #4]
  24735. 800af62: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  24736. 800af66: 2b00 cmp r3, #0
  24737. 800af68: d01a beq.n 800afa0 <UART_RxISR_16BIT_FIFOEN+0x228>
  24738. {
  24739. /* Enable the UART Receiver Timeout Interrupt */
  24740. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  24741. 800af6a: 687b ldr r3, [r7, #4]
  24742. 800af6c: 681b ldr r3, [r3, #0]
  24743. 800af6e: 64fb str r3, [r7, #76] @ 0x4c
  24744. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  24745. 800af70: 6cfb ldr r3, [r7, #76] @ 0x4c
  24746. 800af72: e853 3f00 ldrex r3, [r3]
  24747. 800af76: 64bb str r3, [r7, #72] @ 0x48
  24748. return(result);
  24749. 800af78: 6cbb ldr r3, [r7, #72] @ 0x48
  24750. 800af7a: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  24751. 800af7e: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  24752. 800af82: 687b ldr r3, [r7, #4]
  24753. 800af84: 681b ldr r3, [r3, #0]
  24754. 800af86: 461a mov r2, r3
  24755. 800af88: f8d7 3094 ldr.w r3, [r7, #148] @ 0x94
  24756. 800af8c: 65bb str r3, [r7, #88] @ 0x58
  24757. 800af8e: 657a str r2, [r7, #84] @ 0x54
  24758. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  24759. 800af90: 6d79 ldr r1, [r7, #84] @ 0x54
  24760. 800af92: 6dba ldr r2, [r7, #88] @ 0x58
  24761. 800af94: e841 2300 strex r3, r2, [r1]
  24762. 800af98: 653b str r3, [r7, #80] @ 0x50
  24763. return(result);
  24764. 800af9a: 6d3b ldr r3, [r7, #80] @ 0x50
  24765. 800af9c: 2b00 cmp r3, #0
  24766. 800af9e: d1e4 bne.n 800af6a <UART_RxISR_16BIT_FIFOEN+0x1f2>
  24767. }
  24768. }
  24769. /* Check current reception Mode :
  24770. If Reception till IDLE event has been selected : */
  24771. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  24772. 800afa0: 687b ldr r3, [r7, #4]
  24773. 800afa2: 6edb ldr r3, [r3, #108] @ 0x6c
  24774. 800afa4: 2b01 cmp r3, #1
  24775. 800afa6: d130 bne.n 800b00a <UART_RxISR_16BIT_FIFOEN+0x292>
  24776. {
  24777. /* Set reception type to Standard */
  24778. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  24779. 800afa8: 687b ldr r3, [r7, #4]
  24780. 800afaa: 2200 movs r2, #0
  24781. 800afac: 66da str r2, [r3, #108] @ 0x6c
  24782. /* Disable IDLE interrupt */
  24783. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  24784. 800afae: 687b ldr r3, [r7, #4]
  24785. 800afb0: 681b ldr r3, [r3, #0]
  24786. 800afb2: 63bb str r3, [r7, #56] @ 0x38
  24787. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  24788. 800afb4: 6bbb ldr r3, [r7, #56] @ 0x38
  24789. 800afb6: e853 3f00 ldrex r3, [r3]
  24790. 800afba: 637b str r3, [r7, #52] @ 0x34
  24791. return(result);
  24792. 800afbc: 6b7b ldr r3, [r7, #52] @ 0x34
  24793. 800afbe: f023 0310 bic.w r3, r3, #16
  24794. 800afc2: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  24795. 800afc6: 687b ldr r3, [r7, #4]
  24796. 800afc8: 681b ldr r3, [r3, #0]
  24797. 800afca: 461a mov r2, r3
  24798. 800afcc: f8d7 3090 ldr.w r3, [r7, #144] @ 0x90
  24799. 800afd0: 647b str r3, [r7, #68] @ 0x44
  24800. 800afd2: 643a str r2, [r7, #64] @ 0x40
  24801. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  24802. 800afd4: 6c39 ldr r1, [r7, #64] @ 0x40
  24803. 800afd6: 6c7a ldr r2, [r7, #68] @ 0x44
  24804. 800afd8: e841 2300 strex r3, r2, [r1]
  24805. 800afdc: 63fb str r3, [r7, #60] @ 0x3c
  24806. return(result);
  24807. 800afde: 6bfb ldr r3, [r7, #60] @ 0x3c
  24808. 800afe0: 2b00 cmp r3, #0
  24809. 800afe2: d1e4 bne.n 800afae <UART_RxISR_16BIT_FIFOEN+0x236>
  24810. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  24811. 800afe4: 687b ldr r3, [r7, #4]
  24812. 800afe6: 681b ldr r3, [r3, #0]
  24813. 800afe8: 69db ldr r3, [r3, #28]
  24814. 800afea: f003 0310 and.w r3, r3, #16
  24815. 800afee: 2b10 cmp r3, #16
  24816. 800aff0: d103 bne.n 800affa <UART_RxISR_16BIT_FIFOEN+0x282>
  24817. {
  24818. /* Clear IDLE Flag */
  24819. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  24820. 800aff2: 687b ldr r3, [r7, #4]
  24821. 800aff4: 681b ldr r3, [r3, #0]
  24822. 800aff6: 2210 movs r2, #16
  24823. 800aff8: 621a str r2, [r3, #32]
  24824. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  24825. /*Call registered Rx Event callback*/
  24826. huart->RxEventCallback(huart, huart->RxXferSize);
  24827. #else
  24828. /*Call legacy weak Rx Event callback*/
  24829. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  24830. 800affa: 687b ldr r3, [r7, #4]
  24831. 800affc: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  24832. 800b000: 4619 mov r1, r3
  24833. 800b002: 6878 ldr r0, [r7, #4]
  24834. 800b004: f7f6 fe14 bl 8001c30 <HAL_UARTEx_RxEventCallback>
  24835. 800b008: e002 b.n 800b010 <UART_RxISR_16BIT_FIFOEN+0x298>
  24836. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  24837. /*Call registered Rx complete callback*/
  24838. huart->RxCpltCallback(huart);
  24839. #else
  24840. /*Call legacy weak Rx complete callback*/
  24841. HAL_UART_RxCpltCallback(huart);
  24842. 800b00a: 6878 ldr r0, [r7, #4]
  24843. 800b00c: f7f6 fe06 bl 8001c1c <HAL_UART_RxCpltCallback>
  24844. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  24845. 800b010: f8b7 30a6 ldrh.w r3, [r7, #166] @ 0xa6
  24846. 800b014: 2b00 cmp r3, #0
  24847. 800b016: d006 beq.n 800b026 <UART_RxISR_16BIT_FIFOEN+0x2ae>
  24848. 800b018: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  24849. 800b01c: f003 0320 and.w r3, r3, #32
  24850. 800b020: 2b00 cmp r3, #0
  24851. 800b022: f47f aecd bne.w 800adc0 <UART_RxISR_16BIT_FIFOEN+0x48>
  24852. /* When remaining number of bytes to receive is less than the RX FIFO
  24853. threshold, next incoming frames are processed as if FIFO mode was
  24854. disabled (i.e. one interrupt per received frame).
  24855. */
  24856. rxdatacount = huart->RxXferCount;
  24857. 800b026: 687b ldr r3, [r7, #4]
  24858. 800b028: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  24859. 800b02c: f8a7 308e strh.w r3, [r7, #142] @ 0x8e
  24860. if ((rxdatacount != 0U) && (rxdatacount < huart->NbRxDataToProcess))
  24861. 800b030: f8b7 308e ldrh.w r3, [r7, #142] @ 0x8e
  24862. 800b034: 2b00 cmp r3, #0
  24863. 800b036: d049 beq.n 800b0cc <UART_RxISR_16BIT_FIFOEN+0x354>
  24864. 800b038: 687b ldr r3, [r7, #4]
  24865. 800b03a: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  24866. 800b03e: f8b7 208e ldrh.w r2, [r7, #142] @ 0x8e
  24867. 800b042: 429a cmp r2, r3
  24868. 800b044: d242 bcs.n 800b0cc <UART_RxISR_16BIT_FIFOEN+0x354>
  24869. {
  24870. /* Disable the UART RXFT interrupt*/
  24871. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  24872. 800b046: 687b ldr r3, [r7, #4]
  24873. 800b048: 681b ldr r3, [r3, #0]
  24874. 800b04a: 3308 adds r3, #8
  24875. 800b04c: 627b str r3, [r7, #36] @ 0x24
  24876. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  24877. 800b04e: 6a7b ldr r3, [r7, #36] @ 0x24
  24878. 800b050: e853 3f00 ldrex r3, [r3]
  24879. 800b054: 623b str r3, [r7, #32]
  24880. return(result);
  24881. 800b056: 6a3b ldr r3, [r7, #32]
  24882. 800b058: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  24883. 800b05c: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  24884. 800b060: 687b ldr r3, [r7, #4]
  24885. 800b062: 681b ldr r3, [r3, #0]
  24886. 800b064: 3308 adds r3, #8
  24887. 800b066: f8d7 2088 ldr.w r2, [r7, #136] @ 0x88
  24888. 800b06a: 633a str r2, [r7, #48] @ 0x30
  24889. 800b06c: 62fb str r3, [r7, #44] @ 0x2c
  24890. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  24891. 800b06e: 6af9 ldr r1, [r7, #44] @ 0x2c
  24892. 800b070: 6b3a ldr r2, [r7, #48] @ 0x30
  24893. 800b072: e841 2300 strex r3, r2, [r1]
  24894. 800b076: 62bb str r3, [r7, #40] @ 0x28
  24895. return(result);
  24896. 800b078: 6abb ldr r3, [r7, #40] @ 0x28
  24897. 800b07a: 2b00 cmp r3, #0
  24898. 800b07c: d1e3 bne.n 800b046 <UART_RxISR_16BIT_FIFOEN+0x2ce>
  24899. /* Update the RxISR function pointer */
  24900. huart->RxISR = UART_RxISR_16BIT;
  24901. 800b07e: 687b ldr r3, [r7, #4]
  24902. 800b080: 4a16 ldr r2, [pc, #88] @ (800b0dc <UART_RxISR_16BIT_FIFOEN+0x364>)
  24903. 800b082: 675a str r2, [r3, #116] @ 0x74
  24904. /* Enable the UART Data Register Not Empty interrupt */
  24905. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  24906. 800b084: 687b ldr r3, [r7, #4]
  24907. 800b086: 681b ldr r3, [r3, #0]
  24908. 800b088: 613b str r3, [r7, #16]
  24909. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  24910. 800b08a: 693b ldr r3, [r7, #16]
  24911. 800b08c: e853 3f00 ldrex r3, [r3]
  24912. 800b090: 60fb str r3, [r7, #12]
  24913. return(result);
  24914. 800b092: 68fb ldr r3, [r7, #12]
  24915. 800b094: f043 0320 orr.w r3, r3, #32
  24916. 800b098: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  24917. 800b09c: 687b ldr r3, [r7, #4]
  24918. 800b09e: 681b ldr r3, [r3, #0]
  24919. 800b0a0: 461a mov r2, r3
  24920. 800b0a2: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84
  24921. 800b0a6: 61fb str r3, [r7, #28]
  24922. 800b0a8: 61ba str r2, [r7, #24]
  24923. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  24924. 800b0aa: 69b9 ldr r1, [r7, #24]
  24925. 800b0ac: 69fa ldr r2, [r7, #28]
  24926. 800b0ae: e841 2300 strex r3, r2, [r1]
  24927. 800b0b2: 617b str r3, [r7, #20]
  24928. return(result);
  24929. 800b0b4: 697b ldr r3, [r7, #20]
  24930. 800b0b6: 2b00 cmp r3, #0
  24931. 800b0b8: d1e4 bne.n 800b084 <UART_RxISR_16BIT_FIFOEN+0x30c>
  24932. else
  24933. {
  24934. /* Clear RXNE interrupt flag */
  24935. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  24936. }
  24937. }
  24938. 800b0ba: e007 b.n 800b0cc <UART_RxISR_16BIT_FIFOEN+0x354>
  24939. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  24940. 800b0bc: 687b ldr r3, [r7, #4]
  24941. 800b0be: 681b ldr r3, [r3, #0]
  24942. 800b0c0: 699a ldr r2, [r3, #24]
  24943. 800b0c2: 687b ldr r3, [r7, #4]
  24944. 800b0c4: 681b ldr r3, [r3, #0]
  24945. 800b0c6: f042 0208 orr.w r2, r2, #8
  24946. 800b0ca: 619a str r2, [r3, #24]
  24947. }
  24948. 800b0cc: bf00 nop
  24949. 800b0ce: 37b8 adds r7, #184 @ 0xb8
  24950. 800b0d0: 46bd mov sp, r7
  24951. 800b0d2: bd80 pop {r7, pc}
  24952. 800b0d4: effffffe .word 0xeffffffe
  24953. 800b0d8: 58000c00 .word 0x58000c00
  24954. 800b0dc: 0800a861 .word 0x0800a861
  24955. 0800b0e0 <HAL_UARTEx_WakeupCallback>:
  24956. * @brief UART wakeup from Stop mode callback.
  24957. * @param huart UART handle.
  24958. * @retval None
  24959. */
  24960. __weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
  24961. {
  24962. 800b0e0: b480 push {r7}
  24963. 800b0e2: b083 sub sp, #12
  24964. 800b0e4: af00 add r7, sp, #0
  24965. 800b0e6: 6078 str r0, [r7, #4]
  24966. UNUSED(huart);
  24967. /* NOTE : This function should not be modified, when the callback is needed,
  24968. the HAL_UARTEx_WakeupCallback can be implemented in the user file.
  24969. */
  24970. }
  24971. 800b0e8: bf00 nop
  24972. 800b0ea: 370c adds r7, #12
  24973. 800b0ec: 46bd mov sp, r7
  24974. 800b0ee: f85d 7b04 ldr.w r7, [sp], #4
  24975. 800b0f2: 4770 bx lr
  24976. 0800b0f4 <HAL_UARTEx_RxFifoFullCallback>:
  24977. * @brief UART RX Fifo full callback.
  24978. * @param huart UART handle.
  24979. * @retval None
  24980. */
  24981. __weak void HAL_UARTEx_RxFifoFullCallback(UART_HandleTypeDef *huart)
  24982. {
  24983. 800b0f4: b480 push {r7}
  24984. 800b0f6: b083 sub sp, #12
  24985. 800b0f8: af00 add r7, sp, #0
  24986. 800b0fa: 6078 str r0, [r7, #4]
  24987. UNUSED(huart);
  24988. /* NOTE : This function should not be modified, when the callback is needed,
  24989. the HAL_UARTEx_RxFifoFullCallback can be implemented in the user file.
  24990. */
  24991. }
  24992. 800b0fc: bf00 nop
  24993. 800b0fe: 370c adds r7, #12
  24994. 800b100: 46bd mov sp, r7
  24995. 800b102: f85d 7b04 ldr.w r7, [sp], #4
  24996. 800b106: 4770 bx lr
  24997. 0800b108 <HAL_UARTEx_TxFifoEmptyCallback>:
  24998. * @brief UART TX Fifo empty callback.
  24999. * @param huart UART handle.
  25000. * @retval None
  25001. */
  25002. __weak void HAL_UARTEx_TxFifoEmptyCallback(UART_HandleTypeDef *huart)
  25003. {
  25004. 800b108: b480 push {r7}
  25005. 800b10a: b083 sub sp, #12
  25006. 800b10c: af00 add r7, sp, #0
  25007. 800b10e: 6078 str r0, [r7, #4]
  25008. UNUSED(huart);
  25009. /* NOTE : This function should not be modified, when the callback is needed,
  25010. the HAL_UARTEx_TxFifoEmptyCallback can be implemented in the user file.
  25011. */
  25012. }
  25013. 800b110: bf00 nop
  25014. 800b112: 370c adds r7, #12
  25015. 800b114: 46bd mov sp, r7
  25016. 800b116: f85d 7b04 ldr.w r7, [sp], #4
  25017. 800b11a: 4770 bx lr
  25018. 0800b11c <HAL_UARTEx_DisableFifoMode>:
  25019. * @brief Disable the FIFO mode.
  25020. * @param huart UART handle.
  25021. * @retval HAL status
  25022. */
  25023. HAL_StatusTypeDef HAL_UARTEx_DisableFifoMode(UART_HandleTypeDef *huart)
  25024. {
  25025. 800b11c: b480 push {r7}
  25026. 800b11e: b085 sub sp, #20
  25027. 800b120: af00 add r7, sp, #0
  25028. 800b122: 6078 str r0, [r7, #4]
  25029. /* Check parameters */
  25030. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  25031. /* Process Locked */
  25032. __HAL_LOCK(huart);
  25033. 800b124: 687b ldr r3, [r7, #4]
  25034. 800b126: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  25035. 800b12a: 2b01 cmp r3, #1
  25036. 800b12c: d101 bne.n 800b132 <HAL_UARTEx_DisableFifoMode+0x16>
  25037. 800b12e: 2302 movs r3, #2
  25038. 800b130: e027 b.n 800b182 <HAL_UARTEx_DisableFifoMode+0x66>
  25039. 800b132: 687b ldr r3, [r7, #4]
  25040. 800b134: 2201 movs r2, #1
  25041. 800b136: f883 2084 strb.w r2, [r3, #132] @ 0x84
  25042. huart->gState = HAL_UART_STATE_BUSY;
  25043. 800b13a: 687b ldr r3, [r7, #4]
  25044. 800b13c: 2224 movs r2, #36 @ 0x24
  25045. 800b13e: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  25046. /* Save actual UART configuration */
  25047. tmpcr1 = READ_REG(huart->Instance->CR1);
  25048. 800b142: 687b ldr r3, [r7, #4]
  25049. 800b144: 681b ldr r3, [r3, #0]
  25050. 800b146: 681b ldr r3, [r3, #0]
  25051. 800b148: 60fb str r3, [r7, #12]
  25052. /* Disable UART */
  25053. __HAL_UART_DISABLE(huart);
  25054. 800b14a: 687b ldr r3, [r7, #4]
  25055. 800b14c: 681b ldr r3, [r3, #0]
  25056. 800b14e: 681a ldr r2, [r3, #0]
  25057. 800b150: 687b ldr r3, [r7, #4]
  25058. 800b152: 681b ldr r3, [r3, #0]
  25059. 800b154: f022 0201 bic.w r2, r2, #1
  25060. 800b158: 601a str r2, [r3, #0]
  25061. /* Enable FIFO mode */
  25062. CLEAR_BIT(tmpcr1, USART_CR1_FIFOEN);
  25063. 800b15a: 68fb ldr r3, [r7, #12]
  25064. 800b15c: f023 5300 bic.w r3, r3, #536870912 @ 0x20000000
  25065. 800b160: 60fb str r3, [r7, #12]
  25066. huart->FifoMode = UART_FIFOMODE_DISABLE;
  25067. 800b162: 687b ldr r3, [r7, #4]
  25068. 800b164: 2200 movs r2, #0
  25069. 800b166: 665a str r2, [r3, #100] @ 0x64
  25070. /* Restore UART configuration */
  25071. WRITE_REG(huart->Instance->CR1, tmpcr1);
  25072. 800b168: 687b ldr r3, [r7, #4]
  25073. 800b16a: 681b ldr r3, [r3, #0]
  25074. 800b16c: 68fa ldr r2, [r7, #12]
  25075. 800b16e: 601a str r2, [r3, #0]
  25076. huart->gState = HAL_UART_STATE_READY;
  25077. 800b170: 687b ldr r3, [r7, #4]
  25078. 800b172: 2220 movs r2, #32
  25079. 800b174: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  25080. /* Process Unlocked */
  25081. __HAL_UNLOCK(huart);
  25082. 800b178: 687b ldr r3, [r7, #4]
  25083. 800b17a: 2200 movs r2, #0
  25084. 800b17c: f883 2084 strb.w r2, [r3, #132] @ 0x84
  25085. return HAL_OK;
  25086. 800b180: 2300 movs r3, #0
  25087. }
  25088. 800b182: 4618 mov r0, r3
  25089. 800b184: 3714 adds r7, #20
  25090. 800b186: 46bd mov sp, r7
  25091. 800b188: f85d 7b04 ldr.w r7, [sp], #4
  25092. 800b18c: 4770 bx lr
  25093. 0800b18e <HAL_UARTEx_SetTxFifoThreshold>:
  25094. * @arg @ref UART_TXFIFO_THRESHOLD_7_8
  25095. * @arg @ref UART_TXFIFO_THRESHOLD_8_8
  25096. * @retval HAL status
  25097. */
  25098. HAL_StatusTypeDef HAL_UARTEx_SetTxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold)
  25099. {
  25100. 800b18e: b580 push {r7, lr}
  25101. 800b190: b084 sub sp, #16
  25102. 800b192: af00 add r7, sp, #0
  25103. 800b194: 6078 str r0, [r7, #4]
  25104. 800b196: 6039 str r1, [r7, #0]
  25105. /* Check parameters */
  25106. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  25107. assert_param(IS_UART_TXFIFO_THRESHOLD(Threshold));
  25108. /* Process Locked */
  25109. __HAL_LOCK(huart);
  25110. 800b198: 687b ldr r3, [r7, #4]
  25111. 800b19a: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  25112. 800b19e: 2b01 cmp r3, #1
  25113. 800b1a0: d101 bne.n 800b1a6 <HAL_UARTEx_SetTxFifoThreshold+0x18>
  25114. 800b1a2: 2302 movs r3, #2
  25115. 800b1a4: e02d b.n 800b202 <HAL_UARTEx_SetTxFifoThreshold+0x74>
  25116. 800b1a6: 687b ldr r3, [r7, #4]
  25117. 800b1a8: 2201 movs r2, #1
  25118. 800b1aa: f883 2084 strb.w r2, [r3, #132] @ 0x84
  25119. huart->gState = HAL_UART_STATE_BUSY;
  25120. 800b1ae: 687b ldr r3, [r7, #4]
  25121. 800b1b0: 2224 movs r2, #36 @ 0x24
  25122. 800b1b2: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  25123. /* Save actual UART configuration */
  25124. tmpcr1 = READ_REG(huart->Instance->CR1);
  25125. 800b1b6: 687b ldr r3, [r7, #4]
  25126. 800b1b8: 681b ldr r3, [r3, #0]
  25127. 800b1ba: 681b ldr r3, [r3, #0]
  25128. 800b1bc: 60fb str r3, [r7, #12]
  25129. /* Disable UART */
  25130. __HAL_UART_DISABLE(huart);
  25131. 800b1be: 687b ldr r3, [r7, #4]
  25132. 800b1c0: 681b ldr r3, [r3, #0]
  25133. 800b1c2: 681a ldr r2, [r3, #0]
  25134. 800b1c4: 687b ldr r3, [r7, #4]
  25135. 800b1c6: 681b ldr r3, [r3, #0]
  25136. 800b1c8: f022 0201 bic.w r2, r2, #1
  25137. 800b1cc: 601a str r2, [r3, #0]
  25138. /* Update TX threshold configuration */
  25139. MODIFY_REG(huart->Instance->CR3, USART_CR3_TXFTCFG, Threshold);
  25140. 800b1ce: 687b ldr r3, [r7, #4]
  25141. 800b1d0: 681b ldr r3, [r3, #0]
  25142. 800b1d2: 689b ldr r3, [r3, #8]
  25143. 800b1d4: f023 4160 bic.w r1, r3, #3758096384 @ 0xe0000000
  25144. 800b1d8: 687b ldr r3, [r7, #4]
  25145. 800b1da: 681b ldr r3, [r3, #0]
  25146. 800b1dc: 683a ldr r2, [r7, #0]
  25147. 800b1de: 430a orrs r2, r1
  25148. 800b1e0: 609a str r2, [r3, #8]
  25149. /* Determine the number of data to process during RX/TX ISR execution */
  25150. UARTEx_SetNbDataToProcess(huart);
  25151. 800b1e2: 6878 ldr r0, [r7, #4]
  25152. 800b1e4: f000 f8a0 bl 800b328 <UARTEx_SetNbDataToProcess>
  25153. /* Restore UART configuration */
  25154. WRITE_REG(huart->Instance->CR1, tmpcr1);
  25155. 800b1e8: 687b ldr r3, [r7, #4]
  25156. 800b1ea: 681b ldr r3, [r3, #0]
  25157. 800b1ec: 68fa ldr r2, [r7, #12]
  25158. 800b1ee: 601a str r2, [r3, #0]
  25159. huart->gState = HAL_UART_STATE_READY;
  25160. 800b1f0: 687b ldr r3, [r7, #4]
  25161. 800b1f2: 2220 movs r2, #32
  25162. 800b1f4: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  25163. /* Process Unlocked */
  25164. __HAL_UNLOCK(huart);
  25165. 800b1f8: 687b ldr r3, [r7, #4]
  25166. 800b1fa: 2200 movs r2, #0
  25167. 800b1fc: f883 2084 strb.w r2, [r3, #132] @ 0x84
  25168. return HAL_OK;
  25169. 800b200: 2300 movs r3, #0
  25170. }
  25171. 800b202: 4618 mov r0, r3
  25172. 800b204: 3710 adds r7, #16
  25173. 800b206: 46bd mov sp, r7
  25174. 800b208: bd80 pop {r7, pc}
  25175. 0800b20a <HAL_UARTEx_SetRxFifoThreshold>:
  25176. * @arg @ref UART_RXFIFO_THRESHOLD_7_8
  25177. * @arg @ref UART_RXFIFO_THRESHOLD_8_8
  25178. * @retval HAL status
  25179. */
  25180. HAL_StatusTypeDef HAL_UARTEx_SetRxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold)
  25181. {
  25182. 800b20a: b580 push {r7, lr}
  25183. 800b20c: b084 sub sp, #16
  25184. 800b20e: af00 add r7, sp, #0
  25185. 800b210: 6078 str r0, [r7, #4]
  25186. 800b212: 6039 str r1, [r7, #0]
  25187. /* Check the parameters */
  25188. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  25189. assert_param(IS_UART_RXFIFO_THRESHOLD(Threshold));
  25190. /* Process Locked */
  25191. __HAL_LOCK(huart);
  25192. 800b214: 687b ldr r3, [r7, #4]
  25193. 800b216: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  25194. 800b21a: 2b01 cmp r3, #1
  25195. 800b21c: d101 bne.n 800b222 <HAL_UARTEx_SetRxFifoThreshold+0x18>
  25196. 800b21e: 2302 movs r3, #2
  25197. 800b220: e02d b.n 800b27e <HAL_UARTEx_SetRxFifoThreshold+0x74>
  25198. 800b222: 687b ldr r3, [r7, #4]
  25199. 800b224: 2201 movs r2, #1
  25200. 800b226: f883 2084 strb.w r2, [r3, #132] @ 0x84
  25201. huart->gState = HAL_UART_STATE_BUSY;
  25202. 800b22a: 687b ldr r3, [r7, #4]
  25203. 800b22c: 2224 movs r2, #36 @ 0x24
  25204. 800b22e: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  25205. /* Save actual UART configuration */
  25206. tmpcr1 = READ_REG(huart->Instance->CR1);
  25207. 800b232: 687b ldr r3, [r7, #4]
  25208. 800b234: 681b ldr r3, [r3, #0]
  25209. 800b236: 681b ldr r3, [r3, #0]
  25210. 800b238: 60fb str r3, [r7, #12]
  25211. /* Disable UART */
  25212. __HAL_UART_DISABLE(huart);
  25213. 800b23a: 687b ldr r3, [r7, #4]
  25214. 800b23c: 681b ldr r3, [r3, #0]
  25215. 800b23e: 681a ldr r2, [r3, #0]
  25216. 800b240: 687b ldr r3, [r7, #4]
  25217. 800b242: 681b ldr r3, [r3, #0]
  25218. 800b244: f022 0201 bic.w r2, r2, #1
  25219. 800b248: 601a str r2, [r3, #0]
  25220. /* Update RX threshold configuration */
  25221. MODIFY_REG(huart->Instance->CR3, USART_CR3_RXFTCFG, Threshold);
  25222. 800b24a: 687b ldr r3, [r7, #4]
  25223. 800b24c: 681b ldr r3, [r3, #0]
  25224. 800b24e: 689b ldr r3, [r3, #8]
  25225. 800b250: f023 6160 bic.w r1, r3, #234881024 @ 0xe000000
  25226. 800b254: 687b ldr r3, [r7, #4]
  25227. 800b256: 681b ldr r3, [r3, #0]
  25228. 800b258: 683a ldr r2, [r7, #0]
  25229. 800b25a: 430a orrs r2, r1
  25230. 800b25c: 609a str r2, [r3, #8]
  25231. /* Determine the number of data to process during RX/TX ISR execution */
  25232. UARTEx_SetNbDataToProcess(huart);
  25233. 800b25e: 6878 ldr r0, [r7, #4]
  25234. 800b260: f000 f862 bl 800b328 <UARTEx_SetNbDataToProcess>
  25235. /* Restore UART configuration */
  25236. WRITE_REG(huart->Instance->CR1, tmpcr1);
  25237. 800b264: 687b ldr r3, [r7, #4]
  25238. 800b266: 681b ldr r3, [r3, #0]
  25239. 800b268: 68fa ldr r2, [r7, #12]
  25240. 800b26a: 601a str r2, [r3, #0]
  25241. huart->gState = HAL_UART_STATE_READY;
  25242. 800b26c: 687b ldr r3, [r7, #4]
  25243. 800b26e: 2220 movs r2, #32
  25244. 800b270: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  25245. /* Process Unlocked */
  25246. __HAL_UNLOCK(huart);
  25247. 800b274: 687b ldr r3, [r7, #4]
  25248. 800b276: 2200 movs r2, #0
  25249. 800b278: f883 2084 strb.w r2, [r3, #132] @ 0x84
  25250. return HAL_OK;
  25251. 800b27c: 2300 movs r3, #0
  25252. }
  25253. 800b27e: 4618 mov r0, r3
  25254. 800b280: 3710 adds r7, #16
  25255. 800b282: 46bd mov sp, r7
  25256. 800b284: bd80 pop {r7, pc}
  25257. 0800b286 <HAL_UARTEx_ReceiveToIdle_IT>:
  25258. * @param pData Pointer to data buffer (uint8_t or uint16_t data elements).
  25259. * @param Size Amount of data elements (uint8_t or uint16_t) to be received.
  25260. * @retval HAL status
  25261. */
  25262. HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
  25263. {
  25264. 800b286: b580 push {r7, lr}
  25265. 800b288: b08c sub sp, #48 @ 0x30
  25266. 800b28a: af00 add r7, sp, #0
  25267. 800b28c: 60f8 str r0, [r7, #12]
  25268. 800b28e: 60b9 str r1, [r7, #8]
  25269. 800b290: 4613 mov r3, r2
  25270. 800b292: 80fb strh r3, [r7, #6]
  25271. HAL_StatusTypeDef status = HAL_OK;
  25272. 800b294: 2300 movs r3, #0
  25273. 800b296: f887 302f strb.w r3, [r7, #47] @ 0x2f
  25274. /* Check that a Rx process is not already ongoing */
  25275. if (huart->RxState == HAL_UART_STATE_READY)
  25276. 800b29a: 68fb ldr r3, [r7, #12]
  25277. 800b29c: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  25278. 800b2a0: 2b20 cmp r3, #32
  25279. 800b2a2: d13b bne.n 800b31c <HAL_UARTEx_ReceiveToIdle_IT+0x96>
  25280. {
  25281. if ((pData == NULL) || (Size == 0U))
  25282. 800b2a4: 68bb ldr r3, [r7, #8]
  25283. 800b2a6: 2b00 cmp r3, #0
  25284. 800b2a8: d002 beq.n 800b2b0 <HAL_UARTEx_ReceiveToIdle_IT+0x2a>
  25285. 800b2aa: 88fb ldrh r3, [r7, #6]
  25286. 800b2ac: 2b00 cmp r3, #0
  25287. 800b2ae: d101 bne.n 800b2b4 <HAL_UARTEx_ReceiveToIdle_IT+0x2e>
  25288. {
  25289. return HAL_ERROR;
  25290. 800b2b0: 2301 movs r3, #1
  25291. 800b2b2: e034 b.n 800b31e <HAL_UARTEx_ReceiveToIdle_IT+0x98>
  25292. }
  25293. /* Set Reception type to reception till IDLE Event*/
  25294. huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE;
  25295. 800b2b4: 68fb ldr r3, [r7, #12]
  25296. 800b2b6: 2201 movs r2, #1
  25297. 800b2b8: 66da str r2, [r3, #108] @ 0x6c
  25298. huart->RxEventType = HAL_UART_RXEVENT_TC;
  25299. 800b2ba: 68fb ldr r3, [r7, #12]
  25300. 800b2bc: 2200 movs r2, #0
  25301. 800b2be: 671a str r2, [r3, #112] @ 0x70
  25302. (void)UART_Start_Receive_IT(huart, pData, Size);
  25303. 800b2c0: 88fb ldrh r3, [r7, #6]
  25304. 800b2c2: 461a mov r2, r3
  25305. 800b2c4: 68b9 ldr r1, [r7, #8]
  25306. 800b2c6: 68f8 ldr r0, [r7, #12]
  25307. 800b2c8: f7fe fe82 bl 8009fd0 <UART_Start_Receive_IT>
  25308. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  25309. 800b2cc: 68fb ldr r3, [r7, #12]
  25310. 800b2ce: 6edb ldr r3, [r3, #108] @ 0x6c
  25311. 800b2d0: 2b01 cmp r3, #1
  25312. 800b2d2: d11d bne.n 800b310 <HAL_UARTEx_ReceiveToIdle_IT+0x8a>
  25313. {
  25314. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  25315. 800b2d4: 68fb ldr r3, [r7, #12]
  25316. 800b2d6: 681b ldr r3, [r3, #0]
  25317. 800b2d8: 2210 movs r2, #16
  25318. 800b2da: 621a str r2, [r3, #32]
  25319. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  25320. 800b2dc: 68fb ldr r3, [r7, #12]
  25321. 800b2de: 681b ldr r3, [r3, #0]
  25322. 800b2e0: 61bb str r3, [r7, #24]
  25323. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  25324. 800b2e2: 69bb ldr r3, [r7, #24]
  25325. 800b2e4: e853 3f00 ldrex r3, [r3]
  25326. 800b2e8: 617b str r3, [r7, #20]
  25327. return(result);
  25328. 800b2ea: 697b ldr r3, [r7, #20]
  25329. 800b2ec: f043 0310 orr.w r3, r3, #16
  25330. 800b2f0: 62bb str r3, [r7, #40] @ 0x28
  25331. 800b2f2: 68fb ldr r3, [r7, #12]
  25332. 800b2f4: 681b ldr r3, [r3, #0]
  25333. 800b2f6: 461a mov r2, r3
  25334. 800b2f8: 6abb ldr r3, [r7, #40] @ 0x28
  25335. 800b2fa: 627b str r3, [r7, #36] @ 0x24
  25336. 800b2fc: 623a str r2, [r7, #32]
  25337. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  25338. 800b2fe: 6a39 ldr r1, [r7, #32]
  25339. 800b300: 6a7a ldr r2, [r7, #36] @ 0x24
  25340. 800b302: e841 2300 strex r3, r2, [r1]
  25341. 800b306: 61fb str r3, [r7, #28]
  25342. return(result);
  25343. 800b308: 69fb ldr r3, [r7, #28]
  25344. 800b30a: 2b00 cmp r3, #0
  25345. 800b30c: d1e6 bne.n 800b2dc <HAL_UARTEx_ReceiveToIdle_IT+0x56>
  25346. 800b30e: e002 b.n 800b316 <HAL_UARTEx_ReceiveToIdle_IT+0x90>
  25347. {
  25348. /* In case of errors already pending when reception is started,
  25349. Interrupts may have already been raised and lead to reception abortion.
  25350. (Overrun error for instance).
  25351. In such case Reception Type has been reset to HAL_UART_RECEPTION_STANDARD. */
  25352. status = HAL_ERROR;
  25353. 800b310: 2301 movs r3, #1
  25354. 800b312: f887 302f strb.w r3, [r7, #47] @ 0x2f
  25355. }
  25356. return status;
  25357. 800b316: f897 302f ldrb.w r3, [r7, #47] @ 0x2f
  25358. 800b31a: e000 b.n 800b31e <HAL_UARTEx_ReceiveToIdle_IT+0x98>
  25359. }
  25360. else
  25361. {
  25362. return HAL_BUSY;
  25363. 800b31c: 2302 movs r3, #2
  25364. }
  25365. }
  25366. 800b31e: 4618 mov r0, r3
  25367. 800b320: 3730 adds r7, #48 @ 0x30
  25368. 800b322: 46bd mov sp, r7
  25369. 800b324: bd80 pop {r7, pc}
  25370. ...
  25371. 0800b328 <UARTEx_SetNbDataToProcess>:
  25372. * the UART configuration registers.
  25373. * @param huart UART handle.
  25374. * @retval None
  25375. */
  25376. static void UARTEx_SetNbDataToProcess(UART_HandleTypeDef *huart)
  25377. {
  25378. 800b328: b480 push {r7}
  25379. 800b32a: b085 sub sp, #20
  25380. 800b32c: af00 add r7, sp, #0
  25381. 800b32e: 6078 str r0, [r7, #4]
  25382. uint8_t rx_fifo_threshold;
  25383. uint8_t tx_fifo_threshold;
  25384. static const uint8_t numerator[] = {1U, 1U, 1U, 3U, 7U, 1U, 0U, 0U};
  25385. static const uint8_t denominator[] = {8U, 4U, 2U, 4U, 8U, 1U, 1U, 1U};
  25386. if (huart->FifoMode == UART_FIFOMODE_DISABLE)
  25387. 800b330: 687b ldr r3, [r7, #4]
  25388. 800b332: 6e5b ldr r3, [r3, #100] @ 0x64
  25389. 800b334: 2b00 cmp r3, #0
  25390. 800b336: d108 bne.n 800b34a <UARTEx_SetNbDataToProcess+0x22>
  25391. {
  25392. huart->NbTxDataToProcess = 1U;
  25393. 800b338: 687b ldr r3, [r7, #4]
  25394. 800b33a: 2201 movs r2, #1
  25395. 800b33c: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  25396. huart->NbRxDataToProcess = 1U;
  25397. 800b340: 687b ldr r3, [r7, #4]
  25398. 800b342: 2201 movs r2, #1
  25399. 800b344: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  25400. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  25401. (uint16_t)denominator[tx_fifo_threshold];
  25402. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  25403. (uint16_t)denominator[rx_fifo_threshold];
  25404. }
  25405. }
  25406. 800b348: e031 b.n 800b3ae <UARTEx_SetNbDataToProcess+0x86>
  25407. rx_fifo_depth = RX_FIFO_DEPTH;
  25408. 800b34a: 2310 movs r3, #16
  25409. 800b34c: 73fb strb r3, [r7, #15]
  25410. tx_fifo_depth = TX_FIFO_DEPTH;
  25411. 800b34e: 2310 movs r3, #16
  25412. 800b350: 73bb strb r3, [r7, #14]
  25413. rx_fifo_threshold = (uint8_t)(READ_BIT(huart->Instance->CR3, USART_CR3_RXFTCFG) >> USART_CR3_RXFTCFG_Pos);
  25414. 800b352: 687b ldr r3, [r7, #4]
  25415. 800b354: 681b ldr r3, [r3, #0]
  25416. 800b356: 689b ldr r3, [r3, #8]
  25417. 800b358: 0e5b lsrs r3, r3, #25
  25418. 800b35a: b2db uxtb r3, r3
  25419. 800b35c: f003 0307 and.w r3, r3, #7
  25420. 800b360: 737b strb r3, [r7, #13]
  25421. tx_fifo_threshold = (uint8_t)(READ_BIT(huart->Instance->CR3, USART_CR3_TXFTCFG) >> USART_CR3_TXFTCFG_Pos);
  25422. 800b362: 687b ldr r3, [r7, #4]
  25423. 800b364: 681b ldr r3, [r3, #0]
  25424. 800b366: 689b ldr r3, [r3, #8]
  25425. 800b368: 0f5b lsrs r3, r3, #29
  25426. 800b36a: b2db uxtb r3, r3
  25427. 800b36c: f003 0307 and.w r3, r3, #7
  25428. 800b370: 733b strb r3, [r7, #12]
  25429. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  25430. 800b372: 7bbb ldrb r3, [r7, #14]
  25431. 800b374: 7b3a ldrb r2, [r7, #12]
  25432. 800b376: 4911 ldr r1, [pc, #68] @ (800b3bc <UARTEx_SetNbDataToProcess+0x94>)
  25433. 800b378: 5c8a ldrb r2, [r1, r2]
  25434. 800b37a: fb02 f303 mul.w r3, r2, r3
  25435. (uint16_t)denominator[tx_fifo_threshold];
  25436. 800b37e: 7b3a ldrb r2, [r7, #12]
  25437. 800b380: 490f ldr r1, [pc, #60] @ (800b3c0 <UARTEx_SetNbDataToProcess+0x98>)
  25438. 800b382: 5c8a ldrb r2, [r1, r2]
  25439. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  25440. 800b384: fb93 f3f2 sdiv r3, r3, r2
  25441. 800b388: b29a uxth r2, r3
  25442. 800b38a: 687b ldr r3, [r7, #4]
  25443. 800b38c: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  25444. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  25445. 800b390: 7bfb ldrb r3, [r7, #15]
  25446. 800b392: 7b7a ldrb r2, [r7, #13]
  25447. 800b394: 4909 ldr r1, [pc, #36] @ (800b3bc <UARTEx_SetNbDataToProcess+0x94>)
  25448. 800b396: 5c8a ldrb r2, [r1, r2]
  25449. 800b398: fb02 f303 mul.w r3, r2, r3
  25450. (uint16_t)denominator[rx_fifo_threshold];
  25451. 800b39c: 7b7a ldrb r2, [r7, #13]
  25452. 800b39e: 4908 ldr r1, [pc, #32] @ (800b3c0 <UARTEx_SetNbDataToProcess+0x98>)
  25453. 800b3a0: 5c8a ldrb r2, [r1, r2]
  25454. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  25455. 800b3a2: fb93 f3f2 sdiv r3, r3, r2
  25456. 800b3a6: b29a uxth r2, r3
  25457. 800b3a8: 687b ldr r3, [r7, #4]
  25458. 800b3aa: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  25459. }
  25460. 800b3ae: bf00 nop
  25461. 800b3b0: 3714 adds r7, #20
  25462. 800b3b2: 46bd mov sp, r7
  25463. 800b3b4: f85d 7b04 ldr.w r7, [sp], #4
  25464. 800b3b8: 4770 bx lr
  25465. 800b3ba: bf00 nop
  25466. 800b3bc: 080100e0 .word 0x080100e0
  25467. 800b3c0: 080100e8 .word 0x080100e8
  25468. 0800b3c4 <__NVIC_SetPriority>:
  25469. {
  25470. 800b3c4: b480 push {r7}
  25471. 800b3c6: b083 sub sp, #12
  25472. 800b3c8: af00 add r7, sp, #0
  25473. 800b3ca: 4603 mov r3, r0
  25474. 800b3cc: 6039 str r1, [r7, #0]
  25475. 800b3ce: 80fb strh r3, [r7, #6]
  25476. if ((int32_t)(IRQn) >= 0)
  25477. 800b3d0: f9b7 3006 ldrsh.w r3, [r7, #6]
  25478. 800b3d4: 2b00 cmp r3, #0
  25479. 800b3d6: db0a blt.n 800b3ee <__NVIC_SetPriority+0x2a>
  25480. NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  25481. 800b3d8: 683b ldr r3, [r7, #0]
  25482. 800b3da: b2da uxtb r2, r3
  25483. 800b3dc: 490c ldr r1, [pc, #48] @ (800b410 <__NVIC_SetPriority+0x4c>)
  25484. 800b3de: f9b7 3006 ldrsh.w r3, [r7, #6]
  25485. 800b3e2: 0112 lsls r2, r2, #4
  25486. 800b3e4: b2d2 uxtb r2, r2
  25487. 800b3e6: 440b add r3, r1
  25488. 800b3e8: f883 2300 strb.w r2, [r3, #768] @ 0x300
  25489. }
  25490. 800b3ec: e00a b.n 800b404 <__NVIC_SetPriority+0x40>
  25491. SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  25492. 800b3ee: 683b ldr r3, [r7, #0]
  25493. 800b3f0: b2da uxtb r2, r3
  25494. 800b3f2: 4908 ldr r1, [pc, #32] @ (800b414 <__NVIC_SetPriority+0x50>)
  25495. 800b3f4: 88fb ldrh r3, [r7, #6]
  25496. 800b3f6: f003 030f and.w r3, r3, #15
  25497. 800b3fa: 3b04 subs r3, #4
  25498. 800b3fc: 0112 lsls r2, r2, #4
  25499. 800b3fe: b2d2 uxtb r2, r2
  25500. 800b400: 440b add r3, r1
  25501. 800b402: 761a strb r2, [r3, #24]
  25502. }
  25503. 800b404: bf00 nop
  25504. 800b406: 370c adds r7, #12
  25505. 800b408: 46bd mov sp, r7
  25506. 800b40a: f85d 7b04 ldr.w r7, [sp], #4
  25507. 800b40e: 4770 bx lr
  25508. 800b410: e000e100 .word 0xe000e100
  25509. 800b414: e000ed00 .word 0xe000ed00
  25510. 0800b418 <SysTick_Handler>:
  25511. /*
  25512. SysTick handler implementation that also clears overflow flag.
  25513. */
  25514. #if (USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION == 0)
  25515. void SysTick_Handler (void) {
  25516. 800b418: b580 push {r7, lr}
  25517. 800b41a: af00 add r7, sp, #0
  25518. /* Clear overflow flag */
  25519. SysTick->CTRL;
  25520. 800b41c: 4b05 ldr r3, [pc, #20] @ (800b434 <SysTick_Handler+0x1c>)
  25521. 800b41e: 681b ldr r3, [r3, #0]
  25522. if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
  25523. 800b420: f002 fa74 bl 800d90c <xTaskGetSchedulerState>
  25524. 800b424: 4603 mov r3, r0
  25525. 800b426: 2b01 cmp r3, #1
  25526. 800b428: d001 beq.n 800b42e <SysTick_Handler+0x16>
  25527. /* Call tick handler */
  25528. xPortSysTickHandler();
  25529. 800b42a: f003 fb9d bl 800eb68 <xPortSysTickHandler>
  25530. }
  25531. }
  25532. 800b42e: bf00 nop
  25533. 800b430: bd80 pop {r7, pc}
  25534. 800b432: bf00 nop
  25535. 800b434: e000e010 .word 0xe000e010
  25536. 0800b438 <SVC_Setup>:
  25537. #endif /* SysTick */
  25538. /*
  25539. Setup SVC to reset value.
  25540. */
  25541. __STATIC_INLINE void SVC_Setup (void) {
  25542. 800b438: b580 push {r7, lr}
  25543. 800b43a: af00 add r7, sp, #0
  25544. #if (__ARM_ARCH_7A__ == 0U)
  25545. /* Service Call interrupt might be configured before kernel start */
  25546. /* and when its priority is lower or equal to BASEPRI, svc intruction */
  25547. /* causes a Hard Fault. */
  25548. NVIC_SetPriority (SVCall_IRQ_NBR, 0U);
  25549. 800b43c: 2100 movs r1, #0
  25550. 800b43e: f06f 0004 mvn.w r0, #4
  25551. 800b442: f7ff ffbf bl 800b3c4 <__NVIC_SetPriority>
  25552. #endif
  25553. }
  25554. 800b446: bf00 nop
  25555. 800b448: bd80 pop {r7, pc}
  25556. ...
  25557. 0800b44c <osKernelInitialize>:
  25558. static uint32_t OS_Tick_GetOverflow (void);
  25559. /* Get OS Tick interval */
  25560. static uint32_t OS_Tick_GetInterval (void);
  25561. /*---------------------------------------------------------------------------*/
  25562. osStatus_t osKernelInitialize (void) {
  25563. 800b44c: b480 push {r7}
  25564. 800b44e: b083 sub sp, #12
  25565. 800b450: af00 add r7, sp, #0
  25566. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  25567. 800b452: f3ef 8305 mrs r3, IPSR
  25568. 800b456: 603b str r3, [r7, #0]
  25569. return(result);
  25570. 800b458: 683b ldr r3, [r7, #0]
  25571. osStatus_t stat;
  25572. if (IS_IRQ()) {
  25573. 800b45a: 2b00 cmp r3, #0
  25574. 800b45c: d003 beq.n 800b466 <osKernelInitialize+0x1a>
  25575. stat = osErrorISR;
  25576. 800b45e: f06f 0305 mvn.w r3, #5
  25577. 800b462: 607b str r3, [r7, #4]
  25578. 800b464: e00c b.n 800b480 <osKernelInitialize+0x34>
  25579. }
  25580. else {
  25581. if (KernelState == osKernelInactive) {
  25582. 800b466: 4b0a ldr r3, [pc, #40] @ (800b490 <osKernelInitialize+0x44>)
  25583. 800b468: 681b ldr r3, [r3, #0]
  25584. 800b46a: 2b00 cmp r3, #0
  25585. 800b46c: d105 bne.n 800b47a <osKernelInitialize+0x2e>
  25586. EvrFreeRTOSSetup(0U);
  25587. #endif
  25588. #if defined(USE_FreeRTOS_HEAP_5) && (HEAP_5_REGION_SETUP == 1)
  25589. vPortDefineHeapRegions (configHEAP_5_REGIONS);
  25590. #endif
  25591. KernelState = osKernelReady;
  25592. 800b46e: 4b08 ldr r3, [pc, #32] @ (800b490 <osKernelInitialize+0x44>)
  25593. 800b470: 2201 movs r2, #1
  25594. 800b472: 601a str r2, [r3, #0]
  25595. stat = osOK;
  25596. 800b474: 2300 movs r3, #0
  25597. 800b476: 607b str r3, [r7, #4]
  25598. 800b478: e002 b.n 800b480 <osKernelInitialize+0x34>
  25599. } else {
  25600. stat = osError;
  25601. 800b47a: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  25602. 800b47e: 607b str r3, [r7, #4]
  25603. }
  25604. }
  25605. return (stat);
  25606. 800b480: 687b ldr r3, [r7, #4]
  25607. }
  25608. 800b482: 4618 mov r0, r3
  25609. 800b484: 370c adds r7, #12
  25610. 800b486: 46bd mov sp, r7
  25611. 800b488: f85d 7b04 ldr.w r7, [sp], #4
  25612. 800b48c: 4770 bx lr
  25613. 800b48e: bf00 nop
  25614. 800b490: 24000794 .word 0x24000794
  25615. 0800b494 <osKernelStart>:
  25616. }
  25617. return (state);
  25618. }
  25619. osStatus_t osKernelStart (void) {
  25620. 800b494: b580 push {r7, lr}
  25621. 800b496: b082 sub sp, #8
  25622. 800b498: af00 add r7, sp, #0
  25623. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  25624. 800b49a: f3ef 8305 mrs r3, IPSR
  25625. 800b49e: 603b str r3, [r7, #0]
  25626. return(result);
  25627. 800b4a0: 683b ldr r3, [r7, #0]
  25628. osStatus_t stat;
  25629. if (IS_IRQ()) {
  25630. 800b4a2: 2b00 cmp r3, #0
  25631. 800b4a4: d003 beq.n 800b4ae <osKernelStart+0x1a>
  25632. stat = osErrorISR;
  25633. 800b4a6: f06f 0305 mvn.w r3, #5
  25634. 800b4aa: 607b str r3, [r7, #4]
  25635. 800b4ac: e010 b.n 800b4d0 <osKernelStart+0x3c>
  25636. }
  25637. else {
  25638. if (KernelState == osKernelReady) {
  25639. 800b4ae: 4b0b ldr r3, [pc, #44] @ (800b4dc <osKernelStart+0x48>)
  25640. 800b4b0: 681b ldr r3, [r3, #0]
  25641. 800b4b2: 2b01 cmp r3, #1
  25642. 800b4b4: d109 bne.n 800b4ca <osKernelStart+0x36>
  25643. /* Ensure SVC priority is at the reset value */
  25644. SVC_Setup();
  25645. 800b4b6: f7ff ffbf bl 800b438 <SVC_Setup>
  25646. /* Change state to enable IRQ masking check */
  25647. KernelState = osKernelRunning;
  25648. 800b4ba: 4b08 ldr r3, [pc, #32] @ (800b4dc <osKernelStart+0x48>)
  25649. 800b4bc: 2202 movs r2, #2
  25650. 800b4be: 601a str r2, [r3, #0]
  25651. /* Start the kernel scheduler */
  25652. vTaskStartScheduler();
  25653. 800b4c0: f001 fd7a bl 800cfb8 <vTaskStartScheduler>
  25654. stat = osOK;
  25655. 800b4c4: 2300 movs r3, #0
  25656. 800b4c6: 607b str r3, [r7, #4]
  25657. 800b4c8: e002 b.n 800b4d0 <osKernelStart+0x3c>
  25658. } else {
  25659. stat = osError;
  25660. 800b4ca: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  25661. 800b4ce: 607b str r3, [r7, #4]
  25662. }
  25663. }
  25664. return (stat);
  25665. 800b4d0: 687b ldr r3, [r7, #4]
  25666. }
  25667. 800b4d2: 4618 mov r0, r3
  25668. 800b4d4: 3708 adds r7, #8
  25669. 800b4d6: 46bd mov sp, r7
  25670. 800b4d8: bd80 pop {r7, pc}
  25671. 800b4da: bf00 nop
  25672. 800b4dc: 24000794 .word 0x24000794
  25673. 0800b4e0 <osThreadNew>:
  25674. return (configCPU_CLOCK_HZ);
  25675. }
  25676. /*---------------------------------------------------------------------------*/
  25677. osThreadId_t osThreadNew (osThreadFunc_t func, void *argument, const osThreadAttr_t *attr) {
  25678. 800b4e0: b580 push {r7, lr}
  25679. 800b4e2: b08e sub sp, #56 @ 0x38
  25680. 800b4e4: af04 add r7, sp, #16
  25681. 800b4e6: 60f8 str r0, [r7, #12]
  25682. 800b4e8: 60b9 str r1, [r7, #8]
  25683. 800b4ea: 607a str r2, [r7, #4]
  25684. uint32_t stack;
  25685. TaskHandle_t hTask;
  25686. UBaseType_t prio;
  25687. int32_t mem;
  25688. hTask = NULL;
  25689. 800b4ec: 2300 movs r3, #0
  25690. 800b4ee: 613b str r3, [r7, #16]
  25691. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  25692. 800b4f0: f3ef 8305 mrs r3, IPSR
  25693. 800b4f4: 617b str r3, [r7, #20]
  25694. return(result);
  25695. 800b4f6: 697b ldr r3, [r7, #20]
  25696. if (!IS_IRQ() && (func != NULL)) {
  25697. 800b4f8: 2b00 cmp r3, #0
  25698. 800b4fa: d17f bne.n 800b5fc <osThreadNew+0x11c>
  25699. 800b4fc: 68fb ldr r3, [r7, #12]
  25700. 800b4fe: 2b00 cmp r3, #0
  25701. 800b500: d07c beq.n 800b5fc <osThreadNew+0x11c>
  25702. stack = configMINIMAL_STACK_SIZE;
  25703. 800b502: f44f 7300 mov.w r3, #512 @ 0x200
  25704. 800b506: 623b str r3, [r7, #32]
  25705. prio = (UBaseType_t)osPriorityNormal;
  25706. 800b508: 2318 movs r3, #24
  25707. 800b50a: 61fb str r3, [r7, #28]
  25708. name = NULL;
  25709. 800b50c: 2300 movs r3, #0
  25710. 800b50e: 627b str r3, [r7, #36] @ 0x24
  25711. mem = -1;
  25712. 800b510: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  25713. 800b514: 61bb str r3, [r7, #24]
  25714. if (attr != NULL) {
  25715. 800b516: 687b ldr r3, [r7, #4]
  25716. 800b518: 2b00 cmp r3, #0
  25717. 800b51a: d045 beq.n 800b5a8 <osThreadNew+0xc8>
  25718. if (attr->name != NULL) {
  25719. 800b51c: 687b ldr r3, [r7, #4]
  25720. 800b51e: 681b ldr r3, [r3, #0]
  25721. 800b520: 2b00 cmp r3, #0
  25722. 800b522: d002 beq.n 800b52a <osThreadNew+0x4a>
  25723. name = attr->name;
  25724. 800b524: 687b ldr r3, [r7, #4]
  25725. 800b526: 681b ldr r3, [r3, #0]
  25726. 800b528: 627b str r3, [r7, #36] @ 0x24
  25727. }
  25728. if (attr->priority != osPriorityNone) {
  25729. 800b52a: 687b ldr r3, [r7, #4]
  25730. 800b52c: 699b ldr r3, [r3, #24]
  25731. 800b52e: 2b00 cmp r3, #0
  25732. 800b530: d002 beq.n 800b538 <osThreadNew+0x58>
  25733. prio = (UBaseType_t)attr->priority;
  25734. 800b532: 687b ldr r3, [r7, #4]
  25735. 800b534: 699b ldr r3, [r3, #24]
  25736. 800b536: 61fb str r3, [r7, #28]
  25737. }
  25738. if ((prio < osPriorityIdle) || (prio > osPriorityISR) || ((attr->attr_bits & osThreadJoinable) == osThreadJoinable)) {
  25739. 800b538: 69fb ldr r3, [r7, #28]
  25740. 800b53a: 2b00 cmp r3, #0
  25741. 800b53c: d008 beq.n 800b550 <osThreadNew+0x70>
  25742. 800b53e: 69fb ldr r3, [r7, #28]
  25743. 800b540: 2b38 cmp r3, #56 @ 0x38
  25744. 800b542: d805 bhi.n 800b550 <osThreadNew+0x70>
  25745. 800b544: 687b ldr r3, [r7, #4]
  25746. 800b546: 685b ldr r3, [r3, #4]
  25747. 800b548: f003 0301 and.w r3, r3, #1
  25748. 800b54c: 2b00 cmp r3, #0
  25749. 800b54e: d001 beq.n 800b554 <osThreadNew+0x74>
  25750. return (NULL);
  25751. 800b550: 2300 movs r3, #0
  25752. 800b552: e054 b.n 800b5fe <osThreadNew+0x11e>
  25753. }
  25754. if (attr->stack_size > 0U) {
  25755. 800b554: 687b ldr r3, [r7, #4]
  25756. 800b556: 695b ldr r3, [r3, #20]
  25757. 800b558: 2b00 cmp r3, #0
  25758. 800b55a: d003 beq.n 800b564 <osThreadNew+0x84>
  25759. /* In FreeRTOS stack is not in bytes, but in sizeof(StackType_t) which is 4 on ARM ports. */
  25760. /* Stack size should be therefore 4 byte aligned in order to avoid division caused side effects */
  25761. stack = attr->stack_size / sizeof(StackType_t);
  25762. 800b55c: 687b ldr r3, [r7, #4]
  25763. 800b55e: 695b ldr r3, [r3, #20]
  25764. 800b560: 089b lsrs r3, r3, #2
  25765. 800b562: 623b str r3, [r7, #32]
  25766. }
  25767. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTask_t)) &&
  25768. 800b564: 687b ldr r3, [r7, #4]
  25769. 800b566: 689b ldr r3, [r3, #8]
  25770. 800b568: 2b00 cmp r3, #0
  25771. 800b56a: d00e beq.n 800b58a <osThreadNew+0xaa>
  25772. 800b56c: 687b ldr r3, [r7, #4]
  25773. 800b56e: 68db ldr r3, [r3, #12]
  25774. 800b570: 2ba7 cmp r3, #167 @ 0xa7
  25775. 800b572: d90a bls.n 800b58a <osThreadNew+0xaa>
  25776. (attr->stack_mem != NULL) && (attr->stack_size > 0U)) {
  25777. 800b574: 687b ldr r3, [r7, #4]
  25778. 800b576: 691b ldr r3, [r3, #16]
  25779. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTask_t)) &&
  25780. 800b578: 2b00 cmp r3, #0
  25781. 800b57a: d006 beq.n 800b58a <osThreadNew+0xaa>
  25782. (attr->stack_mem != NULL) && (attr->stack_size > 0U)) {
  25783. 800b57c: 687b ldr r3, [r7, #4]
  25784. 800b57e: 695b ldr r3, [r3, #20]
  25785. 800b580: 2b00 cmp r3, #0
  25786. 800b582: d002 beq.n 800b58a <osThreadNew+0xaa>
  25787. mem = 1;
  25788. 800b584: 2301 movs r3, #1
  25789. 800b586: 61bb str r3, [r7, #24]
  25790. 800b588: e010 b.n 800b5ac <osThreadNew+0xcc>
  25791. }
  25792. else {
  25793. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) && (attr->stack_mem == NULL)) {
  25794. 800b58a: 687b ldr r3, [r7, #4]
  25795. 800b58c: 689b ldr r3, [r3, #8]
  25796. 800b58e: 2b00 cmp r3, #0
  25797. 800b590: d10c bne.n 800b5ac <osThreadNew+0xcc>
  25798. 800b592: 687b ldr r3, [r7, #4]
  25799. 800b594: 68db ldr r3, [r3, #12]
  25800. 800b596: 2b00 cmp r3, #0
  25801. 800b598: d108 bne.n 800b5ac <osThreadNew+0xcc>
  25802. 800b59a: 687b ldr r3, [r7, #4]
  25803. 800b59c: 691b ldr r3, [r3, #16]
  25804. 800b59e: 2b00 cmp r3, #0
  25805. 800b5a0: d104 bne.n 800b5ac <osThreadNew+0xcc>
  25806. mem = 0;
  25807. 800b5a2: 2300 movs r3, #0
  25808. 800b5a4: 61bb str r3, [r7, #24]
  25809. 800b5a6: e001 b.n 800b5ac <osThreadNew+0xcc>
  25810. }
  25811. }
  25812. }
  25813. else {
  25814. mem = 0;
  25815. 800b5a8: 2300 movs r3, #0
  25816. 800b5aa: 61bb str r3, [r7, #24]
  25817. }
  25818. if (mem == 1) {
  25819. 800b5ac: 69bb ldr r3, [r7, #24]
  25820. 800b5ae: 2b01 cmp r3, #1
  25821. 800b5b0: d110 bne.n 800b5d4 <osThreadNew+0xf4>
  25822. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  25823. hTask = xTaskCreateStatic ((TaskFunction_t)func, name, stack, argument, prio, (StackType_t *)attr->stack_mem,
  25824. 800b5b2: 687b ldr r3, [r7, #4]
  25825. 800b5b4: 691b ldr r3, [r3, #16]
  25826. (StaticTask_t *)attr->cb_mem);
  25827. 800b5b6: 687a ldr r2, [r7, #4]
  25828. 800b5b8: 6892 ldr r2, [r2, #8]
  25829. hTask = xTaskCreateStatic ((TaskFunction_t)func, name, stack, argument, prio, (StackType_t *)attr->stack_mem,
  25830. 800b5ba: 9202 str r2, [sp, #8]
  25831. 800b5bc: 9301 str r3, [sp, #4]
  25832. 800b5be: 69fb ldr r3, [r7, #28]
  25833. 800b5c0: 9300 str r3, [sp, #0]
  25834. 800b5c2: 68bb ldr r3, [r7, #8]
  25835. 800b5c4: 6a3a ldr r2, [r7, #32]
  25836. 800b5c6: 6a79 ldr r1, [r7, #36] @ 0x24
  25837. 800b5c8: 68f8 ldr r0, [r7, #12]
  25838. 800b5ca: f001 fb02 bl 800cbd2 <xTaskCreateStatic>
  25839. 800b5ce: 4603 mov r3, r0
  25840. 800b5d0: 613b str r3, [r7, #16]
  25841. 800b5d2: e013 b.n 800b5fc <osThreadNew+0x11c>
  25842. #endif
  25843. }
  25844. else {
  25845. if (mem == 0) {
  25846. 800b5d4: 69bb ldr r3, [r7, #24]
  25847. 800b5d6: 2b00 cmp r3, #0
  25848. 800b5d8: d110 bne.n 800b5fc <osThreadNew+0x11c>
  25849. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  25850. if (xTaskCreate ((TaskFunction_t)func, name, (uint16_t)stack, argument, prio, &hTask) != pdPASS) {
  25851. 800b5da: 6a3b ldr r3, [r7, #32]
  25852. 800b5dc: b29a uxth r2, r3
  25853. 800b5de: f107 0310 add.w r3, r7, #16
  25854. 800b5e2: 9301 str r3, [sp, #4]
  25855. 800b5e4: 69fb ldr r3, [r7, #28]
  25856. 800b5e6: 9300 str r3, [sp, #0]
  25857. 800b5e8: 68bb ldr r3, [r7, #8]
  25858. 800b5ea: 6a79 ldr r1, [r7, #36] @ 0x24
  25859. 800b5ec: 68f8 ldr r0, [r7, #12]
  25860. 800b5ee: f001 fb50 bl 800cc92 <xTaskCreate>
  25861. 800b5f2: 4603 mov r3, r0
  25862. 800b5f4: 2b01 cmp r3, #1
  25863. 800b5f6: d001 beq.n 800b5fc <osThreadNew+0x11c>
  25864. hTask = NULL;
  25865. 800b5f8: 2300 movs r3, #0
  25866. 800b5fa: 613b str r3, [r7, #16]
  25867. #endif
  25868. }
  25869. }
  25870. }
  25871. return ((osThreadId_t)hTask);
  25872. 800b5fc: 693b ldr r3, [r7, #16]
  25873. }
  25874. 800b5fe: 4618 mov r0, r3
  25875. 800b600: 3728 adds r7, #40 @ 0x28
  25876. 800b602: 46bd mov sp, r7
  25877. 800b604: bd80 pop {r7, pc}
  25878. 0800b606 <osDelay>:
  25879. /* Return flags before clearing */
  25880. return (rflags);
  25881. }
  25882. #endif /* (configUSE_OS2_THREAD_FLAGS == 1) */
  25883. osStatus_t osDelay (uint32_t ticks) {
  25884. 800b606: b580 push {r7, lr}
  25885. 800b608: b084 sub sp, #16
  25886. 800b60a: af00 add r7, sp, #0
  25887. 800b60c: 6078 str r0, [r7, #4]
  25888. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  25889. 800b60e: f3ef 8305 mrs r3, IPSR
  25890. 800b612: 60bb str r3, [r7, #8]
  25891. return(result);
  25892. 800b614: 68bb ldr r3, [r7, #8]
  25893. osStatus_t stat;
  25894. if (IS_IRQ()) {
  25895. 800b616: 2b00 cmp r3, #0
  25896. 800b618: d003 beq.n 800b622 <osDelay+0x1c>
  25897. stat = osErrorISR;
  25898. 800b61a: f06f 0305 mvn.w r3, #5
  25899. 800b61e: 60fb str r3, [r7, #12]
  25900. 800b620: e007 b.n 800b632 <osDelay+0x2c>
  25901. }
  25902. else {
  25903. stat = osOK;
  25904. 800b622: 2300 movs r3, #0
  25905. 800b624: 60fb str r3, [r7, #12]
  25906. if (ticks != 0U) {
  25907. 800b626: 687b ldr r3, [r7, #4]
  25908. 800b628: 2b00 cmp r3, #0
  25909. 800b62a: d002 beq.n 800b632 <osDelay+0x2c>
  25910. vTaskDelay(ticks);
  25911. 800b62c: 6878 ldr r0, [r7, #4]
  25912. 800b62e: f001 fc8d bl 800cf4c <vTaskDelay>
  25913. }
  25914. }
  25915. return (stat);
  25916. 800b632: 68fb ldr r3, [r7, #12]
  25917. }
  25918. 800b634: 4618 mov r0, r3
  25919. 800b636: 3710 adds r7, #16
  25920. 800b638: 46bd mov sp, r7
  25921. 800b63a: bd80 pop {r7, pc}
  25922. 0800b63c <osMutexNew>:
  25923. }
  25924. /*---------------------------------------------------------------------------*/
  25925. #if (configUSE_OS2_MUTEX == 1)
  25926. osMutexId_t osMutexNew (const osMutexAttr_t *attr) {
  25927. 800b63c: b580 push {r7, lr}
  25928. 800b63e: b088 sub sp, #32
  25929. 800b640: af00 add r7, sp, #0
  25930. 800b642: 6078 str r0, [r7, #4]
  25931. int32_t mem;
  25932. #if (configQUEUE_REGISTRY_SIZE > 0)
  25933. const char *name;
  25934. #endif
  25935. hMutex = NULL;
  25936. 800b644: 2300 movs r3, #0
  25937. 800b646: 61fb str r3, [r7, #28]
  25938. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  25939. 800b648: f3ef 8305 mrs r3, IPSR
  25940. 800b64c: 60bb str r3, [r7, #8]
  25941. return(result);
  25942. 800b64e: 68bb ldr r3, [r7, #8]
  25943. if (!IS_IRQ()) {
  25944. 800b650: 2b00 cmp r3, #0
  25945. 800b652: d174 bne.n 800b73e <osMutexNew+0x102>
  25946. if (attr != NULL) {
  25947. 800b654: 687b ldr r3, [r7, #4]
  25948. 800b656: 2b00 cmp r3, #0
  25949. 800b658: d003 beq.n 800b662 <osMutexNew+0x26>
  25950. type = attr->attr_bits;
  25951. 800b65a: 687b ldr r3, [r7, #4]
  25952. 800b65c: 685b ldr r3, [r3, #4]
  25953. 800b65e: 61bb str r3, [r7, #24]
  25954. 800b660: e001 b.n 800b666 <osMutexNew+0x2a>
  25955. } else {
  25956. type = 0U;
  25957. 800b662: 2300 movs r3, #0
  25958. 800b664: 61bb str r3, [r7, #24]
  25959. }
  25960. if ((type & osMutexRecursive) == osMutexRecursive) {
  25961. 800b666: 69bb ldr r3, [r7, #24]
  25962. 800b668: f003 0301 and.w r3, r3, #1
  25963. 800b66c: 2b00 cmp r3, #0
  25964. 800b66e: d002 beq.n 800b676 <osMutexNew+0x3a>
  25965. rmtx = 1U;
  25966. 800b670: 2301 movs r3, #1
  25967. 800b672: 617b str r3, [r7, #20]
  25968. 800b674: e001 b.n 800b67a <osMutexNew+0x3e>
  25969. } else {
  25970. rmtx = 0U;
  25971. 800b676: 2300 movs r3, #0
  25972. 800b678: 617b str r3, [r7, #20]
  25973. }
  25974. if ((type & osMutexRobust) != osMutexRobust) {
  25975. 800b67a: 69bb ldr r3, [r7, #24]
  25976. 800b67c: f003 0308 and.w r3, r3, #8
  25977. 800b680: 2b00 cmp r3, #0
  25978. 800b682: d15c bne.n 800b73e <osMutexNew+0x102>
  25979. mem = -1;
  25980. 800b684: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  25981. 800b688: 613b str r3, [r7, #16]
  25982. if (attr != NULL) {
  25983. 800b68a: 687b ldr r3, [r7, #4]
  25984. 800b68c: 2b00 cmp r3, #0
  25985. 800b68e: d015 beq.n 800b6bc <osMutexNew+0x80>
  25986. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticSemaphore_t))) {
  25987. 800b690: 687b ldr r3, [r7, #4]
  25988. 800b692: 689b ldr r3, [r3, #8]
  25989. 800b694: 2b00 cmp r3, #0
  25990. 800b696: d006 beq.n 800b6a6 <osMutexNew+0x6a>
  25991. 800b698: 687b ldr r3, [r7, #4]
  25992. 800b69a: 68db ldr r3, [r3, #12]
  25993. 800b69c: 2b4f cmp r3, #79 @ 0x4f
  25994. 800b69e: d902 bls.n 800b6a6 <osMutexNew+0x6a>
  25995. mem = 1;
  25996. 800b6a0: 2301 movs r3, #1
  25997. 800b6a2: 613b str r3, [r7, #16]
  25998. 800b6a4: e00c b.n 800b6c0 <osMutexNew+0x84>
  25999. }
  26000. else {
  26001. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U)) {
  26002. 800b6a6: 687b ldr r3, [r7, #4]
  26003. 800b6a8: 689b ldr r3, [r3, #8]
  26004. 800b6aa: 2b00 cmp r3, #0
  26005. 800b6ac: d108 bne.n 800b6c0 <osMutexNew+0x84>
  26006. 800b6ae: 687b ldr r3, [r7, #4]
  26007. 800b6b0: 68db ldr r3, [r3, #12]
  26008. 800b6b2: 2b00 cmp r3, #0
  26009. 800b6b4: d104 bne.n 800b6c0 <osMutexNew+0x84>
  26010. mem = 0;
  26011. 800b6b6: 2300 movs r3, #0
  26012. 800b6b8: 613b str r3, [r7, #16]
  26013. 800b6ba: e001 b.n 800b6c0 <osMutexNew+0x84>
  26014. }
  26015. }
  26016. }
  26017. else {
  26018. mem = 0;
  26019. 800b6bc: 2300 movs r3, #0
  26020. 800b6be: 613b str r3, [r7, #16]
  26021. }
  26022. if (mem == 1) {
  26023. 800b6c0: 693b ldr r3, [r7, #16]
  26024. 800b6c2: 2b01 cmp r3, #1
  26025. 800b6c4: d112 bne.n 800b6ec <osMutexNew+0xb0>
  26026. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  26027. if (rmtx != 0U) {
  26028. 800b6c6: 697b ldr r3, [r7, #20]
  26029. 800b6c8: 2b00 cmp r3, #0
  26030. 800b6ca: d007 beq.n 800b6dc <osMutexNew+0xa0>
  26031. #if (configUSE_RECURSIVE_MUTEXES == 1)
  26032. hMutex = xSemaphoreCreateRecursiveMutexStatic (attr->cb_mem);
  26033. 800b6cc: 687b ldr r3, [r7, #4]
  26034. 800b6ce: 689b ldr r3, [r3, #8]
  26035. 800b6d0: 4619 mov r1, r3
  26036. 800b6d2: 2004 movs r0, #4
  26037. 800b6d4: f000 fb1f bl 800bd16 <xQueueCreateMutexStatic>
  26038. 800b6d8: 61f8 str r0, [r7, #28]
  26039. 800b6da: e016 b.n 800b70a <osMutexNew+0xce>
  26040. #endif
  26041. }
  26042. else {
  26043. hMutex = xSemaphoreCreateMutexStatic (attr->cb_mem);
  26044. 800b6dc: 687b ldr r3, [r7, #4]
  26045. 800b6de: 689b ldr r3, [r3, #8]
  26046. 800b6e0: 4619 mov r1, r3
  26047. 800b6e2: 2001 movs r0, #1
  26048. 800b6e4: f000 fb17 bl 800bd16 <xQueueCreateMutexStatic>
  26049. 800b6e8: 61f8 str r0, [r7, #28]
  26050. 800b6ea: e00e b.n 800b70a <osMutexNew+0xce>
  26051. }
  26052. #endif
  26053. }
  26054. else {
  26055. if (mem == 0) {
  26056. 800b6ec: 693b ldr r3, [r7, #16]
  26057. 800b6ee: 2b00 cmp r3, #0
  26058. 800b6f0: d10b bne.n 800b70a <osMutexNew+0xce>
  26059. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  26060. if (rmtx != 0U) {
  26061. 800b6f2: 697b ldr r3, [r7, #20]
  26062. 800b6f4: 2b00 cmp r3, #0
  26063. 800b6f6: d004 beq.n 800b702 <osMutexNew+0xc6>
  26064. #if (configUSE_RECURSIVE_MUTEXES == 1)
  26065. hMutex = xSemaphoreCreateRecursiveMutex ();
  26066. 800b6f8: 2004 movs r0, #4
  26067. 800b6fa: f000 faf4 bl 800bce6 <xQueueCreateMutex>
  26068. 800b6fe: 61f8 str r0, [r7, #28]
  26069. 800b700: e003 b.n 800b70a <osMutexNew+0xce>
  26070. #endif
  26071. } else {
  26072. hMutex = xSemaphoreCreateMutex ();
  26073. 800b702: 2001 movs r0, #1
  26074. 800b704: f000 faef bl 800bce6 <xQueueCreateMutex>
  26075. 800b708: 61f8 str r0, [r7, #28]
  26076. #endif
  26077. }
  26078. }
  26079. #if (configQUEUE_REGISTRY_SIZE > 0)
  26080. if (hMutex != NULL) {
  26081. 800b70a: 69fb ldr r3, [r7, #28]
  26082. 800b70c: 2b00 cmp r3, #0
  26083. 800b70e: d00c beq.n 800b72a <osMutexNew+0xee>
  26084. if (attr != NULL) {
  26085. 800b710: 687b ldr r3, [r7, #4]
  26086. 800b712: 2b00 cmp r3, #0
  26087. 800b714: d003 beq.n 800b71e <osMutexNew+0xe2>
  26088. name = attr->name;
  26089. 800b716: 687b ldr r3, [r7, #4]
  26090. 800b718: 681b ldr r3, [r3, #0]
  26091. 800b71a: 60fb str r3, [r7, #12]
  26092. 800b71c: e001 b.n 800b722 <osMutexNew+0xe6>
  26093. } else {
  26094. name = NULL;
  26095. 800b71e: 2300 movs r3, #0
  26096. 800b720: 60fb str r3, [r7, #12]
  26097. }
  26098. vQueueAddToRegistry (hMutex, name);
  26099. 800b722: 68f9 ldr r1, [r7, #12]
  26100. 800b724: 69f8 ldr r0, [r7, #28]
  26101. 800b726: f001 f837 bl 800c798 <vQueueAddToRegistry>
  26102. }
  26103. #endif
  26104. if ((hMutex != NULL) && (rmtx != 0U)) {
  26105. 800b72a: 69fb ldr r3, [r7, #28]
  26106. 800b72c: 2b00 cmp r3, #0
  26107. 800b72e: d006 beq.n 800b73e <osMutexNew+0x102>
  26108. 800b730: 697b ldr r3, [r7, #20]
  26109. 800b732: 2b00 cmp r3, #0
  26110. 800b734: d003 beq.n 800b73e <osMutexNew+0x102>
  26111. hMutex = (SemaphoreHandle_t)((uint32_t)hMutex | 1U);
  26112. 800b736: 69fb ldr r3, [r7, #28]
  26113. 800b738: f043 0301 orr.w r3, r3, #1
  26114. 800b73c: 61fb str r3, [r7, #28]
  26115. }
  26116. }
  26117. }
  26118. return ((osMutexId_t)hMutex);
  26119. 800b73e: 69fb ldr r3, [r7, #28]
  26120. }
  26121. 800b740: 4618 mov r0, r3
  26122. 800b742: 3720 adds r7, #32
  26123. 800b744: 46bd mov sp, r7
  26124. 800b746: bd80 pop {r7, pc}
  26125. 0800b748 <osMutexAcquire>:
  26126. osStatus_t osMutexAcquire (osMutexId_t mutex_id, uint32_t timeout) {
  26127. 800b748: b580 push {r7, lr}
  26128. 800b74a: b086 sub sp, #24
  26129. 800b74c: af00 add r7, sp, #0
  26130. 800b74e: 6078 str r0, [r7, #4]
  26131. 800b750: 6039 str r1, [r7, #0]
  26132. SemaphoreHandle_t hMutex;
  26133. osStatus_t stat;
  26134. uint32_t rmtx;
  26135. hMutex = (SemaphoreHandle_t)((uint32_t)mutex_id & ~1U);
  26136. 800b752: 687b ldr r3, [r7, #4]
  26137. 800b754: f023 0301 bic.w r3, r3, #1
  26138. 800b758: 613b str r3, [r7, #16]
  26139. rmtx = (uint32_t)mutex_id & 1U;
  26140. 800b75a: 687b ldr r3, [r7, #4]
  26141. 800b75c: f003 0301 and.w r3, r3, #1
  26142. 800b760: 60fb str r3, [r7, #12]
  26143. stat = osOK;
  26144. 800b762: 2300 movs r3, #0
  26145. 800b764: 617b str r3, [r7, #20]
  26146. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  26147. 800b766: f3ef 8305 mrs r3, IPSR
  26148. 800b76a: 60bb str r3, [r7, #8]
  26149. return(result);
  26150. 800b76c: 68bb ldr r3, [r7, #8]
  26151. if (IS_IRQ()) {
  26152. 800b76e: 2b00 cmp r3, #0
  26153. 800b770: d003 beq.n 800b77a <osMutexAcquire+0x32>
  26154. stat = osErrorISR;
  26155. 800b772: f06f 0305 mvn.w r3, #5
  26156. 800b776: 617b str r3, [r7, #20]
  26157. 800b778: e02c b.n 800b7d4 <osMutexAcquire+0x8c>
  26158. }
  26159. else if (hMutex == NULL) {
  26160. 800b77a: 693b ldr r3, [r7, #16]
  26161. 800b77c: 2b00 cmp r3, #0
  26162. 800b77e: d103 bne.n 800b788 <osMutexAcquire+0x40>
  26163. stat = osErrorParameter;
  26164. 800b780: f06f 0303 mvn.w r3, #3
  26165. 800b784: 617b str r3, [r7, #20]
  26166. 800b786: e025 b.n 800b7d4 <osMutexAcquire+0x8c>
  26167. }
  26168. else {
  26169. if (rmtx != 0U) {
  26170. 800b788: 68fb ldr r3, [r7, #12]
  26171. 800b78a: 2b00 cmp r3, #0
  26172. 800b78c: d011 beq.n 800b7b2 <osMutexAcquire+0x6a>
  26173. #if (configUSE_RECURSIVE_MUTEXES == 1)
  26174. if (xSemaphoreTakeRecursive (hMutex, timeout) != pdPASS) {
  26175. 800b78e: 6839 ldr r1, [r7, #0]
  26176. 800b790: 6938 ldr r0, [r7, #16]
  26177. 800b792: f000 fb10 bl 800bdb6 <xQueueTakeMutexRecursive>
  26178. 800b796: 4603 mov r3, r0
  26179. 800b798: 2b01 cmp r3, #1
  26180. 800b79a: d01b beq.n 800b7d4 <osMutexAcquire+0x8c>
  26181. if (timeout != 0U) {
  26182. 800b79c: 683b ldr r3, [r7, #0]
  26183. 800b79e: 2b00 cmp r3, #0
  26184. 800b7a0: d003 beq.n 800b7aa <osMutexAcquire+0x62>
  26185. stat = osErrorTimeout;
  26186. 800b7a2: f06f 0301 mvn.w r3, #1
  26187. 800b7a6: 617b str r3, [r7, #20]
  26188. 800b7a8: e014 b.n 800b7d4 <osMutexAcquire+0x8c>
  26189. } else {
  26190. stat = osErrorResource;
  26191. 800b7aa: f06f 0302 mvn.w r3, #2
  26192. 800b7ae: 617b str r3, [r7, #20]
  26193. 800b7b0: e010 b.n 800b7d4 <osMutexAcquire+0x8c>
  26194. }
  26195. }
  26196. #endif
  26197. }
  26198. else {
  26199. if (xSemaphoreTake (hMutex, timeout) != pdPASS) {
  26200. 800b7b2: 6839 ldr r1, [r7, #0]
  26201. 800b7b4: 6938 ldr r0, [r7, #16]
  26202. 800b7b6: f000 fdb7 bl 800c328 <xQueueSemaphoreTake>
  26203. 800b7ba: 4603 mov r3, r0
  26204. 800b7bc: 2b01 cmp r3, #1
  26205. 800b7be: d009 beq.n 800b7d4 <osMutexAcquire+0x8c>
  26206. if (timeout != 0U) {
  26207. 800b7c0: 683b ldr r3, [r7, #0]
  26208. 800b7c2: 2b00 cmp r3, #0
  26209. 800b7c4: d003 beq.n 800b7ce <osMutexAcquire+0x86>
  26210. stat = osErrorTimeout;
  26211. 800b7c6: f06f 0301 mvn.w r3, #1
  26212. 800b7ca: 617b str r3, [r7, #20]
  26213. 800b7cc: e002 b.n 800b7d4 <osMutexAcquire+0x8c>
  26214. } else {
  26215. stat = osErrorResource;
  26216. 800b7ce: f06f 0302 mvn.w r3, #2
  26217. 800b7d2: 617b str r3, [r7, #20]
  26218. }
  26219. }
  26220. }
  26221. }
  26222. return (stat);
  26223. 800b7d4: 697b ldr r3, [r7, #20]
  26224. }
  26225. 800b7d6: 4618 mov r0, r3
  26226. 800b7d8: 3718 adds r7, #24
  26227. 800b7da: 46bd mov sp, r7
  26228. 800b7dc: bd80 pop {r7, pc}
  26229. 0800b7de <osMutexRelease>:
  26230. osStatus_t osMutexRelease (osMutexId_t mutex_id) {
  26231. 800b7de: b580 push {r7, lr}
  26232. 800b7e0: b086 sub sp, #24
  26233. 800b7e2: af00 add r7, sp, #0
  26234. 800b7e4: 6078 str r0, [r7, #4]
  26235. SemaphoreHandle_t hMutex;
  26236. osStatus_t stat;
  26237. uint32_t rmtx;
  26238. hMutex = (SemaphoreHandle_t)((uint32_t)mutex_id & ~1U);
  26239. 800b7e6: 687b ldr r3, [r7, #4]
  26240. 800b7e8: f023 0301 bic.w r3, r3, #1
  26241. 800b7ec: 613b str r3, [r7, #16]
  26242. rmtx = (uint32_t)mutex_id & 1U;
  26243. 800b7ee: 687b ldr r3, [r7, #4]
  26244. 800b7f0: f003 0301 and.w r3, r3, #1
  26245. 800b7f4: 60fb str r3, [r7, #12]
  26246. stat = osOK;
  26247. 800b7f6: 2300 movs r3, #0
  26248. 800b7f8: 617b str r3, [r7, #20]
  26249. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  26250. 800b7fa: f3ef 8305 mrs r3, IPSR
  26251. 800b7fe: 60bb str r3, [r7, #8]
  26252. return(result);
  26253. 800b800: 68bb ldr r3, [r7, #8]
  26254. if (IS_IRQ()) {
  26255. 800b802: 2b00 cmp r3, #0
  26256. 800b804: d003 beq.n 800b80e <osMutexRelease+0x30>
  26257. stat = osErrorISR;
  26258. 800b806: f06f 0305 mvn.w r3, #5
  26259. 800b80a: 617b str r3, [r7, #20]
  26260. 800b80c: e01f b.n 800b84e <osMutexRelease+0x70>
  26261. }
  26262. else if (hMutex == NULL) {
  26263. 800b80e: 693b ldr r3, [r7, #16]
  26264. 800b810: 2b00 cmp r3, #0
  26265. 800b812: d103 bne.n 800b81c <osMutexRelease+0x3e>
  26266. stat = osErrorParameter;
  26267. 800b814: f06f 0303 mvn.w r3, #3
  26268. 800b818: 617b str r3, [r7, #20]
  26269. 800b81a: e018 b.n 800b84e <osMutexRelease+0x70>
  26270. }
  26271. else {
  26272. if (rmtx != 0U) {
  26273. 800b81c: 68fb ldr r3, [r7, #12]
  26274. 800b81e: 2b00 cmp r3, #0
  26275. 800b820: d009 beq.n 800b836 <osMutexRelease+0x58>
  26276. #if (configUSE_RECURSIVE_MUTEXES == 1)
  26277. if (xSemaphoreGiveRecursive (hMutex) != pdPASS) {
  26278. 800b822: 6938 ldr r0, [r7, #16]
  26279. 800b824: f000 fa92 bl 800bd4c <xQueueGiveMutexRecursive>
  26280. 800b828: 4603 mov r3, r0
  26281. 800b82a: 2b01 cmp r3, #1
  26282. 800b82c: d00f beq.n 800b84e <osMutexRelease+0x70>
  26283. stat = osErrorResource;
  26284. 800b82e: f06f 0302 mvn.w r3, #2
  26285. 800b832: 617b str r3, [r7, #20]
  26286. 800b834: e00b b.n 800b84e <osMutexRelease+0x70>
  26287. }
  26288. #endif
  26289. }
  26290. else {
  26291. if (xSemaphoreGive (hMutex) != pdPASS) {
  26292. 800b836: 2300 movs r3, #0
  26293. 800b838: 2200 movs r2, #0
  26294. 800b83a: 2100 movs r1, #0
  26295. 800b83c: 6938 ldr r0, [r7, #16]
  26296. 800b83e: f000 faf1 bl 800be24 <xQueueGenericSend>
  26297. 800b842: 4603 mov r3, r0
  26298. 800b844: 2b01 cmp r3, #1
  26299. 800b846: d002 beq.n 800b84e <osMutexRelease+0x70>
  26300. stat = osErrorResource;
  26301. 800b848: f06f 0302 mvn.w r3, #2
  26302. 800b84c: 617b str r3, [r7, #20]
  26303. }
  26304. }
  26305. }
  26306. return (stat);
  26307. 800b84e: 697b ldr r3, [r7, #20]
  26308. }
  26309. 800b850: 4618 mov r0, r3
  26310. 800b852: 3718 adds r7, #24
  26311. 800b854: 46bd mov sp, r7
  26312. 800b856: bd80 pop {r7, pc}
  26313. 0800b858 <vApplicationGetIdleTaskMemory>:
  26314. /*
  26315. vApplicationGetIdleTaskMemory gets called when configSUPPORT_STATIC_ALLOCATION
  26316. equals to 1 and is required for static memory allocation support.
  26317. */
  26318. __WEAK void vApplicationGetIdleTaskMemory (StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize) {
  26319. 800b858: b480 push {r7}
  26320. 800b85a: b085 sub sp, #20
  26321. 800b85c: af00 add r7, sp, #0
  26322. 800b85e: 60f8 str r0, [r7, #12]
  26323. 800b860: 60b9 str r1, [r7, #8]
  26324. 800b862: 607a str r2, [r7, #4]
  26325. /* Idle task control block and stack */
  26326. static StaticTask_t Idle_TCB;
  26327. static StackType_t Idle_Stack[configMINIMAL_STACK_SIZE];
  26328. *ppxIdleTaskTCBBuffer = &Idle_TCB;
  26329. 800b864: 68fb ldr r3, [r7, #12]
  26330. 800b866: 4a07 ldr r2, [pc, #28] @ (800b884 <vApplicationGetIdleTaskMemory+0x2c>)
  26331. 800b868: 601a str r2, [r3, #0]
  26332. *ppxIdleTaskStackBuffer = &Idle_Stack[0];
  26333. 800b86a: 68bb ldr r3, [r7, #8]
  26334. 800b86c: 4a06 ldr r2, [pc, #24] @ (800b888 <vApplicationGetIdleTaskMemory+0x30>)
  26335. 800b86e: 601a str r2, [r3, #0]
  26336. *pulIdleTaskStackSize = (uint32_t)configMINIMAL_STACK_SIZE;
  26337. 800b870: 687b ldr r3, [r7, #4]
  26338. 800b872: f44f 7200 mov.w r2, #512 @ 0x200
  26339. 800b876: 601a str r2, [r3, #0]
  26340. }
  26341. 800b878: bf00 nop
  26342. 800b87a: 3714 adds r7, #20
  26343. 800b87c: 46bd mov sp, r7
  26344. 800b87e: f85d 7b04 ldr.w r7, [sp], #4
  26345. 800b882: 4770 bx lr
  26346. 800b884: 24000798 .word 0x24000798
  26347. 800b888: 24000840 .word 0x24000840
  26348. 0800b88c <vApplicationGetTimerTaskMemory>:
  26349. /*
  26350. vApplicationGetTimerTaskMemory gets called when configSUPPORT_STATIC_ALLOCATION
  26351. equals to 1 and is required for static memory allocation support.
  26352. */
  26353. __WEAK void vApplicationGetTimerTaskMemory (StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize) {
  26354. 800b88c: b480 push {r7}
  26355. 800b88e: b085 sub sp, #20
  26356. 800b890: af00 add r7, sp, #0
  26357. 800b892: 60f8 str r0, [r7, #12]
  26358. 800b894: 60b9 str r1, [r7, #8]
  26359. 800b896: 607a str r2, [r7, #4]
  26360. /* Timer task control block and stack */
  26361. static StaticTask_t Timer_TCB;
  26362. static StackType_t Timer_Stack[configTIMER_TASK_STACK_DEPTH];
  26363. *ppxTimerTaskTCBBuffer = &Timer_TCB;
  26364. 800b898: 68fb ldr r3, [r7, #12]
  26365. 800b89a: 4a07 ldr r2, [pc, #28] @ (800b8b8 <vApplicationGetTimerTaskMemory+0x2c>)
  26366. 800b89c: 601a str r2, [r3, #0]
  26367. *ppxTimerTaskStackBuffer = &Timer_Stack[0];
  26368. 800b89e: 68bb ldr r3, [r7, #8]
  26369. 800b8a0: 4a06 ldr r2, [pc, #24] @ (800b8bc <vApplicationGetTimerTaskMemory+0x30>)
  26370. 800b8a2: 601a str r2, [r3, #0]
  26371. *pulTimerTaskStackSize = (uint32_t)configTIMER_TASK_STACK_DEPTH;
  26372. 800b8a4: 687b ldr r3, [r7, #4]
  26373. 800b8a6: f44f 6280 mov.w r2, #1024 @ 0x400
  26374. 800b8aa: 601a str r2, [r3, #0]
  26375. }
  26376. 800b8ac: bf00 nop
  26377. 800b8ae: 3714 adds r7, #20
  26378. 800b8b0: 46bd mov sp, r7
  26379. 800b8b2: f85d 7b04 ldr.w r7, [sp], #4
  26380. 800b8b6: 4770 bx lr
  26381. 800b8b8: 24001040 .word 0x24001040
  26382. 800b8bc: 240010e8 .word 0x240010e8
  26383. 0800b8c0 <vListInitialise>:
  26384. /*-----------------------------------------------------------
  26385. * PUBLIC LIST API documented in list.h
  26386. *----------------------------------------------------------*/
  26387. void vListInitialise( List_t * const pxList )
  26388. {
  26389. 800b8c0: b480 push {r7}
  26390. 800b8c2: b083 sub sp, #12
  26391. 800b8c4: af00 add r7, sp, #0
  26392. 800b8c6: 6078 str r0, [r7, #4]
  26393. /* The list structure contains a list item which is used to mark the
  26394. end of the list. To initialise the list the list end is inserted
  26395. as the only list entry. */
  26396. 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. */
  26397. 800b8c8: 687b ldr r3, [r7, #4]
  26398. 800b8ca: f103 0208 add.w r2, r3, #8
  26399. 800b8ce: 687b ldr r3, [r7, #4]
  26400. 800b8d0: 605a str r2, [r3, #4]
  26401. /* The list end value is the highest possible value in the list to
  26402. ensure it remains at the end of the list. */
  26403. pxList->xListEnd.xItemValue = portMAX_DELAY;
  26404. 800b8d2: 687b ldr r3, [r7, #4]
  26405. 800b8d4: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  26406. 800b8d8: 609a str r2, [r3, #8]
  26407. /* The list end next and previous pointers point to itself so we know
  26408. when the list is empty. */
  26409. 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. */
  26410. 800b8da: 687b ldr r3, [r7, #4]
  26411. 800b8dc: f103 0208 add.w r2, r3, #8
  26412. 800b8e0: 687b ldr r3, [r7, #4]
  26413. 800b8e2: 60da str r2, [r3, #12]
  26414. 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. */
  26415. 800b8e4: 687b ldr r3, [r7, #4]
  26416. 800b8e6: f103 0208 add.w r2, r3, #8
  26417. 800b8ea: 687b ldr r3, [r7, #4]
  26418. 800b8ec: 611a str r2, [r3, #16]
  26419. pxList->uxNumberOfItems = ( UBaseType_t ) 0U;
  26420. 800b8ee: 687b ldr r3, [r7, #4]
  26421. 800b8f0: 2200 movs r2, #0
  26422. 800b8f2: 601a str r2, [r3, #0]
  26423. /* Write known values into the list if
  26424. configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
  26425. listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList );
  26426. listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList );
  26427. }
  26428. 800b8f4: bf00 nop
  26429. 800b8f6: 370c adds r7, #12
  26430. 800b8f8: 46bd mov sp, r7
  26431. 800b8fa: f85d 7b04 ldr.w r7, [sp], #4
  26432. 800b8fe: 4770 bx lr
  26433. 0800b900 <vListInitialiseItem>:
  26434. /*-----------------------------------------------------------*/
  26435. void vListInitialiseItem( ListItem_t * const pxItem )
  26436. {
  26437. 800b900: b480 push {r7}
  26438. 800b902: b083 sub sp, #12
  26439. 800b904: af00 add r7, sp, #0
  26440. 800b906: 6078 str r0, [r7, #4]
  26441. /* Make sure the list item is not recorded as being on a list. */
  26442. pxItem->pxContainer = NULL;
  26443. 800b908: 687b ldr r3, [r7, #4]
  26444. 800b90a: 2200 movs r2, #0
  26445. 800b90c: 611a str r2, [r3, #16]
  26446. /* Write known values into the list item if
  26447. configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
  26448. listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
  26449. listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
  26450. }
  26451. 800b90e: bf00 nop
  26452. 800b910: 370c adds r7, #12
  26453. 800b912: 46bd mov sp, r7
  26454. 800b914: f85d 7b04 ldr.w r7, [sp], #4
  26455. 800b918: 4770 bx lr
  26456. 0800b91a <vListInsertEnd>:
  26457. /*-----------------------------------------------------------*/
  26458. void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem )
  26459. {
  26460. 800b91a: b480 push {r7}
  26461. 800b91c: b085 sub sp, #20
  26462. 800b91e: af00 add r7, sp, #0
  26463. 800b920: 6078 str r0, [r7, #4]
  26464. 800b922: 6039 str r1, [r7, #0]
  26465. ListItem_t * const pxIndex = pxList->pxIndex;
  26466. 800b924: 687b ldr r3, [r7, #4]
  26467. 800b926: 685b ldr r3, [r3, #4]
  26468. 800b928: 60fb str r3, [r7, #12]
  26469. listTEST_LIST_ITEM_INTEGRITY( pxNewListItem );
  26470. /* Insert a new list item into pxList, but rather than sort the list,
  26471. makes the new list item the last item to be removed by a call to
  26472. listGET_OWNER_OF_NEXT_ENTRY(). */
  26473. pxNewListItem->pxNext = pxIndex;
  26474. 800b92a: 683b ldr r3, [r7, #0]
  26475. 800b92c: 68fa ldr r2, [r7, #12]
  26476. 800b92e: 605a str r2, [r3, #4]
  26477. pxNewListItem->pxPrevious = pxIndex->pxPrevious;
  26478. 800b930: 68fb ldr r3, [r7, #12]
  26479. 800b932: 689a ldr r2, [r3, #8]
  26480. 800b934: 683b ldr r3, [r7, #0]
  26481. 800b936: 609a str r2, [r3, #8]
  26482. /* Only used during decision coverage testing. */
  26483. mtCOVERAGE_TEST_DELAY();
  26484. pxIndex->pxPrevious->pxNext = pxNewListItem;
  26485. 800b938: 68fb ldr r3, [r7, #12]
  26486. 800b93a: 689b ldr r3, [r3, #8]
  26487. 800b93c: 683a ldr r2, [r7, #0]
  26488. 800b93e: 605a str r2, [r3, #4]
  26489. pxIndex->pxPrevious = pxNewListItem;
  26490. 800b940: 68fb ldr r3, [r7, #12]
  26491. 800b942: 683a ldr r2, [r7, #0]
  26492. 800b944: 609a str r2, [r3, #8]
  26493. /* Remember which list the item is in. */
  26494. pxNewListItem->pxContainer = pxList;
  26495. 800b946: 683b ldr r3, [r7, #0]
  26496. 800b948: 687a ldr r2, [r7, #4]
  26497. 800b94a: 611a str r2, [r3, #16]
  26498. ( pxList->uxNumberOfItems )++;
  26499. 800b94c: 687b ldr r3, [r7, #4]
  26500. 800b94e: 681b ldr r3, [r3, #0]
  26501. 800b950: 1c5a adds r2, r3, #1
  26502. 800b952: 687b ldr r3, [r7, #4]
  26503. 800b954: 601a str r2, [r3, #0]
  26504. }
  26505. 800b956: bf00 nop
  26506. 800b958: 3714 adds r7, #20
  26507. 800b95a: 46bd mov sp, r7
  26508. 800b95c: f85d 7b04 ldr.w r7, [sp], #4
  26509. 800b960: 4770 bx lr
  26510. 0800b962 <vListInsert>:
  26511. /*-----------------------------------------------------------*/
  26512. void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem )
  26513. {
  26514. 800b962: b480 push {r7}
  26515. 800b964: b085 sub sp, #20
  26516. 800b966: af00 add r7, sp, #0
  26517. 800b968: 6078 str r0, [r7, #4]
  26518. 800b96a: 6039 str r1, [r7, #0]
  26519. ListItem_t *pxIterator;
  26520. const TickType_t xValueOfInsertion = pxNewListItem->xItemValue;
  26521. 800b96c: 683b ldr r3, [r7, #0]
  26522. 800b96e: 681b ldr r3, [r3, #0]
  26523. 800b970: 60bb str r3, [r7, #8]
  26524. new list item should be placed after it. This ensures that TCBs which are
  26525. stored in ready lists (all of which have the same xItemValue value) get a
  26526. share of the CPU. However, if the xItemValue is the same as the back marker
  26527. the iteration loop below will not end. Therefore the value is checked
  26528. first, and the algorithm slightly modified if necessary. */
  26529. if( xValueOfInsertion == portMAX_DELAY )
  26530. 800b972: 68bb ldr r3, [r7, #8]
  26531. 800b974: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  26532. 800b978: d103 bne.n 800b982 <vListInsert+0x20>
  26533. {
  26534. pxIterator = pxList->xListEnd.pxPrevious;
  26535. 800b97a: 687b ldr r3, [r7, #4]
  26536. 800b97c: 691b ldr r3, [r3, #16]
  26537. 800b97e: 60fb str r3, [r7, #12]
  26538. 800b980: e00c b.n 800b99c <vListInsert+0x3a>
  26539. 4) Using a queue or semaphore before it has been initialised or
  26540. before the scheduler has been started (are interrupts firing
  26541. before vTaskStartScheduler() has been called?).
  26542. **********************************************************************/
  26543. 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. */
  26544. 800b982: 687b ldr r3, [r7, #4]
  26545. 800b984: 3308 adds r3, #8
  26546. 800b986: 60fb str r3, [r7, #12]
  26547. 800b988: e002 b.n 800b990 <vListInsert+0x2e>
  26548. 800b98a: 68fb ldr r3, [r7, #12]
  26549. 800b98c: 685b ldr r3, [r3, #4]
  26550. 800b98e: 60fb str r3, [r7, #12]
  26551. 800b990: 68fb ldr r3, [r7, #12]
  26552. 800b992: 685b ldr r3, [r3, #4]
  26553. 800b994: 681b ldr r3, [r3, #0]
  26554. 800b996: 68ba ldr r2, [r7, #8]
  26555. 800b998: 429a cmp r2, r3
  26556. 800b99a: d2f6 bcs.n 800b98a <vListInsert+0x28>
  26557. /* There is nothing to do here, just iterating to the wanted
  26558. insertion position. */
  26559. }
  26560. }
  26561. pxNewListItem->pxNext = pxIterator->pxNext;
  26562. 800b99c: 68fb ldr r3, [r7, #12]
  26563. 800b99e: 685a ldr r2, [r3, #4]
  26564. 800b9a0: 683b ldr r3, [r7, #0]
  26565. 800b9a2: 605a str r2, [r3, #4]
  26566. pxNewListItem->pxNext->pxPrevious = pxNewListItem;
  26567. 800b9a4: 683b ldr r3, [r7, #0]
  26568. 800b9a6: 685b ldr r3, [r3, #4]
  26569. 800b9a8: 683a ldr r2, [r7, #0]
  26570. 800b9aa: 609a str r2, [r3, #8]
  26571. pxNewListItem->pxPrevious = pxIterator;
  26572. 800b9ac: 683b ldr r3, [r7, #0]
  26573. 800b9ae: 68fa ldr r2, [r7, #12]
  26574. 800b9b0: 609a str r2, [r3, #8]
  26575. pxIterator->pxNext = pxNewListItem;
  26576. 800b9b2: 68fb ldr r3, [r7, #12]
  26577. 800b9b4: 683a ldr r2, [r7, #0]
  26578. 800b9b6: 605a str r2, [r3, #4]
  26579. /* Remember which list the item is in. This allows fast removal of the
  26580. item later. */
  26581. pxNewListItem->pxContainer = pxList;
  26582. 800b9b8: 683b ldr r3, [r7, #0]
  26583. 800b9ba: 687a ldr r2, [r7, #4]
  26584. 800b9bc: 611a str r2, [r3, #16]
  26585. ( pxList->uxNumberOfItems )++;
  26586. 800b9be: 687b ldr r3, [r7, #4]
  26587. 800b9c0: 681b ldr r3, [r3, #0]
  26588. 800b9c2: 1c5a adds r2, r3, #1
  26589. 800b9c4: 687b ldr r3, [r7, #4]
  26590. 800b9c6: 601a str r2, [r3, #0]
  26591. }
  26592. 800b9c8: bf00 nop
  26593. 800b9ca: 3714 adds r7, #20
  26594. 800b9cc: 46bd mov sp, r7
  26595. 800b9ce: f85d 7b04 ldr.w r7, [sp], #4
  26596. 800b9d2: 4770 bx lr
  26597. 0800b9d4 <uxListRemove>:
  26598. /*-----------------------------------------------------------*/
  26599. UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove )
  26600. {
  26601. 800b9d4: b480 push {r7}
  26602. 800b9d6: b085 sub sp, #20
  26603. 800b9d8: af00 add r7, sp, #0
  26604. 800b9da: 6078 str r0, [r7, #4]
  26605. /* The list item knows which list it is in. Obtain the list from the list
  26606. item. */
  26607. List_t * const pxList = pxItemToRemove->pxContainer;
  26608. 800b9dc: 687b ldr r3, [r7, #4]
  26609. 800b9de: 691b ldr r3, [r3, #16]
  26610. 800b9e0: 60fb str r3, [r7, #12]
  26611. pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
  26612. 800b9e2: 687b ldr r3, [r7, #4]
  26613. 800b9e4: 685b ldr r3, [r3, #4]
  26614. 800b9e6: 687a ldr r2, [r7, #4]
  26615. 800b9e8: 6892 ldr r2, [r2, #8]
  26616. 800b9ea: 609a str r2, [r3, #8]
  26617. pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;
  26618. 800b9ec: 687b ldr r3, [r7, #4]
  26619. 800b9ee: 689b ldr r3, [r3, #8]
  26620. 800b9f0: 687a ldr r2, [r7, #4]
  26621. 800b9f2: 6852 ldr r2, [r2, #4]
  26622. 800b9f4: 605a str r2, [r3, #4]
  26623. /* Only used during decision coverage testing. */
  26624. mtCOVERAGE_TEST_DELAY();
  26625. /* Make sure the index is left pointing to a valid item. */
  26626. if( pxList->pxIndex == pxItemToRemove )
  26627. 800b9f6: 68fb ldr r3, [r7, #12]
  26628. 800b9f8: 685b ldr r3, [r3, #4]
  26629. 800b9fa: 687a ldr r2, [r7, #4]
  26630. 800b9fc: 429a cmp r2, r3
  26631. 800b9fe: d103 bne.n 800ba08 <uxListRemove+0x34>
  26632. {
  26633. pxList->pxIndex = pxItemToRemove->pxPrevious;
  26634. 800ba00: 687b ldr r3, [r7, #4]
  26635. 800ba02: 689a ldr r2, [r3, #8]
  26636. 800ba04: 68fb ldr r3, [r7, #12]
  26637. 800ba06: 605a str r2, [r3, #4]
  26638. else
  26639. {
  26640. mtCOVERAGE_TEST_MARKER();
  26641. }
  26642. pxItemToRemove->pxContainer = NULL;
  26643. 800ba08: 687b ldr r3, [r7, #4]
  26644. 800ba0a: 2200 movs r2, #0
  26645. 800ba0c: 611a str r2, [r3, #16]
  26646. ( pxList->uxNumberOfItems )--;
  26647. 800ba0e: 68fb ldr r3, [r7, #12]
  26648. 800ba10: 681b ldr r3, [r3, #0]
  26649. 800ba12: 1e5a subs r2, r3, #1
  26650. 800ba14: 68fb ldr r3, [r7, #12]
  26651. 800ba16: 601a str r2, [r3, #0]
  26652. return pxList->uxNumberOfItems;
  26653. 800ba18: 68fb ldr r3, [r7, #12]
  26654. 800ba1a: 681b ldr r3, [r3, #0]
  26655. }
  26656. 800ba1c: 4618 mov r0, r3
  26657. 800ba1e: 3714 adds r7, #20
  26658. 800ba20: 46bd mov sp, r7
  26659. 800ba22: f85d 7b04 ldr.w r7, [sp], #4
  26660. 800ba26: 4770 bx lr
  26661. 0800ba28 <xQueueGenericReset>:
  26662. } \
  26663. taskEXIT_CRITICAL()
  26664. /*-----------------------------------------------------------*/
  26665. BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue )
  26666. {
  26667. 800ba28: b580 push {r7, lr}
  26668. 800ba2a: b084 sub sp, #16
  26669. 800ba2c: af00 add r7, sp, #0
  26670. 800ba2e: 6078 str r0, [r7, #4]
  26671. 800ba30: 6039 str r1, [r7, #0]
  26672. Queue_t * const pxQueue = xQueue;
  26673. 800ba32: 687b ldr r3, [r7, #4]
  26674. 800ba34: 60fb str r3, [r7, #12]
  26675. configASSERT( pxQueue );
  26676. 800ba36: 68fb ldr r3, [r7, #12]
  26677. 800ba38: 2b00 cmp r3, #0
  26678. 800ba3a: d10b bne.n 800ba54 <xQueueGenericReset+0x2c>
  26679. portFORCE_INLINE static void vPortRaiseBASEPRI( void )
  26680. {
  26681. uint32_t ulNewBASEPRI;
  26682. __asm volatile
  26683. 800ba3c: f04f 0350 mov.w r3, #80 @ 0x50
  26684. 800ba40: f383 8811 msr BASEPRI, r3
  26685. 800ba44: f3bf 8f6f isb sy
  26686. 800ba48: f3bf 8f4f dsb sy
  26687. 800ba4c: 60bb str r3, [r7, #8]
  26688. " msr basepri, %0 \n" \
  26689. " isb \n" \
  26690. " dsb \n" \
  26691. :"=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory"
  26692. );
  26693. }
  26694. 800ba4e: bf00 nop
  26695. 800ba50: bf00 nop
  26696. 800ba52: e7fd b.n 800ba50 <xQueueGenericReset+0x28>
  26697. taskENTER_CRITICAL();
  26698. 800ba54: f002 fff8 bl 800ea48 <vPortEnterCritical>
  26699. {
  26700. pxQueue->u.xQueue.pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */
  26701. 800ba58: 68fb ldr r3, [r7, #12]
  26702. 800ba5a: 681a ldr r2, [r3, #0]
  26703. 800ba5c: 68fb ldr r3, [r7, #12]
  26704. 800ba5e: 6bdb ldr r3, [r3, #60] @ 0x3c
  26705. 800ba60: 68f9 ldr r1, [r7, #12]
  26706. 800ba62: 6c09 ldr r1, [r1, #64] @ 0x40
  26707. 800ba64: fb01 f303 mul.w r3, r1, r3
  26708. 800ba68: 441a add r2, r3
  26709. 800ba6a: 68fb ldr r3, [r7, #12]
  26710. 800ba6c: 609a str r2, [r3, #8]
  26711. pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
  26712. 800ba6e: 68fb ldr r3, [r7, #12]
  26713. 800ba70: 2200 movs r2, #0
  26714. 800ba72: 639a str r2, [r3, #56] @ 0x38
  26715. pxQueue->pcWriteTo = pxQueue->pcHead;
  26716. 800ba74: 68fb ldr r3, [r7, #12]
  26717. 800ba76: 681a ldr r2, [r3, #0]
  26718. 800ba78: 68fb ldr r3, [r7, #12]
  26719. 800ba7a: 605a str r2, [r3, #4]
  26720. 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. */
  26721. 800ba7c: 68fb ldr r3, [r7, #12]
  26722. 800ba7e: 681a ldr r2, [r3, #0]
  26723. 800ba80: 68fb ldr r3, [r7, #12]
  26724. 800ba82: 6bdb ldr r3, [r3, #60] @ 0x3c
  26725. 800ba84: 3b01 subs r3, #1
  26726. 800ba86: 68f9 ldr r1, [r7, #12]
  26727. 800ba88: 6c09 ldr r1, [r1, #64] @ 0x40
  26728. 800ba8a: fb01 f303 mul.w r3, r1, r3
  26729. 800ba8e: 441a add r2, r3
  26730. 800ba90: 68fb ldr r3, [r7, #12]
  26731. 800ba92: 60da str r2, [r3, #12]
  26732. pxQueue->cRxLock = queueUNLOCKED;
  26733. 800ba94: 68fb ldr r3, [r7, #12]
  26734. 800ba96: 22ff movs r2, #255 @ 0xff
  26735. 800ba98: f883 2044 strb.w r2, [r3, #68] @ 0x44
  26736. pxQueue->cTxLock = queueUNLOCKED;
  26737. 800ba9c: 68fb ldr r3, [r7, #12]
  26738. 800ba9e: 22ff movs r2, #255 @ 0xff
  26739. 800baa0: f883 2045 strb.w r2, [r3, #69] @ 0x45
  26740. if( xNewQueue == pdFALSE )
  26741. 800baa4: 683b ldr r3, [r7, #0]
  26742. 800baa6: 2b00 cmp r3, #0
  26743. 800baa8: d114 bne.n 800bad4 <xQueueGenericReset+0xac>
  26744. /* If there are tasks blocked waiting to read from the queue, then
  26745. the tasks will remain blocked as after this function exits the queue
  26746. will still be empty. If there are tasks blocked waiting to write to
  26747. the queue, then one should be unblocked as after this function exits
  26748. it will be possible to write to it. */
  26749. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  26750. 800baaa: 68fb ldr r3, [r7, #12]
  26751. 800baac: 691b ldr r3, [r3, #16]
  26752. 800baae: 2b00 cmp r3, #0
  26753. 800bab0: d01a beq.n 800bae8 <xQueueGenericReset+0xc0>
  26754. {
  26755. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  26756. 800bab2: 68fb ldr r3, [r7, #12]
  26757. 800bab4: 3310 adds r3, #16
  26758. 800bab6: 4618 mov r0, r3
  26759. 800bab8: f001 fd2a bl 800d510 <xTaskRemoveFromEventList>
  26760. 800babc: 4603 mov r3, r0
  26761. 800babe: 2b00 cmp r3, #0
  26762. 800bac0: d012 beq.n 800bae8 <xQueueGenericReset+0xc0>
  26763. {
  26764. queueYIELD_IF_USING_PREEMPTION();
  26765. 800bac2: 4b0d ldr r3, [pc, #52] @ (800baf8 <xQueueGenericReset+0xd0>)
  26766. 800bac4: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  26767. 800bac8: 601a str r2, [r3, #0]
  26768. 800baca: f3bf 8f4f dsb sy
  26769. 800bace: f3bf 8f6f isb sy
  26770. 800bad2: e009 b.n 800bae8 <xQueueGenericReset+0xc0>
  26771. }
  26772. }
  26773. else
  26774. {
  26775. /* Ensure the event queues start in the correct state. */
  26776. vListInitialise( &( pxQueue->xTasksWaitingToSend ) );
  26777. 800bad4: 68fb ldr r3, [r7, #12]
  26778. 800bad6: 3310 adds r3, #16
  26779. 800bad8: 4618 mov r0, r3
  26780. 800bada: f7ff fef1 bl 800b8c0 <vListInitialise>
  26781. vListInitialise( &( pxQueue->xTasksWaitingToReceive ) );
  26782. 800bade: 68fb ldr r3, [r7, #12]
  26783. 800bae0: 3324 adds r3, #36 @ 0x24
  26784. 800bae2: 4618 mov r0, r3
  26785. 800bae4: f7ff feec bl 800b8c0 <vListInitialise>
  26786. }
  26787. }
  26788. taskEXIT_CRITICAL();
  26789. 800bae8: f002 ffe0 bl 800eaac <vPortExitCritical>
  26790. /* A value is returned for calling semantic consistency with previous
  26791. versions. */
  26792. return pdPASS;
  26793. 800baec: 2301 movs r3, #1
  26794. }
  26795. 800baee: 4618 mov r0, r3
  26796. 800baf0: 3710 adds r7, #16
  26797. 800baf2: 46bd mov sp, r7
  26798. 800baf4: bd80 pop {r7, pc}
  26799. 800baf6: bf00 nop
  26800. 800baf8: e000ed04 .word 0xe000ed04
  26801. 0800bafc <xQueueGenericCreateStatic>:
  26802. /*-----------------------------------------------------------*/
  26803. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  26804. QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType )
  26805. {
  26806. 800bafc: b580 push {r7, lr}
  26807. 800bafe: b08e sub sp, #56 @ 0x38
  26808. 800bb00: af02 add r7, sp, #8
  26809. 800bb02: 60f8 str r0, [r7, #12]
  26810. 800bb04: 60b9 str r1, [r7, #8]
  26811. 800bb06: 607a str r2, [r7, #4]
  26812. 800bb08: 603b str r3, [r7, #0]
  26813. Queue_t *pxNewQueue;
  26814. configASSERT( uxQueueLength > ( UBaseType_t ) 0 );
  26815. 800bb0a: 68fb ldr r3, [r7, #12]
  26816. 800bb0c: 2b00 cmp r3, #0
  26817. 800bb0e: d10b bne.n 800bb28 <xQueueGenericCreateStatic+0x2c>
  26818. __asm volatile
  26819. 800bb10: f04f 0350 mov.w r3, #80 @ 0x50
  26820. 800bb14: f383 8811 msr BASEPRI, r3
  26821. 800bb18: f3bf 8f6f isb sy
  26822. 800bb1c: f3bf 8f4f dsb sy
  26823. 800bb20: 62bb str r3, [r7, #40] @ 0x28
  26824. }
  26825. 800bb22: bf00 nop
  26826. 800bb24: bf00 nop
  26827. 800bb26: e7fd b.n 800bb24 <xQueueGenericCreateStatic+0x28>
  26828. /* The StaticQueue_t structure and the queue storage area must be
  26829. supplied. */
  26830. configASSERT( pxStaticQueue != NULL );
  26831. 800bb28: 683b ldr r3, [r7, #0]
  26832. 800bb2a: 2b00 cmp r3, #0
  26833. 800bb2c: d10b bne.n 800bb46 <xQueueGenericCreateStatic+0x4a>
  26834. __asm volatile
  26835. 800bb2e: f04f 0350 mov.w r3, #80 @ 0x50
  26836. 800bb32: f383 8811 msr BASEPRI, r3
  26837. 800bb36: f3bf 8f6f isb sy
  26838. 800bb3a: f3bf 8f4f dsb sy
  26839. 800bb3e: 627b str r3, [r7, #36] @ 0x24
  26840. }
  26841. 800bb40: bf00 nop
  26842. 800bb42: bf00 nop
  26843. 800bb44: e7fd b.n 800bb42 <xQueueGenericCreateStatic+0x46>
  26844. /* A queue storage area should be provided if the item size is not 0, and
  26845. should not be provided if the item size is 0. */
  26846. configASSERT( !( ( pucQueueStorage != NULL ) && ( uxItemSize == 0 ) ) );
  26847. 800bb46: 687b ldr r3, [r7, #4]
  26848. 800bb48: 2b00 cmp r3, #0
  26849. 800bb4a: d002 beq.n 800bb52 <xQueueGenericCreateStatic+0x56>
  26850. 800bb4c: 68bb ldr r3, [r7, #8]
  26851. 800bb4e: 2b00 cmp r3, #0
  26852. 800bb50: d001 beq.n 800bb56 <xQueueGenericCreateStatic+0x5a>
  26853. 800bb52: 2301 movs r3, #1
  26854. 800bb54: e000 b.n 800bb58 <xQueueGenericCreateStatic+0x5c>
  26855. 800bb56: 2300 movs r3, #0
  26856. 800bb58: 2b00 cmp r3, #0
  26857. 800bb5a: d10b bne.n 800bb74 <xQueueGenericCreateStatic+0x78>
  26858. __asm volatile
  26859. 800bb5c: f04f 0350 mov.w r3, #80 @ 0x50
  26860. 800bb60: f383 8811 msr BASEPRI, r3
  26861. 800bb64: f3bf 8f6f isb sy
  26862. 800bb68: f3bf 8f4f dsb sy
  26863. 800bb6c: 623b str r3, [r7, #32]
  26864. }
  26865. 800bb6e: bf00 nop
  26866. 800bb70: bf00 nop
  26867. 800bb72: e7fd b.n 800bb70 <xQueueGenericCreateStatic+0x74>
  26868. configASSERT( !( ( pucQueueStorage == NULL ) && ( uxItemSize != 0 ) ) );
  26869. 800bb74: 687b ldr r3, [r7, #4]
  26870. 800bb76: 2b00 cmp r3, #0
  26871. 800bb78: d102 bne.n 800bb80 <xQueueGenericCreateStatic+0x84>
  26872. 800bb7a: 68bb ldr r3, [r7, #8]
  26873. 800bb7c: 2b00 cmp r3, #0
  26874. 800bb7e: d101 bne.n 800bb84 <xQueueGenericCreateStatic+0x88>
  26875. 800bb80: 2301 movs r3, #1
  26876. 800bb82: e000 b.n 800bb86 <xQueueGenericCreateStatic+0x8a>
  26877. 800bb84: 2300 movs r3, #0
  26878. 800bb86: 2b00 cmp r3, #0
  26879. 800bb88: d10b bne.n 800bba2 <xQueueGenericCreateStatic+0xa6>
  26880. __asm volatile
  26881. 800bb8a: f04f 0350 mov.w r3, #80 @ 0x50
  26882. 800bb8e: f383 8811 msr BASEPRI, r3
  26883. 800bb92: f3bf 8f6f isb sy
  26884. 800bb96: f3bf 8f4f dsb sy
  26885. 800bb9a: 61fb str r3, [r7, #28]
  26886. }
  26887. 800bb9c: bf00 nop
  26888. 800bb9e: bf00 nop
  26889. 800bba0: e7fd b.n 800bb9e <xQueueGenericCreateStatic+0xa2>
  26890. #if( configASSERT_DEFINED == 1 )
  26891. {
  26892. /* Sanity check that the size of the structure used to declare a
  26893. variable of type StaticQueue_t or StaticSemaphore_t equals the size of
  26894. the real queue and semaphore structures. */
  26895. volatile size_t xSize = sizeof( StaticQueue_t );
  26896. 800bba2: 2350 movs r3, #80 @ 0x50
  26897. 800bba4: 617b str r3, [r7, #20]
  26898. configASSERT( xSize == sizeof( Queue_t ) );
  26899. 800bba6: 697b ldr r3, [r7, #20]
  26900. 800bba8: 2b50 cmp r3, #80 @ 0x50
  26901. 800bbaa: d00b beq.n 800bbc4 <xQueueGenericCreateStatic+0xc8>
  26902. __asm volatile
  26903. 800bbac: f04f 0350 mov.w r3, #80 @ 0x50
  26904. 800bbb0: f383 8811 msr BASEPRI, r3
  26905. 800bbb4: f3bf 8f6f isb sy
  26906. 800bbb8: f3bf 8f4f dsb sy
  26907. 800bbbc: 61bb str r3, [r7, #24]
  26908. }
  26909. 800bbbe: bf00 nop
  26910. 800bbc0: bf00 nop
  26911. 800bbc2: e7fd b.n 800bbc0 <xQueueGenericCreateStatic+0xc4>
  26912. ( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */
  26913. 800bbc4: 697b ldr r3, [r7, #20]
  26914. #endif /* configASSERT_DEFINED */
  26915. /* The address of a statically allocated queue was passed in, use it.
  26916. The address of a statically allocated storage area was also passed in
  26917. but is already set. */
  26918. 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. */
  26919. 800bbc6: 683b ldr r3, [r7, #0]
  26920. 800bbc8: 62fb str r3, [r7, #44] @ 0x2c
  26921. if( pxNewQueue != NULL )
  26922. 800bbca: 6afb ldr r3, [r7, #44] @ 0x2c
  26923. 800bbcc: 2b00 cmp r3, #0
  26924. 800bbce: d00d beq.n 800bbec <xQueueGenericCreateStatic+0xf0>
  26925. #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  26926. {
  26927. /* Queues can be allocated wither statically or dynamically, so
  26928. note this queue was allocated statically in case the queue is
  26929. later deleted. */
  26930. pxNewQueue->ucStaticallyAllocated = pdTRUE;
  26931. 800bbd0: 6afb ldr r3, [r7, #44] @ 0x2c
  26932. 800bbd2: 2201 movs r2, #1
  26933. 800bbd4: f883 2046 strb.w r2, [r3, #70] @ 0x46
  26934. }
  26935. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  26936. prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue );
  26937. 800bbd8: f897 2038 ldrb.w r2, [r7, #56] @ 0x38
  26938. 800bbdc: 6afb ldr r3, [r7, #44] @ 0x2c
  26939. 800bbde: 9300 str r3, [sp, #0]
  26940. 800bbe0: 4613 mov r3, r2
  26941. 800bbe2: 687a ldr r2, [r7, #4]
  26942. 800bbe4: 68b9 ldr r1, [r7, #8]
  26943. 800bbe6: 68f8 ldr r0, [r7, #12]
  26944. 800bbe8: f000 f840 bl 800bc6c <prvInitialiseNewQueue>
  26945. {
  26946. traceQUEUE_CREATE_FAILED( ucQueueType );
  26947. mtCOVERAGE_TEST_MARKER();
  26948. }
  26949. return pxNewQueue;
  26950. 800bbec: 6afb ldr r3, [r7, #44] @ 0x2c
  26951. }
  26952. 800bbee: 4618 mov r0, r3
  26953. 800bbf0: 3730 adds r7, #48 @ 0x30
  26954. 800bbf2: 46bd mov sp, r7
  26955. 800bbf4: bd80 pop {r7, pc}
  26956. 0800bbf6 <xQueueGenericCreate>:
  26957. /*-----------------------------------------------------------*/
  26958. #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  26959. QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType )
  26960. {
  26961. 800bbf6: b580 push {r7, lr}
  26962. 800bbf8: b08a sub sp, #40 @ 0x28
  26963. 800bbfa: af02 add r7, sp, #8
  26964. 800bbfc: 60f8 str r0, [r7, #12]
  26965. 800bbfe: 60b9 str r1, [r7, #8]
  26966. 800bc00: 4613 mov r3, r2
  26967. 800bc02: 71fb strb r3, [r7, #7]
  26968. Queue_t *pxNewQueue;
  26969. size_t xQueueSizeInBytes;
  26970. uint8_t *pucQueueStorage;
  26971. configASSERT( uxQueueLength > ( UBaseType_t ) 0 );
  26972. 800bc04: 68fb ldr r3, [r7, #12]
  26973. 800bc06: 2b00 cmp r3, #0
  26974. 800bc08: d10b bne.n 800bc22 <xQueueGenericCreate+0x2c>
  26975. __asm volatile
  26976. 800bc0a: f04f 0350 mov.w r3, #80 @ 0x50
  26977. 800bc0e: f383 8811 msr BASEPRI, r3
  26978. 800bc12: f3bf 8f6f isb sy
  26979. 800bc16: f3bf 8f4f dsb sy
  26980. 800bc1a: 613b str r3, [r7, #16]
  26981. }
  26982. 800bc1c: bf00 nop
  26983. 800bc1e: bf00 nop
  26984. 800bc20: e7fd b.n 800bc1e <xQueueGenericCreate+0x28>
  26985. /* Allocate enough space to hold the maximum number of items that
  26986. can be in the queue at any time. It is valid for uxItemSize to be
  26987. zero in the case the queue is used as a semaphore. */
  26988. xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  26989. 800bc22: 68fb ldr r3, [r7, #12]
  26990. 800bc24: 68ba ldr r2, [r7, #8]
  26991. 800bc26: fb02 f303 mul.w r3, r2, r3
  26992. 800bc2a: 61fb str r3, [r7, #28]
  26993. alignment requirements of the Queue_t structure - which in this case
  26994. is an int8_t *. Therefore, whenever the stack alignment requirements
  26995. are greater than or equal to the pointer to char requirements the cast
  26996. is safe. In other cases alignment requirements are not strict (one or
  26997. two bytes). */
  26998. pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) + xQueueSizeInBytes ); /*lint !e9087 !e9079 see comment above. */
  26999. 800bc2c: 69fb ldr r3, [r7, #28]
  27000. 800bc2e: 3350 adds r3, #80 @ 0x50
  27001. 800bc30: 4618 mov r0, r3
  27002. 800bc32: f003 f82b bl 800ec8c <pvPortMalloc>
  27003. 800bc36: 61b8 str r0, [r7, #24]
  27004. if( pxNewQueue != NULL )
  27005. 800bc38: 69bb ldr r3, [r7, #24]
  27006. 800bc3a: 2b00 cmp r3, #0
  27007. 800bc3c: d011 beq.n 800bc62 <xQueueGenericCreate+0x6c>
  27008. {
  27009. /* Jump past the queue structure to find the location of the queue
  27010. storage area. */
  27011. pucQueueStorage = ( uint8_t * ) pxNewQueue;
  27012. 800bc3e: 69bb ldr r3, [r7, #24]
  27013. 800bc40: 617b str r3, [r7, #20]
  27014. pucQueueStorage += sizeof( Queue_t ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */
  27015. 800bc42: 697b ldr r3, [r7, #20]
  27016. 800bc44: 3350 adds r3, #80 @ 0x50
  27017. 800bc46: 617b str r3, [r7, #20]
  27018. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  27019. {
  27020. /* Queues can be created either statically or dynamically, so
  27021. note this task was created dynamically in case it is later
  27022. deleted. */
  27023. pxNewQueue->ucStaticallyAllocated = pdFALSE;
  27024. 800bc48: 69bb ldr r3, [r7, #24]
  27025. 800bc4a: 2200 movs r2, #0
  27026. 800bc4c: f883 2046 strb.w r2, [r3, #70] @ 0x46
  27027. }
  27028. #endif /* configSUPPORT_STATIC_ALLOCATION */
  27029. prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue );
  27030. 800bc50: 79fa ldrb r2, [r7, #7]
  27031. 800bc52: 69bb ldr r3, [r7, #24]
  27032. 800bc54: 9300 str r3, [sp, #0]
  27033. 800bc56: 4613 mov r3, r2
  27034. 800bc58: 697a ldr r2, [r7, #20]
  27035. 800bc5a: 68b9 ldr r1, [r7, #8]
  27036. 800bc5c: 68f8 ldr r0, [r7, #12]
  27037. 800bc5e: f000 f805 bl 800bc6c <prvInitialiseNewQueue>
  27038. {
  27039. traceQUEUE_CREATE_FAILED( ucQueueType );
  27040. mtCOVERAGE_TEST_MARKER();
  27041. }
  27042. return pxNewQueue;
  27043. 800bc62: 69bb ldr r3, [r7, #24]
  27044. }
  27045. 800bc64: 4618 mov r0, r3
  27046. 800bc66: 3720 adds r7, #32
  27047. 800bc68: 46bd mov sp, r7
  27048. 800bc6a: bd80 pop {r7, pc}
  27049. 0800bc6c <prvInitialiseNewQueue>:
  27050. #endif /* configSUPPORT_STATIC_ALLOCATION */
  27051. /*-----------------------------------------------------------*/
  27052. static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, const uint8_t ucQueueType, Queue_t *pxNewQueue )
  27053. {
  27054. 800bc6c: b580 push {r7, lr}
  27055. 800bc6e: b084 sub sp, #16
  27056. 800bc70: af00 add r7, sp, #0
  27057. 800bc72: 60f8 str r0, [r7, #12]
  27058. 800bc74: 60b9 str r1, [r7, #8]
  27059. 800bc76: 607a str r2, [r7, #4]
  27060. 800bc78: 70fb strb r3, [r7, #3]
  27061. /* Remove compiler warnings about unused parameters should
  27062. configUSE_TRACE_FACILITY not be set to 1. */
  27063. ( void ) ucQueueType;
  27064. if( uxItemSize == ( UBaseType_t ) 0 )
  27065. 800bc7a: 68bb ldr r3, [r7, #8]
  27066. 800bc7c: 2b00 cmp r3, #0
  27067. 800bc7e: d103 bne.n 800bc88 <prvInitialiseNewQueue+0x1c>
  27068. {
  27069. /* No RAM was allocated for the queue storage area, but PC head cannot
  27070. be set to NULL because NULL is used as a key to say the queue is used as
  27071. a mutex. Therefore just set pcHead to point to the queue as a benign
  27072. value that is known to be within the memory map. */
  27073. pxNewQueue->pcHead = ( int8_t * ) pxNewQueue;
  27074. 800bc80: 69bb ldr r3, [r7, #24]
  27075. 800bc82: 69ba ldr r2, [r7, #24]
  27076. 800bc84: 601a str r2, [r3, #0]
  27077. 800bc86: e002 b.n 800bc8e <prvInitialiseNewQueue+0x22>
  27078. }
  27079. else
  27080. {
  27081. /* Set the head to the start of the queue storage area. */
  27082. pxNewQueue->pcHead = ( int8_t * ) pucQueueStorage;
  27083. 800bc88: 69bb ldr r3, [r7, #24]
  27084. 800bc8a: 687a ldr r2, [r7, #4]
  27085. 800bc8c: 601a str r2, [r3, #0]
  27086. }
  27087. /* Initialise the queue members as described where the queue type is
  27088. defined. */
  27089. pxNewQueue->uxLength = uxQueueLength;
  27090. 800bc8e: 69bb ldr r3, [r7, #24]
  27091. 800bc90: 68fa ldr r2, [r7, #12]
  27092. 800bc92: 63da str r2, [r3, #60] @ 0x3c
  27093. pxNewQueue->uxItemSize = uxItemSize;
  27094. 800bc94: 69bb ldr r3, [r7, #24]
  27095. 800bc96: 68ba ldr r2, [r7, #8]
  27096. 800bc98: 641a str r2, [r3, #64] @ 0x40
  27097. ( void ) xQueueGenericReset( pxNewQueue, pdTRUE );
  27098. 800bc9a: 2101 movs r1, #1
  27099. 800bc9c: 69b8 ldr r0, [r7, #24]
  27100. 800bc9e: f7ff fec3 bl 800ba28 <xQueueGenericReset>
  27101. #if ( configUSE_TRACE_FACILITY == 1 )
  27102. {
  27103. pxNewQueue->ucQueueType = ucQueueType;
  27104. 800bca2: 69bb ldr r3, [r7, #24]
  27105. 800bca4: 78fa ldrb r2, [r7, #3]
  27106. 800bca6: f883 204c strb.w r2, [r3, #76] @ 0x4c
  27107. pxNewQueue->pxQueueSetContainer = NULL;
  27108. }
  27109. #endif /* configUSE_QUEUE_SETS */
  27110. traceQUEUE_CREATE( pxNewQueue );
  27111. }
  27112. 800bcaa: bf00 nop
  27113. 800bcac: 3710 adds r7, #16
  27114. 800bcae: 46bd mov sp, r7
  27115. 800bcb0: bd80 pop {r7, pc}
  27116. 0800bcb2 <prvInitialiseMutex>:
  27117. /*-----------------------------------------------------------*/
  27118. #if( configUSE_MUTEXES == 1 )
  27119. static void prvInitialiseMutex( Queue_t *pxNewQueue )
  27120. {
  27121. 800bcb2: b580 push {r7, lr}
  27122. 800bcb4: b082 sub sp, #8
  27123. 800bcb6: af00 add r7, sp, #0
  27124. 800bcb8: 6078 str r0, [r7, #4]
  27125. if( pxNewQueue != NULL )
  27126. 800bcba: 687b ldr r3, [r7, #4]
  27127. 800bcbc: 2b00 cmp r3, #0
  27128. 800bcbe: d00e beq.n 800bcde <prvInitialiseMutex+0x2c>
  27129. {
  27130. /* The queue create function will set all the queue structure members
  27131. correctly for a generic queue, but this function is creating a
  27132. mutex. Overwrite those members that need to be set differently -
  27133. in particular the information required for priority inheritance. */
  27134. pxNewQueue->u.xSemaphore.xMutexHolder = NULL;
  27135. 800bcc0: 687b ldr r3, [r7, #4]
  27136. 800bcc2: 2200 movs r2, #0
  27137. 800bcc4: 609a str r2, [r3, #8]
  27138. pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX;
  27139. 800bcc6: 687b ldr r3, [r7, #4]
  27140. 800bcc8: 2200 movs r2, #0
  27141. 800bcca: 601a str r2, [r3, #0]
  27142. /* In case this is a recursive mutex. */
  27143. pxNewQueue->u.xSemaphore.uxRecursiveCallCount = 0;
  27144. 800bccc: 687b ldr r3, [r7, #4]
  27145. 800bcce: 2200 movs r2, #0
  27146. 800bcd0: 60da str r2, [r3, #12]
  27147. traceCREATE_MUTEX( pxNewQueue );
  27148. /* Start with the semaphore in the expected state. */
  27149. ( void ) xQueueGenericSend( pxNewQueue, NULL, ( TickType_t ) 0U, queueSEND_TO_BACK );
  27150. 800bcd2: 2300 movs r3, #0
  27151. 800bcd4: 2200 movs r2, #0
  27152. 800bcd6: 2100 movs r1, #0
  27153. 800bcd8: 6878 ldr r0, [r7, #4]
  27154. 800bcda: f000 f8a3 bl 800be24 <xQueueGenericSend>
  27155. }
  27156. else
  27157. {
  27158. traceCREATE_MUTEX_FAILED();
  27159. }
  27160. }
  27161. 800bcde: bf00 nop
  27162. 800bce0: 3708 adds r7, #8
  27163. 800bce2: 46bd mov sp, r7
  27164. 800bce4: bd80 pop {r7, pc}
  27165. 0800bce6 <xQueueCreateMutex>:
  27166. /*-----------------------------------------------------------*/
  27167. #if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
  27168. QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType )
  27169. {
  27170. 800bce6: b580 push {r7, lr}
  27171. 800bce8: b086 sub sp, #24
  27172. 800bcea: af00 add r7, sp, #0
  27173. 800bcec: 4603 mov r3, r0
  27174. 800bcee: 71fb strb r3, [r7, #7]
  27175. QueueHandle_t xNewQueue;
  27176. const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0;
  27177. 800bcf0: 2301 movs r3, #1
  27178. 800bcf2: 617b str r3, [r7, #20]
  27179. 800bcf4: 2300 movs r3, #0
  27180. 800bcf6: 613b str r3, [r7, #16]
  27181. xNewQueue = xQueueGenericCreate( uxMutexLength, uxMutexSize, ucQueueType );
  27182. 800bcf8: 79fb ldrb r3, [r7, #7]
  27183. 800bcfa: 461a mov r2, r3
  27184. 800bcfc: 6939 ldr r1, [r7, #16]
  27185. 800bcfe: 6978 ldr r0, [r7, #20]
  27186. 800bd00: f7ff ff79 bl 800bbf6 <xQueueGenericCreate>
  27187. 800bd04: 60f8 str r0, [r7, #12]
  27188. prvInitialiseMutex( ( Queue_t * ) xNewQueue );
  27189. 800bd06: 68f8 ldr r0, [r7, #12]
  27190. 800bd08: f7ff ffd3 bl 800bcb2 <prvInitialiseMutex>
  27191. return xNewQueue;
  27192. 800bd0c: 68fb ldr r3, [r7, #12]
  27193. }
  27194. 800bd0e: 4618 mov r0, r3
  27195. 800bd10: 3718 adds r7, #24
  27196. 800bd12: 46bd mov sp, r7
  27197. 800bd14: bd80 pop {r7, pc}
  27198. 0800bd16 <xQueueCreateMutexStatic>:
  27199. /*-----------------------------------------------------------*/
  27200. #if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
  27201. QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue )
  27202. {
  27203. 800bd16: b580 push {r7, lr}
  27204. 800bd18: b088 sub sp, #32
  27205. 800bd1a: af02 add r7, sp, #8
  27206. 800bd1c: 4603 mov r3, r0
  27207. 800bd1e: 6039 str r1, [r7, #0]
  27208. 800bd20: 71fb strb r3, [r7, #7]
  27209. QueueHandle_t xNewQueue;
  27210. const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0;
  27211. 800bd22: 2301 movs r3, #1
  27212. 800bd24: 617b str r3, [r7, #20]
  27213. 800bd26: 2300 movs r3, #0
  27214. 800bd28: 613b str r3, [r7, #16]
  27215. /* Prevent compiler warnings about unused parameters if
  27216. configUSE_TRACE_FACILITY does not equal 1. */
  27217. ( void ) ucQueueType;
  27218. xNewQueue = xQueueGenericCreateStatic( uxMutexLength, uxMutexSize, NULL, pxStaticQueue, ucQueueType );
  27219. 800bd2a: 79fb ldrb r3, [r7, #7]
  27220. 800bd2c: 9300 str r3, [sp, #0]
  27221. 800bd2e: 683b ldr r3, [r7, #0]
  27222. 800bd30: 2200 movs r2, #0
  27223. 800bd32: 6939 ldr r1, [r7, #16]
  27224. 800bd34: 6978 ldr r0, [r7, #20]
  27225. 800bd36: f7ff fee1 bl 800bafc <xQueueGenericCreateStatic>
  27226. 800bd3a: 60f8 str r0, [r7, #12]
  27227. prvInitialiseMutex( ( Queue_t * ) xNewQueue );
  27228. 800bd3c: 68f8 ldr r0, [r7, #12]
  27229. 800bd3e: f7ff ffb8 bl 800bcb2 <prvInitialiseMutex>
  27230. return xNewQueue;
  27231. 800bd42: 68fb ldr r3, [r7, #12]
  27232. }
  27233. 800bd44: 4618 mov r0, r3
  27234. 800bd46: 3718 adds r7, #24
  27235. 800bd48: 46bd mov sp, r7
  27236. 800bd4a: bd80 pop {r7, pc}
  27237. 0800bd4c <xQueueGiveMutexRecursive>:
  27238. /*-----------------------------------------------------------*/
  27239. #if ( configUSE_RECURSIVE_MUTEXES == 1 )
  27240. BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex )
  27241. {
  27242. 800bd4c: b590 push {r4, r7, lr}
  27243. 800bd4e: b087 sub sp, #28
  27244. 800bd50: af00 add r7, sp, #0
  27245. 800bd52: 6078 str r0, [r7, #4]
  27246. BaseType_t xReturn;
  27247. Queue_t * const pxMutex = ( Queue_t * ) xMutex;
  27248. 800bd54: 687b ldr r3, [r7, #4]
  27249. 800bd56: 613b str r3, [r7, #16]
  27250. configASSERT( pxMutex );
  27251. 800bd58: 693b ldr r3, [r7, #16]
  27252. 800bd5a: 2b00 cmp r3, #0
  27253. 800bd5c: d10b bne.n 800bd76 <xQueueGiveMutexRecursive+0x2a>
  27254. __asm volatile
  27255. 800bd5e: f04f 0350 mov.w r3, #80 @ 0x50
  27256. 800bd62: f383 8811 msr BASEPRI, r3
  27257. 800bd66: f3bf 8f6f isb sy
  27258. 800bd6a: f3bf 8f4f dsb sy
  27259. 800bd6e: 60fb str r3, [r7, #12]
  27260. }
  27261. 800bd70: bf00 nop
  27262. 800bd72: bf00 nop
  27263. 800bd74: e7fd b.n 800bd72 <xQueueGiveMutexRecursive+0x26>
  27264. change outside of this task. If this task does not hold the mutex then
  27265. pxMutexHolder can never coincidentally equal the tasks handle, and as
  27266. this is the only condition we are interested in it does not matter if
  27267. pxMutexHolder is accessed simultaneously by another task. Therefore no
  27268. mutual exclusion is required to test the pxMutexHolder variable. */
  27269. if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() )
  27270. 800bd76: 693b ldr r3, [r7, #16]
  27271. 800bd78: 689c ldr r4, [r3, #8]
  27272. 800bd7a: f001 fdb7 bl 800d8ec <xTaskGetCurrentTaskHandle>
  27273. 800bd7e: 4603 mov r3, r0
  27274. 800bd80: 429c cmp r4, r3
  27275. 800bd82: d111 bne.n 800bda8 <xQueueGiveMutexRecursive+0x5c>
  27276. /* uxRecursiveCallCount cannot be zero if xMutexHolder is equal to
  27277. the task handle, therefore no underflow check is required. Also,
  27278. uxRecursiveCallCount is only modified by the mutex holder, and as
  27279. there can only be one, no mutual exclusion is required to modify the
  27280. uxRecursiveCallCount member. */
  27281. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )--;
  27282. 800bd84: 693b ldr r3, [r7, #16]
  27283. 800bd86: 68db ldr r3, [r3, #12]
  27284. 800bd88: 1e5a subs r2, r3, #1
  27285. 800bd8a: 693b ldr r3, [r7, #16]
  27286. 800bd8c: 60da str r2, [r3, #12]
  27287. /* Has the recursive call count unwound to 0? */
  27288. if( pxMutex->u.xSemaphore.uxRecursiveCallCount == ( UBaseType_t ) 0 )
  27289. 800bd8e: 693b ldr r3, [r7, #16]
  27290. 800bd90: 68db ldr r3, [r3, #12]
  27291. 800bd92: 2b00 cmp r3, #0
  27292. 800bd94: d105 bne.n 800bda2 <xQueueGiveMutexRecursive+0x56>
  27293. {
  27294. /* Return the mutex. This will automatically unblock any other
  27295. task that might be waiting to access the mutex. */
  27296. ( void ) xQueueGenericSend( pxMutex, NULL, queueMUTEX_GIVE_BLOCK_TIME, queueSEND_TO_BACK );
  27297. 800bd96: 2300 movs r3, #0
  27298. 800bd98: 2200 movs r2, #0
  27299. 800bd9a: 2100 movs r1, #0
  27300. 800bd9c: 6938 ldr r0, [r7, #16]
  27301. 800bd9e: f000 f841 bl 800be24 <xQueueGenericSend>
  27302. else
  27303. {
  27304. mtCOVERAGE_TEST_MARKER();
  27305. }
  27306. xReturn = pdPASS;
  27307. 800bda2: 2301 movs r3, #1
  27308. 800bda4: 617b str r3, [r7, #20]
  27309. 800bda6: e001 b.n 800bdac <xQueueGiveMutexRecursive+0x60>
  27310. }
  27311. else
  27312. {
  27313. /* The mutex cannot be given because the calling task is not the
  27314. holder. */
  27315. xReturn = pdFAIL;
  27316. 800bda8: 2300 movs r3, #0
  27317. 800bdaa: 617b str r3, [r7, #20]
  27318. traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex );
  27319. }
  27320. return xReturn;
  27321. 800bdac: 697b ldr r3, [r7, #20]
  27322. }
  27323. 800bdae: 4618 mov r0, r3
  27324. 800bdb0: 371c adds r7, #28
  27325. 800bdb2: 46bd mov sp, r7
  27326. 800bdb4: bd90 pop {r4, r7, pc}
  27327. 0800bdb6 <xQueueTakeMutexRecursive>:
  27328. /*-----------------------------------------------------------*/
  27329. #if ( configUSE_RECURSIVE_MUTEXES == 1 )
  27330. BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait )
  27331. {
  27332. 800bdb6: b590 push {r4, r7, lr}
  27333. 800bdb8: b087 sub sp, #28
  27334. 800bdba: af00 add r7, sp, #0
  27335. 800bdbc: 6078 str r0, [r7, #4]
  27336. 800bdbe: 6039 str r1, [r7, #0]
  27337. BaseType_t xReturn;
  27338. Queue_t * const pxMutex = ( Queue_t * ) xMutex;
  27339. 800bdc0: 687b ldr r3, [r7, #4]
  27340. 800bdc2: 613b str r3, [r7, #16]
  27341. configASSERT( pxMutex );
  27342. 800bdc4: 693b ldr r3, [r7, #16]
  27343. 800bdc6: 2b00 cmp r3, #0
  27344. 800bdc8: d10b bne.n 800bde2 <xQueueTakeMutexRecursive+0x2c>
  27345. __asm volatile
  27346. 800bdca: f04f 0350 mov.w r3, #80 @ 0x50
  27347. 800bdce: f383 8811 msr BASEPRI, r3
  27348. 800bdd2: f3bf 8f6f isb sy
  27349. 800bdd6: f3bf 8f4f dsb sy
  27350. 800bdda: 60fb str r3, [r7, #12]
  27351. }
  27352. 800bddc: bf00 nop
  27353. 800bdde: bf00 nop
  27354. 800bde0: e7fd b.n 800bdde <xQueueTakeMutexRecursive+0x28>
  27355. /* Comments regarding mutual exclusion as per those within
  27356. xQueueGiveMutexRecursive(). */
  27357. traceTAKE_MUTEX_RECURSIVE( pxMutex );
  27358. if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() )
  27359. 800bde2: 693b ldr r3, [r7, #16]
  27360. 800bde4: 689c ldr r4, [r3, #8]
  27361. 800bde6: f001 fd81 bl 800d8ec <xTaskGetCurrentTaskHandle>
  27362. 800bdea: 4603 mov r3, r0
  27363. 800bdec: 429c cmp r4, r3
  27364. 800bdee: d107 bne.n 800be00 <xQueueTakeMutexRecursive+0x4a>
  27365. {
  27366. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++;
  27367. 800bdf0: 693b ldr r3, [r7, #16]
  27368. 800bdf2: 68db ldr r3, [r3, #12]
  27369. 800bdf4: 1c5a adds r2, r3, #1
  27370. 800bdf6: 693b ldr r3, [r7, #16]
  27371. 800bdf8: 60da str r2, [r3, #12]
  27372. xReturn = pdPASS;
  27373. 800bdfa: 2301 movs r3, #1
  27374. 800bdfc: 617b str r3, [r7, #20]
  27375. 800bdfe: e00c b.n 800be1a <xQueueTakeMutexRecursive+0x64>
  27376. }
  27377. else
  27378. {
  27379. xReturn = xQueueSemaphoreTake( pxMutex, xTicksToWait );
  27380. 800be00: 6839 ldr r1, [r7, #0]
  27381. 800be02: 6938 ldr r0, [r7, #16]
  27382. 800be04: f000 fa90 bl 800c328 <xQueueSemaphoreTake>
  27383. 800be08: 6178 str r0, [r7, #20]
  27384. /* pdPASS will only be returned if the mutex was successfully
  27385. obtained. The calling task may have entered the Blocked state
  27386. before reaching here. */
  27387. if( xReturn != pdFAIL )
  27388. 800be0a: 697b ldr r3, [r7, #20]
  27389. 800be0c: 2b00 cmp r3, #0
  27390. 800be0e: d004 beq.n 800be1a <xQueueTakeMutexRecursive+0x64>
  27391. {
  27392. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++;
  27393. 800be10: 693b ldr r3, [r7, #16]
  27394. 800be12: 68db ldr r3, [r3, #12]
  27395. 800be14: 1c5a adds r2, r3, #1
  27396. 800be16: 693b ldr r3, [r7, #16]
  27397. 800be18: 60da str r2, [r3, #12]
  27398. {
  27399. traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex );
  27400. }
  27401. }
  27402. return xReturn;
  27403. 800be1a: 697b ldr r3, [r7, #20]
  27404. }
  27405. 800be1c: 4618 mov r0, r3
  27406. 800be1e: 371c adds r7, #28
  27407. 800be20: 46bd mov sp, r7
  27408. 800be22: bd90 pop {r4, r7, pc}
  27409. 0800be24 <xQueueGenericSend>:
  27410. #endif /* ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */
  27411. /*-----------------------------------------------------------*/
  27412. BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition )
  27413. {
  27414. 800be24: b580 push {r7, lr}
  27415. 800be26: b08e sub sp, #56 @ 0x38
  27416. 800be28: af00 add r7, sp, #0
  27417. 800be2a: 60f8 str r0, [r7, #12]
  27418. 800be2c: 60b9 str r1, [r7, #8]
  27419. 800be2e: 607a str r2, [r7, #4]
  27420. 800be30: 603b str r3, [r7, #0]
  27421. BaseType_t xEntryTimeSet = pdFALSE, xYieldRequired;
  27422. 800be32: 2300 movs r3, #0
  27423. 800be34: 637b str r3, [r7, #52] @ 0x34
  27424. TimeOut_t xTimeOut;
  27425. Queue_t * const pxQueue = xQueue;
  27426. 800be36: 68fb ldr r3, [r7, #12]
  27427. 800be38: 633b str r3, [r7, #48] @ 0x30
  27428. configASSERT( pxQueue );
  27429. 800be3a: 6b3b ldr r3, [r7, #48] @ 0x30
  27430. 800be3c: 2b00 cmp r3, #0
  27431. 800be3e: d10b bne.n 800be58 <xQueueGenericSend+0x34>
  27432. __asm volatile
  27433. 800be40: f04f 0350 mov.w r3, #80 @ 0x50
  27434. 800be44: f383 8811 msr BASEPRI, r3
  27435. 800be48: f3bf 8f6f isb sy
  27436. 800be4c: f3bf 8f4f dsb sy
  27437. 800be50: 62bb str r3, [r7, #40] @ 0x28
  27438. }
  27439. 800be52: bf00 nop
  27440. 800be54: bf00 nop
  27441. 800be56: e7fd b.n 800be54 <xQueueGenericSend+0x30>
  27442. configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
  27443. 800be58: 68bb ldr r3, [r7, #8]
  27444. 800be5a: 2b00 cmp r3, #0
  27445. 800be5c: d103 bne.n 800be66 <xQueueGenericSend+0x42>
  27446. 800be5e: 6b3b ldr r3, [r7, #48] @ 0x30
  27447. 800be60: 6c1b ldr r3, [r3, #64] @ 0x40
  27448. 800be62: 2b00 cmp r3, #0
  27449. 800be64: d101 bne.n 800be6a <xQueueGenericSend+0x46>
  27450. 800be66: 2301 movs r3, #1
  27451. 800be68: e000 b.n 800be6c <xQueueGenericSend+0x48>
  27452. 800be6a: 2300 movs r3, #0
  27453. 800be6c: 2b00 cmp r3, #0
  27454. 800be6e: d10b bne.n 800be88 <xQueueGenericSend+0x64>
  27455. __asm volatile
  27456. 800be70: f04f 0350 mov.w r3, #80 @ 0x50
  27457. 800be74: f383 8811 msr BASEPRI, r3
  27458. 800be78: f3bf 8f6f isb sy
  27459. 800be7c: f3bf 8f4f dsb sy
  27460. 800be80: 627b str r3, [r7, #36] @ 0x24
  27461. }
  27462. 800be82: bf00 nop
  27463. 800be84: bf00 nop
  27464. 800be86: e7fd b.n 800be84 <xQueueGenericSend+0x60>
  27465. configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
  27466. 800be88: 683b ldr r3, [r7, #0]
  27467. 800be8a: 2b02 cmp r3, #2
  27468. 800be8c: d103 bne.n 800be96 <xQueueGenericSend+0x72>
  27469. 800be8e: 6b3b ldr r3, [r7, #48] @ 0x30
  27470. 800be90: 6bdb ldr r3, [r3, #60] @ 0x3c
  27471. 800be92: 2b01 cmp r3, #1
  27472. 800be94: d101 bne.n 800be9a <xQueueGenericSend+0x76>
  27473. 800be96: 2301 movs r3, #1
  27474. 800be98: e000 b.n 800be9c <xQueueGenericSend+0x78>
  27475. 800be9a: 2300 movs r3, #0
  27476. 800be9c: 2b00 cmp r3, #0
  27477. 800be9e: d10b bne.n 800beb8 <xQueueGenericSend+0x94>
  27478. __asm volatile
  27479. 800bea0: f04f 0350 mov.w r3, #80 @ 0x50
  27480. 800bea4: f383 8811 msr BASEPRI, r3
  27481. 800bea8: f3bf 8f6f isb sy
  27482. 800beac: f3bf 8f4f dsb sy
  27483. 800beb0: 623b str r3, [r7, #32]
  27484. }
  27485. 800beb2: bf00 nop
  27486. 800beb4: bf00 nop
  27487. 800beb6: e7fd b.n 800beb4 <xQueueGenericSend+0x90>
  27488. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  27489. {
  27490. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  27491. 800beb8: f001 fd28 bl 800d90c <xTaskGetSchedulerState>
  27492. 800bebc: 4603 mov r3, r0
  27493. 800bebe: 2b00 cmp r3, #0
  27494. 800bec0: d102 bne.n 800bec8 <xQueueGenericSend+0xa4>
  27495. 800bec2: 687b ldr r3, [r7, #4]
  27496. 800bec4: 2b00 cmp r3, #0
  27497. 800bec6: d101 bne.n 800becc <xQueueGenericSend+0xa8>
  27498. 800bec8: 2301 movs r3, #1
  27499. 800beca: e000 b.n 800bece <xQueueGenericSend+0xaa>
  27500. 800becc: 2300 movs r3, #0
  27501. 800bece: 2b00 cmp r3, #0
  27502. 800bed0: d10b bne.n 800beea <xQueueGenericSend+0xc6>
  27503. __asm volatile
  27504. 800bed2: f04f 0350 mov.w r3, #80 @ 0x50
  27505. 800bed6: f383 8811 msr BASEPRI, r3
  27506. 800beda: f3bf 8f6f isb sy
  27507. 800bede: f3bf 8f4f dsb sy
  27508. 800bee2: 61fb str r3, [r7, #28]
  27509. }
  27510. 800bee4: bf00 nop
  27511. 800bee6: bf00 nop
  27512. 800bee8: e7fd b.n 800bee6 <xQueueGenericSend+0xc2>
  27513. /*lint -save -e904 This function relaxes the coding standard somewhat to
  27514. allow return statements within the function itself. This is done in the
  27515. interest of execution time efficiency. */
  27516. for( ;; )
  27517. {
  27518. taskENTER_CRITICAL();
  27519. 800beea: f002 fdad bl 800ea48 <vPortEnterCritical>
  27520. {
  27521. /* Is there room on the queue now? The running task must be the
  27522. highest priority task wanting to access the queue. If the head item
  27523. in the queue is to be overwritten then it does not matter if the
  27524. queue is full. */
  27525. if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
  27526. 800beee: 6b3b ldr r3, [r7, #48] @ 0x30
  27527. 800bef0: 6b9a ldr r2, [r3, #56] @ 0x38
  27528. 800bef2: 6b3b ldr r3, [r7, #48] @ 0x30
  27529. 800bef4: 6bdb ldr r3, [r3, #60] @ 0x3c
  27530. 800bef6: 429a cmp r2, r3
  27531. 800bef8: d302 bcc.n 800bf00 <xQueueGenericSend+0xdc>
  27532. 800befa: 683b ldr r3, [r7, #0]
  27533. 800befc: 2b02 cmp r3, #2
  27534. 800befe: d129 bne.n 800bf54 <xQueueGenericSend+0x130>
  27535. }
  27536. }
  27537. }
  27538. #else /* configUSE_QUEUE_SETS */
  27539. {
  27540. xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
  27541. 800bf00: 683a ldr r2, [r7, #0]
  27542. 800bf02: 68b9 ldr r1, [r7, #8]
  27543. 800bf04: 6b38 ldr r0, [r7, #48] @ 0x30
  27544. 800bf06: f000 fb37 bl 800c578 <prvCopyDataToQueue>
  27545. 800bf0a: 62f8 str r0, [r7, #44] @ 0x2c
  27546. /* If there was a task waiting for data to arrive on the
  27547. queue then unblock it now. */
  27548. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  27549. 800bf0c: 6b3b ldr r3, [r7, #48] @ 0x30
  27550. 800bf0e: 6a5b ldr r3, [r3, #36] @ 0x24
  27551. 800bf10: 2b00 cmp r3, #0
  27552. 800bf12: d010 beq.n 800bf36 <xQueueGenericSend+0x112>
  27553. {
  27554. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  27555. 800bf14: 6b3b ldr r3, [r7, #48] @ 0x30
  27556. 800bf16: 3324 adds r3, #36 @ 0x24
  27557. 800bf18: 4618 mov r0, r3
  27558. 800bf1a: f001 faf9 bl 800d510 <xTaskRemoveFromEventList>
  27559. 800bf1e: 4603 mov r3, r0
  27560. 800bf20: 2b00 cmp r3, #0
  27561. 800bf22: d013 beq.n 800bf4c <xQueueGenericSend+0x128>
  27562. {
  27563. /* The unblocked task has a priority higher than
  27564. our own so yield immediately. Yes it is ok to do
  27565. this from within the critical section - the kernel
  27566. takes care of that. */
  27567. queueYIELD_IF_USING_PREEMPTION();
  27568. 800bf24: 4b3f ldr r3, [pc, #252] @ (800c024 <xQueueGenericSend+0x200>)
  27569. 800bf26: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  27570. 800bf2a: 601a str r2, [r3, #0]
  27571. 800bf2c: f3bf 8f4f dsb sy
  27572. 800bf30: f3bf 8f6f isb sy
  27573. 800bf34: e00a b.n 800bf4c <xQueueGenericSend+0x128>
  27574. else
  27575. {
  27576. mtCOVERAGE_TEST_MARKER();
  27577. }
  27578. }
  27579. else if( xYieldRequired != pdFALSE )
  27580. 800bf36: 6afb ldr r3, [r7, #44] @ 0x2c
  27581. 800bf38: 2b00 cmp r3, #0
  27582. 800bf3a: d007 beq.n 800bf4c <xQueueGenericSend+0x128>
  27583. {
  27584. /* This path is a special case that will only get
  27585. executed if the task was holding multiple mutexes and
  27586. the mutexes were given back in an order that is
  27587. different to that in which they were taken. */
  27588. queueYIELD_IF_USING_PREEMPTION();
  27589. 800bf3c: 4b39 ldr r3, [pc, #228] @ (800c024 <xQueueGenericSend+0x200>)
  27590. 800bf3e: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  27591. 800bf42: 601a str r2, [r3, #0]
  27592. 800bf44: f3bf 8f4f dsb sy
  27593. 800bf48: f3bf 8f6f isb sy
  27594. mtCOVERAGE_TEST_MARKER();
  27595. }
  27596. }
  27597. #endif /* configUSE_QUEUE_SETS */
  27598. taskEXIT_CRITICAL();
  27599. 800bf4c: f002 fdae bl 800eaac <vPortExitCritical>
  27600. return pdPASS;
  27601. 800bf50: 2301 movs r3, #1
  27602. 800bf52: e063 b.n 800c01c <xQueueGenericSend+0x1f8>
  27603. }
  27604. else
  27605. {
  27606. if( xTicksToWait == ( TickType_t ) 0 )
  27607. 800bf54: 687b ldr r3, [r7, #4]
  27608. 800bf56: 2b00 cmp r3, #0
  27609. 800bf58: d103 bne.n 800bf62 <xQueueGenericSend+0x13e>
  27610. {
  27611. /* The queue was full and no block time is specified (or
  27612. the block time has expired) so leave now. */
  27613. taskEXIT_CRITICAL();
  27614. 800bf5a: f002 fda7 bl 800eaac <vPortExitCritical>
  27615. /* Return to the original privilege level before exiting
  27616. the function. */
  27617. traceQUEUE_SEND_FAILED( pxQueue );
  27618. return errQUEUE_FULL;
  27619. 800bf5e: 2300 movs r3, #0
  27620. 800bf60: e05c b.n 800c01c <xQueueGenericSend+0x1f8>
  27621. }
  27622. else if( xEntryTimeSet == pdFALSE )
  27623. 800bf62: 6b7b ldr r3, [r7, #52] @ 0x34
  27624. 800bf64: 2b00 cmp r3, #0
  27625. 800bf66: d106 bne.n 800bf76 <xQueueGenericSend+0x152>
  27626. {
  27627. /* The queue was full and a block time was specified so
  27628. configure the timeout structure. */
  27629. vTaskInternalSetTimeOutState( &xTimeOut );
  27630. 800bf68: f107 0314 add.w r3, r7, #20
  27631. 800bf6c: 4618 mov r0, r3
  27632. 800bf6e: f001 fb5b bl 800d628 <vTaskInternalSetTimeOutState>
  27633. xEntryTimeSet = pdTRUE;
  27634. 800bf72: 2301 movs r3, #1
  27635. 800bf74: 637b str r3, [r7, #52] @ 0x34
  27636. /* Entry time was already set. */
  27637. mtCOVERAGE_TEST_MARKER();
  27638. }
  27639. }
  27640. }
  27641. taskEXIT_CRITICAL();
  27642. 800bf76: f002 fd99 bl 800eaac <vPortExitCritical>
  27643. /* Interrupts and other tasks can send to and receive from the queue
  27644. now the critical section has been exited. */
  27645. vTaskSuspendAll();
  27646. 800bf7a: f001 f88d bl 800d098 <vTaskSuspendAll>
  27647. prvLockQueue( pxQueue );
  27648. 800bf7e: f002 fd63 bl 800ea48 <vPortEnterCritical>
  27649. 800bf82: 6b3b ldr r3, [r7, #48] @ 0x30
  27650. 800bf84: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  27651. 800bf88: b25b sxtb r3, r3
  27652. 800bf8a: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  27653. 800bf8e: d103 bne.n 800bf98 <xQueueGenericSend+0x174>
  27654. 800bf90: 6b3b ldr r3, [r7, #48] @ 0x30
  27655. 800bf92: 2200 movs r2, #0
  27656. 800bf94: f883 2044 strb.w r2, [r3, #68] @ 0x44
  27657. 800bf98: 6b3b ldr r3, [r7, #48] @ 0x30
  27658. 800bf9a: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  27659. 800bf9e: b25b sxtb r3, r3
  27660. 800bfa0: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  27661. 800bfa4: d103 bne.n 800bfae <xQueueGenericSend+0x18a>
  27662. 800bfa6: 6b3b ldr r3, [r7, #48] @ 0x30
  27663. 800bfa8: 2200 movs r2, #0
  27664. 800bfaa: f883 2045 strb.w r2, [r3, #69] @ 0x45
  27665. 800bfae: f002 fd7d bl 800eaac <vPortExitCritical>
  27666. /* Update the timeout state to see if it has expired yet. */
  27667. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  27668. 800bfb2: 1d3a adds r2, r7, #4
  27669. 800bfb4: f107 0314 add.w r3, r7, #20
  27670. 800bfb8: 4611 mov r1, r2
  27671. 800bfba: 4618 mov r0, r3
  27672. 800bfbc: f001 fb4a bl 800d654 <xTaskCheckForTimeOut>
  27673. 800bfc0: 4603 mov r3, r0
  27674. 800bfc2: 2b00 cmp r3, #0
  27675. 800bfc4: d124 bne.n 800c010 <xQueueGenericSend+0x1ec>
  27676. {
  27677. if( prvIsQueueFull( pxQueue ) != pdFALSE )
  27678. 800bfc6: 6b38 ldr r0, [r7, #48] @ 0x30
  27679. 800bfc8: f000 fbce bl 800c768 <prvIsQueueFull>
  27680. 800bfcc: 4603 mov r3, r0
  27681. 800bfce: 2b00 cmp r3, #0
  27682. 800bfd0: d018 beq.n 800c004 <xQueueGenericSend+0x1e0>
  27683. {
  27684. traceBLOCKING_ON_QUEUE_SEND( pxQueue );
  27685. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait );
  27686. 800bfd2: 6b3b ldr r3, [r7, #48] @ 0x30
  27687. 800bfd4: 3310 adds r3, #16
  27688. 800bfd6: 687a ldr r2, [r7, #4]
  27689. 800bfd8: 4611 mov r1, r2
  27690. 800bfda: 4618 mov r0, r3
  27691. 800bfdc: f001 fa46 bl 800d46c <vTaskPlaceOnEventList>
  27692. /* Unlocking the queue means queue events can effect the
  27693. event list. It is possible that interrupts occurring now
  27694. remove this task from the event list again - but as the
  27695. scheduler is suspended the task will go onto the pending
  27696. ready last instead of the actual ready list. */
  27697. prvUnlockQueue( pxQueue );
  27698. 800bfe0: 6b38 ldr r0, [r7, #48] @ 0x30
  27699. 800bfe2: f000 fb59 bl 800c698 <prvUnlockQueue>
  27700. /* Resuming the scheduler will move tasks from the pending
  27701. ready list into the ready list - so it is feasible that this
  27702. task is already in a ready list before it yields - in which
  27703. case the yield will not cause a context switch unless there
  27704. is also a higher priority task in the pending ready list. */
  27705. if( xTaskResumeAll() == pdFALSE )
  27706. 800bfe6: f001 f865 bl 800d0b4 <xTaskResumeAll>
  27707. 800bfea: 4603 mov r3, r0
  27708. 800bfec: 2b00 cmp r3, #0
  27709. 800bfee: f47f af7c bne.w 800beea <xQueueGenericSend+0xc6>
  27710. {
  27711. portYIELD_WITHIN_API();
  27712. 800bff2: 4b0c ldr r3, [pc, #48] @ (800c024 <xQueueGenericSend+0x200>)
  27713. 800bff4: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  27714. 800bff8: 601a str r2, [r3, #0]
  27715. 800bffa: f3bf 8f4f dsb sy
  27716. 800bffe: f3bf 8f6f isb sy
  27717. 800c002: e772 b.n 800beea <xQueueGenericSend+0xc6>
  27718. }
  27719. }
  27720. else
  27721. {
  27722. /* Try again. */
  27723. prvUnlockQueue( pxQueue );
  27724. 800c004: 6b38 ldr r0, [r7, #48] @ 0x30
  27725. 800c006: f000 fb47 bl 800c698 <prvUnlockQueue>
  27726. ( void ) xTaskResumeAll();
  27727. 800c00a: f001 f853 bl 800d0b4 <xTaskResumeAll>
  27728. 800c00e: e76c b.n 800beea <xQueueGenericSend+0xc6>
  27729. }
  27730. }
  27731. else
  27732. {
  27733. /* The timeout has expired. */
  27734. prvUnlockQueue( pxQueue );
  27735. 800c010: 6b38 ldr r0, [r7, #48] @ 0x30
  27736. 800c012: f000 fb41 bl 800c698 <prvUnlockQueue>
  27737. ( void ) xTaskResumeAll();
  27738. 800c016: f001 f84d bl 800d0b4 <xTaskResumeAll>
  27739. traceQUEUE_SEND_FAILED( pxQueue );
  27740. return errQUEUE_FULL;
  27741. 800c01a: 2300 movs r3, #0
  27742. }
  27743. } /*lint -restore */
  27744. }
  27745. 800c01c: 4618 mov r0, r3
  27746. 800c01e: 3738 adds r7, #56 @ 0x38
  27747. 800c020: 46bd mov sp, r7
  27748. 800c022: bd80 pop {r7, pc}
  27749. 800c024: e000ed04 .word 0xe000ed04
  27750. 0800c028 <xQueueGenericSendFromISR>:
  27751. /*-----------------------------------------------------------*/
  27752. BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition )
  27753. {
  27754. 800c028: b580 push {r7, lr}
  27755. 800c02a: b090 sub sp, #64 @ 0x40
  27756. 800c02c: af00 add r7, sp, #0
  27757. 800c02e: 60f8 str r0, [r7, #12]
  27758. 800c030: 60b9 str r1, [r7, #8]
  27759. 800c032: 607a str r2, [r7, #4]
  27760. 800c034: 603b str r3, [r7, #0]
  27761. BaseType_t xReturn;
  27762. UBaseType_t uxSavedInterruptStatus;
  27763. Queue_t * const pxQueue = xQueue;
  27764. 800c036: 68fb ldr r3, [r7, #12]
  27765. 800c038: 63bb str r3, [r7, #56] @ 0x38
  27766. configASSERT( pxQueue );
  27767. 800c03a: 6bbb ldr r3, [r7, #56] @ 0x38
  27768. 800c03c: 2b00 cmp r3, #0
  27769. 800c03e: d10b bne.n 800c058 <xQueueGenericSendFromISR+0x30>
  27770. __asm volatile
  27771. 800c040: f04f 0350 mov.w r3, #80 @ 0x50
  27772. 800c044: f383 8811 msr BASEPRI, r3
  27773. 800c048: f3bf 8f6f isb sy
  27774. 800c04c: f3bf 8f4f dsb sy
  27775. 800c050: 62bb str r3, [r7, #40] @ 0x28
  27776. }
  27777. 800c052: bf00 nop
  27778. 800c054: bf00 nop
  27779. 800c056: e7fd b.n 800c054 <xQueueGenericSendFromISR+0x2c>
  27780. configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
  27781. 800c058: 68bb ldr r3, [r7, #8]
  27782. 800c05a: 2b00 cmp r3, #0
  27783. 800c05c: d103 bne.n 800c066 <xQueueGenericSendFromISR+0x3e>
  27784. 800c05e: 6bbb ldr r3, [r7, #56] @ 0x38
  27785. 800c060: 6c1b ldr r3, [r3, #64] @ 0x40
  27786. 800c062: 2b00 cmp r3, #0
  27787. 800c064: d101 bne.n 800c06a <xQueueGenericSendFromISR+0x42>
  27788. 800c066: 2301 movs r3, #1
  27789. 800c068: e000 b.n 800c06c <xQueueGenericSendFromISR+0x44>
  27790. 800c06a: 2300 movs r3, #0
  27791. 800c06c: 2b00 cmp r3, #0
  27792. 800c06e: d10b bne.n 800c088 <xQueueGenericSendFromISR+0x60>
  27793. __asm volatile
  27794. 800c070: f04f 0350 mov.w r3, #80 @ 0x50
  27795. 800c074: f383 8811 msr BASEPRI, r3
  27796. 800c078: f3bf 8f6f isb sy
  27797. 800c07c: f3bf 8f4f dsb sy
  27798. 800c080: 627b str r3, [r7, #36] @ 0x24
  27799. }
  27800. 800c082: bf00 nop
  27801. 800c084: bf00 nop
  27802. 800c086: e7fd b.n 800c084 <xQueueGenericSendFromISR+0x5c>
  27803. configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
  27804. 800c088: 683b ldr r3, [r7, #0]
  27805. 800c08a: 2b02 cmp r3, #2
  27806. 800c08c: d103 bne.n 800c096 <xQueueGenericSendFromISR+0x6e>
  27807. 800c08e: 6bbb ldr r3, [r7, #56] @ 0x38
  27808. 800c090: 6bdb ldr r3, [r3, #60] @ 0x3c
  27809. 800c092: 2b01 cmp r3, #1
  27810. 800c094: d101 bne.n 800c09a <xQueueGenericSendFromISR+0x72>
  27811. 800c096: 2301 movs r3, #1
  27812. 800c098: e000 b.n 800c09c <xQueueGenericSendFromISR+0x74>
  27813. 800c09a: 2300 movs r3, #0
  27814. 800c09c: 2b00 cmp r3, #0
  27815. 800c09e: d10b bne.n 800c0b8 <xQueueGenericSendFromISR+0x90>
  27816. __asm volatile
  27817. 800c0a0: f04f 0350 mov.w r3, #80 @ 0x50
  27818. 800c0a4: f383 8811 msr BASEPRI, r3
  27819. 800c0a8: f3bf 8f6f isb sy
  27820. 800c0ac: f3bf 8f4f dsb sy
  27821. 800c0b0: 623b str r3, [r7, #32]
  27822. }
  27823. 800c0b2: bf00 nop
  27824. 800c0b4: bf00 nop
  27825. 800c0b6: e7fd b.n 800c0b4 <xQueueGenericSendFromISR+0x8c>
  27826. that have been assigned a priority at or (logically) below the maximum
  27827. system call interrupt priority. FreeRTOS maintains a separate interrupt
  27828. safe API to ensure interrupt entry is as fast and as simple as possible.
  27829. More information (albeit Cortex-M specific) is provided on the following
  27830. link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
  27831. portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
  27832. 800c0b8: f002 fda6 bl 800ec08 <vPortValidateInterruptPriority>
  27833. portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void )
  27834. {
  27835. uint32_t ulOriginalBASEPRI, ulNewBASEPRI;
  27836. __asm volatile
  27837. 800c0bc: f3ef 8211 mrs r2, BASEPRI
  27838. 800c0c0: f04f 0350 mov.w r3, #80 @ 0x50
  27839. 800c0c4: f383 8811 msr BASEPRI, r3
  27840. 800c0c8: f3bf 8f6f isb sy
  27841. 800c0cc: f3bf 8f4f dsb sy
  27842. 800c0d0: 61fa str r2, [r7, #28]
  27843. 800c0d2: 61bb str r3, [r7, #24]
  27844. :"=r" (ulOriginalBASEPRI), "=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory"
  27845. );
  27846. /* This return will not be reached but is necessary to prevent compiler
  27847. warnings. */
  27848. return ulOriginalBASEPRI;
  27849. 800c0d4: 69fb ldr r3, [r7, #28]
  27850. /* Similar to xQueueGenericSend, except without blocking if there is no room
  27851. in the queue. Also don't directly wake a task that was blocked on a queue
  27852. read, instead return a flag to say whether a context switch is required or
  27853. not (i.e. has a task with a higher priority than us been woken by this
  27854. post). */
  27855. uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
  27856. 800c0d6: 637b str r3, [r7, #52] @ 0x34
  27857. {
  27858. if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
  27859. 800c0d8: 6bbb ldr r3, [r7, #56] @ 0x38
  27860. 800c0da: 6b9a ldr r2, [r3, #56] @ 0x38
  27861. 800c0dc: 6bbb ldr r3, [r7, #56] @ 0x38
  27862. 800c0de: 6bdb ldr r3, [r3, #60] @ 0x3c
  27863. 800c0e0: 429a cmp r2, r3
  27864. 800c0e2: d302 bcc.n 800c0ea <xQueueGenericSendFromISR+0xc2>
  27865. 800c0e4: 683b ldr r3, [r7, #0]
  27866. 800c0e6: 2b02 cmp r3, #2
  27867. 800c0e8: d12f bne.n 800c14a <xQueueGenericSendFromISR+0x122>
  27868. {
  27869. const int8_t cTxLock = pxQueue->cTxLock;
  27870. 800c0ea: 6bbb ldr r3, [r7, #56] @ 0x38
  27871. 800c0ec: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  27872. 800c0f0: f887 3033 strb.w r3, [r7, #51] @ 0x33
  27873. const UBaseType_t uxPreviousMessagesWaiting = pxQueue->uxMessagesWaiting;
  27874. 800c0f4: 6bbb ldr r3, [r7, #56] @ 0x38
  27875. 800c0f6: 6b9b ldr r3, [r3, #56] @ 0x38
  27876. 800c0f8: 62fb str r3, [r7, #44] @ 0x2c
  27877. /* Semaphores use xQueueGiveFromISR(), so pxQueue will not be a
  27878. semaphore or mutex. That means prvCopyDataToQueue() cannot result
  27879. in a task disinheriting a priority and prvCopyDataToQueue() can be
  27880. called here even though the disinherit function does not check if
  27881. the scheduler is suspended before accessing the ready lists. */
  27882. ( void ) prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
  27883. 800c0fa: 683a ldr r2, [r7, #0]
  27884. 800c0fc: 68b9 ldr r1, [r7, #8]
  27885. 800c0fe: 6bb8 ldr r0, [r7, #56] @ 0x38
  27886. 800c100: f000 fa3a bl 800c578 <prvCopyDataToQueue>
  27887. /* The event list is not altered if the queue is locked. This will
  27888. be done when the queue is unlocked later. */
  27889. if( cTxLock == queueUNLOCKED )
  27890. 800c104: f997 3033 ldrsb.w r3, [r7, #51] @ 0x33
  27891. 800c108: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  27892. 800c10c: d112 bne.n 800c134 <xQueueGenericSendFromISR+0x10c>
  27893. }
  27894. }
  27895. }
  27896. #else /* configUSE_QUEUE_SETS */
  27897. {
  27898. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  27899. 800c10e: 6bbb ldr r3, [r7, #56] @ 0x38
  27900. 800c110: 6a5b ldr r3, [r3, #36] @ 0x24
  27901. 800c112: 2b00 cmp r3, #0
  27902. 800c114: d016 beq.n 800c144 <xQueueGenericSendFromISR+0x11c>
  27903. {
  27904. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  27905. 800c116: 6bbb ldr r3, [r7, #56] @ 0x38
  27906. 800c118: 3324 adds r3, #36 @ 0x24
  27907. 800c11a: 4618 mov r0, r3
  27908. 800c11c: f001 f9f8 bl 800d510 <xTaskRemoveFromEventList>
  27909. 800c120: 4603 mov r3, r0
  27910. 800c122: 2b00 cmp r3, #0
  27911. 800c124: d00e beq.n 800c144 <xQueueGenericSendFromISR+0x11c>
  27912. {
  27913. /* The task waiting has a higher priority so record that a
  27914. context switch is required. */
  27915. if( pxHigherPriorityTaskWoken != NULL )
  27916. 800c126: 687b ldr r3, [r7, #4]
  27917. 800c128: 2b00 cmp r3, #0
  27918. 800c12a: d00b beq.n 800c144 <xQueueGenericSendFromISR+0x11c>
  27919. {
  27920. *pxHigherPriorityTaskWoken = pdTRUE;
  27921. 800c12c: 687b ldr r3, [r7, #4]
  27922. 800c12e: 2201 movs r2, #1
  27923. 800c130: 601a str r2, [r3, #0]
  27924. 800c132: e007 b.n 800c144 <xQueueGenericSendFromISR+0x11c>
  27925. }
  27926. else
  27927. {
  27928. /* Increment the lock count so the task that unlocks the queue
  27929. knows that data was posted while it was locked. */
  27930. pxQueue->cTxLock = ( int8_t ) ( cTxLock + 1 );
  27931. 800c134: f897 3033 ldrb.w r3, [r7, #51] @ 0x33
  27932. 800c138: 3301 adds r3, #1
  27933. 800c13a: b2db uxtb r3, r3
  27934. 800c13c: b25a sxtb r2, r3
  27935. 800c13e: 6bbb ldr r3, [r7, #56] @ 0x38
  27936. 800c140: f883 2045 strb.w r2, [r3, #69] @ 0x45
  27937. }
  27938. xReturn = pdPASS;
  27939. 800c144: 2301 movs r3, #1
  27940. 800c146: 63fb str r3, [r7, #60] @ 0x3c
  27941. {
  27942. 800c148: e001 b.n 800c14e <xQueueGenericSendFromISR+0x126>
  27943. }
  27944. else
  27945. {
  27946. traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue );
  27947. xReturn = errQUEUE_FULL;
  27948. 800c14a: 2300 movs r3, #0
  27949. 800c14c: 63fb str r3, [r7, #60] @ 0x3c
  27950. 800c14e: 6b7b ldr r3, [r7, #52] @ 0x34
  27951. 800c150: 617b str r3, [r7, #20]
  27952. }
  27953. /*-----------------------------------------------------------*/
  27954. portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue )
  27955. {
  27956. __asm volatile
  27957. 800c152: 697b ldr r3, [r7, #20]
  27958. 800c154: f383 8811 msr BASEPRI, r3
  27959. (
  27960. " msr basepri, %0 " :: "r" ( ulNewMaskValue ) : "memory"
  27961. );
  27962. }
  27963. 800c158: bf00 nop
  27964. }
  27965. }
  27966. portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
  27967. return xReturn;
  27968. 800c15a: 6bfb ldr r3, [r7, #60] @ 0x3c
  27969. }
  27970. 800c15c: 4618 mov r0, r3
  27971. 800c15e: 3740 adds r7, #64 @ 0x40
  27972. 800c160: 46bd mov sp, r7
  27973. 800c162: bd80 pop {r7, pc}
  27974. 0800c164 <xQueueReceive>:
  27975. return xReturn;
  27976. }
  27977. /*-----------------------------------------------------------*/
  27978. BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait )
  27979. {
  27980. 800c164: b580 push {r7, lr}
  27981. 800c166: b08c sub sp, #48 @ 0x30
  27982. 800c168: af00 add r7, sp, #0
  27983. 800c16a: 60f8 str r0, [r7, #12]
  27984. 800c16c: 60b9 str r1, [r7, #8]
  27985. 800c16e: 607a str r2, [r7, #4]
  27986. BaseType_t xEntryTimeSet = pdFALSE;
  27987. 800c170: 2300 movs r3, #0
  27988. 800c172: 62fb str r3, [r7, #44] @ 0x2c
  27989. TimeOut_t xTimeOut;
  27990. Queue_t * const pxQueue = xQueue;
  27991. 800c174: 68fb ldr r3, [r7, #12]
  27992. 800c176: 62bb str r3, [r7, #40] @ 0x28
  27993. /* Check the pointer is not NULL. */
  27994. configASSERT( ( pxQueue ) );
  27995. 800c178: 6abb ldr r3, [r7, #40] @ 0x28
  27996. 800c17a: 2b00 cmp r3, #0
  27997. 800c17c: d10b bne.n 800c196 <xQueueReceive+0x32>
  27998. __asm volatile
  27999. 800c17e: f04f 0350 mov.w r3, #80 @ 0x50
  28000. 800c182: f383 8811 msr BASEPRI, r3
  28001. 800c186: f3bf 8f6f isb sy
  28002. 800c18a: f3bf 8f4f dsb sy
  28003. 800c18e: 623b str r3, [r7, #32]
  28004. }
  28005. 800c190: bf00 nop
  28006. 800c192: bf00 nop
  28007. 800c194: e7fd b.n 800c192 <xQueueReceive+0x2e>
  28008. /* The buffer into which data is received can only be NULL if the data size
  28009. is zero (so no data is copied into the buffer. */
  28010. configASSERT( !( ( ( pvBuffer ) == NULL ) && ( ( pxQueue )->uxItemSize != ( UBaseType_t ) 0U ) ) );
  28011. 800c196: 68bb ldr r3, [r7, #8]
  28012. 800c198: 2b00 cmp r3, #0
  28013. 800c19a: d103 bne.n 800c1a4 <xQueueReceive+0x40>
  28014. 800c19c: 6abb ldr r3, [r7, #40] @ 0x28
  28015. 800c19e: 6c1b ldr r3, [r3, #64] @ 0x40
  28016. 800c1a0: 2b00 cmp r3, #0
  28017. 800c1a2: d101 bne.n 800c1a8 <xQueueReceive+0x44>
  28018. 800c1a4: 2301 movs r3, #1
  28019. 800c1a6: e000 b.n 800c1aa <xQueueReceive+0x46>
  28020. 800c1a8: 2300 movs r3, #0
  28021. 800c1aa: 2b00 cmp r3, #0
  28022. 800c1ac: d10b bne.n 800c1c6 <xQueueReceive+0x62>
  28023. __asm volatile
  28024. 800c1ae: f04f 0350 mov.w r3, #80 @ 0x50
  28025. 800c1b2: f383 8811 msr BASEPRI, r3
  28026. 800c1b6: f3bf 8f6f isb sy
  28027. 800c1ba: f3bf 8f4f dsb sy
  28028. 800c1be: 61fb str r3, [r7, #28]
  28029. }
  28030. 800c1c0: bf00 nop
  28031. 800c1c2: bf00 nop
  28032. 800c1c4: e7fd b.n 800c1c2 <xQueueReceive+0x5e>
  28033. /* Cannot block if the scheduler is suspended. */
  28034. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  28035. {
  28036. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  28037. 800c1c6: f001 fba1 bl 800d90c <xTaskGetSchedulerState>
  28038. 800c1ca: 4603 mov r3, r0
  28039. 800c1cc: 2b00 cmp r3, #0
  28040. 800c1ce: d102 bne.n 800c1d6 <xQueueReceive+0x72>
  28041. 800c1d0: 687b ldr r3, [r7, #4]
  28042. 800c1d2: 2b00 cmp r3, #0
  28043. 800c1d4: d101 bne.n 800c1da <xQueueReceive+0x76>
  28044. 800c1d6: 2301 movs r3, #1
  28045. 800c1d8: e000 b.n 800c1dc <xQueueReceive+0x78>
  28046. 800c1da: 2300 movs r3, #0
  28047. 800c1dc: 2b00 cmp r3, #0
  28048. 800c1de: d10b bne.n 800c1f8 <xQueueReceive+0x94>
  28049. __asm volatile
  28050. 800c1e0: f04f 0350 mov.w r3, #80 @ 0x50
  28051. 800c1e4: f383 8811 msr BASEPRI, r3
  28052. 800c1e8: f3bf 8f6f isb sy
  28053. 800c1ec: f3bf 8f4f dsb sy
  28054. 800c1f0: 61bb str r3, [r7, #24]
  28055. }
  28056. 800c1f2: bf00 nop
  28057. 800c1f4: bf00 nop
  28058. 800c1f6: e7fd b.n 800c1f4 <xQueueReceive+0x90>
  28059. /*lint -save -e904 This function relaxes the coding standard somewhat to
  28060. allow return statements within the function itself. This is done in the
  28061. interest of execution time efficiency. */
  28062. for( ;; )
  28063. {
  28064. taskENTER_CRITICAL();
  28065. 800c1f8: f002 fc26 bl 800ea48 <vPortEnterCritical>
  28066. {
  28067. const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;
  28068. 800c1fc: 6abb ldr r3, [r7, #40] @ 0x28
  28069. 800c1fe: 6b9b ldr r3, [r3, #56] @ 0x38
  28070. 800c200: 627b str r3, [r7, #36] @ 0x24
  28071. /* Is there data in the queue now? To be running the calling task
  28072. must be the highest priority task wanting to access the queue. */
  28073. if( uxMessagesWaiting > ( UBaseType_t ) 0 )
  28074. 800c202: 6a7b ldr r3, [r7, #36] @ 0x24
  28075. 800c204: 2b00 cmp r3, #0
  28076. 800c206: d01f beq.n 800c248 <xQueueReceive+0xe4>
  28077. {
  28078. /* Data available, remove one item. */
  28079. prvCopyDataFromQueue( pxQueue, pvBuffer );
  28080. 800c208: 68b9 ldr r1, [r7, #8]
  28081. 800c20a: 6ab8 ldr r0, [r7, #40] @ 0x28
  28082. 800c20c: f000 fa1e bl 800c64c <prvCopyDataFromQueue>
  28083. traceQUEUE_RECEIVE( pxQueue );
  28084. pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1;
  28085. 800c210: 6a7b ldr r3, [r7, #36] @ 0x24
  28086. 800c212: 1e5a subs r2, r3, #1
  28087. 800c214: 6abb ldr r3, [r7, #40] @ 0x28
  28088. 800c216: 639a str r2, [r3, #56] @ 0x38
  28089. /* There is now space in the queue, were any tasks waiting to
  28090. post to the queue? If so, unblock the highest priority waiting
  28091. task. */
  28092. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  28093. 800c218: 6abb ldr r3, [r7, #40] @ 0x28
  28094. 800c21a: 691b ldr r3, [r3, #16]
  28095. 800c21c: 2b00 cmp r3, #0
  28096. 800c21e: d00f beq.n 800c240 <xQueueReceive+0xdc>
  28097. {
  28098. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  28099. 800c220: 6abb ldr r3, [r7, #40] @ 0x28
  28100. 800c222: 3310 adds r3, #16
  28101. 800c224: 4618 mov r0, r3
  28102. 800c226: f001 f973 bl 800d510 <xTaskRemoveFromEventList>
  28103. 800c22a: 4603 mov r3, r0
  28104. 800c22c: 2b00 cmp r3, #0
  28105. 800c22e: d007 beq.n 800c240 <xQueueReceive+0xdc>
  28106. {
  28107. queueYIELD_IF_USING_PREEMPTION();
  28108. 800c230: 4b3c ldr r3, [pc, #240] @ (800c324 <xQueueReceive+0x1c0>)
  28109. 800c232: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  28110. 800c236: 601a str r2, [r3, #0]
  28111. 800c238: f3bf 8f4f dsb sy
  28112. 800c23c: f3bf 8f6f isb sy
  28113. else
  28114. {
  28115. mtCOVERAGE_TEST_MARKER();
  28116. }
  28117. taskEXIT_CRITICAL();
  28118. 800c240: f002 fc34 bl 800eaac <vPortExitCritical>
  28119. return pdPASS;
  28120. 800c244: 2301 movs r3, #1
  28121. 800c246: e069 b.n 800c31c <xQueueReceive+0x1b8>
  28122. }
  28123. else
  28124. {
  28125. if( xTicksToWait == ( TickType_t ) 0 )
  28126. 800c248: 687b ldr r3, [r7, #4]
  28127. 800c24a: 2b00 cmp r3, #0
  28128. 800c24c: d103 bne.n 800c256 <xQueueReceive+0xf2>
  28129. {
  28130. /* The queue was empty and no block time is specified (or
  28131. the block time has expired) so leave now. */
  28132. taskEXIT_CRITICAL();
  28133. 800c24e: f002 fc2d bl 800eaac <vPortExitCritical>
  28134. traceQUEUE_RECEIVE_FAILED( pxQueue );
  28135. return errQUEUE_EMPTY;
  28136. 800c252: 2300 movs r3, #0
  28137. 800c254: e062 b.n 800c31c <xQueueReceive+0x1b8>
  28138. }
  28139. else if( xEntryTimeSet == pdFALSE )
  28140. 800c256: 6afb ldr r3, [r7, #44] @ 0x2c
  28141. 800c258: 2b00 cmp r3, #0
  28142. 800c25a: d106 bne.n 800c26a <xQueueReceive+0x106>
  28143. {
  28144. /* The queue was empty and a block time was specified so
  28145. configure the timeout structure. */
  28146. vTaskInternalSetTimeOutState( &xTimeOut );
  28147. 800c25c: f107 0310 add.w r3, r7, #16
  28148. 800c260: 4618 mov r0, r3
  28149. 800c262: f001 f9e1 bl 800d628 <vTaskInternalSetTimeOutState>
  28150. xEntryTimeSet = pdTRUE;
  28151. 800c266: 2301 movs r3, #1
  28152. 800c268: 62fb str r3, [r7, #44] @ 0x2c
  28153. /* Entry time was already set. */
  28154. mtCOVERAGE_TEST_MARKER();
  28155. }
  28156. }
  28157. }
  28158. taskEXIT_CRITICAL();
  28159. 800c26a: f002 fc1f bl 800eaac <vPortExitCritical>
  28160. /* Interrupts and other tasks can send to and receive from the queue
  28161. now the critical section has been exited. */
  28162. vTaskSuspendAll();
  28163. 800c26e: f000 ff13 bl 800d098 <vTaskSuspendAll>
  28164. prvLockQueue( pxQueue );
  28165. 800c272: f002 fbe9 bl 800ea48 <vPortEnterCritical>
  28166. 800c276: 6abb ldr r3, [r7, #40] @ 0x28
  28167. 800c278: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  28168. 800c27c: b25b sxtb r3, r3
  28169. 800c27e: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  28170. 800c282: d103 bne.n 800c28c <xQueueReceive+0x128>
  28171. 800c284: 6abb ldr r3, [r7, #40] @ 0x28
  28172. 800c286: 2200 movs r2, #0
  28173. 800c288: f883 2044 strb.w r2, [r3, #68] @ 0x44
  28174. 800c28c: 6abb ldr r3, [r7, #40] @ 0x28
  28175. 800c28e: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  28176. 800c292: b25b sxtb r3, r3
  28177. 800c294: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  28178. 800c298: d103 bne.n 800c2a2 <xQueueReceive+0x13e>
  28179. 800c29a: 6abb ldr r3, [r7, #40] @ 0x28
  28180. 800c29c: 2200 movs r2, #0
  28181. 800c29e: f883 2045 strb.w r2, [r3, #69] @ 0x45
  28182. 800c2a2: f002 fc03 bl 800eaac <vPortExitCritical>
  28183. /* Update the timeout state to see if it has expired yet. */
  28184. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  28185. 800c2a6: 1d3a adds r2, r7, #4
  28186. 800c2a8: f107 0310 add.w r3, r7, #16
  28187. 800c2ac: 4611 mov r1, r2
  28188. 800c2ae: 4618 mov r0, r3
  28189. 800c2b0: f001 f9d0 bl 800d654 <xTaskCheckForTimeOut>
  28190. 800c2b4: 4603 mov r3, r0
  28191. 800c2b6: 2b00 cmp r3, #0
  28192. 800c2b8: d123 bne.n 800c302 <xQueueReceive+0x19e>
  28193. {
  28194. /* The timeout has not expired. If the queue is still empty place
  28195. the task on the list of tasks waiting to receive from the queue. */
  28196. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  28197. 800c2ba: 6ab8 ldr r0, [r7, #40] @ 0x28
  28198. 800c2bc: f000 fa3e bl 800c73c <prvIsQueueEmpty>
  28199. 800c2c0: 4603 mov r3, r0
  28200. 800c2c2: 2b00 cmp r3, #0
  28201. 800c2c4: d017 beq.n 800c2f6 <xQueueReceive+0x192>
  28202. {
  28203. traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );
  28204. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
  28205. 800c2c6: 6abb ldr r3, [r7, #40] @ 0x28
  28206. 800c2c8: 3324 adds r3, #36 @ 0x24
  28207. 800c2ca: 687a ldr r2, [r7, #4]
  28208. 800c2cc: 4611 mov r1, r2
  28209. 800c2ce: 4618 mov r0, r3
  28210. 800c2d0: f001 f8cc bl 800d46c <vTaskPlaceOnEventList>
  28211. prvUnlockQueue( pxQueue );
  28212. 800c2d4: 6ab8 ldr r0, [r7, #40] @ 0x28
  28213. 800c2d6: f000 f9df bl 800c698 <prvUnlockQueue>
  28214. if( xTaskResumeAll() == pdFALSE )
  28215. 800c2da: f000 feeb bl 800d0b4 <xTaskResumeAll>
  28216. 800c2de: 4603 mov r3, r0
  28217. 800c2e0: 2b00 cmp r3, #0
  28218. 800c2e2: d189 bne.n 800c1f8 <xQueueReceive+0x94>
  28219. {
  28220. portYIELD_WITHIN_API();
  28221. 800c2e4: 4b0f ldr r3, [pc, #60] @ (800c324 <xQueueReceive+0x1c0>)
  28222. 800c2e6: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  28223. 800c2ea: 601a str r2, [r3, #0]
  28224. 800c2ec: f3bf 8f4f dsb sy
  28225. 800c2f0: f3bf 8f6f isb sy
  28226. 800c2f4: e780 b.n 800c1f8 <xQueueReceive+0x94>
  28227. }
  28228. else
  28229. {
  28230. /* The queue contains data again. Loop back to try and read the
  28231. data. */
  28232. prvUnlockQueue( pxQueue );
  28233. 800c2f6: 6ab8 ldr r0, [r7, #40] @ 0x28
  28234. 800c2f8: f000 f9ce bl 800c698 <prvUnlockQueue>
  28235. ( void ) xTaskResumeAll();
  28236. 800c2fc: f000 feda bl 800d0b4 <xTaskResumeAll>
  28237. 800c300: e77a b.n 800c1f8 <xQueueReceive+0x94>
  28238. }
  28239. else
  28240. {
  28241. /* Timed out. If there is no data in the queue exit, otherwise loop
  28242. back and attempt to read the data. */
  28243. prvUnlockQueue( pxQueue );
  28244. 800c302: 6ab8 ldr r0, [r7, #40] @ 0x28
  28245. 800c304: f000 f9c8 bl 800c698 <prvUnlockQueue>
  28246. ( void ) xTaskResumeAll();
  28247. 800c308: f000 fed4 bl 800d0b4 <xTaskResumeAll>
  28248. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  28249. 800c30c: 6ab8 ldr r0, [r7, #40] @ 0x28
  28250. 800c30e: f000 fa15 bl 800c73c <prvIsQueueEmpty>
  28251. 800c312: 4603 mov r3, r0
  28252. 800c314: 2b00 cmp r3, #0
  28253. 800c316: f43f af6f beq.w 800c1f8 <xQueueReceive+0x94>
  28254. {
  28255. traceQUEUE_RECEIVE_FAILED( pxQueue );
  28256. return errQUEUE_EMPTY;
  28257. 800c31a: 2300 movs r3, #0
  28258. {
  28259. mtCOVERAGE_TEST_MARKER();
  28260. }
  28261. }
  28262. } /*lint -restore */
  28263. }
  28264. 800c31c: 4618 mov r0, r3
  28265. 800c31e: 3730 adds r7, #48 @ 0x30
  28266. 800c320: 46bd mov sp, r7
  28267. 800c322: bd80 pop {r7, pc}
  28268. 800c324: e000ed04 .word 0xe000ed04
  28269. 0800c328 <xQueueSemaphoreTake>:
  28270. /*-----------------------------------------------------------*/
  28271. BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait )
  28272. {
  28273. 800c328: b580 push {r7, lr}
  28274. 800c32a: b08e sub sp, #56 @ 0x38
  28275. 800c32c: af00 add r7, sp, #0
  28276. 800c32e: 6078 str r0, [r7, #4]
  28277. 800c330: 6039 str r1, [r7, #0]
  28278. BaseType_t xEntryTimeSet = pdFALSE;
  28279. 800c332: 2300 movs r3, #0
  28280. 800c334: 637b str r3, [r7, #52] @ 0x34
  28281. TimeOut_t xTimeOut;
  28282. Queue_t * const pxQueue = xQueue;
  28283. 800c336: 687b ldr r3, [r7, #4]
  28284. 800c338: 62fb str r3, [r7, #44] @ 0x2c
  28285. #if( configUSE_MUTEXES == 1 )
  28286. BaseType_t xInheritanceOccurred = pdFALSE;
  28287. 800c33a: 2300 movs r3, #0
  28288. 800c33c: 633b str r3, [r7, #48] @ 0x30
  28289. #endif
  28290. /* Check the queue pointer is not NULL. */
  28291. configASSERT( ( pxQueue ) );
  28292. 800c33e: 6afb ldr r3, [r7, #44] @ 0x2c
  28293. 800c340: 2b00 cmp r3, #0
  28294. 800c342: d10b bne.n 800c35c <xQueueSemaphoreTake+0x34>
  28295. __asm volatile
  28296. 800c344: f04f 0350 mov.w r3, #80 @ 0x50
  28297. 800c348: f383 8811 msr BASEPRI, r3
  28298. 800c34c: f3bf 8f6f isb sy
  28299. 800c350: f3bf 8f4f dsb sy
  28300. 800c354: 623b str r3, [r7, #32]
  28301. }
  28302. 800c356: bf00 nop
  28303. 800c358: bf00 nop
  28304. 800c35a: e7fd b.n 800c358 <xQueueSemaphoreTake+0x30>
  28305. /* Check this really is a semaphore, in which case the item size will be
  28306. 0. */
  28307. configASSERT( pxQueue->uxItemSize == 0 );
  28308. 800c35c: 6afb ldr r3, [r7, #44] @ 0x2c
  28309. 800c35e: 6c1b ldr r3, [r3, #64] @ 0x40
  28310. 800c360: 2b00 cmp r3, #0
  28311. 800c362: d00b beq.n 800c37c <xQueueSemaphoreTake+0x54>
  28312. __asm volatile
  28313. 800c364: f04f 0350 mov.w r3, #80 @ 0x50
  28314. 800c368: f383 8811 msr BASEPRI, r3
  28315. 800c36c: f3bf 8f6f isb sy
  28316. 800c370: f3bf 8f4f dsb sy
  28317. 800c374: 61fb str r3, [r7, #28]
  28318. }
  28319. 800c376: bf00 nop
  28320. 800c378: bf00 nop
  28321. 800c37a: e7fd b.n 800c378 <xQueueSemaphoreTake+0x50>
  28322. /* Cannot block if the scheduler is suspended. */
  28323. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  28324. {
  28325. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  28326. 800c37c: f001 fac6 bl 800d90c <xTaskGetSchedulerState>
  28327. 800c380: 4603 mov r3, r0
  28328. 800c382: 2b00 cmp r3, #0
  28329. 800c384: d102 bne.n 800c38c <xQueueSemaphoreTake+0x64>
  28330. 800c386: 683b ldr r3, [r7, #0]
  28331. 800c388: 2b00 cmp r3, #0
  28332. 800c38a: d101 bne.n 800c390 <xQueueSemaphoreTake+0x68>
  28333. 800c38c: 2301 movs r3, #1
  28334. 800c38e: e000 b.n 800c392 <xQueueSemaphoreTake+0x6a>
  28335. 800c390: 2300 movs r3, #0
  28336. 800c392: 2b00 cmp r3, #0
  28337. 800c394: d10b bne.n 800c3ae <xQueueSemaphoreTake+0x86>
  28338. __asm volatile
  28339. 800c396: f04f 0350 mov.w r3, #80 @ 0x50
  28340. 800c39a: f383 8811 msr BASEPRI, r3
  28341. 800c39e: f3bf 8f6f isb sy
  28342. 800c3a2: f3bf 8f4f dsb sy
  28343. 800c3a6: 61bb str r3, [r7, #24]
  28344. }
  28345. 800c3a8: bf00 nop
  28346. 800c3aa: bf00 nop
  28347. 800c3ac: e7fd b.n 800c3aa <xQueueSemaphoreTake+0x82>
  28348. /*lint -save -e904 This function relaxes the coding standard somewhat to allow return
  28349. statements within the function itself. This is done in the interest
  28350. of execution time efficiency. */
  28351. for( ;; )
  28352. {
  28353. taskENTER_CRITICAL();
  28354. 800c3ae: f002 fb4b bl 800ea48 <vPortEnterCritical>
  28355. {
  28356. /* Semaphores are queues with an item size of 0, and where the
  28357. number of messages in the queue is the semaphore's count value. */
  28358. const UBaseType_t uxSemaphoreCount = pxQueue->uxMessagesWaiting;
  28359. 800c3b2: 6afb ldr r3, [r7, #44] @ 0x2c
  28360. 800c3b4: 6b9b ldr r3, [r3, #56] @ 0x38
  28361. 800c3b6: 62bb str r3, [r7, #40] @ 0x28
  28362. /* Is there data in the queue now? To be running the calling task
  28363. must be the highest priority task wanting to access the queue. */
  28364. if( uxSemaphoreCount > ( UBaseType_t ) 0 )
  28365. 800c3b8: 6abb ldr r3, [r7, #40] @ 0x28
  28366. 800c3ba: 2b00 cmp r3, #0
  28367. 800c3bc: d024 beq.n 800c408 <xQueueSemaphoreTake+0xe0>
  28368. {
  28369. traceQUEUE_RECEIVE( pxQueue );
  28370. /* Semaphores are queues with a data size of zero and where the
  28371. messages waiting is the semaphore's count. Reduce the count. */
  28372. pxQueue->uxMessagesWaiting = uxSemaphoreCount - ( UBaseType_t ) 1;
  28373. 800c3be: 6abb ldr r3, [r7, #40] @ 0x28
  28374. 800c3c0: 1e5a subs r2, r3, #1
  28375. 800c3c2: 6afb ldr r3, [r7, #44] @ 0x2c
  28376. 800c3c4: 639a str r2, [r3, #56] @ 0x38
  28377. #if ( configUSE_MUTEXES == 1 )
  28378. {
  28379. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  28380. 800c3c6: 6afb ldr r3, [r7, #44] @ 0x2c
  28381. 800c3c8: 681b ldr r3, [r3, #0]
  28382. 800c3ca: 2b00 cmp r3, #0
  28383. 800c3cc: d104 bne.n 800c3d8 <xQueueSemaphoreTake+0xb0>
  28384. {
  28385. /* Record the information required to implement
  28386. priority inheritance should it become necessary. */
  28387. pxQueue->u.xSemaphore.xMutexHolder = pvTaskIncrementMutexHeldCount();
  28388. 800c3ce: f001 fc17 bl 800dc00 <pvTaskIncrementMutexHeldCount>
  28389. 800c3d2: 4602 mov r2, r0
  28390. 800c3d4: 6afb ldr r3, [r7, #44] @ 0x2c
  28391. 800c3d6: 609a str r2, [r3, #8]
  28392. }
  28393. #endif /* configUSE_MUTEXES */
  28394. /* Check to see if other tasks are blocked waiting to give the
  28395. semaphore, and if so, unblock the highest priority such task. */
  28396. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  28397. 800c3d8: 6afb ldr r3, [r7, #44] @ 0x2c
  28398. 800c3da: 691b ldr r3, [r3, #16]
  28399. 800c3dc: 2b00 cmp r3, #0
  28400. 800c3de: d00f beq.n 800c400 <xQueueSemaphoreTake+0xd8>
  28401. {
  28402. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  28403. 800c3e0: 6afb ldr r3, [r7, #44] @ 0x2c
  28404. 800c3e2: 3310 adds r3, #16
  28405. 800c3e4: 4618 mov r0, r3
  28406. 800c3e6: f001 f893 bl 800d510 <xTaskRemoveFromEventList>
  28407. 800c3ea: 4603 mov r3, r0
  28408. 800c3ec: 2b00 cmp r3, #0
  28409. 800c3ee: d007 beq.n 800c400 <xQueueSemaphoreTake+0xd8>
  28410. {
  28411. queueYIELD_IF_USING_PREEMPTION();
  28412. 800c3f0: 4b54 ldr r3, [pc, #336] @ (800c544 <xQueueSemaphoreTake+0x21c>)
  28413. 800c3f2: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  28414. 800c3f6: 601a str r2, [r3, #0]
  28415. 800c3f8: f3bf 8f4f dsb sy
  28416. 800c3fc: f3bf 8f6f isb sy
  28417. else
  28418. {
  28419. mtCOVERAGE_TEST_MARKER();
  28420. }
  28421. taskEXIT_CRITICAL();
  28422. 800c400: f002 fb54 bl 800eaac <vPortExitCritical>
  28423. return pdPASS;
  28424. 800c404: 2301 movs r3, #1
  28425. 800c406: e098 b.n 800c53a <xQueueSemaphoreTake+0x212>
  28426. }
  28427. else
  28428. {
  28429. if( xTicksToWait == ( TickType_t ) 0 )
  28430. 800c408: 683b ldr r3, [r7, #0]
  28431. 800c40a: 2b00 cmp r3, #0
  28432. 800c40c: d112 bne.n 800c434 <xQueueSemaphoreTake+0x10c>
  28433. /* For inheritance to have occurred there must have been an
  28434. initial timeout, and an adjusted timeout cannot become 0, as
  28435. if it were 0 the function would have exited. */
  28436. #if( configUSE_MUTEXES == 1 )
  28437. {
  28438. configASSERT( xInheritanceOccurred == pdFALSE );
  28439. 800c40e: 6b3b ldr r3, [r7, #48] @ 0x30
  28440. 800c410: 2b00 cmp r3, #0
  28441. 800c412: d00b beq.n 800c42c <xQueueSemaphoreTake+0x104>
  28442. __asm volatile
  28443. 800c414: f04f 0350 mov.w r3, #80 @ 0x50
  28444. 800c418: f383 8811 msr BASEPRI, r3
  28445. 800c41c: f3bf 8f6f isb sy
  28446. 800c420: f3bf 8f4f dsb sy
  28447. 800c424: 617b str r3, [r7, #20]
  28448. }
  28449. 800c426: bf00 nop
  28450. 800c428: bf00 nop
  28451. 800c42a: e7fd b.n 800c428 <xQueueSemaphoreTake+0x100>
  28452. }
  28453. #endif /* configUSE_MUTEXES */
  28454. /* The semaphore count was 0 and no block time is specified
  28455. (or the block time has expired) so exit now. */
  28456. taskEXIT_CRITICAL();
  28457. 800c42c: f002 fb3e bl 800eaac <vPortExitCritical>
  28458. traceQUEUE_RECEIVE_FAILED( pxQueue );
  28459. return errQUEUE_EMPTY;
  28460. 800c430: 2300 movs r3, #0
  28461. 800c432: e082 b.n 800c53a <xQueueSemaphoreTake+0x212>
  28462. }
  28463. else if( xEntryTimeSet == pdFALSE )
  28464. 800c434: 6b7b ldr r3, [r7, #52] @ 0x34
  28465. 800c436: 2b00 cmp r3, #0
  28466. 800c438: d106 bne.n 800c448 <xQueueSemaphoreTake+0x120>
  28467. {
  28468. /* The semaphore count was 0 and a block time was specified
  28469. so configure the timeout structure ready to block. */
  28470. vTaskInternalSetTimeOutState( &xTimeOut );
  28471. 800c43a: f107 030c add.w r3, r7, #12
  28472. 800c43e: 4618 mov r0, r3
  28473. 800c440: f001 f8f2 bl 800d628 <vTaskInternalSetTimeOutState>
  28474. xEntryTimeSet = pdTRUE;
  28475. 800c444: 2301 movs r3, #1
  28476. 800c446: 637b str r3, [r7, #52] @ 0x34
  28477. /* Entry time was already set. */
  28478. mtCOVERAGE_TEST_MARKER();
  28479. }
  28480. }
  28481. }
  28482. taskEXIT_CRITICAL();
  28483. 800c448: f002 fb30 bl 800eaac <vPortExitCritical>
  28484. /* Interrupts and other tasks can give to and take from the semaphore
  28485. now the critical section has been exited. */
  28486. vTaskSuspendAll();
  28487. 800c44c: f000 fe24 bl 800d098 <vTaskSuspendAll>
  28488. prvLockQueue( pxQueue );
  28489. 800c450: f002 fafa bl 800ea48 <vPortEnterCritical>
  28490. 800c454: 6afb ldr r3, [r7, #44] @ 0x2c
  28491. 800c456: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  28492. 800c45a: b25b sxtb r3, r3
  28493. 800c45c: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  28494. 800c460: d103 bne.n 800c46a <xQueueSemaphoreTake+0x142>
  28495. 800c462: 6afb ldr r3, [r7, #44] @ 0x2c
  28496. 800c464: 2200 movs r2, #0
  28497. 800c466: f883 2044 strb.w r2, [r3, #68] @ 0x44
  28498. 800c46a: 6afb ldr r3, [r7, #44] @ 0x2c
  28499. 800c46c: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  28500. 800c470: b25b sxtb r3, r3
  28501. 800c472: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  28502. 800c476: d103 bne.n 800c480 <xQueueSemaphoreTake+0x158>
  28503. 800c478: 6afb ldr r3, [r7, #44] @ 0x2c
  28504. 800c47a: 2200 movs r2, #0
  28505. 800c47c: f883 2045 strb.w r2, [r3, #69] @ 0x45
  28506. 800c480: f002 fb14 bl 800eaac <vPortExitCritical>
  28507. /* Update the timeout state to see if it has expired yet. */
  28508. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  28509. 800c484: 463a mov r2, r7
  28510. 800c486: f107 030c add.w r3, r7, #12
  28511. 800c48a: 4611 mov r1, r2
  28512. 800c48c: 4618 mov r0, r3
  28513. 800c48e: f001 f8e1 bl 800d654 <xTaskCheckForTimeOut>
  28514. 800c492: 4603 mov r3, r0
  28515. 800c494: 2b00 cmp r3, #0
  28516. 800c496: d132 bne.n 800c4fe <xQueueSemaphoreTake+0x1d6>
  28517. {
  28518. /* A block time is specified and not expired. If the semaphore
  28519. count is 0 then enter the Blocked state to wait for a semaphore to
  28520. become available. As semaphores are implemented with queues the
  28521. queue being empty is equivalent to the semaphore count being 0. */
  28522. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  28523. 800c498: 6af8 ldr r0, [r7, #44] @ 0x2c
  28524. 800c49a: f000 f94f bl 800c73c <prvIsQueueEmpty>
  28525. 800c49e: 4603 mov r3, r0
  28526. 800c4a0: 2b00 cmp r3, #0
  28527. 800c4a2: d026 beq.n 800c4f2 <xQueueSemaphoreTake+0x1ca>
  28528. {
  28529. traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );
  28530. #if ( configUSE_MUTEXES == 1 )
  28531. {
  28532. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  28533. 800c4a4: 6afb ldr r3, [r7, #44] @ 0x2c
  28534. 800c4a6: 681b ldr r3, [r3, #0]
  28535. 800c4a8: 2b00 cmp r3, #0
  28536. 800c4aa: d109 bne.n 800c4c0 <xQueueSemaphoreTake+0x198>
  28537. {
  28538. taskENTER_CRITICAL();
  28539. 800c4ac: f002 facc bl 800ea48 <vPortEnterCritical>
  28540. {
  28541. xInheritanceOccurred = xTaskPriorityInherit( pxQueue->u.xSemaphore.xMutexHolder );
  28542. 800c4b0: 6afb ldr r3, [r7, #44] @ 0x2c
  28543. 800c4b2: 689b ldr r3, [r3, #8]
  28544. 800c4b4: 4618 mov r0, r3
  28545. 800c4b6: f001 fa47 bl 800d948 <xTaskPriorityInherit>
  28546. 800c4ba: 6338 str r0, [r7, #48] @ 0x30
  28547. }
  28548. taskEXIT_CRITICAL();
  28549. 800c4bc: f002 faf6 bl 800eaac <vPortExitCritical>
  28550. mtCOVERAGE_TEST_MARKER();
  28551. }
  28552. }
  28553. #endif
  28554. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
  28555. 800c4c0: 6afb ldr r3, [r7, #44] @ 0x2c
  28556. 800c4c2: 3324 adds r3, #36 @ 0x24
  28557. 800c4c4: 683a ldr r2, [r7, #0]
  28558. 800c4c6: 4611 mov r1, r2
  28559. 800c4c8: 4618 mov r0, r3
  28560. 800c4ca: f000 ffcf bl 800d46c <vTaskPlaceOnEventList>
  28561. prvUnlockQueue( pxQueue );
  28562. 800c4ce: 6af8 ldr r0, [r7, #44] @ 0x2c
  28563. 800c4d0: f000 f8e2 bl 800c698 <prvUnlockQueue>
  28564. if( xTaskResumeAll() == pdFALSE )
  28565. 800c4d4: f000 fdee bl 800d0b4 <xTaskResumeAll>
  28566. 800c4d8: 4603 mov r3, r0
  28567. 800c4da: 2b00 cmp r3, #0
  28568. 800c4dc: f47f af67 bne.w 800c3ae <xQueueSemaphoreTake+0x86>
  28569. {
  28570. portYIELD_WITHIN_API();
  28571. 800c4e0: 4b18 ldr r3, [pc, #96] @ (800c544 <xQueueSemaphoreTake+0x21c>)
  28572. 800c4e2: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  28573. 800c4e6: 601a str r2, [r3, #0]
  28574. 800c4e8: f3bf 8f4f dsb sy
  28575. 800c4ec: f3bf 8f6f isb sy
  28576. 800c4f0: e75d b.n 800c3ae <xQueueSemaphoreTake+0x86>
  28577. }
  28578. else
  28579. {
  28580. /* There was no timeout and the semaphore count was not 0, so
  28581. attempt to take the semaphore again. */
  28582. prvUnlockQueue( pxQueue );
  28583. 800c4f2: 6af8 ldr r0, [r7, #44] @ 0x2c
  28584. 800c4f4: f000 f8d0 bl 800c698 <prvUnlockQueue>
  28585. ( void ) xTaskResumeAll();
  28586. 800c4f8: f000 fddc bl 800d0b4 <xTaskResumeAll>
  28587. 800c4fc: e757 b.n 800c3ae <xQueueSemaphoreTake+0x86>
  28588. }
  28589. }
  28590. else
  28591. {
  28592. /* Timed out. */
  28593. prvUnlockQueue( pxQueue );
  28594. 800c4fe: 6af8 ldr r0, [r7, #44] @ 0x2c
  28595. 800c500: f000 f8ca bl 800c698 <prvUnlockQueue>
  28596. ( void ) xTaskResumeAll();
  28597. 800c504: f000 fdd6 bl 800d0b4 <xTaskResumeAll>
  28598. /* If the semaphore count is 0 exit now as the timeout has
  28599. expired. Otherwise return to attempt to take the semaphore that is
  28600. known to be available. As semaphores are implemented by queues the
  28601. queue being empty is equivalent to the semaphore count being 0. */
  28602. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  28603. 800c508: 6af8 ldr r0, [r7, #44] @ 0x2c
  28604. 800c50a: f000 f917 bl 800c73c <prvIsQueueEmpty>
  28605. 800c50e: 4603 mov r3, r0
  28606. 800c510: 2b00 cmp r3, #0
  28607. 800c512: f43f af4c beq.w 800c3ae <xQueueSemaphoreTake+0x86>
  28608. #if ( configUSE_MUTEXES == 1 )
  28609. {
  28610. /* xInheritanceOccurred could only have be set if
  28611. pxQueue->uxQueueType == queueQUEUE_IS_MUTEX so no need to
  28612. test the mutex type again to check it is actually a mutex. */
  28613. if( xInheritanceOccurred != pdFALSE )
  28614. 800c516: 6b3b ldr r3, [r7, #48] @ 0x30
  28615. 800c518: 2b00 cmp r3, #0
  28616. 800c51a: d00d beq.n 800c538 <xQueueSemaphoreTake+0x210>
  28617. {
  28618. taskENTER_CRITICAL();
  28619. 800c51c: f002 fa94 bl 800ea48 <vPortEnterCritical>
  28620. /* This task blocking on the mutex caused another
  28621. task to inherit this task's priority. Now this task
  28622. has timed out the priority should be disinherited
  28623. again, but only as low as the next highest priority
  28624. task that is waiting for the same mutex. */
  28625. uxHighestWaitingPriority = prvGetDisinheritPriorityAfterTimeout( pxQueue );
  28626. 800c520: 6af8 ldr r0, [r7, #44] @ 0x2c
  28627. 800c522: f000 f811 bl 800c548 <prvGetDisinheritPriorityAfterTimeout>
  28628. 800c526: 6278 str r0, [r7, #36] @ 0x24
  28629. vTaskPriorityDisinheritAfterTimeout( pxQueue->u.xSemaphore.xMutexHolder, uxHighestWaitingPriority );
  28630. 800c528: 6afb ldr r3, [r7, #44] @ 0x2c
  28631. 800c52a: 689b ldr r3, [r3, #8]
  28632. 800c52c: 6a79 ldr r1, [r7, #36] @ 0x24
  28633. 800c52e: 4618 mov r0, r3
  28634. 800c530: f001 fae2 bl 800daf8 <vTaskPriorityDisinheritAfterTimeout>
  28635. }
  28636. taskEXIT_CRITICAL();
  28637. 800c534: f002 faba bl 800eaac <vPortExitCritical>
  28638. }
  28639. }
  28640. #endif /* configUSE_MUTEXES */
  28641. traceQUEUE_RECEIVE_FAILED( pxQueue );
  28642. return errQUEUE_EMPTY;
  28643. 800c538: 2300 movs r3, #0
  28644. {
  28645. mtCOVERAGE_TEST_MARKER();
  28646. }
  28647. }
  28648. } /*lint -restore */
  28649. }
  28650. 800c53a: 4618 mov r0, r3
  28651. 800c53c: 3738 adds r7, #56 @ 0x38
  28652. 800c53e: 46bd mov sp, r7
  28653. 800c540: bd80 pop {r7, pc}
  28654. 800c542: bf00 nop
  28655. 800c544: e000ed04 .word 0xe000ed04
  28656. 0800c548 <prvGetDisinheritPriorityAfterTimeout>:
  28657. /*-----------------------------------------------------------*/
  28658. #if( configUSE_MUTEXES == 1 )
  28659. static UBaseType_t prvGetDisinheritPriorityAfterTimeout( const Queue_t * const pxQueue )
  28660. {
  28661. 800c548: b480 push {r7}
  28662. 800c54a: b085 sub sp, #20
  28663. 800c54c: af00 add r7, sp, #0
  28664. 800c54e: 6078 str r0, [r7, #4]
  28665. priority, but the waiting task times out, then the holder should
  28666. disinherit the priority - but only down to the highest priority of any
  28667. other tasks that are waiting for the same mutex. For this purpose,
  28668. return the priority of the highest priority task that is waiting for the
  28669. mutex. */
  28670. if( listCURRENT_LIST_LENGTH( &( pxQueue->xTasksWaitingToReceive ) ) > 0U )
  28671. 800c550: 687b ldr r3, [r7, #4]
  28672. 800c552: 6a5b ldr r3, [r3, #36] @ 0x24
  28673. 800c554: 2b00 cmp r3, #0
  28674. 800c556: d006 beq.n 800c566 <prvGetDisinheritPriorityAfterTimeout+0x1e>
  28675. {
  28676. uxHighestPriorityOfWaitingTasks = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) listGET_ITEM_VALUE_OF_HEAD_ENTRY( &( pxQueue->xTasksWaitingToReceive ) );
  28677. 800c558: 687b ldr r3, [r7, #4]
  28678. 800c55a: 6b1b ldr r3, [r3, #48] @ 0x30
  28679. 800c55c: 681b ldr r3, [r3, #0]
  28680. 800c55e: f1c3 0338 rsb r3, r3, #56 @ 0x38
  28681. 800c562: 60fb str r3, [r7, #12]
  28682. 800c564: e001 b.n 800c56a <prvGetDisinheritPriorityAfterTimeout+0x22>
  28683. }
  28684. else
  28685. {
  28686. uxHighestPriorityOfWaitingTasks = tskIDLE_PRIORITY;
  28687. 800c566: 2300 movs r3, #0
  28688. 800c568: 60fb str r3, [r7, #12]
  28689. }
  28690. return uxHighestPriorityOfWaitingTasks;
  28691. 800c56a: 68fb ldr r3, [r7, #12]
  28692. }
  28693. 800c56c: 4618 mov r0, r3
  28694. 800c56e: 3714 adds r7, #20
  28695. 800c570: 46bd mov sp, r7
  28696. 800c572: f85d 7b04 ldr.w r7, [sp], #4
  28697. 800c576: 4770 bx lr
  28698. 0800c578 <prvCopyDataToQueue>:
  28699. #endif /* configUSE_MUTEXES */
  28700. /*-----------------------------------------------------------*/
  28701. static BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue, const void *pvItemToQueue, const BaseType_t xPosition )
  28702. {
  28703. 800c578: b580 push {r7, lr}
  28704. 800c57a: b086 sub sp, #24
  28705. 800c57c: af00 add r7, sp, #0
  28706. 800c57e: 60f8 str r0, [r7, #12]
  28707. 800c580: 60b9 str r1, [r7, #8]
  28708. 800c582: 607a str r2, [r7, #4]
  28709. BaseType_t xReturn = pdFALSE;
  28710. 800c584: 2300 movs r3, #0
  28711. 800c586: 617b str r3, [r7, #20]
  28712. UBaseType_t uxMessagesWaiting;
  28713. /* This function is called from a critical section. */
  28714. uxMessagesWaiting = pxQueue->uxMessagesWaiting;
  28715. 800c588: 68fb ldr r3, [r7, #12]
  28716. 800c58a: 6b9b ldr r3, [r3, #56] @ 0x38
  28717. 800c58c: 613b str r3, [r7, #16]
  28718. if( pxQueue->uxItemSize == ( UBaseType_t ) 0 )
  28719. 800c58e: 68fb ldr r3, [r7, #12]
  28720. 800c590: 6c1b ldr r3, [r3, #64] @ 0x40
  28721. 800c592: 2b00 cmp r3, #0
  28722. 800c594: d10d bne.n 800c5b2 <prvCopyDataToQueue+0x3a>
  28723. {
  28724. #if ( configUSE_MUTEXES == 1 )
  28725. {
  28726. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  28727. 800c596: 68fb ldr r3, [r7, #12]
  28728. 800c598: 681b ldr r3, [r3, #0]
  28729. 800c59a: 2b00 cmp r3, #0
  28730. 800c59c: d14d bne.n 800c63a <prvCopyDataToQueue+0xc2>
  28731. {
  28732. /* The mutex is no longer being held. */
  28733. xReturn = xTaskPriorityDisinherit( pxQueue->u.xSemaphore.xMutexHolder );
  28734. 800c59e: 68fb ldr r3, [r7, #12]
  28735. 800c5a0: 689b ldr r3, [r3, #8]
  28736. 800c5a2: 4618 mov r0, r3
  28737. 800c5a4: f001 fa38 bl 800da18 <xTaskPriorityDisinherit>
  28738. 800c5a8: 6178 str r0, [r7, #20]
  28739. pxQueue->u.xSemaphore.xMutexHolder = NULL;
  28740. 800c5aa: 68fb ldr r3, [r7, #12]
  28741. 800c5ac: 2200 movs r2, #0
  28742. 800c5ae: 609a str r2, [r3, #8]
  28743. 800c5b0: e043 b.n 800c63a <prvCopyDataToQueue+0xc2>
  28744. mtCOVERAGE_TEST_MARKER();
  28745. }
  28746. }
  28747. #endif /* configUSE_MUTEXES */
  28748. }
  28749. else if( xPosition == queueSEND_TO_BACK )
  28750. 800c5b2: 687b ldr r3, [r7, #4]
  28751. 800c5b4: 2b00 cmp r3, #0
  28752. 800c5b6: d119 bne.n 800c5ec <prvCopyDataToQueue+0x74>
  28753. {
  28754. ( 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. */
  28755. 800c5b8: 68fb ldr r3, [r7, #12]
  28756. 800c5ba: 6858 ldr r0, [r3, #4]
  28757. 800c5bc: 68fb ldr r3, [r7, #12]
  28758. 800c5be: 6c1b ldr r3, [r3, #64] @ 0x40
  28759. 800c5c0: 461a mov r2, r3
  28760. 800c5c2: 68b9 ldr r1, [r7, #8]
  28761. 800c5c4: f002 ff39 bl 800f43a <memcpy>
  28762. 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. */
  28763. 800c5c8: 68fb ldr r3, [r7, #12]
  28764. 800c5ca: 685a ldr r2, [r3, #4]
  28765. 800c5cc: 68fb ldr r3, [r7, #12]
  28766. 800c5ce: 6c1b ldr r3, [r3, #64] @ 0x40
  28767. 800c5d0: 441a add r2, r3
  28768. 800c5d2: 68fb ldr r3, [r7, #12]
  28769. 800c5d4: 605a str r2, [r3, #4]
  28770. if( pxQueue->pcWriteTo >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
  28771. 800c5d6: 68fb ldr r3, [r7, #12]
  28772. 800c5d8: 685a ldr r2, [r3, #4]
  28773. 800c5da: 68fb ldr r3, [r7, #12]
  28774. 800c5dc: 689b ldr r3, [r3, #8]
  28775. 800c5de: 429a cmp r2, r3
  28776. 800c5e0: d32b bcc.n 800c63a <prvCopyDataToQueue+0xc2>
  28777. {
  28778. pxQueue->pcWriteTo = pxQueue->pcHead;
  28779. 800c5e2: 68fb ldr r3, [r7, #12]
  28780. 800c5e4: 681a ldr r2, [r3, #0]
  28781. 800c5e6: 68fb ldr r3, [r7, #12]
  28782. 800c5e8: 605a str r2, [r3, #4]
  28783. 800c5ea: e026 b.n 800c63a <prvCopyDataToQueue+0xc2>
  28784. mtCOVERAGE_TEST_MARKER();
  28785. }
  28786. }
  28787. else
  28788. {
  28789. ( 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. */
  28790. 800c5ec: 68fb ldr r3, [r7, #12]
  28791. 800c5ee: 68d8 ldr r0, [r3, #12]
  28792. 800c5f0: 68fb ldr r3, [r7, #12]
  28793. 800c5f2: 6c1b ldr r3, [r3, #64] @ 0x40
  28794. 800c5f4: 461a mov r2, r3
  28795. 800c5f6: 68b9 ldr r1, [r7, #8]
  28796. 800c5f8: f002 ff1f bl 800f43a <memcpy>
  28797. pxQueue->u.xQueue.pcReadFrom -= pxQueue->uxItemSize;
  28798. 800c5fc: 68fb ldr r3, [r7, #12]
  28799. 800c5fe: 68da ldr r2, [r3, #12]
  28800. 800c600: 68fb ldr r3, [r7, #12]
  28801. 800c602: 6c1b ldr r3, [r3, #64] @ 0x40
  28802. 800c604: 425b negs r3, r3
  28803. 800c606: 441a add r2, r3
  28804. 800c608: 68fb ldr r3, [r7, #12]
  28805. 800c60a: 60da str r2, [r3, #12]
  28806. if( pxQueue->u.xQueue.pcReadFrom < pxQueue->pcHead ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
  28807. 800c60c: 68fb ldr r3, [r7, #12]
  28808. 800c60e: 68da ldr r2, [r3, #12]
  28809. 800c610: 68fb ldr r3, [r7, #12]
  28810. 800c612: 681b ldr r3, [r3, #0]
  28811. 800c614: 429a cmp r2, r3
  28812. 800c616: d207 bcs.n 800c628 <prvCopyDataToQueue+0xb0>
  28813. {
  28814. pxQueue->u.xQueue.pcReadFrom = ( pxQueue->u.xQueue.pcTail - pxQueue->uxItemSize );
  28815. 800c618: 68fb ldr r3, [r7, #12]
  28816. 800c61a: 689a ldr r2, [r3, #8]
  28817. 800c61c: 68fb ldr r3, [r7, #12]
  28818. 800c61e: 6c1b ldr r3, [r3, #64] @ 0x40
  28819. 800c620: 425b negs r3, r3
  28820. 800c622: 441a add r2, r3
  28821. 800c624: 68fb ldr r3, [r7, #12]
  28822. 800c626: 60da str r2, [r3, #12]
  28823. else
  28824. {
  28825. mtCOVERAGE_TEST_MARKER();
  28826. }
  28827. if( xPosition == queueOVERWRITE )
  28828. 800c628: 687b ldr r3, [r7, #4]
  28829. 800c62a: 2b02 cmp r3, #2
  28830. 800c62c: d105 bne.n 800c63a <prvCopyDataToQueue+0xc2>
  28831. {
  28832. if( uxMessagesWaiting > ( UBaseType_t ) 0 )
  28833. 800c62e: 693b ldr r3, [r7, #16]
  28834. 800c630: 2b00 cmp r3, #0
  28835. 800c632: d002 beq.n 800c63a <prvCopyDataToQueue+0xc2>
  28836. {
  28837. /* An item is not being added but overwritten, so subtract
  28838. one from the recorded number of items in the queue so when
  28839. one is added again below the number of recorded items remains
  28840. correct. */
  28841. --uxMessagesWaiting;
  28842. 800c634: 693b ldr r3, [r7, #16]
  28843. 800c636: 3b01 subs r3, #1
  28844. 800c638: 613b str r3, [r7, #16]
  28845. {
  28846. mtCOVERAGE_TEST_MARKER();
  28847. }
  28848. }
  28849. pxQueue->uxMessagesWaiting = uxMessagesWaiting + ( UBaseType_t ) 1;
  28850. 800c63a: 693b ldr r3, [r7, #16]
  28851. 800c63c: 1c5a adds r2, r3, #1
  28852. 800c63e: 68fb ldr r3, [r7, #12]
  28853. 800c640: 639a str r2, [r3, #56] @ 0x38
  28854. return xReturn;
  28855. 800c642: 697b ldr r3, [r7, #20]
  28856. }
  28857. 800c644: 4618 mov r0, r3
  28858. 800c646: 3718 adds r7, #24
  28859. 800c648: 46bd mov sp, r7
  28860. 800c64a: bd80 pop {r7, pc}
  28861. 0800c64c <prvCopyDataFromQueue>:
  28862. /*-----------------------------------------------------------*/
  28863. static void prvCopyDataFromQueue( Queue_t * const pxQueue, void * const pvBuffer )
  28864. {
  28865. 800c64c: b580 push {r7, lr}
  28866. 800c64e: b082 sub sp, #8
  28867. 800c650: af00 add r7, sp, #0
  28868. 800c652: 6078 str r0, [r7, #4]
  28869. 800c654: 6039 str r1, [r7, #0]
  28870. if( pxQueue->uxItemSize != ( UBaseType_t ) 0 )
  28871. 800c656: 687b ldr r3, [r7, #4]
  28872. 800c658: 6c1b ldr r3, [r3, #64] @ 0x40
  28873. 800c65a: 2b00 cmp r3, #0
  28874. 800c65c: d018 beq.n 800c690 <prvCopyDataFromQueue+0x44>
  28875. {
  28876. 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. */
  28877. 800c65e: 687b ldr r3, [r7, #4]
  28878. 800c660: 68da ldr r2, [r3, #12]
  28879. 800c662: 687b ldr r3, [r7, #4]
  28880. 800c664: 6c1b ldr r3, [r3, #64] @ 0x40
  28881. 800c666: 441a add r2, r3
  28882. 800c668: 687b ldr r3, [r7, #4]
  28883. 800c66a: 60da str r2, [r3, #12]
  28884. if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */
  28885. 800c66c: 687b ldr r3, [r7, #4]
  28886. 800c66e: 68da ldr r2, [r3, #12]
  28887. 800c670: 687b ldr r3, [r7, #4]
  28888. 800c672: 689b ldr r3, [r3, #8]
  28889. 800c674: 429a cmp r2, r3
  28890. 800c676: d303 bcc.n 800c680 <prvCopyDataFromQueue+0x34>
  28891. {
  28892. pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead;
  28893. 800c678: 687b ldr r3, [r7, #4]
  28894. 800c67a: 681a ldr r2, [r3, #0]
  28895. 800c67c: 687b ldr r3, [r7, #4]
  28896. 800c67e: 60da str r2, [r3, #12]
  28897. }
  28898. else
  28899. {
  28900. mtCOVERAGE_TEST_MARKER();
  28901. }
  28902. ( 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. */
  28903. 800c680: 687b ldr r3, [r7, #4]
  28904. 800c682: 68d9 ldr r1, [r3, #12]
  28905. 800c684: 687b ldr r3, [r7, #4]
  28906. 800c686: 6c1b ldr r3, [r3, #64] @ 0x40
  28907. 800c688: 461a mov r2, r3
  28908. 800c68a: 6838 ldr r0, [r7, #0]
  28909. 800c68c: f002 fed5 bl 800f43a <memcpy>
  28910. }
  28911. }
  28912. 800c690: bf00 nop
  28913. 800c692: 3708 adds r7, #8
  28914. 800c694: 46bd mov sp, r7
  28915. 800c696: bd80 pop {r7, pc}
  28916. 0800c698 <prvUnlockQueue>:
  28917. /*-----------------------------------------------------------*/
  28918. static void prvUnlockQueue( Queue_t * const pxQueue )
  28919. {
  28920. 800c698: b580 push {r7, lr}
  28921. 800c69a: b084 sub sp, #16
  28922. 800c69c: af00 add r7, sp, #0
  28923. 800c69e: 6078 str r0, [r7, #4]
  28924. /* The lock counts contains the number of extra data items placed or
  28925. removed from the queue while the queue was locked. When a queue is
  28926. locked items can be added or removed, but the event lists cannot be
  28927. updated. */
  28928. taskENTER_CRITICAL();
  28929. 800c6a0: f002 f9d2 bl 800ea48 <vPortEnterCritical>
  28930. {
  28931. int8_t cTxLock = pxQueue->cTxLock;
  28932. 800c6a4: 687b ldr r3, [r7, #4]
  28933. 800c6a6: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  28934. 800c6aa: 73fb strb r3, [r7, #15]
  28935. /* See if data was added to the queue while it was locked. */
  28936. while( cTxLock > queueLOCKED_UNMODIFIED )
  28937. 800c6ac: e011 b.n 800c6d2 <prvUnlockQueue+0x3a>
  28938. }
  28939. #else /* configUSE_QUEUE_SETS */
  28940. {
  28941. /* Tasks that are removed from the event list will get added to
  28942. the pending ready list as the scheduler is still suspended. */
  28943. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  28944. 800c6ae: 687b ldr r3, [r7, #4]
  28945. 800c6b0: 6a5b ldr r3, [r3, #36] @ 0x24
  28946. 800c6b2: 2b00 cmp r3, #0
  28947. 800c6b4: d012 beq.n 800c6dc <prvUnlockQueue+0x44>
  28948. {
  28949. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  28950. 800c6b6: 687b ldr r3, [r7, #4]
  28951. 800c6b8: 3324 adds r3, #36 @ 0x24
  28952. 800c6ba: 4618 mov r0, r3
  28953. 800c6bc: f000 ff28 bl 800d510 <xTaskRemoveFromEventList>
  28954. 800c6c0: 4603 mov r3, r0
  28955. 800c6c2: 2b00 cmp r3, #0
  28956. 800c6c4: d001 beq.n 800c6ca <prvUnlockQueue+0x32>
  28957. {
  28958. /* The task waiting has a higher priority so record that
  28959. a context switch is required. */
  28960. vTaskMissedYield();
  28961. 800c6c6: f001 f829 bl 800d71c <vTaskMissedYield>
  28962. break;
  28963. }
  28964. }
  28965. #endif /* configUSE_QUEUE_SETS */
  28966. --cTxLock;
  28967. 800c6ca: 7bfb ldrb r3, [r7, #15]
  28968. 800c6cc: 3b01 subs r3, #1
  28969. 800c6ce: b2db uxtb r3, r3
  28970. 800c6d0: 73fb strb r3, [r7, #15]
  28971. while( cTxLock > queueLOCKED_UNMODIFIED )
  28972. 800c6d2: f997 300f ldrsb.w r3, [r7, #15]
  28973. 800c6d6: 2b00 cmp r3, #0
  28974. 800c6d8: dce9 bgt.n 800c6ae <prvUnlockQueue+0x16>
  28975. 800c6da: e000 b.n 800c6de <prvUnlockQueue+0x46>
  28976. break;
  28977. 800c6dc: bf00 nop
  28978. }
  28979. pxQueue->cTxLock = queueUNLOCKED;
  28980. 800c6de: 687b ldr r3, [r7, #4]
  28981. 800c6e0: 22ff movs r2, #255 @ 0xff
  28982. 800c6e2: f883 2045 strb.w r2, [r3, #69] @ 0x45
  28983. }
  28984. taskEXIT_CRITICAL();
  28985. 800c6e6: f002 f9e1 bl 800eaac <vPortExitCritical>
  28986. /* Do the same for the Rx lock. */
  28987. taskENTER_CRITICAL();
  28988. 800c6ea: f002 f9ad bl 800ea48 <vPortEnterCritical>
  28989. {
  28990. int8_t cRxLock = pxQueue->cRxLock;
  28991. 800c6ee: 687b ldr r3, [r7, #4]
  28992. 800c6f0: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  28993. 800c6f4: 73bb strb r3, [r7, #14]
  28994. while( cRxLock > queueLOCKED_UNMODIFIED )
  28995. 800c6f6: e011 b.n 800c71c <prvUnlockQueue+0x84>
  28996. {
  28997. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  28998. 800c6f8: 687b ldr r3, [r7, #4]
  28999. 800c6fa: 691b ldr r3, [r3, #16]
  29000. 800c6fc: 2b00 cmp r3, #0
  29001. 800c6fe: d012 beq.n 800c726 <prvUnlockQueue+0x8e>
  29002. {
  29003. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  29004. 800c700: 687b ldr r3, [r7, #4]
  29005. 800c702: 3310 adds r3, #16
  29006. 800c704: 4618 mov r0, r3
  29007. 800c706: f000 ff03 bl 800d510 <xTaskRemoveFromEventList>
  29008. 800c70a: 4603 mov r3, r0
  29009. 800c70c: 2b00 cmp r3, #0
  29010. 800c70e: d001 beq.n 800c714 <prvUnlockQueue+0x7c>
  29011. {
  29012. vTaskMissedYield();
  29013. 800c710: f001 f804 bl 800d71c <vTaskMissedYield>
  29014. else
  29015. {
  29016. mtCOVERAGE_TEST_MARKER();
  29017. }
  29018. --cRxLock;
  29019. 800c714: 7bbb ldrb r3, [r7, #14]
  29020. 800c716: 3b01 subs r3, #1
  29021. 800c718: b2db uxtb r3, r3
  29022. 800c71a: 73bb strb r3, [r7, #14]
  29023. while( cRxLock > queueLOCKED_UNMODIFIED )
  29024. 800c71c: f997 300e ldrsb.w r3, [r7, #14]
  29025. 800c720: 2b00 cmp r3, #0
  29026. 800c722: dce9 bgt.n 800c6f8 <prvUnlockQueue+0x60>
  29027. 800c724: e000 b.n 800c728 <prvUnlockQueue+0x90>
  29028. }
  29029. else
  29030. {
  29031. break;
  29032. 800c726: bf00 nop
  29033. }
  29034. }
  29035. pxQueue->cRxLock = queueUNLOCKED;
  29036. 800c728: 687b ldr r3, [r7, #4]
  29037. 800c72a: 22ff movs r2, #255 @ 0xff
  29038. 800c72c: f883 2044 strb.w r2, [r3, #68] @ 0x44
  29039. }
  29040. taskEXIT_CRITICAL();
  29041. 800c730: f002 f9bc bl 800eaac <vPortExitCritical>
  29042. }
  29043. 800c734: bf00 nop
  29044. 800c736: 3710 adds r7, #16
  29045. 800c738: 46bd mov sp, r7
  29046. 800c73a: bd80 pop {r7, pc}
  29047. 0800c73c <prvIsQueueEmpty>:
  29048. /*-----------------------------------------------------------*/
  29049. static BaseType_t prvIsQueueEmpty( const Queue_t *pxQueue )
  29050. {
  29051. 800c73c: b580 push {r7, lr}
  29052. 800c73e: b084 sub sp, #16
  29053. 800c740: af00 add r7, sp, #0
  29054. 800c742: 6078 str r0, [r7, #4]
  29055. BaseType_t xReturn;
  29056. taskENTER_CRITICAL();
  29057. 800c744: f002 f980 bl 800ea48 <vPortEnterCritical>
  29058. {
  29059. if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 )
  29060. 800c748: 687b ldr r3, [r7, #4]
  29061. 800c74a: 6b9b ldr r3, [r3, #56] @ 0x38
  29062. 800c74c: 2b00 cmp r3, #0
  29063. 800c74e: d102 bne.n 800c756 <prvIsQueueEmpty+0x1a>
  29064. {
  29065. xReturn = pdTRUE;
  29066. 800c750: 2301 movs r3, #1
  29067. 800c752: 60fb str r3, [r7, #12]
  29068. 800c754: e001 b.n 800c75a <prvIsQueueEmpty+0x1e>
  29069. }
  29070. else
  29071. {
  29072. xReturn = pdFALSE;
  29073. 800c756: 2300 movs r3, #0
  29074. 800c758: 60fb str r3, [r7, #12]
  29075. }
  29076. }
  29077. taskEXIT_CRITICAL();
  29078. 800c75a: f002 f9a7 bl 800eaac <vPortExitCritical>
  29079. return xReturn;
  29080. 800c75e: 68fb ldr r3, [r7, #12]
  29081. }
  29082. 800c760: 4618 mov r0, r3
  29083. 800c762: 3710 adds r7, #16
  29084. 800c764: 46bd mov sp, r7
  29085. 800c766: bd80 pop {r7, pc}
  29086. 0800c768 <prvIsQueueFull>:
  29087. return xReturn;
  29088. } /*lint !e818 xQueue could not be pointer to const because it is a typedef. */
  29089. /*-----------------------------------------------------------*/
  29090. static BaseType_t prvIsQueueFull( const Queue_t *pxQueue )
  29091. {
  29092. 800c768: b580 push {r7, lr}
  29093. 800c76a: b084 sub sp, #16
  29094. 800c76c: af00 add r7, sp, #0
  29095. 800c76e: 6078 str r0, [r7, #4]
  29096. BaseType_t xReturn;
  29097. taskENTER_CRITICAL();
  29098. 800c770: f002 f96a bl 800ea48 <vPortEnterCritical>
  29099. {
  29100. if( pxQueue->uxMessagesWaiting == pxQueue->uxLength )
  29101. 800c774: 687b ldr r3, [r7, #4]
  29102. 800c776: 6b9a ldr r2, [r3, #56] @ 0x38
  29103. 800c778: 687b ldr r3, [r7, #4]
  29104. 800c77a: 6bdb ldr r3, [r3, #60] @ 0x3c
  29105. 800c77c: 429a cmp r2, r3
  29106. 800c77e: d102 bne.n 800c786 <prvIsQueueFull+0x1e>
  29107. {
  29108. xReturn = pdTRUE;
  29109. 800c780: 2301 movs r3, #1
  29110. 800c782: 60fb str r3, [r7, #12]
  29111. 800c784: e001 b.n 800c78a <prvIsQueueFull+0x22>
  29112. }
  29113. else
  29114. {
  29115. xReturn = pdFALSE;
  29116. 800c786: 2300 movs r3, #0
  29117. 800c788: 60fb str r3, [r7, #12]
  29118. }
  29119. }
  29120. taskEXIT_CRITICAL();
  29121. 800c78a: f002 f98f bl 800eaac <vPortExitCritical>
  29122. return xReturn;
  29123. 800c78e: 68fb ldr r3, [r7, #12]
  29124. }
  29125. 800c790: 4618 mov r0, r3
  29126. 800c792: 3710 adds r7, #16
  29127. 800c794: 46bd mov sp, r7
  29128. 800c796: bd80 pop {r7, pc}
  29129. 0800c798 <vQueueAddToRegistry>:
  29130. /*-----------------------------------------------------------*/
  29131. #if ( configQUEUE_REGISTRY_SIZE > 0 )
  29132. void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcQueueName ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
  29133. {
  29134. 800c798: b480 push {r7}
  29135. 800c79a: b085 sub sp, #20
  29136. 800c79c: af00 add r7, sp, #0
  29137. 800c79e: 6078 str r0, [r7, #4]
  29138. 800c7a0: 6039 str r1, [r7, #0]
  29139. UBaseType_t ux;
  29140. /* See if there is an empty space in the registry. A NULL name denotes
  29141. a free slot. */
  29142. for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
  29143. 800c7a2: 2300 movs r3, #0
  29144. 800c7a4: 60fb str r3, [r7, #12]
  29145. 800c7a6: e014 b.n 800c7d2 <vQueueAddToRegistry+0x3a>
  29146. {
  29147. if( xQueueRegistry[ ux ].pcQueueName == NULL )
  29148. 800c7a8: 4a0f ldr r2, [pc, #60] @ (800c7e8 <vQueueAddToRegistry+0x50>)
  29149. 800c7aa: 68fb ldr r3, [r7, #12]
  29150. 800c7ac: f852 3033 ldr.w r3, [r2, r3, lsl #3]
  29151. 800c7b0: 2b00 cmp r3, #0
  29152. 800c7b2: d10b bne.n 800c7cc <vQueueAddToRegistry+0x34>
  29153. {
  29154. /* Store the information on this queue. */
  29155. xQueueRegistry[ ux ].pcQueueName = pcQueueName;
  29156. 800c7b4: 490c ldr r1, [pc, #48] @ (800c7e8 <vQueueAddToRegistry+0x50>)
  29157. 800c7b6: 68fb ldr r3, [r7, #12]
  29158. 800c7b8: 683a ldr r2, [r7, #0]
  29159. 800c7ba: f841 2033 str.w r2, [r1, r3, lsl #3]
  29160. xQueueRegistry[ ux ].xHandle = xQueue;
  29161. 800c7be: 4a0a ldr r2, [pc, #40] @ (800c7e8 <vQueueAddToRegistry+0x50>)
  29162. 800c7c0: 68fb ldr r3, [r7, #12]
  29163. 800c7c2: 00db lsls r3, r3, #3
  29164. 800c7c4: 4413 add r3, r2
  29165. 800c7c6: 687a ldr r2, [r7, #4]
  29166. 800c7c8: 605a str r2, [r3, #4]
  29167. traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName );
  29168. break;
  29169. 800c7ca: e006 b.n 800c7da <vQueueAddToRegistry+0x42>
  29170. for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
  29171. 800c7cc: 68fb ldr r3, [r7, #12]
  29172. 800c7ce: 3301 adds r3, #1
  29173. 800c7d0: 60fb str r3, [r7, #12]
  29174. 800c7d2: 68fb ldr r3, [r7, #12]
  29175. 800c7d4: 2b07 cmp r3, #7
  29176. 800c7d6: d9e7 bls.n 800c7a8 <vQueueAddToRegistry+0x10>
  29177. else
  29178. {
  29179. mtCOVERAGE_TEST_MARKER();
  29180. }
  29181. }
  29182. }
  29183. 800c7d8: bf00 nop
  29184. 800c7da: bf00 nop
  29185. 800c7dc: 3714 adds r7, #20
  29186. 800c7de: 46bd mov sp, r7
  29187. 800c7e0: f85d 7b04 ldr.w r7, [sp], #4
  29188. 800c7e4: 4770 bx lr
  29189. 800c7e6: bf00 nop
  29190. 800c7e8: 240020e8 .word 0x240020e8
  29191. 0800c7ec <vQueueWaitForMessageRestricted>:
  29192. /*-----------------------------------------------------------*/
  29193. #if ( configUSE_TIMERS == 1 )
  29194. void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely )
  29195. {
  29196. 800c7ec: b580 push {r7, lr}
  29197. 800c7ee: b086 sub sp, #24
  29198. 800c7f0: af00 add r7, sp, #0
  29199. 800c7f2: 60f8 str r0, [r7, #12]
  29200. 800c7f4: 60b9 str r1, [r7, #8]
  29201. 800c7f6: 607a str r2, [r7, #4]
  29202. Queue_t * const pxQueue = xQueue;
  29203. 800c7f8: 68fb ldr r3, [r7, #12]
  29204. 800c7fa: 617b str r3, [r7, #20]
  29205. will not actually cause the task to block, just place it on a blocked
  29206. list. It will not block until the scheduler is unlocked - at which
  29207. time a yield will be performed. If an item is added to the queue while
  29208. the queue is locked, and the calling task blocks on the queue, then the
  29209. calling task will be immediately unblocked when the queue is unlocked. */
  29210. prvLockQueue( pxQueue );
  29211. 800c7fc: f002 f924 bl 800ea48 <vPortEnterCritical>
  29212. 800c800: 697b ldr r3, [r7, #20]
  29213. 800c802: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  29214. 800c806: b25b sxtb r3, r3
  29215. 800c808: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  29216. 800c80c: d103 bne.n 800c816 <vQueueWaitForMessageRestricted+0x2a>
  29217. 800c80e: 697b ldr r3, [r7, #20]
  29218. 800c810: 2200 movs r2, #0
  29219. 800c812: f883 2044 strb.w r2, [r3, #68] @ 0x44
  29220. 800c816: 697b ldr r3, [r7, #20]
  29221. 800c818: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  29222. 800c81c: b25b sxtb r3, r3
  29223. 800c81e: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  29224. 800c822: d103 bne.n 800c82c <vQueueWaitForMessageRestricted+0x40>
  29225. 800c824: 697b ldr r3, [r7, #20]
  29226. 800c826: 2200 movs r2, #0
  29227. 800c828: f883 2045 strb.w r2, [r3, #69] @ 0x45
  29228. 800c82c: f002 f93e bl 800eaac <vPortExitCritical>
  29229. if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0U )
  29230. 800c830: 697b ldr r3, [r7, #20]
  29231. 800c832: 6b9b ldr r3, [r3, #56] @ 0x38
  29232. 800c834: 2b00 cmp r3, #0
  29233. 800c836: d106 bne.n 800c846 <vQueueWaitForMessageRestricted+0x5a>
  29234. {
  29235. /* There is nothing in the queue, block for the specified period. */
  29236. vTaskPlaceOnEventListRestricted( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait, xWaitIndefinitely );
  29237. 800c838: 697b ldr r3, [r7, #20]
  29238. 800c83a: 3324 adds r3, #36 @ 0x24
  29239. 800c83c: 687a ldr r2, [r7, #4]
  29240. 800c83e: 68b9 ldr r1, [r7, #8]
  29241. 800c840: 4618 mov r0, r3
  29242. 800c842: f000 fe39 bl 800d4b8 <vTaskPlaceOnEventListRestricted>
  29243. }
  29244. else
  29245. {
  29246. mtCOVERAGE_TEST_MARKER();
  29247. }
  29248. prvUnlockQueue( pxQueue );
  29249. 800c846: 6978 ldr r0, [r7, #20]
  29250. 800c848: f7ff ff26 bl 800c698 <prvUnlockQueue>
  29251. }
  29252. 800c84c: bf00 nop
  29253. 800c84e: 3718 adds r7, #24
  29254. 800c850: 46bd mov sp, r7
  29255. 800c852: bd80 pop {r7, pc}
  29256. 0800c854 <xStreamBufferSpacesAvailable>:
  29257. return xReturn;
  29258. }
  29259. /*-----------------------------------------------------------*/
  29260. size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer )
  29261. {
  29262. 800c854: b480 push {r7}
  29263. 800c856: b087 sub sp, #28
  29264. 800c858: af00 add r7, sp, #0
  29265. 800c85a: 6078 str r0, [r7, #4]
  29266. const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;
  29267. 800c85c: 687b ldr r3, [r7, #4]
  29268. 800c85e: 613b str r3, [r7, #16]
  29269. size_t xSpace;
  29270. configASSERT( pxStreamBuffer );
  29271. 800c860: 693b ldr r3, [r7, #16]
  29272. 800c862: 2b00 cmp r3, #0
  29273. 800c864: d10b bne.n 800c87e <xStreamBufferSpacesAvailable+0x2a>
  29274. __asm volatile
  29275. 800c866: f04f 0350 mov.w r3, #80 @ 0x50
  29276. 800c86a: f383 8811 msr BASEPRI, r3
  29277. 800c86e: f3bf 8f6f isb sy
  29278. 800c872: f3bf 8f4f dsb sy
  29279. 800c876: 60fb str r3, [r7, #12]
  29280. }
  29281. 800c878: bf00 nop
  29282. 800c87a: bf00 nop
  29283. 800c87c: e7fd b.n 800c87a <xStreamBufferSpacesAvailable+0x26>
  29284. xSpace = pxStreamBuffer->xLength + pxStreamBuffer->xTail;
  29285. 800c87e: 693b ldr r3, [r7, #16]
  29286. 800c880: 689a ldr r2, [r3, #8]
  29287. 800c882: 693b ldr r3, [r7, #16]
  29288. 800c884: 681b ldr r3, [r3, #0]
  29289. 800c886: 4413 add r3, r2
  29290. 800c888: 617b str r3, [r7, #20]
  29291. xSpace -= pxStreamBuffer->xHead;
  29292. 800c88a: 693b ldr r3, [r7, #16]
  29293. 800c88c: 685b ldr r3, [r3, #4]
  29294. 800c88e: 697a ldr r2, [r7, #20]
  29295. 800c890: 1ad3 subs r3, r2, r3
  29296. 800c892: 617b str r3, [r7, #20]
  29297. xSpace -= ( size_t ) 1;
  29298. 800c894: 697b ldr r3, [r7, #20]
  29299. 800c896: 3b01 subs r3, #1
  29300. 800c898: 617b str r3, [r7, #20]
  29301. if( xSpace >= pxStreamBuffer->xLength )
  29302. 800c89a: 693b ldr r3, [r7, #16]
  29303. 800c89c: 689b ldr r3, [r3, #8]
  29304. 800c89e: 697a ldr r2, [r7, #20]
  29305. 800c8a0: 429a cmp r2, r3
  29306. 800c8a2: d304 bcc.n 800c8ae <xStreamBufferSpacesAvailable+0x5a>
  29307. {
  29308. xSpace -= pxStreamBuffer->xLength;
  29309. 800c8a4: 693b ldr r3, [r7, #16]
  29310. 800c8a6: 689b ldr r3, [r3, #8]
  29311. 800c8a8: 697a ldr r2, [r7, #20]
  29312. 800c8aa: 1ad3 subs r3, r2, r3
  29313. 800c8ac: 617b str r3, [r7, #20]
  29314. else
  29315. {
  29316. mtCOVERAGE_TEST_MARKER();
  29317. }
  29318. return xSpace;
  29319. 800c8ae: 697b ldr r3, [r7, #20]
  29320. }
  29321. 800c8b0: 4618 mov r0, r3
  29322. 800c8b2: 371c adds r7, #28
  29323. 800c8b4: 46bd mov sp, r7
  29324. 800c8b6: f85d 7b04 ldr.w r7, [sp], #4
  29325. 800c8ba: 4770 bx lr
  29326. 0800c8bc <xStreamBufferSend>:
  29327. size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,
  29328. const void *pvTxData,
  29329. size_t xDataLengthBytes,
  29330. TickType_t xTicksToWait )
  29331. {
  29332. 800c8bc: b580 push {r7, lr}
  29333. 800c8be: b090 sub sp, #64 @ 0x40
  29334. 800c8c0: af02 add r7, sp, #8
  29335. 800c8c2: 60f8 str r0, [r7, #12]
  29336. 800c8c4: 60b9 str r1, [r7, #8]
  29337. 800c8c6: 607a str r2, [r7, #4]
  29338. 800c8c8: 603b str r3, [r7, #0]
  29339. StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;
  29340. 800c8ca: 68fb ldr r3, [r7, #12]
  29341. 800c8cc: 62fb str r3, [r7, #44] @ 0x2c
  29342. size_t xReturn, xSpace = 0;
  29343. 800c8ce: 2300 movs r3, #0
  29344. 800c8d0: 637b str r3, [r7, #52] @ 0x34
  29345. size_t xRequiredSpace = xDataLengthBytes;
  29346. 800c8d2: 687b ldr r3, [r7, #4]
  29347. 800c8d4: 633b str r3, [r7, #48] @ 0x30
  29348. TimeOut_t xTimeOut;
  29349. configASSERT( pvTxData );
  29350. 800c8d6: 68bb ldr r3, [r7, #8]
  29351. 800c8d8: 2b00 cmp r3, #0
  29352. 800c8da: d10b bne.n 800c8f4 <xStreamBufferSend+0x38>
  29353. __asm volatile
  29354. 800c8dc: f04f 0350 mov.w r3, #80 @ 0x50
  29355. 800c8e0: f383 8811 msr BASEPRI, r3
  29356. 800c8e4: f3bf 8f6f isb sy
  29357. 800c8e8: f3bf 8f4f dsb sy
  29358. 800c8ec: 627b str r3, [r7, #36] @ 0x24
  29359. }
  29360. 800c8ee: bf00 nop
  29361. 800c8f0: bf00 nop
  29362. 800c8f2: e7fd b.n 800c8f0 <xStreamBufferSend+0x34>
  29363. configASSERT( pxStreamBuffer );
  29364. 800c8f4: 6afb ldr r3, [r7, #44] @ 0x2c
  29365. 800c8f6: 2b00 cmp r3, #0
  29366. 800c8f8: d10b bne.n 800c912 <xStreamBufferSend+0x56>
  29367. __asm volatile
  29368. 800c8fa: f04f 0350 mov.w r3, #80 @ 0x50
  29369. 800c8fe: f383 8811 msr BASEPRI, r3
  29370. 800c902: f3bf 8f6f isb sy
  29371. 800c906: f3bf 8f4f dsb sy
  29372. 800c90a: 623b str r3, [r7, #32]
  29373. }
  29374. 800c90c: bf00 nop
  29375. 800c90e: bf00 nop
  29376. 800c910: e7fd b.n 800c90e <xStreamBufferSend+0x52>
  29377. /* This send function is used to write to both message buffers and stream
  29378. buffers. If this is a message buffer then the space needed must be
  29379. increased by the amount of bytes needed to store the length of the
  29380. message. */
  29381. if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )
  29382. 800c912: 6afb ldr r3, [r7, #44] @ 0x2c
  29383. 800c914: 7f1b ldrb r3, [r3, #28]
  29384. 800c916: f003 0301 and.w r3, r3, #1
  29385. 800c91a: 2b00 cmp r3, #0
  29386. 800c91c: d012 beq.n 800c944 <xStreamBufferSend+0x88>
  29387. {
  29388. xRequiredSpace += sbBYTES_TO_STORE_MESSAGE_LENGTH;
  29389. 800c91e: 6b3b ldr r3, [r7, #48] @ 0x30
  29390. 800c920: 3304 adds r3, #4
  29391. 800c922: 633b str r3, [r7, #48] @ 0x30
  29392. /* Overflow? */
  29393. configASSERT( xRequiredSpace > xDataLengthBytes );
  29394. 800c924: 6b3a ldr r2, [r7, #48] @ 0x30
  29395. 800c926: 687b ldr r3, [r7, #4]
  29396. 800c928: 429a cmp r2, r3
  29397. 800c92a: d80b bhi.n 800c944 <xStreamBufferSend+0x88>
  29398. __asm volatile
  29399. 800c92c: f04f 0350 mov.w r3, #80 @ 0x50
  29400. 800c930: f383 8811 msr BASEPRI, r3
  29401. 800c934: f3bf 8f6f isb sy
  29402. 800c938: f3bf 8f4f dsb sy
  29403. 800c93c: 61fb str r3, [r7, #28]
  29404. }
  29405. 800c93e: bf00 nop
  29406. 800c940: bf00 nop
  29407. 800c942: e7fd b.n 800c940 <xStreamBufferSend+0x84>
  29408. else
  29409. {
  29410. mtCOVERAGE_TEST_MARKER();
  29411. }
  29412. if( xTicksToWait != ( TickType_t ) 0 )
  29413. 800c944: 683b ldr r3, [r7, #0]
  29414. 800c946: 2b00 cmp r3, #0
  29415. 800c948: d03f beq.n 800c9ca <xStreamBufferSend+0x10e>
  29416. {
  29417. vTaskSetTimeOutState( &xTimeOut );
  29418. 800c94a: f107 0310 add.w r3, r7, #16
  29419. 800c94e: 4618 mov r0, r3
  29420. 800c950: f000 fe42 bl 800d5d8 <vTaskSetTimeOutState>
  29421. do
  29422. {
  29423. /* Wait until the required number of bytes are free in the message
  29424. buffer. */
  29425. taskENTER_CRITICAL();
  29426. 800c954: f002 f878 bl 800ea48 <vPortEnterCritical>
  29427. {
  29428. xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer );
  29429. 800c958: 6af8 ldr r0, [r7, #44] @ 0x2c
  29430. 800c95a: f7ff ff7b bl 800c854 <xStreamBufferSpacesAvailable>
  29431. 800c95e: 6378 str r0, [r7, #52] @ 0x34
  29432. if( xSpace < xRequiredSpace )
  29433. 800c960: 6b7a ldr r2, [r7, #52] @ 0x34
  29434. 800c962: 6b3b ldr r3, [r7, #48] @ 0x30
  29435. 800c964: 429a cmp r2, r3
  29436. 800c966: d218 bcs.n 800c99a <xStreamBufferSend+0xde>
  29437. {
  29438. /* Clear notification state as going to wait for space. */
  29439. ( void ) xTaskNotifyStateClear( NULL );
  29440. 800c968: 2000 movs r0, #0
  29441. 800c96a: f001 fb65 bl 800e038 <xTaskNotifyStateClear>
  29442. /* Should only be one writer. */
  29443. configASSERT( pxStreamBuffer->xTaskWaitingToSend == NULL );
  29444. 800c96e: 6afb ldr r3, [r7, #44] @ 0x2c
  29445. 800c970: 695b ldr r3, [r3, #20]
  29446. 800c972: 2b00 cmp r3, #0
  29447. 800c974: d00b beq.n 800c98e <xStreamBufferSend+0xd2>
  29448. __asm volatile
  29449. 800c976: f04f 0350 mov.w r3, #80 @ 0x50
  29450. 800c97a: f383 8811 msr BASEPRI, r3
  29451. 800c97e: f3bf 8f6f isb sy
  29452. 800c982: f3bf 8f4f dsb sy
  29453. 800c986: 61bb str r3, [r7, #24]
  29454. }
  29455. 800c988: bf00 nop
  29456. 800c98a: bf00 nop
  29457. 800c98c: e7fd b.n 800c98a <xStreamBufferSend+0xce>
  29458. pxStreamBuffer->xTaskWaitingToSend = xTaskGetCurrentTaskHandle();
  29459. 800c98e: f000 ffad bl 800d8ec <xTaskGetCurrentTaskHandle>
  29460. 800c992: 4602 mov r2, r0
  29461. 800c994: 6afb ldr r3, [r7, #44] @ 0x2c
  29462. 800c996: 615a str r2, [r3, #20]
  29463. 800c998: e002 b.n 800c9a0 <xStreamBufferSend+0xe4>
  29464. }
  29465. else
  29466. {
  29467. taskEXIT_CRITICAL();
  29468. 800c99a: f002 f887 bl 800eaac <vPortExitCritical>
  29469. break;
  29470. 800c99e: e014 b.n 800c9ca <xStreamBufferSend+0x10e>
  29471. }
  29472. }
  29473. taskEXIT_CRITICAL();
  29474. 800c9a0: f002 f884 bl 800eaac <vPortExitCritical>
  29475. traceBLOCKING_ON_STREAM_BUFFER_SEND( xStreamBuffer );
  29476. ( void ) xTaskNotifyWait( ( uint32_t ) 0, ( uint32_t ) 0, NULL, xTicksToWait );
  29477. 800c9a4: 683b ldr r3, [r7, #0]
  29478. 800c9a6: 2200 movs r2, #0
  29479. 800c9a8: 2100 movs r1, #0
  29480. 800c9aa: 2000 movs r0, #0
  29481. 800c9ac: f001 f93c bl 800dc28 <xTaskNotifyWait>
  29482. pxStreamBuffer->xTaskWaitingToSend = NULL;
  29483. 800c9b0: 6afb ldr r3, [r7, #44] @ 0x2c
  29484. 800c9b2: 2200 movs r2, #0
  29485. 800c9b4: 615a str r2, [r3, #20]
  29486. } while( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE );
  29487. 800c9b6: 463a mov r2, r7
  29488. 800c9b8: f107 0310 add.w r3, r7, #16
  29489. 800c9bc: 4611 mov r1, r2
  29490. 800c9be: 4618 mov r0, r3
  29491. 800c9c0: f000 fe48 bl 800d654 <xTaskCheckForTimeOut>
  29492. 800c9c4: 4603 mov r3, r0
  29493. 800c9c6: 2b00 cmp r3, #0
  29494. 800c9c8: d0c4 beq.n 800c954 <xStreamBufferSend+0x98>
  29495. else
  29496. {
  29497. mtCOVERAGE_TEST_MARKER();
  29498. }
  29499. if( xSpace == ( size_t ) 0 )
  29500. 800c9ca: 6b7b ldr r3, [r7, #52] @ 0x34
  29501. 800c9cc: 2b00 cmp r3, #0
  29502. 800c9ce: d103 bne.n 800c9d8 <xStreamBufferSend+0x11c>
  29503. {
  29504. xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer );
  29505. 800c9d0: 6af8 ldr r0, [r7, #44] @ 0x2c
  29506. 800c9d2: f7ff ff3f bl 800c854 <xStreamBufferSpacesAvailable>
  29507. 800c9d6: 6378 str r0, [r7, #52] @ 0x34
  29508. else
  29509. {
  29510. mtCOVERAGE_TEST_MARKER();
  29511. }
  29512. xReturn = prvWriteMessageToBuffer( pxStreamBuffer, pvTxData, xDataLengthBytes, xSpace, xRequiredSpace );
  29513. 800c9d8: 6b3b ldr r3, [r7, #48] @ 0x30
  29514. 800c9da: 9300 str r3, [sp, #0]
  29515. 800c9dc: 6b7b ldr r3, [r7, #52] @ 0x34
  29516. 800c9de: 687a ldr r2, [r7, #4]
  29517. 800c9e0: 68b9 ldr r1, [r7, #8]
  29518. 800c9e2: 6af8 ldr r0, [r7, #44] @ 0x2c
  29519. 800c9e4: f000 f823 bl 800ca2e <prvWriteMessageToBuffer>
  29520. 800c9e8: 62b8 str r0, [r7, #40] @ 0x28
  29521. if( xReturn > ( size_t ) 0 )
  29522. 800c9ea: 6abb ldr r3, [r7, #40] @ 0x28
  29523. 800c9ec: 2b00 cmp r3, #0
  29524. 800c9ee: d019 beq.n 800ca24 <xStreamBufferSend+0x168>
  29525. {
  29526. traceSTREAM_BUFFER_SEND( xStreamBuffer, xReturn );
  29527. /* Was a task waiting for the data? */
  29528. if( prvBytesInBuffer( pxStreamBuffer ) >= pxStreamBuffer->xTriggerLevelBytes )
  29529. 800c9f0: 6af8 ldr r0, [r7, #44] @ 0x2c
  29530. 800c9f2: f000 f8ce bl 800cb92 <prvBytesInBuffer>
  29531. 800c9f6: 4602 mov r2, r0
  29532. 800c9f8: 6afb ldr r3, [r7, #44] @ 0x2c
  29533. 800c9fa: 68db ldr r3, [r3, #12]
  29534. 800c9fc: 429a cmp r2, r3
  29535. 800c9fe: d311 bcc.n 800ca24 <xStreamBufferSend+0x168>
  29536. {
  29537. sbSEND_COMPLETED( pxStreamBuffer );
  29538. 800ca00: f000 fb4a bl 800d098 <vTaskSuspendAll>
  29539. 800ca04: 6afb ldr r3, [r7, #44] @ 0x2c
  29540. 800ca06: 691b ldr r3, [r3, #16]
  29541. 800ca08: 2b00 cmp r3, #0
  29542. 800ca0a: d009 beq.n 800ca20 <xStreamBufferSend+0x164>
  29543. 800ca0c: 6afb ldr r3, [r7, #44] @ 0x2c
  29544. 800ca0e: 6918 ldr r0, [r3, #16]
  29545. 800ca10: 2300 movs r3, #0
  29546. 800ca12: 2200 movs r2, #0
  29547. 800ca14: 2100 movs r1, #0
  29548. 800ca16: f001 f967 bl 800dce8 <xTaskGenericNotify>
  29549. 800ca1a: 6afb ldr r3, [r7, #44] @ 0x2c
  29550. 800ca1c: 2200 movs r2, #0
  29551. 800ca1e: 611a str r2, [r3, #16]
  29552. 800ca20: f000 fb48 bl 800d0b4 <xTaskResumeAll>
  29553. {
  29554. mtCOVERAGE_TEST_MARKER();
  29555. traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer );
  29556. }
  29557. return xReturn;
  29558. 800ca24: 6abb ldr r3, [r7, #40] @ 0x28
  29559. }
  29560. 800ca26: 4618 mov r0, r3
  29561. 800ca28: 3738 adds r7, #56 @ 0x38
  29562. 800ca2a: 46bd mov sp, r7
  29563. 800ca2c: bd80 pop {r7, pc}
  29564. 0800ca2e <prvWriteMessageToBuffer>:
  29565. static size_t prvWriteMessageToBuffer( StreamBuffer_t * const pxStreamBuffer,
  29566. const void * pvTxData,
  29567. size_t xDataLengthBytes,
  29568. size_t xSpace,
  29569. size_t xRequiredSpace )
  29570. {
  29571. 800ca2e: b580 push {r7, lr}
  29572. 800ca30: b086 sub sp, #24
  29573. 800ca32: af00 add r7, sp, #0
  29574. 800ca34: 60f8 str r0, [r7, #12]
  29575. 800ca36: 60b9 str r1, [r7, #8]
  29576. 800ca38: 607a str r2, [r7, #4]
  29577. 800ca3a: 603b str r3, [r7, #0]
  29578. BaseType_t xShouldWrite;
  29579. size_t xReturn;
  29580. if( xSpace == ( size_t ) 0 )
  29581. 800ca3c: 683b ldr r3, [r7, #0]
  29582. 800ca3e: 2b00 cmp r3, #0
  29583. 800ca40: d102 bne.n 800ca48 <prvWriteMessageToBuffer+0x1a>
  29584. {
  29585. /* Doesn't matter if this is a stream buffer or a message buffer, there
  29586. is no space to write. */
  29587. xShouldWrite = pdFALSE;
  29588. 800ca42: 2300 movs r3, #0
  29589. 800ca44: 617b str r3, [r7, #20]
  29590. 800ca46: e01d b.n 800ca84 <prvWriteMessageToBuffer+0x56>
  29591. }
  29592. else if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) == ( uint8_t ) 0 )
  29593. 800ca48: 68fb ldr r3, [r7, #12]
  29594. 800ca4a: 7f1b ldrb r3, [r3, #28]
  29595. 800ca4c: f003 0301 and.w r3, r3, #1
  29596. 800ca50: 2b00 cmp r3, #0
  29597. 800ca52: d108 bne.n 800ca66 <prvWriteMessageToBuffer+0x38>
  29598. {
  29599. /* This is a stream buffer, as opposed to a message buffer, so writing a
  29600. stream of bytes rather than discrete messages. Write as many bytes as
  29601. possible. */
  29602. xShouldWrite = pdTRUE;
  29603. 800ca54: 2301 movs r3, #1
  29604. 800ca56: 617b str r3, [r7, #20]
  29605. xDataLengthBytes = configMIN( xDataLengthBytes, xSpace );
  29606. 800ca58: 687a ldr r2, [r7, #4]
  29607. 800ca5a: 683b ldr r3, [r7, #0]
  29608. 800ca5c: 4293 cmp r3, r2
  29609. 800ca5e: bf28 it cs
  29610. 800ca60: 4613 movcs r3, r2
  29611. 800ca62: 607b str r3, [r7, #4]
  29612. 800ca64: e00e b.n 800ca84 <prvWriteMessageToBuffer+0x56>
  29613. }
  29614. else if( xSpace >= xRequiredSpace )
  29615. 800ca66: 683a ldr r2, [r7, #0]
  29616. 800ca68: 6a3b ldr r3, [r7, #32]
  29617. 800ca6a: 429a cmp r2, r3
  29618. 800ca6c: d308 bcc.n 800ca80 <prvWriteMessageToBuffer+0x52>
  29619. {
  29620. /* This is a message buffer, as opposed to a stream buffer, and there
  29621. is enough space to write both the message length and the message itself
  29622. into the buffer. Start by writing the length of the data, the data
  29623. itself will be written later in this function. */
  29624. xShouldWrite = pdTRUE;
  29625. 800ca6e: 2301 movs r3, #1
  29626. 800ca70: 617b str r3, [r7, #20]
  29627. ( void ) prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) &( xDataLengthBytes ), sbBYTES_TO_STORE_MESSAGE_LENGTH );
  29628. 800ca72: 1d3b adds r3, r7, #4
  29629. 800ca74: 2204 movs r2, #4
  29630. 800ca76: 4619 mov r1, r3
  29631. 800ca78: 68f8 ldr r0, [r7, #12]
  29632. 800ca7a: f000 f815 bl 800caa8 <prvWriteBytesToBuffer>
  29633. 800ca7e: e001 b.n 800ca84 <prvWriteMessageToBuffer+0x56>
  29634. }
  29635. else
  29636. {
  29637. /* There is space available, but not enough space. */
  29638. xShouldWrite = pdFALSE;
  29639. 800ca80: 2300 movs r3, #0
  29640. 800ca82: 617b str r3, [r7, #20]
  29641. }
  29642. if( xShouldWrite != pdFALSE )
  29643. 800ca84: 697b ldr r3, [r7, #20]
  29644. 800ca86: 2b00 cmp r3, #0
  29645. 800ca88: d007 beq.n 800ca9a <prvWriteMessageToBuffer+0x6c>
  29646. {
  29647. /* Writes the data itself. */
  29648. xReturn = prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) pvTxData, xDataLengthBytes ); /*lint !e9079 Storage buffer is implemented as uint8_t for ease of sizing, alighment and access. */
  29649. 800ca8a: 687b ldr r3, [r7, #4]
  29650. 800ca8c: 461a mov r2, r3
  29651. 800ca8e: 68b9 ldr r1, [r7, #8]
  29652. 800ca90: 68f8 ldr r0, [r7, #12]
  29653. 800ca92: f000 f809 bl 800caa8 <prvWriteBytesToBuffer>
  29654. 800ca96: 6138 str r0, [r7, #16]
  29655. 800ca98: e001 b.n 800ca9e <prvWriteMessageToBuffer+0x70>
  29656. }
  29657. else
  29658. {
  29659. xReturn = 0;
  29660. 800ca9a: 2300 movs r3, #0
  29661. 800ca9c: 613b str r3, [r7, #16]
  29662. }
  29663. return xReturn;
  29664. 800ca9e: 693b ldr r3, [r7, #16]
  29665. }
  29666. 800caa0: 4618 mov r0, r3
  29667. 800caa2: 3718 adds r7, #24
  29668. 800caa4: 46bd mov sp, r7
  29669. 800caa6: bd80 pop {r7, pc}
  29670. 0800caa8 <prvWriteBytesToBuffer>:
  29671. return xReturn;
  29672. }
  29673. /*-----------------------------------------------------------*/
  29674. static size_t prvWriteBytesToBuffer( StreamBuffer_t * const pxStreamBuffer, const uint8_t *pucData, size_t xCount )
  29675. {
  29676. 800caa8: b580 push {r7, lr}
  29677. 800caaa: b08a sub sp, #40 @ 0x28
  29678. 800caac: af00 add r7, sp, #0
  29679. 800caae: 60f8 str r0, [r7, #12]
  29680. 800cab0: 60b9 str r1, [r7, #8]
  29681. 800cab2: 607a str r2, [r7, #4]
  29682. size_t xNextHead, xFirstLength;
  29683. configASSERT( xCount > ( size_t ) 0 );
  29684. 800cab4: 687b ldr r3, [r7, #4]
  29685. 800cab6: 2b00 cmp r3, #0
  29686. 800cab8: d10b bne.n 800cad2 <prvWriteBytesToBuffer+0x2a>
  29687. __asm volatile
  29688. 800caba: f04f 0350 mov.w r3, #80 @ 0x50
  29689. 800cabe: f383 8811 msr BASEPRI, r3
  29690. 800cac2: f3bf 8f6f isb sy
  29691. 800cac6: f3bf 8f4f dsb sy
  29692. 800caca: 61fb str r3, [r7, #28]
  29693. }
  29694. 800cacc: bf00 nop
  29695. 800cace: bf00 nop
  29696. 800cad0: e7fd b.n 800cace <prvWriteBytesToBuffer+0x26>
  29697. xNextHead = pxStreamBuffer->xHead;
  29698. 800cad2: 68fb ldr r3, [r7, #12]
  29699. 800cad4: 685b ldr r3, [r3, #4]
  29700. 800cad6: 627b str r3, [r7, #36] @ 0x24
  29701. /* Calculate the number of bytes that can be added in the first write -
  29702. which may be less than the total number of bytes that need to be added if
  29703. the buffer will wrap back to the beginning. */
  29704. xFirstLength = configMIN( pxStreamBuffer->xLength - xNextHead, xCount );
  29705. 800cad8: 68fb ldr r3, [r7, #12]
  29706. 800cada: 689a ldr r2, [r3, #8]
  29707. 800cadc: 6a7b ldr r3, [r7, #36] @ 0x24
  29708. 800cade: 1ad3 subs r3, r2, r3
  29709. 800cae0: 687a ldr r2, [r7, #4]
  29710. 800cae2: 4293 cmp r3, r2
  29711. 800cae4: bf28 it cs
  29712. 800cae6: 4613 movcs r3, r2
  29713. 800cae8: 623b str r3, [r7, #32]
  29714. /* Write as many bytes as can be written in the first write. */
  29715. configASSERT( ( xNextHead + xFirstLength ) <= pxStreamBuffer->xLength );
  29716. 800caea: 6a7a ldr r2, [r7, #36] @ 0x24
  29717. 800caec: 6a3b ldr r3, [r7, #32]
  29718. 800caee: 441a add r2, r3
  29719. 800caf0: 68fb ldr r3, [r7, #12]
  29720. 800caf2: 689b ldr r3, [r3, #8]
  29721. 800caf4: 429a cmp r2, r3
  29722. 800caf6: d90b bls.n 800cb10 <prvWriteBytesToBuffer+0x68>
  29723. __asm volatile
  29724. 800caf8: f04f 0350 mov.w r3, #80 @ 0x50
  29725. 800cafc: f383 8811 msr BASEPRI, r3
  29726. 800cb00: f3bf 8f6f isb sy
  29727. 800cb04: f3bf 8f4f dsb sy
  29728. 800cb08: 61bb str r3, [r7, #24]
  29729. }
  29730. 800cb0a: bf00 nop
  29731. 800cb0c: bf00 nop
  29732. 800cb0e: e7fd b.n 800cb0c <prvWriteBytesToBuffer+0x64>
  29733. ( void ) memcpy( ( void* ) ( &( pxStreamBuffer->pucBuffer[ xNextHead ] ) ), ( const void * ) pucData, xFirstLength ); /*lint !e9087 memcpy() requires void *. */
  29734. 800cb10: 68fb ldr r3, [r7, #12]
  29735. 800cb12: 699a ldr r2, [r3, #24]
  29736. 800cb14: 6a7b ldr r3, [r7, #36] @ 0x24
  29737. 800cb16: 4413 add r3, r2
  29738. 800cb18: 6a3a ldr r2, [r7, #32]
  29739. 800cb1a: 68b9 ldr r1, [r7, #8]
  29740. 800cb1c: 4618 mov r0, r3
  29741. 800cb1e: f002 fc8c bl 800f43a <memcpy>
  29742. /* If the number of bytes written was less than the number that could be
  29743. written in the first write... */
  29744. if( xCount > xFirstLength )
  29745. 800cb22: 687a ldr r2, [r7, #4]
  29746. 800cb24: 6a3b ldr r3, [r7, #32]
  29747. 800cb26: 429a cmp r2, r3
  29748. 800cb28: d91d bls.n 800cb66 <prvWriteBytesToBuffer+0xbe>
  29749. {
  29750. /* ...then write the remaining bytes to the start of the buffer. */
  29751. configASSERT( ( xCount - xFirstLength ) <= pxStreamBuffer->xLength );
  29752. 800cb2a: 687a ldr r2, [r7, #4]
  29753. 800cb2c: 6a3b ldr r3, [r7, #32]
  29754. 800cb2e: 1ad2 subs r2, r2, r3
  29755. 800cb30: 68fb ldr r3, [r7, #12]
  29756. 800cb32: 689b ldr r3, [r3, #8]
  29757. 800cb34: 429a cmp r2, r3
  29758. 800cb36: d90b bls.n 800cb50 <prvWriteBytesToBuffer+0xa8>
  29759. __asm volatile
  29760. 800cb38: f04f 0350 mov.w r3, #80 @ 0x50
  29761. 800cb3c: f383 8811 msr BASEPRI, r3
  29762. 800cb40: f3bf 8f6f isb sy
  29763. 800cb44: f3bf 8f4f dsb sy
  29764. 800cb48: 617b str r3, [r7, #20]
  29765. }
  29766. 800cb4a: bf00 nop
  29767. 800cb4c: bf00 nop
  29768. 800cb4e: e7fd b.n 800cb4c <prvWriteBytesToBuffer+0xa4>
  29769. ( void ) memcpy( ( void * ) pxStreamBuffer->pucBuffer, ( const void * ) &( pucData[ xFirstLength ] ), xCount - xFirstLength ); /*lint !e9087 memcpy() requires void *. */
  29770. 800cb50: 68fb ldr r3, [r7, #12]
  29771. 800cb52: 6998 ldr r0, [r3, #24]
  29772. 800cb54: 68ba ldr r2, [r7, #8]
  29773. 800cb56: 6a3b ldr r3, [r7, #32]
  29774. 800cb58: 18d1 adds r1, r2, r3
  29775. 800cb5a: 687a ldr r2, [r7, #4]
  29776. 800cb5c: 6a3b ldr r3, [r7, #32]
  29777. 800cb5e: 1ad3 subs r3, r2, r3
  29778. 800cb60: 461a mov r2, r3
  29779. 800cb62: f002 fc6a bl 800f43a <memcpy>
  29780. else
  29781. {
  29782. mtCOVERAGE_TEST_MARKER();
  29783. }
  29784. xNextHead += xCount;
  29785. 800cb66: 6a7a ldr r2, [r7, #36] @ 0x24
  29786. 800cb68: 687b ldr r3, [r7, #4]
  29787. 800cb6a: 4413 add r3, r2
  29788. 800cb6c: 627b str r3, [r7, #36] @ 0x24
  29789. if( xNextHead >= pxStreamBuffer->xLength )
  29790. 800cb6e: 68fb ldr r3, [r7, #12]
  29791. 800cb70: 689b ldr r3, [r3, #8]
  29792. 800cb72: 6a7a ldr r2, [r7, #36] @ 0x24
  29793. 800cb74: 429a cmp r2, r3
  29794. 800cb76: d304 bcc.n 800cb82 <prvWriteBytesToBuffer+0xda>
  29795. {
  29796. xNextHead -= pxStreamBuffer->xLength;
  29797. 800cb78: 68fb ldr r3, [r7, #12]
  29798. 800cb7a: 689b ldr r3, [r3, #8]
  29799. 800cb7c: 6a7a ldr r2, [r7, #36] @ 0x24
  29800. 800cb7e: 1ad3 subs r3, r2, r3
  29801. 800cb80: 627b str r3, [r7, #36] @ 0x24
  29802. else
  29803. {
  29804. mtCOVERAGE_TEST_MARKER();
  29805. }
  29806. pxStreamBuffer->xHead = xNextHead;
  29807. 800cb82: 68fb ldr r3, [r7, #12]
  29808. 800cb84: 6a7a ldr r2, [r7, #36] @ 0x24
  29809. 800cb86: 605a str r2, [r3, #4]
  29810. return xCount;
  29811. 800cb88: 687b ldr r3, [r7, #4]
  29812. }
  29813. 800cb8a: 4618 mov r0, r3
  29814. 800cb8c: 3728 adds r7, #40 @ 0x28
  29815. 800cb8e: 46bd mov sp, r7
  29816. 800cb90: bd80 pop {r7, pc}
  29817. 0800cb92 <prvBytesInBuffer>:
  29818. return xCount;
  29819. }
  29820. /*-----------------------------------------------------------*/
  29821. static size_t prvBytesInBuffer( const StreamBuffer_t * const pxStreamBuffer )
  29822. {
  29823. 800cb92: b480 push {r7}
  29824. 800cb94: b085 sub sp, #20
  29825. 800cb96: af00 add r7, sp, #0
  29826. 800cb98: 6078 str r0, [r7, #4]
  29827. /* Returns the distance between xTail and xHead. */
  29828. size_t xCount;
  29829. xCount = pxStreamBuffer->xLength + pxStreamBuffer->xHead;
  29830. 800cb9a: 687b ldr r3, [r7, #4]
  29831. 800cb9c: 689a ldr r2, [r3, #8]
  29832. 800cb9e: 687b ldr r3, [r7, #4]
  29833. 800cba0: 685b ldr r3, [r3, #4]
  29834. 800cba2: 4413 add r3, r2
  29835. 800cba4: 60fb str r3, [r7, #12]
  29836. xCount -= pxStreamBuffer->xTail;
  29837. 800cba6: 687b ldr r3, [r7, #4]
  29838. 800cba8: 681b ldr r3, [r3, #0]
  29839. 800cbaa: 68fa ldr r2, [r7, #12]
  29840. 800cbac: 1ad3 subs r3, r2, r3
  29841. 800cbae: 60fb str r3, [r7, #12]
  29842. if ( xCount >= pxStreamBuffer->xLength )
  29843. 800cbb0: 687b ldr r3, [r7, #4]
  29844. 800cbb2: 689b ldr r3, [r3, #8]
  29845. 800cbb4: 68fa ldr r2, [r7, #12]
  29846. 800cbb6: 429a cmp r2, r3
  29847. 800cbb8: d304 bcc.n 800cbc4 <prvBytesInBuffer+0x32>
  29848. {
  29849. xCount -= pxStreamBuffer->xLength;
  29850. 800cbba: 687b ldr r3, [r7, #4]
  29851. 800cbbc: 689b ldr r3, [r3, #8]
  29852. 800cbbe: 68fa ldr r2, [r7, #12]
  29853. 800cbc0: 1ad3 subs r3, r2, r3
  29854. 800cbc2: 60fb str r3, [r7, #12]
  29855. else
  29856. {
  29857. mtCOVERAGE_TEST_MARKER();
  29858. }
  29859. return xCount;
  29860. 800cbc4: 68fb ldr r3, [r7, #12]
  29861. }
  29862. 800cbc6: 4618 mov r0, r3
  29863. 800cbc8: 3714 adds r7, #20
  29864. 800cbca: 46bd mov sp, r7
  29865. 800cbcc: f85d 7b04 ldr.w r7, [sp], #4
  29866. 800cbd0: 4770 bx lr
  29867. 0800cbd2 <xTaskCreateStatic>:
  29868. const uint32_t ulStackDepth,
  29869. void * const pvParameters,
  29870. UBaseType_t uxPriority,
  29871. StackType_t * const puxStackBuffer,
  29872. StaticTask_t * const pxTaskBuffer )
  29873. {
  29874. 800cbd2: b580 push {r7, lr}
  29875. 800cbd4: b08e sub sp, #56 @ 0x38
  29876. 800cbd6: af04 add r7, sp, #16
  29877. 800cbd8: 60f8 str r0, [r7, #12]
  29878. 800cbda: 60b9 str r1, [r7, #8]
  29879. 800cbdc: 607a str r2, [r7, #4]
  29880. 800cbde: 603b str r3, [r7, #0]
  29881. TCB_t *pxNewTCB;
  29882. TaskHandle_t xReturn;
  29883. configASSERT( puxStackBuffer != NULL );
  29884. 800cbe0: 6b7b ldr r3, [r7, #52] @ 0x34
  29885. 800cbe2: 2b00 cmp r3, #0
  29886. 800cbe4: d10b bne.n 800cbfe <xTaskCreateStatic+0x2c>
  29887. __asm volatile
  29888. 800cbe6: f04f 0350 mov.w r3, #80 @ 0x50
  29889. 800cbea: f383 8811 msr BASEPRI, r3
  29890. 800cbee: f3bf 8f6f isb sy
  29891. 800cbf2: f3bf 8f4f dsb sy
  29892. 800cbf6: 623b str r3, [r7, #32]
  29893. }
  29894. 800cbf8: bf00 nop
  29895. 800cbfa: bf00 nop
  29896. 800cbfc: e7fd b.n 800cbfa <xTaskCreateStatic+0x28>
  29897. configASSERT( pxTaskBuffer != NULL );
  29898. 800cbfe: 6bbb ldr r3, [r7, #56] @ 0x38
  29899. 800cc00: 2b00 cmp r3, #0
  29900. 800cc02: d10b bne.n 800cc1c <xTaskCreateStatic+0x4a>
  29901. __asm volatile
  29902. 800cc04: f04f 0350 mov.w r3, #80 @ 0x50
  29903. 800cc08: f383 8811 msr BASEPRI, r3
  29904. 800cc0c: f3bf 8f6f isb sy
  29905. 800cc10: f3bf 8f4f dsb sy
  29906. 800cc14: 61fb str r3, [r7, #28]
  29907. }
  29908. 800cc16: bf00 nop
  29909. 800cc18: bf00 nop
  29910. 800cc1a: e7fd b.n 800cc18 <xTaskCreateStatic+0x46>
  29911. #if( configASSERT_DEFINED == 1 )
  29912. {
  29913. /* Sanity check that the size of the structure used to declare a
  29914. variable of type StaticTask_t equals the size of the real task
  29915. structure. */
  29916. volatile size_t xSize = sizeof( StaticTask_t );
  29917. 800cc1c: 23a8 movs r3, #168 @ 0xa8
  29918. 800cc1e: 613b str r3, [r7, #16]
  29919. configASSERT( xSize == sizeof( TCB_t ) );
  29920. 800cc20: 693b ldr r3, [r7, #16]
  29921. 800cc22: 2ba8 cmp r3, #168 @ 0xa8
  29922. 800cc24: d00b beq.n 800cc3e <xTaskCreateStatic+0x6c>
  29923. __asm volatile
  29924. 800cc26: f04f 0350 mov.w r3, #80 @ 0x50
  29925. 800cc2a: f383 8811 msr BASEPRI, r3
  29926. 800cc2e: f3bf 8f6f isb sy
  29927. 800cc32: f3bf 8f4f dsb sy
  29928. 800cc36: 61bb str r3, [r7, #24]
  29929. }
  29930. 800cc38: bf00 nop
  29931. 800cc3a: bf00 nop
  29932. 800cc3c: e7fd b.n 800cc3a <xTaskCreateStatic+0x68>
  29933. ( void ) xSize; /* Prevent lint warning when configASSERT() is not used. */
  29934. 800cc3e: 693b ldr r3, [r7, #16]
  29935. }
  29936. #endif /* configASSERT_DEFINED */
  29937. if( ( pxTaskBuffer != NULL ) && ( puxStackBuffer != NULL ) )
  29938. 800cc40: 6bbb ldr r3, [r7, #56] @ 0x38
  29939. 800cc42: 2b00 cmp r3, #0
  29940. 800cc44: d01e beq.n 800cc84 <xTaskCreateStatic+0xb2>
  29941. 800cc46: 6b7b ldr r3, [r7, #52] @ 0x34
  29942. 800cc48: 2b00 cmp r3, #0
  29943. 800cc4a: d01b beq.n 800cc84 <xTaskCreateStatic+0xb2>
  29944. {
  29945. /* The memory used for the task's TCB and stack are passed into this
  29946. function - use them. */
  29947. 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. */
  29948. 800cc4c: 6bbb ldr r3, [r7, #56] @ 0x38
  29949. 800cc4e: 627b str r3, [r7, #36] @ 0x24
  29950. pxNewTCB->pxStack = ( StackType_t * ) puxStackBuffer;
  29951. 800cc50: 6a7b ldr r3, [r7, #36] @ 0x24
  29952. 800cc52: 6b7a ldr r2, [r7, #52] @ 0x34
  29953. 800cc54: 631a str r2, [r3, #48] @ 0x30
  29954. #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 !e9029 Macro has been consolidated for readability reasons. */
  29955. {
  29956. /* Tasks can be created statically or dynamically, so note this
  29957. task was created statically in case the task is later deleted. */
  29958. pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_AND_TCB;
  29959. 800cc56: 6a7b ldr r3, [r7, #36] @ 0x24
  29960. 800cc58: 2202 movs r2, #2
  29961. 800cc5a: f883 20a5 strb.w r2, [r3, #165] @ 0xa5
  29962. }
  29963. #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */
  29964. prvInitialiseNewTask( pxTaskCode, pcName, ulStackDepth, pvParameters, uxPriority, &xReturn, pxNewTCB, NULL );
  29965. 800cc5e: 2300 movs r3, #0
  29966. 800cc60: 9303 str r3, [sp, #12]
  29967. 800cc62: 6a7b ldr r3, [r7, #36] @ 0x24
  29968. 800cc64: 9302 str r3, [sp, #8]
  29969. 800cc66: f107 0314 add.w r3, r7, #20
  29970. 800cc6a: 9301 str r3, [sp, #4]
  29971. 800cc6c: 6b3b ldr r3, [r7, #48] @ 0x30
  29972. 800cc6e: 9300 str r3, [sp, #0]
  29973. 800cc70: 683b ldr r3, [r7, #0]
  29974. 800cc72: 687a ldr r2, [r7, #4]
  29975. 800cc74: 68b9 ldr r1, [r7, #8]
  29976. 800cc76: 68f8 ldr r0, [r7, #12]
  29977. 800cc78: f000 f850 bl 800cd1c <prvInitialiseNewTask>
  29978. prvAddNewTaskToReadyList( pxNewTCB );
  29979. 800cc7c: 6a78 ldr r0, [r7, #36] @ 0x24
  29980. 800cc7e: f000 f8f5 bl 800ce6c <prvAddNewTaskToReadyList>
  29981. 800cc82: e001 b.n 800cc88 <xTaskCreateStatic+0xb6>
  29982. }
  29983. else
  29984. {
  29985. xReturn = NULL;
  29986. 800cc84: 2300 movs r3, #0
  29987. 800cc86: 617b str r3, [r7, #20]
  29988. }
  29989. return xReturn;
  29990. 800cc88: 697b ldr r3, [r7, #20]
  29991. }
  29992. 800cc8a: 4618 mov r0, r3
  29993. 800cc8c: 3728 adds r7, #40 @ 0x28
  29994. 800cc8e: 46bd mov sp, r7
  29995. 800cc90: bd80 pop {r7, pc}
  29996. 0800cc92 <xTaskCreate>:
  29997. const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
  29998. const configSTACK_DEPTH_TYPE usStackDepth,
  29999. void * const pvParameters,
  30000. UBaseType_t uxPriority,
  30001. TaskHandle_t * const pxCreatedTask )
  30002. {
  30003. 800cc92: b580 push {r7, lr}
  30004. 800cc94: b08c sub sp, #48 @ 0x30
  30005. 800cc96: af04 add r7, sp, #16
  30006. 800cc98: 60f8 str r0, [r7, #12]
  30007. 800cc9a: 60b9 str r1, [r7, #8]
  30008. 800cc9c: 603b str r3, [r7, #0]
  30009. 800cc9e: 4613 mov r3, r2
  30010. 800cca0: 80fb strh r3, [r7, #6]
  30011. #else /* portSTACK_GROWTH */
  30012. {
  30013. StackType_t *pxStack;
  30014. /* Allocate space for the stack used by the task being created. */
  30015. 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. */
  30016. 800cca2: 88fb ldrh r3, [r7, #6]
  30017. 800cca4: 009b lsls r3, r3, #2
  30018. 800cca6: 4618 mov r0, r3
  30019. 800cca8: f001 fff0 bl 800ec8c <pvPortMalloc>
  30020. 800ccac: 6178 str r0, [r7, #20]
  30021. if( pxStack != NULL )
  30022. 800ccae: 697b ldr r3, [r7, #20]
  30023. 800ccb0: 2b00 cmp r3, #0
  30024. 800ccb2: d00e beq.n 800ccd2 <xTaskCreate+0x40>
  30025. {
  30026. /* Allocate space for the TCB. */
  30027. 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. */
  30028. 800ccb4: 20a8 movs r0, #168 @ 0xa8
  30029. 800ccb6: f001 ffe9 bl 800ec8c <pvPortMalloc>
  30030. 800ccba: 61f8 str r0, [r7, #28]
  30031. if( pxNewTCB != NULL )
  30032. 800ccbc: 69fb ldr r3, [r7, #28]
  30033. 800ccbe: 2b00 cmp r3, #0
  30034. 800ccc0: d003 beq.n 800ccca <xTaskCreate+0x38>
  30035. {
  30036. /* Store the stack location in the TCB. */
  30037. pxNewTCB->pxStack = pxStack;
  30038. 800ccc2: 69fb ldr r3, [r7, #28]
  30039. 800ccc4: 697a ldr r2, [r7, #20]
  30040. 800ccc6: 631a str r2, [r3, #48] @ 0x30
  30041. 800ccc8: e005 b.n 800ccd6 <xTaskCreate+0x44>
  30042. }
  30043. else
  30044. {
  30045. /* The stack cannot be used as the TCB was not created. Free
  30046. it again. */
  30047. vPortFree( pxStack );
  30048. 800ccca: 6978 ldr r0, [r7, #20]
  30049. 800cccc: f002 f8ac bl 800ee28 <vPortFree>
  30050. 800ccd0: e001 b.n 800ccd6 <xTaskCreate+0x44>
  30051. }
  30052. }
  30053. else
  30054. {
  30055. pxNewTCB = NULL;
  30056. 800ccd2: 2300 movs r3, #0
  30057. 800ccd4: 61fb str r3, [r7, #28]
  30058. }
  30059. }
  30060. #endif /* portSTACK_GROWTH */
  30061. if( pxNewTCB != NULL )
  30062. 800ccd6: 69fb ldr r3, [r7, #28]
  30063. 800ccd8: 2b00 cmp r3, #0
  30064. 800ccda: d017 beq.n 800cd0c <xTaskCreate+0x7a>
  30065. {
  30066. #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e9029 !e731 Macro has been consolidated for readability reasons. */
  30067. {
  30068. /* Tasks can be created statically or dynamically, so note this
  30069. task was created dynamically in case it is later deleted. */
  30070. pxNewTCB->ucStaticallyAllocated = tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB;
  30071. 800ccdc: 69fb ldr r3, [r7, #28]
  30072. 800ccde: 2200 movs r2, #0
  30073. 800cce0: f883 20a5 strb.w r2, [r3, #165] @ 0xa5
  30074. }
  30075. #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */
  30076. prvInitialiseNewTask( pxTaskCode, pcName, ( uint32_t ) usStackDepth, pvParameters, uxPriority, pxCreatedTask, pxNewTCB, NULL );
  30077. 800cce4: 88fa ldrh r2, [r7, #6]
  30078. 800cce6: 2300 movs r3, #0
  30079. 800cce8: 9303 str r3, [sp, #12]
  30080. 800ccea: 69fb ldr r3, [r7, #28]
  30081. 800ccec: 9302 str r3, [sp, #8]
  30082. 800ccee: 6afb ldr r3, [r7, #44] @ 0x2c
  30083. 800ccf0: 9301 str r3, [sp, #4]
  30084. 800ccf2: 6abb ldr r3, [r7, #40] @ 0x28
  30085. 800ccf4: 9300 str r3, [sp, #0]
  30086. 800ccf6: 683b ldr r3, [r7, #0]
  30087. 800ccf8: 68b9 ldr r1, [r7, #8]
  30088. 800ccfa: 68f8 ldr r0, [r7, #12]
  30089. 800ccfc: f000 f80e bl 800cd1c <prvInitialiseNewTask>
  30090. prvAddNewTaskToReadyList( pxNewTCB );
  30091. 800cd00: 69f8 ldr r0, [r7, #28]
  30092. 800cd02: f000 f8b3 bl 800ce6c <prvAddNewTaskToReadyList>
  30093. xReturn = pdPASS;
  30094. 800cd06: 2301 movs r3, #1
  30095. 800cd08: 61bb str r3, [r7, #24]
  30096. 800cd0a: e002 b.n 800cd12 <xTaskCreate+0x80>
  30097. }
  30098. else
  30099. {
  30100. xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;
  30101. 800cd0c: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  30102. 800cd10: 61bb str r3, [r7, #24]
  30103. }
  30104. return xReturn;
  30105. 800cd12: 69bb ldr r3, [r7, #24]
  30106. }
  30107. 800cd14: 4618 mov r0, r3
  30108. 800cd16: 3720 adds r7, #32
  30109. 800cd18: 46bd mov sp, r7
  30110. 800cd1a: bd80 pop {r7, pc}
  30111. 0800cd1c <prvInitialiseNewTask>:
  30112. void * const pvParameters,
  30113. UBaseType_t uxPriority,
  30114. TaskHandle_t * const pxCreatedTask,
  30115. TCB_t *pxNewTCB,
  30116. const MemoryRegion_t * const xRegions )
  30117. {
  30118. 800cd1c: b580 push {r7, lr}
  30119. 800cd1e: b088 sub sp, #32
  30120. 800cd20: af00 add r7, sp, #0
  30121. 800cd22: 60f8 str r0, [r7, #12]
  30122. 800cd24: 60b9 str r1, [r7, #8]
  30123. 800cd26: 607a str r2, [r7, #4]
  30124. 800cd28: 603b str r3, [r7, #0]
  30125. /* Avoid dependency on memset() if it is not required. */
  30126. #if( tskSET_NEW_STACKS_TO_KNOWN_VALUE == 1 )
  30127. {
  30128. /* Fill the stack with a known value to assist debugging. */
  30129. ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) ulStackDepth * sizeof( StackType_t ) );
  30130. 800cd2a: 6b3b ldr r3, [r7, #48] @ 0x30
  30131. 800cd2c: 6b18 ldr r0, [r3, #48] @ 0x30
  30132. 800cd2e: 687b ldr r3, [r7, #4]
  30133. 800cd30: 009b lsls r3, r3, #2
  30134. 800cd32: 461a mov r2, r3
  30135. 800cd34: 21a5 movs r1, #165 @ 0xa5
  30136. 800cd36: f002 faae bl 800f296 <memset>
  30137. grows from high memory to low (as per the 80x86) or vice versa.
  30138. portSTACK_GROWTH is used to make the result positive or negative as required
  30139. by the port. */
  30140. #if( portSTACK_GROWTH < 0 )
  30141. {
  30142. pxTopOfStack = &( pxNewTCB->pxStack[ ulStackDepth - ( uint32_t ) 1 ] );
  30143. 800cd3a: 6b3b ldr r3, [r7, #48] @ 0x30
  30144. 800cd3c: 6b1a ldr r2, [r3, #48] @ 0x30
  30145. 800cd3e: 6879 ldr r1, [r7, #4]
  30146. 800cd40: f06f 4340 mvn.w r3, #3221225472 @ 0xc0000000
  30147. 800cd44: 440b add r3, r1
  30148. 800cd46: 009b lsls r3, r3, #2
  30149. 800cd48: 4413 add r3, r2
  30150. 800cd4a: 61bb str r3, [r7, #24]
  30151. 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(). */
  30152. 800cd4c: 69bb ldr r3, [r7, #24]
  30153. 800cd4e: f023 0307 bic.w r3, r3, #7
  30154. 800cd52: 61bb str r3, [r7, #24]
  30155. /* Check the alignment of the calculated top of stack is correct. */
  30156. configASSERT( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack & ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) == 0UL ) );
  30157. 800cd54: 69bb ldr r3, [r7, #24]
  30158. 800cd56: f003 0307 and.w r3, r3, #7
  30159. 800cd5a: 2b00 cmp r3, #0
  30160. 800cd5c: d00b beq.n 800cd76 <prvInitialiseNewTask+0x5a>
  30161. __asm volatile
  30162. 800cd5e: f04f 0350 mov.w r3, #80 @ 0x50
  30163. 800cd62: f383 8811 msr BASEPRI, r3
  30164. 800cd66: f3bf 8f6f isb sy
  30165. 800cd6a: f3bf 8f4f dsb sy
  30166. 800cd6e: 617b str r3, [r7, #20]
  30167. }
  30168. 800cd70: bf00 nop
  30169. 800cd72: bf00 nop
  30170. 800cd74: e7fd b.n 800cd72 <prvInitialiseNewTask+0x56>
  30171. pxNewTCB->pxEndOfStack = pxNewTCB->pxStack + ( ulStackDepth - ( uint32_t ) 1 );
  30172. }
  30173. #endif /* portSTACK_GROWTH */
  30174. /* Store the task name in the TCB. */
  30175. if( pcName != NULL )
  30176. 800cd76: 68bb ldr r3, [r7, #8]
  30177. 800cd78: 2b00 cmp r3, #0
  30178. 800cd7a: d01f beq.n 800cdbc <prvInitialiseNewTask+0xa0>
  30179. {
  30180. for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )
  30181. 800cd7c: 2300 movs r3, #0
  30182. 800cd7e: 61fb str r3, [r7, #28]
  30183. 800cd80: e012 b.n 800cda8 <prvInitialiseNewTask+0x8c>
  30184. {
  30185. pxNewTCB->pcTaskName[ x ] = pcName[ x ];
  30186. 800cd82: 68ba ldr r2, [r7, #8]
  30187. 800cd84: 69fb ldr r3, [r7, #28]
  30188. 800cd86: 4413 add r3, r2
  30189. 800cd88: 7819 ldrb r1, [r3, #0]
  30190. 800cd8a: 6b3a ldr r2, [r7, #48] @ 0x30
  30191. 800cd8c: 69fb ldr r3, [r7, #28]
  30192. 800cd8e: 4413 add r3, r2
  30193. 800cd90: 3334 adds r3, #52 @ 0x34
  30194. 800cd92: 460a mov r2, r1
  30195. 800cd94: 701a strb r2, [r3, #0]
  30196. /* Don't copy all configMAX_TASK_NAME_LEN if the string is shorter than
  30197. configMAX_TASK_NAME_LEN characters just in case the memory after the
  30198. string is not accessible (extremely unlikely). */
  30199. if( pcName[ x ] == ( char ) 0x00 )
  30200. 800cd96: 68ba ldr r2, [r7, #8]
  30201. 800cd98: 69fb ldr r3, [r7, #28]
  30202. 800cd9a: 4413 add r3, r2
  30203. 800cd9c: 781b ldrb r3, [r3, #0]
  30204. 800cd9e: 2b00 cmp r3, #0
  30205. 800cda0: d006 beq.n 800cdb0 <prvInitialiseNewTask+0x94>
  30206. for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )
  30207. 800cda2: 69fb ldr r3, [r7, #28]
  30208. 800cda4: 3301 adds r3, #1
  30209. 800cda6: 61fb str r3, [r7, #28]
  30210. 800cda8: 69fb ldr r3, [r7, #28]
  30211. 800cdaa: 2b0f cmp r3, #15
  30212. 800cdac: d9e9 bls.n 800cd82 <prvInitialiseNewTask+0x66>
  30213. 800cdae: e000 b.n 800cdb2 <prvInitialiseNewTask+0x96>
  30214. {
  30215. break;
  30216. 800cdb0: bf00 nop
  30217. }
  30218. }
  30219. /* Ensure the name string is terminated in the case that the string length
  30220. was greater or equal to configMAX_TASK_NAME_LEN. */
  30221. pxNewTCB->pcTaskName[ configMAX_TASK_NAME_LEN - 1 ] = '\0';
  30222. 800cdb2: 6b3b ldr r3, [r7, #48] @ 0x30
  30223. 800cdb4: 2200 movs r2, #0
  30224. 800cdb6: f883 2043 strb.w r2, [r3, #67] @ 0x43
  30225. 800cdba: e003 b.n 800cdc4 <prvInitialiseNewTask+0xa8>
  30226. }
  30227. else
  30228. {
  30229. /* The task has not been given a name, so just ensure there is a NULL
  30230. terminator when it is read out. */
  30231. pxNewTCB->pcTaskName[ 0 ] = 0x00;
  30232. 800cdbc: 6b3b ldr r3, [r7, #48] @ 0x30
  30233. 800cdbe: 2200 movs r2, #0
  30234. 800cdc0: f883 2034 strb.w r2, [r3, #52] @ 0x34
  30235. }
  30236. /* This is used as an array index so must ensure it's not too large. First
  30237. remove the privilege bit if one is present. */
  30238. if( uxPriority >= ( UBaseType_t ) configMAX_PRIORITIES )
  30239. 800cdc4: 6abb ldr r3, [r7, #40] @ 0x28
  30240. 800cdc6: 2b37 cmp r3, #55 @ 0x37
  30241. 800cdc8: d901 bls.n 800cdce <prvInitialiseNewTask+0xb2>
  30242. {
  30243. uxPriority = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) 1U;
  30244. 800cdca: 2337 movs r3, #55 @ 0x37
  30245. 800cdcc: 62bb str r3, [r7, #40] @ 0x28
  30246. else
  30247. {
  30248. mtCOVERAGE_TEST_MARKER();
  30249. }
  30250. pxNewTCB->uxPriority = uxPriority;
  30251. 800cdce: 6b3b ldr r3, [r7, #48] @ 0x30
  30252. 800cdd0: 6aba ldr r2, [r7, #40] @ 0x28
  30253. 800cdd2: 62da str r2, [r3, #44] @ 0x2c
  30254. #if ( configUSE_MUTEXES == 1 )
  30255. {
  30256. pxNewTCB->uxBasePriority = uxPriority;
  30257. 800cdd4: 6b3b ldr r3, [r7, #48] @ 0x30
  30258. 800cdd6: 6aba ldr r2, [r7, #40] @ 0x28
  30259. 800cdd8: 64da str r2, [r3, #76] @ 0x4c
  30260. pxNewTCB->uxMutexesHeld = 0;
  30261. 800cdda: 6b3b ldr r3, [r7, #48] @ 0x30
  30262. 800cddc: 2200 movs r2, #0
  30263. 800cdde: 651a str r2, [r3, #80] @ 0x50
  30264. }
  30265. #endif /* configUSE_MUTEXES */
  30266. vListInitialiseItem( &( pxNewTCB->xStateListItem ) );
  30267. 800cde0: 6b3b ldr r3, [r7, #48] @ 0x30
  30268. 800cde2: 3304 adds r3, #4
  30269. 800cde4: 4618 mov r0, r3
  30270. 800cde6: f7fe fd8b bl 800b900 <vListInitialiseItem>
  30271. vListInitialiseItem( &( pxNewTCB->xEventListItem ) );
  30272. 800cdea: 6b3b ldr r3, [r7, #48] @ 0x30
  30273. 800cdec: 3318 adds r3, #24
  30274. 800cdee: 4618 mov r0, r3
  30275. 800cdf0: f7fe fd86 bl 800b900 <vListInitialiseItem>
  30276. /* Set the pxNewTCB as a link back from the ListItem_t. This is so we can get
  30277. back to the containing TCB from a generic item in a list. */
  30278. listSET_LIST_ITEM_OWNER( &( pxNewTCB->xStateListItem ), pxNewTCB );
  30279. 800cdf4: 6b3b ldr r3, [r7, #48] @ 0x30
  30280. 800cdf6: 6b3a ldr r2, [r7, #48] @ 0x30
  30281. 800cdf8: 611a str r2, [r3, #16]
  30282. /* Event lists are always in priority order. */
  30283. 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. */
  30284. 800cdfa: 6abb ldr r3, [r7, #40] @ 0x28
  30285. 800cdfc: f1c3 0238 rsb r2, r3, #56 @ 0x38
  30286. 800ce00: 6b3b ldr r3, [r7, #48] @ 0x30
  30287. 800ce02: 619a str r2, [r3, #24]
  30288. listSET_LIST_ITEM_OWNER( &( pxNewTCB->xEventListItem ), pxNewTCB );
  30289. 800ce04: 6b3b ldr r3, [r7, #48] @ 0x30
  30290. 800ce06: 6b3a ldr r2, [r7, #48] @ 0x30
  30291. 800ce08: 625a str r2, [r3, #36] @ 0x24
  30292. }
  30293. #endif
  30294. #if ( configUSE_TASK_NOTIFICATIONS == 1 )
  30295. {
  30296. pxNewTCB->ulNotifiedValue = 0;
  30297. 800ce0a: 6b3b ldr r3, [r7, #48] @ 0x30
  30298. 800ce0c: 2200 movs r2, #0
  30299. 800ce0e: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  30300. pxNewTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  30301. 800ce12: 6b3b ldr r3, [r7, #48] @ 0x30
  30302. 800ce14: 2200 movs r2, #0
  30303. 800ce16: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  30304. #if ( configUSE_NEWLIB_REENTRANT == 1 )
  30305. {
  30306. /* Initialise this task's Newlib reent structure.
  30307. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  30308. for additional information. */
  30309. _REENT_INIT_PTR( ( &( pxNewTCB->xNewLib_reent ) ) );
  30310. 800ce1a: 6b3b ldr r3, [r7, #48] @ 0x30
  30311. 800ce1c: 3354 adds r3, #84 @ 0x54
  30312. 800ce1e: 224c movs r2, #76 @ 0x4c
  30313. 800ce20: 2100 movs r1, #0
  30314. 800ce22: 4618 mov r0, r3
  30315. 800ce24: f002 fa37 bl 800f296 <memset>
  30316. 800ce28: 6b3b ldr r3, [r7, #48] @ 0x30
  30317. 800ce2a: 4a0d ldr r2, [pc, #52] @ (800ce60 <prvInitialiseNewTask+0x144>)
  30318. 800ce2c: 659a str r2, [r3, #88] @ 0x58
  30319. 800ce2e: 6b3b ldr r3, [r7, #48] @ 0x30
  30320. 800ce30: 4a0c ldr r2, [pc, #48] @ (800ce64 <prvInitialiseNewTask+0x148>)
  30321. 800ce32: 65da str r2, [r3, #92] @ 0x5c
  30322. 800ce34: 6b3b ldr r3, [r7, #48] @ 0x30
  30323. 800ce36: 4a0c ldr r2, [pc, #48] @ (800ce68 <prvInitialiseNewTask+0x14c>)
  30324. 800ce38: 661a str r2, [r3, #96] @ 0x60
  30325. }
  30326. #endif /* portSTACK_GROWTH */
  30327. }
  30328. #else /* portHAS_STACK_OVERFLOW_CHECKING */
  30329. {
  30330. pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters );
  30331. 800ce3a: 683a ldr r2, [r7, #0]
  30332. 800ce3c: 68f9 ldr r1, [r7, #12]
  30333. 800ce3e: 69b8 ldr r0, [r7, #24]
  30334. 800ce40: f001 fcce bl 800e7e0 <pxPortInitialiseStack>
  30335. 800ce44: 4602 mov r2, r0
  30336. 800ce46: 6b3b ldr r3, [r7, #48] @ 0x30
  30337. 800ce48: 601a str r2, [r3, #0]
  30338. }
  30339. #endif /* portHAS_STACK_OVERFLOW_CHECKING */
  30340. }
  30341. #endif /* portUSING_MPU_WRAPPERS */
  30342. if( pxCreatedTask != NULL )
  30343. 800ce4a: 6afb ldr r3, [r7, #44] @ 0x2c
  30344. 800ce4c: 2b00 cmp r3, #0
  30345. 800ce4e: d002 beq.n 800ce56 <prvInitialiseNewTask+0x13a>
  30346. {
  30347. /* Pass the handle out in an anonymous way. The handle can be used to
  30348. change the created task's priority, delete the created task, etc.*/
  30349. *pxCreatedTask = ( TaskHandle_t ) pxNewTCB;
  30350. 800ce50: 6afb ldr r3, [r7, #44] @ 0x2c
  30351. 800ce52: 6b3a ldr r2, [r7, #48] @ 0x30
  30352. 800ce54: 601a str r2, [r3, #0]
  30353. }
  30354. else
  30355. {
  30356. mtCOVERAGE_TEST_MARKER();
  30357. }
  30358. }
  30359. 800ce56: bf00 nop
  30360. 800ce58: 3720 adds r7, #32
  30361. 800ce5a: 46bd mov sp, r7
  30362. 800ce5c: bd80 pop {r7, pc}
  30363. 800ce5e: bf00 nop
  30364. 800ce60: 2401277c .word 0x2401277c
  30365. 800ce64: 240127e4 .word 0x240127e4
  30366. 800ce68: 2401284c .word 0x2401284c
  30367. 0800ce6c <prvAddNewTaskToReadyList>:
  30368. /*-----------------------------------------------------------*/
  30369. static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB )
  30370. {
  30371. 800ce6c: b580 push {r7, lr}
  30372. 800ce6e: b082 sub sp, #8
  30373. 800ce70: af00 add r7, sp, #0
  30374. 800ce72: 6078 str r0, [r7, #4]
  30375. /* Ensure interrupts don't access the task lists while the lists are being
  30376. updated. */
  30377. taskENTER_CRITICAL();
  30378. 800ce74: f001 fde8 bl 800ea48 <vPortEnterCritical>
  30379. {
  30380. uxCurrentNumberOfTasks++;
  30381. 800ce78: 4b2d ldr r3, [pc, #180] @ (800cf30 <prvAddNewTaskToReadyList+0xc4>)
  30382. 800ce7a: 681b ldr r3, [r3, #0]
  30383. 800ce7c: 3301 adds r3, #1
  30384. 800ce7e: 4a2c ldr r2, [pc, #176] @ (800cf30 <prvAddNewTaskToReadyList+0xc4>)
  30385. 800ce80: 6013 str r3, [r2, #0]
  30386. if( pxCurrentTCB == NULL )
  30387. 800ce82: 4b2c ldr r3, [pc, #176] @ (800cf34 <prvAddNewTaskToReadyList+0xc8>)
  30388. 800ce84: 681b ldr r3, [r3, #0]
  30389. 800ce86: 2b00 cmp r3, #0
  30390. 800ce88: d109 bne.n 800ce9e <prvAddNewTaskToReadyList+0x32>
  30391. {
  30392. /* There are no other tasks, or all the other tasks are in
  30393. the suspended state - make this the current task. */
  30394. pxCurrentTCB = pxNewTCB;
  30395. 800ce8a: 4a2a ldr r2, [pc, #168] @ (800cf34 <prvAddNewTaskToReadyList+0xc8>)
  30396. 800ce8c: 687b ldr r3, [r7, #4]
  30397. 800ce8e: 6013 str r3, [r2, #0]
  30398. if( uxCurrentNumberOfTasks == ( UBaseType_t ) 1 )
  30399. 800ce90: 4b27 ldr r3, [pc, #156] @ (800cf30 <prvAddNewTaskToReadyList+0xc4>)
  30400. 800ce92: 681b ldr r3, [r3, #0]
  30401. 800ce94: 2b01 cmp r3, #1
  30402. 800ce96: d110 bne.n 800ceba <prvAddNewTaskToReadyList+0x4e>
  30403. {
  30404. /* This is the first task to be created so do the preliminary
  30405. initialisation required. We will not recover if this call
  30406. fails, but we will report the failure. */
  30407. prvInitialiseTaskLists();
  30408. 800ce98: f000 fc64 bl 800d764 <prvInitialiseTaskLists>
  30409. 800ce9c: e00d b.n 800ceba <prvAddNewTaskToReadyList+0x4e>
  30410. else
  30411. {
  30412. /* If the scheduler is not already running, make this task the
  30413. current task if it is the highest priority task to be created
  30414. so far. */
  30415. if( xSchedulerRunning == pdFALSE )
  30416. 800ce9e: 4b26 ldr r3, [pc, #152] @ (800cf38 <prvAddNewTaskToReadyList+0xcc>)
  30417. 800cea0: 681b ldr r3, [r3, #0]
  30418. 800cea2: 2b00 cmp r3, #0
  30419. 800cea4: d109 bne.n 800ceba <prvAddNewTaskToReadyList+0x4e>
  30420. {
  30421. if( pxCurrentTCB->uxPriority <= pxNewTCB->uxPriority )
  30422. 800cea6: 4b23 ldr r3, [pc, #140] @ (800cf34 <prvAddNewTaskToReadyList+0xc8>)
  30423. 800cea8: 681b ldr r3, [r3, #0]
  30424. 800ceaa: 6ada ldr r2, [r3, #44] @ 0x2c
  30425. 800ceac: 687b ldr r3, [r7, #4]
  30426. 800ceae: 6adb ldr r3, [r3, #44] @ 0x2c
  30427. 800ceb0: 429a cmp r2, r3
  30428. 800ceb2: d802 bhi.n 800ceba <prvAddNewTaskToReadyList+0x4e>
  30429. {
  30430. pxCurrentTCB = pxNewTCB;
  30431. 800ceb4: 4a1f ldr r2, [pc, #124] @ (800cf34 <prvAddNewTaskToReadyList+0xc8>)
  30432. 800ceb6: 687b ldr r3, [r7, #4]
  30433. 800ceb8: 6013 str r3, [r2, #0]
  30434. {
  30435. mtCOVERAGE_TEST_MARKER();
  30436. }
  30437. }
  30438. uxTaskNumber++;
  30439. 800ceba: 4b20 ldr r3, [pc, #128] @ (800cf3c <prvAddNewTaskToReadyList+0xd0>)
  30440. 800cebc: 681b ldr r3, [r3, #0]
  30441. 800cebe: 3301 adds r3, #1
  30442. 800cec0: 4a1e ldr r2, [pc, #120] @ (800cf3c <prvAddNewTaskToReadyList+0xd0>)
  30443. 800cec2: 6013 str r3, [r2, #0]
  30444. #if ( configUSE_TRACE_FACILITY == 1 )
  30445. {
  30446. /* Add a counter into the TCB for tracing only. */
  30447. pxNewTCB->uxTCBNumber = uxTaskNumber;
  30448. 800cec4: 4b1d ldr r3, [pc, #116] @ (800cf3c <prvAddNewTaskToReadyList+0xd0>)
  30449. 800cec6: 681a ldr r2, [r3, #0]
  30450. 800cec8: 687b ldr r3, [r7, #4]
  30451. 800ceca: 645a str r2, [r3, #68] @ 0x44
  30452. }
  30453. #endif /* configUSE_TRACE_FACILITY */
  30454. traceTASK_CREATE( pxNewTCB );
  30455. prvAddTaskToReadyList( pxNewTCB );
  30456. 800cecc: 687b ldr r3, [r7, #4]
  30457. 800cece: 6ada ldr r2, [r3, #44] @ 0x2c
  30458. 800ced0: 4b1b ldr r3, [pc, #108] @ (800cf40 <prvAddNewTaskToReadyList+0xd4>)
  30459. 800ced2: 681b ldr r3, [r3, #0]
  30460. 800ced4: 429a cmp r2, r3
  30461. 800ced6: d903 bls.n 800cee0 <prvAddNewTaskToReadyList+0x74>
  30462. 800ced8: 687b ldr r3, [r7, #4]
  30463. 800ceda: 6adb ldr r3, [r3, #44] @ 0x2c
  30464. 800cedc: 4a18 ldr r2, [pc, #96] @ (800cf40 <prvAddNewTaskToReadyList+0xd4>)
  30465. 800cede: 6013 str r3, [r2, #0]
  30466. 800cee0: 687b ldr r3, [r7, #4]
  30467. 800cee2: 6ada ldr r2, [r3, #44] @ 0x2c
  30468. 800cee4: 4613 mov r3, r2
  30469. 800cee6: 009b lsls r3, r3, #2
  30470. 800cee8: 4413 add r3, r2
  30471. 800ceea: 009b lsls r3, r3, #2
  30472. 800ceec: 4a15 ldr r2, [pc, #84] @ (800cf44 <prvAddNewTaskToReadyList+0xd8>)
  30473. 800ceee: 441a add r2, r3
  30474. 800cef0: 687b ldr r3, [r7, #4]
  30475. 800cef2: 3304 adds r3, #4
  30476. 800cef4: 4619 mov r1, r3
  30477. 800cef6: 4610 mov r0, r2
  30478. 800cef8: f7fe fd0f bl 800b91a <vListInsertEnd>
  30479. portSETUP_TCB( pxNewTCB );
  30480. }
  30481. taskEXIT_CRITICAL();
  30482. 800cefc: f001 fdd6 bl 800eaac <vPortExitCritical>
  30483. if( xSchedulerRunning != pdFALSE )
  30484. 800cf00: 4b0d ldr r3, [pc, #52] @ (800cf38 <prvAddNewTaskToReadyList+0xcc>)
  30485. 800cf02: 681b ldr r3, [r3, #0]
  30486. 800cf04: 2b00 cmp r3, #0
  30487. 800cf06: d00e beq.n 800cf26 <prvAddNewTaskToReadyList+0xba>
  30488. {
  30489. /* If the created task is of a higher priority than the current task
  30490. then it should run now. */
  30491. if( pxCurrentTCB->uxPriority < pxNewTCB->uxPriority )
  30492. 800cf08: 4b0a ldr r3, [pc, #40] @ (800cf34 <prvAddNewTaskToReadyList+0xc8>)
  30493. 800cf0a: 681b ldr r3, [r3, #0]
  30494. 800cf0c: 6ada ldr r2, [r3, #44] @ 0x2c
  30495. 800cf0e: 687b ldr r3, [r7, #4]
  30496. 800cf10: 6adb ldr r3, [r3, #44] @ 0x2c
  30497. 800cf12: 429a cmp r2, r3
  30498. 800cf14: d207 bcs.n 800cf26 <prvAddNewTaskToReadyList+0xba>
  30499. {
  30500. taskYIELD_IF_USING_PREEMPTION();
  30501. 800cf16: 4b0c ldr r3, [pc, #48] @ (800cf48 <prvAddNewTaskToReadyList+0xdc>)
  30502. 800cf18: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  30503. 800cf1c: 601a str r2, [r3, #0]
  30504. 800cf1e: f3bf 8f4f dsb sy
  30505. 800cf22: f3bf 8f6f isb sy
  30506. }
  30507. else
  30508. {
  30509. mtCOVERAGE_TEST_MARKER();
  30510. }
  30511. }
  30512. 800cf26: bf00 nop
  30513. 800cf28: 3708 adds r7, #8
  30514. 800cf2a: 46bd mov sp, r7
  30515. 800cf2c: bd80 pop {r7, pc}
  30516. 800cf2e: bf00 nop
  30517. 800cf30: 240025fc .word 0x240025fc
  30518. 800cf34: 24002128 .word 0x24002128
  30519. 800cf38: 24002608 .word 0x24002608
  30520. 800cf3c: 24002618 .word 0x24002618
  30521. 800cf40: 24002604 .word 0x24002604
  30522. 800cf44: 2400212c .word 0x2400212c
  30523. 800cf48: e000ed04 .word 0xe000ed04
  30524. 0800cf4c <vTaskDelay>:
  30525. /*-----------------------------------------------------------*/
  30526. #if ( INCLUDE_vTaskDelay == 1 )
  30527. void vTaskDelay( const TickType_t xTicksToDelay )
  30528. {
  30529. 800cf4c: b580 push {r7, lr}
  30530. 800cf4e: b084 sub sp, #16
  30531. 800cf50: af00 add r7, sp, #0
  30532. 800cf52: 6078 str r0, [r7, #4]
  30533. BaseType_t xAlreadyYielded = pdFALSE;
  30534. 800cf54: 2300 movs r3, #0
  30535. 800cf56: 60fb str r3, [r7, #12]
  30536. /* A delay time of zero just forces a reschedule. */
  30537. if( xTicksToDelay > ( TickType_t ) 0U )
  30538. 800cf58: 687b ldr r3, [r7, #4]
  30539. 800cf5a: 2b00 cmp r3, #0
  30540. 800cf5c: d018 beq.n 800cf90 <vTaskDelay+0x44>
  30541. {
  30542. configASSERT( uxSchedulerSuspended == 0 );
  30543. 800cf5e: 4b14 ldr r3, [pc, #80] @ (800cfb0 <vTaskDelay+0x64>)
  30544. 800cf60: 681b ldr r3, [r3, #0]
  30545. 800cf62: 2b00 cmp r3, #0
  30546. 800cf64: d00b beq.n 800cf7e <vTaskDelay+0x32>
  30547. __asm volatile
  30548. 800cf66: f04f 0350 mov.w r3, #80 @ 0x50
  30549. 800cf6a: f383 8811 msr BASEPRI, r3
  30550. 800cf6e: f3bf 8f6f isb sy
  30551. 800cf72: f3bf 8f4f dsb sy
  30552. 800cf76: 60bb str r3, [r7, #8]
  30553. }
  30554. 800cf78: bf00 nop
  30555. 800cf7a: bf00 nop
  30556. 800cf7c: e7fd b.n 800cf7a <vTaskDelay+0x2e>
  30557. vTaskSuspendAll();
  30558. 800cf7e: f000 f88b bl 800d098 <vTaskSuspendAll>
  30559. list or removed from the blocked list until the scheduler
  30560. is resumed.
  30561. This task cannot be in an event list as it is the currently
  30562. executing task. */
  30563. prvAddCurrentTaskToDelayedList( xTicksToDelay, pdFALSE );
  30564. 800cf82: 2100 movs r1, #0
  30565. 800cf84: 6878 ldr r0, [r7, #4]
  30566. 800cf86: f001 f87d bl 800e084 <prvAddCurrentTaskToDelayedList>
  30567. }
  30568. xAlreadyYielded = xTaskResumeAll();
  30569. 800cf8a: f000 f893 bl 800d0b4 <xTaskResumeAll>
  30570. 800cf8e: 60f8 str r0, [r7, #12]
  30571. mtCOVERAGE_TEST_MARKER();
  30572. }
  30573. /* Force a reschedule if xTaskResumeAll has not already done so, we may
  30574. have put ourselves to sleep. */
  30575. if( xAlreadyYielded == pdFALSE )
  30576. 800cf90: 68fb ldr r3, [r7, #12]
  30577. 800cf92: 2b00 cmp r3, #0
  30578. 800cf94: d107 bne.n 800cfa6 <vTaskDelay+0x5a>
  30579. {
  30580. portYIELD_WITHIN_API();
  30581. 800cf96: 4b07 ldr r3, [pc, #28] @ (800cfb4 <vTaskDelay+0x68>)
  30582. 800cf98: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  30583. 800cf9c: 601a str r2, [r3, #0]
  30584. 800cf9e: f3bf 8f4f dsb sy
  30585. 800cfa2: f3bf 8f6f isb sy
  30586. }
  30587. else
  30588. {
  30589. mtCOVERAGE_TEST_MARKER();
  30590. }
  30591. }
  30592. 800cfa6: bf00 nop
  30593. 800cfa8: 3710 adds r7, #16
  30594. 800cfaa: 46bd mov sp, r7
  30595. 800cfac: bd80 pop {r7, pc}
  30596. 800cfae: bf00 nop
  30597. 800cfb0: 24002624 .word 0x24002624
  30598. 800cfb4: e000ed04 .word 0xe000ed04
  30599. 0800cfb8 <vTaskStartScheduler>:
  30600. #endif /* ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) */
  30601. /*-----------------------------------------------------------*/
  30602. void vTaskStartScheduler( void )
  30603. {
  30604. 800cfb8: b580 push {r7, lr}
  30605. 800cfba: b08a sub sp, #40 @ 0x28
  30606. 800cfbc: af04 add r7, sp, #16
  30607. BaseType_t xReturn;
  30608. /* Add the idle task at the lowest priority. */
  30609. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  30610. {
  30611. StaticTask_t *pxIdleTaskTCBBuffer = NULL;
  30612. 800cfbe: 2300 movs r3, #0
  30613. 800cfc0: 60bb str r3, [r7, #8]
  30614. StackType_t *pxIdleTaskStackBuffer = NULL;
  30615. 800cfc2: 2300 movs r3, #0
  30616. 800cfc4: 607b str r3, [r7, #4]
  30617. uint32_t ulIdleTaskStackSize;
  30618. /* The Idle task is created using user provided RAM - obtain the
  30619. address of the RAM then create the idle task. */
  30620. vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &ulIdleTaskStackSize );
  30621. 800cfc6: 463a mov r2, r7
  30622. 800cfc8: 1d39 adds r1, r7, #4
  30623. 800cfca: f107 0308 add.w r3, r7, #8
  30624. 800cfce: 4618 mov r0, r3
  30625. 800cfd0: f7fe fc42 bl 800b858 <vApplicationGetIdleTaskMemory>
  30626. xIdleTaskHandle = xTaskCreateStatic( prvIdleTask,
  30627. 800cfd4: 6839 ldr r1, [r7, #0]
  30628. 800cfd6: 687b ldr r3, [r7, #4]
  30629. 800cfd8: 68ba ldr r2, [r7, #8]
  30630. 800cfda: 9202 str r2, [sp, #8]
  30631. 800cfdc: 9301 str r3, [sp, #4]
  30632. 800cfde: 2300 movs r3, #0
  30633. 800cfe0: 9300 str r3, [sp, #0]
  30634. 800cfe2: 2300 movs r3, #0
  30635. 800cfe4: 460a mov r2, r1
  30636. 800cfe6: 4924 ldr r1, [pc, #144] @ (800d078 <vTaskStartScheduler+0xc0>)
  30637. 800cfe8: 4824 ldr r0, [pc, #144] @ (800d07c <vTaskStartScheduler+0xc4>)
  30638. 800cfea: f7ff fdf2 bl 800cbd2 <xTaskCreateStatic>
  30639. 800cfee: 4603 mov r3, r0
  30640. 800cff0: 4a23 ldr r2, [pc, #140] @ (800d080 <vTaskStartScheduler+0xc8>)
  30641. 800cff2: 6013 str r3, [r2, #0]
  30642. ( void * ) NULL, /*lint !e961. The cast is not redundant for all compilers. */
  30643. portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */
  30644. pxIdleTaskStackBuffer,
  30645. pxIdleTaskTCBBuffer ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */
  30646. if( xIdleTaskHandle != NULL )
  30647. 800cff4: 4b22 ldr r3, [pc, #136] @ (800d080 <vTaskStartScheduler+0xc8>)
  30648. 800cff6: 681b ldr r3, [r3, #0]
  30649. 800cff8: 2b00 cmp r3, #0
  30650. 800cffa: d002 beq.n 800d002 <vTaskStartScheduler+0x4a>
  30651. {
  30652. xReturn = pdPASS;
  30653. 800cffc: 2301 movs r3, #1
  30654. 800cffe: 617b str r3, [r7, #20]
  30655. 800d000: e001 b.n 800d006 <vTaskStartScheduler+0x4e>
  30656. }
  30657. else
  30658. {
  30659. xReturn = pdFAIL;
  30660. 800d002: 2300 movs r3, #0
  30661. 800d004: 617b str r3, [r7, #20]
  30662. }
  30663. #endif /* configSUPPORT_STATIC_ALLOCATION */
  30664. #if ( configUSE_TIMERS == 1 )
  30665. {
  30666. if( xReturn == pdPASS )
  30667. 800d006: 697b ldr r3, [r7, #20]
  30668. 800d008: 2b01 cmp r3, #1
  30669. 800d00a: d102 bne.n 800d012 <vTaskStartScheduler+0x5a>
  30670. {
  30671. xReturn = xTimerCreateTimerTask();
  30672. 800d00c: f001 f88e bl 800e12c <xTimerCreateTimerTask>
  30673. 800d010: 6178 str r0, [r7, #20]
  30674. mtCOVERAGE_TEST_MARKER();
  30675. }
  30676. }
  30677. #endif /* configUSE_TIMERS */
  30678. if( xReturn == pdPASS )
  30679. 800d012: 697b ldr r3, [r7, #20]
  30680. 800d014: 2b01 cmp r3, #1
  30681. 800d016: d11b bne.n 800d050 <vTaskStartScheduler+0x98>
  30682. __asm volatile
  30683. 800d018: f04f 0350 mov.w r3, #80 @ 0x50
  30684. 800d01c: f383 8811 msr BASEPRI, r3
  30685. 800d020: f3bf 8f6f isb sy
  30686. 800d024: f3bf 8f4f dsb sy
  30687. 800d028: 613b str r3, [r7, #16]
  30688. }
  30689. 800d02a: bf00 nop
  30690. {
  30691. /* Switch Newlib's _impure_ptr variable to point to the _reent
  30692. structure specific to the task that will run first.
  30693. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  30694. for additional information. */
  30695. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  30696. 800d02c: 4b15 ldr r3, [pc, #84] @ (800d084 <vTaskStartScheduler+0xcc>)
  30697. 800d02e: 681b ldr r3, [r3, #0]
  30698. 800d030: 3354 adds r3, #84 @ 0x54
  30699. 800d032: 4a15 ldr r2, [pc, #84] @ (800d088 <vTaskStartScheduler+0xd0>)
  30700. 800d034: 6013 str r3, [r2, #0]
  30701. }
  30702. #endif /* configUSE_NEWLIB_REENTRANT */
  30703. xNextTaskUnblockTime = portMAX_DELAY;
  30704. 800d036: 4b15 ldr r3, [pc, #84] @ (800d08c <vTaskStartScheduler+0xd4>)
  30705. 800d038: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  30706. 800d03c: 601a str r2, [r3, #0]
  30707. xSchedulerRunning = pdTRUE;
  30708. 800d03e: 4b14 ldr r3, [pc, #80] @ (800d090 <vTaskStartScheduler+0xd8>)
  30709. 800d040: 2201 movs r2, #1
  30710. 800d042: 601a str r2, [r3, #0]
  30711. xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT;
  30712. 800d044: 4b13 ldr r3, [pc, #76] @ (800d094 <vTaskStartScheduler+0xdc>)
  30713. 800d046: 2200 movs r2, #0
  30714. 800d048: 601a str r2, [r3, #0]
  30715. traceTASK_SWITCHED_IN();
  30716. /* Setting up the timer tick is hardware specific and thus in the
  30717. portable interface. */
  30718. if( xPortStartScheduler() != pdFALSE )
  30719. 800d04a: f001 fc59 bl 800e900 <xPortStartScheduler>
  30720. }
  30721. /* Prevent compiler warnings if INCLUDE_xTaskGetIdleTaskHandle is set to 0,
  30722. meaning xIdleTaskHandle is not used anywhere else. */
  30723. ( void ) xIdleTaskHandle;
  30724. }
  30725. 800d04e: e00f b.n 800d070 <vTaskStartScheduler+0xb8>
  30726. configASSERT( xReturn != errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY );
  30727. 800d050: 697b ldr r3, [r7, #20]
  30728. 800d052: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  30729. 800d056: d10b bne.n 800d070 <vTaskStartScheduler+0xb8>
  30730. __asm volatile
  30731. 800d058: f04f 0350 mov.w r3, #80 @ 0x50
  30732. 800d05c: f383 8811 msr BASEPRI, r3
  30733. 800d060: f3bf 8f6f isb sy
  30734. 800d064: f3bf 8f4f dsb sy
  30735. 800d068: 60fb str r3, [r7, #12]
  30736. }
  30737. 800d06a: bf00 nop
  30738. 800d06c: bf00 nop
  30739. 800d06e: e7fd b.n 800d06c <vTaskStartScheduler+0xb4>
  30740. }
  30741. 800d070: bf00 nop
  30742. 800d072: 3718 adds r7, #24
  30743. 800d074: 46bd mov sp, r7
  30744. 800d076: bd80 pop {r7, pc}
  30745. 800d078: 08010074 .word 0x08010074
  30746. 800d07c: 0800d735 .word 0x0800d735
  30747. 800d080: 24002620 .word 0x24002620
  30748. 800d084: 24002128 .word 0x24002128
  30749. 800d088: 24000020 .word 0x24000020
  30750. 800d08c: 2400261c .word 0x2400261c
  30751. 800d090: 24002608 .word 0x24002608
  30752. 800d094: 24002600 .word 0x24002600
  30753. 0800d098 <vTaskSuspendAll>:
  30754. vPortEndScheduler();
  30755. }
  30756. /*----------------------------------------------------------*/
  30757. void vTaskSuspendAll( void )
  30758. {
  30759. 800d098: b480 push {r7}
  30760. 800d09a: af00 add r7, sp, #0
  30761. do not otherwise exhibit real time behaviour. */
  30762. portSOFTWARE_BARRIER();
  30763. /* The scheduler is suspended if uxSchedulerSuspended is non-zero. An increment
  30764. is used to allow calls to vTaskSuspendAll() to nest. */
  30765. ++uxSchedulerSuspended;
  30766. 800d09c: 4b04 ldr r3, [pc, #16] @ (800d0b0 <vTaskSuspendAll+0x18>)
  30767. 800d09e: 681b ldr r3, [r3, #0]
  30768. 800d0a0: 3301 adds r3, #1
  30769. 800d0a2: 4a03 ldr r2, [pc, #12] @ (800d0b0 <vTaskSuspendAll+0x18>)
  30770. 800d0a4: 6013 str r3, [r2, #0]
  30771. /* Enforces ordering for ports and optimised compilers that may otherwise place
  30772. the above increment elsewhere. */
  30773. portMEMORY_BARRIER();
  30774. }
  30775. 800d0a6: bf00 nop
  30776. 800d0a8: 46bd mov sp, r7
  30777. 800d0aa: f85d 7b04 ldr.w r7, [sp], #4
  30778. 800d0ae: 4770 bx lr
  30779. 800d0b0: 24002624 .word 0x24002624
  30780. 0800d0b4 <xTaskResumeAll>:
  30781. #endif /* configUSE_TICKLESS_IDLE */
  30782. /*----------------------------------------------------------*/
  30783. BaseType_t xTaskResumeAll( void )
  30784. {
  30785. 800d0b4: b580 push {r7, lr}
  30786. 800d0b6: b084 sub sp, #16
  30787. 800d0b8: af00 add r7, sp, #0
  30788. TCB_t *pxTCB = NULL;
  30789. 800d0ba: 2300 movs r3, #0
  30790. 800d0bc: 60fb str r3, [r7, #12]
  30791. BaseType_t xAlreadyYielded = pdFALSE;
  30792. 800d0be: 2300 movs r3, #0
  30793. 800d0c0: 60bb str r3, [r7, #8]
  30794. /* If uxSchedulerSuspended is zero then this function does not match a
  30795. previous call to vTaskSuspendAll(). */
  30796. configASSERT( uxSchedulerSuspended );
  30797. 800d0c2: 4b42 ldr r3, [pc, #264] @ (800d1cc <xTaskResumeAll+0x118>)
  30798. 800d0c4: 681b ldr r3, [r3, #0]
  30799. 800d0c6: 2b00 cmp r3, #0
  30800. 800d0c8: d10b bne.n 800d0e2 <xTaskResumeAll+0x2e>
  30801. __asm volatile
  30802. 800d0ca: f04f 0350 mov.w r3, #80 @ 0x50
  30803. 800d0ce: f383 8811 msr BASEPRI, r3
  30804. 800d0d2: f3bf 8f6f isb sy
  30805. 800d0d6: f3bf 8f4f dsb sy
  30806. 800d0da: 603b str r3, [r7, #0]
  30807. }
  30808. 800d0dc: bf00 nop
  30809. 800d0de: bf00 nop
  30810. 800d0e0: e7fd b.n 800d0de <xTaskResumeAll+0x2a>
  30811. /* It is possible that an ISR caused a task to be removed from an event
  30812. list while the scheduler was suspended. If this was the case then the
  30813. removed task will have been added to the xPendingReadyList. Once the
  30814. scheduler has been resumed it is safe to move all the pending ready
  30815. tasks from this list into their appropriate ready list. */
  30816. taskENTER_CRITICAL();
  30817. 800d0e2: f001 fcb1 bl 800ea48 <vPortEnterCritical>
  30818. {
  30819. --uxSchedulerSuspended;
  30820. 800d0e6: 4b39 ldr r3, [pc, #228] @ (800d1cc <xTaskResumeAll+0x118>)
  30821. 800d0e8: 681b ldr r3, [r3, #0]
  30822. 800d0ea: 3b01 subs r3, #1
  30823. 800d0ec: 4a37 ldr r2, [pc, #220] @ (800d1cc <xTaskResumeAll+0x118>)
  30824. 800d0ee: 6013 str r3, [r2, #0]
  30825. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  30826. 800d0f0: 4b36 ldr r3, [pc, #216] @ (800d1cc <xTaskResumeAll+0x118>)
  30827. 800d0f2: 681b ldr r3, [r3, #0]
  30828. 800d0f4: 2b00 cmp r3, #0
  30829. 800d0f6: d162 bne.n 800d1be <xTaskResumeAll+0x10a>
  30830. {
  30831. if( uxCurrentNumberOfTasks > ( UBaseType_t ) 0U )
  30832. 800d0f8: 4b35 ldr r3, [pc, #212] @ (800d1d0 <xTaskResumeAll+0x11c>)
  30833. 800d0fa: 681b ldr r3, [r3, #0]
  30834. 800d0fc: 2b00 cmp r3, #0
  30835. 800d0fe: d05e beq.n 800d1be <xTaskResumeAll+0x10a>
  30836. {
  30837. /* Move any readied tasks from the pending list into the
  30838. appropriate ready list. */
  30839. while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )
  30840. 800d100: e02f b.n 800d162 <xTaskResumeAll+0xae>
  30841. {
  30842. 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. */
  30843. 800d102: 4b34 ldr r3, [pc, #208] @ (800d1d4 <xTaskResumeAll+0x120>)
  30844. 800d104: 68db ldr r3, [r3, #12]
  30845. 800d106: 68db ldr r3, [r3, #12]
  30846. 800d108: 60fb str r3, [r7, #12]
  30847. ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
  30848. 800d10a: 68fb ldr r3, [r7, #12]
  30849. 800d10c: 3318 adds r3, #24
  30850. 800d10e: 4618 mov r0, r3
  30851. 800d110: f7fe fc60 bl 800b9d4 <uxListRemove>
  30852. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  30853. 800d114: 68fb ldr r3, [r7, #12]
  30854. 800d116: 3304 adds r3, #4
  30855. 800d118: 4618 mov r0, r3
  30856. 800d11a: f7fe fc5b bl 800b9d4 <uxListRemove>
  30857. prvAddTaskToReadyList( pxTCB );
  30858. 800d11e: 68fb ldr r3, [r7, #12]
  30859. 800d120: 6ada ldr r2, [r3, #44] @ 0x2c
  30860. 800d122: 4b2d ldr r3, [pc, #180] @ (800d1d8 <xTaskResumeAll+0x124>)
  30861. 800d124: 681b ldr r3, [r3, #0]
  30862. 800d126: 429a cmp r2, r3
  30863. 800d128: d903 bls.n 800d132 <xTaskResumeAll+0x7e>
  30864. 800d12a: 68fb ldr r3, [r7, #12]
  30865. 800d12c: 6adb ldr r3, [r3, #44] @ 0x2c
  30866. 800d12e: 4a2a ldr r2, [pc, #168] @ (800d1d8 <xTaskResumeAll+0x124>)
  30867. 800d130: 6013 str r3, [r2, #0]
  30868. 800d132: 68fb ldr r3, [r7, #12]
  30869. 800d134: 6ada ldr r2, [r3, #44] @ 0x2c
  30870. 800d136: 4613 mov r3, r2
  30871. 800d138: 009b lsls r3, r3, #2
  30872. 800d13a: 4413 add r3, r2
  30873. 800d13c: 009b lsls r3, r3, #2
  30874. 800d13e: 4a27 ldr r2, [pc, #156] @ (800d1dc <xTaskResumeAll+0x128>)
  30875. 800d140: 441a add r2, r3
  30876. 800d142: 68fb ldr r3, [r7, #12]
  30877. 800d144: 3304 adds r3, #4
  30878. 800d146: 4619 mov r1, r3
  30879. 800d148: 4610 mov r0, r2
  30880. 800d14a: f7fe fbe6 bl 800b91a <vListInsertEnd>
  30881. /* If the moved task has a priority higher than the current
  30882. task then a yield must be performed. */
  30883. if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
  30884. 800d14e: 68fb ldr r3, [r7, #12]
  30885. 800d150: 6ada ldr r2, [r3, #44] @ 0x2c
  30886. 800d152: 4b23 ldr r3, [pc, #140] @ (800d1e0 <xTaskResumeAll+0x12c>)
  30887. 800d154: 681b ldr r3, [r3, #0]
  30888. 800d156: 6adb ldr r3, [r3, #44] @ 0x2c
  30889. 800d158: 429a cmp r2, r3
  30890. 800d15a: d302 bcc.n 800d162 <xTaskResumeAll+0xae>
  30891. {
  30892. xYieldPending = pdTRUE;
  30893. 800d15c: 4b21 ldr r3, [pc, #132] @ (800d1e4 <xTaskResumeAll+0x130>)
  30894. 800d15e: 2201 movs r2, #1
  30895. 800d160: 601a str r2, [r3, #0]
  30896. while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )
  30897. 800d162: 4b1c ldr r3, [pc, #112] @ (800d1d4 <xTaskResumeAll+0x120>)
  30898. 800d164: 681b ldr r3, [r3, #0]
  30899. 800d166: 2b00 cmp r3, #0
  30900. 800d168: d1cb bne.n 800d102 <xTaskResumeAll+0x4e>
  30901. {
  30902. mtCOVERAGE_TEST_MARKER();
  30903. }
  30904. }
  30905. if( pxTCB != NULL )
  30906. 800d16a: 68fb ldr r3, [r7, #12]
  30907. 800d16c: 2b00 cmp r3, #0
  30908. 800d16e: d001 beq.n 800d174 <xTaskResumeAll+0xc0>
  30909. which may have prevented the next unblock time from being
  30910. re-calculated, in which case re-calculate it now. Mainly
  30911. important for low power tickless implementations, where
  30912. this can prevent an unnecessary exit from low power
  30913. state. */
  30914. prvResetNextTaskUnblockTime();
  30915. 800d170: f000 fb9c bl 800d8ac <prvResetNextTaskUnblockTime>
  30916. /* If any ticks occurred while the scheduler was suspended then
  30917. they should be processed now. This ensures the tick count does
  30918. not slip, and that any delayed tasks are resumed at the correct
  30919. time. */
  30920. {
  30921. TickType_t xPendedCounts = xPendedTicks; /* Non-volatile copy. */
  30922. 800d174: 4b1c ldr r3, [pc, #112] @ (800d1e8 <xTaskResumeAll+0x134>)
  30923. 800d176: 681b ldr r3, [r3, #0]
  30924. 800d178: 607b str r3, [r7, #4]
  30925. if( xPendedCounts > ( TickType_t ) 0U )
  30926. 800d17a: 687b ldr r3, [r7, #4]
  30927. 800d17c: 2b00 cmp r3, #0
  30928. 800d17e: d010 beq.n 800d1a2 <xTaskResumeAll+0xee>
  30929. {
  30930. do
  30931. {
  30932. if( xTaskIncrementTick() != pdFALSE )
  30933. 800d180: f000 f846 bl 800d210 <xTaskIncrementTick>
  30934. 800d184: 4603 mov r3, r0
  30935. 800d186: 2b00 cmp r3, #0
  30936. 800d188: d002 beq.n 800d190 <xTaskResumeAll+0xdc>
  30937. {
  30938. xYieldPending = pdTRUE;
  30939. 800d18a: 4b16 ldr r3, [pc, #88] @ (800d1e4 <xTaskResumeAll+0x130>)
  30940. 800d18c: 2201 movs r2, #1
  30941. 800d18e: 601a str r2, [r3, #0]
  30942. }
  30943. else
  30944. {
  30945. mtCOVERAGE_TEST_MARKER();
  30946. }
  30947. --xPendedCounts;
  30948. 800d190: 687b ldr r3, [r7, #4]
  30949. 800d192: 3b01 subs r3, #1
  30950. 800d194: 607b str r3, [r7, #4]
  30951. } while( xPendedCounts > ( TickType_t ) 0U );
  30952. 800d196: 687b ldr r3, [r7, #4]
  30953. 800d198: 2b00 cmp r3, #0
  30954. 800d19a: d1f1 bne.n 800d180 <xTaskResumeAll+0xcc>
  30955. xPendedTicks = 0;
  30956. 800d19c: 4b12 ldr r3, [pc, #72] @ (800d1e8 <xTaskResumeAll+0x134>)
  30957. 800d19e: 2200 movs r2, #0
  30958. 800d1a0: 601a str r2, [r3, #0]
  30959. {
  30960. mtCOVERAGE_TEST_MARKER();
  30961. }
  30962. }
  30963. if( xYieldPending != pdFALSE )
  30964. 800d1a2: 4b10 ldr r3, [pc, #64] @ (800d1e4 <xTaskResumeAll+0x130>)
  30965. 800d1a4: 681b ldr r3, [r3, #0]
  30966. 800d1a6: 2b00 cmp r3, #0
  30967. 800d1a8: d009 beq.n 800d1be <xTaskResumeAll+0x10a>
  30968. {
  30969. #if( configUSE_PREEMPTION != 0 )
  30970. {
  30971. xAlreadyYielded = pdTRUE;
  30972. 800d1aa: 2301 movs r3, #1
  30973. 800d1ac: 60bb str r3, [r7, #8]
  30974. }
  30975. #endif
  30976. taskYIELD_IF_USING_PREEMPTION();
  30977. 800d1ae: 4b0f ldr r3, [pc, #60] @ (800d1ec <xTaskResumeAll+0x138>)
  30978. 800d1b0: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  30979. 800d1b4: 601a str r2, [r3, #0]
  30980. 800d1b6: f3bf 8f4f dsb sy
  30981. 800d1ba: f3bf 8f6f isb sy
  30982. else
  30983. {
  30984. mtCOVERAGE_TEST_MARKER();
  30985. }
  30986. }
  30987. taskEXIT_CRITICAL();
  30988. 800d1be: f001 fc75 bl 800eaac <vPortExitCritical>
  30989. return xAlreadyYielded;
  30990. 800d1c2: 68bb ldr r3, [r7, #8]
  30991. }
  30992. 800d1c4: 4618 mov r0, r3
  30993. 800d1c6: 3710 adds r7, #16
  30994. 800d1c8: 46bd mov sp, r7
  30995. 800d1ca: bd80 pop {r7, pc}
  30996. 800d1cc: 24002624 .word 0x24002624
  30997. 800d1d0: 240025fc .word 0x240025fc
  30998. 800d1d4: 240025bc .word 0x240025bc
  30999. 800d1d8: 24002604 .word 0x24002604
  31000. 800d1dc: 2400212c .word 0x2400212c
  31001. 800d1e0: 24002128 .word 0x24002128
  31002. 800d1e4: 24002610 .word 0x24002610
  31003. 800d1e8: 2400260c .word 0x2400260c
  31004. 800d1ec: e000ed04 .word 0xe000ed04
  31005. 0800d1f0 <xTaskGetTickCount>:
  31006. /*-----------------------------------------------------------*/
  31007. TickType_t xTaskGetTickCount( void )
  31008. {
  31009. 800d1f0: b480 push {r7}
  31010. 800d1f2: b083 sub sp, #12
  31011. 800d1f4: af00 add r7, sp, #0
  31012. TickType_t xTicks;
  31013. /* Critical section required if running on a 16 bit processor. */
  31014. portTICK_TYPE_ENTER_CRITICAL();
  31015. {
  31016. xTicks = xTickCount;
  31017. 800d1f6: 4b05 ldr r3, [pc, #20] @ (800d20c <xTaskGetTickCount+0x1c>)
  31018. 800d1f8: 681b ldr r3, [r3, #0]
  31019. 800d1fa: 607b str r3, [r7, #4]
  31020. }
  31021. portTICK_TYPE_EXIT_CRITICAL();
  31022. return xTicks;
  31023. 800d1fc: 687b ldr r3, [r7, #4]
  31024. }
  31025. 800d1fe: 4618 mov r0, r3
  31026. 800d200: 370c adds r7, #12
  31027. 800d202: 46bd mov sp, r7
  31028. 800d204: f85d 7b04 ldr.w r7, [sp], #4
  31029. 800d208: 4770 bx lr
  31030. 800d20a: bf00 nop
  31031. 800d20c: 24002600 .word 0x24002600
  31032. 0800d210 <xTaskIncrementTick>:
  31033. #endif /* INCLUDE_xTaskAbortDelay */
  31034. /*----------------------------------------------------------*/
  31035. BaseType_t xTaskIncrementTick( void )
  31036. {
  31037. 800d210: b580 push {r7, lr}
  31038. 800d212: b086 sub sp, #24
  31039. 800d214: af00 add r7, sp, #0
  31040. TCB_t * pxTCB;
  31041. TickType_t xItemValue;
  31042. BaseType_t xSwitchRequired = pdFALSE;
  31043. 800d216: 2300 movs r3, #0
  31044. 800d218: 617b str r3, [r7, #20]
  31045. /* Called by the portable layer each time a tick interrupt occurs.
  31046. Increments the tick then checks to see if the new tick value will cause any
  31047. tasks to be unblocked. */
  31048. traceTASK_INCREMENT_TICK( xTickCount );
  31049. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  31050. 800d21a: 4b4f ldr r3, [pc, #316] @ (800d358 <xTaskIncrementTick+0x148>)
  31051. 800d21c: 681b ldr r3, [r3, #0]
  31052. 800d21e: 2b00 cmp r3, #0
  31053. 800d220: f040 8090 bne.w 800d344 <xTaskIncrementTick+0x134>
  31054. {
  31055. /* Minor optimisation. The tick count cannot change in this
  31056. block. */
  31057. const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
  31058. 800d224: 4b4d ldr r3, [pc, #308] @ (800d35c <xTaskIncrementTick+0x14c>)
  31059. 800d226: 681b ldr r3, [r3, #0]
  31060. 800d228: 3301 adds r3, #1
  31061. 800d22a: 613b str r3, [r7, #16]
  31062. /* Increment the RTOS tick, switching the delayed and overflowed
  31063. delayed lists if it wraps to 0. */
  31064. xTickCount = xConstTickCount;
  31065. 800d22c: 4a4b ldr r2, [pc, #300] @ (800d35c <xTaskIncrementTick+0x14c>)
  31066. 800d22e: 693b ldr r3, [r7, #16]
  31067. 800d230: 6013 str r3, [r2, #0]
  31068. if( xConstTickCount == ( TickType_t ) 0U ) /*lint !e774 'if' does not always evaluate to false as it is looking for an overflow. */
  31069. 800d232: 693b ldr r3, [r7, #16]
  31070. 800d234: 2b00 cmp r3, #0
  31071. 800d236: d121 bne.n 800d27c <xTaskIncrementTick+0x6c>
  31072. {
  31073. taskSWITCH_DELAYED_LISTS();
  31074. 800d238: 4b49 ldr r3, [pc, #292] @ (800d360 <xTaskIncrementTick+0x150>)
  31075. 800d23a: 681b ldr r3, [r3, #0]
  31076. 800d23c: 681b ldr r3, [r3, #0]
  31077. 800d23e: 2b00 cmp r3, #0
  31078. 800d240: d00b beq.n 800d25a <xTaskIncrementTick+0x4a>
  31079. __asm volatile
  31080. 800d242: f04f 0350 mov.w r3, #80 @ 0x50
  31081. 800d246: f383 8811 msr BASEPRI, r3
  31082. 800d24a: f3bf 8f6f isb sy
  31083. 800d24e: f3bf 8f4f dsb sy
  31084. 800d252: 603b str r3, [r7, #0]
  31085. }
  31086. 800d254: bf00 nop
  31087. 800d256: bf00 nop
  31088. 800d258: e7fd b.n 800d256 <xTaskIncrementTick+0x46>
  31089. 800d25a: 4b41 ldr r3, [pc, #260] @ (800d360 <xTaskIncrementTick+0x150>)
  31090. 800d25c: 681b ldr r3, [r3, #0]
  31091. 800d25e: 60fb str r3, [r7, #12]
  31092. 800d260: 4b40 ldr r3, [pc, #256] @ (800d364 <xTaskIncrementTick+0x154>)
  31093. 800d262: 681b ldr r3, [r3, #0]
  31094. 800d264: 4a3e ldr r2, [pc, #248] @ (800d360 <xTaskIncrementTick+0x150>)
  31095. 800d266: 6013 str r3, [r2, #0]
  31096. 800d268: 4a3e ldr r2, [pc, #248] @ (800d364 <xTaskIncrementTick+0x154>)
  31097. 800d26a: 68fb ldr r3, [r7, #12]
  31098. 800d26c: 6013 str r3, [r2, #0]
  31099. 800d26e: 4b3e ldr r3, [pc, #248] @ (800d368 <xTaskIncrementTick+0x158>)
  31100. 800d270: 681b ldr r3, [r3, #0]
  31101. 800d272: 3301 adds r3, #1
  31102. 800d274: 4a3c ldr r2, [pc, #240] @ (800d368 <xTaskIncrementTick+0x158>)
  31103. 800d276: 6013 str r3, [r2, #0]
  31104. 800d278: f000 fb18 bl 800d8ac <prvResetNextTaskUnblockTime>
  31105. /* See if this tick has made a timeout expire. Tasks are stored in
  31106. the queue in the order of their wake time - meaning once one task
  31107. has been found whose block time has not expired there is no need to
  31108. look any further down the list. */
  31109. if( xConstTickCount >= xNextTaskUnblockTime )
  31110. 800d27c: 4b3b ldr r3, [pc, #236] @ (800d36c <xTaskIncrementTick+0x15c>)
  31111. 800d27e: 681b ldr r3, [r3, #0]
  31112. 800d280: 693a ldr r2, [r7, #16]
  31113. 800d282: 429a cmp r2, r3
  31114. 800d284: d349 bcc.n 800d31a <xTaskIncrementTick+0x10a>
  31115. {
  31116. for( ;; )
  31117. {
  31118. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  31119. 800d286: 4b36 ldr r3, [pc, #216] @ (800d360 <xTaskIncrementTick+0x150>)
  31120. 800d288: 681b ldr r3, [r3, #0]
  31121. 800d28a: 681b ldr r3, [r3, #0]
  31122. 800d28c: 2b00 cmp r3, #0
  31123. 800d28e: d104 bne.n 800d29a <xTaskIncrementTick+0x8a>
  31124. /* The delayed list is empty. Set xNextTaskUnblockTime
  31125. to the maximum possible value so it is extremely
  31126. unlikely that the
  31127. if( xTickCount >= xNextTaskUnblockTime ) test will pass
  31128. next time through. */
  31129. xNextTaskUnblockTime = portMAX_DELAY; /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  31130. 800d290: 4b36 ldr r3, [pc, #216] @ (800d36c <xTaskIncrementTick+0x15c>)
  31131. 800d292: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  31132. 800d296: 601a str r2, [r3, #0]
  31133. break;
  31134. 800d298: e03f b.n 800d31a <xTaskIncrementTick+0x10a>
  31135. {
  31136. /* The delayed list is not empty, get the value of the
  31137. item at the head of the delayed list. This is the time
  31138. at which the task at the head of the delayed list must
  31139. be removed from the Blocked state. */
  31140. 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. */
  31141. 800d29a: 4b31 ldr r3, [pc, #196] @ (800d360 <xTaskIncrementTick+0x150>)
  31142. 800d29c: 681b ldr r3, [r3, #0]
  31143. 800d29e: 68db ldr r3, [r3, #12]
  31144. 800d2a0: 68db ldr r3, [r3, #12]
  31145. 800d2a2: 60bb str r3, [r7, #8]
  31146. xItemValue = listGET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ) );
  31147. 800d2a4: 68bb ldr r3, [r7, #8]
  31148. 800d2a6: 685b ldr r3, [r3, #4]
  31149. 800d2a8: 607b str r3, [r7, #4]
  31150. if( xConstTickCount < xItemValue )
  31151. 800d2aa: 693a ldr r2, [r7, #16]
  31152. 800d2ac: 687b ldr r3, [r7, #4]
  31153. 800d2ae: 429a cmp r2, r3
  31154. 800d2b0: d203 bcs.n 800d2ba <xTaskIncrementTick+0xaa>
  31155. /* It is not time to unblock this item yet, but the
  31156. item value is the time at which the task at the head
  31157. of the blocked list must be removed from the Blocked
  31158. state - so record the item value in
  31159. xNextTaskUnblockTime. */
  31160. xNextTaskUnblockTime = xItemValue;
  31161. 800d2b2: 4a2e ldr r2, [pc, #184] @ (800d36c <xTaskIncrementTick+0x15c>)
  31162. 800d2b4: 687b ldr r3, [r7, #4]
  31163. 800d2b6: 6013 str r3, [r2, #0]
  31164. break; /*lint !e9011 Code structure here is deedmed easier to understand with multiple breaks. */
  31165. 800d2b8: e02f b.n 800d31a <xTaskIncrementTick+0x10a>
  31166. {
  31167. mtCOVERAGE_TEST_MARKER();
  31168. }
  31169. /* It is time to remove the item from the Blocked state. */
  31170. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  31171. 800d2ba: 68bb ldr r3, [r7, #8]
  31172. 800d2bc: 3304 adds r3, #4
  31173. 800d2be: 4618 mov r0, r3
  31174. 800d2c0: f7fe fb88 bl 800b9d4 <uxListRemove>
  31175. /* Is the task waiting on an event also? If so remove
  31176. it from the event list. */
  31177. if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )
  31178. 800d2c4: 68bb ldr r3, [r7, #8]
  31179. 800d2c6: 6a9b ldr r3, [r3, #40] @ 0x28
  31180. 800d2c8: 2b00 cmp r3, #0
  31181. 800d2ca: d004 beq.n 800d2d6 <xTaskIncrementTick+0xc6>
  31182. {
  31183. ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
  31184. 800d2cc: 68bb ldr r3, [r7, #8]
  31185. 800d2ce: 3318 adds r3, #24
  31186. 800d2d0: 4618 mov r0, r3
  31187. 800d2d2: f7fe fb7f bl 800b9d4 <uxListRemove>
  31188. mtCOVERAGE_TEST_MARKER();
  31189. }
  31190. /* Place the unblocked task into the appropriate ready
  31191. list. */
  31192. prvAddTaskToReadyList( pxTCB );
  31193. 800d2d6: 68bb ldr r3, [r7, #8]
  31194. 800d2d8: 6ada ldr r2, [r3, #44] @ 0x2c
  31195. 800d2da: 4b25 ldr r3, [pc, #148] @ (800d370 <xTaskIncrementTick+0x160>)
  31196. 800d2dc: 681b ldr r3, [r3, #0]
  31197. 800d2de: 429a cmp r2, r3
  31198. 800d2e0: d903 bls.n 800d2ea <xTaskIncrementTick+0xda>
  31199. 800d2e2: 68bb ldr r3, [r7, #8]
  31200. 800d2e4: 6adb ldr r3, [r3, #44] @ 0x2c
  31201. 800d2e6: 4a22 ldr r2, [pc, #136] @ (800d370 <xTaskIncrementTick+0x160>)
  31202. 800d2e8: 6013 str r3, [r2, #0]
  31203. 800d2ea: 68bb ldr r3, [r7, #8]
  31204. 800d2ec: 6ada ldr r2, [r3, #44] @ 0x2c
  31205. 800d2ee: 4613 mov r3, r2
  31206. 800d2f0: 009b lsls r3, r3, #2
  31207. 800d2f2: 4413 add r3, r2
  31208. 800d2f4: 009b lsls r3, r3, #2
  31209. 800d2f6: 4a1f ldr r2, [pc, #124] @ (800d374 <xTaskIncrementTick+0x164>)
  31210. 800d2f8: 441a add r2, r3
  31211. 800d2fa: 68bb ldr r3, [r7, #8]
  31212. 800d2fc: 3304 adds r3, #4
  31213. 800d2fe: 4619 mov r1, r3
  31214. 800d300: 4610 mov r0, r2
  31215. 800d302: f7fe fb0a bl 800b91a <vListInsertEnd>
  31216. {
  31217. /* Preemption is on, but a context switch should
  31218. only be performed if the unblocked task has a
  31219. priority that is equal to or higher than the
  31220. currently executing task. */
  31221. if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
  31222. 800d306: 68bb ldr r3, [r7, #8]
  31223. 800d308: 6ada ldr r2, [r3, #44] @ 0x2c
  31224. 800d30a: 4b1b ldr r3, [pc, #108] @ (800d378 <xTaskIncrementTick+0x168>)
  31225. 800d30c: 681b ldr r3, [r3, #0]
  31226. 800d30e: 6adb ldr r3, [r3, #44] @ 0x2c
  31227. 800d310: 429a cmp r2, r3
  31228. 800d312: d3b8 bcc.n 800d286 <xTaskIncrementTick+0x76>
  31229. {
  31230. xSwitchRequired = pdTRUE;
  31231. 800d314: 2301 movs r3, #1
  31232. 800d316: 617b str r3, [r7, #20]
  31233. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  31234. 800d318: e7b5 b.n 800d286 <xTaskIncrementTick+0x76>
  31235. /* Tasks of equal priority to the currently running task will share
  31236. processing time (time slice) if preemption is on, and the application
  31237. writer has not explicitly turned time slicing off. */
  31238. #if ( ( configUSE_PREEMPTION == 1 ) && ( configUSE_TIME_SLICING == 1 ) )
  31239. {
  31240. if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCB->uxPriority ] ) ) > ( UBaseType_t ) 1 )
  31241. 800d31a: 4b17 ldr r3, [pc, #92] @ (800d378 <xTaskIncrementTick+0x168>)
  31242. 800d31c: 681b ldr r3, [r3, #0]
  31243. 800d31e: 6ada ldr r2, [r3, #44] @ 0x2c
  31244. 800d320: 4914 ldr r1, [pc, #80] @ (800d374 <xTaskIncrementTick+0x164>)
  31245. 800d322: 4613 mov r3, r2
  31246. 800d324: 009b lsls r3, r3, #2
  31247. 800d326: 4413 add r3, r2
  31248. 800d328: 009b lsls r3, r3, #2
  31249. 800d32a: 440b add r3, r1
  31250. 800d32c: 681b ldr r3, [r3, #0]
  31251. 800d32e: 2b01 cmp r3, #1
  31252. 800d330: d901 bls.n 800d336 <xTaskIncrementTick+0x126>
  31253. {
  31254. xSwitchRequired = pdTRUE;
  31255. 800d332: 2301 movs r3, #1
  31256. 800d334: 617b str r3, [r7, #20]
  31257. }
  31258. #endif /* configUSE_TICK_HOOK */
  31259. #if ( configUSE_PREEMPTION == 1 )
  31260. {
  31261. if( xYieldPending != pdFALSE )
  31262. 800d336: 4b11 ldr r3, [pc, #68] @ (800d37c <xTaskIncrementTick+0x16c>)
  31263. 800d338: 681b ldr r3, [r3, #0]
  31264. 800d33a: 2b00 cmp r3, #0
  31265. 800d33c: d007 beq.n 800d34e <xTaskIncrementTick+0x13e>
  31266. {
  31267. xSwitchRequired = pdTRUE;
  31268. 800d33e: 2301 movs r3, #1
  31269. 800d340: 617b str r3, [r7, #20]
  31270. 800d342: e004 b.n 800d34e <xTaskIncrementTick+0x13e>
  31271. }
  31272. #endif /* configUSE_PREEMPTION */
  31273. }
  31274. else
  31275. {
  31276. ++xPendedTicks;
  31277. 800d344: 4b0e ldr r3, [pc, #56] @ (800d380 <xTaskIncrementTick+0x170>)
  31278. 800d346: 681b ldr r3, [r3, #0]
  31279. 800d348: 3301 adds r3, #1
  31280. 800d34a: 4a0d ldr r2, [pc, #52] @ (800d380 <xTaskIncrementTick+0x170>)
  31281. 800d34c: 6013 str r3, [r2, #0]
  31282. vApplicationTickHook();
  31283. }
  31284. #endif
  31285. }
  31286. return xSwitchRequired;
  31287. 800d34e: 697b ldr r3, [r7, #20]
  31288. }
  31289. 800d350: 4618 mov r0, r3
  31290. 800d352: 3718 adds r7, #24
  31291. 800d354: 46bd mov sp, r7
  31292. 800d356: bd80 pop {r7, pc}
  31293. 800d358: 24002624 .word 0x24002624
  31294. 800d35c: 24002600 .word 0x24002600
  31295. 800d360: 240025b4 .word 0x240025b4
  31296. 800d364: 240025b8 .word 0x240025b8
  31297. 800d368: 24002614 .word 0x24002614
  31298. 800d36c: 2400261c .word 0x2400261c
  31299. 800d370: 24002604 .word 0x24002604
  31300. 800d374: 2400212c .word 0x2400212c
  31301. 800d378: 24002128 .word 0x24002128
  31302. 800d37c: 24002610 .word 0x24002610
  31303. 800d380: 2400260c .word 0x2400260c
  31304. 0800d384 <vTaskSwitchContext>:
  31305. #endif /* configUSE_APPLICATION_TASK_TAG */
  31306. /*-----------------------------------------------------------*/
  31307. void vTaskSwitchContext( void )
  31308. {
  31309. 800d384: b580 push {r7, lr}
  31310. 800d386: b084 sub sp, #16
  31311. 800d388: af00 add r7, sp, #0
  31312. if( uxSchedulerSuspended != ( UBaseType_t ) pdFALSE )
  31313. 800d38a: 4b32 ldr r3, [pc, #200] @ (800d454 <vTaskSwitchContext+0xd0>)
  31314. 800d38c: 681b ldr r3, [r3, #0]
  31315. 800d38e: 2b00 cmp r3, #0
  31316. 800d390: d003 beq.n 800d39a <vTaskSwitchContext+0x16>
  31317. {
  31318. /* The scheduler is currently suspended - do not allow a context
  31319. switch. */
  31320. xYieldPending = pdTRUE;
  31321. 800d392: 4b31 ldr r3, [pc, #196] @ (800d458 <vTaskSwitchContext+0xd4>)
  31322. 800d394: 2201 movs r2, #1
  31323. 800d396: 601a str r2, [r3, #0]
  31324. for additional information. */
  31325. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  31326. }
  31327. #endif /* configUSE_NEWLIB_REENTRANT */
  31328. }
  31329. }
  31330. 800d398: e058 b.n 800d44c <vTaskSwitchContext+0xc8>
  31331. xYieldPending = pdFALSE;
  31332. 800d39a: 4b2f ldr r3, [pc, #188] @ (800d458 <vTaskSwitchContext+0xd4>)
  31333. 800d39c: 2200 movs r2, #0
  31334. 800d39e: 601a str r2, [r3, #0]
  31335. taskCHECK_FOR_STACK_OVERFLOW();
  31336. 800d3a0: 4b2e ldr r3, [pc, #184] @ (800d45c <vTaskSwitchContext+0xd8>)
  31337. 800d3a2: 681b ldr r3, [r3, #0]
  31338. 800d3a4: 681a ldr r2, [r3, #0]
  31339. 800d3a6: 4b2d ldr r3, [pc, #180] @ (800d45c <vTaskSwitchContext+0xd8>)
  31340. 800d3a8: 681b ldr r3, [r3, #0]
  31341. 800d3aa: 6b1b ldr r3, [r3, #48] @ 0x30
  31342. 800d3ac: 429a cmp r2, r3
  31343. 800d3ae: d808 bhi.n 800d3c2 <vTaskSwitchContext+0x3e>
  31344. 800d3b0: 4b2a ldr r3, [pc, #168] @ (800d45c <vTaskSwitchContext+0xd8>)
  31345. 800d3b2: 681a ldr r2, [r3, #0]
  31346. 800d3b4: 4b29 ldr r3, [pc, #164] @ (800d45c <vTaskSwitchContext+0xd8>)
  31347. 800d3b6: 681b ldr r3, [r3, #0]
  31348. 800d3b8: 3334 adds r3, #52 @ 0x34
  31349. 800d3ba: 4619 mov r1, r3
  31350. 800d3bc: 4610 mov r0, r2
  31351. 800d3be: f7f3 f957 bl 8000670 <vApplicationStackOverflowHook>
  31352. 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. */
  31353. 800d3c2: 4b27 ldr r3, [pc, #156] @ (800d460 <vTaskSwitchContext+0xdc>)
  31354. 800d3c4: 681b ldr r3, [r3, #0]
  31355. 800d3c6: 60fb str r3, [r7, #12]
  31356. 800d3c8: e011 b.n 800d3ee <vTaskSwitchContext+0x6a>
  31357. 800d3ca: 68fb ldr r3, [r7, #12]
  31358. 800d3cc: 2b00 cmp r3, #0
  31359. 800d3ce: d10b bne.n 800d3e8 <vTaskSwitchContext+0x64>
  31360. __asm volatile
  31361. 800d3d0: f04f 0350 mov.w r3, #80 @ 0x50
  31362. 800d3d4: f383 8811 msr BASEPRI, r3
  31363. 800d3d8: f3bf 8f6f isb sy
  31364. 800d3dc: f3bf 8f4f dsb sy
  31365. 800d3e0: 607b str r3, [r7, #4]
  31366. }
  31367. 800d3e2: bf00 nop
  31368. 800d3e4: bf00 nop
  31369. 800d3e6: e7fd b.n 800d3e4 <vTaskSwitchContext+0x60>
  31370. 800d3e8: 68fb ldr r3, [r7, #12]
  31371. 800d3ea: 3b01 subs r3, #1
  31372. 800d3ec: 60fb str r3, [r7, #12]
  31373. 800d3ee: 491d ldr r1, [pc, #116] @ (800d464 <vTaskSwitchContext+0xe0>)
  31374. 800d3f0: 68fa ldr r2, [r7, #12]
  31375. 800d3f2: 4613 mov r3, r2
  31376. 800d3f4: 009b lsls r3, r3, #2
  31377. 800d3f6: 4413 add r3, r2
  31378. 800d3f8: 009b lsls r3, r3, #2
  31379. 800d3fa: 440b add r3, r1
  31380. 800d3fc: 681b ldr r3, [r3, #0]
  31381. 800d3fe: 2b00 cmp r3, #0
  31382. 800d400: d0e3 beq.n 800d3ca <vTaskSwitchContext+0x46>
  31383. 800d402: 68fa ldr r2, [r7, #12]
  31384. 800d404: 4613 mov r3, r2
  31385. 800d406: 009b lsls r3, r3, #2
  31386. 800d408: 4413 add r3, r2
  31387. 800d40a: 009b lsls r3, r3, #2
  31388. 800d40c: 4a15 ldr r2, [pc, #84] @ (800d464 <vTaskSwitchContext+0xe0>)
  31389. 800d40e: 4413 add r3, r2
  31390. 800d410: 60bb str r3, [r7, #8]
  31391. 800d412: 68bb ldr r3, [r7, #8]
  31392. 800d414: 685b ldr r3, [r3, #4]
  31393. 800d416: 685a ldr r2, [r3, #4]
  31394. 800d418: 68bb ldr r3, [r7, #8]
  31395. 800d41a: 605a str r2, [r3, #4]
  31396. 800d41c: 68bb ldr r3, [r7, #8]
  31397. 800d41e: 685a ldr r2, [r3, #4]
  31398. 800d420: 68bb ldr r3, [r7, #8]
  31399. 800d422: 3308 adds r3, #8
  31400. 800d424: 429a cmp r2, r3
  31401. 800d426: d104 bne.n 800d432 <vTaskSwitchContext+0xae>
  31402. 800d428: 68bb ldr r3, [r7, #8]
  31403. 800d42a: 685b ldr r3, [r3, #4]
  31404. 800d42c: 685a ldr r2, [r3, #4]
  31405. 800d42e: 68bb ldr r3, [r7, #8]
  31406. 800d430: 605a str r2, [r3, #4]
  31407. 800d432: 68bb ldr r3, [r7, #8]
  31408. 800d434: 685b ldr r3, [r3, #4]
  31409. 800d436: 68db ldr r3, [r3, #12]
  31410. 800d438: 4a08 ldr r2, [pc, #32] @ (800d45c <vTaskSwitchContext+0xd8>)
  31411. 800d43a: 6013 str r3, [r2, #0]
  31412. 800d43c: 4a08 ldr r2, [pc, #32] @ (800d460 <vTaskSwitchContext+0xdc>)
  31413. 800d43e: 68fb ldr r3, [r7, #12]
  31414. 800d440: 6013 str r3, [r2, #0]
  31415. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  31416. 800d442: 4b06 ldr r3, [pc, #24] @ (800d45c <vTaskSwitchContext+0xd8>)
  31417. 800d444: 681b ldr r3, [r3, #0]
  31418. 800d446: 3354 adds r3, #84 @ 0x54
  31419. 800d448: 4a07 ldr r2, [pc, #28] @ (800d468 <vTaskSwitchContext+0xe4>)
  31420. 800d44a: 6013 str r3, [r2, #0]
  31421. }
  31422. 800d44c: bf00 nop
  31423. 800d44e: 3710 adds r7, #16
  31424. 800d450: 46bd mov sp, r7
  31425. 800d452: bd80 pop {r7, pc}
  31426. 800d454: 24002624 .word 0x24002624
  31427. 800d458: 24002610 .word 0x24002610
  31428. 800d45c: 24002128 .word 0x24002128
  31429. 800d460: 24002604 .word 0x24002604
  31430. 800d464: 2400212c .word 0x2400212c
  31431. 800d468: 24000020 .word 0x24000020
  31432. 0800d46c <vTaskPlaceOnEventList>:
  31433. /*-----------------------------------------------------------*/
  31434. void vTaskPlaceOnEventList( List_t * const pxEventList, const TickType_t xTicksToWait )
  31435. {
  31436. 800d46c: b580 push {r7, lr}
  31437. 800d46e: b084 sub sp, #16
  31438. 800d470: af00 add r7, sp, #0
  31439. 800d472: 6078 str r0, [r7, #4]
  31440. 800d474: 6039 str r1, [r7, #0]
  31441. configASSERT( pxEventList );
  31442. 800d476: 687b ldr r3, [r7, #4]
  31443. 800d478: 2b00 cmp r3, #0
  31444. 800d47a: d10b bne.n 800d494 <vTaskPlaceOnEventList+0x28>
  31445. __asm volatile
  31446. 800d47c: f04f 0350 mov.w r3, #80 @ 0x50
  31447. 800d480: f383 8811 msr BASEPRI, r3
  31448. 800d484: f3bf 8f6f isb sy
  31449. 800d488: f3bf 8f4f dsb sy
  31450. 800d48c: 60fb str r3, [r7, #12]
  31451. }
  31452. 800d48e: bf00 nop
  31453. 800d490: bf00 nop
  31454. 800d492: e7fd b.n 800d490 <vTaskPlaceOnEventList+0x24>
  31455. /* Place the event list item of the TCB in the appropriate event list.
  31456. This is placed in the list in priority order so the highest priority task
  31457. is the first to be woken by the event. The queue that contains the event
  31458. list is locked, preventing simultaneous access from interrupts. */
  31459. vListInsert( pxEventList, &( pxCurrentTCB->xEventListItem ) );
  31460. 800d494: 4b07 ldr r3, [pc, #28] @ (800d4b4 <vTaskPlaceOnEventList+0x48>)
  31461. 800d496: 681b ldr r3, [r3, #0]
  31462. 800d498: 3318 adds r3, #24
  31463. 800d49a: 4619 mov r1, r3
  31464. 800d49c: 6878 ldr r0, [r7, #4]
  31465. 800d49e: f7fe fa60 bl 800b962 <vListInsert>
  31466. prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );
  31467. 800d4a2: 2101 movs r1, #1
  31468. 800d4a4: 6838 ldr r0, [r7, #0]
  31469. 800d4a6: f000 fded bl 800e084 <prvAddCurrentTaskToDelayedList>
  31470. }
  31471. 800d4aa: bf00 nop
  31472. 800d4ac: 3710 adds r7, #16
  31473. 800d4ae: 46bd mov sp, r7
  31474. 800d4b0: bd80 pop {r7, pc}
  31475. 800d4b2: bf00 nop
  31476. 800d4b4: 24002128 .word 0x24002128
  31477. 0800d4b8 <vTaskPlaceOnEventListRestricted>:
  31478. /*-----------------------------------------------------------*/
  31479. #if( configUSE_TIMERS == 1 )
  31480. void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely )
  31481. {
  31482. 800d4b8: b580 push {r7, lr}
  31483. 800d4ba: b086 sub sp, #24
  31484. 800d4bc: af00 add r7, sp, #0
  31485. 800d4be: 60f8 str r0, [r7, #12]
  31486. 800d4c0: 60b9 str r1, [r7, #8]
  31487. 800d4c2: 607a str r2, [r7, #4]
  31488. configASSERT( pxEventList );
  31489. 800d4c4: 68fb ldr r3, [r7, #12]
  31490. 800d4c6: 2b00 cmp r3, #0
  31491. 800d4c8: d10b bne.n 800d4e2 <vTaskPlaceOnEventListRestricted+0x2a>
  31492. __asm volatile
  31493. 800d4ca: f04f 0350 mov.w r3, #80 @ 0x50
  31494. 800d4ce: f383 8811 msr BASEPRI, r3
  31495. 800d4d2: f3bf 8f6f isb sy
  31496. 800d4d6: f3bf 8f4f dsb sy
  31497. 800d4da: 617b str r3, [r7, #20]
  31498. }
  31499. 800d4dc: bf00 nop
  31500. 800d4de: bf00 nop
  31501. 800d4e0: e7fd b.n 800d4de <vTaskPlaceOnEventListRestricted+0x26>
  31502. /* Place the event list item of the TCB in the appropriate event list.
  31503. In this case it is assume that this is the only task that is going to
  31504. be waiting on this event list, so the faster vListInsertEnd() function
  31505. can be used in place of vListInsert. */
  31506. vListInsertEnd( pxEventList, &( pxCurrentTCB->xEventListItem ) );
  31507. 800d4e2: 4b0a ldr r3, [pc, #40] @ (800d50c <vTaskPlaceOnEventListRestricted+0x54>)
  31508. 800d4e4: 681b ldr r3, [r3, #0]
  31509. 800d4e6: 3318 adds r3, #24
  31510. 800d4e8: 4619 mov r1, r3
  31511. 800d4ea: 68f8 ldr r0, [r7, #12]
  31512. 800d4ec: f7fe fa15 bl 800b91a <vListInsertEnd>
  31513. /* If the task should block indefinitely then set the block time to a
  31514. value that will be recognised as an indefinite delay inside the
  31515. prvAddCurrentTaskToDelayedList() function. */
  31516. if( xWaitIndefinitely != pdFALSE )
  31517. 800d4f0: 687b ldr r3, [r7, #4]
  31518. 800d4f2: 2b00 cmp r3, #0
  31519. 800d4f4: d002 beq.n 800d4fc <vTaskPlaceOnEventListRestricted+0x44>
  31520. {
  31521. xTicksToWait = portMAX_DELAY;
  31522. 800d4f6: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  31523. 800d4fa: 60bb str r3, [r7, #8]
  31524. }
  31525. traceTASK_DELAY_UNTIL( ( xTickCount + xTicksToWait ) );
  31526. prvAddCurrentTaskToDelayedList( xTicksToWait, xWaitIndefinitely );
  31527. 800d4fc: 6879 ldr r1, [r7, #4]
  31528. 800d4fe: 68b8 ldr r0, [r7, #8]
  31529. 800d500: f000 fdc0 bl 800e084 <prvAddCurrentTaskToDelayedList>
  31530. }
  31531. 800d504: bf00 nop
  31532. 800d506: 3718 adds r7, #24
  31533. 800d508: 46bd mov sp, r7
  31534. 800d50a: bd80 pop {r7, pc}
  31535. 800d50c: 24002128 .word 0x24002128
  31536. 0800d510 <xTaskRemoveFromEventList>:
  31537. #endif /* configUSE_TIMERS */
  31538. /*-----------------------------------------------------------*/
  31539. BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList )
  31540. {
  31541. 800d510: b580 push {r7, lr}
  31542. 800d512: b086 sub sp, #24
  31543. 800d514: af00 add r7, sp, #0
  31544. 800d516: 6078 str r0, [r7, #4]
  31545. get called - the lock count on the queue will get modified instead. This
  31546. means exclusive access to the event list is guaranteed here.
  31547. This function assumes that a check has already been made to ensure that
  31548. pxEventList is not empty. */
  31549. 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. */
  31550. 800d518: 687b ldr r3, [r7, #4]
  31551. 800d51a: 68db ldr r3, [r3, #12]
  31552. 800d51c: 68db ldr r3, [r3, #12]
  31553. 800d51e: 613b str r3, [r7, #16]
  31554. configASSERT( pxUnblockedTCB );
  31555. 800d520: 693b ldr r3, [r7, #16]
  31556. 800d522: 2b00 cmp r3, #0
  31557. 800d524: d10b bne.n 800d53e <xTaskRemoveFromEventList+0x2e>
  31558. __asm volatile
  31559. 800d526: f04f 0350 mov.w r3, #80 @ 0x50
  31560. 800d52a: f383 8811 msr BASEPRI, r3
  31561. 800d52e: f3bf 8f6f isb sy
  31562. 800d532: f3bf 8f4f dsb sy
  31563. 800d536: 60fb str r3, [r7, #12]
  31564. }
  31565. 800d538: bf00 nop
  31566. 800d53a: bf00 nop
  31567. 800d53c: e7fd b.n 800d53a <xTaskRemoveFromEventList+0x2a>
  31568. ( void ) uxListRemove( &( pxUnblockedTCB->xEventListItem ) );
  31569. 800d53e: 693b ldr r3, [r7, #16]
  31570. 800d540: 3318 adds r3, #24
  31571. 800d542: 4618 mov r0, r3
  31572. 800d544: f7fe fa46 bl 800b9d4 <uxListRemove>
  31573. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  31574. 800d548: 4b1d ldr r3, [pc, #116] @ (800d5c0 <xTaskRemoveFromEventList+0xb0>)
  31575. 800d54a: 681b ldr r3, [r3, #0]
  31576. 800d54c: 2b00 cmp r3, #0
  31577. 800d54e: d11d bne.n 800d58c <xTaskRemoveFromEventList+0x7c>
  31578. {
  31579. ( void ) uxListRemove( &( pxUnblockedTCB->xStateListItem ) );
  31580. 800d550: 693b ldr r3, [r7, #16]
  31581. 800d552: 3304 adds r3, #4
  31582. 800d554: 4618 mov r0, r3
  31583. 800d556: f7fe fa3d bl 800b9d4 <uxListRemove>
  31584. prvAddTaskToReadyList( pxUnblockedTCB );
  31585. 800d55a: 693b ldr r3, [r7, #16]
  31586. 800d55c: 6ada ldr r2, [r3, #44] @ 0x2c
  31587. 800d55e: 4b19 ldr r3, [pc, #100] @ (800d5c4 <xTaskRemoveFromEventList+0xb4>)
  31588. 800d560: 681b ldr r3, [r3, #0]
  31589. 800d562: 429a cmp r2, r3
  31590. 800d564: d903 bls.n 800d56e <xTaskRemoveFromEventList+0x5e>
  31591. 800d566: 693b ldr r3, [r7, #16]
  31592. 800d568: 6adb ldr r3, [r3, #44] @ 0x2c
  31593. 800d56a: 4a16 ldr r2, [pc, #88] @ (800d5c4 <xTaskRemoveFromEventList+0xb4>)
  31594. 800d56c: 6013 str r3, [r2, #0]
  31595. 800d56e: 693b ldr r3, [r7, #16]
  31596. 800d570: 6ada ldr r2, [r3, #44] @ 0x2c
  31597. 800d572: 4613 mov r3, r2
  31598. 800d574: 009b lsls r3, r3, #2
  31599. 800d576: 4413 add r3, r2
  31600. 800d578: 009b lsls r3, r3, #2
  31601. 800d57a: 4a13 ldr r2, [pc, #76] @ (800d5c8 <xTaskRemoveFromEventList+0xb8>)
  31602. 800d57c: 441a add r2, r3
  31603. 800d57e: 693b ldr r3, [r7, #16]
  31604. 800d580: 3304 adds r3, #4
  31605. 800d582: 4619 mov r1, r3
  31606. 800d584: 4610 mov r0, r2
  31607. 800d586: f7fe f9c8 bl 800b91a <vListInsertEnd>
  31608. 800d58a: e005 b.n 800d598 <xTaskRemoveFromEventList+0x88>
  31609. }
  31610. else
  31611. {
  31612. /* The delayed and ready lists cannot be accessed, so hold this task
  31613. pending until the scheduler is resumed. */
  31614. vListInsertEnd( &( xPendingReadyList ), &( pxUnblockedTCB->xEventListItem ) );
  31615. 800d58c: 693b ldr r3, [r7, #16]
  31616. 800d58e: 3318 adds r3, #24
  31617. 800d590: 4619 mov r1, r3
  31618. 800d592: 480e ldr r0, [pc, #56] @ (800d5cc <xTaskRemoveFromEventList+0xbc>)
  31619. 800d594: f7fe f9c1 bl 800b91a <vListInsertEnd>
  31620. }
  31621. if( pxUnblockedTCB->uxPriority > pxCurrentTCB->uxPriority )
  31622. 800d598: 693b ldr r3, [r7, #16]
  31623. 800d59a: 6ada ldr r2, [r3, #44] @ 0x2c
  31624. 800d59c: 4b0c ldr r3, [pc, #48] @ (800d5d0 <xTaskRemoveFromEventList+0xc0>)
  31625. 800d59e: 681b ldr r3, [r3, #0]
  31626. 800d5a0: 6adb ldr r3, [r3, #44] @ 0x2c
  31627. 800d5a2: 429a cmp r2, r3
  31628. 800d5a4: d905 bls.n 800d5b2 <xTaskRemoveFromEventList+0xa2>
  31629. {
  31630. /* Return true if the task removed from the event list has a higher
  31631. priority than the calling task. This allows the calling task to know if
  31632. it should force a context switch now. */
  31633. xReturn = pdTRUE;
  31634. 800d5a6: 2301 movs r3, #1
  31635. 800d5a8: 617b str r3, [r7, #20]
  31636. /* Mark that a yield is pending in case the user is not using the
  31637. "xHigherPriorityTaskWoken" parameter to an ISR safe FreeRTOS function. */
  31638. xYieldPending = pdTRUE;
  31639. 800d5aa: 4b0a ldr r3, [pc, #40] @ (800d5d4 <xTaskRemoveFromEventList+0xc4>)
  31640. 800d5ac: 2201 movs r2, #1
  31641. 800d5ae: 601a str r2, [r3, #0]
  31642. 800d5b0: e001 b.n 800d5b6 <xTaskRemoveFromEventList+0xa6>
  31643. }
  31644. else
  31645. {
  31646. xReturn = pdFALSE;
  31647. 800d5b2: 2300 movs r3, #0
  31648. 800d5b4: 617b str r3, [r7, #20]
  31649. }
  31650. return xReturn;
  31651. 800d5b6: 697b ldr r3, [r7, #20]
  31652. }
  31653. 800d5b8: 4618 mov r0, r3
  31654. 800d5ba: 3718 adds r7, #24
  31655. 800d5bc: 46bd mov sp, r7
  31656. 800d5be: bd80 pop {r7, pc}
  31657. 800d5c0: 24002624 .word 0x24002624
  31658. 800d5c4: 24002604 .word 0x24002604
  31659. 800d5c8: 2400212c .word 0x2400212c
  31660. 800d5cc: 240025bc .word 0x240025bc
  31661. 800d5d0: 24002128 .word 0x24002128
  31662. 800d5d4: 24002610 .word 0x24002610
  31663. 0800d5d8 <vTaskSetTimeOutState>:
  31664. }
  31665. }
  31666. /*-----------------------------------------------------------*/
  31667. void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut )
  31668. {
  31669. 800d5d8: b580 push {r7, lr}
  31670. 800d5da: b084 sub sp, #16
  31671. 800d5dc: af00 add r7, sp, #0
  31672. 800d5de: 6078 str r0, [r7, #4]
  31673. configASSERT( pxTimeOut );
  31674. 800d5e0: 687b ldr r3, [r7, #4]
  31675. 800d5e2: 2b00 cmp r3, #0
  31676. 800d5e4: d10b bne.n 800d5fe <vTaskSetTimeOutState+0x26>
  31677. __asm volatile
  31678. 800d5e6: f04f 0350 mov.w r3, #80 @ 0x50
  31679. 800d5ea: f383 8811 msr BASEPRI, r3
  31680. 800d5ee: f3bf 8f6f isb sy
  31681. 800d5f2: f3bf 8f4f dsb sy
  31682. 800d5f6: 60fb str r3, [r7, #12]
  31683. }
  31684. 800d5f8: bf00 nop
  31685. 800d5fa: bf00 nop
  31686. 800d5fc: e7fd b.n 800d5fa <vTaskSetTimeOutState+0x22>
  31687. taskENTER_CRITICAL();
  31688. 800d5fe: f001 fa23 bl 800ea48 <vPortEnterCritical>
  31689. {
  31690. pxTimeOut->xOverflowCount = xNumOfOverflows;
  31691. 800d602: 4b07 ldr r3, [pc, #28] @ (800d620 <vTaskSetTimeOutState+0x48>)
  31692. 800d604: 681a ldr r2, [r3, #0]
  31693. 800d606: 687b ldr r3, [r7, #4]
  31694. 800d608: 601a str r2, [r3, #0]
  31695. pxTimeOut->xTimeOnEntering = xTickCount;
  31696. 800d60a: 4b06 ldr r3, [pc, #24] @ (800d624 <vTaskSetTimeOutState+0x4c>)
  31697. 800d60c: 681a ldr r2, [r3, #0]
  31698. 800d60e: 687b ldr r3, [r7, #4]
  31699. 800d610: 605a str r2, [r3, #4]
  31700. }
  31701. taskEXIT_CRITICAL();
  31702. 800d612: f001 fa4b bl 800eaac <vPortExitCritical>
  31703. }
  31704. 800d616: bf00 nop
  31705. 800d618: 3710 adds r7, #16
  31706. 800d61a: 46bd mov sp, r7
  31707. 800d61c: bd80 pop {r7, pc}
  31708. 800d61e: bf00 nop
  31709. 800d620: 24002614 .word 0x24002614
  31710. 800d624: 24002600 .word 0x24002600
  31711. 0800d628 <vTaskInternalSetTimeOutState>:
  31712. /*-----------------------------------------------------------*/
  31713. void vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut )
  31714. {
  31715. 800d628: b480 push {r7}
  31716. 800d62a: b083 sub sp, #12
  31717. 800d62c: af00 add r7, sp, #0
  31718. 800d62e: 6078 str r0, [r7, #4]
  31719. /* For internal use only as it does not use a critical section. */
  31720. pxTimeOut->xOverflowCount = xNumOfOverflows;
  31721. 800d630: 4b06 ldr r3, [pc, #24] @ (800d64c <vTaskInternalSetTimeOutState+0x24>)
  31722. 800d632: 681a ldr r2, [r3, #0]
  31723. 800d634: 687b ldr r3, [r7, #4]
  31724. 800d636: 601a str r2, [r3, #0]
  31725. pxTimeOut->xTimeOnEntering = xTickCount;
  31726. 800d638: 4b05 ldr r3, [pc, #20] @ (800d650 <vTaskInternalSetTimeOutState+0x28>)
  31727. 800d63a: 681a ldr r2, [r3, #0]
  31728. 800d63c: 687b ldr r3, [r7, #4]
  31729. 800d63e: 605a str r2, [r3, #4]
  31730. }
  31731. 800d640: bf00 nop
  31732. 800d642: 370c adds r7, #12
  31733. 800d644: 46bd mov sp, r7
  31734. 800d646: f85d 7b04 ldr.w r7, [sp], #4
  31735. 800d64a: 4770 bx lr
  31736. 800d64c: 24002614 .word 0x24002614
  31737. 800d650: 24002600 .word 0x24002600
  31738. 0800d654 <xTaskCheckForTimeOut>:
  31739. /*-----------------------------------------------------------*/
  31740. BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait )
  31741. {
  31742. 800d654: b580 push {r7, lr}
  31743. 800d656: b088 sub sp, #32
  31744. 800d658: af00 add r7, sp, #0
  31745. 800d65a: 6078 str r0, [r7, #4]
  31746. 800d65c: 6039 str r1, [r7, #0]
  31747. BaseType_t xReturn;
  31748. configASSERT( pxTimeOut );
  31749. 800d65e: 687b ldr r3, [r7, #4]
  31750. 800d660: 2b00 cmp r3, #0
  31751. 800d662: d10b bne.n 800d67c <xTaskCheckForTimeOut+0x28>
  31752. __asm volatile
  31753. 800d664: f04f 0350 mov.w r3, #80 @ 0x50
  31754. 800d668: f383 8811 msr BASEPRI, r3
  31755. 800d66c: f3bf 8f6f isb sy
  31756. 800d670: f3bf 8f4f dsb sy
  31757. 800d674: 613b str r3, [r7, #16]
  31758. }
  31759. 800d676: bf00 nop
  31760. 800d678: bf00 nop
  31761. 800d67a: e7fd b.n 800d678 <xTaskCheckForTimeOut+0x24>
  31762. configASSERT( pxTicksToWait );
  31763. 800d67c: 683b ldr r3, [r7, #0]
  31764. 800d67e: 2b00 cmp r3, #0
  31765. 800d680: d10b bne.n 800d69a <xTaskCheckForTimeOut+0x46>
  31766. __asm volatile
  31767. 800d682: f04f 0350 mov.w r3, #80 @ 0x50
  31768. 800d686: f383 8811 msr BASEPRI, r3
  31769. 800d68a: f3bf 8f6f isb sy
  31770. 800d68e: f3bf 8f4f dsb sy
  31771. 800d692: 60fb str r3, [r7, #12]
  31772. }
  31773. 800d694: bf00 nop
  31774. 800d696: bf00 nop
  31775. 800d698: e7fd b.n 800d696 <xTaskCheckForTimeOut+0x42>
  31776. taskENTER_CRITICAL();
  31777. 800d69a: f001 f9d5 bl 800ea48 <vPortEnterCritical>
  31778. {
  31779. /* Minor optimisation. The tick count cannot change in this block. */
  31780. const TickType_t xConstTickCount = xTickCount;
  31781. 800d69e: 4b1d ldr r3, [pc, #116] @ (800d714 <xTaskCheckForTimeOut+0xc0>)
  31782. 800d6a0: 681b ldr r3, [r3, #0]
  31783. 800d6a2: 61bb str r3, [r7, #24]
  31784. const TickType_t xElapsedTime = xConstTickCount - pxTimeOut->xTimeOnEntering;
  31785. 800d6a4: 687b ldr r3, [r7, #4]
  31786. 800d6a6: 685b ldr r3, [r3, #4]
  31787. 800d6a8: 69ba ldr r2, [r7, #24]
  31788. 800d6aa: 1ad3 subs r3, r2, r3
  31789. 800d6ac: 617b str r3, [r7, #20]
  31790. }
  31791. else
  31792. #endif
  31793. #if ( INCLUDE_vTaskSuspend == 1 )
  31794. if( *pxTicksToWait == portMAX_DELAY )
  31795. 800d6ae: 683b ldr r3, [r7, #0]
  31796. 800d6b0: 681b ldr r3, [r3, #0]
  31797. 800d6b2: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  31798. 800d6b6: d102 bne.n 800d6be <xTaskCheckForTimeOut+0x6a>
  31799. {
  31800. /* If INCLUDE_vTaskSuspend is set to 1 and the block time
  31801. specified is the maximum block time then the task should block
  31802. indefinitely, and therefore never time out. */
  31803. xReturn = pdFALSE;
  31804. 800d6b8: 2300 movs r3, #0
  31805. 800d6ba: 61fb str r3, [r7, #28]
  31806. 800d6bc: e023 b.n 800d706 <xTaskCheckForTimeOut+0xb2>
  31807. }
  31808. else
  31809. #endif
  31810. if( ( xNumOfOverflows != pxTimeOut->xOverflowCount ) && ( xConstTickCount >= pxTimeOut->xTimeOnEntering ) ) /*lint !e525 Indentation preferred as is to make code within pre-processor directives clearer. */
  31811. 800d6be: 687b ldr r3, [r7, #4]
  31812. 800d6c0: 681a ldr r2, [r3, #0]
  31813. 800d6c2: 4b15 ldr r3, [pc, #84] @ (800d718 <xTaskCheckForTimeOut+0xc4>)
  31814. 800d6c4: 681b ldr r3, [r3, #0]
  31815. 800d6c6: 429a cmp r2, r3
  31816. 800d6c8: d007 beq.n 800d6da <xTaskCheckForTimeOut+0x86>
  31817. 800d6ca: 687b ldr r3, [r7, #4]
  31818. 800d6cc: 685b ldr r3, [r3, #4]
  31819. 800d6ce: 69ba ldr r2, [r7, #24]
  31820. 800d6d0: 429a cmp r2, r3
  31821. 800d6d2: d302 bcc.n 800d6da <xTaskCheckForTimeOut+0x86>
  31822. /* The tick count is greater than the time at which
  31823. vTaskSetTimeout() was called, but has also overflowed since
  31824. vTaskSetTimeOut() was called. It must have wrapped all the way
  31825. around and gone past again. This passed since vTaskSetTimeout()
  31826. was called. */
  31827. xReturn = pdTRUE;
  31828. 800d6d4: 2301 movs r3, #1
  31829. 800d6d6: 61fb str r3, [r7, #28]
  31830. 800d6d8: e015 b.n 800d706 <xTaskCheckForTimeOut+0xb2>
  31831. }
  31832. else if( xElapsedTime < *pxTicksToWait ) /*lint !e961 Explicit casting is only redundant with some compilers, whereas others require it to prevent integer conversion errors. */
  31833. 800d6da: 683b ldr r3, [r7, #0]
  31834. 800d6dc: 681b ldr r3, [r3, #0]
  31835. 800d6de: 697a ldr r2, [r7, #20]
  31836. 800d6e0: 429a cmp r2, r3
  31837. 800d6e2: d20b bcs.n 800d6fc <xTaskCheckForTimeOut+0xa8>
  31838. {
  31839. /* Not a genuine timeout. Adjust parameters for time remaining. */
  31840. *pxTicksToWait -= xElapsedTime;
  31841. 800d6e4: 683b ldr r3, [r7, #0]
  31842. 800d6e6: 681a ldr r2, [r3, #0]
  31843. 800d6e8: 697b ldr r3, [r7, #20]
  31844. 800d6ea: 1ad2 subs r2, r2, r3
  31845. 800d6ec: 683b ldr r3, [r7, #0]
  31846. 800d6ee: 601a str r2, [r3, #0]
  31847. vTaskInternalSetTimeOutState( pxTimeOut );
  31848. 800d6f0: 6878 ldr r0, [r7, #4]
  31849. 800d6f2: f7ff ff99 bl 800d628 <vTaskInternalSetTimeOutState>
  31850. xReturn = pdFALSE;
  31851. 800d6f6: 2300 movs r3, #0
  31852. 800d6f8: 61fb str r3, [r7, #28]
  31853. 800d6fa: e004 b.n 800d706 <xTaskCheckForTimeOut+0xb2>
  31854. }
  31855. else
  31856. {
  31857. *pxTicksToWait = 0;
  31858. 800d6fc: 683b ldr r3, [r7, #0]
  31859. 800d6fe: 2200 movs r2, #0
  31860. 800d700: 601a str r2, [r3, #0]
  31861. xReturn = pdTRUE;
  31862. 800d702: 2301 movs r3, #1
  31863. 800d704: 61fb str r3, [r7, #28]
  31864. }
  31865. }
  31866. taskEXIT_CRITICAL();
  31867. 800d706: f001 f9d1 bl 800eaac <vPortExitCritical>
  31868. return xReturn;
  31869. 800d70a: 69fb ldr r3, [r7, #28]
  31870. }
  31871. 800d70c: 4618 mov r0, r3
  31872. 800d70e: 3720 adds r7, #32
  31873. 800d710: 46bd mov sp, r7
  31874. 800d712: bd80 pop {r7, pc}
  31875. 800d714: 24002600 .word 0x24002600
  31876. 800d718: 24002614 .word 0x24002614
  31877. 0800d71c <vTaskMissedYield>:
  31878. /*-----------------------------------------------------------*/
  31879. void vTaskMissedYield( void )
  31880. {
  31881. 800d71c: b480 push {r7}
  31882. 800d71e: af00 add r7, sp, #0
  31883. xYieldPending = pdTRUE;
  31884. 800d720: 4b03 ldr r3, [pc, #12] @ (800d730 <vTaskMissedYield+0x14>)
  31885. 800d722: 2201 movs r2, #1
  31886. 800d724: 601a str r2, [r3, #0]
  31887. }
  31888. 800d726: bf00 nop
  31889. 800d728: 46bd mov sp, r7
  31890. 800d72a: f85d 7b04 ldr.w r7, [sp], #4
  31891. 800d72e: 4770 bx lr
  31892. 800d730: 24002610 .word 0x24002610
  31893. 0800d734 <prvIdleTask>:
  31894. *
  31895. * void prvIdleTask( void *pvParameters );
  31896. *
  31897. */
  31898. static portTASK_FUNCTION( prvIdleTask, pvParameters )
  31899. {
  31900. 800d734: b580 push {r7, lr}
  31901. 800d736: b082 sub sp, #8
  31902. 800d738: af00 add r7, sp, #0
  31903. 800d73a: 6078 str r0, [r7, #4]
  31904. for( ;; )
  31905. {
  31906. /* See if any tasks have deleted themselves - if so then the idle task
  31907. is responsible for freeing the deleted task's TCB and stack. */
  31908. prvCheckTasksWaitingTermination();
  31909. 800d73c: f000 f852 bl 800d7e4 <prvCheckTasksWaitingTermination>
  31910. A critical region is not required here as we are just reading from
  31911. the list, and an occasional incorrect value will not matter. If
  31912. the ready list at the idle priority contains more than one task
  31913. then a task other than the idle task is ready to execute. */
  31914. if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 )
  31915. 800d740: 4b06 ldr r3, [pc, #24] @ (800d75c <prvIdleTask+0x28>)
  31916. 800d742: 681b ldr r3, [r3, #0]
  31917. 800d744: 2b01 cmp r3, #1
  31918. 800d746: d9f9 bls.n 800d73c <prvIdleTask+0x8>
  31919. {
  31920. taskYIELD();
  31921. 800d748: 4b05 ldr r3, [pc, #20] @ (800d760 <prvIdleTask+0x2c>)
  31922. 800d74a: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  31923. 800d74e: 601a str r2, [r3, #0]
  31924. 800d750: f3bf 8f4f dsb sy
  31925. 800d754: f3bf 8f6f isb sy
  31926. prvCheckTasksWaitingTermination();
  31927. 800d758: e7f0 b.n 800d73c <prvIdleTask+0x8>
  31928. 800d75a: bf00 nop
  31929. 800d75c: 2400212c .word 0x2400212c
  31930. 800d760: e000ed04 .word 0xe000ed04
  31931. 0800d764 <prvInitialiseTaskLists>:
  31932. #endif /* portUSING_MPU_WRAPPERS */
  31933. /*-----------------------------------------------------------*/
  31934. static void prvInitialiseTaskLists( void )
  31935. {
  31936. 800d764: b580 push {r7, lr}
  31937. 800d766: b082 sub sp, #8
  31938. 800d768: af00 add r7, sp, #0
  31939. UBaseType_t uxPriority;
  31940. for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
  31941. 800d76a: 2300 movs r3, #0
  31942. 800d76c: 607b str r3, [r7, #4]
  31943. 800d76e: e00c b.n 800d78a <prvInitialiseTaskLists+0x26>
  31944. {
  31945. vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) );
  31946. 800d770: 687a ldr r2, [r7, #4]
  31947. 800d772: 4613 mov r3, r2
  31948. 800d774: 009b lsls r3, r3, #2
  31949. 800d776: 4413 add r3, r2
  31950. 800d778: 009b lsls r3, r3, #2
  31951. 800d77a: 4a12 ldr r2, [pc, #72] @ (800d7c4 <prvInitialiseTaskLists+0x60>)
  31952. 800d77c: 4413 add r3, r2
  31953. 800d77e: 4618 mov r0, r3
  31954. 800d780: f7fe f89e bl 800b8c0 <vListInitialise>
  31955. for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
  31956. 800d784: 687b ldr r3, [r7, #4]
  31957. 800d786: 3301 adds r3, #1
  31958. 800d788: 607b str r3, [r7, #4]
  31959. 800d78a: 687b ldr r3, [r7, #4]
  31960. 800d78c: 2b37 cmp r3, #55 @ 0x37
  31961. 800d78e: d9ef bls.n 800d770 <prvInitialiseTaskLists+0xc>
  31962. }
  31963. vListInitialise( &xDelayedTaskList1 );
  31964. 800d790: 480d ldr r0, [pc, #52] @ (800d7c8 <prvInitialiseTaskLists+0x64>)
  31965. 800d792: f7fe f895 bl 800b8c0 <vListInitialise>
  31966. vListInitialise( &xDelayedTaskList2 );
  31967. 800d796: 480d ldr r0, [pc, #52] @ (800d7cc <prvInitialiseTaskLists+0x68>)
  31968. 800d798: f7fe f892 bl 800b8c0 <vListInitialise>
  31969. vListInitialise( &xPendingReadyList );
  31970. 800d79c: 480c ldr r0, [pc, #48] @ (800d7d0 <prvInitialiseTaskLists+0x6c>)
  31971. 800d79e: f7fe f88f bl 800b8c0 <vListInitialise>
  31972. #if ( INCLUDE_vTaskDelete == 1 )
  31973. {
  31974. vListInitialise( &xTasksWaitingTermination );
  31975. 800d7a2: 480c ldr r0, [pc, #48] @ (800d7d4 <prvInitialiseTaskLists+0x70>)
  31976. 800d7a4: f7fe f88c bl 800b8c0 <vListInitialise>
  31977. }
  31978. #endif /* INCLUDE_vTaskDelete */
  31979. #if ( INCLUDE_vTaskSuspend == 1 )
  31980. {
  31981. vListInitialise( &xSuspendedTaskList );
  31982. 800d7a8: 480b ldr r0, [pc, #44] @ (800d7d8 <prvInitialiseTaskLists+0x74>)
  31983. 800d7aa: f7fe f889 bl 800b8c0 <vListInitialise>
  31984. }
  31985. #endif /* INCLUDE_vTaskSuspend */
  31986. /* Start with pxDelayedTaskList using list1 and the pxOverflowDelayedTaskList
  31987. using list2. */
  31988. pxDelayedTaskList = &xDelayedTaskList1;
  31989. 800d7ae: 4b0b ldr r3, [pc, #44] @ (800d7dc <prvInitialiseTaskLists+0x78>)
  31990. 800d7b0: 4a05 ldr r2, [pc, #20] @ (800d7c8 <prvInitialiseTaskLists+0x64>)
  31991. 800d7b2: 601a str r2, [r3, #0]
  31992. pxOverflowDelayedTaskList = &xDelayedTaskList2;
  31993. 800d7b4: 4b0a ldr r3, [pc, #40] @ (800d7e0 <prvInitialiseTaskLists+0x7c>)
  31994. 800d7b6: 4a05 ldr r2, [pc, #20] @ (800d7cc <prvInitialiseTaskLists+0x68>)
  31995. 800d7b8: 601a str r2, [r3, #0]
  31996. }
  31997. 800d7ba: bf00 nop
  31998. 800d7bc: 3708 adds r7, #8
  31999. 800d7be: 46bd mov sp, r7
  32000. 800d7c0: bd80 pop {r7, pc}
  32001. 800d7c2: bf00 nop
  32002. 800d7c4: 2400212c .word 0x2400212c
  32003. 800d7c8: 2400258c .word 0x2400258c
  32004. 800d7cc: 240025a0 .word 0x240025a0
  32005. 800d7d0: 240025bc .word 0x240025bc
  32006. 800d7d4: 240025d0 .word 0x240025d0
  32007. 800d7d8: 240025e8 .word 0x240025e8
  32008. 800d7dc: 240025b4 .word 0x240025b4
  32009. 800d7e0: 240025b8 .word 0x240025b8
  32010. 0800d7e4 <prvCheckTasksWaitingTermination>:
  32011. /*-----------------------------------------------------------*/
  32012. static void prvCheckTasksWaitingTermination( void )
  32013. {
  32014. 800d7e4: b580 push {r7, lr}
  32015. 800d7e6: b082 sub sp, #8
  32016. 800d7e8: af00 add r7, sp, #0
  32017. {
  32018. TCB_t *pxTCB;
  32019. /* uxDeletedTasksWaitingCleanUp is used to prevent taskENTER_CRITICAL()
  32020. being called too often in the idle task. */
  32021. while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
  32022. 800d7ea: e019 b.n 800d820 <prvCheckTasksWaitingTermination+0x3c>
  32023. {
  32024. taskENTER_CRITICAL();
  32025. 800d7ec: f001 f92c bl 800ea48 <vPortEnterCritical>
  32026. {
  32027. 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. */
  32028. 800d7f0: 4b10 ldr r3, [pc, #64] @ (800d834 <prvCheckTasksWaitingTermination+0x50>)
  32029. 800d7f2: 68db ldr r3, [r3, #12]
  32030. 800d7f4: 68db ldr r3, [r3, #12]
  32031. 800d7f6: 607b str r3, [r7, #4]
  32032. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  32033. 800d7f8: 687b ldr r3, [r7, #4]
  32034. 800d7fa: 3304 adds r3, #4
  32035. 800d7fc: 4618 mov r0, r3
  32036. 800d7fe: f7fe f8e9 bl 800b9d4 <uxListRemove>
  32037. --uxCurrentNumberOfTasks;
  32038. 800d802: 4b0d ldr r3, [pc, #52] @ (800d838 <prvCheckTasksWaitingTermination+0x54>)
  32039. 800d804: 681b ldr r3, [r3, #0]
  32040. 800d806: 3b01 subs r3, #1
  32041. 800d808: 4a0b ldr r2, [pc, #44] @ (800d838 <prvCheckTasksWaitingTermination+0x54>)
  32042. 800d80a: 6013 str r3, [r2, #0]
  32043. --uxDeletedTasksWaitingCleanUp;
  32044. 800d80c: 4b0b ldr r3, [pc, #44] @ (800d83c <prvCheckTasksWaitingTermination+0x58>)
  32045. 800d80e: 681b ldr r3, [r3, #0]
  32046. 800d810: 3b01 subs r3, #1
  32047. 800d812: 4a0a ldr r2, [pc, #40] @ (800d83c <prvCheckTasksWaitingTermination+0x58>)
  32048. 800d814: 6013 str r3, [r2, #0]
  32049. }
  32050. taskEXIT_CRITICAL();
  32051. 800d816: f001 f949 bl 800eaac <vPortExitCritical>
  32052. prvDeleteTCB( pxTCB );
  32053. 800d81a: 6878 ldr r0, [r7, #4]
  32054. 800d81c: f000 f810 bl 800d840 <prvDeleteTCB>
  32055. while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
  32056. 800d820: 4b06 ldr r3, [pc, #24] @ (800d83c <prvCheckTasksWaitingTermination+0x58>)
  32057. 800d822: 681b ldr r3, [r3, #0]
  32058. 800d824: 2b00 cmp r3, #0
  32059. 800d826: d1e1 bne.n 800d7ec <prvCheckTasksWaitingTermination+0x8>
  32060. }
  32061. }
  32062. #endif /* INCLUDE_vTaskDelete */
  32063. }
  32064. 800d828: bf00 nop
  32065. 800d82a: bf00 nop
  32066. 800d82c: 3708 adds r7, #8
  32067. 800d82e: 46bd mov sp, r7
  32068. 800d830: bd80 pop {r7, pc}
  32069. 800d832: bf00 nop
  32070. 800d834: 240025d0 .word 0x240025d0
  32071. 800d838: 240025fc .word 0x240025fc
  32072. 800d83c: 240025e4 .word 0x240025e4
  32073. 0800d840 <prvDeleteTCB>:
  32074. /*-----------------------------------------------------------*/
  32075. #if ( INCLUDE_vTaskDelete == 1 )
  32076. static void prvDeleteTCB( TCB_t *pxTCB )
  32077. {
  32078. 800d840: b580 push {r7, lr}
  32079. 800d842: b084 sub sp, #16
  32080. 800d844: af00 add r7, sp, #0
  32081. 800d846: 6078 str r0, [r7, #4]
  32082. to the task to free any memory allocated at the application level.
  32083. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  32084. for additional information. */
  32085. #if ( configUSE_NEWLIB_REENTRANT == 1 )
  32086. {
  32087. _reclaim_reent( &( pxTCB->xNewLib_reent ) );
  32088. 800d848: 687b ldr r3, [r7, #4]
  32089. 800d84a: 3354 adds r3, #84 @ 0x54
  32090. 800d84c: 4618 mov r0, r3
  32091. 800d84e: f001 fd3b bl 800f2c8 <_reclaim_reent>
  32092. #elif( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 !e9029 Macro has been consolidated for readability reasons. */
  32093. {
  32094. /* The task could have been allocated statically or dynamically, so
  32095. check what was statically allocated before trying to free the
  32096. memory. */
  32097. if( pxTCB->ucStaticallyAllocated == tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB )
  32098. 800d852: 687b ldr r3, [r7, #4]
  32099. 800d854: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  32100. 800d858: 2b00 cmp r3, #0
  32101. 800d85a: d108 bne.n 800d86e <prvDeleteTCB+0x2e>
  32102. {
  32103. /* Both the stack and TCB were allocated dynamically, so both
  32104. must be freed. */
  32105. vPortFree( pxTCB->pxStack );
  32106. 800d85c: 687b ldr r3, [r7, #4]
  32107. 800d85e: 6b1b ldr r3, [r3, #48] @ 0x30
  32108. 800d860: 4618 mov r0, r3
  32109. 800d862: f001 fae1 bl 800ee28 <vPortFree>
  32110. vPortFree( pxTCB );
  32111. 800d866: 6878 ldr r0, [r7, #4]
  32112. 800d868: f001 fade bl 800ee28 <vPortFree>
  32113. configASSERT( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB );
  32114. mtCOVERAGE_TEST_MARKER();
  32115. }
  32116. }
  32117. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  32118. }
  32119. 800d86c: e019 b.n 800d8a2 <prvDeleteTCB+0x62>
  32120. else if( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_ONLY )
  32121. 800d86e: 687b ldr r3, [r7, #4]
  32122. 800d870: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  32123. 800d874: 2b01 cmp r3, #1
  32124. 800d876: d103 bne.n 800d880 <prvDeleteTCB+0x40>
  32125. vPortFree( pxTCB );
  32126. 800d878: 6878 ldr r0, [r7, #4]
  32127. 800d87a: f001 fad5 bl 800ee28 <vPortFree>
  32128. }
  32129. 800d87e: e010 b.n 800d8a2 <prvDeleteTCB+0x62>
  32130. configASSERT( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB );
  32131. 800d880: 687b ldr r3, [r7, #4]
  32132. 800d882: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  32133. 800d886: 2b02 cmp r3, #2
  32134. 800d888: d00b beq.n 800d8a2 <prvDeleteTCB+0x62>
  32135. __asm volatile
  32136. 800d88a: f04f 0350 mov.w r3, #80 @ 0x50
  32137. 800d88e: f383 8811 msr BASEPRI, r3
  32138. 800d892: f3bf 8f6f isb sy
  32139. 800d896: f3bf 8f4f dsb sy
  32140. 800d89a: 60fb str r3, [r7, #12]
  32141. }
  32142. 800d89c: bf00 nop
  32143. 800d89e: bf00 nop
  32144. 800d8a0: e7fd b.n 800d89e <prvDeleteTCB+0x5e>
  32145. }
  32146. 800d8a2: bf00 nop
  32147. 800d8a4: 3710 adds r7, #16
  32148. 800d8a6: 46bd mov sp, r7
  32149. 800d8a8: bd80 pop {r7, pc}
  32150. ...
  32151. 0800d8ac <prvResetNextTaskUnblockTime>:
  32152. #endif /* INCLUDE_vTaskDelete */
  32153. /*-----------------------------------------------------------*/
  32154. static void prvResetNextTaskUnblockTime( void )
  32155. {
  32156. 800d8ac: b480 push {r7}
  32157. 800d8ae: b083 sub sp, #12
  32158. 800d8b0: af00 add r7, sp, #0
  32159. TCB_t *pxTCB;
  32160. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  32161. 800d8b2: 4b0c ldr r3, [pc, #48] @ (800d8e4 <prvResetNextTaskUnblockTime+0x38>)
  32162. 800d8b4: 681b ldr r3, [r3, #0]
  32163. 800d8b6: 681b ldr r3, [r3, #0]
  32164. 800d8b8: 2b00 cmp r3, #0
  32165. 800d8ba: d104 bne.n 800d8c6 <prvResetNextTaskUnblockTime+0x1a>
  32166. {
  32167. /* The new current delayed list is empty. Set xNextTaskUnblockTime to
  32168. the maximum possible value so it is extremely unlikely that the
  32169. if( xTickCount >= xNextTaskUnblockTime ) test will pass until
  32170. there is an item in the delayed list. */
  32171. xNextTaskUnblockTime = portMAX_DELAY;
  32172. 800d8bc: 4b0a ldr r3, [pc, #40] @ (800d8e8 <prvResetNextTaskUnblockTime+0x3c>)
  32173. 800d8be: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  32174. 800d8c2: 601a str r2, [r3, #0]
  32175. which the task at the head of the delayed list should be removed
  32176. from the Blocked state. */
  32177. ( 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. */
  32178. xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xStateListItem ) );
  32179. }
  32180. }
  32181. 800d8c4: e008 b.n 800d8d8 <prvResetNextTaskUnblockTime+0x2c>
  32182. ( 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. */
  32183. 800d8c6: 4b07 ldr r3, [pc, #28] @ (800d8e4 <prvResetNextTaskUnblockTime+0x38>)
  32184. 800d8c8: 681b ldr r3, [r3, #0]
  32185. 800d8ca: 68db ldr r3, [r3, #12]
  32186. 800d8cc: 68db ldr r3, [r3, #12]
  32187. 800d8ce: 607b str r3, [r7, #4]
  32188. xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xStateListItem ) );
  32189. 800d8d0: 687b ldr r3, [r7, #4]
  32190. 800d8d2: 685b ldr r3, [r3, #4]
  32191. 800d8d4: 4a04 ldr r2, [pc, #16] @ (800d8e8 <prvResetNextTaskUnblockTime+0x3c>)
  32192. 800d8d6: 6013 str r3, [r2, #0]
  32193. }
  32194. 800d8d8: bf00 nop
  32195. 800d8da: 370c adds r7, #12
  32196. 800d8dc: 46bd mov sp, r7
  32197. 800d8de: f85d 7b04 ldr.w r7, [sp], #4
  32198. 800d8e2: 4770 bx lr
  32199. 800d8e4: 240025b4 .word 0x240025b4
  32200. 800d8e8: 2400261c .word 0x2400261c
  32201. 0800d8ec <xTaskGetCurrentTaskHandle>:
  32202. /*-----------------------------------------------------------*/
  32203. #if ( ( INCLUDE_xTaskGetCurrentTaskHandle == 1 ) || ( configUSE_MUTEXES == 1 ) )
  32204. TaskHandle_t xTaskGetCurrentTaskHandle( void )
  32205. {
  32206. 800d8ec: b480 push {r7}
  32207. 800d8ee: b083 sub sp, #12
  32208. 800d8f0: af00 add r7, sp, #0
  32209. TaskHandle_t xReturn;
  32210. /* A critical section is not required as this is not called from
  32211. an interrupt and the current TCB will always be the same for any
  32212. individual execution thread. */
  32213. xReturn = pxCurrentTCB;
  32214. 800d8f2: 4b05 ldr r3, [pc, #20] @ (800d908 <xTaskGetCurrentTaskHandle+0x1c>)
  32215. 800d8f4: 681b ldr r3, [r3, #0]
  32216. 800d8f6: 607b str r3, [r7, #4]
  32217. return xReturn;
  32218. 800d8f8: 687b ldr r3, [r7, #4]
  32219. }
  32220. 800d8fa: 4618 mov r0, r3
  32221. 800d8fc: 370c adds r7, #12
  32222. 800d8fe: 46bd mov sp, r7
  32223. 800d900: f85d 7b04 ldr.w r7, [sp], #4
  32224. 800d904: 4770 bx lr
  32225. 800d906: bf00 nop
  32226. 800d908: 24002128 .word 0x24002128
  32227. 0800d90c <xTaskGetSchedulerState>:
  32228. /*-----------------------------------------------------------*/
  32229. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  32230. BaseType_t xTaskGetSchedulerState( void )
  32231. {
  32232. 800d90c: b480 push {r7}
  32233. 800d90e: b083 sub sp, #12
  32234. 800d910: af00 add r7, sp, #0
  32235. BaseType_t xReturn;
  32236. if( xSchedulerRunning == pdFALSE )
  32237. 800d912: 4b0b ldr r3, [pc, #44] @ (800d940 <xTaskGetSchedulerState+0x34>)
  32238. 800d914: 681b ldr r3, [r3, #0]
  32239. 800d916: 2b00 cmp r3, #0
  32240. 800d918: d102 bne.n 800d920 <xTaskGetSchedulerState+0x14>
  32241. {
  32242. xReturn = taskSCHEDULER_NOT_STARTED;
  32243. 800d91a: 2301 movs r3, #1
  32244. 800d91c: 607b str r3, [r7, #4]
  32245. 800d91e: e008 b.n 800d932 <xTaskGetSchedulerState+0x26>
  32246. }
  32247. else
  32248. {
  32249. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  32250. 800d920: 4b08 ldr r3, [pc, #32] @ (800d944 <xTaskGetSchedulerState+0x38>)
  32251. 800d922: 681b ldr r3, [r3, #0]
  32252. 800d924: 2b00 cmp r3, #0
  32253. 800d926: d102 bne.n 800d92e <xTaskGetSchedulerState+0x22>
  32254. {
  32255. xReturn = taskSCHEDULER_RUNNING;
  32256. 800d928: 2302 movs r3, #2
  32257. 800d92a: 607b str r3, [r7, #4]
  32258. 800d92c: e001 b.n 800d932 <xTaskGetSchedulerState+0x26>
  32259. }
  32260. else
  32261. {
  32262. xReturn = taskSCHEDULER_SUSPENDED;
  32263. 800d92e: 2300 movs r3, #0
  32264. 800d930: 607b str r3, [r7, #4]
  32265. }
  32266. }
  32267. return xReturn;
  32268. 800d932: 687b ldr r3, [r7, #4]
  32269. }
  32270. 800d934: 4618 mov r0, r3
  32271. 800d936: 370c adds r7, #12
  32272. 800d938: 46bd mov sp, r7
  32273. 800d93a: f85d 7b04 ldr.w r7, [sp], #4
  32274. 800d93e: 4770 bx lr
  32275. 800d940: 24002608 .word 0x24002608
  32276. 800d944: 24002624 .word 0x24002624
  32277. 0800d948 <xTaskPriorityInherit>:
  32278. /*-----------------------------------------------------------*/
  32279. #if ( configUSE_MUTEXES == 1 )
  32280. BaseType_t xTaskPriorityInherit( TaskHandle_t const pxMutexHolder )
  32281. {
  32282. 800d948: b580 push {r7, lr}
  32283. 800d94a: b084 sub sp, #16
  32284. 800d94c: af00 add r7, sp, #0
  32285. 800d94e: 6078 str r0, [r7, #4]
  32286. TCB_t * const pxMutexHolderTCB = pxMutexHolder;
  32287. 800d950: 687b ldr r3, [r7, #4]
  32288. 800d952: 60bb str r3, [r7, #8]
  32289. BaseType_t xReturn = pdFALSE;
  32290. 800d954: 2300 movs r3, #0
  32291. 800d956: 60fb str r3, [r7, #12]
  32292. /* If the mutex was given back by an interrupt while the queue was
  32293. locked then the mutex holder might now be NULL. _RB_ Is this still
  32294. needed as interrupts can no longer use mutexes? */
  32295. if( pxMutexHolder != NULL )
  32296. 800d958: 687b ldr r3, [r7, #4]
  32297. 800d95a: 2b00 cmp r3, #0
  32298. 800d95c: d051 beq.n 800da02 <xTaskPriorityInherit+0xba>
  32299. {
  32300. /* If the holder of the mutex has a priority below the priority of
  32301. the task attempting to obtain the mutex then it will temporarily
  32302. inherit the priority of the task attempting to obtain the mutex. */
  32303. if( pxMutexHolderTCB->uxPriority < pxCurrentTCB->uxPriority )
  32304. 800d95e: 68bb ldr r3, [r7, #8]
  32305. 800d960: 6ada ldr r2, [r3, #44] @ 0x2c
  32306. 800d962: 4b2a ldr r3, [pc, #168] @ (800da0c <xTaskPriorityInherit+0xc4>)
  32307. 800d964: 681b ldr r3, [r3, #0]
  32308. 800d966: 6adb ldr r3, [r3, #44] @ 0x2c
  32309. 800d968: 429a cmp r2, r3
  32310. 800d96a: d241 bcs.n 800d9f0 <xTaskPriorityInherit+0xa8>
  32311. {
  32312. /* Adjust the mutex holder state to account for its new
  32313. priority. Only reset the event list item value if the value is
  32314. not being used for anything else. */
  32315. if( ( listGET_LIST_ITEM_VALUE( &( pxMutexHolderTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL )
  32316. 800d96c: 68bb ldr r3, [r7, #8]
  32317. 800d96e: 699b ldr r3, [r3, #24]
  32318. 800d970: 2b00 cmp r3, #0
  32319. 800d972: db06 blt.n 800d982 <xTaskPriorityInherit+0x3a>
  32320. {
  32321. 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. */
  32322. 800d974: 4b25 ldr r3, [pc, #148] @ (800da0c <xTaskPriorityInherit+0xc4>)
  32323. 800d976: 681b ldr r3, [r3, #0]
  32324. 800d978: 6adb ldr r3, [r3, #44] @ 0x2c
  32325. 800d97a: f1c3 0238 rsb r2, r3, #56 @ 0x38
  32326. 800d97e: 68bb ldr r3, [r7, #8]
  32327. 800d980: 619a str r2, [r3, #24]
  32328. mtCOVERAGE_TEST_MARKER();
  32329. }
  32330. /* If the task being modified is in the ready state it will need
  32331. to be moved into a new list. */
  32332. if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxMutexHolderTCB->uxPriority ] ), &( pxMutexHolderTCB->xStateListItem ) ) != pdFALSE )
  32333. 800d982: 68bb ldr r3, [r7, #8]
  32334. 800d984: 6959 ldr r1, [r3, #20]
  32335. 800d986: 68bb ldr r3, [r7, #8]
  32336. 800d988: 6ada ldr r2, [r3, #44] @ 0x2c
  32337. 800d98a: 4613 mov r3, r2
  32338. 800d98c: 009b lsls r3, r3, #2
  32339. 800d98e: 4413 add r3, r2
  32340. 800d990: 009b lsls r3, r3, #2
  32341. 800d992: 4a1f ldr r2, [pc, #124] @ (800da10 <xTaskPriorityInherit+0xc8>)
  32342. 800d994: 4413 add r3, r2
  32343. 800d996: 4299 cmp r1, r3
  32344. 800d998: d122 bne.n 800d9e0 <xTaskPriorityInherit+0x98>
  32345. {
  32346. if( uxListRemove( &( pxMutexHolderTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  32347. 800d99a: 68bb ldr r3, [r7, #8]
  32348. 800d99c: 3304 adds r3, #4
  32349. 800d99e: 4618 mov r0, r3
  32350. 800d9a0: f7fe f818 bl 800b9d4 <uxListRemove>
  32351. {
  32352. mtCOVERAGE_TEST_MARKER();
  32353. }
  32354. /* Inherit the priority before being moved into the new list. */
  32355. pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority;
  32356. 800d9a4: 4b19 ldr r3, [pc, #100] @ (800da0c <xTaskPriorityInherit+0xc4>)
  32357. 800d9a6: 681b ldr r3, [r3, #0]
  32358. 800d9a8: 6ada ldr r2, [r3, #44] @ 0x2c
  32359. 800d9aa: 68bb ldr r3, [r7, #8]
  32360. 800d9ac: 62da str r2, [r3, #44] @ 0x2c
  32361. prvAddTaskToReadyList( pxMutexHolderTCB );
  32362. 800d9ae: 68bb ldr r3, [r7, #8]
  32363. 800d9b0: 6ada ldr r2, [r3, #44] @ 0x2c
  32364. 800d9b2: 4b18 ldr r3, [pc, #96] @ (800da14 <xTaskPriorityInherit+0xcc>)
  32365. 800d9b4: 681b ldr r3, [r3, #0]
  32366. 800d9b6: 429a cmp r2, r3
  32367. 800d9b8: d903 bls.n 800d9c2 <xTaskPriorityInherit+0x7a>
  32368. 800d9ba: 68bb ldr r3, [r7, #8]
  32369. 800d9bc: 6adb ldr r3, [r3, #44] @ 0x2c
  32370. 800d9be: 4a15 ldr r2, [pc, #84] @ (800da14 <xTaskPriorityInherit+0xcc>)
  32371. 800d9c0: 6013 str r3, [r2, #0]
  32372. 800d9c2: 68bb ldr r3, [r7, #8]
  32373. 800d9c4: 6ada ldr r2, [r3, #44] @ 0x2c
  32374. 800d9c6: 4613 mov r3, r2
  32375. 800d9c8: 009b lsls r3, r3, #2
  32376. 800d9ca: 4413 add r3, r2
  32377. 800d9cc: 009b lsls r3, r3, #2
  32378. 800d9ce: 4a10 ldr r2, [pc, #64] @ (800da10 <xTaskPriorityInherit+0xc8>)
  32379. 800d9d0: 441a add r2, r3
  32380. 800d9d2: 68bb ldr r3, [r7, #8]
  32381. 800d9d4: 3304 adds r3, #4
  32382. 800d9d6: 4619 mov r1, r3
  32383. 800d9d8: 4610 mov r0, r2
  32384. 800d9da: f7fd ff9e bl 800b91a <vListInsertEnd>
  32385. 800d9de: e004 b.n 800d9ea <xTaskPriorityInherit+0xa2>
  32386. }
  32387. else
  32388. {
  32389. /* Just inherit the priority. */
  32390. pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority;
  32391. 800d9e0: 4b0a ldr r3, [pc, #40] @ (800da0c <xTaskPriorityInherit+0xc4>)
  32392. 800d9e2: 681b ldr r3, [r3, #0]
  32393. 800d9e4: 6ada ldr r2, [r3, #44] @ 0x2c
  32394. 800d9e6: 68bb ldr r3, [r7, #8]
  32395. 800d9e8: 62da str r2, [r3, #44] @ 0x2c
  32396. }
  32397. traceTASK_PRIORITY_INHERIT( pxMutexHolderTCB, pxCurrentTCB->uxPriority );
  32398. /* Inheritance occurred. */
  32399. xReturn = pdTRUE;
  32400. 800d9ea: 2301 movs r3, #1
  32401. 800d9ec: 60fb str r3, [r7, #12]
  32402. 800d9ee: e008 b.n 800da02 <xTaskPriorityInherit+0xba>
  32403. }
  32404. else
  32405. {
  32406. if( pxMutexHolderTCB->uxBasePriority < pxCurrentTCB->uxPriority )
  32407. 800d9f0: 68bb ldr r3, [r7, #8]
  32408. 800d9f2: 6cda ldr r2, [r3, #76] @ 0x4c
  32409. 800d9f4: 4b05 ldr r3, [pc, #20] @ (800da0c <xTaskPriorityInherit+0xc4>)
  32410. 800d9f6: 681b ldr r3, [r3, #0]
  32411. 800d9f8: 6adb ldr r3, [r3, #44] @ 0x2c
  32412. 800d9fa: 429a cmp r2, r3
  32413. 800d9fc: d201 bcs.n 800da02 <xTaskPriorityInherit+0xba>
  32414. current priority of the mutex holder is not lower than the
  32415. priority of the task attempting to take the mutex.
  32416. Therefore the mutex holder must have already inherited a
  32417. priority, but inheritance would have occurred if that had
  32418. not been the case. */
  32419. xReturn = pdTRUE;
  32420. 800d9fe: 2301 movs r3, #1
  32421. 800da00: 60fb str r3, [r7, #12]
  32422. else
  32423. {
  32424. mtCOVERAGE_TEST_MARKER();
  32425. }
  32426. return xReturn;
  32427. 800da02: 68fb ldr r3, [r7, #12]
  32428. }
  32429. 800da04: 4618 mov r0, r3
  32430. 800da06: 3710 adds r7, #16
  32431. 800da08: 46bd mov sp, r7
  32432. 800da0a: bd80 pop {r7, pc}
  32433. 800da0c: 24002128 .word 0x24002128
  32434. 800da10: 2400212c .word 0x2400212c
  32435. 800da14: 24002604 .word 0x24002604
  32436. 0800da18 <xTaskPriorityDisinherit>:
  32437. /*-----------------------------------------------------------*/
  32438. #if ( configUSE_MUTEXES == 1 )
  32439. BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder )
  32440. {
  32441. 800da18: b580 push {r7, lr}
  32442. 800da1a: b086 sub sp, #24
  32443. 800da1c: af00 add r7, sp, #0
  32444. 800da1e: 6078 str r0, [r7, #4]
  32445. TCB_t * const pxTCB = pxMutexHolder;
  32446. 800da20: 687b ldr r3, [r7, #4]
  32447. 800da22: 613b str r3, [r7, #16]
  32448. BaseType_t xReturn = pdFALSE;
  32449. 800da24: 2300 movs r3, #0
  32450. 800da26: 617b str r3, [r7, #20]
  32451. if( pxMutexHolder != NULL )
  32452. 800da28: 687b ldr r3, [r7, #4]
  32453. 800da2a: 2b00 cmp r3, #0
  32454. 800da2c: d058 beq.n 800dae0 <xTaskPriorityDisinherit+0xc8>
  32455. {
  32456. /* A task can only have an inherited priority if it holds the mutex.
  32457. If the mutex is held by a task then it cannot be given from an
  32458. interrupt, and if a mutex is given by the holding task then it must
  32459. be the running state task. */
  32460. configASSERT( pxTCB == pxCurrentTCB );
  32461. 800da2e: 4b2f ldr r3, [pc, #188] @ (800daec <xTaskPriorityDisinherit+0xd4>)
  32462. 800da30: 681b ldr r3, [r3, #0]
  32463. 800da32: 693a ldr r2, [r7, #16]
  32464. 800da34: 429a cmp r2, r3
  32465. 800da36: d00b beq.n 800da50 <xTaskPriorityDisinherit+0x38>
  32466. __asm volatile
  32467. 800da38: f04f 0350 mov.w r3, #80 @ 0x50
  32468. 800da3c: f383 8811 msr BASEPRI, r3
  32469. 800da40: f3bf 8f6f isb sy
  32470. 800da44: f3bf 8f4f dsb sy
  32471. 800da48: 60fb str r3, [r7, #12]
  32472. }
  32473. 800da4a: bf00 nop
  32474. 800da4c: bf00 nop
  32475. 800da4e: e7fd b.n 800da4c <xTaskPriorityDisinherit+0x34>
  32476. configASSERT( pxTCB->uxMutexesHeld );
  32477. 800da50: 693b ldr r3, [r7, #16]
  32478. 800da52: 6d1b ldr r3, [r3, #80] @ 0x50
  32479. 800da54: 2b00 cmp r3, #0
  32480. 800da56: d10b bne.n 800da70 <xTaskPriorityDisinherit+0x58>
  32481. __asm volatile
  32482. 800da58: f04f 0350 mov.w r3, #80 @ 0x50
  32483. 800da5c: f383 8811 msr BASEPRI, r3
  32484. 800da60: f3bf 8f6f isb sy
  32485. 800da64: f3bf 8f4f dsb sy
  32486. 800da68: 60bb str r3, [r7, #8]
  32487. }
  32488. 800da6a: bf00 nop
  32489. 800da6c: bf00 nop
  32490. 800da6e: e7fd b.n 800da6c <xTaskPriorityDisinherit+0x54>
  32491. ( pxTCB->uxMutexesHeld )--;
  32492. 800da70: 693b ldr r3, [r7, #16]
  32493. 800da72: 6d1b ldr r3, [r3, #80] @ 0x50
  32494. 800da74: 1e5a subs r2, r3, #1
  32495. 800da76: 693b ldr r3, [r7, #16]
  32496. 800da78: 651a str r2, [r3, #80] @ 0x50
  32497. /* Has the holder of the mutex inherited the priority of another
  32498. task? */
  32499. if( pxTCB->uxPriority != pxTCB->uxBasePriority )
  32500. 800da7a: 693b ldr r3, [r7, #16]
  32501. 800da7c: 6ada ldr r2, [r3, #44] @ 0x2c
  32502. 800da7e: 693b ldr r3, [r7, #16]
  32503. 800da80: 6cdb ldr r3, [r3, #76] @ 0x4c
  32504. 800da82: 429a cmp r2, r3
  32505. 800da84: d02c beq.n 800dae0 <xTaskPriorityDisinherit+0xc8>
  32506. {
  32507. /* Only disinherit if no other mutexes are held. */
  32508. if( pxTCB->uxMutexesHeld == ( UBaseType_t ) 0 )
  32509. 800da86: 693b ldr r3, [r7, #16]
  32510. 800da88: 6d1b ldr r3, [r3, #80] @ 0x50
  32511. 800da8a: 2b00 cmp r3, #0
  32512. 800da8c: d128 bne.n 800dae0 <xTaskPriorityDisinherit+0xc8>
  32513. /* A task can only have an inherited priority if it holds
  32514. the mutex. If the mutex is held by a task then it cannot be
  32515. given from an interrupt, and if a mutex is given by the
  32516. holding task then it must be the running state task. Remove
  32517. the holding task from the ready/delayed list. */
  32518. if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  32519. 800da8e: 693b ldr r3, [r7, #16]
  32520. 800da90: 3304 adds r3, #4
  32521. 800da92: 4618 mov r0, r3
  32522. 800da94: f7fd ff9e bl 800b9d4 <uxListRemove>
  32523. }
  32524. /* Disinherit the priority before adding the task into the
  32525. new ready list. */
  32526. traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority );
  32527. pxTCB->uxPriority = pxTCB->uxBasePriority;
  32528. 800da98: 693b ldr r3, [r7, #16]
  32529. 800da9a: 6cda ldr r2, [r3, #76] @ 0x4c
  32530. 800da9c: 693b ldr r3, [r7, #16]
  32531. 800da9e: 62da str r2, [r3, #44] @ 0x2c
  32532. /* Reset the event list item value. It cannot be in use for
  32533. any other purpose if this task is running, and it must be
  32534. running to give back the mutex. */
  32535. 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. */
  32536. 800daa0: 693b ldr r3, [r7, #16]
  32537. 800daa2: 6adb ldr r3, [r3, #44] @ 0x2c
  32538. 800daa4: f1c3 0238 rsb r2, r3, #56 @ 0x38
  32539. 800daa8: 693b ldr r3, [r7, #16]
  32540. 800daaa: 619a str r2, [r3, #24]
  32541. prvAddTaskToReadyList( pxTCB );
  32542. 800daac: 693b ldr r3, [r7, #16]
  32543. 800daae: 6ada ldr r2, [r3, #44] @ 0x2c
  32544. 800dab0: 4b0f ldr r3, [pc, #60] @ (800daf0 <xTaskPriorityDisinherit+0xd8>)
  32545. 800dab2: 681b ldr r3, [r3, #0]
  32546. 800dab4: 429a cmp r2, r3
  32547. 800dab6: d903 bls.n 800dac0 <xTaskPriorityDisinherit+0xa8>
  32548. 800dab8: 693b ldr r3, [r7, #16]
  32549. 800daba: 6adb ldr r3, [r3, #44] @ 0x2c
  32550. 800dabc: 4a0c ldr r2, [pc, #48] @ (800daf0 <xTaskPriorityDisinherit+0xd8>)
  32551. 800dabe: 6013 str r3, [r2, #0]
  32552. 800dac0: 693b ldr r3, [r7, #16]
  32553. 800dac2: 6ada ldr r2, [r3, #44] @ 0x2c
  32554. 800dac4: 4613 mov r3, r2
  32555. 800dac6: 009b lsls r3, r3, #2
  32556. 800dac8: 4413 add r3, r2
  32557. 800daca: 009b lsls r3, r3, #2
  32558. 800dacc: 4a09 ldr r2, [pc, #36] @ (800daf4 <xTaskPriorityDisinherit+0xdc>)
  32559. 800dace: 441a add r2, r3
  32560. 800dad0: 693b ldr r3, [r7, #16]
  32561. 800dad2: 3304 adds r3, #4
  32562. 800dad4: 4619 mov r1, r3
  32563. 800dad6: 4610 mov r0, r2
  32564. 800dad8: f7fd ff1f bl 800b91a <vListInsertEnd>
  32565. in an order different to that in which they were taken.
  32566. If a context switch did not occur when the first mutex was
  32567. returned, even if a task was waiting on it, then a context
  32568. switch should occur when the last mutex is returned whether
  32569. a task is waiting on it or not. */
  32570. xReturn = pdTRUE;
  32571. 800dadc: 2301 movs r3, #1
  32572. 800dade: 617b str r3, [r7, #20]
  32573. else
  32574. {
  32575. mtCOVERAGE_TEST_MARKER();
  32576. }
  32577. return xReturn;
  32578. 800dae0: 697b ldr r3, [r7, #20]
  32579. }
  32580. 800dae2: 4618 mov r0, r3
  32581. 800dae4: 3718 adds r7, #24
  32582. 800dae6: 46bd mov sp, r7
  32583. 800dae8: bd80 pop {r7, pc}
  32584. 800daea: bf00 nop
  32585. 800daec: 24002128 .word 0x24002128
  32586. 800daf0: 24002604 .word 0x24002604
  32587. 800daf4: 2400212c .word 0x2400212c
  32588. 0800daf8 <vTaskPriorityDisinheritAfterTimeout>:
  32589. /*-----------------------------------------------------------*/
  32590. #if ( configUSE_MUTEXES == 1 )
  32591. void vTaskPriorityDisinheritAfterTimeout( TaskHandle_t const pxMutexHolder, UBaseType_t uxHighestPriorityWaitingTask )
  32592. {
  32593. 800daf8: b580 push {r7, lr}
  32594. 800dafa: b088 sub sp, #32
  32595. 800dafc: af00 add r7, sp, #0
  32596. 800dafe: 6078 str r0, [r7, #4]
  32597. 800db00: 6039 str r1, [r7, #0]
  32598. TCB_t * const pxTCB = pxMutexHolder;
  32599. 800db02: 687b ldr r3, [r7, #4]
  32600. 800db04: 61bb str r3, [r7, #24]
  32601. UBaseType_t uxPriorityUsedOnEntry, uxPriorityToUse;
  32602. const UBaseType_t uxOnlyOneMutexHeld = ( UBaseType_t ) 1;
  32603. 800db06: 2301 movs r3, #1
  32604. 800db08: 617b str r3, [r7, #20]
  32605. if( pxMutexHolder != NULL )
  32606. 800db0a: 687b ldr r3, [r7, #4]
  32607. 800db0c: 2b00 cmp r3, #0
  32608. 800db0e: d06c beq.n 800dbea <vTaskPriorityDisinheritAfterTimeout+0xf2>
  32609. {
  32610. /* If pxMutexHolder is not NULL then the holder must hold at least
  32611. one mutex. */
  32612. configASSERT( pxTCB->uxMutexesHeld );
  32613. 800db10: 69bb ldr r3, [r7, #24]
  32614. 800db12: 6d1b ldr r3, [r3, #80] @ 0x50
  32615. 800db14: 2b00 cmp r3, #0
  32616. 800db16: d10b bne.n 800db30 <vTaskPriorityDisinheritAfterTimeout+0x38>
  32617. __asm volatile
  32618. 800db18: f04f 0350 mov.w r3, #80 @ 0x50
  32619. 800db1c: f383 8811 msr BASEPRI, r3
  32620. 800db20: f3bf 8f6f isb sy
  32621. 800db24: f3bf 8f4f dsb sy
  32622. 800db28: 60fb str r3, [r7, #12]
  32623. }
  32624. 800db2a: bf00 nop
  32625. 800db2c: bf00 nop
  32626. 800db2e: e7fd b.n 800db2c <vTaskPriorityDisinheritAfterTimeout+0x34>
  32627. /* Determine the priority to which the priority of the task that
  32628. holds the mutex should be set. This will be the greater of the
  32629. holding task's base priority and the priority of the highest
  32630. priority task that is waiting to obtain the mutex. */
  32631. if( pxTCB->uxBasePriority < uxHighestPriorityWaitingTask )
  32632. 800db30: 69bb ldr r3, [r7, #24]
  32633. 800db32: 6cdb ldr r3, [r3, #76] @ 0x4c
  32634. 800db34: 683a ldr r2, [r7, #0]
  32635. 800db36: 429a cmp r2, r3
  32636. 800db38: d902 bls.n 800db40 <vTaskPriorityDisinheritAfterTimeout+0x48>
  32637. {
  32638. uxPriorityToUse = uxHighestPriorityWaitingTask;
  32639. 800db3a: 683b ldr r3, [r7, #0]
  32640. 800db3c: 61fb str r3, [r7, #28]
  32641. 800db3e: e002 b.n 800db46 <vTaskPriorityDisinheritAfterTimeout+0x4e>
  32642. }
  32643. else
  32644. {
  32645. uxPriorityToUse = pxTCB->uxBasePriority;
  32646. 800db40: 69bb ldr r3, [r7, #24]
  32647. 800db42: 6cdb ldr r3, [r3, #76] @ 0x4c
  32648. 800db44: 61fb str r3, [r7, #28]
  32649. }
  32650. /* Does the priority need to change? */
  32651. if( pxTCB->uxPriority != uxPriorityToUse )
  32652. 800db46: 69bb ldr r3, [r7, #24]
  32653. 800db48: 6adb ldr r3, [r3, #44] @ 0x2c
  32654. 800db4a: 69fa ldr r2, [r7, #28]
  32655. 800db4c: 429a cmp r2, r3
  32656. 800db4e: d04c beq.n 800dbea <vTaskPriorityDisinheritAfterTimeout+0xf2>
  32657. {
  32658. /* Only disinherit if no other mutexes are held. This is a
  32659. simplification in the priority inheritance implementation. If
  32660. the task that holds the mutex is also holding other mutexes then
  32661. the other mutexes may have caused the priority inheritance. */
  32662. if( pxTCB->uxMutexesHeld == uxOnlyOneMutexHeld )
  32663. 800db50: 69bb ldr r3, [r7, #24]
  32664. 800db52: 6d1b ldr r3, [r3, #80] @ 0x50
  32665. 800db54: 697a ldr r2, [r7, #20]
  32666. 800db56: 429a cmp r2, r3
  32667. 800db58: d147 bne.n 800dbea <vTaskPriorityDisinheritAfterTimeout+0xf2>
  32668. {
  32669. /* If a task has timed out because it already holds the
  32670. mutex it was trying to obtain then it cannot of inherited
  32671. its own priority. */
  32672. configASSERT( pxTCB != pxCurrentTCB );
  32673. 800db5a: 4b26 ldr r3, [pc, #152] @ (800dbf4 <vTaskPriorityDisinheritAfterTimeout+0xfc>)
  32674. 800db5c: 681b ldr r3, [r3, #0]
  32675. 800db5e: 69ba ldr r2, [r7, #24]
  32676. 800db60: 429a cmp r2, r3
  32677. 800db62: d10b bne.n 800db7c <vTaskPriorityDisinheritAfterTimeout+0x84>
  32678. __asm volatile
  32679. 800db64: f04f 0350 mov.w r3, #80 @ 0x50
  32680. 800db68: f383 8811 msr BASEPRI, r3
  32681. 800db6c: f3bf 8f6f isb sy
  32682. 800db70: f3bf 8f4f dsb sy
  32683. 800db74: 60bb str r3, [r7, #8]
  32684. }
  32685. 800db76: bf00 nop
  32686. 800db78: bf00 nop
  32687. 800db7a: e7fd b.n 800db78 <vTaskPriorityDisinheritAfterTimeout+0x80>
  32688. /* Disinherit the priority, remembering the previous
  32689. priority to facilitate determining the subject task's
  32690. state. */
  32691. traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority );
  32692. uxPriorityUsedOnEntry = pxTCB->uxPriority;
  32693. 800db7c: 69bb ldr r3, [r7, #24]
  32694. 800db7e: 6adb ldr r3, [r3, #44] @ 0x2c
  32695. 800db80: 613b str r3, [r7, #16]
  32696. pxTCB->uxPriority = uxPriorityToUse;
  32697. 800db82: 69bb ldr r3, [r7, #24]
  32698. 800db84: 69fa ldr r2, [r7, #28]
  32699. 800db86: 62da str r2, [r3, #44] @ 0x2c
  32700. /* Only reset the event list item value if the value is not
  32701. being used for anything else. */
  32702. if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL )
  32703. 800db88: 69bb ldr r3, [r7, #24]
  32704. 800db8a: 699b ldr r3, [r3, #24]
  32705. 800db8c: 2b00 cmp r3, #0
  32706. 800db8e: db04 blt.n 800db9a <vTaskPriorityDisinheritAfterTimeout+0xa2>
  32707. {
  32708. 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. */
  32709. 800db90: 69fb ldr r3, [r7, #28]
  32710. 800db92: f1c3 0238 rsb r2, r3, #56 @ 0x38
  32711. 800db96: 69bb ldr r3, [r7, #24]
  32712. 800db98: 619a str r2, [r3, #24]
  32713. then the task that holds the mutex could be in either the
  32714. Ready, Blocked or Suspended states. Only remove the task
  32715. from its current state list if it is in the Ready state as
  32716. the task's priority is going to change and there is one
  32717. Ready list per priority. */
  32718. if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE )
  32719. 800db9a: 69bb ldr r3, [r7, #24]
  32720. 800db9c: 6959 ldr r1, [r3, #20]
  32721. 800db9e: 693a ldr r2, [r7, #16]
  32722. 800dba0: 4613 mov r3, r2
  32723. 800dba2: 009b lsls r3, r3, #2
  32724. 800dba4: 4413 add r3, r2
  32725. 800dba6: 009b lsls r3, r3, #2
  32726. 800dba8: 4a13 ldr r2, [pc, #76] @ (800dbf8 <vTaskPriorityDisinheritAfterTimeout+0x100>)
  32727. 800dbaa: 4413 add r3, r2
  32728. 800dbac: 4299 cmp r1, r3
  32729. 800dbae: d11c bne.n 800dbea <vTaskPriorityDisinheritAfterTimeout+0xf2>
  32730. {
  32731. if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  32732. 800dbb0: 69bb ldr r3, [r7, #24]
  32733. 800dbb2: 3304 adds r3, #4
  32734. 800dbb4: 4618 mov r0, r3
  32735. 800dbb6: f7fd ff0d bl 800b9d4 <uxListRemove>
  32736. else
  32737. {
  32738. mtCOVERAGE_TEST_MARKER();
  32739. }
  32740. prvAddTaskToReadyList( pxTCB );
  32741. 800dbba: 69bb ldr r3, [r7, #24]
  32742. 800dbbc: 6ada ldr r2, [r3, #44] @ 0x2c
  32743. 800dbbe: 4b0f ldr r3, [pc, #60] @ (800dbfc <vTaskPriorityDisinheritAfterTimeout+0x104>)
  32744. 800dbc0: 681b ldr r3, [r3, #0]
  32745. 800dbc2: 429a cmp r2, r3
  32746. 800dbc4: d903 bls.n 800dbce <vTaskPriorityDisinheritAfterTimeout+0xd6>
  32747. 800dbc6: 69bb ldr r3, [r7, #24]
  32748. 800dbc8: 6adb ldr r3, [r3, #44] @ 0x2c
  32749. 800dbca: 4a0c ldr r2, [pc, #48] @ (800dbfc <vTaskPriorityDisinheritAfterTimeout+0x104>)
  32750. 800dbcc: 6013 str r3, [r2, #0]
  32751. 800dbce: 69bb ldr r3, [r7, #24]
  32752. 800dbd0: 6ada ldr r2, [r3, #44] @ 0x2c
  32753. 800dbd2: 4613 mov r3, r2
  32754. 800dbd4: 009b lsls r3, r3, #2
  32755. 800dbd6: 4413 add r3, r2
  32756. 800dbd8: 009b lsls r3, r3, #2
  32757. 800dbda: 4a07 ldr r2, [pc, #28] @ (800dbf8 <vTaskPriorityDisinheritAfterTimeout+0x100>)
  32758. 800dbdc: 441a add r2, r3
  32759. 800dbde: 69bb ldr r3, [r7, #24]
  32760. 800dbe0: 3304 adds r3, #4
  32761. 800dbe2: 4619 mov r1, r3
  32762. 800dbe4: 4610 mov r0, r2
  32763. 800dbe6: f7fd fe98 bl 800b91a <vListInsertEnd>
  32764. }
  32765. else
  32766. {
  32767. mtCOVERAGE_TEST_MARKER();
  32768. }
  32769. }
  32770. 800dbea: bf00 nop
  32771. 800dbec: 3720 adds r7, #32
  32772. 800dbee: 46bd mov sp, r7
  32773. 800dbf0: bd80 pop {r7, pc}
  32774. 800dbf2: bf00 nop
  32775. 800dbf4: 24002128 .word 0x24002128
  32776. 800dbf8: 2400212c .word 0x2400212c
  32777. 800dbfc: 24002604 .word 0x24002604
  32778. 0800dc00 <pvTaskIncrementMutexHeldCount>:
  32779. /*-----------------------------------------------------------*/
  32780. #if ( configUSE_MUTEXES == 1 )
  32781. TaskHandle_t pvTaskIncrementMutexHeldCount( void )
  32782. {
  32783. 800dc00: b480 push {r7}
  32784. 800dc02: af00 add r7, sp, #0
  32785. /* If xSemaphoreCreateMutex() is called before any tasks have been created
  32786. then pxCurrentTCB will be NULL. */
  32787. if( pxCurrentTCB != NULL )
  32788. 800dc04: 4b07 ldr r3, [pc, #28] @ (800dc24 <pvTaskIncrementMutexHeldCount+0x24>)
  32789. 800dc06: 681b ldr r3, [r3, #0]
  32790. 800dc08: 2b00 cmp r3, #0
  32791. 800dc0a: d004 beq.n 800dc16 <pvTaskIncrementMutexHeldCount+0x16>
  32792. {
  32793. ( pxCurrentTCB->uxMutexesHeld )++;
  32794. 800dc0c: 4b05 ldr r3, [pc, #20] @ (800dc24 <pvTaskIncrementMutexHeldCount+0x24>)
  32795. 800dc0e: 681b ldr r3, [r3, #0]
  32796. 800dc10: 6d1a ldr r2, [r3, #80] @ 0x50
  32797. 800dc12: 3201 adds r2, #1
  32798. 800dc14: 651a str r2, [r3, #80] @ 0x50
  32799. }
  32800. return pxCurrentTCB;
  32801. 800dc16: 4b03 ldr r3, [pc, #12] @ (800dc24 <pvTaskIncrementMutexHeldCount+0x24>)
  32802. 800dc18: 681b ldr r3, [r3, #0]
  32803. }
  32804. 800dc1a: 4618 mov r0, r3
  32805. 800dc1c: 46bd mov sp, r7
  32806. 800dc1e: f85d 7b04 ldr.w r7, [sp], #4
  32807. 800dc22: 4770 bx lr
  32808. 800dc24: 24002128 .word 0x24002128
  32809. 0800dc28 <xTaskNotifyWait>:
  32810. /*-----------------------------------------------------------*/
  32811. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  32812. BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait )
  32813. {
  32814. 800dc28: b580 push {r7, lr}
  32815. 800dc2a: b086 sub sp, #24
  32816. 800dc2c: af00 add r7, sp, #0
  32817. 800dc2e: 60f8 str r0, [r7, #12]
  32818. 800dc30: 60b9 str r1, [r7, #8]
  32819. 800dc32: 607a str r2, [r7, #4]
  32820. 800dc34: 603b str r3, [r7, #0]
  32821. BaseType_t xReturn;
  32822. taskENTER_CRITICAL();
  32823. 800dc36: f000 ff07 bl 800ea48 <vPortEnterCritical>
  32824. {
  32825. /* Only block if a notification is not already pending. */
  32826. if( pxCurrentTCB->ucNotifyState != taskNOTIFICATION_RECEIVED )
  32827. 800dc3a: 4b29 ldr r3, [pc, #164] @ (800dce0 <xTaskNotifyWait+0xb8>)
  32828. 800dc3c: 681b ldr r3, [r3, #0]
  32829. 800dc3e: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  32830. 800dc42: b2db uxtb r3, r3
  32831. 800dc44: 2b02 cmp r3, #2
  32832. 800dc46: d01c beq.n 800dc82 <xTaskNotifyWait+0x5a>
  32833. {
  32834. /* Clear bits in the task's notification value as bits may get
  32835. set by the notifying task or interrupt. This can be used to
  32836. clear the value to zero. */
  32837. pxCurrentTCB->ulNotifiedValue &= ~ulBitsToClearOnEntry;
  32838. 800dc48: 4b25 ldr r3, [pc, #148] @ (800dce0 <xTaskNotifyWait+0xb8>)
  32839. 800dc4a: 681b ldr r3, [r3, #0]
  32840. 800dc4c: f8d3 10a0 ldr.w r1, [r3, #160] @ 0xa0
  32841. 800dc50: 68fa ldr r2, [r7, #12]
  32842. 800dc52: 43d2 mvns r2, r2
  32843. 800dc54: 400a ands r2, r1
  32844. 800dc56: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  32845. /* Mark this task as waiting for a notification. */
  32846. pxCurrentTCB->ucNotifyState = taskWAITING_NOTIFICATION;
  32847. 800dc5a: 4b21 ldr r3, [pc, #132] @ (800dce0 <xTaskNotifyWait+0xb8>)
  32848. 800dc5c: 681b ldr r3, [r3, #0]
  32849. 800dc5e: 2201 movs r2, #1
  32850. 800dc60: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  32851. if( xTicksToWait > ( TickType_t ) 0 )
  32852. 800dc64: 683b ldr r3, [r7, #0]
  32853. 800dc66: 2b00 cmp r3, #0
  32854. 800dc68: d00b beq.n 800dc82 <xTaskNotifyWait+0x5a>
  32855. {
  32856. prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );
  32857. 800dc6a: 2101 movs r1, #1
  32858. 800dc6c: 6838 ldr r0, [r7, #0]
  32859. 800dc6e: f000 fa09 bl 800e084 <prvAddCurrentTaskToDelayedList>
  32860. /* All ports are written to allow a yield in a critical
  32861. section (some will yield immediately, others wait until the
  32862. critical section exits) - but it is not something that
  32863. application code should ever do. */
  32864. portYIELD_WITHIN_API();
  32865. 800dc72: 4b1c ldr r3, [pc, #112] @ (800dce4 <xTaskNotifyWait+0xbc>)
  32866. 800dc74: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  32867. 800dc78: 601a str r2, [r3, #0]
  32868. 800dc7a: f3bf 8f4f dsb sy
  32869. 800dc7e: f3bf 8f6f isb sy
  32870. else
  32871. {
  32872. mtCOVERAGE_TEST_MARKER();
  32873. }
  32874. }
  32875. taskEXIT_CRITICAL();
  32876. 800dc82: f000 ff13 bl 800eaac <vPortExitCritical>
  32877. taskENTER_CRITICAL();
  32878. 800dc86: f000 fedf bl 800ea48 <vPortEnterCritical>
  32879. {
  32880. traceTASK_NOTIFY_WAIT();
  32881. if( pulNotificationValue != NULL )
  32882. 800dc8a: 687b ldr r3, [r7, #4]
  32883. 800dc8c: 2b00 cmp r3, #0
  32884. 800dc8e: d005 beq.n 800dc9c <xTaskNotifyWait+0x74>
  32885. {
  32886. /* Output the current notification value, which may or may not
  32887. have changed. */
  32888. *pulNotificationValue = pxCurrentTCB->ulNotifiedValue;
  32889. 800dc90: 4b13 ldr r3, [pc, #76] @ (800dce0 <xTaskNotifyWait+0xb8>)
  32890. 800dc92: 681b ldr r3, [r3, #0]
  32891. 800dc94: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  32892. 800dc98: 687b ldr r3, [r7, #4]
  32893. 800dc9a: 601a str r2, [r3, #0]
  32894. /* If ucNotifyValue is set then either the task never entered the
  32895. blocked state (because a notification was already pending) or the
  32896. task unblocked because of a notification. Otherwise the task
  32897. unblocked because of a timeout. */
  32898. if( pxCurrentTCB->ucNotifyState != taskNOTIFICATION_RECEIVED )
  32899. 800dc9c: 4b10 ldr r3, [pc, #64] @ (800dce0 <xTaskNotifyWait+0xb8>)
  32900. 800dc9e: 681b ldr r3, [r3, #0]
  32901. 800dca0: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  32902. 800dca4: b2db uxtb r3, r3
  32903. 800dca6: 2b02 cmp r3, #2
  32904. 800dca8: d002 beq.n 800dcb0 <xTaskNotifyWait+0x88>
  32905. {
  32906. /* A notification was not received. */
  32907. xReturn = pdFALSE;
  32908. 800dcaa: 2300 movs r3, #0
  32909. 800dcac: 617b str r3, [r7, #20]
  32910. 800dcae: e00a b.n 800dcc6 <xTaskNotifyWait+0x9e>
  32911. }
  32912. else
  32913. {
  32914. /* A notification was already pending or a notification was
  32915. received while the task was waiting. */
  32916. pxCurrentTCB->ulNotifiedValue &= ~ulBitsToClearOnExit;
  32917. 800dcb0: 4b0b ldr r3, [pc, #44] @ (800dce0 <xTaskNotifyWait+0xb8>)
  32918. 800dcb2: 681b ldr r3, [r3, #0]
  32919. 800dcb4: f8d3 10a0 ldr.w r1, [r3, #160] @ 0xa0
  32920. 800dcb8: 68ba ldr r2, [r7, #8]
  32921. 800dcba: 43d2 mvns r2, r2
  32922. 800dcbc: 400a ands r2, r1
  32923. 800dcbe: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  32924. xReturn = pdTRUE;
  32925. 800dcc2: 2301 movs r3, #1
  32926. 800dcc4: 617b str r3, [r7, #20]
  32927. }
  32928. pxCurrentTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  32929. 800dcc6: 4b06 ldr r3, [pc, #24] @ (800dce0 <xTaskNotifyWait+0xb8>)
  32930. 800dcc8: 681b ldr r3, [r3, #0]
  32931. 800dcca: 2200 movs r2, #0
  32932. 800dccc: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  32933. }
  32934. taskEXIT_CRITICAL();
  32935. 800dcd0: f000 feec bl 800eaac <vPortExitCritical>
  32936. return xReturn;
  32937. 800dcd4: 697b ldr r3, [r7, #20]
  32938. }
  32939. 800dcd6: 4618 mov r0, r3
  32940. 800dcd8: 3718 adds r7, #24
  32941. 800dcda: 46bd mov sp, r7
  32942. 800dcdc: bd80 pop {r7, pc}
  32943. 800dcde: bf00 nop
  32944. 800dce0: 24002128 .word 0x24002128
  32945. 800dce4: e000ed04 .word 0xe000ed04
  32946. 0800dce8 <xTaskGenericNotify>:
  32947. /*-----------------------------------------------------------*/
  32948. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  32949. BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue )
  32950. {
  32951. 800dce8: b580 push {r7, lr}
  32952. 800dcea: b08a sub sp, #40 @ 0x28
  32953. 800dcec: af00 add r7, sp, #0
  32954. 800dcee: 60f8 str r0, [r7, #12]
  32955. 800dcf0: 60b9 str r1, [r7, #8]
  32956. 800dcf2: 603b str r3, [r7, #0]
  32957. 800dcf4: 4613 mov r3, r2
  32958. 800dcf6: 71fb strb r3, [r7, #7]
  32959. TCB_t * pxTCB;
  32960. BaseType_t xReturn = pdPASS;
  32961. 800dcf8: 2301 movs r3, #1
  32962. 800dcfa: 627b str r3, [r7, #36] @ 0x24
  32963. uint8_t ucOriginalNotifyState;
  32964. configASSERT( xTaskToNotify );
  32965. 800dcfc: 68fb ldr r3, [r7, #12]
  32966. 800dcfe: 2b00 cmp r3, #0
  32967. 800dd00: d10b bne.n 800dd1a <xTaskGenericNotify+0x32>
  32968. __asm volatile
  32969. 800dd02: f04f 0350 mov.w r3, #80 @ 0x50
  32970. 800dd06: f383 8811 msr BASEPRI, r3
  32971. 800dd0a: f3bf 8f6f isb sy
  32972. 800dd0e: f3bf 8f4f dsb sy
  32973. 800dd12: 61bb str r3, [r7, #24]
  32974. }
  32975. 800dd14: bf00 nop
  32976. 800dd16: bf00 nop
  32977. 800dd18: e7fd b.n 800dd16 <xTaskGenericNotify+0x2e>
  32978. pxTCB = xTaskToNotify;
  32979. 800dd1a: 68fb ldr r3, [r7, #12]
  32980. 800dd1c: 623b str r3, [r7, #32]
  32981. taskENTER_CRITICAL();
  32982. 800dd1e: f000 fe93 bl 800ea48 <vPortEnterCritical>
  32983. {
  32984. if( pulPreviousNotificationValue != NULL )
  32985. 800dd22: 683b ldr r3, [r7, #0]
  32986. 800dd24: 2b00 cmp r3, #0
  32987. 800dd26: d004 beq.n 800dd32 <xTaskGenericNotify+0x4a>
  32988. {
  32989. *pulPreviousNotificationValue = pxTCB->ulNotifiedValue;
  32990. 800dd28: 6a3b ldr r3, [r7, #32]
  32991. 800dd2a: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  32992. 800dd2e: 683b ldr r3, [r7, #0]
  32993. 800dd30: 601a str r2, [r3, #0]
  32994. }
  32995. ucOriginalNotifyState = pxTCB->ucNotifyState;
  32996. 800dd32: 6a3b ldr r3, [r7, #32]
  32997. 800dd34: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  32998. 800dd38: 77fb strb r3, [r7, #31]
  32999. pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED;
  33000. 800dd3a: 6a3b ldr r3, [r7, #32]
  33001. 800dd3c: 2202 movs r2, #2
  33002. 800dd3e: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  33003. switch( eAction )
  33004. 800dd42: 79fb ldrb r3, [r7, #7]
  33005. 800dd44: 2b04 cmp r3, #4
  33006. 800dd46: d82e bhi.n 800dda6 <xTaskGenericNotify+0xbe>
  33007. 800dd48: a201 add r2, pc, #4 @ (adr r2, 800dd50 <xTaskGenericNotify+0x68>)
  33008. 800dd4a: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  33009. 800dd4e: bf00 nop
  33010. 800dd50: 0800ddcb .word 0x0800ddcb
  33011. 800dd54: 0800dd65 .word 0x0800dd65
  33012. 800dd58: 0800dd77 .word 0x0800dd77
  33013. 800dd5c: 0800dd87 .word 0x0800dd87
  33014. 800dd60: 0800dd91 .word 0x0800dd91
  33015. {
  33016. case eSetBits :
  33017. pxTCB->ulNotifiedValue |= ulValue;
  33018. 800dd64: 6a3b ldr r3, [r7, #32]
  33019. 800dd66: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  33020. 800dd6a: 68bb ldr r3, [r7, #8]
  33021. 800dd6c: 431a orrs r2, r3
  33022. 800dd6e: 6a3b ldr r3, [r7, #32]
  33023. 800dd70: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  33024. break;
  33025. 800dd74: e02c b.n 800ddd0 <xTaskGenericNotify+0xe8>
  33026. case eIncrement :
  33027. ( pxTCB->ulNotifiedValue )++;
  33028. 800dd76: 6a3b ldr r3, [r7, #32]
  33029. 800dd78: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  33030. 800dd7c: 1c5a adds r2, r3, #1
  33031. 800dd7e: 6a3b ldr r3, [r7, #32]
  33032. 800dd80: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  33033. break;
  33034. 800dd84: e024 b.n 800ddd0 <xTaskGenericNotify+0xe8>
  33035. case eSetValueWithOverwrite :
  33036. pxTCB->ulNotifiedValue = ulValue;
  33037. 800dd86: 6a3b ldr r3, [r7, #32]
  33038. 800dd88: 68ba ldr r2, [r7, #8]
  33039. 800dd8a: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  33040. break;
  33041. 800dd8e: e01f b.n 800ddd0 <xTaskGenericNotify+0xe8>
  33042. case eSetValueWithoutOverwrite :
  33043. if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED )
  33044. 800dd90: 7ffb ldrb r3, [r7, #31]
  33045. 800dd92: 2b02 cmp r3, #2
  33046. 800dd94: d004 beq.n 800dda0 <xTaskGenericNotify+0xb8>
  33047. {
  33048. pxTCB->ulNotifiedValue = ulValue;
  33049. 800dd96: 6a3b ldr r3, [r7, #32]
  33050. 800dd98: 68ba ldr r2, [r7, #8]
  33051. 800dd9a: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  33052. else
  33053. {
  33054. /* The value could not be written to the task. */
  33055. xReturn = pdFAIL;
  33056. }
  33057. break;
  33058. 800dd9e: e017 b.n 800ddd0 <xTaskGenericNotify+0xe8>
  33059. xReturn = pdFAIL;
  33060. 800dda0: 2300 movs r3, #0
  33061. 800dda2: 627b str r3, [r7, #36] @ 0x24
  33062. break;
  33063. 800dda4: e014 b.n 800ddd0 <xTaskGenericNotify+0xe8>
  33064. default:
  33065. /* Should not get here if all enums are handled.
  33066. Artificially force an assert by testing a value the
  33067. compiler can't assume is const. */
  33068. configASSERT( pxTCB->ulNotifiedValue == ~0UL );
  33069. 800dda6: 6a3b ldr r3, [r7, #32]
  33070. 800dda8: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  33071. 800ddac: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  33072. 800ddb0: d00d beq.n 800ddce <xTaskGenericNotify+0xe6>
  33073. __asm volatile
  33074. 800ddb2: f04f 0350 mov.w r3, #80 @ 0x50
  33075. 800ddb6: f383 8811 msr BASEPRI, r3
  33076. 800ddba: f3bf 8f6f isb sy
  33077. 800ddbe: f3bf 8f4f dsb sy
  33078. 800ddc2: 617b str r3, [r7, #20]
  33079. }
  33080. 800ddc4: bf00 nop
  33081. 800ddc6: bf00 nop
  33082. 800ddc8: e7fd b.n 800ddc6 <xTaskGenericNotify+0xde>
  33083. break;
  33084. 800ddca: bf00 nop
  33085. 800ddcc: e000 b.n 800ddd0 <xTaskGenericNotify+0xe8>
  33086. break;
  33087. 800ddce: bf00 nop
  33088. traceTASK_NOTIFY();
  33089. /* If the task is in the blocked state specifically to wait for a
  33090. notification then unblock it now. */
  33091. if( ucOriginalNotifyState == taskWAITING_NOTIFICATION )
  33092. 800ddd0: 7ffb ldrb r3, [r7, #31]
  33093. 800ddd2: 2b01 cmp r3, #1
  33094. 800ddd4: d13b bne.n 800de4e <xTaskGenericNotify+0x166>
  33095. {
  33096. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  33097. 800ddd6: 6a3b ldr r3, [r7, #32]
  33098. 800ddd8: 3304 adds r3, #4
  33099. 800ddda: 4618 mov r0, r3
  33100. 800dddc: f7fd fdfa bl 800b9d4 <uxListRemove>
  33101. prvAddTaskToReadyList( pxTCB );
  33102. 800dde0: 6a3b ldr r3, [r7, #32]
  33103. 800dde2: 6ada ldr r2, [r3, #44] @ 0x2c
  33104. 800dde4: 4b1d ldr r3, [pc, #116] @ (800de5c <xTaskGenericNotify+0x174>)
  33105. 800dde6: 681b ldr r3, [r3, #0]
  33106. 800dde8: 429a cmp r2, r3
  33107. 800ddea: d903 bls.n 800ddf4 <xTaskGenericNotify+0x10c>
  33108. 800ddec: 6a3b ldr r3, [r7, #32]
  33109. 800ddee: 6adb ldr r3, [r3, #44] @ 0x2c
  33110. 800ddf0: 4a1a ldr r2, [pc, #104] @ (800de5c <xTaskGenericNotify+0x174>)
  33111. 800ddf2: 6013 str r3, [r2, #0]
  33112. 800ddf4: 6a3b ldr r3, [r7, #32]
  33113. 800ddf6: 6ada ldr r2, [r3, #44] @ 0x2c
  33114. 800ddf8: 4613 mov r3, r2
  33115. 800ddfa: 009b lsls r3, r3, #2
  33116. 800ddfc: 4413 add r3, r2
  33117. 800ddfe: 009b lsls r3, r3, #2
  33118. 800de00: 4a17 ldr r2, [pc, #92] @ (800de60 <xTaskGenericNotify+0x178>)
  33119. 800de02: 441a add r2, r3
  33120. 800de04: 6a3b ldr r3, [r7, #32]
  33121. 800de06: 3304 adds r3, #4
  33122. 800de08: 4619 mov r1, r3
  33123. 800de0a: 4610 mov r0, r2
  33124. 800de0c: f7fd fd85 bl 800b91a <vListInsertEnd>
  33125. /* The task should not have been on an event list. */
  33126. configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );
  33127. 800de10: 6a3b ldr r3, [r7, #32]
  33128. 800de12: 6a9b ldr r3, [r3, #40] @ 0x28
  33129. 800de14: 2b00 cmp r3, #0
  33130. 800de16: d00b beq.n 800de30 <xTaskGenericNotify+0x148>
  33131. __asm volatile
  33132. 800de18: f04f 0350 mov.w r3, #80 @ 0x50
  33133. 800de1c: f383 8811 msr BASEPRI, r3
  33134. 800de20: f3bf 8f6f isb sy
  33135. 800de24: f3bf 8f4f dsb sy
  33136. 800de28: 613b str r3, [r7, #16]
  33137. }
  33138. 800de2a: bf00 nop
  33139. 800de2c: bf00 nop
  33140. 800de2e: e7fd b.n 800de2c <xTaskGenericNotify+0x144>
  33141. earliest possible time. */
  33142. prvResetNextTaskUnblockTime();
  33143. }
  33144. #endif
  33145. if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
  33146. 800de30: 6a3b ldr r3, [r7, #32]
  33147. 800de32: 6ada ldr r2, [r3, #44] @ 0x2c
  33148. 800de34: 4b0b ldr r3, [pc, #44] @ (800de64 <xTaskGenericNotify+0x17c>)
  33149. 800de36: 681b ldr r3, [r3, #0]
  33150. 800de38: 6adb ldr r3, [r3, #44] @ 0x2c
  33151. 800de3a: 429a cmp r2, r3
  33152. 800de3c: d907 bls.n 800de4e <xTaskGenericNotify+0x166>
  33153. {
  33154. /* The notified task has a priority above the currently
  33155. executing task so a yield is required. */
  33156. taskYIELD_IF_USING_PREEMPTION();
  33157. 800de3e: 4b0a ldr r3, [pc, #40] @ (800de68 <xTaskGenericNotify+0x180>)
  33158. 800de40: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  33159. 800de44: 601a str r2, [r3, #0]
  33160. 800de46: f3bf 8f4f dsb sy
  33161. 800de4a: f3bf 8f6f isb sy
  33162. else
  33163. {
  33164. mtCOVERAGE_TEST_MARKER();
  33165. }
  33166. }
  33167. taskEXIT_CRITICAL();
  33168. 800de4e: f000 fe2d bl 800eaac <vPortExitCritical>
  33169. return xReturn;
  33170. 800de52: 6a7b ldr r3, [r7, #36] @ 0x24
  33171. }
  33172. 800de54: 4618 mov r0, r3
  33173. 800de56: 3728 adds r7, #40 @ 0x28
  33174. 800de58: 46bd mov sp, r7
  33175. 800de5a: bd80 pop {r7, pc}
  33176. 800de5c: 24002604 .word 0x24002604
  33177. 800de60: 2400212c .word 0x2400212c
  33178. 800de64: 24002128 .word 0x24002128
  33179. 800de68: e000ed04 .word 0xe000ed04
  33180. 0800de6c <xTaskGenericNotifyFromISR>:
  33181. /*-----------------------------------------------------------*/
  33182. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  33183. BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken )
  33184. {
  33185. 800de6c: b580 push {r7, lr}
  33186. 800de6e: b08e sub sp, #56 @ 0x38
  33187. 800de70: af00 add r7, sp, #0
  33188. 800de72: 60f8 str r0, [r7, #12]
  33189. 800de74: 60b9 str r1, [r7, #8]
  33190. 800de76: 603b str r3, [r7, #0]
  33191. 800de78: 4613 mov r3, r2
  33192. 800de7a: 71fb strb r3, [r7, #7]
  33193. TCB_t * pxTCB;
  33194. uint8_t ucOriginalNotifyState;
  33195. BaseType_t xReturn = pdPASS;
  33196. 800de7c: 2301 movs r3, #1
  33197. 800de7e: 637b str r3, [r7, #52] @ 0x34
  33198. UBaseType_t uxSavedInterruptStatus;
  33199. configASSERT( xTaskToNotify );
  33200. 800de80: 68fb ldr r3, [r7, #12]
  33201. 800de82: 2b00 cmp r3, #0
  33202. 800de84: d10b bne.n 800de9e <xTaskGenericNotifyFromISR+0x32>
  33203. __asm volatile
  33204. 800de86: f04f 0350 mov.w r3, #80 @ 0x50
  33205. 800de8a: f383 8811 msr BASEPRI, r3
  33206. 800de8e: f3bf 8f6f isb sy
  33207. 800de92: f3bf 8f4f dsb sy
  33208. 800de96: 627b str r3, [r7, #36] @ 0x24
  33209. }
  33210. 800de98: bf00 nop
  33211. 800de9a: bf00 nop
  33212. 800de9c: e7fd b.n 800de9a <xTaskGenericNotifyFromISR+0x2e>
  33213. below the maximum system call interrupt priority. FreeRTOS maintains a
  33214. separate interrupt safe API to ensure interrupt entry is as fast and as
  33215. simple as possible. More information (albeit Cortex-M specific) is
  33216. provided on the following link:
  33217. http://www.freertos.org/RTOS-Cortex-M3-M4.html */
  33218. portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
  33219. 800de9e: f000 feb3 bl 800ec08 <vPortValidateInterruptPriority>
  33220. pxTCB = xTaskToNotify;
  33221. 800dea2: 68fb ldr r3, [r7, #12]
  33222. 800dea4: 633b str r3, [r7, #48] @ 0x30
  33223. __asm volatile
  33224. 800dea6: f3ef 8211 mrs r2, BASEPRI
  33225. 800deaa: f04f 0350 mov.w r3, #80 @ 0x50
  33226. 800deae: f383 8811 msr BASEPRI, r3
  33227. 800deb2: f3bf 8f6f isb sy
  33228. 800deb6: f3bf 8f4f dsb sy
  33229. 800deba: 623a str r2, [r7, #32]
  33230. 800debc: 61fb str r3, [r7, #28]
  33231. return ulOriginalBASEPRI;
  33232. 800debe: 6a3b ldr r3, [r7, #32]
  33233. uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
  33234. 800dec0: 62fb str r3, [r7, #44] @ 0x2c
  33235. {
  33236. if( pulPreviousNotificationValue != NULL )
  33237. 800dec2: 683b ldr r3, [r7, #0]
  33238. 800dec4: 2b00 cmp r3, #0
  33239. 800dec6: d004 beq.n 800ded2 <xTaskGenericNotifyFromISR+0x66>
  33240. {
  33241. *pulPreviousNotificationValue = pxTCB->ulNotifiedValue;
  33242. 800dec8: 6b3b ldr r3, [r7, #48] @ 0x30
  33243. 800deca: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  33244. 800dece: 683b ldr r3, [r7, #0]
  33245. 800ded0: 601a str r2, [r3, #0]
  33246. }
  33247. ucOriginalNotifyState = pxTCB->ucNotifyState;
  33248. 800ded2: 6b3b ldr r3, [r7, #48] @ 0x30
  33249. 800ded4: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  33250. 800ded8: f887 302b strb.w r3, [r7, #43] @ 0x2b
  33251. pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED;
  33252. 800dedc: 6b3b ldr r3, [r7, #48] @ 0x30
  33253. 800dede: 2202 movs r2, #2
  33254. 800dee0: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  33255. switch( eAction )
  33256. 800dee4: 79fb ldrb r3, [r7, #7]
  33257. 800dee6: 2b04 cmp r3, #4
  33258. 800dee8: d82e bhi.n 800df48 <xTaskGenericNotifyFromISR+0xdc>
  33259. 800deea: a201 add r2, pc, #4 @ (adr r2, 800def0 <xTaskGenericNotifyFromISR+0x84>)
  33260. 800deec: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  33261. 800def0: 0800df6d .word 0x0800df6d
  33262. 800def4: 0800df05 .word 0x0800df05
  33263. 800def8: 0800df17 .word 0x0800df17
  33264. 800defc: 0800df27 .word 0x0800df27
  33265. 800df00: 0800df31 .word 0x0800df31
  33266. {
  33267. case eSetBits :
  33268. pxTCB->ulNotifiedValue |= ulValue;
  33269. 800df04: 6b3b ldr r3, [r7, #48] @ 0x30
  33270. 800df06: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  33271. 800df0a: 68bb ldr r3, [r7, #8]
  33272. 800df0c: 431a orrs r2, r3
  33273. 800df0e: 6b3b ldr r3, [r7, #48] @ 0x30
  33274. 800df10: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  33275. break;
  33276. 800df14: e02d b.n 800df72 <xTaskGenericNotifyFromISR+0x106>
  33277. case eIncrement :
  33278. ( pxTCB->ulNotifiedValue )++;
  33279. 800df16: 6b3b ldr r3, [r7, #48] @ 0x30
  33280. 800df18: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  33281. 800df1c: 1c5a adds r2, r3, #1
  33282. 800df1e: 6b3b ldr r3, [r7, #48] @ 0x30
  33283. 800df20: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  33284. break;
  33285. 800df24: e025 b.n 800df72 <xTaskGenericNotifyFromISR+0x106>
  33286. case eSetValueWithOverwrite :
  33287. pxTCB->ulNotifiedValue = ulValue;
  33288. 800df26: 6b3b ldr r3, [r7, #48] @ 0x30
  33289. 800df28: 68ba ldr r2, [r7, #8]
  33290. 800df2a: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  33291. break;
  33292. 800df2e: e020 b.n 800df72 <xTaskGenericNotifyFromISR+0x106>
  33293. case eSetValueWithoutOverwrite :
  33294. if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED )
  33295. 800df30: f897 302b ldrb.w r3, [r7, #43] @ 0x2b
  33296. 800df34: 2b02 cmp r3, #2
  33297. 800df36: d004 beq.n 800df42 <xTaskGenericNotifyFromISR+0xd6>
  33298. {
  33299. pxTCB->ulNotifiedValue = ulValue;
  33300. 800df38: 6b3b ldr r3, [r7, #48] @ 0x30
  33301. 800df3a: 68ba ldr r2, [r7, #8]
  33302. 800df3c: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  33303. else
  33304. {
  33305. /* The value could not be written to the task. */
  33306. xReturn = pdFAIL;
  33307. }
  33308. break;
  33309. 800df40: e017 b.n 800df72 <xTaskGenericNotifyFromISR+0x106>
  33310. xReturn = pdFAIL;
  33311. 800df42: 2300 movs r3, #0
  33312. 800df44: 637b str r3, [r7, #52] @ 0x34
  33313. break;
  33314. 800df46: e014 b.n 800df72 <xTaskGenericNotifyFromISR+0x106>
  33315. default:
  33316. /* Should not get here if all enums are handled.
  33317. Artificially force an assert by testing a value the
  33318. compiler can't assume is const. */
  33319. configASSERT( pxTCB->ulNotifiedValue == ~0UL );
  33320. 800df48: 6b3b ldr r3, [r7, #48] @ 0x30
  33321. 800df4a: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  33322. 800df4e: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  33323. 800df52: d00d beq.n 800df70 <xTaskGenericNotifyFromISR+0x104>
  33324. __asm volatile
  33325. 800df54: f04f 0350 mov.w r3, #80 @ 0x50
  33326. 800df58: f383 8811 msr BASEPRI, r3
  33327. 800df5c: f3bf 8f6f isb sy
  33328. 800df60: f3bf 8f4f dsb sy
  33329. 800df64: 61bb str r3, [r7, #24]
  33330. }
  33331. 800df66: bf00 nop
  33332. 800df68: bf00 nop
  33333. 800df6a: e7fd b.n 800df68 <xTaskGenericNotifyFromISR+0xfc>
  33334. break;
  33335. 800df6c: bf00 nop
  33336. 800df6e: e000 b.n 800df72 <xTaskGenericNotifyFromISR+0x106>
  33337. break;
  33338. 800df70: bf00 nop
  33339. traceTASK_NOTIFY_FROM_ISR();
  33340. /* If the task is in the blocked state specifically to wait for a
  33341. notification then unblock it now. */
  33342. if( ucOriginalNotifyState == taskWAITING_NOTIFICATION )
  33343. 800df72: f897 302b ldrb.w r3, [r7, #43] @ 0x2b
  33344. 800df76: 2b01 cmp r3, #1
  33345. 800df78: d147 bne.n 800e00a <xTaskGenericNotifyFromISR+0x19e>
  33346. {
  33347. /* The task should not have been on an event list. */
  33348. configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );
  33349. 800df7a: 6b3b ldr r3, [r7, #48] @ 0x30
  33350. 800df7c: 6a9b ldr r3, [r3, #40] @ 0x28
  33351. 800df7e: 2b00 cmp r3, #0
  33352. 800df80: d00b beq.n 800df9a <xTaskGenericNotifyFromISR+0x12e>
  33353. __asm volatile
  33354. 800df82: f04f 0350 mov.w r3, #80 @ 0x50
  33355. 800df86: f383 8811 msr BASEPRI, r3
  33356. 800df8a: f3bf 8f6f isb sy
  33357. 800df8e: f3bf 8f4f dsb sy
  33358. 800df92: 617b str r3, [r7, #20]
  33359. }
  33360. 800df94: bf00 nop
  33361. 800df96: bf00 nop
  33362. 800df98: e7fd b.n 800df96 <xTaskGenericNotifyFromISR+0x12a>
  33363. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  33364. 800df9a: 4b21 ldr r3, [pc, #132] @ (800e020 <xTaskGenericNotifyFromISR+0x1b4>)
  33365. 800df9c: 681b ldr r3, [r3, #0]
  33366. 800df9e: 2b00 cmp r3, #0
  33367. 800dfa0: d11d bne.n 800dfde <xTaskGenericNotifyFromISR+0x172>
  33368. {
  33369. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  33370. 800dfa2: 6b3b ldr r3, [r7, #48] @ 0x30
  33371. 800dfa4: 3304 adds r3, #4
  33372. 800dfa6: 4618 mov r0, r3
  33373. 800dfa8: f7fd fd14 bl 800b9d4 <uxListRemove>
  33374. prvAddTaskToReadyList( pxTCB );
  33375. 800dfac: 6b3b ldr r3, [r7, #48] @ 0x30
  33376. 800dfae: 6ada ldr r2, [r3, #44] @ 0x2c
  33377. 800dfb0: 4b1c ldr r3, [pc, #112] @ (800e024 <xTaskGenericNotifyFromISR+0x1b8>)
  33378. 800dfb2: 681b ldr r3, [r3, #0]
  33379. 800dfb4: 429a cmp r2, r3
  33380. 800dfb6: d903 bls.n 800dfc0 <xTaskGenericNotifyFromISR+0x154>
  33381. 800dfb8: 6b3b ldr r3, [r7, #48] @ 0x30
  33382. 800dfba: 6adb ldr r3, [r3, #44] @ 0x2c
  33383. 800dfbc: 4a19 ldr r2, [pc, #100] @ (800e024 <xTaskGenericNotifyFromISR+0x1b8>)
  33384. 800dfbe: 6013 str r3, [r2, #0]
  33385. 800dfc0: 6b3b ldr r3, [r7, #48] @ 0x30
  33386. 800dfc2: 6ada ldr r2, [r3, #44] @ 0x2c
  33387. 800dfc4: 4613 mov r3, r2
  33388. 800dfc6: 009b lsls r3, r3, #2
  33389. 800dfc8: 4413 add r3, r2
  33390. 800dfca: 009b lsls r3, r3, #2
  33391. 800dfcc: 4a16 ldr r2, [pc, #88] @ (800e028 <xTaskGenericNotifyFromISR+0x1bc>)
  33392. 800dfce: 441a add r2, r3
  33393. 800dfd0: 6b3b ldr r3, [r7, #48] @ 0x30
  33394. 800dfd2: 3304 adds r3, #4
  33395. 800dfd4: 4619 mov r1, r3
  33396. 800dfd6: 4610 mov r0, r2
  33397. 800dfd8: f7fd fc9f bl 800b91a <vListInsertEnd>
  33398. 800dfdc: e005 b.n 800dfea <xTaskGenericNotifyFromISR+0x17e>
  33399. }
  33400. else
  33401. {
  33402. /* The delayed and ready lists cannot be accessed, so hold
  33403. this task pending until the scheduler is resumed. */
  33404. vListInsertEnd( &( xPendingReadyList ), &( pxTCB->xEventListItem ) );
  33405. 800dfde: 6b3b ldr r3, [r7, #48] @ 0x30
  33406. 800dfe0: 3318 adds r3, #24
  33407. 800dfe2: 4619 mov r1, r3
  33408. 800dfe4: 4811 ldr r0, [pc, #68] @ (800e02c <xTaskGenericNotifyFromISR+0x1c0>)
  33409. 800dfe6: f7fd fc98 bl 800b91a <vListInsertEnd>
  33410. }
  33411. if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
  33412. 800dfea: 6b3b ldr r3, [r7, #48] @ 0x30
  33413. 800dfec: 6ada ldr r2, [r3, #44] @ 0x2c
  33414. 800dfee: 4b10 ldr r3, [pc, #64] @ (800e030 <xTaskGenericNotifyFromISR+0x1c4>)
  33415. 800dff0: 681b ldr r3, [r3, #0]
  33416. 800dff2: 6adb ldr r3, [r3, #44] @ 0x2c
  33417. 800dff4: 429a cmp r2, r3
  33418. 800dff6: d908 bls.n 800e00a <xTaskGenericNotifyFromISR+0x19e>
  33419. {
  33420. /* The notified task has a priority above the currently
  33421. executing task so a yield is required. */
  33422. if( pxHigherPriorityTaskWoken != NULL )
  33423. 800dff8: 6c3b ldr r3, [r7, #64] @ 0x40
  33424. 800dffa: 2b00 cmp r3, #0
  33425. 800dffc: d002 beq.n 800e004 <xTaskGenericNotifyFromISR+0x198>
  33426. {
  33427. *pxHigherPriorityTaskWoken = pdTRUE;
  33428. 800dffe: 6c3b ldr r3, [r7, #64] @ 0x40
  33429. 800e000: 2201 movs r2, #1
  33430. 800e002: 601a str r2, [r3, #0]
  33431. }
  33432. /* Mark that a yield is pending in case the user is not
  33433. using the "xHigherPriorityTaskWoken" parameter to an ISR
  33434. safe FreeRTOS function. */
  33435. xYieldPending = pdTRUE;
  33436. 800e004: 4b0b ldr r3, [pc, #44] @ (800e034 <xTaskGenericNotifyFromISR+0x1c8>)
  33437. 800e006: 2201 movs r2, #1
  33438. 800e008: 601a str r2, [r3, #0]
  33439. 800e00a: 6afb ldr r3, [r7, #44] @ 0x2c
  33440. 800e00c: 613b str r3, [r7, #16]
  33441. __asm volatile
  33442. 800e00e: 693b ldr r3, [r7, #16]
  33443. 800e010: f383 8811 msr BASEPRI, r3
  33444. }
  33445. 800e014: bf00 nop
  33446. }
  33447. }
  33448. }
  33449. portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
  33450. return xReturn;
  33451. 800e016: 6b7b ldr r3, [r7, #52] @ 0x34
  33452. }
  33453. 800e018: 4618 mov r0, r3
  33454. 800e01a: 3738 adds r7, #56 @ 0x38
  33455. 800e01c: 46bd mov sp, r7
  33456. 800e01e: bd80 pop {r7, pc}
  33457. 800e020: 24002624 .word 0x24002624
  33458. 800e024: 24002604 .word 0x24002604
  33459. 800e028: 2400212c .word 0x2400212c
  33460. 800e02c: 240025bc .word 0x240025bc
  33461. 800e030: 24002128 .word 0x24002128
  33462. 800e034: 24002610 .word 0x24002610
  33463. 0800e038 <xTaskNotifyStateClear>:
  33464. /*-----------------------------------------------------------*/
  33465. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  33466. BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask )
  33467. {
  33468. 800e038: b580 push {r7, lr}
  33469. 800e03a: b084 sub sp, #16
  33470. 800e03c: af00 add r7, sp, #0
  33471. 800e03e: 6078 str r0, [r7, #4]
  33472. TCB_t *pxTCB;
  33473. BaseType_t xReturn;
  33474. /* If null is passed in here then it is the calling task that is having
  33475. its notification state cleared. */
  33476. pxTCB = prvGetTCBFromHandle( xTask );
  33477. 800e040: 687b ldr r3, [r7, #4]
  33478. 800e042: 2b00 cmp r3, #0
  33479. 800e044: d102 bne.n 800e04c <xTaskNotifyStateClear+0x14>
  33480. 800e046: 4b0e ldr r3, [pc, #56] @ (800e080 <xTaskNotifyStateClear+0x48>)
  33481. 800e048: 681b ldr r3, [r3, #0]
  33482. 800e04a: e000 b.n 800e04e <xTaskNotifyStateClear+0x16>
  33483. 800e04c: 687b ldr r3, [r7, #4]
  33484. 800e04e: 60bb str r3, [r7, #8]
  33485. taskENTER_CRITICAL();
  33486. 800e050: f000 fcfa bl 800ea48 <vPortEnterCritical>
  33487. {
  33488. if( pxTCB->ucNotifyState == taskNOTIFICATION_RECEIVED )
  33489. 800e054: 68bb ldr r3, [r7, #8]
  33490. 800e056: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  33491. 800e05a: b2db uxtb r3, r3
  33492. 800e05c: 2b02 cmp r3, #2
  33493. 800e05e: d106 bne.n 800e06e <xTaskNotifyStateClear+0x36>
  33494. {
  33495. pxTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  33496. 800e060: 68bb ldr r3, [r7, #8]
  33497. 800e062: 2200 movs r2, #0
  33498. 800e064: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  33499. xReturn = pdPASS;
  33500. 800e068: 2301 movs r3, #1
  33501. 800e06a: 60fb str r3, [r7, #12]
  33502. 800e06c: e001 b.n 800e072 <xTaskNotifyStateClear+0x3a>
  33503. }
  33504. else
  33505. {
  33506. xReturn = pdFAIL;
  33507. 800e06e: 2300 movs r3, #0
  33508. 800e070: 60fb str r3, [r7, #12]
  33509. }
  33510. }
  33511. taskEXIT_CRITICAL();
  33512. 800e072: f000 fd1b bl 800eaac <vPortExitCritical>
  33513. return xReturn;
  33514. 800e076: 68fb ldr r3, [r7, #12]
  33515. }
  33516. 800e078: 4618 mov r0, r3
  33517. 800e07a: 3710 adds r7, #16
  33518. 800e07c: 46bd mov sp, r7
  33519. 800e07e: bd80 pop {r7, pc}
  33520. 800e080: 24002128 .word 0x24002128
  33521. 0800e084 <prvAddCurrentTaskToDelayedList>:
  33522. #endif
  33523. /*-----------------------------------------------------------*/
  33524. static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseType_t xCanBlockIndefinitely )
  33525. {
  33526. 800e084: b580 push {r7, lr}
  33527. 800e086: b084 sub sp, #16
  33528. 800e088: af00 add r7, sp, #0
  33529. 800e08a: 6078 str r0, [r7, #4]
  33530. 800e08c: 6039 str r1, [r7, #0]
  33531. TickType_t xTimeToWake;
  33532. const TickType_t xConstTickCount = xTickCount;
  33533. 800e08e: 4b21 ldr r3, [pc, #132] @ (800e114 <prvAddCurrentTaskToDelayedList+0x90>)
  33534. 800e090: 681b ldr r3, [r3, #0]
  33535. 800e092: 60fb str r3, [r7, #12]
  33536. }
  33537. #endif
  33538. /* Remove the task from the ready list before adding it to the blocked list
  33539. as the same list item is used for both lists. */
  33540. if( uxListRemove( &( pxCurrentTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  33541. 800e094: 4b20 ldr r3, [pc, #128] @ (800e118 <prvAddCurrentTaskToDelayedList+0x94>)
  33542. 800e096: 681b ldr r3, [r3, #0]
  33543. 800e098: 3304 adds r3, #4
  33544. 800e09a: 4618 mov r0, r3
  33545. 800e09c: f7fd fc9a bl 800b9d4 <uxListRemove>
  33546. mtCOVERAGE_TEST_MARKER();
  33547. }
  33548. #if ( INCLUDE_vTaskSuspend == 1 )
  33549. {
  33550. if( ( xTicksToWait == portMAX_DELAY ) && ( xCanBlockIndefinitely != pdFALSE ) )
  33551. 800e0a0: 687b ldr r3, [r7, #4]
  33552. 800e0a2: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  33553. 800e0a6: d10a bne.n 800e0be <prvAddCurrentTaskToDelayedList+0x3a>
  33554. 800e0a8: 683b ldr r3, [r7, #0]
  33555. 800e0aa: 2b00 cmp r3, #0
  33556. 800e0ac: d007 beq.n 800e0be <prvAddCurrentTaskToDelayedList+0x3a>
  33557. {
  33558. /* Add the task to the suspended task list instead of a delayed task
  33559. list to ensure it is not woken by a timing event. It will block
  33560. indefinitely. */
  33561. vListInsertEnd( &xSuspendedTaskList, &( pxCurrentTCB->xStateListItem ) );
  33562. 800e0ae: 4b1a ldr r3, [pc, #104] @ (800e118 <prvAddCurrentTaskToDelayedList+0x94>)
  33563. 800e0b0: 681b ldr r3, [r3, #0]
  33564. 800e0b2: 3304 adds r3, #4
  33565. 800e0b4: 4619 mov r1, r3
  33566. 800e0b6: 4819 ldr r0, [pc, #100] @ (800e11c <prvAddCurrentTaskToDelayedList+0x98>)
  33567. 800e0b8: f7fd fc2f bl 800b91a <vListInsertEnd>
  33568. /* Avoid compiler warning when INCLUDE_vTaskSuspend is not 1. */
  33569. ( void ) xCanBlockIndefinitely;
  33570. }
  33571. #endif /* INCLUDE_vTaskSuspend */
  33572. }
  33573. 800e0bc: e026 b.n 800e10c <prvAddCurrentTaskToDelayedList+0x88>
  33574. xTimeToWake = xConstTickCount + xTicksToWait;
  33575. 800e0be: 68fa ldr r2, [r7, #12]
  33576. 800e0c0: 687b ldr r3, [r7, #4]
  33577. 800e0c2: 4413 add r3, r2
  33578. 800e0c4: 60bb str r3, [r7, #8]
  33579. listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xStateListItem ), xTimeToWake );
  33580. 800e0c6: 4b14 ldr r3, [pc, #80] @ (800e118 <prvAddCurrentTaskToDelayedList+0x94>)
  33581. 800e0c8: 681b ldr r3, [r3, #0]
  33582. 800e0ca: 68ba ldr r2, [r7, #8]
  33583. 800e0cc: 605a str r2, [r3, #4]
  33584. if( xTimeToWake < xConstTickCount )
  33585. 800e0ce: 68ba ldr r2, [r7, #8]
  33586. 800e0d0: 68fb ldr r3, [r7, #12]
  33587. 800e0d2: 429a cmp r2, r3
  33588. 800e0d4: d209 bcs.n 800e0ea <prvAddCurrentTaskToDelayedList+0x66>
  33589. vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) );
  33590. 800e0d6: 4b12 ldr r3, [pc, #72] @ (800e120 <prvAddCurrentTaskToDelayedList+0x9c>)
  33591. 800e0d8: 681a ldr r2, [r3, #0]
  33592. 800e0da: 4b0f ldr r3, [pc, #60] @ (800e118 <prvAddCurrentTaskToDelayedList+0x94>)
  33593. 800e0dc: 681b ldr r3, [r3, #0]
  33594. 800e0de: 3304 adds r3, #4
  33595. 800e0e0: 4619 mov r1, r3
  33596. 800e0e2: 4610 mov r0, r2
  33597. 800e0e4: f7fd fc3d bl 800b962 <vListInsert>
  33598. }
  33599. 800e0e8: e010 b.n 800e10c <prvAddCurrentTaskToDelayedList+0x88>
  33600. vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) );
  33601. 800e0ea: 4b0e ldr r3, [pc, #56] @ (800e124 <prvAddCurrentTaskToDelayedList+0xa0>)
  33602. 800e0ec: 681a ldr r2, [r3, #0]
  33603. 800e0ee: 4b0a ldr r3, [pc, #40] @ (800e118 <prvAddCurrentTaskToDelayedList+0x94>)
  33604. 800e0f0: 681b ldr r3, [r3, #0]
  33605. 800e0f2: 3304 adds r3, #4
  33606. 800e0f4: 4619 mov r1, r3
  33607. 800e0f6: 4610 mov r0, r2
  33608. 800e0f8: f7fd fc33 bl 800b962 <vListInsert>
  33609. if( xTimeToWake < xNextTaskUnblockTime )
  33610. 800e0fc: 4b0a ldr r3, [pc, #40] @ (800e128 <prvAddCurrentTaskToDelayedList+0xa4>)
  33611. 800e0fe: 681b ldr r3, [r3, #0]
  33612. 800e100: 68ba ldr r2, [r7, #8]
  33613. 800e102: 429a cmp r2, r3
  33614. 800e104: d202 bcs.n 800e10c <prvAddCurrentTaskToDelayedList+0x88>
  33615. xNextTaskUnblockTime = xTimeToWake;
  33616. 800e106: 4a08 ldr r2, [pc, #32] @ (800e128 <prvAddCurrentTaskToDelayedList+0xa4>)
  33617. 800e108: 68bb ldr r3, [r7, #8]
  33618. 800e10a: 6013 str r3, [r2, #0]
  33619. }
  33620. 800e10c: bf00 nop
  33621. 800e10e: 3710 adds r7, #16
  33622. 800e110: 46bd mov sp, r7
  33623. 800e112: bd80 pop {r7, pc}
  33624. 800e114: 24002600 .word 0x24002600
  33625. 800e118: 24002128 .word 0x24002128
  33626. 800e11c: 240025e8 .word 0x240025e8
  33627. 800e120: 240025b8 .word 0x240025b8
  33628. 800e124: 240025b4 .word 0x240025b4
  33629. 800e128: 2400261c .word 0x2400261c
  33630. 0800e12c <xTimerCreateTimerTask>:
  33631. TimerCallbackFunction_t pxCallbackFunction,
  33632. Timer_t *pxNewTimer ) PRIVILEGED_FUNCTION;
  33633. /*-----------------------------------------------------------*/
  33634. BaseType_t xTimerCreateTimerTask( void )
  33635. {
  33636. 800e12c: b580 push {r7, lr}
  33637. 800e12e: b08a sub sp, #40 @ 0x28
  33638. 800e130: af04 add r7, sp, #16
  33639. BaseType_t xReturn = pdFAIL;
  33640. 800e132: 2300 movs r3, #0
  33641. 800e134: 617b str r3, [r7, #20]
  33642. /* This function is called when the scheduler is started if
  33643. configUSE_TIMERS is set to 1. Check that the infrastructure used by the
  33644. timer service task has been created/initialised. If timers have already
  33645. been created then the initialisation will already have been performed. */
  33646. prvCheckForValidListAndQueue();
  33647. 800e136: f000 fb13 bl 800e760 <prvCheckForValidListAndQueue>
  33648. if( xTimerQueue != NULL )
  33649. 800e13a: 4b1d ldr r3, [pc, #116] @ (800e1b0 <xTimerCreateTimerTask+0x84>)
  33650. 800e13c: 681b ldr r3, [r3, #0]
  33651. 800e13e: 2b00 cmp r3, #0
  33652. 800e140: d021 beq.n 800e186 <xTimerCreateTimerTask+0x5a>
  33653. {
  33654. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  33655. {
  33656. StaticTask_t *pxTimerTaskTCBBuffer = NULL;
  33657. 800e142: 2300 movs r3, #0
  33658. 800e144: 60fb str r3, [r7, #12]
  33659. StackType_t *pxTimerTaskStackBuffer = NULL;
  33660. 800e146: 2300 movs r3, #0
  33661. 800e148: 60bb str r3, [r7, #8]
  33662. uint32_t ulTimerTaskStackSize;
  33663. vApplicationGetTimerTaskMemory( &pxTimerTaskTCBBuffer, &pxTimerTaskStackBuffer, &ulTimerTaskStackSize );
  33664. 800e14a: 1d3a adds r2, r7, #4
  33665. 800e14c: f107 0108 add.w r1, r7, #8
  33666. 800e150: f107 030c add.w r3, r7, #12
  33667. 800e154: 4618 mov r0, r3
  33668. 800e156: f7fd fb99 bl 800b88c <vApplicationGetTimerTaskMemory>
  33669. xTimerTaskHandle = xTaskCreateStatic( prvTimerTask,
  33670. 800e15a: 6879 ldr r1, [r7, #4]
  33671. 800e15c: 68bb ldr r3, [r7, #8]
  33672. 800e15e: 68fa ldr r2, [r7, #12]
  33673. 800e160: 9202 str r2, [sp, #8]
  33674. 800e162: 9301 str r3, [sp, #4]
  33675. 800e164: 2302 movs r3, #2
  33676. 800e166: 9300 str r3, [sp, #0]
  33677. 800e168: 2300 movs r3, #0
  33678. 800e16a: 460a mov r2, r1
  33679. 800e16c: 4911 ldr r1, [pc, #68] @ (800e1b4 <xTimerCreateTimerTask+0x88>)
  33680. 800e16e: 4812 ldr r0, [pc, #72] @ (800e1b8 <xTimerCreateTimerTask+0x8c>)
  33681. 800e170: f7fe fd2f bl 800cbd2 <xTaskCreateStatic>
  33682. 800e174: 4603 mov r3, r0
  33683. 800e176: 4a11 ldr r2, [pc, #68] @ (800e1bc <xTimerCreateTimerTask+0x90>)
  33684. 800e178: 6013 str r3, [r2, #0]
  33685. NULL,
  33686. ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT,
  33687. pxTimerTaskStackBuffer,
  33688. pxTimerTaskTCBBuffer );
  33689. if( xTimerTaskHandle != NULL )
  33690. 800e17a: 4b10 ldr r3, [pc, #64] @ (800e1bc <xTimerCreateTimerTask+0x90>)
  33691. 800e17c: 681b ldr r3, [r3, #0]
  33692. 800e17e: 2b00 cmp r3, #0
  33693. 800e180: d001 beq.n 800e186 <xTimerCreateTimerTask+0x5a>
  33694. {
  33695. xReturn = pdPASS;
  33696. 800e182: 2301 movs r3, #1
  33697. 800e184: 617b str r3, [r7, #20]
  33698. else
  33699. {
  33700. mtCOVERAGE_TEST_MARKER();
  33701. }
  33702. configASSERT( xReturn );
  33703. 800e186: 697b ldr r3, [r7, #20]
  33704. 800e188: 2b00 cmp r3, #0
  33705. 800e18a: d10b bne.n 800e1a4 <xTimerCreateTimerTask+0x78>
  33706. __asm volatile
  33707. 800e18c: f04f 0350 mov.w r3, #80 @ 0x50
  33708. 800e190: f383 8811 msr BASEPRI, r3
  33709. 800e194: f3bf 8f6f isb sy
  33710. 800e198: f3bf 8f4f dsb sy
  33711. 800e19c: 613b str r3, [r7, #16]
  33712. }
  33713. 800e19e: bf00 nop
  33714. 800e1a0: bf00 nop
  33715. 800e1a2: e7fd b.n 800e1a0 <xTimerCreateTimerTask+0x74>
  33716. return xReturn;
  33717. 800e1a4: 697b ldr r3, [r7, #20]
  33718. }
  33719. 800e1a6: 4618 mov r0, r3
  33720. 800e1a8: 3718 adds r7, #24
  33721. 800e1aa: 46bd mov sp, r7
  33722. 800e1ac: bd80 pop {r7, pc}
  33723. 800e1ae: bf00 nop
  33724. 800e1b0: 24002658 .word 0x24002658
  33725. 800e1b4: 0801007c .word 0x0801007c
  33726. 800e1b8: 0800e2f9 .word 0x0800e2f9
  33727. 800e1bc: 2400265c .word 0x2400265c
  33728. 0800e1c0 <xTimerGenericCommand>:
  33729. }
  33730. }
  33731. /*-----------------------------------------------------------*/
  33732. BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait )
  33733. {
  33734. 800e1c0: b580 push {r7, lr}
  33735. 800e1c2: b08a sub sp, #40 @ 0x28
  33736. 800e1c4: af00 add r7, sp, #0
  33737. 800e1c6: 60f8 str r0, [r7, #12]
  33738. 800e1c8: 60b9 str r1, [r7, #8]
  33739. 800e1ca: 607a str r2, [r7, #4]
  33740. 800e1cc: 603b str r3, [r7, #0]
  33741. BaseType_t xReturn = pdFAIL;
  33742. 800e1ce: 2300 movs r3, #0
  33743. 800e1d0: 627b str r3, [r7, #36] @ 0x24
  33744. DaemonTaskMessage_t xMessage;
  33745. configASSERT( xTimer );
  33746. 800e1d2: 68fb ldr r3, [r7, #12]
  33747. 800e1d4: 2b00 cmp r3, #0
  33748. 800e1d6: d10b bne.n 800e1f0 <xTimerGenericCommand+0x30>
  33749. __asm volatile
  33750. 800e1d8: f04f 0350 mov.w r3, #80 @ 0x50
  33751. 800e1dc: f383 8811 msr BASEPRI, r3
  33752. 800e1e0: f3bf 8f6f isb sy
  33753. 800e1e4: f3bf 8f4f dsb sy
  33754. 800e1e8: 623b str r3, [r7, #32]
  33755. }
  33756. 800e1ea: bf00 nop
  33757. 800e1ec: bf00 nop
  33758. 800e1ee: e7fd b.n 800e1ec <xTimerGenericCommand+0x2c>
  33759. /* Send a message to the timer service task to perform a particular action
  33760. on a particular timer definition. */
  33761. if( xTimerQueue != NULL )
  33762. 800e1f0: 4b19 ldr r3, [pc, #100] @ (800e258 <xTimerGenericCommand+0x98>)
  33763. 800e1f2: 681b ldr r3, [r3, #0]
  33764. 800e1f4: 2b00 cmp r3, #0
  33765. 800e1f6: d02a beq.n 800e24e <xTimerGenericCommand+0x8e>
  33766. {
  33767. /* Send a command to the timer service task to start the xTimer timer. */
  33768. xMessage.xMessageID = xCommandID;
  33769. 800e1f8: 68bb ldr r3, [r7, #8]
  33770. 800e1fa: 613b str r3, [r7, #16]
  33771. xMessage.u.xTimerParameters.xMessageValue = xOptionalValue;
  33772. 800e1fc: 687b ldr r3, [r7, #4]
  33773. 800e1fe: 617b str r3, [r7, #20]
  33774. xMessage.u.xTimerParameters.pxTimer = xTimer;
  33775. 800e200: 68fb ldr r3, [r7, #12]
  33776. 800e202: 61bb str r3, [r7, #24]
  33777. if( xCommandID < tmrFIRST_FROM_ISR_COMMAND )
  33778. 800e204: 68bb ldr r3, [r7, #8]
  33779. 800e206: 2b05 cmp r3, #5
  33780. 800e208: dc18 bgt.n 800e23c <xTimerGenericCommand+0x7c>
  33781. {
  33782. if( xTaskGetSchedulerState() == taskSCHEDULER_RUNNING )
  33783. 800e20a: f7ff fb7f bl 800d90c <xTaskGetSchedulerState>
  33784. 800e20e: 4603 mov r3, r0
  33785. 800e210: 2b02 cmp r3, #2
  33786. 800e212: d109 bne.n 800e228 <xTimerGenericCommand+0x68>
  33787. {
  33788. xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait );
  33789. 800e214: 4b10 ldr r3, [pc, #64] @ (800e258 <xTimerGenericCommand+0x98>)
  33790. 800e216: 6818 ldr r0, [r3, #0]
  33791. 800e218: f107 0110 add.w r1, r7, #16
  33792. 800e21c: 2300 movs r3, #0
  33793. 800e21e: 6b3a ldr r2, [r7, #48] @ 0x30
  33794. 800e220: f7fd fe00 bl 800be24 <xQueueGenericSend>
  33795. 800e224: 6278 str r0, [r7, #36] @ 0x24
  33796. 800e226: e012 b.n 800e24e <xTimerGenericCommand+0x8e>
  33797. }
  33798. else
  33799. {
  33800. xReturn = xQueueSendToBack( xTimerQueue, &xMessage, tmrNO_DELAY );
  33801. 800e228: 4b0b ldr r3, [pc, #44] @ (800e258 <xTimerGenericCommand+0x98>)
  33802. 800e22a: 6818 ldr r0, [r3, #0]
  33803. 800e22c: f107 0110 add.w r1, r7, #16
  33804. 800e230: 2300 movs r3, #0
  33805. 800e232: 2200 movs r2, #0
  33806. 800e234: f7fd fdf6 bl 800be24 <xQueueGenericSend>
  33807. 800e238: 6278 str r0, [r7, #36] @ 0x24
  33808. 800e23a: e008 b.n 800e24e <xTimerGenericCommand+0x8e>
  33809. }
  33810. }
  33811. else
  33812. {
  33813. xReturn = xQueueSendToBackFromISR( xTimerQueue, &xMessage, pxHigherPriorityTaskWoken );
  33814. 800e23c: 4b06 ldr r3, [pc, #24] @ (800e258 <xTimerGenericCommand+0x98>)
  33815. 800e23e: 6818 ldr r0, [r3, #0]
  33816. 800e240: f107 0110 add.w r1, r7, #16
  33817. 800e244: 2300 movs r3, #0
  33818. 800e246: 683a ldr r2, [r7, #0]
  33819. 800e248: f7fd feee bl 800c028 <xQueueGenericSendFromISR>
  33820. 800e24c: 6278 str r0, [r7, #36] @ 0x24
  33821. else
  33822. {
  33823. mtCOVERAGE_TEST_MARKER();
  33824. }
  33825. return xReturn;
  33826. 800e24e: 6a7b ldr r3, [r7, #36] @ 0x24
  33827. }
  33828. 800e250: 4618 mov r0, r3
  33829. 800e252: 3728 adds r7, #40 @ 0x28
  33830. 800e254: 46bd mov sp, r7
  33831. 800e256: bd80 pop {r7, pc}
  33832. 800e258: 24002658 .word 0x24002658
  33833. 0800e25c <prvProcessExpiredTimer>:
  33834. return pxTimer->pcTimerName;
  33835. }
  33836. /*-----------------------------------------------------------*/
  33837. static void prvProcessExpiredTimer( const TickType_t xNextExpireTime, const TickType_t xTimeNow )
  33838. {
  33839. 800e25c: b580 push {r7, lr}
  33840. 800e25e: b088 sub sp, #32
  33841. 800e260: af02 add r7, sp, #8
  33842. 800e262: 6078 str r0, [r7, #4]
  33843. 800e264: 6039 str r1, [r7, #0]
  33844. BaseType_t xResult;
  33845. 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. */
  33846. 800e266: 4b23 ldr r3, [pc, #140] @ (800e2f4 <prvProcessExpiredTimer+0x98>)
  33847. 800e268: 681b ldr r3, [r3, #0]
  33848. 800e26a: 68db ldr r3, [r3, #12]
  33849. 800e26c: 68db ldr r3, [r3, #12]
  33850. 800e26e: 617b str r3, [r7, #20]
  33851. /* Remove the timer from the list of active timers. A check has already
  33852. been performed to ensure the list is not empty. */
  33853. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  33854. 800e270: 697b ldr r3, [r7, #20]
  33855. 800e272: 3304 adds r3, #4
  33856. 800e274: 4618 mov r0, r3
  33857. 800e276: f7fd fbad bl 800b9d4 <uxListRemove>
  33858. traceTIMER_EXPIRED( pxTimer );
  33859. /* If the timer is an auto-reload timer then calculate the next
  33860. expiry time and re-insert the timer in the list of active timers. */
  33861. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  33862. 800e27a: 697b ldr r3, [r7, #20]
  33863. 800e27c: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  33864. 800e280: f003 0304 and.w r3, r3, #4
  33865. 800e284: 2b00 cmp r3, #0
  33866. 800e286: d023 beq.n 800e2d0 <prvProcessExpiredTimer+0x74>
  33867. {
  33868. /* The timer is inserted into a list using a time relative to anything
  33869. other than the current time. It will therefore be inserted into the
  33870. correct list relative to the time this task thinks it is now. */
  33871. if( prvInsertTimerInActiveList( pxTimer, ( xNextExpireTime + pxTimer->xTimerPeriodInTicks ), xTimeNow, xNextExpireTime ) != pdFALSE )
  33872. 800e288: 697b ldr r3, [r7, #20]
  33873. 800e28a: 699a ldr r2, [r3, #24]
  33874. 800e28c: 687b ldr r3, [r7, #4]
  33875. 800e28e: 18d1 adds r1, r2, r3
  33876. 800e290: 687b ldr r3, [r7, #4]
  33877. 800e292: 683a ldr r2, [r7, #0]
  33878. 800e294: 6978 ldr r0, [r7, #20]
  33879. 800e296: f000 f8d5 bl 800e444 <prvInsertTimerInActiveList>
  33880. 800e29a: 4603 mov r3, r0
  33881. 800e29c: 2b00 cmp r3, #0
  33882. 800e29e: d020 beq.n 800e2e2 <prvProcessExpiredTimer+0x86>
  33883. {
  33884. /* The timer expired before it was added to the active timer
  33885. list. Reload it now. */
  33886. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY );
  33887. 800e2a0: 2300 movs r3, #0
  33888. 800e2a2: 9300 str r3, [sp, #0]
  33889. 800e2a4: 2300 movs r3, #0
  33890. 800e2a6: 687a ldr r2, [r7, #4]
  33891. 800e2a8: 2100 movs r1, #0
  33892. 800e2aa: 6978 ldr r0, [r7, #20]
  33893. 800e2ac: f7ff ff88 bl 800e1c0 <xTimerGenericCommand>
  33894. 800e2b0: 6138 str r0, [r7, #16]
  33895. configASSERT( xResult );
  33896. 800e2b2: 693b ldr r3, [r7, #16]
  33897. 800e2b4: 2b00 cmp r3, #0
  33898. 800e2b6: d114 bne.n 800e2e2 <prvProcessExpiredTimer+0x86>
  33899. __asm volatile
  33900. 800e2b8: f04f 0350 mov.w r3, #80 @ 0x50
  33901. 800e2bc: f383 8811 msr BASEPRI, r3
  33902. 800e2c0: f3bf 8f6f isb sy
  33903. 800e2c4: f3bf 8f4f dsb sy
  33904. 800e2c8: 60fb str r3, [r7, #12]
  33905. }
  33906. 800e2ca: bf00 nop
  33907. 800e2cc: bf00 nop
  33908. 800e2ce: e7fd b.n 800e2cc <prvProcessExpiredTimer+0x70>
  33909. mtCOVERAGE_TEST_MARKER();
  33910. }
  33911. }
  33912. else
  33913. {
  33914. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  33915. 800e2d0: 697b ldr r3, [r7, #20]
  33916. 800e2d2: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  33917. 800e2d6: f023 0301 bic.w r3, r3, #1
  33918. 800e2da: b2da uxtb r2, r3
  33919. 800e2dc: 697b ldr r3, [r7, #20]
  33920. 800e2de: f883 2028 strb.w r2, [r3, #40] @ 0x28
  33921. mtCOVERAGE_TEST_MARKER();
  33922. }
  33923. /* Call the timer callback. */
  33924. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  33925. 800e2e2: 697b ldr r3, [r7, #20]
  33926. 800e2e4: 6a1b ldr r3, [r3, #32]
  33927. 800e2e6: 6978 ldr r0, [r7, #20]
  33928. 800e2e8: 4798 blx r3
  33929. }
  33930. 800e2ea: bf00 nop
  33931. 800e2ec: 3718 adds r7, #24
  33932. 800e2ee: 46bd mov sp, r7
  33933. 800e2f0: bd80 pop {r7, pc}
  33934. 800e2f2: bf00 nop
  33935. 800e2f4: 24002650 .word 0x24002650
  33936. 0800e2f8 <prvTimerTask>:
  33937. /*-----------------------------------------------------------*/
  33938. static portTASK_FUNCTION( prvTimerTask, pvParameters )
  33939. {
  33940. 800e2f8: b580 push {r7, lr}
  33941. 800e2fa: b084 sub sp, #16
  33942. 800e2fc: af00 add r7, sp, #0
  33943. 800e2fe: 6078 str r0, [r7, #4]
  33944. for( ;; )
  33945. {
  33946. /* Query the timers list to see if it contains any timers, and if so,
  33947. obtain the time at which the next timer will expire. */
  33948. xNextExpireTime = prvGetNextExpireTime( &xListWasEmpty );
  33949. 800e300: f107 0308 add.w r3, r7, #8
  33950. 800e304: 4618 mov r0, r3
  33951. 800e306: f000 f859 bl 800e3bc <prvGetNextExpireTime>
  33952. 800e30a: 60f8 str r0, [r7, #12]
  33953. /* If a timer has expired, process it. Otherwise, block this task
  33954. until either a timer does expire, or a command is received. */
  33955. prvProcessTimerOrBlockTask( xNextExpireTime, xListWasEmpty );
  33956. 800e30c: 68bb ldr r3, [r7, #8]
  33957. 800e30e: 4619 mov r1, r3
  33958. 800e310: 68f8 ldr r0, [r7, #12]
  33959. 800e312: f000 f805 bl 800e320 <prvProcessTimerOrBlockTask>
  33960. /* Empty the command queue. */
  33961. prvProcessReceivedCommands();
  33962. 800e316: f000 f8d7 bl 800e4c8 <prvProcessReceivedCommands>
  33963. xNextExpireTime = prvGetNextExpireTime( &xListWasEmpty );
  33964. 800e31a: bf00 nop
  33965. 800e31c: e7f0 b.n 800e300 <prvTimerTask+0x8>
  33966. ...
  33967. 0800e320 <prvProcessTimerOrBlockTask>:
  33968. }
  33969. }
  33970. /*-----------------------------------------------------------*/
  33971. static void prvProcessTimerOrBlockTask( const TickType_t xNextExpireTime, BaseType_t xListWasEmpty )
  33972. {
  33973. 800e320: b580 push {r7, lr}
  33974. 800e322: b084 sub sp, #16
  33975. 800e324: af00 add r7, sp, #0
  33976. 800e326: 6078 str r0, [r7, #4]
  33977. 800e328: 6039 str r1, [r7, #0]
  33978. TickType_t xTimeNow;
  33979. BaseType_t xTimerListsWereSwitched;
  33980. vTaskSuspendAll();
  33981. 800e32a: f7fe feb5 bl 800d098 <vTaskSuspendAll>
  33982. /* Obtain the time now to make an assessment as to whether the timer
  33983. has expired or not. If obtaining the time causes the lists to switch
  33984. then don't process this timer as any timers that remained in the list
  33985. when the lists were switched will have been processed within the
  33986. prvSampleTimeNow() function. */
  33987. xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );
  33988. 800e32e: f107 0308 add.w r3, r7, #8
  33989. 800e332: 4618 mov r0, r3
  33990. 800e334: f000 f866 bl 800e404 <prvSampleTimeNow>
  33991. 800e338: 60f8 str r0, [r7, #12]
  33992. if( xTimerListsWereSwitched == pdFALSE )
  33993. 800e33a: 68bb ldr r3, [r7, #8]
  33994. 800e33c: 2b00 cmp r3, #0
  33995. 800e33e: d130 bne.n 800e3a2 <prvProcessTimerOrBlockTask+0x82>
  33996. {
  33997. /* The tick count has not overflowed, has the timer expired? */
  33998. if( ( xListWasEmpty == pdFALSE ) && ( xNextExpireTime <= xTimeNow ) )
  33999. 800e340: 683b ldr r3, [r7, #0]
  34000. 800e342: 2b00 cmp r3, #0
  34001. 800e344: d10a bne.n 800e35c <prvProcessTimerOrBlockTask+0x3c>
  34002. 800e346: 687a ldr r2, [r7, #4]
  34003. 800e348: 68fb ldr r3, [r7, #12]
  34004. 800e34a: 429a cmp r2, r3
  34005. 800e34c: d806 bhi.n 800e35c <prvProcessTimerOrBlockTask+0x3c>
  34006. {
  34007. ( void ) xTaskResumeAll();
  34008. 800e34e: f7fe feb1 bl 800d0b4 <xTaskResumeAll>
  34009. prvProcessExpiredTimer( xNextExpireTime, xTimeNow );
  34010. 800e352: 68f9 ldr r1, [r7, #12]
  34011. 800e354: 6878 ldr r0, [r7, #4]
  34012. 800e356: f7ff ff81 bl 800e25c <prvProcessExpiredTimer>
  34013. else
  34014. {
  34015. ( void ) xTaskResumeAll();
  34016. }
  34017. }
  34018. }
  34019. 800e35a: e024 b.n 800e3a6 <prvProcessTimerOrBlockTask+0x86>
  34020. if( xListWasEmpty != pdFALSE )
  34021. 800e35c: 683b ldr r3, [r7, #0]
  34022. 800e35e: 2b00 cmp r3, #0
  34023. 800e360: d008 beq.n 800e374 <prvProcessTimerOrBlockTask+0x54>
  34024. xListWasEmpty = listLIST_IS_EMPTY( pxOverflowTimerList );
  34025. 800e362: 4b13 ldr r3, [pc, #76] @ (800e3b0 <prvProcessTimerOrBlockTask+0x90>)
  34026. 800e364: 681b ldr r3, [r3, #0]
  34027. 800e366: 681b ldr r3, [r3, #0]
  34028. 800e368: 2b00 cmp r3, #0
  34029. 800e36a: d101 bne.n 800e370 <prvProcessTimerOrBlockTask+0x50>
  34030. 800e36c: 2301 movs r3, #1
  34031. 800e36e: e000 b.n 800e372 <prvProcessTimerOrBlockTask+0x52>
  34032. 800e370: 2300 movs r3, #0
  34033. 800e372: 603b str r3, [r7, #0]
  34034. vQueueWaitForMessageRestricted( xTimerQueue, ( xNextExpireTime - xTimeNow ), xListWasEmpty );
  34035. 800e374: 4b0f ldr r3, [pc, #60] @ (800e3b4 <prvProcessTimerOrBlockTask+0x94>)
  34036. 800e376: 6818 ldr r0, [r3, #0]
  34037. 800e378: 687a ldr r2, [r7, #4]
  34038. 800e37a: 68fb ldr r3, [r7, #12]
  34039. 800e37c: 1ad3 subs r3, r2, r3
  34040. 800e37e: 683a ldr r2, [r7, #0]
  34041. 800e380: 4619 mov r1, r3
  34042. 800e382: f7fe fa33 bl 800c7ec <vQueueWaitForMessageRestricted>
  34043. if( xTaskResumeAll() == pdFALSE )
  34044. 800e386: f7fe fe95 bl 800d0b4 <xTaskResumeAll>
  34045. 800e38a: 4603 mov r3, r0
  34046. 800e38c: 2b00 cmp r3, #0
  34047. 800e38e: d10a bne.n 800e3a6 <prvProcessTimerOrBlockTask+0x86>
  34048. portYIELD_WITHIN_API();
  34049. 800e390: 4b09 ldr r3, [pc, #36] @ (800e3b8 <prvProcessTimerOrBlockTask+0x98>)
  34050. 800e392: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  34051. 800e396: 601a str r2, [r3, #0]
  34052. 800e398: f3bf 8f4f dsb sy
  34053. 800e39c: f3bf 8f6f isb sy
  34054. }
  34055. 800e3a0: e001 b.n 800e3a6 <prvProcessTimerOrBlockTask+0x86>
  34056. ( void ) xTaskResumeAll();
  34057. 800e3a2: f7fe fe87 bl 800d0b4 <xTaskResumeAll>
  34058. }
  34059. 800e3a6: bf00 nop
  34060. 800e3a8: 3710 adds r7, #16
  34061. 800e3aa: 46bd mov sp, r7
  34062. 800e3ac: bd80 pop {r7, pc}
  34063. 800e3ae: bf00 nop
  34064. 800e3b0: 24002654 .word 0x24002654
  34065. 800e3b4: 24002658 .word 0x24002658
  34066. 800e3b8: e000ed04 .word 0xe000ed04
  34067. 0800e3bc <prvGetNextExpireTime>:
  34068. /*-----------------------------------------------------------*/
  34069. static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty )
  34070. {
  34071. 800e3bc: b480 push {r7}
  34072. 800e3be: b085 sub sp, #20
  34073. 800e3c0: af00 add r7, sp, #0
  34074. 800e3c2: 6078 str r0, [r7, #4]
  34075. the timer with the nearest expiry time will expire. If there are no
  34076. active timers then just set the next expire time to 0. That will cause
  34077. this task to unblock when the tick count overflows, at which point the
  34078. timer lists will be switched and the next expiry time can be
  34079. re-assessed. */
  34080. *pxListWasEmpty = listLIST_IS_EMPTY( pxCurrentTimerList );
  34081. 800e3c4: 4b0e ldr r3, [pc, #56] @ (800e400 <prvGetNextExpireTime+0x44>)
  34082. 800e3c6: 681b ldr r3, [r3, #0]
  34083. 800e3c8: 681b ldr r3, [r3, #0]
  34084. 800e3ca: 2b00 cmp r3, #0
  34085. 800e3cc: d101 bne.n 800e3d2 <prvGetNextExpireTime+0x16>
  34086. 800e3ce: 2201 movs r2, #1
  34087. 800e3d0: e000 b.n 800e3d4 <prvGetNextExpireTime+0x18>
  34088. 800e3d2: 2200 movs r2, #0
  34089. 800e3d4: 687b ldr r3, [r7, #4]
  34090. 800e3d6: 601a str r2, [r3, #0]
  34091. if( *pxListWasEmpty == pdFALSE )
  34092. 800e3d8: 687b ldr r3, [r7, #4]
  34093. 800e3da: 681b ldr r3, [r3, #0]
  34094. 800e3dc: 2b00 cmp r3, #0
  34095. 800e3de: d105 bne.n 800e3ec <prvGetNextExpireTime+0x30>
  34096. {
  34097. xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );
  34098. 800e3e0: 4b07 ldr r3, [pc, #28] @ (800e400 <prvGetNextExpireTime+0x44>)
  34099. 800e3e2: 681b ldr r3, [r3, #0]
  34100. 800e3e4: 68db ldr r3, [r3, #12]
  34101. 800e3e6: 681b ldr r3, [r3, #0]
  34102. 800e3e8: 60fb str r3, [r7, #12]
  34103. 800e3ea: e001 b.n 800e3f0 <prvGetNextExpireTime+0x34>
  34104. }
  34105. else
  34106. {
  34107. /* Ensure the task unblocks when the tick count rolls over. */
  34108. xNextExpireTime = ( TickType_t ) 0U;
  34109. 800e3ec: 2300 movs r3, #0
  34110. 800e3ee: 60fb str r3, [r7, #12]
  34111. }
  34112. return xNextExpireTime;
  34113. 800e3f0: 68fb ldr r3, [r7, #12]
  34114. }
  34115. 800e3f2: 4618 mov r0, r3
  34116. 800e3f4: 3714 adds r7, #20
  34117. 800e3f6: 46bd mov sp, r7
  34118. 800e3f8: f85d 7b04 ldr.w r7, [sp], #4
  34119. 800e3fc: 4770 bx lr
  34120. 800e3fe: bf00 nop
  34121. 800e400: 24002650 .word 0x24002650
  34122. 0800e404 <prvSampleTimeNow>:
  34123. /*-----------------------------------------------------------*/
  34124. static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched )
  34125. {
  34126. 800e404: b580 push {r7, lr}
  34127. 800e406: b084 sub sp, #16
  34128. 800e408: af00 add r7, sp, #0
  34129. 800e40a: 6078 str r0, [r7, #4]
  34130. TickType_t xTimeNow;
  34131. PRIVILEGED_DATA static TickType_t xLastTime = ( TickType_t ) 0U; /*lint !e956 Variable is only accessible to one task. */
  34132. xTimeNow = xTaskGetTickCount();
  34133. 800e40c: f7fe fef0 bl 800d1f0 <xTaskGetTickCount>
  34134. 800e410: 60f8 str r0, [r7, #12]
  34135. if( xTimeNow < xLastTime )
  34136. 800e412: 4b0b ldr r3, [pc, #44] @ (800e440 <prvSampleTimeNow+0x3c>)
  34137. 800e414: 681b ldr r3, [r3, #0]
  34138. 800e416: 68fa ldr r2, [r7, #12]
  34139. 800e418: 429a cmp r2, r3
  34140. 800e41a: d205 bcs.n 800e428 <prvSampleTimeNow+0x24>
  34141. {
  34142. prvSwitchTimerLists();
  34143. 800e41c: f000 f93a bl 800e694 <prvSwitchTimerLists>
  34144. *pxTimerListsWereSwitched = pdTRUE;
  34145. 800e420: 687b ldr r3, [r7, #4]
  34146. 800e422: 2201 movs r2, #1
  34147. 800e424: 601a str r2, [r3, #0]
  34148. 800e426: e002 b.n 800e42e <prvSampleTimeNow+0x2a>
  34149. }
  34150. else
  34151. {
  34152. *pxTimerListsWereSwitched = pdFALSE;
  34153. 800e428: 687b ldr r3, [r7, #4]
  34154. 800e42a: 2200 movs r2, #0
  34155. 800e42c: 601a str r2, [r3, #0]
  34156. }
  34157. xLastTime = xTimeNow;
  34158. 800e42e: 4a04 ldr r2, [pc, #16] @ (800e440 <prvSampleTimeNow+0x3c>)
  34159. 800e430: 68fb ldr r3, [r7, #12]
  34160. 800e432: 6013 str r3, [r2, #0]
  34161. return xTimeNow;
  34162. 800e434: 68fb ldr r3, [r7, #12]
  34163. }
  34164. 800e436: 4618 mov r0, r3
  34165. 800e438: 3710 adds r7, #16
  34166. 800e43a: 46bd mov sp, r7
  34167. 800e43c: bd80 pop {r7, pc}
  34168. 800e43e: bf00 nop
  34169. 800e440: 24002660 .word 0x24002660
  34170. 0800e444 <prvInsertTimerInActiveList>:
  34171. /*-----------------------------------------------------------*/
  34172. static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer, const TickType_t xNextExpiryTime, const TickType_t xTimeNow, const TickType_t xCommandTime )
  34173. {
  34174. 800e444: b580 push {r7, lr}
  34175. 800e446: b086 sub sp, #24
  34176. 800e448: af00 add r7, sp, #0
  34177. 800e44a: 60f8 str r0, [r7, #12]
  34178. 800e44c: 60b9 str r1, [r7, #8]
  34179. 800e44e: 607a str r2, [r7, #4]
  34180. 800e450: 603b str r3, [r7, #0]
  34181. BaseType_t xProcessTimerNow = pdFALSE;
  34182. 800e452: 2300 movs r3, #0
  34183. 800e454: 617b str r3, [r7, #20]
  34184. listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xNextExpiryTime );
  34185. 800e456: 68fb ldr r3, [r7, #12]
  34186. 800e458: 68ba ldr r2, [r7, #8]
  34187. 800e45a: 605a str r2, [r3, #4]
  34188. listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );
  34189. 800e45c: 68fb ldr r3, [r7, #12]
  34190. 800e45e: 68fa ldr r2, [r7, #12]
  34191. 800e460: 611a str r2, [r3, #16]
  34192. if( xNextExpiryTime <= xTimeNow )
  34193. 800e462: 68ba ldr r2, [r7, #8]
  34194. 800e464: 687b ldr r3, [r7, #4]
  34195. 800e466: 429a cmp r2, r3
  34196. 800e468: d812 bhi.n 800e490 <prvInsertTimerInActiveList+0x4c>
  34197. {
  34198. /* Has the expiry time elapsed between the command to start/reset a
  34199. timer was issued, and the time the command was processed? */
  34200. if( ( ( TickType_t ) ( xTimeNow - xCommandTime ) ) >= pxTimer->xTimerPeriodInTicks ) /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  34201. 800e46a: 687a ldr r2, [r7, #4]
  34202. 800e46c: 683b ldr r3, [r7, #0]
  34203. 800e46e: 1ad2 subs r2, r2, r3
  34204. 800e470: 68fb ldr r3, [r7, #12]
  34205. 800e472: 699b ldr r3, [r3, #24]
  34206. 800e474: 429a cmp r2, r3
  34207. 800e476: d302 bcc.n 800e47e <prvInsertTimerInActiveList+0x3a>
  34208. {
  34209. /* The time between a command being issued and the command being
  34210. processed actually exceeds the timers period. */
  34211. xProcessTimerNow = pdTRUE;
  34212. 800e478: 2301 movs r3, #1
  34213. 800e47a: 617b str r3, [r7, #20]
  34214. 800e47c: e01b b.n 800e4b6 <prvInsertTimerInActiveList+0x72>
  34215. }
  34216. else
  34217. {
  34218. vListInsert( pxOverflowTimerList, &( pxTimer->xTimerListItem ) );
  34219. 800e47e: 4b10 ldr r3, [pc, #64] @ (800e4c0 <prvInsertTimerInActiveList+0x7c>)
  34220. 800e480: 681a ldr r2, [r3, #0]
  34221. 800e482: 68fb ldr r3, [r7, #12]
  34222. 800e484: 3304 adds r3, #4
  34223. 800e486: 4619 mov r1, r3
  34224. 800e488: 4610 mov r0, r2
  34225. 800e48a: f7fd fa6a bl 800b962 <vListInsert>
  34226. 800e48e: e012 b.n 800e4b6 <prvInsertTimerInActiveList+0x72>
  34227. }
  34228. }
  34229. else
  34230. {
  34231. if( ( xTimeNow < xCommandTime ) && ( xNextExpiryTime >= xCommandTime ) )
  34232. 800e490: 687a ldr r2, [r7, #4]
  34233. 800e492: 683b ldr r3, [r7, #0]
  34234. 800e494: 429a cmp r2, r3
  34235. 800e496: d206 bcs.n 800e4a6 <prvInsertTimerInActiveList+0x62>
  34236. 800e498: 68ba ldr r2, [r7, #8]
  34237. 800e49a: 683b ldr r3, [r7, #0]
  34238. 800e49c: 429a cmp r2, r3
  34239. 800e49e: d302 bcc.n 800e4a6 <prvInsertTimerInActiveList+0x62>
  34240. {
  34241. /* If, since the command was issued, the tick count has overflowed
  34242. but the expiry time has not, then the timer must have already passed
  34243. its expiry time and should be processed immediately. */
  34244. xProcessTimerNow = pdTRUE;
  34245. 800e4a0: 2301 movs r3, #1
  34246. 800e4a2: 617b str r3, [r7, #20]
  34247. 800e4a4: e007 b.n 800e4b6 <prvInsertTimerInActiveList+0x72>
  34248. }
  34249. else
  34250. {
  34251. vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );
  34252. 800e4a6: 4b07 ldr r3, [pc, #28] @ (800e4c4 <prvInsertTimerInActiveList+0x80>)
  34253. 800e4a8: 681a ldr r2, [r3, #0]
  34254. 800e4aa: 68fb ldr r3, [r7, #12]
  34255. 800e4ac: 3304 adds r3, #4
  34256. 800e4ae: 4619 mov r1, r3
  34257. 800e4b0: 4610 mov r0, r2
  34258. 800e4b2: f7fd fa56 bl 800b962 <vListInsert>
  34259. }
  34260. }
  34261. return xProcessTimerNow;
  34262. 800e4b6: 697b ldr r3, [r7, #20]
  34263. }
  34264. 800e4b8: 4618 mov r0, r3
  34265. 800e4ba: 3718 adds r7, #24
  34266. 800e4bc: 46bd mov sp, r7
  34267. 800e4be: bd80 pop {r7, pc}
  34268. 800e4c0: 24002654 .word 0x24002654
  34269. 800e4c4: 24002650 .word 0x24002650
  34270. 0800e4c8 <prvProcessReceivedCommands>:
  34271. /*-----------------------------------------------------------*/
  34272. static void prvProcessReceivedCommands( void )
  34273. {
  34274. 800e4c8: b580 push {r7, lr}
  34275. 800e4ca: b08e sub sp, #56 @ 0x38
  34276. 800e4cc: af02 add r7, sp, #8
  34277. DaemonTaskMessage_t xMessage;
  34278. Timer_t *pxTimer;
  34279. BaseType_t xTimerListsWereSwitched, xResult;
  34280. TickType_t xTimeNow;
  34281. 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. */
  34282. 800e4ce: e0ce b.n 800e66e <prvProcessReceivedCommands+0x1a6>
  34283. {
  34284. #if ( INCLUDE_xTimerPendFunctionCall == 1 )
  34285. {
  34286. /* Negative commands are pended function calls rather than timer
  34287. commands. */
  34288. if( xMessage.xMessageID < ( BaseType_t ) 0 )
  34289. 800e4d0: 687b ldr r3, [r7, #4]
  34290. 800e4d2: 2b00 cmp r3, #0
  34291. 800e4d4: da19 bge.n 800e50a <prvProcessReceivedCommands+0x42>
  34292. {
  34293. const CallbackParameters_t * const pxCallback = &( xMessage.u.xCallbackParameters );
  34294. 800e4d6: 1d3b adds r3, r7, #4
  34295. 800e4d8: 3304 adds r3, #4
  34296. 800e4da: 62fb str r3, [r7, #44] @ 0x2c
  34297. /* The timer uses the xCallbackParameters member to request a
  34298. callback be executed. Check the callback is not NULL. */
  34299. configASSERT( pxCallback );
  34300. 800e4dc: 6afb ldr r3, [r7, #44] @ 0x2c
  34301. 800e4de: 2b00 cmp r3, #0
  34302. 800e4e0: d10b bne.n 800e4fa <prvProcessReceivedCommands+0x32>
  34303. __asm volatile
  34304. 800e4e2: f04f 0350 mov.w r3, #80 @ 0x50
  34305. 800e4e6: f383 8811 msr BASEPRI, r3
  34306. 800e4ea: f3bf 8f6f isb sy
  34307. 800e4ee: f3bf 8f4f dsb sy
  34308. 800e4f2: 61fb str r3, [r7, #28]
  34309. }
  34310. 800e4f4: bf00 nop
  34311. 800e4f6: bf00 nop
  34312. 800e4f8: e7fd b.n 800e4f6 <prvProcessReceivedCommands+0x2e>
  34313. /* Call the function. */
  34314. pxCallback->pxCallbackFunction( pxCallback->pvParameter1, pxCallback->ulParameter2 );
  34315. 800e4fa: 6afb ldr r3, [r7, #44] @ 0x2c
  34316. 800e4fc: 681b ldr r3, [r3, #0]
  34317. 800e4fe: 6afa ldr r2, [r7, #44] @ 0x2c
  34318. 800e500: 6850 ldr r0, [r2, #4]
  34319. 800e502: 6afa ldr r2, [r7, #44] @ 0x2c
  34320. 800e504: 6892 ldr r2, [r2, #8]
  34321. 800e506: 4611 mov r1, r2
  34322. 800e508: 4798 blx r3
  34323. }
  34324. #endif /* INCLUDE_xTimerPendFunctionCall */
  34325. /* Commands that are positive are timer commands rather than pended
  34326. function calls. */
  34327. if( xMessage.xMessageID >= ( BaseType_t ) 0 )
  34328. 800e50a: 687b ldr r3, [r7, #4]
  34329. 800e50c: 2b00 cmp r3, #0
  34330. 800e50e: f2c0 80ae blt.w 800e66e <prvProcessReceivedCommands+0x1a6>
  34331. {
  34332. /* The messages uses the xTimerParameters member to work on a
  34333. software timer. */
  34334. pxTimer = xMessage.u.xTimerParameters.pxTimer;
  34335. 800e512: 68fb ldr r3, [r7, #12]
  34336. 800e514: 62bb str r3, [r7, #40] @ 0x28
  34337. if( listIS_CONTAINED_WITHIN( NULL, &( pxTimer->xTimerListItem ) ) == pdFALSE ) /*lint !e961. The cast is only redundant when NULL is passed into the macro. */
  34338. 800e516: 6abb ldr r3, [r7, #40] @ 0x28
  34339. 800e518: 695b ldr r3, [r3, #20]
  34340. 800e51a: 2b00 cmp r3, #0
  34341. 800e51c: d004 beq.n 800e528 <prvProcessReceivedCommands+0x60>
  34342. {
  34343. /* The timer is in a list, remove it. */
  34344. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  34345. 800e51e: 6abb ldr r3, [r7, #40] @ 0x28
  34346. 800e520: 3304 adds r3, #4
  34347. 800e522: 4618 mov r0, r3
  34348. 800e524: f7fd fa56 bl 800b9d4 <uxListRemove>
  34349. it must be present in the function call. prvSampleTimeNow() must be
  34350. called after the message is received from xTimerQueue so there is no
  34351. possibility of a higher priority task adding a message to the message
  34352. queue with a time that is ahead of the timer daemon task (because it
  34353. pre-empted the timer daemon task after the xTimeNow value was set). */
  34354. xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );
  34355. 800e528: 463b mov r3, r7
  34356. 800e52a: 4618 mov r0, r3
  34357. 800e52c: f7ff ff6a bl 800e404 <prvSampleTimeNow>
  34358. 800e530: 6278 str r0, [r7, #36] @ 0x24
  34359. switch( xMessage.xMessageID )
  34360. 800e532: 687b ldr r3, [r7, #4]
  34361. 800e534: 2b09 cmp r3, #9
  34362. 800e536: f200 8097 bhi.w 800e668 <prvProcessReceivedCommands+0x1a0>
  34363. 800e53a: a201 add r2, pc, #4 @ (adr r2, 800e540 <prvProcessReceivedCommands+0x78>)
  34364. 800e53c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  34365. 800e540: 0800e569 .word 0x0800e569
  34366. 800e544: 0800e569 .word 0x0800e569
  34367. 800e548: 0800e569 .word 0x0800e569
  34368. 800e54c: 0800e5df .word 0x0800e5df
  34369. 800e550: 0800e5f3 .word 0x0800e5f3
  34370. 800e554: 0800e63f .word 0x0800e63f
  34371. 800e558: 0800e569 .word 0x0800e569
  34372. 800e55c: 0800e569 .word 0x0800e569
  34373. 800e560: 0800e5df .word 0x0800e5df
  34374. 800e564: 0800e5f3 .word 0x0800e5f3
  34375. case tmrCOMMAND_START_FROM_ISR :
  34376. case tmrCOMMAND_RESET :
  34377. case tmrCOMMAND_RESET_FROM_ISR :
  34378. case tmrCOMMAND_START_DONT_TRACE :
  34379. /* Start or restart a timer. */
  34380. pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE;
  34381. 800e568: 6abb ldr r3, [r7, #40] @ 0x28
  34382. 800e56a: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  34383. 800e56e: f043 0301 orr.w r3, r3, #1
  34384. 800e572: b2da uxtb r2, r3
  34385. 800e574: 6abb ldr r3, [r7, #40] @ 0x28
  34386. 800e576: f883 2028 strb.w r2, [r3, #40] @ 0x28
  34387. if( prvInsertTimerInActiveList( pxTimer, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, xTimeNow, xMessage.u.xTimerParameters.xMessageValue ) != pdFALSE )
  34388. 800e57a: 68ba ldr r2, [r7, #8]
  34389. 800e57c: 6abb ldr r3, [r7, #40] @ 0x28
  34390. 800e57e: 699b ldr r3, [r3, #24]
  34391. 800e580: 18d1 adds r1, r2, r3
  34392. 800e582: 68bb ldr r3, [r7, #8]
  34393. 800e584: 6a7a ldr r2, [r7, #36] @ 0x24
  34394. 800e586: 6ab8 ldr r0, [r7, #40] @ 0x28
  34395. 800e588: f7ff ff5c bl 800e444 <prvInsertTimerInActiveList>
  34396. 800e58c: 4603 mov r3, r0
  34397. 800e58e: 2b00 cmp r3, #0
  34398. 800e590: d06c beq.n 800e66c <prvProcessReceivedCommands+0x1a4>
  34399. {
  34400. /* The timer expired before it was added to the active
  34401. timer list. Process it now. */
  34402. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  34403. 800e592: 6abb ldr r3, [r7, #40] @ 0x28
  34404. 800e594: 6a1b ldr r3, [r3, #32]
  34405. 800e596: 6ab8 ldr r0, [r7, #40] @ 0x28
  34406. 800e598: 4798 blx r3
  34407. traceTIMER_EXPIRED( pxTimer );
  34408. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  34409. 800e59a: 6abb ldr r3, [r7, #40] @ 0x28
  34410. 800e59c: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  34411. 800e5a0: f003 0304 and.w r3, r3, #4
  34412. 800e5a4: 2b00 cmp r3, #0
  34413. 800e5a6: d061 beq.n 800e66c <prvProcessReceivedCommands+0x1a4>
  34414. {
  34415. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, NULL, tmrNO_DELAY );
  34416. 800e5a8: 68ba ldr r2, [r7, #8]
  34417. 800e5aa: 6abb ldr r3, [r7, #40] @ 0x28
  34418. 800e5ac: 699b ldr r3, [r3, #24]
  34419. 800e5ae: 441a add r2, r3
  34420. 800e5b0: 2300 movs r3, #0
  34421. 800e5b2: 9300 str r3, [sp, #0]
  34422. 800e5b4: 2300 movs r3, #0
  34423. 800e5b6: 2100 movs r1, #0
  34424. 800e5b8: 6ab8 ldr r0, [r7, #40] @ 0x28
  34425. 800e5ba: f7ff fe01 bl 800e1c0 <xTimerGenericCommand>
  34426. 800e5be: 6238 str r0, [r7, #32]
  34427. configASSERT( xResult );
  34428. 800e5c0: 6a3b ldr r3, [r7, #32]
  34429. 800e5c2: 2b00 cmp r3, #0
  34430. 800e5c4: d152 bne.n 800e66c <prvProcessReceivedCommands+0x1a4>
  34431. __asm volatile
  34432. 800e5c6: f04f 0350 mov.w r3, #80 @ 0x50
  34433. 800e5ca: f383 8811 msr BASEPRI, r3
  34434. 800e5ce: f3bf 8f6f isb sy
  34435. 800e5d2: f3bf 8f4f dsb sy
  34436. 800e5d6: 61bb str r3, [r7, #24]
  34437. }
  34438. 800e5d8: bf00 nop
  34439. 800e5da: bf00 nop
  34440. 800e5dc: e7fd b.n 800e5da <prvProcessReceivedCommands+0x112>
  34441. break;
  34442. case tmrCOMMAND_STOP :
  34443. case tmrCOMMAND_STOP_FROM_ISR :
  34444. /* The timer has already been removed from the active list. */
  34445. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  34446. 800e5de: 6abb ldr r3, [r7, #40] @ 0x28
  34447. 800e5e0: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  34448. 800e5e4: f023 0301 bic.w r3, r3, #1
  34449. 800e5e8: b2da uxtb r2, r3
  34450. 800e5ea: 6abb ldr r3, [r7, #40] @ 0x28
  34451. 800e5ec: f883 2028 strb.w r2, [r3, #40] @ 0x28
  34452. break;
  34453. 800e5f0: e03d b.n 800e66e <prvProcessReceivedCommands+0x1a6>
  34454. case tmrCOMMAND_CHANGE_PERIOD :
  34455. case tmrCOMMAND_CHANGE_PERIOD_FROM_ISR :
  34456. pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE;
  34457. 800e5f2: 6abb ldr r3, [r7, #40] @ 0x28
  34458. 800e5f4: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  34459. 800e5f8: f043 0301 orr.w r3, r3, #1
  34460. 800e5fc: b2da uxtb r2, r3
  34461. 800e5fe: 6abb ldr r3, [r7, #40] @ 0x28
  34462. 800e600: f883 2028 strb.w r2, [r3, #40] @ 0x28
  34463. pxTimer->xTimerPeriodInTicks = xMessage.u.xTimerParameters.xMessageValue;
  34464. 800e604: 68ba ldr r2, [r7, #8]
  34465. 800e606: 6abb ldr r3, [r7, #40] @ 0x28
  34466. 800e608: 619a str r2, [r3, #24]
  34467. configASSERT( ( pxTimer->xTimerPeriodInTicks > 0 ) );
  34468. 800e60a: 6abb ldr r3, [r7, #40] @ 0x28
  34469. 800e60c: 699b ldr r3, [r3, #24]
  34470. 800e60e: 2b00 cmp r3, #0
  34471. 800e610: d10b bne.n 800e62a <prvProcessReceivedCommands+0x162>
  34472. __asm volatile
  34473. 800e612: f04f 0350 mov.w r3, #80 @ 0x50
  34474. 800e616: f383 8811 msr BASEPRI, r3
  34475. 800e61a: f3bf 8f6f isb sy
  34476. 800e61e: f3bf 8f4f dsb sy
  34477. 800e622: 617b str r3, [r7, #20]
  34478. }
  34479. 800e624: bf00 nop
  34480. 800e626: bf00 nop
  34481. 800e628: e7fd b.n 800e626 <prvProcessReceivedCommands+0x15e>
  34482. be longer or shorter than the old one. The command time is
  34483. therefore set to the current time, and as the period cannot
  34484. be zero the next expiry time can only be in the future,
  34485. meaning (unlike for the xTimerStart() case above) there is
  34486. no fail case that needs to be handled here. */
  34487. ( void ) prvInsertTimerInActiveList( pxTimer, ( xTimeNow + pxTimer->xTimerPeriodInTicks ), xTimeNow, xTimeNow );
  34488. 800e62a: 6abb ldr r3, [r7, #40] @ 0x28
  34489. 800e62c: 699a ldr r2, [r3, #24]
  34490. 800e62e: 6a7b ldr r3, [r7, #36] @ 0x24
  34491. 800e630: 18d1 adds r1, r2, r3
  34492. 800e632: 6a7b ldr r3, [r7, #36] @ 0x24
  34493. 800e634: 6a7a ldr r2, [r7, #36] @ 0x24
  34494. 800e636: 6ab8 ldr r0, [r7, #40] @ 0x28
  34495. 800e638: f7ff ff04 bl 800e444 <prvInsertTimerInActiveList>
  34496. break;
  34497. 800e63c: e017 b.n 800e66e <prvProcessReceivedCommands+0x1a6>
  34498. #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  34499. {
  34500. /* The timer has already been removed from the active list,
  34501. just free up the memory if the memory was dynamically
  34502. allocated. */
  34503. if( ( pxTimer->ucStatus & tmrSTATUS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) 0 )
  34504. 800e63e: 6abb ldr r3, [r7, #40] @ 0x28
  34505. 800e640: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  34506. 800e644: f003 0302 and.w r3, r3, #2
  34507. 800e648: 2b00 cmp r3, #0
  34508. 800e64a: d103 bne.n 800e654 <prvProcessReceivedCommands+0x18c>
  34509. {
  34510. vPortFree( pxTimer );
  34511. 800e64c: 6ab8 ldr r0, [r7, #40] @ 0x28
  34512. 800e64e: f000 fbeb bl 800ee28 <vPortFree>
  34513. no need to free the memory - just mark the timer as
  34514. "not active". */
  34515. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  34516. }
  34517. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  34518. break;
  34519. 800e652: e00c b.n 800e66e <prvProcessReceivedCommands+0x1a6>
  34520. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  34521. 800e654: 6abb ldr r3, [r7, #40] @ 0x28
  34522. 800e656: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  34523. 800e65a: f023 0301 bic.w r3, r3, #1
  34524. 800e65e: b2da uxtb r2, r3
  34525. 800e660: 6abb ldr r3, [r7, #40] @ 0x28
  34526. 800e662: f883 2028 strb.w r2, [r3, #40] @ 0x28
  34527. break;
  34528. 800e666: e002 b.n 800e66e <prvProcessReceivedCommands+0x1a6>
  34529. default :
  34530. /* Don't expect to get here. */
  34531. break;
  34532. 800e668: bf00 nop
  34533. 800e66a: e000 b.n 800e66e <prvProcessReceivedCommands+0x1a6>
  34534. break;
  34535. 800e66c: bf00 nop
  34536. 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. */
  34537. 800e66e: 4b08 ldr r3, [pc, #32] @ (800e690 <prvProcessReceivedCommands+0x1c8>)
  34538. 800e670: 681b ldr r3, [r3, #0]
  34539. 800e672: 1d39 adds r1, r7, #4
  34540. 800e674: 2200 movs r2, #0
  34541. 800e676: 4618 mov r0, r3
  34542. 800e678: f7fd fd74 bl 800c164 <xQueueReceive>
  34543. 800e67c: 4603 mov r3, r0
  34544. 800e67e: 2b00 cmp r3, #0
  34545. 800e680: f47f af26 bne.w 800e4d0 <prvProcessReceivedCommands+0x8>
  34546. }
  34547. }
  34548. }
  34549. }
  34550. 800e684: bf00 nop
  34551. 800e686: bf00 nop
  34552. 800e688: 3730 adds r7, #48 @ 0x30
  34553. 800e68a: 46bd mov sp, r7
  34554. 800e68c: bd80 pop {r7, pc}
  34555. 800e68e: bf00 nop
  34556. 800e690: 24002658 .word 0x24002658
  34557. 0800e694 <prvSwitchTimerLists>:
  34558. /*-----------------------------------------------------------*/
  34559. static void prvSwitchTimerLists( void )
  34560. {
  34561. 800e694: b580 push {r7, lr}
  34562. 800e696: b088 sub sp, #32
  34563. 800e698: af02 add r7, sp, #8
  34564. /* The tick count has overflowed. The timer lists must be switched.
  34565. If there are any timers still referenced from the current timer list
  34566. then they must have expired and should be processed before the lists
  34567. are switched. */
  34568. while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )
  34569. 800e69a: e049 b.n 800e730 <prvSwitchTimerLists+0x9c>
  34570. {
  34571. xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );
  34572. 800e69c: 4b2e ldr r3, [pc, #184] @ (800e758 <prvSwitchTimerLists+0xc4>)
  34573. 800e69e: 681b ldr r3, [r3, #0]
  34574. 800e6a0: 68db ldr r3, [r3, #12]
  34575. 800e6a2: 681b ldr r3, [r3, #0]
  34576. 800e6a4: 613b str r3, [r7, #16]
  34577. /* Remove the timer from the list. */
  34578. 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. */
  34579. 800e6a6: 4b2c ldr r3, [pc, #176] @ (800e758 <prvSwitchTimerLists+0xc4>)
  34580. 800e6a8: 681b ldr r3, [r3, #0]
  34581. 800e6aa: 68db ldr r3, [r3, #12]
  34582. 800e6ac: 68db ldr r3, [r3, #12]
  34583. 800e6ae: 60fb str r3, [r7, #12]
  34584. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  34585. 800e6b0: 68fb ldr r3, [r7, #12]
  34586. 800e6b2: 3304 adds r3, #4
  34587. 800e6b4: 4618 mov r0, r3
  34588. 800e6b6: f7fd f98d bl 800b9d4 <uxListRemove>
  34589. traceTIMER_EXPIRED( pxTimer );
  34590. /* Execute its callback, then send a command to restart the timer if
  34591. it is an auto-reload timer. It cannot be restarted here as the lists
  34592. have not yet been switched. */
  34593. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  34594. 800e6ba: 68fb ldr r3, [r7, #12]
  34595. 800e6bc: 6a1b ldr r3, [r3, #32]
  34596. 800e6be: 68f8 ldr r0, [r7, #12]
  34597. 800e6c0: 4798 blx r3
  34598. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  34599. 800e6c2: 68fb ldr r3, [r7, #12]
  34600. 800e6c4: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  34601. 800e6c8: f003 0304 and.w r3, r3, #4
  34602. 800e6cc: 2b00 cmp r3, #0
  34603. 800e6ce: d02f beq.n 800e730 <prvSwitchTimerLists+0x9c>
  34604. the timer going into the same timer list then it has already expired
  34605. and the timer should be re-inserted into the current list so it is
  34606. processed again within this loop. Otherwise a command should be sent
  34607. to restart the timer to ensure it is only inserted into a list after
  34608. the lists have been swapped. */
  34609. xReloadTime = ( xNextExpireTime + pxTimer->xTimerPeriodInTicks );
  34610. 800e6d0: 68fb ldr r3, [r7, #12]
  34611. 800e6d2: 699b ldr r3, [r3, #24]
  34612. 800e6d4: 693a ldr r2, [r7, #16]
  34613. 800e6d6: 4413 add r3, r2
  34614. 800e6d8: 60bb str r3, [r7, #8]
  34615. if( xReloadTime > xNextExpireTime )
  34616. 800e6da: 68ba ldr r2, [r7, #8]
  34617. 800e6dc: 693b ldr r3, [r7, #16]
  34618. 800e6de: 429a cmp r2, r3
  34619. 800e6e0: d90e bls.n 800e700 <prvSwitchTimerLists+0x6c>
  34620. {
  34621. listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xReloadTime );
  34622. 800e6e2: 68fb ldr r3, [r7, #12]
  34623. 800e6e4: 68ba ldr r2, [r7, #8]
  34624. 800e6e6: 605a str r2, [r3, #4]
  34625. listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );
  34626. 800e6e8: 68fb ldr r3, [r7, #12]
  34627. 800e6ea: 68fa ldr r2, [r7, #12]
  34628. 800e6ec: 611a str r2, [r3, #16]
  34629. vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );
  34630. 800e6ee: 4b1a ldr r3, [pc, #104] @ (800e758 <prvSwitchTimerLists+0xc4>)
  34631. 800e6f0: 681a ldr r2, [r3, #0]
  34632. 800e6f2: 68fb ldr r3, [r7, #12]
  34633. 800e6f4: 3304 adds r3, #4
  34634. 800e6f6: 4619 mov r1, r3
  34635. 800e6f8: 4610 mov r0, r2
  34636. 800e6fa: f7fd f932 bl 800b962 <vListInsert>
  34637. 800e6fe: e017 b.n 800e730 <prvSwitchTimerLists+0x9c>
  34638. }
  34639. else
  34640. {
  34641. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY );
  34642. 800e700: 2300 movs r3, #0
  34643. 800e702: 9300 str r3, [sp, #0]
  34644. 800e704: 2300 movs r3, #0
  34645. 800e706: 693a ldr r2, [r7, #16]
  34646. 800e708: 2100 movs r1, #0
  34647. 800e70a: 68f8 ldr r0, [r7, #12]
  34648. 800e70c: f7ff fd58 bl 800e1c0 <xTimerGenericCommand>
  34649. 800e710: 6078 str r0, [r7, #4]
  34650. configASSERT( xResult );
  34651. 800e712: 687b ldr r3, [r7, #4]
  34652. 800e714: 2b00 cmp r3, #0
  34653. 800e716: d10b bne.n 800e730 <prvSwitchTimerLists+0x9c>
  34654. __asm volatile
  34655. 800e718: f04f 0350 mov.w r3, #80 @ 0x50
  34656. 800e71c: f383 8811 msr BASEPRI, r3
  34657. 800e720: f3bf 8f6f isb sy
  34658. 800e724: f3bf 8f4f dsb sy
  34659. 800e728: 603b str r3, [r7, #0]
  34660. }
  34661. 800e72a: bf00 nop
  34662. 800e72c: bf00 nop
  34663. 800e72e: e7fd b.n 800e72c <prvSwitchTimerLists+0x98>
  34664. while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )
  34665. 800e730: 4b09 ldr r3, [pc, #36] @ (800e758 <prvSwitchTimerLists+0xc4>)
  34666. 800e732: 681b ldr r3, [r3, #0]
  34667. 800e734: 681b ldr r3, [r3, #0]
  34668. 800e736: 2b00 cmp r3, #0
  34669. 800e738: d1b0 bne.n 800e69c <prvSwitchTimerLists+0x8>
  34670. {
  34671. mtCOVERAGE_TEST_MARKER();
  34672. }
  34673. }
  34674. pxTemp = pxCurrentTimerList;
  34675. 800e73a: 4b07 ldr r3, [pc, #28] @ (800e758 <prvSwitchTimerLists+0xc4>)
  34676. 800e73c: 681b ldr r3, [r3, #0]
  34677. 800e73e: 617b str r3, [r7, #20]
  34678. pxCurrentTimerList = pxOverflowTimerList;
  34679. 800e740: 4b06 ldr r3, [pc, #24] @ (800e75c <prvSwitchTimerLists+0xc8>)
  34680. 800e742: 681b ldr r3, [r3, #0]
  34681. 800e744: 4a04 ldr r2, [pc, #16] @ (800e758 <prvSwitchTimerLists+0xc4>)
  34682. 800e746: 6013 str r3, [r2, #0]
  34683. pxOverflowTimerList = pxTemp;
  34684. 800e748: 4a04 ldr r2, [pc, #16] @ (800e75c <prvSwitchTimerLists+0xc8>)
  34685. 800e74a: 697b ldr r3, [r7, #20]
  34686. 800e74c: 6013 str r3, [r2, #0]
  34687. }
  34688. 800e74e: bf00 nop
  34689. 800e750: 3718 adds r7, #24
  34690. 800e752: 46bd mov sp, r7
  34691. 800e754: bd80 pop {r7, pc}
  34692. 800e756: bf00 nop
  34693. 800e758: 24002650 .word 0x24002650
  34694. 800e75c: 24002654 .word 0x24002654
  34695. 0800e760 <prvCheckForValidListAndQueue>:
  34696. /*-----------------------------------------------------------*/
  34697. static void prvCheckForValidListAndQueue( void )
  34698. {
  34699. 800e760: b580 push {r7, lr}
  34700. 800e762: b082 sub sp, #8
  34701. 800e764: af02 add r7, sp, #8
  34702. /* Check that the list from which active timers are referenced, and the
  34703. queue used to communicate with the timer service, have been
  34704. initialised. */
  34705. taskENTER_CRITICAL();
  34706. 800e766: f000 f96f bl 800ea48 <vPortEnterCritical>
  34707. {
  34708. if( xTimerQueue == NULL )
  34709. 800e76a: 4b15 ldr r3, [pc, #84] @ (800e7c0 <prvCheckForValidListAndQueue+0x60>)
  34710. 800e76c: 681b ldr r3, [r3, #0]
  34711. 800e76e: 2b00 cmp r3, #0
  34712. 800e770: d120 bne.n 800e7b4 <prvCheckForValidListAndQueue+0x54>
  34713. {
  34714. vListInitialise( &xActiveTimerList1 );
  34715. 800e772: 4814 ldr r0, [pc, #80] @ (800e7c4 <prvCheckForValidListAndQueue+0x64>)
  34716. 800e774: f7fd f8a4 bl 800b8c0 <vListInitialise>
  34717. vListInitialise( &xActiveTimerList2 );
  34718. 800e778: 4813 ldr r0, [pc, #76] @ (800e7c8 <prvCheckForValidListAndQueue+0x68>)
  34719. 800e77a: f7fd f8a1 bl 800b8c0 <vListInitialise>
  34720. pxCurrentTimerList = &xActiveTimerList1;
  34721. 800e77e: 4b13 ldr r3, [pc, #76] @ (800e7cc <prvCheckForValidListAndQueue+0x6c>)
  34722. 800e780: 4a10 ldr r2, [pc, #64] @ (800e7c4 <prvCheckForValidListAndQueue+0x64>)
  34723. 800e782: 601a str r2, [r3, #0]
  34724. pxOverflowTimerList = &xActiveTimerList2;
  34725. 800e784: 4b12 ldr r3, [pc, #72] @ (800e7d0 <prvCheckForValidListAndQueue+0x70>)
  34726. 800e786: 4a10 ldr r2, [pc, #64] @ (800e7c8 <prvCheckForValidListAndQueue+0x68>)
  34727. 800e788: 601a str r2, [r3, #0]
  34728. /* The timer queue is allocated statically in case
  34729. configSUPPORT_DYNAMIC_ALLOCATION is 0. */
  34730. static StaticQueue_t xStaticTimerQueue; /*lint !e956 Ok to declare in this manner to prevent additional conditional compilation guards in other locations. */
  34731. 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. */
  34732. xTimerQueue = xQueueCreateStatic( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, ( UBaseType_t ) sizeof( DaemonTaskMessage_t ), &( ucStaticTimerQueueStorage[ 0 ] ), &xStaticTimerQueue );
  34733. 800e78a: 2300 movs r3, #0
  34734. 800e78c: 9300 str r3, [sp, #0]
  34735. 800e78e: 4b11 ldr r3, [pc, #68] @ (800e7d4 <prvCheckForValidListAndQueue+0x74>)
  34736. 800e790: 4a11 ldr r2, [pc, #68] @ (800e7d8 <prvCheckForValidListAndQueue+0x78>)
  34737. 800e792: 2110 movs r1, #16
  34738. 800e794: 200a movs r0, #10
  34739. 800e796: f7fd f9b1 bl 800bafc <xQueueGenericCreateStatic>
  34740. 800e79a: 4603 mov r3, r0
  34741. 800e79c: 4a08 ldr r2, [pc, #32] @ (800e7c0 <prvCheckForValidListAndQueue+0x60>)
  34742. 800e79e: 6013 str r3, [r2, #0]
  34743. }
  34744. #endif
  34745. #if ( configQUEUE_REGISTRY_SIZE > 0 )
  34746. {
  34747. if( xTimerQueue != NULL )
  34748. 800e7a0: 4b07 ldr r3, [pc, #28] @ (800e7c0 <prvCheckForValidListAndQueue+0x60>)
  34749. 800e7a2: 681b ldr r3, [r3, #0]
  34750. 800e7a4: 2b00 cmp r3, #0
  34751. 800e7a6: d005 beq.n 800e7b4 <prvCheckForValidListAndQueue+0x54>
  34752. {
  34753. vQueueAddToRegistry( xTimerQueue, "TmrQ" );
  34754. 800e7a8: 4b05 ldr r3, [pc, #20] @ (800e7c0 <prvCheckForValidListAndQueue+0x60>)
  34755. 800e7aa: 681b ldr r3, [r3, #0]
  34756. 800e7ac: 490b ldr r1, [pc, #44] @ (800e7dc <prvCheckForValidListAndQueue+0x7c>)
  34757. 800e7ae: 4618 mov r0, r3
  34758. 800e7b0: f7fd fff2 bl 800c798 <vQueueAddToRegistry>
  34759. else
  34760. {
  34761. mtCOVERAGE_TEST_MARKER();
  34762. }
  34763. }
  34764. taskEXIT_CRITICAL();
  34765. 800e7b4: f000 f97a bl 800eaac <vPortExitCritical>
  34766. }
  34767. 800e7b8: bf00 nop
  34768. 800e7ba: 46bd mov sp, r7
  34769. 800e7bc: bd80 pop {r7, pc}
  34770. 800e7be: bf00 nop
  34771. 800e7c0: 24002658 .word 0x24002658
  34772. 800e7c4: 24002628 .word 0x24002628
  34773. 800e7c8: 2400263c .word 0x2400263c
  34774. 800e7cc: 24002650 .word 0x24002650
  34775. 800e7d0: 24002654 .word 0x24002654
  34776. 800e7d4: 24002704 .word 0x24002704
  34777. 800e7d8: 24002664 .word 0x24002664
  34778. 800e7dc: 08010084 .word 0x08010084
  34779. 0800e7e0 <pxPortInitialiseStack>:
  34780. /*
  34781. * See header file for description.
  34782. */
  34783. StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
  34784. {
  34785. 800e7e0: b480 push {r7}
  34786. 800e7e2: b085 sub sp, #20
  34787. 800e7e4: af00 add r7, sp, #0
  34788. 800e7e6: 60f8 str r0, [r7, #12]
  34789. 800e7e8: 60b9 str r1, [r7, #8]
  34790. 800e7ea: 607a str r2, [r7, #4]
  34791. /* Simulate the stack frame as it would be created by a context switch
  34792. interrupt. */
  34793. /* Offset added to account for the way the MCU uses the stack on entry/exit
  34794. of interrupts, and to ensure alignment. */
  34795. pxTopOfStack--;
  34796. 800e7ec: 68fb ldr r3, [r7, #12]
  34797. 800e7ee: 3b04 subs r3, #4
  34798. 800e7f0: 60fb str r3, [r7, #12]
  34799. *pxTopOfStack = portINITIAL_XPSR; /* xPSR */
  34800. 800e7f2: 68fb ldr r3, [r7, #12]
  34801. 800e7f4: f04f 7280 mov.w r2, #16777216 @ 0x1000000
  34802. 800e7f8: 601a str r2, [r3, #0]
  34803. pxTopOfStack--;
  34804. 800e7fa: 68fb ldr r3, [r7, #12]
  34805. 800e7fc: 3b04 subs r3, #4
  34806. 800e7fe: 60fb str r3, [r7, #12]
  34807. *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
  34808. 800e800: 68bb ldr r3, [r7, #8]
  34809. 800e802: f023 0201 bic.w r2, r3, #1
  34810. 800e806: 68fb ldr r3, [r7, #12]
  34811. 800e808: 601a str r2, [r3, #0]
  34812. pxTopOfStack--;
  34813. 800e80a: 68fb ldr r3, [r7, #12]
  34814. 800e80c: 3b04 subs r3, #4
  34815. 800e80e: 60fb str r3, [r7, #12]
  34816. *pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
  34817. 800e810: 4a0c ldr r2, [pc, #48] @ (800e844 <pxPortInitialiseStack+0x64>)
  34818. 800e812: 68fb ldr r3, [r7, #12]
  34819. 800e814: 601a str r2, [r3, #0]
  34820. /* Save code space by skipping register initialisation. */
  34821. pxTopOfStack -= 5; /* R12, R3, R2 and R1. */
  34822. 800e816: 68fb ldr r3, [r7, #12]
  34823. 800e818: 3b14 subs r3, #20
  34824. 800e81a: 60fb str r3, [r7, #12]
  34825. *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */
  34826. 800e81c: 687a ldr r2, [r7, #4]
  34827. 800e81e: 68fb ldr r3, [r7, #12]
  34828. 800e820: 601a str r2, [r3, #0]
  34829. /* A save method is being used that requires each task to maintain its
  34830. own exec return value. */
  34831. pxTopOfStack--;
  34832. 800e822: 68fb ldr r3, [r7, #12]
  34833. 800e824: 3b04 subs r3, #4
  34834. 800e826: 60fb str r3, [r7, #12]
  34835. *pxTopOfStack = portINITIAL_EXC_RETURN;
  34836. 800e828: 68fb ldr r3, [r7, #12]
  34837. 800e82a: f06f 0202 mvn.w r2, #2
  34838. 800e82e: 601a str r2, [r3, #0]
  34839. pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */
  34840. 800e830: 68fb ldr r3, [r7, #12]
  34841. 800e832: 3b20 subs r3, #32
  34842. 800e834: 60fb str r3, [r7, #12]
  34843. return pxTopOfStack;
  34844. 800e836: 68fb ldr r3, [r7, #12]
  34845. }
  34846. 800e838: 4618 mov r0, r3
  34847. 800e83a: 3714 adds r7, #20
  34848. 800e83c: 46bd mov sp, r7
  34849. 800e83e: f85d 7b04 ldr.w r7, [sp], #4
  34850. 800e842: 4770 bx lr
  34851. 800e844: 0800e849 .word 0x0800e849
  34852. 0800e848 <prvTaskExitError>:
  34853. /*-----------------------------------------------------------*/
  34854. static void prvTaskExitError( void )
  34855. {
  34856. 800e848: b480 push {r7}
  34857. 800e84a: b085 sub sp, #20
  34858. 800e84c: af00 add r7, sp, #0
  34859. volatile uint32_t ulDummy = 0;
  34860. 800e84e: 2300 movs r3, #0
  34861. 800e850: 607b str r3, [r7, #4]
  34862. its caller as there is nothing to return to. If a task wants to exit it
  34863. should instead call vTaskDelete( NULL ).
  34864. Artificially force an assert() to be triggered if configASSERT() is
  34865. defined, then stop here so application writers can catch the error. */
  34866. configASSERT( uxCriticalNesting == ~0UL );
  34867. 800e852: 4b13 ldr r3, [pc, #76] @ (800e8a0 <prvTaskExitError+0x58>)
  34868. 800e854: 681b ldr r3, [r3, #0]
  34869. 800e856: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  34870. 800e85a: d00b beq.n 800e874 <prvTaskExitError+0x2c>
  34871. __asm volatile
  34872. 800e85c: f04f 0350 mov.w r3, #80 @ 0x50
  34873. 800e860: f383 8811 msr BASEPRI, r3
  34874. 800e864: f3bf 8f6f isb sy
  34875. 800e868: f3bf 8f4f dsb sy
  34876. 800e86c: 60fb str r3, [r7, #12]
  34877. }
  34878. 800e86e: bf00 nop
  34879. 800e870: bf00 nop
  34880. 800e872: e7fd b.n 800e870 <prvTaskExitError+0x28>
  34881. __asm volatile
  34882. 800e874: f04f 0350 mov.w r3, #80 @ 0x50
  34883. 800e878: f383 8811 msr BASEPRI, r3
  34884. 800e87c: f3bf 8f6f isb sy
  34885. 800e880: f3bf 8f4f dsb sy
  34886. 800e884: 60bb str r3, [r7, #8]
  34887. }
  34888. 800e886: bf00 nop
  34889. portDISABLE_INTERRUPTS();
  34890. while( ulDummy == 0 )
  34891. 800e888: bf00 nop
  34892. 800e88a: 687b ldr r3, [r7, #4]
  34893. 800e88c: 2b00 cmp r3, #0
  34894. 800e88e: d0fc beq.n 800e88a <prvTaskExitError+0x42>
  34895. about code appearing after this function is called - making ulDummy
  34896. volatile makes the compiler think the function could return and
  34897. therefore not output an 'unreachable code' warning for code that appears
  34898. after it. */
  34899. }
  34900. }
  34901. 800e890: bf00 nop
  34902. 800e892: bf00 nop
  34903. 800e894: 3714 adds r7, #20
  34904. 800e896: 46bd mov sp, r7
  34905. 800e898: f85d 7b04 ldr.w r7, [sp], #4
  34906. 800e89c: 4770 bx lr
  34907. 800e89e: bf00 nop
  34908. 800e8a0: 24000010 .word 0x24000010
  34909. ...
  34910. 0800e8b0 <SVC_Handler>:
  34911. /*-----------------------------------------------------------*/
  34912. void vPortSVCHandler( void )
  34913. {
  34914. __asm volatile (
  34915. 800e8b0: 4b07 ldr r3, [pc, #28] @ (800e8d0 <pxCurrentTCBConst2>)
  34916. 800e8b2: 6819 ldr r1, [r3, #0]
  34917. 800e8b4: 6808 ldr r0, [r1, #0]
  34918. 800e8b6: e8b0 4ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  34919. 800e8ba: f380 8809 msr PSP, r0
  34920. 800e8be: f3bf 8f6f isb sy
  34921. 800e8c2: f04f 0000 mov.w r0, #0
  34922. 800e8c6: f380 8811 msr BASEPRI, r0
  34923. 800e8ca: 4770 bx lr
  34924. 800e8cc: f3af 8000 nop.w
  34925. 0800e8d0 <pxCurrentTCBConst2>:
  34926. 800e8d0: 24002128 .word 0x24002128
  34927. " bx r14 \n"
  34928. " \n"
  34929. " .align 4 \n"
  34930. "pxCurrentTCBConst2: .word pxCurrentTCB \n"
  34931. );
  34932. }
  34933. 800e8d4: bf00 nop
  34934. 800e8d6: bf00 nop
  34935. 0800e8d8 <prvPortStartFirstTask>:
  34936. {
  34937. /* Start the first task. This also clears the bit that indicates the FPU is
  34938. in use in case the FPU was used before the scheduler was started - which
  34939. would otherwise result in the unnecessary leaving of space in the SVC stack
  34940. for lazy saving of FPU registers. */
  34941. __asm volatile(
  34942. 800e8d8: 4808 ldr r0, [pc, #32] @ (800e8fc <prvPortStartFirstTask+0x24>)
  34943. 800e8da: 6800 ldr r0, [r0, #0]
  34944. 800e8dc: 6800 ldr r0, [r0, #0]
  34945. 800e8de: f380 8808 msr MSP, r0
  34946. 800e8e2: f04f 0000 mov.w r0, #0
  34947. 800e8e6: f380 8814 msr CONTROL, r0
  34948. 800e8ea: b662 cpsie i
  34949. 800e8ec: b661 cpsie f
  34950. 800e8ee: f3bf 8f4f dsb sy
  34951. 800e8f2: f3bf 8f6f isb sy
  34952. 800e8f6: df00 svc 0
  34953. 800e8f8: bf00 nop
  34954. " dsb \n"
  34955. " isb \n"
  34956. " svc 0 \n" /* System call to start first task. */
  34957. " nop \n"
  34958. );
  34959. }
  34960. 800e8fa: bf00 nop
  34961. 800e8fc: e000ed08 .word 0xe000ed08
  34962. 0800e900 <xPortStartScheduler>:
  34963. /*
  34964. * See header file for description.
  34965. */
  34966. BaseType_t xPortStartScheduler( void )
  34967. {
  34968. 800e900: b580 push {r7, lr}
  34969. 800e902: b086 sub sp, #24
  34970. 800e904: af00 add r7, sp, #0
  34971. configASSERT( configMAX_SYSCALL_INTERRUPT_PRIORITY );
  34972. /* This port can be used on all revisions of the Cortex-M7 core other than
  34973. the r0p1 parts. r0p1 parts should use the port from the
  34974. /source/portable/GCC/ARM_CM7/r0p1 directory. */
  34975. configASSERT( portCPUID != portCORTEX_M7_r0p1_ID );
  34976. 800e906: 4b47 ldr r3, [pc, #284] @ (800ea24 <xPortStartScheduler+0x124>)
  34977. 800e908: 681b ldr r3, [r3, #0]
  34978. 800e90a: 4a47 ldr r2, [pc, #284] @ (800ea28 <xPortStartScheduler+0x128>)
  34979. 800e90c: 4293 cmp r3, r2
  34980. 800e90e: d10b bne.n 800e928 <xPortStartScheduler+0x28>
  34981. __asm volatile
  34982. 800e910: f04f 0350 mov.w r3, #80 @ 0x50
  34983. 800e914: f383 8811 msr BASEPRI, r3
  34984. 800e918: f3bf 8f6f isb sy
  34985. 800e91c: f3bf 8f4f dsb sy
  34986. 800e920: 613b str r3, [r7, #16]
  34987. }
  34988. 800e922: bf00 nop
  34989. 800e924: bf00 nop
  34990. 800e926: e7fd b.n 800e924 <xPortStartScheduler+0x24>
  34991. configASSERT( portCPUID != portCORTEX_M7_r0p0_ID );
  34992. 800e928: 4b3e ldr r3, [pc, #248] @ (800ea24 <xPortStartScheduler+0x124>)
  34993. 800e92a: 681b ldr r3, [r3, #0]
  34994. 800e92c: 4a3f ldr r2, [pc, #252] @ (800ea2c <xPortStartScheduler+0x12c>)
  34995. 800e92e: 4293 cmp r3, r2
  34996. 800e930: d10b bne.n 800e94a <xPortStartScheduler+0x4a>
  34997. __asm volatile
  34998. 800e932: f04f 0350 mov.w r3, #80 @ 0x50
  34999. 800e936: f383 8811 msr BASEPRI, r3
  35000. 800e93a: f3bf 8f6f isb sy
  35001. 800e93e: f3bf 8f4f dsb sy
  35002. 800e942: 60fb str r3, [r7, #12]
  35003. }
  35004. 800e944: bf00 nop
  35005. 800e946: bf00 nop
  35006. 800e948: e7fd b.n 800e946 <xPortStartScheduler+0x46>
  35007. #if( configASSERT_DEFINED == 1 )
  35008. {
  35009. volatile uint32_t ulOriginalPriority;
  35010. volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER );
  35011. 800e94a: 4b39 ldr r3, [pc, #228] @ (800ea30 <xPortStartScheduler+0x130>)
  35012. 800e94c: 617b str r3, [r7, #20]
  35013. functions can be called. ISR safe functions are those that end in
  35014. "FromISR". FreeRTOS maintains separate thread and ISR API functions to
  35015. ensure interrupt entry is as fast and simple as possible.
  35016. Save the interrupt priority value that is about to be clobbered. */
  35017. ulOriginalPriority = *pucFirstUserPriorityRegister;
  35018. 800e94e: 697b ldr r3, [r7, #20]
  35019. 800e950: 781b ldrb r3, [r3, #0]
  35020. 800e952: b2db uxtb r3, r3
  35021. 800e954: 607b str r3, [r7, #4]
  35022. /* Determine the number of priority bits available. First write to all
  35023. possible bits. */
  35024. *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;
  35025. 800e956: 697b ldr r3, [r7, #20]
  35026. 800e958: 22ff movs r2, #255 @ 0xff
  35027. 800e95a: 701a strb r2, [r3, #0]
  35028. /* Read the value back to see how many bits stuck. */
  35029. ucMaxPriorityValue = *pucFirstUserPriorityRegister;
  35030. 800e95c: 697b ldr r3, [r7, #20]
  35031. 800e95e: 781b ldrb r3, [r3, #0]
  35032. 800e960: b2db uxtb r3, r3
  35033. 800e962: 70fb strb r3, [r7, #3]
  35034. /* Use the same mask on the maximum system call priority. */
  35035. ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue;
  35036. 800e964: 78fb ldrb r3, [r7, #3]
  35037. 800e966: b2db uxtb r3, r3
  35038. 800e968: f003 0350 and.w r3, r3, #80 @ 0x50
  35039. 800e96c: b2da uxtb r2, r3
  35040. 800e96e: 4b31 ldr r3, [pc, #196] @ (800ea34 <xPortStartScheduler+0x134>)
  35041. 800e970: 701a strb r2, [r3, #0]
  35042. /* Calculate the maximum acceptable priority group value for the number
  35043. of bits read back. */
  35044. ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS;
  35045. 800e972: 4b31 ldr r3, [pc, #196] @ (800ea38 <xPortStartScheduler+0x138>)
  35046. 800e974: 2207 movs r2, #7
  35047. 800e976: 601a str r2, [r3, #0]
  35048. while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )
  35049. 800e978: e009 b.n 800e98e <xPortStartScheduler+0x8e>
  35050. {
  35051. ulMaxPRIGROUPValue--;
  35052. 800e97a: 4b2f ldr r3, [pc, #188] @ (800ea38 <xPortStartScheduler+0x138>)
  35053. 800e97c: 681b ldr r3, [r3, #0]
  35054. 800e97e: 3b01 subs r3, #1
  35055. 800e980: 4a2d ldr r2, [pc, #180] @ (800ea38 <xPortStartScheduler+0x138>)
  35056. 800e982: 6013 str r3, [r2, #0]
  35057. ucMaxPriorityValue <<= ( uint8_t ) 0x01;
  35058. 800e984: 78fb ldrb r3, [r7, #3]
  35059. 800e986: b2db uxtb r3, r3
  35060. 800e988: 005b lsls r3, r3, #1
  35061. 800e98a: b2db uxtb r3, r3
  35062. 800e98c: 70fb strb r3, [r7, #3]
  35063. while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )
  35064. 800e98e: 78fb ldrb r3, [r7, #3]
  35065. 800e990: b2db uxtb r3, r3
  35066. 800e992: f003 0380 and.w r3, r3, #128 @ 0x80
  35067. 800e996: 2b80 cmp r3, #128 @ 0x80
  35068. 800e998: d0ef beq.n 800e97a <xPortStartScheduler+0x7a>
  35069. #ifdef configPRIO_BITS
  35070. {
  35071. /* Check the FreeRTOS configuration that defines the number of
  35072. priority bits matches the number of priority bits actually queried
  35073. from the hardware. */
  35074. configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS );
  35075. 800e99a: 4b27 ldr r3, [pc, #156] @ (800ea38 <xPortStartScheduler+0x138>)
  35076. 800e99c: 681b ldr r3, [r3, #0]
  35077. 800e99e: f1c3 0307 rsb r3, r3, #7
  35078. 800e9a2: 2b04 cmp r3, #4
  35079. 800e9a4: d00b beq.n 800e9be <xPortStartScheduler+0xbe>
  35080. __asm volatile
  35081. 800e9a6: f04f 0350 mov.w r3, #80 @ 0x50
  35082. 800e9aa: f383 8811 msr BASEPRI, r3
  35083. 800e9ae: f3bf 8f6f isb sy
  35084. 800e9b2: f3bf 8f4f dsb sy
  35085. 800e9b6: 60bb str r3, [r7, #8]
  35086. }
  35087. 800e9b8: bf00 nop
  35088. 800e9ba: bf00 nop
  35089. 800e9bc: e7fd b.n 800e9ba <xPortStartScheduler+0xba>
  35090. }
  35091. #endif
  35092. /* Shift the priority group value back to its position within the AIRCR
  35093. register. */
  35094. ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT;
  35095. 800e9be: 4b1e ldr r3, [pc, #120] @ (800ea38 <xPortStartScheduler+0x138>)
  35096. 800e9c0: 681b ldr r3, [r3, #0]
  35097. 800e9c2: 021b lsls r3, r3, #8
  35098. 800e9c4: 4a1c ldr r2, [pc, #112] @ (800ea38 <xPortStartScheduler+0x138>)
  35099. 800e9c6: 6013 str r3, [r2, #0]
  35100. ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK;
  35101. 800e9c8: 4b1b ldr r3, [pc, #108] @ (800ea38 <xPortStartScheduler+0x138>)
  35102. 800e9ca: 681b ldr r3, [r3, #0]
  35103. 800e9cc: f403 63e0 and.w r3, r3, #1792 @ 0x700
  35104. 800e9d0: 4a19 ldr r2, [pc, #100] @ (800ea38 <xPortStartScheduler+0x138>)
  35105. 800e9d2: 6013 str r3, [r2, #0]
  35106. /* Restore the clobbered interrupt priority register to its original
  35107. value. */
  35108. *pucFirstUserPriorityRegister = ulOriginalPriority;
  35109. 800e9d4: 687b ldr r3, [r7, #4]
  35110. 800e9d6: b2da uxtb r2, r3
  35111. 800e9d8: 697b ldr r3, [r7, #20]
  35112. 800e9da: 701a strb r2, [r3, #0]
  35113. }
  35114. #endif /* conifgASSERT_DEFINED */
  35115. /* Make PendSV and SysTick the lowest priority interrupts. */
  35116. portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;
  35117. 800e9dc: 4b17 ldr r3, [pc, #92] @ (800ea3c <xPortStartScheduler+0x13c>)
  35118. 800e9de: 681b ldr r3, [r3, #0]
  35119. 800e9e0: 4a16 ldr r2, [pc, #88] @ (800ea3c <xPortStartScheduler+0x13c>)
  35120. 800e9e2: f443 0370 orr.w r3, r3, #15728640 @ 0xf00000
  35121. 800e9e6: 6013 str r3, [r2, #0]
  35122. portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;
  35123. 800e9e8: 4b14 ldr r3, [pc, #80] @ (800ea3c <xPortStartScheduler+0x13c>)
  35124. 800e9ea: 681b ldr r3, [r3, #0]
  35125. 800e9ec: 4a13 ldr r2, [pc, #76] @ (800ea3c <xPortStartScheduler+0x13c>)
  35126. 800e9ee: f043 4370 orr.w r3, r3, #4026531840 @ 0xf0000000
  35127. 800e9f2: 6013 str r3, [r2, #0]
  35128. /* Start the timer that generates the tick ISR. Interrupts are disabled
  35129. here already. */
  35130. vPortSetupTimerInterrupt();
  35131. 800e9f4: f000 f8da bl 800ebac <vPortSetupTimerInterrupt>
  35132. /* Initialise the critical nesting count ready for the first task. */
  35133. uxCriticalNesting = 0;
  35134. 800e9f8: 4b11 ldr r3, [pc, #68] @ (800ea40 <xPortStartScheduler+0x140>)
  35135. 800e9fa: 2200 movs r2, #0
  35136. 800e9fc: 601a str r2, [r3, #0]
  35137. /* Ensure the VFP is enabled - it should be anyway. */
  35138. vPortEnableVFP();
  35139. 800e9fe: f000 f8f9 bl 800ebf4 <vPortEnableVFP>
  35140. /* Lazy save always. */
  35141. *( portFPCCR ) |= portASPEN_AND_LSPEN_BITS;
  35142. 800ea02: 4b10 ldr r3, [pc, #64] @ (800ea44 <xPortStartScheduler+0x144>)
  35143. 800ea04: 681b ldr r3, [r3, #0]
  35144. 800ea06: 4a0f ldr r2, [pc, #60] @ (800ea44 <xPortStartScheduler+0x144>)
  35145. 800ea08: f043 4340 orr.w r3, r3, #3221225472 @ 0xc0000000
  35146. 800ea0c: 6013 str r3, [r2, #0]
  35147. /* Start the first task. */
  35148. prvPortStartFirstTask();
  35149. 800ea0e: f7ff ff63 bl 800e8d8 <prvPortStartFirstTask>
  35150. exit error function to prevent compiler warnings about a static function
  35151. not being called in the case that the application writer overrides this
  35152. functionality by defining configTASK_RETURN_ADDRESS. Call
  35153. vTaskSwitchContext() so link time optimisation does not remove the
  35154. symbol. */
  35155. vTaskSwitchContext();
  35156. 800ea12: f7fe fcb7 bl 800d384 <vTaskSwitchContext>
  35157. prvTaskExitError();
  35158. 800ea16: f7ff ff17 bl 800e848 <prvTaskExitError>
  35159. /* Should not get here! */
  35160. return 0;
  35161. 800ea1a: 2300 movs r3, #0
  35162. }
  35163. 800ea1c: 4618 mov r0, r3
  35164. 800ea1e: 3718 adds r7, #24
  35165. 800ea20: 46bd mov sp, r7
  35166. 800ea22: bd80 pop {r7, pc}
  35167. 800ea24: e000ed00 .word 0xe000ed00
  35168. 800ea28: 410fc271 .word 0x410fc271
  35169. 800ea2c: 410fc270 .word 0x410fc270
  35170. 800ea30: e000e400 .word 0xe000e400
  35171. 800ea34: 24002754 .word 0x24002754
  35172. 800ea38: 24002758 .word 0x24002758
  35173. 800ea3c: e000ed20 .word 0xe000ed20
  35174. 800ea40: 24000010 .word 0x24000010
  35175. 800ea44: e000ef34 .word 0xe000ef34
  35176. 0800ea48 <vPortEnterCritical>:
  35177. configASSERT( uxCriticalNesting == 1000UL );
  35178. }
  35179. /*-----------------------------------------------------------*/
  35180. void vPortEnterCritical( void )
  35181. {
  35182. 800ea48: b480 push {r7}
  35183. 800ea4a: b083 sub sp, #12
  35184. 800ea4c: af00 add r7, sp, #0
  35185. __asm volatile
  35186. 800ea4e: f04f 0350 mov.w r3, #80 @ 0x50
  35187. 800ea52: f383 8811 msr BASEPRI, r3
  35188. 800ea56: f3bf 8f6f isb sy
  35189. 800ea5a: f3bf 8f4f dsb sy
  35190. 800ea5e: 607b str r3, [r7, #4]
  35191. }
  35192. 800ea60: bf00 nop
  35193. portDISABLE_INTERRUPTS();
  35194. uxCriticalNesting++;
  35195. 800ea62: 4b10 ldr r3, [pc, #64] @ (800eaa4 <vPortEnterCritical+0x5c>)
  35196. 800ea64: 681b ldr r3, [r3, #0]
  35197. 800ea66: 3301 adds r3, #1
  35198. 800ea68: 4a0e ldr r2, [pc, #56] @ (800eaa4 <vPortEnterCritical+0x5c>)
  35199. 800ea6a: 6013 str r3, [r2, #0]
  35200. /* This is not the interrupt safe version of the enter critical function so
  35201. assert() if it is being called from an interrupt context. Only API
  35202. functions that end in "FromISR" can be used in an interrupt. Only assert if
  35203. the critical nesting count is 1 to protect against recursive calls if the
  35204. assert function also uses a critical section. */
  35205. if( uxCriticalNesting == 1 )
  35206. 800ea6c: 4b0d ldr r3, [pc, #52] @ (800eaa4 <vPortEnterCritical+0x5c>)
  35207. 800ea6e: 681b ldr r3, [r3, #0]
  35208. 800ea70: 2b01 cmp r3, #1
  35209. 800ea72: d110 bne.n 800ea96 <vPortEnterCritical+0x4e>
  35210. {
  35211. configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 );
  35212. 800ea74: 4b0c ldr r3, [pc, #48] @ (800eaa8 <vPortEnterCritical+0x60>)
  35213. 800ea76: 681b ldr r3, [r3, #0]
  35214. 800ea78: b2db uxtb r3, r3
  35215. 800ea7a: 2b00 cmp r3, #0
  35216. 800ea7c: d00b beq.n 800ea96 <vPortEnterCritical+0x4e>
  35217. __asm volatile
  35218. 800ea7e: f04f 0350 mov.w r3, #80 @ 0x50
  35219. 800ea82: f383 8811 msr BASEPRI, r3
  35220. 800ea86: f3bf 8f6f isb sy
  35221. 800ea8a: f3bf 8f4f dsb sy
  35222. 800ea8e: 603b str r3, [r7, #0]
  35223. }
  35224. 800ea90: bf00 nop
  35225. 800ea92: bf00 nop
  35226. 800ea94: e7fd b.n 800ea92 <vPortEnterCritical+0x4a>
  35227. }
  35228. }
  35229. 800ea96: bf00 nop
  35230. 800ea98: 370c adds r7, #12
  35231. 800ea9a: 46bd mov sp, r7
  35232. 800ea9c: f85d 7b04 ldr.w r7, [sp], #4
  35233. 800eaa0: 4770 bx lr
  35234. 800eaa2: bf00 nop
  35235. 800eaa4: 24000010 .word 0x24000010
  35236. 800eaa8: e000ed04 .word 0xe000ed04
  35237. 0800eaac <vPortExitCritical>:
  35238. /*-----------------------------------------------------------*/
  35239. void vPortExitCritical( void )
  35240. {
  35241. 800eaac: b480 push {r7}
  35242. 800eaae: b083 sub sp, #12
  35243. 800eab0: af00 add r7, sp, #0
  35244. configASSERT( uxCriticalNesting );
  35245. 800eab2: 4b12 ldr r3, [pc, #72] @ (800eafc <vPortExitCritical+0x50>)
  35246. 800eab4: 681b ldr r3, [r3, #0]
  35247. 800eab6: 2b00 cmp r3, #0
  35248. 800eab8: d10b bne.n 800ead2 <vPortExitCritical+0x26>
  35249. __asm volatile
  35250. 800eaba: f04f 0350 mov.w r3, #80 @ 0x50
  35251. 800eabe: f383 8811 msr BASEPRI, r3
  35252. 800eac2: f3bf 8f6f isb sy
  35253. 800eac6: f3bf 8f4f dsb sy
  35254. 800eaca: 607b str r3, [r7, #4]
  35255. }
  35256. 800eacc: bf00 nop
  35257. 800eace: bf00 nop
  35258. 800ead0: e7fd b.n 800eace <vPortExitCritical+0x22>
  35259. uxCriticalNesting--;
  35260. 800ead2: 4b0a ldr r3, [pc, #40] @ (800eafc <vPortExitCritical+0x50>)
  35261. 800ead4: 681b ldr r3, [r3, #0]
  35262. 800ead6: 3b01 subs r3, #1
  35263. 800ead8: 4a08 ldr r2, [pc, #32] @ (800eafc <vPortExitCritical+0x50>)
  35264. 800eada: 6013 str r3, [r2, #0]
  35265. if( uxCriticalNesting == 0 )
  35266. 800eadc: 4b07 ldr r3, [pc, #28] @ (800eafc <vPortExitCritical+0x50>)
  35267. 800eade: 681b ldr r3, [r3, #0]
  35268. 800eae0: 2b00 cmp r3, #0
  35269. 800eae2: d105 bne.n 800eaf0 <vPortExitCritical+0x44>
  35270. 800eae4: 2300 movs r3, #0
  35271. 800eae6: 603b str r3, [r7, #0]
  35272. __asm volatile
  35273. 800eae8: 683b ldr r3, [r7, #0]
  35274. 800eaea: f383 8811 msr BASEPRI, r3
  35275. }
  35276. 800eaee: bf00 nop
  35277. {
  35278. portENABLE_INTERRUPTS();
  35279. }
  35280. }
  35281. 800eaf0: bf00 nop
  35282. 800eaf2: 370c adds r7, #12
  35283. 800eaf4: 46bd mov sp, r7
  35284. 800eaf6: f85d 7b04 ldr.w r7, [sp], #4
  35285. 800eafa: 4770 bx lr
  35286. 800eafc: 24000010 .word 0x24000010
  35287. 0800eb00 <PendSV_Handler>:
  35288. void xPortPendSVHandler( void )
  35289. {
  35290. /* This is a naked function. */
  35291. __asm volatile
  35292. 800eb00: f3ef 8009 mrs r0, PSP
  35293. 800eb04: f3bf 8f6f isb sy
  35294. 800eb08: 4b15 ldr r3, [pc, #84] @ (800eb60 <pxCurrentTCBConst>)
  35295. 800eb0a: 681a ldr r2, [r3, #0]
  35296. 800eb0c: f01e 0f10 tst.w lr, #16
  35297. 800eb10: bf08 it eq
  35298. 800eb12: ed20 8a10 vstmdbeq r0!, {s16-s31}
  35299. 800eb16: e920 4ff0 stmdb r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  35300. 800eb1a: 6010 str r0, [r2, #0]
  35301. 800eb1c: e92d 0009 stmdb sp!, {r0, r3}
  35302. 800eb20: f04f 0050 mov.w r0, #80 @ 0x50
  35303. 800eb24: f380 8811 msr BASEPRI, r0
  35304. 800eb28: f3bf 8f4f dsb sy
  35305. 800eb2c: f3bf 8f6f isb sy
  35306. 800eb30: f7fe fc28 bl 800d384 <vTaskSwitchContext>
  35307. 800eb34: f04f 0000 mov.w r0, #0
  35308. 800eb38: f380 8811 msr BASEPRI, r0
  35309. 800eb3c: bc09 pop {r0, r3}
  35310. 800eb3e: 6819 ldr r1, [r3, #0]
  35311. 800eb40: 6808 ldr r0, [r1, #0]
  35312. 800eb42: e8b0 4ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  35313. 800eb46: f01e 0f10 tst.w lr, #16
  35314. 800eb4a: bf08 it eq
  35315. 800eb4c: ecb0 8a10 vldmiaeq r0!, {s16-s31}
  35316. 800eb50: f380 8809 msr PSP, r0
  35317. 800eb54: f3bf 8f6f isb sy
  35318. 800eb58: 4770 bx lr
  35319. 800eb5a: bf00 nop
  35320. 800eb5c: f3af 8000 nop.w
  35321. 0800eb60 <pxCurrentTCBConst>:
  35322. 800eb60: 24002128 .word 0x24002128
  35323. " \n"
  35324. " .align 4 \n"
  35325. "pxCurrentTCBConst: .word pxCurrentTCB \n"
  35326. ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY)
  35327. );
  35328. }
  35329. 800eb64: bf00 nop
  35330. 800eb66: bf00 nop
  35331. 0800eb68 <xPortSysTickHandler>:
  35332. /*-----------------------------------------------------------*/
  35333. void xPortSysTickHandler( void )
  35334. {
  35335. 800eb68: b580 push {r7, lr}
  35336. 800eb6a: b082 sub sp, #8
  35337. 800eb6c: af00 add r7, sp, #0
  35338. __asm volatile
  35339. 800eb6e: f04f 0350 mov.w r3, #80 @ 0x50
  35340. 800eb72: f383 8811 msr BASEPRI, r3
  35341. 800eb76: f3bf 8f6f isb sy
  35342. 800eb7a: f3bf 8f4f dsb sy
  35343. 800eb7e: 607b str r3, [r7, #4]
  35344. }
  35345. 800eb80: bf00 nop
  35346. save and then restore the interrupt mask value as its value is already
  35347. known. */
  35348. portDISABLE_INTERRUPTS();
  35349. {
  35350. /* Increment the RTOS tick. */
  35351. if( xTaskIncrementTick() != pdFALSE )
  35352. 800eb82: f7fe fb45 bl 800d210 <xTaskIncrementTick>
  35353. 800eb86: 4603 mov r3, r0
  35354. 800eb88: 2b00 cmp r3, #0
  35355. 800eb8a: d003 beq.n 800eb94 <xPortSysTickHandler+0x2c>
  35356. {
  35357. /* A context switch is required. Context switching is performed in
  35358. the PendSV interrupt. Pend the PendSV interrupt. */
  35359. portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;
  35360. 800eb8c: 4b06 ldr r3, [pc, #24] @ (800eba8 <xPortSysTickHandler+0x40>)
  35361. 800eb8e: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  35362. 800eb92: 601a str r2, [r3, #0]
  35363. 800eb94: 2300 movs r3, #0
  35364. 800eb96: 603b str r3, [r7, #0]
  35365. __asm volatile
  35366. 800eb98: 683b ldr r3, [r7, #0]
  35367. 800eb9a: f383 8811 msr BASEPRI, r3
  35368. }
  35369. 800eb9e: bf00 nop
  35370. }
  35371. }
  35372. portENABLE_INTERRUPTS();
  35373. }
  35374. 800eba0: bf00 nop
  35375. 800eba2: 3708 adds r7, #8
  35376. 800eba4: 46bd mov sp, r7
  35377. 800eba6: bd80 pop {r7, pc}
  35378. 800eba8: e000ed04 .word 0xe000ed04
  35379. 0800ebac <vPortSetupTimerInterrupt>:
  35380. /*
  35381. * Setup the systick timer to generate the tick interrupts at the required
  35382. * frequency.
  35383. */
  35384. __attribute__(( weak )) void vPortSetupTimerInterrupt( void )
  35385. {
  35386. 800ebac: b480 push {r7}
  35387. 800ebae: af00 add r7, sp, #0
  35388. ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ );
  35389. }
  35390. #endif /* configUSE_TICKLESS_IDLE */
  35391. /* Stop and clear the SysTick. */
  35392. portNVIC_SYSTICK_CTRL_REG = 0UL;
  35393. 800ebb0: 4b0b ldr r3, [pc, #44] @ (800ebe0 <vPortSetupTimerInterrupt+0x34>)
  35394. 800ebb2: 2200 movs r2, #0
  35395. 800ebb4: 601a str r2, [r3, #0]
  35396. portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;
  35397. 800ebb6: 4b0b ldr r3, [pc, #44] @ (800ebe4 <vPortSetupTimerInterrupt+0x38>)
  35398. 800ebb8: 2200 movs r2, #0
  35399. 800ebba: 601a str r2, [r3, #0]
  35400. /* Configure SysTick to interrupt at the requested rate. */
  35401. portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
  35402. 800ebbc: 4b0a ldr r3, [pc, #40] @ (800ebe8 <vPortSetupTimerInterrupt+0x3c>)
  35403. 800ebbe: 681b ldr r3, [r3, #0]
  35404. 800ebc0: 4a0a ldr r2, [pc, #40] @ (800ebec <vPortSetupTimerInterrupt+0x40>)
  35405. 800ebc2: fba2 2303 umull r2, r3, r2, r3
  35406. 800ebc6: 099b lsrs r3, r3, #6
  35407. 800ebc8: 4a09 ldr r2, [pc, #36] @ (800ebf0 <vPortSetupTimerInterrupt+0x44>)
  35408. 800ebca: 3b01 subs r3, #1
  35409. 800ebcc: 6013 str r3, [r2, #0]
  35410. portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );
  35411. 800ebce: 4b04 ldr r3, [pc, #16] @ (800ebe0 <vPortSetupTimerInterrupt+0x34>)
  35412. 800ebd0: 2207 movs r2, #7
  35413. 800ebd2: 601a str r2, [r3, #0]
  35414. }
  35415. 800ebd4: bf00 nop
  35416. 800ebd6: 46bd mov sp, r7
  35417. 800ebd8: f85d 7b04 ldr.w r7, [sp], #4
  35418. 800ebdc: 4770 bx lr
  35419. 800ebde: bf00 nop
  35420. 800ebe0: e000e010 .word 0xe000e010
  35421. 800ebe4: e000e018 .word 0xe000e018
  35422. 800ebe8: 24000000 .word 0x24000000
  35423. 800ebec: 10624dd3 .word 0x10624dd3
  35424. 800ebf0: e000e014 .word 0xe000e014
  35425. 0800ebf4 <vPortEnableVFP>:
  35426. /*-----------------------------------------------------------*/
  35427. /* This is a naked function. */
  35428. static void vPortEnableVFP( void )
  35429. {
  35430. __asm volatile
  35431. 800ebf4: f8df 000c ldr.w r0, [pc, #12] @ 800ec04 <vPortEnableVFP+0x10>
  35432. 800ebf8: 6801 ldr r1, [r0, #0]
  35433. 800ebfa: f441 0170 orr.w r1, r1, #15728640 @ 0xf00000
  35434. 800ebfe: 6001 str r1, [r0, #0]
  35435. 800ec00: 4770 bx lr
  35436. " \n"
  35437. " orr r1, r1, #( 0xf << 20 ) \n" /* Enable CP10 and CP11 coprocessors, then save back. */
  35438. " str r1, [r0] \n"
  35439. " bx r14 "
  35440. );
  35441. }
  35442. 800ec02: bf00 nop
  35443. 800ec04: e000ed88 .word 0xe000ed88
  35444. 0800ec08 <vPortValidateInterruptPriority>:
  35445. /*-----------------------------------------------------------*/
  35446. #if( configASSERT_DEFINED == 1 )
  35447. void vPortValidateInterruptPriority( void )
  35448. {
  35449. 800ec08: b480 push {r7}
  35450. 800ec0a: b085 sub sp, #20
  35451. 800ec0c: af00 add r7, sp, #0
  35452. uint32_t ulCurrentInterrupt;
  35453. uint8_t ucCurrentPriority;
  35454. /* Obtain the number of the currently executing interrupt. */
  35455. __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" );
  35456. 800ec0e: f3ef 8305 mrs r3, IPSR
  35457. 800ec12: 60fb str r3, [r7, #12]
  35458. /* Is the interrupt number a user defined interrupt? */
  35459. if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER )
  35460. 800ec14: 68fb ldr r3, [r7, #12]
  35461. 800ec16: 2b0f cmp r3, #15
  35462. 800ec18: d915 bls.n 800ec46 <vPortValidateInterruptPriority+0x3e>
  35463. {
  35464. /* Look up the interrupt's priority. */
  35465. ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ];
  35466. 800ec1a: 4a18 ldr r2, [pc, #96] @ (800ec7c <vPortValidateInterruptPriority+0x74>)
  35467. 800ec1c: 68fb ldr r3, [r7, #12]
  35468. 800ec1e: 4413 add r3, r2
  35469. 800ec20: 781b ldrb r3, [r3, #0]
  35470. 800ec22: 72fb strb r3, [r7, #11]
  35471. interrupt entry is as fast and simple as possible.
  35472. The following links provide detailed information:
  35473. http://www.freertos.org/RTOS-Cortex-M3-M4.html
  35474. http://www.freertos.org/FAQHelp.html */
  35475. configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );
  35476. 800ec24: 4b16 ldr r3, [pc, #88] @ (800ec80 <vPortValidateInterruptPriority+0x78>)
  35477. 800ec26: 781b ldrb r3, [r3, #0]
  35478. 800ec28: 7afa ldrb r2, [r7, #11]
  35479. 800ec2a: 429a cmp r2, r3
  35480. 800ec2c: d20b bcs.n 800ec46 <vPortValidateInterruptPriority+0x3e>
  35481. __asm volatile
  35482. 800ec2e: f04f 0350 mov.w r3, #80 @ 0x50
  35483. 800ec32: f383 8811 msr BASEPRI, r3
  35484. 800ec36: f3bf 8f6f isb sy
  35485. 800ec3a: f3bf 8f4f dsb sy
  35486. 800ec3e: 607b str r3, [r7, #4]
  35487. }
  35488. 800ec40: bf00 nop
  35489. 800ec42: bf00 nop
  35490. 800ec44: e7fd b.n 800ec42 <vPortValidateInterruptPriority+0x3a>
  35491. configuration then the correct setting can be achieved on all Cortex-M
  35492. devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the
  35493. scheduler. Note however that some vendor specific peripheral libraries
  35494. assume a non-zero priority group setting, in which cases using a value
  35495. of zero will result in unpredictable behaviour. */
  35496. configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue );
  35497. 800ec46: 4b0f ldr r3, [pc, #60] @ (800ec84 <vPortValidateInterruptPriority+0x7c>)
  35498. 800ec48: 681b ldr r3, [r3, #0]
  35499. 800ec4a: f403 62e0 and.w r2, r3, #1792 @ 0x700
  35500. 800ec4e: 4b0e ldr r3, [pc, #56] @ (800ec88 <vPortValidateInterruptPriority+0x80>)
  35501. 800ec50: 681b ldr r3, [r3, #0]
  35502. 800ec52: 429a cmp r2, r3
  35503. 800ec54: d90b bls.n 800ec6e <vPortValidateInterruptPriority+0x66>
  35504. __asm volatile
  35505. 800ec56: f04f 0350 mov.w r3, #80 @ 0x50
  35506. 800ec5a: f383 8811 msr BASEPRI, r3
  35507. 800ec5e: f3bf 8f6f isb sy
  35508. 800ec62: f3bf 8f4f dsb sy
  35509. 800ec66: 603b str r3, [r7, #0]
  35510. }
  35511. 800ec68: bf00 nop
  35512. 800ec6a: bf00 nop
  35513. 800ec6c: e7fd b.n 800ec6a <vPortValidateInterruptPriority+0x62>
  35514. }
  35515. 800ec6e: bf00 nop
  35516. 800ec70: 3714 adds r7, #20
  35517. 800ec72: 46bd mov sp, r7
  35518. 800ec74: f85d 7b04 ldr.w r7, [sp], #4
  35519. 800ec78: 4770 bx lr
  35520. 800ec7a: bf00 nop
  35521. 800ec7c: e000e3f0 .word 0xe000e3f0
  35522. 800ec80: 24002754 .word 0x24002754
  35523. 800ec84: e000ed0c .word 0xe000ed0c
  35524. 800ec88: 24002758 .word 0x24002758
  35525. 0800ec8c <pvPortMalloc>:
  35526. static size_t xBlockAllocatedBit = 0;
  35527. /*-----------------------------------------------------------*/
  35528. void *pvPortMalloc( size_t xWantedSize )
  35529. {
  35530. 800ec8c: b580 push {r7, lr}
  35531. 800ec8e: b08a sub sp, #40 @ 0x28
  35532. 800ec90: af00 add r7, sp, #0
  35533. 800ec92: 6078 str r0, [r7, #4]
  35534. BlockLink_t *pxBlock, *pxPreviousBlock, *pxNewBlockLink;
  35535. void *pvReturn = NULL;
  35536. 800ec94: 2300 movs r3, #0
  35537. 800ec96: 61fb str r3, [r7, #28]
  35538. vTaskSuspendAll();
  35539. 800ec98: f7fe f9fe bl 800d098 <vTaskSuspendAll>
  35540. {
  35541. /* If this is the first call to malloc then the heap will require
  35542. initialisation to setup the list of free blocks. */
  35543. if( pxEnd == NULL )
  35544. 800ec9c: 4b5c ldr r3, [pc, #368] @ (800ee10 <pvPortMalloc+0x184>)
  35545. 800ec9e: 681b ldr r3, [r3, #0]
  35546. 800eca0: 2b00 cmp r3, #0
  35547. 800eca2: d101 bne.n 800eca8 <pvPortMalloc+0x1c>
  35548. {
  35549. prvHeapInit();
  35550. 800eca4: f000 f924 bl 800eef0 <prvHeapInit>
  35551. /* Check the requested block size is not so large that the top bit is
  35552. set. The top bit of the block size member of the BlockLink_t structure
  35553. is used to determine who owns the block - the application or the
  35554. kernel, so it must be free. */
  35555. if( ( xWantedSize & xBlockAllocatedBit ) == 0 )
  35556. 800eca8: 4b5a ldr r3, [pc, #360] @ (800ee14 <pvPortMalloc+0x188>)
  35557. 800ecaa: 681a ldr r2, [r3, #0]
  35558. 800ecac: 687b ldr r3, [r7, #4]
  35559. 800ecae: 4013 ands r3, r2
  35560. 800ecb0: 2b00 cmp r3, #0
  35561. 800ecb2: f040 8095 bne.w 800ede0 <pvPortMalloc+0x154>
  35562. {
  35563. /* The wanted size is increased so it can contain a BlockLink_t
  35564. structure in addition to the requested amount of bytes. */
  35565. if( xWantedSize > 0 )
  35566. 800ecb6: 687b ldr r3, [r7, #4]
  35567. 800ecb8: 2b00 cmp r3, #0
  35568. 800ecba: d01e beq.n 800ecfa <pvPortMalloc+0x6e>
  35569. {
  35570. xWantedSize += xHeapStructSize;
  35571. 800ecbc: 2208 movs r2, #8
  35572. 800ecbe: 687b ldr r3, [r7, #4]
  35573. 800ecc0: 4413 add r3, r2
  35574. 800ecc2: 607b str r3, [r7, #4]
  35575. /* Ensure that blocks are always aligned to the required number
  35576. of bytes. */
  35577. if( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) != 0x00 )
  35578. 800ecc4: 687b ldr r3, [r7, #4]
  35579. 800ecc6: f003 0307 and.w r3, r3, #7
  35580. 800ecca: 2b00 cmp r3, #0
  35581. 800eccc: d015 beq.n 800ecfa <pvPortMalloc+0x6e>
  35582. {
  35583. /* Byte alignment required. */
  35584. xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) );
  35585. 800ecce: 687b ldr r3, [r7, #4]
  35586. 800ecd0: f023 0307 bic.w r3, r3, #7
  35587. 800ecd4: 3308 adds r3, #8
  35588. 800ecd6: 607b str r3, [r7, #4]
  35589. configASSERT( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) == 0 );
  35590. 800ecd8: 687b ldr r3, [r7, #4]
  35591. 800ecda: f003 0307 and.w r3, r3, #7
  35592. 800ecde: 2b00 cmp r3, #0
  35593. 800ece0: d00b beq.n 800ecfa <pvPortMalloc+0x6e>
  35594. __asm volatile
  35595. 800ece2: f04f 0350 mov.w r3, #80 @ 0x50
  35596. 800ece6: f383 8811 msr BASEPRI, r3
  35597. 800ecea: f3bf 8f6f isb sy
  35598. 800ecee: f3bf 8f4f dsb sy
  35599. 800ecf2: 617b str r3, [r7, #20]
  35600. }
  35601. 800ecf4: bf00 nop
  35602. 800ecf6: bf00 nop
  35603. 800ecf8: e7fd b.n 800ecf6 <pvPortMalloc+0x6a>
  35604. else
  35605. {
  35606. mtCOVERAGE_TEST_MARKER();
  35607. }
  35608. if( ( xWantedSize > 0 ) && ( xWantedSize <= xFreeBytesRemaining ) )
  35609. 800ecfa: 687b ldr r3, [r7, #4]
  35610. 800ecfc: 2b00 cmp r3, #0
  35611. 800ecfe: d06f beq.n 800ede0 <pvPortMalloc+0x154>
  35612. 800ed00: 4b45 ldr r3, [pc, #276] @ (800ee18 <pvPortMalloc+0x18c>)
  35613. 800ed02: 681b ldr r3, [r3, #0]
  35614. 800ed04: 687a ldr r2, [r7, #4]
  35615. 800ed06: 429a cmp r2, r3
  35616. 800ed08: d86a bhi.n 800ede0 <pvPortMalloc+0x154>
  35617. {
  35618. /* Traverse the list from the start (lowest address) block until
  35619. one of adequate size is found. */
  35620. pxPreviousBlock = &xStart;
  35621. 800ed0a: 4b44 ldr r3, [pc, #272] @ (800ee1c <pvPortMalloc+0x190>)
  35622. 800ed0c: 623b str r3, [r7, #32]
  35623. pxBlock = xStart.pxNextFreeBlock;
  35624. 800ed0e: 4b43 ldr r3, [pc, #268] @ (800ee1c <pvPortMalloc+0x190>)
  35625. 800ed10: 681b ldr r3, [r3, #0]
  35626. 800ed12: 627b str r3, [r7, #36] @ 0x24
  35627. while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) )
  35628. 800ed14: e004 b.n 800ed20 <pvPortMalloc+0x94>
  35629. {
  35630. pxPreviousBlock = pxBlock;
  35631. 800ed16: 6a7b ldr r3, [r7, #36] @ 0x24
  35632. 800ed18: 623b str r3, [r7, #32]
  35633. pxBlock = pxBlock->pxNextFreeBlock;
  35634. 800ed1a: 6a7b ldr r3, [r7, #36] @ 0x24
  35635. 800ed1c: 681b ldr r3, [r3, #0]
  35636. 800ed1e: 627b str r3, [r7, #36] @ 0x24
  35637. while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) )
  35638. 800ed20: 6a7b ldr r3, [r7, #36] @ 0x24
  35639. 800ed22: 685b ldr r3, [r3, #4]
  35640. 800ed24: 687a ldr r2, [r7, #4]
  35641. 800ed26: 429a cmp r2, r3
  35642. 800ed28: d903 bls.n 800ed32 <pvPortMalloc+0xa6>
  35643. 800ed2a: 6a7b ldr r3, [r7, #36] @ 0x24
  35644. 800ed2c: 681b ldr r3, [r3, #0]
  35645. 800ed2e: 2b00 cmp r3, #0
  35646. 800ed30: d1f1 bne.n 800ed16 <pvPortMalloc+0x8a>
  35647. }
  35648. /* If the end marker was reached then a block of adequate size
  35649. was not found. */
  35650. if( pxBlock != pxEnd )
  35651. 800ed32: 4b37 ldr r3, [pc, #220] @ (800ee10 <pvPortMalloc+0x184>)
  35652. 800ed34: 681b ldr r3, [r3, #0]
  35653. 800ed36: 6a7a ldr r2, [r7, #36] @ 0x24
  35654. 800ed38: 429a cmp r2, r3
  35655. 800ed3a: d051 beq.n 800ede0 <pvPortMalloc+0x154>
  35656. {
  35657. /* Return the memory space pointed to - jumping over the
  35658. BlockLink_t structure at its start. */
  35659. pvReturn = ( void * ) ( ( ( uint8_t * ) pxPreviousBlock->pxNextFreeBlock ) + xHeapStructSize );
  35660. 800ed3c: 6a3b ldr r3, [r7, #32]
  35661. 800ed3e: 681b ldr r3, [r3, #0]
  35662. 800ed40: 2208 movs r2, #8
  35663. 800ed42: 4413 add r3, r2
  35664. 800ed44: 61fb str r3, [r7, #28]
  35665. /* This block is being returned for use so must be taken out
  35666. of the list of free blocks. */
  35667. pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock;
  35668. 800ed46: 6a7b ldr r3, [r7, #36] @ 0x24
  35669. 800ed48: 681a ldr r2, [r3, #0]
  35670. 800ed4a: 6a3b ldr r3, [r7, #32]
  35671. 800ed4c: 601a str r2, [r3, #0]
  35672. /* If the block is larger than required it can be split into
  35673. two. */
  35674. if( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE )
  35675. 800ed4e: 6a7b ldr r3, [r7, #36] @ 0x24
  35676. 800ed50: 685a ldr r2, [r3, #4]
  35677. 800ed52: 687b ldr r3, [r7, #4]
  35678. 800ed54: 1ad2 subs r2, r2, r3
  35679. 800ed56: 2308 movs r3, #8
  35680. 800ed58: 005b lsls r3, r3, #1
  35681. 800ed5a: 429a cmp r2, r3
  35682. 800ed5c: d920 bls.n 800eda0 <pvPortMalloc+0x114>
  35683. {
  35684. /* This block is to be split into two. Create a new
  35685. block following the number of bytes requested. The void
  35686. cast is used to prevent byte alignment warnings from the
  35687. compiler. */
  35688. pxNewBlockLink = ( void * ) ( ( ( uint8_t * ) pxBlock ) + xWantedSize );
  35689. 800ed5e: 6a7a ldr r2, [r7, #36] @ 0x24
  35690. 800ed60: 687b ldr r3, [r7, #4]
  35691. 800ed62: 4413 add r3, r2
  35692. 800ed64: 61bb str r3, [r7, #24]
  35693. configASSERT( ( ( ( size_t ) pxNewBlockLink ) & portBYTE_ALIGNMENT_MASK ) == 0 );
  35694. 800ed66: 69bb ldr r3, [r7, #24]
  35695. 800ed68: f003 0307 and.w r3, r3, #7
  35696. 800ed6c: 2b00 cmp r3, #0
  35697. 800ed6e: d00b beq.n 800ed88 <pvPortMalloc+0xfc>
  35698. __asm volatile
  35699. 800ed70: f04f 0350 mov.w r3, #80 @ 0x50
  35700. 800ed74: f383 8811 msr BASEPRI, r3
  35701. 800ed78: f3bf 8f6f isb sy
  35702. 800ed7c: f3bf 8f4f dsb sy
  35703. 800ed80: 613b str r3, [r7, #16]
  35704. }
  35705. 800ed82: bf00 nop
  35706. 800ed84: bf00 nop
  35707. 800ed86: e7fd b.n 800ed84 <pvPortMalloc+0xf8>
  35708. /* Calculate the sizes of two blocks split from the
  35709. single block. */
  35710. pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize;
  35711. 800ed88: 6a7b ldr r3, [r7, #36] @ 0x24
  35712. 800ed8a: 685a ldr r2, [r3, #4]
  35713. 800ed8c: 687b ldr r3, [r7, #4]
  35714. 800ed8e: 1ad2 subs r2, r2, r3
  35715. 800ed90: 69bb ldr r3, [r7, #24]
  35716. 800ed92: 605a str r2, [r3, #4]
  35717. pxBlock->xBlockSize = xWantedSize;
  35718. 800ed94: 6a7b ldr r3, [r7, #36] @ 0x24
  35719. 800ed96: 687a ldr r2, [r7, #4]
  35720. 800ed98: 605a str r2, [r3, #4]
  35721. /* Insert the new block into the list of free blocks. */
  35722. prvInsertBlockIntoFreeList( pxNewBlockLink );
  35723. 800ed9a: 69b8 ldr r0, [r7, #24]
  35724. 800ed9c: f000 f90a bl 800efb4 <prvInsertBlockIntoFreeList>
  35725. else
  35726. {
  35727. mtCOVERAGE_TEST_MARKER();
  35728. }
  35729. xFreeBytesRemaining -= pxBlock->xBlockSize;
  35730. 800eda0: 4b1d ldr r3, [pc, #116] @ (800ee18 <pvPortMalloc+0x18c>)
  35731. 800eda2: 681a ldr r2, [r3, #0]
  35732. 800eda4: 6a7b ldr r3, [r7, #36] @ 0x24
  35733. 800eda6: 685b ldr r3, [r3, #4]
  35734. 800eda8: 1ad3 subs r3, r2, r3
  35735. 800edaa: 4a1b ldr r2, [pc, #108] @ (800ee18 <pvPortMalloc+0x18c>)
  35736. 800edac: 6013 str r3, [r2, #0]
  35737. if( xFreeBytesRemaining < xMinimumEverFreeBytesRemaining )
  35738. 800edae: 4b1a ldr r3, [pc, #104] @ (800ee18 <pvPortMalloc+0x18c>)
  35739. 800edb0: 681a ldr r2, [r3, #0]
  35740. 800edb2: 4b1b ldr r3, [pc, #108] @ (800ee20 <pvPortMalloc+0x194>)
  35741. 800edb4: 681b ldr r3, [r3, #0]
  35742. 800edb6: 429a cmp r2, r3
  35743. 800edb8: d203 bcs.n 800edc2 <pvPortMalloc+0x136>
  35744. {
  35745. xMinimumEverFreeBytesRemaining = xFreeBytesRemaining;
  35746. 800edba: 4b17 ldr r3, [pc, #92] @ (800ee18 <pvPortMalloc+0x18c>)
  35747. 800edbc: 681b ldr r3, [r3, #0]
  35748. 800edbe: 4a18 ldr r2, [pc, #96] @ (800ee20 <pvPortMalloc+0x194>)
  35749. 800edc0: 6013 str r3, [r2, #0]
  35750. mtCOVERAGE_TEST_MARKER();
  35751. }
  35752. /* The block is being returned - it is allocated and owned
  35753. by the application and has no "next" block. */
  35754. pxBlock->xBlockSize |= xBlockAllocatedBit;
  35755. 800edc2: 6a7b ldr r3, [r7, #36] @ 0x24
  35756. 800edc4: 685a ldr r2, [r3, #4]
  35757. 800edc6: 4b13 ldr r3, [pc, #76] @ (800ee14 <pvPortMalloc+0x188>)
  35758. 800edc8: 681b ldr r3, [r3, #0]
  35759. 800edca: 431a orrs r2, r3
  35760. 800edcc: 6a7b ldr r3, [r7, #36] @ 0x24
  35761. 800edce: 605a str r2, [r3, #4]
  35762. pxBlock->pxNextFreeBlock = NULL;
  35763. 800edd0: 6a7b ldr r3, [r7, #36] @ 0x24
  35764. 800edd2: 2200 movs r2, #0
  35765. 800edd4: 601a str r2, [r3, #0]
  35766. xNumberOfSuccessfulAllocations++;
  35767. 800edd6: 4b13 ldr r3, [pc, #76] @ (800ee24 <pvPortMalloc+0x198>)
  35768. 800edd8: 681b ldr r3, [r3, #0]
  35769. 800edda: 3301 adds r3, #1
  35770. 800eddc: 4a11 ldr r2, [pc, #68] @ (800ee24 <pvPortMalloc+0x198>)
  35771. 800edde: 6013 str r3, [r2, #0]
  35772. mtCOVERAGE_TEST_MARKER();
  35773. }
  35774. traceMALLOC( pvReturn, xWantedSize );
  35775. }
  35776. ( void ) xTaskResumeAll();
  35777. 800ede0: f7fe f968 bl 800d0b4 <xTaskResumeAll>
  35778. mtCOVERAGE_TEST_MARKER();
  35779. }
  35780. }
  35781. #endif
  35782. configASSERT( ( ( ( size_t ) pvReturn ) & ( size_t ) portBYTE_ALIGNMENT_MASK ) == 0 );
  35783. 800ede4: 69fb ldr r3, [r7, #28]
  35784. 800ede6: f003 0307 and.w r3, r3, #7
  35785. 800edea: 2b00 cmp r3, #0
  35786. 800edec: d00b beq.n 800ee06 <pvPortMalloc+0x17a>
  35787. __asm volatile
  35788. 800edee: f04f 0350 mov.w r3, #80 @ 0x50
  35789. 800edf2: f383 8811 msr BASEPRI, r3
  35790. 800edf6: f3bf 8f6f isb sy
  35791. 800edfa: f3bf 8f4f dsb sy
  35792. 800edfe: 60fb str r3, [r7, #12]
  35793. }
  35794. 800ee00: bf00 nop
  35795. 800ee02: bf00 nop
  35796. 800ee04: e7fd b.n 800ee02 <pvPortMalloc+0x176>
  35797. return pvReturn;
  35798. 800ee06: 69fb ldr r3, [r7, #28]
  35799. }
  35800. 800ee08: 4618 mov r0, r3
  35801. 800ee0a: 3728 adds r7, #40 @ 0x28
  35802. 800ee0c: 46bd mov sp, r7
  35803. 800ee0e: bd80 pop {r7, pc}
  35804. 800ee10: 24012764 .word 0x24012764
  35805. 800ee14: 24012778 .word 0x24012778
  35806. 800ee18: 24012768 .word 0x24012768
  35807. 800ee1c: 2401275c .word 0x2401275c
  35808. 800ee20: 2401276c .word 0x2401276c
  35809. 800ee24: 24012770 .word 0x24012770
  35810. 0800ee28 <vPortFree>:
  35811. /*-----------------------------------------------------------*/
  35812. void vPortFree( void *pv )
  35813. {
  35814. 800ee28: b580 push {r7, lr}
  35815. 800ee2a: b086 sub sp, #24
  35816. 800ee2c: af00 add r7, sp, #0
  35817. 800ee2e: 6078 str r0, [r7, #4]
  35818. uint8_t *puc = ( uint8_t * ) pv;
  35819. 800ee30: 687b ldr r3, [r7, #4]
  35820. 800ee32: 617b str r3, [r7, #20]
  35821. BlockLink_t *pxLink;
  35822. if( pv != NULL )
  35823. 800ee34: 687b ldr r3, [r7, #4]
  35824. 800ee36: 2b00 cmp r3, #0
  35825. 800ee38: d04f beq.n 800eeda <vPortFree+0xb2>
  35826. {
  35827. /* The memory being freed will have an BlockLink_t structure immediately
  35828. before it. */
  35829. puc -= xHeapStructSize;
  35830. 800ee3a: 2308 movs r3, #8
  35831. 800ee3c: 425b negs r3, r3
  35832. 800ee3e: 697a ldr r2, [r7, #20]
  35833. 800ee40: 4413 add r3, r2
  35834. 800ee42: 617b str r3, [r7, #20]
  35835. /* This casting is to keep the compiler from issuing warnings. */
  35836. pxLink = ( void * ) puc;
  35837. 800ee44: 697b ldr r3, [r7, #20]
  35838. 800ee46: 613b str r3, [r7, #16]
  35839. /* Check the block is actually allocated. */
  35840. configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 );
  35841. 800ee48: 693b ldr r3, [r7, #16]
  35842. 800ee4a: 685a ldr r2, [r3, #4]
  35843. 800ee4c: 4b25 ldr r3, [pc, #148] @ (800eee4 <vPortFree+0xbc>)
  35844. 800ee4e: 681b ldr r3, [r3, #0]
  35845. 800ee50: 4013 ands r3, r2
  35846. 800ee52: 2b00 cmp r3, #0
  35847. 800ee54: d10b bne.n 800ee6e <vPortFree+0x46>
  35848. __asm volatile
  35849. 800ee56: f04f 0350 mov.w r3, #80 @ 0x50
  35850. 800ee5a: f383 8811 msr BASEPRI, r3
  35851. 800ee5e: f3bf 8f6f isb sy
  35852. 800ee62: f3bf 8f4f dsb sy
  35853. 800ee66: 60fb str r3, [r7, #12]
  35854. }
  35855. 800ee68: bf00 nop
  35856. 800ee6a: bf00 nop
  35857. 800ee6c: e7fd b.n 800ee6a <vPortFree+0x42>
  35858. configASSERT( pxLink->pxNextFreeBlock == NULL );
  35859. 800ee6e: 693b ldr r3, [r7, #16]
  35860. 800ee70: 681b ldr r3, [r3, #0]
  35861. 800ee72: 2b00 cmp r3, #0
  35862. 800ee74: d00b beq.n 800ee8e <vPortFree+0x66>
  35863. __asm volatile
  35864. 800ee76: f04f 0350 mov.w r3, #80 @ 0x50
  35865. 800ee7a: f383 8811 msr BASEPRI, r3
  35866. 800ee7e: f3bf 8f6f isb sy
  35867. 800ee82: f3bf 8f4f dsb sy
  35868. 800ee86: 60bb str r3, [r7, #8]
  35869. }
  35870. 800ee88: bf00 nop
  35871. 800ee8a: bf00 nop
  35872. 800ee8c: e7fd b.n 800ee8a <vPortFree+0x62>
  35873. if( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 )
  35874. 800ee8e: 693b ldr r3, [r7, #16]
  35875. 800ee90: 685a ldr r2, [r3, #4]
  35876. 800ee92: 4b14 ldr r3, [pc, #80] @ (800eee4 <vPortFree+0xbc>)
  35877. 800ee94: 681b ldr r3, [r3, #0]
  35878. 800ee96: 4013 ands r3, r2
  35879. 800ee98: 2b00 cmp r3, #0
  35880. 800ee9a: d01e beq.n 800eeda <vPortFree+0xb2>
  35881. {
  35882. if( pxLink->pxNextFreeBlock == NULL )
  35883. 800ee9c: 693b ldr r3, [r7, #16]
  35884. 800ee9e: 681b ldr r3, [r3, #0]
  35885. 800eea0: 2b00 cmp r3, #0
  35886. 800eea2: d11a bne.n 800eeda <vPortFree+0xb2>
  35887. {
  35888. /* The block is being returned to the heap - it is no longer
  35889. allocated. */
  35890. pxLink->xBlockSize &= ~xBlockAllocatedBit;
  35891. 800eea4: 693b ldr r3, [r7, #16]
  35892. 800eea6: 685a ldr r2, [r3, #4]
  35893. 800eea8: 4b0e ldr r3, [pc, #56] @ (800eee4 <vPortFree+0xbc>)
  35894. 800eeaa: 681b ldr r3, [r3, #0]
  35895. 800eeac: 43db mvns r3, r3
  35896. 800eeae: 401a ands r2, r3
  35897. 800eeb0: 693b ldr r3, [r7, #16]
  35898. 800eeb2: 605a str r2, [r3, #4]
  35899. vTaskSuspendAll();
  35900. 800eeb4: f7fe f8f0 bl 800d098 <vTaskSuspendAll>
  35901. {
  35902. /* Add this block to the list of free blocks. */
  35903. xFreeBytesRemaining += pxLink->xBlockSize;
  35904. 800eeb8: 693b ldr r3, [r7, #16]
  35905. 800eeba: 685a ldr r2, [r3, #4]
  35906. 800eebc: 4b0a ldr r3, [pc, #40] @ (800eee8 <vPortFree+0xc0>)
  35907. 800eebe: 681b ldr r3, [r3, #0]
  35908. 800eec0: 4413 add r3, r2
  35909. 800eec2: 4a09 ldr r2, [pc, #36] @ (800eee8 <vPortFree+0xc0>)
  35910. 800eec4: 6013 str r3, [r2, #0]
  35911. traceFREE( pv, pxLink->xBlockSize );
  35912. prvInsertBlockIntoFreeList( ( ( BlockLink_t * ) pxLink ) );
  35913. 800eec6: 6938 ldr r0, [r7, #16]
  35914. 800eec8: f000 f874 bl 800efb4 <prvInsertBlockIntoFreeList>
  35915. xNumberOfSuccessfulFrees++;
  35916. 800eecc: 4b07 ldr r3, [pc, #28] @ (800eeec <vPortFree+0xc4>)
  35917. 800eece: 681b ldr r3, [r3, #0]
  35918. 800eed0: 3301 adds r3, #1
  35919. 800eed2: 4a06 ldr r2, [pc, #24] @ (800eeec <vPortFree+0xc4>)
  35920. 800eed4: 6013 str r3, [r2, #0]
  35921. }
  35922. ( void ) xTaskResumeAll();
  35923. 800eed6: f7fe f8ed bl 800d0b4 <xTaskResumeAll>
  35924. else
  35925. {
  35926. mtCOVERAGE_TEST_MARKER();
  35927. }
  35928. }
  35929. }
  35930. 800eeda: bf00 nop
  35931. 800eedc: 3718 adds r7, #24
  35932. 800eede: 46bd mov sp, r7
  35933. 800eee0: bd80 pop {r7, pc}
  35934. 800eee2: bf00 nop
  35935. 800eee4: 24012778 .word 0x24012778
  35936. 800eee8: 24012768 .word 0x24012768
  35937. 800eeec: 24012774 .word 0x24012774
  35938. 0800eef0 <prvHeapInit>:
  35939. /* This just exists to keep the linker quiet. */
  35940. }
  35941. /*-----------------------------------------------------------*/
  35942. static void prvHeapInit( void )
  35943. {
  35944. 800eef0: b480 push {r7}
  35945. 800eef2: b085 sub sp, #20
  35946. 800eef4: af00 add r7, sp, #0
  35947. BlockLink_t *pxFirstFreeBlock;
  35948. uint8_t *pucAlignedHeap;
  35949. size_t uxAddress;
  35950. size_t xTotalHeapSize = configTOTAL_HEAP_SIZE;
  35951. 800eef6: f44f 3380 mov.w r3, #65536 @ 0x10000
  35952. 800eefa: 60bb str r3, [r7, #8]
  35953. /* Ensure the heap starts on a correctly aligned boundary. */
  35954. uxAddress = ( size_t ) ucHeap;
  35955. 800eefc: 4b27 ldr r3, [pc, #156] @ (800ef9c <prvHeapInit+0xac>)
  35956. 800eefe: 60fb str r3, [r7, #12]
  35957. if( ( uxAddress & portBYTE_ALIGNMENT_MASK ) != 0 )
  35958. 800ef00: 68fb ldr r3, [r7, #12]
  35959. 800ef02: f003 0307 and.w r3, r3, #7
  35960. 800ef06: 2b00 cmp r3, #0
  35961. 800ef08: d00c beq.n 800ef24 <prvHeapInit+0x34>
  35962. {
  35963. uxAddress += ( portBYTE_ALIGNMENT - 1 );
  35964. 800ef0a: 68fb ldr r3, [r7, #12]
  35965. 800ef0c: 3307 adds r3, #7
  35966. 800ef0e: 60fb str r3, [r7, #12]
  35967. uxAddress &= ~( ( size_t ) portBYTE_ALIGNMENT_MASK );
  35968. 800ef10: 68fb ldr r3, [r7, #12]
  35969. 800ef12: f023 0307 bic.w r3, r3, #7
  35970. 800ef16: 60fb str r3, [r7, #12]
  35971. xTotalHeapSize -= uxAddress - ( size_t ) ucHeap;
  35972. 800ef18: 68ba ldr r2, [r7, #8]
  35973. 800ef1a: 68fb ldr r3, [r7, #12]
  35974. 800ef1c: 1ad3 subs r3, r2, r3
  35975. 800ef1e: 4a1f ldr r2, [pc, #124] @ (800ef9c <prvHeapInit+0xac>)
  35976. 800ef20: 4413 add r3, r2
  35977. 800ef22: 60bb str r3, [r7, #8]
  35978. }
  35979. pucAlignedHeap = ( uint8_t * ) uxAddress;
  35980. 800ef24: 68fb ldr r3, [r7, #12]
  35981. 800ef26: 607b str r3, [r7, #4]
  35982. /* xStart is used to hold a pointer to the first item in the list of free
  35983. blocks. The void cast is used to prevent compiler warnings. */
  35984. xStart.pxNextFreeBlock = ( void * ) pucAlignedHeap;
  35985. 800ef28: 4a1d ldr r2, [pc, #116] @ (800efa0 <prvHeapInit+0xb0>)
  35986. 800ef2a: 687b ldr r3, [r7, #4]
  35987. 800ef2c: 6013 str r3, [r2, #0]
  35988. xStart.xBlockSize = ( size_t ) 0;
  35989. 800ef2e: 4b1c ldr r3, [pc, #112] @ (800efa0 <prvHeapInit+0xb0>)
  35990. 800ef30: 2200 movs r2, #0
  35991. 800ef32: 605a str r2, [r3, #4]
  35992. /* pxEnd is used to mark the end of the list of free blocks and is inserted
  35993. at the end of the heap space. */
  35994. uxAddress = ( ( size_t ) pucAlignedHeap ) + xTotalHeapSize;
  35995. 800ef34: 687b ldr r3, [r7, #4]
  35996. 800ef36: 68ba ldr r2, [r7, #8]
  35997. 800ef38: 4413 add r3, r2
  35998. 800ef3a: 60fb str r3, [r7, #12]
  35999. uxAddress -= xHeapStructSize;
  36000. 800ef3c: 2208 movs r2, #8
  36001. 800ef3e: 68fb ldr r3, [r7, #12]
  36002. 800ef40: 1a9b subs r3, r3, r2
  36003. 800ef42: 60fb str r3, [r7, #12]
  36004. uxAddress &= ~( ( size_t ) portBYTE_ALIGNMENT_MASK );
  36005. 800ef44: 68fb ldr r3, [r7, #12]
  36006. 800ef46: f023 0307 bic.w r3, r3, #7
  36007. 800ef4a: 60fb str r3, [r7, #12]
  36008. pxEnd = ( void * ) uxAddress;
  36009. 800ef4c: 68fb ldr r3, [r7, #12]
  36010. 800ef4e: 4a15 ldr r2, [pc, #84] @ (800efa4 <prvHeapInit+0xb4>)
  36011. 800ef50: 6013 str r3, [r2, #0]
  36012. pxEnd->xBlockSize = 0;
  36013. 800ef52: 4b14 ldr r3, [pc, #80] @ (800efa4 <prvHeapInit+0xb4>)
  36014. 800ef54: 681b ldr r3, [r3, #0]
  36015. 800ef56: 2200 movs r2, #0
  36016. 800ef58: 605a str r2, [r3, #4]
  36017. pxEnd->pxNextFreeBlock = NULL;
  36018. 800ef5a: 4b12 ldr r3, [pc, #72] @ (800efa4 <prvHeapInit+0xb4>)
  36019. 800ef5c: 681b ldr r3, [r3, #0]
  36020. 800ef5e: 2200 movs r2, #0
  36021. 800ef60: 601a str r2, [r3, #0]
  36022. /* To start with there is a single free block that is sized to take up the
  36023. entire heap space, minus the space taken by pxEnd. */
  36024. pxFirstFreeBlock = ( void * ) pucAlignedHeap;
  36025. 800ef62: 687b ldr r3, [r7, #4]
  36026. 800ef64: 603b str r3, [r7, #0]
  36027. pxFirstFreeBlock->xBlockSize = uxAddress - ( size_t ) pxFirstFreeBlock;
  36028. 800ef66: 683b ldr r3, [r7, #0]
  36029. 800ef68: 68fa ldr r2, [r7, #12]
  36030. 800ef6a: 1ad2 subs r2, r2, r3
  36031. 800ef6c: 683b ldr r3, [r7, #0]
  36032. 800ef6e: 605a str r2, [r3, #4]
  36033. pxFirstFreeBlock->pxNextFreeBlock = pxEnd;
  36034. 800ef70: 4b0c ldr r3, [pc, #48] @ (800efa4 <prvHeapInit+0xb4>)
  36035. 800ef72: 681a ldr r2, [r3, #0]
  36036. 800ef74: 683b ldr r3, [r7, #0]
  36037. 800ef76: 601a str r2, [r3, #0]
  36038. /* Only one block exists - and it covers the entire usable heap space. */
  36039. xMinimumEverFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
  36040. 800ef78: 683b ldr r3, [r7, #0]
  36041. 800ef7a: 685b ldr r3, [r3, #4]
  36042. 800ef7c: 4a0a ldr r2, [pc, #40] @ (800efa8 <prvHeapInit+0xb8>)
  36043. 800ef7e: 6013 str r3, [r2, #0]
  36044. xFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
  36045. 800ef80: 683b ldr r3, [r7, #0]
  36046. 800ef82: 685b ldr r3, [r3, #4]
  36047. 800ef84: 4a09 ldr r2, [pc, #36] @ (800efac <prvHeapInit+0xbc>)
  36048. 800ef86: 6013 str r3, [r2, #0]
  36049. /* Work out the position of the top bit in a size_t variable. */
  36050. xBlockAllocatedBit = ( ( size_t ) 1 ) << ( ( sizeof( size_t ) * heapBITS_PER_BYTE ) - 1 );
  36051. 800ef88: 4b09 ldr r3, [pc, #36] @ (800efb0 <prvHeapInit+0xc0>)
  36052. 800ef8a: f04f 4200 mov.w r2, #2147483648 @ 0x80000000
  36053. 800ef8e: 601a str r2, [r3, #0]
  36054. }
  36055. 800ef90: bf00 nop
  36056. 800ef92: 3714 adds r7, #20
  36057. 800ef94: 46bd mov sp, r7
  36058. 800ef96: f85d 7b04 ldr.w r7, [sp], #4
  36059. 800ef9a: 4770 bx lr
  36060. 800ef9c: 2400275c .word 0x2400275c
  36061. 800efa0: 2401275c .word 0x2401275c
  36062. 800efa4: 24012764 .word 0x24012764
  36063. 800efa8: 2401276c .word 0x2401276c
  36064. 800efac: 24012768 .word 0x24012768
  36065. 800efb0: 24012778 .word 0x24012778
  36066. 0800efb4 <prvInsertBlockIntoFreeList>:
  36067. /*-----------------------------------------------------------*/
  36068. static void prvInsertBlockIntoFreeList( BlockLink_t *pxBlockToInsert )
  36069. {
  36070. 800efb4: b480 push {r7}
  36071. 800efb6: b085 sub sp, #20
  36072. 800efb8: af00 add r7, sp, #0
  36073. 800efba: 6078 str r0, [r7, #4]
  36074. BlockLink_t *pxIterator;
  36075. uint8_t *puc;
  36076. /* Iterate through the list until a block is found that has a higher address
  36077. than the block being inserted. */
  36078. for( pxIterator = &xStart; pxIterator->pxNextFreeBlock < pxBlockToInsert; pxIterator = pxIterator->pxNextFreeBlock )
  36079. 800efbc: 4b28 ldr r3, [pc, #160] @ (800f060 <prvInsertBlockIntoFreeList+0xac>)
  36080. 800efbe: 60fb str r3, [r7, #12]
  36081. 800efc0: e002 b.n 800efc8 <prvInsertBlockIntoFreeList+0x14>
  36082. 800efc2: 68fb ldr r3, [r7, #12]
  36083. 800efc4: 681b ldr r3, [r3, #0]
  36084. 800efc6: 60fb str r3, [r7, #12]
  36085. 800efc8: 68fb ldr r3, [r7, #12]
  36086. 800efca: 681b ldr r3, [r3, #0]
  36087. 800efcc: 687a ldr r2, [r7, #4]
  36088. 800efce: 429a cmp r2, r3
  36089. 800efd0: d8f7 bhi.n 800efc2 <prvInsertBlockIntoFreeList+0xe>
  36090. /* Nothing to do here, just iterate to the right position. */
  36091. }
  36092. /* Do the block being inserted, and the block it is being inserted after
  36093. make a contiguous block of memory? */
  36094. puc = ( uint8_t * ) pxIterator;
  36095. 800efd2: 68fb ldr r3, [r7, #12]
  36096. 800efd4: 60bb str r3, [r7, #8]
  36097. if( ( puc + pxIterator->xBlockSize ) == ( uint8_t * ) pxBlockToInsert )
  36098. 800efd6: 68fb ldr r3, [r7, #12]
  36099. 800efd8: 685b ldr r3, [r3, #4]
  36100. 800efda: 68ba ldr r2, [r7, #8]
  36101. 800efdc: 4413 add r3, r2
  36102. 800efde: 687a ldr r2, [r7, #4]
  36103. 800efe0: 429a cmp r2, r3
  36104. 800efe2: d108 bne.n 800eff6 <prvInsertBlockIntoFreeList+0x42>
  36105. {
  36106. pxIterator->xBlockSize += pxBlockToInsert->xBlockSize;
  36107. 800efe4: 68fb ldr r3, [r7, #12]
  36108. 800efe6: 685a ldr r2, [r3, #4]
  36109. 800efe8: 687b ldr r3, [r7, #4]
  36110. 800efea: 685b ldr r3, [r3, #4]
  36111. 800efec: 441a add r2, r3
  36112. 800efee: 68fb ldr r3, [r7, #12]
  36113. 800eff0: 605a str r2, [r3, #4]
  36114. pxBlockToInsert = pxIterator;
  36115. 800eff2: 68fb ldr r3, [r7, #12]
  36116. 800eff4: 607b str r3, [r7, #4]
  36117. mtCOVERAGE_TEST_MARKER();
  36118. }
  36119. /* Do the block being inserted, and the block it is being inserted before
  36120. make a contiguous block of memory? */
  36121. puc = ( uint8_t * ) pxBlockToInsert;
  36122. 800eff6: 687b ldr r3, [r7, #4]
  36123. 800eff8: 60bb str r3, [r7, #8]
  36124. if( ( puc + pxBlockToInsert->xBlockSize ) == ( uint8_t * ) pxIterator->pxNextFreeBlock )
  36125. 800effa: 687b ldr r3, [r7, #4]
  36126. 800effc: 685b ldr r3, [r3, #4]
  36127. 800effe: 68ba ldr r2, [r7, #8]
  36128. 800f000: 441a add r2, r3
  36129. 800f002: 68fb ldr r3, [r7, #12]
  36130. 800f004: 681b ldr r3, [r3, #0]
  36131. 800f006: 429a cmp r2, r3
  36132. 800f008: d118 bne.n 800f03c <prvInsertBlockIntoFreeList+0x88>
  36133. {
  36134. if( pxIterator->pxNextFreeBlock != pxEnd )
  36135. 800f00a: 68fb ldr r3, [r7, #12]
  36136. 800f00c: 681a ldr r2, [r3, #0]
  36137. 800f00e: 4b15 ldr r3, [pc, #84] @ (800f064 <prvInsertBlockIntoFreeList+0xb0>)
  36138. 800f010: 681b ldr r3, [r3, #0]
  36139. 800f012: 429a cmp r2, r3
  36140. 800f014: d00d beq.n 800f032 <prvInsertBlockIntoFreeList+0x7e>
  36141. {
  36142. /* Form one big block from the two blocks. */
  36143. pxBlockToInsert->xBlockSize += pxIterator->pxNextFreeBlock->xBlockSize;
  36144. 800f016: 687b ldr r3, [r7, #4]
  36145. 800f018: 685a ldr r2, [r3, #4]
  36146. 800f01a: 68fb ldr r3, [r7, #12]
  36147. 800f01c: 681b ldr r3, [r3, #0]
  36148. 800f01e: 685b ldr r3, [r3, #4]
  36149. 800f020: 441a add r2, r3
  36150. 800f022: 687b ldr r3, [r7, #4]
  36151. 800f024: 605a str r2, [r3, #4]
  36152. pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock->pxNextFreeBlock;
  36153. 800f026: 68fb ldr r3, [r7, #12]
  36154. 800f028: 681b ldr r3, [r3, #0]
  36155. 800f02a: 681a ldr r2, [r3, #0]
  36156. 800f02c: 687b ldr r3, [r7, #4]
  36157. 800f02e: 601a str r2, [r3, #0]
  36158. 800f030: e008 b.n 800f044 <prvInsertBlockIntoFreeList+0x90>
  36159. }
  36160. else
  36161. {
  36162. pxBlockToInsert->pxNextFreeBlock = pxEnd;
  36163. 800f032: 4b0c ldr r3, [pc, #48] @ (800f064 <prvInsertBlockIntoFreeList+0xb0>)
  36164. 800f034: 681a ldr r2, [r3, #0]
  36165. 800f036: 687b ldr r3, [r7, #4]
  36166. 800f038: 601a str r2, [r3, #0]
  36167. 800f03a: e003 b.n 800f044 <prvInsertBlockIntoFreeList+0x90>
  36168. }
  36169. }
  36170. else
  36171. {
  36172. pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock;
  36173. 800f03c: 68fb ldr r3, [r7, #12]
  36174. 800f03e: 681a ldr r2, [r3, #0]
  36175. 800f040: 687b ldr r3, [r7, #4]
  36176. 800f042: 601a str r2, [r3, #0]
  36177. /* If the block being inserted plugged a gab, so was merged with the block
  36178. before and the block after, then it's pxNextFreeBlock pointer will have
  36179. already been set, and should not be set here as that would make it point
  36180. to itself. */
  36181. if( pxIterator != pxBlockToInsert )
  36182. 800f044: 68fa ldr r2, [r7, #12]
  36183. 800f046: 687b ldr r3, [r7, #4]
  36184. 800f048: 429a cmp r2, r3
  36185. 800f04a: d002 beq.n 800f052 <prvInsertBlockIntoFreeList+0x9e>
  36186. {
  36187. pxIterator->pxNextFreeBlock = pxBlockToInsert;
  36188. 800f04c: 68fb ldr r3, [r7, #12]
  36189. 800f04e: 687a ldr r2, [r7, #4]
  36190. 800f050: 601a str r2, [r3, #0]
  36191. }
  36192. else
  36193. {
  36194. mtCOVERAGE_TEST_MARKER();
  36195. }
  36196. }
  36197. 800f052: bf00 nop
  36198. 800f054: 3714 adds r7, #20
  36199. 800f056: 46bd mov sp, r7
  36200. 800f058: f85d 7b04 ldr.w r7, [sp], #4
  36201. 800f05c: 4770 bx lr
  36202. 800f05e: bf00 nop
  36203. 800f060: 2401275c .word 0x2401275c
  36204. 800f064: 24012764 .word 0x24012764
  36205. 0800f068 <std>:
  36206. 800f068: 2300 movs r3, #0
  36207. 800f06a: b510 push {r4, lr}
  36208. 800f06c: 4604 mov r4, r0
  36209. 800f06e: e9c0 3300 strd r3, r3, [r0]
  36210. 800f072: e9c0 3304 strd r3, r3, [r0, #16]
  36211. 800f076: 6083 str r3, [r0, #8]
  36212. 800f078: 8181 strh r1, [r0, #12]
  36213. 800f07a: 6643 str r3, [r0, #100] @ 0x64
  36214. 800f07c: 81c2 strh r2, [r0, #14]
  36215. 800f07e: 6183 str r3, [r0, #24]
  36216. 800f080: 4619 mov r1, r3
  36217. 800f082: 2208 movs r2, #8
  36218. 800f084: 305c adds r0, #92 @ 0x5c
  36219. 800f086: f000 f906 bl 800f296 <memset>
  36220. 800f08a: 4b0d ldr r3, [pc, #52] @ (800f0c0 <std+0x58>)
  36221. 800f08c: 6263 str r3, [r4, #36] @ 0x24
  36222. 800f08e: 4b0d ldr r3, [pc, #52] @ (800f0c4 <std+0x5c>)
  36223. 800f090: 62a3 str r3, [r4, #40] @ 0x28
  36224. 800f092: 4b0d ldr r3, [pc, #52] @ (800f0c8 <std+0x60>)
  36225. 800f094: 62e3 str r3, [r4, #44] @ 0x2c
  36226. 800f096: 4b0d ldr r3, [pc, #52] @ (800f0cc <std+0x64>)
  36227. 800f098: 6323 str r3, [r4, #48] @ 0x30
  36228. 800f09a: 4b0d ldr r3, [pc, #52] @ (800f0d0 <std+0x68>)
  36229. 800f09c: 6224 str r4, [r4, #32]
  36230. 800f09e: 429c cmp r4, r3
  36231. 800f0a0: d006 beq.n 800f0b0 <std+0x48>
  36232. 800f0a2: f103 0268 add.w r2, r3, #104 @ 0x68
  36233. 800f0a6: 4294 cmp r4, r2
  36234. 800f0a8: d002 beq.n 800f0b0 <std+0x48>
  36235. 800f0aa: 33d0 adds r3, #208 @ 0xd0
  36236. 800f0ac: 429c cmp r4, r3
  36237. 800f0ae: d105 bne.n 800f0bc <std+0x54>
  36238. 800f0b0: f104 0058 add.w r0, r4, #88 @ 0x58
  36239. 800f0b4: e8bd 4010 ldmia.w sp!, {r4, lr}
  36240. 800f0b8: f000 b9bc b.w 800f434 <__retarget_lock_init_recursive>
  36241. 800f0bc: bd10 pop {r4, pc}
  36242. 800f0be: bf00 nop
  36243. 800f0c0: 0800f211 .word 0x0800f211
  36244. 800f0c4: 0800f233 .word 0x0800f233
  36245. 800f0c8: 0800f26b .word 0x0800f26b
  36246. 800f0cc: 0800f28f .word 0x0800f28f
  36247. 800f0d0: 2401277c .word 0x2401277c
  36248. 0800f0d4 <stdio_exit_handler>:
  36249. 800f0d4: 4a02 ldr r2, [pc, #8] @ (800f0e0 <stdio_exit_handler+0xc>)
  36250. 800f0d6: 4903 ldr r1, [pc, #12] @ (800f0e4 <stdio_exit_handler+0x10>)
  36251. 800f0d8: 4803 ldr r0, [pc, #12] @ (800f0e8 <stdio_exit_handler+0x14>)
  36252. 800f0da: f000 b869 b.w 800f1b0 <_fwalk_sglue>
  36253. 800f0de: bf00 nop
  36254. 800f0e0: 24000014 .word 0x24000014
  36255. 800f0e4: 0800fcf1 .word 0x0800fcf1
  36256. 800f0e8: 24000024 .word 0x24000024
  36257. 0800f0ec <cleanup_stdio>:
  36258. 800f0ec: 6841 ldr r1, [r0, #4]
  36259. 800f0ee: 4b0c ldr r3, [pc, #48] @ (800f120 <cleanup_stdio+0x34>)
  36260. 800f0f0: 4299 cmp r1, r3
  36261. 800f0f2: b510 push {r4, lr}
  36262. 800f0f4: 4604 mov r4, r0
  36263. 800f0f6: d001 beq.n 800f0fc <cleanup_stdio+0x10>
  36264. 800f0f8: f000 fdfa bl 800fcf0 <_fflush_r>
  36265. 800f0fc: 68a1 ldr r1, [r4, #8]
  36266. 800f0fe: 4b09 ldr r3, [pc, #36] @ (800f124 <cleanup_stdio+0x38>)
  36267. 800f100: 4299 cmp r1, r3
  36268. 800f102: d002 beq.n 800f10a <cleanup_stdio+0x1e>
  36269. 800f104: 4620 mov r0, r4
  36270. 800f106: f000 fdf3 bl 800fcf0 <_fflush_r>
  36271. 800f10a: 68e1 ldr r1, [r4, #12]
  36272. 800f10c: 4b06 ldr r3, [pc, #24] @ (800f128 <cleanup_stdio+0x3c>)
  36273. 800f10e: 4299 cmp r1, r3
  36274. 800f110: d004 beq.n 800f11c <cleanup_stdio+0x30>
  36275. 800f112: 4620 mov r0, r4
  36276. 800f114: e8bd 4010 ldmia.w sp!, {r4, lr}
  36277. 800f118: f000 bdea b.w 800fcf0 <_fflush_r>
  36278. 800f11c: bd10 pop {r4, pc}
  36279. 800f11e: bf00 nop
  36280. 800f120: 2401277c .word 0x2401277c
  36281. 800f124: 240127e4 .word 0x240127e4
  36282. 800f128: 2401284c .word 0x2401284c
  36283. 0800f12c <global_stdio_init.part.0>:
  36284. 800f12c: b510 push {r4, lr}
  36285. 800f12e: 4b0b ldr r3, [pc, #44] @ (800f15c <global_stdio_init.part.0+0x30>)
  36286. 800f130: 4c0b ldr r4, [pc, #44] @ (800f160 <global_stdio_init.part.0+0x34>)
  36287. 800f132: 4a0c ldr r2, [pc, #48] @ (800f164 <global_stdio_init.part.0+0x38>)
  36288. 800f134: 601a str r2, [r3, #0]
  36289. 800f136: 4620 mov r0, r4
  36290. 800f138: 2200 movs r2, #0
  36291. 800f13a: 2104 movs r1, #4
  36292. 800f13c: f7ff ff94 bl 800f068 <std>
  36293. 800f140: f104 0068 add.w r0, r4, #104 @ 0x68
  36294. 800f144: 2201 movs r2, #1
  36295. 800f146: 2109 movs r1, #9
  36296. 800f148: f7ff ff8e bl 800f068 <std>
  36297. 800f14c: f104 00d0 add.w r0, r4, #208 @ 0xd0
  36298. 800f150: 2202 movs r2, #2
  36299. 800f152: e8bd 4010 ldmia.w sp!, {r4, lr}
  36300. 800f156: 2112 movs r1, #18
  36301. 800f158: f7ff bf86 b.w 800f068 <std>
  36302. 800f15c: 240128b4 .word 0x240128b4
  36303. 800f160: 2401277c .word 0x2401277c
  36304. 800f164: 0800f0d5 .word 0x0800f0d5
  36305. 0800f168 <__sfp_lock_acquire>:
  36306. 800f168: 4801 ldr r0, [pc, #4] @ (800f170 <__sfp_lock_acquire+0x8>)
  36307. 800f16a: f000 b964 b.w 800f436 <__retarget_lock_acquire_recursive>
  36308. 800f16e: bf00 nop
  36309. 800f170: 240128bd .word 0x240128bd
  36310. 0800f174 <__sfp_lock_release>:
  36311. 800f174: 4801 ldr r0, [pc, #4] @ (800f17c <__sfp_lock_release+0x8>)
  36312. 800f176: f000 b95f b.w 800f438 <__retarget_lock_release_recursive>
  36313. 800f17a: bf00 nop
  36314. 800f17c: 240128bd .word 0x240128bd
  36315. 0800f180 <__sinit>:
  36316. 800f180: b510 push {r4, lr}
  36317. 800f182: 4604 mov r4, r0
  36318. 800f184: f7ff fff0 bl 800f168 <__sfp_lock_acquire>
  36319. 800f188: 6a23 ldr r3, [r4, #32]
  36320. 800f18a: b11b cbz r3, 800f194 <__sinit+0x14>
  36321. 800f18c: e8bd 4010 ldmia.w sp!, {r4, lr}
  36322. 800f190: f7ff bff0 b.w 800f174 <__sfp_lock_release>
  36323. 800f194: 4b04 ldr r3, [pc, #16] @ (800f1a8 <__sinit+0x28>)
  36324. 800f196: 6223 str r3, [r4, #32]
  36325. 800f198: 4b04 ldr r3, [pc, #16] @ (800f1ac <__sinit+0x2c>)
  36326. 800f19a: 681b ldr r3, [r3, #0]
  36327. 800f19c: 2b00 cmp r3, #0
  36328. 800f19e: d1f5 bne.n 800f18c <__sinit+0xc>
  36329. 800f1a0: f7ff ffc4 bl 800f12c <global_stdio_init.part.0>
  36330. 800f1a4: e7f2 b.n 800f18c <__sinit+0xc>
  36331. 800f1a6: bf00 nop
  36332. 800f1a8: 0800f0ed .word 0x0800f0ed
  36333. 800f1ac: 240128b4 .word 0x240128b4
  36334. 0800f1b0 <_fwalk_sglue>:
  36335. 800f1b0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
  36336. 800f1b4: 4607 mov r7, r0
  36337. 800f1b6: 4688 mov r8, r1
  36338. 800f1b8: 4614 mov r4, r2
  36339. 800f1ba: 2600 movs r6, #0
  36340. 800f1bc: e9d4 9501 ldrd r9, r5, [r4, #4]
  36341. 800f1c0: f1b9 0901 subs.w r9, r9, #1
  36342. 800f1c4: d505 bpl.n 800f1d2 <_fwalk_sglue+0x22>
  36343. 800f1c6: 6824 ldr r4, [r4, #0]
  36344. 800f1c8: 2c00 cmp r4, #0
  36345. 800f1ca: d1f7 bne.n 800f1bc <_fwalk_sglue+0xc>
  36346. 800f1cc: 4630 mov r0, r6
  36347. 800f1ce: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
  36348. 800f1d2: 89ab ldrh r3, [r5, #12]
  36349. 800f1d4: 2b01 cmp r3, #1
  36350. 800f1d6: d907 bls.n 800f1e8 <_fwalk_sglue+0x38>
  36351. 800f1d8: f9b5 300e ldrsh.w r3, [r5, #14]
  36352. 800f1dc: 3301 adds r3, #1
  36353. 800f1de: d003 beq.n 800f1e8 <_fwalk_sglue+0x38>
  36354. 800f1e0: 4629 mov r1, r5
  36355. 800f1e2: 4638 mov r0, r7
  36356. 800f1e4: 47c0 blx r8
  36357. 800f1e6: 4306 orrs r6, r0
  36358. 800f1e8: 3568 adds r5, #104 @ 0x68
  36359. 800f1ea: e7e9 b.n 800f1c0 <_fwalk_sglue+0x10>
  36360. 0800f1ec <iprintf>:
  36361. 800f1ec: b40f push {r0, r1, r2, r3}
  36362. 800f1ee: b507 push {r0, r1, r2, lr}
  36363. 800f1f0: 4906 ldr r1, [pc, #24] @ (800f20c <iprintf+0x20>)
  36364. 800f1f2: ab04 add r3, sp, #16
  36365. 800f1f4: 6808 ldr r0, [r1, #0]
  36366. 800f1f6: f853 2b04 ldr.w r2, [r3], #4
  36367. 800f1fa: 6881 ldr r1, [r0, #8]
  36368. 800f1fc: 9301 str r3, [sp, #4]
  36369. 800f1fe: f000 fa4d bl 800f69c <_vfiprintf_r>
  36370. 800f202: b003 add sp, #12
  36371. 800f204: f85d eb04 ldr.w lr, [sp], #4
  36372. 800f208: b004 add sp, #16
  36373. 800f20a: 4770 bx lr
  36374. 800f20c: 24000020 .word 0x24000020
  36375. 0800f210 <__sread>:
  36376. 800f210: b510 push {r4, lr}
  36377. 800f212: 460c mov r4, r1
  36378. 800f214: f9b1 100e ldrsh.w r1, [r1, #14]
  36379. 800f218: f000 f8be bl 800f398 <_read_r>
  36380. 800f21c: 2800 cmp r0, #0
  36381. 800f21e: bfab itete ge
  36382. 800f220: 6d63 ldrge r3, [r4, #84] @ 0x54
  36383. 800f222: 89a3 ldrhlt r3, [r4, #12]
  36384. 800f224: 181b addge r3, r3, r0
  36385. 800f226: f423 5380 biclt.w r3, r3, #4096 @ 0x1000
  36386. 800f22a: bfac ite ge
  36387. 800f22c: 6563 strge r3, [r4, #84] @ 0x54
  36388. 800f22e: 81a3 strhlt r3, [r4, #12]
  36389. 800f230: bd10 pop {r4, pc}
  36390. 0800f232 <__swrite>:
  36391. 800f232: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
  36392. 800f236: 461f mov r7, r3
  36393. 800f238: 898b ldrh r3, [r1, #12]
  36394. 800f23a: 05db lsls r3, r3, #23
  36395. 800f23c: 4605 mov r5, r0
  36396. 800f23e: 460c mov r4, r1
  36397. 800f240: 4616 mov r6, r2
  36398. 800f242: d505 bpl.n 800f250 <__swrite+0x1e>
  36399. 800f244: f9b1 100e ldrsh.w r1, [r1, #14]
  36400. 800f248: 2302 movs r3, #2
  36401. 800f24a: 2200 movs r2, #0
  36402. 800f24c: f000 f892 bl 800f374 <_lseek_r>
  36403. 800f250: 89a3 ldrh r3, [r4, #12]
  36404. 800f252: f9b4 100e ldrsh.w r1, [r4, #14]
  36405. 800f256: f423 5380 bic.w r3, r3, #4096 @ 0x1000
  36406. 800f25a: 81a3 strh r3, [r4, #12]
  36407. 800f25c: 4632 mov r2, r6
  36408. 800f25e: 463b mov r3, r7
  36409. 800f260: 4628 mov r0, r5
  36410. 800f262: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
  36411. 800f266: f000 b8a9 b.w 800f3bc <_write_r>
  36412. 0800f26a <__sseek>:
  36413. 800f26a: b510 push {r4, lr}
  36414. 800f26c: 460c mov r4, r1
  36415. 800f26e: f9b1 100e ldrsh.w r1, [r1, #14]
  36416. 800f272: f000 f87f bl 800f374 <_lseek_r>
  36417. 800f276: 1c43 adds r3, r0, #1
  36418. 800f278: 89a3 ldrh r3, [r4, #12]
  36419. 800f27a: bf15 itete ne
  36420. 800f27c: 6560 strne r0, [r4, #84] @ 0x54
  36421. 800f27e: f423 5380 biceq.w r3, r3, #4096 @ 0x1000
  36422. 800f282: f443 5380 orrne.w r3, r3, #4096 @ 0x1000
  36423. 800f286: 81a3 strheq r3, [r4, #12]
  36424. 800f288: bf18 it ne
  36425. 800f28a: 81a3 strhne r3, [r4, #12]
  36426. 800f28c: bd10 pop {r4, pc}
  36427. 0800f28e <__sclose>:
  36428. 800f28e: f9b1 100e ldrsh.w r1, [r1, #14]
  36429. 800f292: f000 b809 b.w 800f2a8 <_close_r>
  36430. 0800f296 <memset>:
  36431. 800f296: 4402 add r2, r0
  36432. 800f298: 4603 mov r3, r0
  36433. 800f29a: 4293 cmp r3, r2
  36434. 800f29c: d100 bne.n 800f2a0 <memset+0xa>
  36435. 800f29e: 4770 bx lr
  36436. 800f2a0: f803 1b01 strb.w r1, [r3], #1
  36437. 800f2a4: e7f9 b.n 800f29a <memset+0x4>
  36438. ...
  36439. 0800f2a8 <_close_r>:
  36440. 800f2a8: b538 push {r3, r4, r5, lr}
  36441. 800f2aa: 4d06 ldr r5, [pc, #24] @ (800f2c4 <_close_r+0x1c>)
  36442. 800f2ac: 2300 movs r3, #0
  36443. 800f2ae: 4604 mov r4, r0
  36444. 800f2b0: 4608 mov r0, r1
  36445. 800f2b2: 602b str r3, [r5, #0]
  36446. 800f2b4: f7f2 fb69 bl 800198a <_close>
  36447. 800f2b8: 1c43 adds r3, r0, #1
  36448. 800f2ba: d102 bne.n 800f2c2 <_close_r+0x1a>
  36449. 800f2bc: 682b ldr r3, [r5, #0]
  36450. 800f2be: b103 cbz r3, 800f2c2 <_close_r+0x1a>
  36451. 800f2c0: 6023 str r3, [r4, #0]
  36452. 800f2c2: bd38 pop {r3, r4, r5, pc}
  36453. 800f2c4: 240128b8 .word 0x240128b8
  36454. 0800f2c8 <_reclaim_reent>:
  36455. 800f2c8: 4b29 ldr r3, [pc, #164] @ (800f370 <_reclaim_reent+0xa8>)
  36456. 800f2ca: 681b ldr r3, [r3, #0]
  36457. 800f2cc: 4283 cmp r3, r0
  36458. 800f2ce: b570 push {r4, r5, r6, lr}
  36459. 800f2d0: 4604 mov r4, r0
  36460. 800f2d2: d04b beq.n 800f36c <_reclaim_reent+0xa4>
  36461. 800f2d4: 69c3 ldr r3, [r0, #28]
  36462. 800f2d6: b1ab cbz r3, 800f304 <_reclaim_reent+0x3c>
  36463. 800f2d8: 68db ldr r3, [r3, #12]
  36464. 800f2da: b16b cbz r3, 800f2f8 <_reclaim_reent+0x30>
  36465. 800f2dc: 2500 movs r5, #0
  36466. 800f2de: 69e3 ldr r3, [r4, #28]
  36467. 800f2e0: 68db ldr r3, [r3, #12]
  36468. 800f2e2: 5959 ldr r1, [r3, r5]
  36469. 800f2e4: 2900 cmp r1, #0
  36470. 800f2e6: d13b bne.n 800f360 <_reclaim_reent+0x98>
  36471. 800f2e8: 3504 adds r5, #4
  36472. 800f2ea: 2d80 cmp r5, #128 @ 0x80
  36473. 800f2ec: d1f7 bne.n 800f2de <_reclaim_reent+0x16>
  36474. 800f2ee: 69e3 ldr r3, [r4, #28]
  36475. 800f2f0: 4620 mov r0, r4
  36476. 800f2f2: 68d9 ldr r1, [r3, #12]
  36477. 800f2f4: f000 f8b0 bl 800f458 <_free_r>
  36478. 800f2f8: 69e3 ldr r3, [r4, #28]
  36479. 800f2fa: 6819 ldr r1, [r3, #0]
  36480. 800f2fc: b111 cbz r1, 800f304 <_reclaim_reent+0x3c>
  36481. 800f2fe: 4620 mov r0, r4
  36482. 800f300: f000 f8aa bl 800f458 <_free_r>
  36483. 800f304: 6961 ldr r1, [r4, #20]
  36484. 800f306: b111 cbz r1, 800f30e <_reclaim_reent+0x46>
  36485. 800f308: 4620 mov r0, r4
  36486. 800f30a: f000 f8a5 bl 800f458 <_free_r>
  36487. 800f30e: 69e1 ldr r1, [r4, #28]
  36488. 800f310: b111 cbz r1, 800f318 <_reclaim_reent+0x50>
  36489. 800f312: 4620 mov r0, r4
  36490. 800f314: f000 f8a0 bl 800f458 <_free_r>
  36491. 800f318: 6b21 ldr r1, [r4, #48] @ 0x30
  36492. 800f31a: b111 cbz r1, 800f322 <_reclaim_reent+0x5a>
  36493. 800f31c: 4620 mov r0, r4
  36494. 800f31e: f000 f89b bl 800f458 <_free_r>
  36495. 800f322: 6b61 ldr r1, [r4, #52] @ 0x34
  36496. 800f324: b111 cbz r1, 800f32c <_reclaim_reent+0x64>
  36497. 800f326: 4620 mov r0, r4
  36498. 800f328: f000 f896 bl 800f458 <_free_r>
  36499. 800f32c: 6ba1 ldr r1, [r4, #56] @ 0x38
  36500. 800f32e: b111 cbz r1, 800f336 <_reclaim_reent+0x6e>
  36501. 800f330: 4620 mov r0, r4
  36502. 800f332: f000 f891 bl 800f458 <_free_r>
  36503. 800f336: 6ca1 ldr r1, [r4, #72] @ 0x48
  36504. 800f338: b111 cbz r1, 800f340 <_reclaim_reent+0x78>
  36505. 800f33a: 4620 mov r0, r4
  36506. 800f33c: f000 f88c bl 800f458 <_free_r>
  36507. 800f340: 6c61 ldr r1, [r4, #68] @ 0x44
  36508. 800f342: b111 cbz r1, 800f34a <_reclaim_reent+0x82>
  36509. 800f344: 4620 mov r0, r4
  36510. 800f346: f000 f887 bl 800f458 <_free_r>
  36511. 800f34a: 6ae1 ldr r1, [r4, #44] @ 0x2c
  36512. 800f34c: b111 cbz r1, 800f354 <_reclaim_reent+0x8c>
  36513. 800f34e: 4620 mov r0, r4
  36514. 800f350: f000 f882 bl 800f458 <_free_r>
  36515. 800f354: 6a23 ldr r3, [r4, #32]
  36516. 800f356: b14b cbz r3, 800f36c <_reclaim_reent+0xa4>
  36517. 800f358: 4620 mov r0, r4
  36518. 800f35a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
  36519. 800f35e: 4718 bx r3
  36520. 800f360: 680e ldr r6, [r1, #0]
  36521. 800f362: 4620 mov r0, r4
  36522. 800f364: f000 f878 bl 800f458 <_free_r>
  36523. 800f368: 4631 mov r1, r6
  36524. 800f36a: e7bb b.n 800f2e4 <_reclaim_reent+0x1c>
  36525. 800f36c: bd70 pop {r4, r5, r6, pc}
  36526. 800f36e: bf00 nop
  36527. 800f370: 24000020 .word 0x24000020
  36528. 0800f374 <_lseek_r>:
  36529. 800f374: b538 push {r3, r4, r5, lr}
  36530. 800f376: 4d07 ldr r5, [pc, #28] @ (800f394 <_lseek_r+0x20>)
  36531. 800f378: 4604 mov r4, r0
  36532. 800f37a: 4608 mov r0, r1
  36533. 800f37c: 4611 mov r1, r2
  36534. 800f37e: 2200 movs r2, #0
  36535. 800f380: 602a str r2, [r5, #0]
  36536. 800f382: 461a mov r2, r3
  36537. 800f384: f7f2 fb28 bl 80019d8 <_lseek>
  36538. 800f388: 1c43 adds r3, r0, #1
  36539. 800f38a: d102 bne.n 800f392 <_lseek_r+0x1e>
  36540. 800f38c: 682b ldr r3, [r5, #0]
  36541. 800f38e: b103 cbz r3, 800f392 <_lseek_r+0x1e>
  36542. 800f390: 6023 str r3, [r4, #0]
  36543. 800f392: bd38 pop {r3, r4, r5, pc}
  36544. 800f394: 240128b8 .word 0x240128b8
  36545. 0800f398 <_read_r>:
  36546. 800f398: b538 push {r3, r4, r5, lr}
  36547. 800f39a: 4d07 ldr r5, [pc, #28] @ (800f3b8 <_read_r+0x20>)
  36548. 800f39c: 4604 mov r4, r0
  36549. 800f39e: 4608 mov r0, r1
  36550. 800f3a0: 4611 mov r1, r2
  36551. 800f3a2: 2200 movs r2, #0
  36552. 800f3a4: 602a str r2, [r5, #0]
  36553. 800f3a6: 461a mov r2, r3
  36554. 800f3a8: f7f2 fab6 bl 8001918 <_read>
  36555. 800f3ac: 1c43 adds r3, r0, #1
  36556. 800f3ae: d102 bne.n 800f3b6 <_read_r+0x1e>
  36557. 800f3b0: 682b ldr r3, [r5, #0]
  36558. 800f3b2: b103 cbz r3, 800f3b6 <_read_r+0x1e>
  36559. 800f3b4: 6023 str r3, [r4, #0]
  36560. 800f3b6: bd38 pop {r3, r4, r5, pc}
  36561. 800f3b8: 240128b8 .word 0x240128b8
  36562. 0800f3bc <_write_r>:
  36563. 800f3bc: b538 push {r3, r4, r5, lr}
  36564. 800f3be: 4d07 ldr r5, [pc, #28] @ (800f3dc <_write_r+0x20>)
  36565. 800f3c0: 4604 mov r4, r0
  36566. 800f3c2: 4608 mov r0, r1
  36567. 800f3c4: 4611 mov r1, r2
  36568. 800f3c6: 2200 movs r2, #0
  36569. 800f3c8: 602a str r2, [r5, #0]
  36570. 800f3ca: 461a mov r2, r3
  36571. 800f3cc: f7f2 fac1 bl 8001952 <_write>
  36572. 800f3d0: 1c43 adds r3, r0, #1
  36573. 800f3d2: d102 bne.n 800f3da <_write_r+0x1e>
  36574. 800f3d4: 682b ldr r3, [r5, #0]
  36575. 800f3d6: b103 cbz r3, 800f3da <_write_r+0x1e>
  36576. 800f3d8: 6023 str r3, [r4, #0]
  36577. 800f3da: bd38 pop {r3, r4, r5, pc}
  36578. 800f3dc: 240128b8 .word 0x240128b8
  36579. 0800f3e0 <__errno>:
  36580. 800f3e0: 4b01 ldr r3, [pc, #4] @ (800f3e8 <__errno+0x8>)
  36581. 800f3e2: 6818 ldr r0, [r3, #0]
  36582. 800f3e4: 4770 bx lr
  36583. 800f3e6: bf00 nop
  36584. 800f3e8: 24000020 .word 0x24000020
  36585. 0800f3ec <__libc_init_array>:
  36586. 800f3ec: b570 push {r4, r5, r6, lr}
  36587. 800f3ee: 4d0d ldr r5, [pc, #52] @ (800f424 <__libc_init_array+0x38>)
  36588. 800f3f0: 4c0d ldr r4, [pc, #52] @ (800f428 <__libc_init_array+0x3c>)
  36589. 800f3f2: 1b64 subs r4, r4, r5
  36590. 800f3f4: 10a4 asrs r4, r4, #2
  36591. 800f3f6: 2600 movs r6, #0
  36592. 800f3f8: 42a6 cmp r6, r4
  36593. 800f3fa: d109 bne.n 800f410 <__libc_init_array+0x24>
  36594. 800f3fc: 4d0b ldr r5, [pc, #44] @ (800f42c <__libc_init_array+0x40>)
  36595. 800f3fe: 4c0c ldr r4, [pc, #48] @ (800f430 <__libc_init_array+0x44>)
  36596. 800f400: f000 fdc6 bl 800ff90 <_init>
  36597. 800f404: 1b64 subs r4, r4, r5
  36598. 800f406: 10a4 asrs r4, r4, #2
  36599. 800f408: 2600 movs r6, #0
  36600. 800f40a: 42a6 cmp r6, r4
  36601. 800f40c: d105 bne.n 800f41a <__libc_init_array+0x2e>
  36602. 800f40e: bd70 pop {r4, r5, r6, pc}
  36603. 800f410: f855 3b04 ldr.w r3, [r5], #4
  36604. 800f414: 4798 blx r3
  36605. 800f416: 3601 adds r6, #1
  36606. 800f418: e7ee b.n 800f3f8 <__libc_init_array+0xc>
  36607. 800f41a: f855 3b04 ldr.w r3, [r5], #4
  36608. 800f41e: 4798 blx r3
  36609. 800f420: 3601 adds r6, #1
  36610. 800f422: e7f2 b.n 800f40a <__libc_init_array+0x1e>
  36611. 800f424: 0801012c .word 0x0801012c
  36612. 800f428: 0801012c .word 0x0801012c
  36613. 800f42c: 0801012c .word 0x0801012c
  36614. 800f430: 08010130 .word 0x08010130
  36615. 0800f434 <__retarget_lock_init_recursive>:
  36616. 800f434: 4770 bx lr
  36617. 0800f436 <__retarget_lock_acquire_recursive>:
  36618. 800f436: 4770 bx lr
  36619. 0800f438 <__retarget_lock_release_recursive>:
  36620. 800f438: 4770 bx lr
  36621. 0800f43a <memcpy>:
  36622. 800f43a: 440a add r2, r1
  36623. 800f43c: 4291 cmp r1, r2
  36624. 800f43e: f100 33ff add.w r3, r0, #4294967295 @ 0xffffffff
  36625. 800f442: d100 bne.n 800f446 <memcpy+0xc>
  36626. 800f444: 4770 bx lr
  36627. 800f446: b510 push {r4, lr}
  36628. 800f448: f811 4b01 ldrb.w r4, [r1], #1
  36629. 800f44c: f803 4f01 strb.w r4, [r3, #1]!
  36630. 800f450: 4291 cmp r1, r2
  36631. 800f452: d1f9 bne.n 800f448 <memcpy+0xe>
  36632. 800f454: bd10 pop {r4, pc}
  36633. ...
  36634. 0800f458 <_free_r>:
  36635. 800f458: b538 push {r3, r4, r5, lr}
  36636. 800f45a: 4605 mov r5, r0
  36637. 800f45c: 2900 cmp r1, #0
  36638. 800f45e: d041 beq.n 800f4e4 <_free_r+0x8c>
  36639. 800f460: f851 3c04 ldr.w r3, [r1, #-4]
  36640. 800f464: 1f0c subs r4, r1, #4
  36641. 800f466: 2b00 cmp r3, #0
  36642. 800f468: bfb8 it lt
  36643. 800f46a: 18e4 addlt r4, r4, r3
  36644. 800f46c: f000 f8e0 bl 800f630 <__malloc_lock>
  36645. 800f470: 4a1d ldr r2, [pc, #116] @ (800f4e8 <_free_r+0x90>)
  36646. 800f472: 6813 ldr r3, [r2, #0]
  36647. 800f474: b933 cbnz r3, 800f484 <_free_r+0x2c>
  36648. 800f476: 6063 str r3, [r4, #4]
  36649. 800f478: 6014 str r4, [r2, #0]
  36650. 800f47a: 4628 mov r0, r5
  36651. 800f47c: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
  36652. 800f480: f000 b8dc b.w 800f63c <__malloc_unlock>
  36653. 800f484: 42a3 cmp r3, r4
  36654. 800f486: d908 bls.n 800f49a <_free_r+0x42>
  36655. 800f488: 6820 ldr r0, [r4, #0]
  36656. 800f48a: 1821 adds r1, r4, r0
  36657. 800f48c: 428b cmp r3, r1
  36658. 800f48e: bf01 itttt eq
  36659. 800f490: 6819 ldreq r1, [r3, #0]
  36660. 800f492: 685b ldreq r3, [r3, #4]
  36661. 800f494: 1809 addeq r1, r1, r0
  36662. 800f496: 6021 streq r1, [r4, #0]
  36663. 800f498: e7ed b.n 800f476 <_free_r+0x1e>
  36664. 800f49a: 461a mov r2, r3
  36665. 800f49c: 685b ldr r3, [r3, #4]
  36666. 800f49e: b10b cbz r3, 800f4a4 <_free_r+0x4c>
  36667. 800f4a0: 42a3 cmp r3, r4
  36668. 800f4a2: d9fa bls.n 800f49a <_free_r+0x42>
  36669. 800f4a4: 6811 ldr r1, [r2, #0]
  36670. 800f4a6: 1850 adds r0, r2, r1
  36671. 800f4a8: 42a0 cmp r0, r4
  36672. 800f4aa: d10b bne.n 800f4c4 <_free_r+0x6c>
  36673. 800f4ac: 6820 ldr r0, [r4, #0]
  36674. 800f4ae: 4401 add r1, r0
  36675. 800f4b0: 1850 adds r0, r2, r1
  36676. 800f4b2: 4283 cmp r3, r0
  36677. 800f4b4: 6011 str r1, [r2, #0]
  36678. 800f4b6: d1e0 bne.n 800f47a <_free_r+0x22>
  36679. 800f4b8: 6818 ldr r0, [r3, #0]
  36680. 800f4ba: 685b ldr r3, [r3, #4]
  36681. 800f4bc: 6053 str r3, [r2, #4]
  36682. 800f4be: 4408 add r0, r1
  36683. 800f4c0: 6010 str r0, [r2, #0]
  36684. 800f4c2: e7da b.n 800f47a <_free_r+0x22>
  36685. 800f4c4: d902 bls.n 800f4cc <_free_r+0x74>
  36686. 800f4c6: 230c movs r3, #12
  36687. 800f4c8: 602b str r3, [r5, #0]
  36688. 800f4ca: e7d6 b.n 800f47a <_free_r+0x22>
  36689. 800f4cc: 6820 ldr r0, [r4, #0]
  36690. 800f4ce: 1821 adds r1, r4, r0
  36691. 800f4d0: 428b cmp r3, r1
  36692. 800f4d2: bf04 itt eq
  36693. 800f4d4: 6819 ldreq r1, [r3, #0]
  36694. 800f4d6: 685b ldreq r3, [r3, #4]
  36695. 800f4d8: 6063 str r3, [r4, #4]
  36696. 800f4da: bf04 itt eq
  36697. 800f4dc: 1809 addeq r1, r1, r0
  36698. 800f4de: 6021 streq r1, [r4, #0]
  36699. 800f4e0: 6054 str r4, [r2, #4]
  36700. 800f4e2: e7ca b.n 800f47a <_free_r+0x22>
  36701. 800f4e4: bd38 pop {r3, r4, r5, pc}
  36702. 800f4e6: bf00 nop
  36703. 800f4e8: 240128c4 .word 0x240128c4
  36704. 0800f4ec <sbrk_aligned>:
  36705. 800f4ec: b570 push {r4, r5, r6, lr}
  36706. 800f4ee: 4e0f ldr r6, [pc, #60] @ (800f52c <sbrk_aligned+0x40>)
  36707. 800f4f0: 460c mov r4, r1
  36708. 800f4f2: 6831 ldr r1, [r6, #0]
  36709. 800f4f4: 4605 mov r5, r0
  36710. 800f4f6: b911 cbnz r1, 800f4fe <sbrk_aligned+0x12>
  36711. 800f4f8: f000 fcb6 bl 800fe68 <_sbrk_r>
  36712. 800f4fc: 6030 str r0, [r6, #0]
  36713. 800f4fe: 4621 mov r1, r4
  36714. 800f500: 4628 mov r0, r5
  36715. 800f502: f000 fcb1 bl 800fe68 <_sbrk_r>
  36716. 800f506: 1c43 adds r3, r0, #1
  36717. 800f508: d103 bne.n 800f512 <sbrk_aligned+0x26>
  36718. 800f50a: f04f 34ff mov.w r4, #4294967295 @ 0xffffffff
  36719. 800f50e: 4620 mov r0, r4
  36720. 800f510: bd70 pop {r4, r5, r6, pc}
  36721. 800f512: 1cc4 adds r4, r0, #3
  36722. 800f514: f024 0403 bic.w r4, r4, #3
  36723. 800f518: 42a0 cmp r0, r4
  36724. 800f51a: d0f8 beq.n 800f50e <sbrk_aligned+0x22>
  36725. 800f51c: 1a21 subs r1, r4, r0
  36726. 800f51e: 4628 mov r0, r5
  36727. 800f520: f000 fca2 bl 800fe68 <_sbrk_r>
  36728. 800f524: 3001 adds r0, #1
  36729. 800f526: d1f2 bne.n 800f50e <sbrk_aligned+0x22>
  36730. 800f528: e7ef b.n 800f50a <sbrk_aligned+0x1e>
  36731. 800f52a: bf00 nop
  36732. 800f52c: 240128c0 .word 0x240128c0
  36733. 0800f530 <_malloc_r>:
  36734. 800f530: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
  36735. 800f534: 1ccd adds r5, r1, #3
  36736. 800f536: f025 0503 bic.w r5, r5, #3
  36737. 800f53a: 3508 adds r5, #8
  36738. 800f53c: 2d0c cmp r5, #12
  36739. 800f53e: bf38 it cc
  36740. 800f540: 250c movcc r5, #12
  36741. 800f542: 2d00 cmp r5, #0
  36742. 800f544: 4606 mov r6, r0
  36743. 800f546: db01 blt.n 800f54c <_malloc_r+0x1c>
  36744. 800f548: 42a9 cmp r1, r5
  36745. 800f54a: d904 bls.n 800f556 <_malloc_r+0x26>
  36746. 800f54c: 230c movs r3, #12
  36747. 800f54e: 6033 str r3, [r6, #0]
  36748. 800f550: 2000 movs r0, #0
  36749. 800f552: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
  36750. 800f556: f8df 80d4 ldr.w r8, [pc, #212] @ 800f62c <_malloc_r+0xfc>
  36751. 800f55a: f000 f869 bl 800f630 <__malloc_lock>
  36752. 800f55e: f8d8 3000 ldr.w r3, [r8]
  36753. 800f562: 461c mov r4, r3
  36754. 800f564: bb44 cbnz r4, 800f5b8 <_malloc_r+0x88>
  36755. 800f566: 4629 mov r1, r5
  36756. 800f568: 4630 mov r0, r6
  36757. 800f56a: f7ff ffbf bl 800f4ec <sbrk_aligned>
  36758. 800f56e: 1c43 adds r3, r0, #1
  36759. 800f570: 4604 mov r4, r0
  36760. 800f572: d158 bne.n 800f626 <_malloc_r+0xf6>
  36761. 800f574: f8d8 4000 ldr.w r4, [r8]
  36762. 800f578: 4627 mov r7, r4
  36763. 800f57a: 2f00 cmp r7, #0
  36764. 800f57c: d143 bne.n 800f606 <_malloc_r+0xd6>
  36765. 800f57e: 2c00 cmp r4, #0
  36766. 800f580: d04b beq.n 800f61a <_malloc_r+0xea>
  36767. 800f582: 6823 ldr r3, [r4, #0]
  36768. 800f584: 4639 mov r1, r7
  36769. 800f586: 4630 mov r0, r6
  36770. 800f588: eb04 0903 add.w r9, r4, r3
  36771. 800f58c: f000 fc6c bl 800fe68 <_sbrk_r>
  36772. 800f590: 4581 cmp r9, r0
  36773. 800f592: d142 bne.n 800f61a <_malloc_r+0xea>
  36774. 800f594: 6821 ldr r1, [r4, #0]
  36775. 800f596: 1a6d subs r5, r5, r1
  36776. 800f598: 4629 mov r1, r5
  36777. 800f59a: 4630 mov r0, r6
  36778. 800f59c: f7ff ffa6 bl 800f4ec <sbrk_aligned>
  36779. 800f5a0: 3001 adds r0, #1
  36780. 800f5a2: d03a beq.n 800f61a <_malloc_r+0xea>
  36781. 800f5a4: 6823 ldr r3, [r4, #0]
  36782. 800f5a6: 442b add r3, r5
  36783. 800f5a8: 6023 str r3, [r4, #0]
  36784. 800f5aa: f8d8 3000 ldr.w r3, [r8]
  36785. 800f5ae: 685a ldr r2, [r3, #4]
  36786. 800f5b0: bb62 cbnz r2, 800f60c <_malloc_r+0xdc>
  36787. 800f5b2: f8c8 7000 str.w r7, [r8]
  36788. 800f5b6: e00f b.n 800f5d8 <_malloc_r+0xa8>
  36789. 800f5b8: 6822 ldr r2, [r4, #0]
  36790. 800f5ba: 1b52 subs r2, r2, r5
  36791. 800f5bc: d420 bmi.n 800f600 <_malloc_r+0xd0>
  36792. 800f5be: 2a0b cmp r2, #11
  36793. 800f5c0: d917 bls.n 800f5f2 <_malloc_r+0xc2>
  36794. 800f5c2: 1961 adds r1, r4, r5
  36795. 800f5c4: 42a3 cmp r3, r4
  36796. 800f5c6: 6025 str r5, [r4, #0]
  36797. 800f5c8: bf18 it ne
  36798. 800f5ca: 6059 strne r1, [r3, #4]
  36799. 800f5cc: 6863 ldr r3, [r4, #4]
  36800. 800f5ce: bf08 it eq
  36801. 800f5d0: f8c8 1000 streq.w r1, [r8]
  36802. 800f5d4: 5162 str r2, [r4, r5]
  36803. 800f5d6: 604b str r3, [r1, #4]
  36804. 800f5d8: 4630 mov r0, r6
  36805. 800f5da: f000 f82f bl 800f63c <__malloc_unlock>
  36806. 800f5de: f104 000b add.w r0, r4, #11
  36807. 800f5e2: 1d23 adds r3, r4, #4
  36808. 800f5e4: f020 0007 bic.w r0, r0, #7
  36809. 800f5e8: 1ac2 subs r2, r0, r3
  36810. 800f5ea: bf1c itt ne
  36811. 800f5ec: 1a1b subne r3, r3, r0
  36812. 800f5ee: 50a3 strne r3, [r4, r2]
  36813. 800f5f0: e7af b.n 800f552 <_malloc_r+0x22>
  36814. 800f5f2: 6862 ldr r2, [r4, #4]
  36815. 800f5f4: 42a3 cmp r3, r4
  36816. 800f5f6: bf0c ite eq
  36817. 800f5f8: f8c8 2000 streq.w r2, [r8]
  36818. 800f5fc: 605a strne r2, [r3, #4]
  36819. 800f5fe: e7eb b.n 800f5d8 <_malloc_r+0xa8>
  36820. 800f600: 4623 mov r3, r4
  36821. 800f602: 6864 ldr r4, [r4, #4]
  36822. 800f604: e7ae b.n 800f564 <_malloc_r+0x34>
  36823. 800f606: 463c mov r4, r7
  36824. 800f608: 687f ldr r7, [r7, #4]
  36825. 800f60a: e7b6 b.n 800f57a <_malloc_r+0x4a>
  36826. 800f60c: 461a mov r2, r3
  36827. 800f60e: 685b ldr r3, [r3, #4]
  36828. 800f610: 42a3 cmp r3, r4
  36829. 800f612: d1fb bne.n 800f60c <_malloc_r+0xdc>
  36830. 800f614: 2300 movs r3, #0
  36831. 800f616: 6053 str r3, [r2, #4]
  36832. 800f618: e7de b.n 800f5d8 <_malloc_r+0xa8>
  36833. 800f61a: 230c movs r3, #12
  36834. 800f61c: 6033 str r3, [r6, #0]
  36835. 800f61e: 4630 mov r0, r6
  36836. 800f620: f000 f80c bl 800f63c <__malloc_unlock>
  36837. 800f624: e794 b.n 800f550 <_malloc_r+0x20>
  36838. 800f626: 6005 str r5, [r0, #0]
  36839. 800f628: e7d6 b.n 800f5d8 <_malloc_r+0xa8>
  36840. 800f62a: bf00 nop
  36841. 800f62c: 240128c4 .word 0x240128c4
  36842. 0800f630 <__malloc_lock>:
  36843. 800f630: 4801 ldr r0, [pc, #4] @ (800f638 <__malloc_lock+0x8>)
  36844. 800f632: f7ff bf00 b.w 800f436 <__retarget_lock_acquire_recursive>
  36845. 800f636: bf00 nop
  36846. 800f638: 240128bc .word 0x240128bc
  36847. 0800f63c <__malloc_unlock>:
  36848. 800f63c: 4801 ldr r0, [pc, #4] @ (800f644 <__malloc_unlock+0x8>)
  36849. 800f63e: f7ff befb b.w 800f438 <__retarget_lock_release_recursive>
  36850. 800f642: bf00 nop
  36851. 800f644: 240128bc .word 0x240128bc
  36852. 0800f648 <__sfputc_r>:
  36853. 800f648: 6893 ldr r3, [r2, #8]
  36854. 800f64a: 3b01 subs r3, #1
  36855. 800f64c: 2b00 cmp r3, #0
  36856. 800f64e: b410 push {r4}
  36857. 800f650: 6093 str r3, [r2, #8]
  36858. 800f652: da08 bge.n 800f666 <__sfputc_r+0x1e>
  36859. 800f654: 6994 ldr r4, [r2, #24]
  36860. 800f656: 42a3 cmp r3, r4
  36861. 800f658: db01 blt.n 800f65e <__sfputc_r+0x16>
  36862. 800f65a: 290a cmp r1, #10
  36863. 800f65c: d103 bne.n 800f666 <__sfputc_r+0x1e>
  36864. 800f65e: f85d 4b04 ldr.w r4, [sp], #4
  36865. 800f662: f000 bb6d b.w 800fd40 <__swbuf_r>
  36866. 800f666: 6813 ldr r3, [r2, #0]
  36867. 800f668: 1c58 adds r0, r3, #1
  36868. 800f66a: 6010 str r0, [r2, #0]
  36869. 800f66c: 7019 strb r1, [r3, #0]
  36870. 800f66e: 4608 mov r0, r1
  36871. 800f670: f85d 4b04 ldr.w r4, [sp], #4
  36872. 800f674: 4770 bx lr
  36873. 0800f676 <__sfputs_r>:
  36874. 800f676: b5f8 push {r3, r4, r5, r6, r7, lr}
  36875. 800f678: 4606 mov r6, r0
  36876. 800f67a: 460f mov r7, r1
  36877. 800f67c: 4614 mov r4, r2
  36878. 800f67e: 18d5 adds r5, r2, r3
  36879. 800f680: 42ac cmp r4, r5
  36880. 800f682: d101 bne.n 800f688 <__sfputs_r+0x12>
  36881. 800f684: 2000 movs r0, #0
  36882. 800f686: e007 b.n 800f698 <__sfputs_r+0x22>
  36883. 800f688: f814 1b01 ldrb.w r1, [r4], #1
  36884. 800f68c: 463a mov r2, r7
  36885. 800f68e: 4630 mov r0, r6
  36886. 800f690: f7ff ffda bl 800f648 <__sfputc_r>
  36887. 800f694: 1c43 adds r3, r0, #1
  36888. 800f696: d1f3 bne.n 800f680 <__sfputs_r+0xa>
  36889. 800f698: bdf8 pop {r3, r4, r5, r6, r7, pc}
  36890. ...
  36891. 0800f69c <_vfiprintf_r>:
  36892. 800f69c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  36893. 800f6a0: 460d mov r5, r1
  36894. 800f6a2: b09d sub sp, #116 @ 0x74
  36895. 800f6a4: 4614 mov r4, r2
  36896. 800f6a6: 4698 mov r8, r3
  36897. 800f6a8: 4606 mov r6, r0
  36898. 800f6aa: b118 cbz r0, 800f6b4 <_vfiprintf_r+0x18>
  36899. 800f6ac: 6a03 ldr r3, [r0, #32]
  36900. 800f6ae: b90b cbnz r3, 800f6b4 <_vfiprintf_r+0x18>
  36901. 800f6b0: f7ff fd66 bl 800f180 <__sinit>
  36902. 800f6b4: 6e6b ldr r3, [r5, #100] @ 0x64
  36903. 800f6b6: 07d9 lsls r1, r3, #31
  36904. 800f6b8: d405 bmi.n 800f6c6 <_vfiprintf_r+0x2a>
  36905. 800f6ba: 89ab ldrh r3, [r5, #12]
  36906. 800f6bc: 059a lsls r2, r3, #22
  36907. 800f6be: d402 bmi.n 800f6c6 <_vfiprintf_r+0x2a>
  36908. 800f6c0: 6da8 ldr r0, [r5, #88] @ 0x58
  36909. 800f6c2: f7ff feb8 bl 800f436 <__retarget_lock_acquire_recursive>
  36910. 800f6c6: 89ab ldrh r3, [r5, #12]
  36911. 800f6c8: 071b lsls r3, r3, #28
  36912. 800f6ca: d501 bpl.n 800f6d0 <_vfiprintf_r+0x34>
  36913. 800f6cc: 692b ldr r3, [r5, #16]
  36914. 800f6ce: b99b cbnz r3, 800f6f8 <_vfiprintf_r+0x5c>
  36915. 800f6d0: 4629 mov r1, r5
  36916. 800f6d2: 4630 mov r0, r6
  36917. 800f6d4: f000 fb72 bl 800fdbc <__swsetup_r>
  36918. 800f6d8: b170 cbz r0, 800f6f8 <_vfiprintf_r+0x5c>
  36919. 800f6da: 6e6b ldr r3, [r5, #100] @ 0x64
  36920. 800f6dc: 07dc lsls r4, r3, #31
  36921. 800f6de: d504 bpl.n 800f6ea <_vfiprintf_r+0x4e>
  36922. 800f6e0: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  36923. 800f6e4: b01d add sp, #116 @ 0x74
  36924. 800f6e6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
  36925. 800f6ea: 89ab ldrh r3, [r5, #12]
  36926. 800f6ec: 0598 lsls r0, r3, #22
  36927. 800f6ee: d4f7 bmi.n 800f6e0 <_vfiprintf_r+0x44>
  36928. 800f6f0: 6da8 ldr r0, [r5, #88] @ 0x58
  36929. 800f6f2: f7ff fea1 bl 800f438 <__retarget_lock_release_recursive>
  36930. 800f6f6: e7f3 b.n 800f6e0 <_vfiprintf_r+0x44>
  36931. 800f6f8: 2300 movs r3, #0
  36932. 800f6fa: 9309 str r3, [sp, #36] @ 0x24
  36933. 800f6fc: 2320 movs r3, #32
  36934. 800f6fe: f88d 3029 strb.w r3, [sp, #41] @ 0x29
  36935. 800f702: f8cd 800c str.w r8, [sp, #12]
  36936. 800f706: 2330 movs r3, #48 @ 0x30
  36937. 800f708: f8df 81ac ldr.w r8, [pc, #428] @ 800f8b8 <_vfiprintf_r+0x21c>
  36938. 800f70c: f88d 302a strb.w r3, [sp, #42] @ 0x2a
  36939. 800f710: f04f 0901 mov.w r9, #1
  36940. 800f714: 4623 mov r3, r4
  36941. 800f716: 469a mov sl, r3
  36942. 800f718: f813 2b01 ldrb.w r2, [r3], #1
  36943. 800f71c: b10a cbz r2, 800f722 <_vfiprintf_r+0x86>
  36944. 800f71e: 2a25 cmp r2, #37 @ 0x25
  36945. 800f720: d1f9 bne.n 800f716 <_vfiprintf_r+0x7a>
  36946. 800f722: ebba 0b04 subs.w fp, sl, r4
  36947. 800f726: d00b beq.n 800f740 <_vfiprintf_r+0xa4>
  36948. 800f728: 465b mov r3, fp
  36949. 800f72a: 4622 mov r2, r4
  36950. 800f72c: 4629 mov r1, r5
  36951. 800f72e: 4630 mov r0, r6
  36952. 800f730: f7ff ffa1 bl 800f676 <__sfputs_r>
  36953. 800f734: 3001 adds r0, #1
  36954. 800f736: f000 80a7 beq.w 800f888 <_vfiprintf_r+0x1ec>
  36955. 800f73a: 9a09 ldr r2, [sp, #36] @ 0x24
  36956. 800f73c: 445a add r2, fp
  36957. 800f73e: 9209 str r2, [sp, #36] @ 0x24
  36958. 800f740: f89a 3000 ldrb.w r3, [sl]
  36959. 800f744: 2b00 cmp r3, #0
  36960. 800f746: f000 809f beq.w 800f888 <_vfiprintf_r+0x1ec>
  36961. 800f74a: 2300 movs r3, #0
  36962. 800f74c: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  36963. 800f750: e9cd 2305 strd r2, r3, [sp, #20]
  36964. 800f754: f10a 0a01 add.w sl, sl, #1
  36965. 800f758: 9304 str r3, [sp, #16]
  36966. 800f75a: 9307 str r3, [sp, #28]
  36967. 800f75c: f88d 3053 strb.w r3, [sp, #83] @ 0x53
  36968. 800f760: 931a str r3, [sp, #104] @ 0x68
  36969. 800f762: 4654 mov r4, sl
  36970. 800f764: 2205 movs r2, #5
  36971. 800f766: f814 1b01 ldrb.w r1, [r4], #1
  36972. 800f76a: 4853 ldr r0, [pc, #332] @ (800f8b8 <_vfiprintf_r+0x21c>)
  36973. 800f76c: f7f0 fdb8 bl 80002e0 <memchr>
  36974. 800f770: 9a04 ldr r2, [sp, #16]
  36975. 800f772: b9d8 cbnz r0, 800f7ac <_vfiprintf_r+0x110>
  36976. 800f774: 06d1 lsls r1, r2, #27
  36977. 800f776: bf44 itt mi
  36978. 800f778: 2320 movmi r3, #32
  36979. 800f77a: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53
  36980. 800f77e: 0713 lsls r3, r2, #28
  36981. 800f780: bf44 itt mi
  36982. 800f782: 232b movmi r3, #43 @ 0x2b
  36983. 800f784: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53
  36984. 800f788: f89a 3000 ldrb.w r3, [sl]
  36985. 800f78c: 2b2a cmp r3, #42 @ 0x2a
  36986. 800f78e: d015 beq.n 800f7bc <_vfiprintf_r+0x120>
  36987. 800f790: 9a07 ldr r2, [sp, #28]
  36988. 800f792: 4654 mov r4, sl
  36989. 800f794: 2000 movs r0, #0
  36990. 800f796: f04f 0c0a mov.w ip, #10
  36991. 800f79a: 4621 mov r1, r4
  36992. 800f79c: f811 3b01 ldrb.w r3, [r1], #1
  36993. 800f7a0: 3b30 subs r3, #48 @ 0x30
  36994. 800f7a2: 2b09 cmp r3, #9
  36995. 800f7a4: d94b bls.n 800f83e <_vfiprintf_r+0x1a2>
  36996. 800f7a6: b1b0 cbz r0, 800f7d6 <_vfiprintf_r+0x13a>
  36997. 800f7a8: 9207 str r2, [sp, #28]
  36998. 800f7aa: e014 b.n 800f7d6 <_vfiprintf_r+0x13a>
  36999. 800f7ac: eba0 0308 sub.w r3, r0, r8
  37000. 800f7b0: fa09 f303 lsl.w r3, r9, r3
  37001. 800f7b4: 4313 orrs r3, r2
  37002. 800f7b6: 9304 str r3, [sp, #16]
  37003. 800f7b8: 46a2 mov sl, r4
  37004. 800f7ba: e7d2 b.n 800f762 <_vfiprintf_r+0xc6>
  37005. 800f7bc: 9b03 ldr r3, [sp, #12]
  37006. 800f7be: 1d19 adds r1, r3, #4
  37007. 800f7c0: 681b ldr r3, [r3, #0]
  37008. 800f7c2: 9103 str r1, [sp, #12]
  37009. 800f7c4: 2b00 cmp r3, #0
  37010. 800f7c6: bfbb ittet lt
  37011. 800f7c8: 425b neglt r3, r3
  37012. 800f7ca: f042 0202 orrlt.w r2, r2, #2
  37013. 800f7ce: 9307 strge r3, [sp, #28]
  37014. 800f7d0: 9307 strlt r3, [sp, #28]
  37015. 800f7d2: bfb8 it lt
  37016. 800f7d4: 9204 strlt r2, [sp, #16]
  37017. 800f7d6: 7823 ldrb r3, [r4, #0]
  37018. 800f7d8: 2b2e cmp r3, #46 @ 0x2e
  37019. 800f7da: d10a bne.n 800f7f2 <_vfiprintf_r+0x156>
  37020. 800f7dc: 7863 ldrb r3, [r4, #1]
  37021. 800f7de: 2b2a cmp r3, #42 @ 0x2a
  37022. 800f7e0: d132 bne.n 800f848 <_vfiprintf_r+0x1ac>
  37023. 800f7e2: 9b03 ldr r3, [sp, #12]
  37024. 800f7e4: 1d1a adds r2, r3, #4
  37025. 800f7e6: 681b ldr r3, [r3, #0]
  37026. 800f7e8: 9203 str r2, [sp, #12]
  37027. 800f7ea: ea43 73e3 orr.w r3, r3, r3, asr #31
  37028. 800f7ee: 3402 adds r4, #2
  37029. 800f7f0: 9305 str r3, [sp, #20]
  37030. 800f7f2: f8df a0d4 ldr.w sl, [pc, #212] @ 800f8c8 <_vfiprintf_r+0x22c>
  37031. 800f7f6: 7821 ldrb r1, [r4, #0]
  37032. 800f7f8: 2203 movs r2, #3
  37033. 800f7fa: 4650 mov r0, sl
  37034. 800f7fc: f7f0 fd70 bl 80002e0 <memchr>
  37035. 800f800: b138 cbz r0, 800f812 <_vfiprintf_r+0x176>
  37036. 800f802: 9b04 ldr r3, [sp, #16]
  37037. 800f804: eba0 000a sub.w r0, r0, sl
  37038. 800f808: 2240 movs r2, #64 @ 0x40
  37039. 800f80a: 4082 lsls r2, r0
  37040. 800f80c: 4313 orrs r3, r2
  37041. 800f80e: 3401 adds r4, #1
  37042. 800f810: 9304 str r3, [sp, #16]
  37043. 800f812: f814 1b01 ldrb.w r1, [r4], #1
  37044. 800f816: 4829 ldr r0, [pc, #164] @ (800f8bc <_vfiprintf_r+0x220>)
  37045. 800f818: f88d 1028 strb.w r1, [sp, #40] @ 0x28
  37046. 800f81c: 2206 movs r2, #6
  37047. 800f81e: f7f0 fd5f bl 80002e0 <memchr>
  37048. 800f822: 2800 cmp r0, #0
  37049. 800f824: d03f beq.n 800f8a6 <_vfiprintf_r+0x20a>
  37050. 800f826: 4b26 ldr r3, [pc, #152] @ (800f8c0 <_vfiprintf_r+0x224>)
  37051. 800f828: bb1b cbnz r3, 800f872 <_vfiprintf_r+0x1d6>
  37052. 800f82a: 9b03 ldr r3, [sp, #12]
  37053. 800f82c: 3307 adds r3, #7
  37054. 800f82e: f023 0307 bic.w r3, r3, #7
  37055. 800f832: 3308 adds r3, #8
  37056. 800f834: 9303 str r3, [sp, #12]
  37057. 800f836: 9b09 ldr r3, [sp, #36] @ 0x24
  37058. 800f838: 443b add r3, r7
  37059. 800f83a: 9309 str r3, [sp, #36] @ 0x24
  37060. 800f83c: e76a b.n 800f714 <_vfiprintf_r+0x78>
  37061. 800f83e: fb0c 3202 mla r2, ip, r2, r3
  37062. 800f842: 460c mov r4, r1
  37063. 800f844: 2001 movs r0, #1
  37064. 800f846: e7a8 b.n 800f79a <_vfiprintf_r+0xfe>
  37065. 800f848: 2300 movs r3, #0
  37066. 800f84a: 3401 adds r4, #1
  37067. 800f84c: 9305 str r3, [sp, #20]
  37068. 800f84e: 4619 mov r1, r3
  37069. 800f850: f04f 0c0a mov.w ip, #10
  37070. 800f854: 4620 mov r0, r4
  37071. 800f856: f810 2b01 ldrb.w r2, [r0], #1
  37072. 800f85a: 3a30 subs r2, #48 @ 0x30
  37073. 800f85c: 2a09 cmp r2, #9
  37074. 800f85e: d903 bls.n 800f868 <_vfiprintf_r+0x1cc>
  37075. 800f860: 2b00 cmp r3, #0
  37076. 800f862: d0c6 beq.n 800f7f2 <_vfiprintf_r+0x156>
  37077. 800f864: 9105 str r1, [sp, #20]
  37078. 800f866: e7c4 b.n 800f7f2 <_vfiprintf_r+0x156>
  37079. 800f868: fb0c 2101 mla r1, ip, r1, r2
  37080. 800f86c: 4604 mov r4, r0
  37081. 800f86e: 2301 movs r3, #1
  37082. 800f870: e7f0 b.n 800f854 <_vfiprintf_r+0x1b8>
  37083. 800f872: ab03 add r3, sp, #12
  37084. 800f874: 9300 str r3, [sp, #0]
  37085. 800f876: 462a mov r2, r5
  37086. 800f878: 4b12 ldr r3, [pc, #72] @ (800f8c4 <_vfiprintf_r+0x228>)
  37087. 800f87a: a904 add r1, sp, #16
  37088. 800f87c: 4630 mov r0, r6
  37089. 800f87e: f3af 8000 nop.w
  37090. 800f882: 4607 mov r7, r0
  37091. 800f884: 1c78 adds r0, r7, #1
  37092. 800f886: d1d6 bne.n 800f836 <_vfiprintf_r+0x19a>
  37093. 800f888: 6e6b ldr r3, [r5, #100] @ 0x64
  37094. 800f88a: 07d9 lsls r1, r3, #31
  37095. 800f88c: d405 bmi.n 800f89a <_vfiprintf_r+0x1fe>
  37096. 800f88e: 89ab ldrh r3, [r5, #12]
  37097. 800f890: 059a lsls r2, r3, #22
  37098. 800f892: d402 bmi.n 800f89a <_vfiprintf_r+0x1fe>
  37099. 800f894: 6da8 ldr r0, [r5, #88] @ 0x58
  37100. 800f896: f7ff fdcf bl 800f438 <__retarget_lock_release_recursive>
  37101. 800f89a: 89ab ldrh r3, [r5, #12]
  37102. 800f89c: 065b lsls r3, r3, #25
  37103. 800f89e: f53f af1f bmi.w 800f6e0 <_vfiprintf_r+0x44>
  37104. 800f8a2: 9809 ldr r0, [sp, #36] @ 0x24
  37105. 800f8a4: e71e b.n 800f6e4 <_vfiprintf_r+0x48>
  37106. 800f8a6: ab03 add r3, sp, #12
  37107. 800f8a8: 9300 str r3, [sp, #0]
  37108. 800f8aa: 462a mov r2, r5
  37109. 800f8ac: 4b05 ldr r3, [pc, #20] @ (800f8c4 <_vfiprintf_r+0x228>)
  37110. 800f8ae: a904 add r1, sp, #16
  37111. 800f8b0: 4630 mov r0, r6
  37112. 800f8b2: f000 f879 bl 800f9a8 <_printf_i>
  37113. 800f8b6: e7e4 b.n 800f882 <_vfiprintf_r+0x1e6>
  37114. 800f8b8: 080100f0 .word 0x080100f0
  37115. 800f8bc: 080100fa .word 0x080100fa
  37116. 800f8c0: 00000000 .word 0x00000000
  37117. 800f8c4: 0800f677 .word 0x0800f677
  37118. 800f8c8: 080100f6 .word 0x080100f6
  37119. 0800f8cc <_printf_common>:
  37120. 800f8cc: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
  37121. 800f8d0: 4616 mov r6, r2
  37122. 800f8d2: 4698 mov r8, r3
  37123. 800f8d4: 688a ldr r2, [r1, #8]
  37124. 800f8d6: 690b ldr r3, [r1, #16]
  37125. 800f8d8: f8dd 9020 ldr.w r9, [sp, #32]
  37126. 800f8dc: 4293 cmp r3, r2
  37127. 800f8de: bfb8 it lt
  37128. 800f8e0: 4613 movlt r3, r2
  37129. 800f8e2: 6033 str r3, [r6, #0]
  37130. 800f8e4: f891 2043 ldrb.w r2, [r1, #67] @ 0x43
  37131. 800f8e8: 4607 mov r7, r0
  37132. 800f8ea: 460c mov r4, r1
  37133. 800f8ec: b10a cbz r2, 800f8f2 <_printf_common+0x26>
  37134. 800f8ee: 3301 adds r3, #1
  37135. 800f8f0: 6033 str r3, [r6, #0]
  37136. 800f8f2: 6823 ldr r3, [r4, #0]
  37137. 800f8f4: 0699 lsls r1, r3, #26
  37138. 800f8f6: bf42 ittt mi
  37139. 800f8f8: 6833 ldrmi r3, [r6, #0]
  37140. 800f8fa: 3302 addmi r3, #2
  37141. 800f8fc: 6033 strmi r3, [r6, #0]
  37142. 800f8fe: 6825 ldr r5, [r4, #0]
  37143. 800f900: f015 0506 ands.w r5, r5, #6
  37144. 800f904: d106 bne.n 800f914 <_printf_common+0x48>
  37145. 800f906: f104 0a19 add.w sl, r4, #25
  37146. 800f90a: 68e3 ldr r3, [r4, #12]
  37147. 800f90c: 6832 ldr r2, [r6, #0]
  37148. 800f90e: 1a9b subs r3, r3, r2
  37149. 800f910: 42ab cmp r3, r5
  37150. 800f912: dc26 bgt.n 800f962 <_printf_common+0x96>
  37151. 800f914: f894 3043 ldrb.w r3, [r4, #67] @ 0x43
  37152. 800f918: 6822 ldr r2, [r4, #0]
  37153. 800f91a: 3b00 subs r3, #0
  37154. 800f91c: bf18 it ne
  37155. 800f91e: 2301 movne r3, #1
  37156. 800f920: 0692 lsls r2, r2, #26
  37157. 800f922: d42b bmi.n 800f97c <_printf_common+0xb0>
  37158. 800f924: f104 0243 add.w r2, r4, #67 @ 0x43
  37159. 800f928: 4641 mov r1, r8
  37160. 800f92a: 4638 mov r0, r7
  37161. 800f92c: 47c8 blx r9
  37162. 800f92e: 3001 adds r0, #1
  37163. 800f930: d01e beq.n 800f970 <_printf_common+0xa4>
  37164. 800f932: 6823 ldr r3, [r4, #0]
  37165. 800f934: 6922 ldr r2, [r4, #16]
  37166. 800f936: f003 0306 and.w r3, r3, #6
  37167. 800f93a: 2b04 cmp r3, #4
  37168. 800f93c: bf02 ittt eq
  37169. 800f93e: 68e5 ldreq r5, [r4, #12]
  37170. 800f940: 6833 ldreq r3, [r6, #0]
  37171. 800f942: 1aed subeq r5, r5, r3
  37172. 800f944: 68a3 ldr r3, [r4, #8]
  37173. 800f946: bf0c ite eq
  37174. 800f948: ea25 75e5 biceq.w r5, r5, r5, asr #31
  37175. 800f94c: 2500 movne r5, #0
  37176. 800f94e: 4293 cmp r3, r2
  37177. 800f950: bfc4 itt gt
  37178. 800f952: 1a9b subgt r3, r3, r2
  37179. 800f954: 18ed addgt r5, r5, r3
  37180. 800f956: 2600 movs r6, #0
  37181. 800f958: 341a adds r4, #26
  37182. 800f95a: 42b5 cmp r5, r6
  37183. 800f95c: d11a bne.n 800f994 <_printf_common+0xc8>
  37184. 800f95e: 2000 movs r0, #0
  37185. 800f960: e008 b.n 800f974 <_printf_common+0xa8>
  37186. 800f962: 2301 movs r3, #1
  37187. 800f964: 4652 mov r2, sl
  37188. 800f966: 4641 mov r1, r8
  37189. 800f968: 4638 mov r0, r7
  37190. 800f96a: 47c8 blx r9
  37191. 800f96c: 3001 adds r0, #1
  37192. 800f96e: d103 bne.n 800f978 <_printf_common+0xac>
  37193. 800f970: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  37194. 800f974: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  37195. 800f978: 3501 adds r5, #1
  37196. 800f97a: e7c6 b.n 800f90a <_printf_common+0x3e>
  37197. 800f97c: 18e1 adds r1, r4, r3
  37198. 800f97e: 1c5a adds r2, r3, #1
  37199. 800f980: 2030 movs r0, #48 @ 0x30
  37200. 800f982: f881 0043 strb.w r0, [r1, #67] @ 0x43
  37201. 800f986: 4422 add r2, r4
  37202. 800f988: f894 1045 ldrb.w r1, [r4, #69] @ 0x45
  37203. 800f98c: f882 1043 strb.w r1, [r2, #67] @ 0x43
  37204. 800f990: 3302 adds r3, #2
  37205. 800f992: e7c7 b.n 800f924 <_printf_common+0x58>
  37206. 800f994: 2301 movs r3, #1
  37207. 800f996: 4622 mov r2, r4
  37208. 800f998: 4641 mov r1, r8
  37209. 800f99a: 4638 mov r0, r7
  37210. 800f99c: 47c8 blx r9
  37211. 800f99e: 3001 adds r0, #1
  37212. 800f9a0: d0e6 beq.n 800f970 <_printf_common+0xa4>
  37213. 800f9a2: 3601 adds r6, #1
  37214. 800f9a4: e7d9 b.n 800f95a <_printf_common+0x8e>
  37215. ...
  37216. 0800f9a8 <_printf_i>:
  37217. 800f9a8: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr}
  37218. 800f9ac: 7e0f ldrb r7, [r1, #24]
  37219. 800f9ae: 9e0c ldr r6, [sp, #48] @ 0x30
  37220. 800f9b0: 2f78 cmp r7, #120 @ 0x78
  37221. 800f9b2: 4691 mov r9, r2
  37222. 800f9b4: 4680 mov r8, r0
  37223. 800f9b6: 460c mov r4, r1
  37224. 800f9b8: 469a mov sl, r3
  37225. 800f9ba: f101 0243 add.w r2, r1, #67 @ 0x43
  37226. 800f9be: d807 bhi.n 800f9d0 <_printf_i+0x28>
  37227. 800f9c0: 2f62 cmp r7, #98 @ 0x62
  37228. 800f9c2: d80a bhi.n 800f9da <_printf_i+0x32>
  37229. 800f9c4: 2f00 cmp r7, #0
  37230. 800f9c6: f000 80d2 beq.w 800fb6e <_printf_i+0x1c6>
  37231. 800f9ca: 2f58 cmp r7, #88 @ 0x58
  37232. 800f9cc: f000 80b9 beq.w 800fb42 <_printf_i+0x19a>
  37233. 800f9d0: f104 0642 add.w r6, r4, #66 @ 0x42
  37234. 800f9d4: f884 7042 strb.w r7, [r4, #66] @ 0x42
  37235. 800f9d8: e03a b.n 800fa50 <_printf_i+0xa8>
  37236. 800f9da: f1a7 0363 sub.w r3, r7, #99 @ 0x63
  37237. 800f9de: 2b15 cmp r3, #21
  37238. 800f9e0: d8f6 bhi.n 800f9d0 <_printf_i+0x28>
  37239. 800f9e2: a101 add r1, pc, #4 @ (adr r1, 800f9e8 <_printf_i+0x40>)
  37240. 800f9e4: f851 f023 ldr.w pc, [r1, r3, lsl #2]
  37241. 800f9e8: 0800fa41 .word 0x0800fa41
  37242. 800f9ec: 0800fa55 .word 0x0800fa55
  37243. 800f9f0: 0800f9d1 .word 0x0800f9d1
  37244. 800f9f4: 0800f9d1 .word 0x0800f9d1
  37245. 800f9f8: 0800f9d1 .word 0x0800f9d1
  37246. 800f9fc: 0800f9d1 .word 0x0800f9d1
  37247. 800fa00: 0800fa55 .word 0x0800fa55
  37248. 800fa04: 0800f9d1 .word 0x0800f9d1
  37249. 800fa08: 0800f9d1 .word 0x0800f9d1
  37250. 800fa0c: 0800f9d1 .word 0x0800f9d1
  37251. 800fa10: 0800f9d1 .word 0x0800f9d1
  37252. 800fa14: 0800fb55 .word 0x0800fb55
  37253. 800fa18: 0800fa7f .word 0x0800fa7f
  37254. 800fa1c: 0800fb0f .word 0x0800fb0f
  37255. 800fa20: 0800f9d1 .word 0x0800f9d1
  37256. 800fa24: 0800f9d1 .word 0x0800f9d1
  37257. 800fa28: 0800fb77 .word 0x0800fb77
  37258. 800fa2c: 0800f9d1 .word 0x0800f9d1
  37259. 800fa30: 0800fa7f .word 0x0800fa7f
  37260. 800fa34: 0800f9d1 .word 0x0800f9d1
  37261. 800fa38: 0800f9d1 .word 0x0800f9d1
  37262. 800fa3c: 0800fb17 .word 0x0800fb17
  37263. 800fa40: 6833 ldr r3, [r6, #0]
  37264. 800fa42: 1d1a adds r2, r3, #4
  37265. 800fa44: 681b ldr r3, [r3, #0]
  37266. 800fa46: 6032 str r2, [r6, #0]
  37267. 800fa48: f104 0642 add.w r6, r4, #66 @ 0x42
  37268. 800fa4c: f884 3042 strb.w r3, [r4, #66] @ 0x42
  37269. 800fa50: 2301 movs r3, #1
  37270. 800fa52: e09d b.n 800fb90 <_printf_i+0x1e8>
  37271. 800fa54: 6833 ldr r3, [r6, #0]
  37272. 800fa56: 6820 ldr r0, [r4, #0]
  37273. 800fa58: 1d19 adds r1, r3, #4
  37274. 800fa5a: 6031 str r1, [r6, #0]
  37275. 800fa5c: 0606 lsls r6, r0, #24
  37276. 800fa5e: d501 bpl.n 800fa64 <_printf_i+0xbc>
  37277. 800fa60: 681d ldr r5, [r3, #0]
  37278. 800fa62: e003 b.n 800fa6c <_printf_i+0xc4>
  37279. 800fa64: 0645 lsls r5, r0, #25
  37280. 800fa66: d5fb bpl.n 800fa60 <_printf_i+0xb8>
  37281. 800fa68: f9b3 5000 ldrsh.w r5, [r3]
  37282. 800fa6c: 2d00 cmp r5, #0
  37283. 800fa6e: da03 bge.n 800fa78 <_printf_i+0xd0>
  37284. 800fa70: 232d movs r3, #45 @ 0x2d
  37285. 800fa72: 426d negs r5, r5
  37286. 800fa74: f884 3043 strb.w r3, [r4, #67] @ 0x43
  37287. 800fa78: 4859 ldr r0, [pc, #356] @ (800fbe0 <_printf_i+0x238>)
  37288. 800fa7a: 230a movs r3, #10
  37289. 800fa7c: e011 b.n 800faa2 <_printf_i+0xfa>
  37290. 800fa7e: 6821 ldr r1, [r4, #0]
  37291. 800fa80: 6833 ldr r3, [r6, #0]
  37292. 800fa82: 0608 lsls r0, r1, #24
  37293. 800fa84: f853 5b04 ldr.w r5, [r3], #4
  37294. 800fa88: d402 bmi.n 800fa90 <_printf_i+0xe8>
  37295. 800fa8a: 0649 lsls r1, r1, #25
  37296. 800fa8c: bf48 it mi
  37297. 800fa8e: b2ad uxthmi r5, r5
  37298. 800fa90: 2f6f cmp r7, #111 @ 0x6f
  37299. 800fa92: 4853 ldr r0, [pc, #332] @ (800fbe0 <_printf_i+0x238>)
  37300. 800fa94: 6033 str r3, [r6, #0]
  37301. 800fa96: bf14 ite ne
  37302. 800fa98: 230a movne r3, #10
  37303. 800fa9a: 2308 moveq r3, #8
  37304. 800fa9c: 2100 movs r1, #0
  37305. 800fa9e: f884 1043 strb.w r1, [r4, #67] @ 0x43
  37306. 800faa2: 6866 ldr r6, [r4, #4]
  37307. 800faa4: 60a6 str r6, [r4, #8]
  37308. 800faa6: 2e00 cmp r6, #0
  37309. 800faa8: bfa2 ittt ge
  37310. 800faaa: 6821 ldrge r1, [r4, #0]
  37311. 800faac: f021 0104 bicge.w r1, r1, #4
  37312. 800fab0: 6021 strge r1, [r4, #0]
  37313. 800fab2: b90d cbnz r5, 800fab8 <_printf_i+0x110>
  37314. 800fab4: 2e00 cmp r6, #0
  37315. 800fab6: d04b beq.n 800fb50 <_printf_i+0x1a8>
  37316. 800fab8: 4616 mov r6, r2
  37317. 800faba: fbb5 f1f3 udiv r1, r5, r3
  37318. 800fabe: fb03 5711 mls r7, r3, r1, r5
  37319. 800fac2: 5dc7 ldrb r7, [r0, r7]
  37320. 800fac4: f806 7d01 strb.w r7, [r6, #-1]!
  37321. 800fac8: 462f mov r7, r5
  37322. 800faca: 42bb cmp r3, r7
  37323. 800facc: 460d mov r5, r1
  37324. 800face: d9f4 bls.n 800faba <_printf_i+0x112>
  37325. 800fad0: 2b08 cmp r3, #8
  37326. 800fad2: d10b bne.n 800faec <_printf_i+0x144>
  37327. 800fad4: 6823 ldr r3, [r4, #0]
  37328. 800fad6: 07df lsls r7, r3, #31
  37329. 800fad8: d508 bpl.n 800faec <_printf_i+0x144>
  37330. 800fada: 6923 ldr r3, [r4, #16]
  37331. 800fadc: 6861 ldr r1, [r4, #4]
  37332. 800fade: 4299 cmp r1, r3
  37333. 800fae0: bfde ittt le
  37334. 800fae2: 2330 movle r3, #48 @ 0x30
  37335. 800fae4: f806 3c01 strble.w r3, [r6, #-1]
  37336. 800fae8: f106 36ff addle.w r6, r6, #4294967295 @ 0xffffffff
  37337. 800faec: 1b92 subs r2, r2, r6
  37338. 800faee: 6122 str r2, [r4, #16]
  37339. 800faf0: f8cd a000 str.w sl, [sp]
  37340. 800faf4: 464b mov r3, r9
  37341. 800faf6: aa03 add r2, sp, #12
  37342. 800faf8: 4621 mov r1, r4
  37343. 800fafa: 4640 mov r0, r8
  37344. 800fafc: f7ff fee6 bl 800f8cc <_printf_common>
  37345. 800fb00: 3001 adds r0, #1
  37346. 800fb02: d14a bne.n 800fb9a <_printf_i+0x1f2>
  37347. 800fb04: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  37348. 800fb08: b004 add sp, #16
  37349. 800fb0a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  37350. 800fb0e: 6823 ldr r3, [r4, #0]
  37351. 800fb10: f043 0320 orr.w r3, r3, #32
  37352. 800fb14: 6023 str r3, [r4, #0]
  37353. 800fb16: 4833 ldr r0, [pc, #204] @ (800fbe4 <_printf_i+0x23c>)
  37354. 800fb18: 2778 movs r7, #120 @ 0x78
  37355. 800fb1a: f884 7045 strb.w r7, [r4, #69] @ 0x45
  37356. 800fb1e: 6823 ldr r3, [r4, #0]
  37357. 800fb20: 6831 ldr r1, [r6, #0]
  37358. 800fb22: 061f lsls r7, r3, #24
  37359. 800fb24: f851 5b04 ldr.w r5, [r1], #4
  37360. 800fb28: d402 bmi.n 800fb30 <_printf_i+0x188>
  37361. 800fb2a: 065f lsls r7, r3, #25
  37362. 800fb2c: bf48 it mi
  37363. 800fb2e: b2ad uxthmi r5, r5
  37364. 800fb30: 6031 str r1, [r6, #0]
  37365. 800fb32: 07d9 lsls r1, r3, #31
  37366. 800fb34: bf44 itt mi
  37367. 800fb36: f043 0320 orrmi.w r3, r3, #32
  37368. 800fb3a: 6023 strmi r3, [r4, #0]
  37369. 800fb3c: b11d cbz r5, 800fb46 <_printf_i+0x19e>
  37370. 800fb3e: 2310 movs r3, #16
  37371. 800fb40: e7ac b.n 800fa9c <_printf_i+0xf4>
  37372. 800fb42: 4827 ldr r0, [pc, #156] @ (800fbe0 <_printf_i+0x238>)
  37373. 800fb44: e7e9 b.n 800fb1a <_printf_i+0x172>
  37374. 800fb46: 6823 ldr r3, [r4, #0]
  37375. 800fb48: f023 0320 bic.w r3, r3, #32
  37376. 800fb4c: 6023 str r3, [r4, #0]
  37377. 800fb4e: e7f6 b.n 800fb3e <_printf_i+0x196>
  37378. 800fb50: 4616 mov r6, r2
  37379. 800fb52: e7bd b.n 800fad0 <_printf_i+0x128>
  37380. 800fb54: 6833 ldr r3, [r6, #0]
  37381. 800fb56: 6825 ldr r5, [r4, #0]
  37382. 800fb58: 6961 ldr r1, [r4, #20]
  37383. 800fb5a: 1d18 adds r0, r3, #4
  37384. 800fb5c: 6030 str r0, [r6, #0]
  37385. 800fb5e: 062e lsls r6, r5, #24
  37386. 800fb60: 681b ldr r3, [r3, #0]
  37387. 800fb62: d501 bpl.n 800fb68 <_printf_i+0x1c0>
  37388. 800fb64: 6019 str r1, [r3, #0]
  37389. 800fb66: e002 b.n 800fb6e <_printf_i+0x1c6>
  37390. 800fb68: 0668 lsls r0, r5, #25
  37391. 800fb6a: d5fb bpl.n 800fb64 <_printf_i+0x1bc>
  37392. 800fb6c: 8019 strh r1, [r3, #0]
  37393. 800fb6e: 2300 movs r3, #0
  37394. 800fb70: 6123 str r3, [r4, #16]
  37395. 800fb72: 4616 mov r6, r2
  37396. 800fb74: e7bc b.n 800faf0 <_printf_i+0x148>
  37397. 800fb76: 6833 ldr r3, [r6, #0]
  37398. 800fb78: 1d1a adds r2, r3, #4
  37399. 800fb7a: 6032 str r2, [r6, #0]
  37400. 800fb7c: 681e ldr r6, [r3, #0]
  37401. 800fb7e: 6862 ldr r2, [r4, #4]
  37402. 800fb80: 2100 movs r1, #0
  37403. 800fb82: 4630 mov r0, r6
  37404. 800fb84: f7f0 fbac bl 80002e0 <memchr>
  37405. 800fb88: b108 cbz r0, 800fb8e <_printf_i+0x1e6>
  37406. 800fb8a: 1b80 subs r0, r0, r6
  37407. 800fb8c: 6060 str r0, [r4, #4]
  37408. 800fb8e: 6863 ldr r3, [r4, #4]
  37409. 800fb90: 6123 str r3, [r4, #16]
  37410. 800fb92: 2300 movs r3, #0
  37411. 800fb94: f884 3043 strb.w r3, [r4, #67] @ 0x43
  37412. 800fb98: e7aa b.n 800faf0 <_printf_i+0x148>
  37413. 800fb9a: 6923 ldr r3, [r4, #16]
  37414. 800fb9c: 4632 mov r2, r6
  37415. 800fb9e: 4649 mov r1, r9
  37416. 800fba0: 4640 mov r0, r8
  37417. 800fba2: 47d0 blx sl
  37418. 800fba4: 3001 adds r0, #1
  37419. 800fba6: d0ad beq.n 800fb04 <_printf_i+0x15c>
  37420. 800fba8: 6823 ldr r3, [r4, #0]
  37421. 800fbaa: 079b lsls r3, r3, #30
  37422. 800fbac: d413 bmi.n 800fbd6 <_printf_i+0x22e>
  37423. 800fbae: 68e0 ldr r0, [r4, #12]
  37424. 800fbb0: 9b03 ldr r3, [sp, #12]
  37425. 800fbb2: 4298 cmp r0, r3
  37426. 800fbb4: bfb8 it lt
  37427. 800fbb6: 4618 movlt r0, r3
  37428. 800fbb8: e7a6 b.n 800fb08 <_printf_i+0x160>
  37429. 800fbba: 2301 movs r3, #1
  37430. 800fbbc: 4632 mov r2, r6
  37431. 800fbbe: 4649 mov r1, r9
  37432. 800fbc0: 4640 mov r0, r8
  37433. 800fbc2: 47d0 blx sl
  37434. 800fbc4: 3001 adds r0, #1
  37435. 800fbc6: d09d beq.n 800fb04 <_printf_i+0x15c>
  37436. 800fbc8: 3501 adds r5, #1
  37437. 800fbca: 68e3 ldr r3, [r4, #12]
  37438. 800fbcc: 9903 ldr r1, [sp, #12]
  37439. 800fbce: 1a5b subs r3, r3, r1
  37440. 800fbd0: 42ab cmp r3, r5
  37441. 800fbd2: dcf2 bgt.n 800fbba <_printf_i+0x212>
  37442. 800fbd4: e7eb b.n 800fbae <_printf_i+0x206>
  37443. 800fbd6: 2500 movs r5, #0
  37444. 800fbd8: f104 0619 add.w r6, r4, #25
  37445. 800fbdc: e7f5 b.n 800fbca <_printf_i+0x222>
  37446. 800fbde: bf00 nop
  37447. 800fbe0: 08010101 .word 0x08010101
  37448. 800fbe4: 08010112 .word 0x08010112
  37449. 0800fbe8 <__sflush_r>:
  37450. 800fbe8: f9b1 200c ldrsh.w r2, [r1, #12]
  37451. 800fbec: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
  37452. 800fbf0: 0716 lsls r6, r2, #28
  37453. 800fbf2: 4605 mov r5, r0
  37454. 800fbf4: 460c mov r4, r1
  37455. 800fbf6: d454 bmi.n 800fca2 <__sflush_r+0xba>
  37456. 800fbf8: 684b ldr r3, [r1, #4]
  37457. 800fbfa: 2b00 cmp r3, #0
  37458. 800fbfc: dc02 bgt.n 800fc04 <__sflush_r+0x1c>
  37459. 800fbfe: 6c0b ldr r3, [r1, #64] @ 0x40
  37460. 800fc00: 2b00 cmp r3, #0
  37461. 800fc02: dd48 ble.n 800fc96 <__sflush_r+0xae>
  37462. 800fc04: 6ae6 ldr r6, [r4, #44] @ 0x2c
  37463. 800fc06: 2e00 cmp r6, #0
  37464. 800fc08: d045 beq.n 800fc96 <__sflush_r+0xae>
  37465. 800fc0a: 2300 movs r3, #0
  37466. 800fc0c: f412 5280 ands.w r2, r2, #4096 @ 0x1000
  37467. 800fc10: 682f ldr r7, [r5, #0]
  37468. 800fc12: 6a21 ldr r1, [r4, #32]
  37469. 800fc14: 602b str r3, [r5, #0]
  37470. 800fc16: d030 beq.n 800fc7a <__sflush_r+0x92>
  37471. 800fc18: 6d62 ldr r2, [r4, #84] @ 0x54
  37472. 800fc1a: 89a3 ldrh r3, [r4, #12]
  37473. 800fc1c: 0759 lsls r1, r3, #29
  37474. 800fc1e: d505 bpl.n 800fc2c <__sflush_r+0x44>
  37475. 800fc20: 6863 ldr r3, [r4, #4]
  37476. 800fc22: 1ad2 subs r2, r2, r3
  37477. 800fc24: 6b63 ldr r3, [r4, #52] @ 0x34
  37478. 800fc26: b10b cbz r3, 800fc2c <__sflush_r+0x44>
  37479. 800fc28: 6c23 ldr r3, [r4, #64] @ 0x40
  37480. 800fc2a: 1ad2 subs r2, r2, r3
  37481. 800fc2c: 2300 movs r3, #0
  37482. 800fc2e: 6ae6 ldr r6, [r4, #44] @ 0x2c
  37483. 800fc30: 6a21 ldr r1, [r4, #32]
  37484. 800fc32: 4628 mov r0, r5
  37485. 800fc34: 47b0 blx r6
  37486. 800fc36: 1c43 adds r3, r0, #1
  37487. 800fc38: 89a3 ldrh r3, [r4, #12]
  37488. 800fc3a: d106 bne.n 800fc4a <__sflush_r+0x62>
  37489. 800fc3c: 6829 ldr r1, [r5, #0]
  37490. 800fc3e: 291d cmp r1, #29
  37491. 800fc40: d82b bhi.n 800fc9a <__sflush_r+0xb2>
  37492. 800fc42: 4a2a ldr r2, [pc, #168] @ (800fcec <__sflush_r+0x104>)
  37493. 800fc44: 410a asrs r2, r1
  37494. 800fc46: 07d6 lsls r6, r2, #31
  37495. 800fc48: d427 bmi.n 800fc9a <__sflush_r+0xb2>
  37496. 800fc4a: 2200 movs r2, #0
  37497. 800fc4c: 6062 str r2, [r4, #4]
  37498. 800fc4e: 04d9 lsls r1, r3, #19
  37499. 800fc50: 6922 ldr r2, [r4, #16]
  37500. 800fc52: 6022 str r2, [r4, #0]
  37501. 800fc54: d504 bpl.n 800fc60 <__sflush_r+0x78>
  37502. 800fc56: 1c42 adds r2, r0, #1
  37503. 800fc58: d101 bne.n 800fc5e <__sflush_r+0x76>
  37504. 800fc5a: 682b ldr r3, [r5, #0]
  37505. 800fc5c: b903 cbnz r3, 800fc60 <__sflush_r+0x78>
  37506. 800fc5e: 6560 str r0, [r4, #84] @ 0x54
  37507. 800fc60: 6b61 ldr r1, [r4, #52] @ 0x34
  37508. 800fc62: 602f str r7, [r5, #0]
  37509. 800fc64: b1b9 cbz r1, 800fc96 <__sflush_r+0xae>
  37510. 800fc66: f104 0344 add.w r3, r4, #68 @ 0x44
  37511. 800fc6a: 4299 cmp r1, r3
  37512. 800fc6c: d002 beq.n 800fc74 <__sflush_r+0x8c>
  37513. 800fc6e: 4628 mov r0, r5
  37514. 800fc70: f7ff fbf2 bl 800f458 <_free_r>
  37515. 800fc74: 2300 movs r3, #0
  37516. 800fc76: 6363 str r3, [r4, #52] @ 0x34
  37517. 800fc78: e00d b.n 800fc96 <__sflush_r+0xae>
  37518. 800fc7a: 2301 movs r3, #1
  37519. 800fc7c: 4628 mov r0, r5
  37520. 800fc7e: 47b0 blx r6
  37521. 800fc80: 4602 mov r2, r0
  37522. 800fc82: 1c50 adds r0, r2, #1
  37523. 800fc84: d1c9 bne.n 800fc1a <__sflush_r+0x32>
  37524. 800fc86: 682b ldr r3, [r5, #0]
  37525. 800fc88: 2b00 cmp r3, #0
  37526. 800fc8a: d0c6 beq.n 800fc1a <__sflush_r+0x32>
  37527. 800fc8c: 2b1d cmp r3, #29
  37528. 800fc8e: d001 beq.n 800fc94 <__sflush_r+0xac>
  37529. 800fc90: 2b16 cmp r3, #22
  37530. 800fc92: d11e bne.n 800fcd2 <__sflush_r+0xea>
  37531. 800fc94: 602f str r7, [r5, #0]
  37532. 800fc96: 2000 movs r0, #0
  37533. 800fc98: e022 b.n 800fce0 <__sflush_r+0xf8>
  37534. 800fc9a: f043 0340 orr.w r3, r3, #64 @ 0x40
  37535. 800fc9e: b21b sxth r3, r3
  37536. 800fca0: e01b b.n 800fcda <__sflush_r+0xf2>
  37537. 800fca2: 690f ldr r7, [r1, #16]
  37538. 800fca4: 2f00 cmp r7, #0
  37539. 800fca6: d0f6 beq.n 800fc96 <__sflush_r+0xae>
  37540. 800fca8: 0793 lsls r3, r2, #30
  37541. 800fcaa: 680e ldr r6, [r1, #0]
  37542. 800fcac: bf08 it eq
  37543. 800fcae: 694b ldreq r3, [r1, #20]
  37544. 800fcb0: 600f str r7, [r1, #0]
  37545. 800fcb2: bf18 it ne
  37546. 800fcb4: 2300 movne r3, #0
  37547. 800fcb6: eba6 0807 sub.w r8, r6, r7
  37548. 800fcba: 608b str r3, [r1, #8]
  37549. 800fcbc: f1b8 0f00 cmp.w r8, #0
  37550. 800fcc0: dde9 ble.n 800fc96 <__sflush_r+0xae>
  37551. 800fcc2: 6a21 ldr r1, [r4, #32]
  37552. 800fcc4: 6aa6 ldr r6, [r4, #40] @ 0x28
  37553. 800fcc6: 4643 mov r3, r8
  37554. 800fcc8: 463a mov r2, r7
  37555. 800fcca: 4628 mov r0, r5
  37556. 800fccc: 47b0 blx r6
  37557. 800fcce: 2800 cmp r0, #0
  37558. 800fcd0: dc08 bgt.n 800fce4 <__sflush_r+0xfc>
  37559. 800fcd2: f9b4 300c ldrsh.w r3, [r4, #12]
  37560. 800fcd6: f043 0340 orr.w r3, r3, #64 @ 0x40
  37561. 800fcda: 81a3 strh r3, [r4, #12]
  37562. 800fcdc: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  37563. 800fce0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
  37564. 800fce4: 4407 add r7, r0
  37565. 800fce6: eba8 0800 sub.w r8, r8, r0
  37566. 800fcea: e7e7 b.n 800fcbc <__sflush_r+0xd4>
  37567. 800fcec: dfbffffe .word 0xdfbffffe
  37568. 0800fcf0 <_fflush_r>:
  37569. 800fcf0: b538 push {r3, r4, r5, lr}
  37570. 800fcf2: 690b ldr r3, [r1, #16]
  37571. 800fcf4: 4605 mov r5, r0
  37572. 800fcf6: 460c mov r4, r1
  37573. 800fcf8: b913 cbnz r3, 800fd00 <_fflush_r+0x10>
  37574. 800fcfa: 2500 movs r5, #0
  37575. 800fcfc: 4628 mov r0, r5
  37576. 800fcfe: bd38 pop {r3, r4, r5, pc}
  37577. 800fd00: b118 cbz r0, 800fd0a <_fflush_r+0x1a>
  37578. 800fd02: 6a03 ldr r3, [r0, #32]
  37579. 800fd04: b90b cbnz r3, 800fd0a <_fflush_r+0x1a>
  37580. 800fd06: f7ff fa3b bl 800f180 <__sinit>
  37581. 800fd0a: f9b4 300c ldrsh.w r3, [r4, #12]
  37582. 800fd0e: 2b00 cmp r3, #0
  37583. 800fd10: d0f3 beq.n 800fcfa <_fflush_r+0xa>
  37584. 800fd12: 6e62 ldr r2, [r4, #100] @ 0x64
  37585. 800fd14: 07d0 lsls r0, r2, #31
  37586. 800fd16: d404 bmi.n 800fd22 <_fflush_r+0x32>
  37587. 800fd18: 0599 lsls r1, r3, #22
  37588. 800fd1a: d402 bmi.n 800fd22 <_fflush_r+0x32>
  37589. 800fd1c: 6da0 ldr r0, [r4, #88] @ 0x58
  37590. 800fd1e: f7ff fb8a bl 800f436 <__retarget_lock_acquire_recursive>
  37591. 800fd22: 4628 mov r0, r5
  37592. 800fd24: 4621 mov r1, r4
  37593. 800fd26: f7ff ff5f bl 800fbe8 <__sflush_r>
  37594. 800fd2a: 6e63 ldr r3, [r4, #100] @ 0x64
  37595. 800fd2c: 07da lsls r2, r3, #31
  37596. 800fd2e: 4605 mov r5, r0
  37597. 800fd30: d4e4 bmi.n 800fcfc <_fflush_r+0xc>
  37598. 800fd32: 89a3 ldrh r3, [r4, #12]
  37599. 800fd34: 059b lsls r3, r3, #22
  37600. 800fd36: d4e1 bmi.n 800fcfc <_fflush_r+0xc>
  37601. 800fd38: 6da0 ldr r0, [r4, #88] @ 0x58
  37602. 800fd3a: f7ff fb7d bl 800f438 <__retarget_lock_release_recursive>
  37603. 800fd3e: e7dd b.n 800fcfc <_fflush_r+0xc>
  37604. 0800fd40 <__swbuf_r>:
  37605. 800fd40: b5f8 push {r3, r4, r5, r6, r7, lr}
  37606. 800fd42: 460e mov r6, r1
  37607. 800fd44: 4614 mov r4, r2
  37608. 800fd46: 4605 mov r5, r0
  37609. 800fd48: b118 cbz r0, 800fd52 <__swbuf_r+0x12>
  37610. 800fd4a: 6a03 ldr r3, [r0, #32]
  37611. 800fd4c: b90b cbnz r3, 800fd52 <__swbuf_r+0x12>
  37612. 800fd4e: f7ff fa17 bl 800f180 <__sinit>
  37613. 800fd52: 69a3 ldr r3, [r4, #24]
  37614. 800fd54: 60a3 str r3, [r4, #8]
  37615. 800fd56: 89a3 ldrh r3, [r4, #12]
  37616. 800fd58: 071a lsls r2, r3, #28
  37617. 800fd5a: d501 bpl.n 800fd60 <__swbuf_r+0x20>
  37618. 800fd5c: 6923 ldr r3, [r4, #16]
  37619. 800fd5e: b943 cbnz r3, 800fd72 <__swbuf_r+0x32>
  37620. 800fd60: 4621 mov r1, r4
  37621. 800fd62: 4628 mov r0, r5
  37622. 800fd64: f000 f82a bl 800fdbc <__swsetup_r>
  37623. 800fd68: b118 cbz r0, 800fd72 <__swbuf_r+0x32>
  37624. 800fd6a: f04f 37ff mov.w r7, #4294967295 @ 0xffffffff
  37625. 800fd6e: 4638 mov r0, r7
  37626. 800fd70: bdf8 pop {r3, r4, r5, r6, r7, pc}
  37627. 800fd72: 6823 ldr r3, [r4, #0]
  37628. 800fd74: 6922 ldr r2, [r4, #16]
  37629. 800fd76: 1a98 subs r0, r3, r2
  37630. 800fd78: 6963 ldr r3, [r4, #20]
  37631. 800fd7a: b2f6 uxtb r6, r6
  37632. 800fd7c: 4283 cmp r3, r0
  37633. 800fd7e: 4637 mov r7, r6
  37634. 800fd80: dc05 bgt.n 800fd8e <__swbuf_r+0x4e>
  37635. 800fd82: 4621 mov r1, r4
  37636. 800fd84: 4628 mov r0, r5
  37637. 800fd86: f7ff ffb3 bl 800fcf0 <_fflush_r>
  37638. 800fd8a: 2800 cmp r0, #0
  37639. 800fd8c: d1ed bne.n 800fd6a <__swbuf_r+0x2a>
  37640. 800fd8e: 68a3 ldr r3, [r4, #8]
  37641. 800fd90: 3b01 subs r3, #1
  37642. 800fd92: 60a3 str r3, [r4, #8]
  37643. 800fd94: 6823 ldr r3, [r4, #0]
  37644. 800fd96: 1c5a adds r2, r3, #1
  37645. 800fd98: 6022 str r2, [r4, #0]
  37646. 800fd9a: 701e strb r6, [r3, #0]
  37647. 800fd9c: 6962 ldr r2, [r4, #20]
  37648. 800fd9e: 1c43 adds r3, r0, #1
  37649. 800fda0: 429a cmp r2, r3
  37650. 800fda2: d004 beq.n 800fdae <__swbuf_r+0x6e>
  37651. 800fda4: 89a3 ldrh r3, [r4, #12]
  37652. 800fda6: 07db lsls r3, r3, #31
  37653. 800fda8: d5e1 bpl.n 800fd6e <__swbuf_r+0x2e>
  37654. 800fdaa: 2e0a cmp r6, #10
  37655. 800fdac: d1df bne.n 800fd6e <__swbuf_r+0x2e>
  37656. 800fdae: 4621 mov r1, r4
  37657. 800fdb0: 4628 mov r0, r5
  37658. 800fdb2: f7ff ff9d bl 800fcf0 <_fflush_r>
  37659. 800fdb6: 2800 cmp r0, #0
  37660. 800fdb8: d0d9 beq.n 800fd6e <__swbuf_r+0x2e>
  37661. 800fdba: e7d6 b.n 800fd6a <__swbuf_r+0x2a>
  37662. 0800fdbc <__swsetup_r>:
  37663. 800fdbc: b538 push {r3, r4, r5, lr}
  37664. 800fdbe: 4b29 ldr r3, [pc, #164] @ (800fe64 <__swsetup_r+0xa8>)
  37665. 800fdc0: 4605 mov r5, r0
  37666. 800fdc2: 6818 ldr r0, [r3, #0]
  37667. 800fdc4: 460c mov r4, r1
  37668. 800fdc6: b118 cbz r0, 800fdd0 <__swsetup_r+0x14>
  37669. 800fdc8: 6a03 ldr r3, [r0, #32]
  37670. 800fdca: b90b cbnz r3, 800fdd0 <__swsetup_r+0x14>
  37671. 800fdcc: f7ff f9d8 bl 800f180 <__sinit>
  37672. 800fdd0: f9b4 300c ldrsh.w r3, [r4, #12]
  37673. 800fdd4: 0719 lsls r1, r3, #28
  37674. 800fdd6: d422 bmi.n 800fe1e <__swsetup_r+0x62>
  37675. 800fdd8: 06da lsls r2, r3, #27
  37676. 800fdda: d407 bmi.n 800fdec <__swsetup_r+0x30>
  37677. 800fddc: 2209 movs r2, #9
  37678. 800fdde: 602a str r2, [r5, #0]
  37679. 800fde0: f043 0340 orr.w r3, r3, #64 @ 0x40
  37680. 800fde4: 81a3 strh r3, [r4, #12]
  37681. 800fde6: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  37682. 800fdea: e033 b.n 800fe54 <__swsetup_r+0x98>
  37683. 800fdec: 0758 lsls r0, r3, #29
  37684. 800fdee: d512 bpl.n 800fe16 <__swsetup_r+0x5a>
  37685. 800fdf0: 6b61 ldr r1, [r4, #52] @ 0x34
  37686. 800fdf2: b141 cbz r1, 800fe06 <__swsetup_r+0x4a>
  37687. 800fdf4: f104 0344 add.w r3, r4, #68 @ 0x44
  37688. 800fdf8: 4299 cmp r1, r3
  37689. 800fdfa: d002 beq.n 800fe02 <__swsetup_r+0x46>
  37690. 800fdfc: 4628 mov r0, r5
  37691. 800fdfe: f7ff fb2b bl 800f458 <_free_r>
  37692. 800fe02: 2300 movs r3, #0
  37693. 800fe04: 6363 str r3, [r4, #52] @ 0x34
  37694. 800fe06: 89a3 ldrh r3, [r4, #12]
  37695. 800fe08: f023 0324 bic.w r3, r3, #36 @ 0x24
  37696. 800fe0c: 81a3 strh r3, [r4, #12]
  37697. 800fe0e: 2300 movs r3, #0
  37698. 800fe10: 6063 str r3, [r4, #4]
  37699. 800fe12: 6923 ldr r3, [r4, #16]
  37700. 800fe14: 6023 str r3, [r4, #0]
  37701. 800fe16: 89a3 ldrh r3, [r4, #12]
  37702. 800fe18: f043 0308 orr.w r3, r3, #8
  37703. 800fe1c: 81a3 strh r3, [r4, #12]
  37704. 800fe1e: 6923 ldr r3, [r4, #16]
  37705. 800fe20: b94b cbnz r3, 800fe36 <__swsetup_r+0x7a>
  37706. 800fe22: 89a3 ldrh r3, [r4, #12]
  37707. 800fe24: f403 7320 and.w r3, r3, #640 @ 0x280
  37708. 800fe28: f5b3 7f00 cmp.w r3, #512 @ 0x200
  37709. 800fe2c: d003 beq.n 800fe36 <__swsetup_r+0x7a>
  37710. 800fe2e: 4621 mov r1, r4
  37711. 800fe30: 4628 mov r0, r5
  37712. 800fe32: f000 f84f bl 800fed4 <__smakebuf_r>
  37713. 800fe36: f9b4 300c ldrsh.w r3, [r4, #12]
  37714. 800fe3a: f013 0201 ands.w r2, r3, #1
  37715. 800fe3e: d00a beq.n 800fe56 <__swsetup_r+0x9a>
  37716. 800fe40: 2200 movs r2, #0
  37717. 800fe42: 60a2 str r2, [r4, #8]
  37718. 800fe44: 6962 ldr r2, [r4, #20]
  37719. 800fe46: 4252 negs r2, r2
  37720. 800fe48: 61a2 str r2, [r4, #24]
  37721. 800fe4a: 6922 ldr r2, [r4, #16]
  37722. 800fe4c: b942 cbnz r2, 800fe60 <__swsetup_r+0xa4>
  37723. 800fe4e: f013 0080 ands.w r0, r3, #128 @ 0x80
  37724. 800fe52: d1c5 bne.n 800fde0 <__swsetup_r+0x24>
  37725. 800fe54: bd38 pop {r3, r4, r5, pc}
  37726. 800fe56: 0799 lsls r1, r3, #30
  37727. 800fe58: bf58 it pl
  37728. 800fe5a: 6962 ldrpl r2, [r4, #20]
  37729. 800fe5c: 60a2 str r2, [r4, #8]
  37730. 800fe5e: e7f4 b.n 800fe4a <__swsetup_r+0x8e>
  37731. 800fe60: 2000 movs r0, #0
  37732. 800fe62: e7f7 b.n 800fe54 <__swsetup_r+0x98>
  37733. 800fe64: 24000020 .word 0x24000020
  37734. 0800fe68 <_sbrk_r>:
  37735. 800fe68: b538 push {r3, r4, r5, lr}
  37736. 800fe6a: 4d06 ldr r5, [pc, #24] @ (800fe84 <_sbrk_r+0x1c>)
  37737. 800fe6c: 2300 movs r3, #0
  37738. 800fe6e: 4604 mov r4, r0
  37739. 800fe70: 4608 mov r0, r1
  37740. 800fe72: 602b str r3, [r5, #0]
  37741. 800fe74: f7f1 fdbe bl 80019f4 <_sbrk>
  37742. 800fe78: 1c43 adds r3, r0, #1
  37743. 800fe7a: d102 bne.n 800fe82 <_sbrk_r+0x1a>
  37744. 800fe7c: 682b ldr r3, [r5, #0]
  37745. 800fe7e: b103 cbz r3, 800fe82 <_sbrk_r+0x1a>
  37746. 800fe80: 6023 str r3, [r4, #0]
  37747. 800fe82: bd38 pop {r3, r4, r5, pc}
  37748. 800fe84: 240128b8 .word 0x240128b8
  37749. 0800fe88 <__swhatbuf_r>:
  37750. 800fe88: b570 push {r4, r5, r6, lr}
  37751. 800fe8a: 460c mov r4, r1
  37752. 800fe8c: f9b1 100e ldrsh.w r1, [r1, #14]
  37753. 800fe90: 2900 cmp r1, #0
  37754. 800fe92: b096 sub sp, #88 @ 0x58
  37755. 800fe94: 4615 mov r5, r2
  37756. 800fe96: 461e mov r6, r3
  37757. 800fe98: da0d bge.n 800feb6 <__swhatbuf_r+0x2e>
  37758. 800fe9a: 89a3 ldrh r3, [r4, #12]
  37759. 800fe9c: f013 0f80 tst.w r3, #128 @ 0x80
  37760. 800fea0: f04f 0100 mov.w r1, #0
  37761. 800fea4: bf14 ite ne
  37762. 800fea6: 2340 movne r3, #64 @ 0x40
  37763. 800fea8: f44f 6380 moveq.w r3, #1024 @ 0x400
  37764. 800feac: 2000 movs r0, #0
  37765. 800feae: 6031 str r1, [r6, #0]
  37766. 800feb0: 602b str r3, [r5, #0]
  37767. 800feb2: b016 add sp, #88 @ 0x58
  37768. 800feb4: bd70 pop {r4, r5, r6, pc}
  37769. 800feb6: 466a mov r2, sp
  37770. 800feb8: f000 f848 bl 800ff4c <_fstat_r>
  37771. 800febc: 2800 cmp r0, #0
  37772. 800febe: dbec blt.n 800fe9a <__swhatbuf_r+0x12>
  37773. 800fec0: 9901 ldr r1, [sp, #4]
  37774. 800fec2: f401 4170 and.w r1, r1, #61440 @ 0xf000
  37775. 800fec6: f5a1 5300 sub.w r3, r1, #8192 @ 0x2000
  37776. 800feca: 4259 negs r1, r3
  37777. 800fecc: 4159 adcs r1, r3
  37778. 800fece: f44f 6380 mov.w r3, #1024 @ 0x400
  37779. 800fed2: e7eb b.n 800feac <__swhatbuf_r+0x24>
  37780. 0800fed4 <__smakebuf_r>:
  37781. 800fed4: 898b ldrh r3, [r1, #12]
  37782. 800fed6: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
  37783. 800fed8: 079d lsls r5, r3, #30
  37784. 800feda: 4606 mov r6, r0
  37785. 800fedc: 460c mov r4, r1
  37786. 800fede: d507 bpl.n 800fef0 <__smakebuf_r+0x1c>
  37787. 800fee0: f104 0347 add.w r3, r4, #71 @ 0x47
  37788. 800fee4: 6023 str r3, [r4, #0]
  37789. 800fee6: 6123 str r3, [r4, #16]
  37790. 800fee8: 2301 movs r3, #1
  37791. 800feea: 6163 str r3, [r4, #20]
  37792. 800feec: b003 add sp, #12
  37793. 800feee: bdf0 pop {r4, r5, r6, r7, pc}
  37794. 800fef0: ab01 add r3, sp, #4
  37795. 800fef2: 466a mov r2, sp
  37796. 800fef4: f7ff ffc8 bl 800fe88 <__swhatbuf_r>
  37797. 800fef8: 9f00 ldr r7, [sp, #0]
  37798. 800fefa: 4605 mov r5, r0
  37799. 800fefc: 4639 mov r1, r7
  37800. 800fefe: 4630 mov r0, r6
  37801. 800ff00: f7ff fb16 bl 800f530 <_malloc_r>
  37802. 800ff04: b948 cbnz r0, 800ff1a <__smakebuf_r+0x46>
  37803. 800ff06: f9b4 300c ldrsh.w r3, [r4, #12]
  37804. 800ff0a: 059a lsls r2, r3, #22
  37805. 800ff0c: d4ee bmi.n 800feec <__smakebuf_r+0x18>
  37806. 800ff0e: f023 0303 bic.w r3, r3, #3
  37807. 800ff12: f043 0302 orr.w r3, r3, #2
  37808. 800ff16: 81a3 strh r3, [r4, #12]
  37809. 800ff18: e7e2 b.n 800fee0 <__smakebuf_r+0xc>
  37810. 800ff1a: 89a3 ldrh r3, [r4, #12]
  37811. 800ff1c: 6020 str r0, [r4, #0]
  37812. 800ff1e: f043 0380 orr.w r3, r3, #128 @ 0x80
  37813. 800ff22: 81a3 strh r3, [r4, #12]
  37814. 800ff24: 9b01 ldr r3, [sp, #4]
  37815. 800ff26: e9c4 0704 strd r0, r7, [r4, #16]
  37816. 800ff2a: b15b cbz r3, 800ff44 <__smakebuf_r+0x70>
  37817. 800ff2c: f9b4 100e ldrsh.w r1, [r4, #14]
  37818. 800ff30: 4630 mov r0, r6
  37819. 800ff32: f000 f81d bl 800ff70 <_isatty_r>
  37820. 800ff36: b128 cbz r0, 800ff44 <__smakebuf_r+0x70>
  37821. 800ff38: 89a3 ldrh r3, [r4, #12]
  37822. 800ff3a: f023 0303 bic.w r3, r3, #3
  37823. 800ff3e: f043 0301 orr.w r3, r3, #1
  37824. 800ff42: 81a3 strh r3, [r4, #12]
  37825. 800ff44: 89a3 ldrh r3, [r4, #12]
  37826. 800ff46: 431d orrs r5, r3
  37827. 800ff48: 81a5 strh r5, [r4, #12]
  37828. 800ff4a: e7cf b.n 800feec <__smakebuf_r+0x18>
  37829. 0800ff4c <_fstat_r>:
  37830. 800ff4c: b538 push {r3, r4, r5, lr}
  37831. 800ff4e: 4d07 ldr r5, [pc, #28] @ (800ff6c <_fstat_r+0x20>)
  37832. 800ff50: 2300 movs r3, #0
  37833. 800ff52: 4604 mov r4, r0
  37834. 800ff54: 4608 mov r0, r1
  37835. 800ff56: 4611 mov r1, r2
  37836. 800ff58: 602b str r3, [r5, #0]
  37837. 800ff5a: f7f1 fd22 bl 80019a2 <_fstat>
  37838. 800ff5e: 1c43 adds r3, r0, #1
  37839. 800ff60: d102 bne.n 800ff68 <_fstat_r+0x1c>
  37840. 800ff62: 682b ldr r3, [r5, #0]
  37841. 800ff64: b103 cbz r3, 800ff68 <_fstat_r+0x1c>
  37842. 800ff66: 6023 str r3, [r4, #0]
  37843. 800ff68: bd38 pop {r3, r4, r5, pc}
  37844. 800ff6a: bf00 nop
  37845. 800ff6c: 240128b8 .word 0x240128b8
  37846. 0800ff70 <_isatty_r>:
  37847. 800ff70: b538 push {r3, r4, r5, lr}
  37848. 800ff72: 4d06 ldr r5, [pc, #24] @ (800ff8c <_isatty_r+0x1c>)
  37849. 800ff74: 2300 movs r3, #0
  37850. 800ff76: 4604 mov r4, r0
  37851. 800ff78: 4608 mov r0, r1
  37852. 800ff7a: 602b str r3, [r5, #0]
  37853. 800ff7c: f7f1 fd21 bl 80019c2 <_isatty>
  37854. 800ff80: 1c43 adds r3, r0, #1
  37855. 800ff82: d102 bne.n 800ff8a <_isatty_r+0x1a>
  37856. 800ff84: 682b ldr r3, [r5, #0]
  37857. 800ff86: b103 cbz r3, 800ff8a <_isatty_r+0x1a>
  37858. 800ff88: 6023 str r3, [r4, #0]
  37859. 800ff8a: bd38 pop {r3, r4, r5, pc}
  37860. 800ff8c: 240128b8 .word 0x240128b8
  37861. 0800ff90 <_init>:
  37862. 800ff90: b5f8 push {r3, r4, r5, r6, r7, lr}
  37863. 800ff92: bf00 nop
  37864. 800ff94: bcf8 pop {r3, r4, r5, r6, r7}
  37865. 800ff96: bc08 pop {r3}
  37866. 800ff98: 469e mov lr, r3
  37867. 800ff9a: 4770 bx lr
  37868. 0800ff9c <_fini>:
  37869. 800ff9c: b5f8 push {r3, r4, r5, r6, r7, lr}
  37870. 800ff9e: bf00 nop
  37871. 800ffa0: bcf8 pop {r3, r4, r5, r6, r7}
  37872. 800ffa2: bc08 pop {r3}
  37873. 800ffa4: 469e mov lr, r3
  37874. 800ffa6: 4770 bx lr