cc1200_spi_ripper.list 1002 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663
  1. cc1200_spi_ripper.elf: file format elf32-littlearm
  2. Sections:
  3. Idx Name Size VMA LMA File off Algn
  4. 0 .isr_vector 000002cc 08000000 08000000 00010000 2**0
  5. CONTENTS, ALLOC, LOAD, READONLY, DATA
  6. 1 .text 0000a544 080002d0 080002d0 000102d0 2**4
  7. CONTENTS, ALLOC, LOAD, READONLY, CODE
  8. 2 .rodata 00000228 0800a814 0800a814 0001a814 2**2
  9. CONTENTS, ALLOC, LOAD, READONLY, DATA
  10. 3 .init_array 00000004 0800aa3c 0800aa3c 0001aa3c 2**2
  11. CONTENTS, ALLOC, LOAD, DATA
  12. 4 .fini_array 00000004 0800aa40 0800aa40 0001aa40 2**2
  13. CONTENTS, ALLOC, LOAD, DATA
  14. 5 .data 000001e8 24000000 0800aa44 00020000 2**2
  15. CONTENTS, ALLOC, LOAD, DATA
  16. 6 .bss 00001b8c 240001e8 0800ac2c 000201e8 2**2
  17. ALLOC
  18. 7 ._user_heap_stack 00000604 24001d74 0800ac2c 00021d74 2**0
  19. ALLOC
  20. 8 .ARM.attributes 0000002e 00000000 00000000 000201e8 2**0
  21. CONTENTS, READONLY
  22. 9 .debug_info 0002d67a 00000000 00000000 00020216 2**0
  23. CONTENTS, READONLY, DEBUGGING, OCTETS
  24. 10 .debug_abbrev 000052c9 00000000 00000000 0004d890 2**0
  25. CONTENTS, READONLY, DEBUGGING, OCTETS
  26. 11 .debug_aranges 00001740 00000000 00000000 00052b60 2**3
  27. CONTENTS, READONLY, DEBUGGING, OCTETS
  28. 12 .debug_ranges 00001578 00000000 00000000 000542a0 2**3
  29. CONTENTS, READONLY, DEBUGGING, OCTETS
  30. 13 .debug_macro 0003a87c 00000000 00000000 00055818 2**0
  31. CONTENTS, READONLY, DEBUGGING, OCTETS
  32. 14 .debug_line 0001cba1 00000000 00000000 00090094 2**0
  33. CONTENTS, READONLY, DEBUGGING, OCTETS
  34. 15 .debug_str 001622a6 00000000 00000000 000acc35 2**0
  35. CONTENTS, READONLY, DEBUGGING, OCTETS
  36. 16 .comment 00000053 00000000 00000000 0020eedb 2**0
  37. CONTENTS, READONLY
  38. 17 .debug_frame 00006a10 00000000 00000000 0020ef30 2**2
  39. CONTENTS, READONLY, DEBUGGING, OCTETS
  40. Disassembly of section .text:
  41. 080002d0 <__do_global_dtors_aux>:
  42. 80002d0: b510 push {r4, lr}
  43. 80002d2: 4c05 ldr r4, [pc, #20] ; (80002e8 <__do_global_dtors_aux+0x18>)
  44. 80002d4: 7823 ldrb r3, [r4, #0]
  45. 80002d6: b933 cbnz r3, 80002e6 <__do_global_dtors_aux+0x16>
  46. 80002d8: 4b04 ldr r3, [pc, #16] ; (80002ec <__do_global_dtors_aux+0x1c>)
  47. 80002da: b113 cbz r3, 80002e2 <__do_global_dtors_aux+0x12>
  48. 80002dc: 4804 ldr r0, [pc, #16] ; (80002f0 <__do_global_dtors_aux+0x20>)
  49. 80002de: f3af 8000 nop.w
  50. 80002e2: 2301 movs r3, #1
  51. 80002e4: 7023 strb r3, [r4, #0]
  52. 80002e6: bd10 pop {r4, pc}
  53. 80002e8: 240001e8 .word 0x240001e8
  54. 80002ec: 00000000 .word 0x00000000
  55. 80002f0: 0800a7fc .word 0x0800a7fc
  56. 080002f4 <frame_dummy>:
  57. 80002f4: b508 push {r3, lr}
  58. 80002f6: 4b03 ldr r3, [pc, #12] ; (8000304 <frame_dummy+0x10>)
  59. 80002f8: b11b cbz r3, 8000302 <frame_dummy+0xe>
  60. 80002fa: 4903 ldr r1, [pc, #12] ; (8000308 <frame_dummy+0x14>)
  61. 80002fc: 4803 ldr r0, [pc, #12] ; (800030c <frame_dummy+0x18>)
  62. 80002fe: f3af 8000 nop.w
  63. 8000302: bd08 pop {r3, pc}
  64. 8000304: 00000000 .word 0x00000000
  65. 8000308: 240001ec .word 0x240001ec
  66. 800030c: 0800a7fc .word 0x0800a7fc
  67. 08000310 <memchr>:
  68. 8000310: f001 01ff and.w r1, r1, #255 ; 0xff
  69. 8000314: 2a10 cmp r2, #16
  70. 8000316: db2b blt.n 8000370 <memchr+0x60>
  71. 8000318: f010 0f07 tst.w r0, #7
  72. 800031c: d008 beq.n 8000330 <memchr+0x20>
  73. 800031e: f810 3b01 ldrb.w r3, [r0], #1
  74. 8000322: 3a01 subs r2, #1
  75. 8000324: 428b cmp r3, r1
  76. 8000326: d02d beq.n 8000384 <memchr+0x74>
  77. 8000328: f010 0f07 tst.w r0, #7
  78. 800032c: b342 cbz r2, 8000380 <memchr+0x70>
  79. 800032e: d1f6 bne.n 800031e <memchr+0xe>
  80. 8000330: b4f0 push {r4, r5, r6, r7}
  81. 8000332: ea41 2101 orr.w r1, r1, r1, lsl #8
  82. 8000336: ea41 4101 orr.w r1, r1, r1, lsl #16
  83. 800033a: f022 0407 bic.w r4, r2, #7
  84. 800033e: f07f 0700 mvns.w r7, #0
  85. 8000342: 2300 movs r3, #0
  86. 8000344: e8f0 5602 ldrd r5, r6, [r0], #8
  87. 8000348: 3c08 subs r4, #8
  88. 800034a: ea85 0501 eor.w r5, r5, r1
  89. 800034e: ea86 0601 eor.w r6, r6, r1
  90. 8000352: fa85 f547 uadd8 r5, r5, r7
  91. 8000356: faa3 f587 sel r5, r3, r7
  92. 800035a: fa86 f647 uadd8 r6, r6, r7
  93. 800035e: faa5 f687 sel r6, r5, r7
  94. 8000362: b98e cbnz r6, 8000388 <memchr+0x78>
  95. 8000364: d1ee bne.n 8000344 <memchr+0x34>
  96. 8000366: bcf0 pop {r4, r5, r6, r7}
  97. 8000368: f001 01ff and.w r1, r1, #255 ; 0xff
  98. 800036c: f002 0207 and.w r2, r2, #7
  99. 8000370: b132 cbz r2, 8000380 <memchr+0x70>
  100. 8000372: f810 3b01 ldrb.w r3, [r0], #1
  101. 8000376: 3a01 subs r2, #1
  102. 8000378: ea83 0301 eor.w r3, r3, r1
  103. 800037c: b113 cbz r3, 8000384 <memchr+0x74>
  104. 800037e: d1f8 bne.n 8000372 <memchr+0x62>
  105. 8000380: 2000 movs r0, #0
  106. 8000382: 4770 bx lr
  107. 8000384: 3801 subs r0, #1
  108. 8000386: 4770 bx lr
  109. 8000388: 2d00 cmp r5, #0
  110. 800038a: bf06 itte eq
  111. 800038c: 4635 moveq r5, r6
  112. 800038e: 3803 subeq r0, #3
  113. 8000390: 3807 subne r0, #7
  114. 8000392: f015 0f01 tst.w r5, #1
  115. 8000396: d107 bne.n 80003a8 <memchr+0x98>
  116. 8000398: 3001 adds r0, #1
  117. 800039a: f415 7f80 tst.w r5, #256 ; 0x100
  118. 800039e: bf02 ittt eq
  119. 80003a0: 3001 addeq r0, #1
  120. 80003a2: f415 3fc0 tsteq.w r5, #98304 ; 0x18000
  121. 80003a6: 3001 addeq r0, #1
  122. 80003a8: bcf0 pop {r4, r5, r6, r7}
  123. 80003aa: 3801 subs r0, #1
  124. 80003ac: 4770 bx lr
  125. 80003ae: bf00 nop
  126. 080003b0 <LL_SPI_Enable>:
  127. * @rmtoll CR1 SPE LL_SPI_Enable
  128. * @param SPIx SPI Instance
  129. * @retval None
  130. */
  131. __STATIC_INLINE void LL_SPI_Enable(SPI_TypeDef *SPIx)
  132. {
  133. 80003b0: b480 push {r7}
  134. 80003b2: b083 sub sp, #12
  135. 80003b4: af00 add r7, sp, #0
  136. 80003b6: 6078 str r0, [r7, #4]
  137. SET_BIT(SPIx->CR1, SPI_CR1_SPE);
  138. 80003b8: 687b ldr r3, [r7, #4]
  139. 80003ba: 681b ldr r3, [r3, #0]
  140. 80003bc: f043 0201 orr.w r2, r3, #1
  141. 80003c0: 687b ldr r3, [r7, #4]
  142. 80003c2: 601a str r2, [r3, #0]
  143. }
  144. 80003c4: bf00 nop
  145. 80003c6: 370c adds r7, #12
  146. 80003c8: 46bd mov sp, r7
  147. 80003ca: f85d 7b04 ldr.w r7, [sp], #4
  148. 80003ce: 4770 bx lr
  149. 080003d0 <LL_SPI_Disable>:
  150. * @rmtoll CR1 SPE LL_SPI_Disable
  151. * @param SPIx SPI Instance
  152. * @retval None
  153. */
  154. __STATIC_INLINE void LL_SPI_Disable(SPI_TypeDef *SPIx)
  155. {
  156. 80003d0: b480 push {r7}
  157. 80003d2: b083 sub sp, #12
  158. 80003d4: af00 add r7, sp, #0
  159. 80003d6: 6078 str r0, [r7, #4]
  160. CLEAR_BIT(SPIx->CR1, SPI_CR1_SPE);
  161. 80003d8: 687b ldr r3, [r7, #4]
  162. 80003da: 681b ldr r3, [r3, #0]
  163. 80003dc: f023 0201 bic.w r2, r3, #1
  164. 80003e0: 687b ldr r3, [r7, #4]
  165. 80003e2: 601a str r2, [r3, #0]
  166. }
  167. 80003e4: bf00 nop
  168. 80003e6: 370c adds r7, #12
  169. 80003e8: 46bd mov sp, r7
  170. 80003ea: f85d 7b04 ldr.w r7, [sp], #4
  171. 80003ee: 4770 bx lr
  172. 080003f0 <LL_SPI_SetTransferSize>:
  173. * @param SPIx SPI Instance
  174. * @param Count 0..0xFFFF
  175. * @retval None
  176. */
  177. __STATIC_INLINE void LL_SPI_SetTransferSize(SPI_TypeDef *SPIx, uint32_t Count)
  178. {
  179. 80003f0: b480 push {r7}
  180. 80003f2: b083 sub sp, #12
  181. 80003f4: af00 add r7, sp, #0
  182. 80003f6: 6078 str r0, [r7, #4]
  183. 80003f8: 6039 str r1, [r7, #0]
  184. MODIFY_REG(SPIx->CR2, SPI_CR2_TSIZE, Count);
  185. 80003fa: 687b ldr r3, [r7, #4]
  186. 80003fc: 685a ldr r2, [r3, #4]
  187. 80003fe: 4b06 ldr r3, [pc, #24] ; (8000418 <LL_SPI_SetTransferSize+0x28>)
  188. 8000400: 4013 ands r3, r2
  189. 8000402: 683a ldr r2, [r7, #0]
  190. 8000404: 431a orrs r2, r3
  191. 8000406: 687b ldr r3, [r7, #4]
  192. 8000408: 605a str r2, [r3, #4]
  193. }
  194. 800040a: bf00 nop
  195. 800040c: 370c adds r7, #12
  196. 800040e: 46bd mov sp, r7
  197. 8000410: f85d 7b04 ldr.w r7, [sp], #4
  198. 8000414: 4770 bx lr
  199. 8000416: bf00 nop
  200. 8000418: ffff0000 .word 0xffff0000
  201. 0800041c <LL_SPI_StartMasterTransfer>:
  202. * @rmtoll CR1 CSTART LL_SPI_StartMasterTransfer
  203. * @param SPIx SPI Instance
  204. * @retval None
  205. */
  206. __STATIC_INLINE void LL_SPI_StartMasterTransfer(SPI_TypeDef *SPIx)
  207. {
  208. 800041c: b480 push {r7}
  209. 800041e: b083 sub sp, #12
  210. 8000420: af00 add r7, sp, #0
  211. 8000422: 6078 str r0, [r7, #4]
  212. SET_BIT(SPIx->CR1, SPI_CR1_CSTART);
  213. 8000424: 687b ldr r3, [r7, #4]
  214. 8000426: 681b ldr r3, [r3, #0]
  215. 8000428: f443 7200 orr.w r2, r3, #512 ; 0x200
  216. 800042c: 687b ldr r3, [r7, #4]
  217. 800042e: 601a str r2, [r3, #0]
  218. }
  219. 8000430: bf00 nop
  220. 8000432: 370c adds r7, #12
  221. 8000434: 46bd mov sp, r7
  222. 8000436: f85d 7b04 ldr.w r7, [sp], #4
  223. 800043a: 4770 bx lr
  224. 0800043c <LL_SPI_IsActiveFlag_RXP>:
  225. * @rmtoll SR RXP LL_SPI_IsActiveFlag_RXP
  226. * @param SPIx SPI Instance
  227. * @retval State of bit (1 or 0)
  228. */
  229. __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_RXP(SPI_TypeDef *SPIx)
  230. {
  231. 800043c: b480 push {r7}
  232. 800043e: b083 sub sp, #12
  233. 8000440: af00 add r7, sp, #0
  234. 8000442: 6078 str r0, [r7, #4]
  235. return ((READ_BIT(SPIx->SR, SPI_SR_RXP) == (SPI_SR_RXP)) ? 1UL : 0UL);
  236. 8000444: 687b ldr r3, [r7, #4]
  237. 8000446: 695b ldr r3, [r3, #20]
  238. 8000448: f003 0301 and.w r3, r3, #1
  239. 800044c: 2b01 cmp r3, #1
  240. 800044e: d101 bne.n 8000454 <LL_SPI_IsActiveFlag_RXP+0x18>
  241. 8000450: 2301 movs r3, #1
  242. 8000452: e000 b.n 8000456 <LL_SPI_IsActiveFlag_RXP+0x1a>
  243. 8000454: 2300 movs r3, #0
  244. }
  245. 8000456: 4618 mov r0, r3
  246. 8000458: 370c adds r7, #12
  247. 800045a: 46bd mov sp, r7
  248. 800045c: f85d 7b04 ldr.w r7, [sp], #4
  249. 8000460: 4770 bx lr
  250. 08000462 <LL_SPI_IsActiveFlag_EOT>:
  251. * @rmtoll SR EOT LL_SPI_IsActiveFlag_EOT
  252. * @param SPIx SPI Instance
  253. * @retval State of bit (1 or 0).
  254. */
  255. __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_EOT(SPI_TypeDef *SPIx)
  256. {
  257. 8000462: b480 push {r7}
  258. 8000464: b083 sub sp, #12
  259. 8000466: af00 add r7, sp, #0
  260. 8000468: 6078 str r0, [r7, #4]
  261. return ((READ_BIT(SPIx->SR, SPI_SR_EOT) == (SPI_SR_EOT)) ? 1UL : 0UL);
  262. 800046a: 687b ldr r3, [r7, #4]
  263. 800046c: 695b ldr r3, [r3, #20]
  264. 800046e: f003 0308 and.w r3, r3, #8
  265. 8000472: 2b08 cmp r3, #8
  266. 8000474: d101 bne.n 800047a <LL_SPI_IsActiveFlag_EOT+0x18>
  267. 8000476: 2301 movs r3, #1
  268. 8000478: e000 b.n 800047c <LL_SPI_IsActiveFlag_EOT+0x1a>
  269. 800047a: 2300 movs r3, #0
  270. }
  271. 800047c: 4618 mov r0, r3
  272. 800047e: 370c adds r7, #12
  273. 8000480: 46bd mov sp, r7
  274. 8000482: f85d 7b04 ldr.w r7, [sp], #4
  275. 8000486: 4770 bx lr
  276. 08000488 <LL_SPI_ReceiveData8>:
  277. * @rmtoll RXDR . LL_SPI_ReceiveData8
  278. * @param SPIx SPI Instance
  279. * @retval 0..0xFF
  280. */
  281. __STATIC_INLINE uint8_t LL_SPI_ReceiveData8(SPI_TypeDef *SPIx)
  282. {
  283. 8000488: b480 push {r7}
  284. 800048a: b083 sub sp, #12
  285. 800048c: af00 add r7, sp, #0
  286. 800048e: 6078 str r0, [r7, #4]
  287. return (*((__IO uint8_t *)&SPIx->RXDR));
  288. 8000490: 687b ldr r3, [r7, #4]
  289. 8000492: 3330 adds r3, #48 ; 0x30
  290. 8000494: 781b ldrb r3, [r3, #0]
  291. 8000496: b2db uxtb r3, r3
  292. }
  293. 8000498: 4618 mov r0, r3
  294. 800049a: 370c adds r7, #12
  295. 800049c: 46bd mov sp, r7
  296. 800049e: f85d 7b04 ldr.w r7, [sp], #4
  297. 80004a2: 4770 bx lr
  298. 080004a4 <LL_SPI_TransmitData8>:
  299. * @param SPIx SPI Instance
  300. * @param TxData 0..0xFF
  301. * @retval None
  302. */
  303. __STATIC_INLINE void LL_SPI_TransmitData8(SPI_TypeDef *SPIx, uint8_t TxData)
  304. {
  305. 80004a4: b480 push {r7}
  306. 80004a6: b083 sub sp, #12
  307. 80004a8: af00 add r7, sp, #0
  308. 80004aa: 6078 str r0, [r7, #4]
  309. 80004ac: 460b mov r3, r1
  310. 80004ae: 70fb strb r3, [r7, #3]
  311. *((__IO uint8_t *)&SPIx->TXDR) = TxData;
  312. 80004b0: 687b ldr r3, [r7, #4]
  313. 80004b2: 3320 adds r3, #32
  314. 80004b4: 78fa ldrb r2, [r7, #3]
  315. 80004b6: 701a strb r2, [r3, #0]
  316. }
  317. 80004b8: bf00 nop
  318. 80004ba: 370c adds r7, #12
  319. 80004bc: 46bd mov sp, r7
  320. 80004be: f85d 7b04 ldr.w r7, [sp], #4
  321. 80004c2: 4770 bx lr
  322. 080004c4 <LL_SPI_TransmitData16>:
  323. * @param SPIx SPI Instance
  324. * @param TxData 0..0xFFFF
  325. * @retval None
  326. */
  327. __STATIC_INLINE void LL_SPI_TransmitData16(SPI_TypeDef *SPIx, uint16_t TxData)
  328. {
  329. 80004c4: b480 push {r7}
  330. 80004c6: b085 sub sp, #20
  331. 80004c8: af00 add r7, sp, #0
  332. 80004ca: 6078 str r0, [r7, #4]
  333. 80004cc: 460b mov r3, r1
  334. 80004ce: 807b strh r3, [r7, #2]
  335. #if defined (__GNUC__)
  336. __IO uint16_t *spitxdr = ((__IO uint16_t *)&SPIx->TXDR);
  337. 80004d0: 687b ldr r3, [r7, #4]
  338. 80004d2: 3320 adds r3, #32
  339. 80004d4: 60fb str r3, [r7, #12]
  340. *spitxdr = TxData;
  341. 80004d6: 68fb ldr r3, [r7, #12]
  342. 80004d8: 887a ldrh r2, [r7, #2]
  343. 80004da: 801a strh r2, [r3, #0]
  344. #else
  345. SPIx->TXDR = TxData;
  346. #endif /* __GNUC__ */
  347. }
  348. 80004dc: bf00 nop
  349. 80004de: 3714 adds r7, #20
  350. 80004e0: 46bd mov sp, r7
  351. 80004e2: f85d 7b04 ldr.w r7, [sp], #4
  352. 80004e6: 4770 bx lr
  353. 080004e8 <LL_SPI_TransmitData32>:
  354. * @param SPIx SPI Instance
  355. * @param TxData 0..0xFFFFFFFF
  356. * @retval None
  357. */
  358. __STATIC_INLINE void LL_SPI_TransmitData32(SPI_TypeDef *SPIx, uint32_t TxData)
  359. {
  360. 80004e8: b480 push {r7}
  361. 80004ea: b083 sub sp, #12
  362. 80004ec: af00 add r7, sp, #0
  363. 80004ee: 6078 str r0, [r7, #4]
  364. 80004f0: 6039 str r1, [r7, #0]
  365. *((__IO uint32_t *)&SPIx->TXDR) = TxData;
  366. 80004f2: 687b ldr r3, [r7, #4]
  367. 80004f4: 683a ldr r2, [r7, #0]
  368. 80004f6: 621a str r2, [r3, #32]
  369. }
  370. 80004f8: bf00 nop
  371. 80004fa: 370c adds r7, #12
  372. 80004fc: 46bd mov sp, r7
  373. 80004fe: f85d 7b04 ldr.w r7, [sp], #4
  374. 8000502: 4770 bx lr
  375. 08000504 <SPI1_TransmitBytes>:
  376. #define CC1200_READ_BIT 0b10000000
  377. #define CC1200_BURST_BIT 0b01000000
  378. void SPI1_TransmitBytes(uint8_t *p_buf, uint8_t len)
  379. {
  380. 8000504: b580 push {r7, lr}
  381. 8000506: b082 sub sp, #8
  382. 8000508: af00 add r7, sp, #0
  383. 800050a: 6078 str r0, [r7, #4]
  384. 800050c: 460b mov r3, r1
  385. 800050e: 70fb strb r3, [r7, #3]
  386. LL_SPI_SetTransferSize(SPI1, len);
  387. 8000510: 78fb ldrb r3, [r7, #3]
  388. 8000512: 4619 mov r1, r3
  389. 8000514: 481f ldr r0, [pc, #124] ; (8000594 <SPI1_TransmitBytes+0x90>)
  390. 8000516: f7ff ff6b bl 80003f0 <LL_SPI_SetTransferSize>
  391. LL_SPI_Enable(SPI1);
  392. 800051a: 481e ldr r0, [pc, #120] ; (8000594 <SPI1_TransmitBytes+0x90>)
  393. 800051c: f7ff ff48 bl 80003b0 <LL_SPI_Enable>
  394. LL_SPI_StartMasterTransfer(SPI1);
  395. 8000520: 481c ldr r0, [pc, #112] ; (8000594 <SPI1_TransmitBytes+0x90>)
  396. 8000522: f7ff ff7b bl 800041c <LL_SPI_StartMasterTransfer>
  397. switch(len)
  398. 8000526: 78fb ldrb r3, [r7, #3]
  399. 8000528: 2b03 cmp r3, #3
  400. 800052a: d014 beq.n 8000556 <SPI1_TransmitBytes+0x52>
  401. 800052c: 2b03 cmp r3, #3
  402. 800052e: dc19 bgt.n 8000564 <SPI1_TransmitBytes+0x60>
  403. 8000530: 2b01 cmp r3, #1
  404. 8000532: d002 beq.n 800053a <SPI1_TransmitBytes+0x36>
  405. 8000534: 2b02 cmp r3, #2
  406. 8000536: d007 beq.n 8000548 <SPI1_TransmitBytes+0x44>
  407. 8000538: e014 b.n 8000564 <SPI1_TransmitBytes+0x60>
  408. {
  409. case 1:
  410. LL_SPI_TransmitData8(SPI1, *p_buf);
  411. 800053a: 687b ldr r3, [r7, #4]
  412. 800053c: 781b ldrb r3, [r3, #0]
  413. 800053e: 4619 mov r1, r3
  414. 8000540: 4814 ldr r0, [pc, #80] ; (8000594 <SPI1_TransmitBytes+0x90>)
  415. 8000542: f7ff ffaf bl 80004a4 <LL_SPI_TransmitData8>
  416. break;
  417. 8000546: e013 b.n 8000570 <SPI1_TransmitBytes+0x6c>
  418. case 2:
  419. LL_SPI_TransmitData16(SPI1, *(uint16_t *)p_buf);
  420. 8000548: 687b ldr r3, [r7, #4]
  421. 800054a: 881b ldrh r3, [r3, #0]
  422. 800054c: 4619 mov r1, r3
  423. 800054e: 4811 ldr r0, [pc, #68] ; (8000594 <SPI1_TransmitBytes+0x90>)
  424. 8000550: f7ff ffb8 bl 80004c4 <LL_SPI_TransmitData16>
  425. break;
  426. 8000554: e00c b.n 8000570 <SPI1_TransmitBytes+0x6c>
  427. case 3:
  428. LL_SPI_TransmitData32(SPI1, *(uint32_t *)p_buf);
  429. 8000556: 687b ldr r3, [r7, #4]
  430. 8000558: 681b ldr r3, [r3, #0]
  431. 800055a: 4619 mov r1, r3
  432. 800055c: 480d ldr r0, [pc, #52] ; (8000594 <SPI1_TransmitBytes+0x90>)
  433. 800055e: f7ff ffc3 bl 80004e8 <LL_SPI_TransmitData32>
  434. break;
  435. 8000562: e005 b.n 8000570 <SPI1_TransmitBytes+0x6c>
  436. default:
  437. assert(0);
  438. 8000564: 4b0c ldr r3, [pc, #48] ; (8000598 <SPI1_TransmitBytes+0x94>)
  439. 8000566: 4a0d ldr r2, [pc, #52] ; (800059c <SPI1_TransmitBytes+0x98>)
  440. 8000568: 212f movs r1, #47 ; 0x2f
  441. 800056a: 480d ldr r0, [pc, #52] ; (80005a0 <SPI1_TransmitBytes+0x9c>)
  442. 800056c: f009 f95a bl 8009824 <__assert_func>
  443. }
  444. // Wait until the transmission is complete
  445. while( LL_SPI_IsActiveFlag_EOT(SPI1) == 0);
  446. 8000570: bf00 nop
  447. 8000572: 4808 ldr r0, [pc, #32] ; (8000594 <SPI1_TransmitBytes+0x90>)
  448. 8000574: f7ff ff75 bl 8000462 <LL_SPI_IsActiveFlag_EOT>
  449. 8000578: 4603 mov r3, r0
  450. 800057a: 2b00 cmp r3, #0
  451. 800057c: d0f9 beq.n 8000572 <SPI1_TransmitBytes+0x6e>
  452. SPI1->IFCR = UINT32_MAX;
  453. 800057e: 4b05 ldr r3, [pc, #20] ; (8000594 <SPI1_TransmitBytes+0x90>)
  454. 8000580: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff
  455. 8000584: 619a str r2, [r3, #24]
  456. LL_SPI_Disable(SPI1);
  457. 8000586: 4803 ldr r0, [pc, #12] ; (8000594 <SPI1_TransmitBytes+0x90>)
  458. 8000588: f7ff ff22 bl 80003d0 <LL_SPI_Disable>
  459. }
  460. 800058c: bf00 nop
  461. 800058e: 3708 adds r7, #8
  462. 8000590: 46bd mov sp, r7
  463. 8000592: bd80 pop {r7, pc}
  464. 8000594: 40013000 .word 0x40013000
  465. 8000598: 0800a814 .word 0x0800a814
  466. 800059c: 0800a878 .word 0x0800a878
  467. 80005a0: 0800a818 .word 0x0800a818
  468. 080005a4 <SPI1_ReceiveByte>:
  469. uint8_t SPI1_ReceiveByte(void)
  470. {
  471. 80005a4: b580 push {r7, lr}
  472. 80005a6: b082 sub sp, #8
  473. 80005a8: af00 add r7, sp, #0
  474. uint8_t rxByte;
  475. LL_SPI_SetTransferSize(SPI1, 1);
  476. 80005aa: 2101 movs r1, #1
  477. 80005ac: 4815 ldr r0, [pc, #84] ; (8000604 <SPI1_ReceiveByte+0x60>)
  478. 80005ae: f7ff ff1f bl 80003f0 <LL_SPI_SetTransferSize>
  479. LL_SPI_Enable(SPI1);
  480. 80005b2: 4814 ldr r0, [pc, #80] ; (8000604 <SPI1_ReceiveByte+0x60>)
  481. 80005b4: f7ff fefc bl 80003b0 <LL_SPI_Enable>
  482. LL_SPI_StartMasterTransfer(SPI1);
  483. 80005b8: 4812 ldr r0, [pc, #72] ; (8000604 <SPI1_ReceiveByte+0x60>)
  484. 80005ba: f7ff ff2f bl 800041c <LL_SPI_StartMasterTransfer>
  485. LL_SPI_TransmitData8(SPI1, 0);
  486. 80005be: 2100 movs r1, #0
  487. 80005c0: 4810 ldr r0, [pc, #64] ; (8000604 <SPI1_ReceiveByte+0x60>)
  488. 80005c2: f7ff ff6f bl 80004a4 <LL_SPI_TransmitData8>
  489. while (LL_SPI_IsActiveFlag_RXP(SPI1) == 0);
  490. 80005c6: bf00 nop
  491. 80005c8: 480e ldr r0, [pc, #56] ; (8000604 <SPI1_ReceiveByte+0x60>)
  492. 80005ca: f7ff ff37 bl 800043c <LL_SPI_IsActiveFlag_RXP>
  493. 80005ce: 4603 mov r3, r0
  494. 80005d0: 2b00 cmp r3, #0
  495. 80005d2: d0f9 beq.n 80005c8 <SPI1_ReceiveByte+0x24>
  496. rxByte = LL_SPI_ReceiveData8(SPI1);
  497. 80005d4: 480b ldr r0, [pc, #44] ; (8000604 <SPI1_ReceiveByte+0x60>)
  498. 80005d6: f7ff ff57 bl 8000488 <LL_SPI_ReceiveData8>
  499. 80005da: 4603 mov r3, r0
  500. 80005dc: 71fb strb r3, [r7, #7]
  501. // Wait until the transmission is complete
  502. while( LL_SPI_IsActiveFlag_EOT(SPI1) == 0);
  503. 80005de: bf00 nop
  504. 80005e0: 4808 ldr r0, [pc, #32] ; (8000604 <SPI1_ReceiveByte+0x60>)
  505. 80005e2: f7ff ff3e bl 8000462 <LL_SPI_IsActiveFlag_EOT>
  506. 80005e6: 4603 mov r3, r0
  507. 80005e8: 2b00 cmp r3, #0
  508. 80005ea: d0f9 beq.n 80005e0 <SPI1_ReceiveByte+0x3c>
  509. SPI1->IFCR = UINT32_MAX;
  510. 80005ec: 4b05 ldr r3, [pc, #20] ; (8000604 <SPI1_ReceiveByte+0x60>)
  511. 80005ee: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff
  512. 80005f2: 619a str r2, [r3, #24]
  513. LL_SPI_Disable(SPI1);
  514. 80005f4: 4803 ldr r0, [pc, #12] ; (8000604 <SPI1_ReceiveByte+0x60>)
  515. 80005f6: f7ff feeb bl 80003d0 <LL_SPI_Disable>
  516. return rxByte;
  517. 80005fa: 79fb ldrb r3, [r7, #7]
  518. }
  519. 80005fc: 4618 mov r0, r3
  520. 80005fe: 3708 adds r7, #8
  521. 8000600: 46bd mov sp, r7
  522. 8000602: bd80 pop {r7, pc}
  523. 8000604: 40013000 .word 0x40013000
  524. 08000608 <SPI1_TransmitReceive>:
  525. uint8_t SPI1_TransmitReceive(uint8_t *p_buf, uint8_t len)
  526. {
  527. 8000608: b580 push {r7, lr}
  528. 800060a: b082 sub sp, #8
  529. 800060c: af00 add r7, sp, #0
  530. 800060e: 6078 str r0, [r7, #4]
  531. 8000610: 460b mov r3, r1
  532. 8000612: 70fb strb r3, [r7, #3]
  533. SPI1_TransmitBytes(p_buf, len);
  534. 8000614: 78fb ldrb r3, [r7, #3]
  535. 8000616: 4619 mov r1, r3
  536. 8000618: 6878 ldr r0, [r7, #4]
  537. 800061a: f7ff ff73 bl 8000504 <SPI1_TransmitBytes>
  538. return SPI1_ReceiveByte();
  539. 800061e: f7ff ffc1 bl 80005a4 <SPI1_ReceiveByte>
  540. 8000622: 4603 mov r3, r0
  541. }
  542. 8000624: 4618 mov r0, r3
  543. 8000626: 3708 adds r7, #8
  544. 8000628: 46bd mov sp, r7
  545. 800062a: bd80 pop {r7, pc}
  546. 0800062c <cc1200_spi_write_byte>:
  547. // TODO: Fix to use HAL.
  548. static void cc1200_spi_write_byte(uint16_t addr, uint8_t data)
  549. {
  550. 800062c: b580 push {r7, lr}
  551. 800062e: b084 sub sp, #16
  552. 8000630: af00 add r7, sp, #0
  553. 8000632: 4603 mov r3, r0
  554. 8000634: 460a mov r2, r1
  555. 8000636: 80fb strh r3, [r7, #6]
  556. 8000638: 4613 mov r3, r2
  557. 800063a: 717b strb r3, [r7, #5]
  558. // set the data field
  559. HAL_GPIO_WritePin(CC1200_CS_GPIO_Port, CC1200_CS_Pin, 0);
  560. 800063c: 2200 movs r2, #0
  561. 800063e: 2140 movs r1, #64 ; 0x40
  562. 8000640: 4815 ldr r0, [pc, #84] ; (8000698 <cc1200_spi_write_byte+0x6c>)
  563. 8000642: f001 fa95 bl 8001b70 <HAL_GPIO_WritePin>
  564. if ((addr & 0xFF00) != 0) // send data with extended address in command field
  565. 8000646: 88fb ldrh r3, [r7, #6]
  566. 8000648: f403 437f and.w r3, r3, #65280 ; 0xff00
  567. 800064c: 2b00 cmp r3, #0
  568. 800064e: d00f beq.n 8000670 <cc1200_spi_write_byte+0x44>
  569. {
  570. txBuf[0] = ((uint8_t *)&addr)[1];
  571. 8000650: 79fb ldrb r3, [r7, #7]
  572. 8000652: 733b strb r3, [r7, #12]
  573. txBuf[1] = ((uint8_t *)&addr)[0];
  574. 8000654: 1dbb adds r3, r7, #6
  575. 8000656: 781b ldrb r3, [r3, #0]
  576. 8000658: 737b strb r3, [r7, #13]
  577. txBuf[0] |= CC1200_WRITE_BIT;
  578. 800065a: 7b3b ldrb r3, [r7, #12]
  579. 800065c: 733b strb r3, [r7, #12]
  580. txBuf[2] = data;
  581. 800065e: 797b ldrb r3, [r7, #5]
  582. 8000660: 73bb strb r3, [r7, #14]
  583. SPI1_TransmitBytes(txBuf, 3);
  584. 8000662: f107 030c add.w r3, r7, #12
  585. 8000666: 2103 movs r1, #3
  586. 8000668: 4618 mov r0, r3
  587. 800066a: f7ff ff4b bl 8000504 <SPI1_TransmitBytes>
  588. 800066e: e00a b.n 8000686 <cc1200_spi_write_byte+0x5a>
  589. }
  590. else
  591. {
  592. // correctly configure the addr field.
  593. txBuf[0] = (uint8_t)addr | CC1200_WRITE_BIT;
  594. 8000670: 88fb ldrh r3, [r7, #6]
  595. 8000672: b2db uxtb r3, r3
  596. 8000674: 733b strb r3, [r7, #12]
  597. txBuf[1] = data;
  598. 8000676: 797b ldrb r3, [r7, #5]
  599. 8000678: 737b strb r3, [r7, #13]
  600. SPI1_TransmitBytes(txBuf, 2);
  601. 800067a: f107 030c add.w r3, r7, #12
  602. 800067e: 2102 movs r1, #2
  603. 8000680: 4618 mov r0, r3
  604. 8000682: f7ff ff3f bl 8000504 <SPI1_TransmitBytes>
  605. }
  606. HAL_GPIO_WritePin(CC1200_CS_GPIO_Port, CC1200_CS_Pin, 1);
  607. 8000686: 2201 movs r2, #1
  608. 8000688: 2140 movs r1, #64 ; 0x40
  609. 800068a: 4803 ldr r0, [pc, #12] ; (8000698 <cc1200_spi_write_byte+0x6c>)
  610. 800068c: f001 fa70 bl 8001b70 <HAL_GPIO_WritePin>
  611. }
  612. 8000690: bf00 nop
  613. 8000692: 3710 adds r7, #16
  614. 8000694: 46bd mov sp, r7
  615. 8000696: bd80 pop {r7, pc}
  616. 8000698: 58020800 .word 0x58020800
  617. 0800069c <cc1200_spi_read_byte>:
  618. // ESP_ERROR_CHECK(ret);
  619. //}
  620. // TODO: Fix to use HAL.
  621. static void cc1200_spi_read_byte(uint16_t addr, uint8_t* data)
  622. {
  623. 800069c: b580 push {r7, lr}
  624. 800069e: b084 sub sp, #16
  625. 80006a0: af00 add r7, sp, #0
  626. 80006a2: 4603 mov r3, r0
  627. 80006a4: 6039 str r1, [r7, #0]
  628. 80006a6: 80fb strh r3, [r7, #6]
  629. uint8_t rxBuf[3];
  630. uint8_t txBuf[3];
  631. // correctly configure the addr field.
  632. txBuf[0] = (uint8_t)addr | CC1200_READ_BIT;
  633. 80006a8: 88fb ldrh r3, [r7, #6]
  634. 80006aa: b2db uxtb r3, r3
  635. 80006ac: f063 037f orn r3, r3, #127 ; 0x7f
  636. 80006b0: b2db uxtb r3, r3
  637. 80006b2: 723b strb r3, [r7, #8]
  638. HAL_GPIO_WritePin(CC1200_CS_GPIO_Port, CC1200_CS_Pin, 0);
  639. 80006b4: 2200 movs r2, #0
  640. 80006b6: 2140 movs r1, #64 ; 0x40
  641. 80006b8: 4817 ldr r0, [pc, #92] ; (8000718 <cc1200_spi_read_byte+0x7c>)
  642. 80006ba: f001 fa59 bl 8001b70 <HAL_GPIO_WritePin>
  643. if ((addr & 0xFF00) != 0) // read data with extended address in command field
  644. 80006be: 88fb ldrh r3, [r7, #6]
  645. 80006c0: f403 437f and.w r3, r3, #65280 ; 0xff00
  646. 80006c4: 2b00 cmp r3, #0
  647. 80006c6: d014 beq.n 80006f2 <cc1200_spi_read_byte+0x56>
  648. {
  649. txBuf[0] = ((uint8_t *)&addr)[1];
  650. 80006c8: 79fb ldrb r3, [r7, #7]
  651. 80006ca: 723b strb r3, [r7, #8]
  652. txBuf[1] = ((uint8_t *)&addr)[0];
  653. 80006cc: 1dbb adds r3, r7, #6
  654. 80006ce: 781b ldrb r3, [r3, #0]
  655. 80006d0: 727b strb r3, [r7, #9]
  656. txBuf[0] |= CC1200_READ_BIT;
  657. 80006d2: 7a3b ldrb r3, [r7, #8]
  658. 80006d4: f063 037f orn r3, r3, #127 ; 0x7f
  659. 80006d8: b2db uxtb r3, r3
  660. 80006da: 723b strb r3, [r7, #8]
  661. *data = SPI1_TransmitReceive(txBuf, 2);
  662. 80006dc: f107 0308 add.w r3, r7, #8
  663. 80006e0: 2102 movs r1, #2
  664. 80006e2: 4618 mov r0, r3
  665. 80006e4: f7ff ff90 bl 8000608 <SPI1_TransmitReceive>
  666. 80006e8: 4603 mov r3, r0
  667. 80006ea: 461a mov r2, r3
  668. 80006ec: 683b ldr r3, [r7, #0]
  669. 80006ee: 701a strb r2, [r3, #0]
  670. 80006f0: e009 b.n 8000706 <cc1200_spi_read_byte+0x6a>
  671. }
  672. else
  673. {
  674. *data = SPI1_TransmitReceive(txBuf, 1);
  675. 80006f2: f107 0308 add.w r3, r7, #8
  676. 80006f6: 2101 movs r1, #1
  677. 80006f8: 4618 mov r0, r3
  678. 80006fa: f7ff ff85 bl 8000608 <SPI1_TransmitReceive>
  679. 80006fe: 4603 mov r3, r0
  680. 8000700: 461a mov r2, r3
  681. 8000702: 683b ldr r3, [r7, #0]
  682. 8000704: 701a strb r2, [r3, #0]
  683. }
  684. HAL_GPIO_WritePin(CC1200_CS_GPIO_Port, CC1200_CS_Pin, 1);
  685. 8000706: 2201 movs r2, #1
  686. 8000708: 2140 movs r1, #64 ; 0x40
  687. 800070a: 4803 ldr r0, [pc, #12] ; (8000718 <cc1200_spi_read_byte+0x7c>)
  688. 800070c: f001 fa30 bl 8001b70 <HAL_GPIO_WritePin>
  689. }
  690. 8000710: bf00 nop
  691. 8000712: 3710 adds r7, #16
  692. 8000714: 46bd mov sp, r7
  693. 8000716: bd80 pop {r7, pc}
  694. 8000718: 58020800 .word 0x58020800
  695. 0800071c <cc1200_spi_strobe>:
  696. // ESP_ERROR_CHECK(ret);
  697. //}
  698. // TODO: Fix to use HAL.
  699. rf_status_t cc1200_spi_strobe(uint8_t cmd)
  700. {
  701. 800071c: b580 push {r7, lr}
  702. 800071e: b084 sub sp, #16
  703. 8000720: af00 add r7, sp, #0
  704. 8000722: 4603 mov r3, r0
  705. 8000724: 71fb strb r3, [r7, #7]
  706. uint8_t txBuf[2];
  707. txBuf[0] = cmd;
  708. 8000726: 79fb ldrb r3, [r7, #7]
  709. 8000728: 733b strb r3, [r7, #12]
  710. HAL_GPIO_WritePin(CC1200_CS_GPIO_Port, CC1200_CS_Pin, 0);
  711. 800072a: 2200 movs r2, #0
  712. 800072c: 2140 movs r1, #64 ; 0x40
  713. 800072e: 481c ldr r0, [pc, #112] ; (80007a0 <cc1200_spi_strobe+0x84>)
  714. 8000730: f001 fa1e bl 8001b70 <HAL_GPIO_WritePin>
  715. uint8_t rxByte;
  716. LL_SPI_SetTransferSize(SPI1, 1);
  717. 8000734: 2101 movs r1, #1
  718. 8000736: 481b ldr r0, [pc, #108] ; (80007a4 <cc1200_spi_strobe+0x88>)
  719. 8000738: f7ff fe5a bl 80003f0 <LL_SPI_SetTransferSize>
  720. LL_SPI_Enable(SPI1);
  721. 800073c: 4819 ldr r0, [pc, #100] ; (80007a4 <cc1200_spi_strobe+0x88>)
  722. 800073e: f7ff fe37 bl 80003b0 <LL_SPI_Enable>
  723. LL_SPI_StartMasterTransfer(SPI1);
  724. 8000742: 4818 ldr r0, [pc, #96] ; (80007a4 <cc1200_spi_strobe+0x88>)
  725. 8000744: f7ff fe6a bl 800041c <LL_SPI_StartMasterTransfer>
  726. LL_SPI_TransmitData8(SPI1, cmd);
  727. 8000748: 79fb ldrb r3, [r7, #7]
  728. 800074a: 4619 mov r1, r3
  729. 800074c: 4815 ldr r0, [pc, #84] ; (80007a4 <cc1200_spi_strobe+0x88>)
  730. 800074e: f7ff fea9 bl 80004a4 <LL_SPI_TransmitData8>
  731. while (LL_SPI_IsActiveFlag_RXP(SPI1) == 0);
  732. 8000752: bf00 nop
  733. 8000754: 4813 ldr r0, [pc, #76] ; (80007a4 <cc1200_spi_strobe+0x88>)
  734. 8000756: f7ff fe71 bl 800043c <LL_SPI_IsActiveFlag_RXP>
  735. 800075a: 4603 mov r3, r0
  736. 800075c: 2b00 cmp r3, #0
  737. 800075e: d0f9 beq.n 8000754 <cc1200_spi_strobe+0x38>
  738. rxByte = LL_SPI_ReceiveData8(SPI1);
  739. 8000760: 4810 ldr r0, [pc, #64] ; (80007a4 <cc1200_spi_strobe+0x88>)
  740. 8000762: f7ff fe91 bl 8000488 <LL_SPI_ReceiveData8>
  741. 8000766: 4603 mov r3, r0
  742. 8000768: 73fb strb r3, [r7, #15]
  743. // Wait until the transmission is complete
  744. while( LL_SPI_IsActiveFlag_EOT(SPI1) == 0);
  745. 800076a: bf00 nop
  746. 800076c: 480d ldr r0, [pc, #52] ; (80007a4 <cc1200_spi_strobe+0x88>)
  747. 800076e: f7ff fe78 bl 8000462 <LL_SPI_IsActiveFlag_EOT>
  748. 8000772: 4603 mov r3, r0
  749. 8000774: 2b00 cmp r3, #0
  750. 8000776: d0f9 beq.n 800076c <cc1200_spi_strobe+0x50>
  751. SPI1->IFCR = UINT32_MAX;
  752. 8000778: 4b0a ldr r3, [pc, #40] ; (80007a4 <cc1200_spi_strobe+0x88>)
  753. 800077a: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff
  754. 800077e: 619a str r2, [r3, #24]
  755. LL_SPI_Disable(SPI1);
  756. 8000780: 4808 ldr r0, [pc, #32] ; (80007a4 <cc1200_spi_strobe+0x88>)
  757. 8000782: f7ff fe25 bl 80003d0 <LL_SPI_Disable>
  758. HAL_GPIO_WritePin(CC1200_CS_GPIO_Port, CC1200_CS_Pin, 1);
  759. 8000786: 2201 movs r2, #1
  760. 8000788: 2140 movs r1, #64 ; 0x40
  761. 800078a: 4805 ldr r0, [pc, #20] ; (80007a0 <cc1200_spi_strobe+0x84>)
  762. 800078c: f001 f9f0 bl 8001b70 <HAL_GPIO_WritePin>
  763. return rxByte & 0xF0;
  764. 8000790: 7bfb ldrb r3, [r7, #15]
  765. 8000792: f023 030f bic.w r3, r3, #15
  766. 8000796: b2db uxtb r3, r3
  767. }
  768. 8000798: 4618 mov r0, r3
  769. 800079a: 3710 adds r7, #16
  770. 800079c: 46bd mov sp, r7
  771. 800079e: bd80 pop {r7, pc}
  772. 80007a0: 58020800 .word 0x58020800
  773. 80007a4: 40013000 .word 0x40013000
  774. 080007a8 <cc1200_radio_read_CFM>:
  775. cc1200_spi_read_byte(CC120X_RSSI1, &data);
  776. return data;
  777. }
  778. uint8_t cc1200_radio_read_CFM(void)
  779. {
  780. 80007a8: b580 push {r7, lr}
  781. 80007aa: b082 sub sp, #8
  782. 80007ac: af00 add r7, sp, #0
  783. uint8_t data = 0;
  784. 80007ae: 2300 movs r3, #0
  785. 80007b0: 71fb strb r3, [r7, #7]
  786. cc1200_spi_read_byte(CC120X_CFM_RX_DATA_OUT, &data);
  787. 80007b2: 1dfb adds r3, r7, #7
  788. 80007b4: 4619 mov r1, r3
  789. 80007b6: f642 707d movw r0, #12157 ; 0x2f7d
  790. 80007ba: f7ff ff6f bl 800069c <cc1200_spi_read_byte>
  791. return data;
  792. 80007be: 79fb ldrb r3, [r7, #7]
  793. }
  794. 80007c0: 4618 mov r0, r3
  795. 80007c2: 3708 adds r7, #8
  796. 80007c4: 46bd mov sp, r7
  797. 80007c6: bd80 pop {r7, pc}
  798. 080007c8 <cc1200_radio_reset>:
  799. {
  800. cc1200_spi_write_byte(CC120X_CFM_TX_DATA_IN, data);
  801. }
  802. rf_status_t cc1200_radio_reset(void)
  803. {
  804. 80007c8: b580 push {r7, lr}
  805. 80007ca: b082 sub sp, #8
  806. 80007cc: af00 add r7, sp, #0
  807. rf_status_t status;
  808. uint8_t retry_count = 0;
  809. 80007ce: 2300 movs r3, #0
  810. 80007d0: 71bb strb r3, [r7, #6]
  811. cc1200_spi_strobe(CC120X_SRES); // soft reset the chip
  812. 80007d2: 2030 movs r0, #48 ; 0x30
  813. 80007d4: f7ff ffa2 bl 800071c <cc1200_spi_strobe>
  814. status = cc1200_spi_strobe(CC120X_SNOP); // get chip status
  815. 80007d8: 203d movs r0, #61 ; 0x3d
  816. 80007da: f7ff ff9f bl 800071c <cc1200_spi_strobe>
  817. 80007de: 4603 mov r3, r0
  818. 80007e0: 71fb strb r3, [r7, #7]
  819. HAL_Delay(20);
  820. 80007e2: 2014 movs r0, #20
  821. 80007e4: f000 fee8 bl 80015b8 <HAL_Delay>
  822. while((CC120X_RDYn_BIT & (status & 0x80))) // if chip isn't ready, wait 10ms
  823. 80007e8: e00d b.n 8000806 <cc1200_radio_reset+0x3e>
  824. {
  825. HAL_Delay(10);
  826. 80007ea: 200a movs r0, #10
  827. 80007ec: f000 fee4 bl 80015b8 <HAL_Delay>
  828. if (retry_count > 3)
  829. 80007f0: 79bb ldrb r3, [r7, #6]
  830. 80007f2: 2b03 cmp r3, #3
  831. 80007f4: d80c bhi.n 8000810 <cc1200_radio_reset+0x48>
  832. {
  833. break;
  834. }
  835. status = cc1200_spi_strobe(CC120X_SNOP);
  836. 80007f6: 203d movs r0, #61 ; 0x3d
  837. 80007f8: f7ff ff90 bl 800071c <cc1200_spi_strobe>
  838. 80007fc: 4603 mov r3, r0
  839. 80007fe: 71fb strb r3, [r7, #7]
  840. retry_count++;
  841. 8000800: 79bb ldrb r3, [r7, #6]
  842. 8000802: 3301 adds r3, #1
  843. 8000804: 71bb strb r3, [r7, #6]
  844. while((CC120X_RDYn_BIT & (status & 0x80))) // if chip isn't ready, wait 10ms
  845. 8000806: f997 3007 ldrsb.w r3, [r7, #7]
  846. 800080a: 2b00 cmp r3, #0
  847. 800080c: dbed blt.n 80007ea <cc1200_radio_reset+0x22>
  848. 800080e: e000 b.n 8000812 <cc1200_radio_reset+0x4a>
  849. break;
  850. 8000810: bf00 nop
  851. }
  852. return status;
  853. 8000812: 79fb ldrb r3, [r7, #7]
  854. }
  855. 8000814: 4618 mov r0, r3
  856. 8000816: 3708 adds r7, #8
  857. 8000818: 46bd mov sp, r7
  858. 800081a: bd80 pop {r7, pc}
  859. 800081c: 0000 movs r0, r0
  860. ...
  861. 08000820 <cc1200_radio_frequency>:
  862. #define CC1200_LO_DIVIDER 24 // 136.7 - 160 MHz Band
  863. #define CC1200_XOSC 40000000 // 40MHz
  864. void cc1200_radio_frequency(uint32_t freq)
  865. {
  866. 8000820: b580 push {r7, lr}
  867. 8000822: b084 sub sp, #16
  868. 8000824: af00 add r7, sp, #0
  869. 8000826: 6078 str r0, [r7, #4]
  870. // f_VCO = FREQ / 2^16 * f_XOSX + FREQOFF / 2^18 * F_XOSC
  871. double temp_freq;
  872. // calculate FREQ0, FREQ, FREQ2 registers
  873. temp_freq = ((double) freq * 65536 * CC1200_LO_DIVIDER) / CC1200_XOSC;
  874. 8000828: 687b ldr r3, [r7, #4]
  875. 800082a: ee07 3a90 vmov s15, r3
  876. 800082e: eeb8 7b67 vcvt.f64.u32 d7, s15
  877. 8000832: ed9f 6b19 vldr d6, [pc, #100] ; 8000898 <cc1200_radio_frequency+0x78>
  878. 8000836: ee27 7b06 vmul.f64 d7, d7, d6
  879. 800083a: eeb3 6b08 vmov.f64 d6, #56 ; 0x41c00000 24.0
  880. 800083e: ee27 6b06 vmul.f64 d6, d7, d6
  881. 8000842: ed9f 5b17 vldr d5, [pc, #92] ; 80008a0 <cc1200_radio_frequency+0x80>
  882. 8000846: ee86 7b05 vdiv.f64 d7, d6, d5
  883. 800084a: ed87 7b02 vstr d7, [r7, #8]
  884. freq = (uint32_t)temp_freq;
  885. 800084e: ed97 7b02 vldr d7, [r7, #8]
  886. 8000852: eefc 7bc7 vcvt.u32.f64 s15, d7
  887. 8000856: ee17 3a90 vmov r3, s15
  888. 800085a: 607b str r3, [r7, #4]
  889. cc1200_spi_write_byte(CC120X_FREQ0, ((uint8_t *)&freq)[0]);
  890. 800085c: 1d3b adds r3, r7, #4
  891. 800085e: 781b ldrb r3, [r3, #0]
  892. 8000860: 4619 mov r1, r3
  893. 8000862: f642 700e movw r0, #12046 ; 0x2f0e
  894. 8000866: f7ff fee1 bl 800062c <cc1200_spi_write_byte>
  895. cc1200_spi_write_byte(CC120X_FREQ1, ((uint8_t *)&freq)[1]);
  896. 800086a: 1d3b adds r3, r7, #4
  897. 800086c: 3301 adds r3, #1
  898. 800086e: 781b ldrb r3, [r3, #0]
  899. 8000870: 4619 mov r1, r3
  900. 8000872: f642 700d movw r0, #12045 ; 0x2f0d
  901. 8000876: f7ff fed9 bl 800062c <cc1200_spi_write_byte>
  902. cc1200_spi_write_byte(CC120X_FREQ2, ((uint8_t *)&freq)[2]);
  903. 800087a: 1d3b adds r3, r7, #4
  904. 800087c: 3302 adds r3, #2
  905. 800087e: 781b ldrb r3, [r3, #0]
  906. 8000880: 4619 mov r1, r3
  907. 8000882: f642 700c movw r0, #12044 ; 0x2f0c
  908. 8000886: f7ff fed1 bl 800062c <cc1200_spi_write_byte>
  909. return ;
  910. 800088a: bf00 nop
  911. }
  912. 800088c: 3710 adds r7, #16
  913. 800088e: 46bd mov sp, r7
  914. 8000890: bd80 pop {r7, pc}
  915. 8000892: bf00 nop
  916. 8000894: f3af 8000 nop.w
  917. 8000898: 00000000 .word 0x00000000
  918. 800089c: 40f00000 .word 0x40f00000
  919. 80008a0: 00000000 .word 0x00000000
  920. 80008a4: 418312d0 .word 0x418312d0
  921. 080008a8 <cc1200_radio_rx>:
  922. // TODO: Create exception for failure condition
  923. while (cc1200_spi_strobe(CC120X_STX) != CC120X_STATE_TX);
  924. }
  925. void cc1200_radio_rx(void)
  926. {
  927. 80008a8: b580 push {r7, lr}
  928. 80008aa: af00 add r7, sp, #0
  929. // TODO: Create exception for failure condition
  930. while (cc1200_spi_strobe(CC120X_SRX) != CC120X_STATE_RX);
  931. 80008ac: bf00 nop
  932. 80008ae: 2034 movs r0, #52 ; 0x34
  933. 80008b0: f7ff ff34 bl 800071c <cc1200_spi_strobe>
  934. 80008b4: 4603 mov r3, r0
  935. 80008b6: 2b10 cmp r3, #16
  936. 80008b8: d1f9 bne.n 80008ae <cc1200_radio_rx+0x6>
  937. }
  938. 80008ba: bf00 nop
  939. 80008bc: bf00 nop
  940. 80008be: bd80 pop {r7, pc}
  941. 080008c0 <cc1200_radio_init>:
  942. // TODO: Fix to use HAL.
  943. void cc1200_radio_init(const cc1200_reg_settings_t* rf_settings, uint8_t len)
  944. {
  945. 80008c0: b580 push {r7, lr}
  946. 80008c2: b084 sub sp, #16
  947. 80008c4: af00 add r7, sp, #0
  948. 80008c6: 6078 str r0, [r7, #4]
  949. 80008c8: 460b mov r3, r1
  950. 80008ca: 70fb strb r3, [r7, #3]
  951. //cc1200_gpio_init();
  952. //cc1200_spi_init();
  953. cc1200_radio_reset(); //gpio_set_level(CC1200_RESET, 1);
  954. 80008cc: f7ff ff7c bl 80007c8 <cc1200_radio_reset>
  955. uint8_t i;
  956. for (i=0;i<len;i++)
  957. 80008d0: 2300 movs r3, #0
  958. 80008d2: 73fb strb r3, [r7, #15]
  959. 80008d4: e00f b.n 80008f6 <cc1200_radio_init+0x36>
  960. {
  961. cc1200_spi_write_byte(rf_settings[i].addr, rf_settings[i].data);
  962. 80008d6: 7bfb ldrb r3, [r7, #15]
  963. 80008d8: 009b lsls r3, r3, #2
  964. 80008da: 687a ldr r2, [r7, #4]
  965. 80008dc: 4413 add r3, r2
  966. 80008de: 8818 ldrh r0, [r3, #0]
  967. 80008e0: 7bfb ldrb r3, [r7, #15]
  968. 80008e2: 009b lsls r3, r3, #2
  969. 80008e4: 687a ldr r2, [r7, #4]
  970. 80008e6: 4413 add r3, r2
  971. 80008e8: 789b ldrb r3, [r3, #2]
  972. 80008ea: 4619 mov r1, r3
  973. 80008ec: f7ff fe9e bl 800062c <cc1200_spi_write_byte>
  974. for (i=0;i<len;i++)
  975. 80008f0: 7bfb ldrb r3, [r7, #15]
  976. 80008f2: 3301 adds r3, #1
  977. 80008f4: 73fb strb r3, [r7, #15]
  978. 80008f6: 7bfa ldrb r2, [r7, #15]
  979. 80008f8: 78fb ldrb r3, [r7, #3]
  980. 80008fa: 429a cmp r2, r3
  981. 80008fc: d3eb bcc.n 80008d6 <cc1200_radio_init+0x16>
  982. }
  983. while(cc1200_spi_strobe(CC120X_SIDLE) != CC120X_STATE_IDLE);
  984. 80008fe: bf00 nop
  985. 8000900: 2036 movs r0, #54 ; 0x36
  986. 8000902: f7ff ff0b bl 800071c <cc1200_spi_strobe>
  987. 8000906: 4603 mov r3, r0
  988. 8000908: 2b00 cmp r3, #0
  989. 800090a: d1f9 bne.n 8000900 <cc1200_radio_init+0x40>
  990. }
  991. 800090c: bf00 nop
  992. 800090e: bf00 nop
  993. 8000910: 3710 adds r7, #16
  994. 8000912: 46bd mov sp, r7
  995. 8000914: bd80 pop {r7, pc}
  996. 08000916 <LL_SPI_SetStandard>:
  997. {
  998. 8000916: b480 push {r7}
  999. 8000918: b083 sub sp, #12
  1000. 800091a: af00 add r7, sp, #0
  1001. 800091c: 6078 str r0, [r7, #4]
  1002. 800091e: 6039 str r1, [r7, #0]
  1003. MODIFY_REG(SPIx->CFG2, SPI_CFG2_SP, Standard);
  1004. 8000920: 687b ldr r3, [r7, #4]
  1005. 8000922: 68db ldr r3, [r3, #12]
  1006. 8000924: f423 1260 bic.w r2, r3, #3670016 ; 0x380000
  1007. 8000928: 683b ldr r3, [r7, #0]
  1008. 800092a: 431a orrs r2, r3
  1009. 800092c: 687b ldr r3, [r7, #4]
  1010. 800092e: 60da str r2, [r3, #12]
  1011. }
  1012. 8000930: bf00 nop
  1013. 8000932: 370c adds r7, #12
  1014. 8000934: 46bd mov sp, r7
  1015. 8000936: f85d 7b04 ldr.w r7, [sp], #4
  1016. 800093a: 4770 bx lr
  1017. 0800093c <LL_SPI_EnableNSSPulseMgt>:
  1018. {
  1019. 800093c: b480 push {r7}
  1020. 800093e: b083 sub sp, #12
  1021. 8000940: af00 add r7, sp, #0
  1022. 8000942: 6078 str r0, [r7, #4]
  1023. SET_BIT(SPIx->CFG2, SPI_CFG2_SSOM);
  1024. 8000944: 687b ldr r3, [r7, #4]
  1025. 8000946: 68db ldr r3, [r3, #12]
  1026. 8000948: f043 4280 orr.w r2, r3, #1073741824 ; 0x40000000
  1027. 800094c: 687b ldr r3, [r7, #4]
  1028. 800094e: 60da str r2, [r3, #12]
  1029. }
  1030. 8000950: bf00 nop
  1031. 8000952: 370c adds r7, #12
  1032. 8000954: 46bd mov sp, r7
  1033. 8000956: f85d 7b04 ldr.w r7, [sp], #4
  1034. 800095a: 4770 bx lr
  1035. 0800095c <LL_AHB4_GRP1_EnableClock>:
  1036. *
  1037. * (*) value not defined in all devices.
  1038. * @retval None
  1039. */
  1040. __STATIC_INLINE void LL_AHB4_GRP1_EnableClock(uint32_t Periphs)
  1041. {
  1042. 800095c: b480 push {r7}
  1043. 800095e: b085 sub sp, #20
  1044. 8000960: af00 add r7, sp, #0
  1045. 8000962: 6078 str r0, [r7, #4]
  1046. __IO uint32_t tmpreg;
  1047. SET_BIT(RCC->AHB4ENR, Periphs);
  1048. 8000964: 4b0a ldr r3, [pc, #40] ; (8000990 <LL_AHB4_GRP1_EnableClock+0x34>)
  1049. 8000966: f8d3 20e0 ldr.w r2, [r3, #224] ; 0xe0
  1050. 800096a: 4909 ldr r1, [pc, #36] ; (8000990 <LL_AHB4_GRP1_EnableClock+0x34>)
  1051. 800096c: 687b ldr r3, [r7, #4]
  1052. 800096e: 4313 orrs r3, r2
  1053. 8000970: f8c1 30e0 str.w r3, [r1, #224] ; 0xe0
  1054. /* Delay after an RCC peripheral clock enabling */
  1055. tmpreg = READ_BIT(RCC->AHB4ENR, Periphs);
  1056. 8000974: 4b06 ldr r3, [pc, #24] ; (8000990 <LL_AHB4_GRP1_EnableClock+0x34>)
  1057. 8000976: f8d3 20e0 ldr.w r2, [r3, #224] ; 0xe0
  1058. 800097a: 687b ldr r3, [r7, #4]
  1059. 800097c: 4013 ands r3, r2
  1060. 800097e: 60fb str r3, [r7, #12]
  1061. (void)tmpreg;
  1062. 8000980: 68fb ldr r3, [r7, #12]
  1063. }
  1064. 8000982: bf00 nop
  1065. 8000984: 3714 adds r7, #20
  1066. 8000986: 46bd mov sp, r7
  1067. 8000988: f85d 7b04 ldr.w r7, [sp], #4
  1068. 800098c: 4770 bx lr
  1069. 800098e: bf00 nop
  1070. 8000990: 58024400 .word 0x58024400
  1071. 08000994 <LL_APB2_GRP1_EnableClock>:
  1072. *
  1073. * (*) value not defined in all devices.
  1074. * @retval None
  1075. */
  1076. __STATIC_INLINE void LL_APB2_GRP1_EnableClock(uint32_t Periphs)
  1077. {
  1078. 8000994: b480 push {r7}
  1079. 8000996: b085 sub sp, #20
  1080. 8000998: af00 add r7, sp, #0
  1081. 800099a: 6078 str r0, [r7, #4]
  1082. __IO uint32_t tmpreg;
  1083. SET_BIT(RCC->APB2ENR, Periphs);
  1084. 800099c: 4b0a ldr r3, [pc, #40] ; (80009c8 <LL_APB2_GRP1_EnableClock+0x34>)
  1085. 800099e: f8d3 20f0 ldr.w r2, [r3, #240] ; 0xf0
  1086. 80009a2: 4909 ldr r1, [pc, #36] ; (80009c8 <LL_APB2_GRP1_EnableClock+0x34>)
  1087. 80009a4: 687b ldr r3, [r7, #4]
  1088. 80009a6: 4313 orrs r3, r2
  1089. 80009a8: f8c1 30f0 str.w r3, [r1, #240] ; 0xf0
  1090. /* Delay after an RCC peripheral clock enabling */
  1091. tmpreg = READ_BIT(RCC->APB2ENR, Periphs);
  1092. 80009ac: 4b06 ldr r3, [pc, #24] ; (80009c8 <LL_APB2_GRP1_EnableClock+0x34>)
  1093. 80009ae: f8d3 20f0 ldr.w r2, [r3, #240] ; 0xf0
  1094. 80009b2: 687b ldr r3, [r7, #4]
  1095. 80009b4: 4013 ands r3, r2
  1096. 80009b6: 60fb str r3, [r7, #12]
  1097. (void)tmpreg;
  1098. 80009b8: 68fb ldr r3, [r7, #12]
  1099. }
  1100. 80009ba: bf00 nop
  1101. 80009bc: 3714 adds r7, #20
  1102. 80009be: 46bd mov sp, r7
  1103. 80009c0: f85d 7b04 ldr.w r7, [sp], #4
  1104. 80009c4: 4770 bx lr
  1105. 80009c6: bf00 nop
  1106. 80009c8: 58024400 .word 0x58024400
  1107. 080009cc <HAL_TIM_PeriodElapsedCallback>:
  1108. }
  1109. static uint8_t txBuffer;
  1110. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef * htim)
  1111. {
  1112. 80009cc: b580 push {r7, lr}
  1113. 80009ce: b082 sub sp, #8
  1114. 80009d0: af00 add r7, sp, #0
  1115. 80009d2: 6078 str r0, [r7, #4]
  1116. txBuffer = cc1200_radio_read_CFM();
  1117. 80009d4: f7ff fee8 bl 80007a8 <cc1200_radio_read_CFM>
  1118. 80009d8: 4603 mov r3, r0
  1119. 80009da: 461a mov r2, r3
  1120. 80009dc: 4b0c ldr r3, [pc, #48] ; (8000a10 <HAL_TIM_PeriodElapsedCallback+0x44>)
  1121. 80009de: 701a strb r2, [r3, #0]
  1122. //cc1200_radio_write_CFM(0);
  1123. CDC_Transmit_HS(&txBuffer, 1);
  1124. 80009e0: 2101 movs r1, #1
  1125. 80009e2: 480b ldr r0, [pc, #44] ; (8000a10 <HAL_TIM_PeriodElapsedCallback+0x44>)
  1126. 80009e4: f008 fa9a bl 8008f1c <CDC_Transmit_HS>
  1127. // Toggle LED as heart beat.
  1128. static uint32_t toggleCount = 0;
  1129. if (toggleCount++ == 40000)
  1130. 80009e8: 4b0a ldr r3, [pc, #40] ; (8000a14 <HAL_TIM_PeriodElapsedCallback+0x48>)
  1131. 80009ea: 681b ldr r3, [r3, #0]
  1132. 80009ec: 1c5a adds r2, r3, #1
  1133. 80009ee: 4909 ldr r1, [pc, #36] ; (8000a14 <HAL_TIM_PeriodElapsedCallback+0x48>)
  1134. 80009f0: 600a str r2, [r1, #0]
  1135. 80009f2: f649 4240 movw r2, #40000 ; 0x9c40
  1136. 80009f6: 4293 cmp r3, r2
  1137. 80009f8: d106 bne.n 8000a08 <HAL_TIM_PeriodElapsedCallback+0x3c>
  1138. {
  1139. HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);
  1140. 80009fa: 2101 movs r1, #1
  1141. 80009fc: 4806 ldr r0, [pc, #24] ; (8000a18 <HAL_TIM_PeriodElapsedCallback+0x4c>)
  1142. 80009fe: f001 f8d0 bl 8001ba2 <HAL_GPIO_TogglePin>
  1143. toggleCount = 0;
  1144. 8000a02: 4b04 ldr r3, [pc, #16] ; (8000a14 <HAL_TIM_PeriodElapsedCallback+0x48>)
  1145. 8000a04: 2200 movs r2, #0
  1146. 8000a06: 601a str r2, [r3, #0]
  1147. }
  1148. }
  1149. 8000a08: bf00 nop
  1150. 8000a0a: 3708 adds r7, #8
  1151. 8000a0c: 46bd mov sp, r7
  1152. 8000a0e: bd80 pop {r7, pc}
  1153. 8000a10: 24000204 .word 0x24000204
  1154. 8000a14: 24000208 .word 0x24000208
  1155. 8000a18: 58020400 .word 0x58020400
  1156. 08000a1c <main>:
  1157. /**
  1158. * @brief The application entry point.
  1159. * @retval int
  1160. */
  1161. int main(void)
  1162. {
  1163. 8000a1c: b580 push {r7, lr}
  1164. 8000a1e: b084 sub sp, #16
  1165. 8000a20: af00 add r7, sp, #0
  1166. \details Turns on I-Cache
  1167. */
  1168. __STATIC_FORCEINLINE void SCB_EnableICache (void)
  1169. {
  1170. #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
  1171. if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */
  1172. 8000a22: 4b48 ldr r3, [pc, #288] ; (8000b44 <main+0x128>)
  1173. 8000a24: 695b ldr r3, [r3, #20]
  1174. 8000a26: f403 3300 and.w r3, r3, #131072 ; 0x20000
  1175. 8000a2a: 2b00 cmp r3, #0
  1176. 8000a2c: d11b bne.n 8000a66 <main+0x4a>
  1177. \details Acts as a special kind of Data Memory Barrier.
  1178. It completes when all explicit memory accesses before this instruction complete.
  1179. */
  1180. __STATIC_FORCEINLINE void __DSB(void)
  1181. {
  1182. __ASM volatile ("dsb 0xF":::"memory");
  1183. 8000a2e: f3bf 8f4f dsb sy
  1184. }
  1185. 8000a32: bf00 nop
  1186. __ASM volatile ("isb 0xF":::"memory");
  1187. 8000a34: f3bf 8f6f isb sy
  1188. }
  1189. 8000a38: bf00 nop
  1190. __DSB();
  1191. __ISB();
  1192. SCB->ICIALLU = 0UL; /* invalidate I-Cache */
  1193. 8000a3a: 4b42 ldr r3, [pc, #264] ; (8000b44 <main+0x128>)
  1194. 8000a3c: 2200 movs r2, #0
  1195. 8000a3e: f8c3 2250 str.w r2, [r3, #592] ; 0x250
  1196. __ASM volatile ("dsb 0xF":::"memory");
  1197. 8000a42: f3bf 8f4f dsb sy
  1198. }
  1199. 8000a46: bf00 nop
  1200. __ASM volatile ("isb 0xF":::"memory");
  1201. 8000a48: f3bf 8f6f isb sy
  1202. }
  1203. 8000a4c: bf00 nop
  1204. __DSB();
  1205. __ISB();
  1206. SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */
  1207. 8000a4e: 4b3d ldr r3, [pc, #244] ; (8000b44 <main+0x128>)
  1208. 8000a50: 695b ldr r3, [r3, #20]
  1209. 8000a52: 4a3c ldr r2, [pc, #240] ; (8000b44 <main+0x128>)
  1210. 8000a54: f443 3300 orr.w r3, r3, #131072 ; 0x20000
  1211. 8000a58: 6153 str r3, [r2, #20]
  1212. __ASM volatile ("dsb 0xF":::"memory");
  1213. 8000a5a: f3bf 8f4f dsb sy
  1214. }
  1215. 8000a5e: bf00 nop
  1216. __ASM volatile ("isb 0xF":::"memory");
  1217. 8000a60: f3bf 8f6f isb sy
  1218. }
  1219. 8000a64: e000 b.n 8000a68 <main+0x4c>
  1220. if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */
  1221. 8000a66: bf00 nop
  1222. #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
  1223. uint32_t ccsidr;
  1224. uint32_t sets;
  1225. uint32_t ways;
  1226. if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */
  1227. 8000a68: 4b36 ldr r3, [pc, #216] ; (8000b44 <main+0x128>)
  1228. 8000a6a: 695b ldr r3, [r3, #20]
  1229. 8000a6c: f403 3380 and.w r3, r3, #65536 ; 0x10000
  1230. 8000a70: 2b00 cmp r3, #0
  1231. 8000a72: d138 bne.n 8000ae6 <main+0xca>
  1232. SCB->CSSELR = 0U; /* select Level 1 data cache */
  1233. 8000a74: 4b33 ldr r3, [pc, #204] ; (8000b44 <main+0x128>)
  1234. 8000a76: 2200 movs r2, #0
  1235. 8000a78: f8c3 2084 str.w r2, [r3, #132] ; 0x84
  1236. __ASM volatile ("dsb 0xF":::"memory");
  1237. 8000a7c: f3bf 8f4f dsb sy
  1238. }
  1239. 8000a80: bf00 nop
  1240. __DSB();
  1241. ccsidr = SCB->CCSIDR;
  1242. 8000a82: 4b30 ldr r3, [pc, #192] ; (8000b44 <main+0x128>)
  1243. 8000a84: f8d3 3080 ldr.w r3, [r3, #128] ; 0x80
  1244. 8000a88: 60bb str r3, [r7, #8]
  1245. /* invalidate D-Cache */
  1246. sets = (uint32_t)(CCSIDR_SETS(ccsidr));
  1247. 8000a8a: 68bb ldr r3, [r7, #8]
  1248. 8000a8c: 0b5b lsrs r3, r3, #13
  1249. 8000a8e: f3c3 030e ubfx r3, r3, #0, #15
  1250. 8000a92: 607b str r3, [r7, #4]
  1251. do {
  1252. ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
  1253. 8000a94: 68bb ldr r3, [r7, #8]
  1254. 8000a96: 08db lsrs r3, r3, #3
  1255. 8000a98: f3c3 0309 ubfx r3, r3, #0, #10
  1256. 8000a9c: 603b str r3, [r7, #0]
  1257. do {
  1258. SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
  1259. 8000a9e: 687b ldr r3, [r7, #4]
  1260. 8000aa0: 015a lsls r2, r3, #5
  1261. 8000aa2: f643 73e0 movw r3, #16352 ; 0x3fe0
  1262. 8000aa6: 4013 ands r3, r2
  1263. ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) );
  1264. 8000aa8: 683a ldr r2, [r7, #0]
  1265. 8000aaa: 0792 lsls r2, r2, #30
  1266. SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
  1267. 8000aac: 4925 ldr r1, [pc, #148] ; (8000b44 <main+0x128>)
  1268. 8000aae: 4313 orrs r3, r2
  1269. 8000ab0: f8c1 3260 str.w r3, [r1, #608] ; 0x260
  1270. #if defined ( __CC_ARM )
  1271. __schedule_barrier();
  1272. #endif
  1273. } while (ways-- != 0U);
  1274. 8000ab4: 683b ldr r3, [r7, #0]
  1275. 8000ab6: 1e5a subs r2, r3, #1
  1276. 8000ab8: 603a str r2, [r7, #0]
  1277. 8000aba: 2b00 cmp r3, #0
  1278. 8000abc: d1ef bne.n 8000a9e <main+0x82>
  1279. } while(sets-- != 0U);
  1280. 8000abe: 687b ldr r3, [r7, #4]
  1281. 8000ac0: 1e5a subs r2, r3, #1
  1282. 8000ac2: 607a str r2, [r7, #4]
  1283. 8000ac4: 2b00 cmp r3, #0
  1284. 8000ac6: d1e5 bne.n 8000a94 <main+0x78>
  1285. __ASM volatile ("dsb 0xF":::"memory");
  1286. 8000ac8: f3bf 8f4f dsb sy
  1287. }
  1288. 8000acc: bf00 nop
  1289. __DSB();
  1290. SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */
  1291. 8000ace: 4b1d ldr r3, [pc, #116] ; (8000b44 <main+0x128>)
  1292. 8000ad0: 695b ldr r3, [r3, #20]
  1293. 8000ad2: 4a1c ldr r2, [pc, #112] ; (8000b44 <main+0x128>)
  1294. 8000ad4: f443 3380 orr.w r3, r3, #65536 ; 0x10000
  1295. 8000ad8: 6153 str r3, [r2, #20]
  1296. __ASM volatile ("dsb 0xF":::"memory");
  1297. 8000ada: f3bf 8f4f dsb sy
  1298. }
  1299. 8000ade: bf00 nop
  1300. __ASM volatile ("isb 0xF":::"memory");
  1301. 8000ae0: f3bf 8f6f isb sy
  1302. }
  1303. 8000ae4: e000 b.n 8000ae8 <main+0xcc>
  1304. if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */
  1305. 8000ae6: bf00 nop
  1306. SCB_EnableDCache();
  1307. /* MCU Configuration--------------------------------------------------------*/
  1308. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  1309. HAL_Init();
  1310. 8000ae8: f000 fcd4 bl 8001494 <HAL_Init>
  1311. /* USER CODE BEGIN Init */
  1312. /* USER CODE END Init */
  1313. /* Configure the system clock */
  1314. SystemClock_Config();
  1315. 8000aec: f000 f834 bl 8000b58 <SystemClock_Config>
  1316. /* USER CODE BEGIN SysInit */
  1317. /* USER CODE END SysInit */
  1318. /* Initialize all configured peripherals */
  1319. MX_GPIO_Init();
  1320. 8000af0: f000 f98a bl 8000e08 <MX_GPIO_Init>
  1321. MX_SPI1_Init();
  1322. 8000af4: f000 f8a0 bl 8000c38 <MX_SPI1_Init>
  1323. MX_TIM3_Init();
  1324. 8000af8: f000 f938 bl 8000d6c <MX_TIM3_Init>
  1325. MX_USB_DEVICE_Init();
  1326. 8000afc: f008 f94e bl 8008d9c <MX_USB_DEVICE_Init>
  1327. /* USER CODE BEGIN 2 */
  1328. HAL_StatusTypeDef errCode;
  1329. // Manually reset the CC1200.
  1330. HAL_GPIO_WritePin(CC1200_RESET_GPIO_Port, CC1200_RESET_Pin, 0);
  1331. 8000b00: 2200 movs r2, #0
  1332. 8000b02: f44f 5180 mov.w r1, #4096 ; 0x1000
  1333. 8000b06: 4810 ldr r0, [pc, #64] ; (8000b48 <main+0x12c>)
  1334. 8000b08: f001 f832 bl 8001b70 <HAL_GPIO_WritePin>
  1335. HAL_Delay(50);
  1336. 8000b0c: 2032 movs r0, #50 ; 0x32
  1337. 8000b0e: f000 fd53 bl 80015b8 <HAL_Delay>
  1338. HAL_GPIO_WritePin(CC1200_RESET_GPIO_Port, CC1200_RESET_Pin, 1);
  1339. 8000b12: 2201 movs r2, #1
  1340. 8000b14: f44f 5180 mov.w r1, #4096 ; 0x1000
  1341. 8000b18: 480b ldr r0, [pc, #44] ; (8000b48 <main+0x12c>)
  1342. 8000b1a: f001 f829 bl 8001b70 <HAL_GPIO_WritePin>
  1343. HAL_Delay(50);
  1344. 8000b1e: 2032 movs r0, #50 ; 0x32
  1345. 8000b20: f000 fd4a bl 80015b8 <HAL_Delay>
  1346. // Setup up the 5million registers.
  1347. cc1200_radio_init((cc1200_reg_settings_t *)AX25_SETTINGS, sizeof(AX25_SETTINGS)/sizeof(cc1200_reg_settings_t));
  1348. 8000b24: 2133 movs r1, #51 ; 0x33
  1349. 8000b26: 4809 ldr r0, [pc, #36] ; (8000b4c <main+0x130>)
  1350. 8000b28: f7ff feca bl 80008c0 <cc1200_radio_init>
  1351. // Set frequency
  1352. cc1200_radio_frequency(144390000);
  1353. 8000b2c: 4808 ldr r0, [pc, #32] ; (8000b50 <main+0x134>)
  1354. 8000b2e: f7ff fe77 bl 8000820 <cc1200_radio_frequency>
  1355. // Enable TX/RX
  1356. cc1200_radio_rx();
  1357. 8000b32: f7ff feb9 bl 80008a8 <cc1200_radio_rx>
  1358. // Start Timer for SPI
  1359. errCode = HAL_TIM_Base_Start_IT(&htim3);
  1360. 8000b36: 4807 ldr r0, [pc, #28] ; (8000b54 <main+0x138>)
  1361. 8000b38: f004 fa28 bl 8004f8c <HAL_TIM_Base_Start_IT>
  1362. 8000b3c: 4603 mov r3, r0
  1363. 8000b3e: 73fb strb r3, [r7, #15]
  1364. /* USER CODE END 2 */
  1365. /* Infinite loop */
  1366. /* USER CODE BEGIN WHILE */
  1367. while (1)
  1368. 8000b40: e7fe b.n 8000b40 <main+0x124>
  1369. 8000b42: bf00 nop
  1370. 8000b44: e000ed00 .word 0xe000ed00
  1371. 8000b48: 58020400 .word 0x58020400
  1372. 8000b4c: 0800a88c .word 0x0800a88c
  1373. 8000b50: 089b3770 .word 0x089b3770
  1374. 8000b54: 2400043c .word 0x2400043c
  1375. 08000b58 <SystemClock_Config>:
  1376. /**
  1377. * @brief System Clock Configuration
  1378. * @retval None
  1379. */
  1380. void SystemClock_Config(void)
  1381. {
  1382. 8000b58: b580 push {r7, lr}
  1383. 8000b5a: b09c sub sp, #112 ; 0x70
  1384. 8000b5c: af00 add r7, sp, #0
  1385. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  1386. 8000b5e: f107 0324 add.w r3, r7, #36 ; 0x24
  1387. 8000b62: 224c movs r2, #76 ; 0x4c
  1388. 8000b64: 2100 movs r1, #0
  1389. 8000b66: 4618 mov r0, r3
  1390. 8000b68: f008 feb6 bl 80098d8 <memset>
  1391. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  1392. 8000b6c: 1d3b adds r3, r7, #4
  1393. 8000b6e: 2220 movs r2, #32
  1394. 8000b70: 2100 movs r1, #0
  1395. 8000b72: 4618 mov r0, r3
  1396. 8000b74: f008 feb0 bl 80098d8 <memset>
  1397. /** Supply configuration update enable
  1398. */
  1399. HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
  1400. 8000b78: 2002 movs r0, #2
  1401. 8000b7a: f002 f9fb bl 8002f74 <HAL_PWREx_ConfigSupply>
  1402. /** Configure the main internal regulator output voltage
  1403. */
  1404. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);
  1405. 8000b7e: 2300 movs r3, #0
  1406. 8000b80: 603b str r3, [r7, #0]
  1407. 8000b82: 4b2c ldr r3, [pc, #176] ; (8000c34 <SystemClock_Config+0xdc>)
  1408. 8000b84: 699b ldr r3, [r3, #24]
  1409. 8000b86: 4a2b ldr r2, [pc, #172] ; (8000c34 <SystemClock_Config+0xdc>)
  1410. 8000b88: f423 4340 bic.w r3, r3, #49152 ; 0xc000
  1411. 8000b8c: 6193 str r3, [r2, #24]
  1412. 8000b8e: 4b29 ldr r3, [pc, #164] ; (8000c34 <SystemClock_Config+0xdc>)
  1413. 8000b90: 699b ldr r3, [r3, #24]
  1414. 8000b92: f403 4340 and.w r3, r3, #49152 ; 0xc000
  1415. 8000b96: 603b str r3, [r7, #0]
  1416. 8000b98: 683b ldr r3, [r7, #0]
  1417. while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
  1418. 8000b9a: bf00 nop
  1419. 8000b9c: 4b25 ldr r3, [pc, #148] ; (8000c34 <SystemClock_Config+0xdc>)
  1420. 8000b9e: 699b ldr r3, [r3, #24]
  1421. 8000ba0: f403 5300 and.w r3, r3, #8192 ; 0x2000
  1422. 8000ba4: f5b3 5f00 cmp.w r3, #8192 ; 0x2000
  1423. 8000ba8: d1f8 bne.n 8000b9c <SystemClock_Config+0x44>
  1424. /** Initializes the RCC Oscillators according to the specified parameters
  1425. * in the RCC_OscInitTypeDef structure.
  1426. */
  1427. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSE;
  1428. 8000baa: 2321 movs r3, #33 ; 0x21
  1429. 8000bac: 627b str r3, [r7, #36] ; 0x24
  1430. RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
  1431. 8000bae: f44f 23a0 mov.w r3, #327680 ; 0x50000
  1432. 8000bb2: 62bb str r3, [r7, #40] ; 0x28
  1433. RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  1434. 8000bb4: 2301 movs r3, #1
  1435. 8000bb6: 63fb str r3, [r7, #60] ; 0x3c
  1436. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  1437. 8000bb8: 2302 movs r3, #2
  1438. 8000bba: 64bb str r3, [r7, #72] ; 0x48
  1439. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  1440. 8000bbc: 2302 movs r3, #2
  1441. 8000bbe: 64fb str r3, [r7, #76] ; 0x4c
  1442. RCC_OscInitStruct.PLL.PLLM = 4;
  1443. 8000bc0: 2304 movs r3, #4
  1444. 8000bc2: 653b str r3, [r7, #80] ; 0x50
  1445. RCC_OscInitStruct.PLL.PLLN = 275;
  1446. 8000bc4: f240 1313 movw r3, #275 ; 0x113
  1447. 8000bc8: 657b str r3, [r7, #84] ; 0x54
  1448. RCC_OscInitStruct.PLL.PLLP = 1;
  1449. 8000bca: 2301 movs r3, #1
  1450. 8000bcc: 65bb str r3, [r7, #88] ; 0x58
  1451. RCC_OscInitStruct.PLL.PLLQ = 4;
  1452. 8000bce: 2304 movs r3, #4
  1453. 8000bd0: 65fb str r3, [r7, #92] ; 0x5c
  1454. RCC_OscInitStruct.PLL.PLLR = 2;
  1455. 8000bd2: 2302 movs r3, #2
  1456. 8000bd4: 663b str r3, [r7, #96] ; 0x60
  1457. RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_1;
  1458. 8000bd6: 2304 movs r3, #4
  1459. 8000bd8: 667b str r3, [r7, #100] ; 0x64
  1460. RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
  1461. 8000bda: 2300 movs r3, #0
  1462. 8000bdc: 66bb str r3, [r7, #104] ; 0x68
  1463. RCC_OscInitStruct.PLL.PLLFRACN = 0;
  1464. 8000bde: 2300 movs r3, #0
  1465. 8000be0: 66fb str r3, [r7, #108] ; 0x6c
  1466. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  1467. 8000be2: f107 0324 add.w r3, r7, #36 ; 0x24
  1468. 8000be6: 4618 mov r0, r3
  1469. 8000be8: f002 fa0e bl 8003008 <HAL_RCC_OscConfig>
  1470. 8000bec: 4603 mov r3, r0
  1471. 8000bee: 2b00 cmp r3, #0
  1472. 8000bf0: d001 beq.n 8000bf6 <SystemClock_Config+0x9e>
  1473. {
  1474. Error_Handler();
  1475. 8000bf2: f000 fa61 bl 80010b8 <Error_Handler>
  1476. }
  1477. /** Initializes the CPU, AHB and APB buses clocks
  1478. */
  1479. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  1480. 8000bf6: 233f movs r3, #63 ; 0x3f
  1481. 8000bf8: 607b str r3, [r7, #4]
  1482. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
  1483. |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
  1484. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  1485. 8000bfa: 2303 movs r3, #3
  1486. 8000bfc: 60bb str r3, [r7, #8]
  1487. RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  1488. 8000bfe: 2300 movs r3, #0
  1489. 8000c00: 60fb str r3, [r7, #12]
  1490. RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
  1491. 8000c02: 2308 movs r3, #8
  1492. 8000c04: 613b str r3, [r7, #16]
  1493. RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
  1494. 8000c06: 2340 movs r3, #64 ; 0x40
  1495. 8000c08: 617b str r3, [r7, #20]
  1496. RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
  1497. 8000c0a: 2340 movs r3, #64 ; 0x40
  1498. 8000c0c: 61bb str r3, [r7, #24]
  1499. RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
  1500. 8000c0e: f44f 6380 mov.w r3, #1024 ; 0x400
  1501. 8000c12: 61fb str r3, [r7, #28]
  1502. RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
  1503. 8000c14: 2340 movs r3, #64 ; 0x40
  1504. 8000c16: 623b str r3, [r7, #32]
  1505. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
  1506. 8000c18: 1d3b adds r3, r7, #4
  1507. 8000c1a: 2103 movs r1, #3
  1508. 8000c1c: 4618 mov r0, r3
  1509. 8000c1e: f002 fd9f bl 8003760 <HAL_RCC_ClockConfig>
  1510. 8000c22: 4603 mov r3, r0
  1511. 8000c24: 2b00 cmp r3, #0
  1512. 8000c26: d001 beq.n 8000c2c <SystemClock_Config+0xd4>
  1513. {
  1514. Error_Handler();
  1515. 8000c28: f000 fa46 bl 80010b8 <Error_Handler>
  1516. }
  1517. }
  1518. 8000c2c: bf00 nop
  1519. 8000c2e: 3770 adds r7, #112 ; 0x70
  1520. 8000c30: 46bd mov sp, r7
  1521. 8000c32: bd80 pop {r7, pc}
  1522. 8000c34: 58024800 .word 0x58024800
  1523. 08000c38 <MX_SPI1_Init>:
  1524. * @brief SPI1 Initialization Function
  1525. * @param None
  1526. * @retval None
  1527. */
  1528. static void MX_SPI1_Init(void)
  1529. {
  1530. 8000c38: b580 push {r7, lr}
  1531. 8000c3a: b0be sub sp, #248 ; 0xf8
  1532. 8000c3c: af00 add r7, sp, #0
  1533. /* USER CODE BEGIN SPI1_Init 0 */
  1534. /* USER CODE END SPI1_Init 0 */
  1535. LL_SPI_InitTypeDef SPI_InitStruct = {0};
  1536. 8000c3e: f107 03d0 add.w r3, r7, #208 ; 0xd0
  1537. 8000c42: 2228 movs r2, #40 ; 0x28
  1538. 8000c44: 2100 movs r1, #0
  1539. 8000c46: 4618 mov r0, r3
  1540. 8000c48: f008 fe46 bl 80098d8 <memset>
  1541. LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
  1542. 8000c4c: f107 03b8 add.w r3, r7, #184 ; 0xb8
  1543. 8000c50: 2200 movs r2, #0
  1544. 8000c52: 601a str r2, [r3, #0]
  1545. 8000c54: 605a str r2, [r3, #4]
  1546. 8000c56: 609a str r2, [r3, #8]
  1547. 8000c58: 60da str r2, [r3, #12]
  1548. 8000c5a: 611a str r2, [r3, #16]
  1549. 8000c5c: 615a str r2, [r3, #20]
  1550. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  1551. 8000c5e: 1d3b adds r3, r7, #4
  1552. 8000c60: 22b4 movs r2, #180 ; 0xb4
  1553. 8000c62: 2100 movs r1, #0
  1554. 8000c64: 4618 mov r0, r3
  1555. 8000c66: f008 fe37 bl 80098d8 <memset>
  1556. /** Initializes the peripherals clock
  1557. */
  1558. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI1;
  1559. 8000c6a: f44f 5380 mov.w r3, #4096 ; 0x1000
  1560. 8000c6e: 607b str r3, [r7, #4]
  1561. PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL;
  1562. 8000c70: 2300 movs r3, #0
  1563. 8000c72: 65fb str r3, [r7, #92] ; 0x5c
  1564. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  1565. 8000c74: 1d3b adds r3, r7, #4
  1566. 8000c76: 4618 mov r0, r3
  1567. 8000c78: f003 f8d2 bl 8003e20 <HAL_RCCEx_PeriphCLKConfig>
  1568. 8000c7c: 4603 mov r3, r0
  1569. 8000c7e: 2b00 cmp r3, #0
  1570. 8000c80: d001 beq.n 8000c86 <MX_SPI1_Init+0x4e>
  1571. {
  1572. Error_Handler();
  1573. 8000c82: f000 fa19 bl 80010b8 <Error_Handler>
  1574. }
  1575. /* Peripheral clock enable */
  1576. LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1);
  1577. 8000c86: f44f 5080 mov.w r0, #4096 ; 0x1000
  1578. 8000c8a: f7ff fe83 bl 8000994 <LL_APB2_GRP1_EnableClock>
  1579. LL_AHB4_GRP1_EnableClock(LL_AHB4_GRP1_PERIPH_GPIOA);
  1580. 8000c8e: 2001 movs r0, #1
  1581. 8000c90: f7ff fe64 bl 800095c <LL_AHB4_GRP1_EnableClock>
  1582. LL_AHB4_GRP1_EnableClock(LL_AHB4_GRP1_PERIPH_GPIOD);
  1583. 8000c94: 2008 movs r0, #8
  1584. 8000c96: f7ff fe61 bl 800095c <LL_AHB4_GRP1_EnableClock>
  1585. /**SPI1 GPIO Configuration
  1586. PA5 ------> SPI1_SCK
  1587. PA6 ------> SPI1_MISO
  1588. PD7 ------> SPI1_MOSI
  1589. */
  1590. GPIO_InitStruct.Pin = LL_GPIO_PIN_5|LL_GPIO_PIN_6;
  1591. 8000c9a: 2360 movs r3, #96 ; 0x60
  1592. 8000c9c: f8c7 30b8 str.w r3, [r7, #184] ; 0xb8
  1593. GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  1594. 8000ca0: 2302 movs r3, #2
  1595. 8000ca2: f8c7 30bc str.w r3, [r7, #188] ; 0xbc
  1596. GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
  1597. 8000ca6: 2303 movs r3, #3
  1598. 8000ca8: f8c7 30c0 str.w r3, [r7, #192] ; 0xc0
  1599. GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  1600. 8000cac: 2300 movs r3, #0
  1601. 8000cae: f8c7 30c4 str.w r3, [r7, #196] ; 0xc4
  1602. GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
  1603. 8000cb2: 2300 movs r3, #0
  1604. 8000cb4: f8c7 30c8 str.w r3, [r7, #200] ; 0xc8
  1605. GPIO_InitStruct.Alternate = LL_GPIO_AF_5;
  1606. 8000cb8: 2305 movs r3, #5
  1607. 8000cba: f8c7 30cc str.w r3, [r7, #204] ; 0xcc
  1608. LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  1609. 8000cbe: f107 03b8 add.w r3, r7, #184 ; 0xb8
  1610. 8000cc2: 4619 mov r1, r3
  1611. 8000cc4: 4826 ldr r0, [pc, #152] ; (8000d60 <MX_SPI1_Init+0x128>)
  1612. 8000cc6: f004 feff bl 8005ac8 <LL_GPIO_Init>
  1613. GPIO_InitStruct.Pin = LL_GPIO_PIN_7;
  1614. 8000cca: 2380 movs r3, #128 ; 0x80
  1615. 8000ccc: f8c7 30b8 str.w r3, [r7, #184] ; 0xb8
  1616. GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  1617. 8000cd0: 2302 movs r3, #2
  1618. 8000cd2: f8c7 30bc str.w r3, [r7, #188] ; 0xbc
  1619. GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
  1620. 8000cd6: 2303 movs r3, #3
  1621. 8000cd8: f8c7 30c0 str.w r3, [r7, #192] ; 0xc0
  1622. GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  1623. 8000cdc: 2300 movs r3, #0
  1624. 8000cde: f8c7 30c4 str.w r3, [r7, #196] ; 0xc4
  1625. GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
  1626. 8000ce2: 2300 movs r3, #0
  1627. 8000ce4: f8c7 30c8 str.w r3, [r7, #200] ; 0xc8
  1628. GPIO_InitStruct.Alternate = LL_GPIO_AF_5;
  1629. 8000ce8: 2305 movs r3, #5
  1630. 8000cea: f8c7 30cc str.w r3, [r7, #204] ; 0xcc
  1631. LL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  1632. 8000cee: f107 03b8 add.w r3, r7, #184 ; 0xb8
  1633. 8000cf2: 4619 mov r1, r3
  1634. 8000cf4: 481b ldr r0, [pc, #108] ; (8000d64 <MX_SPI1_Init+0x12c>)
  1635. 8000cf6: f004 fee7 bl 8005ac8 <LL_GPIO_Init>
  1636. /* USER CODE BEGIN SPI1_Init 1 */
  1637. /* USER CODE END SPI1_Init 1 */
  1638. /* SPI1 parameter configuration*/
  1639. SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
  1640. 8000cfa: 2300 movs r3, #0
  1641. 8000cfc: f8c7 30d0 str.w r3, [r7, #208] ; 0xd0
  1642. SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
  1643. 8000d00: f44f 0380 mov.w r3, #4194304 ; 0x400000
  1644. 8000d04: f8c7 30d4 str.w r3, [r7, #212] ; 0xd4
  1645. SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
  1646. 8000d08: 2307 movs r3, #7
  1647. 8000d0a: f8c7 30d8 str.w r3, [r7, #216] ; 0xd8
  1648. SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW;
  1649. 8000d0e: 2300 movs r3, #0
  1650. 8000d10: f8c7 30dc str.w r3, [r7, #220] ; 0xdc
  1651. SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE;
  1652. 8000d14: 2300 movs r3, #0
  1653. 8000d16: f8c7 30e0 str.w r3, [r7, #224] ; 0xe0
  1654. SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
  1655. 8000d1a: f04f 6380 mov.w r3, #67108864 ; 0x4000000
  1656. 8000d1e: f8c7 30e4 str.w r3, [r7, #228] ; 0xe4
  1657. SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV32;
  1658. 8000d22: f04f 4380 mov.w r3, #1073741824 ; 0x40000000
  1659. 8000d26: f8c7 30e8 str.w r3, [r7, #232] ; 0xe8
  1660. SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST;
  1661. 8000d2a: 2300 movs r3, #0
  1662. 8000d2c: f8c7 30ec str.w r3, [r7, #236] ; 0xec
  1663. SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
  1664. 8000d30: 2300 movs r3, #0
  1665. 8000d32: f8c7 30f0 str.w r3, [r7, #240] ; 0xf0
  1666. SPI_InitStruct.CRCPoly = 0x0;
  1667. 8000d36: 2300 movs r3, #0
  1668. 8000d38: f8c7 30f4 str.w r3, [r7, #244] ; 0xf4
  1669. LL_SPI_Init(SPI1, &SPI_InitStruct);
  1670. 8000d3c: f107 03d0 add.w r3, r7, #208 ; 0xd0
  1671. 8000d40: 4619 mov r1, r3
  1672. 8000d42: 4809 ldr r0, [pc, #36] ; (8000d68 <MX_SPI1_Init+0x130>)
  1673. 8000d44: f004 ff70 bl 8005c28 <LL_SPI_Init>
  1674. LL_SPI_SetStandard(SPI1, LL_SPI_PROTOCOL_MOTOROLA);
  1675. 8000d48: 2100 movs r1, #0
  1676. 8000d4a: 4807 ldr r0, [pc, #28] ; (8000d68 <MX_SPI1_Init+0x130>)
  1677. 8000d4c: f7ff fde3 bl 8000916 <LL_SPI_SetStandard>
  1678. LL_SPI_EnableNSSPulseMgt(SPI1);
  1679. 8000d50: 4805 ldr r0, [pc, #20] ; (8000d68 <MX_SPI1_Init+0x130>)
  1680. 8000d52: f7ff fdf3 bl 800093c <LL_SPI_EnableNSSPulseMgt>
  1681. /* USER CODE BEGIN SPI1_Init 2 */
  1682. /* USER CODE END SPI1_Init 2 */
  1683. }
  1684. 8000d56: bf00 nop
  1685. 8000d58: 37f8 adds r7, #248 ; 0xf8
  1686. 8000d5a: 46bd mov sp, r7
  1687. 8000d5c: bd80 pop {r7, pc}
  1688. 8000d5e: bf00 nop
  1689. 8000d60: 58020000 .word 0x58020000
  1690. 8000d64: 58020c00 .word 0x58020c00
  1691. 8000d68: 40013000 .word 0x40013000
  1692. 08000d6c <MX_TIM3_Init>:
  1693. * @brief TIM3 Initialization Function
  1694. * @param None
  1695. * @retval None
  1696. */
  1697. static void MX_TIM3_Init(void)
  1698. {
  1699. 8000d6c: b580 push {r7, lr}
  1700. 8000d6e: b088 sub sp, #32
  1701. 8000d70: af00 add r7, sp, #0
  1702. /* USER CODE BEGIN TIM3_Init 0 */
  1703. /* USER CODE END TIM3_Init 0 */
  1704. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  1705. 8000d72: f107 0310 add.w r3, r7, #16
  1706. 8000d76: 2200 movs r2, #0
  1707. 8000d78: 601a str r2, [r3, #0]
  1708. 8000d7a: 605a str r2, [r3, #4]
  1709. 8000d7c: 609a str r2, [r3, #8]
  1710. 8000d7e: 60da str r2, [r3, #12]
  1711. TIM_MasterConfigTypeDef sMasterConfig = {0};
  1712. 8000d80: 1d3b adds r3, r7, #4
  1713. 8000d82: 2200 movs r2, #0
  1714. 8000d84: 601a str r2, [r3, #0]
  1715. 8000d86: 605a str r2, [r3, #4]
  1716. 8000d88: 609a str r2, [r3, #8]
  1717. /* USER CODE BEGIN TIM3_Init 1 */
  1718. /* USER CODE END TIM3_Init 1 */
  1719. htim3.Instance = TIM3;
  1720. 8000d8a: 4b1d ldr r3, [pc, #116] ; (8000e00 <MX_TIM3_Init+0x94>)
  1721. 8000d8c: 4a1d ldr r2, [pc, #116] ; (8000e04 <MX_TIM3_Init+0x98>)
  1722. 8000d8e: 601a str r2, [r3, #0]
  1723. htim3.Init.Prescaler = 0;
  1724. 8000d90: 4b1b ldr r3, [pc, #108] ; (8000e00 <MX_TIM3_Init+0x94>)
  1725. 8000d92: 2200 movs r2, #0
  1726. 8000d94: 605a str r2, [r3, #4]
  1727. htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  1728. 8000d96: 4b1a ldr r3, [pc, #104] ; (8000e00 <MX_TIM3_Init+0x94>)
  1729. 8000d98: 2200 movs r2, #0
  1730. 8000d9a: 609a str r2, [r3, #8]
  1731. htim3.Init.Period = 6875;
  1732. 8000d9c: 4b18 ldr r3, [pc, #96] ; (8000e00 <MX_TIM3_Init+0x94>)
  1733. 8000d9e: f641 22db movw r2, #6875 ; 0x1adb
  1734. 8000da2: 60da str r2, [r3, #12]
  1735. htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  1736. 8000da4: 4b16 ldr r3, [pc, #88] ; (8000e00 <MX_TIM3_Init+0x94>)
  1737. 8000da6: 2200 movs r2, #0
  1738. 8000da8: 611a str r2, [r3, #16]
  1739. htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  1740. 8000daa: 4b15 ldr r3, [pc, #84] ; (8000e00 <MX_TIM3_Init+0x94>)
  1741. 8000dac: 2280 movs r2, #128 ; 0x80
  1742. 8000dae: 619a str r2, [r3, #24]
  1743. if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
  1744. 8000db0: 4813 ldr r0, [pc, #76] ; (8000e00 <MX_TIM3_Init+0x94>)
  1745. 8000db2: f004 f893 bl 8004edc <HAL_TIM_Base_Init>
  1746. 8000db6: 4603 mov r3, r0
  1747. 8000db8: 2b00 cmp r3, #0
  1748. 8000dba: d001 beq.n 8000dc0 <MX_TIM3_Init+0x54>
  1749. {
  1750. Error_Handler();
  1751. 8000dbc: f000 f97c bl 80010b8 <Error_Handler>
  1752. }
  1753. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  1754. 8000dc0: f44f 5380 mov.w r3, #4096 ; 0x1000
  1755. 8000dc4: 613b str r3, [r7, #16]
  1756. if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
  1757. 8000dc6: f107 0310 add.w r3, r7, #16
  1758. 8000dca: 4619 mov r1, r3
  1759. 8000dcc: 480c ldr r0, [pc, #48] ; (8000e00 <MX_TIM3_Init+0x94>)
  1760. 8000dce: f004 fa83 bl 80052d8 <HAL_TIM_ConfigClockSource>
  1761. 8000dd2: 4603 mov r3, r0
  1762. 8000dd4: 2b00 cmp r3, #0
  1763. 8000dd6: d001 beq.n 8000ddc <MX_TIM3_Init+0x70>
  1764. {
  1765. Error_Handler();
  1766. 8000dd8: f000 f96e bl 80010b8 <Error_Handler>
  1767. }
  1768. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  1769. 8000ddc: 2300 movs r3, #0
  1770. 8000dde: 607b str r3, [r7, #4]
  1771. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  1772. 8000de0: 2300 movs r3, #0
  1773. 8000de2: 60fb str r3, [r7, #12]
  1774. if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  1775. 8000de4: 1d3b adds r3, r7, #4
  1776. 8000de6: 4619 mov r1, r3
  1777. 8000de8: 4805 ldr r0, [pc, #20] ; (8000e00 <MX_TIM3_Init+0x94>)
  1778. 8000dea: f004 fcd9 bl 80057a0 <HAL_TIMEx_MasterConfigSynchronization>
  1779. 8000dee: 4603 mov r3, r0
  1780. 8000df0: 2b00 cmp r3, #0
  1781. 8000df2: d001 beq.n 8000df8 <MX_TIM3_Init+0x8c>
  1782. {
  1783. Error_Handler();
  1784. 8000df4: f000 f960 bl 80010b8 <Error_Handler>
  1785. }
  1786. /* USER CODE BEGIN TIM3_Init 2 */
  1787. /* USER CODE END TIM3_Init 2 */
  1788. }
  1789. 8000df8: bf00 nop
  1790. 8000dfa: 3720 adds r7, #32
  1791. 8000dfc: 46bd mov sp, r7
  1792. 8000dfe: bd80 pop {r7, pc}
  1793. 8000e00: 2400043c .word 0x2400043c
  1794. 8000e04: 40000400 .word 0x40000400
  1795. 08000e08 <MX_GPIO_Init>:
  1796. * @brief GPIO Initialization Function
  1797. * @param None
  1798. * @retval None
  1799. */
  1800. static void MX_GPIO_Init(void)
  1801. {
  1802. 8000e08: b580 push {r7, lr}
  1803. 8000e0a: b08c sub sp, #48 ; 0x30
  1804. 8000e0c: af00 add r7, sp, #0
  1805. GPIO_InitTypeDef GPIO_InitStruct = {0};
  1806. 8000e0e: f107 031c add.w r3, r7, #28
  1807. 8000e12: 2200 movs r2, #0
  1808. 8000e14: 601a str r2, [r3, #0]
  1809. 8000e16: 605a str r2, [r3, #4]
  1810. 8000e18: 609a str r2, [r3, #8]
  1811. 8000e1a: 60da str r2, [r3, #12]
  1812. 8000e1c: 611a str r2, [r3, #16]
  1813. /* GPIO Ports Clock Enable */
  1814. __HAL_RCC_GPIOC_CLK_ENABLE();
  1815. 8000e1e: 4b9f ldr r3, [pc, #636] ; (800109c <MX_GPIO_Init+0x294>)
  1816. 8000e20: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  1817. 8000e24: 4a9d ldr r2, [pc, #628] ; (800109c <MX_GPIO_Init+0x294>)
  1818. 8000e26: f043 0304 orr.w r3, r3, #4
  1819. 8000e2a: f8c2 30e0 str.w r3, [r2, #224] ; 0xe0
  1820. 8000e2e: 4b9b ldr r3, [pc, #620] ; (800109c <MX_GPIO_Init+0x294>)
  1821. 8000e30: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  1822. 8000e34: f003 0304 and.w r3, r3, #4
  1823. 8000e38: 61bb str r3, [r7, #24]
  1824. 8000e3a: 69bb ldr r3, [r7, #24]
  1825. __HAL_RCC_GPIOH_CLK_ENABLE();
  1826. 8000e3c: 4b97 ldr r3, [pc, #604] ; (800109c <MX_GPIO_Init+0x294>)
  1827. 8000e3e: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  1828. 8000e42: 4a96 ldr r2, [pc, #600] ; (800109c <MX_GPIO_Init+0x294>)
  1829. 8000e44: f043 0380 orr.w r3, r3, #128 ; 0x80
  1830. 8000e48: f8c2 30e0 str.w r3, [r2, #224] ; 0xe0
  1831. 8000e4c: 4b93 ldr r3, [pc, #588] ; (800109c <MX_GPIO_Init+0x294>)
  1832. 8000e4e: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  1833. 8000e52: f003 0380 and.w r3, r3, #128 ; 0x80
  1834. 8000e56: 617b str r3, [r7, #20]
  1835. 8000e58: 697b ldr r3, [r7, #20]
  1836. __HAL_RCC_GPIOA_CLK_ENABLE();
  1837. 8000e5a: 4b90 ldr r3, [pc, #576] ; (800109c <MX_GPIO_Init+0x294>)
  1838. 8000e5c: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  1839. 8000e60: 4a8e ldr r2, [pc, #568] ; (800109c <MX_GPIO_Init+0x294>)
  1840. 8000e62: f043 0301 orr.w r3, r3, #1
  1841. 8000e66: f8c2 30e0 str.w r3, [r2, #224] ; 0xe0
  1842. 8000e6a: 4b8c ldr r3, [pc, #560] ; (800109c <MX_GPIO_Init+0x294>)
  1843. 8000e6c: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  1844. 8000e70: f003 0301 and.w r3, r3, #1
  1845. 8000e74: 613b str r3, [r7, #16]
  1846. 8000e76: 693b ldr r3, [r7, #16]
  1847. __HAL_RCC_GPIOB_CLK_ENABLE();
  1848. 8000e78: 4b88 ldr r3, [pc, #544] ; (800109c <MX_GPIO_Init+0x294>)
  1849. 8000e7a: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  1850. 8000e7e: 4a87 ldr r2, [pc, #540] ; (800109c <MX_GPIO_Init+0x294>)
  1851. 8000e80: f043 0302 orr.w r3, r3, #2
  1852. 8000e84: f8c2 30e0 str.w r3, [r2, #224] ; 0xe0
  1853. 8000e88: 4b84 ldr r3, [pc, #528] ; (800109c <MX_GPIO_Init+0x294>)
  1854. 8000e8a: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  1855. 8000e8e: f003 0302 and.w r3, r3, #2
  1856. 8000e92: 60fb str r3, [r7, #12]
  1857. 8000e94: 68fb ldr r3, [r7, #12]
  1858. __HAL_RCC_GPIOD_CLK_ENABLE();
  1859. 8000e96: 4b81 ldr r3, [pc, #516] ; (800109c <MX_GPIO_Init+0x294>)
  1860. 8000e98: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  1861. 8000e9c: 4a7f ldr r2, [pc, #508] ; (800109c <MX_GPIO_Init+0x294>)
  1862. 8000e9e: f043 0308 orr.w r3, r3, #8
  1863. 8000ea2: f8c2 30e0 str.w r3, [r2, #224] ; 0xe0
  1864. 8000ea6: 4b7d ldr r3, [pc, #500] ; (800109c <MX_GPIO_Init+0x294>)
  1865. 8000ea8: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  1866. 8000eac: f003 0308 and.w r3, r3, #8
  1867. 8000eb0: 60bb str r3, [r7, #8]
  1868. 8000eb2: 68bb ldr r3, [r7, #8]
  1869. __HAL_RCC_GPIOG_CLK_ENABLE();
  1870. 8000eb4: 4b79 ldr r3, [pc, #484] ; (800109c <MX_GPIO_Init+0x294>)
  1871. 8000eb6: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  1872. 8000eba: 4a78 ldr r2, [pc, #480] ; (800109c <MX_GPIO_Init+0x294>)
  1873. 8000ebc: f043 0340 orr.w r3, r3, #64 ; 0x40
  1874. 8000ec0: f8c2 30e0 str.w r3, [r2, #224] ; 0xe0
  1875. 8000ec4: 4b75 ldr r3, [pc, #468] ; (800109c <MX_GPIO_Init+0x294>)
  1876. 8000ec6: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  1877. 8000eca: f003 0340 and.w r3, r3, #64 ; 0x40
  1878. 8000ece: 607b str r3, [r7, #4]
  1879. 8000ed0: 687b ldr r3, [r7, #4]
  1880. __HAL_RCC_GPIOE_CLK_ENABLE();
  1881. 8000ed2: 4b72 ldr r3, [pc, #456] ; (800109c <MX_GPIO_Init+0x294>)
  1882. 8000ed4: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  1883. 8000ed8: 4a70 ldr r2, [pc, #448] ; (800109c <MX_GPIO_Init+0x294>)
  1884. 8000eda: f043 0310 orr.w r3, r3, #16
  1885. 8000ede: f8c2 30e0 str.w r3, [r2, #224] ; 0xe0
  1886. 8000ee2: 4b6e ldr r3, [pc, #440] ; (800109c <MX_GPIO_Init+0x294>)
  1887. 8000ee4: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  1888. 8000ee8: f003 0310 and.w r3, r3, #16
  1889. 8000eec: 603b str r3, [r7, #0]
  1890. 8000eee: 683b ldr r3, [r7, #0]
  1891. /*Configure GPIO pin Output Level */
  1892. HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin|CC1200_RESET_Pin|LED_RED_Pin, GPIO_PIN_RESET);
  1893. 8000ef0: 2200 movs r2, #0
  1894. 8000ef2: f245 0101 movw r1, #20481 ; 0x5001
  1895. 8000ef6: 486a ldr r0, [pc, #424] ; (80010a0 <MX_GPIO_Init+0x298>)
  1896. 8000ef8: f000 fe3a bl 8001b70 <HAL_GPIO_WritePin>
  1897. /*Configure GPIO pin Output Level */
  1898. HAL_GPIO_WritePin(CC1200_TCXO_ENABLE_GPIO_Port, CC1200_TCXO_ENABLE_Pin, GPIO_PIN_SET);
  1899. 8000efc: 2201 movs r2, #1
  1900. 8000efe: f44f 4100 mov.w r1, #32768 ; 0x8000
  1901. 8000f02: 4867 ldr r0, [pc, #412] ; (80010a0 <MX_GPIO_Init+0x298>)
  1902. 8000f04: f000 fe34 bl 8001b70 <HAL_GPIO_WritePin>
  1903. /*Configure GPIO pin Output Level */
  1904. HAL_GPIO_WritePin(USB_FS_PWR_EN_GPIO_Port, USB_FS_PWR_EN_Pin, GPIO_PIN_RESET);
  1905. 8000f08: 2200 movs r2, #0
  1906. 8000f0a: f44f 6180 mov.w r1, #1024 ; 0x400
  1907. 8000f0e: 4865 ldr r0, [pc, #404] ; (80010a4 <MX_GPIO_Init+0x29c>)
  1908. 8000f10: f000 fe2e bl 8001b70 <HAL_GPIO_WritePin>
  1909. /*Configure GPIO pin Output Level */
  1910. HAL_GPIO_WritePin(CC1200_CS_GPIO_Port, CC1200_CS_Pin, GPIO_PIN_SET);
  1911. 8000f14: 2201 movs r2, #1
  1912. 8000f16: 2140 movs r1, #64 ; 0x40
  1913. 8000f18: 4863 ldr r0, [pc, #396] ; (80010a8 <MX_GPIO_Init+0x2a0>)
  1914. 8000f1a: f000 fe29 bl 8001b70 <HAL_GPIO_WritePin>
  1915. /*Configure GPIO pin Output Level */
  1916. HAL_GPIO_WritePin(LED_YELLOW_GPIO_Port, LED_YELLOW_Pin, GPIO_PIN_RESET);
  1917. 8000f1e: 2200 movs r2, #0
  1918. 8000f20: 2102 movs r1, #2
  1919. 8000f22: 4862 ldr r0, [pc, #392] ; (80010ac <MX_GPIO_Init+0x2a4>)
  1920. 8000f24: f000 fe24 bl 8001b70 <HAL_GPIO_WritePin>
  1921. /*Configure GPIO pin : B1_Pin */
  1922. GPIO_InitStruct.Pin = B1_Pin;
  1923. 8000f28: f44f 5300 mov.w r3, #8192 ; 0x2000
  1924. 8000f2c: 61fb str r3, [r7, #28]
  1925. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  1926. 8000f2e: 2300 movs r3, #0
  1927. 8000f30: 623b str r3, [r7, #32]
  1928. GPIO_InitStruct.Pull = GPIO_NOPULL;
  1929. 8000f32: 2300 movs r3, #0
  1930. 8000f34: 627b str r3, [r7, #36] ; 0x24
  1931. HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
  1932. 8000f36: f107 031c add.w r3, r7, #28
  1933. 8000f3a: 4619 mov r1, r3
  1934. 8000f3c: 485a ldr r0, [pc, #360] ; (80010a8 <MX_GPIO_Init+0x2a0>)
  1935. 8000f3e: f000 fc6f bl 8001820 <HAL_GPIO_Init>
  1936. /*Configure GPIO pins : PC1 PC4 PC5 */
  1937. GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5;
  1938. 8000f42: 2332 movs r3, #50 ; 0x32
  1939. 8000f44: 61fb str r3, [r7, #28]
  1940. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  1941. 8000f46: 2302 movs r3, #2
  1942. 8000f48: 623b str r3, [r7, #32]
  1943. GPIO_InitStruct.Pull = GPIO_NOPULL;
  1944. 8000f4a: 2300 movs r3, #0
  1945. 8000f4c: 627b str r3, [r7, #36] ; 0x24
  1946. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  1947. 8000f4e: 2303 movs r3, #3
  1948. 8000f50: 62bb str r3, [r7, #40] ; 0x28
  1949. GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
  1950. 8000f52: 230b movs r3, #11
  1951. 8000f54: 62fb str r3, [r7, #44] ; 0x2c
  1952. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  1953. 8000f56: f107 031c add.w r3, r7, #28
  1954. 8000f5a: 4619 mov r1, r3
  1955. 8000f5c: 4852 ldr r0, [pc, #328] ; (80010a8 <MX_GPIO_Init+0x2a0>)
  1956. 8000f5e: f000 fc5f bl 8001820 <HAL_GPIO_Init>
  1957. /*Configure GPIO pins : PA1 PA2 PA7 */
  1958. GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7;
  1959. 8000f62: 2386 movs r3, #134 ; 0x86
  1960. 8000f64: 61fb str r3, [r7, #28]
  1961. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  1962. 8000f66: 2302 movs r3, #2
  1963. 8000f68: 623b str r3, [r7, #32]
  1964. GPIO_InitStruct.Pull = GPIO_NOPULL;
  1965. 8000f6a: 2300 movs r3, #0
  1966. 8000f6c: 627b str r3, [r7, #36] ; 0x24
  1967. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  1968. 8000f6e: 2303 movs r3, #3
  1969. 8000f70: 62bb str r3, [r7, #40] ; 0x28
  1970. GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
  1971. 8000f72: 230b movs r3, #11
  1972. 8000f74: 62fb str r3, [r7, #44] ; 0x2c
  1973. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  1974. 8000f76: f107 031c add.w r3, r7, #28
  1975. 8000f7a: 4619 mov r1, r3
  1976. 8000f7c: 484c ldr r0, [pc, #304] ; (80010b0 <MX_GPIO_Init+0x2a8>)
  1977. 8000f7e: f000 fc4f bl 8001820 <HAL_GPIO_Init>
  1978. /*Configure GPIO pins : LED_GREEN_Pin LED_RED_Pin */
  1979. GPIO_InitStruct.Pin = LED_GREEN_Pin|LED_RED_Pin;
  1980. 8000f82: f244 0301 movw r3, #16385 ; 0x4001
  1981. 8000f86: 61fb str r3, [r7, #28]
  1982. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  1983. 8000f88: 2301 movs r3, #1
  1984. 8000f8a: 623b str r3, [r7, #32]
  1985. GPIO_InitStruct.Pull = GPIO_NOPULL;
  1986. 8000f8c: 2300 movs r3, #0
  1987. 8000f8e: 627b str r3, [r7, #36] ; 0x24
  1988. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  1989. 8000f90: 2300 movs r3, #0
  1990. 8000f92: 62bb str r3, [r7, #40] ; 0x28
  1991. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  1992. 8000f94: f107 031c add.w r3, r7, #28
  1993. 8000f98: 4619 mov r1, r3
  1994. 8000f9a: 4841 ldr r0, [pc, #260] ; (80010a0 <MX_GPIO_Init+0x298>)
  1995. 8000f9c: f000 fc40 bl 8001820 <HAL_GPIO_Init>
  1996. /*Configure GPIO pins : CC1200_RESET_Pin CC1200_TCXO_ENABLE_Pin */
  1997. GPIO_InitStruct.Pin = CC1200_RESET_Pin|CC1200_TCXO_ENABLE_Pin;
  1998. 8000fa0: f44f 4310 mov.w r3, #36864 ; 0x9000
  1999. 8000fa4: 61fb str r3, [r7, #28]
  2000. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  2001. 8000fa6: 2301 movs r3, #1
  2002. 8000fa8: 623b str r3, [r7, #32]
  2003. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2004. 8000faa: 2300 movs r3, #0
  2005. 8000fac: 627b str r3, [r7, #36] ; 0x24
  2006. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  2007. 8000fae: 2303 movs r3, #3
  2008. 8000fb0: 62bb str r3, [r7, #40] ; 0x28
  2009. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  2010. 8000fb2: f107 031c add.w r3, r7, #28
  2011. 8000fb6: 4619 mov r1, r3
  2012. 8000fb8: 4839 ldr r0, [pc, #228] ; (80010a0 <MX_GPIO_Init+0x298>)
  2013. 8000fba: f000 fc31 bl 8001820 <HAL_GPIO_Init>
  2014. /*Configure GPIO pin : PB13 */
  2015. GPIO_InitStruct.Pin = GPIO_PIN_13;
  2016. 8000fbe: f44f 5300 mov.w r3, #8192 ; 0x2000
  2017. 8000fc2: 61fb str r3, [r7, #28]
  2018. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  2019. 8000fc4: 2302 movs r3, #2
  2020. 8000fc6: 623b str r3, [r7, #32]
  2021. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2022. 8000fc8: 2300 movs r3, #0
  2023. 8000fca: 627b str r3, [r7, #36] ; 0x24
  2024. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  2025. 8000fcc: 2303 movs r3, #3
  2026. 8000fce: 62bb str r3, [r7, #40] ; 0x28
  2027. GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
  2028. 8000fd0: 230b movs r3, #11
  2029. 8000fd2: 62fb str r3, [r7, #44] ; 0x2c
  2030. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  2031. 8000fd4: f107 031c add.w r3, r7, #28
  2032. 8000fd8: 4619 mov r1, r3
  2033. 8000fda: 4831 ldr r0, [pc, #196] ; (80010a0 <MX_GPIO_Init+0x298>)
  2034. 8000fdc: f000 fc20 bl 8001820 <HAL_GPIO_Init>
  2035. /*Configure GPIO pins : STLK_VCP_RX_Pin STLK_VCP_TX_Pin */
  2036. GPIO_InitStruct.Pin = STLK_VCP_RX_Pin|STLK_VCP_TX_Pin;
  2037. 8000fe0: f44f 7340 mov.w r3, #768 ; 0x300
  2038. 8000fe4: 61fb str r3, [r7, #28]
  2039. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  2040. 8000fe6: 2302 movs r3, #2
  2041. 8000fe8: 623b str r3, [r7, #32]
  2042. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2043. 8000fea: 2300 movs r3, #0
  2044. 8000fec: 627b str r3, [r7, #36] ; 0x24
  2045. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  2046. 8000fee: 2300 movs r3, #0
  2047. 8000ff0: 62bb str r3, [r7, #40] ; 0x28
  2048. GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
  2049. 8000ff2: 2307 movs r3, #7
  2050. 8000ff4: 62fb str r3, [r7, #44] ; 0x2c
  2051. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  2052. 8000ff6: f107 031c add.w r3, r7, #28
  2053. 8000ffa: 4619 mov r1, r3
  2054. 8000ffc: 4829 ldr r0, [pc, #164] ; (80010a4 <MX_GPIO_Init+0x29c>)
  2055. 8000ffe: f000 fc0f bl 8001820 <HAL_GPIO_Init>
  2056. /*Configure GPIO pin : USB_FS_PWR_EN_Pin */
  2057. GPIO_InitStruct.Pin = USB_FS_PWR_EN_Pin;
  2058. 8001002: f44f 6380 mov.w r3, #1024 ; 0x400
  2059. 8001006: 61fb str r3, [r7, #28]
  2060. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  2061. 8001008: 2301 movs r3, #1
  2062. 800100a: 623b str r3, [r7, #32]
  2063. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2064. 800100c: 2300 movs r3, #0
  2065. 800100e: 627b str r3, [r7, #36] ; 0x24
  2066. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  2067. 8001010: 2300 movs r3, #0
  2068. 8001012: 62bb str r3, [r7, #40] ; 0x28
  2069. HAL_GPIO_Init(USB_FS_PWR_EN_GPIO_Port, &GPIO_InitStruct);
  2070. 8001014: f107 031c add.w r3, r7, #28
  2071. 8001018: 4619 mov r1, r3
  2072. 800101a: 4822 ldr r0, [pc, #136] ; (80010a4 <MX_GPIO_Init+0x29c>)
  2073. 800101c: f000 fc00 bl 8001820 <HAL_GPIO_Init>
  2074. /*Configure GPIO pin : USB_FS_OVCR_Pin */
  2075. GPIO_InitStruct.Pin = USB_FS_OVCR_Pin;
  2076. 8001020: 2380 movs r3, #128 ; 0x80
  2077. 8001022: 61fb str r3, [r7, #28]
  2078. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  2079. 8001024: f44f 1388 mov.w r3, #1114112 ; 0x110000
  2080. 8001028: 623b str r3, [r7, #32]
  2081. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2082. 800102a: 2300 movs r3, #0
  2083. 800102c: 627b str r3, [r7, #36] ; 0x24
  2084. HAL_GPIO_Init(USB_FS_OVCR_GPIO_Port, &GPIO_InitStruct);
  2085. 800102e: f107 031c add.w r3, r7, #28
  2086. 8001032: 4619 mov r1, r3
  2087. 8001034: 481f ldr r0, [pc, #124] ; (80010b4 <MX_GPIO_Init+0x2ac>)
  2088. 8001036: f000 fbf3 bl 8001820 <HAL_GPIO_Init>
  2089. /*Configure GPIO pin : CC1200_CS_Pin */
  2090. GPIO_InitStruct.Pin = CC1200_CS_Pin;
  2091. 800103a: 2340 movs r3, #64 ; 0x40
  2092. 800103c: 61fb str r3, [r7, #28]
  2093. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  2094. 800103e: 2301 movs r3, #1
  2095. 8001040: 623b str r3, [r7, #32]
  2096. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2097. 8001042: 2300 movs r3, #0
  2098. 8001044: 627b str r3, [r7, #36] ; 0x24
  2099. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  2100. 8001046: 2303 movs r3, #3
  2101. 8001048: 62bb str r3, [r7, #40] ; 0x28
  2102. HAL_GPIO_Init(CC1200_CS_GPIO_Port, &GPIO_InitStruct);
  2103. 800104a: f107 031c add.w r3, r7, #28
  2104. 800104e: 4619 mov r1, r3
  2105. 8001050: 4815 ldr r0, [pc, #84] ; (80010a8 <MX_GPIO_Init+0x2a0>)
  2106. 8001052: f000 fbe5 bl 8001820 <HAL_GPIO_Init>
  2107. /*Configure GPIO pins : PG11 PG13 */
  2108. GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_13;
  2109. 8001056: f44f 5320 mov.w r3, #10240 ; 0x2800
  2110. 800105a: 61fb str r3, [r7, #28]
  2111. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  2112. 800105c: 2302 movs r3, #2
  2113. 800105e: 623b str r3, [r7, #32]
  2114. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2115. 8001060: 2300 movs r3, #0
  2116. 8001062: 627b str r3, [r7, #36] ; 0x24
  2117. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  2118. 8001064: 2303 movs r3, #3
  2119. 8001066: 62bb str r3, [r7, #40] ; 0x28
  2120. GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
  2121. 8001068: 230b movs r3, #11
  2122. 800106a: 62fb str r3, [r7, #44] ; 0x2c
  2123. HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
  2124. 800106c: f107 031c add.w r3, r7, #28
  2125. 8001070: 4619 mov r1, r3
  2126. 8001072: 4810 ldr r0, [pc, #64] ; (80010b4 <MX_GPIO_Init+0x2ac>)
  2127. 8001074: f000 fbd4 bl 8001820 <HAL_GPIO_Init>
  2128. /*Configure GPIO pin : LED_YELLOW_Pin */
  2129. GPIO_InitStruct.Pin = LED_YELLOW_Pin;
  2130. 8001078: 2302 movs r3, #2
  2131. 800107a: 61fb str r3, [r7, #28]
  2132. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  2133. 800107c: 2301 movs r3, #1
  2134. 800107e: 623b str r3, [r7, #32]
  2135. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2136. 8001080: 2300 movs r3, #0
  2137. 8001082: 627b str r3, [r7, #36] ; 0x24
  2138. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  2139. 8001084: 2300 movs r3, #0
  2140. 8001086: 62bb str r3, [r7, #40] ; 0x28
  2141. HAL_GPIO_Init(LED_YELLOW_GPIO_Port, &GPIO_InitStruct);
  2142. 8001088: f107 031c add.w r3, r7, #28
  2143. 800108c: 4619 mov r1, r3
  2144. 800108e: 4807 ldr r0, [pc, #28] ; (80010ac <MX_GPIO_Init+0x2a4>)
  2145. 8001090: f000 fbc6 bl 8001820 <HAL_GPIO_Init>
  2146. }
  2147. 8001094: bf00 nop
  2148. 8001096: 3730 adds r7, #48 ; 0x30
  2149. 8001098: 46bd mov sp, r7
  2150. 800109a: bd80 pop {r7, pc}
  2151. 800109c: 58024400 .word 0x58024400
  2152. 80010a0: 58020400 .word 0x58020400
  2153. 80010a4: 58020c00 .word 0x58020c00
  2154. 80010a8: 58020800 .word 0x58020800
  2155. 80010ac: 58021000 .word 0x58021000
  2156. 80010b0: 58020000 .word 0x58020000
  2157. 80010b4: 58021800 .word 0x58021800
  2158. 080010b8 <Error_Handler>:
  2159. /**
  2160. * @brief This function is executed in case of error occurrence.
  2161. * @retval None
  2162. */
  2163. void Error_Handler(void)
  2164. {
  2165. 80010b8: b480 push {r7}
  2166. 80010ba: af00 add r7, sp, #0
  2167. __ASM volatile ("cpsid i" : : : "memory");
  2168. 80010bc: b672 cpsid i
  2169. }
  2170. 80010be: bf00 nop
  2171. /* USER CODE BEGIN Error_Handler_Debug */
  2172. /* User can add his own implementation to report the HAL error return state */
  2173. __disable_irq();
  2174. while (1)
  2175. 80010c0: e7fe b.n 80010c0 <Error_Handler+0x8>
  2176. ...
  2177. 080010c4 <HAL_MspInit>:
  2178. /* USER CODE END 0 */
  2179. /**
  2180. * Initializes the Global MSP.
  2181. */
  2182. void HAL_MspInit(void)
  2183. {
  2184. 80010c4: b480 push {r7}
  2185. 80010c6: b083 sub sp, #12
  2186. 80010c8: af00 add r7, sp, #0
  2187. /* USER CODE BEGIN MspInit 0 */
  2188. /* USER CODE END MspInit 0 */
  2189. __HAL_RCC_SYSCFG_CLK_ENABLE();
  2190. 80010ca: 4b0a ldr r3, [pc, #40] ; (80010f4 <HAL_MspInit+0x30>)
  2191. 80010cc: f8d3 30f4 ldr.w r3, [r3, #244] ; 0xf4
  2192. 80010d0: 4a08 ldr r2, [pc, #32] ; (80010f4 <HAL_MspInit+0x30>)
  2193. 80010d2: f043 0302 orr.w r3, r3, #2
  2194. 80010d6: f8c2 30f4 str.w r3, [r2, #244] ; 0xf4
  2195. 80010da: 4b06 ldr r3, [pc, #24] ; (80010f4 <HAL_MspInit+0x30>)
  2196. 80010dc: f8d3 30f4 ldr.w r3, [r3, #244] ; 0xf4
  2197. 80010e0: f003 0302 and.w r3, r3, #2
  2198. 80010e4: 607b str r3, [r7, #4]
  2199. 80010e6: 687b ldr r3, [r7, #4]
  2200. /* System interrupt init*/
  2201. /* USER CODE BEGIN MspInit 1 */
  2202. /* USER CODE END MspInit 1 */
  2203. }
  2204. 80010e8: bf00 nop
  2205. 80010ea: 370c adds r7, #12
  2206. 80010ec: 46bd mov sp, r7
  2207. 80010ee: f85d 7b04 ldr.w r7, [sp], #4
  2208. 80010f2: 4770 bx lr
  2209. 80010f4: 58024400 .word 0x58024400
  2210. 080010f8 <HAL_TIM_Base_MspInit>:
  2211. * This function configures the hardware resources used in this example
  2212. * @param htim_base: TIM_Base handle pointer
  2213. * @retval None
  2214. */
  2215. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
  2216. {
  2217. 80010f8: b580 push {r7, lr}
  2218. 80010fa: b084 sub sp, #16
  2219. 80010fc: af00 add r7, sp, #0
  2220. 80010fe: 6078 str r0, [r7, #4]
  2221. if(htim_base->Instance==TIM3)
  2222. 8001100: 687b ldr r3, [r7, #4]
  2223. 8001102: 681b ldr r3, [r3, #0]
  2224. 8001104: 4a0e ldr r2, [pc, #56] ; (8001140 <HAL_TIM_Base_MspInit+0x48>)
  2225. 8001106: 4293 cmp r3, r2
  2226. 8001108: d116 bne.n 8001138 <HAL_TIM_Base_MspInit+0x40>
  2227. {
  2228. /* USER CODE BEGIN TIM3_MspInit 0 */
  2229. /* USER CODE END TIM3_MspInit 0 */
  2230. /* Peripheral clock enable */
  2231. __HAL_RCC_TIM3_CLK_ENABLE();
  2232. 800110a: 4b0e ldr r3, [pc, #56] ; (8001144 <HAL_TIM_Base_MspInit+0x4c>)
  2233. 800110c: f8d3 30e8 ldr.w r3, [r3, #232] ; 0xe8
  2234. 8001110: 4a0c ldr r2, [pc, #48] ; (8001144 <HAL_TIM_Base_MspInit+0x4c>)
  2235. 8001112: f043 0302 orr.w r3, r3, #2
  2236. 8001116: f8c2 30e8 str.w r3, [r2, #232] ; 0xe8
  2237. 800111a: 4b0a ldr r3, [pc, #40] ; (8001144 <HAL_TIM_Base_MspInit+0x4c>)
  2238. 800111c: f8d3 30e8 ldr.w r3, [r3, #232] ; 0xe8
  2239. 8001120: f003 0302 and.w r3, r3, #2
  2240. 8001124: 60fb str r3, [r7, #12]
  2241. 8001126: 68fb ldr r3, [r7, #12]
  2242. /* TIM3 interrupt Init */
  2243. HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
  2244. 8001128: 2200 movs r2, #0
  2245. 800112a: 2100 movs r1, #0
  2246. 800112c: 201d movs r0, #29
  2247. 800112e: f000 fb42 bl 80017b6 <HAL_NVIC_SetPriority>
  2248. HAL_NVIC_EnableIRQ(TIM3_IRQn);
  2249. 8001132: 201d movs r0, #29
  2250. 8001134: f000 fb59 bl 80017ea <HAL_NVIC_EnableIRQ>
  2251. /* USER CODE BEGIN TIM3_MspInit 1 */
  2252. /* USER CODE END TIM3_MspInit 1 */
  2253. }
  2254. }
  2255. 8001138: bf00 nop
  2256. 800113a: 3710 adds r7, #16
  2257. 800113c: 46bd mov sp, r7
  2258. 800113e: bd80 pop {r7, pc}
  2259. 8001140: 40000400 .word 0x40000400
  2260. 8001144: 58024400 .word 0x58024400
  2261. 08001148 <NMI_Handler>:
  2262. /******************************************************************************/
  2263. /**
  2264. * @brief This function handles Non maskable interrupt.
  2265. */
  2266. void NMI_Handler(void)
  2267. {
  2268. 8001148: b480 push {r7}
  2269. 800114a: af00 add r7, sp, #0
  2270. /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
  2271. /* USER CODE END NonMaskableInt_IRQn 0 */
  2272. /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
  2273. while (1)
  2274. 800114c: e7fe b.n 800114c <NMI_Handler+0x4>
  2275. 0800114e <HardFault_Handler>:
  2276. /**
  2277. * @brief This function handles Hard fault interrupt.
  2278. */
  2279. void HardFault_Handler(void)
  2280. {
  2281. 800114e: b480 push {r7}
  2282. 8001150: af00 add r7, sp, #0
  2283. /* USER CODE BEGIN HardFault_IRQn 0 */
  2284. /* USER CODE END HardFault_IRQn 0 */
  2285. while (1)
  2286. 8001152: e7fe b.n 8001152 <HardFault_Handler+0x4>
  2287. 08001154 <MemManage_Handler>:
  2288. /**
  2289. * @brief This function handles Memory management fault.
  2290. */
  2291. void MemManage_Handler(void)
  2292. {
  2293. 8001154: b480 push {r7}
  2294. 8001156: af00 add r7, sp, #0
  2295. /* USER CODE BEGIN MemoryManagement_IRQn 0 */
  2296. /* USER CODE END MemoryManagement_IRQn 0 */
  2297. while (1)
  2298. 8001158: e7fe b.n 8001158 <MemManage_Handler+0x4>
  2299. 0800115a <BusFault_Handler>:
  2300. /**
  2301. * @brief This function handles Pre-fetch fault, memory access fault.
  2302. */
  2303. void BusFault_Handler(void)
  2304. {
  2305. 800115a: b480 push {r7}
  2306. 800115c: af00 add r7, sp, #0
  2307. /* USER CODE BEGIN BusFault_IRQn 0 */
  2308. /* USER CODE END BusFault_IRQn 0 */
  2309. while (1)
  2310. 800115e: e7fe b.n 800115e <BusFault_Handler+0x4>
  2311. 08001160 <UsageFault_Handler>:
  2312. /**
  2313. * @brief This function handles Undefined instruction or illegal state.
  2314. */
  2315. void UsageFault_Handler(void)
  2316. {
  2317. 8001160: b480 push {r7}
  2318. 8001162: af00 add r7, sp, #0
  2319. /* USER CODE BEGIN UsageFault_IRQn 0 */
  2320. /* USER CODE END UsageFault_IRQn 0 */
  2321. while (1)
  2322. 8001164: e7fe b.n 8001164 <UsageFault_Handler+0x4>
  2323. 08001166 <SVC_Handler>:
  2324. /**
  2325. * @brief This function handles System service call via SWI instruction.
  2326. */
  2327. void SVC_Handler(void)
  2328. {
  2329. 8001166: b480 push {r7}
  2330. 8001168: af00 add r7, sp, #0
  2331. /* USER CODE END SVCall_IRQn 0 */
  2332. /* USER CODE BEGIN SVCall_IRQn 1 */
  2333. /* USER CODE END SVCall_IRQn 1 */
  2334. }
  2335. 800116a: bf00 nop
  2336. 800116c: 46bd mov sp, r7
  2337. 800116e: f85d 7b04 ldr.w r7, [sp], #4
  2338. 8001172: 4770 bx lr
  2339. 08001174 <DebugMon_Handler>:
  2340. /**
  2341. * @brief This function handles Debug monitor.
  2342. */
  2343. void DebugMon_Handler(void)
  2344. {
  2345. 8001174: b480 push {r7}
  2346. 8001176: af00 add r7, sp, #0
  2347. /* USER CODE END DebugMonitor_IRQn 0 */
  2348. /* USER CODE BEGIN DebugMonitor_IRQn 1 */
  2349. /* USER CODE END DebugMonitor_IRQn 1 */
  2350. }
  2351. 8001178: bf00 nop
  2352. 800117a: 46bd mov sp, r7
  2353. 800117c: f85d 7b04 ldr.w r7, [sp], #4
  2354. 8001180: 4770 bx lr
  2355. 08001182 <PendSV_Handler>:
  2356. /**
  2357. * @brief This function handles Pendable request for system service.
  2358. */
  2359. void PendSV_Handler(void)
  2360. {
  2361. 8001182: b480 push {r7}
  2362. 8001184: af00 add r7, sp, #0
  2363. /* USER CODE END PendSV_IRQn 0 */
  2364. /* USER CODE BEGIN PendSV_IRQn 1 */
  2365. /* USER CODE END PendSV_IRQn 1 */
  2366. }
  2367. 8001186: bf00 nop
  2368. 8001188: 46bd mov sp, r7
  2369. 800118a: f85d 7b04 ldr.w r7, [sp], #4
  2370. 800118e: 4770 bx lr
  2371. 08001190 <SysTick_Handler>:
  2372. /**
  2373. * @brief This function handles System tick timer.
  2374. */
  2375. void SysTick_Handler(void)
  2376. {
  2377. 8001190: b580 push {r7, lr}
  2378. 8001192: af00 add r7, sp, #0
  2379. /* USER CODE BEGIN SysTick_IRQn 0 */
  2380. /* USER CODE END SysTick_IRQn 0 */
  2381. HAL_IncTick();
  2382. 8001194: f000 f9f0 bl 8001578 <HAL_IncTick>
  2383. /* USER CODE BEGIN SysTick_IRQn 1 */
  2384. /* USER CODE END SysTick_IRQn 1 */
  2385. }
  2386. 8001198: bf00 nop
  2387. 800119a: bd80 pop {r7, pc}
  2388. 0800119c <TIM3_IRQHandler>:
  2389. /**
  2390. * @brief This function handles TIM3 global interrupt.
  2391. */
  2392. void TIM3_IRQHandler(void)
  2393. {
  2394. 800119c: b580 push {r7, lr}
  2395. 800119e: af00 add r7, sp, #0
  2396. /* USER CODE BEGIN TIM3_IRQn 0 */
  2397. /* USER CODE END TIM3_IRQn 0 */
  2398. HAL_TIM_IRQHandler(&htim3);
  2399. 80011a0: 4802 ldr r0, [pc, #8] ; (80011ac <TIM3_IRQHandler+0x10>)
  2400. 80011a2: f003 ff79 bl 8005098 <HAL_TIM_IRQHandler>
  2401. /* USER CODE BEGIN TIM3_IRQn 1 */
  2402. /* USER CODE END TIM3_IRQn 1 */
  2403. }
  2404. 80011a6: bf00 nop
  2405. 80011a8: bd80 pop {r7, pc}
  2406. 80011aa: bf00 nop
  2407. 80011ac: 2400043c .word 0x2400043c
  2408. 080011b0 <OTG_HS_IRQHandler>:
  2409. /**
  2410. * @brief This function handles USB On The Go HS global interrupt.
  2411. */
  2412. void OTG_HS_IRQHandler(void)
  2413. {
  2414. 80011b0: b580 push {r7, lr}
  2415. 80011b2: af00 add r7, sp, #0
  2416. /* USER CODE BEGIN OTG_HS_IRQn 0 */
  2417. /* USER CODE END OTG_HS_IRQn 0 */
  2418. HAL_PCD_IRQHandler(&hpcd_USB_OTG_HS);
  2419. 80011b4: 4802 ldr r0, [pc, #8] ; (80011c0 <OTG_HS_IRQHandler+0x10>)
  2420. 80011b6: f000 fe65 bl 8001e84 <HAL_PCD_IRQHandler>
  2421. /* USER CODE BEGIN OTG_HS_IRQn 1 */
  2422. /* USER CODE END OTG_HS_IRQn 1 */
  2423. }
  2424. 80011ba: bf00 nop
  2425. 80011bc: bd80 pop {r7, pc}
  2426. 80011be: bf00 nop
  2427. 80011c0: 2400195c .word 0x2400195c
  2428. 080011c4 <_getpid>:
  2429. void initialise_monitor_handles()
  2430. {
  2431. }
  2432. int _getpid(void)
  2433. {
  2434. 80011c4: b480 push {r7}
  2435. 80011c6: af00 add r7, sp, #0
  2436. return 1;
  2437. 80011c8: 2301 movs r3, #1
  2438. }
  2439. 80011ca: 4618 mov r0, r3
  2440. 80011cc: 46bd mov sp, r7
  2441. 80011ce: f85d 7b04 ldr.w r7, [sp], #4
  2442. 80011d2: 4770 bx lr
  2443. 080011d4 <_kill>:
  2444. int _kill(int pid, int sig)
  2445. {
  2446. 80011d4: b580 push {r7, lr}
  2447. 80011d6: b082 sub sp, #8
  2448. 80011d8: af00 add r7, sp, #0
  2449. 80011da: 6078 str r0, [r7, #4]
  2450. 80011dc: 6039 str r1, [r7, #0]
  2451. errno = EINVAL;
  2452. 80011de: f008 fb3f bl 8009860 <__errno>
  2453. 80011e2: 4603 mov r3, r0
  2454. 80011e4: 2216 movs r2, #22
  2455. 80011e6: 601a str r2, [r3, #0]
  2456. return -1;
  2457. 80011e8: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff
  2458. }
  2459. 80011ec: 4618 mov r0, r3
  2460. 80011ee: 3708 adds r7, #8
  2461. 80011f0: 46bd mov sp, r7
  2462. 80011f2: bd80 pop {r7, pc}
  2463. 080011f4 <_exit>:
  2464. void _exit (int status)
  2465. {
  2466. 80011f4: b580 push {r7, lr}
  2467. 80011f6: b082 sub sp, #8
  2468. 80011f8: af00 add r7, sp, #0
  2469. 80011fa: 6078 str r0, [r7, #4]
  2470. _kill(status, -1);
  2471. 80011fc: f04f 31ff mov.w r1, #4294967295 ; 0xffffffff
  2472. 8001200: 6878 ldr r0, [r7, #4]
  2473. 8001202: f7ff ffe7 bl 80011d4 <_kill>
  2474. while (1) {} /* Make sure we hang here */
  2475. 8001206: e7fe b.n 8001206 <_exit+0x12>
  2476. 08001208 <_read>:
  2477. }
  2478. __attribute__((weak)) int _read(int file, char *ptr, int len)
  2479. {
  2480. 8001208: b580 push {r7, lr}
  2481. 800120a: b086 sub sp, #24
  2482. 800120c: af00 add r7, sp, #0
  2483. 800120e: 60f8 str r0, [r7, #12]
  2484. 8001210: 60b9 str r1, [r7, #8]
  2485. 8001212: 607a str r2, [r7, #4]
  2486. int DataIdx;
  2487. for (DataIdx = 0; DataIdx < len; DataIdx++)
  2488. 8001214: 2300 movs r3, #0
  2489. 8001216: 617b str r3, [r7, #20]
  2490. 8001218: e00a b.n 8001230 <_read+0x28>
  2491. {
  2492. *ptr++ = __io_getchar();
  2493. 800121a: f3af 8000 nop.w
  2494. 800121e: 4601 mov r1, r0
  2495. 8001220: 68bb ldr r3, [r7, #8]
  2496. 8001222: 1c5a adds r2, r3, #1
  2497. 8001224: 60ba str r2, [r7, #8]
  2498. 8001226: b2ca uxtb r2, r1
  2499. 8001228: 701a strb r2, [r3, #0]
  2500. for (DataIdx = 0; DataIdx < len; DataIdx++)
  2501. 800122a: 697b ldr r3, [r7, #20]
  2502. 800122c: 3301 adds r3, #1
  2503. 800122e: 617b str r3, [r7, #20]
  2504. 8001230: 697a ldr r2, [r7, #20]
  2505. 8001232: 687b ldr r3, [r7, #4]
  2506. 8001234: 429a cmp r2, r3
  2507. 8001236: dbf0 blt.n 800121a <_read+0x12>
  2508. }
  2509. return len;
  2510. 8001238: 687b ldr r3, [r7, #4]
  2511. }
  2512. 800123a: 4618 mov r0, r3
  2513. 800123c: 3718 adds r7, #24
  2514. 800123e: 46bd mov sp, r7
  2515. 8001240: bd80 pop {r7, pc}
  2516. 08001242 <_write>:
  2517. __attribute__((weak)) int _write(int file, char *ptr, int len)
  2518. {
  2519. 8001242: b580 push {r7, lr}
  2520. 8001244: b086 sub sp, #24
  2521. 8001246: af00 add r7, sp, #0
  2522. 8001248: 60f8 str r0, [r7, #12]
  2523. 800124a: 60b9 str r1, [r7, #8]
  2524. 800124c: 607a str r2, [r7, #4]
  2525. int DataIdx;
  2526. for (DataIdx = 0; DataIdx < len; DataIdx++)
  2527. 800124e: 2300 movs r3, #0
  2528. 8001250: 617b str r3, [r7, #20]
  2529. 8001252: e009 b.n 8001268 <_write+0x26>
  2530. {
  2531. __io_putchar(*ptr++);
  2532. 8001254: 68bb ldr r3, [r7, #8]
  2533. 8001256: 1c5a adds r2, r3, #1
  2534. 8001258: 60ba str r2, [r7, #8]
  2535. 800125a: 781b ldrb r3, [r3, #0]
  2536. 800125c: 4618 mov r0, r3
  2537. 800125e: f3af 8000 nop.w
  2538. for (DataIdx = 0; DataIdx < len; DataIdx++)
  2539. 8001262: 697b ldr r3, [r7, #20]
  2540. 8001264: 3301 adds r3, #1
  2541. 8001266: 617b str r3, [r7, #20]
  2542. 8001268: 697a ldr r2, [r7, #20]
  2543. 800126a: 687b ldr r3, [r7, #4]
  2544. 800126c: 429a cmp r2, r3
  2545. 800126e: dbf1 blt.n 8001254 <_write+0x12>
  2546. }
  2547. return len;
  2548. 8001270: 687b ldr r3, [r7, #4]
  2549. }
  2550. 8001272: 4618 mov r0, r3
  2551. 8001274: 3718 adds r7, #24
  2552. 8001276: 46bd mov sp, r7
  2553. 8001278: bd80 pop {r7, pc}
  2554. 0800127a <_close>:
  2555. int _close(int file)
  2556. {
  2557. 800127a: b480 push {r7}
  2558. 800127c: b083 sub sp, #12
  2559. 800127e: af00 add r7, sp, #0
  2560. 8001280: 6078 str r0, [r7, #4]
  2561. return -1;
  2562. 8001282: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff
  2563. }
  2564. 8001286: 4618 mov r0, r3
  2565. 8001288: 370c adds r7, #12
  2566. 800128a: 46bd mov sp, r7
  2567. 800128c: f85d 7b04 ldr.w r7, [sp], #4
  2568. 8001290: 4770 bx lr
  2569. 08001292 <_fstat>:
  2570. int _fstat(int file, struct stat *st)
  2571. {
  2572. 8001292: b480 push {r7}
  2573. 8001294: b083 sub sp, #12
  2574. 8001296: af00 add r7, sp, #0
  2575. 8001298: 6078 str r0, [r7, #4]
  2576. 800129a: 6039 str r1, [r7, #0]
  2577. st->st_mode = S_IFCHR;
  2578. 800129c: 683b ldr r3, [r7, #0]
  2579. 800129e: f44f 5200 mov.w r2, #8192 ; 0x2000
  2580. 80012a2: 605a str r2, [r3, #4]
  2581. return 0;
  2582. 80012a4: 2300 movs r3, #0
  2583. }
  2584. 80012a6: 4618 mov r0, r3
  2585. 80012a8: 370c adds r7, #12
  2586. 80012aa: 46bd mov sp, r7
  2587. 80012ac: f85d 7b04 ldr.w r7, [sp], #4
  2588. 80012b0: 4770 bx lr
  2589. 080012b2 <_isatty>:
  2590. int _isatty(int file)
  2591. {
  2592. 80012b2: b480 push {r7}
  2593. 80012b4: b083 sub sp, #12
  2594. 80012b6: af00 add r7, sp, #0
  2595. 80012b8: 6078 str r0, [r7, #4]
  2596. return 1;
  2597. 80012ba: 2301 movs r3, #1
  2598. }
  2599. 80012bc: 4618 mov r0, r3
  2600. 80012be: 370c adds r7, #12
  2601. 80012c0: 46bd mov sp, r7
  2602. 80012c2: f85d 7b04 ldr.w r7, [sp], #4
  2603. 80012c6: 4770 bx lr
  2604. 080012c8 <_lseek>:
  2605. int _lseek(int file, int ptr, int dir)
  2606. {
  2607. 80012c8: b480 push {r7}
  2608. 80012ca: b085 sub sp, #20
  2609. 80012cc: af00 add r7, sp, #0
  2610. 80012ce: 60f8 str r0, [r7, #12]
  2611. 80012d0: 60b9 str r1, [r7, #8]
  2612. 80012d2: 607a str r2, [r7, #4]
  2613. return 0;
  2614. 80012d4: 2300 movs r3, #0
  2615. }
  2616. 80012d6: 4618 mov r0, r3
  2617. 80012d8: 3714 adds r7, #20
  2618. 80012da: 46bd mov sp, r7
  2619. 80012dc: f85d 7b04 ldr.w r7, [sp], #4
  2620. 80012e0: 4770 bx lr
  2621. ...
  2622. 080012e4 <_sbrk>:
  2623. *
  2624. * @param incr Memory size
  2625. * @return Pointer to allocated memory
  2626. */
  2627. void *_sbrk(ptrdiff_t incr)
  2628. {
  2629. 80012e4: b580 push {r7, lr}
  2630. 80012e6: b086 sub sp, #24
  2631. 80012e8: af00 add r7, sp, #0
  2632. 80012ea: 6078 str r0, [r7, #4]
  2633. extern uint8_t _end; /* Symbol defined in the linker script */
  2634. extern uint8_t _estack; /* Symbol defined in the linker script */
  2635. extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */
  2636. const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size;
  2637. 80012ec: 4a14 ldr r2, [pc, #80] ; (8001340 <_sbrk+0x5c>)
  2638. 80012ee: 4b15 ldr r3, [pc, #84] ; (8001344 <_sbrk+0x60>)
  2639. 80012f0: 1ad3 subs r3, r2, r3
  2640. 80012f2: 617b str r3, [r7, #20]
  2641. const uint8_t *max_heap = (uint8_t *)stack_limit;
  2642. 80012f4: 697b ldr r3, [r7, #20]
  2643. 80012f6: 613b str r3, [r7, #16]
  2644. uint8_t *prev_heap_end;
  2645. /* Initialize heap end at first call */
  2646. if (NULL == __sbrk_heap_end)
  2647. 80012f8: 4b13 ldr r3, [pc, #76] ; (8001348 <_sbrk+0x64>)
  2648. 80012fa: 681b ldr r3, [r3, #0]
  2649. 80012fc: 2b00 cmp r3, #0
  2650. 80012fe: d102 bne.n 8001306 <_sbrk+0x22>
  2651. {
  2652. __sbrk_heap_end = &_end;
  2653. 8001300: 4b11 ldr r3, [pc, #68] ; (8001348 <_sbrk+0x64>)
  2654. 8001302: 4a12 ldr r2, [pc, #72] ; (800134c <_sbrk+0x68>)
  2655. 8001304: 601a str r2, [r3, #0]
  2656. }
  2657. /* Protect heap from growing into the reserved MSP stack */
  2658. if (__sbrk_heap_end + incr > max_heap)
  2659. 8001306: 4b10 ldr r3, [pc, #64] ; (8001348 <_sbrk+0x64>)
  2660. 8001308: 681a ldr r2, [r3, #0]
  2661. 800130a: 687b ldr r3, [r7, #4]
  2662. 800130c: 4413 add r3, r2
  2663. 800130e: 693a ldr r2, [r7, #16]
  2664. 8001310: 429a cmp r2, r3
  2665. 8001312: d207 bcs.n 8001324 <_sbrk+0x40>
  2666. {
  2667. errno = ENOMEM;
  2668. 8001314: f008 faa4 bl 8009860 <__errno>
  2669. 8001318: 4603 mov r3, r0
  2670. 800131a: 220c movs r2, #12
  2671. 800131c: 601a str r2, [r3, #0]
  2672. return (void *)-1;
  2673. 800131e: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff
  2674. 8001322: e009 b.n 8001338 <_sbrk+0x54>
  2675. }
  2676. prev_heap_end = __sbrk_heap_end;
  2677. 8001324: 4b08 ldr r3, [pc, #32] ; (8001348 <_sbrk+0x64>)
  2678. 8001326: 681b ldr r3, [r3, #0]
  2679. 8001328: 60fb str r3, [r7, #12]
  2680. __sbrk_heap_end += incr;
  2681. 800132a: 4b07 ldr r3, [pc, #28] ; (8001348 <_sbrk+0x64>)
  2682. 800132c: 681a ldr r2, [r3, #0]
  2683. 800132e: 687b ldr r3, [r7, #4]
  2684. 8001330: 4413 add r3, r2
  2685. 8001332: 4a05 ldr r2, [pc, #20] ; (8001348 <_sbrk+0x64>)
  2686. 8001334: 6013 str r3, [r2, #0]
  2687. return (void *)prev_heap_end;
  2688. 8001336: 68fb ldr r3, [r7, #12]
  2689. }
  2690. 8001338: 4618 mov r0, r3
  2691. 800133a: 3718 adds r7, #24
  2692. 800133c: 46bd mov sp, r7
  2693. 800133e: bd80 pop {r7, pc}
  2694. 8001340: 24050000 .word 0x24050000
  2695. 8001344: 00000400 .word 0x00000400
  2696. 8001348: 2400020c .word 0x2400020c
  2697. 800134c: 24001d78 .word 0x24001d78
  2698. 08001350 <SystemInit>:
  2699. * configuration.
  2700. * @param None
  2701. * @retval None
  2702. */
  2703. void SystemInit (void)
  2704. {
  2705. 8001350: b480 push {r7}
  2706. 8001352: af00 add r7, sp, #0
  2707. __IO uint32_t tmpreg;
  2708. #endif /* DATA_IN_D2_SRAM */
  2709. /* FPU settings ------------------------------------------------------------*/
  2710. #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
  2711. SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2))); /* set CP10 and CP11 Full Access */
  2712. 8001354: 4b32 ldr r3, [pc, #200] ; (8001420 <SystemInit+0xd0>)
  2713. 8001356: f8d3 3088 ldr.w r3, [r3, #136] ; 0x88
  2714. 800135a: 4a31 ldr r2, [pc, #196] ; (8001420 <SystemInit+0xd0>)
  2715. 800135c: f443 0370 orr.w r3, r3, #15728640 ; 0xf00000
  2716. 8001360: f8c2 3088 str.w r3, [r2, #136] ; 0x88
  2717. #endif
  2718. /* Reset the RCC clock configuration to the default reset state ------------*/
  2719. /* Increasing the CPU frequency */
  2720. if(FLASH_LATENCY_DEFAULT > (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)))
  2721. 8001364: 4b2f ldr r3, [pc, #188] ; (8001424 <SystemInit+0xd4>)
  2722. 8001366: 681b ldr r3, [r3, #0]
  2723. 8001368: f003 030f and.w r3, r3, #15
  2724. 800136c: 2b06 cmp r3, #6
  2725. 800136e: d807 bhi.n 8001380 <SystemInit+0x30>
  2726. {
  2727. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  2728. MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT));
  2729. 8001370: 4b2c ldr r3, [pc, #176] ; (8001424 <SystemInit+0xd4>)
  2730. 8001372: 681b ldr r3, [r3, #0]
  2731. 8001374: f023 030f bic.w r3, r3, #15
  2732. 8001378: 4a2a ldr r2, [pc, #168] ; (8001424 <SystemInit+0xd4>)
  2733. 800137a: f043 0307 orr.w r3, r3, #7
  2734. 800137e: 6013 str r3, [r2, #0]
  2735. }
  2736. /* Set HSION bit */
  2737. RCC->CR |= RCC_CR_HSION;
  2738. 8001380: 4b29 ldr r3, [pc, #164] ; (8001428 <SystemInit+0xd8>)
  2739. 8001382: 681b ldr r3, [r3, #0]
  2740. 8001384: 4a28 ldr r2, [pc, #160] ; (8001428 <SystemInit+0xd8>)
  2741. 8001386: f043 0301 orr.w r3, r3, #1
  2742. 800138a: 6013 str r3, [r2, #0]
  2743. /* Reset CFGR register */
  2744. RCC->CFGR = 0x00000000;
  2745. 800138c: 4b26 ldr r3, [pc, #152] ; (8001428 <SystemInit+0xd8>)
  2746. 800138e: 2200 movs r2, #0
  2747. 8001390: 611a str r2, [r3, #16]
  2748. /* Reset HSEON, HSECSSON, CSION, HSI48ON, CSIKERON, PLL1ON, PLL2ON and PLL3ON bits */
  2749. RCC->CR &= 0xEAF6ED7FU;
  2750. 8001392: 4b25 ldr r3, [pc, #148] ; (8001428 <SystemInit+0xd8>)
  2751. 8001394: 681a ldr r2, [r3, #0]
  2752. 8001396: 4924 ldr r1, [pc, #144] ; (8001428 <SystemInit+0xd8>)
  2753. 8001398: 4b24 ldr r3, [pc, #144] ; (800142c <SystemInit+0xdc>)
  2754. 800139a: 4013 ands r3, r2
  2755. 800139c: 600b str r3, [r1, #0]
  2756. /* Decreasing the number of wait states because of lower CPU frequency */
  2757. if(FLASH_LATENCY_DEFAULT < (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)))
  2758. 800139e: 4b21 ldr r3, [pc, #132] ; (8001424 <SystemInit+0xd4>)
  2759. 80013a0: 681b ldr r3, [r3, #0]
  2760. 80013a2: f003 0308 and.w r3, r3, #8
  2761. 80013a6: 2b00 cmp r3, #0
  2762. 80013a8: d007 beq.n 80013ba <SystemInit+0x6a>
  2763. {
  2764. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  2765. MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT));
  2766. 80013aa: 4b1e ldr r3, [pc, #120] ; (8001424 <SystemInit+0xd4>)
  2767. 80013ac: 681b ldr r3, [r3, #0]
  2768. 80013ae: f023 030f bic.w r3, r3, #15
  2769. 80013b2: 4a1c ldr r2, [pc, #112] ; (8001424 <SystemInit+0xd4>)
  2770. 80013b4: f043 0307 orr.w r3, r3, #7
  2771. 80013b8: 6013 str r3, [r2, #0]
  2772. }
  2773. #if defined(D3_SRAM_BASE)
  2774. /* Reset D1CFGR register */
  2775. RCC->D1CFGR = 0x00000000;
  2776. 80013ba: 4b1b ldr r3, [pc, #108] ; (8001428 <SystemInit+0xd8>)
  2777. 80013bc: 2200 movs r2, #0
  2778. 80013be: 619a str r2, [r3, #24]
  2779. /* Reset D2CFGR register */
  2780. RCC->D2CFGR = 0x00000000;
  2781. 80013c0: 4b19 ldr r3, [pc, #100] ; (8001428 <SystemInit+0xd8>)
  2782. 80013c2: 2200 movs r2, #0
  2783. 80013c4: 61da str r2, [r3, #28]
  2784. /* Reset D3CFGR register */
  2785. RCC->D3CFGR = 0x00000000;
  2786. 80013c6: 4b18 ldr r3, [pc, #96] ; (8001428 <SystemInit+0xd8>)
  2787. 80013c8: 2200 movs r2, #0
  2788. 80013ca: 621a str r2, [r3, #32]
  2789. /* Reset SRDCFGR register */
  2790. RCC->SRDCFGR = 0x00000000;
  2791. #endif
  2792. /* Reset PLLCKSELR register */
  2793. RCC->PLLCKSELR = 0x02020200;
  2794. 80013cc: 4b16 ldr r3, [pc, #88] ; (8001428 <SystemInit+0xd8>)
  2795. 80013ce: 4a18 ldr r2, [pc, #96] ; (8001430 <SystemInit+0xe0>)
  2796. 80013d0: 629a str r2, [r3, #40] ; 0x28
  2797. /* Reset PLLCFGR register */
  2798. RCC->PLLCFGR = 0x01FF0000;
  2799. 80013d2: 4b15 ldr r3, [pc, #84] ; (8001428 <SystemInit+0xd8>)
  2800. 80013d4: 4a17 ldr r2, [pc, #92] ; (8001434 <SystemInit+0xe4>)
  2801. 80013d6: 62da str r2, [r3, #44] ; 0x2c
  2802. /* Reset PLL1DIVR register */
  2803. RCC->PLL1DIVR = 0x01010280;
  2804. 80013d8: 4b13 ldr r3, [pc, #76] ; (8001428 <SystemInit+0xd8>)
  2805. 80013da: 4a17 ldr r2, [pc, #92] ; (8001438 <SystemInit+0xe8>)
  2806. 80013dc: 631a str r2, [r3, #48] ; 0x30
  2807. /* Reset PLL1FRACR register */
  2808. RCC->PLL1FRACR = 0x00000000;
  2809. 80013de: 4b12 ldr r3, [pc, #72] ; (8001428 <SystemInit+0xd8>)
  2810. 80013e0: 2200 movs r2, #0
  2811. 80013e2: 635a str r2, [r3, #52] ; 0x34
  2812. /* Reset PLL2DIVR register */
  2813. RCC->PLL2DIVR = 0x01010280;
  2814. 80013e4: 4b10 ldr r3, [pc, #64] ; (8001428 <SystemInit+0xd8>)
  2815. 80013e6: 4a14 ldr r2, [pc, #80] ; (8001438 <SystemInit+0xe8>)
  2816. 80013e8: 639a str r2, [r3, #56] ; 0x38
  2817. /* Reset PLL2FRACR register */
  2818. RCC->PLL2FRACR = 0x00000000;
  2819. 80013ea: 4b0f ldr r3, [pc, #60] ; (8001428 <SystemInit+0xd8>)
  2820. 80013ec: 2200 movs r2, #0
  2821. 80013ee: 63da str r2, [r3, #60] ; 0x3c
  2822. /* Reset PLL3DIVR register */
  2823. RCC->PLL3DIVR = 0x01010280;
  2824. 80013f0: 4b0d ldr r3, [pc, #52] ; (8001428 <SystemInit+0xd8>)
  2825. 80013f2: 4a11 ldr r2, [pc, #68] ; (8001438 <SystemInit+0xe8>)
  2826. 80013f4: 641a str r2, [r3, #64] ; 0x40
  2827. /* Reset PLL3FRACR register */
  2828. RCC->PLL3FRACR = 0x00000000;
  2829. 80013f6: 4b0c ldr r3, [pc, #48] ; (8001428 <SystemInit+0xd8>)
  2830. 80013f8: 2200 movs r2, #0
  2831. 80013fa: 645a str r2, [r3, #68] ; 0x44
  2832. /* Reset HSEBYP bit */
  2833. RCC->CR &= 0xFFFBFFFFU;
  2834. 80013fc: 4b0a ldr r3, [pc, #40] ; (8001428 <SystemInit+0xd8>)
  2835. 80013fe: 681b ldr r3, [r3, #0]
  2836. 8001400: 4a09 ldr r2, [pc, #36] ; (8001428 <SystemInit+0xd8>)
  2837. 8001402: f423 2380 bic.w r3, r3, #262144 ; 0x40000
  2838. 8001406: 6013 str r3, [r2, #0]
  2839. /* Disable all interrupts */
  2840. RCC->CIER = 0x00000000;
  2841. 8001408: 4b07 ldr r3, [pc, #28] ; (8001428 <SystemInit+0xd8>)
  2842. 800140a: 2200 movs r2, #0
  2843. 800140c: 661a str r2, [r3, #96] ; 0x60
  2844. /*
  2845. * Disable the FMC bank1 (enabled after reset).
  2846. * This, prevents CPU speculation access on this bank which blocks the use of FMC during
  2847. * 24us. During this time the others FMC master (such as LTDC) cannot use it!
  2848. */
  2849. FMC_Bank1_R->BTCR[0] = 0x000030D2;
  2850. 800140e: 4b0b ldr r3, [pc, #44] ; (800143c <SystemInit+0xec>)
  2851. 8001410: f243 02d2 movw r2, #12498 ; 0x30d2
  2852. 8001414: 601a str r2, [r3, #0]
  2853. SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D1 AXI-RAM or in Internal FLASH */
  2854. #endif /* USER_VECT_TAB_ADDRESS */
  2855. #endif /*DUAL_CORE && CORE_CM4*/
  2856. }
  2857. 8001416: bf00 nop
  2858. 8001418: 46bd mov sp, r7
  2859. 800141a: f85d 7b04 ldr.w r7, [sp], #4
  2860. 800141e: 4770 bx lr
  2861. 8001420: e000ed00 .word 0xe000ed00
  2862. 8001424: 52002000 .word 0x52002000
  2863. 8001428: 58024400 .word 0x58024400
  2864. 800142c: eaf6ed7f .word 0xeaf6ed7f
  2865. 8001430: 02020200 .word 0x02020200
  2866. 8001434: 01ff0000 .word 0x01ff0000
  2867. 8001438: 01010280 .word 0x01010280
  2868. 800143c: 52004000 .word 0x52004000
  2869. 08001440 <Reset_Handler>:
  2870. .section .text.Reset_Handler
  2871. .weak Reset_Handler
  2872. .type Reset_Handler, %function
  2873. Reset_Handler:
  2874. ldr sp, =_estack /* set stack pointer */
  2875. 8001440: f8df d034 ldr.w sp, [pc, #52] ; 8001478 <LoopFillZerobss+0xe>
  2876. /* Call the clock system initialization function.*/
  2877. bl SystemInit
  2878. 8001444: f7ff ff84 bl 8001350 <SystemInit>
  2879. /* Copy the data segment initializers from flash to SRAM */
  2880. ldr r0, =_sdata
  2881. 8001448: 480c ldr r0, [pc, #48] ; (800147c <LoopFillZerobss+0x12>)
  2882. ldr r1, =_edata
  2883. 800144a: 490d ldr r1, [pc, #52] ; (8001480 <LoopFillZerobss+0x16>)
  2884. ldr r2, =_sidata
  2885. 800144c: 4a0d ldr r2, [pc, #52] ; (8001484 <LoopFillZerobss+0x1a>)
  2886. movs r3, #0
  2887. 800144e: 2300 movs r3, #0
  2888. b LoopCopyDataInit
  2889. 8001450: e002 b.n 8001458 <LoopCopyDataInit>
  2890. 08001452 <CopyDataInit>:
  2891. CopyDataInit:
  2892. ldr r4, [r2, r3]
  2893. 8001452: 58d4 ldr r4, [r2, r3]
  2894. str r4, [r0, r3]
  2895. 8001454: 50c4 str r4, [r0, r3]
  2896. adds r3, r3, #4
  2897. 8001456: 3304 adds r3, #4
  2898. 08001458 <LoopCopyDataInit>:
  2899. LoopCopyDataInit:
  2900. adds r4, r0, r3
  2901. 8001458: 18c4 adds r4, r0, r3
  2902. cmp r4, r1
  2903. 800145a: 428c cmp r4, r1
  2904. bcc CopyDataInit
  2905. 800145c: d3f9 bcc.n 8001452 <CopyDataInit>
  2906. /* Zero fill the bss segment. */
  2907. ldr r2, =_sbss
  2908. 800145e: 4a0a ldr r2, [pc, #40] ; (8001488 <LoopFillZerobss+0x1e>)
  2909. ldr r4, =_ebss
  2910. 8001460: 4c0a ldr r4, [pc, #40] ; (800148c <LoopFillZerobss+0x22>)
  2911. movs r3, #0
  2912. 8001462: 2300 movs r3, #0
  2913. b LoopFillZerobss
  2914. 8001464: e001 b.n 800146a <LoopFillZerobss>
  2915. 08001466 <FillZerobss>:
  2916. FillZerobss:
  2917. str r3, [r2]
  2918. 8001466: 6013 str r3, [r2, #0]
  2919. adds r2, r2, #4
  2920. 8001468: 3204 adds r2, #4
  2921. 0800146a <LoopFillZerobss>:
  2922. LoopFillZerobss:
  2923. cmp r2, r4
  2924. 800146a: 42a2 cmp r2, r4
  2925. bcc FillZerobss
  2926. 800146c: d3fb bcc.n 8001466 <FillZerobss>
  2927. /* Call static constructors */
  2928. bl __libc_init_array
  2929. 800146e: f008 fa0f bl 8009890 <__libc_init_array>
  2930. /* Call the application's entry point.*/
  2931. bl main
  2932. 8001472: f7ff fad3 bl 8000a1c <main>
  2933. bx lr
  2934. 8001476: 4770 bx lr
  2935. ldr sp, =_estack /* set stack pointer */
  2936. 8001478: 24050000 .word 0x24050000
  2937. ldr r0, =_sdata
  2938. 800147c: 24000000 .word 0x24000000
  2939. ldr r1, =_edata
  2940. 8001480: 240001e8 .word 0x240001e8
  2941. ldr r2, =_sidata
  2942. 8001484: 0800aa44 .word 0x0800aa44
  2943. ldr r2, =_sbss
  2944. 8001488: 240001e8 .word 0x240001e8
  2945. ldr r4, =_ebss
  2946. 800148c: 24001d74 .word 0x24001d74
  2947. 08001490 <ADC3_IRQHandler>:
  2948. * @retval None
  2949. */
  2950. .section .text.Default_Handler,"ax",%progbits
  2951. Default_Handler:
  2952. Infinite_Loop:
  2953. b Infinite_Loop
  2954. 8001490: e7fe b.n 8001490 <ADC3_IRQHandler>
  2955. ...
  2956. 08001494 <HAL_Init>:
  2957. * need to ensure that the SysTick time base is always set to 1 millisecond
  2958. * to have correct HAL operation.
  2959. * @retval HAL status
  2960. */
  2961. HAL_StatusTypeDef HAL_Init(void)
  2962. {
  2963. 8001494: b580 push {r7, lr}
  2964. 8001496: b082 sub sp, #8
  2965. 8001498: af00 add r7, sp, #0
  2966. __HAL_ART_CONFIG_BASE_ADDRESS(0x08100000UL); /* Configure the Cortex-M4 ART Base address to the Flash Bank 2 : */
  2967. __HAL_ART_ENABLE(); /* Enable the Cortex-M4 ART */
  2968. #endif /* DUAL_CORE && CORE_CM4 */
  2969. /* Set Interrupt Group Priority */
  2970. HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
  2971. 800149a: 2003 movs r0, #3
  2972. 800149c: f000 f980 bl 80017a0 <HAL_NVIC_SetPriorityGrouping>
  2973. /* Update the SystemCoreClock global variable */
  2974. #if defined(RCC_D1CFGR_D1CPRE)
  2975. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> RCC_D1CFGR_D1CPRE_Pos]) & 0x1FU);
  2976. 80014a0: f002 fb14 bl 8003acc <HAL_RCC_GetSysClockFreq>
  2977. 80014a4: 4602 mov r2, r0
  2978. 80014a6: 4b15 ldr r3, [pc, #84] ; (80014fc <HAL_Init+0x68>)
  2979. 80014a8: 699b ldr r3, [r3, #24]
  2980. 80014aa: 0a1b lsrs r3, r3, #8
  2981. 80014ac: f003 030f and.w r3, r3, #15
  2982. 80014b0: 4913 ldr r1, [pc, #76] ; (8001500 <HAL_Init+0x6c>)
  2983. 80014b2: 5ccb ldrb r3, [r1, r3]
  2984. 80014b4: f003 031f and.w r3, r3, #31
  2985. 80014b8: fa22 f303 lsr.w r3, r2, r3
  2986. 80014bc: 607b str r3, [r7, #4]
  2987. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE)>> RCC_CDCFGR1_CDCPRE_Pos]) & 0x1FU);
  2988. #endif
  2989. /* Update the SystemD2Clock global variable */
  2990. #if defined(RCC_D1CFGR_HPRE)
  2991. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE)>> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  2992. 80014be: 4b0f ldr r3, [pc, #60] ; (80014fc <HAL_Init+0x68>)
  2993. 80014c0: 699b ldr r3, [r3, #24]
  2994. 80014c2: f003 030f and.w r3, r3, #15
  2995. 80014c6: 4a0e ldr r2, [pc, #56] ; (8001500 <HAL_Init+0x6c>)
  2996. 80014c8: 5cd3 ldrb r3, [r2, r3]
  2997. 80014ca: f003 031f and.w r3, r3, #31
  2998. 80014ce: 687a ldr r2, [r7, #4]
  2999. 80014d0: fa22 f303 lsr.w r3, r2, r3
  3000. 80014d4: 4a0b ldr r2, [pc, #44] ; (8001504 <HAL_Init+0x70>)
  3001. 80014d6: 6013 str r3, [r2, #0]
  3002. #endif
  3003. #if defined(DUAL_CORE) && defined(CORE_CM4)
  3004. SystemCoreClock = SystemD2Clock;
  3005. #else
  3006. SystemCoreClock = common_system_clock;
  3007. 80014d8: 4a0b ldr r2, [pc, #44] ; (8001508 <HAL_Init+0x74>)
  3008. 80014da: 687b ldr r3, [r7, #4]
  3009. 80014dc: 6013 str r3, [r2, #0]
  3010. #endif /* DUAL_CORE && CORE_CM4 */
  3011. /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */
  3012. if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
  3013. 80014de: 2000 movs r0, #0
  3014. 80014e0: f000 f814 bl 800150c <HAL_InitTick>
  3015. 80014e4: 4603 mov r3, r0
  3016. 80014e6: 2b00 cmp r3, #0
  3017. 80014e8: d001 beq.n 80014ee <HAL_Init+0x5a>
  3018. {
  3019. return HAL_ERROR;
  3020. 80014ea: 2301 movs r3, #1
  3021. 80014ec: e002 b.n 80014f4 <HAL_Init+0x60>
  3022. }
  3023. /* Init the low level hardware */
  3024. HAL_MspInit();
  3025. 80014ee: f7ff fde9 bl 80010c4 <HAL_MspInit>
  3026. /* Return function status */
  3027. return HAL_OK;
  3028. 80014f2: 2300 movs r3, #0
  3029. }
  3030. 80014f4: 4618 mov r0, r3
  3031. 80014f6: 3708 adds r7, #8
  3032. 80014f8: 46bd mov sp, r7
  3033. 80014fa: bd80 pop {r7, pc}
  3034. 80014fc: 58024400 .word 0x58024400
  3035. 8001500: 0800a958 .word 0x0800a958
  3036. 8001504: 24000004 .word 0x24000004
  3037. 8001508: 24000000 .word 0x24000000
  3038. 0800150c <HAL_InitTick>:
  3039. * implementation in user file.
  3040. * @param TickPriority: Tick interrupt priority.
  3041. * @retval HAL status
  3042. */
  3043. __weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
  3044. {
  3045. 800150c: b580 push {r7, lr}
  3046. 800150e: b082 sub sp, #8
  3047. 8001510: af00 add r7, sp, #0
  3048. 8001512: 6078 str r0, [r7, #4]
  3049. /* Check uwTickFreq for MisraC 2012 (even if uwTickFreq is a enum type that don't take the value zero)*/
  3050. if((uint32_t)uwTickFreq == 0UL)
  3051. 8001514: 4b15 ldr r3, [pc, #84] ; (800156c <HAL_InitTick+0x60>)
  3052. 8001516: 781b ldrb r3, [r3, #0]
  3053. 8001518: 2b00 cmp r3, #0
  3054. 800151a: d101 bne.n 8001520 <HAL_InitTick+0x14>
  3055. {
  3056. return HAL_ERROR;
  3057. 800151c: 2301 movs r3, #1
  3058. 800151e: e021 b.n 8001564 <HAL_InitTick+0x58>
  3059. }
  3060. /* Configure the SysTick to have interrupt in 1ms time basis*/
  3061. if (HAL_SYSTICK_Config(SystemCoreClock / (1000UL / (uint32_t)uwTickFreq)) > 0U)
  3062. 8001520: 4b13 ldr r3, [pc, #76] ; (8001570 <HAL_InitTick+0x64>)
  3063. 8001522: 681a ldr r2, [r3, #0]
  3064. 8001524: 4b11 ldr r3, [pc, #68] ; (800156c <HAL_InitTick+0x60>)
  3065. 8001526: 781b ldrb r3, [r3, #0]
  3066. 8001528: 4619 mov r1, r3
  3067. 800152a: f44f 737a mov.w r3, #1000 ; 0x3e8
  3068. 800152e: fbb3 f3f1 udiv r3, r3, r1
  3069. 8001532: fbb2 f3f3 udiv r3, r2, r3
  3070. 8001536: 4618 mov r0, r3
  3071. 8001538: f000 f965 bl 8001806 <HAL_SYSTICK_Config>
  3072. 800153c: 4603 mov r3, r0
  3073. 800153e: 2b00 cmp r3, #0
  3074. 8001540: d001 beq.n 8001546 <HAL_InitTick+0x3a>
  3075. {
  3076. return HAL_ERROR;
  3077. 8001542: 2301 movs r3, #1
  3078. 8001544: e00e b.n 8001564 <HAL_InitTick+0x58>
  3079. }
  3080. /* Configure the SysTick IRQ priority */
  3081. if (TickPriority < (1UL << __NVIC_PRIO_BITS))
  3082. 8001546: 687b ldr r3, [r7, #4]
  3083. 8001548: 2b0f cmp r3, #15
  3084. 800154a: d80a bhi.n 8001562 <HAL_InitTick+0x56>
  3085. {
  3086. HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);
  3087. 800154c: 2200 movs r2, #0
  3088. 800154e: 6879 ldr r1, [r7, #4]
  3089. 8001550: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
  3090. 8001554: f000 f92f bl 80017b6 <HAL_NVIC_SetPriority>
  3091. uwTickPrio = TickPriority;
  3092. 8001558: 4a06 ldr r2, [pc, #24] ; (8001574 <HAL_InitTick+0x68>)
  3093. 800155a: 687b ldr r3, [r7, #4]
  3094. 800155c: 6013 str r3, [r2, #0]
  3095. {
  3096. return HAL_ERROR;
  3097. }
  3098. /* Return function status */
  3099. return HAL_OK;
  3100. 800155e: 2300 movs r3, #0
  3101. 8001560: e000 b.n 8001564 <HAL_InitTick+0x58>
  3102. return HAL_ERROR;
  3103. 8001562: 2301 movs r3, #1
  3104. }
  3105. 8001564: 4618 mov r0, r3
  3106. 8001566: 3708 adds r7, #8
  3107. 8001568: 46bd mov sp, r7
  3108. 800156a: bd80 pop {r7, pc}
  3109. 800156c: 2400000c .word 0x2400000c
  3110. 8001570: 24000000 .word 0x24000000
  3111. 8001574: 24000008 .word 0x24000008
  3112. 08001578 <HAL_IncTick>:
  3113. * @note This function is declared as __weak to be overwritten in case of other
  3114. * implementations in user file.
  3115. * @retval None
  3116. */
  3117. __weak void HAL_IncTick(void)
  3118. {
  3119. 8001578: b480 push {r7}
  3120. 800157a: af00 add r7, sp, #0
  3121. uwTick += (uint32_t)uwTickFreq;
  3122. 800157c: 4b06 ldr r3, [pc, #24] ; (8001598 <HAL_IncTick+0x20>)
  3123. 800157e: 781b ldrb r3, [r3, #0]
  3124. 8001580: 461a mov r2, r3
  3125. 8001582: 4b06 ldr r3, [pc, #24] ; (800159c <HAL_IncTick+0x24>)
  3126. 8001584: 681b ldr r3, [r3, #0]
  3127. 8001586: 4413 add r3, r2
  3128. 8001588: 4a04 ldr r2, [pc, #16] ; (800159c <HAL_IncTick+0x24>)
  3129. 800158a: 6013 str r3, [r2, #0]
  3130. }
  3131. 800158c: bf00 nop
  3132. 800158e: 46bd mov sp, r7
  3133. 8001590: f85d 7b04 ldr.w r7, [sp], #4
  3134. 8001594: 4770 bx lr
  3135. 8001596: bf00 nop
  3136. 8001598: 2400000c .word 0x2400000c
  3137. 800159c: 24000488 .word 0x24000488
  3138. 080015a0 <HAL_GetTick>:
  3139. * @note This function is declared as __weak to be overwritten in case of other
  3140. * implementations in user file.
  3141. * @retval tick value
  3142. */
  3143. __weak uint32_t HAL_GetTick(void)
  3144. {
  3145. 80015a0: b480 push {r7}
  3146. 80015a2: af00 add r7, sp, #0
  3147. return uwTick;
  3148. 80015a4: 4b03 ldr r3, [pc, #12] ; (80015b4 <HAL_GetTick+0x14>)
  3149. 80015a6: 681b ldr r3, [r3, #0]
  3150. }
  3151. 80015a8: 4618 mov r0, r3
  3152. 80015aa: 46bd mov sp, r7
  3153. 80015ac: f85d 7b04 ldr.w r7, [sp], #4
  3154. 80015b0: 4770 bx lr
  3155. 80015b2: bf00 nop
  3156. 80015b4: 24000488 .word 0x24000488
  3157. 080015b8 <HAL_Delay>:
  3158. * implementations in user file.
  3159. * @param Delay specifies the delay time length, in milliseconds.
  3160. * @retval None
  3161. */
  3162. __weak void HAL_Delay(uint32_t Delay)
  3163. {
  3164. 80015b8: b580 push {r7, lr}
  3165. 80015ba: b084 sub sp, #16
  3166. 80015bc: af00 add r7, sp, #0
  3167. 80015be: 6078 str r0, [r7, #4]
  3168. uint32_t tickstart = HAL_GetTick();
  3169. 80015c0: f7ff ffee bl 80015a0 <HAL_GetTick>
  3170. 80015c4: 60b8 str r0, [r7, #8]
  3171. uint32_t wait = Delay;
  3172. 80015c6: 687b ldr r3, [r7, #4]
  3173. 80015c8: 60fb str r3, [r7, #12]
  3174. /* Add a freq to guarantee minimum wait */
  3175. if (wait < HAL_MAX_DELAY)
  3176. 80015ca: 68fb ldr r3, [r7, #12]
  3177. 80015cc: f1b3 3fff cmp.w r3, #4294967295 ; 0xffffffff
  3178. 80015d0: d005 beq.n 80015de <HAL_Delay+0x26>
  3179. {
  3180. wait += (uint32_t)(uwTickFreq);
  3181. 80015d2: 4b0a ldr r3, [pc, #40] ; (80015fc <HAL_Delay+0x44>)
  3182. 80015d4: 781b ldrb r3, [r3, #0]
  3183. 80015d6: 461a mov r2, r3
  3184. 80015d8: 68fb ldr r3, [r7, #12]
  3185. 80015da: 4413 add r3, r2
  3186. 80015dc: 60fb str r3, [r7, #12]
  3187. }
  3188. while ((HAL_GetTick() - tickstart) < wait)
  3189. 80015de: bf00 nop
  3190. 80015e0: f7ff ffde bl 80015a0 <HAL_GetTick>
  3191. 80015e4: 4602 mov r2, r0
  3192. 80015e6: 68bb ldr r3, [r7, #8]
  3193. 80015e8: 1ad3 subs r3, r2, r3
  3194. 80015ea: 68fa ldr r2, [r7, #12]
  3195. 80015ec: 429a cmp r2, r3
  3196. 80015ee: d8f7 bhi.n 80015e0 <HAL_Delay+0x28>
  3197. {
  3198. }
  3199. }
  3200. 80015f0: bf00 nop
  3201. 80015f2: bf00 nop
  3202. 80015f4: 3710 adds r7, #16
  3203. 80015f6: 46bd mov sp, r7
  3204. 80015f8: bd80 pop {r7, pc}
  3205. 80015fa: bf00 nop
  3206. 80015fc: 2400000c .word 0x2400000c
  3207. 08001600 <__NVIC_SetPriorityGrouping>:
  3208. {
  3209. 8001600: b480 push {r7}
  3210. 8001602: b085 sub sp, #20
  3211. 8001604: af00 add r7, sp, #0
  3212. 8001606: 6078 str r0, [r7, #4]
  3213. uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
  3214. 8001608: 687b ldr r3, [r7, #4]
  3215. 800160a: f003 0307 and.w r3, r3, #7
  3216. 800160e: 60fb str r3, [r7, #12]
  3217. reg_value = SCB->AIRCR; /* read old register configuration */
  3218. 8001610: 4b0b ldr r3, [pc, #44] ; (8001640 <__NVIC_SetPriorityGrouping+0x40>)
  3219. 8001612: 68db ldr r3, [r3, #12]
  3220. 8001614: 60bb str r3, [r7, #8]
  3221. reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */
  3222. 8001616: 68ba ldr r2, [r7, #8]
  3223. 8001618: f64f 03ff movw r3, #63743 ; 0xf8ff
  3224. 800161c: 4013 ands r3, r2
  3225. 800161e: 60bb str r3, [r7, #8]
  3226. (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */
  3227. 8001620: 68fb ldr r3, [r7, #12]
  3228. 8001622: 021a lsls r2, r3, #8
  3229. ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
  3230. 8001624: 68bb ldr r3, [r7, #8]
  3231. 8001626: 431a orrs r2, r3
  3232. reg_value = (reg_value |
  3233. 8001628: 4b06 ldr r3, [pc, #24] ; (8001644 <__NVIC_SetPriorityGrouping+0x44>)
  3234. 800162a: 4313 orrs r3, r2
  3235. 800162c: 60bb str r3, [r7, #8]
  3236. SCB->AIRCR = reg_value;
  3237. 800162e: 4a04 ldr r2, [pc, #16] ; (8001640 <__NVIC_SetPriorityGrouping+0x40>)
  3238. 8001630: 68bb ldr r3, [r7, #8]
  3239. 8001632: 60d3 str r3, [r2, #12]
  3240. }
  3241. 8001634: bf00 nop
  3242. 8001636: 3714 adds r7, #20
  3243. 8001638: 46bd mov sp, r7
  3244. 800163a: f85d 7b04 ldr.w r7, [sp], #4
  3245. 800163e: 4770 bx lr
  3246. 8001640: e000ed00 .word 0xe000ed00
  3247. 8001644: 05fa0000 .word 0x05fa0000
  3248. 08001648 <__NVIC_GetPriorityGrouping>:
  3249. {
  3250. 8001648: b480 push {r7}
  3251. 800164a: af00 add r7, sp, #0
  3252. return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));
  3253. 800164c: 4b04 ldr r3, [pc, #16] ; (8001660 <__NVIC_GetPriorityGrouping+0x18>)
  3254. 800164e: 68db ldr r3, [r3, #12]
  3255. 8001650: 0a1b lsrs r3, r3, #8
  3256. 8001652: f003 0307 and.w r3, r3, #7
  3257. }
  3258. 8001656: 4618 mov r0, r3
  3259. 8001658: 46bd mov sp, r7
  3260. 800165a: f85d 7b04 ldr.w r7, [sp], #4
  3261. 800165e: 4770 bx lr
  3262. 8001660: e000ed00 .word 0xe000ed00
  3263. 08001664 <__NVIC_EnableIRQ>:
  3264. {
  3265. 8001664: b480 push {r7}
  3266. 8001666: b083 sub sp, #12
  3267. 8001668: af00 add r7, sp, #0
  3268. 800166a: 4603 mov r3, r0
  3269. 800166c: 80fb strh r3, [r7, #6]
  3270. if ((int32_t)(IRQn) >= 0)
  3271. 800166e: f9b7 3006 ldrsh.w r3, [r7, #6]
  3272. 8001672: 2b00 cmp r3, #0
  3273. 8001674: db0b blt.n 800168e <__NVIC_EnableIRQ+0x2a>
  3274. NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
  3275. 8001676: 88fb ldrh r3, [r7, #6]
  3276. 8001678: f003 021f and.w r2, r3, #31
  3277. 800167c: 4907 ldr r1, [pc, #28] ; (800169c <__NVIC_EnableIRQ+0x38>)
  3278. 800167e: f9b7 3006 ldrsh.w r3, [r7, #6]
  3279. 8001682: 095b lsrs r3, r3, #5
  3280. 8001684: 2001 movs r0, #1
  3281. 8001686: fa00 f202 lsl.w r2, r0, r2
  3282. 800168a: f841 2023 str.w r2, [r1, r3, lsl #2]
  3283. }
  3284. 800168e: bf00 nop
  3285. 8001690: 370c adds r7, #12
  3286. 8001692: 46bd mov sp, r7
  3287. 8001694: f85d 7b04 ldr.w r7, [sp], #4
  3288. 8001698: 4770 bx lr
  3289. 800169a: bf00 nop
  3290. 800169c: e000e100 .word 0xe000e100
  3291. 080016a0 <__NVIC_SetPriority>:
  3292. {
  3293. 80016a0: b480 push {r7}
  3294. 80016a2: b083 sub sp, #12
  3295. 80016a4: af00 add r7, sp, #0
  3296. 80016a6: 4603 mov r3, r0
  3297. 80016a8: 6039 str r1, [r7, #0]
  3298. 80016aa: 80fb strh r3, [r7, #6]
  3299. if ((int32_t)(IRQn) >= 0)
  3300. 80016ac: f9b7 3006 ldrsh.w r3, [r7, #6]
  3301. 80016b0: 2b00 cmp r3, #0
  3302. 80016b2: db0a blt.n 80016ca <__NVIC_SetPriority+0x2a>
  3303. NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  3304. 80016b4: 683b ldr r3, [r7, #0]
  3305. 80016b6: b2da uxtb r2, r3
  3306. 80016b8: 490c ldr r1, [pc, #48] ; (80016ec <__NVIC_SetPriority+0x4c>)
  3307. 80016ba: f9b7 3006 ldrsh.w r3, [r7, #6]
  3308. 80016be: 0112 lsls r2, r2, #4
  3309. 80016c0: b2d2 uxtb r2, r2
  3310. 80016c2: 440b add r3, r1
  3311. 80016c4: f883 2300 strb.w r2, [r3, #768] ; 0x300
  3312. }
  3313. 80016c8: e00a b.n 80016e0 <__NVIC_SetPriority+0x40>
  3314. SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  3315. 80016ca: 683b ldr r3, [r7, #0]
  3316. 80016cc: b2da uxtb r2, r3
  3317. 80016ce: 4908 ldr r1, [pc, #32] ; (80016f0 <__NVIC_SetPriority+0x50>)
  3318. 80016d0: 88fb ldrh r3, [r7, #6]
  3319. 80016d2: f003 030f and.w r3, r3, #15
  3320. 80016d6: 3b04 subs r3, #4
  3321. 80016d8: 0112 lsls r2, r2, #4
  3322. 80016da: b2d2 uxtb r2, r2
  3323. 80016dc: 440b add r3, r1
  3324. 80016de: 761a strb r2, [r3, #24]
  3325. }
  3326. 80016e0: bf00 nop
  3327. 80016e2: 370c adds r7, #12
  3328. 80016e4: 46bd mov sp, r7
  3329. 80016e6: f85d 7b04 ldr.w r7, [sp], #4
  3330. 80016ea: 4770 bx lr
  3331. 80016ec: e000e100 .word 0xe000e100
  3332. 80016f0: e000ed00 .word 0xe000ed00
  3333. 080016f4 <NVIC_EncodePriority>:
  3334. {
  3335. 80016f4: b480 push {r7}
  3336. 80016f6: b089 sub sp, #36 ; 0x24
  3337. 80016f8: af00 add r7, sp, #0
  3338. 80016fa: 60f8 str r0, [r7, #12]
  3339. 80016fc: 60b9 str r1, [r7, #8]
  3340. 80016fe: 607a str r2, [r7, #4]
  3341. uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
  3342. 8001700: 68fb ldr r3, [r7, #12]
  3343. 8001702: f003 0307 and.w r3, r3, #7
  3344. 8001706: 61fb str r3, [r7, #28]
  3345. PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
  3346. 8001708: 69fb ldr r3, [r7, #28]
  3347. 800170a: f1c3 0307 rsb r3, r3, #7
  3348. 800170e: 2b04 cmp r3, #4
  3349. 8001710: bf28 it cs
  3350. 8001712: 2304 movcs r3, #4
  3351. 8001714: 61bb str r3, [r7, #24]
  3352. SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
  3353. 8001716: 69fb ldr r3, [r7, #28]
  3354. 8001718: 3304 adds r3, #4
  3355. 800171a: 2b06 cmp r3, #6
  3356. 800171c: d902 bls.n 8001724 <NVIC_EncodePriority+0x30>
  3357. 800171e: 69fb ldr r3, [r7, #28]
  3358. 8001720: 3b03 subs r3, #3
  3359. 8001722: e000 b.n 8001726 <NVIC_EncodePriority+0x32>
  3360. 8001724: 2300 movs r3, #0
  3361. 8001726: 617b str r3, [r7, #20]
  3362. ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
  3363. 8001728: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff
  3364. 800172c: 69bb ldr r3, [r7, #24]
  3365. 800172e: fa02 f303 lsl.w r3, r2, r3
  3366. 8001732: 43da mvns r2, r3
  3367. 8001734: 68bb ldr r3, [r7, #8]
  3368. 8001736: 401a ands r2, r3
  3369. 8001738: 697b ldr r3, [r7, #20]
  3370. 800173a: 409a lsls r2, r3
  3371. ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL)))
  3372. 800173c: f04f 31ff mov.w r1, #4294967295 ; 0xffffffff
  3373. 8001740: 697b ldr r3, [r7, #20]
  3374. 8001742: fa01 f303 lsl.w r3, r1, r3
  3375. 8001746: 43d9 mvns r1, r3
  3376. 8001748: 687b ldr r3, [r7, #4]
  3377. 800174a: 400b ands r3, r1
  3378. ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
  3379. 800174c: 4313 orrs r3, r2
  3380. }
  3381. 800174e: 4618 mov r0, r3
  3382. 8001750: 3724 adds r7, #36 ; 0x24
  3383. 8001752: 46bd mov sp, r7
  3384. 8001754: f85d 7b04 ldr.w r7, [sp], #4
  3385. 8001758: 4770 bx lr
  3386. ...
  3387. 0800175c <SysTick_Config>:
  3388. \note When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the
  3389. function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>
  3390. must contain a vendor-specific implementation of this function.
  3391. */
  3392. __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
  3393. {
  3394. 800175c: b580 push {r7, lr}
  3395. 800175e: b082 sub sp, #8
  3396. 8001760: af00 add r7, sp, #0
  3397. 8001762: 6078 str r0, [r7, #4]
  3398. if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
  3399. 8001764: 687b ldr r3, [r7, #4]
  3400. 8001766: 3b01 subs r3, #1
  3401. 8001768: f1b3 7f80 cmp.w r3, #16777216 ; 0x1000000
  3402. 800176c: d301 bcc.n 8001772 <SysTick_Config+0x16>
  3403. {
  3404. return (1UL); /* Reload value impossible */
  3405. 800176e: 2301 movs r3, #1
  3406. 8001770: e00f b.n 8001792 <SysTick_Config+0x36>
  3407. }
  3408. SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */
  3409. 8001772: 4a0a ldr r2, [pc, #40] ; (800179c <SysTick_Config+0x40>)
  3410. 8001774: 687b ldr r3, [r7, #4]
  3411. 8001776: 3b01 subs r3, #1
  3412. 8001778: 6053 str r3, [r2, #4]
  3413. NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
  3414. 800177a: 210f movs r1, #15
  3415. 800177c: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
  3416. 8001780: f7ff ff8e bl 80016a0 <__NVIC_SetPriority>
  3417. SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
  3418. 8001784: 4b05 ldr r3, [pc, #20] ; (800179c <SysTick_Config+0x40>)
  3419. 8001786: 2200 movs r2, #0
  3420. 8001788: 609a str r2, [r3, #8]
  3421. SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
  3422. 800178a: 4b04 ldr r3, [pc, #16] ; (800179c <SysTick_Config+0x40>)
  3423. 800178c: 2207 movs r2, #7
  3424. 800178e: 601a str r2, [r3, #0]
  3425. SysTick_CTRL_TICKINT_Msk |
  3426. SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
  3427. return (0UL); /* Function successful */
  3428. 8001790: 2300 movs r3, #0
  3429. }
  3430. 8001792: 4618 mov r0, r3
  3431. 8001794: 3708 adds r7, #8
  3432. 8001796: 46bd mov sp, r7
  3433. 8001798: bd80 pop {r7, pc}
  3434. 800179a: bf00 nop
  3435. 800179c: e000e010 .word 0xe000e010
  3436. 080017a0 <HAL_NVIC_SetPriorityGrouping>:
  3437. * @note When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible.
  3438. * The pending IRQ priority will be managed only by the subpriority.
  3439. * @retval None
  3440. */
  3441. void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
  3442. {
  3443. 80017a0: b580 push {r7, lr}
  3444. 80017a2: b082 sub sp, #8
  3445. 80017a4: af00 add r7, sp, #0
  3446. 80017a6: 6078 str r0, [r7, #4]
  3447. /* Check the parameters */
  3448. assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));
  3449. /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */
  3450. NVIC_SetPriorityGrouping(PriorityGroup);
  3451. 80017a8: 6878 ldr r0, [r7, #4]
  3452. 80017aa: f7ff ff29 bl 8001600 <__NVIC_SetPriorityGrouping>
  3453. }
  3454. 80017ae: bf00 nop
  3455. 80017b0: 3708 adds r7, #8
  3456. 80017b2: 46bd mov sp, r7
  3457. 80017b4: bd80 pop {r7, pc}
  3458. 080017b6 <HAL_NVIC_SetPriority>:
  3459. * This parameter can be a value between 0 and 15
  3460. * A lower priority value indicates a higher priority.
  3461. * @retval None
  3462. */
  3463. void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
  3464. {
  3465. 80017b6: b580 push {r7, lr}
  3466. 80017b8: b086 sub sp, #24
  3467. 80017ba: af00 add r7, sp, #0
  3468. 80017bc: 4603 mov r3, r0
  3469. 80017be: 60b9 str r1, [r7, #8]
  3470. 80017c0: 607a str r2, [r7, #4]
  3471. 80017c2: 81fb strh r3, [r7, #14]
  3472. /* Check the parameters */
  3473. assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));
  3474. assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));
  3475. prioritygroup = NVIC_GetPriorityGrouping();
  3476. 80017c4: f7ff ff40 bl 8001648 <__NVIC_GetPriorityGrouping>
  3477. 80017c8: 6178 str r0, [r7, #20]
  3478. NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));
  3479. 80017ca: 687a ldr r2, [r7, #4]
  3480. 80017cc: 68b9 ldr r1, [r7, #8]
  3481. 80017ce: 6978 ldr r0, [r7, #20]
  3482. 80017d0: f7ff ff90 bl 80016f4 <NVIC_EncodePriority>
  3483. 80017d4: 4602 mov r2, r0
  3484. 80017d6: f9b7 300e ldrsh.w r3, [r7, #14]
  3485. 80017da: 4611 mov r1, r2
  3486. 80017dc: 4618 mov r0, r3
  3487. 80017de: f7ff ff5f bl 80016a0 <__NVIC_SetPriority>
  3488. }
  3489. 80017e2: bf00 nop
  3490. 80017e4: 3718 adds r7, #24
  3491. 80017e6: 46bd mov sp, r7
  3492. 80017e8: bd80 pop {r7, pc}
  3493. 080017ea <HAL_NVIC_EnableIRQ>:
  3494. * This parameter can be an enumerator of IRQn_Type enumeration
  3495. * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32h7xxxx.h))
  3496. * @retval None
  3497. */
  3498. void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
  3499. {
  3500. 80017ea: b580 push {r7, lr}
  3501. 80017ec: b082 sub sp, #8
  3502. 80017ee: af00 add r7, sp, #0
  3503. 80017f0: 4603 mov r3, r0
  3504. 80017f2: 80fb strh r3, [r7, #6]
  3505. /* Check the parameters */
  3506. assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
  3507. /* Enable interrupt */
  3508. NVIC_EnableIRQ(IRQn);
  3509. 80017f4: f9b7 3006 ldrsh.w r3, [r7, #6]
  3510. 80017f8: 4618 mov r0, r3
  3511. 80017fa: f7ff ff33 bl 8001664 <__NVIC_EnableIRQ>
  3512. }
  3513. 80017fe: bf00 nop
  3514. 8001800: 3708 adds r7, #8
  3515. 8001802: 46bd mov sp, r7
  3516. 8001804: bd80 pop {r7, pc}
  3517. 08001806 <HAL_SYSTICK_Config>:
  3518. * @param TicksNumb Specifies the ticks Number of ticks between two interrupts.
  3519. * @retval status - 0 Function succeeded.
  3520. * - 1 Function failed.
  3521. */
  3522. uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb)
  3523. {
  3524. 8001806: b580 push {r7, lr}
  3525. 8001808: b082 sub sp, #8
  3526. 800180a: af00 add r7, sp, #0
  3527. 800180c: 6078 str r0, [r7, #4]
  3528. return SysTick_Config(TicksNumb);
  3529. 800180e: 6878 ldr r0, [r7, #4]
  3530. 8001810: f7ff ffa4 bl 800175c <SysTick_Config>
  3531. 8001814: 4603 mov r3, r0
  3532. }
  3533. 8001816: 4618 mov r0, r3
  3534. 8001818: 3708 adds r7, #8
  3535. 800181a: 46bd mov sp, r7
  3536. 800181c: bd80 pop {r7, pc}
  3537. ...
  3538. 08001820 <HAL_GPIO_Init>:
  3539. * @param GPIO_Init: pointer to a GPIO_InitTypeDef structure that contains
  3540. * the configuration information for the specified GPIO peripheral.
  3541. * @retval None
  3542. */
  3543. void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
  3544. {
  3545. 8001820: b480 push {r7}
  3546. 8001822: b089 sub sp, #36 ; 0x24
  3547. 8001824: af00 add r7, sp, #0
  3548. 8001826: 6078 str r0, [r7, #4]
  3549. 8001828: 6039 str r1, [r7, #0]
  3550. uint32_t position = 0x00U;
  3551. 800182a: 2300 movs r3, #0
  3552. 800182c: 61fb str r3, [r7, #28]
  3553. EXTI_Core_TypeDef *EXTI_CurrentCPU;
  3554. #if defined(DUAL_CORE) && defined(CORE_CM4)
  3555. EXTI_CurrentCPU = EXTI_D2; /* EXTI for CM4 CPU */
  3556. #else
  3557. EXTI_CurrentCPU = EXTI_D1; /* EXTI for CM7 CPU */
  3558. 800182e: 4b86 ldr r3, [pc, #536] ; (8001a48 <HAL_GPIO_Init+0x228>)
  3559. 8001830: 617b str r3, [r7, #20]
  3560. assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
  3561. assert_param(IS_GPIO_PIN(GPIO_Init->Pin));
  3562. assert_param(IS_GPIO_MODE(GPIO_Init->Mode));
  3563. /* Configure the port pins */
  3564. while (((GPIO_Init->Pin) >> position) != 0x00U)
  3565. 8001832: e18c b.n 8001b4e <HAL_GPIO_Init+0x32e>
  3566. {
  3567. /* Get current io position */
  3568. iocurrent = (GPIO_Init->Pin) & (1UL << position);
  3569. 8001834: 683b ldr r3, [r7, #0]
  3570. 8001836: 681a ldr r2, [r3, #0]
  3571. 8001838: 2101 movs r1, #1
  3572. 800183a: 69fb ldr r3, [r7, #28]
  3573. 800183c: fa01 f303 lsl.w r3, r1, r3
  3574. 8001840: 4013 ands r3, r2
  3575. 8001842: 613b str r3, [r7, #16]
  3576. if (iocurrent != 0x00U)
  3577. 8001844: 693b ldr r3, [r7, #16]
  3578. 8001846: 2b00 cmp r3, #0
  3579. 8001848: f000 817e beq.w 8001b48 <HAL_GPIO_Init+0x328>
  3580. {
  3581. /*--------------------- GPIO Mode Configuration ------------------------*/
  3582. /* In case of Output or Alternate function mode selection */
  3583. if (((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF))
  3584. 800184c: 683b ldr r3, [r7, #0]
  3585. 800184e: 685b ldr r3, [r3, #4]
  3586. 8001850: f003 0303 and.w r3, r3, #3
  3587. 8001854: 2b01 cmp r3, #1
  3588. 8001856: d005 beq.n 8001864 <HAL_GPIO_Init+0x44>
  3589. 8001858: 683b ldr r3, [r7, #0]
  3590. 800185a: 685b ldr r3, [r3, #4]
  3591. 800185c: f003 0303 and.w r3, r3, #3
  3592. 8001860: 2b02 cmp r3, #2
  3593. 8001862: d130 bne.n 80018c6 <HAL_GPIO_Init+0xa6>
  3594. {
  3595. /* Check the Speed parameter */
  3596. assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));
  3597. /* Configure the IO Speed */
  3598. temp = GPIOx->OSPEEDR;
  3599. 8001864: 687b ldr r3, [r7, #4]
  3600. 8001866: 689b ldr r3, [r3, #8]
  3601. 8001868: 61bb str r3, [r7, #24]
  3602. temp &= ~(GPIO_OSPEEDR_OSPEED0 << (position * 2U));
  3603. 800186a: 69fb ldr r3, [r7, #28]
  3604. 800186c: 005b lsls r3, r3, #1
  3605. 800186e: 2203 movs r2, #3
  3606. 8001870: fa02 f303 lsl.w r3, r2, r3
  3607. 8001874: 43db mvns r3, r3
  3608. 8001876: 69ba ldr r2, [r7, #24]
  3609. 8001878: 4013 ands r3, r2
  3610. 800187a: 61bb str r3, [r7, #24]
  3611. temp |= (GPIO_Init->Speed << (position * 2U));
  3612. 800187c: 683b ldr r3, [r7, #0]
  3613. 800187e: 68da ldr r2, [r3, #12]
  3614. 8001880: 69fb ldr r3, [r7, #28]
  3615. 8001882: 005b lsls r3, r3, #1
  3616. 8001884: fa02 f303 lsl.w r3, r2, r3
  3617. 8001888: 69ba ldr r2, [r7, #24]
  3618. 800188a: 4313 orrs r3, r2
  3619. 800188c: 61bb str r3, [r7, #24]
  3620. GPIOx->OSPEEDR = temp;
  3621. 800188e: 687b ldr r3, [r7, #4]
  3622. 8001890: 69ba ldr r2, [r7, #24]
  3623. 8001892: 609a str r2, [r3, #8]
  3624. /* Configure the IO Output Type */
  3625. temp = GPIOx->OTYPER;
  3626. 8001894: 687b ldr r3, [r7, #4]
  3627. 8001896: 685b ldr r3, [r3, #4]
  3628. 8001898: 61bb str r3, [r7, #24]
  3629. temp &= ~(GPIO_OTYPER_OT0 << position) ;
  3630. 800189a: 2201 movs r2, #1
  3631. 800189c: 69fb ldr r3, [r7, #28]
  3632. 800189e: fa02 f303 lsl.w r3, r2, r3
  3633. 80018a2: 43db mvns r3, r3
  3634. 80018a4: 69ba ldr r2, [r7, #24]
  3635. 80018a6: 4013 ands r3, r2
  3636. 80018a8: 61bb str r3, [r7, #24]
  3637. temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position);
  3638. 80018aa: 683b ldr r3, [r7, #0]
  3639. 80018ac: 685b ldr r3, [r3, #4]
  3640. 80018ae: 091b lsrs r3, r3, #4
  3641. 80018b0: f003 0201 and.w r2, r3, #1
  3642. 80018b4: 69fb ldr r3, [r7, #28]
  3643. 80018b6: fa02 f303 lsl.w r3, r2, r3
  3644. 80018ba: 69ba ldr r2, [r7, #24]
  3645. 80018bc: 4313 orrs r3, r2
  3646. 80018be: 61bb str r3, [r7, #24]
  3647. GPIOx->OTYPER = temp;
  3648. 80018c0: 687b ldr r3, [r7, #4]
  3649. 80018c2: 69ba ldr r2, [r7, #24]
  3650. 80018c4: 605a str r2, [r3, #4]
  3651. }
  3652. if ((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG)
  3653. 80018c6: 683b ldr r3, [r7, #0]
  3654. 80018c8: 685b ldr r3, [r3, #4]
  3655. 80018ca: f003 0303 and.w r3, r3, #3
  3656. 80018ce: 2b03 cmp r3, #3
  3657. 80018d0: d017 beq.n 8001902 <HAL_GPIO_Init+0xe2>
  3658. {
  3659. /* Check the Pull parameter */
  3660. assert_param(IS_GPIO_PULL(GPIO_Init->Pull));
  3661. /* Activate the Pull-up or Pull down resistor for the current IO */
  3662. temp = GPIOx->PUPDR;
  3663. 80018d2: 687b ldr r3, [r7, #4]
  3664. 80018d4: 68db ldr r3, [r3, #12]
  3665. 80018d6: 61bb str r3, [r7, #24]
  3666. temp &= ~(GPIO_PUPDR_PUPD0 << (position * 2U));
  3667. 80018d8: 69fb ldr r3, [r7, #28]
  3668. 80018da: 005b lsls r3, r3, #1
  3669. 80018dc: 2203 movs r2, #3
  3670. 80018de: fa02 f303 lsl.w r3, r2, r3
  3671. 80018e2: 43db mvns r3, r3
  3672. 80018e4: 69ba ldr r2, [r7, #24]
  3673. 80018e6: 4013 ands r3, r2
  3674. 80018e8: 61bb str r3, [r7, #24]
  3675. temp |= ((GPIO_Init->Pull) << (position * 2U));
  3676. 80018ea: 683b ldr r3, [r7, #0]
  3677. 80018ec: 689a ldr r2, [r3, #8]
  3678. 80018ee: 69fb ldr r3, [r7, #28]
  3679. 80018f0: 005b lsls r3, r3, #1
  3680. 80018f2: fa02 f303 lsl.w r3, r2, r3
  3681. 80018f6: 69ba ldr r2, [r7, #24]
  3682. 80018f8: 4313 orrs r3, r2
  3683. 80018fa: 61bb str r3, [r7, #24]
  3684. GPIOx->PUPDR = temp;
  3685. 80018fc: 687b ldr r3, [r7, #4]
  3686. 80018fe: 69ba ldr r2, [r7, #24]
  3687. 8001900: 60da str r2, [r3, #12]
  3688. }
  3689. /* In case of Alternate function mode selection */
  3690. if ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)
  3691. 8001902: 683b ldr r3, [r7, #0]
  3692. 8001904: 685b ldr r3, [r3, #4]
  3693. 8001906: f003 0303 and.w r3, r3, #3
  3694. 800190a: 2b02 cmp r3, #2
  3695. 800190c: d123 bne.n 8001956 <HAL_GPIO_Init+0x136>
  3696. /* Check the Alternate function parameters */
  3697. assert_param(IS_GPIO_AF_INSTANCE(GPIOx));
  3698. assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
  3699. /* Configure Alternate function mapped with the current IO */
  3700. temp = GPIOx->AFR[position >> 3U];
  3701. 800190e: 69fb ldr r3, [r7, #28]
  3702. 8001910: 08da lsrs r2, r3, #3
  3703. 8001912: 687b ldr r3, [r7, #4]
  3704. 8001914: 3208 adds r2, #8
  3705. 8001916: f853 3022 ldr.w r3, [r3, r2, lsl #2]
  3706. 800191a: 61bb str r3, [r7, #24]
  3707. temp &= ~(0xFU << ((position & 0x07U) * 4U));
  3708. 800191c: 69fb ldr r3, [r7, #28]
  3709. 800191e: f003 0307 and.w r3, r3, #7
  3710. 8001922: 009b lsls r3, r3, #2
  3711. 8001924: 220f movs r2, #15
  3712. 8001926: fa02 f303 lsl.w r3, r2, r3
  3713. 800192a: 43db mvns r3, r3
  3714. 800192c: 69ba ldr r2, [r7, #24]
  3715. 800192e: 4013 ands r3, r2
  3716. 8001930: 61bb str r3, [r7, #24]
  3717. temp |= ((GPIO_Init->Alternate) << ((position & 0x07U) * 4U));
  3718. 8001932: 683b ldr r3, [r7, #0]
  3719. 8001934: 691a ldr r2, [r3, #16]
  3720. 8001936: 69fb ldr r3, [r7, #28]
  3721. 8001938: f003 0307 and.w r3, r3, #7
  3722. 800193c: 009b lsls r3, r3, #2
  3723. 800193e: fa02 f303 lsl.w r3, r2, r3
  3724. 8001942: 69ba ldr r2, [r7, #24]
  3725. 8001944: 4313 orrs r3, r2
  3726. 8001946: 61bb str r3, [r7, #24]
  3727. GPIOx->AFR[position >> 3U] = temp;
  3728. 8001948: 69fb ldr r3, [r7, #28]
  3729. 800194a: 08da lsrs r2, r3, #3
  3730. 800194c: 687b ldr r3, [r7, #4]
  3731. 800194e: 3208 adds r2, #8
  3732. 8001950: 69b9 ldr r1, [r7, #24]
  3733. 8001952: f843 1022 str.w r1, [r3, r2, lsl #2]
  3734. }
  3735. /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
  3736. temp = GPIOx->MODER;
  3737. 8001956: 687b ldr r3, [r7, #4]
  3738. 8001958: 681b ldr r3, [r3, #0]
  3739. 800195a: 61bb str r3, [r7, #24]
  3740. temp &= ~(GPIO_MODER_MODE0 << (position * 2U));
  3741. 800195c: 69fb ldr r3, [r7, #28]
  3742. 800195e: 005b lsls r3, r3, #1
  3743. 8001960: 2203 movs r2, #3
  3744. 8001962: fa02 f303 lsl.w r3, r2, r3
  3745. 8001966: 43db mvns r3, r3
  3746. 8001968: 69ba ldr r2, [r7, #24]
  3747. 800196a: 4013 ands r3, r2
  3748. 800196c: 61bb str r3, [r7, #24]
  3749. temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2U));
  3750. 800196e: 683b ldr r3, [r7, #0]
  3751. 8001970: 685b ldr r3, [r3, #4]
  3752. 8001972: f003 0203 and.w r2, r3, #3
  3753. 8001976: 69fb ldr r3, [r7, #28]
  3754. 8001978: 005b lsls r3, r3, #1
  3755. 800197a: fa02 f303 lsl.w r3, r2, r3
  3756. 800197e: 69ba ldr r2, [r7, #24]
  3757. 8001980: 4313 orrs r3, r2
  3758. 8001982: 61bb str r3, [r7, #24]
  3759. GPIOx->MODER = temp;
  3760. 8001984: 687b ldr r3, [r7, #4]
  3761. 8001986: 69ba ldr r2, [r7, #24]
  3762. 8001988: 601a str r2, [r3, #0]
  3763. /*--------------------- EXTI Mode Configuration ------------------------*/
  3764. /* Configure the External Interrupt or event for the current IO */
  3765. if ((GPIO_Init->Mode & EXTI_MODE) != 0x00U)
  3766. 800198a: 683b ldr r3, [r7, #0]
  3767. 800198c: 685b ldr r3, [r3, #4]
  3768. 800198e: f403 3340 and.w r3, r3, #196608 ; 0x30000
  3769. 8001992: 2b00 cmp r3, #0
  3770. 8001994: f000 80d8 beq.w 8001b48 <HAL_GPIO_Init+0x328>
  3771. {
  3772. /* Enable SYSCFG Clock */
  3773. __HAL_RCC_SYSCFG_CLK_ENABLE();
  3774. 8001998: 4b2c ldr r3, [pc, #176] ; (8001a4c <HAL_GPIO_Init+0x22c>)
  3775. 800199a: f8d3 30f4 ldr.w r3, [r3, #244] ; 0xf4
  3776. 800199e: 4a2b ldr r2, [pc, #172] ; (8001a4c <HAL_GPIO_Init+0x22c>)
  3777. 80019a0: f043 0302 orr.w r3, r3, #2
  3778. 80019a4: f8c2 30f4 str.w r3, [r2, #244] ; 0xf4
  3779. 80019a8: 4b28 ldr r3, [pc, #160] ; (8001a4c <HAL_GPIO_Init+0x22c>)
  3780. 80019aa: f8d3 30f4 ldr.w r3, [r3, #244] ; 0xf4
  3781. 80019ae: f003 0302 and.w r3, r3, #2
  3782. 80019b2: 60fb str r3, [r7, #12]
  3783. 80019b4: 68fb ldr r3, [r7, #12]
  3784. temp = SYSCFG->EXTICR[position >> 2U];
  3785. 80019b6: 4a26 ldr r2, [pc, #152] ; (8001a50 <HAL_GPIO_Init+0x230>)
  3786. 80019b8: 69fb ldr r3, [r7, #28]
  3787. 80019ba: 089b lsrs r3, r3, #2
  3788. 80019bc: 3302 adds r3, #2
  3789. 80019be: f852 3023 ldr.w r3, [r2, r3, lsl #2]
  3790. 80019c2: 61bb str r3, [r7, #24]
  3791. temp &= ~(0x0FUL << (4U * (position & 0x03U)));
  3792. 80019c4: 69fb ldr r3, [r7, #28]
  3793. 80019c6: f003 0303 and.w r3, r3, #3
  3794. 80019ca: 009b lsls r3, r3, #2
  3795. 80019cc: 220f movs r2, #15
  3796. 80019ce: fa02 f303 lsl.w r3, r2, r3
  3797. 80019d2: 43db mvns r3, r3
  3798. 80019d4: 69ba ldr r2, [r7, #24]
  3799. 80019d6: 4013 ands r3, r2
  3800. 80019d8: 61bb str r3, [r7, #24]
  3801. temp |= (GPIO_GET_INDEX(GPIOx) << (4U * (position & 0x03U)));
  3802. 80019da: 687b ldr r3, [r7, #4]
  3803. 80019dc: 4a1d ldr r2, [pc, #116] ; (8001a54 <HAL_GPIO_Init+0x234>)
  3804. 80019de: 4293 cmp r3, r2
  3805. 80019e0: d04a beq.n 8001a78 <HAL_GPIO_Init+0x258>
  3806. 80019e2: 687b ldr r3, [r7, #4]
  3807. 80019e4: 4a1c ldr r2, [pc, #112] ; (8001a58 <HAL_GPIO_Init+0x238>)
  3808. 80019e6: 4293 cmp r3, r2
  3809. 80019e8: d02b beq.n 8001a42 <HAL_GPIO_Init+0x222>
  3810. 80019ea: 687b ldr r3, [r7, #4]
  3811. 80019ec: 4a1b ldr r2, [pc, #108] ; (8001a5c <HAL_GPIO_Init+0x23c>)
  3812. 80019ee: 4293 cmp r3, r2
  3813. 80019f0: d025 beq.n 8001a3e <HAL_GPIO_Init+0x21e>
  3814. 80019f2: 687b ldr r3, [r7, #4]
  3815. 80019f4: 4a1a ldr r2, [pc, #104] ; (8001a60 <HAL_GPIO_Init+0x240>)
  3816. 80019f6: 4293 cmp r3, r2
  3817. 80019f8: d01f beq.n 8001a3a <HAL_GPIO_Init+0x21a>
  3818. 80019fa: 687b ldr r3, [r7, #4]
  3819. 80019fc: 4a19 ldr r2, [pc, #100] ; (8001a64 <HAL_GPIO_Init+0x244>)
  3820. 80019fe: 4293 cmp r3, r2
  3821. 8001a00: d019 beq.n 8001a36 <HAL_GPIO_Init+0x216>
  3822. 8001a02: 687b ldr r3, [r7, #4]
  3823. 8001a04: 4a18 ldr r2, [pc, #96] ; (8001a68 <HAL_GPIO_Init+0x248>)
  3824. 8001a06: 4293 cmp r3, r2
  3825. 8001a08: d013 beq.n 8001a32 <HAL_GPIO_Init+0x212>
  3826. 8001a0a: 687b ldr r3, [r7, #4]
  3827. 8001a0c: 4a17 ldr r2, [pc, #92] ; (8001a6c <HAL_GPIO_Init+0x24c>)
  3828. 8001a0e: 4293 cmp r3, r2
  3829. 8001a10: d00d beq.n 8001a2e <HAL_GPIO_Init+0x20e>
  3830. 8001a12: 687b ldr r3, [r7, #4]
  3831. 8001a14: 4a16 ldr r2, [pc, #88] ; (8001a70 <HAL_GPIO_Init+0x250>)
  3832. 8001a16: 4293 cmp r3, r2
  3833. 8001a18: d007 beq.n 8001a2a <HAL_GPIO_Init+0x20a>
  3834. 8001a1a: 687b ldr r3, [r7, #4]
  3835. 8001a1c: 4a15 ldr r2, [pc, #84] ; (8001a74 <HAL_GPIO_Init+0x254>)
  3836. 8001a1e: 4293 cmp r3, r2
  3837. 8001a20: d101 bne.n 8001a26 <HAL_GPIO_Init+0x206>
  3838. 8001a22: 2309 movs r3, #9
  3839. 8001a24: e029 b.n 8001a7a <HAL_GPIO_Init+0x25a>
  3840. 8001a26: 230a movs r3, #10
  3841. 8001a28: e027 b.n 8001a7a <HAL_GPIO_Init+0x25a>
  3842. 8001a2a: 2307 movs r3, #7
  3843. 8001a2c: e025 b.n 8001a7a <HAL_GPIO_Init+0x25a>
  3844. 8001a2e: 2306 movs r3, #6
  3845. 8001a30: e023 b.n 8001a7a <HAL_GPIO_Init+0x25a>
  3846. 8001a32: 2305 movs r3, #5
  3847. 8001a34: e021 b.n 8001a7a <HAL_GPIO_Init+0x25a>
  3848. 8001a36: 2304 movs r3, #4
  3849. 8001a38: e01f b.n 8001a7a <HAL_GPIO_Init+0x25a>
  3850. 8001a3a: 2303 movs r3, #3
  3851. 8001a3c: e01d b.n 8001a7a <HAL_GPIO_Init+0x25a>
  3852. 8001a3e: 2302 movs r3, #2
  3853. 8001a40: e01b b.n 8001a7a <HAL_GPIO_Init+0x25a>
  3854. 8001a42: 2301 movs r3, #1
  3855. 8001a44: e019 b.n 8001a7a <HAL_GPIO_Init+0x25a>
  3856. 8001a46: bf00 nop
  3857. 8001a48: 58000080 .word 0x58000080
  3858. 8001a4c: 58024400 .word 0x58024400
  3859. 8001a50: 58000400 .word 0x58000400
  3860. 8001a54: 58020000 .word 0x58020000
  3861. 8001a58: 58020400 .word 0x58020400
  3862. 8001a5c: 58020800 .word 0x58020800
  3863. 8001a60: 58020c00 .word 0x58020c00
  3864. 8001a64: 58021000 .word 0x58021000
  3865. 8001a68: 58021400 .word 0x58021400
  3866. 8001a6c: 58021800 .word 0x58021800
  3867. 8001a70: 58021c00 .word 0x58021c00
  3868. 8001a74: 58022400 .word 0x58022400
  3869. 8001a78: 2300 movs r3, #0
  3870. 8001a7a: 69fa ldr r2, [r7, #28]
  3871. 8001a7c: f002 0203 and.w r2, r2, #3
  3872. 8001a80: 0092 lsls r2, r2, #2
  3873. 8001a82: 4093 lsls r3, r2
  3874. 8001a84: 69ba ldr r2, [r7, #24]
  3875. 8001a86: 4313 orrs r3, r2
  3876. 8001a88: 61bb str r3, [r7, #24]
  3877. SYSCFG->EXTICR[position >> 2U] = temp;
  3878. 8001a8a: 4938 ldr r1, [pc, #224] ; (8001b6c <HAL_GPIO_Init+0x34c>)
  3879. 8001a8c: 69fb ldr r3, [r7, #28]
  3880. 8001a8e: 089b lsrs r3, r3, #2
  3881. 8001a90: 3302 adds r3, #2
  3882. 8001a92: 69ba ldr r2, [r7, #24]
  3883. 8001a94: f841 2023 str.w r2, [r1, r3, lsl #2]
  3884. /* Clear Rising Falling edge configuration */
  3885. temp = EXTI->RTSR1;
  3886. 8001a98: f04f 43b0 mov.w r3, #1476395008 ; 0x58000000
  3887. 8001a9c: 681b ldr r3, [r3, #0]
  3888. 8001a9e: 61bb str r3, [r7, #24]
  3889. temp &= ~(iocurrent);
  3890. 8001aa0: 693b ldr r3, [r7, #16]
  3891. 8001aa2: 43db mvns r3, r3
  3892. 8001aa4: 69ba ldr r2, [r7, #24]
  3893. 8001aa6: 4013 ands r3, r2
  3894. 8001aa8: 61bb str r3, [r7, #24]
  3895. if ((GPIO_Init->Mode & TRIGGER_RISING) != 0x00U)
  3896. 8001aaa: 683b ldr r3, [r7, #0]
  3897. 8001aac: 685b ldr r3, [r3, #4]
  3898. 8001aae: f403 1380 and.w r3, r3, #1048576 ; 0x100000
  3899. 8001ab2: 2b00 cmp r3, #0
  3900. 8001ab4: d003 beq.n 8001abe <HAL_GPIO_Init+0x29e>
  3901. {
  3902. temp |= iocurrent;
  3903. 8001ab6: 69ba ldr r2, [r7, #24]
  3904. 8001ab8: 693b ldr r3, [r7, #16]
  3905. 8001aba: 4313 orrs r3, r2
  3906. 8001abc: 61bb str r3, [r7, #24]
  3907. }
  3908. EXTI->RTSR1 = temp;
  3909. 8001abe: f04f 42b0 mov.w r2, #1476395008 ; 0x58000000
  3910. 8001ac2: 69bb ldr r3, [r7, #24]
  3911. 8001ac4: 6013 str r3, [r2, #0]
  3912. temp = EXTI->FTSR1;
  3913. 8001ac6: f04f 43b0 mov.w r3, #1476395008 ; 0x58000000
  3914. 8001aca: 685b ldr r3, [r3, #4]
  3915. 8001acc: 61bb str r3, [r7, #24]
  3916. temp &= ~(iocurrent);
  3917. 8001ace: 693b ldr r3, [r7, #16]
  3918. 8001ad0: 43db mvns r3, r3
  3919. 8001ad2: 69ba ldr r2, [r7, #24]
  3920. 8001ad4: 4013 ands r3, r2
  3921. 8001ad6: 61bb str r3, [r7, #24]
  3922. if ((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00U)
  3923. 8001ad8: 683b ldr r3, [r7, #0]
  3924. 8001ada: 685b ldr r3, [r3, #4]
  3925. 8001adc: f403 1300 and.w r3, r3, #2097152 ; 0x200000
  3926. 8001ae0: 2b00 cmp r3, #0
  3927. 8001ae2: d003 beq.n 8001aec <HAL_GPIO_Init+0x2cc>
  3928. {
  3929. temp |= iocurrent;
  3930. 8001ae4: 69ba ldr r2, [r7, #24]
  3931. 8001ae6: 693b ldr r3, [r7, #16]
  3932. 8001ae8: 4313 orrs r3, r2
  3933. 8001aea: 61bb str r3, [r7, #24]
  3934. }
  3935. EXTI->FTSR1 = temp;
  3936. 8001aec: f04f 42b0 mov.w r2, #1476395008 ; 0x58000000
  3937. 8001af0: 69bb ldr r3, [r7, #24]
  3938. 8001af2: 6053 str r3, [r2, #4]
  3939. temp = EXTI_CurrentCPU->EMR1;
  3940. 8001af4: 697b ldr r3, [r7, #20]
  3941. 8001af6: 685b ldr r3, [r3, #4]
  3942. 8001af8: 61bb str r3, [r7, #24]
  3943. temp &= ~(iocurrent);
  3944. 8001afa: 693b ldr r3, [r7, #16]
  3945. 8001afc: 43db mvns r3, r3
  3946. 8001afe: 69ba ldr r2, [r7, #24]
  3947. 8001b00: 4013 ands r3, r2
  3948. 8001b02: 61bb str r3, [r7, #24]
  3949. if ((GPIO_Init->Mode & EXTI_EVT) != 0x00U)
  3950. 8001b04: 683b ldr r3, [r7, #0]
  3951. 8001b06: 685b ldr r3, [r3, #4]
  3952. 8001b08: f403 3300 and.w r3, r3, #131072 ; 0x20000
  3953. 8001b0c: 2b00 cmp r3, #0
  3954. 8001b0e: d003 beq.n 8001b18 <HAL_GPIO_Init+0x2f8>
  3955. {
  3956. temp |= iocurrent;
  3957. 8001b10: 69ba ldr r2, [r7, #24]
  3958. 8001b12: 693b ldr r3, [r7, #16]
  3959. 8001b14: 4313 orrs r3, r2
  3960. 8001b16: 61bb str r3, [r7, #24]
  3961. }
  3962. EXTI_CurrentCPU->EMR1 = temp;
  3963. 8001b18: 697b ldr r3, [r7, #20]
  3964. 8001b1a: 69ba ldr r2, [r7, #24]
  3965. 8001b1c: 605a str r2, [r3, #4]
  3966. /* Clear EXTI line configuration */
  3967. temp = EXTI_CurrentCPU->IMR1;
  3968. 8001b1e: 697b ldr r3, [r7, #20]
  3969. 8001b20: 681b ldr r3, [r3, #0]
  3970. 8001b22: 61bb str r3, [r7, #24]
  3971. temp &= ~(iocurrent);
  3972. 8001b24: 693b ldr r3, [r7, #16]
  3973. 8001b26: 43db mvns r3, r3
  3974. 8001b28: 69ba ldr r2, [r7, #24]
  3975. 8001b2a: 4013 ands r3, r2
  3976. 8001b2c: 61bb str r3, [r7, #24]
  3977. if ((GPIO_Init->Mode & EXTI_IT) != 0x00U)
  3978. 8001b2e: 683b ldr r3, [r7, #0]
  3979. 8001b30: 685b ldr r3, [r3, #4]
  3980. 8001b32: f403 3380 and.w r3, r3, #65536 ; 0x10000
  3981. 8001b36: 2b00 cmp r3, #0
  3982. 8001b38: d003 beq.n 8001b42 <HAL_GPIO_Init+0x322>
  3983. {
  3984. temp |= iocurrent;
  3985. 8001b3a: 69ba ldr r2, [r7, #24]
  3986. 8001b3c: 693b ldr r3, [r7, #16]
  3987. 8001b3e: 4313 orrs r3, r2
  3988. 8001b40: 61bb str r3, [r7, #24]
  3989. }
  3990. EXTI_CurrentCPU->IMR1 = temp;
  3991. 8001b42: 697b ldr r3, [r7, #20]
  3992. 8001b44: 69ba ldr r2, [r7, #24]
  3993. 8001b46: 601a str r2, [r3, #0]
  3994. }
  3995. }
  3996. position++;
  3997. 8001b48: 69fb ldr r3, [r7, #28]
  3998. 8001b4a: 3301 adds r3, #1
  3999. 8001b4c: 61fb str r3, [r7, #28]
  4000. while (((GPIO_Init->Pin) >> position) != 0x00U)
  4001. 8001b4e: 683b ldr r3, [r7, #0]
  4002. 8001b50: 681a ldr r2, [r3, #0]
  4003. 8001b52: 69fb ldr r3, [r7, #28]
  4004. 8001b54: fa22 f303 lsr.w r3, r2, r3
  4005. 8001b58: 2b00 cmp r3, #0
  4006. 8001b5a: f47f ae6b bne.w 8001834 <HAL_GPIO_Init+0x14>
  4007. }
  4008. }
  4009. 8001b5e: bf00 nop
  4010. 8001b60: bf00 nop
  4011. 8001b62: 3724 adds r7, #36 ; 0x24
  4012. 8001b64: 46bd mov sp, r7
  4013. 8001b66: f85d 7b04 ldr.w r7, [sp], #4
  4014. 8001b6a: 4770 bx lr
  4015. 8001b6c: 58000400 .word 0x58000400
  4016. 08001b70 <HAL_GPIO_WritePin>:
  4017. * @arg GPIO_PIN_RESET: to clear the port pin
  4018. * @arg GPIO_PIN_SET: to set the port pin
  4019. * @retval None
  4020. */
  4021. void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
  4022. {
  4023. 8001b70: b480 push {r7}
  4024. 8001b72: b083 sub sp, #12
  4025. 8001b74: af00 add r7, sp, #0
  4026. 8001b76: 6078 str r0, [r7, #4]
  4027. 8001b78: 460b mov r3, r1
  4028. 8001b7a: 807b strh r3, [r7, #2]
  4029. 8001b7c: 4613 mov r3, r2
  4030. 8001b7e: 707b strb r3, [r7, #1]
  4031. /* Check the parameters */
  4032. assert_param(IS_GPIO_PIN(GPIO_Pin));
  4033. assert_param(IS_GPIO_PIN_ACTION(PinState));
  4034. if (PinState != GPIO_PIN_RESET)
  4035. 8001b80: 787b ldrb r3, [r7, #1]
  4036. 8001b82: 2b00 cmp r3, #0
  4037. 8001b84: d003 beq.n 8001b8e <HAL_GPIO_WritePin+0x1e>
  4038. {
  4039. GPIOx->BSRR = GPIO_Pin;
  4040. 8001b86: 887a ldrh r2, [r7, #2]
  4041. 8001b88: 687b ldr r3, [r7, #4]
  4042. 8001b8a: 619a str r2, [r3, #24]
  4043. }
  4044. else
  4045. {
  4046. GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
  4047. }
  4048. }
  4049. 8001b8c: e003 b.n 8001b96 <HAL_GPIO_WritePin+0x26>
  4050. GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
  4051. 8001b8e: 887b ldrh r3, [r7, #2]
  4052. 8001b90: 041a lsls r2, r3, #16
  4053. 8001b92: 687b ldr r3, [r7, #4]
  4054. 8001b94: 619a str r2, [r3, #24]
  4055. }
  4056. 8001b96: bf00 nop
  4057. 8001b98: 370c adds r7, #12
  4058. 8001b9a: 46bd mov sp, r7
  4059. 8001b9c: f85d 7b04 ldr.w r7, [sp], #4
  4060. 8001ba0: 4770 bx lr
  4061. 08001ba2 <HAL_GPIO_TogglePin>:
  4062. * @param GPIOx: Where x can be (A..K) to select the GPIO peripheral.
  4063. * @param GPIO_Pin: Specifies the pins to be toggled.
  4064. * @retval None
  4065. */
  4066. void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
  4067. {
  4068. 8001ba2: b480 push {r7}
  4069. 8001ba4: b085 sub sp, #20
  4070. 8001ba6: af00 add r7, sp, #0
  4071. 8001ba8: 6078 str r0, [r7, #4]
  4072. 8001baa: 460b mov r3, r1
  4073. 8001bac: 807b strh r3, [r7, #2]
  4074. /* Check the parameters */
  4075. assert_param(IS_GPIO_PIN(GPIO_Pin));
  4076. /* get current Output Data Register value */
  4077. odr = GPIOx->ODR;
  4078. 8001bae: 687b ldr r3, [r7, #4]
  4079. 8001bb0: 695b ldr r3, [r3, #20]
  4080. 8001bb2: 60fb str r3, [r7, #12]
  4081. /* Set selected pins that were at low level, and reset ones that were high */
  4082. GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
  4083. 8001bb4: 887a ldrh r2, [r7, #2]
  4084. 8001bb6: 68fb ldr r3, [r7, #12]
  4085. 8001bb8: 4013 ands r3, r2
  4086. 8001bba: 041a lsls r2, r3, #16
  4087. 8001bbc: 68fb ldr r3, [r7, #12]
  4088. 8001bbe: 43d9 mvns r1, r3
  4089. 8001bc0: 887b ldrh r3, [r7, #2]
  4090. 8001bc2: 400b ands r3, r1
  4091. 8001bc4: 431a orrs r2, r3
  4092. 8001bc6: 687b ldr r3, [r7, #4]
  4093. 8001bc8: 619a str r2, [r3, #24]
  4094. }
  4095. 8001bca: bf00 nop
  4096. 8001bcc: 3714 adds r7, #20
  4097. 8001bce: 46bd mov sp, r7
  4098. 8001bd0: f85d 7b04 ldr.w r7, [sp], #4
  4099. 8001bd4: 4770 bx lr
  4100. 08001bd6 <HAL_PCD_Init>:
  4101. * parameters in the PCD_InitTypeDef and initialize the associated handle.
  4102. * @param hpcd PCD handle
  4103. * @retval HAL status
  4104. */
  4105. HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
  4106. {
  4107. 8001bd6: b5f0 push {r4, r5, r6, r7, lr}
  4108. 8001bd8: b08f sub sp, #60 ; 0x3c
  4109. 8001bda: af0a add r7, sp, #40 ; 0x28
  4110. 8001bdc: 6078 str r0, [r7, #4]
  4111. USB_OTG_GlobalTypeDef *USBx;
  4112. uint8_t i;
  4113. /* Check the PCD handle allocation */
  4114. if (hpcd == NULL)
  4115. 8001bde: 687b ldr r3, [r7, #4]
  4116. 8001be0: 2b00 cmp r3, #0
  4117. 8001be2: d101 bne.n 8001be8 <HAL_PCD_Init+0x12>
  4118. {
  4119. return HAL_ERROR;
  4120. 8001be4: 2301 movs r3, #1
  4121. 8001be6: e116 b.n 8001e16 <HAL_PCD_Init+0x240>
  4122. }
  4123. /* Check the parameters */
  4124. assert_param(IS_PCD_ALL_INSTANCE(hpcd->Instance));
  4125. USBx = hpcd->Instance;
  4126. 8001be8: 687b ldr r3, [r7, #4]
  4127. 8001bea: 681b ldr r3, [r3, #0]
  4128. 8001bec: 60bb str r3, [r7, #8]
  4129. if (hpcd->State == HAL_PCD_STATE_RESET)
  4130. 8001bee: 687b ldr r3, [r7, #4]
  4131. 8001bf0: f893 33bd ldrb.w r3, [r3, #957] ; 0x3bd
  4132. 8001bf4: b2db uxtb r3, r3
  4133. 8001bf6: 2b00 cmp r3, #0
  4134. 8001bf8: d106 bne.n 8001c08 <HAL_PCD_Init+0x32>
  4135. {
  4136. /* Allocate lock resource and initialize it */
  4137. hpcd->Lock = HAL_UNLOCKED;
  4138. 8001bfa: 687b ldr r3, [r7, #4]
  4139. 8001bfc: 2200 movs r2, #0
  4140. 8001bfe: f883 23bc strb.w r2, [r3, #956] ; 0x3bc
  4141. /* Init the low level hardware */
  4142. hpcd->MspInitCallback(hpcd);
  4143. #else
  4144. /* Init the low level hardware : GPIO, CLOCK, NVIC... */
  4145. HAL_PCD_MspInit(hpcd);
  4146. 8001c02: 6878 ldr r0, [r7, #4]
  4147. 8001c04: f007 fad2 bl 80091ac <HAL_PCD_MspInit>
  4148. #endif /* (USE_HAL_PCD_REGISTER_CALLBACKS) */
  4149. }
  4150. hpcd->State = HAL_PCD_STATE_BUSY;
  4151. 8001c08: 687b ldr r3, [r7, #4]
  4152. 8001c0a: 2203 movs r2, #3
  4153. 8001c0c: f883 23bd strb.w r2, [r3, #957] ; 0x3bd
  4154. /* Disable DMA mode for FS instance */
  4155. if ((USBx->CID & (0x1U << 8)) == 0U)
  4156. 8001c10: 68bb ldr r3, [r7, #8]
  4157. 8001c12: 6bdb ldr r3, [r3, #60] ; 0x3c
  4158. 8001c14: f403 7380 and.w r3, r3, #256 ; 0x100
  4159. 8001c18: 2b00 cmp r3, #0
  4160. 8001c1a: d102 bne.n 8001c22 <HAL_PCD_Init+0x4c>
  4161. {
  4162. hpcd->Init.dma_enable = 0U;
  4163. 8001c1c: 687b ldr r3, [r7, #4]
  4164. 8001c1e: 2200 movs r2, #0
  4165. 8001c20: 611a str r2, [r3, #16]
  4166. }
  4167. /* Disable the Interrupts */
  4168. __HAL_PCD_DISABLE(hpcd);
  4169. 8001c22: 687b ldr r3, [r7, #4]
  4170. 8001c24: 681b ldr r3, [r3, #0]
  4171. 8001c26: 4618 mov r0, r3
  4172. 8001c28: f004 f99f bl 8005f6a <USB_DisableGlobalInt>
  4173. /*Init the Core (common init.) */
  4174. if (USB_CoreInit(hpcd->Instance, hpcd->Init) != HAL_OK)
  4175. 8001c2c: 687b ldr r3, [r7, #4]
  4176. 8001c2e: 681b ldr r3, [r3, #0]
  4177. 8001c30: 603b str r3, [r7, #0]
  4178. 8001c32: 687e ldr r6, [r7, #4]
  4179. 8001c34: 466d mov r5, sp
  4180. 8001c36: f106 0410 add.w r4, r6, #16
  4181. 8001c3a: cc0f ldmia r4!, {r0, r1, r2, r3}
  4182. 8001c3c: c50f stmia r5!, {r0, r1, r2, r3}
  4183. 8001c3e: cc0f ldmia r4!, {r0, r1, r2, r3}
  4184. 8001c40: c50f stmia r5!, {r0, r1, r2, r3}
  4185. 8001c42: e894 0003 ldmia.w r4, {r0, r1}
  4186. 8001c46: e885 0003 stmia.w r5, {r0, r1}
  4187. 8001c4a: 1d33 adds r3, r6, #4
  4188. 8001c4c: cb0e ldmia r3, {r1, r2, r3}
  4189. 8001c4e: 6838 ldr r0, [r7, #0]
  4190. 8001c50: f004 f86a bl 8005d28 <USB_CoreInit>
  4191. 8001c54: 4603 mov r3, r0
  4192. 8001c56: 2b00 cmp r3, #0
  4193. 8001c58: d005 beq.n 8001c66 <HAL_PCD_Init+0x90>
  4194. {
  4195. hpcd->State = HAL_PCD_STATE_ERROR;
  4196. 8001c5a: 687b ldr r3, [r7, #4]
  4197. 8001c5c: 2202 movs r2, #2
  4198. 8001c5e: f883 23bd strb.w r2, [r3, #957] ; 0x3bd
  4199. return HAL_ERROR;
  4200. 8001c62: 2301 movs r3, #1
  4201. 8001c64: e0d7 b.n 8001e16 <HAL_PCD_Init+0x240>
  4202. }
  4203. /* Force Device Mode*/
  4204. (void)USB_SetCurrentMode(hpcd->Instance, USB_DEVICE_MODE);
  4205. 8001c66: 687b ldr r3, [r7, #4]
  4206. 8001c68: 681b ldr r3, [r3, #0]
  4207. 8001c6a: 2100 movs r1, #0
  4208. 8001c6c: 4618 mov r0, r3
  4209. 8001c6e: f004 f98d bl 8005f8c <USB_SetCurrentMode>
  4210. /* Init endpoints structures */
  4211. for (i = 0U; i < hpcd->Init.dev_endpoints; i++)
  4212. 8001c72: 2300 movs r3, #0
  4213. 8001c74: 73fb strb r3, [r7, #15]
  4214. 8001c76: e04a b.n 8001d0e <HAL_PCD_Init+0x138>
  4215. {
  4216. /* Init ep structure */
  4217. hpcd->IN_ep[i].is_in = 1U;
  4218. 8001c78: 7bfa ldrb r2, [r7, #15]
  4219. 8001c7a: 6879 ldr r1, [r7, #4]
  4220. 8001c7c: 4613 mov r3, r2
  4221. 8001c7e: 00db lsls r3, r3, #3
  4222. 8001c80: 1a9b subs r3, r3, r2
  4223. 8001c82: 009b lsls r3, r3, #2
  4224. 8001c84: 440b add r3, r1
  4225. 8001c86: 333d adds r3, #61 ; 0x3d
  4226. 8001c88: 2201 movs r2, #1
  4227. 8001c8a: 701a strb r2, [r3, #0]
  4228. hpcd->IN_ep[i].num = i;
  4229. 8001c8c: 7bfa ldrb r2, [r7, #15]
  4230. 8001c8e: 6879 ldr r1, [r7, #4]
  4231. 8001c90: 4613 mov r3, r2
  4232. 8001c92: 00db lsls r3, r3, #3
  4233. 8001c94: 1a9b subs r3, r3, r2
  4234. 8001c96: 009b lsls r3, r3, #2
  4235. 8001c98: 440b add r3, r1
  4236. 8001c9a: 333c adds r3, #60 ; 0x3c
  4237. 8001c9c: 7bfa ldrb r2, [r7, #15]
  4238. 8001c9e: 701a strb r2, [r3, #0]
  4239. hpcd->IN_ep[i].tx_fifo_num = i;
  4240. 8001ca0: 7bfa ldrb r2, [r7, #15]
  4241. 8001ca2: 7bfb ldrb r3, [r7, #15]
  4242. 8001ca4: b298 uxth r0, r3
  4243. 8001ca6: 6879 ldr r1, [r7, #4]
  4244. 8001ca8: 4613 mov r3, r2
  4245. 8001caa: 00db lsls r3, r3, #3
  4246. 8001cac: 1a9b subs r3, r3, r2
  4247. 8001cae: 009b lsls r3, r3, #2
  4248. 8001cb0: 440b add r3, r1
  4249. 8001cb2: 3342 adds r3, #66 ; 0x42
  4250. 8001cb4: 4602 mov r2, r0
  4251. 8001cb6: 801a strh r2, [r3, #0]
  4252. /* Control until ep is activated */
  4253. hpcd->IN_ep[i].type = EP_TYPE_CTRL;
  4254. 8001cb8: 7bfa ldrb r2, [r7, #15]
  4255. 8001cba: 6879 ldr r1, [r7, #4]
  4256. 8001cbc: 4613 mov r3, r2
  4257. 8001cbe: 00db lsls r3, r3, #3
  4258. 8001cc0: 1a9b subs r3, r3, r2
  4259. 8001cc2: 009b lsls r3, r3, #2
  4260. 8001cc4: 440b add r3, r1
  4261. 8001cc6: 333f adds r3, #63 ; 0x3f
  4262. 8001cc8: 2200 movs r2, #0
  4263. 8001cca: 701a strb r2, [r3, #0]
  4264. hpcd->IN_ep[i].maxpacket = 0U;
  4265. 8001ccc: 7bfa ldrb r2, [r7, #15]
  4266. 8001cce: 6879 ldr r1, [r7, #4]
  4267. 8001cd0: 4613 mov r3, r2
  4268. 8001cd2: 00db lsls r3, r3, #3
  4269. 8001cd4: 1a9b subs r3, r3, r2
  4270. 8001cd6: 009b lsls r3, r3, #2
  4271. 8001cd8: 440b add r3, r1
  4272. 8001cda: 3344 adds r3, #68 ; 0x44
  4273. 8001cdc: 2200 movs r2, #0
  4274. 8001cde: 601a str r2, [r3, #0]
  4275. hpcd->IN_ep[i].xfer_buff = 0U;
  4276. 8001ce0: 7bfa ldrb r2, [r7, #15]
  4277. 8001ce2: 6879 ldr r1, [r7, #4]
  4278. 8001ce4: 4613 mov r3, r2
  4279. 8001ce6: 00db lsls r3, r3, #3
  4280. 8001ce8: 1a9b subs r3, r3, r2
  4281. 8001cea: 009b lsls r3, r3, #2
  4282. 8001cec: 440b add r3, r1
  4283. 8001cee: 3348 adds r3, #72 ; 0x48
  4284. 8001cf0: 2200 movs r2, #0
  4285. 8001cf2: 601a str r2, [r3, #0]
  4286. hpcd->IN_ep[i].xfer_len = 0U;
  4287. 8001cf4: 7bfa ldrb r2, [r7, #15]
  4288. 8001cf6: 6879 ldr r1, [r7, #4]
  4289. 8001cf8: 4613 mov r3, r2
  4290. 8001cfa: 00db lsls r3, r3, #3
  4291. 8001cfc: 1a9b subs r3, r3, r2
  4292. 8001cfe: 009b lsls r3, r3, #2
  4293. 8001d00: 440b add r3, r1
  4294. 8001d02: 3350 adds r3, #80 ; 0x50
  4295. 8001d04: 2200 movs r2, #0
  4296. 8001d06: 601a str r2, [r3, #0]
  4297. for (i = 0U; i < hpcd->Init.dev_endpoints; i++)
  4298. 8001d08: 7bfb ldrb r3, [r7, #15]
  4299. 8001d0a: 3301 adds r3, #1
  4300. 8001d0c: 73fb strb r3, [r7, #15]
  4301. 8001d0e: 7bfa ldrb r2, [r7, #15]
  4302. 8001d10: 687b ldr r3, [r7, #4]
  4303. 8001d12: 685b ldr r3, [r3, #4]
  4304. 8001d14: 429a cmp r2, r3
  4305. 8001d16: d3af bcc.n 8001c78 <HAL_PCD_Init+0xa2>
  4306. }
  4307. for (i = 0U; i < hpcd->Init.dev_endpoints; i++)
  4308. 8001d18: 2300 movs r3, #0
  4309. 8001d1a: 73fb strb r3, [r7, #15]
  4310. 8001d1c: e044 b.n 8001da8 <HAL_PCD_Init+0x1d2>
  4311. {
  4312. hpcd->OUT_ep[i].is_in = 0U;
  4313. 8001d1e: 7bfa ldrb r2, [r7, #15]
  4314. 8001d20: 6879 ldr r1, [r7, #4]
  4315. 8001d22: 4613 mov r3, r2
  4316. 8001d24: 00db lsls r3, r3, #3
  4317. 8001d26: 1a9b subs r3, r3, r2
  4318. 8001d28: 009b lsls r3, r3, #2
  4319. 8001d2a: 440b add r3, r1
  4320. 8001d2c: f203 13fd addw r3, r3, #509 ; 0x1fd
  4321. 8001d30: 2200 movs r2, #0
  4322. 8001d32: 701a strb r2, [r3, #0]
  4323. hpcd->OUT_ep[i].num = i;
  4324. 8001d34: 7bfa ldrb r2, [r7, #15]
  4325. 8001d36: 6879 ldr r1, [r7, #4]
  4326. 8001d38: 4613 mov r3, r2
  4327. 8001d3a: 00db lsls r3, r3, #3
  4328. 8001d3c: 1a9b subs r3, r3, r2
  4329. 8001d3e: 009b lsls r3, r3, #2
  4330. 8001d40: 440b add r3, r1
  4331. 8001d42: f503 73fe add.w r3, r3, #508 ; 0x1fc
  4332. 8001d46: 7bfa ldrb r2, [r7, #15]
  4333. 8001d48: 701a strb r2, [r3, #0]
  4334. /* Control until ep is activated */
  4335. hpcd->OUT_ep[i].type = EP_TYPE_CTRL;
  4336. 8001d4a: 7bfa ldrb r2, [r7, #15]
  4337. 8001d4c: 6879 ldr r1, [r7, #4]
  4338. 8001d4e: 4613 mov r3, r2
  4339. 8001d50: 00db lsls r3, r3, #3
  4340. 8001d52: 1a9b subs r3, r3, r2
  4341. 8001d54: 009b lsls r3, r3, #2
  4342. 8001d56: 440b add r3, r1
  4343. 8001d58: f203 13ff addw r3, r3, #511 ; 0x1ff
  4344. 8001d5c: 2200 movs r2, #0
  4345. 8001d5e: 701a strb r2, [r3, #0]
  4346. hpcd->OUT_ep[i].maxpacket = 0U;
  4347. 8001d60: 7bfa ldrb r2, [r7, #15]
  4348. 8001d62: 6879 ldr r1, [r7, #4]
  4349. 8001d64: 4613 mov r3, r2
  4350. 8001d66: 00db lsls r3, r3, #3
  4351. 8001d68: 1a9b subs r3, r3, r2
  4352. 8001d6a: 009b lsls r3, r3, #2
  4353. 8001d6c: 440b add r3, r1
  4354. 8001d6e: f503 7301 add.w r3, r3, #516 ; 0x204
  4355. 8001d72: 2200 movs r2, #0
  4356. 8001d74: 601a str r2, [r3, #0]
  4357. hpcd->OUT_ep[i].xfer_buff = 0U;
  4358. 8001d76: 7bfa ldrb r2, [r7, #15]
  4359. 8001d78: 6879 ldr r1, [r7, #4]
  4360. 8001d7a: 4613 mov r3, r2
  4361. 8001d7c: 00db lsls r3, r3, #3
  4362. 8001d7e: 1a9b subs r3, r3, r2
  4363. 8001d80: 009b lsls r3, r3, #2
  4364. 8001d82: 440b add r3, r1
  4365. 8001d84: f503 7302 add.w r3, r3, #520 ; 0x208
  4366. 8001d88: 2200 movs r2, #0
  4367. 8001d8a: 601a str r2, [r3, #0]
  4368. hpcd->OUT_ep[i].xfer_len = 0U;
  4369. 8001d8c: 7bfa ldrb r2, [r7, #15]
  4370. 8001d8e: 6879 ldr r1, [r7, #4]
  4371. 8001d90: 4613 mov r3, r2
  4372. 8001d92: 00db lsls r3, r3, #3
  4373. 8001d94: 1a9b subs r3, r3, r2
  4374. 8001d96: 009b lsls r3, r3, #2
  4375. 8001d98: 440b add r3, r1
  4376. 8001d9a: f503 7304 add.w r3, r3, #528 ; 0x210
  4377. 8001d9e: 2200 movs r2, #0
  4378. 8001da0: 601a str r2, [r3, #0]
  4379. for (i = 0U; i < hpcd->Init.dev_endpoints; i++)
  4380. 8001da2: 7bfb ldrb r3, [r7, #15]
  4381. 8001da4: 3301 adds r3, #1
  4382. 8001da6: 73fb strb r3, [r7, #15]
  4383. 8001da8: 7bfa ldrb r2, [r7, #15]
  4384. 8001daa: 687b ldr r3, [r7, #4]
  4385. 8001dac: 685b ldr r3, [r3, #4]
  4386. 8001dae: 429a cmp r2, r3
  4387. 8001db0: d3b5 bcc.n 8001d1e <HAL_PCD_Init+0x148>
  4388. }
  4389. /* Init Device */
  4390. if (USB_DevInit(hpcd->Instance, hpcd->Init) != HAL_OK)
  4391. 8001db2: 687b ldr r3, [r7, #4]
  4392. 8001db4: 681b ldr r3, [r3, #0]
  4393. 8001db6: 603b str r3, [r7, #0]
  4394. 8001db8: 687e ldr r6, [r7, #4]
  4395. 8001dba: 466d mov r5, sp
  4396. 8001dbc: f106 0410 add.w r4, r6, #16
  4397. 8001dc0: cc0f ldmia r4!, {r0, r1, r2, r3}
  4398. 8001dc2: c50f stmia r5!, {r0, r1, r2, r3}
  4399. 8001dc4: cc0f ldmia r4!, {r0, r1, r2, r3}
  4400. 8001dc6: c50f stmia r5!, {r0, r1, r2, r3}
  4401. 8001dc8: e894 0003 ldmia.w r4, {r0, r1}
  4402. 8001dcc: e885 0003 stmia.w r5, {r0, r1}
  4403. 8001dd0: 1d33 adds r3, r6, #4
  4404. 8001dd2: cb0e ldmia r3, {r1, r2, r3}
  4405. 8001dd4: 6838 ldr r0, [r7, #0]
  4406. 8001dd6: f004 f925 bl 8006024 <USB_DevInit>
  4407. 8001dda: 4603 mov r3, r0
  4408. 8001ddc: 2b00 cmp r3, #0
  4409. 8001dde: d005 beq.n 8001dec <HAL_PCD_Init+0x216>
  4410. {
  4411. hpcd->State = HAL_PCD_STATE_ERROR;
  4412. 8001de0: 687b ldr r3, [r7, #4]
  4413. 8001de2: 2202 movs r2, #2
  4414. 8001de4: f883 23bd strb.w r2, [r3, #957] ; 0x3bd
  4415. return HAL_ERROR;
  4416. 8001de8: 2301 movs r3, #1
  4417. 8001dea: e014 b.n 8001e16 <HAL_PCD_Init+0x240>
  4418. }
  4419. hpcd->USB_Address = 0U;
  4420. 8001dec: 687b ldr r3, [r7, #4]
  4421. 8001dee: 2200 movs r2, #0
  4422. 8001df0: f883 2038 strb.w r2, [r3, #56] ; 0x38
  4423. hpcd->State = HAL_PCD_STATE_READY;
  4424. 8001df4: 687b ldr r3, [r7, #4]
  4425. 8001df6: 2201 movs r2, #1
  4426. 8001df8: f883 23bd strb.w r2, [r3, #957] ; 0x3bd
  4427. /* Activate LPM */
  4428. if (hpcd->Init.lpm_enable == 1U)
  4429. 8001dfc: 687b ldr r3, [r7, #4]
  4430. 8001dfe: 6a5b ldr r3, [r3, #36] ; 0x24
  4431. 8001e00: 2b01 cmp r3, #1
  4432. 8001e02: d102 bne.n 8001e0a <HAL_PCD_Init+0x234>
  4433. {
  4434. (void)HAL_PCDEx_ActivateLPM(hpcd);
  4435. 8001e04: 6878 ldr r0, [r7, #4]
  4436. 8001e06: f001 f885 bl 8002f14 <HAL_PCDEx_ActivateLPM>
  4437. }
  4438. (void)USB_DevDisconnect(hpcd->Instance);
  4439. 8001e0a: 687b ldr r3, [r7, #4]
  4440. 8001e0c: 681b ldr r3, [r3, #0]
  4441. 8001e0e: 4618 mov r0, r3
  4442. 8001e10: f005 f9bd bl 800718e <USB_DevDisconnect>
  4443. return HAL_OK;
  4444. 8001e14: 2300 movs r3, #0
  4445. }
  4446. 8001e16: 4618 mov r0, r3
  4447. 8001e18: 3714 adds r7, #20
  4448. 8001e1a: 46bd mov sp, r7
  4449. 8001e1c: bdf0 pop {r4, r5, r6, r7, pc}
  4450. 08001e1e <HAL_PCD_Start>:
  4451. * @brief Start the USB device
  4452. * @param hpcd PCD handle
  4453. * @retval HAL status
  4454. */
  4455. HAL_StatusTypeDef HAL_PCD_Start(PCD_HandleTypeDef *hpcd)
  4456. {
  4457. 8001e1e: b580 push {r7, lr}
  4458. 8001e20: b084 sub sp, #16
  4459. 8001e22: af00 add r7, sp, #0
  4460. 8001e24: 6078 str r0, [r7, #4]
  4461. USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
  4462. 8001e26: 687b ldr r3, [r7, #4]
  4463. 8001e28: 681b ldr r3, [r3, #0]
  4464. 8001e2a: 60fb str r3, [r7, #12]
  4465. __HAL_LOCK(hpcd);
  4466. 8001e2c: 687b ldr r3, [r7, #4]
  4467. 8001e2e: f893 33bc ldrb.w r3, [r3, #956] ; 0x3bc
  4468. 8001e32: 2b01 cmp r3, #1
  4469. 8001e34: d101 bne.n 8001e3a <HAL_PCD_Start+0x1c>
  4470. 8001e36: 2302 movs r3, #2
  4471. 8001e38: e020 b.n 8001e7c <HAL_PCD_Start+0x5e>
  4472. 8001e3a: 687b ldr r3, [r7, #4]
  4473. 8001e3c: 2201 movs r2, #1
  4474. 8001e3e: f883 23bc strb.w r2, [r3, #956] ; 0x3bc
  4475. if ((hpcd->Init.battery_charging_enable == 1U) &&
  4476. 8001e42: 687b ldr r3, [r7, #4]
  4477. 8001e44: 6a9b ldr r3, [r3, #40] ; 0x28
  4478. 8001e46: 2b01 cmp r3, #1
  4479. 8001e48: d109 bne.n 8001e5e <HAL_PCD_Start+0x40>
  4480. (hpcd->Init.phy_itface != USB_OTG_ULPI_PHY))
  4481. 8001e4a: 687b ldr r3, [r7, #4]
  4482. 8001e4c: 699b ldr r3, [r3, #24]
  4483. if ((hpcd->Init.battery_charging_enable == 1U) &&
  4484. 8001e4e: 2b01 cmp r3, #1
  4485. 8001e50: d005 beq.n 8001e5e <HAL_PCD_Start+0x40>
  4486. {
  4487. /* Enable USB Transceiver */
  4488. USBx->GCCFG |= USB_OTG_GCCFG_PWRDWN;
  4489. 8001e52: 68fb ldr r3, [r7, #12]
  4490. 8001e54: 6b9b ldr r3, [r3, #56] ; 0x38
  4491. 8001e56: f443 3280 orr.w r2, r3, #65536 ; 0x10000
  4492. 8001e5a: 68fb ldr r3, [r7, #12]
  4493. 8001e5c: 639a str r2, [r3, #56] ; 0x38
  4494. }
  4495. __HAL_PCD_ENABLE(hpcd);
  4496. 8001e5e: 687b ldr r3, [r7, #4]
  4497. 8001e60: 681b ldr r3, [r3, #0]
  4498. 8001e62: 4618 mov r0, r3
  4499. 8001e64: f004 f870 bl 8005f48 <USB_EnableGlobalInt>
  4500. (void)USB_DevConnect(hpcd->Instance);
  4501. 8001e68: 687b ldr r3, [r7, #4]
  4502. 8001e6a: 681b ldr r3, [r3, #0]
  4503. 8001e6c: 4618 mov r0, r3
  4504. 8001e6e: f005 f96d bl 800714c <USB_DevConnect>
  4505. __HAL_UNLOCK(hpcd);
  4506. 8001e72: 687b ldr r3, [r7, #4]
  4507. 8001e74: 2200 movs r2, #0
  4508. 8001e76: f883 23bc strb.w r2, [r3, #956] ; 0x3bc
  4509. return HAL_OK;
  4510. 8001e7a: 2300 movs r3, #0
  4511. }
  4512. 8001e7c: 4618 mov r0, r3
  4513. 8001e7e: 3710 adds r7, #16
  4514. 8001e80: 46bd mov sp, r7
  4515. 8001e82: bd80 pop {r7, pc}
  4516. 08001e84 <HAL_PCD_IRQHandler>:
  4517. * @brief Handles PCD interrupt request.
  4518. * @param hpcd PCD handle
  4519. * @retval HAL status
  4520. */
  4521. void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
  4522. {
  4523. 8001e84: b590 push {r4, r7, lr}
  4524. 8001e86: b08d sub sp, #52 ; 0x34
  4525. 8001e88: af00 add r7, sp, #0
  4526. 8001e8a: 6078 str r0, [r7, #4]
  4527. USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
  4528. 8001e8c: 687b ldr r3, [r7, #4]
  4529. 8001e8e: 681b ldr r3, [r3, #0]
  4530. 8001e90: 623b str r3, [r7, #32]
  4531. uint32_t USBx_BASE = (uint32_t)USBx;
  4532. 8001e92: 6a3b ldr r3, [r7, #32]
  4533. 8001e94: 61fb str r3, [r7, #28]
  4534. uint32_t epnum;
  4535. uint32_t fifoemptymsk;
  4536. uint32_t temp;
  4537. /* ensure that we are in device mode */
  4538. if (USB_GetMode(hpcd->Instance) == USB_OTG_MODE_DEVICE)
  4539. 8001e96: 687b ldr r3, [r7, #4]
  4540. 8001e98: 681b ldr r3, [r3, #0]
  4541. 8001e9a: 4618 mov r0, r3
  4542. 8001e9c: f005 fa2b bl 80072f6 <USB_GetMode>
  4543. 8001ea0: 4603 mov r3, r0
  4544. 8001ea2: 2b00 cmp r3, #0
  4545. 8001ea4: f040 83be bne.w 8002624 <HAL_PCD_IRQHandler+0x7a0>
  4546. {
  4547. /* avoid spurious interrupt */
  4548. if (__HAL_PCD_IS_INVALID_INTERRUPT(hpcd))
  4549. 8001ea8: 687b ldr r3, [r7, #4]
  4550. 8001eaa: 681b ldr r3, [r3, #0]
  4551. 8001eac: 4618 mov r0, r3
  4552. 8001eae: f005 f98f bl 80071d0 <USB_ReadInterrupts>
  4553. 8001eb2: 4603 mov r3, r0
  4554. 8001eb4: 2b00 cmp r3, #0
  4555. 8001eb6: f000 83b4 beq.w 8002622 <HAL_PCD_IRQHandler+0x79e>
  4556. {
  4557. return;
  4558. }
  4559. if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_MMIS))
  4560. 8001eba: 687b ldr r3, [r7, #4]
  4561. 8001ebc: 681b ldr r3, [r3, #0]
  4562. 8001ebe: 4618 mov r0, r3
  4563. 8001ec0: f005 f986 bl 80071d0 <USB_ReadInterrupts>
  4564. 8001ec4: 4603 mov r3, r0
  4565. 8001ec6: f003 0302 and.w r3, r3, #2
  4566. 8001eca: 2b02 cmp r3, #2
  4567. 8001ecc: d107 bne.n 8001ede <HAL_PCD_IRQHandler+0x5a>
  4568. {
  4569. /* incorrect mode, acknowledge the interrupt */
  4570. __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_MMIS);
  4571. 8001ece: 687b ldr r3, [r7, #4]
  4572. 8001ed0: 681b ldr r3, [r3, #0]
  4573. 8001ed2: 695a ldr r2, [r3, #20]
  4574. 8001ed4: 687b ldr r3, [r7, #4]
  4575. 8001ed6: 681b ldr r3, [r3, #0]
  4576. 8001ed8: f002 0202 and.w r2, r2, #2
  4577. 8001edc: 615a str r2, [r3, #20]
  4578. }
  4579. /* Handle RxQLevel Interrupt */
  4580. if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
  4581. 8001ede: 687b ldr r3, [r7, #4]
  4582. 8001ee0: 681b ldr r3, [r3, #0]
  4583. 8001ee2: 4618 mov r0, r3
  4584. 8001ee4: f005 f974 bl 80071d0 <USB_ReadInterrupts>
  4585. 8001ee8: 4603 mov r3, r0
  4586. 8001eea: f003 0310 and.w r3, r3, #16
  4587. 8001eee: 2b10 cmp r3, #16
  4588. 8001ef0: d161 bne.n 8001fb6 <HAL_PCD_IRQHandler+0x132>
  4589. {
  4590. USB_MASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
  4591. 8001ef2: 687b ldr r3, [r7, #4]
  4592. 8001ef4: 681b ldr r3, [r3, #0]
  4593. 8001ef6: 699a ldr r2, [r3, #24]
  4594. 8001ef8: 687b ldr r3, [r7, #4]
  4595. 8001efa: 681b ldr r3, [r3, #0]
  4596. 8001efc: f022 0210 bic.w r2, r2, #16
  4597. 8001f00: 619a str r2, [r3, #24]
  4598. temp = USBx->GRXSTSP;
  4599. 8001f02: 6a3b ldr r3, [r7, #32]
  4600. 8001f04: 6a1b ldr r3, [r3, #32]
  4601. 8001f06: 61bb str r3, [r7, #24]
  4602. ep = &hpcd->OUT_ep[temp & USB_OTG_GRXSTSP_EPNUM];
  4603. 8001f08: 69bb ldr r3, [r7, #24]
  4604. 8001f0a: f003 020f and.w r2, r3, #15
  4605. 8001f0e: 4613 mov r3, r2
  4606. 8001f10: 00db lsls r3, r3, #3
  4607. 8001f12: 1a9b subs r3, r3, r2
  4608. 8001f14: 009b lsls r3, r3, #2
  4609. 8001f16: f503 73fc add.w r3, r3, #504 ; 0x1f8
  4610. 8001f1a: 687a ldr r2, [r7, #4]
  4611. 8001f1c: 4413 add r3, r2
  4612. 8001f1e: 3304 adds r3, #4
  4613. 8001f20: 617b str r3, [r7, #20]
  4614. if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_DATA_UPDT)
  4615. 8001f22: 69bb ldr r3, [r7, #24]
  4616. 8001f24: 0c5b lsrs r3, r3, #17
  4617. 8001f26: f003 030f and.w r3, r3, #15
  4618. 8001f2a: 2b02 cmp r3, #2
  4619. 8001f2c: d124 bne.n 8001f78 <HAL_PCD_IRQHandler+0xf4>
  4620. {
  4621. if ((temp & USB_OTG_GRXSTSP_BCNT) != 0U)
  4622. 8001f2e: 69ba ldr r2, [r7, #24]
  4623. 8001f30: f647 73f0 movw r3, #32752 ; 0x7ff0
  4624. 8001f34: 4013 ands r3, r2
  4625. 8001f36: 2b00 cmp r3, #0
  4626. 8001f38: d035 beq.n 8001fa6 <HAL_PCD_IRQHandler+0x122>
  4627. {
  4628. (void)USB_ReadPacket(USBx, ep->xfer_buff,
  4629. 8001f3a: 697b ldr r3, [r7, #20]
  4630. 8001f3c: 68d9 ldr r1, [r3, #12]
  4631. (uint16_t)((temp & USB_OTG_GRXSTSP_BCNT) >> 4));
  4632. 8001f3e: 69bb ldr r3, [r7, #24]
  4633. 8001f40: 091b lsrs r3, r3, #4
  4634. 8001f42: b29b uxth r3, r3
  4635. (void)USB_ReadPacket(USBx, ep->xfer_buff,
  4636. 8001f44: f3c3 030a ubfx r3, r3, #0, #11
  4637. 8001f48: b29b uxth r3, r3
  4638. 8001f4a: 461a mov r2, r3
  4639. 8001f4c: 6a38 ldr r0, [r7, #32]
  4640. 8001f4e: f004 ffab bl 8006ea8 <USB_ReadPacket>
  4641. ep->xfer_buff += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
  4642. 8001f52: 697b ldr r3, [r7, #20]
  4643. 8001f54: 68da ldr r2, [r3, #12]
  4644. 8001f56: 69bb ldr r3, [r7, #24]
  4645. 8001f58: 091b lsrs r3, r3, #4
  4646. 8001f5a: f3c3 030a ubfx r3, r3, #0, #11
  4647. 8001f5e: 441a add r2, r3
  4648. 8001f60: 697b ldr r3, [r7, #20]
  4649. 8001f62: 60da str r2, [r3, #12]
  4650. ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
  4651. 8001f64: 697b ldr r3, [r7, #20]
  4652. 8001f66: 699a ldr r2, [r3, #24]
  4653. 8001f68: 69bb ldr r3, [r7, #24]
  4654. 8001f6a: 091b lsrs r3, r3, #4
  4655. 8001f6c: f3c3 030a ubfx r3, r3, #0, #11
  4656. 8001f70: 441a add r2, r3
  4657. 8001f72: 697b ldr r3, [r7, #20]
  4658. 8001f74: 619a str r2, [r3, #24]
  4659. 8001f76: e016 b.n 8001fa6 <HAL_PCD_IRQHandler+0x122>
  4660. }
  4661. }
  4662. else if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_SETUP_UPDT)
  4663. 8001f78: 69bb ldr r3, [r7, #24]
  4664. 8001f7a: 0c5b lsrs r3, r3, #17
  4665. 8001f7c: f003 030f and.w r3, r3, #15
  4666. 8001f80: 2b06 cmp r3, #6
  4667. 8001f82: d110 bne.n 8001fa6 <HAL_PCD_IRQHandler+0x122>
  4668. {
  4669. (void)USB_ReadPacket(USBx, (uint8_t *)hpcd->Setup, 8U);
  4670. 8001f84: 687b ldr r3, [r7, #4]
  4671. 8001f86: f503 7371 add.w r3, r3, #964 ; 0x3c4
  4672. 8001f8a: 2208 movs r2, #8
  4673. 8001f8c: 4619 mov r1, r3
  4674. 8001f8e: 6a38 ldr r0, [r7, #32]
  4675. 8001f90: f004 ff8a bl 8006ea8 <USB_ReadPacket>
  4676. ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
  4677. 8001f94: 697b ldr r3, [r7, #20]
  4678. 8001f96: 699a ldr r2, [r3, #24]
  4679. 8001f98: 69bb ldr r3, [r7, #24]
  4680. 8001f9a: 091b lsrs r3, r3, #4
  4681. 8001f9c: f3c3 030a ubfx r3, r3, #0, #11
  4682. 8001fa0: 441a add r2, r3
  4683. 8001fa2: 697b ldr r3, [r7, #20]
  4684. 8001fa4: 619a str r2, [r3, #24]
  4685. else
  4686. {
  4687. /* ... */
  4688. }
  4689. USB_UNMASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
  4690. 8001fa6: 687b ldr r3, [r7, #4]
  4691. 8001fa8: 681b ldr r3, [r3, #0]
  4692. 8001faa: 699a ldr r2, [r3, #24]
  4693. 8001fac: 687b ldr r3, [r7, #4]
  4694. 8001fae: 681b ldr r3, [r3, #0]
  4695. 8001fb0: f042 0210 orr.w r2, r2, #16
  4696. 8001fb4: 619a str r2, [r3, #24]
  4697. }
  4698. if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_OEPINT))
  4699. 8001fb6: 687b ldr r3, [r7, #4]
  4700. 8001fb8: 681b ldr r3, [r3, #0]
  4701. 8001fba: 4618 mov r0, r3
  4702. 8001fbc: f005 f908 bl 80071d0 <USB_ReadInterrupts>
  4703. 8001fc0: 4603 mov r3, r0
  4704. 8001fc2: f403 2300 and.w r3, r3, #524288 ; 0x80000
  4705. 8001fc6: f5b3 2f00 cmp.w r3, #524288 ; 0x80000
  4706. 8001fca: d16e bne.n 80020aa <HAL_PCD_IRQHandler+0x226>
  4707. {
  4708. epnum = 0U;
  4709. 8001fcc: 2300 movs r3, #0
  4710. 8001fce: 627b str r3, [r7, #36] ; 0x24
  4711. /* Read in the device interrupt bits */
  4712. ep_intr = USB_ReadDevAllOutEpInterrupt(hpcd->Instance);
  4713. 8001fd0: 687b ldr r3, [r7, #4]
  4714. 8001fd2: 681b ldr r3, [r3, #0]
  4715. 8001fd4: 4618 mov r0, r3
  4716. 8001fd6: f005 f90e bl 80071f6 <USB_ReadDevAllOutEpInterrupt>
  4717. 8001fda: 62b8 str r0, [r7, #40] ; 0x28
  4718. while (ep_intr != 0U)
  4719. 8001fdc: e062 b.n 80020a4 <HAL_PCD_IRQHandler+0x220>
  4720. {
  4721. if ((ep_intr & 0x1U) != 0U)
  4722. 8001fde: 6abb ldr r3, [r7, #40] ; 0x28
  4723. 8001fe0: f003 0301 and.w r3, r3, #1
  4724. 8001fe4: 2b00 cmp r3, #0
  4725. 8001fe6: d057 beq.n 8002098 <HAL_PCD_IRQHandler+0x214>
  4726. {
  4727. epint = USB_ReadDevOutEPInterrupt(hpcd->Instance, (uint8_t)epnum);
  4728. 8001fe8: 687b ldr r3, [r7, #4]
  4729. 8001fea: 681b ldr r3, [r3, #0]
  4730. 8001fec: 6a7a ldr r2, [r7, #36] ; 0x24
  4731. 8001fee: b2d2 uxtb r2, r2
  4732. 8001ff0: 4611 mov r1, r2
  4733. 8001ff2: 4618 mov r0, r3
  4734. 8001ff4: f005 f933 bl 800725e <USB_ReadDevOutEPInterrupt>
  4735. 8001ff8: 6138 str r0, [r7, #16]
  4736. if ((epint & USB_OTG_DOEPINT_XFRC) == USB_OTG_DOEPINT_XFRC)
  4737. 8001ffa: 693b ldr r3, [r7, #16]
  4738. 8001ffc: f003 0301 and.w r3, r3, #1
  4739. 8002000: 2b00 cmp r3, #0
  4740. 8002002: d00c beq.n 800201e <HAL_PCD_IRQHandler+0x19a>
  4741. {
  4742. CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_XFRC);
  4743. 8002004: 6a7b ldr r3, [r7, #36] ; 0x24
  4744. 8002006: 015a lsls r2, r3, #5
  4745. 8002008: 69fb ldr r3, [r7, #28]
  4746. 800200a: 4413 add r3, r2
  4747. 800200c: f503 6330 add.w r3, r3, #2816 ; 0xb00
  4748. 8002010: 461a mov r2, r3
  4749. 8002012: 2301 movs r3, #1
  4750. 8002014: 6093 str r3, [r2, #8]
  4751. (void)PCD_EP_OutXfrComplete_int(hpcd, epnum);
  4752. 8002016: 6a79 ldr r1, [r7, #36] ; 0x24
  4753. 8002018: 6878 ldr r0, [r7, #4]
  4754. 800201a: f000 fdd1 bl 8002bc0 <PCD_EP_OutXfrComplete_int>
  4755. }
  4756. if ((epint & USB_OTG_DOEPINT_STUP) == USB_OTG_DOEPINT_STUP)
  4757. 800201e: 693b ldr r3, [r7, #16]
  4758. 8002020: f003 0308 and.w r3, r3, #8
  4759. 8002024: 2b00 cmp r3, #0
  4760. 8002026: d00c beq.n 8002042 <HAL_PCD_IRQHandler+0x1be>
  4761. {
  4762. CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
  4763. 8002028: 6a7b ldr r3, [r7, #36] ; 0x24
  4764. 800202a: 015a lsls r2, r3, #5
  4765. 800202c: 69fb ldr r3, [r7, #28]
  4766. 800202e: 4413 add r3, r2
  4767. 8002030: f503 6330 add.w r3, r3, #2816 ; 0xb00
  4768. 8002034: 461a mov r2, r3
  4769. 8002036: 2308 movs r3, #8
  4770. 8002038: 6093 str r3, [r2, #8]
  4771. /* Class B setup phase done for previous decoded setup */
  4772. (void)PCD_EP_OutSetupPacket_int(hpcd, epnum);
  4773. 800203a: 6a79 ldr r1, [r7, #36] ; 0x24
  4774. 800203c: 6878 ldr r0, [r7, #4]
  4775. 800203e: f000 fecb bl 8002dd8 <PCD_EP_OutSetupPacket_int>
  4776. }
  4777. if ((epint & USB_OTG_DOEPINT_OTEPDIS) == USB_OTG_DOEPINT_OTEPDIS)
  4778. 8002042: 693b ldr r3, [r7, #16]
  4779. 8002044: f003 0310 and.w r3, r3, #16
  4780. 8002048: 2b00 cmp r3, #0
  4781. 800204a: d008 beq.n 800205e <HAL_PCD_IRQHandler+0x1da>
  4782. {
  4783. CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPDIS);
  4784. 800204c: 6a7b ldr r3, [r7, #36] ; 0x24
  4785. 800204e: 015a lsls r2, r3, #5
  4786. 8002050: 69fb ldr r3, [r7, #28]
  4787. 8002052: 4413 add r3, r2
  4788. 8002054: f503 6330 add.w r3, r3, #2816 ; 0xb00
  4789. 8002058: 461a mov r2, r3
  4790. 800205a: 2310 movs r3, #16
  4791. 800205c: 6093 str r3, [r2, #8]
  4792. }
  4793. /* Clear Status Phase Received interrupt */
  4794. if ((epint & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR)
  4795. 800205e: 693b ldr r3, [r7, #16]
  4796. 8002060: f003 0320 and.w r3, r3, #32
  4797. 8002064: 2b00 cmp r3, #0
  4798. 8002066: d008 beq.n 800207a <HAL_PCD_IRQHandler+0x1f6>
  4799. {
  4800. CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPSPR);
  4801. 8002068: 6a7b ldr r3, [r7, #36] ; 0x24
  4802. 800206a: 015a lsls r2, r3, #5
  4803. 800206c: 69fb ldr r3, [r7, #28]
  4804. 800206e: 4413 add r3, r2
  4805. 8002070: f503 6330 add.w r3, r3, #2816 ; 0xb00
  4806. 8002074: 461a mov r2, r3
  4807. 8002076: 2320 movs r3, #32
  4808. 8002078: 6093 str r3, [r2, #8]
  4809. }
  4810. /* Clear OUT NAK interrupt */
  4811. if ((epint & USB_OTG_DOEPINT_NAK) == USB_OTG_DOEPINT_NAK)
  4812. 800207a: 693b ldr r3, [r7, #16]
  4813. 800207c: f403 5300 and.w r3, r3, #8192 ; 0x2000
  4814. 8002080: 2b00 cmp r3, #0
  4815. 8002082: d009 beq.n 8002098 <HAL_PCD_IRQHandler+0x214>
  4816. {
  4817. CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_NAK);
  4818. 8002084: 6a7b ldr r3, [r7, #36] ; 0x24
  4819. 8002086: 015a lsls r2, r3, #5
  4820. 8002088: 69fb ldr r3, [r7, #28]
  4821. 800208a: 4413 add r3, r2
  4822. 800208c: f503 6330 add.w r3, r3, #2816 ; 0xb00
  4823. 8002090: 461a mov r2, r3
  4824. 8002092: f44f 5300 mov.w r3, #8192 ; 0x2000
  4825. 8002096: 6093 str r3, [r2, #8]
  4826. }
  4827. }
  4828. epnum++;
  4829. 8002098: 6a7b ldr r3, [r7, #36] ; 0x24
  4830. 800209a: 3301 adds r3, #1
  4831. 800209c: 627b str r3, [r7, #36] ; 0x24
  4832. ep_intr >>= 1U;
  4833. 800209e: 6abb ldr r3, [r7, #40] ; 0x28
  4834. 80020a0: 085b lsrs r3, r3, #1
  4835. 80020a2: 62bb str r3, [r7, #40] ; 0x28
  4836. while (ep_intr != 0U)
  4837. 80020a4: 6abb ldr r3, [r7, #40] ; 0x28
  4838. 80020a6: 2b00 cmp r3, #0
  4839. 80020a8: d199 bne.n 8001fde <HAL_PCD_IRQHandler+0x15a>
  4840. }
  4841. }
  4842. if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_IEPINT))
  4843. 80020aa: 687b ldr r3, [r7, #4]
  4844. 80020ac: 681b ldr r3, [r3, #0]
  4845. 80020ae: 4618 mov r0, r3
  4846. 80020b0: f005 f88e bl 80071d0 <USB_ReadInterrupts>
  4847. 80020b4: 4603 mov r3, r0
  4848. 80020b6: f403 2380 and.w r3, r3, #262144 ; 0x40000
  4849. 80020ba: f5b3 2f80 cmp.w r3, #262144 ; 0x40000
  4850. 80020be: f040 80c4 bne.w 800224a <HAL_PCD_IRQHandler+0x3c6>
  4851. {
  4852. /* Read in the device interrupt bits */
  4853. ep_intr = USB_ReadDevAllInEpInterrupt(hpcd->Instance);
  4854. 80020c2: 687b ldr r3, [r7, #4]
  4855. 80020c4: 681b ldr r3, [r3, #0]
  4856. 80020c6: 4618 mov r0, r3
  4857. 80020c8: f005 f8af bl 800722a <USB_ReadDevAllInEpInterrupt>
  4858. 80020cc: 62b8 str r0, [r7, #40] ; 0x28
  4859. epnum = 0U;
  4860. 80020ce: 2300 movs r3, #0
  4861. 80020d0: 627b str r3, [r7, #36] ; 0x24
  4862. while (ep_intr != 0U)
  4863. 80020d2: e0b6 b.n 8002242 <HAL_PCD_IRQHandler+0x3be>
  4864. {
  4865. if ((ep_intr & 0x1U) != 0U) /* In ITR */
  4866. 80020d4: 6abb ldr r3, [r7, #40] ; 0x28
  4867. 80020d6: f003 0301 and.w r3, r3, #1
  4868. 80020da: 2b00 cmp r3, #0
  4869. 80020dc: f000 80ab beq.w 8002236 <HAL_PCD_IRQHandler+0x3b2>
  4870. {
  4871. epint = USB_ReadDevInEPInterrupt(hpcd->Instance, (uint8_t)epnum);
  4872. 80020e0: 687b ldr r3, [r7, #4]
  4873. 80020e2: 681b ldr r3, [r3, #0]
  4874. 80020e4: 6a7a ldr r2, [r7, #36] ; 0x24
  4875. 80020e6: b2d2 uxtb r2, r2
  4876. 80020e8: 4611 mov r1, r2
  4877. 80020ea: 4618 mov r0, r3
  4878. 80020ec: f005 f8d5 bl 800729a <USB_ReadDevInEPInterrupt>
  4879. 80020f0: 6138 str r0, [r7, #16]
  4880. if ((epint & USB_OTG_DIEPINT_XFRC) == USB_OTG_DIEPINT_XFRC)
  4881. 80020f2: 693b ldr r3, [r7, #16]
  4882. 80020f4: f003 0301 and.w r3, r3, #1
  4883. 80020f8: 2b00 cmp r3, #0
  4884. 80020fa: d057 beq.n 80021ac <HAL_PCD_IRQHandler+0x328>
  4885. {
  4886. fifoemptymsk = (uint32_t)(0x1UL << (epnum & EP_ADDR_MSK));
  4887. 80020fc: 6a7b ldr r3, [r7, #36] ; 0x24
  4888. 80020fe: f003 030f and.w r3, r3, #15
  4889. 8002102: 2201 movs r2, #1
  4890. 8002104: fa02 f303 lsl.w r3, r2, r3
  4891. 8002108: 60fb str r3, [r7, #12]
  4892. USBx_DEVICE->DIEPEMPMSK &= ~fifoemptymsk;
  4893. 800210a: 69fb ldr r3, [r7, #28]
  4894. 800210c: f503 6300 add.w r3, r3, #2048 ; 0x800
  4895. 8002110: 6b5a ldr r2, [r3, #52] ; 0x34
  4896. 8002112: 68fb ldr r3, [r7, #12]
  4897. 8002114: 43db mvns r3, r3
  4898. 8002116: 69f9 ldr r1, [r7, #28]
  4899. 8002118: f501 6100 add.w r1, r1, #2048 ; 0x800
  4900. 800211c: 4013 ands r3, r2
  4901. 800211e: 634b str r3, [r1, #52] ; 0x34
  4902. CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_XFRC);
  4903. 8002120: 6a7b ldr r3, [r7, #36] ; 0x24
  4904. 8002122: 015a lsls r2, r3, #5
  4905. 8002124: 69fb ldr r3, [r7, #28]
  4906. 8002126: 4413 add r3, r2
  4907. 8002128: f503 6310 add.w r3, r3, #2304 ; 0x900
  4908. 800212c: 461a mov r2, r3
  4909. 800212e: 2301 movs r3, #1
  4910. 8002130: 6093 str r3, [r2, #8]
  4911. if (hpcd->Init.dma_enable == 1U)
  4912. 8002132: 687b ldr r3, [r7, #4]
  4913. 8002134: 691b ldr r3, [r3, #16]
  4914. 8002136: 2b01 cmp r3, #1
  4915. 8002138: d132 bne.n 80021a0 <HAL_PCD_IRQHandler+0x31c>
  4916. {
  4917. hpcd->IN_ep[epnum].xfer_buff += hpcd->IN_ep[epnum].maxpacket;
  4918. 800213a: 6879 ldr r1, [r7, #4]
  4919. 800213c: 6a7a ldr r2, [r7, #36] ; 0x24
  4920. 800213e: 4613 mov r3, r2
  4921. 8002140: 00db lsls r3, r3, #3
  4922. 8002142: 1a9b subs r3, r3, r2
  4923. 8002144: 009b lsls r3, r3, #2
  4924. 8002146: 440b add r3, r1
  4925. 8002148: 3348 adds r3, #72 ; 0x48
  4926. 800214a: 6819 ldr r1, [r3, #0]
  4927. 800214c: 6878 ldr r0, [r7, #4]
  4928. 800214e: 6a7a ldr r2, [r7, #36] ; 0x24
  4929. 8002150: 4613 mov r3, r2
  4930. 8002152: 00db lsls r3, r3, #3
  4931. 8002154: 1a9b subs r3, r3, r2
  4932. 8002156: 009b lsls r3, r3, #2
  4933. 8002158: 4403 add r3, r0
  4934. 800215a: 3344 adds r3, #68 ; 0x44
  4935. 800215c: 681b ldr r3, [r3, #0]
  4936. 800215e: 4419 add r1, r3
  4937. 8002160: 6878 ldr r0, [r7, #4]
  4938. 8002162: 6a7a ldr r2, [r7, #36] ; 0x24
  4939. 8002164: 4613 mov r3, r2
  4940. 8002166: 00db lsls r3, r3, #3
  4941. 8002168: 1a9b subs r3, r3, r2
  4942. 800216a: 009b lsls r3, r3, #2
  4943. 800216c: 4403 add r3, r0
  4944. 800216e: 3348 adds r3, #72 ; 0x48
  4945. 8002170: 6019 str r1, [r3, #0]
  4946. /* this is ZLP, so prepare EP0 for next setup */
  4947. if ((epnum == 0U) && (hpcd->IN_ep[epnum].xfer_len == 0U))
  4948. 8002172: 6a7b ldr r3, [r7, #36] ; 0x24
  4949. 8002174: 2b00 cmp r3, #0
  4950. 8002176: d113 bne.n 80021a0 <HAL_PCD_IRQHandler+0x31c>
  4951. 8002178: 6879 ldr r1, [r7, #4]
  4952. 800217a: 6a7a ldr r2, [r7, #36] ; 0x24
  4953. 800217c: 4613 mov r3, r2
  4954. 800217e: 00db lsls r3, r3, #3
  4955. 8002180: 1a9b subs r3, r3, r2
  4956. 8002182: 009b lsls r3, r3, #2
  4957. 8002184: 440b add r3, r1
  4958. 8002186: 3350 adds r3, #80 ; 0x50
  4959. 8002188: 681b ldr r3, [r3, #0]
  4960. 800218a: 2b00 cmp r3, #0
  4961. 800218c: d108 bne.n 80021a0 <HAL_PCD_IRQHandler+0x31c>
  4962. {
  4963. /* prepare to rx more setup packets */
  4964. (void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
  4965. 800218e: 687b ldr r3, [r7, #4]
  4966. 8002190: 6818 ldr r0, [r3, #0]
  4967. 8002192: 687b ldr r3, [r7, #4]
  4968. 8002194: f503 7371 add.w r3, r3, #964 ; 0x3c4
  4969. 8002198: 461a mov r2, r3
  4970. 800219a: 2101 movs r1, #1
  4971. 800219c: f005 f8de bl 800735c <USB_EP0_OutStart>
  4972. }
  4973. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  4974. hpcd->DataInStageCallback(hpcd, (uint8_t)epnum);
  4975. #else
  4976. HAL_PCD_DataInStageCallback(hpcd, (uint8_t)epnum);
  4977. 80021a0: 6a7b ldr r3, [r7, #36] ; 0x24
  4978. 80021a2: b2db uxtb r3, r3
  4979. 80021a4: 4619 mov r1, r3
  4980. 80021a6: 6878 ldr r0, [r7, #4]
  4981. 80021a8: f007 f89f bl 80092ea <HAL_PCD_DataInStageCallback>
  4982. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  4983. }
  4984. if ((epint & USB_OTG_DIEPINT_TOC) == USB_OTG_DIEPINT_TOC)
  4985. 80021ac: 693b ldr r3, [r7, #16]
  4986. 80021ae: f003 0308 and.w r3, r3, #8
  4987. 80021b2: 2b00 cmp r3, #0
  4988. 80021b4: d008 beq.n 80021c8 <HAL_PCD_IRQHandler+0x344>
  4989. {
  4990. CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_TOC);
  4991. 80021b6: 6a7b ldr r3, [r7, #36] ; 0x24
  4992. 80021b8: 015a lsls r2, r3, #5
  4993. 80021ba: 69fb ldr r3, [r7, #28]
  4994. 80021bc: 4413 add r3, r2
  4995. 80021be: f503 6310 add.w r3, r3, #2304 ; 0x900
  4996. 80021c2: 461a mov r2, r3
  4997. 80021c4: 2308 movs r3, #8
  4998. 80021c6: 6093 str r3, [r2, #8]
  4999. }
  5000. if ((epint & USB_OTG_DIEPINT_ITTXFE) == USB_OTG_DIEPINT_ITTXFE)
  5001. 80021c8: 693b ldr r3, [r7, #16]
  5002. 80021ca: f003 0310 and.w r3, r3, #16
  5003. 80021ce: 2b00 cmp r3, #0
  5004. 80021d0: d008 beq.n 80021e4 <HAL_PCD_IRQHandler+0x360>
  5005. {
  5006. CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_ITTXFE);
  5007. 80021d2: 6a7b ldr r3, [r7, #36] ; 0x24
  5008. 80021d4: 015a lsls r2, r3, #5
  5009. 80021d6: 69fb ldr r3, [r7, #28]
  5010. 80021d8: 4413 add r3, r2
  5011. 80021da: f503 6310 add.w r3, r3, #2304 ; 0x900
  5012. 80021de: 461a mov r2, r3
  5013. 80021e0: 2310 movs r3, #16
  5014. 80021e2: 6093 str r3, [r2, #8]
  5015. }
  5016. if ((epint & USB_OTG_DIEPINT_INEPNE) == USB_OTG_DIEPINT_INEPNE)
  5017. 80021e4: 693b ldr r3, [r7, #16]
  5018. 80021e6: f003 0340 and.w r3, r3, #64 ; 0x40
  5019. 80021ea: 2b00 cmp r3, #0
  5020. 80021ec: d008 beq.n 8002200 <HAL_PCD_IRQHandler+0x37c>
  5021. {
  5022. CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_INEPNE);
  5023. 80021ee: 6a7b ldr r3, [r7, #36] ; 0x24
  5024. 80021f0: 015a lsls r2, r3, #5
  5025. 80021f2: 69fb ldr r3, [r7, #28]
  5026. 80021f4: 4413 add r3, r2
  5027. 80021f6: f503 6310 add.w r3, r3, #2304 ; 0x900
  5028. 80021fa: 461a mov r2, r3
  5029. 80021fc: 2340 movs r3, #64 ; 0x40
  5030. 80021fe: 6093 str r3, [r2, #8]
  5031. }
  5032. if ((epint & USB_OTG_DIEPINT_EPDISD) == USB_OTG_DIEPINT_EPDISD)
  5033. 8002200: 693b ldr r3, [r7, #16]
  5034. 8002202: f003 0302 and.w r3, r3, #2
  5035. 8002206: 2b00 cmp r3, #0
  5036. 8002208: d00c beq.n 8002224 <HAL_PCD_IRQHandler+0x3a0>
  5037. {
  5038. (void)USB_FlushTxFifo(USBx, epnum);
  5039. 800220a: 6a79 ldr r1, [r7, #36] ; 0x24
  5040. 800220c: 6a38 ldr r0, [r7, #32]
  5041. 800220e: f004 f867 bl 80062e0 <USB_FlushTxFifo>
  5042. CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_EPDISD);
  5043. 8002212: 6a7b ldr r3, [r7, #36] ; 0x24
  5044. 8002214: 015a lsls r2, r3, #5
  5045. 8002216: 69fb ldr r3, [r7, #28]
  5046. 8002218: 4413 add r3, r2
  5047. 800221a: f503 6310 add.w r3, r3, #2304 ; 0x900
  5048. 800221e: 461a mov r2, r3
  5049. 8002220: 2302 movs r3, #2
  5050. 8002222: 6093 str r3, [r2, #8]
  5051. }
  5052. if ((epint & USB_OTG_DIEPINT_TXFE) == USB_OTG_DIEPINT_TXFE)
  5053. 8002224: 693b ldr r3, [r7, #16]
  5054. 8002226: f003 0380 and.w r3, r3, #128 ; 0x80
  5055. 800222a: 2b00 cmp r3, #0
  5056. 800222c: d003 beq.n 8002236 <HAL_PCD_IRQHandler+0x3b2>
  5057. {
  5058. (void)PCD_WriteEmptyTxFifo(hpcd, epnum);
  5059. 800222e: 6a79 ldr r1, [r7, #36] ; 0x24
  5060. 8002230: 6878 ldr r0, [r7, #4]
  5061. 8002232: f000 fc38 bl 8002aa6 <PCD_WriteEmptyTxFifo>
  5062. }
  5063. }
  5064. epnum++;
  5065. 8002236: 6a7b ldr r3, [r7, #36] ; 0x24
  5066. 8002238: 3301 adds r3, #1
  5067. 800223a: 627b str r3, [r7, #36] ; 0x24
  5068. ep_intr >>= 1U;
  5069. 800223c: 6abb ldr r3, [r7, #40] ; 0x28
  5070. 800223e: 085b lsrs r3, r3, #1
  5071. 8002240: 62bb str r3, [r7, #40] ; 0x28
  5072. while (ep_intr != 0U)
  5073. 8002242: 6abb ldr r3, [r7, #40] ; 0x28
  5074. 8002244: 2b00 cmp r3, #0
  5075. 8002246: f47f af45 bne.w 80020d4 <HAL_PCD_IRQHandler+0x250>
  5076. }
  5077. }
  5078. /* Handle Resume Interrupt */
  5079. if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_WKUINT))
  5080. 800224a: 687b ldr r3, [r7, #4]
  5081. 800224c: 681b ldr r3, [r3, #0]
  5082. 800224e: 4618 mov r0, r3
  5083. 8002250: f004 ffbe bl 80071d0 <USB_ReadInterrupts>
  5084. 8002254: 4603 mov r3, r0
  5085. 8002256: f003 4300 and.w r3, r3, #2147483648 ; 0x80000000
  5086. 800225a: f1b3 4f00 cmp.w r3, #2147483648 ; 0x80000000
  5087. 800225e: d122 bne.n 80022a6 <HAL_PCD_IRQHandler+0x422>
  5088. {
  5089. /* Clear the Remote Wake-up Signaling */
  5090. USBx_DEVICE->DCTL &= ~USB_OTG_DCTL_RWUSIG;
  5091. 8002260: 69fb ldr r3, [r7, #28]
  5092. 8002262: f503 6300 add.w r3, r3, #2048 ; 0x800
  5093. 8002266: 685b ldr r3, [r3, #4]
  5094. 8002268: 69fa ldr r2, [r7, #28]
  5095. 800226a: f502 6200 add.w r2, r2, #2048 ; 0x800
  5096. 800226e: f023 0301 bic.w r3, r3, #1
  5097. 8002272: 6053 str r3, [r2, #4]
  5098. if (hpcd->LPM_State == LPM_L1)
  5099. 8002274: 687b ldr r3, [r7, #4]
  5100. 8002276: f893 33f4 ldrb.w r3, [r3, #1012] ; 0x3f4
  5101. 800227a: 2b01 cmp r3, #1
  5102. 800227c: d108 bne.n 8002290 <HAL_PCD_IRQHandler+0x40c>
  5103. {
  5104. hpcd->LPM_State = LPM_L0;
  5105. 800227e: 687b ldr r3, [r7, #4]
  5106. 8002280: 2200 movs r2, #0
  5107. 8002282: f883 23f4 strb.w r2, [r3, #1012] ; 0x3f4
  5108. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  5109. hpcd->LPMCallback(hpcd, PCD_LPM_L0_ACTIVE);
  5110. #else
  5111. HAL_PCDEx_LPM_Callback(hpcd, PCD_LPM_L0_ACTIVE);
  5112. 8002286: 2100 movs r1, #0
  5113. 8002288: 6878 ldr r0, [r7, #4]
  5114. 800228a: f000 fe67 bl 8002f5c <HAL_PCDEx_LPM_Callback>
  5115. 800228e: e002 b.n 8002296 <HAL_PCD_IRQHandler+0x412>
  5116. else
  5117. {
  5118. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  5119. hpcd->ResumeCallback(hpcd);
  5120. #else
  5121. HAL_PCD_ResumeCallback(hpcd);
  5122. 8002290: 6878 ldr r0, [r7, #4]
  5123. 8002292: f007 f8a1 bl 80093d8 <HAL_PCD_ResumeCallback>
  5124. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  5125. }
  5126. __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_WKUINT);
  5127. 8002296: 687b ldr r3, [r7, #4]
  5128. 8002298: 681b ldr r3, [r3, #0]
  5129. 800229a: 695a ldr r2, [r3, #20]
  5130. 800229c: 687b ldr r3, [r7, #4]
  5131. 800229e: 681b ldr r3, [r3, #0]
  5132. 80022a0: f002 4200 and.w r2, r2, #2147483648 ; 0x80000000
  5133. 80022a4: 615a str r2, [r3, #20]
  5134. }
  5135. /* Handle Suspend Interrupt */
  5136. if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_USBSUSP))
  5137. 80022a6: 687b ldr r3, [r7, #4]
  5138. 80022a8: 681b ldr r3, [r3, #0]
  5139. 80022aa: 4618 mov r0, r3
  5140. 80022ac: f004 ff90 bl 80071d0 <USB_ReadInterrupts>
  5141. 80022b0: 4603 mov r3, r0
  5142. 80022b2: f403 6300 and.w r3, r3, #2048 ; 0x800
  5143. 80022b6: f5b3 6f00 cmp.w r3, #2048 ; 0x800
  5144. 80022ba: d112 bne.n 80022e2 <HAL_PCD_IRQHandler+0x45e>
  5145. {
  5146. if ((USBx_DEVICE->DSTS & USB_OTG_DSTS_SUSPSTS) == USB_OTG_DSTS_SUSPSTS)
  5147. 80022bc: 69fb ldr r3, [r7, #28]
  5148. 80022be: f503 6300 add.w r3, r3, #2048 ; 0x800
  5149. 80022c2: 689b ldr r3, [r3, #8]
  5150. 80022c4: f003 0301 and.w r3, r3, #1
  5151. 80022c8: 2b01 cmp r3, #1
  5152. 80022ca: d102 bne.n 80022d2 <HAL_PCD_IRQHandler+0x44e>
  5153. {
  5154. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  5155. hpcd->SuspendCallback(hpcd);
  5156. #else
  5157. HAL_PCD_SuspendCallback(hpcd);
  5158. 80022cc: 6878 ldr r0, [r7, #4]
  5159. 80022ce: f007 f85d bl 800938c <HAL_PCD_SuspendCallback>
  5160. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  5161. }
  5162. __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_USBSUSP);
  5163. 80022d2: 687b ldr r3, [r7, #4]
  5164. 80022d4: 681b ldr r3, [r3, #0]
  5165. 80022d6: 695a ldr r2, [r3, #20]
  5166. 80022d8: 687b ldr r3, [r7, #4]
  5167. 80022da: 681b ldr r3, [r3, #0]
  5168. 80022dc: f402 6200 and.w r2, r2, #2048 ; 0x800
  5169. 80022e0: 615a str r2, [r3, #20]
  5170. }
  5171. /* Handle LPM Interrupt */
  5172. if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_LPMINT))
  5173. 80022e2: 687b ldr r3, [r7, #4]
  5174. 80022e4: 681b ldr r3, [r3, #0]
  5175. 80022e6: 4618 mov r0, r3
  5176. 80022e8: f004 ff72 bl 80071d0 <USB_ReadInterrupts>
  5177. 80022ec: 4603 mov r3, r0
  5178. 80022ee: f003 6300 and.w r3, r3, #134217728 ; 0x8000000
  5179. 80022f2: f1b3 6f00 cmp.w r3, #134217728 ; 0x8000000
  5180. 80022f6: d121 bne.n 800233c <HAL_PCD_IRQHandler+0x4b8>
  5181. {
  5182. __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_LPMINT);
  5183. 80022f8: 687b ldr r3, [r7, #4]
  5184. 80022fa: 681b ldr r3, [r3, #0]
  5185. 80022fc: 695a ldr r2, [r3, #20]
  5186. 80022fe: 687b ldr r3, [r7, #4]
  5187. 8002300: 681b ldr r3, [r3, #0]
  5188. 8002302: f002 6200 and.w r2, r2, #134217728 ; 0x8000000
  5189. 8002306: 615a str r2, [r3, #20]
  5190. if (hpcd->LPM_State == LPM_L0)
  5191. 8002308: 687b ldr r3, [r7, #4]
  5192. 800230a: f893 33f4 ldrb.w r3, [r3, #1012] ; 0x3f4
  5193. 800230e: 2b00 cmp r3, #0
  5194. 8002310: d111 bne.n 8002336 <HAL_PCD_IRQHandler+0x4b2>
  5195. {
  5196. hpcd->LPM_State = LPM_L1;
  5197. 8002312: 687b ldr r3, [r7, #4]
  5198. 8002314: 2201 movs r2, #1
  5199. 8002316: f883 23f4 strb.w r2, [r3, #1012] ; 0x3f4
  5200. hpcd->BESL = (hpcd->Instance->GLPMCFG & USB_OTG_GLPMCFG_BESL) >> 2U;
  5201. 800231a: 687b ldr r3, [r7, #4]
  5202. 800231c: 681b ldr r3, [r3, #0]
  5203. 800231e: 6d5b ldr r3, [r3, #84] ; 0x54
  5204. 8002320: 089b lsrs r3, r3, #2
  5205. 8002322: f003 020f and.w r2, r3, #15
  5206. 8002326: 687b ldr r3, [r7, #4]
  5207. 8002328: f8c3 23f8 str.w r2, [r3, #1016] ; 0x3f8
  5208. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  5209. hpcd->LPMCallback(hpcd, PCD_LPM_L1_ACTIVE);
  5210. #else
  5211. HAL_PCDEx_LPM_Callback(hpcd, PCD_LPM_L1_ACTIVE);
  5212. 800232c: 2101 movs r1, #1
  5213. 800232e: 6878 ldr r0, [r7, #4]
  5214. 8002330: f000 fe14 bl 8002f5c <HAL_PCDEx_LPM_Callback>
  5215. 8002334: e002 b.n 800233c <HAL_PCD_IRQHandler+0x4b8>
  5216. else
  5217. {
  5218. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  5219. hpcd->SuspendCallback(hpcd);
  5220. #else
  5221. HAL_PCD_SuspendCallback(hpcd);
  5222. 8002336: 6878 ldr r0, [r7, #4]
  5223. 8002338: f007 f828 bl 800938c <HAL_PCD_SuspendCallback>
  5224. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  5225. }
  5226. }
  5227. /* Handle Reset Interrupt */
  5228. if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_USBRST))
  5229. 800233c: 687b ldr r3, [r7, #4]
  5230. 800233e: 681b ldr r3, [r3, #0]
  5231. 8002340: 4618 mov r0, r3
  5232. 8002342: f004 ff45 bl 80071d0 <USB_ReadInterrupts>
  5233. 8002346: 4603 mov r3, r0
  5234. 8002348: f403 5380 and.w r3, r3, #4096 ; 0x1000
  5235. 800234c: f5b3 5f80 cmp.w r3, #4096 ; 0x1000
  5236. 8002350: f040 80b7 bne.w 80024c2 <HAL_PCD_IRQHandler+0x63e>
  5237. {
  5238. USBx_DEVICE->DCTL &= ~USB_OTG_DCTL_RWUSIG;
  5239. 8002354: 69fb ldr r3, [r7, #28]
  5240. 8002356: f503 6300 add.w r3, r3, #2048 ; 0x800
  5241. 800235a: 685b ldr r3, [r3, #4]
  5242. 800235c: 69fa ldr r2, [r7, #28]
  5243. 800235e: f502 6200 add.w r2, r2, #2048 ; 0x800
  5244. 8002362: f023 0301 bic.w r3, r3, #1
  5245. 8002366: 6053 str r3, [r2, #4]
  5246. (void)USB_FlushTxFifo(hpcd->Instance, 0x10U);
  5247. 8002368: 687b ldr r3, [r7, #4]
  5248. 800236a: 681b ldr r3, [r3, #0]
  5249. 800236c: 2110 movs r1, #16
  5250. 800236e: 4618 mov r0, r3
  5251. 8002370: f003 ffb6 bl 80062e0 <USB_FlushTxFifo>
  5252. for (i = 0U; i < hpcd->Init.dev_endpoints; i++)
  5253. 8002374: 2300 movs r3, #0
  5254. 8002376: 62fb str r3, [r7, #44] ; 0x2c
  5255. 8002378: e046 b.n 8002408 <HAL_PCD_IRQHandler+0x584>
  5256. {
  5257. USBx_INEP(i)->DIEPINT = 0xFB7FU;
  5258. 800237a: 6afb ldr r3, [r7, #44] ; 0x2c
  5259. 800237c: 015a lsls r2, r3, #5
  5260. 800237e: 69fb ldr r3, [r7, #28]
  5261. 8002380: 4413 add r3, r2
  5262. 8002382: f503 6310 add.w r3, r3, #2304 ; 0x900
  5263. 8002386: 461a mov r2, r3
  5264. 8002388: f64f 337f movw r3, #64383 ; 0xfb7f
  5265. 800238c: 6093 str r3, [r2, #8]
  5266. USBx_INEP(i)->DIEPCTL &= ~USB_OTG_DIEPCTL_STALL;
  5267. 800238e: 6afb ldr r3, [r7, #44] ; 0x2c
  5268. 8002390: 015a lsls r2, r3, #5
  5269. 8002392: 69fb ldr r3, [r7, #28]
  5270. 8002394: 4413 add r3, r2
  5271. 8002396: f503 6310 add.w r3, r3, #2304 ; 0x900
  5272. 800239a: 681b ldr r3, [r3, #0]
  5273. 800239c: 6afa ldr r2, [r7, #44] ; 0x2c
  5274. 800239e: 0151 lsls r1, r2, #5
  5275. 80023a0: 69fa ldr r2, [r7, #28]
  5276. 80023a2: 440a add r2, r1
  5277. 80023a4: f502 6210 add.w r2, r2, #2304 ; 0x900
  5278. 80023a8: f423 1300 bic.w r3, r3, #2097152 ; 0x200000
  5279. 80023ac: 6013 str r3, [r2, #0]
  5280. USBx_OUTEP(i)->DOEPINT = 0xFB7FU;
  5281. 80023ae: 6afb ldr r3, [r7, #44] ; 0x2c
  5282. 80023b0: 015a lsls r2, r3, #5
  5283. 80023b2: 69fb ldr r3, [r7, #28]
  5284. 80023b4: 4413 add r3, r2
  5285. 80023b6: f503 6330 add.w r3, r3, #2816 ; 0xb00
  5286. 80023ba: 461a mov r2, r3
  5287. 80023bc: f64f 337f movw r3, #64383 ; 0xfb7f
  5288. 80023c0: 6093 str r3, [r2, #8]
  5289. USBx_OUTEP(i)->DOEPCTL &= ~USB_OTG_DOEPCTL_STALL;
  5290. 80023c2: 6afb ldr r3, [r7, #44] ; 0x2c
  5291. 80023c4: 015a lsls r2, r3, #5
  5292. 80023c6: 69fb ldr r3, [r7, #28]
  5293. 80023c8: 4413 add r3, r2
  5294. 80023ca: f503 6330 add.w r3, r3, #2816 ; 0xb00
  5295. 80023ce: 681b ldr r3, [r3, #0]
  5296. 80023d0: 6afa ldr r2, [r7, #44] ; 0x2c
  5297. 80023d2: 0151 lsls r1, r2, #5
  5298. 80023d4: 69fa ldr r2, [r7, #28]
  5299. 80023d6: 440a add r2, r1
  5300. 80023d8: f502 6230 add.w r2, r2, #2816 ; 0xb00
  5301. 80023dc: f423 1300 bic.w r3, r3, #2097152 ; 0x200000
  5302. 80023e0: 6013 str r3, [r2, #0]
  5303. USBx_OUTEP(i)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
  5304. 80023e2: 6afb ldr r3, [r7, #44] ; 0x2c
  5305. 80023e4: 015a lsls r2, r3, #5
  5306. 80023e6: 69fb ldr r3, [r7, #28]
  5307. 80023e8: 4413 add r3, r2
  5308. 80023ea: f503 6330 add.w r3, r3, #2816 ; 0xb00
  5309. 80023ee: 681b ldr r3, [r3, #0]
  5310. 80023f0: 6afa ldr r2, [r7, #44] ; 0x2c
  5311. 80023f2: 0151 lsls r1, r2, #5
  5312. 80023f4: 69fa ldr r2, [r7, #28]
  5313. 80023f6: 440a add r2, r1
  5314. 80023f8: f502 6230 add.w r2, r2, #2816 ; 0xb00
  5315. 80023fc: f043 6300 orr.w r3, r3, #134217728 ; 0x8000000
  5316. 8002400: 6013 str r3, [r2, #0]
  5317. for (i = 0U; i < hpcd->Init.dev_endpoints; i++)
  5318. 8002402: 6afb ldr r3, [r7, #44] ; 0x2c
  5319. 8002404: 3301 adds r3, #1
  5320. 8002406: 62fb str r3, [r7, #44] ; 0x2c
  5321. 8002408: 687b ldr r3, [r7, #4]
  5322. 800240a: 685b ldr r3, [r3, #4]
  5323. 800240c: 6afa ldr r2, [r7, #44] ; 0x2c
  5324. 800240e: 429a cmp r2, r3
  5325. 8002410: d3b3 bcc.n 800237a <HAL_PCD_IRQHandler+0x4f6>
  5326. }
  5327. USBx_DEVICE->DAINTMSK |= 0x10001U;
  5328. 8002412: 69fb ldr r3, [r7, #28]
  5329. 8002414: f503 6300 add.w r3, r3, #2048 ; 0x800
  5330. 8002418: 69db ldr r3, [r3, #28]
  5331. 800241a: 69fa ldr r2, [r7, #28]
  5332. 800241c: f502 6200 add.w r2, r2, #2048 ; 0x800
  5333. 8002420: f043 1301 orr.w r3, r3, #65537 ; 0x10001
  5334. 8002424: 61d3 str r3, [r2, #28]
  5335. if (hpcd->Init.use_dedicated_ep1 != 0U)
  5336. 8002426: 687b ldr r3, [r7, #4]
  5337. 8002428: 6b1b ldr r3, [r3, #48] ; 0x30
  5338. 800242a: 2b00 cmp r3, #0
  5339. 800242c: d016 beq.n 800245c <HAL_PCD_IRQHandler+0x5d8>
  5340. {
  5341. USBx_DEVICE->DOUTEP1MSK |= USB_OTG_DOEPMSK_STUPM |
  5342. 800242e: 69fb ldr r3, [r7, #28]
  5343. 8002430: f503 6300 add.w r3, r3, #2048 ; 0x800
  5344. 8002434: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84
  5345. 8002438: 69fa ldr r2, [r7, #28]
  5346. 800243a: f502 6200 add.w r2, r2, #2048 ; 0x800
  5347. 800243e: f043 030b orr.w r3, r3, #11
  5348. 8002442: f8c2 3084 str.w r3, [r2, #132] ; 0x84
  5349. USB_OTG_DOEPMSK_XFRCM |
  5350. USB_OTG_DOEPMSK_EPDM;
  5351. USBx_DEVICE->DINEP1MSK |= USB_OTG_DIEPMSK_TOM |
  5352. 8002446: 69fb ldr r3, [r7, #28]
  5353. 8002448: f503 6300 add.w r3, r3, #2048 ; 0x800
  5354. 800244c: 6c5b ldr r3, [r3, #68] ; 0x44
  5355. 800244e: 69fa ldr r2, [r7, #28]
  5356. 8002450: f502 6200 add.w r2, r2, #2048 ; 0x800
  5357. 8002454: f043 030b orr.w r3, r3, #11
  5358. 8002458: 6453 str r3, [r2, #68] ; 0x44
  5359. 800245a: e015 b.n 8002488 <HAL_PCD_IRQHandler+0x604>
  5360. USB_OTG_DIEPMSK_XFRCM |
  5361. USB_OTG_DIEPMSK_EPDM;
  5362. }
  5363. else
  5364. {
  5365. USBx_DEVICE->DOEPMSK |= USB_OTG_DOEPMSK_STUPM |
  5366. 800245c: 69fb ldr r3, [r7, #28]
  5367. 800245e: f503 6300 add.w r3, r3, #2048 ; 0x800
  5368. 8002462: 695a ldr r2, [r3, #20]
  5369. 8002464: 69fb ldr r3, [r7, #28]
  5370. 8002466: f503 6300 add.w r3, r3, #2048 ; 0x800
  5371. 800246a: 4619 mov r1, r3
  5372. 800246c: f242 032b movw r3, #8235 ; 0x202b
  5373. 8002470: 4313 orrs r3, r2
  5374. 8002472: 614b str r3, [r1, #20]
  5375. USB_OTG_DOEPMSK_XFRCM |
  5376. USB_OTG_DOEPMSK_EPDM |
  5377. USB_OTG_DOEPMSK_OTEPSPRM |
  5378. USB_OTG_DOEPMSK_NAKM;
  5379. USBx_DEVICE->DIEPMSK |= USB_OTG_DIEPMSK_TOM |
  5380. 8002474: 69fb ldr r3, [r7, #28]
  5381. 8002476: f503 6300 add.w r3, r3, #2048 ; 0x800
  5382. 800247a: 691b ldr r3, [r3, #16]
  5383. 800247c: 69fa ldr r2, [r7, #28]
  5384. 800247e: f502 6200 add.w r2, r2, #2048 ; 0x800
  5385. 8002482: f043 030b orr.w r3, r3, #11
  5386. 8002486: 6113 str r3, [r2, #16]
  5387. USB_OTG_DIEPMSK_XFRCM |
  5388. USB_OTG_DIEPMSK_EPDM;
  5389. }
  5390. /* Set Default Address to 0 */
  5391. USBx_DEVICE->DCFG &= ~USB_OTG_DCFG_DAD;
  5392. 8002488: 69fb ldr r3, [r7, #28]
  5393. 800248a: f503 6300 add.w r3, r3, #2048 ; 0x800
  5394. 800248e: 681b ldr r3, [r3, #0]
  5395. 8002490: 69fa ldr r2, [r7, #28]
  5396. 8002492: f502 6200 add.w r2, r2, #2048 ; 0x800
  5397. 8002496: f423 63fe bic.w r3, r3, #2032 ; 0x7f0
  5398. 800249a: 6013 str r3, [r2, #0]
  5399. /* setup EP0 to receive SETUP packets */
  5400. (void)USB_EP0_OutStart(hpcd->Instance, (uint8_t)hpcd->Init.dma_enable,
  5401. 800249c: 687b ldr r3, [r7, #4]
  5402. 800249e: 6818 ldr r0, [r3, #0]
  5403. 80024a0: 687b ldr r3, [r7, #4]
  5404. 80024a2: 691b ldr r3, [r3, #16]
  5405. 80024a4: b2d9 uxtb r1, r3
  5406. (uint8_t *)hpcd->Setup);
  5407. 80024a6: 687b ldr r3, [r7, #4]
  5408. 80024a8: f503 7371 add.w r3, r3, #964 ; 0x3c4
  5409. (void)USB_EP0_OutStart(hpcd->Instance, (uint8_t)hpcd->Init.dma_enable,
  5410. 80024ac: 461a mov r2, r3
  5411. 80024ae: f004 ff55 bl 800735c <USB_EP0_OutStart>
  5412. __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_USBRST);
  5413. 80024b2: 687b ldr r3, [r7, #4]
  5414. 80024b4: 681b ldr r3, [r3, #0]
  5415. 80024b6: 695a ldr r2, [r3, #20]
  5416. 80024b8: 687b ldr r3, [r7, #4]
  5417. 80024ba: 681b ldr r3, [r3, #0]
  5418. 80024bc: f402 5280 and.w r2, r2, #4096 ; 0x1000
  5419. 80024c0: 615a str r2, [r3, #20]
  5420. }
  5421. /* Handle Enumeration done Interrupt */
  5422. if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_ENUMDNE))
  5423. 80024c2: 687b ldr r3, [r7, #4]
  5424. 80024c4: 681b ldr r3, [r3, #0]
  5425. 80024c6: 4618 mov r0, r3
  5426. 80024c8: f004 fe82 bl 80071d0 <USB_ReadInterrupts>
  5427. 80024cc: 4603 mov r3, r0
  5428. 80024ce: f403 5300 and.w r3, r3, #8192 ; 0x2000
  5429. 80024d2: f5b3 5f00 cmp.w r3, #8192 ; 0x2000
  5430. 80024d6: d124 bne.n 8002522 <HAL_PCD_IRQHandler+0x69e>
  5431. {
  5432. (void)USB_ActivateSetup(hpcd->Instance);
  5433. 80024d8: 687b ldr r3, [r7, #4]
  5434. 80024da: 681b ldr r3, [r3, #0]
  5435. 80024dc: 4618 mov r0, r3
  5436. 80024de: f004 ff19 bl 8007314 <USB_ActivateSetup>
  5437. hpcd->Init.speed = USB_GetDevSpeed(hpcd->Instance);
  5438. 80024e2: 687b ldr r3, [r7, #4]
  5439. 80024e4: 681b ldr r3, [r3, #0]
  5440. 80024e6: 4618 mov r0, r3
  5441. 80024e8: f003 ff73 bl 80063d2 <USB_GetDevSpeed>
  5442. 80024ec: 4603 mov r3, r0
  5443. 80024ee: 461a mov r2, r3
  5444. 80024f0: 687b ldr r3, [r7, #4]
  5445. 80024f2: 60da str r2, [r3, #12]
  5446. /* Set USB Turnaround time */
  5447. (void)USB_SetTurnaroundTime(hpcd->Instance,
  5448. 80024f4: 687b ldr r3, [r7, #4]
  5449. 80024f6: 681c ldr r4, [r3, #0]
  5450. 80024f8: f001 fc62 bl 8003dc0 <HAL_RCC_GetHCLKFreq>
  5451. 80024fc: 4601 mov r1, r0
  5452. HAL_RCC_GetHCLKFreq(),
  5453. (uint8_t)hpcd->Init.speed);
  5454. 80024fe: 687b ldr r3, [r7, #4]
  5455. 8002500: 68db ldr r3, [r3, #12]
  5456. (void)USB_SetTurnaroundTime(hpcd->Instance,
  5457. 8002502: b2db uxtb r3, r3
  5458. 8002504: 461a mov r2, r3
  5459. 8002506: 4620 mov r0, r4
  5460. 8002508: f003 fc7c bl 8005e04 <USB_SetTurnaroundTime>
  5461. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  5462. hpcd->ResetCallback(hpcd);
  5463. #else
  5464. HAL_PCD_ResetCallback(hpcd);
  5465. 800250c: 6878 ldr r0, [r7, #4]
  5466. 800250e: f006 ff14 bl 800933a <HAL_PCD_ResetCallback>
  5467. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  5468. __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_ENUMDNE);
  5469. 8002512: 687b ldr r3, [r7, #4]
  5470. 8002514: 681b ldr r3, [r3, #0]
  5471. 8002516: 695a ldr r2, [r3, #20]
  5472. 8002518: 687b ldr r3, [r7, #4]
  5473. 800251a: 681b ldr r3, [r3, #0]
  5474. 800251c: f402 5200 and.w r2, r2, #8192 ; 0x2000
  5475. 8002520: 615a str r2, [r3, #20]
  5476. }
  5477. /* Handle SOF Interrupt */
  5478. if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_SOF))
  5479. 8002522: 687b ldr r3, [r7, #4]
  5480. 8002524: 681b ldr r3, [r3, #0]
  5481. 8002526: 4618 mov r0, r3
  5482. 8002528: f004 fe52 bl 80071d0 <USB_ReadInterrupts>
  5483. 800252c: 4603 mov r3, r0
  5484. 800252e: f003 0308 and.w r3, r3, #8
  5485. 8002532: 2b08 cmp r3, #8
  5486. 8002534: d10a bne.n 800254c <HAL_PCD_IRQHandler+0x6c8>
  5487. {
  5488. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  5489. hpcd->SOFCallback(hpcd);
  5490. #else
  5491. HAL_PCD_SOFCallback(hpcd);
  5492. 8002536: 6878 ldr r0, [r7, #4]
  5493. 8002538: f006 fef1 bl 800931e <HAL_PCD_SOFCallback>
  5494. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  5495. __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_SOF);
  5496. 800253c: 687b ldr r3, [r7, #4]
  5497. 800253e: 681b ldr r3, [r3, #0]
  5498. 8002540: 695a ldr r2, [r3, #20]
  5499. 8002542: 687b ldr r3, [r7, #4]
  5500. 8002544: 681b ldr r3, [r3, #0]
  5501. 8002546: f002 0208 and.w r2, r2, #8
  5502. 800254a: 615a str r2, [r3, #20]
  5503. }
  5504. /* Handle Incomplete ISO IN Interrupt */
  5505. if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_IISOIXFR))
  5506. 800254c: 687b ldr r3, [r7, #4]
  5507. 800254e: 681b ldr r3, [r3, #0]
  5508. 8002550: 4618 mov r0, r3
  5509. 8002552: f004 fe3d bl 80071d0 <USB_ReadInterrupts>
  5510. 8002556: 4603 mov r3, r0
  5511. 8002558: f403 1380 and.w r3, r3, #1048576 ; 0x100000
  5512. 800255c: f5b3 1f80 cmp.w r3, #1048576 ; 0x100000
  5513. 8002560: d10f bne.n 8002582 <HAL_PCD_IRQHandler+0x6fe>
  5514. {
  5515. /* Keep application checking the corresponding Iso IN endpoint
  5516. causing the incomplete Interrupt */
  5517. epnum = 0U;
  5518. 8002562: 2300 movs r3, #0
  5519. 8002564: 627b str r3, [r7, #36] ; 0x24
  5520. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  5521. hpcd->ISOINIncompleteCallback(hpcd, (uint8_t)epnum);
  5522. #else
  5523. HAL_PCD_ISOINIncompleteCallback(hpcd, (uint8_t)epnum);
  5524. 8002566: 6a7b ldr r3, [r7, #36] ; 0x24
  5525. 8002568: b2db uxtb r3, r3
  5526. 800256a: 4619 mov r1, r3
  5527. 800256c: 6878 ldr r0, [r7, #4]
  5528. 800256e: f006 ff53 bl 8009418 <HAL_PCD_ISOINIncompleteCallback>
  5529. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  5530. __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_IISOIXFR);
  5531. 8002572: 687b ldr r3, [r7, #4]
  5532. 8002574: 681b ldr r3, [r3, #0]
  5533. 8002576: 695a ldr r2, [r3, #20]
  5534. 8002578: 687b ldr r3, [r7, #4]
  5535. 800257a: 681b ldr r3, [r3, #0]
  5536. 800257c: f402 1280 and.w r2, r2, #1048576 ; 0x100000
  5537. 8002580: 615a str r2, [r3, #20]
  5538. }
  5539. /* Handle Incomplete ISO OUT Interrupt */
  5540. if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT))
  5541. 8002582: 687b ldr r3, [r7, #4]
  5542. 8002584: 681b ldr r3, [r3, #0]
  5543. 8002586: 4618 mov r0, r3
  5544. 8002588: f004 fe22 bl 80071d0 <USB_ReadInterrupts>
  5545. 800258c: 4603 mov r3, r0
  5546. 800258e: f403 1300 and.w r3, r3, #2097152 ; 0x200000
  5547. 8002592: f5b3 1f00 cmp.w r3, #2097152 ; 0x200000
  5548. 8002596: d10f bne.n 80025b8 <HAL_PCD_IRQHandler+0x734>
  5549. {
  5550. /* Keep application checking the corresponding Iso OUT endpoint
  5551. causing the incomplete Interrupt */
  5552. epnum = 0U;
  5553. 8002598: 2300 movs r3, #0
  5554. 800259a: 627b str r3, [r7, #36] ; 0x24
  5555. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  5556. hpcd->ISOOUTIncompleteCallback(hpcd, (uint8_t)epnum);
  5557. #else
  5558. HAL_PCD_ISOOUTIncompleteCallback(hpcd, (uint8_t)epnum);
  5559. 800259c: 6a7b ldr r3, [r7, #36] ; 0x24
  5560. 800259e: b2db uxtb r3, r3
  5561. 80025a0: 4619 mov r1, r3
  5562. 80025a2: 6878 ldr r0, [r7, #4]
  5563. 80025a4: f006 ff26 bl 80093f4 <HAL_PCD_ISOOUTIncompleteCallback>
  5564. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  5565. __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT);
  5566. 80025a8: 687b ldr r3, [r7, #4]
  5567. 80025aa: 681b ldr r3, [r3, #0]
  5568. 80025ac: 695a ldr r2, [r3, #20]
  5569. 80025ae: 687b ldr r3, [r7, #4]
  5570. 80025b0: 681b ldr r3, [r3, #0]
  5571. 80025b2: f402 1200 and.w r2, r2, #2097152 ; 0x200000
  5572. 80025b6: 615a str r2, [r3, #20]
  5573. }
  5574. /* Handle Connection event Interrupt */
  5575. if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_SRQINT))
  5576. 80025b8: 687b ldr r3, [r7, #4]
  5577. 80025ba: 681b ldr r3, [r3, #0]
  5578. 80025bc: 4618 mov r0, r3
  5579. 80025be: f004 fe07 bl 80071d0 <USB_ReadInterrupts>
  5580. 80025c2: 4603 mov r3, r0
  5581. 80025c4: f003 4380 and.w r3, r3, #1073741824 ; 0x40000000
  5582. 80025c8: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
  5583. 80025cc: d10a bne.n 80025e4 <HAL_PCD_IRQHandler+0x760>
  5584. {
  5585. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  5586. hpcd->ConnectCallback(hpcd);
  5587. #else
  5588. HAL_PCD_ConnectCallback(hpcd);
  5589. 80025ce: 6878 ldr r0, [r7, #4]
  5590. 80025d0: f006 ff34 bl 800943c <HAL_PCD_ConnectCallback>
  5591. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  5592. __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_SRQINT);
  5593. 80025d4: 687b ldr r3, [r7, #4]
  5594. 80025d6: 681b ldr r3, [r3, #0]
  5595. 80025d8: 695a ldr r2, [r3, #20]
  5596. 80025da: 687b ldr r3, [r7, #4]
  5597. 80025dc: 681b ldr r3, [r3, #0]
  5598. 80025de: f002 4280 and.w r2, r2, #1073741824 ; 0x40000000
  5599. 80025e2: 615a str r2, [r3, #20]
  5600. }
  5601. /* Handle Disconnection event Interrupt */
  5602. if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_OTGINT))
  5603. 80025e4: 687b ldr r3, [r7, #4]
  5604. 80025e6: 681b ldr r3, [r3, #0]
  5605. 80025e8: 4618 mov r0, r3
  5606. 80025ea: f004 fdf1 bl 80071d0 <USB_ReadInterrupts>
  5607. 80025ee: 4603 mov r3, r0
  5608. 80025f0: f003 0304 and.w r3, r3, #4
  5609. 80025f4: 2b04 cmp r3, #4
  5610. 80025f6: d115 bne.n 8002624 <HAL_PCD_IRQHandler+0x7a0>
  5611. {
  5612. temp = hpcd->Instance->GOTGINT;
  5613. 80025f8: 687b ldr r3, [r7, #4]
  5614. 80025fa: 681b ldr r3, [r3, #0]
  5615. 80025fc: 685b ldr r3, [r3, #4]
  5616. 80025fe: 61bb str r3, [r7, #24]
  5617. if ((temp & USB_OTG_GOTGINT_SEDET) == USB_OTG_GOTGINT_SEDET)
  5618. 8002600: 69bb ldr r3, [r7, #24]
  5619. 8002602: f003 0304 and.w r3, r3, #4
  5620. 8002606: 2b00 cmp r3, #0
  5621. 8002608: d002 beq.n 8002610 <HAL_PCD_IRQHandler+0x78c>
  5622. {
  5623. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  5624. hpcd->DisconnectCallback(hpcd);
  5625. #else
  5626. HAL_PCD_DisconnectCallback(hpcd);
  5627. 800260a: 6878 ldr r0, [r7, #4]
  5628. 800260c: f006 ff24 bl 8009458 <HAL_PCD_DisconnectCallback>
  5629. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  5630. }
  5631. hpcd->Instance->GOTGINT |= temp;
  5632. 8002610: 687b ldr r3, [r7, #4]
  5633. 8002612: 681b ldr r3, [r3, #0]
  5634. 8002614: 6859 ldr r1, [r3, #4]
  5635. 8002616: 687b ldr r3, [r7, #4]
  5636. 8002618: 681b ldr r3, [r3, #0]
  5637. 800261a: 69ba ldr r2, [r7, #24]
  5638. 800261c: 430a orrs r2, r1
  5639. 800261e: 605a str r2, [r3, #4]
  5640. 8002620: e000 b.n 8002624 <HAL_PCD_IRQHandler+0x7a0>
  5641. return;
  5642. 8002622: bf00 nop
  5643. }
  5644. }
  5645. }
  5646. 8002624: 3734 adds r7, #52 ; 0x34
  5647. 8002626: 46bd mov sp, r7
  5648. 8002628: bd90 pop {r4, r7, pc}
  5649. 0800262a <HAL_PCD_SetAddress>:
  5650. * @param hpcd PCD handle
  5651. * @param address new device address
  5652. * @retval HAL status
  5653. */
  5654. HAL_StatusTypeDef HAL_PCD_SetAddress(PCD_HandleTypeDef *hpcd, uint8_t address)
  5655. {
  5656. 800262a: b580 push {r7, lr}
  5657. 800262c: b082 sub sp, #8
  5658. 800262e: af00 add r7, sp, #0
  5659. 8002630: 6078 str r0, [r7, #4]
  5660. 8002632: 460b mov r3, r1
  5661. 8002634: 70fb strb r3, [r7, #3]
  5662. __HAL_LOCK(hpcd);
  5663. 8002636: 687b ldr r3, [r7, #4]
  5664. 8002638: f893 33bc ldrb.w r3, [r3, #956] ; 0x3bc
  5665. 800263c: 2b01 cmp r3, #1
  5666. 800263e: d101 bne.n 8002644 <HAL_PCD_SetAddress+0x1a>
  5667. 8002640: 2302 movs r3, #2
  5668. 8002642: e013 b.n 800266c <HAL_PCD_SetAddress+0x42>
  5669. 8002644: 687b ldr r3, [r7, #4]
  5670. 8002646: 2201 movs r2, #1
  5671. 8002648: f883 23bc strb.w r2, [r3, #956] ; 0x3bc
  5672. hpcd->USB_Address = address;
  5673. 800264c: 687b ldr r3, [r7, #4]
  5674. 800264e: 78fa ldrb r2, [r7, #3]
  5675. 8002650: f883 2038 strb.w r2, [r3, #56] ; 0x38
  5676. (void)USB_SetDevAddress(hpcd->Instance, address);
  5677. 8002654: 687b ldr r3, [r7, #4]
  5678. 8002656: 681b ldr r3, [r3, #0]
  5679. 8002658: 78fa ldrb r2, [r7, #3]
  5680. 800265a: 4611 mov r1, r2
  5681. 800265c: 4618 mov r0, r3
  5682. 800265e: f004 fd4f bl 8007100 <USB_SetDevAddress>
  5683. __HAL_UNLOCK(hpcd);
  5684. 8002662: 687b ldr r3, [r7, #4]
  5685. 8002664: 2200 movs r2, #0
  5686. 8002666: f883 23bc strb.w r2, [r3, #956] ; 0x3bc
  5687. return HAL_OK;
  5688. 800266a: 2300 movs r3, #0
  5689. }
  5690. 800266c: 4618 mov r0, r3
  5691. 800266e: 3708 adds r7, #8
  5692. 8002670: 46bd mov sp, r7
  5693. 8002672: bd80 pop {r7, pc}
  5694. 08002674 <HAL_PCD_EP_Open>:
  5695. * @param ep_type endpoint type
  5696. * @retval HAL status
  5697. */
  5698. HAL_StatusTypeDef HAL_PCD_EP_Open(PCD_HandleTypeDef *hpcd, uint8_t ep_addr,
  5699. uint16_t ep_mps, uint8_t ep_type)
  5700. {
  5701. 8002674: b580 push {r7, lr}
  5702. 8002676: b084 sub sp, #16
  5703. 8002678: af00 add r7, sp, #0
  5704. 800267a: 6078 str r0, [r7, #4]
  5705. 800267c: 4608 mov r0, r1
  5706. 800267e: 4611 mov r1, r2
  5707. 8002680: 461a mov r2, r3
  5708. 8002682: 4603 mov r3, r0
  5709. 8002684: 70fb strb r3, [r7, #3]
  5710. 8002686: 460b mov r3, r1
  5711. 8002688: 803b strh r3, [r7, #0]
  5712. 800268a: 4613 mov r3, r2
  5713. 800268c: 70bb strb r3, [r7, #2]
  5714. HAL_StatusTypeDef ret = HAL_OK;
  5715. 800268e: 2300 movs r3, #0
  5716. 8002690: 72fb strb r3, [r7, #11]
  5717. PCD_EPTypeDef *ep;
  5718. if ((ep_addr & 0x80U) == 0x80U)
  5719. 8002692: f997 3003 ldrsb.w r3, [r7, #3]
  5720. 8002696: 2b00 cmp r3, #0
  5721. 8002698: da0f bge.n 80026ba <HAL_PCD_EP_Open+0x46>
  5722. {
  5723. ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK];
  5724. 800269a: 78fb ldrb r3, [r7, #3]
  5725. 800269c: f003 020f and.w r2, r3, #15
  5726. 80026a0: 4613 mov r3, r2
  5727. 80026a2: 00db lsls r3, r3, #3
  5728. 80026a4: 1a9b subs r3, r3, r2
  5729. 80026a6: 009b lsls r3, r3, #2
  5730. 80026a8: 3338 adds r3, #56 ; 0x38
  5731. 80026aa: 687a ldr r2, [r7, #4]
  5732. 80026ac: 4413 add r3, r2
  5733. 80026ae: 3304 adds r3, #4
  5734. 80026b0: 60fb str r3, [r7, #12]
  5735. ep->is_in = 1U;
  5736. 80026b2: 68fb ldr r3, [r7, #12]
  5737. 80026b4: 2201 movs r2, #1
  5738. 80026b6: 705a strb r2, [r3, #1]
  5739. 80026b8: e00f b.n 80026da <HAL_PCD_EP_Open+0x66>
  5740. }
  5741. else
  5742. {
  5743. ep = &hpcd->OUT_ep[ep_addr & EP_ADDR_MSK];
  5744. 80026ba: 78fb ldrb r3, [r7, #3]
  5745. 80026bc: f003 020f and.w r2, r3, #15
  5746. 80026c0: 4613 mov r3, r2
  5747. 80026c2: 00db lsls r3, r3, #3
  5748. 80026c4: 1a9b subs r3, r3, r2
  5749. 80026c6: 009b lsls r3, r3, #2
  5750. 80026c8: f503 73fc add.w r3, r3, #504 ; 0x1f8
  5751. 80026cc: 687a ldr r2, [r7, #4]
  5752. 80026ce: 4413 add r3, r2
  5753. 80026d0: 3304 adds r3, #4
  5754. 80026d2: 60fb str r3, [r7, #12]
  5755. ep->is_in = 0U;
  5756. 80026d4: 68fb ldr r3, [r7, #12]
  5757. 80026d6: 2200 movs r2, #0
  5758. 80026d8: 705a strb r2, [r3, #1]
  5759. }
  5760. ep->num = ep_addr & EP_ADDR_MSK;
  5761. 80026da: 78fb ldrb r3, [r7, #3]
  5762. 80026dc: f003 030f and.w r3, r3, #15
  5763. 80026e0: b2da uxtb r2, r3
  5764. 80026e2: 68fb ldr r3, [r7, #12]
  5765. 80026e4: 701a strb r2, [r3, #0]
  5766. ep->maxpacket = ep_mps;
  5767. 80026e6: 883a ldrh r2, [r7, #0]
  5768. 80026e8: 68fb ldr r3, [r7, #12]
  5769. 80026ea: 609a str r2, [r3, #8]
  5770. ep->type = ep_type;
  5771. 80026ec: 68fb ldr r3, [r7, #12]
  5772. 80026ee: 78ba ldrb r2, [r7, #2]
  5773. 80026f0: 70da strb r2, [r3, #3]
  5774. if (ep->is_in != 0U)
  5775. 80026f2: 68fb ldr r3, [r7, #12]
  5776. 80026f4: 785b ldrb r3, [r3, #1]
  5777. 80026f6: 2b00 cmp r3, #0
  5778. 80026f8: d004 beq.n 8002704 <HAL_PCD_EP_Open+0x90>
  5779. {
  5780. /* Assign a Tx FIFO */
  5781. ep->tx_fifo_num = ep->num;
  5782. 80026fa: 68fb ldr r3, [r7, #12]
  5783. 80026fc: 781b ldrb r3, [r3, #0]
  5784. 80026fe: b29a uxth r2, r3
  5785. 8002700: 68fb ldr r3, [r7, #12]
  5786. 8002702: 80da strh r2, [r3, #6]
  5787. }
  5788. /* Set initial data PID. */
  5789. if (ep_type == EP_TYPE_BULK)
  5790. 8002704: 78bb ldrb r3, [r7, #2]
  5791. 8002706: 2b02 cmp r3, #2
  5792. 8002708: d102 bne.n 8002710 <HAL_PCD_EP_Open+0x9c>
  5793. {
  5794. ep->data_pid_start = 0U;
  5795. 800270a: 68fb ldr r3, [r7, #12]
  5796. 800270c: 2200 movs r2, #0
  5797. 800270e: 711a strb r2, [r3, #4]
  5798. }
  5799. __HAL_LOCK(hpcd);
  5800. 8002710: 687b ldr r3, [r7, #4]
  5801. 8002712: f893 33bc ldrb.w r3, [r3, #956] ; 0x3bc
  5802. 8002716: 2b01 cmp r3, #1
  5803. 8002718: d101 bne.n 800271e <HAL_PCD_EP_Open+0xaa>
  5804. 800271a: 2302 movs r3, #2
  5805. 800271c: e00e b.n 800273c <HAL_PCD_EP_Open+0xc8>
  5806. 800271e: 687b ldr r3, [r7, #4]
  5807. 8002720: 2201 movs r2, #1
  5808. 8002722: f883 23bc strb.w r2, [r3, #956] ; 0x3bc
  5809. (void)USB_ActivateEndpoint(hpcd->Instance, ep);
  5810. 8002726: 687b ldr r3, [r7, #4]
  5811. 8002728: 681b ldr r3, [r3, #0]
  5812. 800272a: 68f9 ldr r1, [r7, #12]
  5813. 800272c: 4618 mov r0, r3
  5814. 800272e: f003 fe75 bl 800641c <USB_ActivateEndpoint>
  5815. __HAL_UNLOCK(hpcd);
  5816. 8002732: 687b ldr r3, [r7, #4]
  5817. 8002734: 2200 movs r2, #0
  5818. 8002736: f883 23bc strb.w r2, [r3, #956] ; 0x3bc
  5819. return ret;
  5820. 800273a: 7afb ldrb r3, [r7, #11]
  5821. }
  5822. 800273c: 4618 mov r0, r3
  5823. 800273e: 3710 adds r7, #16
  5824. 8002740: 46bd mov sp, r7
  5825. 8002742: bd80 pop {r7, pc}
  5826. 08002744 <HAL_PCD_EP_Close>:
  5827. * @param hpcd PCD handle
  5828. * @param ep_addr endpoint address
  5829. * @retval HAL status
  5830. */
  5831. HAL_StatusTypeDef HAL_PCD_EP_Close(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
  5832. {
  5833. 8002744: b580 push {r7, lr}
  5834. 8002746: b084 sub sp, #16
  5835. 8002748: af00 add r7, sp, #0
  5836. 800274a: 6078 str r0, [r7, #4]
  5837. 800274c: 460b mov r3, r1
  5838. 800274e: 70fb strb r3, [r7, #3]
  5839. PCD_EPTypeDef *ep;
  5840. if ((ep_addr & 0x80U) == 0x80U)
  5841. 8002750: f997 3003 ldrsb.w r3, [r7, #3]
  5842. 8002754: 2b00 cmp r3, #0
  5843. 8002756: da0f bge.n 8002778 <HAL_PCD_EP_Close+0x34>
  5844. {
  5845. ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK];
  5846. 8002758: 78fb ldrb r3, [r7, #3]
  5847. 800275a: f003 020f and.w r2, r3, #15
  5848. 800275e: 4613 mov r3, r2
  5849. 8002760: 00db lsls r3, r3, #3
  5850. 8002762: 1a9b subs r3, r3, r2
  5851. 8002764: 009b lsls r3, r3, #2
  5852. 8002766: 3338 adds r3, #56 ; 0x38
  5853. 8002768: 687a ldr r2, [r7, #4]
  5854. 800276a: 4413 add r3, r2
  5855. 800276c: 3304 adds r3, #4
  5856. 800276e: 60fb str r3, [r7, #12]
  5857. ep->is_in = 1U;
  5858. 8002770: 68fb ldr r3, [r7, #12]
  5859. 8002772: 2201 movs r2, #1
  5860. 8002774: 705a strb r2, [r3, #1]
  5861. 8002776: e00f b.n 8002798 <HAL_PCD_EP_Close+0x54>
  5862. }
  5863. else
  5864. {
  5865. ep = &hpcd->OUT_ep[ep_addr & EP_ADDR_MSK];
  5866. 8002778: 78fb ldrb r3, [r7, #3]
  5867. 800277a: f003 020f and.w r2, r3, #15
  5868. 800277e: 4613 mov r3, r2
  5869. 8002780: 00db lsls r3, r3, #3
  5870. 8002782: 1a9b subs r3, r3, r2
  5871. 8002784: 009b lsls r3, r3, #2
  5872. 8002786: f503 73fc add.w r3, r3, #504 ; 0x1f8
  5873. 800278a: 687a ldr r2, [r7, #4]
  5874. 800278c: 4413 add r3, r2
  5875. 800278e: 3304 adds r3, #4
  5876. 8002790: 60fb str r3, [r7, #12]
  5877. ep->is_in = 0U;
  5878. 8002792: 68fb ldr r3, [r7, #12]
  5879. 8002794: 2200 movs r2, #0
  5880. 8002796: 705a strb r2, [r3, #1]
  5881. }
  5882. ep->num = ep_addr & EP_ADDR_MSK;
  5883. 8002798: 78fb ldrb r3, [r7, #3]
  5884. 800279a: f003 030f and.w r3, r3, #15
  5885. 800279e: b2da uxtb r2, r3
  5886. 80027a0: 68fb ldr r3, [r7, #12]
  5887. 80027a2: 701a strb r2, [r3, #0]
  5888. __HAL_LOCK(hpcd);
  5889. 80027a4: 687b ldr r3, [r7, #4]
  5890. 80027a6: f893 33bc ldrb.w r3, [r3, #956] ; 0x3bc
  5891. 80027aa: 2b01 cmp r3, #1
  5892. 80027ac: d101 bne.n 80027b2 <HAL_PCD_EP_Close+0x6e>
  5893. 80027ae: 2302 movs r3, #2
  5894. 80027b0: e00e b.n 80027d0 <HAL_PCD_EP_Close+0x8c>
  5895. 80027b2: 687b ldr r3, [r7, #4]
  5896. 80027b4: 2201 movs r2, #1
  5897. 80027b6: f883 23bc strb.w r2, [r3, #956] ; 0x3bc
  5898. (void)USB_DeactivateEndpoint(hpcd->Instance, ep);
  5899. 80027ba: 687b ldr r3, [r7, #4]
  5900. 80027bc: 681b ldr r3, [r3, #0]
  5901. 80027be: 68f9 ldr r1, [r7, #12]
  5902. 80027c0: 4618 mov r0, r3
  5903. 80027c2: f003 feb3 bl 800652c <USB_DeactivateEndpoint>
  5904. __HAL_UNLOCK(hpcd);
  5905. 80027c6: 687b ldr r3, [r7, #4]
  5906. 80027c8: 2200 movs r2, #0
  5907. 80027ca: f883 23bc strb.w r2, [r3, #956] ; 0x3bc
  5908. return HAL_OK;
  5909. 80027ce: 2300 movs r3, #0
  5910. }
  5911. 80027d0: 4618 mov r0, r3
  5912. 80027d2: 3710 adds r7, #16
  5913. 80027d4: 46bd mov sp, r7
  5914. 80027d6: bd80 pop {r7, pc}
  5915. 080027d8 <HAL_PCD_EP_Receive>:
  5916. * @param pBuf pointer to the reception buffer
  5917. * @param len amount of data to be received
  5918. * @retval HAL status
  5919. */
  5920. HAL_StatusTypeDef HAL_PCD_EP_Receive(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len)
  5921. {
  5922. 80027d8: b580 push {r7, lr}
  5923. 80027da: b086 sub sp, #24
  5924. 80027dc: af00 add r7, sp, #0
  5925. 80027de: 60f8 str r0, [r7, #12]
  5926. 80027e0: 607a str r2, [r7, #4]
  5927. 80027e2: 603b str r3, [r7, #0]
  5928. 80027e4: 460b mov r3, r1
  5929. 80027e6: 72fb strb r3, [r7, #11]
  5930. PCD_EPTypeDef *ep;
  5931. ep = &hpcd->OUT_ep[ep_addr & EP_ADDR_MSK];
  5932. 80027e8: 7afb ldrb r3, [r7, #11]
  5933. 80027ea: f003 020f and.w r2, r3, #15
  5934. 80027ee: 4613 mov r3, r2
  5935. 80027f0: 00db lsls r3, r3, #3
  5936. 80027f2: 1a9b subs r3, r3, r2
  5937. 80027f4: 009b lsls r3, r3, #2
  5938. 80027f6: f503 73fc add.w r3, r3, #504 ; 0x1f8
  5939. 80027fa: 68fa ldr r2, [r7, #12]
  5940. 80027fc: 4413 add r3, r2
  5941. 80027fe: 3304 adds r3, #4
  5942. 8002800: 617b str r3, [r7, #20]
  5943. /*setup and start the Xfer */
  5944. ep->xfer_buff = pBuf;
  5945. 8002802: 697b ldr r3, [r7, #20]
  5946. 8002804: 687a ldr r2, [r7, #4]
  5947. 8002806: 60da str r2, [r3, #12]
  5948. ep->xfer_len = len;
  5949. 8002808: 697b ldr r3, [r7, #20]
  5950. 800280a: 683a ldr r2, [r7, #0]
  5951. 800280c: 615a str r2, [r3, #20]
  5952. ep->xfer_count = 0U;
  5953. 800280e: 697b ldr r3, [r7, #20]
  5954. 8002810: 2200 movs r2, #0
  5955. 8002812: 619a str r2, [r3, #24]
  5956. ep->is_in = 0U;
  5957. 8002814: 697b ldr r3, [r7, #20]
  5958. 8002816: 2200 movs r2, #0
  5959. 8002818: 705a strb r2, [r3, #1]
  5960. ep->num = ep_addr & EP_ADDR_MSK;
  5961. 800281a: 7afb ldrb r3, [r7, #11]
  5962. 800281c: f003 030f and.w r3, r3, #15
  5963. 8002820: b2da uxtb r2, r3
  5964. 8002822: 697b ldr r3, [r7, #20]
  5965. 8002824: 701a strb r2, [r3, #0]
  5966. if (hpcd->Init.dma_enable == 1U)
  5967. 8002826: 68fb ldr r3, [r7, #12]
  5968. 8002828: 691b ldr r3, [r3, #16]
  5969. 800282a: 2b01 cmp r3, #1
  5970. 800282c: d102 bne.n 8002834 <HAL_PCD_EP_Receive+0x5c>
  5971. {
  5972. ep->dma_addr = (uint32_t)pBuf;
  5973. 800282e: 687a ldr r2, [r7, #4]
  5974. 8002830: 697b ldr r3, [r7, #20]
  5975. 8002832: 611a str r2, [r3, #16]
  5976. }
  5977. if ((ep_addr & EP_ADDR_MSK) == 0U)
  5978. 8002834: 7afb ldrb r3, [r7, #11]
  5979. 8002836: f003 030f and.w r3, r3, #15
  5980. 800283a: 2b00 cmp r3, #0
  5981. 800283c: d109 bne.n 8002852 <HAL_PCD_EP_Receive+0x7a>
  5982. {
  5983. (void)USB_EP0StartXfer(hpcd->Instance, ep, (uint8_t)hpcd->Init.dma_enable);
  5984. 800283e: 68fb ldr r3, [r7, #12]
  5985. 8002840: 6818 ldr r0, [r3, #0]
  5986. 8002842: 68fb ldr r3, [r7, #12]
  5987. 8002844: 691b ldr r3, [r3, #16]
  5988. 8002846: b2db uxtb r3, r3
  5989. 8002848: 461a mov r2, r3
  5990. 800284a: 6979 ldr r1, [r7, #20]
  5991. 800284c: f004 f996 bl 8006b7c <USB_EP0StartXfer>
  5992. 8002850: e008 b.n 8002864 <HAL_PCD_EP_Receive+0x8c>
  5993. }
  5994. else
  5995. {
  5996. (void)USB_EPStartXfer(hpcd->Instance, ep, (uint8_t)hpcd->Init.dma_enable);
  5997. 8002852: 68fb ldr r3, [r7, #12]
  5998. 8002854: 6818 ldr r0, [r3, #0]
  5999. 8002856: 68fb ldr r3, [r7, #12]
  6000. 8002858: 691b ldr r3, [r3, #16]
  6001. 800285a: b2db uxtb r3, r3
  6002. 800285c: 461a mov r2, r3
  6003. 800285e: 6979 ldr r1, [r7, #20]
  6004. 8002860: f003 ff40 bl 80066e4 <USB_EPStartXfer>
  6005. }
  6006. return HAL_OK;
  6007. 8002864: 2300 movs r3, #0
  6008. }
  6009. 8002866: 4618 mov r0, r3
  6010. 8002868: 3718 adds r7, #24
  6011. 800286a: 46bd mov sp, r7
  6012. 800286c: bd80 pop {r7, pc}
  6013. 0800286e <HAL_PCD_EP_GetRxCount>:
  6014. * @param hpcd PCD handle
  6015. * @param ep_addr endpoint address
  6016. * @retval Data Size
  6017. */
  6018. uint32_t HAL_PCD_EP_GetRxCount(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
  6019. {
  6020. 800286e: b480 push {r7}
  6021. 8002870: b083 sub sp, #12
  6022. 8002872: af00 add r7, sp, #0
  6023. 8002874: 6078 str r0, [r7, #4]
  6024. 8002876: 460b mov r3, r1
  6025. 8002878: 70fb strb r3, [r7, #3]
  6026. return hpcd->OUT_ep[ep_addr & EP_ADDR_MSK].xfer_count;
  6027. 800287a: 78fb ldrb r3, [r7, #3]
  6028. 800287c: f003 020f and.w r2, r3, #15
  6029. 8002880: 6879 ldr r1, [r7, #4]
  6030. 8002882: 4613 mov r3, r2
  6031. 8002884: 00db lsls r3, r3, #3
  6032. 8002886: 1a9b subs r3, r3, r2
  6033. 8002888: 009b lsls r3, r3, #2
  6034. 800288a: 440b add r3, r1
  6035. 800288c: f503 7305 add.w r3, r3, #532 ; 0x214
  6036. 8002890: 681b ldr r3, [r3, #0]
  6037. }
  6038. 8002892: 4618 mov r0, r3
  6039. 8002894: 370c adds r7, #12
  6040. 8002896: 46bd mov sp, r7
  6041. 8002898: f85d 7b04 ldr.w r7, [sp], #4
  6042. 800289c: 4770 bx lr
  6043. 0800289e <HAL_PCD_EP_Transmit>:
  6044. * @param pBuf pointer to the transmission buffer
  6045. * @param len amount of data to be sent
  6046. * @retval HAL status
  6047. */
  6048. HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len)
  6049. {
  6050. 800289e: b580 push {r7, lr}
  6051. 80028a0: b086 sub sp, #24
  6052. 80028a2: af00 add r7, sp, #0
  6053. 80028a4: 60f8 str r0, [r7, #12]
  6054. 80028a6: 607a str r2, [r7, #4]
  6055. 80028a8: 603b str r3, [r7, #0]
  6056. 80028aa: 460b mov r3, r1
  6057. 80028ac: 72fb strb r3, [r7, #11]
  6058. PCD_EPTypeDef *ep;
  6059. ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK];
  6060. 80028ae: 7afb ldrb r3, [r7, #11]
  6061. 80028b0: f003 020f and.w r2, r3, #15
  6062. 80028b4: 4613 mov r3, r2
  6063. 80028b6: 00db lsls r3, r3, #3
  6064. 80028b8: 1a9b subs r3, r3, r2
  6065. 80028ba: 009b lsls r3, r3, #2
  6066. 80028bc: 3338 adds r3, #56 ; 0x38
  6067. 80028be: 68fa ldr r2, [r7, #12]
  6068. 80028c0: 4413 add r3, r2
  6069. 80028c2: 3304 adds r3, #4
  6070. 80028c4: 617b str r3, [r7, #20]
  6071. /*setup and start the Xfer */
  6072. ep->xfer_buff = pBuf;
  6073. 80028c6: 697b ldr r3, [r7, #20]
  6074. 80028c8: 687a ldr r2, [r7, #4]
  6075. 80028ca: 60da str r2, [r3, #12]
  6076. ep->xfer_len = len;
  6077. 80028cc: 697b ldr r3, [r7, #20]
  6078. 80028ce: 683a ldr r2, [r7, #0]
  6079. 80028d0: 615a str r2, [r3, #20]
  6080. ep->xfer_count = 0U;
  6081. 80028d2: 697b ldr r3, [r7, #20]
  6082. 80028d4: 2200 movs r2, #0
  6083. 80028d6: 619a str r2, [r3, #24]
  6084. ep->is_in = 1U;
  6085. 80028d8: 697b ldr r3, [r7, #20]
  6086. 80028da: 2201 movs r2, #1
  6087. 80028dc: 705a strb r2, [r3, #1]
  6088. ep->num = ep_addr & EP_ADDR_MSK;
  6089. 80028de: 7afb ldrb r3, [r7, #11]
  6090. 80028e0: f003 030f and.w r3, r3, #15
  6091. 80028e4: b2da uxtb r2, r3
  6092. 80028e6: 697b ldr r3, [r7, #20]
  6093. 80028e8: 701a strb r2, [r3, #0]
  6094. if (hpcd->Init.dma_enable == 1U)
  6095. 80028ea: 68fb ldr r3, [r7, #12]
  6096. 80028ec: 691b ldr r3, [r3, #16]
  6097. 80028ee: 2b01 cmp r3, #1
  6098. 80028f0: d102 bne.n 80028f8 <HAL_PCD_EP_Transmit+0x5a>
  6099. {
  6100. ep->dma_addr = (uint32_t)pBuf;
  6101. 80028f2: 687a ldr r2, [r7, #4]
  6102. 80028f4: 697b ldr r3, [r7, #20]
  6103. 80028f6: 611a str r2, [r3, #16]
  6104. }
  6105. if ((ep_addr & EP_ADDR_MSK) == 0U)
  6106. 80028f8: 7afb ldrb r3, [r7, #11]
  6107. 80028fa: f003 030f and.w r3, r3, #15
  6108. 80028fe: 2b00 cmp r3, #0
  6109. 8002900: d109 bne.n 8002916 <HAL_PCD_EP_Transmit+0x78>
  6110. {
  6111. (void)USB_EP0StartXfer(hpcd->Instance, ep, (uint8_t)hpcd->Init.dma_enable);
  6112. 8002902: 68fb ldr r3, [r7, #12]
  6113. 8002904: 6818 ldr r0, [r3, #0]
  6114. 8002906: 68fb ldr r3, [r7, #12]
  6115. 8002908: 691b ldr r3, [r3, #16]
  6116. 800290a: b2db uxtb r3, r3
  6117. 800290c: 461a mov r2, r3
  6118. 800290e: 6979 ldr r1, [r7, #20]
  6119. 8002910: f004 f934 bl 8006b7c <USB_EP0StartXfer>
  6120. 8002914: e008 b.n 8002928 <HAL_PCD_EP_Transmit+0x8a>
  6121. }
  6122. else
  6123. {
  6124. (void)USB_EPStartXfer(hpcd->Instance, ep, (uint8_t)hpcd->Init.dma_enable);
  6125. 8002916: 68fb ldr r3, [r7, #12]
  6126. 8002918: 6818 ldr r0, [r3, #0]
  6127. 800291a: 68fb ldr r3, [r7, #12]
  6128. 800291c: 691b ldr r3, [r3, #16]
  6129. 800291e: b2db uxtb r3, r3
  6130. 8002920: 461a mov r2, r3
  6131. 8002922: 6979 ldr r1, [r7, #20]
  6132. 8002924: f003 fede bl 80066e4 <USB_EPStartXfer>
  6133. }
  6134. return HAL_OK;
  6135. 8002928: 2300 movs r3, #0
  6136. }
  6137. 800292a: 4618 mov r0, r3
  6138. 800292c: 3718 adds r7, #24
  6139. 800292e: 46bd mov sp, r7
  6140. 8002930: bd80 pop {r7, pc}
  6141. 08002932 <HAL_PCD_EP_SetStall>:
  6142. * @param hpcd PCD handle
  6143. * @param ep_addr endpoint address
  6144. * @retval HAL status
  6145. */
  6146. HAL_StatusTypeDef HAL_PCD_EP_SetStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
  6147. {
  6148. 8002932: b580 push {r7, lr}
  6149. 8002934: b084 sub sp, #16
  6150. 8002936: af00 add r7, sp, #0
  6151. 8002938: 6078 str r0, [r7, #4]
  6152. 800293a: 460b mov r3, r1
  6153. 800293c: 70fb strb r3, [r7, #3]
  6154. PCD_EPTypeDef *ep;
  6155. if (((uint32_t)ep_addr & EP_ADDR_MSK) > hpcd->Init.dev_endpoints)
  6156. 800293e: 78fb ldrb r3, [r7, #3]
  6157. 8002940: f003 020f and.w r2, r3, #15
  6158. 8002944: 687b ldr r3, [r7, #4]
  6159. 8002946: 685b ldr r3, [r3, #4]
  6160. 8002948: 429a cmp r2, r3
  6161. 800294a: d901 bls.n 8002950 <HAL_PCD_EP_SetStall+0x1e>
  6162. {
  6163. return HAL_ERROR;
  6164. 800294c: 2301 movs r3, #1
  6165. 800294e: e050 b.n 80029f2 <HAL_PCD_EP_SetStall+0xc0>
  6166. }
  6167. if ((0x80U & ep_addr) == 0x80U)
  6168. 8002950: f997 3003 ldrsb.w r3, [r7, #3]
  6169. 8002954: 2b00 cmp r3, #0
  6170. 8002956: da0f bge.n 8002978 <HAL_PCD_EP_SetStall+0x46>
  6171. {
  6172. ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK];
  6173. 8002958: 78fb ldrb r3, [r7, #3]
  6174. 800295a: f003 020f and.w r2, r3, #15
  6175. 800295e: 4613 mov r3, r2
  6176. 8002960: 00db lsls r3, r3, #3
  6177. 8002962: 1a9b subs r3, r3, r2
  6178. 8002964: 009b lsls r3, r3, #2
  6179. 8002966: 3338 adds r3, #56 ; 0x38
  6180. 8002968: 687a ldr r2, [r7, #4]
  6181. 800296a: 4413 add r3, r2
  6182. 800296c: 3304 adds r3, #4
  6183. 800296e: 60fb str r3, [r7, #12]
  6184. ep->is_in = 1U;
  6185. 8002970: 68fb ldr r3, [r7, #12]
  6186. 8002972: 2201 movs r2, #1
  6187. 8002974: 705a strb r2, [r3, #1]
  6188. 8002976: e00d b.n 8002994 <HAL_PCD_EP_SetStall+0x62>
  6189. }
  6190. else
  6191. {
  6192. ep = &hpcd->OUT_ep[ep_addr];
  6193. 8002978: 78fa ldrb r2, [r7, #3]
  6194. 800297a: 4613 mov r3, r2
  6195. 800297c: 00db lsls r3, r3, #3
  6196. 800297e: 1a9b subs r3, r3, r2
  6197. 8002980: 009b lsls r3, r3, #2
  6198. 8002982: f503 73fc add.w r3, r3, #504 ; 0x1f8
  6199. 8002986: 687a ldr r2, [r7, #4]
  6200. 8002988: 4413 add r3, r2
  6201. 800298a: 3304 adds r3, #4
  6202. 800298c: 60fb str r3, [r7, #12]
  6203. ep->is_in = 0U;
  6204. 800298e: 68fb ldr r3, [r7, #12]
  6205. 8002990: 2200 movs r2, #0
  6206. 8002992: 705a strb r2, [r3, #1]
  6207. }
  6208. ep->is_stall = 1U;
  6209. 8002994: 68fb ldr r3, [r7, #12]
  6210. 8002996: 2201 movs r2, #1
  6211. 8002998: 709a strb r2, [r3, #2]
  6212. ep->num = ep_addr & EP_ADDR_MSK;
  6213. 800299a: 78fb ldrb r3, [r7, #3]
  6214. 800299c: f003 030f and.w r3, r3, #15
  6215. 80029a0: b2da uxtb r2, r3
  6216. 80029a2: 68fb ldr r3, [r7, #12]
  6217. 80029a4: 701a strb r2, [r3, #0]
  6218. __HAL_LOCK(hpcd);
  6219. 80029a6: 687b ldr r3, [r7, #4]
  6220. 80029a8: f893 33bc ldrb.w r3, [r3, #956] ; 0x3bc
  6221. 80029ac: 2b01 cmp r3, #1
  6222. 80029ae: d101 bne.n 80029b4 <HAL_PCD_EP_SetStall+0x82>
  6223. 80029b0: 2302 movs r3, #2
  6224. 80029b2: e01e b.n 80029f2 <HAL_PCD_EP_SetStall+0xc0>
  6225. 80029b4: 687b ldr r3, [r7, #4]
  6226. 80029b6: 2201 movs r2, #1
  6227. 80029b8: f883 23bc strb.w r2, [r3, #956] ; 0x3bc
  6228. (void)USB_EPSetStall(hpcd->Instance, ep);
  6229. 80029bc: 687b ldr r3, [r7, #4]
  6230. 80029be: 681b ldr r3, [r3, #0]
  6231. 80029c0: 68f9 ldr r1, [r7, #12]
  6232. 80029c2: 4618 mov r0, r3
  6233. 80029c4: f004 fac8 bl 8006f58 <USB_EPSetStall>
  6234. if ((ep_addr & EP_ADDR_MSK) == 0U)
  6235. 80029c8: 78fb ldrb r3, [r7, #3]
  6236. 80029ca: f003 030f and.w r3, r3, #15
  6237. 80029ce: 2b00 cmp r3, #0
  6238. 80029d0: d10a bne.n 80029e8 <HAL_PCD_EP_SetStall+0xb6>
  6239. {
  6240. (void)USB_EP0_OutStart(hpcd->Instance, (uint8_t)hpcd->Init.dma_enable, (uint8_t *)hpcd->Setup);
  6241. 80029d2: 687b ldr r3, [r7, #4]
  6242. 80029d4: 6818 ldr r0, [r3, #0]
  6243. 80029d6: 687b ldr r3, [r7, #4]
  6244. 80029d8: 691b ldr r3, [r3, #16]
  6245. 80029da: b2d9 uxtb r1, r3
  6246. 80029dc: 687b ldr r3, [r7, #4]
  6247. 80029de: f503 7371 add.w r3, r3, #964 ; 0x3c4
  6248. 80029e2: 461a mov r2, r3
  6249. 80029e4: f004 fcba bl 800735c <USB_EP0_OutStart>
  6250. }
  6251. __HAL_UNLOCK(hpcd);
  6252. 80029e8: 687b ldr r3, [r7, #4]
  6253. 80029ea: 2200 movs r2, #0
  6254. 80029ec: f883 23bc strb.w r2, [r3, #956] ; 0x3bc
  6255. return HAL_OK;
  6256. 80029f0: 2300 movs r3, #0
  6257. }
  6258. 80029f2: 4618 mov r0, r3
  6259. 80029f4: 3710 adds r7, #16
  6260. 80029f6: 46bd mov sp, r7
  6261. 80029f8: bd80 pop {r7, pc}
  6262. 080029fa <HAL_PCD_EP_ClrStall>:
  6263. * @param hpcd PCD handle
  6264. * @param ep_addr endpoint address
  6265. * @retval HAL status
  6266. */
  6267. HAL_StatusTypeDef HAL_PCD_EP_ClrStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
  6268. {
  6269. 80029fa: b580 push {r7, lr}
  6270. 80029fc: b084 sub sp, #16
  6271. 80029fe: af00 add r7, sp, #0
  6272. 8002a00: 6078 str r0, [r7, #4]
  6273. 8002a02: 460b mov r3, r1
  6274. 8002a04: 70fb strb r3, [r7, #3]
  6275. PCD_EPTypeDef *ep;
  6276. if (((uint32_t)ep_addr & 0x0FU) > hpcd->Init.dev_endpoints)
  6277. 8002a06: 78fb ldrb r3, [r7, #3]
  6278. 8002a08: f003 020f and.w r2, r3, #15
  6279. 8002a0c: 687b ldr r3, [r7, #4]
  6280. 8002a0e: 685b ldr r3, [r3, #4]
  6281. 8002a10: 429a cmp r2, r3
  6282. 8002a12: d901 bls.n 8002a18 <HAL_PCD_EP_ClrStall+0x1e>
  6283. {
  6284. return HAL_ERROR;
  6285. 8002a14: 2301 movs r3, #1
  6286. 8002a16: e042 b.n 8002a9e <HAL_PCD_EP_ClrStall+0xa4>
  6287. }
  6288. if ((0x80U & ep_addr) == 0x80U)
  6289. 8002a18: f997 3003 ldrsb.w r3, [r7, #3]
  6290. 8002a1c: 2b00 cmp r3, #0
  6291. 8002a1e: da0f bge.n 8002a40 <HAL_PCD_EP_ClrStall+0x46>
  6292. {
  6293. ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK];
  6294. 8002a20: 78fb ldrb r3, [r7, #3]
  6295. 8002a22: f003 020f and.w r2, r3, #15
  6296. 8002a26: 4613 mov r3, r2
  6297. 8002a28: 00db lsls r3, r3, #3
  6298. 8002a2a: 1a9b subs r3, r3, r2
  6299. 8002a2c: 009b lsls r3, r3, #2
  6300. 8002a2e: 3338 adds r3, #56 ; 0x38
  6301. 8002a30: 687a ldr r2, [r7, #4]
  6302. 8002a32: 4413 add r3, r2
  6303. 8002a34: 3304 adds r3, #4
  6304. 8002a36: 60fb str r3, [r7, #12]
  6305. ep->is_in = 1U;
  6306. 8002a38: 68fb ldr r3, [r7, #12]
  6307. 8002a3a: 2201 movs r2, #1
  6308. 8002a3c: 705a strb r2, [r3, #1]
  6309. 8002a3e: e00f b.n 8002a60 <HAL_PCD_EP_ClrStall+0x66>
  6310. }
  6311. else
  6312. {
  6313. ep = &hpcd->OUT_ep[ep_addr & EP_ADDR_MSK];
  6314. 8002a40: 78fb ldrb r3, [r7, #3]
  6315. 8002a42: f003 020f and.w r2, r3, #15
  6316. 8002a46: 4613 mov r3, r2
  6317. 8002a48: 00db lsls r3, r3, #3
  6318. 8002a4a: 1a9b subs r3, r3, r2
  6319. 8002a4c: 009b lsls r3, r3, #2
  6320. 8002a4e: f503 73fc add.w r3, r3, #504 ; 0x1f8
  6321. 8002a52: 687a ldr r2, [r7, #4]
  6322. 8002a54: 4413 add r3, r2
  6323. 8002a56: 3304 adds r3, #4
  6324. 8002a58: 60fb str r3, [r7, #12]
  6325. ep->is_in = 0U;
  6326. 8002a5a: 68fb ldr r3, [r7, #12]
  6327. 8002a5c: 2200 movs r2, #0
  6328. 8002a5e: 705a strb r2, [r3, #1]
  6329. }
  6330. ep->is_stall = 0U;
  6331. 8002a60: 68fb ldr r3, [r7, #12]
  6332. 8002a62: 2200 movs r2, #0
  6333. 8002a64: 709a strb r2, [r3, #2]
  6334. ep->num = ep_addr & EP_ADDR_MSK;
  6335. 8002a66: 78fb ldrb r3, [r7, #3]
  6336. 8002a68: f003 030f and.w r3, r3, #15
  6337. 8002a6c: b2da uxtb r2, r3
  6338. 8002a6e: 68fb ldr r3, [r7, #12]
  6339. 8002a70: 701a strb r2, [r3, #0]
  6340. __HAL_LOCK(hpcd);
  6341. 8002a72: 687b ldr r3, [r7, #4]
  6342. 8002a74: f893 33bc ldrb.w r3, [r3, #956] ; 0x3bc
  6343. 8002a78: 2b01 cmp r3, #1
  6344. 8002a7a: d101 bne.n 8002a80 <HAL_PCD_EP_ClrStall+0x86>
  6345. 8002a7c: 2302 movs r3, #2
  6346. 8002a7e: e00e b.n 8002a9e <HAL_PCD_EP_ClrStall+0xa4>
  6347. 8002a80: 687b ldr r3, [r7, #4]
  6348. 8002a82: 2201 movs r2, #1
  6349. 8002a84: f883 23bc strb.w r2, [r3, #956] ; 0x3bc
  6350. (void)USB_EPClearStall(hpcd->Instance, ep);
  6351. 8002a88: 687b ldr r3, [r7, #4]
  6352. 8002a8a: 681b ldr r3, [r3, #0]
  6353. 8002a8c: 68f9 ldr r1, [r7, #12]
  6354. 8002a8e: 4618 mov r0, r3
  6355. 8002a90: f004 fad0 bl 8007034 <USB_EPClearStall>
  6356. __HAL_UNLOCK(hpcd);
  6357. 8002a94: 687b ldr r3, [r7, #4]
  6358. 8002a96: 2200 movs r2, #0
  6359. 8002a98: f883 23bc strb.w r2, [r3, #956] ; 0x3bc
  6360. return HAL_OK;
  6361. 8002a9c: 2300 movs r3, #0
  6362. }
  6363. 8002a9e: 4618 mov r0, r3
  6364. 8002aa0: 3710 adds r7, #16
  6365. 8002aa2: 46bd mov sp, r7
  6366. 8002aa4: bd80 pop {r7, pc}
  6367. 08002aa6 <PCD_WriteEmptyTxFifo>:
  6368. * @param hpcd PCD handle
  6369. * @param epnum endpoint number
  6370. * @retval HAL status
  6371. */
  6372. static HAL_StatusTypeDef PCD_WriteEmptyTxFifo(PCD_HandleTypeDef *hpcd, uint32_t epnum)
  6373. {
  6374. 8002aa6: b580 push {r7, lr}
  6375. 8002aa8: b08a sub sp, #40 ; 0x28
  6376. 8002aaa: af02 add r7, sp, #8
  6377. 8002aac: 6078 str r0, [r7, #4]
  6378. 8002aae: 6039 str r1, [r7, #0]
  6379. USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
  6380. 8002ab0: 687b ldr r3, [r7, #4]
  6381. 8002ab2: 681b ldr r3, [r3, #0]
  6382. 8002ab4: 617b str r3, [r7, #20]
  6383. uint32_t USBx_BASE = (uint32_t)USBx;
  6384. 8002ab6: 697b ldr r3, [r7, #20]
  6385. 8002ab8: 613b str r3, [r7, #16]
  6386. USB_OTG_EPTypeDef *ep;
  6387. uint32_t len;
  6388. uint32_t len32b;
  6389. uint32_t fifoemptymsk;
  6390. ep = &hpcd->IN_ep[epnum];
  6391. 8002aba: 683a ldr r2, [r7, #0]
  6392. 8002abc: 4613 mov r3, r2
  6393. 8002abe: 00db lsls r3, r3, #3
  6394. 8002ac0: 1a9b subs r3, r3, r2
  6395. 8002ac2: 009b lsls r3, r3, #2
  6396. 8002ac4: 3338 adds r3, #56 ; 0x38
  6397. 8002ac6: 687a ldr r2, [r7, #4]
  6398. 8002ac8: 4413 add r3, r2
  6399. 8002aca: 3304 adds r3, #4
  6400. 8002acc: 60fb str r3, [r7, #12]
  6401. if (ep->xfer_count > ep->xfer_len)
  6402. 8002ace: 68fb ldr r3, [r7, #12]
  6403. 8002ad0: 699a ldr r2, [r3, #24]
  6404. 8002ad2: 68fb ldr r3, [r7, #12]
  6405. 8002ad4: 695b ldr r3, [r3, #20]
  6406. 8002ad6: 429a cmp r2, r3
  6407. 8002ad8: d901 bls.n 8002ade <PCD_WriteEmptyTxFifo+0x38>
  6408. {
  6409. return HAL_ERROR;
  6410. 8002ada: 2301 movs r3, #1
  6411. 8002adc: e06c b.n 8002bb8 <PCD_WriteEmptyTxFifo+0x112>
  6412. }
  6413. len = ep->xfer_len - ep->xfer_count;
  6414. 8002ade: 68fb ldr r3, [r7, #12]
  6415. 8002ae0: 695a ldr r2, [r3, #20]
  6416. 8002ae2: 68fb ldr r3, [r7, #12]
  6417. 8002ae4: 699b ldr r3, [r3, #24]
  6418. 8002ae6: 1ad3 subs r3, r2, r3
  6419. 8002ae8: 61fb str r3, [r7, #28]
  6420. if (len > ep->maxpacket)
  6421. 8002aea: 68fb ldr r3, [r7, #12]
  6422. 8002aec: 689b ldr r3, [r3, #8]
  6423. 8002aee: 69fa ldr r2, [r7, #28]
  6424. 8002af0: 429a cmp r2, r3
  6425. 8002af2: d902 bls.n 8002afa <PCD_WriteEmptyTxFifo+0x54>
  6426. {
  6427. len = ep->maxpacket;
  6428. 8002af4: 68fb ldr r3, [r7, #12]
  6429. 8002af6: 689b ldr r3, [r3, #8]
  6430. 8002af8: 61fb str r3, [r7, #28]
  6431. }
  6432. len32b = (len + 3U) / 4U;
  6433. 8002afa: 69fb ldr r3, [r7, #28]
  6434. 8002afc: 3303 adds r3, #3
  6435. 8002afe: 089b lsrs r3, r3, #2
  6436. 8002b00: 61bb str r3, [r7, #24]
  6437. while (((USBx_INEP(epnum)->DTXFSTS & USB_OTG_DTXFSTS_INEPTFSAV) >= len32b) &&
  6438. 8002b02: e02b b.n 8002b5c <PCD_WriteEmptyTxFifo+0xb6>
  6439. (ep->xfer_count < ep->xfer_len) && (ep->xfer_len != 0U))
  6440. {
  6441. /* Write the FIFO */
  6442. len = ep->xfer_len - ep->xfer_count;
  6443. 8002b04: 68fb ldr r3, [r7, #12]
  6444. 8002b06: 695a ldr r2, [r3, #20]
  6445. 8002b08: 68fb ldr r3, [r7, #12]
  6446. 8002b0a: 699b ldr r3, [r3, #24]
  6447. 8002b0c: 1ad3 subs r3, r2, r3
  6448. 8002b0e: 61fb str r3, [r7, #28]
  6449. if (len > ep->maxpacket)
  6450. 8002b10: 68fb ldr r3, [r7, #12]
  6451. 8002b12: 689b ldr r3, [r3, #8]
  6452. 8002b14: 69fa ldr r2, [r7, #28]
  6453. 8002b16: 429a cmp r2, r3
  6454. 8002b18: d902 bls.n 8002b20 <PCD_WriteEmptyTxFifo+0x7a>
  6455. {
  6456. len = ep->maxpacket;
  6457. 8002b1a: 68fb ldr r3, [r7, #12]
  6458. 8002b1c: 689b ldr r3, [r3, #8]
  6459. 8002b1e: 61fb str r3, [r7, #28]
  6460. }
  6461. len32b = (len + 3U) / 4U;
  6462. 8002b20: 69fb ldr r3, [r7, #28]
  6463. 8002b22: 3303 adds r3, #3
  6464. 8002b24: 089b lsrs r3, r3, #2
  6465. 8002b26: 61bb str r3, [r7, #24]
  6466. (void)USB_WritePacket(USBx, ep->xfer_buff, (uint8_t)epnum, (uint16_t)len,
  6467. 8002b28: 68fb ldr r3, [r7, #12]
  6468. 8002b2a: 68d9 ldr r1, [r3, #12]
  6469. 8002b2c: 683b ldr r3, [r7, #0]
  6470. 8002b2e: b2da uxtb r2, r3
  6471. 8002b30: 69fb ldr r3, [r7, #28]
  6472. 8002b32: b298 uxth r0, r3
  6473. (uint8_t)hpcd->Init.dma_enable);
  6474. 8002b34: 687b ldr r3, [r7, #4]
  6475. 8002b36: 691b ldr r3, [r3, #16]
  6476. (void)USB_WritePacket(USBx, ep->xfer_buff, (uint8_t)epnum, (uint16_t)len,
  6477. 8002b38: b2db uxtb r3, r3
  6478. 8002b3a: 9300 str r3, [sp, #0]
  6479. 8002b3c: 4603 mov r3, r0
  6480. 8002b3e: 6978 ldr r0, [r7, #20]
  6481. 8002b40: f004 f974 bl 8006e2c <USB_WritePacket>
  6482. ep->xfer_buff += len;
  6483. 8002b44: 68fb ldr r3, [r7, #12]
  6484. 8002b46: 68da ldr r2, [r3, #12]
  6485. 8002b48: 69fb ldr r3, [r7, #28]
  6486. 8002b4a: 441a add r2, r3
  6487. 8002b4c: 68fb ldr r3, [r7, #12]
  6488. 8002b4e: 60da str r2, [r3, #12]
  6489. ep->xfer_count += len;
  6490. 8002b50: 68fb ldr r3, [r7, #12]
  6491. 8002b52: 699a ldr r2, [r3, #24]
  6492. 8002b54: 69fb ldr r3, [r7, #28]
  6493. 8002b56: 441a add r2, r3
  6494. 8002b58: 68fb ldr r3, [r7, #12]
  6495. 8002b5a: 619a str r2, [r3, #24]
  6496. while (((USBx_INEP(epnum)->DTXFSTS & USB_OTG_DTXFSTS_INEPTFSAV) >= len32b) &&
  6497. 8002b5c: 683b ldr r3, [r7, #0]
  6498. 8002b5e: 015a lsls r2, r3, #5
  6499. 8002b60: 693b ldr r3, [r7, #16]
  6500. 8002b62: 4413 add r3, r2
  6501. 8002b64: f503 6310 add.w r3, r3, #2304 ; 0x900
  6502. 8002b68: 699b ldr r3, [r3, #24]
  6503. 8002b6a: b29b uxth r3, r3
  6504. 8002b6c: 69ba ldr r2, [r7, #24]
  6505. 8002b6e: 429a cmp r2, r3
  6506. 8002b70: d809 bhi.n 8002b86 <PCD_WriteEmptyTxFifo+0xe0>
  6507. (ep->xfer_count < ep->xfer_len) && (ep->xfer_len != 0U))
  6508. 8002b72: 68fb ldr r3, [r7, #12]
  6509. 8002b74: 699a ldr r2, [r3, #24]
  6510. 8002b76: 68fb ldr r3, [r7, #12]
  6511. 8002b78: 695b ldr r3, [r3, #20]
  6512. while (((USBx_INEP(epnum)->DTXFSTS & USB_OTG_DTXFSTS_INEPTFSAV) >= len32b) &&
  6513. 8002b7a: 429a cmp r2, r3
  6514. 8002b7c: d203 bcs.n 8002b86 <PCD_WriteEmptyTxFifo+0xe0>
  6515. (ep->xfer_count < ep->xfer_len) && (ep->xfer_len != 0U))
  6516. 8002b7e: 68fb ldr r3, [r7, #12]
  6517. 8002b80: 695b ldr r3, [r3, #20]
  6518. 8002b82: 2b00 cmp r3, #0
  6519. 8002b84: d1be bne.n 8002b04 <PCD_WriteEmptyTxFifo+0x5e>
  6520. }
  6521. if (ep->xfer_len <= ep->xfer_count)
  6522. 8002b86: 68fb ldr r3, [r7, #12]
  6523. 8002b88: 695a ldr r2, [r3, #20]
  6524. 8002b8a: 68fb ldr r3, [r7, #12]
  6525. 8002b8c: 699b ldr r3, [r3, #24]
  6526. 8002b8e: 429a cmp r2, r3
  6527. 8002b90: d811 bhi.n 8002bb6 <PCD_WriteEmptyTxFifo+0x110>
  6528. {
  6529. fifoemptymsk = (uint32_t)(0x1UL << (epnum & EP_ADDR_MSK));
  6530. 8002b92: 683b ldr r3, [r7, #0]
  6531. 8002b94: f003 030f and.w r3, r3, #15
  6532. 8002b98: 2201 movs r2, #1
  6533. 8002b9a: fa02 f303 lsl.w r3, r2, r3
  6534. 8002b9e: 60bb str r3, [r7, #8]
  6535. USBx_DEVICE->DIEPEMPMSK &= ~fifoemptymsk;
  6536. 8002ba0: 693b ldr r3, [r7, #16]
  6537. 8002ba2: f503 6300 add.w r3, r3, #2048 ; 0x800
  6538. 8002ba6: 6b5a ldr r2, [r3, #52] ; 0x34
  6539. 8002ba8: 68bb ldr r3, [r7, #8]
  6540. 8002baa: 43db mvns r3, r3
  6541. 8002bac: 6939 ldr r1, [r7, #16]
  6542. 8002bae: f501 6100 add.w r1, r1, #2048 ; 0x800
  6543. 8002bb2: 4013 ands r3, r2
  6544. 8002bb4: 634b str r3, [r1, #52] ; 0x34
  6545. }
  6546. return HAL_OK;
  6547. 8002bb6: 2300 movs r3, #0
  6548. }
  6549. 8002bb8: 4618 mov r0, r3
  6550. 8002bba: 3720 adds r7, #32
  6551. 8002bbc: 46bd mov sp, r7
  6552. 8002bbe: bd80 pop {r7, pc}
  6553. 08002bc0 <PCD_EP_OutXfrComplete_int>:
  6554. * @param hpcd PCD handle
  6555. * @param epnum endpoint number
  6556. * @retval HAL status
  6557. */
  6558. static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint32_t epnum)
  6559. {
  6560. 8002bc0: b580 push {r7, lr}
  6561. 8002bc2: b086 sub sp, #24
  6562. 8002bc4: af00 add r7, sp, #0
  6563. 8002bc6: 6078 str r0, [r7, #4]
  6564. 8002bc8: 6039 str r1, [r7, #0]
  6565. USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
  6566. 8002bca: 687b ldr r3, [r7, #4]
  6567. 8002bcc: 681b ldr r3, [r3, #0]
  6568. 8002bce: 617b str r3, [r7, #20]
  6569. uint32_t USBx_BASE = (uint32_t)USBx;
  6570. 8002bd0: 697b ldr r3, [r7, #20]
  6571. 8002bd2: 613b str r3, [r7, #16]
  6572. uint32_t gSNPSiD = *(__IO uint32_t *)(&USBx->CID + 0x1U);
  6573. 8002bd4: 697b ldr r3, [r7, #20]
  6574. 8002bd6: 333c adds r3, #60 ; 0x3c
  6575. 8002bd8: 3304 adds r3, #4
  6576. 8002bda: 681b ldr r3, [r3, #0]
  6577. 8002bdc: 60fb str r3, [r7, #12]
  6578. uint32_t DoepintReg = USBx_OUTEP(epnum)->DOEPINT;
  6579. 8002bde: 683b ldr r3, [r7, #0]
  6580. 8002be0: 015a lsls r2, r3, #5
  6581. 8002be2: 693b ldr r3, [r7, #16]
  6582. 8002be4: 4413 add r3, r2
  6583. 8002be6: f503 6330 add.w r3, r3, #2816 ; 0xb00
  6584. 8002bea: 689b ldr r3, [r3, #8]
  6585. 8002bec: 60bb str r3, [r7, #8]
  6586. if (hpcd->Init.dma_enable == 1U)
  6587. 8002bee: 687b ldr r3, [r7, #4]
  6588. 8002bf0: 691b ldr r3, [r3, #16]
  6589. 8002bf2: 2b01 cmp r3, #1
  6590. 8002bf4: f040 80a0 bne.w 8002d38 <PCD_EP_OutXfrComplete_int+0x178>
  6591. {
  6592. if ((DoepintReg & USB_OTG_DOEPINT_STUP) == USB_OTG_DOEPINT_STUP) /* Class C */
  6593. 8002bf8: 68bb ldr r3, [r7, #8]
  6594. 8002bfa: f003 0308 and.w r3, r3, #8
  6595. 8002bfe: 2b00 cmp r3, #0
  6596. 8002c00: d015 beq.n 8002c2e <PCD_EP_OutXfrComplete_int+0x6e>
  6597. {
  6598. /* StupPktRcvd = 1 this is a setup packet */
  6599. if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
  6600. 8002c02: 68fb ldr r3, [r7, #12]
  6601. 8002c04: 4a72 ldr r2, [pc, #456] ; (8002dd0 <PCD_EP_OutXfrComplete_int+0x210>)
  6602. 8002c06: 4293 cmp r3, r2
  6603. 8002c08: f240 80dd bls.w 8002dc6 <PCD_EP_OutXfrComplete_int+0x206>
  6604. ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
  6605. 8002c0c: 68bb ldr r3, [r7, #8]
  6606. 8002c0e: f403 4300 and.w r3, r3, #32768 ; 0x8000
  6607. if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
  6608. 8002c12: 2b00 cmp r3, #0
  6609. 8002c14: f000 80d7 beq.w 8002dc6 <PCD_EP_OutXfrComplete_int+0x206>
  6610. {
  6611. CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
  6612. 8002c18: 683b ldr r3, [r7, #0]
  6613. 8002c1a: 015a lsls r2, r3, #5
  6614. 8002c1c: 693b ldr r3, [r7, #16]
  6615. 8002c1e: 4413 add r3, r2
  6616. 8002c20: f503 6330 add.w r3, r3, #2816 ; 0xb00
  6617. 8002c24: 461a mov r2, r3
  6618. 8002c26: f44f 4300 mov.w r3, #32768 ; 0x8000
  6619. 8002c2a: 6093 str r3, [r2, #8]
  6620. 8002c2c: e0cb b.n 8002dc6 <PCD_EP_OutXfrComplete_int+0x206>
  6621. }
  6622. }
  6623. else if ((DoepintReg & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR) /* Class E */
  6624. 8002c2e: 68bb ldr r3, [r7, #8]
  6625. 8002c30: f003 0320 and.w r3, r3, #32
  6626. 8002c34: 2b00 cmp r3, #0
  6627. 8002c36: d009 beq.n 8002c4c <PCD_EP_OutXfrComplete_int+0x8c>
  6628. {
  6629. CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPSPR);
  6630. 8002c38: 683b ldr r3, [r7, #0]
  6631. 8002c3a: 015a lsls r2, r3, #5
  6632. 8002c3c: 693b ldr r3, [r7, #16]
  6633. 8002c3e: 4413 add r3, r2
  6634. 8002c40: f503 6330 add.w r3, r3, #2816 ; 0xb00
  6635. 8002c44: 461a mov r2, r3
  6636. 8002c46: 2320 movs r3, #32
  6637. 8002c48: 6093 str r3, [r2, #8]
  6638. 8002c4a: e0bc b.n 8002dc6 <PCD_EP_OutXfrComplete_int+0x206>
  6639. }
  6640. else if ((DoepintReg & (USB_OTG_DOEPINT_STUP | USB_OTG_DOEPINT_OTEPSPR)) == 0U)
  6641. 8002c4c: 68bb ldr r3, [r7, #8]
  6642. 8002c4e: f003 0328 and.w r3, r3, #40 ; 0x28
  6643. 8002c52: 2b00 cmp r3, #0
  6644. 8002c54: f040 80b7 bne.w 8002dc6 <PCD_EP_OutXfrComplete_int+0x206>
  6645. {
  6646. /* StupPktRcvd = 1 this is a setup packet */
  6647. if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
  6648. 8002c58: 68fb ldr r3, [r7, #12]
  6649. 8002c5a: 4a5d ldr r2, [pc, #372] ; (8002dd0 <PCD_EP_OutXfrComplete_int+0x210>)
  6650. 8002c5c: 4293 cmp r3, r2
  6651. 8002c5e: d90f bls.n 8002c80 <PCD_EP_OutXfrComplete_int+0xc0>
  6652. ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
  6653. 8002c60: 68bb ldr r3, [r7, #8]
  6654. 8002c62: f403 4300 and.w r3, r3, #32768 ; 0x8000
  6655. if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
  6656. 8002c66: 2b00 cmp r3, #0
  6657. 8002c68: d00a beq.n 8002c80 <PCD_EP_OutXfrComplete_int+0xc0>
  6658. {
  6659. CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
  6660. 8002c6a: 683b ldr r3, [r7, #0]
  6661. 8002c6c: 015a lsls r2, r3, #5
  6662. 8002c6e: 693b ldr r3, [r7, #16]
  6663. 8002c70: 4413 add r3, r2
  6664. 8002c72: f503 6330 add.w r3, r3, #2816 ; 0xb00
  6665. 8002c76: 461a mov r2, r3
  6666. 8002c78: f44f 4300 mov.w r3, #32768 ; 0x8000
  6667. 8002c7c: 6093 str r3, [r2, #8]
  6668. 8002c7e: e0a2 b.n 8002dc6 <PCD_EP_OutXfrComplete_int+0x206>
  6669. }
  6670. else
  6671. {
  6672. /* out data packet received over EP0 */
  6673. hpcd->OUT_ep[epnum].xfer_count =
  6674. hpcd->OUT_ep[epnum].maxpacket -
  6675. 8002c80: 6879 ldr r1, [r7, #4]
  6676. 8002c82: 683a ldr r2, [r7, #0]
  6677. 8002c84: 4613 mov r3, r2
  6678. 8002c86: 00db lsls r3, r3, #3
  6679. 8002c88: 1a9b subs r3, r3, r2
  6680. 8002c8a: 009b lsls r3, r3, #2
  6681. 8002c8c: 440b add r3, r1
  6682. 8002c8e: f503 7301 add.w r3, r3, #516 ; 0x204
  6683. 8002c92: 681a ldr r2, [r3, #0]
  6684. (USBx_OUTEP(epnum)->DOEPTSIZ & USB_OTG_DOEPTSIZ_XFRSIZ);
  6685. 8002c94: 683b ldr r3, [r7, #0]
  6686. 8002c96: 0159 lsls r1, r3, #5
  6687. 8002c98: 693b ldr r3, [r7, #16]
  6688. 8002c9a: 440b add r3, r1
  6689. 8002c9c: f503 6330 add.w r3, r3, #2816 ; 0xb00
  6690. 8002ca0: 691b ldr r3, [r3, #16]
  6691. 8002ca2: f3c3 0312 ubfx r3, r3, #0, #19
  6692. hpcd->OUT_ep[epnum].maxpacket -
  6693. 8002ca6: 1ad1 subs r1, r2, r3
  6694. hpcd->OUT_ep[epnum].xfer_count =
  6695. 8002ca8: 6878 ldr r0, [r7, #4]
  6696. 8002caa: 683a ldr r2, [r7, #0]
  6697. 8002cac: 4613 mov r3, r2
  6698. 8002cae: 00db lsls r3, r3, #3
  6699. 8002cb0: 1a9b subs r3, r3, r2
  6700. 8002cb2: 009b lsls r3, r3, #2
  6701. 8002cb4: 4403 add r3, r0
  6702. 8002cb6: f503 7305 add.w r3, r3, #532 ; 0x214
  6703. 8002cba: 6019 str r1, [r3, #0]
  6704. hpcd->OUT_ep[epnum].xfer_buff += hpcd->OUT_ep[epnum].maxpacket;
  6705. 8002cbc: 6879 ldr r1, [r7, #4]
  6706. 8002cbe: 683a ldr r2, [r7, #0]
  6707. 8002cc0: 4613 mov r3, r2
  6708. 8002cc2: 00db lsls r3, r3, #3
  6709. 8002cc4: 1a9b subs r3, r3, r2
  6710. 8002cc6: 009b lsls r3, r3, #2
  6711. 8002cc8: 440b add r3, r1
  6712. 8002cca: f503 7302 add.w r3, r3, #520 ; 0x208
  6713. 8002cce: 6819 ldr r1, [r3, #0]
  6714. 8002cd0: 6878 ldr r0, [r7, #4]
  6715. 8002cd2: 683a ldr r2, [r7, #0]
  6716. 8002cd4: 4613 mov r3, r2
  6717. 8002cd6: 00db lsls r3, r3, #3
  6718. 8002cd8: 1a9b subs r3, r3, r2
  6719. 8002cda: 009b lsls r3, r3, #2
  6720. 8002cdc: 4403 add r3, r0
  6721. 8002cde: f503 7301 add.w r3, r3, #516 ; 0x204
  6722. 8002ce2: 681b ldr r3, [r3, #0]
  6723. 8002ce4: 4419 add r1, r3
  6724. 8002ce6: 6878 ldr r0, [r7, #4]
  6725. 8002ce8: 683a ldr r2, [r7, #0]
  6726. 8002cea: 4613 mov r3, r2
  6727. 8002cec: 00db lsls r3, r3, #3
  6728. 8002cee: 1a9b subs r3, r3, r2
  6729. 8002cf0: 009b lsls r3, r3, #2
  6730. 8002cf2: 4403 add r3, r0
  6731. 8002cf4: f503 7302 add.w r3, r3, #520 ; 0x208
  6732. 8002cf8: 6019 str r1, [r3, #0]
  6733. if ((epnum == 0U) && (hpcd->OUT_ep[epnum].xfer_len == 0U))
  6734. 8002cfa: 683b ldr r3, [r7, #0]
  6735. 8002cfc: 2b00 cmp r3, #0
  6736. 8002cfe: d114 bne.n 8002d2a <PCD_EP_OutXfrComplete_int+0x16a>
  6737. 8002d00: 6879 ldr r1, [r7, #4]
  6738. 8002d02: 683a ldr r2, [r7, #0]
  6739. 8002d04: 4613 mov r3, r2
  6740. 8002d06: 00db lsls r3, r3, #3
  6741. 8002d08: 1a9b subs r3, r3, r2
  6742. 8002d0a: 009b lsls r3, r3, #2
  6743. 8002d0c: 440b add r3, r1
  6744. 8002d0e: f503 7304 add.w r3, r3, #528 ; 0x210
  6745. 8002d12: 681b ldr r3, [r3, #0]
  6746. 8002d14: 2b00 cmp r3, #0
  6747. 8002d16: d108 bne.n 8002d2a <PCD_EP_OutXfrComplete_int+0x16a>
  6748. {
  6749. /* this is ZLP, so prepare EP0 for next setup */
  6750. (void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
  6751. 8002d18: 687b ldr r3, [r7, #4]
  6752. 8002d1a: 6818 ldr r0, [r3, #0]
  6753. 8002d1c: 687b ldr r3, [r7, #4]
  6754. 8002d1e: f503 7371 add.w r3, r3, #964 ; 0x3c4
  6755. 8002d22: 461a mov r2, r3
  6756. 8002d24: 2101 movs r1, #1
  6757. 8002d26: f004 fb19 bl 800735c <USB_EP0_OutStart>
  6758. }
  6759. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  6760. hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
  6761. #else
  6762. HAL_PCD_DataOutStageCallback(hpcd, (uint8_t)epnum);
  6763. 8002d2a: 683b ldr r3, [r7, #0]
  6764. 8002d2c: b2db uxtb r3, r3
  6765. 8002d2e: 4619 mov r1, r3
  6766. 8002d30: 6878 ldr r0, [r7, #4]
  6767. 8002d32: f006 fabf bl 80092b4 <HAL_PCD_DataOutStageCallback>
  6768. 8002d36: e046 b.n 8002dc6 <PCD_EP_OutXfrComplete_int+0x206>
  6769. /* ... */
  6770. }
  6771. }
  6772. else
  6773. {
  6774. if (gSNPSiD == USB_OTG_CORE_ID_310A)
  6775. 8002d38: 68fb ldr r3, [r7, #12]
  6776. 8002d3a: 4a26 ldr r2, [pc, #152] ; (8002dd4 <PCD_EP_OutXfrComplete_int+0x214>)
  6777. 8002d3c: 4293 cmp r3, r2
  6778. 8002d3e: d124 bne.n 8002d8a <PCD_EP_OutXfrComplete_int+0x1ca>
  6779. {
  6780. /* StupPktRcvd = 1 this is a setup packet */
  6781. if ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX)
  6782. 8002d40: 68bb ldr r3, [r7, #8]
  6783. 8002d42: f403 4300 and.w r3, r3, #32768 ; 0x8000
  6784. 8002d46: 2b00 cmp r3, #0
  6785. 8002d48: d00a beq.n 8002d60 <PCD_EP_OutXfrComplete_int+0x1a0>
  6786. {
  6787. CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
  6788. 8002d4a: 683b ldr r3, [r7, #0]
  6789. 8002d4c: 015a lsls r2, r3, #5
  6790. 8002d4e: 693b ldr r3, [r7, #16]
  6791. 8002d50: 4413 add r3, r2
  6792. 8002d52: f503 6330 add.w r3, r3, #2816 ; 0xb00
  6793. 8002d56: 461a mov r2, r3
  6794. 8002d58: f44f 4300 mov.w r3, #32768 ; 0x8000
  6795. 8002d5c: 6093 str r3, [r2, #8]
  6796. 8002d5e: e032 b.n 8002dc6 <PCD_EP_OutXfrComplete_int+0x206>
  6797. }
  6798. else
  6799. {
  6800. if ((DoepintReg & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR)
  6801. 8002d60: 68bb ldr r3, [r7, #8]
  6802. 8002d62: f003 0320 and.w r3, r3, #32
  6803. 8002d66: 2b00 cmp r3, #0
  6804. 8002d68: d008 beq.n 8002d7c <PCD_EP_OutXfrComplete_int+0x1bc>
  6805. {
  6806. CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPSPR);
  6807. 8002d6a: 683b ldr r3, [r7, #0]
  6808. 8002d6c: 015a lsls r2, r3, #5
  6809. 8002d6e: 693b ldr r3, [r7, #16]
  6810. 8002d70: 4413 add r3, r2
  6811. 8002d72: f503 6330 add.w r3, r3, #2816 ; 0xb00
  6812. 8002d76: 461a mov r2, r3
  6813. 8002d78: 2320 movs r3, #32
  6814. 8002d7a: 6093 str r3, [r2, #8]
  6815. }
  6816. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  6817. hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
  6818. #else
  6819. HAL_PCD_DataOutStageCallback(hpcd, (uint8_t)epnum);
  6820. 8002d7c: 683b ldr r3, [r7, #0]
  6821. 8002d7e: b2db uxtb r3, r3
  6822. 8002d80: 4619 mov r1, r3
  6823. 8002d82: 6878 ldr r0, [r7, #4]
  6824. 8002d84: f006 fa96 bl 80092b4 <HAL_PCD_DataOutStageCallback>
  6825. 8002d88: e01d b.n 8002dc6 <PCD_EP_OutXfrComplete_int+0x206>
  6826. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  6827. }
  6828. }
  6829. else
  6830. {
  6831. if ((epnum == 0U) && (hpcd->OUT_ep[epnum].xfer_len == 0U))
  6832. 8002d8a: 683b ldr r3, [r7, #0]
  6833. 8002d8c: 2b00 cmp r3, #0
  6834. 8002d8e: d114 bne.n 8002dba <PCD_EP_OutXfrComplete_int+0x1fa>
  6835. 8002d90: 6879 ldr r1, [r7, #4]
  6836. 8002d92: 683a ldr r2, [r7, #0]
  6837. 8002d94: 4613 mov r3, r2
  6838. 8002d96: 00db lsls r3, r3, #3
  6839. 8002d98: 1a9b subs r3, r3, r2
  6840. 8002d9a: 009b lsls r3, r3, #2
  6841. 8002d9c: 440b add r3, r1
  6842. 8002d9e: f503 7304 add.w r3, r3, #528 ; 0x210
  6843. 8002da2: 681b ldr r3, [r3, #0]
  6844. 8002da4: 2b00 cmp r3, #0
  6845. 8002da6: d108 bne.n 8002dba <PCD_EP_OutXfrComplete_int+0x1fa>
  6846. {
  6847. /* this is ZLP, so prepare EP0 for next setup */
  6848. (void)USB_EP0_OutStart(hpcd->Instance, 0U, (uint8_t *)hpcd->Setup);
  6849. 8002da8: 687b ldr r3, [r7, #4]
  6850. 8002daa: 6818 ldr r0, [r3, #0]
  6851. 8002dac: 687b ldr r3, [r7, #4]
  6852. 8002dae: f503 7371 add.w r3, r3, #964 ; 0x3c4
  6853. 8002db2: 461a mov r2, r3
  6854. 8002db4: 2100 movs r1, #0
  6855. 8002db6: f004 fad1 bl 800735c <USB_EP0_OutStart>
  6856. }
  6857. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  6858. hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
  6859. #else
  6860. HAL_PCD_DataOutStageCallback(hpcd, (uint8_t)epnum);
  6861. 8002dba: 683b ldr r3, [r7, #0]
  6862. 8002dbc: b2db uxtb r3, r3
  6863. 8002dbe: 4619 mov r1, r3
  6864. 8002dc0: 6878 ldr r0, [r7, #4]
  6865. 8002dc2: f006 fa77 bl 80092b4 <HAL_PCD_DataOutStageCallback>
  6866. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  6867. }
  6868. }
  6869. return HAL_OK;
  6870. 8002dc6: 2300 movs r3, #0
  6871. }
  6872. 8002dc8: 4618 mov r0, r3
  6873. 8002dca: 3718 adds r7, #24
  6874. 8002dcc: 46bd mov sp, r7
  6875. 8002dce: bd80 pop {r7, pc}
  6876. 8002dd0: 4f54300a .word 0x4f54300a
  6877. 8002dd4: 4f54310a .word 0x4f54310a
  6878. 08002dd8 <PCD_EP_OutSetupPacket_int>:
  6879. * @param hpcd PCD handle
  6880. * @param epnum endpoint number
  6881. * @retval HAL status
  6882. */
  6883. static HAL_StatusTypeDef PCD_EP_OutSetupPacket_int(PCD_HandleTypeDef *hpcd, uint32_t epnum)
  6884. {
  6885. 8002dd8: b580 push {r7, lr}
  6886. 8002dda: b086 sub sp, #24
  6887. 8002ddc: af00 add r7, sp, #0
  6888. 8002dde: 6078 str r0, [r7, #4]
  6889. 8002de0: 6039 str r1, [r7, #0]
  6890. USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
  6891. 8002de2: 687b ldr r3, [r7, #4]
  6892. 8002de4: 681b ldr r3, [r3, #0]
  6893. 8002de6: 617b str r3, [r7, #20]
  6894. uint32_t USBx_BASE = (uint32_t)USBx;
  6895. 8002de8: 697b ldr r3, [r7, #20]
  6896. 8002dea: 613b str r3, [r7, #16]
  6897. uint32_t gSNPSiD = *(__IO uint32_t *)(&USBx->CID + 0x1U);
  6898. 8002dec: 697b ldr r3, [r7, #20]
  6899. 8002dee: 333c adds r3, #60 ; 0x3c
  6900. 8002df0: 3304 adds r3, #4
  6901. 8002df2: 681b ldr r3, [r3, #0]
  6902. 8002df4: 60fb str r3, [r7, #12]
  6903. uint32_t DoepintReg = USBx_OUTEP(epnum)->DOEPINT;
  6904. 8002df6: 683b ldr r3, [r7, #0]
  6905. 8002df8: 015a lsls r2, r3, #5
  6906. 8002dfa: 693b ldr r3, [r7, #16]
  6907. 8002dfc: 4413 add r3, r2
  6908. 8002dfe: f503 6330 add.w r3, r3, #2816 ; 0xb00
  6909. 8002e02: 689b ldr r3, [r3, #8]
  6910. 8002e04: 60bb str r3, [r7, #8]
  6911. if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
  6912. 8002e06: 68fb ldr r3, [r7, #12]
  6913. 8002e08: 4a15 ldr r2, [pc, #84] ; (8002e60 <PCD_EP_OutSetupPacket_int+0x88>)
  6914. 8002e0a: 4293 cmp r3, r2
  6915. 8002e0c: d90e bls.n 8002e2c <PCD_EP_OutSetupPacket_int+0x54>
  6916. ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
  6917. 8002e0e: 68bb ldr r3, [r7, #8]
  6918. 8002e10: f403 4300 and.w r3, r3, #32768 ; 0x8000
  6919. if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
  6920. 8002e14: 2b00 cmp r3, #0
  6921. 8002e16: d009 beq.n 8002e2c <PCD_EP_OutSetupPacket_int+0x54>
  6922. {
  6923. CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
  6924. 8002e18: 683b ldr r3, [r7, #0]
  6925. 8002e1a: 015a lsls r2, r3, #5
  6926. 8002e1c: 693b ldr r3, [r7, #16]
  6927. 8002e1e: 4413 add r3, r2
  6928. 8002e20: f503 6330 add.w r3, r3, #2816 ; 0xb00
  6929. 8002e24: 461a mov r2, r3
  6930. 8002e26: f44f 4300 mov.w r3, #32768 ; 0x8000
  6931. 8002e2a: 6093 str r3, [r2, #8]
  6932. /* Inform the upper layer that a setup packet is available */
  6933. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  6934. hpcd->SetupStageCallback(hpcd);
  6935. #else
  6936. HAL_PCD_SetupStageCallback(hpcd);
  6937. 8002e2c: 6878 ldr r0, [r7, #4]
  6938. 8002e2e: f006 fa2f bl 8009290 <HAL_PCD_SetupStageCallback>
  6939. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  6940. if ((gSNPSiD > USB_OTG_CORE_ID_300A) && (hpcd->Init.dma_enable == 1U))
  6941. 8002e32: 68fb ldr r3, [r7, #12]
  6942. 8002e34: 4a0a ldr r2, [pc, #40] ; (8002e60 <PCD_EP_OutSetupPacket_int+0x88>)
  6943. 8002e36: 4293 cmp r3, r2
  6944. 8002e38: d90c bls.n 8002e54 <PCD_EP_OutSetupPacket_int+0x7c>
  6945. 8002e3a: 687b ldr r3, [r7, #4]
  6946. 8002e3c: 691b ldr r3, [r3, #16]
  6947. 8002e3e: 2b01 cmp r3, #1
  6948. 8002e40: d108 bne.n 8002e54 <PCD_EP_OutSetupPacket_int+0x7c>
  6949. {
  6950. (void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
  6951. 8002e42: 687b ldr r3, [r7, #4]
  6952. 8002e44: 6818 ldr r0, [r3, #0]
  6953. 8002e46: 687b ldr r3, [r7, #4]
  6954. 8002e48: f503 7371 add.w r3, r3, #964 ; 0x3c4
  6955. 8002e4c: 461a mov r2, r3
  6956. 8002e4e: 2101 movs r1, #1
  6957. 8002e50: f004 fa84 bl 800735c <USB_EP0_OutStart>
  6958. }
  6959. return HAL_OK;
  6960. 8002e54: 2300 movs r3, #0
  6961. }
  6962. 8002e56: 4618 mov r0, r3
  6963. 8002e58: 3718 adds r7, #24
  6964. 8002e5a: 46bd mov sp, r7
  6965. 8002e5c: bd80 pop {r7, pc}
  6966. 8002e5e: bf00 nop
  6967. 8002e60: 4f54300a .word 0x4f54300a
  6968. 08002e64 <HAL_PCDEx_SetTxFiFo>:
  6969. * @param fifo The number of Tx fifo
  6970. * @param size Fifo size
  6971. * @retval HAL status
  6972. */
  6973. HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size)
  6974. {
  6975. 8002e64: b480 push {r7}
  6976. 8002e66: b085 sub sp, #20
  6977. 8002e68: af00 add r7, sp, #0
  6978. 8002e6a: 6078 str r0, [r7, #4]
  6979. 8002e6c: 460b mov r3, r1
  6980. 8002e6e: 70fb strb r3, [r7, #3]
  6981. 8002e70: 4613 mov r3, r2
  6982. 8002e72: 803b strh r3, [r7, #0]
  6983. --> Txn should be configured with the minimum space of 16 words
  6984. The FIFO is used optimally when used TxFIFOs are allocated in the top
  6985. of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
  6986. When DMA is used 3n * FIFO locations should be reserved for internal DMA registers */
  6987. Tx_Offset = hpcd->Instance->GRXFSIZ;
  6988. 8002e74: 687b ldr r3, [r7, #4]
  6989. 8002e76: 681b ldr r3, [r3, #0]
  6990. 8002e78: 6a5b ldr r3, [r3, #36] ; 0x24
  6991. 8002e7a: 60bb str r3, [r7, #8]
  6992. if (fifo == 0U)
  6993. 8002e7c: 78fb ldrb r3, [r7, #3]
  6994. 8002e7e: 2b00 cmp r3, #0
  6995. 8002e80: d107 bne.n 8002e92 <HAL_PCDEx_SetTxFiFo+0x2e>
  6996. {
  6997. hpcd->Instance->DIEPTXF0_HNPTXFSIZ = ((uint32_t)size << 16) | Tx_Offset;
  6998. 8002e82: 883b ldrh r3, [r7, #0]
  6999. 8002e84: 0419 lsls r1, r3, #16
  7000. 8002e86: 687b ldr r3, [r7, #4]
  7001. 8002e88: 681b ldr r3, [r3, #0]
  7002. 8002e8a: 68ba ldr r2, [r7, #8]
  7003. 8002e8c: 430a orrs r2, r1
  7004. 8002e8e: 629a str r2, [r3, #40] ; 0x28
  7005. 8002e90: e028 b.n 8002ee4 <HAL_PCDEx_SetTxFiFo+0x80>
  7006. }
  7007. else
  7008. {
  7009. Tx_Offset += (hpcd->Instance->DIEPTXF0_HNPTXFSIZ) >> 16;
  7010. 8002e92: 687b ldr r3, [r7, #4]
  7011. 8002e94: 681b ldr r3, [r3, #0]
  7012. 8002e96: 6a9b ldr r3, [r3, #40] ; 0x28
  7013. 8002e98: 0c1b lsrs r3, r3, #16
  7014. 8002e9a: 68ba ldr r2, [r7, #8]
  7015. 8002e9c: 4413 add r3, r2
  7016. 8002e9e: 60bb str r3, [r7, #8]
  7017. for (i = 0U; i < (fifo - 1U); i++)
  7018. 8002ea0: 2300 movs r3, #0
  7019. 8002ea2: 73fb strb r3, [r7, #15]
  7020. 8002ea4: e00d b.n 8002ec2 <HAL_PCDEx_SetTxFiFo+0x5e>
  7021. {
  7022. Tx_Offset += (hpcd->Instance->DIEPTXF[i] >> 16);
  7023. 8002ea6: 687b ldr r3, [r7, #4]
  7024. 8002ea8: 681a ldr r2, [r3, #0]
  7025. 8002eaa: 7bfb ldrb r3, [r7, #15]
  7026. 8002eac: 3340 adds r3, #64 ; 0x40
  7027. 8002eae: 009b lsls r3, r3, #2
  7028. 8002eb0: 4413 add r3, r2
  7029. 8002eb2: 685b ldr r3, [r3, #4]
  7030. 8002eb4: 0c1b lsrs r3, r3, #16
  7031. 8002eb6: 68ba ldr r2, [r7, #8]
  7032. 8002eb8: 4413 add r3, r2
  7033. 8002eba: 60bb str r3, [r7, #8]
  7034. for (i = 0U; i < (fifo - 1U); i++)
  7035. 8002ebc: 7bfb ldrb r3, [r7, #15]
  7036. 8002ebe: 3301 adds r3, #1
  7037. 8002ec0: 73fb strb r3, [r7, #15]
  7038. 8002ec2: 7bfa ldrb r2, [r7, #15]
  7039. 8002ec4: 78fb ldrb r3, [r7, #3]
  7040. 8002ec6: 3b01 subs r3, #1
  7041. 8002ec8: 429a cmp r2, r3
  7042. 8002eca: d3ec bcc.n 8002ea6 <HAL_PCDEx_SetTxFiFo+0x42>
  7043. }
  7044. /* Multiply Tx_Size by 2 to get higher performance */
  7045. hpcd->Instance->DIEPTXF[fifo - 1U] = ((uint32_t)size << 16) | Tx_Offset;
  7046. 8002ecc: 883b ldrh r3, [r7, #0]
  7047. 8002ece: 0418 lsls r0, r3, #16
  7048. 8002ed0: 687b ldr r3, [r7, #4]
  7049. 8002ed2: 6819 ldr r1, [r3, #0]
  7050. 8002ed4: 78fb ldrb r3, [r7, #3]
  7051. 8002ed6: 3b01 subs r3, #1
  7052. 8002ed8: 68ba ldr r2, [r7, #8]
  7053. 8002eda: 4302 orrs r2, r0
  7054. 8002edc: 3340 adds r3, #64 ; 0x40
  7055. 8002ede: 009b lsls r3, r3, #2
  7056. 8002ee0: 440b add r3, r1
  7057. 8002ee2: 605a str r2, [r3, #4]
  7058. }
  7059. return HAL_OK;
  7060. 8002ee4: 2300 movs r3, #0
  7061. }
  7062. 8002ee6: 4618 mov r0, r3
  7063. 8002ee8: 3714 adds r7, #20
  7064. 8002eea: 46bd mov sp, r7
  7065. 8002eec: f85d 7b04 ldr.w r7, [sp], #4
  7066. 8002ef0: 4770 bx lr
  7067. 08002ef2 <HAL_PCDEx_SetRxFiFo>:
  7068. * @param hpcd PCD handle
  7069. * @param size Size of Rx fifo
  7070. * @retval HAL status
  7071. */
  7072. HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size)
  7073. {
  7074. 8002ef2: b480 push {r7}
  7075. 8002ef4: b083 sub sp, #12
  7076. 8002ef6: af00 add r7, sp, #0
  7077. 8002ef8: 6078 str r0, [r7, #4]
  7078. 8002efa: 460b mov r3, r1
  7079. 8002efc: 807b strh r3, [r7, #2]
  7080. hpcd->Instance->GRXFSIZ = size;
  7081. 8002efe: 687b ldr r3, [r7, #4]
  7082. 8002f00: 681b ldr r3, [r3, #0]
  7083. 8002f02: 887a ldrh r2, [r7, #2]
  7084. 8002f04: 625a str r2, [r3, #36] ; 0x24
  7085. return HAL_OK;
  7086. 8002f06: 2300 movs r3, #0
  7087. }
  7088. 8002f08: 4618 mov r0, r3
  7089. 8002f0a: 370c adds r7, #12
  7090. 8002f0c: 46bd mov sp, r7
  7091. 8002f0e: f85d 7b04 ldr.w r7, [sp], #4
  7092. 8002f12: 4770 bx lr
  7093. 08002f14 <HAL_PCDEx_ActivateLPM>:
  7094. * @brief Activate LPM feature.
  7095. * @param hpcd PCD handle
  7096. * @retval HAL status
  7097. */
  7098. HAL_StatusTypeDef HAL_PCDEx_ActivateLPM(PCD_HandleTypeDef *hpcd)
  7099. {
  7100. 8002f14: b480 push {r7}
  7101. 8002f16: b085 sub sp, #20
  7102. 8002f18: af00 add r7, sp, #0
  7103. 8002f1a: 6078 str r0, [r7, #4]
  7104. USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
  7105. 8002f1c: 687b ldr r3, [r7, #4]
  7106. 8002f1e: 681b ldr r3, [r3, #0]
  7107. 8002f20: 60fb str r3, [r7, #12]
  7108. hpcd->lpm_active = 1U;
  7109. 8002f22: 687b ldr r3, [r7, #4]
  7110. 8002f24: 2201 movs r2, #1
  7111. 8002f26: f8c3 23fc str.w r2, [r3, #1020] ; 0x3fc
  7112. hpcd->LPM_State = LPM_L0;
  7113. 8002f2a: 687b ldr r3, [r7, #4]
  7114. 8002f2c: 2200 movs r2, #0
  7115. 8002f2e: f883 23f4 strb.w r2, [r3, #1012] ; 0x3f4
  7116. USBx->GINTMSK |= USB_OTG_GINTMSK_LPMINTM;
  7117. 8002f32: 68fb ldr r3, [r7, #12]
  7118. 8002f34: 699b ldr r3, [r3, #24]
  7119. 8002f36: f043 6200 orr.w r2, r3, #134217728 ; 0x8000000
  7120. 8002f3a: 68fb ldr r3, [r7, #12]
  7121. 8002f3c: 619a str r2, [r3, #24]
  7122. USBx->GLPMCFG |= (USB_OTG_GLPMCFG_LPMEN | USB_OTG_GLPMCFG_LPMACK | USB_OTG_GLPMCFG_ENBESL);
  7123. 8002f3e: 68fb ldr r3, [r7, #12]
  7124. 8002f40: 6d5a ldr r2, [r3, #84] ; 0x54
  7125. 8002f42: 4b05 ldr r3, [pc, #20] ; (8002f58 <HAL_PCDEx_ActivateLPM+0x44>)
  7126. 8002f44: 4313 orrs r3, r2
  7127. 8002f46: 68fa ldr r2, [r7, #12]
  7128. 8002f48: 6553 str r3, [r2, #84] ; 0x54
  7129. return HAL_OK;
  7130. 8002f4a: 2300 movs r3, #0
  7131. }
  7132. 8002f4c: 4618 mov r0, r3
  7133. 8002f4e: 3714 adds r7, #20
  7134. 8002f50: 46bd mov sp, r7
  7135. 8002f52: f85d 7b04 ldr.w r7, [sp], #4
  7136. 8002f56: 4770 bx lr
  7137. 8002f58: 10000003 .word 0x10000003
  7138. 08002f5c <HAL_PCDEx_LPM_Callback>:
  7139. * @param hpcd PCD handle
  7140. * @param msg LPM message
  7141. * @retval HAL status
  7142. */
  7143. __weak void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg)
  7144. {
  7145. 8002f5c: b480 push {r7}
  7146. 8002f5e: b083 sub sp, #12
  7147. 8002f60: af00 add r7, sp, #0
  7148. 8002f62: 6078 str r0, [r7, #4]
  7149. 8002f64: 460b mov r3, r1
  7150. 8002f66: 70fb strb r3, [r7, #3]
  7151. UNUSED(msg);
  7152. /* NOTE : This function should not be modified, when the callback is needed,
  7153. the HAL_PCDEx_LPM_Callback could be implemented in the user file
  7154. */
  7155. }
  7156. 8002f68: bf00 nop
  7157. 8002f6a: 370c adds r7, #12
  7158. 8002f6c: 46bd mov sp, r7
  7159. 8002f6e: f85d 7b04 ldr.w r7, [sp], #4
  7160. 8002f72: 4770 bx lr
  7161. 08002f74 <HAL_PWREx_ConfigSupply>:
  7162. * PWR_SMPS_2V5_SUPPLIES_EXT are used only for lines that supports SMPS
  7163. * regulator.
  7164. * @retval HAL status.
  7165. */
  7166. HAL_StatusTypeDef HAL_PWREx_ConfigSupply (uint32_t SupplySource)
  7167. {
  7168. 8002f74: b580 push {r7, lr}
  7169. 8002f76: b084 sub sp, #16
  7170. 8002f78: af00 add r7, sp, #0
  7171. 8002f7a: 6078 str r0, [r7, #4]
  7172. /* Check the parameters */
  7173. assert_param (IS_PWR_SUPPLY (SupplySource));
  7174. /* Check if supply source was configured */
  7175. #if defined (PWR_FLAG_SCUEN)
  7176. if (__HAL_PWR_GET_FLAG (PWR_FLAG_SCUEN) == 0U)
  7177. 8002f7c: 4b19 ldr r3, [pc, #100] ; (8002fe4 <HAL_PWREx_ConfigSupply+0x70>)
  7178. 8002f7e: 68db ldr r3, [r3, #12]
  7179. 8002f80: f003 0304 and.w r3, r3, #4
  7180. 8002f84: 2b04 cmp r3, #4
  7181. 8002f86: d00a beq.n 8002f9e <HAL_PWREx_ConfigSupply+0x2a>
  7182. #else
  7183. if ((PWR->CR3 & (PWR_CR3_SMPSEN | PWR_CR3_LDOEN | PWR_CR3_BYPASS)) != (PWR_CR3_SMPSEN | PWR_CR3_LDOEN))
  7184. #endif /* defined (PWR_FLAG_SCUEN) */
  7185. {
  7186. /* Check supply configuration */
  7187. if ((PWR->CR3 & PWR_SUPPLY_CONFIG_MASK) != SupplySource)
  7188. 8002f88: 4b16 ldr r3, [pc, #88] ; (8002fe4 <HAL_PWREx_ConfigSupply+0x70>)
  7189. 8002f8a: 68db ldr r3, [r3, #12]
  7190. 8002f8c: f003 0307 and.w r3, r3, #7
  7191. 8002f90: 687a ldr r2, [r7, #4]
  7192. 8002f92: 429a cmp r2, r3
  7193. 8002f94: d001 beq.n 8002f9a <HAL_PWREx_ConfigSupply+0x26>
  7194. {
  7195. /* Supply configuration update locked, can't apply a new supply config */
  7196. return HAL_ERROR;
  7197. 8002f96: 2301 movs r3, #1
  7198. 8002f98: e01f b.n 8002fda <HAL_PWREx_ConfigSupply+0x66>
  7199. else
  7200. {
  7201. /* Supply configuration update locked, but new supply configuration
  7202. matches with old supply configuration : nothing to do
  7203. */
  7204. return HAL_OK;
  7205. 8002f9a: 2300 movs r3, #0
  7206. 8002f9c: e01d b.n 8002fda <HAL_PWREx_ConfigSupply+0x66>
  7207. }
  7208. }
  7209. /* Set the power supply configuration */
  7210. MODIFY_REG (PWR->CR3, PWR_SUPPLY_CONFIG_MASK, SupplySource);
  7211. 8002f9e: 4b11 ldr r3, [pc, #68] ; (8002fe4 <HAL_PWREx_ConfigSupply+0x70>)
  7212. 8002fa0: 68db ldr r3, [r3, #12]
  7213. 8002fa2: f023 0207 bic.w r2, r3, #7
  7214. 8002fa6: 490f ldr r1, [pc, #60] ; (8002fe4 <HAL_PWREx_ConfigSupply+0x70>)
  7215. 8002fa8: 687b ldr r3, [r7, #4]
  7216. 8002faa: 4313 orrs r3, r2
  7217. 8002fac: 60cb str r3, [r1, #12]
  7218. /* Get tick */
  7219. tickstart = HAL_GetTick ();
  7220. 8002fae: f7fe faf7 bl 80015a0 <HAL_GetTick>
  7221. 8002fb2: 60f8 str r0, [r7, #12]
  7222. /* Wait till voltage level flag is set */
  7223. while (__HAL_PWR_GET_FLAG (PWR_FLAG_ACTVOSRDY) == 0U)
  7224. 8002fb4: e009 b.n 8002fca <HAL_PWREx_ConfigSupply+0x56>
  7225. {
  7226. if ((HAL_GetTick () - tickstart) > PWR_FLAG_SETTING_DELAY)
  7227. 8002fb6: f7fe faf3 bl 80015a0 <HAL_GetTick>
  7228. 8002fba: 4602 mov r2, r0
  7229. 8002fbc: 68fb ldr r3, [r7, #12]
  7230. 8002fbe: 1ad3 subs r3, r2, r3
  7231. 8002fc0: f5b3 7f7a cmp.w r3, #1000 ; 0x3e8
  7232. 8002fc4: d901 bls.n 8002fca <HAL_PWREx_ConfigSupply+0x56>
  7233. {
  7234. return HAL_ERROR;
  7235. 8002fc6: 2301 movs r3, #1
  7236. 8002fc8: e007 b.n 8002fda <HAL_PWREx_ConfigSupply+0x66>
  7237. while (__HAL_PWR_GET_FLAG (PWR_FLAG_ACTVOSRDY) == 0U)
  7238. 8002fca: 4b06 ldr r3, [pc, #24] ; (8002fe4 <HAL_PWREx_ConfigSupply+0x70>)
  7239. 8002fcc: 685b ldr r3, [r3, #4]
  7240. 8002fce: f403 5300 and.w r3, r3, #8192 ; 0x2000
  7241. 8002fd2: f5b3 5f00 cmp.w r3, #8192 ; 0x2000
  7242. 8002fd6: d1ee bne.n 8002fb6 <HAL_PWREx_ConfigSupply+0x42>
  7243. }
  7244. }
  7245. }
  7246. #endif /* defined (SMPS) */
  7247. return HAL_OK;
  7248. 8002fd8: 2300 movs r3, #0
  7249. }
  7250. 8002fda: 4618 mov r0, r3
  7251. 8002fdc: 3710 adds r7, #16
  7252. 8002fde: 46bd mov sp, r7
  7253. 8002fe0: bd80 pop {r7, pc}
  7254. 8002fe2: bf00 nop
  7255. 8002fe4: 58024800 .word 0x58024800
  7256. 08002fe8 <HAL_PWREx_EnableUSBVoltageDetector>:
  7257. /**
  7258. * @brief Enable the USB voltage level detector.
  7259. * @retval None.
  7260. */
  7261. void HAL_PWREx_EnableUSBVoltageDetector (void)
  7262. {
  7263. 8002fe8: b480 push {r7}
  7264. 8002fea: af00 add r7, sp, #0
  7265. /* Enable the USB voltage detector */
  7266. SET_BIT (PWR->CR3, PWR_CR3_USB33DEN);
  7267. 8002fec: 4b05 ldr r3, [pc, #20] ; (8003004 <HAL_PWREx_EnableUSBVoltageDetector+0x1c>)
  7268. 8002fee: 68db ldr r3, [r3, #12]
  7269. 8002ff0: 4a04 ldr r2, [pc, #16] ; (8003004 <HAL_PWREx_EnableUSBVoltageDetector+0x1c>)
  7270. 8002ff2: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000
  7271. 8002ff6: 60d3 str r3, [r2, #12]
  7272. }
  7273. 8002ff8: bf00 nop
  7274. 8002ffa: 46bd mov sp, r7
  7275. 8002ffc: f85d 7b04 ldr.w r7, [sp], #4
  7276. 8003000: 4770 bx lr
  7277. 8003002: bf00 nop
  7278. 8003004: 58024800 .word 0x58024800
  7279. 08003008 <HAL_RCC_OscConfig>:
  7280. * supported by this function. User should request a transition to HSE Off
  7281. * first and then HSE On or HSE Bypass.
  7282. * @retval HAL status
  7283. */
  7284. __weak HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
  7285. {
  7286. 8003008: b580 push {r7, lr}
  7287. 800300a: b08c sub sp, #48 ; 0x30
  7288. 800300c: af00 add r7, sp, #0
  7289. 800300e: 6078 str r0, [r7, #4]
  7290. uint32_t tickstart;
  7291. uint32_t temp1_pllckcfg, temp2_pllckcfg;
  7292. /* Check Null pointer */
  7293. if(RCC_OscInitStruct == NULL)
  7294. 8003010: 687b ldr r3, [r7, #4]
  7295. 8003012: 2b00 cmp r3, #0
  7296. 8003014: d101 bne.n 800301a <HAL_RCC_OscConfig+0x12>
  7297. {
  7298. return HAL_ERROR;
  7299. 8003016: 2301 movs r3, #1
  7300. 8003018: e397 b.n 800374a <HAL_RCC_OscConfig+0x742>
  7301. }
  7302. /* Check the parameters */
  7303. assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
  7304. /*------------------------------- HSE Configuration ------------------------*/
  7305. if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
  7306. 800301a: 687b ldr r3, [r7, #4]
  7307. 800301c: 681b ldr r3, [r3, #0]
  7308. 800301e: f003 0301 and.w r3, r3, #1
  7309. 8003022: 2b00 cmp r3, #0
  7310. 8003024: f000 8087 beq.w 8003136 <HAL_RCC_OscConfig+0x12e>
  7311. {
  7312. /* Check the parameters */
  7313. assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
  7314. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  7315. 8003028: 4b9e ldr r3, [pc, #632] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7316. 800302a: 691b ldr r3, [r3, #16]
  7317. 800302c: f003 0338 and.w r3, r3, #56 ; 0x38
  7318. 8003030: 62fb str r3, [r7, #44] ; 0x2c
  7319. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  7320. 8003032: 4b9c ldr r3, [pc, #624] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7321. 8003034: 6a9b ldr r3, [r3, #40] ; 0x28
  7322. 8003036: 62bb str r3, [r7, #40] ; 0x28
  7323. /* When the HSE is used as system clock or clock source for PLL in these cases HSE will not disabled */
  7324. if((temp_sysclksrc == RCC_CFGR_SWS_HSE) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_HSE)))
  7325. 8003038: 6afb ldr r3, [r7, #44] ; 0x2c
  7326. 800303a: 2b10 cmp r3, #16
  7327. 800303c: d007 beq.n 800304e <HAL_RCC_OscConfig+0x46>
  7328. 800303e: 6afb ldr r3, [r7, #44] ; 0x2c
  7329. 8003040: 2b18 cmp r3, #24
  7330. 8003042: d110 bne.n 8003066 <HAL_RCC_OscConfig+0x5e>
  7331. 8003044: 6abb ldr r3, [r7, #40] ; 0x28
  7332. 8003046: f003 0303 and.w r3, r3, #3
  7333. 800304a: 2b02 cmp r3, #2
  7334. 800304c: d10b bne.n 8003066 <HAL_RCC_OscConfig+0x5e>
  7335. {
  7336. if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
  7337. 800304e: 4b95 ldr r3, [pc, #596] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7338. 8003050: 681b ldr r3, [r3, #0]
  7339. 8003052: f403 3300 and.w r3, r3, #131072 ; 0x20000
  7340. 8003056: 2b00 cmp r3, #0
  7341. 8003058: d06c beq.n 8003134 <HAL_RCC_OscConfig+0x12c>
  7342. 800305a: 687b ldr r3, [r7, #4]
  7343. 800305c: 685b ldr r3, [r3, #4]
  7344. 800305e: 2b00 cmp r3, #0
  7345. 8003060: d168 bne.n 8003134 <HAL_RCC_OscConfig+0x12c>
  7346. {
  7347. return HAL_ERROR;
  7348. 8003062: 2301 movs r3, #1
  7349. 8003064: e371 b.n 800374a <HAL_RCC_OscConfig+0x742>
  7350. }
  7351. }
  7352. else
  7353. {
  7354. /* Set the new HSE configuration ---------------------------------------*/
  7355. __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
  7356. 8003066: 687b ldr r3, [r7, #4]
  7357. 8003068: 685b ldr r3, [r3, #4]
  7358. 800306a: f5b3 3f80 cmp.w r3, #65536 ; 0x10000
  7359. 800306e: d106 bne.n 800307e <HAL_RCC_OscConfig+0x76>
  7360. 8003070: 4b8c ldr r3, [pc, #560] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7361. 8003072: 681b ldr r3, [r3, #0]
  7362. 8003074: 4a8b ldr r2, [pc, #556] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7363. 8003076: f443 3380 orr.w r3, r3, #65536 ; 0x10000
  7364. 800307a: 6013 str r3, [r2, #0]
  7365. 800307c: e02e b.n 80030dc <HAL_RCC_OscConfig+0xd4>
  7366. 800307e: 687b ldr r3, [r7, #4]
  7367. 8003080: 685b ldr r3, [r3, #4]
  7368. 8003082: 2b00 cmp r3, #0
  7369. 8003084: d10c bne.n 80030a0 <HAL_RCC_OscConfig+0x98>
  7370. 8003086: 4b87 ldr r3, [pc, #540] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7371. 8003088: 681b ldr r3, [r3, #0]
  7372. 800308a: 4a86 ldr r2, [pc, #536] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7373. 800308c: f423 3380 bic.w r3, r3, #65536 ; 0x10000
  7374. 8003090: 6013 str r3, [r2, #0]
  7375. 8003092: 4b84 ldr r3, [pc, #528] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7376. 8003094: 681b ldr r3, [r3, #0]
  7377. 8003096: 4a83 ldr r2, [pc, #524] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7378. 8003098: f423 2380 bic.w r3, r3, #262144 ; 0x40000
  7379. 800309c: 6013 str r3, [r2, #0]
  7380. 800309e: e01d b.n 80030dc <HAL_RCC_OscConfig+0xd4>
  7381. 80030a0: 687b ldr r3, [r7, #4]
  7382. 80030a2: 685b ldr r3, [r3, #4]
  7383. 80030a4: f5b3 2fa0 cmp.w r3, #327680 ; 0x50000
  7384. 80030a8: d10c bne.n 80030c4 <HAL_RCC_OscConfig+0xbc>
  7385. 80030aa: 4b7e ldr r3, [pc, #504] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7386. 80030ac: 681b ldr r3, [r3, #0]
  7387. 80030ae: 4a7d ldr r2, [pc, #500] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7388. 80030b0: f443 2380 orr.w r3, r3, #262144 ; 0x40000
  7389. 80030b4: 6013 str r3, [r2, #0]
  7390. 80030b6: 4b7b ldr r3, [pc, #492] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7391. 80030b8: 681b ldr r3, [r3, #0]
  7392. 80030ba: 4a7a ldr r2, [pc, #488] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7393. 80030bc: f443 3380 orr.w r3, r3, #65536 ; 0x10000
  7394. 80030c0: 6013 str r3, [r2, #0]
  7395. 80030c2: e00b b.n 80030dc <HAL_RCC_OscConfig+0xd4>
  7396. 80030c4: 4b77 ldr r3, [pc, #476] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7397. 80030c6: 681b ldr r3, [r3, #0]
  7398. 80030c8: 4a76 ldr r2, [pc, #472] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7399. 80030ca: f423 3380 bic.w r3, r3, #65536 ; 0x10000
  7400. 80030ce: 6013 str r3, [r2, #0]
  7401. 80030d0: 4b74 ldr r3, [pc, #464] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7402. 80030d2: 681b ldr r3, [r3, #0]
  7403. 80030d4: 4a73 ldr r2, [pc, #460] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7404. 80030d6: f423 2380 bic.w r3, r3, #262144 ; 0x40000
  7405. 80030da: 6013 str r3, [r2, #0]
  7406. /* Check the HSE State */
  7407. if(RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
  7408. 80030dc: 687b ldr r3, [r7, #4]
  7409. 80030de: 685b ldr r3, [r3, #4]
  7410. 80030e0: 2b00 cmp r3, #0
  7411. 80030e2: d013 beq.n 800310c <HAL_RCC_OscConfig+0x104>
  7412. {
  7413. /* Get Start Tick*/
  7414. tickstart = HAL_GetTick();
  7415. 80030e4: f7fe fa5c bl 80015a0 <HAL_GetTick>
  7416. 80030e8: 6278 str r0, [r7, #36] ; 0x24
  7417. /* Wait till HSE is ready */
  7418. while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  7419. 80030ea: e008 b.n 80030fe <HAL_RCC_OscConfig+0xf6>
  7420. {
  7421. if((uint32_t) (HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
  7422. 80030ec: f7fe fa58 bl 80015a0 <HAL_GetTick>
  7423. 80030f0: 4602 mov r2, r0
  7424. 80030f2: 6a7b ldr r3, [r7, #36] ; 0x24
  7425. 80030f4: 1ad3 subs r3, r2, r3
  7426. 80030f6: 2b64 cmp r3, #100 ; 0x64
  7427. 80030f8: d901 bls.n 80030fe <HAL_RCC_OscConfig+0xf6>
  7428. {
  7429. return HAL_TIMEOUT;
  7430. 80030fa: 2303 movs r3, #3
  7431. 80030fc: e325 b.n 800374a <HAL_RCC_OscConfig+0x742>
  7432. while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  7433. 80030fe: 4b69 ldr r3, [pc, #420] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7434. 8003100: 681b ldr r3, [r3, #0]
  7435. 8003102: f403 3300 and.w r3, r3, #131072 ; 0x20000
  7436. 8003106: 2b00 cmp r3, #0
  7437. 8003108: d0f0 beq.n 80030ec <HAL_RCC_OscConfig+0xe4>
  7438. 800310a: e014 b.n 8003136 <HAL_RCC_OscConfig+0x12e>
  7439. }
  7440. }
  7441. else
  7442. {
  7443. /* Get Start Tick*/
  7444. tickstart = HAL_GetTick();
  7445. 800310c: f7fe fa48 bl 80015a0 <HAL_GetTick>
  7446. 8003110: 6278 str r0, [r7, #36] ; 0x24
  7447. /* Wait till HSE is disabled */
  7448. while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U)
  7449. 8003112: e008 b.n 8003126 <HAL_RCC_OscConfig+0x11e>
  7450. {
  7451. if((uint32_t) (HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
  7452. 8003114: f7fe fa44 bl 80015a0 <HAL_GetTick>
  7453. 8003118: 4602 mov r2, r0
  7454. 800311a: 6a7b ldr r3, [r7, #36] ; 0x24
  7455. 800311c: 1ad3 subs r3, r2, r3
  7456. 800311e: 2b64 cmp r3, #100 ; 0x64
  7457. 8003120: d901 bls.n 8003126 <HAL_RCC_OscConfig+0x11e>
  7458. {
  7459. return HAL_TIMEOUT;
  7460. 8003122: 2303 movs r3, #3
  7461. 8003124: e311 b.n 800374a <HAL_RCC_OscConfig+0x742>
  7462. while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U)
  7463. 8003126: 4b5f ldr r3, [pc, #380] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7464. 8003128: 681b ldr r3, [r3, #0]
  7465. 800312a: f403 3300 and.w r3, r3, #131072 ; 0x20000
  7466. 800312e: 2b00 cmp r3, #0
  7467. 8003130: d1f0 bne.n 8003114 <HAL_RCC_OscConfig+0x10c>
  7468. 8003132: e000 b.n 8003136 <HAL_RCC_OscConfig+0x12e>
  7469. if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
  7470. 8003134: bf00 nop
  7471. }
  7472. }
  7473. }
  7474. }
  7475. /*----------------------------- HSI Configuration --------------------------*/
  7476. if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
  7477. 8003136: 687b ldr r3, [r7, #4]
  7478. 8003138: 681b ldr r3, [r3, #0]
  7479. 800313a: f003 0302 and.w r3, r3, #2
  7480. 800313e: 2b00 cmp r3, #0
  7481. 8003140: f000 808a beq.w 8003258 <HAL_RCC_OscConfig+0x250>
  7482. /* Check the parameters */
  7483. assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
  7484. assert_param(IS_RCC_HSICALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
  7485. /* When the HSI is used as system clock it will not be disabled */
  7486. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  7487. 8003144: 4b57 ldr r3, [pc, #348] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7488. 8003146: 691b ldr r3, [r3, #16]
  7489. 8003148: f003 0338 and.w r3, r3, #56 ; 0x38
  7490. 800314c: 623b str r3, [r7, #32]
  7491. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  7492. 800314e: 4b55 ldr r3, [pc, #340] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7493. 8003150: 6a9b ldr r3, [r3, #40] ; 0x28
  7494. 8003152: 61fb str r3, [r7, #28]
  7495. if((temp_sysclksrc == RCC_CFGR_SWS_HSI) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_HSI)))
  7496. 8003154: 6a3b ldr r3, [r7, #32]
  7497. 8003156: 2b00 cmp r3, #0
  7498. 8003158: d007 beq.n 800316a <HAL_RCC_OscConfig+0x162>
  7499. 800315a: 6a3b ldr r3, [r7, #32]
  7500. 800315c: 2b18 cmp r3, #24
  7501. 800315e: d137 bne.n 80031d0 <HAL_RCC_OscConfig+0x1c8>
  7502. 8003160: 69fb ldr r3, [r7, #28]
  7503. 8003162: f003 0303 and.w r3, r3, #3
  7504. 8003166: 2b00 cmp r3, #0
  7505. 8003168: d132 bne.n 80031d0 <HAL_RCC_OscConfig+0x1c8>
  7506. {
  7507. /* When HSI is used as system clock it will not be disabled */
  7508. if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  7509. 800316a: 4b4e ldr r3, [pc, #312] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7510. 800316c: 681b ldr r3, [r3, #0]
  7511. 800316e: f003 0304 and.w r3, r3, #4
  7512. 8003172: 2b00 cmp r3, #0
  7513. 8003174: d005 beq.n 8003182 <HAL_RCC_OscConfig+0x17a>
  7514. 8003176: 687b ldr r3, [r7, #4]
  7515. 8003178: 68db ldr r3, [r3, #12]
  7516. 800317a: 2b00 cmp r3, #0
  7517. 800317c: d101 bne.n 8003182 <HAL_RCC_OscConfig+0x17a>
  7518. {
  7519. return HAL_ERROR;
  7520. 800317e: 2301 movs r3, #1
  7521. 8003180: e2e3 b.n 800374a <HAL_RCC_OscConfig+0x742>
  7522. }
  7523. /* Otherwise, only HSI division and calibration are allowed */
  7524. else
  7525. {
  7526. /* Enable the Internal High Speed oscillator (HSI, HSIDIV2, HSIDIV4, or HSIDIV8) */
  7527. __HAL_RCC_HSI_CONFIG(RCC_OscInitStruct->HSIState);
  7528. 8003182: 4b48 ldr r3, [pc, #288] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7529. 8003184: 681b ldr r3, [r3, #0]
  7530. 8003186: f023 0219 bic.w r2, r3, #25
  7531. 800318a: 687b ldr r3, [r7, #4]
  7532. 800318c: 68db ldr r3, [r3, #12]
  7533. 800318e: 4945 ldr r1, [pc, #276] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7534. 8003190: 4313 orrs r3, r2
  7535. 8003192: 600b str r3, [r1, #0]
  7536. /* Get Start Tick*/
  7537. tickstart = HAL_GetTick();
  7538. 8003194: f7fe fa04 bl 80015a0 <HAL_GetTick>
  7539. 8003198: 6278 str r0, [r7, #36] ; 0x24
  7540. /* Wait till HSI is ready */
  7541. while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  7542. 800319a: e008 b.n 80031ae <HAL_RCC_OscConfig+0x1a6>
  7543. {
  7544. if((uint32_t) (HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
  7545. 800319c: f7fe fa00 bl 80015a0 <HAL_GetTick>
  7546. 80031a0: 4602 mov r2, r0
  7547. 80031a2: 6a7b ldr r3, [r7, #36] ; 0x24
  7548. 80031a4: 1ad3 subs r3, r2, r3
  7549. 80031a6: 2b02 cmp r3, #2
  7550. 80031a8: d901 bls.n 80031ae <HAL_RCC_OscConfig+0x1a6>
  7551. {
  7552. return HAL_TIMEOUT;
  7553. 80031aa: 2303 movs r3, #3
  7554. 80031ac: e2cd b.n 800374a <HAL_RCC_OscConfig+0x742>
  7555. while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  7556. 80031ae: 4b3d ldr r3, [pc, #244] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7557. 80031b0: 681b ldr r3, [r3, #0]
  7558. 80031b2: f003 0304 and.w r3, r3, #4
  7559. 80031b6: 2b00 cmp r3, #0
  7560. 80031b8: d0f0 beq.n 800319c <HAL_RCC_OscConfig+0x194>
  7561. }
  7562. }
  7563. /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/
  7564. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  7565. 80031ba: 4b3a ldr r3, [pc, #232] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7566. 80031bc: 685b ldr r3, [r3, #4]
  7567. 80031be: f023 42fe bic.w r2, r3, #2130706432 ; 0x7f000000
  7568. 80031c2: 687b ldr r3, [r7, #4]
  7569. 80031c4: 691b ldr r3, [r3, #16]
  7570. 80031c6: 061b lsls r3, r3, #24
  7571. 80031c8: 4936 ldr r1, [pc, #216] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7572. 80031ca: 4313 orrs r3, r2
  7573. 80031cc: 604b str r3, [r1, #4]
  7574. if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  7575. 80031ce: e043 b.n 8003258 <HAL_RCC_OscConfig+0x250>
  7576. }
  7577. else
  7578. {
  7579. /* Check the HSI State */
  7580. if((RCC_OscInitStruct->HSIState)!= RCC_HSI_OFF)
  7581. 80031d0: 687b ldr r3, [r7, #4]
  7582. 80031d2: 68db ldr r3, [r3, #12]
  7583. 80031d4: 2b00 cmp r3, #0
  7584. 80031d6: d026 beq.n 8003226 <HAL_RCC_OscConfig+0x21e>
  7585. {
  7586. /* Enable the Internal High Speed oscillator (HSI, HSIDIV2,HSIDIV4, or HSIDIV8) */
  7587. __HAL_RCC_HSI_CONFIG(RCC_OscInitStruct->HSIState);
  7588. 80031d8: 4b32 ldr r3, [pc, #200] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7589. 80031da: 681b ldr r3, [r3, #0]
  7590. 80031dc: f023 0219 bic.w r2, r3, #25
  7591. 80031e0: 687b ldr r3, [r7, #4]
  7592. 80031e2: 68db ldr r3, [r3, #12]
  7593. 80031e4: 492f ldr r1, [pc, #188] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7594. 80031e6: 4313 orrs r3, r2
  7595. 80031e8: 600b str r3, [r1, #0]
  7596. /* Get Start Tick*/
  7597. tickstart = HAL_GetTick();
  7598. 80031ea: f7fe f9d9 bl 80015a0 <HAL_GetTick>
  7599. 80031ee: 6278 str r0, [r7, #36] ; 0x24
  7600. /* Wait till HSI is ready */
  7601. while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  7602. 80031f0: e008 b.n 8003204 <HAL_RCC_OscConfig+0x1fc>
  7603. {
  7604. if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
  7605. 80031f2: f7fe f9d5 bl 80015a0 <HAL_GetTick>
  7606. 80031f6: 4602 mov r2, r0
  7607. 80031f8: 6a7b ldr r3, [r7, #36] ; 0x24
  7608. 80031fa: 1ad3 subs r3, r2, r3
  7609. 80031fc: 2b02 cmp r3, #2
  7610. 80031fe: d901 bls.n 8003204 <HAL_RCC_OscConfig+0x1fc>
  7611. {
  7612. return HAL_TIMEOUT;
  7613. 8003200: 2303 movs r3, #3
  7614. 8003202: e2a2 b.n 800374a <HAL_RCC_OscConfig+0x742>
  7615. while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  7616. 8003204: 4b27 ldr r3, [pc, #156] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7617. 8003206: 681b ldr r3, [r3, #0]
  7618. 8003208: f003 0304 and.w r3, r3, #4
  7619. 800320c: 2b00 cmp r3, #0
  7620. 800320e: d0f0 beq.n 80031f2 <HAL_RCC_OscConfig+0x1ea>
  7621. }
  7622. }
  7623. /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/
  7624. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  7625. 8003210: 4b24 ldr r3, [pc, #144] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7626. 8003212: 685b ldr r3, [r3, #4]
  7627. 8003214: f023 42fe bic.w r2, r3, #2130706432 ; 0x7f000000
  7628. 8003218: 687b ldr r3, [r7, #4]
  7629. 800321a: 691b ldr r3, [r3, #16]
  7630. 800321c: 061b lsls r3, r3, #24
  7631. 800321e: 4921 ldr r1, [pc, #132] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7632. 8003220: 4313 orrs r3, r2
  7633. 8003222: 604b str r3, [r1, #4]
  7634. 8003224: e018 b.n 8003258 <HAL_RCC_OscConfig+0x250>
  7635. }
  7636. else
  7637. {
  7638. /* Disable the Internal High Speed oscillator (HSI). */
  7639. __HAL_RCC_HSI_DISABLE();
  7640. 8003226: 4b1f ldr r3, [pc, #124] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7641. 8003228: 681b ldr r3, [r3, #0]
  7642. 800322a: 4a1e ldr r2, [pc, #120] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7643. 800322c: f023 0301 bic.w r3, r3, #1
  7644. 8003230: 6013 str r3, [r2, #0]
  7645. /* Get Start Tick*/
  7646. tickstart = HAL_GetTick();
  7647. 8003232: f7fe f9b5 bl 80015a0 <HAL_GetTick>
  7648. 8003236: 6278 str r0, [r7, #36] ; 0x24
  7649. /* Wait till HSI is disabled */
  7650. while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U)
  7651. 8003238: e008 b.n 800324c <HAL_RCC_OscConfig+0x244>
  7652. {
  7653. if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
  7654. 800323a: f7fe f9b1 bl 80015a0 <HAL_GetTick>
  7655. 800323e: 4602 mov r2, r0
  7656. 8003240: 6a7b ldr r3, [r7, #36] ; 0x24
  7657. 8003242: 1ad3 subs r3, r2, r3
  7658. 8003244: 2b02 cmp r3, #2
  7659. 8003246: d901 bls.n 800324c <HAL_RCC_OscConfig+0x244>
  7660. {
  7661. return HAL_TIMEOUT;
  7662. 8003248: 2303 movs r3, #3
  7663. 800324a: e27e b.n 800374a <HAL_RCC_OscConfig+0x742>
  7664. while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U)
  7665. 800324c: 4b15 ldr r3, [pc, #84] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7666. 800324e: 681b ldr r3, [r3, #0]
  7667. 8003250: f003 0304 and.w r3, r3, #4
  7668. 8003254: 2b00 cmp r3, #0
  7669. 8003256: d1f0 bne.n 800323a <HAL_RCC_OscConfig+0x232>
  7670. }
  7671. }
  7672. }
  7673. }
  7674. /*----------------------------- CSI Configuration --------------------------*/
  7675. if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_CSI) == RCC_OSCILLATORTYPE_CSI)
  7676. 8003258: 687b ldr r3, [r7, #4]
  7677. 800325a: 681b ldr r3, [r3, #0]
  7678. 800325c: f003 0310 and.w r3, r3, #16
  7679. 8003260: 2b00 cmp r3, #0
  7680. 8003262: d06d beq.n 8003340 <HAL_RCC_OscConfig+0x338>
  7681. /* Check the parameters */
  7682. assert_param(IS_RCC_CSI(RCC_OscInitStruct->CSIState));
  7683. assert_param(IS_RCC_CSICALIBRATION_VALUE(RCC_OscInitStruct->CSICalibrationValue));
  7684. /* When the CSI is used as system clock it will not disabled */
  7685. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  7686. 8003264: 4b0f ldr r3, [pc, #60] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7687. 8003266: 691b ldr r3, [r3, #16]
  7688. 8003268: f003 0338 and.w r3, r3, #56 ; 0x38
  7689. 800326c: 61bb str r3, [r7, #24]
  7690. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  7691. 800326e: 4b0d ldr r3, [pc, #52] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7692. 8003270: 6a9b ldr r3, [r3, #40] ; 0x28
  7693. 8003272: 617b str r3, [r7, #20]
  7694. if((temp_sysclksrc == RCC_CFGR_SWS_CSI) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_CSI)))
  7695. 8003274: 69bb ldr r3, [r7, #24]
  7696. 8003276: 2b08 cmp r3, #8
  7697. 8003278: d007 beq.n 800328a <HAL_RCC_OscConfig+0x282>
  7698. 800327a: 69bb ldr r3, [r7, #24]
  7699. 800327c: 2b18 cmp r3, #24
  7700. 800327e: d11e bne.n 80032be <HAL_RCC_OscConfig+0x2b6>
  7701. 8003280: 697b ldr r3, [r7, #20]
  7702. 8003282: f003 0303 and.w r3, r3, #3
  7703. 8003286: 2b01 cmp r3, #1
  7704. 8003288: d119 bne.n 80032be <HAL_RCC_OscConfig+0x2b6>
  7705. {
  7706. /* When CSI is used as system clock it will not disabled */
  7707. if((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  7708. 800328a: 4b06 ldr r3, [pc, #24] ; (80032a4 <HAL_RCC_OscConfig+0x29c>)
  7709. 800328c: 681b ldr r3, [r3, #0]
  7710. 800328e: f403 7380 and.w r3, r3, #256 ; 0x100
  7711. 8003292: 2b00 cmp r3, #0
  7712. 8003294: d008 beq.n 80032a8 <HAL_RCC_OscConfig+0x2a0>
  7713. 8003296: 687b ldr r3, [r7, #4]
  7714. 8003298: 69db ldr r3, [r3, #28]
  7715. 800329a: 2b80 cmp r3, #128 ; 0x80
  7716. 800329c: d004 beq.n 80032a8 <HAL_RCC_OscConfig+0x2a0>
  7717. {
  7718. return HAL_ERROR;
  7719. 800329e: 2301 movs r3, #1
  7720. 80032a0: e253 b.n 800374a <HAL_RCC_OscConfig+0x742>
  7721. 80032a2: bf00 nop
  7722. 80032a4: 58024400 .word 0x58024400
  7723. }
  7724. /* Otherwise, just the calibration is allowed */
  7725. else
  7726. {
  7727. /* Adjusts the Internal High Speed oscillator (CSI) calibration value.*/
  7728. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  7729. 80032a8: 4ba3 ldr r3, [pc, #652] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7730. 80032aa: 68db ldr r3, [r3, #12]
  7731. 80032ac: f023 527c bic.w r2, r3, #1056964608 ; 0x3f000000
  7732. 80032b0: 687b ldr r3, [r7, #4]
  7733. 80032b2: 6a1b ldr r3, [r3, #32]
  7734. 80032b4: 061b lsls r3, r3, #24
  7735. 80032b6: 49a0 ldr r1, [pc, #640] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7736. 80032b8: 4313 orrs r3, r2
  7737. 80032ba: 60cb str r3, [r1, #12]
  7738. if((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  7739. 80032bc: e040 b.n 8003340 <HAL_RCC_OscConfig+0x338>
  7740. }
  7741. }
  7742. else
  7743. {
  7744. /* Check the CSI State */
  7745. if((RCC_OscInitStruct->CSIState)!= RCC_CSI_OFF)
  7746. 80032be: 687b ldr r3, [r7, #4]
  7747. 80032c0: 69db ldr r3, [r3, #28]
  7748. 80032c2: 2b00 cmp r3, #0
  7749. 80032c4: d023 beq.n 800330e <HAL_RCC_OscConfig+0x306>
  7750. {
  7751. /* Enable the Internal High Speed oscillator (CSI). */
  7752. __HAL_RCC_CSI_ENABLE();
  7753. 80032c6: 4b9c ldr r3, [pc, #624] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7754. 80032c8: 681b ldr r3, [r3, #0]
  7755. 80032ca: 4a9b ldr r2, [pc, #620] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7756. 80032cc: f043 0380 orr.w r3, r3, #128 ; 0x80
  7757. 80032d0: 6013 str r3, [r2, #0]
  7758. /* Get Start Tick*/
  7759. tickstart = HAL_GetTick();
  7760. 80032d2: f7fe f965 bl 80015a0 <HAL_GetTick>
  7761. 80032d6: 6278 str r0, [r7, #36] ; 0x24
  7762. /* Wait till CSI is ready */
  7763. while(__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  7764. 80032d8: e008 b.n 80032ec <HAL_RCC_OscConfig+0x2e4>
  7765. {
  7766. if((HAL_GetTick() - tickstart ) > CSI_TIMEOUT_VALUE)
  7767. 80032da: f7fe f961 bl 80015a0 <HAL_GetTick>
  7768. 80032de: 4602 mov r2, r0
  7769. 80032e0: 6a7b ldr r3, [r7, #36] ; 0x24
  7770. 80032e2: 1ad3 subs r3, r2, r3
  7771. 80032e4: 2b02 cmp r3, #2
  7772. 80032e6: d901 bls.n 80032ec <HAL_RCC_OscConfig+0x2e4>
  7773. {
  7774. return HAL_TIMEOUT;
  7775. 80032e8: 2303 movs r3, #3
  7776. 80032ea: e22e b.n 800374a <HAL_RCC_OscConfig+0x742>
  7777. while(__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  7778. 80032ec: 4b92 ldr r3, [pc, #584] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7779. 80032ee: 681b ldr r3, [r3, #0]
  7780. 80032f0: f403 7380 and.w r3, r3, #256 ; 0x100
  7781. 80032f4: 2b00 cmp r3, #0
  7782. 80032f6: d0f0 beq.n 80032da <HAL_RCC_OscConfig+0x2d2>
  7783. }
  7784. }
  7785. /* Adjusts the Internal High Speed oscillator (CSI) calibration value.*/
  7786. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  7787. 80032f8: 4b8f ldr r3, [pc, #572] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7788. 80032fa: 68db ldr r3, [r3, #12]
  7789. 80032fc: f023 527c bic.w r2, r3, #1056964608 ; 0x3f000000
  7790. 8003300: 687b ldr r3, [r7, #4]
  7791. 8003302: 6a1b ldr r3, [r3, #32]
  7792. 8003304: 061b lsls r3, r3, #24
  7793. 8003306: 498c ldr r1, [pc, #560] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7794. 8003308: 4313 orrs r3, r2
  7795. 800330a: 60cb str r3, [r1, #12]
  7796. 800330c: e018 b.n 8003340 <HAL_RCC_OscConfig+0x338>
  7797. }
  7798. else
  7799. {
  7800. /* Disable the Internal High Speed oscillator (CSI). */
  7801. __HAL_RCC_CSI_DISABLE();
  7802. 800330e: 4b8a ldr r3, [pc, #552] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7803. 8003310: 681b ldr r3, [r3, #0]
  7804. 8003312: 4a89 ldr r2, [pc, #548] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7805. 8003314: f023 0380 bic.w r3, r3, #128 ; 0x80
  7806. 8003318: 6013 str r3, [r2, #0]
  7807. /* Get Start Tick*/
  7808. tickstart = HAL_GetTick();
  7809. 800331a: f7fe f941 bl 80015a0 <HAL_GetTick>
  7810. 800331e: 6278 str r0, [r7, #36] ; 0x24
  7811. /* Wait till CSI is disabled */
  7812. while(__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U)
  7813. 8003320: e008 b.n 8003334 <HAL_RCC_OscConfig+0x32c>
  7814. {
  7815. if((HAL_GetTick() - tickstart ) > CSI_TIMEOUT_VALUE)
  7816. 8003322: f7fe f93d bl 80015a0 <HAL_GetTick>
  7817. 8003326: 4602 mov r2, r0
  7818. 8003328: 6a7b ldr r3, [r7, #36] ; 0x24
  7819. 800332a: 1ad3 subs r3, r2, r3
  7820. 800332c: 2b02 cmp r3, #2
  7821. 800332e: d901 bls.n 8003334 <HAL_RCC_OscConfig+0x32c>
  7822. {
  7823. return HAL_TIMEOUT;
  7824. 8003330: 2303 movs r3, #3
  7825. 8003332: e20a b.n 800374a <HAL_RCC_OscConfig+0x742>
  7826. while(__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U)
  7827. 8003334: 4b80 ldr r3, [pc, #512] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7828. 8003336: 681b ldr r3, [r3, #0]
  7829. 8003338: f403 7380 and.w r3, r3, #256 ; 0x100
  7830. 800333c: 2b00 cmp r3, #0
  7831. 800333e: d1f0 bne.n 8003322 <HAL_RCC_OscConfig+0x31a>
  7832. }
  7833. }
  7834. }
  7835. }
  7836. /*------------------------------ LSI Configuration -------------------------*/
  7837. if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
  7838. 8003340: 687b ldr r3, [r7, #4]
  7839. 8003342: 681b ldr r3, [r3, #0]
  7840. 8003344: f003 0308 and.w r3, r3, #8
  7841. 8003348: 2b00 cmp r3, #0
  7842. 800334a: d036 beq.n 80033ba <HAL_RCC_OscConfig+0x3b2>
  7843. {
  7844. /* Check the parameters */
  7845. assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
  7846. /* Check the LSI State */
  7847. if((RCC_OscInitStruct->LSIState)!= RCC_LSI_OFF)
  7848. 800334c: 687b ldr r3, [r7, #4]
  7849. 800334e: 695b ldr r3, [r3, #20]
  7850. 8003350: 2b00 cmp r3, #0
  7851. 8003352: d019 beq.n 8003388 <HAL_RCC_OscConfig+0x380>
  7852. {
  7853. /* Enable the Internal Low Speed oscillator (LSI). */
  7854. __HAL_RCC_LSI_ENABLE();
  7855. 8003354: 4b78 ldr r3, [pc, #480] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7856. 8003356: 6f5b ldr r3, [r3, #116] ; 0x74
  7857. 8003358: 4a77 ldr r2, [pc, #476] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7858. 800335a: f043 0301 orr.w r3, r3, #1
  7859. 800335e: 6753 str r3, [r2, #116] ; 0x74
  7860. /* Get Start Tick*/
  7861. tickstart = HAL_GetTick();
  7862. 8003360: f7fe f91e bl 80015a0 <HAL_GetTick>
  7863. 8003364: 6278 str r0, [r7, #36] ; 0x24
  7864. /* Wait till LSI is ready */
  7865. while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == 0U)
  7866. 8003366: e008 b.n 800337a <HAL_RCC_OscConfig+0x372>
  7867. {
  7868. if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
  7869. 8003368: f7fe f91a bl 80015a0 <HAL_GetTick>
  7870. 800336c: 4602 mov r2, r0
  7871. 800336e: 6a7b ldr r3, [r7, #36] ; 0x24
  7872. 8003370: 1ad3 subs r3, r2, r3
  7873. 8003372: 2b02 cmp r3, #2
  7874. 8003374: d901 bls.n 800337a <HAL_RCC_OscConfig+0x372>
  7875. {
  7876. return HAL_TIMEOUT;
  7877. 8003376: 2303 movs r3, #3
  7878. 8003378: e1e7 b.n 800374a <HAL_RCC_OscConfig+0x742>
  7879. while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == 0U)
  7880. 800337a: 4b6f ldr r3, [pc, #444] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7881. 800337c: 6f5b ldr r3, [r3, #116] ; 0x74
  7882. 800337e: f003 0302 and.w r3, r3, #2
  7883. 8003382: 2b00 cmp r3, #0
  7884. 8003384: d0f0 beq.n 8003368 <HAL_RCC_OscConfig+0x360>
  7885. 8003386: e018 b.n 80033ba <HAL_RCC_OscConfig+0x3b2>
  7886. }
  7887. }
  7888. else
  7889. {
  7890. /* Disable the Internal Low Speed oscillator (LSI). */
  7891. __HAL_RCC_LSI_DISABLE();
  7892. 8003388: 4b6b ldr r3, [pc, #428] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7893. 800338a: 6f5b ldr r3, [r3, #116] ; 0x74
  7894. 800338c: 4a6a ldr r2, [pc, #424] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7895. 800338e: f023 0301 bic.w r3, r3, #1
  7896. 8003392: 6753 str r3, [r2, #116] ; 0x74
  7897. /* Get Start Tick*/
  7898. tickstart = HAL_GetTick();
  7899. 8003394: f7fe f904 bl 80015a0 <HAL_GetTick>
  7900. 8003398: 6278 str r0, [r7, #36] ; 0x24
  7901. /* Wait till LSI is ready */
  7902. while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != 0U)
  7903. 800339a: e008 b.n 80033ae <HAL_RCC_OscConfig+0x3a6>
  7904. {
  7905. if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
  7906. 800339c: f7fe f900 bl 80015a0 <HAL_GetTick>
  7907. 80033a0: 4602 mov r2, r0
  7908. 80033a2: 6a7b ldr r3, [r7, #36] ; 0x24
  7909. 80033a4: 1ad3 subs r3, r2, r3
  7910. 80033a6: 2b02 cmp r3, #2
  7911. 80033a8: d901 bls.n 80033ae <HAL_RCC_OscConfig+0x3a6>
  7912. {
  7913. return HAL_TIMEOUT;
  7914. 80033aa: 2303 movs r3, #3
  7915. 80033ac: e1cd b.n 800374a <HAL_RCC_OscConfig+0x742>
  7916. while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != 0U)
  7917. 80033ae: 4b62 ldr r3, [pc, #392] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7918. 80033b0: 6f5b ldr r3, [r3, #116] ; 0x74
  7919. 80033b2: f003 0302 and.w r3, r3, #2
  7920. 80033b6: 2b00 cmp r3, #0
  7921. 80033b8: d1f0 bne.n 800339c <HAL_RCC_OscConfig+0x394>
  7922. }
  7923. }
  7924. }
  7925. /*------------------------------ HSI48 Configuration -------------------------*/
  7926. if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI48) == RCC_OSCILLATORTYPE_HSI48)
  7927. 80033ba: 687b ldr r3, [r7, #4]
  7928. 80033bc: 681b ldr r3, [r3, #0]
  7929. 80033be: f003 0320 and.w r3, r3, #32
  7930. 80033c2: 2b00 cmp r3, #0
  7931. 80033c4: d036 beq.n 8003434 <HAL_RCC_OscConfig+0x42c>
  7932. {
  7933. /* Check the parameters */
  7934. assert_param(IS_RCC_HSI48(RCC_OscInitStruct->HSI48State));
  7935. /* Check the HSI48 State */
  7936. if((RCC_OscInitStruct->HSI48State)!= RCC_HSI48_OFF)
  7937. 80033c6: 687b ldr r3, [r7, #4]
  7938. 80033c8: 699b ldr r3, [r3, #24]
  7939. 80033ca: 2b00 cmp r3, #0
  7940. 80033cc: d019 beq.n 8003402 <HAL_RCC_OscConfig+0x3fa>
  7941. {
  7942. /* Enable the Internal Low Speed oscillator (HSI48). */
  7943. __HAL_RCC_HSI48_ENABLE();
  7944. 80033ce: 4b5a ldr r3, [pc, #360] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7945. 80033d0: 681b ldr r3, [r3, #0]
  7946. 80033d2: 4a59 ldr r2, [pc, #356] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7947. 80033d4: f443 5380 orr.w r3, r3, #4096 ; 0x1000
  7948. 80033d8: 6013 str r3, [r2, #0]
  7949. /* Get time-out */
  7950. tickstart = HAL_GetTick();
  7951. 80033da: f7fe f8e1 bl 80015a0 <HAL_GetTick>
  7952. 80033de: 6278 str r0, [r7, #36] ; 0x24
  7953. /* Wait till HSI48 is ready */
  7954. while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) == 0U)
  7955. 80033e0: e008 b.n 80033f4 <HAL_RCC_OscConfig+0x3ec>
  7956. {
  7957. if((HAL_GetTick() - tickstart ) > HSI48_TIMEOUT_VALUE)
  7958. 80033e2: f7fe f8dd bl 80015a0 <HAL_GetTick>
  7959. 80033e6: 4602 mov r2, r0
  7960. 80033e8: 6a7b ldr r3, [r7, #36] ; 0x24
  7961. 80033ea: 1ad3 subs r3, r2, r3
  7962. 80033ec: 2b02 cmp r3, #2
  7963. 80033ee: d901 bls.n 80033f4 <HAL_RCC_OscConfig+0x3ec>
  7964. {
  7965. return HAL_TIMEOUT;
  7966. 80033f0: 2303 movs r3, #3
  7967. 80033f2: e1aa b.n 800374a <HAL_RCC_OscConfig+0x742>
  7968. while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) == 0U)
  7969. 80033f4: 4b50 ldr r3, [pc, #320] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7970. 80033f6: 681b ldr r3, [r3, #0]
  7971. 80033f8: f403 5300 and.w r3, r3, #8192 ; 0x2000
  7972. 80033fc: 2b00 cmp r3, #0
  7973. 80033fe: d0f0 beq.n 80033e2 <HAL_RCC_OscConfig+0x3da>
  7974. 8003400: e018 b.n 8003434 <HAL_RCC_OscConfig+0x42c>
  7975. }
  7976. }
  7977. else
  7978. {
  7979. /* Disable the Internal Low Speed oscillator (HSI48). */
  7980. __HAL_RCC_HSI48_DISABLE();
  7981. 8003402: 4b4d ldr r3, [pc, #308] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7982. 8003404: 681b ldr r3, [r3, #0]
  7983. 8003406: 4a4c ldr r2, [pc, #304] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  7984. 8003408: f423 5380 bic.w r3, r3, #4096 ; 0x1000
  7985. 800340c: 6013 str r3, [r2, #0]
  7986. /* Get time-out */
  7987. tickstart = HAL_GetTick();
  7988. 800340e: f7fe f8c7 bl 80015a0 <HAL_GetTick>
  7989. 8003412: 6278 str r0, [r7, #36] ; 0x24
  7990. /* Wait till HSI48 is ready */
  7991. while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) != 0U)
  7992. 8003414: e008 b.n 8003428 <HAL_RCC_OscConfig+0x420>
  7993. {
  7994. if((HAL_GetTick() - tickstart ) > HSI48_TIMEOUT_VALUE)
  7995. 8003416: f7fe f8c3 bl 80015a0 <HAL_GetTick>
  7996. 800341a: 4602 mov r2, r0
  7997. 800341c: 6a7b ldr r3, [r7, #36] ; 0x24
  7998. 800341e: 1ad3 subs r3, r2, r3
  7999. 8003420: 2b02 cmp r3, #2
  8000. 8003422: d901 bls.n 8003428 <HAL_RCC_OscConfig+0x420>
  8001. {
  8002. return HAL_TIMEOUT;
  8003. 8003424: 2303 movs r3, #3
  8004. 8003426: e190 b.n 800374a <HAL_RCC_OscConfig+0x742>
  8005. while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) != 0U)
  8006. 8003428: 4b43 ldr r3, [pc, #268] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8007. 800342a: 681b ldr r3, [r3, #0]
  8008. 800342c: f403 5300 and.w r3, r3, #8192 ; 0x2000
  8009. 8003430: 2b00 cmp r3, #0
  8010. 8003432: d1f0 bne.n 8003416 <HAL_RCC_OscConfig+0x40e>
  8011. }
  8012. }
  8013. }
  8014. }
  8015. /*------------------------------ LSE Configuration -------------------------*/
  8016. if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
  8017. 8003434: 687b ldr r3, [r7, #4]
  8018. 8003436: 681b ldr r3, [r3, #0]
  8019. 8003438: f003 0304 and.w r3, r3, #4
  8020. 800343c: 2b00 cmp r3, #0
  8021. 800343e: f000 8085 beq.w 800354c <HAL_RCC_OscConfig+0x544>
  8022. {
  8023. /* Check the parameters */
  8024. assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
  8025. /* Enable write access to Backup domain */
  8026. PWR->CR1 |= PWR_CR1_DBP;
  8027. 8003442: 4b3e ldr r3, [pc, #248] ; (800353c <HAL_RCC_OscConfig+0x534>)
  8028. 8003444: 681b ldr r3, [r3, #0]
  8029. 8003446: 4a3d ldr r2, [pc, #244] ; (800353c <HAL_RCC_OscConfig+0x534>)
  8030. 8003448: f443 7380 orr.w r3, r3, #256 ; 0x100
  8031. 800344c: 6013 str r3, [r2, #0]
  8032. /* Wait for Backup domain Write protection disable */
  8033. tickstart = HAL_GetTick();
  8034. 800344e: f7fe f8a7 bl 80015a0 <HAL_GetTick>
  8035. 8003452: 6278 str r0, [r7, #36] ; 0x24
  8036. while((PWR->CR1 & PWR_CR1_DBP) == 0U)
  8037. 8003454: e008 b.n 8003468 <HAL_RCC_OscConfig+0x460>
  8038. {
  8039. if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE)
  8040. 8003456: f7fe f8a3 bl 80015a0 <HAL_GetTick>
  8041. 800345a: 4602 mov r2, r0
  8042. 800345c: 6a7b ldr r3, [r7, #36] ; 0x24
  8043. 800345e: 1ad3 subs r3, r2, r3
  8044. 8003460: 2b64 cmp r3, #100 ; 0x64
  8045. 8003462: d901 bls.n 8003468 <HAL_RCC_OscConfig+0x460>
  8046. {
  8047. return HAL_TIMEOUT;
  8048. 8003464: 2303 movs r3, #3
  8049. 8003466: e170 b.n 800374a <HAL_RCC_OscConfig+0x742>
  8050. while((PWR->CR1 & PWR_CR1_DBP) == 0U)
  8051. 8003468: 4b34 ldr r3, [pc, #208] ; (800353c <HAL_RCC_OscConfig+0x534>)
  8052. 800346a: 681b ldr r3, [r3, #0]
  8053. 800346c: f403 7380 and.w r3, r3, #256 ; 0x100
  8054. 8003470: 2b00 cmp r3, #0
  8055. 8003472: d0f0 beq.n 8003456 <HAL_RCC_OscConfig+0x44e>
  8056. }
  8057. }
  8058. /* Set the new LSE configuration -----------------------------------------*/
  8059. __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
  8060. 8003474: 687b ldr r3, [r7, #4]
  8061. 8003476: 689b ldr r3, [r3, #8]
  8062. 8003478: 2b01 cmp r3, #1
  8063. 800347a: d106 bne.n 800348a <HAL_RCC_OscConfig+0x482>
  8064. 800347c: 4b2e ldr r3, [pc, #184] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8065. 800347e: 6f1b ldr r3, [r3, #112] ; 0x70
  8066. 8003480: 4a2d ldr r2, [pc, #180] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8067. 8003482: f043 0301 orr.w r3, r3, #1
  8068. 8003486: 6713 str r3, [r2, #112] ; 0x70
  8069. 8003488: e02d b.n 80034e6 <HAL_RCC_OscConfig+0x4de>
  8070. 800348a: 687b ldr r3, [r7, #4]
  8071. 800348c: 689b ldr r3, [r3, #8]
  8072. 800348e: 2b00 cmp r3, #0
  8073. 8003490: d10c bne.n 80034ac <HAL_RCC_OscConfig+0x4a4>
  8074. 8003492: 4b29 ldr r3, [pc, #164] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8075. 8003494: 6f1b ldr r3, [r3, #112] ; 0x70
  8076. 8003496: 4a28 ldr r2, [pc, #160] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8077. 8003498: f023 0301 bic.w r3, r3, #1
  8078. 800349c: 6713 str r3, [r2, #112] ; 0x70
  8079. 800349e: 4b26 ldr r3, [pc, #152] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8080. 80034a0: 6f1b ldr r3, [r3, #112] ; 0x70
  8081. 80034a2: 4a25 ldr r2, [pc, #148] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8082. 80034a4: f023 0304 bic.w r3, r3, #4
  8083. 80034a8: 6713 str r3, [r2, #112] ; 0x70
  8084. 80034aa: e01c b.n 80034e6 <HAL_RCC_OscConfig+0x4de>
  8085. 80034ac: 687b ldr r3, [r7, #4]
  8086. 80034ae: 689b ldr r3, [r3, #8]
  8087. 80034b0: 2b05 cmp r3, #5
  8088. 80034b2: d10c bne.n 80034ce <HAL_RCC_OscConfig+0x4c6>
  8089. 80034b4: 4b20 ldr r3, [pc, #128] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8090. 80034b6: 6f1b ldr r3, [r3, #112] ; 0x70
  8091. 80034b8: 4a1f ldr r2, [pc, #124] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8092. 80034ba: f043 0304 orr.w r3, r3, #4
  8093. 80034be: 6713 str r3, [r2, #112] ; 0x70
  8094. 80034c0: 4b1d ldr r3, [pc, #116] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8095. 80034c2: 6f1b ldr r3, [r3, #112] ; 0x70
  8096. 80034c4: 4a1c ldr r2, [pc, #112] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8097. 80034c6: f043 0301 orr.w r3, r3, #1
  8098. 80034ca: 6713 str r3, [r2, #112] ; 0x70
  8099. 80034cc: e00b b.n 80034e6 <HAL_RCC_OscConfig+0x4de>
  8100. 80034ce: 4b1a ldr r3, [pc, #104] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8101. 80034d0: 6f1b ldr r3, [r3, #112] ; 0x70
  8102. 80034d2: 4a19 ldr r2, [pc, #100] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8103. 80034d4: f023 0301 bic.w r3, r3, #1
  8104. 80034d8: 6713 str r3, [r2, #112] ; 0x70
  8105. 80034da: 4b17 ldr r3, [pc, #92] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8106. 80034dc: 6f1b ldr r3, [r3, #112] ; 0x70
  8107. 80034de: 4a16 ldr r2, [pc, #88] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8108. 80034e0: f023 0304 bic.w r3, r3, #4
  8109. 80034e4: 6713 str r3, [r2, #112] ; 0x70
  8110. /* Check the LSE State */
  8111. if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
  8112. 80034e6: 687b ldr r3, [r7, #4]
  8113. 80034e8: 689b ldr r3, [r3, #8]
  8114. 80034ea: 2b00 cmp r3, #0
  8115. 80034ec: d015 beq.n 800351a <HAL_RCC_OscConfig+0x512>
  8116. {
  8117. /* Get Start Tick*/
  8118. tickstart = HAL_GetTick();
  8119. 80034ee: f7fe f857 bl 80015a0 <HAL_GetTick>
  8120. 80034f2: 6278 str r0, [r7, #36] ; 0x24
  8121. /* Wait till LSE is ready */
  8122. while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  8123. 80034f4: e00a b.n 800350c <HAL_RCC_OscConfig+0x504>
  8124. {
  8125. if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
  8126. 80034f6: f7fe f853 bl 80015a0 <HAL_GetTick>
  8127. 80034fa: 4602 mov r2, r0
  8128. 80034fc: 6a7b ldr r3, [r7, #36] ; 0x24
  8129. 80034fe: 1ad3 subs r3, r2, r3
  8130. 8003500: f241 3288 movw r2, #5000 ; 0x1388
  8131. 8003504: 4293 cmp r3, r2
  8132. 8003506: d901 bls.n 800350c <HAL_RCC_OscConfig+0x504>
  8133. {
  8134. return HAL_TIMEOUT;
  8135. 8003508: 2303 movs r3, #3
  8136. 800350a: e11e b.n 800374a <HAL_RCC_OscConfig+0x742>
  8137. while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  8138. 800350c: 4b0a ldr r3, [pc, #40] ; (8003538 <HAL_RCC_OscConfig+0x530>)
  8139. 800350e: 6f1b ldr r3, [r3, #112] ; 0x70
  8140. 8003510: f003 0302 and.w r3, r3, #2
  8141. 8003514: 2b00 cmp r3, #0
  8142. 8003516: d0ee beq.n 80034f6 <HAL_RCC_OscConfig+0x4ee>
  8143. 8003518: e018 b.n 800354c <HAL_RCC_OscConfig+0x544>
  8144. }
  8145. }
  8146. else
  8147. {
  8148. /* Get Start Tick*/
  8149. tickstart = HAL_GetTick();
  8150. 800351a: f7fe f841 bl 80015a0 <HAL_GetTick>
  8151. 800351e: 6278 str r0, [r7, #36] ; 0x24
  8152. /* Wait till LSE is disabled */
  8153. while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != 0U)
  8154. 8003520: e00e b.n 8003540 <HAL_RCC_OscConfig+0x538>
  8155. {
  8156. if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
  8157. 8003522: f7fe f83d bl 80015a0 <HAL_GetTick>
  8158. 8003526: 4602 mov r2, r0
  8159. 8003528: 6a7b ldr r3, [r7, #36] ; 0x24
  8160. 800352a: 1ad3 subs r3, r2, r3
  8161. 800352c: f241 3288 movw r2, #5000 ; 0x1388
  8162. 8003530: 4293 cmp r3, r2
  8163. 8003532: d905 bls.n 8003540 <HAL_RCC_OscConfig+0x538>
  8164. {
  8165. return HAL_TIMEOUT;
  8166. 8003534: 2303 movs r3, #3
  8167. 8003536: e108 b.n 800374a <HAL_RCC_OscConfig+0x742>
  8168. 8003538: 58024400 .word 0x58024400
  8169. 800353c: 58024800 .word 0x58024800
  8170. while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != 0U)
  8171. 8003540: 4b84 ldr r3, [pc, #528] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8172. 8003542: 6f1b ldr r3, [r3, #112] ; 0x70
  8173. 8003544: f003 0302 and.w r3, r3, #2
  8174. 8003548: 2b00 cmp r3, #0
  8175. 800354a: d1ea bne.n 8003522 <HAL_RCC_OscConfig+0x51a>
  8176. }
  8177. }
  8178. /*-------------------------------- PLL Configuration -----------------------*/
  8179. /* Check the parameters */
  8180. assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState));
  8181. if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
  8182. 800354c: 687b ldr r3, [r7, #4]
  8183. 800354e: 6a5b ldr r3, [r3, #36] ; 0x24
  8184. 8003550: 2b00 cmp r3, #0
  8185. 8003552: f000 80f9 beq.w 8003748 <HAL_RCC_OscConfig+0x740>
  8186. {
  8187. /* Check if the PLL is used as system clock or not */
  8188. if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL1)
  8189. 8003556: 4b7f ldr r3, [pc, #508] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8190. 8003558: 691b ldr r3, [r3, #16]
  8191. 800355a: f003 0338 and.w r3, r3, #56 ; 0x38
  8192. 800355e: 2b18 cmp r3, #24
  8193. 8003560: f000 80b4 beq.w 80036cc <HAL_RCC_OscConfig+0x6c4>
  8194. {
  8195. if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
  8196. 8003564: 687b ldr r3, [r7, #4]
  8197. 8003566: 6a5b ldr r3, [r3, #36] ; 0x24
  8198. 8003568: 2b02 cmp r3, #2
  8199. 800356a: f040 8095 bne.w 8003698 <HAL_RCC_OscConfig+0x690>
  8200. assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ));
  8201. assert_param(IS_RCC_PLLR_VALUE(RCC_OscInitStruct->PLL.PLLR));
  8202. assert_param(IS_RCC_PLLFRACN_VALUE(RCC_OscInitStruct->PLL.PLLFRACN));
  8203. /* Disable the main PLL. */
  8204. __HAL_RCC_PLL_DISABLE();
  8205. 800356e: 4b79 ldr r3, [pc, #484] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8206. 8003570: 681b ldr r3, [r3, #0]
  8207. 8003572: 4a78 ldr r2, [pc, #480] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8208. 8003574: f023 7380 bic.w r3, r3, #16777216 ; 0x1000000
  8209. 8003578: 6013 str r3, [r2, #0]
  8210. /* Get Start Tick*/
  8211. tickstart = HAL_GetTick();
  8212. 800357a: f7fe f811 bl 80015a0 <HAL_GetTick>
  8213. 800357e: 6278 str r0, [r7, #36] ; 0x24
  8214. /* Wait till PLL is disabled */
  8215. while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  8216. 8003580: e008 b.n 8003594 <HAL_RCC_OscConfig+0x58c>
  8217. {
  8218. if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
  8219. 8003582: f7fe f80d bl 80015a0 <HAL_GetTick>
  8220. 8003586: 4602 mov r2, r0
  8221. 8003588: 6a7b ldr r3, [r7, #36] ; 0x24
  8222. 800358a: 1ad3 subs r3, r2, r3
  8223. 800358c: 2b02 cmp r3, #2
  8224. 800358e: d901 bls.n 8003594 <HAL_RCC_OscConfig+0x58c>
  8225. {
  8226. return HAL_TIMEOUT;
  8227. 8003590: 2303 movs r3, #3
  8228. 8003592: e0da b.n 800374a <HAL_RCC_OscConfig+0x742>
  8229. while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  8230. 8003594: 4b6f ldr r3, [pc, #444] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8231. 8003596: 681b ldr r3, [r3, #0]
  8232. 8003598: f003 7300 and.w r3, r3, #33554432 ; 0x2000000
  8233. 800359c: 2b00 cmp r3, #0
  8234. 800359e: d1f0 bne.n 8003582 <HAL_RCC_OscConfig+0x57a>
  8235. }
  8236. }
  8237. /* Configure the main PLL clock source, multiplication and division factors. */
  8238. __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource,
  8239. 80035a0: 4b6c ldr r3, [pc, #432] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8240. 80035a2: 6a9a ldr r2, [r3, #40] ; 0x28
  8241. 80035a4: 4b6c ldr r3, [pc, #432] ; (8003758 <HAL_RCC_OscConfig+0x750>)
  8242. 80035a6: 4013 ands r3, r2
  8243. 80035a8: 687a ldr r2, [r7, #4]
  8244. 80035aa: 6a91 ldr r1, [r2, #40] ; 0x28
  8245. 80035ac: 687a ldr r2, [r7, #4]
  8246. 80035ae: 6ad2 ldr r2, [r2, #44] ; 0x2c
  8247. 80035b0: 0112 lsls r2, r2, #4
  8248. 80035b2: 430a orrs r2, r1
  8249. 80035b4: 4967 ldr r1, [pc, #412] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8250. 80035b6: 4313 orrs r3, r2
  8251. 80035b8: 628b str r3, [r1, #40] ; 0x28
  8252. 80035ba: 687b ldr r3, [r7, #4]
  8253. 80035bc: 6b1b ldr r3, [r3, #48] ; 0x30
  8254. 80035be: 3b01 subs r3, #1
  8255. 80035c0: f3c3 0208 ubfx r2, r3, #0, #9
  8256. 80035c4: 687b ldr r3, [r7, #4]
  8257. 80035c6: 6b5b ldr r3, [r3, #52] ; 0x34
  8258. 80035c8: 3b01 subs r3, #1
  8259. 80035ca: 025b lsls r3, r3, #9
  8260. 80035cc: b29b uxth r3, r3
  8261. 80035ce: 431a orrs r2, r3
  8262. 80035d0: 687b ldr r3, [r7, #4]
  8263. 80035d2: 6b9b ldr r3, [r3, #56] ; 0x38
  8264. 80035d4: 3b01 subs r3, #1
  8265. 80035d6: 041b lsls r3, r3, #16
  8266. 80035d8: f403 03fe and.w r3, r3, #8323072 ; 0x7f0000
  8267. 80035dc: 431a orrs r2, r3
  8268. 80035de: 687b ldr r3, [r7, #4]
  8269. 80035e0: 6bdb ldr r3, [r3, #60] ; 0x3c
  8270. 80035e2: 3b01 subs r3, #1
  8271. 80035e4: 061b lsls r3, r3, #24
  8272. 80035e6: f003 43fe and.w r3, r3, #2130706432 ; 0x7f000000
  8273. 80035ea: 495a ldr r1, [pc, #360] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8274. 80035ec: 4313 orrs r3, r2
  8275. 80035ee: 630b str r3, [r1, #48] ; 0x30
  8276. RCC_OscInitStruct->PLL.PLLP,
  8277. RCC_OscInitStruct->PLL.PLLQ,
  8278. RCC_OscInitStruct->PLL.PLLR);
  8279. /* Disable PLLFRACN . */
  8280. __HAL_RCC_PLLFRACN_DISABLE();
  8281. 80035f0: 4b58 ldr r3, [pc, #352] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8282. 80035f2: 6adb ldr r3, [r3, #44] ; 0x2c
  8283. 80035f4: 4a57 ldr r2, [pc, #348] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8284. 80035f6: f023 0301 bic.w r3, r3, #1
  8285. 80035fa: 62d3 str r3, [r2, #44] ; 0x2c
  8286. /* Configure PLL PLL1FRACN */
  8287. __HAL_RCC_PLLFRACN_CONFIG(RCC_OscInitStruct->PLL.PLLFRACN);
  8288. 80035fc: 4b55 ldr r3, [pc, #340] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8289. 80035fe: 6b5a ldr r2, [r3, #52] ; 0x34
  8290. 8003600: 4b56 ldr r3, [pc, #344] ; (800375c <HAL_RCC_OscConfig+0x754>)
  8291. 8003602: 4013 ands r3, r2
  8292. 8003604: 687a ldr r2, [r7, #4]
  8293. 8003606: 6c92 ldr r2, [r2, #72] ; 0x48
  8294. 8003608: 00d2 lsls r2, r2, #3
  8295. 800360a: 4952 ldr r1, [pc, #328] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8296. 800360c: 4313 orrs r3, r2
  8297. 800360e: 634b str r3, [r1, #52] ; 0x34
  8298. /* Select PLL1 input reference frequency range: VCI */
  8299. __HAL_RCC_PLL_VCIRANGE(RCC_OscInitStruct->PLL.PLLRGE) ;
  8300. 8003610: 4b50 ldr r3, [pc, #320] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8301. 8003612: 6adb ldr r3, [r3, #44] ; 0x2c
  8302. 8003614: f023 020c bic.w r2, r3, #12
  8303. 8003618: 687b ldr r3, [r7, #4]
  8304. 800361a: 6c1b ldr r3, [r3, #64] ; 0x40
  8305. 800361c: 494d ldr r1, [pc, #308] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8306. 800361e: 4313 orrs r3, r2
  8307. 8003620: 62cb str r3, [r1, #44] ; 0x2c
  8308. /* Select PLL1 output frequency range : VCO */
  8309. __HAL_RCC_PLL_VCORANGE(RCC_OscInitStruct->PLL.PLLVCOSEL) ;
  8310. 8003622: 4b4c ldr r3, [pc, #304] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8311. 8003624: 6adb ldr r3, [r3, #44] ; 0x2c
  8312. 8003626: f023 0202 bic.w r2, r3, #2
  8313. 800362a: 687b ldr r3, [r7, #4]
  8314. 800362c: 6c5b ldr r3, [r3, #68] ; 0x44
  8315. 800362e: 4949 ldr r1, [pc, #292] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8316. 8003630: 4313 orrs r3, r2
  8317. 8003632: 62cb str r3, [r1, #44] ; 0x2c
  8318. /* Enable PLL System Clock output. */
  8319. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVP);
  8320. 8003634: 4b47 ldr r3, [pc, #284] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8321. 8003636: 6adb ldr r3, [r3, #44] ; 0x2c
  8322. 8003638: 4a46 ldr r2, [pc, #280] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8323. 800363a: f443 3380 orr.w r3, r3, #65536 ; 0x10000
  8324. 800363e: 62d3 str r3, [r2, #44] ; 0x2c
  8325. /* Enable PLL1Q Clock output. */
  8326. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  8327. 8003640: 4b44 ldr r3, [pc, #272] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8328. 8003642: 6adb ldr r3, [r3, #44] ; 0x2c
  8329. 8003644: 4a43 ldr r2, [pc, #268] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8330. 8003646: f443 3300 orr.w r3, r3, #131072 ; 0x20000
  8331. 800364a: 62d3 str r3, [r2, #44] ; 0x2c
  8332. /* Enable PLL1R Clock output. */
  8333. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVR);
  8334. 800364c: 4b41 ldr r3, [pc, #260] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8335. 800364e: 6adb ldr r3, [r3, #44] ; 0x2c
  8336. 8003650: 4a40 ldr r2, [pc, #256] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8337. 8003652: f443 2380 orr.w r3, r3, #262144 ; 0x40000
  8338. 8003656: 62d3 str r3, [r2, #44] ; 0x2c
  8339. /* Enable PLL1FRACN . */
  8340. __HAL_RCC_PLLFRACN_ENABLE();
  8341. 8003658: 4b3e ldr r3, [pc, #248] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8342. 800365a: 6adb ldr r3, [r3, #44] ; 0x2c
  8343. 800365c: 4a3d ldr r2, [pc, #244] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8344. 800365e: f043 0301 orr.w r3, r3, #1
  8345. 8003662: 62d3 str r3, [r2, #44] ; 0x2c
  8346. /* Enable the main PLL. */
  8347. __HAL_RCC_PLL_ENABLE();
  8348. 8003664: 4b3b ldr r3, [pc, #236] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8349. 8003666: 681b ldr r3, [r3, #0]
  8350. 8003668: 4a3a ldr r2, [pc, #232] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8351. 800366a: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000
  8352. 800366e: 6013 str r3, [r2, #0]
  8353. /* Get Start Tick*/
  8354. tickstart = HAL_GetTick();
  8355. 8003670: f7fd ff96 bl 80015a0 <HAL_GetTick>
  8356. 8003674: 6278 str r0, [r7, #36] ; 0x24
  8357. /* Wait till PLL is ready */
  8358. while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  8359. 8003676: e008 b.n 800368a <HAL_RCC_OscConfig+0x682>
  8360. {
  8361. if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
  8362. 8003678: f7fd ff92 bl 80015a0 <HAL_GetTick>
  8363. 800367c: 4602 mov r2, r0
  8364. 800367e: 6a7b ldr r3, [r7, #36] ; 0x24
  8365. 8003680: 1ad3 subs r3, r2, r3
  8366. 8003682: 2b02 cmp r3, #2
  8367. 8003684: d901 bls.n 800368a <HAL_RCC_OscConfig+0x682>
  8368. {
  8369. return HAL_TIMEOUT;
  8370. 8003686: 2303 movs r3, #3
  8371. 8003688: e05f b.n 800374a <HAL_RCC_OscConfig+0x742>
  8372. while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  8373. 800368a: 4b32 ldr r3, [pc, #200] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8374. 800368c: 681b ldr r3, [r3, #0]
  8375. 800368e: f003 7300 and.w r3, r3, #33554432 ; 0x2000000
  8376. 8003692: 2b00 cmp r3, #0
  8377. 8003694: d0f0 beq.n 8003678 <HAL_RCC_OscConfig+0x670>
  8378. 8003696: e057 b.n 8003748 <HAL_RCC_OscConfig+0x740>
  8379. }
  8380. }
  8381. else
  8382. {
  8383. /* Disable the main PLL. */
  8384. __HAL_RCC_PLL_DISABLE();
  8385. 8003698: 4b2e ldr r3, [pc, #184] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8386. 800369a: 681b ldr r3, [r3, #0]
  8387. 800369c: 4a2d ldr r2, [pc, #180] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8388. 800369e: f023 7380 bic.w r3, r3, #16777216 ; 0x1000000
  8389. 80036a2: 6013 str r3, [r2, #0]
  8390. /* Get Start Tick*/
  8391. tickstart = HAL_GetTick();
  8392. 80036a4: f7fd ff7c bl 80015a0 <HAL_GetTick>
  8393. 80036a8: 6278 str r0, [r7, #36] ; 0x24
  8394. /* Wait till PLL is disabled */
  8395. while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  8396. 80036aa: e008 b.n 80036be <HAL_RCC_OscConfig+0x6b6>
  8397. {
  8398. if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
  8399. 80036ac: f7fd ff78 bl 80015a0 <HAL_GetTick>
  8400. 80036b0: 4602 mov r2, r0
  8401. 80036b2: 6a7b ldr r3, [r7, #36] ; 0x24
  8402. 80036b4: 1ad3 subs r3, r2, r3
  8403. 80036b6: 2b02 cmp r3, #2
  8404. 80036b8: d901 bls.n 80036be <HAL_RCC_OscConfig+0x6b6>
  8405. {
  8406. return HAL_TIMEOUT;
  8407. 80036ba: 2303 movs r3, #3
  8408. 80036bc: e045 b.n 800374a <HAL_RCC_OscConfig+0x742>
  8409. while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  8410. 80036be: 4b25 ldr r3, [pc, #148] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8411. 80036c0: 681b ldr r3, [r3, #0]
  8412. 80036c2: f003 7300 and.w r3, r3, #33554432 ; 0x2000000
  8413. 80036c6: 2b00 cmp r3, #0
  8414. 80036c8: d1f0 bne.n 80036ac <HAL_RCC_OscConfig+0x6a4>
  8415. 80036ca: e03d b.n 8003748 <HAL_RCC_OscConfig+0x740>
  8416. }
  8417. }
  8418. else
  8419. {
  8420. /* Do not return HAL_ERROR if request repeats the current configuration */
  8421. temp1_pllckcfg = RCC->PLLCKSELR;
  8422. 80036cc: 4b21 ldr r3, [pc, #132] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8423. 80036ce: 6a9b ldr r3, [r3, #40] ; 0x28
  8424. 80036d0: 613b str r3, [r7, #16]
  8425. temp2_pllckcfg = RCC->PLL1DIVR;
  8426. 80036d2: 4b20 ldr r3, [pc, #128] ; (8003754 <HAL_RCC_OscConfig+0x74c>)
  8427. 80036d4: 6b1b ldr r3, [r3, #48] ; 0x30
  8428. 80036d6: 60fb str r3, [r7, #12]
  8429. if(((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
  8430. 80036d8: 687b ldr r3, [r7, #4]
  8431. 80036da: 6a5b ldr r3, [r3, #36] ; 0x24
  8432. 80036dc: 2b01 cmp r3, #1
  8433. 80036de: d031 beq.n 8003744 <HAL_RCC_OscConfig+0x73c>
  8434. (READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
  8435. 80036e0: 693b ldr r3, [r7, #16]
  8436. 80036e2: f003 0203 and.w r2, r3, #3
  8437. 80036e6: 687b ldr r3, [r7, #4]
  8438. 80036e8: 6a9b ldr r3, [r3, #40] ; 0x28
  8439. if(((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
  8440. 80036ea: 429a cmp r2, r3
  8441. 80036ec: d12a bne.n 8003744 <HAL_RCC_OscConfig+0x73c>
  8442. ((READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_DIVM1) >> RCC_PLLCKSELR_DIVM1_Pos) != RCC_OscInitStruct->PLL.PLLM) ||
  8443. 80036ee: 693b ldr r3, [r7, #16]
  8444. 80036f0: 091b lsrs r3, r3, #4
  8445. 80036f2: f003 023f and.w r2, r3, #63 ; 0x3f
  8446. 80036f6: 687b ldr r3, [r7, #4]
  8447. 80036f8: 6adb ldr r3, [r3, #44] ; 0x2c
  8448. (READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
  8449. 80036fa: 429a cmp r2, r3
  8450. 80036fc: d122 bne.n 8003744 <HAL_RCC_OscConfig+0x73c>
  8451. (READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_N1) != (RCC_OscInitStruct->PLL.PLLN - 1U)) ||
  8452. 80036fe: 68fb ldr r3, [r7, #12]
  8453. 8003700: f3c3 0208 ubfx r2, r3, #0, #9
  8454. 8003704: 687b ldr r3, [r7, #4]
  8455. 8003706: 6b1b ldr r3, [r3, #48] ; 0x30
  8456. 8003708: 3b01 subs r3, #1
  8457. ((READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_DIVM1) >> RCC_PLLCKSELR_DIVM1_Pos) != RCC_OscInitStruct->PLL.PLLM) ||
  8458. 800370a: 429a cmp r2, r3
  8459. 800370c: d11a bne.n 8003744 <HAL_RCC_OscConfig+0x73c>
  8460. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_P1) >> RCC_PLL1DIVR_P1_Pos) != (RCC_OscInitStruct->PLL.PLLP - 1U)) ||
  8461. 800370e: 68fb ldr r3, [r7, #12]
  8462. 8003710: 0a5b lsrs r3, r3, #9
  8463. 8003712: f003 027f and.w r2, r3, #127 ; 0x7f
  8464. 8003716: 687b ldr r3, [r7, #4]
  8465. 8003718: 6b5b ldr r3, [r3, #52] ; 0x34
  8466. 800371a: 3b01 subs r3, #1
  8467. (READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_N1) != (RCC_OscInitStruct->PLL.PLLN - 1U)) ||
  8468. 800371c: 429a cmp r2, r3
  8469. 800371e: d111 bne.n 8003744 <HAL_RCC_OscConfig+0x73c>
  8470. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_Q1) >> RCC_PLL1DIVR_Q1_Pos) != (RCC_OscInitStruct->PLL.PLLQ - 1U)) ||
  8471. 8003720: 68fb ldr r3, [r7, #12]
  8472. 8003722: 0c1b lsrs r3, r3, #16
  8473. 8003724: f003 027f and.w r2, r3, #127 ; 0x7f
  8474. 8003728: 687b ldr r3, [r7, #4]
  8475. 800372a: 6b9b ldr r3, [r3, #56] ; 0x38
  8476. 800372c: 3b01 subs r3, #1
  8477. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_P1) >> RCC_PLL1DIVR_P1_Pos) != (RCC_OscInitStruct->PLL.PLLP - 1U)) ||
  8478. 800372e: 429a cmp r2, r3
  8479. 8003730: d108 bne.n 8003744 <HAL_RCC_OscConfig+0x73c>
  8480. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_R1) >> RCC_PLL1DIVR_R1_Pos) != (RCC_OscInitStruct->PLL.PLLR - 1U)))
  8481. 8003732: 68fb ldr r3, [r7, #12]
  8482. 8003734: 0e1b lsrs r3, r3, #24
  8483. 8003736: f003 027f and.w r2, r3, #127 ; 0x7f
  8484. 800373a: 687b ldr r3, [r7, #4]
  8485. 800373c: 6bdb ldr r3, [r3, #60] ; 0x3c
  8486. 800373e: 3b01 subs r3, #1
  8487. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_Q1) >> RCC_PLL1DIVR_Q1_Pos) != (RCC_OscInitStruct->PLL.PLLQ - 1U)) ||
  8488. 8003740: 429a cmp r2, r3
  8489. 8003742: d001 beq.n 8003748 <HAL_RCC_OscConfig+0x740>
  8490. {
  8491. return HAL_ERROR;
  8492. 8003744: 2301 movs r3, #1
  8493. 8003746: e000 b.n 800374a <HAL_RCC_OscConfig+0x742>
  8494. }
  8495. }
  8496. }
  8497. return HAL_OK;
  8498. 8003748: 2300 movs r3, #0
  8499. }
  8500. 800374a: 4618 mov r0, r3
  8501. 800374c: 3730 adds r7, #48 ; 0x30
  8502. 800374e: 46bd mov sp, r7
  8503. 8003750: bd80 pop {r7, pc}
  8504. 8003752: bf00 nop
  8505. 8003754: 58024400 .word 0x58024400
  8506. 8003758: fffffc0c .word 0xfffffc0c
  8507. 800375c: ffff0007 .word 0xffff0007
  8508. 08003760 <HAL_RCC_ClockConfig>:
  8509. * D1CPRE[3:0] bits to ensure that Domain1 core clock not exceed the maximum allowed frequency
  8510. * (for more details refer to section above "Initialization/de-initialization functions")
  8511. * @retval None
  8512. */
  8513. HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency)
  8514. {
  8515. 8003760: b580 push {r7, lr}
  8516. 8003762: b086 sub sp, #24
  8517. 8003764: af00 add r7, sp, #0
  8518. 8003766: 6078 str r0, [r7, #4]
  8519. 8003768: 6039 str r1, [r7, #0]
  8520. HAL_StatusTypeDef halstatus;
  8521. uint32_t tickstart;
  8522. uint32_t common_system_clock;
  8523. /* Check Null pointer */
  8524. if(RCC_ClkInitStruct == NULL)
  8525. 800376a: 687b ldr r3, [r7, #4]
  8526. 800376c: 2b00 cmp r3, #0
  8527. 800376e: d101 bne.n 8003774 <HAL_RCC_ClockConfig+0x14>
  8528. {
  8529. return HAL_ERROR;
  8530. 8003770: 2301 movs r3, #1
  8531. 8003772: e19c b.n 8003aae <HAL_RCC_ClockConfig+0x34e>
  8532. /* To correctly read data from FLASH memory, the number of wait states (LATENCY)
  8533. must be correctly programmed according to the frequency of the CPU clock
  8534. (HCLK) and the supply voltage of the device. */
  8535. /* Increasing the CPU frequency */
  8536. if(FLatency > __HAL_FLASH_GET_LATENCY())
  8537. 8003774: 4b8a ldr r3, [pc, #552] ; (80039a0 <HAL_RCC_ClockConfig+0x240>)
  8538. 8003776: 681b ldr r3, [r3, #0]
  8539. 8003778: f003 030f and.w r3, r3, #15
  8540. 800377c: 683a ldr r2, [r7, #0]
  8541. 800377e: 429a cmp r2, r3
  8542. 8003780: d910 bls.n 80037a4 <HAL_RCC_ClockConfig+0x44>
  8543. {
  8544. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  8545. __HAL_FLASH_SET_LATENCY(FLatency);
  8546. 8003782: 4b87 ldr r3, [pc, #540] ; (80039a0 <HAL_RCC_ClockConfig+0x240>)
  8547. 8003784: 681b ldr r3, [r3, #0]
  8548. 8003786: f023 020f bic.w r2, r3, #15
  8549. 800378a: 4985 ldr r1, [pc, #532] ; (80039a0 <HAL_RCC_ClockConfig+0x240>)
  8550. 800378c: 683b ldr r3, [r7, #0]
  8551. 800378e: 4313 orrs r3, r2
  8552. 8003790: 600b str r3, [r1, #0]
  8553. /* Check that the new number of wait states is taken into account to access the Flash
  8554. memory by reading the FLASH_ACR register */
  8555. if(__HAL_FLASH_GET_LATENCY() != FLatency)
  8556. 8003792: 4b83 ldr r3, [pc, #524] ; (80039a0 <HAL_RCC_ClockConfig+0x240>)
  8557. 8003794: 681b ldr r3, [r3, #0]
  8558. 8003796: f003 030f and.w r3, r3, #15
  8559. 800379a: 683a ldr r2, [r7, #0]
  8560. 800379c: 429a cmp r2, r3
  8561. 800379e: d001 beq.n 80037a4 <HAL_RCC_ClockConfig+0x44>
  8562. {
  8563. return HAL_ERROR;
  8564. 80037a0: 2301 movs r3, #1
  8565. 80037a2: e184 b.n 8003aae <HAL_RCC_ClockConfig+0x34e>
  8566. }
  8567. /* Increasing the BUS frequency divider */
  8568. /*-------------------------- D1PCLK1/CDPCLK1 Configuration ---------------------------*/
  8569. if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D1PCLK1) == RCC_CLOCKTYPE_D1PCLK1)
  8570. 80037a4: 687b ldr r3, [r7, #4]
  8571. 80037a6: 681b ldr r3, [r3, #0]
  8572. 80037a8: f003 0304 and.w r3, r3, #4
  8573. 80037ac: 2b00 cmp r3, #0
  8574. 80037ae: d010 beq.n 80037d2 <HAL_RCC_ClockConfig+0x72>
  8575. {
  8576. #if defined (RCC_D1CFGR_D1PPRE)
  8577. if((RCC_ClkInitStruct->APB3CLKDivider) > (RCC->D1CFGR & RCC_D1CFGR_D1PPRE))
  8578. 80037b0: 687b ldr r3, [r7, #4]
  8579. 80037b2: 691a ldr r2, [r3, #16]
  8580. 80037b4: 4b7b ldr r3, [pc, #492] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8581. 80037b6: 699b ldr r3, [r3, #24]
  8582. 80037b8: f003 0370 and.w r3, r3, #112 ; 0x70
  8583. 80037bc: 429a cmp r2, r3
  8584. 80037be: d908 bls.n 80037d2 <HAL_RCC_ClockConfig+0x72>
  8585. {
  8586. assert_param(IS_RCC_D1PCLK1(RCC_ClkInitStruct->APB3CLKDivider));
  8587. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1PPRE, RCC_ClkInitStruct->APB3CLKDivider);
  8588. 80037c0: 4b78 ldr r3, [pc, #480] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8589. 80037c2: 699b ldr r3, [r3, #24]
  8590. 80037c4: f023 0270 bic.w r2, r3, #112 ; 0x70
  8591. 80037c8: 687b ldr r3, [r7, #4]
  8592. 80037ca: 691b ldr r3, [r3, #16]
  8593. 80037cc: 4975 ldr r1, [pc, #468] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8594. 80037ce: 4313 orrs r3, r2
  8595. 80037d0: 618b str r3, [r1, #24]
  8596. }
  8597. #endif
  8598. }
  8599. /*-------------------------- PCLK1 Configuration ---------------------------*/
  8600. if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
  8601. 80037d2: 687b ldr r3, [r7, #4]
  8602. 80037d4: 681b ldr r3, [r3, #0]
  8603. 80037d6: f003 0308 and.w r3, r3, #8
  8604. 80037da: 2b00 cmp r3, #0
  8605. 80037dc: d010 beq.n 8003800 <HAL_RCC_ClockConfig+0xa0>
  8606. {
  8607. #if defined (RCC_D2CFGR_D2PPRE1)
  8608. if((RCC_ClkInitStruct->APB1CLKDivider) > (RCC->D2CFGR & RCC_D2CFGR_D2PPRE1))
  8609. 80037de: 687b ldr r3, [r7, #4]
  8610. 80037e0: 695a ldr r2, [r3, #20]
  8611. 80037e2: 4b70 ldr r3, [pc, #448] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8612. 80037e4: 69db ldr r3, [r3, #28]
  8613. 80037e6: f003 0370 and.w r3, r3, #112 ; 0x70
  8614. 80037ea: 429a cmp r2, r3
  8615. 80037ec: d908 bls.n 8003800 <HAL_RCC_ClockConfig+0xa0>
  8616. {
  8617. assert_param(IS_RCC_PCLK1(RCC_ClkInitStruct->APB1CLKDivider));
  8618. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  8619. 80037ee: 4b6d ldr r3, [pc, #436] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8620. 80037f0: 69db ldr r3, [r3, #28]
  8621. 80037f2: f023 0270 bic.w r2, r3, #112 ; 0x70
  8622. 80037f6: 687b ldr r3, [r7, #4]
  8623. 80037f8: 695b ldr r3, [r3, #20]
  8624. 80037fa: 496a ldr r1, [pc, #424] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8625. 80037fc: 4313 orrs r3, r2
  8626. 80037fe: 61cb str r3, [r1, #28]
  8627. MODIFY_REG(RCC->CDCFGR2, RCC_CDCFGR2_CDPPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  8628. }
  8629. #endif
  8630. }
  8631. /*-------------------------- PCLK2 Configuration ---------------------------*/
  8632. if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
  8633. 8003800: 687b ldr r3, [r7, #4]
  8634. 8003802: 681b ldr r3, [r3, #0]
  8635. 8003804: f003 0310 and.w r3, r3, #16
  8636. 8003808: 2b00 cmp r3, #0
  8637. 800380a: d010 beq.n 800382e <HAL_RCC_ClockConfig+0xce>
  8638. {
  8639. #if defined(RCC_D2CFGR_D2PPRE2)
  8640. if((RCC_ClkInitStruct->APB2CLKDivider) > (RCC->D2CFGR & RCC_D2CFGR_D2PPRE2))
  8641. 800380c: 687b ldr r3, [r7, #4]
  8642. 800380e: 699a ldr r2, [r3, #24]
  8643. 8003810: 4b64 ldr r3, [pc, #400] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8644. 8003812: 69db ldr r3, [r3, #28]
  8645. 8003814: f403 63e0 and.w r3, r3, #1792 ; 0x700
  8646. 8003818: 429a cmp r2, r3
  8647. 800381a: d908 bls.n 800382e <HAL_RCC_ClockConfig+0xce>
  8648. {
  8649. assert_param(IS_RCC_PCLK2(RCC_ClkInitStruct->APB2CLKDivider));
  8650. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2, (RCC_ClkInitStruct->APB2CLKDivider));
  8651. 800381c: 4b61 ldr r3, [pc, #388] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8652. 800381e: 69db ldr r3, [r3, #28]
  8653. 8003820: f423 62e0 bic.w r2, r3, #1792 ; 0x700
  8654. 8003824: 687b ldr r3, [r7, #4]
  8655. 8003826: 699b ldr r3, [r3, #24]
  8656. 8003828: 495e ldr r1, [pc, #376] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8657. 800382a: 4313 orrs r3, r2
  8658. 800382c: 61cb str r3, [r1, #28]
  8659. }
  8660. #endif
  8661. }
  8662. /*-------------------------- D3PCLK1 Configuration ---------------------------*/
  8663. if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D3PCLK1) == RCC_CLOCKTYPE_D3PCLK1)
  8664. 800382e: 687b ldr r3, [r7, #4]
  8665. 8003830: 681b ldr r3, [r3, #0]
  8666. 8003832: f003 0320 and.w r3, r3, #32
  8667. 8003836: 2b00 cmp r3, #0
  8668. 8003838: d010 beq.n 800385c <HAL_RCC_ClockConfig+0xfc>
  8669. {
  8670. #if defined(RCC_D3CFGR_D3PPRE)
  8671. if((RCC_ClkInitStruct->APB4CLKDivider) > (RCC->D3CFGR & RCC_D3CFGR_D3PPRE))
  8672. 800383a: 687b ldr r3, [r7, #4]
  8673. 800383c: 69da ldr r2, [r3, #28]
  8674. 800383e: 4b59 ldr r3, [pc, #356] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8675. 8003840: 6a1b ldr r3, [r3, #32]
  8676. 8003842: f003 0370 and.w r3, r3, #112 ; 0x70
  8677. 8003846: 429a cmp r2, r3
  8678. 8003848: d908 bls.n 800385c <HAL_RCC_ClockConfig+0xfc>
  8679. {
  8680. assert_param(IS_RCC_D3PCLK1(RCC_ClkInitStruct->APB4CLKDivider));
  8681. MODIFY_REG(RCC->D3CFGR, RCC_D3CFGR_D3PPRE, (RCC_ClkInitStruct->APB4CLKDivider) );
  8682. 800384a: 4b56 ldr r3, [pc, #344] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8683. 800384c: 6a1b ldr r3, [r3, #32]
  8684. 800384e: f023 0270 bic.w r2, r3, #112 ; 0x70
  8685. 8003852: 687b ldr r3, [r7, #4]
  8686. 8003854: 69db ldr r3, [r3, #28]
  8687. 8003856: 4953 ldr r1, [pc, #332] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8688. 8003858: 4313 orrs r3, r2
  8689. 800385a: 620b str r3, [r1, #32]
  8690. }
  8691. #endif
  8692. }
  8693. /*-------------------------- HCLK Configuration --------------------------*/
  8694. if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
  8695. 800385c: 687b ldr r3, [r7, #4]
  8696. 800385e: 681b ldr r3, [r3, #0]
  8697. 8003860: f003 0302 and.w r3, r3, #2
  8698. 8003864: 2b00 cmp r3, #0
  8699. 8003866: d010 beq.n 800388a <HAL_RCC_ClockConfig+0x12a>
  8700. {
  8701. #if defined (RCC_D1CFGR_HPRE)
  8702. if((RCC_ClkInitStruct->AHBCLKDivider) > (RCC->D1CFGR & RCC_D1CFGR_HPRE))
  8703. 8003868: 687b ldr r3, [r7, #4]
  8704. 800386a: 68da ldr r2, [r3, #12]
  8705. 800386c: 4b4d ldr r3, [pc, #308] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8706. 800386e: 699b ldr r3, [r3, #24]
  8707. 8003870: f003 030f and.w r3, r3, #15
  8708. 8003874: 429a cmp r2, r3
  8709. 8003876: d908 bls.n 800388a <HAL_RCC_ClockConfig+0x12a>
  8710. {
  8711. /* Set the new HCLK clock divider */
  8712. assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));
  8713. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);
  8714. 8003878: 4b4a ldr r3, [pc, #296] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8715. 800387a: 699b ldr r3, [r3, #24]
  8716. 800387c: f023 020f bic.w r2, r3, #15
  8717. 8003880: 687b ldr r3, [r7, #4]
  8718. 8003882: 68db ldr r3, [r3, #12]
  8719. 8003884: 4947 ldr r1, [pc, #284] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8720. 8003886: 4313 orrs r3, r2
  8721. 8003888: 618b str r3, [r1, #24]
  8722. }
  8723. #endif
  8724. }
  8725. /*------------------------- SYSCLK Configuration -------------------------*/
  8726. if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
  8727. 800388a: 687b ldr r3, [r7, #4]
  8728. 800388c: 681b ldr r3, [r3, #0]
  8729. 800388e: f003 0301 and.w r3, r3, #1
  8730. 8003892: 2b00 cmp r3, #0
  8731. 8003894: d055 beq.n 8003942 <HAL_RCC_ClockConfig+0x1e2>
  8732. {
  8733. assert_param(IS_RCC_SYSCLK(RCC_ClkInitStruct->SYSCLKDivider));
  8734. assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
  8735. #if defined(RCC_D1CFGR_D1CPRE)
  8736. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1CPRE, RCC_ClkInitStruct->SYSCLKDivider);
  8737. 8003896: 4b43 ldr r3, [pc, #268] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8738. 8003898: 699b ldr r3, [r3, #24]
  8739. 800389a: f423 6270 bic.w r2, r3, #3840 ; 0xf00
  8740. 800389e: 687b ldr r3, [r7, #4]
  8741. 80038a0: 689b ldr r3, [r3, #8]
  8742. 80038a2: 4940 ldr r1, [pc, #256] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8743. 80038a4: 4313 orrs r3, r2
  8744. 80038a6: 618b str r3, [r1, #24]
  8745. #else
  8746. MODIFY_REG(RCC->CDCFGR1, RCC_CDCFGR1_CDCPRE, RCC_ClkInitStruct->SYSCLKDivider);
  8747. #endif
  8748. /* HSE is selected as System Clock Source */
  8749. if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
  8750. 80038a8: 687b ldr r3, [r7, #4]
  8751. 80038aa: 685b ldr r3, [r3, #4]
  8752. 80038ac: 2b02 cmp r3, #2
  8753. 80038ae: d107 bne.n 80038c0 <HAL_RCC_ClockConfig+0x160>
  8754. {
  8755. /* Check the HSE ready flag */
  8756. if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  8757. 80038b0: 4b3c ldr r3, [pc, #240] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8758. 80038b2: 681b ldr r3, [r3, #0]
  8759. 80038b4: f403 3300 and.w r3, r3, #131072 ; 0x20000
  8760. 80038b8: 2b00 cmp r3, #0
  8761. 80038ba: d121 bne.n 8003900 <HAL_RCC_ClockConfig+0x1a0>
  8762. {
  8763. return HAL_ERROR;
  8764. 80038bc: 2301 movs r3, #1
  8765. 80038be: e0f6 b.n 8003aae <HAL_RCC_ClockConfig+0x34e>
  8766. }
  8767. }
  8768. /* PLL is selected as System Clock Source */
  8769. else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
  8770. 80038c0: 687b ldr r3, [r7, #4]
  8771. 80038c2: 685b ldr r3, [r3, #4]
  8772. 80038c4: 2b03 cmp r3, #3
  8773. 80038c6: d107 bne.n 80038d8 <HAL_RCC_ClockConfig+0x178>
  8774. {
  8775. /* Check the PLL ready flag */
  8776. if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  8777. 80038c8: 4b36 ldr r3, [pc, #216] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8778. 80038ca: 681b ldr r3, [r3, #0]
  8779. 80038cc: f003 7300 and.w r3, r3, #33554432 ; 0x2000000
  8780. 80038d0: 2b00 cmp r3, #0
  8781. 80038d2: d115 bne.n 8003900 <HAL_RCC_ClockConfig+0x1a0>
  8782. {
  8783. return HAL_ERROR;
  8784. 80038d4: 2301 movs r3, #1
  8785. 80038d6: e0ea b.n 8003aae <HAL_RCC_ClockConfig+0x34e>
  8786. }
  8787. }
  8788. /* CSI is selected as System Clock Source */
  8789. else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_CSI)
  8790. 80038d8: 687b ldr r3, [r7, #4]
  8791. 80038da: 685b ldr r3, [r3, #4]
  8792. 80038dc: 2b01 cmp r3, #1
  8793. 80038de: d107 bne.n 80038f0 <HAL_RCC_ClockConfig+0x190>
  8794. {
  8795. /* Check the PLL ready flag */
  8796. if(__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  8797. 80038e0: 4b30 ldr r3, [pc, #192] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8798. 80038e2: 681b ldr r3, [r3, #0]
  8799. 80038e4: f403 7380 and.w r3, r3, #256 ; 0x100
  8800. 80038e8: 2b00 cmp r3, #0
  8801. 80038ea: d109 bne.n 8003900 <HAL_RCC_ClockConfig+0x1a0>
  8802. {
  8803. return HAL_ERROR;
  8804. 80038ec: 2301 movs r3, #1
  8805. 80038ee: e0de b.n 8003aae <HAL_RCC_ClockConfig+0x34e>
  8806. }
  8807. /* HSI is selected as System Clock Source */
  8808. else
  8809. {
  8810. /* Check the HSI ready flag */
  8811. if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  8812. 80038f0: 4b2c ldr r3, [pc, #176] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8813. 80038f2: 681b ldr r3, [r3, #0]
  8814. 80038f4: f003 0304 and.w r3, r3, #4
  8815. 80038f8: 2b00 cmp r3, #0
  8816. 80038fa: d101 bne.n 8003900 <HAL_RCC_ClockConfig+0x1a0>
  8817. {
  8818. return HAL_ERROR;
  8819. 80038fc: 2301 movs r3, #1
  8820. 80038fe: e0d6 b.n 8003aae <HAL_RCC_ClockConfig+0x34e>
  8821. }
  8822. }
  8823. MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, RCC_ClkInitStruct->SYSCLKSource);
  8824. 8003900: 4b28 ldr r3, [pc, #160] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8825. 8003902: 691b ldr r3, [r3, #16]
  8826. 8003904: f023 0207 bic.w r2, r3, #7
  8827. 8003908: 687b ldr r3, [r7, #4]
  8828. 800390a: 685b ldr r3, [r3, #4]
  8829. 800390c: 4925 ldr r1, [pc, #148] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8830. 800390e: 4313 orrs r3, r2
  8831. 8003910: 610b str r3, [r1, #16]
  8832. /* Get Start Tick*/
  8833. tickstart = HAL_GetTick();
  8834. 8003912: f7fd fe45 bl 80015a0 <HAL_GetTick>
  8835. 8003916: 6178 str r0, [r7, #20]
  8836. while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
  8837. 8003918: e00a b.n 8003930 <HAL_RCC_ClockConfig+0x1d0>
  8838. {
  8839. if((HAL_GetTick() - tickstart ) > CLOCKSWITCH_TIMEOUT_VALUE)
  8840. 800391a: f7fd fe41 bl 80015a0 <HAL_GetTick>
  8841. 800391e: 4602 mov r2, r0
  8842. 8003920: 697b ldr r3, [r7, #20]
  8843. 8003922: 1ad3 subs r3, r2, r3
  8844. 8003924: f241 3288 movw r2, #5000 ; 0x1388
  8845. 8003928: 4293 cmp r3, r2
  8846. 800392a: d901 bls.n 8003930 <HAL_RCC_ClockConfig+0x1d0>
  8847. {
  8848. return HAL_TIMEOUT;
  8849. 800392c: 2303 movs r3, #3
  8850. 800392e: e0be b.n 8003aae <HAL_RCC_ClockConfig+0x34e>
  8851. while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
  8852. 8003930: 4b1c ldr r3, [pc, #112] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8853. 8003932: 691b ldr r3, [r3, #16]
  8854. 8003934: f003 0238 and.w r2, r3, #56 ; 0x38
  8855. 8003938: 687b ldr r3, [r7, #4]
  8856. 800393a: 685b ldr r3, [r3, #4]
  8857. 800393c: 00db lsls r3, r3, #3
  8858. 800393e: 429a cmp r2, r3
  8859. 8003940: d1eb bne.n 800391a <HAL_RCC_ClockConfig+0x1ba>
  8860. }
  8861. /* Decreasing the BUS frequency divider */
  8862. /*-------------------------- HCLK Configuration --------------------------*/
  8863. if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
  8864. 8003942: 687b ldr r3, [r7, #4]
  8865. 8003944: 681b ldr r3, [r3, #0]
  8866. 8003946: f003 0302 and.w r3, r3, #2
  8867. 800394a: 2b00 cmp r3, #0
  8868. 800394c: d010 beq.n 8003970 <HAL_RCC_ClockConfig+0x210>
  8869. {
  8870. #if defined(RCC_D1CFGR_HPRE)
  8871. if((RCC_ClkInitStruct->AHBCLKDivider) < (RCC->D1CFGR & RCC_D1CFGR_HPRE))
  8872. 800394e: 687b ldr r3, [r7, #4]
  8873. 8003950: 68da ldr r2, [r3, #12]
  8874. 8003952: 4b14 ldr r3, [pc, #80] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8875. 8003954: 699b ldr r3, [r3, #24]
  8876. 8003956: f003 030f and.w r3, r3, #15
  8877. 800395a: 429a cmp r2, r3
  8878. 800395c: d208 bcs.n 8003970 <HAL_RCC_ClockConfig+0x210>
  8879. {
  8880. /* Set the new HCLK clock divider */
  8881. assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));
  8882. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);
  8883. 800395e: 4b11 ldr r3, [pc, #68] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8884. 8003960: 699b ldr r3, [r3, #24]
  8885. 8003962: f023 020f bic.w r2, r3, #15
  8886. 8003966: 687b ldr r3, [r7, #4]
  8887. 8003968: 68db ldr r3, [r3, #12]
  8888. 800396a: 490e ldr r1, [pc, #56] ; (80039a4 <HAL_RCC_ClockConfig+0x244>)
  8889. 800396c: 4313 orrs r3, r2
  8890. 800396e: 618b str r3, [r1, #24]
  8891. }
  8892. #endif
  8893. }
  8894. /* Decreasing the number of wait states because of lower CPU frequency */
  8895. if(FLatency < __HAL_FLASH_GET_LATENCY())
  8896. 8003970: 4b0b ldr r3, [pc, #44] ; (80039a0 <HAL_RCC_ClockConfig+0x240>)
  8897. 8003972: 681b ldr r3, [r3, #0]
  8898. 8003974: f003 030f and.w r3, r3, #15
  8899. 8003978: 683a ldr r2, [r7, #0]
  8900. 800397a: 429a cmp r2, r3
  8901. 800397c: d214 bcs.n 80039a8 <HAL_RCC_ClockConfig+0x248>
  8902. {
  8903. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  8904. __HAL_FLASH_SET_LATENCY(FLatency);
  8905. 800397e: 4b08 ldr r3, [pc, #32] ; (80039a0 <HAL_RCC_ClockConfig+0x240>)
  8906. 8003980: 681b ldr r3, [r3, #0]
  8907. 8003982: f023 020f bic.w r2, r3, #15
  8908. 8003986: 4906 ldr r1, [pc, #24] ; (80039a0 <HAL_RCC_ClockConfig+0x240>)
  8909. 8003988: 683b ldr r3, [r7, #0]
  8910. 800398a: 4313 orrs r3, r2
  8911. 800398c: 600b str r3, [r1, #0]
  8912. /* Check that the new number of wait states is taken into account to access the Flash
  8913. memory by reading the FLASH_ACR register */
  8914. if(__HAL_FLASH_GET_LATENCY() != FLatency)
  8915. 800398e: 4b04 ldr r3, [pc, #16] ; (80039a0 <HAL_RCC_ClockConfig+0x240>)
  8916. 8003990: 681b ldr r3, [r3, #0]
  8917. 8003992: f003 030f and.w r3, r3, #15
  8918. 8003996: 683a ldr r2, [r7, #0]
  8919. 8003998: 429a cmp r2, r3
  8920. 800399a: d005 beq.n 80039a8 <HAL_RCC_ClockConfig+0x248>
  8921. {
  8922. return HAL_ERROR;
  8923. 800399c: 2301 movs r3, #1
  8924. 800399e: e086 b.n 8003aae <HAL_RCC_ClockConfig+0x34e>
  8925. 80039a0: 52002000 .word 0x52002000
  8926. 80039a4: 58024400 .word 0x58024400
  8927. }
  8928. }
  8929. /*-------------------------- D1PCLK1/CDPCLK Configuration ---------------------------*/
  8930. if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D1PCLK1) == RCC_CLOCKTYPE_D1PCLK1)
  8931. 80039a8: 687b ldr r3, [r7, #4]
  8932. 80039aa: 681b ldr r3, [r3, #0]
  8933. 80039ac: f003 0304 and.w r3, r3, #4
  8934. 80039b0: 2b00 cmp r3, #0
  8935. 80039b2: d010 beq.n 80039d6 <HAL_RCC_ClockConfig+0x276>
  8936. {
  8937. #if defined(RCC_D1CFGR_D1PPRE)
  8938. if((RCC_ClkInitStruct->APB3CLKDivider) < (RCC->D1CFGR & RCC_D1CFGR_D1PPRE))
  8939. 80039b4: 687b ldr r3, [r7, #4]
  8940. 80039b6: 691a ldr r2, [r3, #16]
  8941. 80039b8: 4b3f ldr r3, [pc, #252] ; (8003ab8 <HAL_RCC_ClockConfig+0x358>)
  8942. 80039ba: 699b ldr r3, [r3, #24]
  8943. 80039bc: f003 0370 and.w r3, r3, #112 ; 0x70
  8944. 80039c0: 429a cmp r2, r3
  8945. 80039c2: d208 bcs.n 80039d6 <HAL_RCC_ClockConfig+0x276>
  8946. {
  8947. assert_param(IS_RCC_D1PCLK1(RCC_ClkInitStruct->APB3CLKDivider));
  8948. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1PPRE, RCC_ClkInitStruct->APB3CLKDivider);
  8949. 80039c4: 4b3c ldr r3, [pc, #240] ; (8003ab8 <HAL_RCC_ClockConfig+0x358>)
  8950. 80039c6: 699b ldr r3, [r3, #24]
  8951. 80039c8: f023 0270 bic.w r2, r3, #112 ; 0x70
  8952. 80039cc: 687b ldr r3, [r7, #4]
  8953. 80039ce: 691b ldr r3, [r3, #16]
  8954. 80039d0: 4939 ldr r1, [pc, #228] ; (8003ab8 <HAL_RCC_ClockConfig+0x358>)
  8955. 80039d2: 4313 orrs r3, r2
  8956. 80039d4: 618b str r3, [r1, #24]
  8957. }
  8958. #endif
  8959. }
  8960. /*-------------------------- PCLK1 Configuration ---------------------------*/
  8961. if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
  8962. 80039d6: 687b ldr r3, [r7, #4]
  8963. 80039d8: 681b ldr r3, [r3, #0]
  8964. 80039da: f003 0308 and.w r3, r3, #8
  8965. 80039de: 2b00 cmp r3, #0
  8966. 80039e0: d010 beq.n 8003a04 <HAL_RCC_ClockConfig+0x2a4>
  8967. {
  8968. #if defined(RCC_D2CFGR_D2PPRE1)
  8969. if((RCC_ClkInitStruct->APB1CLKDivider) < (RCC->D2CFGR & RCC_D2CFGR_D2PPRE1))
  8970. 80039e2: 687b ldr r3, [r7, #4]
  8971. 80039e4: 695a ldr r2, [r3, #20]
  8972. 80039e6: 4b34 ldr r3, [pc, #208] ; (8003ab8 <HAL_RCC_ClockConfig+0x358>)
  8973. 80039e8: 69db ldr r3, [r3, #28]
  8974. 80039ea: f003 0370 and.w r3, r3, #112 ; 0x70
  8975. 80039ee: 429a cmp r2, r3
  8976. 80039f0: d208 bcs.n 8003a04 <HAL_RCC_ClockConfig+0x2a4>
  8977. {
  8978. assert_param(IS_RCC_PCLK1(RCC_ClkInitStruct->APB1CLKDivider));
  8979. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  8980. 80039f2: 4b31 ldr r3, [pc, #196] ; (8003ab8 <HAL_RCC_ClockConfig+0x358>)
  8981. 80039f4: 69db ldr r3, [r3, #28]
  8982. 80039f6: f023 0270 bic.w r2, r3, #112 ; 0x70
  8983. 80039fa: 687b ldr r3, [r7, #4]
  8984. 80039fc: 695b ldr r3, [r3, #20]
  8985. 80039fe: 492e ldr r1, [pc, #184] ; (8003ab8 <HAL_RCC_ClockConfig+0x358>)
  8986. 8003a00: 4313 orrs r3, r2
  8987. 8003a02: 61cb str r3, [r1, #28]
  8988. }
  8989. #endif
  8990. }
  8991. /*-------------------------- PCLK2 Configuration ---------------------------*/
  8992. if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
  8993. 8003a04: 687b ldr r3, [r7, #4]
  8994. 8003a06: 681b ldr r3, [r3, #0]
  8995. 8003a08: f003 0310 and.w r3, r3, #16
  8996. 8003a0c: 2b00 cmp r3, #0
  8997. 8003a0e: d010 beq.n 8003a32 <HAL_RCC_ClockConfig+0x2d2>
  8998. {
  8999. #if defined (RCC_D2CFGR_D2PPRE2)
  9000. if((RCC_ClkInitStruct->APB2CLKDivider) < (RCC->D2CFGR & RCC_D2CFGR_D2PPRE2))
  9001. 8003a10: 687b ldr r3, [r7, #4]
  9002. 8003a12: 699a ldr r2, [r3, #24]
  9003. 8003a14: 4b28 ldr r3, [pc, #160] ; (8003ab8 <HAL_RCC_ClockConfig+0x358>)
  9004. 8003a16: 69db ldr r3, [r3, #28]
  9005. 8003a18: f403 63e0 and.w r3, r3, #1792 ; 0x700
  9006. 8003a1c: 429a cmp r2, r3
  9007. 8003a1e: d208 bcs.n 8003a32 <HAL_RCC_ClockConfig+0x2d2>
  9008. {
  9009. assert_param(IS_RCC_PCLK2(RCC_ClkInitStruct->APB2CLKDivider));
  9010. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2, (RCC_ClkInitStruct->APB2CLKDivider));
  9011. 8003a20: 4b25 ldr r3, [pc, #148] ; (8003ab8 <HAL_RCC_ClockConfig+0x358>)
  9012. 8003a22: 69db ldr r3, [r3, #28]
  9013. 8003a24: f423 62e0 bic.w r2, r3, #1792 ; 0x700
  9014. 8003a28: 687b ldr r3, [r7, #4]
  9015. 8003a2a: 699b ldr r3, [r3, #24]
  9016. 8003a2c: 4922 ldr r1, [pc, #136] ; (8003ab8 <HAL_RCC_ClockConfig+0x358>)
  9017. 8003a2e: 4313 orrs r3, r2
  9018. 8003a30: 61cb str r3, [r1, #28]
  9019. }
  9020. #endif
  9021. }
  9022. /*-------------------------- D3PCLK1/SRDPCLK1 Configuration ---------------------------*/
  9023. if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D3PCLK1) == RCC_CLOCKTYPE_D3PCLK1)
  9024. 8003a32: 687b ldr r3, [r7, #4]
  9025. 8003a34: 681b ldr r3, [r3, #0]
  9026. 8003a36: f003 0320 and.w r3, r3, #32
  9027. 8003a3a: 2b00 cmp r3, #0
  9028. 8003a3c: d010 beq.n 8003a60 <HAL_RCC_ClockConfig+0x300>
  9029. {
  9030. #if defined(RCC_D3CFGR_D3PPRE)
  9031. if((RCC_ClkInitStruct->APB4CLKDivider) < (RCC->D3CFGR & RCC_D3CFGR_D3PPRE))
  9032. 8003a3e: 687b ldr r3, [r7, #4]
  9033. 8003a40: 69da ldr r2, [r3, #28]
  9034. 8003a42: 4b1d ldr r3, [pc, #116] ; (8003ab8 <HAL_RCC_ClockConfig+0x358>)
  9035. 8003a44: 6a1b ldr r3, [r3, #32]
  9036. 8003a46: f003 0370 and.w r3, r3, #112 ; 0x70
  9037. 8003a4a: 429a cmp r2, r3
  9038. 8003a4c: d208 bcs.n 8003a60 <HAL_RCC_ClockConfig+0x300>
  9039. {
  9040. assert_param(IS_RCC_D3PCLK1(RCC_ClkInitStruct->APB4CLKDivider));
  9041. MODIFY_REG(RCC->D3CFGR, RCC_D3CFGR_D3PPRE, (RCC_ClkInitStruct->APB4CLKDivider) );
  9042. 8003a4e: 4b1a ldr r3, [pc, #104] ; (8003ab8 <HAL_RCC_ClockConfig+0x358>)
  9043. 8003a50: 6a1b ldr r3, [r3, #32]
  9044. 8003a52: f023 0270 bic.w r2, r3, #112 ; 0x70
  9045. 8003a56: 687b ldr r3, [r7, #4]
  9046. 8003a58: 69db ldr r3, [r3, #28]
  9047. 8003a5a: 4917 ldr r1, [pc, #92] ; (8003ab8 <HAL_RCC_ClockConfig+0x358>)
  9048. 8003a5c: 4313 orrs r3, r2
  9049. 8003a5e: 620b str r3, [r1, #32]
  9050. #endif
  9051. }
  9052. /* Update the SystemCoreClock global variable */
  9053. #if defined(RCC_D1CFGR_D1CPRE)
  9054. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> RCC_D1CFGR_D1CPRE_Pos]) & 0x1FU);
  9055. 8003a60: f000 f834 bl 8003acc <HAL_RCC_GetSysClockFreq>
  9056. 8003a64: 4602 mov r2, r0
  9057. 8003a66: 4b14 ldr r3, [pc, #80] ; (8003ab8 <HAL_RCC_ClockConfig+0x358>)
  9058. 8003a68: 699b ldr r3, [r3, #24]
  9059. 8003a6a: 0a1b lsrs r3, r3, #8
  9060. 8003a6c: f003 030f and.w r3, r3, #15
  9061. 8003a70: 4912 ldr r1, [pc, #72] ; (8003abc <HAL_RCC_ClockConfig+0x35c>)
  9062. 8003a72: 5ccb ldrb r3, [r1, r3]
  9063. 8003a74: f003 031f and.w r3, r3, #31
  9064. 8003a78: fa22 f303 lsr.w r3, r2, r3
  9065. 8003a7c: 613b str r3, [r7, #16]
  9066. #else
  9067. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE)>> RCC_CDCFGR1_CDCPRE_Pos]) & 0x1FU);
  9068. #endif
  9069. #if defined(RCC_D1CFGR_HPRE)
  9070. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE)>> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  9071. 8003a7e: 4b0e ldr r3, [pc, #56] ; (8003ab8 <HAL_RCC_ClockConfig+0x358>)
  9072. 8003a80: 699b ldr r3, [r3, #24]
  9073. 8003a82: f003 030f and.w r3, r3, #15
  9074. 8003a86: 4a0d ldr r2, [pc, #52] ; (8003abc <HAL_RCC_ClockConfig+0x35c>)
  9075. 8003a88: 5cd3 ldrb r3, [r2, r3]
  9076. 8003a8a: f003 031f and.w r3, r3, #31
  9077. 8003a8e: 693a ldr r2, [r7, #16]
  9078. 8003a90: fa22 f303 lsr.w r3, r2, r3
  9079. 8003a94: 4a0a ldr r2, [pc, #40] ; (8003ac0 <HAL_RCC_ClockConfig+0x360>)
  9080. 8003a96: 6013 str r3, [r2, #0]
  9081. #endif
  9082. #if defined(DUAL_CORE) && defined(CORE_CM4)
  9083. SystemCoreClock = SystemD2Clock;
  9084. #else
  9085. SystemCoreClock = common_system_clock;
  9086. 8003a98: 4a0a ldr r2, [pc, #40] ; (8003ac4 <HAL_RCC_ClockConfig+0x364>)
  9087. 8003a9a: 693b ldr r3, [r7, #16]
  9088. 8003a9c: 6013 str r3, [r2, #0]
  9089. #endif /* DUAL_CORE && CORE_CM4 */
  9090. /* Configure the source of time base considering new system clocks settings*/
  9091. halstatus = HAL_InitTick (uwTickPrio);
  9092. 8003a9e: 4b0a ldr r3, [pc, #40] ; (8003ac8 <HAL_RCC_ClockConfig+0x368>)
  9093. 8003aa0: 681b ldr r3, [r3, #0]
  9094. 8003aa2: 4618 mov r0, r3
  9095. 8003aa4: f7fd fd32 bl 800150c <HAL_InitTick>
  9096. 8003aa8: 4603 mov r3, r0
  9097. 8003aaa: 73fb strb r3, [r7, #15]
  9098. return halstatus;
  9099. 8003aac: 7bfb ldrb r3, [r7, #15]
  9100. }
  9101. 8003aae: 4618 mov r0, r3
  9102. 8003ab0: 3718 adds r7, #24
  9103. 8003ab2: 46bd mov sp, r7
  9104. 8003ab4: bd80 pop {r7, pc}
  9105. 8003ab6: bf00 nop
  9106. 8003ab8: 58024400 .word 0x58024400
  9107. 8003abc: 0800a958 .word 0x0800a958
  9108. 8003ac0: 24000004 .word 0x24000004
  9109. 8003ac4: 24000000 .word 0x24000000
  9110. 8003ac8: 24000008 .word 0x24000008
  9111. 08003acc <HAL_RCC_GetSysClockFreq>:
  9112. *
  9113. *
  9114. * @retval SYSCLK frequency
  9115. */
  9116. uint32_t HAL_RCC_GetSysClockFreq(void)
  9117. {
  9118. 8003acc: b480 push {r7}
  9119. 8003ace: b089 sub sp, #36 ; 0x24
  9120. 8003ad0: af00 add r7, sp, #0
  9121. float_t fracn1, pllvco;
  9122. uint32_t sysclockfreq;
  9123. /* Get SYSCLK source -------------------------------------------------------*/
  9124. switch (RCC->CFGR & RCC_CFGR_SWS)
  9125. 8003ad2: 4bb3 ldr r3, [pc, #716] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9126. 8003ad4: 691b ldr r3, [r3, #16]
  9127. 8003ad6: f003 0338 and.w r3, r3, #56 ; 0x38
  9128. 8003ada: 2b18 cmp r3, #24
  9129. 8003adc: f200 8155 bhi.w 8003d8a <HAL_RCC_GetSysClockFreq+0x2be>
  9130. 8003ae0: a201 add r2, pc, #4 ; (adr r2, 8003ae8 <HAL_RCC_GetSysClockFreq+0x1c>)
  9131. 8003ae2: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  9132. 8003ae6: bf00 nop
  9133. 8003ae8: 08003b4d .word 0x08003b4d
  9134. 8003aec: 08003d8b .word 0x08003d8b
  9135. 8003af0: 08003d8b .word 0x08003d8b
  9136. 8003af4: 08003d8b .word 0x08003d8b
  9137. 8003af8: 08003d8b .word 0x08003d8b
  9138. 8003afc: 08003d8b .word 0x08003d8b
  9139. 8003b00: 08003d8b .word 0x08003d8b
  9140. 8003b04: 08003d8b .word 0x08003d8b
  9141. 8003b08: 08003b73 .word 0x08003b73
  9142. 8003b0c: 08003d8b .word 0x08003d8b
  9143. 8003b10: 08003d8b .word 0x08003d8b
  9144. 8003b14: 08003d8b .word 0x08003d8b
  9145. 8003b18: 08003d8b .word 0x08003d8b
  9146. 8003b1c: 08003d8b .word 0x08003d8b
  9147. 8003b20: 08003d8b .word 0x08003d8b
  9148. 8003b24: 08003d8b .word 0x08003d8b
  9149. 8003b28: 08003b79 .word 0x08003b79
  9150. 8003b2c: 08003d8b .word 0x08003d8b
  9151. 8003b30: 08003d8b .word 0x08003d8b
  9152. 8003b34: 08003d8b .word 0x08003d8b
  9153. 8003b38: 08003d8b .word 0x08003d8b
  9154. 8003b3c: 08003d8b .word 0x08003d8b
  9155. 8003b40: 08003d8b .word 0x08003d8b
  9156. 8003b44: 08003d8b .word 0x08003d8b
  9157. 8003b48: 08003b7f .word 0x08003b7f
  9158. {
  9159. case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */
  9160. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  9161. 8003b4c: 4b94 ldr r3, [pc, #592] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9162. 8003b4e: 681b ldr r3, [r3, #0]
  9163. 8003b50: f003 0320 and.w r3, r3, #32
  9164. 8003b54: 2b00 cmp r3, #0
  9165. 8003b56: d009 beq.n 8003b6c <HAL_RCC_GetSysClockFreq+0xa0>
  9166. {
  9167. sysclockfreq = (uint32_t) (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER()>> 3));
  9168. 8003b58: 4b91 ldr r3, [pc, #580] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9169. 8003b5a: 681b ldr r3, [r3, #0]
  9170. 8003b5c: 08db lsrs r3, r3, #3
  9171. 8003b5e: f003 0303 and.w r3, r3, #3
  9172. 8003b62: 4a90 ldr r2, [pc, #576] ; (8003da4 <HAL_RCC_GetSysClockFreq+0x2d8>)
  9173. 8003b64: fa22 f303 lsr.w r3, r2, r3
  9174. 8003b68: 61bb str r3, [r7, #24]
  9175. else
  9176. {
  9177. sysclockfreq = (uint32_t) HSI_VALUE;
  9178. }
  9179. break;
  9180. 8003b6a: e111 b.n 8003d90 <HAL_RCC_GetSysClockFreq+0x2c4>
  9181. sysclockfreq = (uint32_t) HSI_VALUE;
  9182. 8003b6c: 4b8d ldr r3, [pc, #564] ; (8003da4 <HAL_RCC_GetSysClockFreq+0x2d8>)
  9183. 8003b6e: 61bb str r3, [r7, #24]
  9184. break;
  9185. 8003b70: e10e b.n 8003d90 <HAL_RCC_GetSysClockFreq+0x2c4>
  9186. case RCC_CFGR_SWS_CSI: /* CSI used as system clock source */
  9187. sysclockfreq = CSI_VALUE;
  9188. 8003b72: 4b8d ldr r3, [pc, #564] ; (8003da8 <HAL_RCC_GetSysClockFreq+0x2dc>)
  9189. 8003b74: 61bb str r3, [r7, #24]
  9190. break;
  9191. 8003b76: e10b b.n 8003d90 <HAL_RCC_GetSysClockFreq+0x2c4>
  9192. case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */
  9193. sysclockfreq = HSE_VALUE;
  9194. 8003b78: 4b8c ldr r3, [pc, #560] ; (8003dac <HAL_RCC_GetSysClockFreq+0x2e0>)
  9195. 8003b7a: 61bb str r3, [r7, #24]
  9196. break;
  9197. 8003b7c: e108 b.n 8003d90 <HAL_RCC_GetSysClockFreq+0x2c4>
  9198. case RCC_CFGR_SWS_PLL1: /* PLL1 used as system clock source */
  9199. /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLLM) * PLLN
  9200. SYSCLK = PLL_VCO / PLLR
  9201. */
  9202. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  9203. 8003b7e: 4b88 ldr r3, [pc, #544] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9204. 8003b80: 6a9b ldr r3, [r3, #40] ; 0x28
  9205. 8003b82: f003 0303 and.w r3, r3, #3
  9206. 8003b86: 617b str r3, [r7, #20]
  9207. pllm = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1)>> 4) ;
  9208. 8003b88: 4b85 ldr r3, [pc, #532] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9209. 8003b8a: 6a9b ldr r3, [r3, #40] ; 0x28
  9210. 8003b8c: 091b lsrs r3, r3, #4
  9211. 8003b8e: f003 033f and.w r3, r3, #63 ; 0x3f
  9212. 8003b92: 613b str r3, [r7, #16]
  9213. pllfracen = ((RCC-> PLLCFGR & RCC_PLLCFGR_PLL1FRACEN)>>RCC_PLLCFGR_PLL1FRACEN_Pos);
  9214. 8003b94: 4b82 ldr r3, [pc, #520] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9215. 8003b96: 6adb ldr r3, [r3, #44] ; 0x2c
  9216. 8003b98: f003 0301 and.w r3, r3, #1
  9217. 8003b9c: 60fb str r3, [r7, #12]
  9218. fracn1 = (float_t)(uint32_t)(pllfracen* ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1)>> 3));
  9219. 8003b9e: 4b80 ldr r3, [pc, #512] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9220. 8003ba0: 6b5b ldr r3, [r3, #52] ; 0x34
  9221. 8003ba2: 08db lsrs r3, r3, #3
  9222. 8003ba4: f3c3 030c ubfx r3, r3, #0, #13
  9223. 8003ba8: 68fa ldr r2, [r7, #12]
  9224. 8003baa: fb02 f303 mul.w r3, r2, r3
  9225. 8003bae: ee07 3a90 vmov s15, r3
  9226. 8003bb2: eef8 7a67 vcvt.f32.u32 s15, s15
  9227. 8003bb6: edc7 7a02 vstr s15, [r7, #8]
  9228. if (pllm != 0U)
  9229. 8003bba: 693b ldr r3, [r7, #16]
  9230. 8003bbc: 2b00 cmp r3, #0
  9231. 8003bbe: f000 80e1 beq.w 8003d84 <HAL_RCC_GetSysClockFreq+0x2b8>
  9232. 8003bc2: 697b ldr r3, [r7, #20]
  9233. 8003bc4: 2b02 cmp r3, #2
  9234. 8003bc6: f000 8083 beq.w 8003cd0 <HAL_RCC_GetSysClockFreq+0x204>
  9235. 8003bca: 697b ldr r3, [r7, #20]
  9236. 8003bcc: 2b02 cmp r3, #2
  9237. 8003bce: f200 80a1 bhi.w 8003d14 <HAL_RCC_GetSysClockFreq+0x248>
  9238. 8003bd2: 697b ldr r3, [r7, #20]
  9239. 8003bd4: 2b00 cmp r3, #0
  9240. 8003bd6: d003 beq.n 8003be0 <HAL_RCC_GetSysClockFreq+0x114>
  9241. 8003bd8: 697b ldr r3, [r7, #20]
  9242. 8003bda: 2b01 cmp r3, #1
  9243. 8003bdc: d056 beq.n 8003c8c <HAL_RCC_GetSysClockFreq+0x1c0>
  9244. 8003bde: e099 b.n 8003d14 <HAL_RCC_GetSysClockFreq+0x248>
  9245. {
  9246. switch (pllsource)
  9247. {
  9248. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  9249. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  9250. 8003be0: 4b6f ldr r3, [pc, #444] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9251. 8003be2: 681b ldr r3, [r3, #0]
  9252. 8003be4: f003 0320 and.w r3, r3, #32
  9253. 8003be8: 2b00 cmp r3, #0
  9254. 8003bea: d02d beq.n 8003c48 <HAL_RCC_GetSysClockFreq+0x17c>
  9255. {
  9256. hsivalue= (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER()>> 3));
  9257. 8003bec: 4b6c ldr r3, [pc, #432] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9258. 8003bee: 681b ldr r3, [r3, #0]
  9259. 8003bf0: 08db lsrs r3, r3, #3
  9260. 8003bf2: f003 0303 and.w r3, r3, #3
  9261. 8003bf6: 4a6b ldr r2, [pc, #428] ; (8003da4 <HAL_RCC_GetSysClockFreq+0x2d8>)
  9262. 8003bf8: fa22 f303 lsr.w r3, r2, r3
  9263. 8003bfc: 607b str r3, [r7, #4]
  9264. pllvco = ( (float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 );
  9265. 8003bfe: 687b ldr r3, [r7, #4]
  9266. 8003c00: ee07 3a90 vmov s15, r3
  9267. 8003c04: eef8 6a67 vcvt.f32.u32 s13, s15
  9268. 8003c08: 693b ldr r3, [r7, #16]
  9269. 8003c0a: ee07 3a90 vmov s15, r3
  9270. 8003c0e: eef8 7a67 vcvt.f32.u32 s15, s15
  9271. 8003c12: ee86 7aa7 vdiv.f32 s14, s13, s15
  9272. 8003c16: 4b62 ldr r3, [pc, #392] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9273. 8003c18: 6b1b ldr r3, [r3, #48] ; 0x30
  9274. 8003c1a: f3c3 0308 ubfx r3, r3, #0, #9
  9275. 8003c1e: ee07 3a90 vmov s15, r3
  9276. 8003c22: eef8 6a67 vcvt.f32.u32 s13, s15
  9277. 8003c26: ed97 6a02 vldr s12, [r7, #8]
  9278. 8003c2a: eddf 5a61 vldr s11, [pc, #388] ; 8003db0 <HAL_RCC_GetSysClockFreq+0x2e4>
  9279. 8003c2e: eec6 7a25 vdiv.f32 s15, s12, s11
  9280. 8003c32: ee76 7aa7 vadd.f32 s15, s13, s15
  9281. 8003c36: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0
  9282. 8003c3a: ee77 7aa6 vadd.f32 s15, s15, s13
  9283. 8003c3e: ee67 7a27 vmul.f32 s15, s14, s15
  9284. 8003c42: edc7 7a07 vstr s15, [r7, #28]
  9285. }
  9286. else
  9287. {
  9288. pllvco = ((float_t)HSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 );
  9289. }
  9290. break;
  9291. 8003c46: e087 b.n 8003d58 <HAL_RCC_GetSysClockFreq+0x28c>
  9292. pllvco = ((float_t)HSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 );
  9293. 8003c48: 693b ldr r3, [r7, #16]
  9294. 8003c4a: ee07 3a90 vmov s15, r3
  9295. 8003c4e: eef8 7a67 vcvt.f32.u32 s15, s15
  9296. 8003c52: eddf 6a58 vldr s13, [pc, #352] ; 8003db4 <HAL_RCC_GetSysClockFreq+0x2e8>
  9297. 8003c56: ee86 7aa7 vdiv.f32 s14, s13, s15
  9298. 8003c5a: 4b51 ldr r3, [pc, #324] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9299. 8003c5c: 6b1b ldr r3, [r3, #48] ; 0x30
  9300. 8003c5e: f3c3 0308 ubfx r3, r3, #0, #9
  9301. 8003c62: ee07 3a90 vmov s15, r3
  9302. 8003c66: eef8 6a67 vcvt.f32.u32 s13, s15
  9303. 8003c6a: ed97 6a02 vldr s12, [r7, #8]
  9304. 8003c6e: eddf 5a50 vldr s11, [pc, #320] ; 8003db0 <HAL_RCC_GetSysClockFreq+0x2e4>
  9305. 8003c72: eec6 7a25 vdiv.f32 s15, s12, s11
  9306. 8003c76: ee76 7aa7 vadd.f32 s15, s13, s15
  9307. 8003c7a: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0
  9308. 8003c7e: ee77 7aa6 vadd.f32 s15, s15, s13
  9309. 8003c82: ee67 7a27 vmul.f32 s15, s14, s15
  9310. 8003c86: edc7 7a07 vstr s15, [r7, #28]
  9311. break;
  9312. 8003c8a: e065 b.n 8003d58 <HAL_RCC_GetSysClockFreq+0x28c>
  9313. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  9314. pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 );
  9315. 8003c8c: 693b ldr r3, [r7, #16]
  9316. 8003c8e: ee07 3a90 vmov s15, r3
  9317. 8003c92: eef8 7a67 vcvt.f32.u32 s15, s15
  9318. 8003c96: eddf 6a48 vldr s13, [pc, #288] ; 8003db8 <HAL_RCC_GetSysClockFreq+0x2ec>
  9319. 8003c9a: ee86 7aa7 vdiv.f32 s14, s13, s15
  9320. 8003c9e: 4b40 ldr r3, [pc, #256] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9321. 8003ca0: 6b1b ldr r3, [r3, #48] ; 0x30
  9322. 8003ca2: f3c3 0308 ubfx r3, r3, #0, #9
  9323. 8003ca6: ee07 3a90 vmov s15, r3
  9324. 8003caa: eef8 6a67 vcvt.f32.u32 s13, s15
  9325. 8003cae: ed97 6a02 vldr s12, [r7, #8]
  9326. 8003cb2: eddf 5a3f vldr s11, [pc, #252] ; 8003db0 <HAL_RCC_GetSysClockFreq+0x2e4>
  9327. 8003cb6: eec6 7a25 vdiv.f32 s15, s12, s11
  9328. 8003cba: ee76 7aa7 vadd.f32 s15, s13, s15
  9329. 8003cbe: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0
  9330. 8003cc2: ee77 7aa6 vadd.f32 s15, s15, s13
  9331. 8003cc6: ee67 7a27 vmul.f32 s15, s14, s15
  9332. 8003cca: edc7 7a07 vstr s15, [r7, #28]
  9333. break;
  9334. 8003cce: e043 b.n 8003d58 <HAL_RCC_GetSysClockFreq+0x28c>
  9335. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  9336. pllvco = ((float_t)HSE_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 );
  9337. 8003cd0: 693b ldr r3, [r7, #16]
  9338. 8003cd2: ee07 3a90 vmov s15, r3
  9339. 8003cd6: eef8 7a67 vcvt.f32.u32 s15, s15
  9340. 8003cda: eddf 6a38 vldr s13, [pc, #224] ; 8003dbc <HAL_RCC_GetSysClockFreq+0x2f0>
  9341. 8003cde: ee86 7aa7 vdiv.f32 s14, s13, s15
  9342. 8003ce2: 4b2f ldr r3, [pc, #188] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9343. 8003ce4: 6b1b ldr r3, [r3, #48] ; 0x30
  9344. 8003ce6: f3c3 0308 ubfx r3, r3, #0, #9
  9345. 8003cea: ee07 3a90 vmov s15, r3
  9346. 8003cee: eef8 6a67 vcvt.f32.u32 s13, s15
  9347. 8003cf2: ed97 6a02 vldr s12, [r7, #8]
  9348. 8003cf6: eddf 5a2e vldr s11, [pc, #184] ; 8003db0 <HAL_RCC_GetSysClockFreq+0x2e4>
  9349. 8003cfa: eec6 7a25 vdiv.f32 s15, s12, s11
  9350. 8003cfe: ee76 7aa7 vadd.f32 s15, s13, s15
  9351. 8003d02: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0
  9352. 8003d06: ee77 7aa6 vadd.f32 s15, s15, s13
  9353. 8003d0a: ee67 7a27 vmul.f32 s15, s14, s15
  9354. 8003d0e: edc7 7a07 vstr s15, [r7, #28]
  9355. break;
  9356. 8003d12: e021 b.n 8003d58 <HAL_RCC_GetSysClockFreq+0x28c>
  9357. default:
  9358. pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 );
  9359. 8003d14: 693b ldr r3, [r7, #16]
  9360. 8003d16: ee07 3a90 vmov s15, r3
  9361. 8003d1a: eef8 7a67 vcvt.f32.u32 s15, s15
  9362. 8003d1e: eddf 6a26 vldr s13, [pc, #152] ; 8003db8 <HAL_RCC_GetSysClockFreq+0x2ec>
  9363. 8003d22: ee86 7aa7 vdiv.f32 s14, s13, s15
  9364. 8003d26: 4b1e ldr r3, [pc, #120] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9365. 8003d28: 6b1b ldr r3, [r3, #48] ; 0x30
  9366. 8003d2a: f3c3 0308 ubfx r3, r3, #0, #9
  9367. 8003d2e: ee07 3a90 vmov s15, r3
  9368. 8003d32: eef8 6a67 vcvt.f32.u32 s13, s15
  9369. 8003d36: ed97 6a02 vldr s12, [r7, #8]
  9370. 8003d3a: eddf 5a1d vldr s11, [pc, #116] ; 8003db0 <HAL_RCC_GetSysClockFreq+0x2e4>
  9371. 8003d3e: eec6 7a25 vdiv.f32 s15, s12, s11
  9372. 8003d42: ee76 7aa7 vadd.f32 s15, s13, s15
  9373. 8003d46: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0
  9374. 8003d4a: ee77 7aa6 vadd.f32 s15, s15, s13
  9375. 8003d4e: ee67 7a27 vmul.f32 s15, s14, s15
  9376. 8003d52: edc7 7a07 vstr s15, [r7, #28]
  9377. break;
  9378. 8003d56: bf00 nop
  9379. }
  9380. pllp = (((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >>9) + 1U ) ;
  9381. 8003d58: 4b11 ldr r3, [pc, #68] ; (8003da0 <HAL_RCC_GetSysClockFreq+0x2d4>)
  9382. 8003d5a: 6b1b ldr r3, [r3, #48] ; 0x30
  9383. 8003d5c: 0a5b lsrs r3, r3, #9
  9384. 8003d5e: f003 037f and.w r3, r3, #127 ; 0x7f
  9385. 8003d62: 3301 adds r3, #1
  9386. 8003d64: 603b str r3, [r7, #0]
  9387. sysclockfreq = (uint32_t)(float_t)(pllvco/(float_t)pllp);
  9388. 8003d66: 683b ldr r3, [r7, #0]
  9389. 8003d68: ee07 3a90 vmov s15, r3
  9390. 8003d6c: eeb8 7a67 vcvt.f32.u32 s14, s15
  9391. 8003d70: edd7 6a07 vldr s13, [r7, #28]
  9392. 8003d74: eec6 7a87 vdiv.f32 s15, s13, s14
  9393. 8003d78: eefc 7ae7 vcvt.u32.f32 s15, s15
  9394. 8003d7c: ee17 3a90 vmov r3, s15
  9395. 8003d80: 61bb str r3, [r7, #24]
  9396. }
  9397. else
  9398. {
  9399. sysclockfreq = 0U;
  9400. }
  9401. break;
  9402. 8003d82: e005 b.n 8003d90 <HAL_RCC_GetSysClockFreq+0x2c4>
  9403. sysclockfreq = 0U;
  9404. 8003d84: 2300 movs r3, #0
  9405. 8003d86: 61bb str r3, [r7, #24]
  9406. break;
  9407. 8003d88: e002 b.n 8003d90 <HAL_RCC_GetSysClockFreq+0x2c4>
  9408. default:
  9409. sysclockfreq = CSI_VALUE;
  9410. 8003d8a: 4b07 ldr r3, [pc, #28] ; (8003da8 <HAL_RCC_GetSysClockFreq+0x2dc>)
  9411. 8003d8c: 61bb str r3, [r7, #24]
  9412. break;
  9413. 8003d8e: bf00 nop
  9414. }
  9415. return sysclockfreq;
  9416. 8003d90: 69bb ldr r3, [r7, #24]
  9417. }
  9418. 8003d92: 4618 mov r0, r3
  9419. 8003d94: 3724 adds r7, #36 ; 0x24
  9420. 8003d96: 46bd mov sp, r7
  9421. 8003d98: f85d 7b04 ldr.w r7, [sp], #4
  9422. 8003d9c: 4770 bx lr
  9423. 8003d9e: bf00 nop
  9424. 8003da0: 58024400 .word 0x58024400
  9425. 8003da4: 03d09000 .word 0x03d09000
  9426. 8003da8: 003d0900 .word 0x003d0900
  9427. 8003dac: 007a1200 .word 0x007a1200
  9428. 8003db0: 46000000 .word 0x46000000
  9429. 8003db4: 4c742400 .word 0x4c742400
  9430. 8003db8: 4a742400 .word 0x4a742400
  9431. 8003dbc: 4af42400 .word 0x4af42400
  9432. 08003dc0 <HAL_RCC_GetHCLKFreq>:
  9433. * @note The SystemD2Clock CMSIS variable is used to store System domain2 Clock Frequency
  9434. * and updated within this function
  9435. * @retval HCLK frequency
  9436. */
  9437. uint32_t HAL_RCC_GetHCLKFreq(void)
  9438. {
  9439. 8003dc0: b580 push {r7, lr}
  9440. 8003dc2: b082 sub sp, #8
  9441. 8003dc4: af00 add r7, sp, #0
  9442. uint32_t common_system_clock;
  9443. #if defined(RCC_D1CFGR_D1CPRE)
  9444. common_system_clock = HAL_RCC_GetSysClockFreq() >> (D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> RCC_D1CFGR_D1CPRE_Pos] & 0x1FU);
  9445. 8003dc6: f7ff fe81 bl 8003acc <HAL_RCC_GetSysClockFreq>
  9446. 8003dca: 4602 mov r2, r0
  9447. 8003dcc: 4b10 ldr r3, [pc, #64] ; (8003e10 <HAL_RCC_GetHCLKFreq+0x50>)
  9448. 8003dce: 699b ldr r3, [r3, #24]
  9449. 8003dd0: 0a1b lsrs r3, r3, #8
  9450. 8003dd2: f003 030f and.w r3, r3, #15
  9451. 8003dd6: 490f ldr r1, [pc, #60] ; (8003e14 <HAL_RCC_GetHCLKFreq+0x54>)
  9452. 8003dd8: 5ccb ldrb r3, [r1, r3]
  9453. 8003dda: f003 031f and.w r3, r3, #31
  9454. 8003dde: fa22 f303 lsr.w r3, r2, r3
  9455. 8003de2: 607b str r3, [r7, #4]
  9456. #else
  9457. common_system_clock = HAL_RCC_GetSysClockFreq() >> (D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE)>> RCC_CDCFGR1_CDCPRE_Pos] & 0x1FU);
  9458. #endif
  9459. #if defined(RCC_D1CFGR_HPRE)
  9460. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE)>> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  9461. 8003de4: 4b0a ldr r3, [pc, #40] ; (8003e10 <HAL_RCC_GetHCLKFreq+0x50>)
  9462. 8003de6: 699b ldr r3, [r3, #24]
  9463. 8003de8: f003 030f and.w r3, r3, #15
  9464. 8003dec: 4a09 ldr r2, [pc, #36] ; (8003e14 <HAL_RCC_GetHCLKFreq+0x54>)
  9465. 8003dee: 5cd3 ldrb r3, [r2, r3]
  9466. 8003df0: f003 031f and.w r3, r3, #31
  9467. 8003df4: 687a ldr r2, [r7, #4]
  9468. 8003df6: fa22 f303 lsr.w r3, r2, r3
  9469. 8003dfa: 4a07 ldr r2, [pc, #28] ; (8003e18 <HAL_RCC_GetHCLKFreq+0x58>)
  9470. 8003dfc: 6013 str r3, [r2, #0]
  9471. #endif
  9472. #if defined(DUAL_CORE) && defined(CORE_CM4)
  9473. SystemCoreClock = SystemD2Clock;
  9474. #else
  9475. SystemCoreClock = common_system_clock;
  9476. 8003dfe: 4a07 ldr r2, [pc, #28] ; (8003e1c <HAL_RCC_GetHCLKFreq+0x5c>)
  9477. 8003e00: 687b ldr r3, [r7, #4]
  9478. 8003e02: 6013 str r3, [r2, #0]
  9479. #endif /* DUAL_CORE && CORE_CM4 */
  9480. return SystemD2Clock;
  9481. 8003e04: 4b04 ldr r3, [pc, #16] ; (8003e18 <HAL_RCC_GetHCLKFreq+0x58>)
  9482. 8003e06: 681b ldr r3, [r3, #0]
  9483. }
  9484. 8003e08: 4618 mov r0, r3
  9485. 8003e0a: 3708 adds r7, #8
  9486. 8003e0c: 46bd mov sp, r7
  9487. 8003e0e: bd80 pop {r7, pc}
  9488. 8003e10: 58024400 .word 0x58024400
  9489. 8003e14: 0800a958 .word 0x0800a958
  9490. 8003e18: 24000004 .word 0x24000004
  9491. 8003e1c: 24000000 .word 0x24000000
  9492. 08003e20 <HAL_RCCEx_PeriphCLKConfig>:
  9493. * (*) : Available on some STM32H7 lines only.
  9494. *
  9495. * @retval HAL status
  9496. */
  9497. HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
  9498. {
  9499. 8003e20: b580 push {r7, lr}
  9500. 8003e22: b086 sub sp, #24
  9501. 8003e24: af00 add r7, sp, #0
  9502. 8003e26: 6078 str r0, [r7, #4]
  9503. uint32_t tmpreg;
  9504. uint32_t tickstart;
  9505. HAL_StatusTypeDef ret = HAL_OK; /* Intermediate status */
  9506. 8003e28: 2300 movs r3, #0
  9507. 8003e2a: 75fb strb r3, [r7, #23]
  9508. HAL_StatusTypeDef status = HAL_OK; /* Final status */
  9509. 8003e2c: 2300 movs r3, #0
  9510. 8003e2e: 75bb strb r3, [r7, #22]
  9511. /*---------------------------- SPDIFRX configuration -------------------------------*/
  9512. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPDIFRX) == RCC_PERIPHCLK_SPDIFRX)
  9513. 8003e30: 687b ldr r3, [r7, #4]
  9514. 8003e32: 681b ldr r3, [r3, #0]
  9515. 8003e34: f003 6300 and.w r3, r3, #134217728 ; 0x8000000
  9516. 8003e38: 2b00 cmp r3, #0
  9517. 8003e3a: d03f beq.n 8003ebc <HAL_RCCEx_PeriphCLKConfig+0x9c>
  9518. {
  9519. switch(PeriphClkInit->SpdifrxClockSelection)
  9520. 8003e3c: 687b ldr r3, [r7, #4]
  9521. 8003e3e: 6e1b ldr r3, [r3, #96] ; 0x60
  9522. 8003e40: f5b3 1f40 cmp.w r3, #3145728 ; 0x300000
  9523. 8003e44: d02a beq.n 8003e9c <HAL_RCCEx_PeriphCLKConfig+0x7c>
  9524. 8003e46: f5b3 1f40 cmp.w r3, #3145728 ; 0x300000
  9525. 8003e4a: d824 bhi.n 8003e96 <HAL_RCCEx_PeriphCLKConfig+0x76>
  9526. 8003e4c: f5b3 1f00 cmp.w r3, #2097152 ; 0x200000
  9527. 8003e50: d018 beq.n 8003e84 <HAL_RCCEx_PeriphCLKConfig+0x64>
  9528. 8003e52: f5b3 1f00 cmp.w r3, #2097152 ; 0x200000
  9529. 8003e56: d81e bhi.n 8003e96 <HAL_RCCEx_PeriphCLKConfig+0x76>
  9530. 8003e58: 2b00 cmp r3, #0
  9531. 8003e5a: d003 beq.n 8003e64 <HAL_RCCEx_PeriphCLKConfig+0x44>
  9532. 8003e5c: f5b3 1f80 cmp.w r3, #1048576 ; 0x100000
  9533. 8003e60: d007 beq.n 8003e72 <HAL_RCCEx_PeriphCLKConfig+0x52>
  9534. 8003e62: e018 b.n 8003e96 <HAL_RCCEx_PeriphCLKConfig+0x76>
  9535. {
  9536. case RCC_SPDIFRXCLKSOURCE_PLL: /* PLL is used as clock source for SPDIFRX*/
  9537. /* Enable PLL1Q Clock output generated form System PLL . */
  9538. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  9539. 8003e64: 4bab ldr r3, [pc, #684] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9540. 8003e66: 6adb ldr r3, [r3, #44] ; 0x2c
  9541. 8003e68: 4aaa ldr r2, [pc, #680] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9542. 8003e6a: f443 3300 orr.w r3, r3, #131072 ; 0x20000
  9543. 8003e6e: 62d3 str r3, [r2, #44] ; 0x2c
  9544. /* SPDIFRX clock source configuration done later after clock selection check */
  9545. break;
  9546. 8003e70: e015 b.n 8003e9e <HAL_RCCEx_PeriphCLKConfig+0x7e>
  9547. case RCC_SPDIFRXCLKSOURCE_PLL2: /* PLL2 is used as clock source for SPDIFRX*/
  9548. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_R_UPDATE);
  9549. 8003e72: 687b ldr r3, [r7, #4]
  9550. 8003e74: 3304 adds r3, #4
  9551. 8003e76: 2102 movs r1, #2
  9552. 8003e78: 4618 mov r0, r3
  9553. 8003e7a: f000 fecb bl 8004c14 <RCCEx_PLL2_Config>
  9554. 8003e7e: 4603 mov r3, r0
  9555. 8003e80: 75fb strb r3, [r7, #23]
  9556. /* SPDIFRX clock source configuration done later after clock selection check */
  9557. break;
  9558. 8003e82: e00c b.n 8003e9e <HAL_RCCEx_PeriphCLKConfig+0x7e>
  9559. case RCC_SPDIFRXCLKSOURCE_PLL3: /* PLL3 is used as clock source for SPDIFRX*/
  9560. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_R_UPDATE);
  9561. 8003e84: 687b ldr r3, [r7, #4]
  9562. 8003e86: 3324 adds r3, #36 ; 0x24
  9563. 8003e88: 2102 movs r1, #2
  9564. 8003e8a: 4618 mov r0, r3
  9565. 8003e8c: f000 ff74 bl 8004d78 <RCCEx_PLL3_Config>
  9566. 8003e90: 4603 mov r3, r0
  9567. 8003e92: 75fb strb r3, [r7, #23]
  9568. /* SPDIFRX clock source configuration done later after clock selection check */
  9569. break;
  9570. 8003e94: e003 b.n 8003e9e <HAL_RCCEx_PeriphCLKConfig+0x7e>
  9571. /* Internal OSC clock is used as source of SPDIFRX clock*/
  9572. /* SPDIFRX clock source configuration done later after clock selection check */
  9573. break;
  9574. default:
  9575. ret = HAL_ERROR;
  9576. 8003e96: 2301 movs r3, #1
  9577. 8003e98: 75fb strb r3, [r7, #23]
  9578. break;
  9579. 8003e9a: e000 b.n 8003e9e <HAL_RCCEx_PeriphCLKConfig+0x7e>
  9580. break;
  9581. 8003e9c: bf00 nop
  9582. }
  9583. if(ret == HAL_OK)
  9584. 8003e9e: 7dfb ldrb r3, [r7, #23]
  9585. 8003ea0: 2b00 cmp r3, #0
  9586. 8003ea2: d109 bne.n 8003eb8 <HAL_RCCEx_PeriphCLKConfig+0x98>
  9587. {
  9588. /* Set the source of SPDIFRX clock*/
  9589. __HAL_RCC_SPDIFRX_CONFIG(PeriphClkInit->SpdifrxClockSelection);
  9590. 8003ea4: 4b9b ldr r3, [pc, #620] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9591. 8003ea6: 6d1b ldr r3, [r3, #80] ; 0x50
  9592. 8003ea8: f423 1240 bic.w r2, r3, #3145728 ; 0x300000
  9593. 8003eac: 687b ldr r3, [r7, #4]
  9594. 8003eae: 6e1b ldr r3, [r3, #96] ; 0x60
  9595. 8003eb0: 4998 ldr r1, [pc, #608] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9596. 8003eb2: 4313 orrs r3, r2
  9597. 8003eb4: 650b str r3, [r1, #80] ; 0x50
  9598. 8003eb6: e001 b.n 8003ebc <HAL_RCCEx_PeriphCLKConfig+0x9c>
  9599. }
  9600. else
  9601. {
  9602. /* set overall return value */
  9603. status = ret;
  9604. 8003eb8: 7dfb ldrb r3, [r7, #23]
  9605. 8003eba: 75bb strb r3, [r7, #22]
  9606. }
  9607. }
  9608. /*---------------------------- SAI1 configuration -------------------------------*/
  9609. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1)
  9610. 8003ebc: 687b ldr r3, [r7, #4]
  9611. 8003ebe: 681b ldr r3, [r3, #0]
  9612. 8003ec0: f403 7380 and.w r3, r3, #256 ; 0x100
  9613. 8003ec4: 2b00 cmp r3, #0
  9614. 8003ec6: d03d beq.n 8003f44 <HAL_RCCEx_PeriphCLKConfig+0x124>
  9615. {
  9616. switch(PeriphClkInit->Sai1ClockSelection)
  9617. 8003ec8: 687b ldr r3, [r7, #4]
  9618. 8003eca: 6d5b ldr r3, [r3, #84] ; 0x54
  9619. 8003ecc: 2b04 cmp r3, #4
  9620. 8003ece: d826 bhi.n 8003f1e <HAL_RCCEx_PeriphCLKConfig+0xfe>
  9621. 8003ed0: a201 add r2, pc, #4 ; (adr r2, 8003ed8 <HAL_RCCEx_PeriphCLKConfig+0xb8>)
  9622. 8003ed2: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  9623. 8003ed6: bf00 nop
  9624. 8003ed8: 08003eed .word 0x08003eed
  9625. 8003edc: 08003efb .word 0x08003efb
  9626. 8003ee0: 08003f0d .word 0x08003f0d
  9627. 8003ee4: 08003f25 .word 0x08003f25
  9628. 8003ee8: 08003f25 .word 0x08003f25
  9629. {
  9630. case RCC_SAI1CLKSOURCE_PLL: /* PLL is used as clock source for SAI1*/
  9631. /* Enable SAI Clock output generated form System PLL . */
  9632. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  9633. 8003eec: 4b89 ldr r3, [pc, #548] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9634. 8003eee: 6adb ldr r3, [r3, #44] ; 0x2c
  9635. 8003ef0: 4a88 ldr r2, [pc, #544] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9636. 8003ef2: f443 3300 orr.w r3, r3, #131072 ; 0x20000
  9637. 8003ef6: 62d3 str r3, [r2, #44] ; 0x2c
  9638. /* SAI1 clock source configuration done later after clock selection check */
  9639. break;
  9640. 8003ef8: e015 b.n 8003f26 <HAL_RCCEx_PeriphCLKConfig+0x106>
  9641. case RCC_SAI1CLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI1*/
  9642. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_P_UPDATE);
  9643. 8003efa: 687b ldr r3, [r7, #4]
  9644. 8003efc: 3304 adds r3, #4
  9645. 8003efe: 2100 movs r1, #0
  9646. 8003f00: 4618 mov r0, r3
  9647. 8003f02: f000 fe87 bl 8004c14 <RCCEx_PLL2_Config>
  9648. 8003f06: 4603 mov r3, r0
  9649. 8003f08: 75fb strb r3, [r7, #23]
  9650. /* SAI1 clock source configuration done later after clock selection check */
  9651. break;
  9652. 8003f0a: e00c b.n 8003f26 <HAL_RCCEx_PeriphCLKConfig+0x106>
  9653. case RCC_SAI1CLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI1*/
  9654. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_P_UPDATE);
  9655. 8003f0c: 687b ldr r3, [r7, #4]
  9656. 8003f0e: 3324 adds r3, #36 ; 0x24
  9657. 8003f10: 2100 movs r1, #0
  9658. 8003f12: 4618 mov r0, r3
  9659. 8003f14: f000 ff30 bl 8004d78 <RCCEx_PLL3_Config>
  9660. 8003f18: 4603 mov r3, r0
  9661. 8003f1a: 75fb strb r3, [r7, #23]
  9662. /* SAI1 clock source configuration done later after clock selection check */
  9663. break;
  9664. 8003f1c: e003 b.n 8003f26 <HAL_RCCEx_PeriphCLKConfig+0x106>
  9665. /* HSI, HSE, or CSI oscillator is used as source of SAI1 clock */
  9666. /* SAI1 clock source configuration done later after clock selection check */
  9667. break;
  9668. default:
  9669. ret = HAL_ERROR;
  9670. 8003f1e: 2301 movs r3, #1
  9671. 8003f20: 75fb strb r3, [r7, #23]
  9672. break;
  9673. 8003f22: e000 b.n 8003f26 <HAL_RCCEx_PeriphCLKConfig+0x106>
  9674. break;
  9675. 8003f24: bf00 nop
  9676. }
  9677. if(ret == HAL_OK)
  9678. 8003f26: 7dfb ldrb r3, [r7, #23]
  9679. 8003f28: 2b00 cmp r3, #0
  9680. 8003f2a: d109 bne.n 8003f40 <HAL_RCCEx_PeriphCLKConfig+0x120>
  9681. {
  9682. /* Set the source of SAI1 clock*/
  9683. __HAL_RCC_SAI1_CONFIG(PeriphClkInit->Sai1ClockSelection);
  9684. 8003f2c: 4b79 ldr r3, [pc, #484] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9685. 8003f2e: 6d1b ldr r3, [r3, #80] ; 0x50
  9686. 8003f30: f023 0207 bic.w r2, r3, #7
  9687. 8003f34: 687b ldr r3, [r7, #4]
  9688. 8003f36: 6d5b ldr r3, [r3, #84] ; 0x54
  9689. 8003f38: 4976 ldr r1, [pc, #472] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9690. 8003f3a: 4313 orrs r3, r2
  9691. 8003f3c: 650b str r3, [r1, #80] ; 0x50
  9692. 8003f3e: e001 b.n 8003f44 <HAL_RCCEx_PeriphCLKConfig+0x124>
  9693. }
  9694. else
  9695. {
  9696. /* set overall return value */
  9697. status = ret;
  9698. 8003f40: 7dfb ldrb r3, [r7, #23]
  9699. 8003f42: 75bb strb r3, [r7, #22]
  9700. }
  9701. #endif /*SAI2B*/
  9702. #if defined(SAI4)
  9703. /*---------------------------- SAI4A configuration -------------------------------*/
  9704. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI4A) == RCC_PERIPHCLK_SAI4A)
  9705. 8003f44: 687b ldr r3, [r7, #4]
  9706. 8003f46: 681b ldr r3, [r3, #0]
  9707. 8003f48: f403 6380 and.w r3, r3, #1024 ; 0x400
  9708. 8003f4c: 2b00 cmp r3, #0
  9709. 8003f4e: d051 beq.n 8003ff4 <HAL_RCCEx_PeriphCLKConfig+0x1d4>
  9710. {
  9711. switch(PeriphClkInit->Sai4AClockSelection)
  9712. 8003f50: 687b ldr r3, [r7, #4]
  9713. 8003f52: f8d3 30a0 ldr.w r3, [r3, #160] ; 0xa0
  9714. 8003f56: f5b3 0f20 cmp.w r3, #10485760 ; 0xa00000
  9715. 8003f5a: d036 beq.n 8003fca <HAL_RCCEx_PeriphCLKConfig+0x1aa>
  9716. 8003f5c: f5b3 0f20 cmp.w r3, #10485760 ; 0xa00000
  9717. 8003f60: d830 bhi.n 8003fc4 <HAL_RCCEx_PeriphCLKConfig+0x1a4>
  9718. 8003f62: f5b3 0f00 cmp.w r3, #8388608 ; 0x800000
  9719. 8003f66: d032 beq.n 8003fce <HAL_RCCEx_PeriphCLKConfig+0x1ae>
  9720. 8003f68: f5b3 0f00 cmp.w r3, #8388608 ; 0x800000
  9721. 8003f6c: d82a bhi.n 8003fc4 <HAL_RCCEx_PeriphCLKConfig+0x1a4>
  9722. 8003f6e: f5b3 0fc0 cmp.w r3, #6291456 ; 0x600000
  9723. 8003f72: d02e beq.n 8003fd2 <HAL_RCCEx_PeriphCLKConfig+0x1b2>
  9724. 8003f74: f5b3 0fc0 cmp.w r3, #6291456 ; 0x600000
  9725. 8003f78: d824 bhi.n 8003fc4 <HAL_RCCEx_PeriphCLKConfig+0x1a4>
  9726. 8003f7a: f5b3 0f80 cmp.w r3, #4194304 ; 0x400000
  9727. 8003f7e: d018 beq.n 8003fb2 <HAL_RCCEx_PeriphCLKConfig+0x192>
  9728. 8003f80: f5b3 0f80 cmp.w r3, #4194304 ; 0x400000
  9729. 8003f84: d81e bhi.n 8003fc4 <HAL_RCCEx_PeriphCLKConfig+0x1a4>
  9730. 8003f86: 2b00 cmp r3, #0
  9731. 8003f88: d003 beq.n 8003f92 <HAL_RCCEx_PeriphCLKConfig+0x172>
  9732. 8003f8a: f5b3 1f00 cmp.w r3, #2097152 ; 0x200000
  9733. 8003f8e: d007 beq.n 8003fa0 <HAL_RCCEx_PeriphCLKConfig+0x180>
  9734. 8003f90: e018 b.n 8003fc4 <HAL_RCCEx_PeriphCLKConfig+0x1a4>
  9735. {
  9736. case RCC_SAI4ACLKSOURCE_PLL: /* PLL is used as clock source for SAI2*/
  9737. /* Enable SAI Clock output generated form System PLL . */
  9738. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  9739. 8003f92: 4b60 ldr r3, [pc, #384] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9740. 8003f94: 6adb ldr r3, [r3, #44] ; 0x2c
  9741. 8003f96: 4a5f ldr r2, [pc, #380] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9742. 8003f98: f443 3300 orr.w r3, r3, #131072 ; 0x20000
  9743. 8003f9c: 62d3 str r3, [r2, #44] ; 0x2c
  9744. /* SAI1 clock source configuration done later after clock selection check */
  9745. break;
  9746. 8003f9e: e019 b.n 8003fd4 <HAL_RCCEx_PeriphCLKConfig+0x1b4>
  9747. case RCC_SAI4ACLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2*/
  9748. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_P_UPDATE);
  9749. 8003fa0: 687b ldr r3, [r7, #4]
  9750. 8003fa2: 3304 adds r3, #4
  9751. 8003fa4: 2100 movs r1, #0
  9752. 8003fa6: 4618 mov r0, r3
  9753. 8003fa8: f000 fe34 bl 8004c14 <RCCEx_PLL2_Config>
  9754. 8003fac: 4603 mov r3, r0
  9755. 8003fae: 75fb strb r3, [r7, #23]
  9756. /* SAI2 clock source configuration done later after clock selection check */
  9757. break;
  9758. 8003fb0: e010 b.n 8003fd4 <HAL_RCCEx_PeriphCLKConfig+0x1b4>
  9759. case RCC_SAI4ACLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2*/
  9760. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_P_UPDATE);
  9761. 8003fb2: 687b ldr r3, [r7, #4]
  9762. 8003fb4: 3324 adds r3, #36 ; 0x24
  9763. 8003fb6: 2100 movs r1, #0
  9764. 8003fb8: 4618 mov r0, r3
  9765. 8003fba: f000 fedd bl 8004d78 <RCCEx_PLL3_Config>
  9766. 8003fbe: 4603 mov r3, r0
  9767. 8003fc0: 75fb strb r3, [r7, #23]
  9768. /* SAI1 clock source configuration done later after clock selection check */
  9769. break;
  9770. 8003fc2: e007 b.n 8003fd4 <HAL_RCCEx_PeriphCLKConfig+0x1b4>
  9771. /* SAI4A clock source configuration done later after clock selection check */
  9772. break;
  9773. #endif /* RCC_VER_3_0 */
  9774. default:
  9775. ret = HAL_ERROR;
  9776. 8003fc4: 2301 movs r3, #1
  9777. 8003fc6: 75fb strb r3, [r7, #23]
  9778. break;
  9779. 8003fc8: e004 b.n 8003fd4 <HAL_RCCEx_PeriphCLKConfig+0x1b4>
  9780. break;
  9781. 8003fca: bf00 nop
  9782. 8003fcc: e002 b.n 8003fd4 <HAL_RCCEx_PeriphCLKConfig+0x1b4>
  9783. break;
  9784. 8003fce: bf00 nop
  9785. 8003fd0: e000 b.n 8003fd4 <HAL_RCCEx_PeriphCLKConfig+0x1b4>
  9786. break;
  9787. 8003fd2: bf00 nop
  9788. }
  9789. if(ret == HAL_OK)
  9790. 8003fd4: 7dfb ldrb r3, [r7, #23]
  9791. 8003fd6: 2b00 cmp r3, #0
  9792. 8003fd8: d10a bne.n 8003ff0 <HAL_RCCEx_PeriphCLKConfig+0x1d0>
  9793. {
  9794. /* Set the source of SAI4A clock*/
  9795. __HAL_RCC_SAI4A_CONFIG(PeriphClkInit->Sai4AClockSelection);
  9796. 8003fda: 4b4e ldr r3, [pc, #312] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9797. 8003fdc: 6d9b ldr r3, [r3, #88] ; 0x58
  9798. 8003fde: f423 0260 bic.w r2, r3, #14680064 ; 0xe00000
  9799. 8003fe2: 687b ldr r3, [r7, #4]
  9800. 8003fe4: f8d3 30a0 ldr.w r3, [r3, #160] ; 0xa0
  9801. 8003fe8: 494a ldr r1, [pc, #296] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9802. 8003fea: 4313 orrs r3, r2
  9803. 8003fec: 658b str r3, [r1, #88] ; 0x58
  9804. 8003fee: e001 b.n 8003ff4 <HAL_RCCEx_PeriphCLKConfig+0x1d4>
  9805. }
  9806. else
  9807. {
  9808. /* set overall return value */
  9809. status = ret;
  9810. 8003ff0: 7dfb ldrb r3, [r7, #23]
  9811. 8003ff2: 75bb strb r3, [r7, #22]
  9812. }
  9813. }
  9814. /*---------------------------- SAI4B configuration -------------------------------*/
  9815. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI4B) == RCC_PERIPHCLK_SAI4B)
  9816. 8003ff4: 687b ldr r3, [r7, #4]
  9817. 8003ff6: 681b ldr r3, [r3, #0]
  9818. 8003ff8: f403 6300 and.w r3, r3, #2048 ; 0x800
  9819. 8003ffc: 2b00 cmp r3, #0
  9820. 8003ffe: d051 beq.n 80040a4 <HAL_RCCEx_PeriphCLKConfig+0x284>
  9821. {
  9822. switch(PeriphClkInit->Sai4BClockSelection)
  9823. 8004000: 687b ldr r3, [r7, #4]
  9824. 8004002: f8d3 30a4 ldr.w r3, [r3, #164] ; 0xa4
  9825. 8004006: f1b3 6fa0 cmp.w r3, #83886080 ; 0x5000000
  9826. 800400a: d036 beq.n 800407a <HAL_RCCEx_PeriphCLKConfig+0x25a>
  9827. 800400c: f1b3 6fa0 cmp.w r3, #83886080 ; 0x5000000
  9828. 8004010: d830 bhi.n 8004074 <HAL_RCCEx_PeriphCLKConfig+0x254>
  9829. 8004012: f1b3 6f80 cmp.w r3, #67108864 ; 0x4000000
  9830. 8004016: d032 beq.n 800407e <HAL_RCCEx_PeriphCLKConfig+0x25e>
  9831. 8004018: f1b3 6f80 cmp.w r3, #67108864 ; 0x4000000
  9832. 800401c: d82a bhi.n 8004074 <HAL_RCCEx_PeriphCLKConfig+0x254>
  9833. 800401e: f1b3 7f40 cmp.w r3, #50331648 ; 0x3000000
  9834. 8004022: d02e beq.n 8004082 <HAL_RCCEx_PeriphCLKConfig+0x262>
  9835. 8004024: f1b3 7f40 cmp.w r3, #50331648 ; 0x3000000
  9836. 8004028: d824 bhi.n 8004074 <HAL_RCCEx_PeriphCLKConfig+0x254>
  9837. 800402a: f1b3 7f00 cmp.w r3, #33554432 ; 0x2000000
  9838. 800402e: d018 beq.n 8004062 <HAL_RCCEx_PeriphCLKConfig+0x242>
  9839. 8004030: f1b3 7f00 cmp.w r3, #33554432 ; 0x2000000
  9840. 8004034: d81e bhi.n 8004074 <HAL_RCCEx_PeriphCLKConfig+0x254>
  9841. 8004036: 2b00 cmp r3, #0
  9842. 8004038: d003 beq.n 8004042 <HAL_RCCEx_PeriphCLKConfig+0x222>
  9843. 800403a: f1b3 7f80 cmp.w r3, #16777216 ; 0x1000000
  9844. 800403e: d007 beq.n 8004050 <HAL_RCCEx_PeriphCLKConfig+0x230>
  9845. 8004040: e018 b.n 8004074 <HAL_RCCEx_PeriphCLKConfig+0x254>
  9846. {
  9847. case RCC_SAI4BCLKSOURCE_PLL: /* PLL is used as clock source for SAI2*/
  9848. /* Enable SAI Clock output generated form System PLL . */
  9849. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  9850. 8004042: 4b34 ldr r3, [pc, #208] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9851. 8004044: 6adb ldr r3, [r3, #44] ; 0x2c
  9852. 8004046: 4a33 ldr r2, [pc, #204] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9853. 8004048: f443 3300 orr.w r3, r3, #131072 ; 0x20000
  9854. 800404c: 62d3 str r3, [r2, #44] ; 0x2c
  9855. /* SAI1 clock source configuration done later after clock selection check */
  9856. break;
  9857. 800404e: e019 b.n 8004084 <HAL_RCCEx_PeriphCLKConfig+0x264>
  9858. case RCC_SAI4BCLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2*/
  9859. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_P_UPDATE);
  9860. 8004050: 687b ldr r3, [r7, #4]
  9861. 8004052: 3304 adds r3, #4
  9862. 8004054: 2100 movs r1, #0
  9863. 8004056: 4618 mov r0, r3
  9864. 8004058: f000 fddc bl 8004c14 <RCCEx_PLL2_Config>
  9865. 800405c: 4603 mov r3, r0
  9866. 800405e: 75fb strb r3, [r7, #23]
  9867. /* SAI2 clock source configuration done later after clock selection check */
  9868. break;
  9869. 8004060: e010 b.n 8004084 <HAL_RCCEx_PeriphCLKConfig+0x264>
  9870. case RCC_SAI4BCLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2*/
  9871. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  9872. 8004062: 687b ldr r3, [r7, #4]
  9873. 8004064: 3324 adds r3, #36 ; 0x24
  9874. 8004066: 2100 movs r1, #0
  9875. 8004068: 4618 mov r0, r3
  9876. 800406a: f000 fe85 bl 8004d78 <RCCEx_PLL3_Config>
  9877. 800406e: 4603 mov r3, r0
  9878. 8004070: 75fb strb r3, [r7, #23]
  9879. /* SAI1 clock source configuration done later after clock selection check */
  9880. break;
  9881. 8004072: e007 b.n 8004084 <HAL_RCCEx_PeriphCLKConfig+0x264>
  9882. /* SAI4B clock source configuration done later after clock selection check */
  9883. break;
  9884. #endif /* RCC_VER_3_0 */
  9885. default:
  9886. ret = HAL_ERROR;
  9887. 8004074: 2301 movs r3, #1
  9888. 8004076: 75fb strb r3, [r7, #23]
  9889. break;
  9890. 8004078: e004 b.n 8004084 <HAL_RCCEx_PeriphCLKConfig+0x264>
  9891. break;
  9892. 800407a: bf00 nop
  9893. 800407c: e002 b.n 8004084 <HAL_RCCEx_PeriphCLKConfig+0x264>
  9894. break;
  9895. 800407e: bf00 nop
  9896. 8004080: e000 b.n 8004084 <HAL_RCCEx_PeriphCLKConfig+0x264>
  9897. break;
  9898. 8004082: bf00 nop
  9899. }
  9900. if(ret == HAL_OK)
  9901. 8004084: 7dfb ldrb r3, [r7, #23]
  9902. 8004086: 2b00 cmp r3, #0
  9903. 8004088: d10a bne.n 80040a0 <HAL_RCCEx_PeriphCLKConfig+0x280>
  9904. {
  9905. /* Set the source of SAI4B clock*/
  9906. __HAL_RCC_SAI4B_CONFIG(PeriphClkInit->Sai4BClockSelection);
  9907. 800408a: 4b22 ldr r3, [pc, #136] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9908. 800408c: 6d9b ldr r3, [r3, #88] ; 0x58
  9909. 800408e: f023 62e0 bic.w r2, r3, #117440512 ; 0x7000000
  9910. 8004092: 687b ldr r3, [r7, #4]
  9911. 8004094: f8d3 30a4 ldr.w r3, [r3, #164] ; 0xa4
  9912. 8004098: 491e ldr r1, [pc, #120] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9913. 800409a: 4313 orrs r3, r2
  9914. 800409c: 658b str r3, [r1, #88] ; 0x58
  9915. 800409e: e001 b.n 80040a4 <HAL_RCCEx_PeriphCLKConfig+0x284>
  9916. }
  9917. else
  9918. {
  9919. /* set overall return value */
  9920. status = ret;
  9921. 80040a0: 7dfb ldrb r3, [r7, #23]
  9922. 80040a2: 75bb strb r3, [r7, #22]
  9923. }
  9924. #endif /*QUADSPI*/
  9925. #if defined(OCTOSPI1) || defined(OCTOSPI2)
  9926. /*---------------------------- OCTOSPI configuration -------------------------------*/
  9927. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_OSPI) == RCC_PERIPHCLK_OSPI)
  9928. 80040a4: 687b ldr r3, [r7, #4]
  9929. 80040a6: 681b ldr r3, [r3, #0]
  9930. 80040a8: f003 7300 and.w r3, r3, #33554432 ; 0x2000000
  9931. 80040ac: 2b00 cmp r3, #0
  9932. 80040ae: d035 beq.n 800411c <HAL_RCCEx_PeriphCLKConfig+0x2fc>
  9933. {
  9934. switch(PeriphClkInit->OspiClockSelection)
  9935. 80040b0: 687b ldr r3, [r7, #4]
  9936. 80040b2: 6c9b ldr r3, [r3, #72] ; 0x48
  9937. 80040b4: 2b30 cmp r3, #48 ; 0x30
  9938. 80040b6: d01c beq.n 80040f2 <HAL_RCCEx_PeriphCLKConfig+0x2d2>
  9939. 80040b8: 2b30 cmp r3, #48 ; 0x30
  9940. 80040ba: d817 bhi.n 80040ec <HAL_RCCEx_PeriphCLKConfig+0x2cc>
  9941. 80040bc: 2b20 cmp r3, #32
  9942. 80040be: d00c beq.n 80040da <HAL_RCCEx_PeriphCLKConfig+0x2ba>
  9943. 80040c0: 2b20 cmp r3, #32
  9944. 80040c2: d813 bhi.n 80040ec <HAL_RCCEx_PeriphCLKConfig+0x2cc>
  9945. 80040c4: 2b00 cmp r3, #0
  9946. 80040c6: d016 beq.n 80040f6 <HAL_RCCEx_PeriphCLKConfig+0x2d6>
  9947. 80040c8: 2b10 cmp r3, #16
  9948. 80040ca: d10f bne.n 80040ec <HAL_RCCEx_PeriphCLKConfig+0x2cc>
  9949. {
  9950. case RCC_OSPICLKSOURCE_PLL: /* PLL is used as clock source for OSPI*/
  9951. /* Enable OSPI Clock output generated form System PLL . */
  9952. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  9953. 80040cc: 4b11 ldr r3, [pc, #68] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9954. 80040ce: 6adb ldr r3, [r3, #44] ; 0x2c
  9955. 80040d0: 4a10 ldr r2, [pc, #64] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9956. 80040d2: f443 3300 orr.w r3, r3, #131072 ; 0x20000
  9957. 80040d6: 62d3 str r3, [r2, #44] ; 0x2c
  9958. /* OSPI clock source configuration done later after clock selection check */
  9959. break;
  9960. 80040d8: e00e b.n 80040f8 <HAL_RCCEx_PeriphCLKConfig+0x2d8>
  9961. case RCC_OSPICLKSOURCE_PLL2: /* PLL2 is used as clock source for OSPI*/
  9962. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_R_UPDATE);
  9963. 80040da: 687b ldr r3, [r7, #4]
  9964. 80040dc: 3304 adds r3, #4
  9965. 80040de: 2102 movs r1, #2
  9966. 80040e0: 4618 mov r0, r3
  9967. 80040e2: f000 fd97 bl 8004c14 <RCCEx_PLL2_Config>
  9968. 80040e6: 4603 mov r3, r0
  9969. 80040e8: 75fb strb r3, [r7, #23]
  9970. /* OSPI clock source configuration done later after clock selection check */
  9971. break;
  9972. 80040ea: e005 b.n 80040f8 <HAL_RCCEx_PeriphCLKConfig+0x2d8>
  9973. case RCC_OSPICLKSOURCE_HCLK:
  9974. /* HCLK clock selected as OSPI kernel peripheral clock */
  9975. break;
  9976. default:
  9977. ret = HAL_ERROR;
  9978. 80040ec: 2301 movs r3, #1
  9979. 80040ee: 75fb strb r3, [r7, #23]
  9980. break;
  9981. 80040f0: e002 b.n 80040f8 <HAL_RCCEx_PeriphCLKConfig+0x2d8>
  9982. break;
  9983. 80040f2: bf00 nop
  9984. 80040f4: e000 b.n 80040f8 <HAL_RCCEx_PeriphCLKConfig+0x2d8>
  9985. break;
  9986. 80040f6: bf00 nop
  9987. }
  9988. if(ret == HAL_OK)
  9989. 80040f8: 7dfb ldrb r3, [r7, #23]
  9990. 80040fa: 2b00 cmp r3, #0
  9991. 80040fc: d10c bne.n 8004118 <HAL_RCCEx_PeriphCLKConfig+0x2f8>
  9992. {
  9993. /* Set the source of OSPI clock*/
  9994. __HAL_RCC_OSPI_CONFIG(PeriphClkInit->OspiClockSelection);
  9995. 80040fe: 4b05 ldr r3, [pc, #20] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  9996. 8004100: 6cdb ldr r3, [r3, #76] ; 0x4c
  9997. 8004102: f023 0230 bic.w r2, r3, #48 ; 0x30
  9998. 8004106: 687b ldr r3, [r7, #4]
  9999. 8004108: 6c9b ldr r3, [r3, #72] ; 0x48
  10000. 800410a: 4902 ldr r1, [pc, #8] ; (8004114 <HAL_RCCEx_PeriphCLKConfig+0x2f4>)
  10001. 800410c: 4313 orrs r3, r2
  10002. 800410e: 64cb str r3, [r1, #76] ; 0x4c
  10003. 8004110: e004 b.n 800411c <HAL_RCCEx_PeriphCLKConfig+0x2fc>
  10004. 8004112: bf00 nop
  10005. 8004114: 58024400 .word 0x58024400
  10006. }
  10007. else
  10008. {
  10009. /* set overall return value */
  10010. status = ret;
  10011. 8004118: 7dfb ldrb r3, [r7, #23]
  10012. 800411a: 75bb strb r3, [r7, #22]
  10013. }
  10014. }
  10015. #endif /*OCTOSPI*/
  10016. /*---------------------------- SPI1/2/3 configuration -------------------------------*/
  10017. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI123) == RCC_PERIPHCLK_SPI123)
  10018. 800411c: 687b ldr r3, [r7, #4]
  10019. 800411e: 681b ldr r3, [r3, #0]
  10020. 8004120: f403 5380 and.w r3, r3, #4096 ; 0x1000
  10021. 8004124: 2b00 cmp r3, #0
  10022. 8004126: d047 beq.n 80041b8 <HAL_RCCEx_PeriphCLKConfig+0x398>
  10023. {
  10024. switch(PeriphClkInit->Spi123ClockSelection)
  10025. 8004128: 687b ldr r3, [r7, #4]
  10026. 800412a: 6d9b ldr r3, [r3, #88] ; 0x58
  10027. 800412c: f5b3 4f80 cmp.w r3, #16384 ; 0x4000
  10028. 8004130: d030 beq.n 8004194 <HAL_RCCEx_PeriphCLKConfig+0x374>
  10029. 8004132: f5b3 4f80 cmp.w r3, #16384 ; 0x4000
  10030. 8004136: d82a bhi.n 800418e <HAL_RCCEx_PeriphCLKConfig+0x36e>
  10031. 8004138: f5b3 5f40 cmp.w r3, #12288 ; 0x3000
  10032. 800413c: d02c beq.n 8004198 <HAL_RCCEx_PeriphCLKConfig+0x378>
  10033. 800413e: f5b3 5f40 cmp.w r3, #12288 ; 0x3000
  10034. 8004142: d824 bhi.n 800418e <HAL_RCCEx_PeriphCLKConfig+0x36e>
  10035. 8004144: f5b3 5f00 cmp.w r3, #8192 ; 0x2000
  10036. 8004148: d018 beq.n 800417c <HAL_RCCEx_PeriphCLKConfig+0x35c>
  10037. 800414a: f5b3 5f00 cmp.w r3, #8192 ; 0x2000
  10038. 800414e: d81e bhi.n 800418e <HAL_RCCEx_PeriphCLKConfig+0x36e>
  10039. 8004150: 2b00 cmp r3, #0
  10040. 8004152: d003 beq.n 800415c <HAL_RCCEx_PeriphCLKConfig+0x33c>
  10041. 8004154: f5b3 5f80 cmp.w r3, #4096 ; 0x1000
  10042. 8004158: d007 beq.n 800416a <HAL_RCCEx_PeriphCLKConfig+0x34a>
  10043. 800415a: e018 b.n 800418e <HAL_RCCEx_PeriphCLKConfig+0x36e>
  10044. {
  10045. case RCC_SPI123CLKSOURCE_PLL: /* PLL is used as clock source for SPI1/2/3 */
  10046. /* Enable SPI Clock output generated form System PLL . */
  10047. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  10048. 800415c: 4bac ldr r3, [pc, #688] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10049. 800415e: 6adb ldr r3, [r3, #44] ; 0x2c
  10050. 8004160: 4aab ldr r2, [pc, #684] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10051. 8004162: f443 3300 orr.w r3, r3, #131072 ; 0x20000
  10052. 8004166: 62d3 str r3, [r2, #44] ; 0x2c
  10053. /* SPI1/2/3 clock source configuration done later after clock selection check */
  10054. break;
  10055. 8004168: e017 b.n 800419a <HAL_RCCEx_PeriphCLKConfig+0x37a>
  10056. case RCC_SPI123CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI1/2/3 */
  10057. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_P_UPDATE);
  10058. 800416a: 687b ldr r3, [r7, #4]
  10059. 800416c: 3304 adds r3, #4
  10060. 800416e: 2100 movs r1, #0
  10061. 8004170: 4618 mov r0, r3
  10062. 8004172: f000 fd4f bl 8004c14 <RCCEx_PLL2_Config>
  10063. 8004176: 4603 mov r3, r0
  10064. 8004178: 75fb strb r3, [r7, #23]
  10065. /* SPI1/2/3 clock source configuration done later after clock selection check */
  10066. break;
  10067. 800417a: e00e b.n 800419a <HAL_RCCEx_PeriphCLKConfig+0x37a>
  10068. case RCC_SPI123CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI1/2/3 */
  10069. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_P_UPDATE);
  10070. 800417c: 687b ldr r3, [r7, #4]
  10071. 800417e: 3324 adds r3, #36 ; 0x24
  10072. 8004180: 2100 movs r1, #0
  10073. 8004182: 4618 mov r0, r3
  10074. 8004184: f000 fdf8 bl 8004d78 <RCCEx_PLL3_Config>
  10075. 8004188: 4603 mov r3, r0
  10076. 800418a: 75fb strb r3, [r7, #23]
  10077. /* SPI1/2/3 clock source configuration done later after clock selection check */
  10078. break;
  10079. 800418c: e005 b.n 800419a <HAL_RCCEx_PeriphCLKConfig+0x37a>
  10080. /* HSI, HSE, or CSI oscillator is used as source of SPI1/2/3 clock */
  10081. /* SPI1/2/3 clock source configuration done later after clock selection check */
  10082. break;
  10083. default:
  10084. ret = HAL_ERROR;
  10085. 800418e: 2301 movs r3, #1
  10086. 8004190: 75fb strb r3, [r7, #23]
  10087. break;
  10088. 8004192: e002 b.n 800419a <HAL_RCCEx_PeriphCLKConfig+0x37a>
  10089. break;
  10090. 8004194: bf00 nop
  10091. 8004196: e000 b.n 800419a <HAL_RCCEx_PeriphCLKConfig+0x37a>
  10092. break;
  10093. 8004198: bf00 nop
  10094. }
  10095. if(ret == HAL_OK)
  10096. 800419a: 7dfb ldrb r3, [r7, #23]
  10097. 800419c: 2b00 cmp r3, #0
  10098. 800419e: d109 bne.n 80041b4 <HAL_RCCEx_PeriphCLKConfig+0x394>
  10099. {
  10100. /* Set the source of SPI1/2/3 clock*/
  10101. __HAL_RCC_SPI123_CONFIG(PeriphClkInit->Spi123ClockSelection);
  10102. 80041a0: 4b9b ldr r3, [pc, #620] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10103. 80041a2: 6d1b ldr r3, [r3, #80] ; 0x50
  10104. 80041a4: f423 42e0 bic.w r2, r3, #28672 ; 0x7000
  10105. 80041a8: 687b ldr r3, [r7, #4]
  10106. 80041aa: 6d9b ldr r3, [r3, #88] ; 0x58
  10107. 80041ac: 4998 ldr r1, [pc, #608] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10108. 80041ae: 4313 orrs r3, r2
  10109. 80041b0: 650b str r3, [r1, #80] ; 0x50
  10110. 80041b2: e001 b.n 80041b8 <HAL_RCCEx_PeriphCLKConfig+0x398>
  10111. }
  10112. else
  10113. {
  10114. /* set overall return value */
  10115. status = ret;
  10116. 80041b4: 7dfb ldrb r3, [r7, #23]
  10117. 80041b6: 75bb strb r3, [r7, #22]
  10118. }
  10119. }
  10120. /*---------------------------- SPI4/5 configuration -------------------------------*/
  10121. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI45) == RCC_PERIPHCLK_SPI45)
  10122. 80041b8: 687b ldr r3, [r7, #4]
  10123. 80041ba: 681b ldr r3, [r3, #0]
  10124. 80041bc: f403 5300 and.w r3, r3, #8192 ; 0x2000
  10125. 80041c0: 2b00 cmp r3, #0
  10126. 80041c2: d049 beq.n 8004258 <HAL_RCCEx_PeriphCLKConfig+0x438>
  10127. {
  10128. switch(PeriphClkInit->Spi45ClockSelection)
  10129. 80041c4: 687b ldr r3, [r7, #4]
  10130. 80041c6: 6ddb ldr r3, [r3, #92] ; 0x5c
  10131. 80041c8: f5b3 2fa0 cmp.w r3, #327680 ; 0x50000
  10132. 80041cc: d02e beq.n 800422c <HAL_RCCEx_PeriphCLKConfig+0x40c>
  10133. 80041ce: f5b3 2fa0 cmp.w r3, #327680 ; 0x50000
  10134. 80041d2: d828 bhi.n 8004226 <HAL_RCCEx_PeriphCLKConfig+0x406>
  10135. 80041d4: f5b3 2f80 cmp.w r3, #262144 ; 0x40000
  10136. 80041d8: d02a beq.n 8004230 <HAL_RCCEx_PeriphCLKConfig+0x410>
  10137. 80041da: f5b3 2f80 cmp.w r3, #262144 ; 0x40000
  10138. 80041de: d822 bhi.n 8004226 <HAL_RCCEx_PeriphCLKConfig+0x406>
  10139. 80041e0: f5b3 3f40 cmp.w r3, #196608 ; 0x30000
  10140. 80041e4: d026 beq.n 8004234 <HAL_RCCEx_PeriphCLKConfig+0x414>
  10141. 80041e6: f5b3 3f40 cmp.w r3, #196608 ; 0x30000
  10142. 80041ea: d81c bhi.n 8004226 <HAL_RCCEx_PeriphCLKConfig+0x406>
  10143. 80041ec: f5b3 3f00 cmp.w r3, #131072 ; 0x20000
  10144. 80041f0: d010 beq.n 8004214 <HAL_RCCEx_PeriphCLKConfig+0x3f4>
  10145. 80041f2: f5b3 3f00 cmp.w r3, #131072 ; 0x20000
  10146. 80041f6: d816 bhi.n 8004226 <HAL_RCCEx_PeriphCLKConfig+0x406>
  10147. 80041f8: 2b00 cmp r3, #0
  10148. 80041fa: d01d beq.n 8004238 <HAL_RCCEx_PeriphCLKConfig+0x418>
  10149. 80041fc: f5b3 3f80 cmp.w r3, #65536 ; 0x10000
  10150. 8004200: d111 bne.n 8004226 <HAL_RCCEx_PeriphCLKConfig+0x406>
  10151. /* SPI4/5 clock source configuration done later after clock selection check */
  10152. break;
  10153. case RCC_SPI45CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI4/5 */
  10154. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_Q_UPDATE);
  10155. 8004202: 687b ldr r3, [r7, #4]
  10156. 8004204: 3304 adds r3, #4
  10157. 8004206: 2101 movs r1, #1
  10158. 8004208: 4618 mov r0, r3
  10159. 800420a: f000 fd03 bl 8004c14 <RCCEx_PLL2_Config>
  10160. 800420e: 4603 mov r3, r0
  10161. 8004210: 75fb strb r3, [r7, #23]
  10162. /* SPI4/5 clock source configuration done later after clock selection check */
  10163. break;
  10164. 8004212: e012 b.n 800423a <HAL_RCCEx_PeriphCLKConfig+0x41a>
  10165. case RCC_SPI45CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI4/5 */
  10166. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_Q_UPDATE);
  10167. 8004214: 687b ldr r3, [r7, #4]
  10168. 8004216: 3324 adds r3, #36 ; 0x24
  10169. 8004218: 2101 movs r1, #1
  10170. 800421a: 4618 mov r0, r3
  10171. 800421c: f000 fdac bl 8004d78 <RCCEx_PLL3_Config>
  10172. 8004220: 4603 mov r3, r0
  10173. 8004222: 75fb strb r3, [r7, #23]
  10174. /* SPI4/5 clock source configuration done later after clock selection check */
  10175. break;
  10176. 8004224: e009 b.n 800423a <HAL_RCCEx_PeriphCLKConfig+0x41a>
  10177. /* HSE, oscillator is used as source of SPI4/5 clock */
  10178. /* SPI4/5 clock source configuration done later after clock selection check */
  10179. break;
  10180. default:
  10181. ret = HAL_ERROR;
  10182. 8004226: 2301 movs r3, #1
  10183. 8004228: 75fb strb r3, [r7, #23]
  10184. break;
  10185. 800422a: e006 b.n 800423a <HAL_RCCEx_PeriphCLKConfig+0x41a>
  10186. break;
  10187. 800422c: bf00 nop
  10188. 800422e: e004 b.n 800423a <HAL_RCCEx_PeriphCLKConfig+0x41a>
  10189. break;
  10190. 8004230: bf00 nop
  10191. 8004232: e002 b.n 800423a <HAL_RCCEx_PeriphCLKConfig+0x41a>
  10192. break;
  10193. 8004234: bf00 nop
  10194. 8004236: e000 b.n 800423a <HAL_RCCEx_PeriphCLKConfig+0x41a>
  10195. break;
  10196. 8004238: bf00 nop
  10197. }
  10198. if(ret == HAL_OK)
  10199. 800423a: 7dfb ldrb r3, [r7, #23]
  10200. 800423c: 2b00 cmp r3, #0
  10201. 800423e: d109 bne.n 8004254 <HAL_RCCEx_PeriphCLKConfig+0x434>
  10202. {
  10203. /* Set the source of SPI4/5 clock*/
  10204. __HAL_RCC_SPI45_CONFIG(PeriphClkInit->Spi45ClockSelection);
  10205. 8004240: 4b73 ldr r3, [pc, #460] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10206. 8004242: 6d1b ldr r3, [r3, #80] ; 0x50
  10207. 8004244: f423 22e0 bic.w r2, r3, #458752 ; 0x70000
  10208. 8004248: 687b ldr r3, [r7, #4]
  10209. 800424a: 6ddb ldr r3, [r3, #92] ; 0x5c
  10210. 800424c: 4970 ldr r1, [pc, #448] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10211. 800424e: 4313 orrs r3, r2
  10212. 8004250: 650b str r3, [r1, #80] ; 0x50
  10213. 8004252: e001 b.n 8004258 <HAL_RCCEx_PeriphCLKConfig+0x438>
  10214. }
  10215. else
  10216. {
  10217. /* set overall return value */
  10218. status = ret;
  10219. 8004254: 7dfb ldrb r3, [r7, #23]
  10220. 8004256: 75bb strb r3, [r7, #22]
  10221. }
  10222. }
  10223. /*---------------------------- SPI6 configuration -------------------------------*/
  10224. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI6) == RCC_PERIPHCLK_SPI6)
  10225. 8004258: 687b ldr r3, [r7, #4]
  10226. 800425a: 681b ldr r3, [r3, #0]
  10227. 800425c: f403 4380 and.w r3, r3, #16384 ; 0x4000
  10228. 8004260: 2b00 cmp r3, #0
  10229. 8004262: d04b beq.n 80042fc <HAL_RCCEx_PeriphCLKConfig+0x4dc>
  10230. {
  10231. switch(PeriphClkInit->Spi6ClockSelection)
  10232. 8004264: 687b ldr r3, [r7, #4]
  10233. 8004266: f8d3 30a8 ldr.w r3, [r3, #168] ; 0xa8
  10234. 800426a: f1b3 4fa0 cmp.w r3, #1342177280 ; 0x50000000
  10235. 800426e: d02e beq.n 80042ce <HAL_RCCEx_PeriphCLKConfig+0x4ae>
  10236. 8004270: f1b3 4fa0 cmp.w r3, #1342177280 ; 0x50000000
  10237. 8004274: d828 bhi.n 80042c8 <HAL_RCCEx_PeriphCLKConfig+0x4a8>
  10238. 8004276: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
  10239. 800427a: d02a beq.n 80042d2 <HAL_RCCEx_PeriphCLKConfig+0x4b2>
  10240. 800427c: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
  10241. 8004280: d822 bhi.n 80042c8 <HAL_RCCEx_PeriphCLKConfig+0x4a8>
  10242. 8004282: f1b3 5f40 cmp.w r3, #805306368 ; 0x30000000
  10243. 8004286: d026 beq.n 80042d6 <HAL_RCCEx_PeriphCLKConfig+0x4b6>
  10244. 8004288: f1b3 5f40 cmp.w r3, #805306368 ; 0x30000000
  10245. 800428c: d81c bhi.n 80042c8 <HAL_RCCEx_PeriphCLKConfig+0x4a8>
  10246. 800428e: f1b3 5f00 cmp.w r3, #536870912 ; 0x20000000
  10247. 8004292: d010 beq.n 80042b6 <HAL_RCCEx_PeriphCLKConfig+0x496>
  10248. 8004294: f1b3 5f00 cmp.w r3, #536870912 ; 0x20000000
  10249. 8004298: d816 bhi.n 80042c8 <HAL_RCCEx_PeriphCLKConfig+0x4a8>
  10250. 800429a: 2b00 cmp r3, #0
  10251. 800429c: d01d beq.n 80042da <HAL_RCCEx_PeriphCLKConfig+0x4ba>
  10252. 800429e: f1b3 5f80 cmp.w r3, #268435456 ; 0x10000000
  10253. 80042a2: d111 bne.n 80042c8 <HAL_RCCEx_PeriphCLKConfig+0x4a8>
  10254. /* SPI6 clock source configuration done later after clock selection check */
  10255. break;
  10256. case RCC_SPI6CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI6*/
  10257. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_Q_UPDATE);
  10258. 80042a4: 687b ldr r3, [r7, #4]
  10259. 80042a6: 3304 adds r3, #4
  10260. 80042a8: 2101 movs r1, #1
  10261. 80042aa: 4618 mov r0, r3
  10262. 80042ac: f000 fcb2 bl 8004c14 <RCCEx_PLL2_Config>
  10263. 80042b0: 4603 mov r3, r0
  10264. 80042b2: 75fb strb r3, [r7, #23]
  10265. /* SPI6 clock source configuration done later after clock selection check */
  10266. break;
  10267. 80042b4: e012 b.n 80042dc <HAL_RCCEx_PeriphCLKConfig+0x4bc>
  10268. case RCC_SPI6CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI6*/
  10269. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_Q_UPDATE);
  10270. 80042b6: 687b ldr r3, [r7, #4]
  10271. 80042b8: 3324 adds r3, #36 ; 0x24
  10272. 80042ba: 2101 movs r1, #1
  10273. 80042bc: 4618 mov r0, r3
  10274. 80042be: f000 fd5b bl 8004d78 <RCCEx_PLL3_Config>
  10275. 80042c2: 4603 mov r3, r0
  10276. 80042c4: 75fb strb r3, [r7, #23]
  10277. /* SPI6 clock source configuration done later after clock selection check */
  10278. break;
  10279. 80042c6: e009 b.n 80042dc <HAL_RCCEx_PeriphCLKConfig+0x4bc>
  10280. /* SPI6 clock source configuration done later after clock selection check */
  10281. break;
  10282. #endif
  10283. default:
  10284. ret = HAL_ERROR;
  10285. 80042c8: 2301 movs r3, #1
  10286. 80042ca: 75fb strb r3, [r7, #23]
  10287. break;
  10288. 80042cc: e006 b.n 80042dc <HAL_RCCEx_PeriphCLKConfig+0x4bc>
  10289. break;
  10290. 80042ce: bf00 nop
  10291. 80042d0: e004 b.n 80042dc <HAL_RCCEx_PeriphCLKConfig+0x4bc>
  10292. break;
  10293. 80042d2: bf00 nop
  10294. 80042d4: e002 b.n 80042dc <HAL_RCCEx_PeriphCLKConfig+0x4bc>
  10295. break;
  10296. 80042d6: bf00 nop
  10297. 80042d8: e000 b.n 80042dc <HAL_RCCEx_PeriphCLKConfig+0x4bc>
  10298. break;
  10299. 80042da: bf00 nop
  10300. }
  10301. if(ret == HAL_OK)
  10302. 80042dc: 7dfb ldrb r3, [r7, #23]
  10303. 80042de: 2b00 cmp r3, #0
  10304. 80042e0: d10a bne.n 80042f8 <HAL_RCCEx_PeriphCLKConfig+0x4d8>
  10305. {
  10306. /* Set the source of SPI6 clock*/
  10307. __HAL_RCC_SPI6_CONFIG(PeriphClkInit->Spi6ClockSelection);
  10308. 80042e2: 4b4b ldr r3, [pc, #300] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10309. 80042e4: 6d9b ldr r3, [r3, #88] ; 0x58
  10310. 80042e6: f023 42e0 bic.w r2, r3, #1879048192 ; 0x70000000
  10311. 80042ea: 687b ldr r3, [r7, #4]
  10312. 80042ec: f8d3 30a8 ldr.w r3, [r3, #168] ; 0xa8
  10313. 80042f0: 4947 ldr r1, [pc, #284] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10314. 80042f2: 4313 orrs r3, r2
  10315. 80042f4: 658b str r3, [r1, #88] ; 0x58
  10316. 80042f6: e001 b.n 80042fc <HAL_RCCEx_PeriphCLKConfig+0x4dc>
  10317. }
  10318. else
  10319. {
  10320. /* set overall return value */
  10321. status = ret;
  10322. 80042f8: 7dfb ldrb r3, [r7, #23]
  10323. 80042fa: 75bb strb r3, [r7, #22]
  10324. }
  10325. #endif /*DSI*/
  10326. #if defined(FDCAN1) || defined(FDCAN2)
  10327. /*---------------------------- FDCAN configuration -------------------------------*/
  10328. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FDCAN) == RCC_PERIPHCLK_FDCAN)
  10329. 80042fc: 687b ldr r3, [r7, #4]
  10330. 80042fe: 681b ldr r3, [r3, #0]
  10331. 8004300: f403 4300 and.w r3, r3, #32768 ; 0x8000
  10332. 8004304: 2b00 cmp r3, #0
  10333. 8004306: d02f beq.n 8004368 <HAL_RCCEx_PeriphCLKConfig+0x548>
  10334. {
  10335. switch(PeriphClkInit->FdcanClockSelection)
  10336. 8004308: 687b ldr r3, [r7, #4]
  10337. 800430a: 6e9b ldr r3, [r3, #104] ; 0x68
  10338. 800430c: f1b3 5f00 cmp.w r3, #536870912 ; 0x20000000
  10339. 8004310: d00e beq.n 8004330 <HAL_RCCEx_PeriphCLKConfig+0x510>
  10340. 8004312: f1b3 5f00 cmp.w r3, #536870912 ; 0x20000000
  10341. 8004316: d814 bhi.n 8004342 <HAL_RCCEx_PeriphCLKConfig+0x522>
  10342. 8004318: 2b00 cmp r3, #0
  10343. 800431a: d015 beq.n 8004348 <HAL_RCCEx_PeriphCLKConfig+0x528>
  10344. 800431c: f1b3 5f80 cmp.w r3, #268435456 ; 0x10000000
  10345. 8004320: d10f bne.n 8004342 <HAL_RCCEx_PeriphCLKConfig+0x522>
  10346. {
  10347. case RCC_FDCANCLKSOURCE_PLL: /* PLL is used as clock source for FDCAN*/
  10348. /* Enable FDCAN Clock output generated form System PLL . */
  10349. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  10350. 8004322: 4b3b ldr r3, [pc, #236] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10351. 8004324: 6adb ldr r3, [r3, #44] ; 0x2c
  10352. 8004326: 4a3a ldr r2, [pc, #232] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10353. 8004328: f443 3300 orr.w r3, r3, #131072 ; 0x20000
  10354. 800432c: 62d3 str r3, [r2, #44] ; 0x2c
  10355. /* FDCAN clock source configuration done later after clock selection check */
  10356. break;
  10357. 800432e: e00c b.n 800434a <HAL_RCCEx_PeriphCLKConfig+0x52a>
  10358. case RCC_FDCANCLKSOURCE_PLL2: /* PLL2 is used as clock source for FDCAN*/
  10359. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_Q_UPDATE);
  10360. 8004330: 687b ldr r3, [r7, #4]
  10361. 8004332: 3304 adds r3, #4
  10362. 8004334: 2101 movs r1, #1
  10363. 8004336: 4618 mov r0, r3
  10364. 8004338: f000 fc6c bl 8004c14 <RCCEx_PLL2_Config>
  10365. 800433c: 4603 mov r3, r0
  10366. 800433e: 75fb strb r3, [r7, #23]
  10367. /* FDCAN clock source configuration done later after clock selection check */
  10368. break;
  10369. 8004340: e003 b.n 800434a <HAL_RCCEx_PeriphCLKConfig+0x52a>
  10370. /* HSE is used as clock source for FDCAN*/
  10371. /* FDCAN clock source configuration done later after clock selection check */
  10372. break;
  10373. default:
  10374. ret = HAL_ERROR;
  10375. 8004342: 2301 movs r3, #1
  10376. 8004344: 75fb strb r3, [r7, #23]
  10377. break;
  10378. 8004346: e000 b.n 800434a <HAL_RCCEx_PeriphCLKConfig+0x52a>
  10379. break;
  10380. 8004348: bf00 nop
  10381. }
  10382. if(ret == HAL_OK)
  10383. 800434a: 7dfb ldrb r3, [r7, #23]
  10384. 800434c: 2b00 cmp r3, #0
  10385. 800434e: d109 bne.n 8004364 <HAL_RCCEx_PeriphCLKConfig+0x544>
  10386. {
  10387. /* Set the source of FDCAN clock*/
  10388. __HAL_RCC_FDCAN_CONFIG(PeriphClkInit->FdcanClockSelection);
  10389. 8004350: 4b2f ldr r3, [pc, #188] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10390. 8004352: 6d1b ldr r3, [r3, #80] ; 0x50
  10391. 8004354: f023 5240 bic.w r2, r3, #805306368 ; 0x30000000
  10392. 8004358: 687b ldr r3, [r7, #4]
  10393. 800435a: 6e9b ldr r3, [r3, #104] ; 0x68
  10394. 800435c: 492c ldr r1, [pc, #176] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10395. 800435e: 4313 orrs r3, r2
  10396. 8004360: 650b str r3, [r1, #80] ; 0x50
  10397. 8004362: e001 b.n 8004368 <HAL_RCCEx_PeriphCLKConfig+0x548>
  10398. }
  10399. else
  10400. {
  10401. /* set overall return value */
  10402. status = ret;
  10403. 8004364: 7dfb ldrb r3, [r7, #23]
  10404. 8004366: 75bb strb r3, [r7, #22]
  10405. }
  10406. }
  10407. #endif /*FDCAN1 || FDCAN2*/
  10408. /*---------------------------- FMC configuration -------------------------------*/
  10409. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FMC) == RCC_PERIPHCLK_FMC)
  10410. 8004368: 687b ldr r3, [r7, #4]
  10411. 800436a: 681b ldr r3, [r3, #0]
  10412. 800436c: f003 7380 and.w r3, r3, #16777216 ; 0x1000000
  10413. 8004370: 2b00 cmp r3, #0
  10414. 8004372: d032 beq.n 80043da <HAL_RCCEx_PeriphCLKConfig+0x5ba>
  10415. {
  10416. switch(PeriphClkInit->FmcClockSelection)
  10417. 8004374: 687b ldr r3, [r7, #4]
  10418. 8004376: 6c5b ldr r3, [r3, #68] ; 0x44
  10419. 8004378: 2b03 cmp r3, #3
  10420. 800437a: d81b bhi.n 80043b4 <HAL_RCCEx_PeriphCLKConfig+0x594>
  10421. 800437c: a201 add r2, pc, #4 ; (adr r2, 8004384 <HAL_RCCEx_PeriphCLKConfig+0x564>)
  10422. 800437e: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  10423. 8004382: bf00 nop
  10424. 8004384: 080043bb .word 0x080043bb
  10425. 8004388: 08004395 .word 0x08004395
  10426. 800438c: 080043a3 .word 0x080043a3
  10427. 8004390: 080043bb .word 0x080043bb
  10428. {
  10429. case RCC_FMCCLKSOURCE_PLL: /* PLL is used as clock source for FMC*/
  10430. /* Enable FMC Clock output generated form System PLL . */
  10431. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  10432. 8004394: 4b1e ldr r3, [pc, #120] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10433. 8004396: 6adb ldr r3, [r3, #44] ; 0x2c
  10434. 8004398: 4a1d ldr r2, [pc, #116] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10435. 800439a: f443 3300 orr.w r3, r3, #131072 ; 0x20000
  10436. 800439e: 62d3 str r3, [r2, #44] ; 0x2c
  10437. /* FMC clock source configuration done later after clock selection check */
  10438. break;
  10439. 80043a0: e00c b.n 80043bc <HAL_RCCEx_PeriphCLKConfig+0x59c>
  10440. case RCC_FMCCLKSOURCE_PLL2: /* PLL2 is used as clock source for FMC*/
  10441. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_R_UPDATE);
  10442. 80043a2: 687b ldr r3, [r7, #4]
  10443. 80043a4: 3304 adds r3, #4
  10444. 80043a6: 2102 movs r1, #2
  10445. 80043a8: 4618 mov r0, r3
  10446. 80043aa: f000 fc33 bl 8004c14 <RCCEx_PLL2_Config>
  10447. 80043ae: 4603 mov r3, r0
  10448. 80043b0: 75fb strb r3, [r7, #23]
  10449. /* FMC clock source configuration done later after clock selection check */
  10450. break;
  10451. 80043b2: e003 b.n 80043bc <HAL_RCCEx_PeriphCLKConfig+0x59c>
  10452. case RCC_FMCCLKSOURCE_HCLK:
  10453. /* D1/CD HCLK clock selected as FMC kernel peripheral clock */
  10454. break;
  10455. default:
  10456. ret = HAL_ERROR;
  10457. 80043b4: 2301 movs r3, #1
  10458. 80043b6: 75fb strb r3, [r7, #23]
  10459. break;
  10460. 80043b8: e000 b.n 80043bc <HAL_RCCEx_PeriphCLKConfig+0x59c>
  10461. break;
  10462. 80043ba: bf00 nop
  10463. }
  10464. if(ret == HAL_OK)
  10465. 80043bc: 7dfb ldrb r3, [r7, #23]
  10466. 80043be: 2b00 cmp r3, #0
  10467. 80043c0: d109 bne.n 80043d6 <HAL_RCCEx_PeriphCLKConfig+0x5b6>
  10468. {
  10469. /* Set the source of FMC clock*/
  10470. __HAL_RCC_FMC_CONFIG(PeriphClkInit->FmcClockSelection);
  10471. 80043c2: 4b13 ldr r3, [pc, #76] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10472. 80043c4: 6cdb ldr r3, [r3, #76] ; 0x4c
  10473. 80043c6: f023 0203 bic.w r2, r3, #3
  10474. 80043ca: 687b ldr r3, [r7, #4]
  10475. 80043cc: 6c5b ldr r3, [r3, #68] ; 0x44
  10476. 80043ce: 4910 ldr r1, [pc, #64] ; (8004410 <HAL_RCCEx_PeriphCLKConfig+0x5f0>)
  10477. 80043d0: 4313 orrs r3, r2
  10478. 80043d2: 64cb str r3, [r1, #76] ; 0x4c
  10479. 80043d4: e001 b.n 80043da <HAL_RCCEx_PeriphCLKConfig+0x5ba>
  10480. }
  10481. else
  10482. {
  10483. /* set overall return value */
  10484. status = ret;
  10485. 80043d6: 7dfb ldrb r3, [r7, #23]
  10486. 80043d8: 75bb strb r3, [r7, #22]
  10487. }
  10488. }
  10489. /*---------------------------- RTC configuration -------------------------------*/
  10490. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)
  10491. 80043da: 687b ldr r3, [r7, #4]
  10492. 80043dc: 681b ldr r3, [r3, #0]
  10493. 80043de: f403 0380 and.w r3, r3, #4194304 ; 0x400000
  10494. 80043e2: 2b00 cmp r3, #0
  10495. 80043e4: f000 808a beq.w 80044fc <HAL_RCCEx_PeriphCLKConfig+0x6dc>
  10496. {
  10497. /* check for RTC Parameters used to output RTCCLK */
  10498. assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection));
  10499. /* Enable write access to Backup domain */
  10500. SET_BIT(PWR->CR1, PWR_CR1_DBP);
  10501. 80043e8: 4b0a ldr r3, [pc, #40] ; (8004414 <HAL_RCCEx_PeriphCLKConfig+0x5f4>)
  10502. 80043ea: 681b ldr r3, [r3, #0]
  10503. 80043ec: 4a09 ldr r2, [pc, #36] ; (8004414 <HAL_RCCEx_PeriphCLKConfig+0x5f4>)
  10504. 80043ee: f443 7380 orr.w r3, r3, #256 ; 0x100
  10505. 80043f2: 6013 str r3, [r2, #0]
  10506. /* Wait for Backup domain Write protection disable */
  10507. tickstart = HAL_GetTick();
  10508. 80043f4: f7fd f8d4 bl 80015a0 <HAL_GetTick>
  10509. 80043f8: 6138 str r0, [r7, #16]
  10510. while((PWR->CR1 & PWR_CR1_DBP) == 0U)
  10511. 80043fa: e00d b.n 8004418 <HAL_RCCEx_PeriphCLKConfig+0x5f8>
  10512. {
  10513. if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
  10514. 80043fc: f7fd f8d0 bl 80015a0 <HAL_GetTick>
  10515. 8004400: 4602 mov r2, r0
  10516. 8004402: 693b ldr r3, [r7, #16]
  10517. 8004404: 1ad3 subs r3, r2, r3
  10518. 8004406: 2b64 cmp r3, #100 ; 0x64
  10519. 8004408: d906 bls.n 8004418 <HAL_RCCEx_PeriphCLKConfig+0x5f8>
  10520. {
  10521. ret = HAL_TIMEOUT;
  10522. 800440a: 2303 movs r3, #3
  10523. 800440c: 75fb strb r3, [r7, #23]
  10524. break;
  10525. 800440e: e009 b.n 8004424 <HAL_RCCEx_PeriphCLKConfig+0x604>
  10526. 8004410: 58024400 .word 0x58024400
  10527. 8004414: 58024800 .word 0x58024800
  10528. while((PWR->CR1 & PWR_CR1_DBP) == 0U)
  10529. 8004418: 4bb9 ldr r3, [pc, #740] ; (8004700 <HAL_RCCEx_PeriphCLKConfig+0x8e0>)
  10530. 800441a: 681b ldr r3, [r3, #0]
  10531. 800441c: f403 7380 and.w r3, r3, #256 ; 0x100
  10532. 8004420: 2b00 cmp r3, #0
  10533. 8004422: d0eb beq.n 80043fc <HAL_RCCEx_PeriphCLKConfig+0x5dc>
  10534. }
  10535. }
  10536. if(ret == HAL_OK)
  10537. 8004424: 7dfb ldrb r3, [r7, #23]
  10538. 8004426: 2b00 cmp r3, #0
  10539. 8004428: d166 bne.n 80044f8 <HAL_RCCEx_PeriphCLKConfig+0x6d8>
  10540. {
  10541. /* Reset the Backup domain only if the RTC Clock source selection is modified */
  10542. if((RCC->BDCR & RCC_BDCR_RTCSEL) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))
  10543. 800442a: 4bb6 ldr r3, [pc, #728] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10544. 800442c: 6f1a ldr r2, [r3, #112] ; 0x70
  10545. 800442e: 687b ldr r3, [r7, #4]
  10546. 8004430: f8d3 30ac ldr.w r3, [r3, #172] ; 0xac
  10547. 8004434: 4053 eors r3, r2
  10548. 8004436: f403 7340 and.w r3, r3, #768 ; 0x300
  10549. 800443a: 2b00 cmp r3, #0
  10550. 800443c: d013 beq.n 8004466 <HAL_RCCEx_PeriphCLKConfig+0x646>
  10551. {
  10552. /* Store the content of BDCR register before the reset of Backup Domain */
  10553. tmpreg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL));
  10554. 800443e: 4bb1 ldr r3, [pc, #708] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10555. 8004440: 6f1b ldr r3, [r3, #112] ; 0x70
  10556. 8004442: f423 7340 bic.w r3, r3, #768 ; 0x300
  10557. 8004446: 60fb str r3, [r7, #12]
  10558. /* RTC Clock selection can be changed only if the Backup Domain is reset */
  10559. __HAL_RCC_BACKUPRESET_FORCE();
  10560. 8004448: 4bae ldr r3, [pc, #696] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10561. 800444a: 6f1b ldr r3, [r3, #112] ; 0x70
  10562. 800444c: 4aad ldr r2, [pc, #692] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10563. 800444e: f443 3380 orr.w r3, r3, #65536 ; 0x10000
  10564. 8004452: 6713 str r3, [r2, #112] ; 0x70
  10565. __HAL_RCC_BACKUPRESET_RELEASE();
  10566. 8004454: 4bab ldr r3, [pc, #684] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10567. 8004456: 6f1b ldr r3, [r3, #112] ; 0x70
  10568. 8004458: 4aaa ldr r2, [pc, #680] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10569. 800445a: f423 3380 bic.w r3, r3, #65536 ; 0x10000
  10570. 800445e: 6713 str r3, [r2, #112] ; 0x70
  10571. /* Restore the Content of BDCR register */
  10572. RCC->BDCR = tmpreg;
  10573. 8004460: 4aa8 ldr r2, [pc, #672] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10574. 8004462: 68fb ldr r3, [r7, #12]
  10575. 8004464: 6713 str r3, [r2, #112] ; 0x70
  10576. }
  10577. /* If LSE is selected as RTC clock source (and enabled prior to Backup Domain reset), wait for LSE reactivation */
  10578. if(PeriphClkInit->RTCClockSelection == RCC_RTCCLKSOURCE_LSE)
  10579. 8004466: 687b ldr r3, [r7, #4]
  10580. 8004468: f8d3 30ac ldr.w r3, [r3, #172] ; 0xac
  10581. 800446c: f5b3 7f80 cmp.w r3, #256 ; 0x100
  10582. 8004470: d115 bne.n 800449e <HAL_RCCEx_PeriphCLKConfig+0x67e>
  10583. {
  10584. /* Get Start Tick*/
  10585. tickstart = HAL_GetTick();
  10586. 8004472: f7fd f895 bl 80015a0 <HAL_GetTick>
  10587. 8004476: 6138 str r0, [r7, #16]
  10588. /* Wait till LSE is ready */
  10589. while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  10590. 8004478: e00b b.n 8004492 <HAL_RCCEx_PeriphCLKConfig+0x672>
  10591. {
  10592. if((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  10593. 800447a: f7fd f891 bl 80015a0 <HAL_GetTick>
  10594. 800447e: 4602 mov r2, r0
  10595. 8004480: 693b ldr r3, [r7, #16]
  10596. 8004482: 1ad3 subs r3, r2, r3
  10597. 8004484: f241 3288 movw r2, #5000 ; 0x1388
  10598. 8004488: 4293 cmp r3, r2
  10599. 800448a: d902 bls.n 8004492 <HAL_RCCEx_PeriphCLKConfig+0x672>
  10600. {
  10601. ret = HAL_TIMEOUT;
  10602. 800448c: 2303 movs r3, #3
  10603. 800448e: 75fb strb r3, [r7, #23]
  10604. break;
  10605. 8004490: e005 b.n 800449e <HAL_RCCEx_PeriphCLKConfig+0x67e>
  10606. while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  10607. 8004492: 4b9c ldr r3, [pc, #624] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10608. 8004494: 6f1b ldr r3, [r3, #112] ; 0x70
  10609. 8004496: f003 0302 and.w r3, r3, #2
  10610. 800449a: 2b00 cmp r3, #0
  10611. 800449c: d0ed beq.n 800447a <HAL_RCCEx_PeriphCLKConfig+0x65a>
  10612. }
  10613. }
  10614. }
  10615. if(ret == HAL_OK)
  10616. 800449e: 7dfb ldrb r3, [r7, #23]
  10617. 80044a0: 2b00 cmp r3, #0
  10618. 80044a2: d126 bne.n 80044f2 <HAL_RCCEx_PeriphCLKConfig+0x6d2>
  10619. {
  10620. __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection);
  10621. 80044a4: 687b ldr r3, [r7, #4]
  10622. 80044a6: f8d3 30ac ldr.w r3, [r3, #172] ; 0xac
  10623. 80044aa: f403 7340 and.w r3, r3, #768 ; 0x300
  10624. 80044ae: f5b3 7f40 cmp.w r3, #768 ; 0x300
  10625. 80044b2: d10d bne.n 80044d0 <HAL_RCCEx_PeriphCLKConfig+0x6b0>
  10626. 80044b4: 4b93 ldr r3, [pc, #588] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10627. 80044b6: 691b ldr r3, [r3, #16]
  10628. 80044b8: f423 527c bic.w r2, r3, #16128 ; 0x3f00
  10629. 80044bc: 687b ldr r3, [r7, #4]
  10630. 80044be: f8d3 30ac ldr.w r3, [r3, #172] ; 0xac
  10631. 80044c2: 0919 lsrs r1, r3, #4
  10632. 80044c4: 4b90 ldr r3, [pc, #576] ; (8004708 <HAL_RCCEx_PeriphCLKConfig+0x8e8>)
  10633. 80044c6: 400b ands r3, r1
  10634. 80044c8: 498e ldr r1, [pc, #568] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10635. 80044ca: 4313 orrs r3, r2
  10636. 80044cc: 610b str r3, [r1, #16]
  10637. 80044ce: e005 b.n 80044dc <HAL_RCCEx_PeriphCLKConfig+0x6bc>
  10638. 80044d0: 4b8c ldr r3, [pc, #560] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10639. 80044d2: 691b ldr r3, [r3, #16]
  10640. 80044d4: 4a8b ldr r2, [pc, #556] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10641. 80044d6: f423 537c bic.w r3, r3, #16128 ; 0x3f00
  10642. 80044da: 6113 str r3, [r2, #16]
  10643. 80044dc: 4b89 ldr r3, [pc, #548] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10644. 80044de: 6f1a ldr r2, [r3, #112] ; 0x70
  10645. 80044e0: 687b ldr r3, [r7, #4]
  10646. 80044e2: f8d3 30ac ldr.w r3, [r3, #172] ; 0xac
  10647. 80044e6: f3c3 030b ubfx r3, r3, #0, #12
  10648. 80044ea: 4986 ldr r1, [pc, #536] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10649. 80044ec: 4313 orrs r3, r2
  10650. 80044ee: 670b str r3, [r1, #112] ; 0x70
  10651. 80044f0: e004 b.n 80044fc <HAL_RCCEx_PeriphCLKConfig+0x6dc>
  10652. }
  10653. else
  10654. {
  10655. /* set overall return value */
  10656. status = ret;
  10657. 80044f2: 7dfb ldrb r3, [r7, #23]
  10658. 80044f4: 75bb strb r3, [r7, #22]
  10659. 80044f6: e001 b.n 80044fc <HAL_RCCEx_PeriphCLKConfig+0x6dc>
  10660. }
  10661. }
  10662. else
  10663. {
  10664. /* set overall return value */
  10665. status = ret;
  10666. 80044f8: 7dfb ldrb r3, [r7, #23]
  10667. 80044fa: 75bb strb r3, [r7, #22]
  10668. }
  10669. }
  10670. /*-------------------------- USART1/6 configuration --------------------------*/
  10671. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART16) == RCC_PERIPHCLK_USART16)
  10672. 80044fc: 687b ldr r3, [r7, #4]
  10673. 80044fe: 681b ldr r3, [r3, #0]
  10674. 8004500: f003 0301 and.w r3, r3, #1
  10675. 8004504: 2b00 cmp r3, #0
  10676. 8004506: d07e beq.n 8004606 <HAL_RCCEx_PeriphCLKConfig+0x7e6>
  10677. {
  10678. switch(PeriphClkInit->Usart16ClockSelection)
  10679. 8004508: 687b ldr r3, [r7, #4]
  10680. 800450a: 6f5b ldr r3, [r3, #116] ; 0x74
  10681. 800450c: 2b28 cmp r3, #40 ; 0x28
  10682. 800450e: d867 bhi.n 80045e0 <HAL_RCCEx_PeriphCLKConfig+0x7c0>
  10683. 8004510: a201 add r2, pc, #4 ; (adr r2, 8004518 <HAL_RCCEx_PeriphCLKConfig+0x6f8>)
  10684. 8004512: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  10685. 8004516: bf00 nop
  10686. 8004518: 080045e7 .word 0x080045e7
  10687. 800451c: 080045e1 .word 0x080045e1
  10688. 8004520: 080045e1 .word 0x080045e1
  10689. 8004524: 080045e1 .word 0x080045e1
  10690. 8004528: 080045e1 .word 0x080045e1
  10691. 800452c: 080045e1 .word 0x080045e1
  10692. 8004530: 080045e1 .word 0x080045e1
  10693. 8004534: 080045e1 .word 0x080045e1
  10694. 8004538: 080045bd .word 0x080045bd
  10695. 800453c: 080045e1 .word 0x080045e1
  10696. 8004540: 080045e1 .word 0x080045e1
  10697. 8004544: 080045e1 .word 0x080045e1
  10698. 8004548: 080045e1 .word 0x080045e1
  10699. 800454c: 080045e1 .word 0x080045e1
  10700. 8004550: 080045e1 .word 0x080045e1
  10701. 8004554: 080045e1 .word 0x080045e1
  10702. 8004558: 080045cf .word 0x080045cf
  10703. 800455c: 080045e1 .word 0x080045e1
  10704. 8004560: 080045e1 .word 0x080045e1
  10705. 8004564: 080045e1 .word 0x080045e1
  10706. 8004568: 080045e1 .word 0x080045e1
  10707. 800456c: 080045e1 .word 0x080045e1
  10708. 8004570: 080045e1 .word 0x080045e1
  10709. 8004574: 080045e1 .word 0x080045e1
  10710. 8004578: 080045e7 .word 0x080045e7
  10711. 800457c: 080045e1 .word 0x080045e1
  10712. 8004580: 080045e1 .word 0x080045e1
  10713. 8004584: 080045e1 .word 0x080045e1
  10714. 8004588: 080045e1 .word 0x080045e1
  10715. 800458c: 080045e1 .word 0x080045e1
  10716. 8004590: 080045e1 .word 0x080045e1
  10717. 8004594: 080045e1 .word 0x080045e1
  10718. 8004598: 080045e7 .word 0x080045e7
  10719. 800459c: 080045e1 .word 0x080045e1
  10720. 80045a0: 080045e1 .word 0x080045e1
  10721. 80045a4: 080045e1 .word 0x080045e1
  10722. 80045a8: 080045e1 .word 0x080045e1
  10723. 80045ac: 080045e1 .word 0x080045e1
  10724. 80045b0: 080045e1 .word 0x080045e1
  10725. 80045b4: 080045e1 .word 0x080045e1
  10726. 80045b8: 080045e7 .word 0x080045e7
  10727. case RCC_USART16CLKSOURCE_PCLK2: /* CD/D2 PCLK2 as clock source for USART1/6 */
  10728. /* USART1/6 clock source configuration done later after clock selection check */
  10729. break;
  10730. case RCC_USART16CLKSOURCE_PLL2: /* PLL2 is used as clock source for USART1/6 */
  10731. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_Q_UPDATE);
  10732. 80045bc: 687b ldr r3, [r7, #4]
  10733. 80045be: 3304 adds r3, #4
  10734. 80045c0: 2101 movs r1, #1
  10735. 80045c2: 4618 mov r0, r3
  10736. 80045c4: f000 fb26 bl 8004c14 <RCCEx_PLL2_Config>
  10737. 80045c8: 4603 mov r3, r0
  10738. 80045ca: 75fb strb r3, [r7, #23]
  10739. /* USART1/6 clock source configuration done later after clock selection check */
  10740. break;
  10741. 80045cc: e00c b.n 80045e8 <HAL_RCCEx_PeriphCLKConfig+0x7c8>
  10742. case RCC_USART16CLKSOURCE_PLL3: /* PLL3 is used as clock source for USART1/6 */
  10743. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_Q_UPDATE);
  10744. 80045ce: 687b ldr r3, [r7, #4]
  10745. 80045d0: 3324 adds r3, #36 ; 0x24
  10746. 80045d2: 2101 movs r1, #1
  10747. 80045d4: 4618 mov r0, r3
  10748. 80045d6: f000 fbcf bl 8004d78 <RCCEx_PLL3_Config>
  10749. 80045da: 4603 mov r3, r0
  10750. 80045dc: 75fb strb r3, [r7, #23]
  10751. /* USART1/6 clock source configuration done later after clock selection check */
  10752. break;
  10753. 80045de: e003 b.n 80045e8 <HAL_RCCEx_PeriphCLKConfig+0x7c8>
  10754. /* LSE, oscillator is used as source of USART1/6 clock */
  10755. /* USART1/6 clock source configuration done later after clock selection check */
  10756. break;
  10757. default:
  10758. ret = HAL_ERROR;
  10759. 80045e0: 2301 movs r3, #1
  10760. 80045e2: 75fb strb r3, [r7, #23]
  10761. break;
  10762. 80045e4: e000 b.n 80045e8 <HAL_RCCEx_PeriphCLKConfig+0x7c8>
  10763. break;
  10764. 80045e6: bf00 nop
  10765. }
  10766. if(ret == HAL_OK)
  10767. 80045e8: 7dfb ldrb r3, [r7, #23]
  10768. 80045ea: 2b00 cmp r3, #0
  10769. 80045ec: d109 bne.n 8004602 <HAL_RCCEx_PeriphCLKConfig+0x7e2>
  10770. {
  10771. /* Set the source of USART1/6 clock */
  10772. __HAL_RCC_USART16_CONFIG(PeriphClkInit->Usart16ClockSelection);
  10773. 80045ee: 4b45 ldr r3, [pc, #276] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10774. 80045f0: 6d5b ldr r3, [r3, #84] ; 0x54
  10775. 80045f2: f023 0238 bic.w r2, r3, #56 ; 0x38
  10776. 80045f6: 687b ldr r3, [r7, #4]
  10777. 80045f8: 6f5b ldr r3, [r3, #116] ; 0x74
  10778. 80045fa: 4942 ldr r1, [pc, #264] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10779. 80045fc: 4313 orrs r3, r2
  10780. 80045fe: 654b str r3, [r1, #84] ; 0x54
  10781. 8004600: e001 b.n 8004606 <HAL_RCCEx_PeriphCLKConfig+0x7e6>
  10782. }
  10783. else
  10784. {
  10785. /* set overall return value */
  10786. status = ret;
  10787. 8004602: 7dfb ldrb r3, [r7, #23]
  10788. 8004604: 75bb strb r3, [r7, #22]
  10789. }
  10790. }
  10791. /*-------------------------- USART2/3/4/5/7/8 Configuration --------------------------*/
  10792. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART234578) == RCC_PERIPHCLK_USART234578)
  10793. 8004606: 687b ldr r3, [r7, #4]
  10794. 8004608: 681b ldr r3, [r3, #0]
  10795. 800460a: f003 0302 and.w r3, r3, #2
  10796. 800460e: 2b00 cmp r3, #0
  10797. 8004610: d037 beq.n 8004682 <HAL_RCCEx_PeriphCLKConfig+0x862>
  10798. {
  10799. switch(PeriphClkInit->Usart234578ClockSelection)
  10800. 8004612: 687b ldr r3, [r7, #4]
  10801. 8004614: 6f1b ldr r3, [r3, #112] ; 0x70
  10802. 8004616: 2b05 cmp r3, #5
  10803. 8004618: d820 bhi.n 800465c <HAL_RCCEx_PeriphCLKConfig+0x83c>
  10804. 800461a: a201 add r2, pc, #4 ; (adr r2, 8004620 <HAL_RCCEx_PeriphCLKConfig+0x800>)
  10805. 800461c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  10806. 8004620: 08004663 .word 0x08004663
  10807. 8004624: 08004639 .word 0x08004639
  10808. 8004628: 0800464b .word 0x0800464b
  10809. 800462c: 08004663 .word 0x08004663
  10810. 8004630: 08004663 .word 0x08004663
  10811. 8004634: 08004663 .word 0x08004663
  10812. case RCC_USART234578CLKSOURCE_PCLK1: /* CD/D2 PCLK1 as clock source for USART2/3/4/5/7/8 */
  10813. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  10814. break;
  10815. case RCC_USART234578CLKSOURCE_PLL2: /* PLL2 is used as clock source for USART2/3/4/5/7/8 */
  10816. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_Q_UPDATE);
  10817. 8004638: 687b ldr r3, [r7, #4]
  10818. 800463a: 3304 adds r3, #4
  10819. 800463c: 2101 movs r1, #1
  10820. 800463e: 4618 mov r0, r3
  10821. 8004640: f000 fae8 bl 8004c14 <RCCEx_PLL2_Config>
  10822. 8004644: 4603 mov r3, r0
  10823. 8004646: 75fb strb r3, [r7, #23]
  10824. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  10825. break;
  10826. 8004648: e00c b.n 8004664 <HAL_RCCEx_PeriphCLKConfig+0x844>
  10827. case RCC_USART234578CLKSOURCE_PLL3: /* PLL3 is used as clock source for USART2/3/4/5/7/8 */
  10828. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_Q_UPDATE);
  10829. 800464a: 687b ldr r3, [r7, #4]
  10830. 800464c: 3324 adds r3, #36 ; 0x24
  10831. 800464e: 2101 movs r1, #1
  10832. 8004650: 4618 mov r0, r3
  10833. 8004652: f000 fb91 bl 8004d78 <RCCEx_PLL3_Config>
  10834. 8004656: 4603 mov r3, r0
  10835. 8004658: 75fb strb r3, [r7, #23]
  10836. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  10837. break;
  10838. 800465a: e003 b.n 8004664 <HAL_RCCEx_PeriphCLKConfig+0x844>
  10839. /* LSE, oscillator is used as source of USART2/3/4/5/7/8 clock */
  10840. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  10841. break;
  10842. default:
  10843. ret = HAL_ERROR;
  10844. 800465c: 2301 movs r3, #1
  10845. 800465e: 75fb strb r3, [r7, #23]
  10846. break;
  10847. 8004660: e000 b.n 8004664 <HAL_RCCEx_PeriphCLKConfig+0x844>
  10848. break;
  10849. 8004662: bf00 nop
  10850. }
  10851. if(ret == HAL_OK)
  10852. 8004664: 7dfb ldrb r3, [r7, #23]
  10853. 8004666: 2b00 cmp r3, #0
  10854. 8004668: d109 bne.n 800467e <HAL_RCCEx_PeriphCLKConfig+0x85e>
  10855. {
  10856. /* Set the source of USART2/3/4/5/7/8 clock */
  10857. __HAL_RCC_USART234578_CONFIG(PeriphClkInit->Usart234578ClockSelection);
  10858. 800466a: 4b26 ldr r3, [pc, #152] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10859. 800466c: 6d5b ldr r3, [r3, #84] ; 0x54
  10860. 800466e: f023 0207 bic.w r2, r3, #7
  10861. 8004672: 687b ldr r3, [r7, #4]
  10862. 8004674: 6f1b ldr r3, [r3, #112] ; 0x70
  10863. 8004676: 4923 ldr r1, [pc, #140] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10864. 8004678: 4313 orrs r3, r2
  10865. 800467a: 654b str r3, [r1, #84] ; 0x54
  10866. 800467c: e001 b.n 8004682 <HAL_RCCEx_PeriphCLKConfig+0x862>
  10867. }
  10868. else
  10869. {
  10870. /* set overall return value */
  10871. status = ret;
  10872. 800467e: 7dfb ldrb r3, [r7, #23]
  10873. 8004680: 75bb strb r3, [r7, #22]
  10874. }
  10875. }
  10876. /*-------------------------- LPUART1 Configuration -------------------------*/
  10877. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1)
  10878. 8004682: 687b ldr r3, [r7, #4]
  10879. 8004684: 681b ldr r3, [r3, #0]
  10880. 8004686: f003 0304 and.w r3, r3, #4
  10881. 800468a: 2b00 cmp r3, #0
  10882. 800468c: d040 beq.n 8004710 <HAL_RCCEx_PeriphCLKConfig+0x8f0>
  10883. {
  10884. switch(PeriphClkInit->Lpuart1ClockSelection)
  10885. 800468e: 687b ldr r3, [r7, #4]
  10886. 8004690: f8d3 308c ldr.w r3, [r3, #140] ; 0x8c
  10887. 8004694: 2b05 cmp r3, #5
  10888. 8004696: d821 bhi.n 80046dc <HAL_RCCEx_PeriphCLKConfig+0x8bc>
  10889. 8004698: a201 add r2, pc, #4 ; (adr r2, 80046a0 <HAL_RCCEx_PeriphCLKConfig+0x880>)
  10890. 800469a: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  10891. 800469e: bf00 nop
  10892. 80046a0: 080046e3 .word 0x080046e3
  10893. 80046a4: 080046b9 .word 0x080046b9
  10894. 80046a8: 080046cb .word 0x080046cb
  10895. 80046ac: 080046e3 .word 0x080046e3
  10896. 80046b0: 080046e3 .word 0x080046e3
  10897. 80046b4: 080046e3 .word 0x080046e3
  10898. case RCC_LPUART1CLKSOURCE_PCLK4: /* SRD/D3 PCLK1 (PCLK4) as clock source for LPUART1 */
  10899. /* LPUART1 clock source configuration done later after clock selection check */
  10900. break;
  10901. case RCC_LPUART1CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPUART1 */
  10902. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_Q_UPDATE);
  10903. 80046b8: 687b ldr r3, [r7, #4]
  10904. 80046ba: 3304 adds r3, #4
  10905. 80046bc: 2101 movs r1, #1
  10906. 80046be: 4618 mov r0, r3
  10907. 80046c0: f000 faa8 bl 8004c14 <RCCEx_PLL2_Config>
  10908. 80046c4: 4603 mov r3, r0
  10909. 80046c6: 75fb strb r3, [r7, #23]
  10910. /* LPUART1 clock source configuration done later after clock selection check */
  10911. break;
  10912. 80046c8: e00c b.n 80046e4 <HAL_RCCEx_PeriphCLKConfig+0x8c4>
  10913. case RCC_LPUART1CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPUART1 */
  10914. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_Q_UPDATE);
  10915. 80046ca: 687b ldr r3, [r7, #4]
  10916. 80046cc: 3324 adds r3, #36 ; 0x24
  10917. 80046ce: 2101 movs r1, #1
  10918. 80046d0: 4618 mov r0, r3
  10919. 80046d2: f000 fb51 bl 8004d78 <RCCEx_PLL3_Config>
  10920. 80046d6: 4603 mov r3, r0
  10921. 80046d8: 75fb strb r3, [r7, #23]
  10922. /* LPUART1 clock source configuration done later after clock selection check */
  10923. break;
  10924. 80046da: e003 b.n 80046e4 <HAL_RCCEx_PeriphCLKConfig+0x8c4>
  10925. /* LSE, oscillator is used as source of LPUART1 clock */
  10926. /* LPUART1 clock source configuration done later after clock selection check */
  10927. break;
  10928. default:
  10929. ret = HAL_ERROR;
  10930. 80046dc: 2301 movs r3, #1
  10931. 80046de: 75fb strb r3, [r7, #23]
  10932. break;
  10933. 80046e0: e000 b.n 80046e4 <HAL_RCCEx_PeriphCLKConfig+0x8c4>
  10934. break;
  10935. 80046e2: bf00 nop
  10936. }
  10937. if(ret == HAL_OK)
  10938. 80046e4: 7dfb ldrb r3, [r7, #23]
  10939. 80046e6: 2b00 cmp r3, #0
  10940. 80046e8: d110 bne.n 800470c <HAL_RCCEx_PeriphCLKConfig+0x8ec>
  10941. {
  10942. /* Set the source of LPUART1 clock */
  10943. __HAL_RCC_LPUART1_CONFIG(PeriphClkInit->Lpuart1ClockSelection);
  10944. 80046ea: 4b06 ldr r3, [pc, #24] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10945. 80046ec: 6d9b ldr r3, [r3, #88] ; 0x58
  10946. 80046ee: f023 0207 bic.w r2, r3, #7
  10947. 80046f2: 687b ldr r3, [r7, #4]
  10948. 80046f4: f8d3 308c ldr.w r3, [r3, #140] ; 0x8c
  10949. 80046f8: 4902 ldr r1, [pc, #8] ; (8004704 <HAL_RCCEx_PeriphCLKConfig+0x8e4>)
  10950. 80046fa: 4313 orrs r3, r2
  10951. 80046fc: 658b str r3, [r1, #88] ; 0x58
  10952. 80046fe: e007 b.n 8004710 <HAL_RCCEx_PeriphCLKConfig+0x8f0>
  10953. 8004700: 58024800 .word 0x58024800
  10954. 8004704: 58024400 .word 0x58024400
  10955. 8004708: 00ffffcf .word 0x00ffffcf
  10956. }
  10957. else
  10958. {
  10959. /* set overall return value */
  10960. status = ret;
  10961. 800470c: 7dfb ldrb r3, [r7, #23]
  10962. 800470e: 75bb strb r3, [r7, #22]
  10963. }
  10964. }
  10965. /*---------------------------- LPTIM1 configuration -------------------------------*/
  10966. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1)
  10967. 8004710: 687b ldr r3, [r7, #4]
  10968. 8004712: 681b ldr r3, [r3, #0]
  10969. 8004714: f003 0320 and.w r3, r3, #32
  10970. 8004718: 2b00 cmp r3, #0
  10971. 800471a: d04b beq.n 80047b4 <HAL_RCCEx_PeriphCLKConfig+0x994>
  10972. {
  10973. switch(PeriphClkInit->Lptim1ClockSelection)
  10974. 800471c: 687b ldr r3, [r7, #4]
  10975. 800471e: f8d3 3088 ldr.w r3, [r3, #136] ; 0x88
  10976. 8004722: f1b3 4fa0 cmp.w r3, #1342177280 ; 0x50000000
  10977. 8004726: d02e beq.n 8004786 <HAL_RCCEx_PeriphCLKConfig+0x966>
  10978. 8004728: f1b3 4fa0 cmp.w r3, #1342177280 ; 0x50000000
  10979. 800472c: d828 bhi.n 8004780 <HAL_RCCEx_PeriphCLKConfig+0x960>
  10980. 800472e: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
  10981. 8004732: d02a beq.n 800478a <HAL_RCCEx_PeriphCLKConfig+0x96a>
  10982. 8004734: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
  10983. 8004738: d822 bhi.n 8004780 <HAL_RCCEx_PeriphCLKConfig+0x960>
  10984. 800473a: f1b3 5f40 cmp.w r3, #805306368 ; 0x30000000
  10985. 800473e: d026 beq.n 800478e <HAL_RCCEx_PeriphCLKConfig+0x96e>
  10986. 8004740: f1b3 5f40 cmp.w r3, #805306368 ; 0x30000000
  10987. 8004744: d81c bhi.n 8004780 <HAL_RCCEx_PeriphCLKConfig+0x960>
  10988. 8004746: f1b3 5f00 cmp.w r3, #536870912 ; 0x20000000
  10989. 800474a: d010 beq.n 800476e <HAL_RCCEx_PeriphCLKConfig+0x94e>
  10990. 800474c: f1b3 5f00 cmp.w r3, #536870912 ; 0x20000000
  10991. 8004750: d816 bhi.n 8004780 <HAL_RCCEx_PeriphCLKConfig+0x960>
  10992. 8004752: 2b00 cmp r3, #0
  10993. 8004754: d01d beq.n 8004792 <HAL_RCCEx_PeriphCLKConfig+0x972>
  10994. 8004756: f1b3 5f80 cmp.w r3, #268435456 ; 0x10000000
  10995. 800475a: d111 bne.n 8004780 <HAL_RCCEx_PeriphCLKConfig+0x960>
  10996. /* LPTIM1 clock source configuration done later after clock selection check */
  10997. break;
  10998. case RCC_LPTIM1CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM1*/
  10999. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_P_UPDATE);
  11000. 800475c: 687b ldr r3, [r7, #4]
  11001. 800475e: 3304 adds r3, #4
  11002. 8004760: 2100 movs r1, #0
  11003. 8004762: 4618 mov r0, r3
  11004. 8004764: f000 fa56 bl 8004c14 <RCCEx_PLL2_Config>
  11005. 8004768: 4603 mov r3, r0
  11006. 800476a: 75fb strb r3, [r7, #23]
  11007. /* LPTIM1 clock source configuration done later after clock selection check */
  11008. break;
  11009. 800476c: e012 b.n 8004794 <HAL_RCCEx_PeriphCLKConfig+0x974>
  11010. case RCC_LPTIM1CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM1*/
  11011. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_R_UPDATE);
  11012. 800476e: 687b ldr r3, [r7, #4]
  11013. 8004770: 3324 adds r3, #36 ; 0x24
  11014. 8004772: 2102 movs r1, #2
  11015. 8004774: 4618 mov r0, r3
  11016. 8004776: f000 faff bl 8004d78 <RCCEx_PLL3_Config>
  11017. 800477a: 4603 mov r3, r0
  11018. 800477c: 75fb strb r3, [r7, #23]
  11019. /* LPTIM1 clock source configuration done later after clock selection check */
  11020. break;
  11021. 800477e: e009 b.n 8004794 <HAL_RCCEx_PeriphCLKConfig+0x974>
  11022. /* HSI, HSE, or CSI oscillator is used as source of LPTIM1 clock */
  11023. /* LPTIM1 clock source configuration done later after clock selection check */
  11024. break;
  11025. default:
  11026. ret = HAL_ERROR;
  11027. 8004780: 2301 movs r3, #1
  11028. 8004782: 75fb strb r3, [r7, #23]
  11029. break;
  11030. 8004784: e006 b.n 8004794 <HAL_RCCEx_PeriphCLKConfig+0x974>
  11031. break;
  11032. 8004786: bf00 nop
  11033. 8004788: e004 b.n 8004794 <HAL_RCCEx_PeriphCLKConfig+0x974>
  11034. break;
  11035. 800478a: bf00 nop
  11036. 800478c: e002 b.n 8004794 <HAL_RCCEx_PeriphCLKConfig+0x974>
  11037. break;
  11038. 800478e: bf00 nop
  11039. 8004790: e000 b.n 8004794 <HAL_RCCEx_PeriphCLKConfig+0x974>
  11040. break;
  11041. 8004792: bf00 nop
  11042. }
  11043. if(ret == HAL_OK)
  11044. 8004794: 7dfb ldrb r3, [r7, #23]
  11045. 8004796: 2b00 cmp r3, #0
  11046. 8004798: d10a bne.n 80047b0 <HAL_RCCEx_PeriphCLKConfig+0x990>
  11047. {
  11048. /* Set the source of LPTIM1 clock*/
  11049. __HAL_RCC_LPTIM1_CONFIG(PeriphClkInit->Lptim1ClockSelection);
  11050. 800479a: 4bb2 ldr r3, [pc, #712] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11051. 800479c: 6d5b ldr r3, [r3, #84] ; 0x54
  11052. 800479e: f023 42e0 bic.w r2, r3, #1879048192 ; 0x70000000
  11053. 80047a2: 687b ldr r3, [r7, #4]
  11054. 80047a4: f8d3 3088 ldr.w r3, [r3, #136] ; 0x88
  11055. 80047a8: 49ae ldr r1, [pc, #696] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11056. 80047aa: 4313 orrs r3, r2
  11057. 80047ac: 654b str r3, [r1, #84] ; 0x54
  11058. 80047ae: e001 b.n 80047b4 <HAL_RCCEx_PeriphCLKConfig+0x994>
  11059. }
  11060. else
  11061. {
  11062. /* set overall return value */
  11063. status = ret;
  11064. 80047b0: 7dfb ldrb r3, [r7, #23]
  11065. 80047b2: 75bb strb r3, [r7, #22]
  11066. }
  11067. }
  11068. /*---------------------------- LPTIM2 configuration -------------------------------*/
  11069. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2)
  11070. 80047b4: 687b ldr r3, [r7, #4]
  11071. 80047b6: 681b ldr r3, [r3, #0]
  11072. 80047b8: f003 0340 and.w r3, r3, #64 ; 0x40
  11073. 80047bc: 2b00 cmp r3, #0
  11074. 80047be: d04b beq.n 8004858 <HAL_RCCEx_PeriphCLKConfig+0xa38>
  11075. {
  11076. switch(PeriphClkInit->Lptim2ClockSelection)
  11077. 80047c0: 687b ldr r3, [r7, #4]
  11078. 80047c2: f8d3 3094 ldr.w r3, [r3, #148] ; 0x94
  11079. 80047c6: f5b3 5fa0 cmp.w r3, #5120 ; 0x1400
  11080. 80047ca: d02e beq.n 800482a <HAL_RCCEx_PeriphCLKConfig+0xa0a>
  11081. 80047cc: f5b3 5fa0 cmp.w r3, #5120 ; 0x1400
  11082. 80047d0: d828 bhi.n 8004824 <HAL_RCCEx_PeriphCLKConfig+0xa04>
  11083. 80047d2: f5b3 5f80 cmp.w r3, #4096 ; 0x1000
  11084. 80047d6: d02a beq.n 800482e <HAL_RCCEx_PeriphCLKConfig+0xa0e>
  11085. 80047d8: f5b3 5f80 cmp.w r3, #4096 ; 0x1000
  11086. 80047dc: d822 bhi.n 8004824 <HAL_RCCEx_PeriphCLKConfig+0xa04>
  11087. 80047de: f5b3 6f40 cmp.w r3, #3072 ; 0xc00
  11088. 80047e2: d026 beq.n 8004832 <HAL_RCCEx_PeriphCLKConfig+0xa12>
  11089. 80047e4: f5b3 6f40 cmp.w r3, #3072 ; 0xc00
  11090. 80047e8: d81c bhi.n 8004824 <HAL_RCCEx_PeriphCLKConfig+0xa04>
  11091. 80047ea: f5b3 6f00 cmp.w r3, #2048 ; 0x800
  11092. 80047ee: d010 beq.n 8004812 <HAL_RCCEx_PeriphCLKConfig+0x9f2>
  11093. 80047f0: f5b3 6f00 cmp.w r3, #2048 ; 0x800
  11094. 80047f4: d816 bhi.n 8004824 <HAL_RCCEx_PeriphCLKConfig+0xa04>
  11095. 80047f6: 2b00 cmp r3, #0
  11096. 80047f8: d01d beq.n 8004836 <HAL_RCCEx_PeriphCLKConfig+0xa16>
  11097. 80047fa: f5b3 6f80 cmp.w r3, #1024 ; 0x400
  11098. 80047fe: d111 bne.n 8004824 <HAL_RCCEx_PeriphCLKConfig+0xa04>
  11099. /* LPTIM2 clock source configuration done later after clock selection check */
  11100. break;
  11101. case RCC_LPTIM2CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM2*/
  11102. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_P_UPDATE);
  11103. 8004800: 687b ldr r3, [r7, #4]
  11104. 8004802: 3304 adds r3, #4
  11105. 8004804: 2100 movs r1, #0
  11106. 8004806: 4618 mov r0, r3
  11107. 8004808: f000 fa04 bl 8004c14 <RCCEx_PLL2_Config>
  11108. 800480c: 4603 mov r3, r0
  11109. 800480e: 75fb strb r3, [r7, #23]
  11110. /* LPTIM2 clock source configuration done later after clock selection check */
  11111. break;
  11112. 8004810: e012 b.n 8004838 <HAL_RCCEx_PeriphCLKConfig+0xa18>
  11113. case RCC_LPTIM2CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM2*/
  11114. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_R_UPDATE);
  11115. 8004812: 687b ldr r3, [r7, #4]
  11116. 8004814: 3324 adds r3, #36 ; 0x24
  11117. 8004816: 2102 movs r1, #2
  11118. 8004818: 4618 mov r0, r3
  11119. 800481a: f000 faad bl 8004d78 <RCCEx_PLL3_Config>
  11120. 800481e: 4603 mov r3, r0
  11121. 8004820: 75fb strb r3, [r7, #23]
  11122. /* LPTIM2 clock source configuration done later after clock selection check */
  11123. break;
  11124. 8004822: e009 b.n 8004838 <HAL_RCCEx_PeriphCLKConfig+0xa18>
  11125. /* HSI, HSE, or CSI oscillator is used as source of LPTIM2 clock */
  11126. /* LPTIM2 clock source configuration done later after clock selection check */
  11127. break;
  11128. default:
  11129. ret = HAL_ERROR;
  11130. 8004824: 2301 movs r3, #1
  11131. 8004826: 75fb strb r3, [r7, #23]
  11132. break;
  11133. 8004828: e006 b.n 8004838 <HAL_RCCEx_PeriphCLKConfig+0xa18>
  11134. break;
  11135. 800482a: bf00 nop
  11136. 800482c: e004 b.n 8004838 <HAL_RCCEx_PeriphCLKConfig+0xa18>
  11137. break;
  11138. 800482e: bf00 nop
  11139. 8004830: e002 b.n 8004838 <HAL_RCCEx_PeriphCLKConfig+0xa18>
  11140. break;
  11141. 8004832: bf00 nop
  11142. 8004834: e000 b.n 8004838 <HAL_RCCEx_PeriphCLKConfig+0xa18>
  11143. break;
  11144. 8004836: bf00 nop
  11145. }
  11146. if(ret == HAL_OK)
  11147. 8004838: 7dfb ldrb r3, [r7, #23]
  11148. 800483a: 2b00 cmp r3, #0
  11149. 800483c: d10a bne.n 8004854 <HAL_RCCEx_PeriphCLKConfig+0xa34>
  11150. {
  11151. /* Set the source of LPTIM2 clock*/
  11152. __HAL_RCC_LPTIM2_CONFIG(PeriphClkInit->Lptim2ClockSelection);
  11153. 800483e: 4b89 ldr r3, [pc, #548] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11154. 8004840: 6d9b ldr r3, [r3, #88] ; 0x58
  11155. 8004842: f423 52e0 bic.w r2, r3, #7168 ; 0x1c00
  11156. 8004846: 687b ldr r3, [r7, #4]
  11157. 8004848: f8d3 3094 ldr.w r3, [r3, #148] ; 0x94
  11158. 800484c: 4985 ldr r1, [pc, #532] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11159. 800484e: 4313 orrs r3, r2
  11160. 8004850: 658b str r3, [r1, #88] ; 0x58
  11161. 8004852: e001 b.n 8004858 <HAL_RCCEx_PeriphCLKConfig+0xa38>
  11162. }
  11163. else
  11164. {
  11165. /* set overall return value */
  11166. status = ret;
  11167. 8004854: 7dfb ldrb r3, [r7, #23]
  11168. 8004856: 75bb strb r3, [r7, #22]
  11169. }
  11170. }
  11171. /*---------------------------- LPTIM345 configuration -------------------------------*/
  11172. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM345) == RCC_PERIPHCLK_LPTIM345)
  11173. 8004858: 687b ldr r3, [r7, #4]
  11174. 800485a: 681b ldr r3, [r3, #0]
  11175. 800485c: f003 0380 and.w r3, r3, #128 ; 0x80
  11176. 8004860: 2b00 cmp r3, #0
  11177. 8004862: d04b beq.n 80048fc <HAL_RCCEx_PeriphCLKConfig+0xadc>
  11178. {
  11179. switch(PeriphClkInit->Lptim345ClockSelection)
  11180. 8004864: 687b ldr r3, [r7, #4]
  11181. 8004866: f8d3 3098 ldr.w r3, [r3, #152] ; 0x98
  11182. 800486a: f5b3 4f20 cmp.w r3, #40960 ; 0xa000
  11183. 800486e: d02e beq.n 80048ce <HAL_RCCEx_PeriphCLKConfig+0xaae>
  11184. 8004870: f5b3 4f20 cmp.w r3, #40960 ; 0xa000
  11185. 8004874: d828 bhi.n 80048c8 <HAL_RCCEx_PeriphCLKConfig+0xaa8>
  11186. 8004876: f5b3 4f00 cmp.w r3, #32768 ; 0x8000
  11187. 800487a: d02a beq.n 80048d2 <HAL_RCCEx_PeriphCLKConfig+0xab2>
  11188. 800487c: f5b3 4f00 cmp.w r3, #32768 ; 0x8000
  11189. 8004880: d822 bhi.n 80048c8 <HAL_RCCEx_PeriphCLKConfig+0xaa8>
  11190. 8004882: f5b3 4fc0 cmp.w r3, #24576 ; 0x6000
  11191. 8004886: d026 beq.n 80048d6 <HAL_RCCEx_PeriphCLKConfig+0xab6>
  11192. 8004888: f5b3 4fc0 cmp.w r3, #24576 ; 0x6000
  11193. 800488c: d81c bhi.n 80048c8 <HAL_RCCEx_PeriphCLKConfig+0xaa8>
  11194. 800488e: f5b3 4f80 cmp.w r3, #16384 ; 0x4000
  11195. 8004892: d010 beq.n 80048b6 <HAL_RCCEx_PeriphCLKConfig+0xa96>
  11196. 8004894: f5b3 4f80 cmp.w r3, #16384 ; 0x4000
  11197. 8004898: d816 bhi.n 80048c8 <HAL_RCCEx_PeriphCLKConfig+0xaa8>
  11198. 800489a: 2b00 cmp r3, #0
  11199. 800489c: d01d beq.n 80048da <HAL_RCCEx_PeriphCLKConfig+0xaba>
  11200. 800489e: f5b3 5f00 cmp.w r3, #8192 ; 0x2000
  11201. 80048a2: d111 bne.n 80048c8 <HAL_RCCEx_PeriphCLKConfig+0xaa8>
  11202. case RCC_LPTIM345CLKSOURCE_PCLK4: /* SRD/D3 PCLK1 (PCLK4) as clock source for LPTIM3/4/5 */
  11203. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  11204. break;
  11205. case RCC_LPTIM345CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM3/4/5 */
  11206. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_P_UPDATE);
  11207. 80048a4: 687b ldr r3, [r7, #4]
  11208. 80048a6: 3304 adds r3, #4
  11209. 80048a8: 2100 movs r1, #0
  11210. 80048aa: 4618 mov r0, r3
  11211. 80048ac: f000 f9b2 bl 8004c14 <RCCEx_PLL2_Config>
  11212. 80048b0: 4603 mov r3, r0
  11213. 80048b2: 75fb strb r3, [r7, #23]
  11214. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  11215. break;
  11216. 80048b4: e012 b.n 80048dc <HAL_RCCEx_PeriphCLKConfig+0xabc>
  11217. case RCC_LPTIM345CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM3/4/5 */
  11218. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_R_UPDATE);
  11219. 80048b6: 687b ldr r3, [r7, #4]
  11220. 80048b8: 3324 adds r3, #36 ; 0x24
  11221. 80048ba: 2102 movs r1, #2
  11222. 80048bc: 4618 mov r0, r3
  11223. 80048be: f000 fa5b bl 8004d78 <RCCEx_PLL3_Config>
  11224. 80048c2: 4603 mov r3, r0
  11225. 80048c4: 75fb strb r3, [r7, #23]
  11226. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  11227. break;
  11228. 80048c6: e009 b.n 80048dc <HAL_RCCEx_PeriphCLKConfig+0xabc>
  11229. /* HSI, HSE, or CSI oscillator is used as source of LPTIM3/4/5 clock */
  11230. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  11231. break;
  11232. default:
  11233. ret = HAL_ERROR;
  11234. 80048c8: 2301 movs r3, #1
  11235. 80048ca: 75fb strb r3, [r7, #23]
  11236. break;
  11237. 80048cc: e006 b.n 80048dc <HAL_RCCEx_PeriphCLKConfig+0xabc>
  11238. break;
  11239. 80048ce: bf00 nop
  11240. 80048d0: e004 b.n 80048dc <HAL_RCCEx_PeriphCLKConfig+0xabc>
  11241. break;
  11242. 80048d2: bf00 nop
  11243. 80048d4: e002 b.n 80048dc <HAL_RCCEx_PeriphCLKConfig+0xabc>
  11244. break;
  11245. 80048d6: bf00 nop
  11246. 80048d8: e000 b.n 80048dc <HAL_RCCEx_PeriphCLKConfig+0xabc>
  11247. break;
  11248. 80048da: bf00 nop
  11249. }
  11250. if(ret == HAL_OK)
  11251. 80048dc: 7dfb ldrb r3, [r7, #23]
  11252. 80048de: 2b00 cmp r3, #0
  11253. 80048e0: d10a bne.n 80048f8 <HAL_RCCEx_PeriphCLKConfig+0xad8>
  11254. {
  11255. /* Set the source of LPTIM3/4/5 clock */
  11256. __HAL_RCC_LPTIM345_CONFIG(PeriphClkInit->Lptim345ClockSelection);
  11257. 80048e2: 4b60 ldr r3, [pc, #384] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11258. 80048e4: 6d9b ldr r3, [r3, #88] ; 0x58
  11259. 80048e6: f423 4260 bic.w r2, r3, #57344 ; 0xe000
  11260. 80048ea: 687b ldr r3, [r7, #4]
  11261. 80048ec: f8d3 3098 ldr.w r3, [r3, #152] ; 0x98
  11262. 80048f0: 495c ldr r1, [pc, #368] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11263. 80048f2: 4313 orrs r3, r2
  11264. 80048f4: 658b str r3, [r1, #88] ; 0x58
  11265. 80048f6: e001 b.n 80048fc <HAL_RCCEx_PeriphCLKConfig+0xadc>
  11266. }
  11267. else
  11268. {
  11269. /* set overall return value */
  11270. status = ret;
  11271. 80048f8: 7dfb ldrb r3, [r7, #23]
  11272. 80048fa: 75bb strb r3, [r7, #22]
  11273. }
  11274. }
  11275. /*------------------------------ I2C1/2/3/5* Configuration ------------------------*/
  11276. #if defined(I2C5)
  11277. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C1235) == RCC_PERIPHCLK_I2C1235)
  11278. 80048fc: 687b ldr r3, [r7, #4]
  11279. 80048fe: 681b ldr r3, [r3, #0]
  11280. 8004900: f003 0308 and.w r3, r3, #8
  11281. 8004904: 2b00 cmp r3, #0
  11282. 8004906: d018 beq.n 800493a <HAL_RCCEx_PeriphCLKConfig+0xb1a>
  11283. {
  11284. /* Check the parameters */
  11285. assert_param(IS_RCC_I2C1235CLKSOURCE(PeriphClkInit->I2c1235ClockSelection));
  11286. if ((PeriphClkInit->I2c1235ClockSelection )== RCC_I2C1235CLKSOURCE_PLL3 )
  11287. 8004908: 687b ldr r3, [r7, #4]
  11288. 800490a: 6fdb ldr r3, [r3, #124] ; 0x7c
  11289. 800490c: f5b3 5f80 cmp.w r3, #4096 ; 0x1000
  11290. 8004910: d10a bne.n 8004928 <HAL_RCCEx_PeriphCLKConfig+0xb08>
  11291. {
  11292. if(RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_R_UPDATE)!= HAL_OK)
  11293. 8004912: 687b ldr r3, [r7, #4]
  11294. 8004914: 3324 adds r3, #36 ; 0x24
  11295. 8004916: 2102 movs r1, #2
  11296. 8004918: 4618 mov r0, r3
  11297. 800491a: f000 fa2d bl 8004d78 <RCCEx_PLL3_Config>
  11298. 800491e: 4603 mov r3, r0
  11299. 8004920: 2b00 cmp r3, #0
  11300. 8004922: d001 beq.n 8004928 <HAL_RCCEx_PeriphCLKConfig+0xb08>
  11301. {
  11302. status = HAL_ERROR;
  11303. 8004924: 2301 movs r3, #1
  11304. 8004926: 75bb strb r3, [r7, #22]
  11305. }
  11306. }
  11307. __HAL_RCC_I2C1235_CONFIG(PeriphClkInit->I2c1235ClockSelection);
  11308. 8004928: 4b4e ldr r3, [pc, #312] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11309. 800492a: 6d5b ldr r3, [r3, #84] ; 0x54
  11310. 800492c: f423 5240 bic.w r2, r3, #12288 ; 0x3000
  11311. 8004930: 687b ldr r3, [r7, #4]
  11312. 8004932: 6fdb ldr r3, [r3, #124] ; 0x7c
  11313. 8004934: 494b ldr r1, [pc, #300] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11314. 8004936: 4313 orrs r3, r2
  11315. 8004938: 654b str r3, [r1, #84] ; 0x54
  11316. }
  11317. #endif /* I2C5 */
  11318. /*------------------------------ I2C4 Configuration ------------------------*/
  11319. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C4) == RCC_PERIPHCLK_I2C4)
  11320. 800493a: 687b ldr r3, [r7, #4]
  11321. 800493c: 681b ldr r3, [r3, #0]
  11322. 800493e: f003 0310 and.w r3, r3, #16
  11323. 8004942: 2b00 cmp r3, #0
  11324. 8004944: d01a beq.n 800497c <HAL_RCCEx_PeriphCLKConfig+0xb5c>
  11325. {
  11326. /* Check the parameters */
  11327. assert_param(IS_RCC_I2C4CLKSOURCE(PeriphClkInit->I2c4ClockSelection));
  11328. if ((PeriphClkInit->I2c4ClockSelection) == RCC_I2C4CLKSOURCE_PLL3 )
  11329. 8004946: 687b ldr r3, [r7, #4]
  11330. 8004948: f8d3 3090 ldr.w r3, [r3, #144] ; 0x90
  11331. 800494c: f5b3 7f80 cmp.w r3, #256 ; 0x100
  11332. 8004950: d10a bne.n 8004968 <HAL_RCCEx_PeriphCLKConfig+0xb48>
  11333. {
  11334. if(RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_R_UPDATE)!= HAL_OK)
  11335. 8004952: 687b ldr r3, [r7, #4]
  11336. 8004954: 3324 adds r3, #36 ; 0x24
  11337. 8004956: 2102 movs r1, #2
  11338. 8004958: 4618 mov r0, r3
  11339. 800495a: f000 fa0d bl 8004d78 <RCCEx_PLL3_Config>
  11340. 800495e: 4603 mov r3, r0
  11341. 8004960: 2b00 cmp r3, #0
  11342. 8004962: d001 beq.n 8004968 <HAL_RCCEx_PeriphCLKConfig+0xb48>
  11343. {
  11344. status = HAL_ERROR;
  11345. 8004964: 2301 movs r3, #1
  11346. 8004966: 75bb strb r3, [r7, #22]
  11347. }
  11348. }
  11349. __HAL_RCC_I2C4_CONFIG(PeriphClkInit->I2c4ClockSelection);
  11350. 8004968: 4b3e ldr r3, [pc, #248] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11351. 800496a: 6d9b ldr r3, [r3, #88] ; 0x58
  11352. 800496c: f423 7240 bic.w r2, r3, #768 ; 0x300
  11353. 8004970: 687b ldr r3, [r7, #4]
  11354. 8004972: f8d3 3090 ldr.w r3, [r3, #144] ; 0x90
  11355. 8004976: 493b ldr r1, [pc, #236] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11356. 8004978: 4313 orrs r3, r2
  11357. 800497a: 658b str r3, [r1, #88] ; 0x58
  11358. }
  11359. /*---------------------------- ADC configuration -------------------------------*/
  11360. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC)
  11361. 800497c: 687b ldr r3, [r7, #4]
  11362. 800497e: 681b ldr r3, [r3, #0]
  11363. 8004980: f403 2300 and.w r3, r3, #524288 ; 0x80000
  11364. 8004984: 2b00 cmp r3, #0
  11365. 8004986: d034 beq.n 80049f2 <HAL_RCCEx_PeriphCLKConfig+0xbd2>
  11366. {
  11367. switch(PeriphClkInit->AdcClockSelection)
  11368. 8004988: 687b ldr r3, [r7, #4]
  11369. 800498a: f8d3 309c ldr.w r3, [r3, #156] ; 0x9c
  11370. 800498e: f5b3 3f00 cmp.w r3, #131072 ; 0x20000
  11371. 8004992: d01d beq.n 80049d0 <HAL_RCCEx_PeriphCLKConfig+0xbb0>
  11372. 8004994: f5b3 3f00 cmp.w r3, #131072 ; 0x20000
  11373. 8004998: d817 bhi.n 80049ca <HAL_RCCEx_PeriphCLKConfig+0xbaa>
  11374. 800499a: 2b00 cmp r3, #0
  11375. 800499c: d003 beq.n 80049a6 <HAL_RCCEx_PeriphCLKConfig+0xb86>
  11376. 800499e: f5b3 3f80 cmp.w r3, #65536 ; 0x10000
  11377. 80049a2: d009 beq.n 80049b8 <HAL_RCCEx_PeriphCLKConfig+0xb98>
  11378. 80049a4: e011 b.n 80049ca <HAL_RCCEx_PeriphCLKConfig+0xbaa>
  11379. {
  11380. case RCC_ADCCLKSOURCE_PLL2: /* PLL2 is used as clock source for ADC*/
  11381. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_P_UPDATE);
  11382. 80049a6: 687b ldr r3, [r7, #4]
  11383. 80049a8: 3304 adds r3, #4
  11384. 80049aa: 2100 movs r1, #0
  11385. 80049ac: 4618 mov r0, r3
  11386. 80049ae: f000 f931 bl 8004c14 <RCCEx_PLL2_Config>
  11387. 80049b2: 4603 mov r3, r0
  11388. 80049b4: 75fb strb r3, [r7, #23]
  11389. /* ADC clock source configuration done later after clock selection check */
  11390. break;
  11391. 80049b6: e00c b.n 80049d2 <HAL_RCCEx_PeriphCLKConfig+0xbb2>
  11392. case RCC_ADCCLKSOURCE_PLL3: /* PLL3 is used as clock source for ADC*/
  11393. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_R_UPDATE);
  11394. 80049b8: 687b ldr r3, [r7, #4]
  11395. 80049ba: 3324 adds r3, #36 ; 0x24
  11396. 80049bc: 2102 movs r1, #2
  11397. 80049be: 4618 mov r0, r3
  11398. 80049c0: f000 f9da bl 8004d78 <RCCEx_PLL3_Config>
  11399. 80049c4: 4603 mov r3, r0
  11400. 80049c6: 75fb strb r3, [r7, #23]
  11401. /* ADC clock source configuration done later after clock selection check */
  11402. break;
  11403. 80049c8: e003 b.n 80049d2 <HAL_RCCEx_PeriphCLKConfig+0xbb2>
  11404. /* HSI, HSE, or CSI oscillator is used as source of ADC clock */
  11405. /* ADC clock source configuration done later after clock selection check */
  11406. break;
  11407. default:
  11408. ret = HAL_ERROR;
  11409. 80049ca: 2301 movs r3, #1
  11410. 80049cc: 75fb strb r3, [r7, #23]
  11411. break;
  11412. 80049ce: e000 b.n 80049d2 <HAL_RCCEx_PeriphCLKConfig+0xbb2>
  11413. break;
  11414. 80049d0: bf00 nop
  11415. }
  11416. if(ret == HAL_OK)
  11417. 80049d2: 7dfb ldrb r3, [r7, #23]
  11418. 80049d4: 2b00 cmp r3, #0
  11419. 80049d6: d10a bne.n 80049ee <HAL_RCCEx_PeriphCLKConfig+0xbce>
  11420. {
  11421. /* Set the source of ADC clock*/
  11422. __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection);
  11423. 80049d8: 4b22 ldr r3, [pc, #136] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11424. 80049da: 6d9b ldr r3, [r3, #88] ; 0x58
  11425. 80049dc: f423 3240 bic.w r2, r3, #196608 ; 0x30000
  11426. 80049e0: 687b ldr r3, [r7, #4]
  11427. 80049e2: f8d3 309c ldr.w r3, [r3, #156] ; 0x9c
  11428. 80049e6: 491f ldr r1, [pc, #124] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11429. 80049e8: 4313 orrs r3, r2
  11430. 80049ea: 658b str r3, [r1, #88] ; 0x58
  11431. 80049ec: e001 b.n 80049f2 <HAL_RCCEx_PeriphCLKConfig+0xbd2>
  11432. }
  11433. else
  11434. {
  11435. /* set overall return value */
  11436. status = ret;
  11437. 80049ee: 7dfb ldrb r3, [r7, #23]
  11438. 80049f0: 75bb strb r3, [r7, #22]
  11439. }
  11440. }
  11441. /*------------------------------ USB Configuration -------------------------*/
  11442. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB)
  11443. 80049f2: 687b ldr r3, [r7, #4]
  11444. 80049f4: 681b ldr r3, [r3, #0]
  11445. 80049f6: f403 2380 and.w r3, r3, #262144 ; 0x40000
  11446. 80049fa: 2b00 cmp r3, #0
  11447. 80049fc: d036 beq.n 8004a6c <HAL_RCCEx_PeriphCLKConfig+0xc4c>
  11448. {
  11449. switch(PeriphClkInit->UsbClockSelection)
  11450. 80049fe: 687b ldr r3, [r7, #4]
  11451. 8004a00: f8d3 3080 ldr.w r3, [r3, #128] ; 0x80
  11452. 8004a04: f5b3 1f40 cmp.w r3, #3145728 ; 0x300000
  11453. 8004a08: d01c beq.n 8004a44 <HAL_RCCEx_PeriphCLKConfig+0xc24>
  11454. 8004a0a: f5b3 1f40 cmp.w r3, #3145728 ; 0x300000
  11455. 8004a0e: d816 bhi.n 8004a3e <HAL_RCCEx_PeriphCLKConfig+0xc1e>
  11456. 8004a10: f5b3 1f80 cmp.w r3, #1048576 ; 0x100000
  11457. 8004a14: d003 beq.n 8004a1e <HAL_RCCEx_PeriphCLKConfig+0xbfe>
  11458. 8004a16: f5b3 1f00 cmp.w r3, #2097152 ; 0x200000
  11459. 8004a1a: d007 beq.n 8004a2c <HAL_RCCEx_PeriphCLKConfig+0xc0c>
  11460. 8004a1c: e00f b.n 8004a3e <HAL_RCCEx_PeriphCLKConfig+0xc1e>
  11461. {
  11462. case RCC_USBCLKSOURCE_PLL: /* PLL is used as clock source for USB*/
  11463. /* Enable USB Clock output generated form System USB . */
  11464. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  11465. 8004a1e: 4b11 ldr r3, [pc, #68] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11466. 8004a20: 6adb ldr r3, [r3, #44] ; 0x2c
  11467. 8004a22: 4a10 ldr r2, [pc, #64] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11468. 8004a24: f443 3300 orr.w r3, r3, #131072 ; 0x20000
  11469. 8004a28: 62d3 str r3, [r2, #44] ; 0x2c
  11470. /* USB clock source configuration done later after clock selection check */
  11471. break;
  11472. 8004a2a: e00c b.n 8004a46 <HAL_RCCEx_PeriphCLKConfig+0xc26>
  11473. case RCC_USBCLKSOURCE_PLL3: /* PLL3 is used as clock source for USB*/
  11474. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_Q_UPDATE);
  11475. 8004a2c: 687b ldr r3, [r7, #4]
  11476. 8004a2e: 3324 adds r3, #36 ; 0x24
  11477. 8004a30: 2101 movs r1, #1
  11478. 8004a32: 4618 mov r0, r3
  11479. 8004a34: f000 f9a0 bl 8004d78 <RCCEx_PLL3_Config>
  11480. 8004a38: 4603 mov r3, r0
  11481. 8004a3a: 75fb strb r3, [r7, #23]
  11482. /* USB clock source configuration done later after clock selection check */
  11483. break;
  11484. 8004a3c: e003 b.n 8004a46 <HAL_RCCEx_PeriphCLKConfig+0xc26>
  11485. /* HSI48 oscillator is used as source of USB clock */
  11486. /* USB clock source configuration done later after clock selection check */
  11487. break;
  11488. default:
  11489. ret = HAL_ERROR;
  11490. 8004a3e: 2301 movs r3, #1
  11491. 8004a40: 75fb strb r3, [r7, #23]
  11492. break;
  11493. 8004a42: e000 b.n 8004a46 <HAL_RCCEx_PeriphCLKConfig+0xc26>
  11494. break;
  11495. 8004a44: bf00 nop
  11496. }
  11497. if(ret == HAL_OK)
  11498. 8004a46: 7dfb ldrb r3, [r7, #23]
  11499. 8004a48: 2b00 cmp r3, #0
  11500. 8004a4a: d10d bne.n 8004a68 <HAL_RCCEx_PeriphCLKConfig+0xc48>
  11501. {
  11502. /* Set the source of USB clock*/
  11503. __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection);
  11504. 8004a4c: 4b05 ldr r3, [pc, #20] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11505. 8004a4e: 6d5b ldr r3, [r3, #84] ; 0x54
  11506. 8004a50: f423 1240 bic.w r2, r3, #3145728 ; 0x300000
  11507. 8004a54: 687b ldr r3, [r7, #4]
  11508. 8004a56: f8d3 3080 ldr.w r3, [r3, #128] ; 0x80
  11509. 8004a5a: 4902 ldr r1, [pc, #8] ; (8004a64 <HAL_RCCEx_PeriphCLKConfig+0xc44>)
  11510. 8004a5c: 4313 orrs r3, r2
  11511. 8004a5e: 654b str r3, [r1, #84] ; 0x54
  11512. 8004a60: e004 b.n 8004a6c <HAL_RCCEx_PeriphCLKConfig+0xc4c>
  11513. 8004a62: bf00 nop
  11514. 8004a64: 58024400 .word 0x58024400
  11515. }
  11516. else
  11517. {
  11518. /* set overall return value */
  11519. status = ret;
  11520. 8004a68: 7dfb ldrb r3, [r7, #23]
  11521. 8004a6a: 75bb strb r3, [r7, #22]
  11522. }
  11523. }
  11524. /*------------------------------------- SDMMC Configuration ------------------------------------*/
  11525. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDMMC) == RCC_PERIPHCLK_SDMMC)
  11526. 8004a6c: 687b ldr r3, [r7, #4]
  11527. 8004a6e: 681b ldr r3, [r3, #0]
  11528. 8004a70: f403 3380 and.w r3, r3, #65536 ; 0x10000
  11529. 8004a74: 2b00 cmp r3, #0
  11530. 8004a76: d029 beq.n 8004acc <HAL_RCCEx_PeriphCLKConfig+0xcac>
  11531. {
  11532. /* Check the parameters */
  11533. assert_param(IS_RCC_SDMMC(PeriphClkInit->SdmmcClockSelection));
  11534. switch(PeriphClkInit->SdmmcClockSelection)
  11535. 8004a78: 687b ldr r3, [r7, #4]
  11536. 8004a7a: 6cdb ldr r3, [r3, #76] ; 0x4c
  11537. 8004a7c: 2b00 cmp r3, #0
  11538. 8004a7e: d003 beq.n 8004a88 <HAL_RCCEx_PeriphCLKConfig+0xc68>
  11539. 8004a80: f5b3 3f80 cmp.w r3, #65536 ; 0x10000
  11540. 8004a84: d007 beq.n 8004a96 <HAL_RCCEx_PeriphCLKConfig+0xc76>
  11541. 8004a86: e00f b.n 8004aa8 <HAL_RCCEx_PeriphCLKConfig+0xc88>
  11542. {
  11543. case RCC_SDMMCCLKSOURCE_PLL: /* PLL is used as clock source for SDMMC*/
  11544. /* Enable SDMMC Clock output generated form System PLL . */
  11545. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  11546. 8004a88: 4b61 ldr r3, [pc, #388] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11547. 8004a8a: 6adb ldr r3, [r3, #44] ; 0x2c
  11548. 8004a8c: 4a60 ldr r2, [pc, #384] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11549. 8004a8e: f443 3300 orr.w r3, r3, #131072 ; 0x20000
  11550. 8004a92: 62d3 str r3, [r2, #44] ; 0x2c
  11551. /* SDMMC clock source configuration done later after clock selection check */
  11552. break;
  11553. 8004a94: e00b b.n 8004aae <HAL_RCCEx_PeriphCLKConfig+0xc8e>
  11554. case RCC_SDMMCCLKSOURCE_PLL2: /* PLL2 is used as clock source for SDMMC*/
  11555. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2),DIVIDER_R_UPDATE);
  11556. 8004a96: 687b ldr r3, [r7, #4]
  11557. 8004a98: 3304 adds r3, #4
  11558. 8004a9a: 2102 movs r1, #2
  11559. 8004a9c: 4618 mov r0, r3
  11560. 8004a9e: f000 f8b9 bl 8004c14 <RCCEx_PLL2_Config>
  11561. 8004aa2: 4603 mov r3, r0
  11562. 8004aa4: 75fb strb r3, [r7, #23]
  11563. /* SDMMC clock source configuration done later after clock selection check */
  11564. break;
  11565. 8004aa6: e002 b.n 8004aae <HAL_RCCEx_PeriphCLKConfig+0xc8e>
  11566. default:
  11567. ret = HAL_ERROR;
  11568. 8004aa8: 2301 movs r3, #1
  11569. 8004aaa: 75fb strb r3, [r7, #23]
  11570. break;
  11571. 8004aac: bf00 nop
  11572. }
  11573. if(ret == HAL_OK)
  11574. 8004aae: 7dfb ldrb r3, [r7, #23]
  11575. 8004ab0: 2b00 cmp r3, #0
  11576. 8004ab2: d109 bne.n 8004ac8 <HAL_RCCEx_PeriphCLKConfig+0xca8>
  11577. {
  11578. /* Set the source of SDMMC clock*/
  11579. __HAL_RCC_SDMMC_CONFIG(PeriphClkInit->SdmmcClockSelection);
  11580. 8004ab4: 4b56 ldr r3, [pc, #344] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11581. 8004ab6: 6cdb ldr r3, [r3, #76] ; 0x4c
  11582. 8004ab8: f423 3280 bic.w r2, r3, #65536 ; 0x10000
  11583. 8004abc: 687b ldr r3, [r7, #4]
  11584. 8004abe: 6cdb ldr r3, [r3, #76] ; 0x4c
  11585. 8004ac0: 4953 ldr r1, [pc, #332] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11586. 8004ac2: 4313 orrs r3, r2
  11587. 8004ac4: 64cb str r3, [r1, #76] ; 0x4c
  11588. 8004ac6: e001 b.n 8004acc <HAL_RCCEx_PeriphCLKConfig+0xcac>
  11589. }
  11590. else
  11591. {
  11592. /* set overall return value */
  11593. status = ret;
  11594. 8004ac8: 7dfb ldrb r3, [r7, #23]
  11595. 8004aca: 75bb strb r3, [r7, #22]
  11596. }
  11597. }
  11598. #if defined(LTDC)
  11599. /*-------------------------------------- LTDC Configuration -----------------------------------*/
  11600. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LTDC) == RCC_PERIPHCLK_LTDC)
  11601. 8004acc: 687b ldr r3, [r7, #4]
  11602. 8004ace: 681b ldr r3, [r3, #0]
  11603. 8004ad0: f003 5300 and.w r3, r3, #536870912 ; 0x20000000
  11604. 8004ad4: 2b00 cmp r3, #0
  11605. 8004ad6: d00a beq.n 8004aee <HAL_RCCEx_PeriphCLKConfig+0xcce>
  11606. {
  11607. if(RCCEx_PLL3_Config(&(PeriphClkInit->PLL3),DIVIDER_R_UPDATE)!=HAL_OK)
  11608. 8004ad8: 687b ldr r3, [r7, #4]
  11609. 8004ada: 3324 adds r3, #36 ; 0x24
  11610. 8004adc: 2102 movs r1, #2
  11611. 8004ade: 4618 mov r0, r3
  11612. 8004ae0: f000 f94a bl 8004d78 <RCCEx_PLL3_Config>
  11613. 8004ae4: 4603 mov r3, r0
  11614. 8004ae6: 2b00 cmp r3, #0
  11615. 8004ae8: d001 beq.n 8004aee <HAL_RCCEx_PeriphCLKConfig+0xcce>
  11616. {
  11617. status=HAL_ERROR;
  11618. 8004aea: 2301 movs r3, #1
  11619. 8004aec: 75bb strb r3, [r7, #22]
  11620. }
  11621. }
  11622. #endif /* LTDC */
  11623. /*------------------------------ RNG Configuration -------------------------*/
  11624. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG)
  11625. 8004aee: 687b ldr r3, [r7, #4]
  11626. 8004af0: 681b ldr r3, [r3, #0]
  11627. 8004af2: f403 3300 and.w r3, r3, #131072 ; 0x20000
  11628. 8004af6: 2b00 cmp r3, #0
  11629. 8004af8: d030 beq.n 8004b5c <HAL_RCCEx_PeriphCLKConfig+0xd3c>
  11630. {
  11631. switch(PeriphClkInit->RngClockSelection)
  11632. 8004afa: 687b ldr r3, [r7, #4]
  11633. 8004afc: 6f9b ldr r3, [r3, #120] ; 0x78
  11634. 8004afe: f5b3 7f40 cmp.w r3, #768 ; 0x300
  11635. 8004b02: d017 beq.n 8004b34 <HAL_RCCEx_PeriphCLKConfig+0xd14>
  11636. 8004b04: f5b3 7f40 cmp.w r3, #768 ; 0x300
  11637. 8004b08: d811 bhi.n 8004b2e <HAL_RCCEx_PeriphCLKConfig+0xd0e>
  11638. 8004b0a: f5b3 7f00 cmp.w r3, #512 ; 0x200
  11639. 8004b0e: d013 beq.n 8004b38 <HAL_RCCEx_PeriphCLKConfig+0xd18>
  11640. 8004b10: f5b3 7f00 cmp.w r3, #512 ; 0x200
  11641. 8004b14: d80b bhi.n 8004b2e <HAL_RCCEx_PeriphCLKConfig+0xd0e>
  11642. 8004b16: 2b00 cmp r3, #0
  11643. 8004b18: d010 beq.n 8004b3c <HAL_RCCEx_PeriphCLKConfig+0xd1c>
  11644. 8004b1a: f5b3 7f80 cmp.w r3, #256 ; 0x100
  11645. 8004b1e: d106 bne.n 8004b2e <HAL_RCCEx_PeriphCLKConfig+0xd0e>
  11646. {
  11647. case RCC_RNGCLKSOURCE_PLL: /* PLL is used as clock source for RNG*/
  11648. /* Enable RNG Clock output generated form System RNG . */
  11649. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  11650. 8004b20: 4b3b ldr r3, [pc, #236] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11651. 8004b22: 6adb ldr r3, [r3, #44] ; 0x2c
  11652. 8004b24: 4a3a ldr r2, [pc, #232] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11653. 8004b26: f443 3300 orr.w r3, r3, #131072 ; 0x20000
  11654. 8004b2a: 62d3 str r3, [r2, #44] ; 0x2c
  11655. /* RNG clock source configuration done later after clock selection check */
  11656. break;
  11657. 8004b2c: e007 b.n 8004b3e <HAL_RCCEx_PeriphCLKConfig+0xd1e>
  11658. /* HSI48 oscillator is used as source of RNG clock */
  11659. /* RNG clock source configuration done later after clock selection check */
  11660. break;
  11661. default:
  11662. ret = HAL_ERROR;
  11663. 8004b2e: 2301 movs r3, #1
  11664. 8004b30: 75fb strb r3, [r7, #23]
  11665. break;
  11666. 8004b32: e004 b.n 8004b3e <HAL_RCCEx_PeriphCLKConfig+0xd1e>
  11667. break;
  11668. 8004b34: bf00 nop
  11669. 8004b36: e002 b.n 8004b3e <HAL_RCCEx_PeriphCLKConfig+0xd1e>
  11670. break;
  11671. 8004b38: bf00 nop
  11672. 8004b3a: e000 b.n 8004b3e <HAL_RCCEx_PeriphCLKConfig+0xd1e>
  11673. break;
  11674. 8004b3c: bf00 nop
  11675. }
  11676. if(ret == HAL_OK)
  11677. 8004b3e: 7dfb ldrb r3, [r7, #23]
  11678. 8004b40: 2b00 cmp r3, #0
  11679. 8004b42: d109 bne.n 8004b58 <HAL_RCCEx_PeriphCLKConfig+0xd38>
  11680. {
  11681. /* Set the source of RNG clock*/
  11682. __HAL_RCC_RNG_CONFIG(PeriphClkInit->RngClockSelection);
  11683. 8004b44: 4b32 ldr r3, [pc, #200] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11684. 8004b46: 6d5b ldr r3, [r3, #84] ; 0x54
  11685. 8004b48: f423 7240 bic.w r2, r3, #768 ; 0x300
  11686. 8004b4c: 687b ldr r3, [r7, #4]
  11687. 8004b4e: 6f9b ldr r3, [r3, #120] ; 0x78
  11688. 8004b50: 492f ldr r1, [pc, #188] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11689. 8004b52: 4313 orrs r3, r2
  11690. 8004b54: 654b str r3, [r1, #84] ; 0x54
  11691. 8004b56: e001 b.n 8004b5c <HAL_RCCEx_PeriphCLKConfig+0xd3c>
  11692. }
  11693. else
  11694. {
  11695. /* set overall return value */
  11696. status = ret;
  11697. 8004b58: 7dfb ldrb r3, [r7, #23]
  11698. 8004b5a: 75bb strb r3, [r7, #22]
  11699. }
  11700. }
  11701. /*------------------------------ SWPMI1 Configuration ------------------------*/
  11702. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SWPMI1) == RCC_PERIPHCLK_SWPMI1)
  11703. 8004b5c: 687b ldr r3, [r7, #4]
  11704. 8004b5e: 681b ldr r3, [r3, #0]
  11705. 8004b60: f403 1380 and.w r3, r3, #1048576 ; 0x100000
  11706. 8004b64: 2b00 cmp r3, #0
  11707. 8004b66: d008 beq.n 8004b7a <HAL_RCCEx_PeriphCLKConfig+0xd5a>
  11708. {
  11709. /* Check the parameters */
  11710. assert_param(IS_RCC_SWPMI1CLKSOURCE(PeriphClkInit->Swpmi1ClockSelection));
  11711. /* Configure the SWPMI1 interface clock source */
  11712. __HAL_RCC_SWPMI1_CONFIG(PeriphClkInit->Swpmi1ClockSelection);
  11713. 8004b68: 4b29 ldr r3, [pc, #164] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11714. 8004b6a: 6d1b ldr r3, [r3, #80] ; 0x50
  11715. 8004b6c: f023 4200 bic.w r2, r3, #2147483648 ; 0x80000000
  11716. 8004b70: 687b ldr r3, [r7, #4]
  11717. 8004b72: 6edb ldr r3, [r3, #108] ; 0x6c
  11718. 8004b74: 4926 ldr r1, [pc, #152] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11719. 8004b76: 4313 orrs r3, r2
  11720. 8004b78: 650b str r3, [r1, #80] ; 0x50
  11721. /* Configure the HRTIM1 clock source */
  11722. __HAL_RCC_HRTIM1_CONFIG(PeriphClkInit->Hrtim1ClockSelection);
  11723. }
  11724. #endif /*HRTIM1*/
  11725. /*------------------------------ DFSDM1 Configuration ------------------------*/
  11726. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1)
  11727. 8004b7a: 687b ldr r3, [r7, #4]
  11728. 8004b7c: 681b ldr r3, [r3, #0]
  11729. 8004b7e: f403 1300 and.w r3, r3, #2097152 ; 0x200000
  11730. 8004b82: 2b00 cmp r3, #0
  11731. 8004b84: d008 beq.n 8004b98 <HAL_RCCEx_PeriphCLKConfig+0xd78>
  11732. {
  11733. /* Check the parameters */
  11734. assert_param(IS_RCC_DFSDM1CLKSOURCE(PeriphClkInit->Dfsdm1ClockSelection));
  11735. /* Configure the DFSDM1 interface clock source */
  11736. __HAL_RCC_DFSDM1_CONFIG(PeriphClkInit->Dfsdm1ClockSelection);
  11737. 8004b86: 4b22 ldr r3, [pc, #136] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11738. 8004b88: 6d1b ldr r3, [r3, #80] ; 0x50
  11739. 8004b8a: f023 7280 bic.w r2, r3, #16777216 ; 0x1000000
  11740. 8004b8e: 687b ldr r3, [r7, #4]
  11741. 8004b90: 6e5b ldr r3, [r3, #100] ; 0x64
  11742. 8004b92: 491f ldr r1, [pc, #124] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11743. 8004b94: 4313 orrs r3, r2
  11744. 8004b96: 650b str r3, [r1, #80] ; 0x50
  11745. __HAL_RCC_DFSDM2_CONFIG(PeriphClkInit->Dfsdm2ClockSelection);
  11746. }
  11747. #endif /* DFSDM2 */
  11748. /*------------------------------------ TIM configuration --------------------------------------*/
  11749. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == RCC_PERIPHCLK_TIM)
  11750. 8004b98: 687b ldr r3, [r7, #4]
  11751. 8004b9a: 681b ldr r3, [r3, #0]
  11752. 8004b9c: f003 4380 and.w r3, r3, #1073741824 ; 0x40000000
  11753. 8004ba0: 2b00 cmp r3, #0
  11754. 8004ba2: d00d beq.n 8004bc0 <HAL_RCCEx_PeriphCLKConfig+0xda0>
  11755. {
  11756. /* Check the parameters */
  11757. assert_param(IS_RCC_TIMPRES(PeriphClkInit->TIMPresSelection));
  11758. /* Configure Timer Prescaler */
  11759. __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection);
  11760. 8004ba4: 4b1a ldr r3, [pc, #104] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11761. 8004ba6: 691b ldr r3, [r3, #16]
  11762. 8004ba8: 4a19 ldr r2, [pc, #100] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11763. 8004baa: f423 4300 bic.w r3, r3, #32768 ; 0x8000
  11764. 8004bae: 6113 str r3, [r2, #16]
  11765. 8004bb0: 4b17 ldr r3, [pc, #92] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11766. 8004bb2: 691a ldr r2, [r3, #16]
  11767. 8004bb4: 687b ldr r3, [r7, #4]
  11768. 8004bb6: f8d3 30b0 ldr.w r3, [r3, #176] ; 0xb0
  11769. 8004bba: 4915 ldr r1, [pc, #84] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11770. 8004bbc: 4313 orrs r3, r2
  11771. 8004bbe: 610b str r3, [r1, #16]
  11772. }
  11773. /*------------------------------------ CKPER configuration --------------------------------------*/
  11774. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CKPER) == RCC_PERIPHCLK_CKPER)
  11775. 8004bc0: 687b ldr r3, [r7, #4]
  11776. 8004bc2: 681b ldr r3, [r3, #0]
  11777. 8004bc4: 2b00 cmp r3, #0
  11778. 8004bc6: da08 bge.n 8004bda <HAL_RCCEx_PeriphCLKConfig+0xdba>
  11779. {
  11780. /* Check the parameters */
  11781. assert_param(IS_RCC_CLKPSOURCE(PeriphClkInit->CkperClockSelection));
  11782. /* Configure the CKPER clock source */
  11783. __HAL_RCC_CLKP_CONFIG(PeriphClkInit->CkperClockSelection);
  11784. 8004bc8: 4b11 ldr r3, [pc, #68] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11785. 8004bca: 6cdb ldr r3, [r3, #76] ; 0x4c
  11786. 8004bcc: f023 5240 bic.w r2, r3, #805306368 ; 0x30000000
  11787. 8004bd0: 687b ldr r3, [r7, #4]
  11788. 8004bd2: 6d1b ldr r3, [r3, #80] ; 0x50
  11789. 8004bd4: 490e ldr r1, [pc, #56] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11790. 8004bd6: 4313 orrs r3, r2
  11791. 8004bd8: 64cb str r3, [r1, #76] ; 0x4c
  11792. }
  11793. /*------------------------------ CEC Configuration ------------------------*/
  11794. if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CEC) == RCC_PERIPHCLK_CEC)
  11795. 8004bda: 687b ldr r3, [r7, #4]
  11796. 8004bdc: 681b ldr r3, [r3, #0]
  11797. 8004bde: f403 0300 and.w r3, r3, #8388608 ; 0x800000
  11798. 8004be2: 2b00 cmp r3, #0
  11799. 8004be4: d009 beq.n 8004bfa <HAL_RCCEx_PeriphCLKConfig+0xdda>
  11800. {
  11801. /* Check the parameters */
  11802. assert_param(IS_RCC_CECCLKSOURCE(PeriphClkInit->CecClockSelection));
  11803. /* Configure the CEC interface clock source */
  11804. __HAL_RCC_CEC_CONFIG(PeriphClkInit->CecClockSelection);
  11805. 8004be6: 4b0a ldr r3, [pc, #40] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11806. 8004be8: 6d5b ldr r3, [r3, #84] ; 0x54
  11807. 8004bea: f423 0240 bic.w r2, r3, #12582912 ; 0xc00000
  11808. 8004bee: 687b ldr r3, [r7, #4]
  11809. 8004bf0: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84
  11810. 8004bf4: 4906 ldr r1, [pc, #24] ; (8004c10 <HAL_RCCEx_PeriphCLKConfig+0xdf0>)
  11811. 8004bf6: 4313 orrs r3, r2
  11812. 8004bf8: 654b str r3, [r1, #84] ; 0x54
  11813. }
  11814. if (status == HAL_OK)
  11815. 8004bfa: 7dbb ldrb r3, [r7, #22]
  11816. 8004bfc: 2b00 cmp r3, #0
  11817. 8004bfe: d101 bne.n 8004c04 <HAL_RCCEx_PeriphCLKConfig+0xde4>
  11818. {
  11819. return HAL_OK;
  11820. 8004c00: 2300 movs r3, #0
  11821. 8004c02: e000 b.n 8004c06 <HAL_RCCEx_PeriphCLKConfig+0xde6>
  11822. }
  11823. return HAL_ERROR;
  11824. 8004c04: 2301 movs r3, #1
  11825. }
  11826. 8004c06: 4618 mov r0, r3
  11827. 8004c08: 3718 adds r7, #24
  11828. 8004c0a: 46bd mov sp, r7
  11829. 8004c0c: bd80 pop {r7, pc}
  11830. 8004c0e: bf00 nop
  11831. 8004c10: 58024400 .word 0x58024400
  11832. 08004c14 <RCCEx_PLL2_Config>:
  11833. * @note PLL2 is temporary disabled to apply new parameters
  11834. *
  11835. * @retval HAL status
  11836. */
  11837. static HAL_StatusTypeDef RCCEx_PLL2_Config(RCC_PLL2InitTypeDef *pll2, uint32_t Divider)
  11838. {
  11839. 8004c14: b580 push {r7, lr}
  11840. 8004c16: b084 sub sp, #16
  11841. 8004c18: af00 add r7, sp, #0
  11842. 8004c1a: 6078 str r0, [r7, #4]
  11843. 8004c1c: 6039 str r1, [r7, #0]
  11844. uint32_t tickstart;
  11845. HAL_StatusTypeDef status = HAL_OK;
  11846. 8004c1e: 2300 movs r3, #0
  11847. 8004c20: 73fb strb r3, [r7, #15]
  11848. assert_param(IS_RCC_PLL2RGE_VALUE(pll2->PLL2RGE));
  11849. assert_param(IS_RCC_PLL2VCO_VALUE(pll2->PLL2VCOSEL));
  11850. assert_param(IS_RCC_PLLFRACN_VALUE(pll2->PLL2FRACN));
  11851. /* Check that PLL2 OSC clock source is already set */
  11852. if(__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_NONE)
  11853. 8004c22: 4b53 ldr r3, [pc, #332] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11854. 8004c24: 6a9b ldr r3, [r3, #40] ; 0x28
  11855. 8004c26: f003 0303 and.w r3, r3, #3
  11856. 8004c2a: 2b03 cmp r3, #3
  11857. 8004c2c: d101 bne.n 8004c32 <RCCEx_PLL2_Config+0x1e>
  11858. {
  11859. return HAL_ERROR;
  11860. 8004c2e: 2301 movs r3, #1
  11861. 8004c30: e099 b.n 8004d66 <RCCEx_PLL2_Config+0x152>
  11862. else
  11863. {
  11864. /* Disable PLL2. */
  11865. __HAL_RCC_PLL2_DISABLE();
  11866. 8004c32: 4b4f ldr r3, [pc, #316] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11867. 8004c34: 681b ldr r3, [r3, #0]
  11868. 8004c36: 4a4e ldr r2, [pc, #312] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11869. 8004c38: f023 6380 bic.w r3, r3, #67108864 ; 0x4000000
  11870. 8004c3c: 6013 str r3, [r2, #0]
  11871. /* Get Start Tick*/
  11872. tickstart = HAL_GetTick();
  11873. 8004c3e: f7fc fcaf bl 80015a0 <HAL_GetTick>
  11874. 8004c42: 60b8 str r0, [r7, #8]
  11875. /* Wait till PLL is disabled */
  11876. while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != 0U)
  11877. 8004c44: e008 b.n 8004c58 <RCCEx_PLL2_Config+0x44>
  11878. {
  11879. if( (HAL_GetTick() - tickstart ) > PLL2_TIMEOUT_VALUE)
  11880. 8004c46: f7fc fcab bl 80015a0 <HAL_GetTick>
  11881. 8004c4a: 4602 mov r2, r0
  11882. 8004c4c: 68bb ldr r3, [r7, #8]
  11883. 8004c4e: 1ad3 subs r3, r2, r3
  11884. 8004c50: 2b02 cmp r3, #2
  11885. 8004c52: d901 bls.n 8004c58 <RCCEx_PLL2_Config+0x44>
  11886. {
  11887. return HAL_TIMEOUT;
  11888. 8004c54: 2303 movs r3, #3
  11889. 8004c56: e086 b.n 8004d66 <RCCEx_PLL2_Config+0x152>
  11890. while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != 0U)
  11891. 8004c58: 4b45 ldr r3, [pc, #276] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11892. 8004c5a: 681b ldr r3, [r3, #0]
  11893. 8004c5c: f003 6300 and.w r3, r3, #134217728 ; 0x8000000
  11894. 8004c60: 2b00 cmp r3, #0
  11895. 8004c62: d1f0 bne.n 8004c46 <RCCEx_PLL2_Config+0x32>
  11896. }
  11897. }
  11898. /* Configure PLL2 multiplication and division factors. */
  11899. __HAL_RCC_PLL2_CONFIG(pll2->PLL2M,
  11900. 8004c64: 4b42 ldr r3, [pc, #264] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11901. 8004c66: 6a9b ldr r3, [r3, #40] ; 0x28
  11902. 8004c68: f423 327c bic.w r2, r3, #258048 ; 0x3f000
  11903. 8004c6c: 687b ldr r3, [r7, #4]
  11904. 8004c6e: 681b ldr r3, [r3, #0]
  11905. 8004c70: 031b lsls r3, r3, #12
  11906. 8004c72: 493f ldr r1, [pc, #252] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11907. 8004c74: 4313 orrs r3, r2
  11908. 8004c76: 628b str r3, [r1, #40] ; 0x28
  11909. 8004c78: 687b ldr r3, [r7, #4]
  11910. 8004c7a: 685b ldr r3, [r3, #4]
  11911. 8004c7c: 3b01 subs r3, #1
  11912. 8004c7e: f3c3 0208 ubfx r2, r3, #0, #9
  11913. 8004c82: 687b ldr r3, [r7, #4]
  11914. 8004c84: 689b ldr r3, [r3, #8]
  11915. 8004c86: 3b01 subs r3, #1
  11916. 8004c88: 025b lsls r3, r3, #9
  11917. 8004c8a: b29b uxth r3, r3
  11918. 8004c8c: 431a orrs r2, r3
  11919. 8004c8e: 687b ldr r3, [r7, #4]
  11920. 8004c90: 68db ldr r3, [r3, #12]
  11921. 8004c92: 3b01 subs r3, #1
  11922. 8004c94: 041b lsls r3, r3, #16
  11923. 8004c96: f403 03fe and.w r3, r3, #8323072 ; 0x7f0000
  11924. 8004c9a: 431a orrs r2, r3
  11925. 8004c9c: 687b ldr r3, [r7, #4]
  11926. 8004c9e: 691b ldr r3, [r3, #16]
  11927. 8004ca0: 3b01 subs r3, #1
  11928. 8004ca2: 061b lsls r3, r3, #24
  11929. 8004ca4: f003 43fe and.w r3, r3, #2130706432 ; 0x7f000000
  11930. 8004ca8: 4931 ldr r1, [pc, #196] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11931. 8004caa: 4313 orrs r3, r2
  11932. 8004cac: 638b str r3, [r1, #56] ; 0x38
  11933. pll2->PLL2P,
  11934. pll2->PLL2Q,
  11935. pll2->PLL2R);
  11936. /* Select PLL2 input reference frequency range: VCI */
  11937. __HAL_RCC_PLL2_VCIRANGE(pll2->PLL2RGE) ;
  11938. 8004cae: 4b30 ldr r3, [pc, #192] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11939. 8004cb0: 6adb ldr r3, [r3, #44] ; 0x2c
  11940. 8004cb2: f023 02c0 bic.w r2, r3, #192 ; 0xc0
  11941. 8004cb6: 687b ldr r3, [r7, #4]
  11942. 8004cb8: 695b ldr r3, [r3, #20]
  11943. 8004cba: 492d ldr r1, [pc, #180] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11944. 8004cbc: 4313 orrs r3, r2
  11945. 8004cbe: 62cb str r3, [r1, #44] ; 0x2c
  11946. /* Select PLL2 output frequency range : VCO */
  11947. __HAL_RCC_PLL2_VCORANGE(pll2->PLL2VCOSEL) ;
  11948. 8004cc0: 4b2b ldr r3, [pc, #172] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11949. 8004cc2: 6adb ldr r3, [r3, #44] ; 0x2c
  11950. 8004cc4: f023 0220 bic.w r2, r3, #32
  11951. 8004cc8: 687b ldr r3, [r7, #4]
  11952. 8004cca: 699b ldr r3, [r3, #24]
  11953. 8004ccc: 4928 ldr r1, [pc, #160] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11954. 8004cce: 4313 orrs r3, r2
  11955. 8004cd0: 62cb str r3, [r1, #44] ; 0x2c
  11956. /* Disable PLL2FRACN . */
  11957. __HAL_RCC_PLL2FRACN_DISABLE();
  11958. 8004cd2: 4b27 ldr r3, [pc, #156] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11959. 8004cd4: 6adb ldr r3, [r3, #44] ; 0x2c
  11960. 8004cd6: 4a26 ldr r2, [pc, #152] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11961. 8004cd8: f023 0310 bic.w r3, r3, #16
  11962. 8004cdc: 62d3 str r3, [r2, #44] ; 0x2c
  11963. /* Configures PLL2 clock Fractional Part Of The Multiplication Factor */
  11964. __HAL_RCC_PLL2FRACN_CONFIG(pll2->PLL2FRACN);
  11965. 8004cde: 4b24 ldr r3, [pc, #144] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11966. 8004ce0: 6bda ldr r2, [r3, #60] ; 0x3c
  11967. 8004ce2: 4b24 ldr r3, [pc, #144] ; (8004d74 <RCCEx_PLL2_Config+0x160>)
  11968. 8004ce4: 4013 ands r3, r2
  11969. 8004ce6: 687a ldr r2, [r7, #4]
  11970. 8004ce8: 69d2 ldr r2, [r2, #28]
  11971. 8004cea: 00d2 lsls r2, r2, #3
  11972. 8004cec: 4920 ldr r1, [pc, #128] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11973. 8004cee: 4313 orrs r3, r2
  11974. 8004cf0: 63cb str r3, [r1, #60] ; 0x3c
  11975. /* Enable PLL2FRACN . */
  11976. __HAL_RCC_PLL2FRACN_ENABLE();
  11977. 8004cf2: 4b1f ldr r3, [pc, #124] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11978. 8004cf4: 6adb ldr r3, [r3, #44] ; 0x2c
  11979. 8004cf6: 4a1e ldr r2, [pc, #120] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11980. 8004cf8: f043 0310 orr.w r3, r3, #16
  11981. 8004cfc: 62d3 str r3, [r2, #44] ; 0x2c
  11982. /* Enable the PLL2 clock output */
  11983. if(Divider == DIVIDER_P_UPDATE)
  11984. 8004cfe: 683b ldr r3, [r7, #0]
  11985. 8004d00: 2b00 cmp r3, #0
  11986. 8004d02: d106 bne.n 8004d12 <RCCEx_PLL2_Config+0xfe>
  11987. {
  11988. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVP);
  11989. 8004d04: 4b1a ldr r3, [pc, #104] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11990. 8004d06: 6adb ldr r3, [r3, #44] ; 0x2c
  11991. 8004d08: 4a19 ldr r2, [pc, #100] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  11992. 8004d0a: f443 2300 orr.w r3, r3, #524288 ; 0x80000
  11993. 8004d0e: 62d3 str r3, [r2, #44] ; 0x2c
  11994. 8004d10: e00f b.n 8004d32 <RCCEx_PLL2_Config+0x11e>
  11995. }
  11996. else if(Divider == DIVIDER_Q_UPDATE)
  11997. 8004d12: 683b ldr r3, [r7, #0]
  11998. 8004d14: 2b01 cmp r3, #1
  11999. 8004d16: d106 bne.n 8004d26 <RCCEx_PLL2_Config+0x112>
  12000. {
  12001. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVQ);
  12002. 8004d18: 4b15 ldr r3, [pc, #84] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  12003. 8004d1a: 6adb ldr r3, [r3, #44] ; 0x2c
  12004. 8004d1c: 4a14 ldr r2, [pc, #80] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  12005. 8004d1e: f443 1380 orr.w r3, r3, #1048576 ; 0x100000
  12006. 8004d22: 62d3 str r3, [r2, #44] ; 0x2c
  12007. 8004d24: e005 b.n 8004d32 <RCCEx_PLL2_Config+0x11e>
  12008. }
  12009. else
  12010. {
  12011. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVR);
  12012. 8004d26: 4b12 ldr r3, [pc, #72] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  12013. 8004d28: 6adb ldr r3, [r3, #44] ; 0x2c
  12014. 8004d2a: 4a11 ldr r2, [pc, #68] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  12015. 8004d2c: f443 1300 orr.w r3, r3, #2097152 ; 0x200000
  12016. 8004d30: 62d3 str r3, [r2, #44] ; 0x2c
  12017. }
  12018. /* Enable PLL2. */
  12019. __HAL_RCC_PLL2_ENABLE();
  12020. 8004d32: 4b0f ldr r3, [pc, #60] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  12021. 8004d34: 681b ldr r3, [r3, #0]
  12022. 8004d36: 4a0e ldr r2, [pc, #56] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  12023. 8004d38: f043 6380 orr.w r3, r3, #67108864 ; 0x4000000
  12024. 8004d3c: 6013 str r3, [r2, #0]
  12025. /* Get Start Tick*/
  12026. tickstart = HAL_GetTick();
  12027. 8004d3e: f7fc fc2f bl 80015a0 <HAL_GetTick>
  12028. 8004d42: 60b8 str r0, [r7, #8]
  12029. /* Wait till PLL2 is ready */
  12030. while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == 0U)
  12031. 8004d44: e008 b.n 8004d58 <RCCEx_PLL2_Config+0x144>
  12032. {
  12033. if( (HAL_GetTick() - tickstart ) > PLL2_TIMEOUT_VALUE)
  12034. 8004d46: f7fc fc2b bl 80015a0 <HAL_GetTick>
  12035. 8004d4a: 4602 mov r2, r0
  12036. 8004d4c: 68bb ldr r3, [r7, #8]
  12037. 8004d4e: 1ad3 subs r3, r2, r3
  12038. 8004d50: 2b02 cmp r3, #2
  12039. 8004d52: d901 bls.n 8004d58 <RCCEx_PLL2_Config+0x144>
  12040. {
  12041. return HAL_TIMEOUT;
  12042. 8004d54: 2303 movs r3, #3
  12043. 8004d56: e006 b.n 8004d66 <RCCEx_PLL2_Config+0x152>
  12044. while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == 0U)
  12045. 8004d58: 4b05 ldr r3, [pc, #20] ; (8004d70 <RCCEx_PLL2_Config+0x15c>)
  12046. 8004d5a: 681b ldr r3, [r3, #0]
  12047. 8004d5c: f003 6300 and.w r3, r3, #134217728 ; 0x8000000
  12048. 8004d60: 2b00 cmp r3, #0
  12049. 8004d62: d0f0 beq.n 8004d46 <RCCEx_PLL2_Config+0x132>
  12050. }
  12051. }
  12052. return status;
  12053. 8004d64: 7bfb ldrb r3, [r7, #15]
  12054. }
  12055. 8004d66: 4618 mov r0, r3
  12056. 8004d68: 3710 adds r7, #16
  12057. 8004d6a: 46bd mov sp, r7
  12058. 8004d6c: bd80 pop {r7, pc}
  12059. 8004d6e: bf00 nop
  12060. 8004d70: 58024400 .word 0x58024400
  12061. 8004d74: ffff0007 .word 0xffff0007
  12062. 08004d78 <RCCEx_PLL3_Config>:
  12063. * @note PLL3 is temporary disabled to apply new parameters
  12064. *
  12065. * @retval HAL status
  12066. */
  12067. static HAL_StatusTypeDef RCCEx_PLL3_Config(RCC_PLL3InitTypeDef *pll3, uint32_t Divider)
  12068. {
  12069. 8004d78: b580 push {r7, lr}
  12070. 8004d7a: b084 sub sp, #16
  12071. 8004d7c: af00 add r7, sp, #0
  12072. 8004d7e: 6078 str r0, [r7, #4]
  12073. 8004d80: 6039 str r1, [r7, #0]
  12074. uint32_t tickstart;
  12075. HAL_StatusTypeDef status = HAL_OK;
  12076. 8004d82: 2300 movs r3, #0
  12077. 8004d84: 73fb strb r3, [r7, #15]
  12078. assert_param(IS_RCC_PLL3RGE_VALUE(pll3->PLL3RGE));
  12079. assert_param(IS_RCC_PLL3VCO_VALUE(pll3->PLL3VCOSEL));
  12080. assert_param(IS_RCC_PLLFRACN_VALUE(pll3->PLL3FRACN));
  12081. /* Check that PLL3 OSC clock source is already set */
  12082. if(__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_NONE)
  12083. 8004d86: 4b53 ldr r3, [pc, #332] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12084. 8004d88: 6a9b ldr r3, [r3, #40] ; 0x28
  12085. 8004d8a: f003 0303 and.w r3, r3, #3
  12086. 8004d8e: 2b03 cmp r3, #3
  12087. 8004d90: d101 bne.n 8004d96 <RCCEx_PLL3_Config+0x1e>
  12088. {
  12089. return HAL_ERROR;
  12090. 8004d92: 2301 movs r3, #1
  12091. 8004d94: e099 b.n 8004eca <RCCEx_PLL3_Config+0x152>
  12092. else
  12093. {
  12094. /* Disable PLL3. */
  12095. __HAL_RCC_PLL3_DISABLE();
  12096. 8004d96: 4b4f ldr r3, [pc, #316] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12097. 8004d98: 681b ldr r3, [r3, #0]
  12098. 8004d9a: 4a4e ldr r2, [pc, #312] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12099. 8004d9c: f023 5380 bic.w r3, r3, #268435456 ; 0x10000000
  12100. 8004da0: 6013 str r3, [r2, #0]
  12101. /* Get Start Tick*/
  12102. tickstart = HAL_GetTick();
  12103. 8004da2: f7fc fbfd bl 80015a0 <HAL_GetTick>
  12104. 8004da6: 60b8 str r0, [r7, #8]
  12105. /* Wait till PLL3 is ready */
  12106. while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) != 0U)
  12107. 8004da8: e008 b.n 8004dbc <RCCEx_PLL3_Config+0x44>
  12108. {
  12109. if( (HAL_GetTick() - tickstart ) > PLL3_TIMEOUT_VALUE)
  12110. 8004daa: f7fc fbf9 bl 80015a0 <HAL_GetTick>
  12111. 8004dae: 4602 mov r2, r0
  12112. 8004db0: 68bb ldr r3, [r7, #8]
  12113. 8004db2: 1ad3 subs r3, r2, r3
  12114. 8004db4: 2b02 cmp r3, #2
  12115. 8004db6: d901 bls.n 8004dbc <RCCEx_PLL3_Config+0x44>
  12116. {
  12117. return HAL_TIMEOUT;
  12118. 8004db8: 2303 movs r3, #3
  12119. 8004dba: e086 b.n 8004eca <RCCEx_PLL3_Config+0x152>
  12120. while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) != 0U)
  12121. 8004dbc: 4b45 ldr r3, [pc, #276] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12122. 8004dbe: 681b ldr r3, [r3, #0]
  12123. 8004dc0: f003 5300 and.w r3, r3, #536870912 ; 0x20000000
  12124. 8004dc4: 2b00 cmp r3, #0
  12125. 8004dc6: d1f0 bne.n 8004daa <RCCEx_PLL3_Config+0x32>
  12126. }
  12127. }
  12128. /* Configure the PLL3 multiplication and division factors. */
  12129. __HAL_RCC_PLL3_CONFIG(pll3->PLL3M,
  12130. 8004dc8: 4b42 ldr r3, [pc, #264] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12131. 8004dca: 6a9b ldr r3, [r3, #40] ; 0x28
  12132. 8004dcc: f023 727c bic.w r2, r3, #66060288 ; 0x3f00000
  12133. 8004dd0: 687b ldr r3, [r7, #4]
  12134. 8004dd2: 681b ldr r3, [r3, #0]
  12135. 8004dd4: 051b lsls r3, r3, #20
  12136. 8004dd6: 493f ldr r1, [pc, #252] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12137. 8004dd8: 4313 orrs r3, r2
  12138. 8004dda: 628b str r3, [r1, #40] ; 0x28
  12139. 8004ddc: 687b ldr r3, [r7, #4]
  12140. 8004dde: 685b ldr r3, [r3, #4]
  12141. 8004de0: 3b01 subs r3, #1
  12142. 8004de2: f3c3 0208 ubfx r2, r3, #0, #9
  12143. 8004de6: 687b ldr r3, [r7, #4]
  12144. 8004de8: 689b ldr r3, [r3, #8]
  12145. 8004dea: 3b01 subs r3, #1
  12146. 8004dec: 025b lsls r3, r3, #9
  12147. 8004dee: b29b uxth r3, r3
  12148. 8004df0: 431a orrs r2, r3
  12149. 8004df2: 687b ldr r3, [r7, #4]
  12150. 8004df4: 68db ldr r3, [r3, #12]
  12151. 8004df6: 3b01 subs r3, #1
  12152. 8004df8: 041b lsls r3, r3, #16
  12153. 8004dfa: f403 03fe and.w r3, r3, #8323072 ; 0x7f0000
  12154. 8004dfe: 431a orrs r2, r3
  12155. 8004e00: 687b ldr r3, [r7, #4]
  12156. 8004e02: 691b ldr r3, [r3, #16]
  12157. 8004e04: 3b01 subs r3, #1
  12158. 8004e06: 061b lsls r3, r3, #24
  12159. 8004e08: f003 43fe and.w r3, r3, #2130706432 ; 0x7f000000
  12160. 8004e0c: 4931 ldr r1, [pc, #196] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12161. 8004e0e: 4313 orrs r3, r2
  12162. 8004e10: 640b str r3, [r1, #64] ; 0x40
  12163. pll3->PLL3P,
  12164. pll3->PLL3Q,
  12165. pll3->PLL3R);
  12166. /* Select PLL3 input reference frequency range: VCI */
  12167. __HAL_RCC_PLL3_VCIRANGE(pll3->PLL3RGE) ;
  12168. 8004e12: 4b30 ldr r3, [pc, #192] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12169. 8004e14: 6adb ldr r3, [r3, #44] ; 0x2c
  12170. 8004e16: f423 6240 bic.w r2, r3, #3072 ; 0xc00
  12171. 8004e1a: 687b ldr r3, [r7, #4]
  12172. 8004e1c: 695b ldr r3, [r3, #20]
  12173. 8004e1e: 492d ldr r1, [pc, #180] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12174. 8004e20: 4313 orrs r3, r2
  12175. 8004e22: 62cb str r3, [r1, #44] ; 0x2c
  12176. /* Select PLL3 output frequency range : VCO */
  12177. __HAL_RCC_PLL3_VCORANGE(pll3->PLL3VCOSEL) ;
  12178. 8004e24: 4b2b ldr r3, [pc, #172] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12179. 8004e26: 6adb ldr r3, [r3, #44] ; 0x2c
  12180. 8004e28: f423 7200 bic.w r2, r3, #512 ; 0x200
  12181. 8004e2c: 687b ldr r3, [r7, #4]
  12182. 8004e2e: 699b ldr r3, [r3, #24]
  12183. 8004e30: 4928 ldr r1, [pc, #160] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12184. 8004e32: 4313 orrs r3, r2
  12185. 8004e34: 62cb str r3, [r1, #44] ; 0x2c
  12186. /* Disable PLL3FRACN . */
  12187. __HAL_RCC_PLL3FRACN_DISABLE();
  12188. 8004e36: 4b27 ldr r3, [pc, #156] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12189. 8004e38: 6adb ldr r3, [r3, #44] ; 0x2c
  12190. 8004e3a: 4a26 ldr r2, [pc, #152] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12191. 8004e3c: f423 7380 bic.w r3, r3, #256 ; 0x100
  12192. 8004e40: 62d3 str r3, [r2, #44] ; 0x2c
  12193. /* Configures PLL3 clock Fractional Part Of The Multiplication Factor */
  12194. __HAL_RCC_PLL3FRACN_CONFIG(pll3->PLL3FRACN);
  12195. 8004e42: 4b24 ldr r3, [pc, #144] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12196. 8004e44: 6c5a ldr r2, [r3, #68] ; 0x44
  12197. 8004e46: 4b24 ldr r3, [pc, #144] ; (8004ed8 <RCCEx_PLL3_Config+0x160>)
  12198. 8004e48: 4013 ands r3, r2
  12199. 8004e4a: 687a ldr r2, [r7, #4]
  12200. 8004e4c: 69d2 ldr r2, [r2, #28]
  12201. 8004e4e: 00d2 lsls r2, r2, #3
  12202. 8004e50: 4920 ldr r1, [pc, #128] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12203. 8004e52: 4313 orrs r3, r2
  12204. 8004e54: 644b str r3, [r1, #68] ; 0x44
  12205. /* Enable PLL3FRACN . */
  12206. __HAL_RCC_PLL3FRACN_ENABLE();
  12207. 8004e56: 4b1f ldr r3, [pc, #124] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12208. 8004e58: 6adb ldr r3, [r3, #44] ; 0x2c
  12209. 8004e5a: 4a1e ldr r2, [pc, #120] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12210. 8004e5c: f443 7380 orr.w r3, r3, #256 ; 0x100
  12211. 8004e60: 62d3 str r3, [r2, #44] ; 0x2c
  12212. /* Enable the PLL3 clock output */
  12213. if(Divider == DIVIDER_P_UPDATE)
  12214. 8004e62: 683b ldr r3, [r7, #0]
  12215. 8004e64: 2b00 cmp r3, #0
  12216. 8004e66: d106 bne.n 8004e76 <RCCEx_PLL3_Config+0xfe>
  12217. {
  12218. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVP);
  12219. 8004e68: 4b1a ldr r3, [pc, #104] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12220. 8004e6a: 6adb ldr r3, [r3, #44] ; 0x2c
  12221. 8004e6c: 4a19 ldr r2, [pc, #100] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12222. 8004e6e: f443 0380 orr.w r3, r3, #4194304 ; 0x400000
  12223. 8004e72: 62d3 str r3, [r2, #44] ; 0x2c
  12224. 8004e74: e00f b.n 8004e96 <RCCEx_PLL3_Config+0x11e>
  12225. }
  12226. else if(Divider == DIVIDER_Q_UPDATE)
  12227. 8004e76: 683b ldr r3, [r7, #0]
  12228. 8004e78: 2b01 cmp r3, #1
  12229. 8004e7a: d106 bne.n 8004e8a <RCCEx_PLL3_Config+0x112>
  12230. {
  12231. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVQ);
  12232. 8004e7c: 4b15 ldr r3, [pc, #84] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12233. 8004e7e: 6adb ldr r3, [r3, #44] ; 0x2c
  12234. 8004e80: 4a14 ldr r2, [pc, #80] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12235. 8004e82: f443 0300 orr.w r3, r3, #8388608 ; 0x800000
  12236. 8004e86: 62d3 str r3, [r2, #44] ; 0x2c
  12237. 8004e88: e005 b.n 8004e96 <RCCEx_PLL3_Config+0x11e>
  12238. }
  12239. else
  12240. {
  12241. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVR);
  12242. 8004e8a: 4b12 ldr r3, [pc, #72] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12243. 8004e8c: 6adb ldr r3, [r3, #44] ; 0x2c
  12244. 8004e8e: 4a11 ldr r2, [pc, #68] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12245. 8004e90: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000
  12246. 8004e94: 62d3 str r3, [r2, #44] ; 0x2c
  12247. }
  12248. /* Enable PLL3. */
  12249. __HAL_RCC_PLL3_ENABLE();
  12250. 8004e96: 4b0f ldr r3, [pc, #60] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12251. 8004e98: 681b ldr r3, [r3, #0]
  12252. 8004e9a: 4a0e ldr r2, [pc, #56] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12253. 8004e9c: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000
  12254. 8004ea0: 6013 str r3, [r2, #0]
  12255. /* Get Start Tick*/
  12256. tickstart = HAL_GetTick();
  12257. 8004ea2: f7fc fb7d bl 80015a0 <HAL_GetTick>
  12258. 8004ea6: 60b8 str r0, [r7, #8]
  12259. /* Wait till PLL3 is ready */
  12260. while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) == 0U)
  12261. 8004ea8: e008 b.n 8004ebc <RCCEx_PLL3_Config+0x144>
  12262. {
  12263. if( (HAL_GetTick() - tickstart ) > PLL3_TIMEOUT_VALUE)
  12264. 8004eaa: f7fc fb79 bl 80015a0 <HAL_GetTick>
  12265. 8004eae: 4602 mov r2, r0
  12266. 8004eb0: 68bb ldr r3, [r7, #8]
  12267. 8004eb2: 1ad3 subs r3, r2, r3
  12268. 8004eb4: 2b02 cmp r3, #2
  12269. 8004eb6: d901 bls.n 8004ebc <RCCEx_PLL3_Config+0x144>
  12270. {
  12271. return HAL_TIMEOUT;
  12272. 8004eb8: 2303 movs r3, #3
  12273. 8004eba: e006 b.n 8004eca <RCCEx_PLL3_Config+0x152>
  12274. while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) == 0U)
  12275. 8004ebc: 4b05 ldr r3, [pc, #20] ; (8004ed4 <RCCEx_PLL3_Config+0x15c>)
  12276. 8004ebe: 681b ldr r3, [r3, #0]
  12277. 8004ec0: f003 5300 and.w r3, r3, #536870912 ; 0x20000000
  12278. 8004ec4: 2b00 cmp r3, #0
  12279. 8004ec6: d0f0 beq.n 8004eaa <RCCEx_PLL3_Config+0x132>
  12280. }
  12281. }
  12282. return status;
  12283. 8004ec8: 7bfb ldrb r3, [r7, #15]
  12284. }
  12285. 8004eca: 4618 mov r0, r3
  12286. 8004ecc: 3710 adds r7, #16
  12287. 8004ece: 46bd mov sp, r7
  12288. 8004ed0: bd80 pop {r7, pc}
  12289. 8004ed2: bf00 nop
  12290. 8004ed4: 58024400 .word 0x58024400
  12291. 8004ed8: ffff0007 .word 0xffff0007
  12292. 08004edc <HAL_TIM_Base_Init>:
  12293. * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init()
  12294. * @param htim TIM Base handle
  12295. * @retval HAL status
  12296. */
  12297. HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim)
  12298. {
  12299. 8004edc: b580 push {r7, lr}
  12300. 8004ede: b082 sub sp, #8
  12301. 8004ee0: af00 add r7, sp, #0
  12302. 8004ee2: 6078 str r0, [r7, #4]
  12303. /* Check the TIM handle allocation */
  12304. if (htim == NULL)
  12305. 8004ee4: 687b ldr r3, [r7, #4]
  12306. 8004ee6: 2b00 cmp r3, #0
  12307. 8004ee8: d101 bne.n 8004eee <HAL_TIM_Base_Init+0x12>
  12308. {
  12309. return HAL_ERROR;
  12310. 8004eea: 2301 movs r3, #1
  12311. 8004eec: e049 b.n 8004f82 <HAL_TIM_Base_Init+0xa6>
  12312. assert_param(IS_TIM_INSTANCE(htim->Instance));
  12313. assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
  12314. assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
  12315. assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
  12316. if (htim->State == HAL_TIM_STATE_RESET)
  12317. 8004eee: 687b ldr r3, [r7, #4]
  12318. 8004ef0: f893 303d ldrb.w r3, [r3, #61] ; 0x3d
  12319. 8004ef4: b2db uxtb r3, r3
  12320. 8004ef6: 2b00 cmp r3, #0
  12321. 8004ef8: d106 bne.n 8004f08 <HAL_TIM_Base_Init+0x2c>
  12322. {
  12323. /* Allocate lock resource and initialize it */
  12324. htim->Lock = HAL_UNLOCKED;
  12325. 8004efa: 687b ldr r3, [r7, #4]
  12326. 8004efc: 2200 movs r2, #0
  12327. 8004efe: f883 203c strb.w r2, [r3, #60] ; 0x3c
  12328. }
  12329. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  12330. htim->Base_MspInitCallback(htim);
  12331. #else
  12332. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  12333. HAL_TIM_Base_MspInit(htim);
  12334. 8004f02: 6878 ldr r0, [r7, #4]
  12335. 8004f04: f7fc f8f8 bl 80010f8 <HAL_TIM_Base_MspInit>
  12336. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  12337. }
  12338. /* Set the TIM state */
  12339. htim->State = HAL_TIM_STATE_BUSY;
  12340. 8004f08: 687b ldr r3, [r7, #4]
  12341. 8004f0a: 2202 movs r2, #2
  12342. 8004f0c: f883 203d strb.w r2, [r3, #61] ; 0x3d
  12343. /* Set the Time Base configuration */
  12344. TIM_Base_SetConfig(htim->Instance, &htim->Init);
  12345. 8004f10: 687b ldr r3, [r7, #4]
  12346. 8004f12: 681a ldr r2, [r3, #0]
  12347. 8004f14: 687b ldr r3, [r7, #4]
  12348. 8004f16: 3304 adds r3, #4
  12349. 8004f18: 4619 mov r1, r3
  12350. 8004f1a: 4610 mov r0, r2
  12351. 8004f1c: f000 fafc bl 8005518 <TIM_Base_SetConfig>
  12352. /* Initialize the DMA burst operation state */
  12353. htim->DMABurstState = HAL_DMA_BURST_STATE_READY;
  12354. 8004f20: 687b ldr r3, [r7, #4]
  12355. 8004f22: 2201 movs r2, #1
  12356. 8004f24: f883 2048 strb.w r2, [r3, #72] ; 0x48
  12357. /* Initialize the TIM channels state */
  12358. TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  12359. 8004f28: 687b ldr r3, [r7, #4]
  12360. 8004f2a: 2201 movs r2, #1
  12361. 8004f2c: f883 203e strb.w r2, [r3, #62] ; 0x3e
  12362. 8004f30: 687b ldr r3, [r7, #4]
  12363. 8004f32: 2201 movs r2, #1
  12364. 8004f34: f883 203f strb.w r2, [r3, #63] ; 0x3f
  12365. 8004f38: 687b ldr r3, [r7, #4]
  12366. 8004f3a: 2201 movs r2, #1
  12367. 8004f3c: f883 2040 strb.w r2, [r3, #64] ; 0x40
  12368. 8004f40: 687b ldr r3, [r7, #4]
  12369. 8004f42: 2201 movs r2, #1
  12370. 8004f44: f883 2041 strb.w r2, [r3, #65] ; 0x41
  12371. 8004f48: 687b ldr r3, [r7, #4]
  12372. 8004f4a: 2201 movs r2, #1
  12373. 8004f4c: f883 2042 strb.w r2, [r3, #66] ; 0x42
  12374. 8004f50: 687b ldr r3, [r7, #4]
  12375. 8004f52: 2201 movs r2, #1
  12376. 8004f54: f883 2043 strb.w r2, [r3, #67] ; 0x43
  12377. TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  12378. 8004f58: 687b ldr r3, [r7, #4]
  12379. 8004f5a: 2201 movs r2, #1
  12380. 8004f5c: f883 2044 strb.w r2, [r3, #68] ; 0x44
  12381. 8004f60: 687b ldr r3, [r7, #4]
  12382. 8004f62: 2201 movs r2, #1
  12383. 8004f64: f883 2045 strb.w r2, [r3, #69] ; 0x45
  12384. 8004f68: 687b ldr r3, [r7, #4]
  12385. 8004f6a: 2201 movs r2, #1
  12386. 8004f6c: f883 2046 strb.w r2, [r3, #70] ; 0x46
  12387. 8004f70: 687b ldr r3, [r7, #4]
  12388. 8004f72: 2201 movs r2, #1
  12389. 8004f74: f883 2047 strb.w r2, [r3, #71] ; 0x47
  12390. /* Initialize the TIM state*/
  12391. htim->State = HAL_TIM_STATE_READY;
  12392. 8004f78: 687b ldr r3, [r7, #4]
  12393. 8004f7a: 2201 movs r2, #1
  12394. 8004f7c: f883 203d strb.w r2, [r3, #61] ; 0x3d
  12395. return HAL_OK;
  12396. 8004f80: 2300 movs r3, #0
  12397. }
  12398. 8004f82: 4618 mov r0, r3
  12399. 8004f84: 3708 adds r7, #8
  12400. 8004f86: 46bd mov sp, r7
  12401. 8004f88: bd80 pop {r7, pc}
  12402. ...
  12403. 08004f8c <HAL_TIM_Base_Start_IT>:
  12404. * @brief Starts the TIM Base generation in interrupt mode.
  12405. * @param htim TIM Base handle
  12406. * @retval HAL status
  12407. */
  12408. HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
  12409. {
  12410. 8004f8c: b480 push {r7}
  12411. 8004f8e: b085 sub sp, #20
  12412. 8004f90: af00 add r7, sp, #0
  12413. 8004f92: 6078 str r0, [r7, #4]
  12414. /* Check the parameters */
  12415. assert_param(IS_TIM_INSTANCE(htim->Instance));
  12416. /* Check the TIM state */
  12417. if (htim->State != HAL_TIM_STATE_READY)
  12418. 8004f94: 687b ldr r3, [r7, #4]
  12419. 8004f96: f893 303d ldrb.w r3, [r3, #61] ; 0x3d
  12420. 8004f9a: b2db uxtb r3, r3
  12421. 8004f9c: 2b01 cmp r3, #1
  12422. 8004f9e: d001 beq.n 8004fa4 <HAL_TIM_Base_Start_IT+0x18>
  12423. {
  12424. return HAL_ERROR;
  12425. 8004fa0: 2301 movs r3, #1
  12426. 8004fa2: e05e b.n 8005062 <HAL_TIM_Base_Start_IT+0xd6>
  12427. }
  12428. /* Set the TIM state */
  12429. htim->State = HAL_TIM_STATE_BUSY;
  12430. 8004fa4: 687b ldr r3, [r7, #4]
  12431. 8004fa6: 2202 movs r2, #2
  12432. 8004fa8: f883 203d strb.w r2, [r3, #61] ; 0x3d
  12433. /* Enable the TIM Update interrupt */
  12434. __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);
  12435. 8004fac: 687b ldr r3, [r7, #4]
  12436. 8004fae: 681b ldr r3, [r3, #0]
  12437. 8004fb0: 68da ldr r2, [r3, #12]
  12438. 8004fb2: 687b ldr r3, [r7, #4]
  12439. 8004fb4: 681b ldr r3, [r3, #0]
  12440. 8004fb6: f042 0201 orr.w r2, r2, #1
  12441. 8004fba: 60da str r2, [r3, #12]
  12442. /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  12443. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  12444. 8004fbc: 687b ldr r3, [r7, #4]
  12445. 8004fbe: 681b ldr r3, [r3, #0]
  12446. 8004fc0: 4a2b ldr r2, [pc, #172] ; (8005070 <HAL_TIM_Base_Start_IT+0xe4>)
  12447. 8004fc2: 4293 cmp r3, r2
  12448. 8004fc4: d02c beq.n 8005020 <HAL_TIM_Base_Start_IT+0x94>
  12449. 8004fc6: 687b ldr r3, [r7, #4]
  12450. 8004fc8: 681b ldr r3, [r3, #0]
  12451. 8004fca: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
  12452. 8004fce: d027 beq.n 8005020 <HAL_TIM_Base_Start_IT+0x94>
  12453. 8004fd0: 687b ldr r3, [r7, #4]
  12454. 8004fd2: 681b ldr r3, [r3, #0]
  12455. 8004fd4: 4a27 ldr r2, [pc, #156] ; (8005074 <HAL_TIM_Base_Start_IT+0xe8>)
  12456. 8004fd6: 4293 cmp r3, r2
  12457. 8004fd8: d022 beq.n 8005020 <HAL_TIM_Base_Start_IT+0x94>
  12458. 8004fda: 687b ldr r3, [r7, #4]
  12459. 8004fdc: 681b ldr r3, [r3, #0]
  12460. 8004fde: 4a26 ldr r2, [pc, #152] ; (8005078 <HAL_TIM_Base_Start_IT+0xec>)
  12461. 8004fe0: 4293 cmp r3, r2
  12462. 8004fe2: d01d beq.n 8005020 <HAL_TIM_Base_Start_IT+0x94>
  12463. 8004fe4: 687b ldr r3, [r7, #4]
  12464. 8004fe6: 681b ldr r3, [r3, #0]
  12465. 8004fe8: 4a24 ldr r2, [pc, #144] ; (800507c <HAL_TIM_Base_Start_IT+0xf0>)
  12466. 8004fea: 4293 cmp r3, r2
  12467. 8004fec: d018 beq.n 8005020 <HAL_TIM_Base_Start_IT+0x94>
  12468. 8004fee: 687b ldr r3, [r7, #4]
  12469. 8004ff0: 681b ldr r3, [r3, #0]
  12470. 8004ff2: 4a23 ldr r2, [pc, #140] ; (8005080 <HAL_TIM_Base_Start_IT+0xf4>)
  12471. 8004ff4: 4293 cmp r3, r2
  12472. 8004ff6: d013 beq.n 8005020 <HAL_TIM_Base_Start_IT+0x94>
  12473. 8004ff8: 687b ldr r3, [r7, #4]
  12474. 8004ffa: 681b ldr r3, [r3, #0]
  12475. 8004ffc: 4a21 ldr r2, [pc, #132] ; (8005084 <HAL_TIM_Base_Start_IT+0xf8>)
  12476. 8004ffe: 4293 cmp r3, r2
  12477. 8005000: d00e beq.n 8005020 <HAL_TIM_Base_Start_IT+0x94>
  12478. 8005002: 687b ldr r3, [r7, #4]
  12479. 8005004: 681b ldr r3, [r3, #0]
  12480. 8005006: 4a20 ldr r2, [pc, #128] ; (8005088 <HAL_TIM_Base_Start_IT+0xfc>)
  12481. 8005008: 4293 cmp r3, r2
  12482. 800500a: d009 beq.n 8005020 <HAL_TIM_Base_Start_IT+0x94>
  12483. 800500c: 687b ldr r3, [r7, #4]
  12484. 800500e: 681b ldr r3, [r3, #0]
  12485. 8005010: 4a1e ldr r2, [pc, #120] ; (800508c <HAL_TIM_Base_Start_IT+0x100>)
  12486. 8005012: 4293 cmp r3, r2
  12487. 8005014: d004 beq.n 8005020 <HAL_TIM_Base_Start_IT+0x94>
  12488. 8005016: 687b ldr r3, [r7, #4]
  12489. 8005018: 681b ldr r3, [r3, #0]
  12490. 800501a: 4a1d ldr r2, [pc, #116] ; (8005090 <HAL_TIM_Base_Start_IT+0x104>)
  12491. 800501c: 4293 cmp r3, r2
  12492. 800501e: d115 bne.n 800504c <HAL_TIM_Base_Start_IT+0xc0>
  12493. {
  12494. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  12495. 8005020: 687b ldr r3, [r7, #4]
  12496. 8005022: 681b ldr r3, [r3, #0]
  12497. 8005024: 689a ldr r2, [r3, #8]
  12498. 8005026: 4b1b ldr r3, [pc, #108] ; (8005094 <HAL_TIM_Base_Start_IT+0x108>)
  12499. 8005028: 4013 ands r3, r2
  12500. 800502a: 60fb str r3, [r7, #12]
  12501. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  12502. 800502c: 68fb ldr r3, [r7, #12]
  12503. 800502e: 2b06 cmp r3, #6
  12504. 8005030: d015 beq.n 800505e <HAL_TIM_Base_Start_IT+0xd2>
  12505. 8005032: 68fb ldr r3, [r7, #12]
  12506. 8005034: f5b3 3f80 cmp.w r3, #65536 ; 0x10000
  12507. 8005038: d011 beq.n 800505e <HAL_TIM_Base_Start_IT+0xd2>
  12508. {
  12509. __HAL_TIM_ENABLE(htim);
  12510. 800503a: 687b ldr r3, [r7, #4]
  12511. 800503c: 681b ldr r3, [r3, #0]
  12512. 800503e: 681a ldr r2, [r3, #0]
  12513. 8005040: 687b ldr r3, [r7, #4]
  12514. 8005042: 681b ldr r3, [r3, #0]
  12515. 8005044: f042 0201 orr.w r2, r2, #1
  12516. 8005048: 601a str r2, [r3, #0]
  12517. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  12518. 800504a: e008 b.n 800505e <HAL_TIM_Base_Start_IT+0xd2>
  12519. }
  12520. }
  12521. else
  12522. {
  12523. __HAL_TIM_ENABLE(htim);
  12524. 800504c: 687b ldr r3, [r7, #4]
  12525. 800504e: 681b ldr r3, [r3, #0]
  12526. 8005050: 681a ldr r2, [r3, #0]
  12527. 8005052: 687b ldr r3, [r7, #4]
  12528. 8005054: 681b ldr r3, [r3, #0]
  12529. 8005056: f042 0201 orr.w r2, r2, #1
  12530. 800505a: 601a str r2, [r3, #0]
  12531. 800505c: e000 b.n 8005060 <HAL_TIM_Base_Start_IT+0xd4>
  12532. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  12533. 800505e: bf00 nop
  12534. }
  12535. /* Return function status */
  12536. return HAL_OK;
  12537. 8005060: 2300 movs r3, #0
  12538. }
  12539. 8005062: 4618 mov r0, r3
  12540. 8005064: 3714 adds r7, #20
  12541. 8005066: 46bd mov sp, r7
  12542. 8005068: f85d 7b04 ldr.w r7, [sp], #4
  12543. 800506c: 4770 bx lr
  12544. 800506e: bf00 nop
  12545. 8005070: 40010000 .word 0x40010000
  12546. 8005074: 40000400 .word 0x40000400
  12547. 8005078: 40000800 .word 0x40000800
  12548. 800507c: 40000c00 .word 0x40000c00
  12549. 8005080: 40010400 .word 0x40010400
  12550. 8005084: 40001800 .word 0x40001800
  12551. 8005088: 40014000 .word 0x40014000
  12552. 800508c: 4000e000 .word 0x4000e000
  12553. 8005090: 4000e400 .word 0x4000e400
  12554. 8005094: 00010007 .word 0x00010007
  12555. 08005098 <HAL_TIM_IRQHandler>:
  12556. * @brief This function handles TIM interrupts requests.
  12557. * @param htim TIM handle
  12558. * @retval None
  12559. */
  12560. void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
  12561. {
  12562. 8005098: b580 push {r7, lr}
  12563. 800509a: b082 sub sp, #8
  12564. 800509c: af00 add r7, sp, #0
  12565. 800509e: 6078 str r0, [r7, #4]
  12566. /* Capture compare 1 event */
  12567. if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET)
  12568. 80050a0: 687b ldr r3, [r7, #4]
  12569. 80050a2: 681b ldr r3, [r3, #0]
  12570. 80050a4: 691b ldr r3, [r3, #16]
  12571. 80050a6: f003 0302 and.w r3, r3, #2
  12572. 80050aa: 2b02 cmp r3, #2
  12573. 80050ac: d122 bne.n 80050f4 <HAL_TIM_IRQHandler+0x5c>
  12574. {
  12575. if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC1) != RESET)
  12576. 80050ae: 687b ldr r3, [r7, #4]
  12577. 80050b0: 681b ldr r3, [r3, #0]
  12578. 80050b2: 68db ldr r3, [r3, #12]
  12579. 80050b4: f003 0302 and.w r3, r3, #2
  12580. 80050b8: 2b02 cmp r3, #2
  12581. 80050ba: d11b bne.n 80050f4 <HAL_TIM_IRQHandler+0x5c>
  12582. {
  12583. {
  12584. __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1);
  12585. 80050bc: 687b ldr r3, [r7, #4]
  12586. 80050be: 681b ldr r3, [r3, #0]
  12587. 80050c0: f06f 0202 mvn.w r2, #2
  12588. 80050c4: 611a str r2, [r3, #16]
  12589. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;
  12590. 80050c6: 687b ldr r3, [r7, #4]
  12591. 80050c8: 2201 movs r2, #1
  12592. 80050ca: 771a strb r2, [r3, #28]
  12593. /* Input capture event */
  12594. if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U)
  12595. 80050cc: 687b ldr r3, [r7, #4]
  12596. 80050ce: 681b ldr r3, [r3, #0]
  12597. 80050d0: 699b ldr r3, [r3, #24]
  12598. 80050d2: f003 0303 and.w r3, r3, #3
  12599. 80050d6: 2b00 cmp r3, #0
  12600. 80050d8: d003 beq.n 80050e2 <HAL_TIM_IRQHandler+0x4a>
  12601. {
  12602. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  12603. htim->IC_CaptureCallback(htim);
  12604. #else
  12605. HAL_TIM_IC_CaptureCallback(htim);
  12606. 80050da: 6878 ldr r0, [r7, #4]
  12607. 80050dc: f000 f9fe bl 80054dc <HAL_TIM_IC_CaptureCallback>
  12608. 80050e0: e005 b.n 80050ee <HAL_TIM_IRQHandler+0x56>
  12609. {
  12610. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  12611. htim->OC_DelayElapsedCallback(htim);
  12612. htim->PWM_PulseFinishedCallback(htim);
  12613. #else
  12614. HAL_TIM_OC_DelayElapsedCallback(htim);
  12615. 80050e2: 6878 ldr r0, [r7, #4]
  12616. 80050e4: f000 f9f0 bl 80054c8 <HAL_TIM_OC_DelayElapsedCallback>
  12617. HAL_TIM_PWM_PulseFinishedCallback(htim);
  12618. 80050e8: 6878 ldr r0, [r7, #4]
  12619. 80050ea: f000 fa01 bl 80054f0 <HAL_TIM_PWM_PulseFinishedCallback>
  12620. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  12621. }
  12622. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  12623. 80050ee: 687b ldr r3, [r7, #4]
  12624. 80050f0: 2200 movs r2, #0
  12625. 80050f2: 771a strb r2, [r3, #28]
  12626. }
  12627. }
  12628. }
  12629. /* Capture compare 2 event */
  12630. if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC2) != RESET)
  12631. 80050f4: 687b ldr r3, [r7, #4]
  12632. 80050f6: 681b ldr r3, [r3, #0]
  12633. 80050f8: 691b ldr r3, [r3, #16]
  12634. 80050fa: f003 0304 and.w r3, r3, #4
  12635. 80050fe: 2b04 cmp r3, #4
  12636. 8005100: d122 bne.n 8005148 <HAL_TIM_IRQHandler+0xb0>
  12637. {
  12638. if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC2) != RESET)
  12639. 8005102: 687b ldr r3, [r7, #4]
  12640. 8005104: 681b ldr r3, [r3, #0]
  12641. 8005106: 68db ldr r3, [r3, #12]
  12642. 8005108: f003 0304 and.w r3, r3, #4
  12643. 800510c: 2b04 cmp r3, #4
  12644. 800510e: d11b bne.n 8005148 <HAL_TIM_IRQHandler+0xb0>
  12645. {
  12646. __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC2);
  12647. 8005110: 687b ldr r3, [r7, #4]
  12648. 8005112: 681b ldr r3, [r3, #0]
  12649. 8005114: f06f 0204 mvn.w r2, #4
  12650. 8005118: 611a str r2, [r3, #16]
  12651. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;
  12652. 800511a: 687b ldr r3, [r7, #4]
  12653. 800511c: 2202 movs r2, #2
  12654. 800511e: 771a strb r2, [r3, #28]
  12655. /* Input capture event */
  12656. if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U)
  12657. 8005120: 687b ldr r3, [r7, #4]
  12658. 8005122: 681b ldr r3, [r3, #0]
  12659. 8005124: 699b ldr r3, [r3, #24]
  12660. 8005126: f403 7340 and.w r3, r3, #768 ; 0x300
  12661. 800512a: 2b00 cmp r3, #0
  12662. 800512c: d003 beq.n 8005136 <HAL_TIM_IRQHandler+0x9e>
  12663. {
  12664. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  12665. htim->IC_CaptureCallback(htim);
  12666. #else
  12667. HAL_TIM_IC_CaptureCallback(htim);
  12668. 800512e: 6878 ldr r0, [r7, #4]
  12669. 8005130: f000 f9d4 bl 80054dc <HAL_TIM_IC_CaptureCallback>
  12670. 8005134: e005 b.n 8005142 <HAL_TIM_IRQHandler+0xaa>
  12671. {
  12672. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  12673. htim->OC_DelayElapsedCallback(htim);
  12674. htim->PWM_PulseFinishedCallback(htim);
  12675. #else
  12676. HAL_TIM_OC_DelayElapsedCallback(htim);
  12677. 8005136: 6878 ldr r0, [r7, #4]
  12678. 8005138: f000 f9c6 bl 80054c8 <HAL_TIM_OC_DelayElapsedCallback>
  12679. HAL_TIM_PWM_PulseFinishedCallback(htim);
  12680. 800513c: 6878 ldr r0, [r7, #4]
  12681. 800513e: f000 f9d7 bl 80054f0 <HAL_TIM_PWM_PulseFinishedCallback>
  12682. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  12683. }
  12684. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  12685. 8005142: 687b ldr r3, [r7, #4]
  12686. 8005144: 2200 movs r2, #0
  12687. 8005146: 771a strb r2, [r3, #28]
  12688. }
  12689. }
  12690. /* Capture compare 3 event */
  12691. if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC3) != RESET)
  12692. 8005148: 687b ldr r3, [r7, #4]
  12693. 800514a: 681b ldr r3, [r3, #0]
  12694. 800514c: 691b ldr r3, [r3, #16]
  12695. 800514e: f003 0308 and.w r3, r3, #8
  12696. 8005152: 2b08 cmp r3, #8
  12697. 8005154: d122 bne.n 800519c <HAL_TIM_IRQHandler+0x104>
  12698. {
  12699. if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC3) != RESET)
  12700. 8005156: 687b ldr r3, [r7, #4]
  12701. 8005158: 681b ldr r3, [r3, #0]
  12702. 800515a: 68db ldr r3, [r3, #12]
  12703. 800515c: f003 0308 and.w r3, r3, #8
  12704. 8005160: 2b08 cmp r3, #8
  12705. 8005162: d11b bne.n 800519c <HAL_TIM_IRQHandler+0x104>
  12706. {
  12707. __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC3);
  12708. 8005164: 687b ldr r3, [r7, #4]
  12709. 8005166: 681b ldr r3, [r3, #0]
  12710. 8005168: f06f 0208 mvn.w r2, #8
  12711. 800516c: 611a str r2, [r3, #16]
  12712. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;
  12713. 800516e: 687b ldr r3, [r7, #4]
  12714. 8005170: 2204 movs r2, #4
  12715. 8005172: 771a strb r2, [r3, #28]
  12716. /* Input capture event */
  12717. if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U)
  12718. 8005174: 687b ldr r3, [r7, #4]
  12719. 8005176: 681b ldr r3, [r3, #0]
  12720. 8005178: 69db ldr r3, [r3, #28]
  12721. 800517a: f003 0303 and.w r3, r3, #3
  12722. 800517e: 2b00 cmp r3, #0
  12723. 8005180: d003 beq.n 800518a <HAL_TIM_IRQHandler+0xf2>
  12724. {
  12725. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  12726. htim->IC_CaptureCallback(htim);
  12727. #else
  12728. HAL_TIM_IC_CaptureCallback(htim);
  12729. 8005182: 6878 ldr r0, [r7, #4]
  12730. 8005184: f000 f9aa bl 80054dc <HAL_TIM_IC_CaptureCallback>
  12731. 8005188: e005 b.n 8005196 <HAL_TIM_IRQHandler+0xfe>
  12732. {
  12733. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  12734. htim->OC_DelayElapsedCallback(htim);
  12735. htim->PWM_PulseFinishedCallback(htim);
  12736. #else
  12737. HAL_TIM_OC_DelayElapsedCallback(htim);
  12738. 800518a: 6878 ldr r0, [r7, #4]
  12739. 800518c: f000 f99c bl 80054c8 <HAL_TIM_OC_DelayElapsedCallback>
  12740. HAL_TIM_PWM_PulseFinishedCallback(htim);
  12741. 8005190: 6878 ldr r0, [r7, #4]
  12742. 8005192: f000 f9ad bl 80054f0 <HAL_TIM_PWM_PulseFinishedCallback>
  12743. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  12744. }
  12745. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  12746. 8005196: 687b ldr r3, [r7, #4]
  12747. 8005198: 2200 movs r2, #0
  12748. 800519a: 771a strb r2, [r3, #28]
  12749. }
  12750. }
  12751. /* Capture compare 4 event */
  12752. if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC4) != RESET)
  12753. 800519c: 687b ldr r3, [r7, #4]
  12754. 800519e: 681b ldr r3, [r3, #0]
  12755. 80051a0: 691b ldr r3, [r3, #16]
  12756. 80051a2: f003 0310 and.w r3, r3, #16
  12757. 80051a6: 2b10 cmp r3, #16
  12758. 80051a8: d122 bne.n 80051f0 <HAL_TIM_IRQHandler+0x158>
  12759. {
  12760. if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC4) != RESET)
  12761. 80051aa: 687b ldr r3, [r7, #4]
  12762. 80051ac: 681b ldr r3, [r3, #0]
  12763. 80051ae: 68db ldr r3, [r3, #12]
  12764. 80051b0: f003 0310 and.w r3, r3, #16
  12765. 80051b4: 2b10 cmp r3, #16
  12766. 80051b6: d11b bne.n 80051f0 <HAL_TIM_IRQHandler+0x158>
  12767. {
  12768. __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC4);
  12769. 80051b8: 687b ldr r3, [r7, #4]
  12770. 80051ba: 681b ldr r3, [r3, #0]
  12771. 80051bc: f06f 0210 mvn.w r2, #16
  12772. 80051c0: 611a str r2, [r3, #16]
  12773. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;
  12774. 80051c2: 687b ldr r3, [r7, #4]
  12775. 80051c4: 2208 movs r2, #8
  12776. 80051c6: 771a strb r2, [r3, #28]
  12777. /* Input capture event */
  12778. if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U)
  12779. 80051c8: 687b ldr r3, [r7, #4]
  12780. 80051ca: 681b ldr r3, [r3, #0]
  12781. 80051cc: 69db ldr r3, [r3, #28]
  12782. 80051ce: f403 7340 and.w r3, r3, #768 ; 0x300
  12783. 80051d2: 2b00 cmp r3, #0
  12784. 80051d4: d003 beq.n 80051de <HAL_TIM_IRQHandler+0x146>
  12785. {
  12786. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  12787. htim->IC_CaptureCallback(htim);
  12788. #else
  12789. HAL_TIM_IC_CaptureCallback(htim);
  12790. 80051d6: 6878 ldr r0, [r7, #4]
  12791. 80051d8: f000 f980 bl 80054dc <HAL_TIM_IC_CaptureCallback>
  12792. 80051dc: e005 b.n 80051ea <HAL_TIM_IRQHandler+0x152>
  12793. {
  12794. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  12795. htim->OC_DelayElapsedCallback(htim);
  12796. htim->PWM_PulseFinishedCallback(htim);
  12797. #else
  12798. HAL_TIM_OC_DelayElapsedCallback(htim);
  12799. 80051de: 6878 ldr r0, [r7, #4]
  12800. 80051e0: f000 f972 bl 80054c8 <HAL_TIM_OC_DelayElapsedCallback>
  12801. HAL_TIM_PWM_PulseFinishedCallback(htim);
  12802. 80051e4: 6878 ldr r0, [r7, #4]
  12803. 80051e6: f000 f983 bl 80054f0 <HAL_TIM_PWM_PulseFinishedCallback>
  12804. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  12805. }
  12806. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  12807. 80051ea: 687b ldr r3, [r7, #4]
  12808. 80051ec: 2200 movs r2, #0
  12809. 80051ee: 771a strb r2, [r3, #28]
  12810. }
  12811. }
  12812. /* TIM Update event */
  12813. if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_UPDATE) != RESET)
  12814. 80051f0: 687b ldr r3, [r7, #4]
  12815. 80051f2: 681b ldr r3, [r3, #0]
  12816. 80051f4: 691b ldr r3, [r3, #16]
  12817. 80051f6: f003 0301 and.w r3, r3, #1
  12818. 80051fa: 2b01 cmp r3, #1
  12819. 80051fc: d10e bne.n 800521c <HAL_TIM_IRQHandler+0x184>
  12820. {
  12821. if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) != RESET)
  12822. 80051fe: 687b ldr r3, [r7, #4]
  12823. 8005200: 681b ldr r3, [r3, #0]
  12824. 8005202: 68db ldr r3, [r3, #12]
  12825. 8005204: f003 0301 and.w r3, r3, #1
  12826. 8005208: 2b01 cmp r3, #1
  12827. 800520a: d107 bne.n 800521c <HAL_TIM_IRQHandler+0x184>
  12828. {
  12829. __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);
  12830. 800520c: 687b ldr r3, [r7, #4]
  12831. 800520e: 681b ldr r3, [r3, #0]
  12832. 8005210: f06f 0201 mvn.w r2, #1
  12833. 8005214: 611a str r2, [r3, #16]
  12834. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  12835. htim->PeriodElapsedCallback(htim);
  12836. #else
  12837. HAL_TIM_PeriodElapsedCallback(htim);
  12838. 8005216: 6878 ldr r0, [r7, #4]
  12839. 8005218: f7fb fbd8 bl 80009cc <HAL_TIM_PeriodElapsedCallback>
  12840. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  12841. }
  12842. }
  12843. /* TIM Break input event */
  12844. if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_BREAK) != RESET)
  12845. 800521c: 687b ldr r3, [r7, #4]
  12846. 800521e: 681b ldr r3, [r3, #0]
  12847. 8005220: 691b ldr r3, [r3, #16]
  12848. 8005222: f003 0380 and.w r3, r3, #128 ; 0x80
  12849. 8005226: 2b80 cmp r3, #128 ; 0x80
  12850. 8005228: d10e bne.n 8005248 <HAL_TIM_IRQHandler+0x1b0>
  12851. {
  12852. if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_BREAK) != RESET)
  12853. 800522a: 687b ldr r3, [r7, #4]
  12854. 800522c: 681b ldr r3, [r3, #0]
  12855. 800522e: 68db ldr r3, [r3, #12]
  12856. 8005230: f003 0380 and.w r3, r3, #128 ; 0x80
  12857. 8005234: 2b80 cmp r3, #128 ; 0x80
  12858. 8005236: d107 bne.n 8005248 <HAL_TIM_IRQHandler+0x1b0>
  12859. {
  12860. __HAL_TIM_CLEAR_IT(htim, TIM_IT_BREAK);
  12861. 8005238: 687b ldr r3, [r7, #4]
  12862. 800523a: 681b ldr r3, [r3, #0]
  12863. 800523c: f06f 0280 mvn.w r2, #128 ; 0x80
  12864. 8005240: 611a str r2, [r3, #16]
  12865. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  12866. htim->BreakCallback(htim);
  12867. #else
  12868. HAL_TIMEx_BreakCallback(htim);
  12869. 8005242: 6878 ldr r0, [r7, #4]
  12870. 8005244: f000 fb52 bl 80058ec <HAL_TIMEx_BreakCallback>
  12871. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  12872. }
  12873. }
  12874. /* TIM Break2 input event */
  12875. if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_BREAK2) != RESET)
  12876. 8005248: 687b ldr r3, [r7, #4]
  12877. 800524a: 681b ldr r3, [r3, #0]
  12878. 800524c: 691b ldr r3, [r3, #16]
  12879. 800524e: f403 7380 and.w r3, r3, #256 ; 0x100
  12880. 8005252: f5b3 7f80 cmp.w r3, #256 ; 0x100
  12881. 8005256: d10e bne.n 8005276 <HAL_TIM_IRQHandler+0x1de>
  12882. {
  12883. if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_BREAK) != RESET)
  12884. 8005258: 687b ldr r3, [r7, #4]
  12885. 800525a: 681b ldr r3, [r3, #0]
  12886. 800525c: 68db ldr r3, [r3, #12]
  12887. 800525e: f003 0380 and.w r3, r3, #128 ; 0x80
  12888. 8005262: 2b80 cmp r3, #128 ; 0x80
  12889. 8005264: d107 bne.n 8005276 <HAL_TIM_IRQHandler+0x1de>
  12890. {
  12891. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK2);
  12892. 8005266: 687b ldr r3, [r7, #4]
  12893. 8005268: 681b ldr r3, [r3, #0]
  12894. 800526a: f46f 7280 mvn.w r2, #256 ; 0x100
  12895. 800526e: 611a str r2, [r3, #16]
  12896. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  12897. htim->Break2Callback(htim);
  12898. #else
  12899. HAL_TIMEx_Break2Callback(htim);
  12900. 8005270: 6878 ldr r0, [r7, #4]
  12901. 8005272: f000 fb45 bl 8005900 <HAL_TIMEx_Break2Callback>
  12902. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  12903. }
  12904. }
  12905. /* TIM Trigger detection event */
  12906. if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_TRIGGER) != RESET)
  12907. 8005276: 687b ldr r3, [r7, #4]
  12908. 8005278: 681b ldr r3, [r3, #0]
  12909. 800527a: 691b ldr r3, [r3, #16]
  12910. 800527c: f003 0340 and.w r3, r3, #64 ; 0x40
  12911. 8005280: 2b40 cmp r3, #64 ; 0x40
  12912. 8005282: d10e bne.n 80052a2 <HAL_TIM_IRQHandler+0x20a>
  12913. {
  12914. if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_TRIGGER) != RESET)
  12915. 8005284: 687b ldr r3, [r7, #4]
  12916. 8005286: 681b ldr r3, [r3, #0]
  12917. 8005288: 68db ldr r3, [r3, #12]
  12918. 800528a: f003 0340 and.w r3, r3, #64 ; 0x40
  12919. 800528e: 2b40 cmp r3, #64 ; 0x40
  12920. 8005290: d107 bne.n 80052a2 <HAL_TIM_IRQHandler+0x20a>
  12921. {
  12922. __HAL_TIM_CLEAR_IT(htim, TIM_IT_TRIGGER);
  12923. 8005292: 687b ldr r3, [r7, #4]
  12924. 8005294: 681b ldr r3, [r3, #0]
  12925. 8005296: f06f 0240 mvn.w r2, #64 ; 0x40
  12926. 800529a: 611a str r2, [r3, #16]
  12927. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  12928. htim->TriggerCallback(htim);
  12929. #else
  12930. HAL_TIM_TriggerCallback(htim);
  12931. 800529c: 6878 ldr r0, [r7, #4]
  12932. 800529e: f000 f931 bl 8005504 <HAL_TIM_TriggerCallback>
  12933. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  12934. }
  12935. }
  12936. /* TIM commutation event */
  12937. if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_COM) != RESET)
  12938. 80052a2: 687b ldr r3, [r7, #4]
  12939. 80052a4: 681b ldr r3, [r3, #0]
  12940. 80052a6: 691b ldr r3, [r3, #16]
  12941. 80052a8: f003 0320 and.w r3, r3, #32
  12942. 80052ac: 2b20 cmp r3, #32
  12943. 80052ae: d10e bne.n 80052ce <HAL_TIM_IRQHandler+0x236>
  12944. {
  12945. if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_COM) != RESET)
  12946. 80052b0: 687b ldr r3, [r7, #4]
  12947. 80052b2: 681b ldr r3, [r3, #0]
  12948. 80052b4: 68db ldr r3, [r3, #12]
  12949. 80052b6: f003 0320 and.w r3, r3, #32
  12950. 80052ba: 2b20 cmp r3, #32
  12951. 80052bc: d107 bne.n 80052ce <HAL_TIM_IRQHandler+0x236>
  12952. {
  12953. __HAL_TIM_CLEAR_IT(htim, TIM_FLAG_COM);
  12954. 80052be: 687b ldr r3, [r7, #4]
  12955. 80052c0: 681b ldr r3, [r3, #0]
  12956. 80052c2: f06f 0220 mvn.w r2, #32
  12957. 80052c6: 611a str r2, [r3, #16]
  12958. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  12959. htim->CommutationCallback(htim);
  12960. #else
  12961. HAL_TIMEx_CommutCallback(htim);
  12962. 80052c8: 6878 ldr r0, [r7, #4]
  12963. 80052ca: f000 fb05 bl 80058d8 <HAL_TIMEx_CommutCallback>
  12964. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  12965. }
  12966. }
  12967. }
  12968. 80052ce: bf00 nop
  12969. 80052d0: 3708 adds r7, #8
  12970. 80052d2: 46bd mov sp, r7
  12971. 80052d4: bd80 pop {r7, pc}
  12972. ...
  12973. 080052d8 <HAL_TIM_ConfigClockSource>:
  12974. * @param sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that
  12975. * contains the clock source information for the TIM peripheral.
  12976. * @retval HAL status
  12977. */
  12978. HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig)
  12979. {
  12980. 80052d8: b580 push {r7, lr}
  12981. 80052da: b084 sub sp, #16
  12982. 80052dc: af00 add r7, sp, #0
  12983. 80052de: 6078 str r0, [r7, #4]
  12984. 80052e0: 6039 str r1, [r7, #0]
  12985. HAL_StatusTypeDef status = HAL_OK;
  12986. 80052e2: 2300 movs r3, #0
  12987. 80052e4: 73fb strb r3, [r7, #15]
  12988. uint32_t tmpsmcr;
  12989. /* Process Locked */
  12990. __HAL_LOCK(htim);
  12991. 80052e6: 687b ldr r3, [r7, #4]
  12992. 80052e8: f893 303c ldrb.w r3, [r3, #60] ; 0x3c
  12993. 80052ec: 2b01 cmp r3, #1
  12994. 80052ee: d101 bne.n 80052f4 <HAL_TIM_ConfigClockSource+0x1c>
  12995. 80052f0: 2302 movs r3, #2
  12996. 80052f2: e0dc b.n 80054ae <HAL_TIM_ConfigClockSource+0x1d6>
  12997. 80052f4: 687b ldr r3, [r7, #4]
  12998. 80052f6: 2201 movs r2, #1
  12999. 80052f8: f883 203c strb.w r2, [r3, #60] ; 0x3c
  13000. htim->State = HAL_TIM_STATE_BUSY;
  13001. 80052fc: 687b ldr r3, [r7, #4]
  13002. 80052fe: 2202 movs r2, #2
  13003. 8005300: f883 203d strb.w r2, [r3, #61] ; 0x3d
  13004. /* Check the parameters */
  13005. assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource));
  13006. /* Reset the SMS, TS, ECE, ETPS and ETRF bits */
  13007. tmpsmcr = htim->Instance->SMCR;
  13008. 8005304: 687b ldr r3, [r7, #4]
  13009. 8005306: 681b ldr r3, [r3, #0]
  13010. 8005308: 689b ldr r3, [r3, #8]
  13011. 800530a: 60bb str r3, [r7, #8]
  13012. tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS);
  13013. 800530c: 68ba ldr r2, [r7, #8]
  13014. 800530e: 4b6a ldr r3, [pc, #424] ; (80054b8 <HAL_TIM_ConfigClockSource+0x1e0>)
  13015. 8005310: 4013 ands r3, r2
  13016. 8005312: 60bb str r3, [r7, #8]
  13017. tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);
  13018. 8005314: 68bb ldr r3, [r7, #8]
  13019. 8005316: f423 437f bic.w r3, r3, #65280 ; 0xff00
  13020. 800531a: 60bb str r3, [r7, #8]
  13021. htim->Instance->SMCR = tmpsmcr;
  13022. 800531c: 687b ldr r3, [r7, #4]
  13023. 800531e: 681b ldr r3, [r3, #0]
  13024. 8005320: 68ba ldr r2, [r7, #8]
  13025. 8005322: 609a str r2, [r3, #8]
  13026. switch (sClockSourceConfig->ClockSource)
  13027. 8005324: 683b ldr r3, [r7, #0]
  13028. 8005326: 681b ldr r3, [r3, #0]
  13029. 8005328: 4a64 ldr r2, [pc, #400] ; (80054bc <HAL_TIM_ConfigClockSource+0x1e4>)
  13030. 800532a: 4293 cmp r3, r2
  13031. 800532c: f000 80a9 beq.w 8005482 <HAL_TIM_ConfigClockSource+0x1aa>
  13032. 8005330: 4a62 ldr r2, [pc, #392] ; (80054bc <HAL_TIM_ConfigClockSource+0x1e4>)
  13033. 8005332: 4293 cmp r3, r2
  13034. 8005334: f200 80ae bhi.w 8005494 <HAL_TIM_ConfigClockSource+0x1bc>
  13035. 8005338: 4a61 ldr r2, [pc, #388] ; (80054c0 <HAL_TIM_ConfigClockSource+0x1e8>)
  13036. 800533a: 4293 cmp r3, r2
  13037. 800533c: f000 80a1 beq.w 8005482 <HAL_TIM_ConfigClockSource+0x1aa>
  13038. 8005340: 4a5f ldr r2, [pc, #380] ; (80054c0 <HAL_TIM_ConfigClockSource+0x1e8>)
  13039. 8005342: 4293 cmp r3, r2
  13040. 8005344: f200 80a6 bhi.w 8005494 <HAL_TIM_ConfigClockSource+0x1bc>
  13041. 8005348: 4a5e ldr r2, [pc, #376] ; (80054c4 <HAL_TIM_ConfigClockSource+0x1ec>)
  13042. 800534a: 4293 cmp r3, r2
  13043. 800534c: f000 8099 beq.w 8005482 <HAL_TIM_ConfigClockSource+0x1aa>
  13044. 8005350: 4a5c ldr r2, [pc, #368] ; (80054c4 <HAL_TIM_ConfigClockSource+0x1ec>)
  13045. 8005352: 4293 cmp r3, r2
  13046. 8005354: f200 809e bhi.w 8005494 <HAL_TIM_ConfigClockSource+0x1bc>
  13047. 8005358: f1b3 1f10 cmp.w r3, #1048592 ; 0x100010
  13048. 800535c: f000 8091 beq.w 8005482 <HAL_TIM_ConfigClockSource+0x1aa>
  13049. 8005360: f1b3 1f10 cmp.w r3, #1048592 ; 0x100010
  13050. 8005364: f200 8096 bhi.w 8005494 <HAL_TIM_ConfigClockSource+0x1bc>
  13051. 8005368: f5b3 1f80 cmp.w r3, #1048576 ; 0x100000
  13052. 800536c: f000 8089 beq.w 8005482 <HAL_TIM_ConfigClockSource+0x1aa>
  13053. 8005370: f5b3 1f80 cmp.w r3, #1048576 ; 0x100000
  13054. 8005374: f200 808e bhi.w 8005494 <HAL_TIM_ConfigClockSource+0x1bc>
  13055. 8005378: f5b3 5f00 cmp.w r3, #8192 ; 0x2000
  13056. 800537c: d03e beq.n 80053fc <HAL_TIM_ConfigClockSource+0x124>
  13057. 800537e: f5b3 5f00 cmp.w r3, #8192 ; 0x2000
  13058. 8005382: f200 8087 bhi.w 8005494 <HAL_TIM_ConfigClockSource+0x1bc>
  13059. 8005386: f5b3 5f80 cmp.w r3, #4096 ; 0x1000
  13060. 800538a: f000 8086 beq.w 800549a <HAL_TIM_ConfigClockSource+0x1c2>
  13061. 800538e: f5b3 5f80 cmp.w r3, #4096 ; 0x1000
  13062. 8005392: d87f bhi.n 8005494 <HAL_TIM_ConfigClockSource+0x1bc>
  13063. 8005394: 2b70 cmp r3, #112 ; 0x70
  13064. 8005396: d01a beq.n 80053ce <HAL_TIM_ConfigClockSource+0xf6>
  13065. 8005398: 2b70 cmp r3, #112 ; 0x70
  13066. 800539a: d87b bhi.n 8005494 <HAL_TIM_ConfigClockSource+0x1bc>
  13067. 800539c: 2b60 cmp r3, #96 ; 0x60
  13068. 800539e: d050 beq.n 8005442 <HAL_TIM_ConfigClockSource+0x16a>
  13069. 80053a0: 2b60 cmp r3, #96 ; 0x60
  13070. 80053a2: d877 bhi.n 8005494 <HAL_TIM_ConfigClockSource+0x1bc>
  13071. 80053a4: 2b50 cmp r3, #80 ; 0x50
  13072. 80053a6: d03c beq.n 8005422 <HAL_TIM_ConfigClockSource+0x14a>
  13073. 80053a8: 2b50 cmp r3, #80 ; 0x50
  13074. 80053aa: d873 bhi.n 8005494 <HAL_TIM_ConfigClockSource+0x1bc>
  13075. 80053ac: 2b40 cmp r3, #64 ; 0x40
  13076. 80053ae: d058 beq.n 8005462 <HAL_TIM_ConfigClockSource+0x18a>
  13077. 80053b0: 2b40 cmp r3, #64 ; 0x40
  13078. 80053b2: d86f bhi.n 8005494 <HAL_TIM_ConfigClockSource+0x1bc>
  13079. 80053b4: 2b30 cmp r3, #48 ; 0x30
  13080. 80053b6: d064 beq.n 8005482 <HAL_TIM_ConfigClockSource+0x1aa>
  13081. 80053b8: 2b30 cmp r3, #48 ; 0x30
  13082. 80053ba: d86b bhi.n 8005494 <HAL_TIM_ConfigClockSource+0x1bc>
  13083. 80053bc: 2b20 cmp r3, #32
  13084. 80053be: d060 beq.n 8005482 <HAL_TIM_ConfigClockSource+0x1aa>
  13085. 80053c0: 2b20 cmp r3, #32
  13086. 80053c2: d867 bhi.n 8005494 <HAL_TIM_ConfigClockSource+0x1bc>
  13087. 80053c4: 2b00 cmp r3, #0
  13088. 80053c6: d05c beq.n 8005482 <HAL_TIM_ConfigClockSource+0x1aa>
  13089. 80053c8: 2b10 cmp r3, #16
  13090. 80053ca: d05a beq.n 8005482 <HAL_TIM_ConfigClockSource+0x1aa>
  13091. 80053cc: e062 b.n 8005494 <HAL_TIM_ConfigClockSource+0x1bc>
  13092. assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));
  13093. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  13094. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  13095. /* Configure the ETR Clock source */
  13096. TIM_ETR_SetConfig(htim->Instance,
  13097. 80053ce: 687b ldr r3, [r7, #4]
  13098. 80053d0: 6818 ldr r0, [r3, #0]
  13099. 80053d2: 683b ldr r3, [r7, #0]
  13100. 80053d4: 6899 ldr r1, [r3, #8]
  13101. 80053d6: 683b ldr r3, [r7, #0]
  13102. 80053d8: 685a ldr r2, [r3, #4]
  13103. 80053da: 683b ldr r3, [r7, #0]
  13104. 80053dc: 68db ldr r3, [r3, #12]
  13105. 80053de: f000 f9bf bl 8005760 <TIM_ETR_SetConfig>
  13106. sClockSourceConfig->ClockPrescaler,
  13107. sClockSourceConfig->ClockPolarity,
  13108. sClockSourceConfig->ClockFilter);
  13109. /* Select the External clock mode1 and the ETRF trigger */
  13110. tmpsmcr = htim->Instance->SMCR;
  13111. 80053e2: 687b ldr r3, [r7, #4]
  13112. 80053e4: 681b ldr r3, [r3, #0]
  13113. 80053e6: 689b ldr r3, [r3, #8]
  13114. 80053e8: 60bb str r3, [r7, #8]
  13115. tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1);
  13116. 80053ea: 68bb ldr r3, [r7, #8]
  13117. 80053ec: f043 0377 orr.w r3, r3, #119 ; 0x77
  13118. 80053f0: 60bb str r3, [r7, #8]
  13119. /* Write to TIMx SMCR */
  13120. htim->Instance->SMCR = tmpsmcr;
  13121. 80053f2: 687b ldr r3, [r7, #4]
  13122. 80053f4: 681b ldr r3, [r3, #0]
  13123. 80053f6: 68ba ldr r2, [r7, #8]
  13124. 80053f8: 609a str r2, [r3, #8]
  13125. break;
  13126. 80053fa: e04f b.n 800549c <HAL_TIM_ConfigClockSource+0x1c4>
  13127. assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));
  13128. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  13129. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  13130. /* Configure the ETR Clock source */
  13131. TIM_ETR_SetConfig(htim->Instance,
  13132. 80053fc: 687b ldr r3, [r7, #4]
  13133. 80053fe: 6818 ldr r0, [r3, #0]
  13134. 8005400: 683b ldr r3, [r7, #0]
  13135. 8005402: 6899 ldr r1, [r3, #8]
  13136. 8005404: 683b ldr r3, [r7, #0]
  13137. 8005406: 685a ldr r2, [r3, #4]
  13138. 8005408: 683b ldr r3, [r7, #0]
  13139. 800540a: 68db ldr r3, [r3, #12]
  13140. 800540c: f000 f9a8 bl 8005760 <TIM_ETR_SetConfig>
  13141. sClockSourceConfig->ClockPrescaler,
  13142. sClockSourceConfig->ClockPolarity,
  13143. sClockSourceConfig->ClockFilter);
  13144. /* Enable the External clock mode2 */
  13145. htim->Instance->SMCR |= TIM_SMCR_ECE;
  13146. 8005410: 687b ldr r3, [r7, #4]
  13147. 8005412: 681b ldr r3, [r3, #0]
  13148. 8005414: 689a ldr r2, [r3, #8]
  13149. 8005416: 687b ldr r3, [r7, #4]
  13150. 8005418: 681b ldr r3, [r3, #0]
  13151. 800541a: f442 4280 orr.w r2, r2, #16384 ; 0x4000
  13152. 800541e: 609a str r2, [r3, #8]
  13153. break;
  13154. 8005420: e03c b.n 800549c <HAL_TIM_ConfigClockSource+0x1c4>
  13155. /* Check TI1 input conditioning related parameters */
  13156. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  13157. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  13158. TIM_TI1_ConfigInputStage(htim->Instance,
  13159. 8005422: 687b ldr r3, [r7, #4]
  13160. 8005424: 6818 ldr r0, [r3, #0]
  13161. 8005426: 683b ldr r3, [r7, #0]
  13162. 8005428: 6859 ldr r1, [r3, #4]
  13163. 800542a: 683b ldr r3, [r7, #0]
  13164. 800542c: 68db ldr r3, [r3, #12]
  13165. 800542e: 461a mov r2, r3
  13166. 8005430: f000 f918 bl 8005664 <TIM_TI1_ConfigInputStage>
  13167. sClockSourceConfig->ClockPolarity,
  13168. sClockSourceConfig->ClockFilter);
  13169. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1);
  13170. 8005434: 687b ldr r3, [r7, #4]
  13171. 8005436: 681b ldr r3, [r3, #0]
  13172. 8005438: 2150 movs r1, #80 ; 0x50
  13173. 800543a: 4618 mov r0, r3
  13174. 800543c: f000 f972 bl 8005724 <TIM_ITRx_SetConfig>
  13175. break;
  13176. 8005440: e02c b.n 800549c <HAL_TIM_ConfigClockSource+0x1c4>
  13177. /* Check TI2 input conditioning related parameters */
  13178. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  13179. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  13180. TIM_TI2_ConfigInputStage(htim->Instance,
  13181. 8005442: 687b ldr r3, [r7, #4]
  13182. 8005444: 6818 ldr r0, [r3, #0]
  13183. 8005446: 683b ldr r3, [r7, #0]
  13184. 8005448: 6859 ldr r1, [r3, #4]
  13185. 800544a: 683b ldr r3, [r7, #0]
  13186. 800544c: 68db ldr r3, [r3, #12]
  13187. 800544e: 461a mov r2, r3
  13188. 8005450: f000 f937 bl 80056c2 <TIM_TI2_ConfigInputStage>
  13189. sClockSourceConfig->ClockPolarity,
  13190. sClockSourceConfig->ClockFilter);
  13191. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2);
  13192. 8005454: 687b ldr r3, [r7, #4]
  13193. 8005456: 681b ldr r3, [r3, #0]
  13194. 8005458: 2160 movs r1, #96 ; 0x60
  13195. 800545a: 4618 mov r0, r3
  13196. 800545c: f000 f962 bl 8005724 <TIM_ITRx_SetConfig>
  13197. break;
  13198. 8005460: e01c b.n 800549c <HAL_TIM_ConfigClockSource+0x1c4>
  13199. /* Check TI1 input conditioning related parameters */
  13200. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  13201. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  13202. TIM_TI1_ConfigInputStage(htim->Instance,
  13203. 8005462: 687b ldr r3, [r7, #4]
  13204. 8005464: 6818 ldr r0, [r3, #0]
  13205. 8005466: 683b ldr r3, [r7, #0]
  13206. 8005468: 6859 ldr r1, [r3, #4]
  13207. 800546a: 683b ldr r3, [r7, #0]
  13208. 800546c: 68db ldr r3, [r3, #12]
  13209. 800546e: 461a mov r2, r3
  13210. 8005470: f000 f8f8 bl 8005664 <TIM_TI1_ConfigInputStage>
  13211. sClockSourceConfig->ClockPolarity,
  13212. sClockSourceConfig->ClockFilter);
  13213. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED);
  13214. 8005474: 687b ldr r3, [r7, #4]
  13215. 8005476: 681b ldr r3, [r3, #0]
  13216. 8005478: 2140 movs r1, #64 ; 0x40
  13217. 800547a: 4618 mov r0, r3
  13218. 800547c: f000 f952 bl 8005724 <TIM_ITRx_SetConfig>
  13219. break;
  13220. 8005480: e00c b.n 800549c <HAL_TIM_ConfigClockSource+0x1c4>
  13221. case TIM_CLOCKSOURCE_ITR8:
  13222. {
  13223. /* Check whether or not the timer instance supports internal trigger input */
  13224. assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance));
  13225. TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource);
  13226. 8005482: 687b ldr r3, [r7, #4]
  13227. 8005484: 681a ldr r2, [r3, #0]
  13228. 8005486: 683b ldr r3, [r7, #0]
  13229. 8005488: 681b ldr r3, [r3, #0]
  13230. 800548a: 4619 mov r1, r3
  13231. 800548c: 4610 mov r0, r2
  13232. 800548e: f000 f949 bl 8005724 <TIM_ITRx_SetConfig>
  13233. break;
  13234. 8005492: e003 b.n 800549c <HAL_TIM_ConfigClockSource+0x1c4>
  13235. }
  13236. default:
  13237. status = HAL_ERROR;
  13238. 8005494: 2301 movs r3, #1
  13239. 8005496: 73fb strb r3, [r7, #15]
  13240. break;
  13241. 8005498: e000 b.n 800549c <HAL_TIM_ConfigClockSource+0x1c4>
  13242. break;
  13243. 800549a: bf00 nop
  13244. }
  13245. htim->State = HAL_TIM_STATE_READY;
  13246. 800549c: 687b ldr r3, [r7, #4]
  13247. 800549e: 2201 movs r2, #1
  13248. 80054a0: f883 203d strb.w r2, [r3, #61] ; 0x3d
  13249. __HAL_UNLOCK(htim);
  13250. 80054a4: 687b ldr r3, [r7, #4]
  13251. 80054a6: 2200 movs r2, #0
  13252. 80054a8: f883 203c strb.w r2, [r3, #60] ; 0x3c
  13253. return status;
  13254. 80054ac: 7bfb ldrb r3, [r7, #15]
  13255. }
  13256. 80054ae: 4618 mov r0, r3
  13257. 80054b0: 3710 adds r7, #16
  13258. 80054b2: 46bd mov sp, r7
  13259. 80054b4: bd80 pop {r7, pc}
  13260. 80054b6: bf00 nop
  13261. 80054b8: ffceff88 .word 0xffceff88
  13262. 80054bc: 00100040 .word 0x00100040
  13263. 80054c0: 00100030 .word 0x00100030
  13264. 80054c4: 00100020 .word 0x00100020
  13265. 080054c8 <HAL_TIM_OC_DelayElapsedCallback>:
  13266. * @brief Output Compare callback in non-blocking mode
  13267. * @param htim TIM OC handle
  13268. * @retval None
  13269. */
  13270. __weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
  13271. {
  13272. 80054c8: b480 push {r7}
  13273. 80054ca: b083 sub sp, #12
  13274. 80054cc: af00 add r7, sp, #0
  13275. 80054ce: 6078 str r0, [r7, #4]
  13276. UNUSED(htim);
  13277. /* NOTE : This function should not be modified, when the callback is needed,
  13278. the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file
  13279. */
  13280. }
  13281. 80054d0: bf00 nop
  13282. 80054d2: 370c adds r7, #12
  13283. 80054d4: 46bd mov sp, r7
  13284. 80054d6: f85d 7b04 ldr.w r7, [sp], #4
  13285. 80054da: 4770 bx lr
  13286. 080054dc <HAL_TIM_IC_CaptureCallback>:
  13287. * @brief Input Capture callback in non-blocking mode
  13288. * @param htim TIM IC handle
  13289. * @retval None
  13290. */
  13291. __weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
  13292. {
  13293. 80054dc: b480 push {r7}
  13294. 80054de: b083 sub sp, #12
  13295. 80054e0: af00 add r7, sp, #0
  13296. 80054e2: 6078 str r0, [r7, #4]
  13297. UNUSED(htim);
  13298. /* NOTE : This function should not be modified, when the callback is needed,
  13299. the HAL_TIM_IC_CaptureCallback could be implemented in the user file
  13300. */
  13301. }
  13302. 80054e4: bf00 nop
  13303. 80054e6: 370c adds r7, #12
  13304. 80054e8: 46bd mov sp, r7
  13305. 80054ea: f85d 7b04 ldr.w r7, [sp], #4
  13306. 80054ee: 4770 bx lr
  13307. 080054f0 <HAL_TIM_PWM_PulseFinishedCallback>:
  13308. * @brief PWM Pulse finished callback in non-blocking mode
  13309. * @param htim TIM handle
  13310. * @retval None
  13311. */
  13312. __weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
  13313. {
  13314. 80054f0: b480 push {r7}
  13315. 80054f2: b083 sub sp, #12
  13316. 80054f4: af00 add r7, sp, #0
  13317. 80054f6: 6078 str r0, [r7, #4]
  13318. UNUSED(htim);
  13319. /* NOTE : This function should not be modified, when the callback is needed,
  13320. the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file
  13321. */
  13322. }
  13323. 80054f8: bf00 nop
  13324. 80054fa: 370c adds r7, #12
  13325. 80054fc: 46bd mov sp, r7
  13326. 80054fe: f85d 7b04 ldr.w r7, [sp], #4
  13327. 8005502: 4770 bx lr
  13328. 08005504 <HAL_TIM_TriggerCallback>:
  13329. * @brief Hall Trigger detection callback in non-blocking mode
  13330. * @param htim TIM handle
  13331. * @retval None
  13332. */
  13333. __weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim)
  13334. {
  13335. 8005504: b480 push {r7}
  13336. 8005506: b083 sub sp, #12
  13337. 8005508: af00 add r7, sp, #0
  13338. 800550a: 6078 str r0, [r7, #4]
  13339. UNUSED(htim);
  13340. /* NOTE : This function should not be modified, when the callback is needed,
  13341. the HAL_TIM_TriggerCallback could be implemented in the user file
  13342. */
  13343. }
  13344. 800550c: bf00 nop
  13345. 800550e: 370c adds r7, #12
  13346. 8005510: 46bd mov sp, r7
  13347. 8005512: f85d 7b04 ldr.w r7, [sp], #4
  13348. 8005516: 4770 bx lr
  13349. 08005518 <TIM_Base_SetConfig>:
  13350. * @param TIMx TIM peripheral
  13351. * @param Structure TIM Base configuration structure
  13352. * @retval None
  13353. */
  13354. void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure)
  13355. {
  13356. 8005518: b480 push {r7}
  13357. 800551a: b085 sub sp, #20
  13358. 800551c: af00 add r7, sp, #0
  13359. 800551e: 6078 str r0, [r7, #4]
  13360. 8005520: 6039 str r1, [r7, #0]
  13361. uint32_t tmpcr1;
  13362. tmpcr1 = TIMx->CR1;
  13363. 8005522: 687b ldr r3, [r7, #4]
  13364. 8005524: 681b ldr r3, [r3, #0]
  13365. 8005526: 60fb str r3, [r7, #12]
  13366. /* Set TIM Time Base Unit parameters ---------------------------------------*/
  13367. if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx))
  13368. 8005528: 687b ldr r3, [r7, #4]
  13369. 800552a: 4a44 ldr r2, [pc, #272] ; (800563c <TIM_Base_SetConfig+0x124>)
  13370. 800552c: 4293 cmp r3, r2
  13371. 800552e: d013 beq.n 8005558 <TIM_Base_SetConfig+0x40>
  13372. 8005530: 687b ldr r3, [r7, #4]
  13373. 8005532: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
  13374. 8005536: d00f beq.n 8005558 <TIM_Base_SetConfig+0x40>
  13375. 8005538: 687b ldr r3, [r7, #4]
  13376. 800553a: 4a41 ldr r2, [pc, #260] ; (8005640 <TIM_Base_SetConfig+0x128>)
  13377. 800553c: 4293 cmp r3, r2
  13378. 800553e: d00b beq.n 8005558 <TIM_Base_SetConfig+0x40>
  13379. 8005540: 687b ldr r3, [r7, #4]
  13380. 8005542: 4a40 ldr r2, [pc, #256] ; (8005644 <TIM_Base_SetConfig+0x12c>)
  13381. 8005544: 4293 cmp r3, r2
  13382. 8005546: d007 beq.n 8005558 <TIM_Base_SetConfig+0x40>
  13383. 8005548: 687b ldr r3, [r7, #4]
  13384. 800554a: 4a3f ldr r2, [pc, #252] ; (8005648 <TIM_Base_SetConfig+0x130>)
  13385. 800554c: 4293 cmp r3, r2
  13386. 800554e: d003 beq.n 8005558 <TIM_Base_SetConfig+0x40>
  13387. 8005550: 687b ldr r3, [r7, #4]
  13388. 8005552: 4a3e ldr r2, [pc, #248] ; (800564c <TIM_Base_SetConfig+0x134>)
  13389. 8005554: 4293 cmp r3, r2
  13390. 8005556: d108 bne.n 800556a <TIM_Base_SetConfig+0x52>
  13391. {
  13392. /* Select the Counter Mode */
  13393. tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);
  13394. 8005558: 68fb ldr r3, [r7, #12]
  13395. 800555a: f023 0370 bic.w r3, r3, #112 ; 0x70
  13396. 800555e: 60fb str r3, [r7, #12]
  13397. tmpcr1 |= Structure->CounterMode;
  13398. 8005560: 683b ldr r3, [r7, #0]
  13399. 8005562: 685b ldr r3, [r3, #4]
  13400. 8005564: 68fa ldr r2, [r7, #12]
  13401. 8005566: 4313 orrs r3, r2
  13402. 8005568: 60fb str r3, [r7, #12]
  13403. }
  13404. if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx))
  13405. 800556a: 687b ldr r3, [r7, #4]
  13406. 800556c: 4a33 ldr r2, [pc, #204] ; (800563c <TIM_Base_SetConfig+0x124>)
  13407. 800556e: 4293 cmp r3, r2
  13408. 8005570: d027 beq.n 80055c2 <TIM_Base_SetConfig+0xaa>
  13409. 8005572: 687b ldr r3, [r7, #4]
  13410. 8005574: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
  13411. 8005578: d023 beq.n 80055c2 <TIM_Base_SetConfig+0xaa>
  13412. 800557a: 687b ldr r3, [r7, #4]
  13413. 800557c: 4a30 ldr r2, [pc, #192] ; (8005640 <TIM_Base_SetConfig+0x128>)
  13414. 800557e: 4293 cmp r3, r2
  13415. 8005580: d01f beq.n 80055c2 <TIM_Base_SetConfig+0xaa>
  13416. 8005582: 687b ldr r3, [r7, #4]
  13417. 8005584: 4a2f ldr r2, [pc, #188] ; (8005644 <TIM_Base_SetConfig+0x12c>)
  13418. 8005586: 4293 cmp r3, r2
  13419. 8005588: d01b beq.n 80055c2 <TIM_Base_SetConfig+0xaa>
  13420. 800558a: 687b ldr r3, [r7, #4]
  13421. 800558c: 4a2e ldr r2, [pc, #184] ; (8005648 <TIM_Base_SetConfig+0x130>)
  13422. 800558e: 4293 cmp r3, r2
  13423. 8005590: d017 beq.n 80055c2 <TIM_Base_SetConfig+0xaa>
  13424. 8005592: 687b ldr r3, [r7, #4]
  13425. 8005594: 4a2d ldr r2, [pc, #180] ; (800564c <TIM_Base_SetConfig+0x134>)
  13426. 8005596: 4293 cmp r3, r2
  13427. 8005598: d013 beq.n 80055c2 <TIM_Base_SetConfig+0xaa>
  13428. 800559a: 687b ldr r3, [r7, #4]
  13429. 800559c: 4a2c ldr r2, [pc, #176] ; (8005650 <TIM_Base_SetConfig+0x138>)
  13430. 800559e: 4293 cmp r3, r2
  13431. 80055a0: d00f beq.n 80055c2 <TIM_Base_SetConfig+0xaa>
  13432. 80055a2: 687b ldr r3, [r7, #4]
  13433. 80055a4: 4a2b ldr r2, [pc, #172] ; (8005654 <TIM_Base_SetConfig+0x13c>)
  13434. 80055a6: 4293 cmp r3, r2
  13435. 80055a8: d00b beq.n 80055c2 <TIM_Base_SetConfig+0xaa>
  13436. 80055aa: 687b ldr r3, [r7, #4]
  13437. 80055ac: 4a2a ldr r2, [pc, #168] ; (8005658 <TIM_Base_SetConfig+0x140>)
  13438. 80055ae: 4293 cmp r3, r2
  13439. 80055b0: d007 beq.n 80055c2 <TIM_Base_SetConfig+0xaa>
  13440. 80055b2: 687b ldr r3, [r7, #4]
  13441. 80055b4: 4a29 ldr r2, [pc, #164] ; (800565c <TIM_Base_SetConfig+0x144>)
  13442. 80055b6: 4293 cmp r3, r2
  13443. 80055b8: d003 beq.n 80055c2 <TIM_Base_SetConfig+0xaa>
  13444. 80055ba: 687b ldr r3, [r7, #4]
  13445. 80055bc: 4a28 ldr r2, [pc, #160] ; (8005660 <TIM_Base_SetConfig+0x148>)
  13446. 80055be: 4293 cmp r3, r2
  13447. 80055c0: d108 bne.n 80055d4 <TIM_Base_SetConfig+0xbc>
  13448. {
  13449. /* Set the clock division */
  13450. tmpcr1 &= ~TIM_CR1_CKD;
  13451. 80055c2: 68fb ldr r3, [r7, #12]
  13452. 80055c4: f423 7340 bic.w r3, r3, #768 ; 0x300
  13453. 80055c8: 60fb str r3, [r7, #12]
  13454. tmpcr1 |= (uint32_t)Structure->ClockDivision;
  13455. 80055ca: 683b ldr r3, [r7, #0]
  13456. 80055cc: 68db ldr r3, [r3, #12]
  13457. 80055ce: 68fa ldr r2, [r7, #12]
  13458. 80055d0: 4313 orrs r3, r2
  13459. 80055d2: 60fb str r3, [r7, #12]
  13460. }
  13461. /* Set the auto-reload preload */
  13462. MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload);
  13463. 80055d4: 68fb ldr r3, [r7, #12]
  13464. 80055d6: f023 0280 bic.w r2, r3, #128 ; 0x80
  13465. 80055da: 683b ldr r3, [r7, #0]
  13466. 80055dc: 695b ldr r3, [r3, #20]
  13467. 80055de: 4313 orrs r3, r2
  13468. 80055e0: 60fb str r3, [r7, #12]
  13469. TIMx->CR1 = tmpcr1;
  13470. 80055e2: 687b ldr r3, [r7, #4]
  13471. 80055e4: 68fa ldr r2, [r7, #12]
  13472. 80055e6: 601a str r2, [r3, #0]
  13473. /* Set the Autoreload value */
  13474. TIMx->ARR = (uint32_t)Structure->Period ;
  13475. 80055e8: 683b ldr r3, [r7, #0]
  13476. 80055ea: 689a ldr r2, [r3, #8]
  13477. 80055ec: 687b ldr r3, [r7, #4]
  13478. 80055ee: 62da str r2, [r3, #44] ; 0x2c
  13479. /* Set the Prescaler value */
  13480. TIMx->PSC = Structure->Prescaler;
  13481. 80055f0: 683b ldr r3, [r7, #0]
  13482. 80055f2: 681a ldr r2, [r3, #0]
  13483. 80055f4: 687b ldr r3, [r7, #4]
  13484. 80055f6: 629a str r2, [r3, #40] ; 0x28
  13485. if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx))
  13486. 80055f8: 687b ldr r3, [r7, #4]
  13487. 80055fa: 4a10 ldr r2, [pc, #64] ; (800563c <TIM_Base_SetConfig+0x124>)
  13488. 80055fc: 4293 cmp r3, r2
  13489. 80055fe: d00f beq.n 8005620 <TIM_Base_SetConfig+0x108>
  13490. 8005600: 687b ldr r3, [r7, #4]
  13491. 8005602: 4a12 ldr r2, [pc, #72] ; (800564c <TIM_Base_SetConfig+0x134>)
  13492. 8005604: 4293 cmp r3, r2
  13493. 8005606: d00b beq.n 8005620 <TIM_Base_SetConfig+0x108>
  13494. 8005608: 687b ldr r3, [r7, #4]
  13495. 800560a: 4a11 ldr r2, [pc, #68] ; (8005650 <TIM_Base_SetConfig+0x138>)
  13496. 800560c: 4293 cmp r3, r2
  13497. 800560e: d007 beq.n 8005620 <TIM_Base_SetConfig+0x108>
  13498. 8005610: 687b ldr r3, [r7, #4]
  13499. 8005612: 4a10 ldr r2, [pc, #64] ; (8005654 <TIM_Base_SetConfig+0x13c>)
  13500. 8005614: 4293 cmp r3, r2
  13501. 8005616: d003 beq.n 8005620 <TIM_Base_SetConfig+0x108>
  13502. 8005618: 687b ldr r3, [r7, #4]
  13503. 800561a: 4a0f ldr r2, [pc, #60] ; (8005658 <TIM_Base_SetConfig+0x140>)
  13504. 800561c: 4293 cmp r3, r2
  13505. 800561e: d103 bne.n 8005628 <TIM_Base_SetConfig+0x110>
  13506. {
  13507. /* Set the Repetition Counter value */
  13508. TIMx->RCR = Structure->RepetitionCounter;
  13509. 8005620: 683b ldr r3, [r7, #0]
  13510. 8005622: 691a ldr r2, [r3, #16]
  13511. 8005624: 687b ldr r3, [r7, #4]
  13512. 8005626: 631a str r2, [r3, #48] ; 0x30
  13513. }
  13514. /* Generate an update event to reload the Prescaler
  13515. and the repetition counter (only for advanced timer) value immediately */
  13516. TIMx->EGR = TIM_EGR_UG;
  13517. 8005628: 687b ldr r3, [r7, #4]
  13518. 800562a: 2201 movs r2, #1
  13519. 800562c: 615a str r2, [r3, #20]
  13520. }
  13521. 800562e: bf00 nop
  13522. 8005630: 3714 adds r7, #20
  13523. 8005632: 46bd mov sp, r7
  13524. 8005634: f85d 7b04 ldr.w r7, [sp], #4
  13525. 8005638: 4770 bx lr
  13526. 800563a: bf00 nop
  13527. 800563c: 40010000 .word 0x40010000
  13528. 8005640: 40000400 .word 0x40000400
  13529. 8005644: 40000800 .word 0x40000800
  13530. 8005648: 40000c00 .word 0x40000c00
  13531. 800564c: 40010400 .word 0x40010400
  13532. 8005650: 40014000 .word 0x40014000
  13533. 8005654: 40014400 .word 0x40014400
  13534. 8005658: 40014800 .word 0x40014800
  13535. 800565c: 4000e000 .word 0x4000e000
  13536. 8005660: 4000e400 .word 0x4000e400
  13537. 08005664 <TIM_TI1_ConfigInputStage>:
  13538. * @param TIM_ICFilter Specifies the Input Capture Filter.
  13539. * This parameter must be a value between 0x00 and 0x0F.
  13540. * @retval None
  13541. */
  13542. static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)
  13543. {
  13544. 8005664: b480 push {r7}
  13545. 8005666: b087 sub sp, #28
  13546. 8005668: af00 add r7, sp, #0
  13547. 800566a: 60f8 str r0, [r7, #12]
  13548. 800566c: 60b9 str r1, [r7, #8]
  13549. 800566e: 607a str r2, [r7, #4]
  13550. uint32_t tmpccmr1;
  13551. uint32_t tmpccer;
  13552. /* Disable the Channel 1: Reset the CC1E Bit */
  13553. tmpccer = TIMx->CCER;
  13554. 8005670: 68fb ldr r3, [r7, #12]
  13555. 8005672: 6a1b ldr r3, [r3, #32]
  13556. 8005674: 617b str r3, [r7, #20]
  13557. TIMx->CCER &= ~TIM_CCER_CC1E;
  13558. 8005676: 68fb ldr r3, [r7, #12]
  13559. 8005678: 6a1b ldr r3, [r3, #32]
  13560. 800567a: f023 0201 bic.w r2, r3, #1
  13561. 800567e: 68fb ldr r3, [r7, #12]
  13562. 8005680: 621a str r2, [r3, #32]
  13563. tmpccmr1 = TIMx->CCMR1;
  13564. 8005682: 68fb ldr r3, [r7, #12]
  13565. 8005684: 699b ldr r3, [r3, #24]
  13566. 8005686: 613b str r3, [r7, #16]
  13567. /* Set the filter */
  13568. tmpccmr1 &= ~TIM_CCMR1_IC1F;
  13569. 8005688: 693b ldr r3, [r7, #16]
  13570. 800568a: f023 03f0 bic.w r3, r3, #240 ; 0xf0
  13571. 800568e: 613b str r3, [r7, #16]
  13572. tmpccmr1 |= (TIM_ICFilter << 4U);
  13573. 8005690: 687b ldr r3, [r7, #4]
  13574. 8005692: 011b lsls r3, r3, #4
  13575. 8005694: 693a ldr r2, [r7, #16]
  13576. 8005696: 4313 orrs r3, r2
  13577. 8005698: 613b str r3, [r7, #16]
  13578. /* Select the Polarity and set the CC1E Bit */
  13579. tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);
  13580. 800569a: 697b ldr r3, [r7, #20]
  13581. 800569c: f023 030a bic.w r3, r3, #10
  13582. 80056a0: 617b str r3, [r7, #20]
  13583. tmpccer |= TIM_ICPolarity;
  13584. 80056a2: 697a ldr r2, [r7, #20]
  13585. 80056a4: 68bb ldr r3, [r7, #8]
  13586. 80056a6: 4313 orrs r3, r2
  13587. 80056a8: 617b str r3, [r7, #20]
  13588. /* Write to TIMx CCMR1 and CCER registers */
  13589. TIMx->CCMR1 = tmpccmr1;
  13590. 80056aa: 68fb ldr r3, [r7, #12]
  13591. 80056ac: 693a ldr r2, [r7, #16]
  13592. 80056ae: 619a str r2, [r3, #24]
  13593. TIMx->CCER = tmpccer;
  13594. 80056b0: 68fb ldr r3, [r7, #12]
  13595. 80056b2: 697a ldr r2, [r7, #20]
  13596. 80056b4: 621a str r2, [r3, #32]
  13597. }
  13598. 80056b6: bf00 nop
  13599. 80056b8: 371c adds r7, #28
  13600. 80056ba: 46bd mov sp, r7
  13601. 80056bc: f85d 7b04 ldr.w r7, [sp], #4
  13602. 80056c0: 4770 bx lr
  13603. 080056c2 <TIM_TI2_ConfigInputStage>:
  13604. * @param TIM_ICFilter Specifies the Input Capture Filter.
  13605. * This parameter must be a value between 0x00 and 0x0F.
  13606. * @retval None
  13607. */
  13608. static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)
  13609. {
  13610. 80056c2: b480 push {r7}
  13611. 80056c4: b087 sub sp, #28
  13612. 80056c6: af00 add r7, sp, #0
  13613. 80056c8: 60f8 str r0, [r7, #12]
  13614. 80056ca: 60b9 str r1, [r7, #8]
  13615. 80056cc: 607a str r2, [r7, #4]
  13616. uint32_t tmpccmr1;
  13617. uint32_t tmpccer;
  13618. /* Disable the Channel 2: Reset the CC2E Bit */
  13619. TIMx->CCER &= ~TIM_CCER_CC2E;
  13620. 80056ce: 68fb ldr r3, [r7, #12]
  13621. 80056d0: 6a1b ldr r3, [r3, #32]
  13622. 80056d2: f023 0210 bic.w r2, r3, #16
  13623. 80056d6: 68fb ldr r3, [r7, #12]
  13624. 80056d8: 621a str r2, [r3, #32]
  13625. tmpccmr1 = TIMx->CCMR1;
  13626. 80056da: 68fb ldr r3, [r7, #12]
  13627. 80056dc: 699b ldr r3, [r3, #24]
  13628. 80056de: 617b str r3, [r7, #20]
  13629. tmpccer = TIMx->CCER;
  13630. 80056e0: 68fb ldr r3, [r7, #12]
  13631. 80056e2: 6a1b ldr r3, [r3, #32]
  13632. 80056e4: 613b str r3, [r7, #16]
  13633. /* Set the filter */
  13634. tmpccmr1 &= ~TIM_CCMR1_IC2F;
  13635. 80056e6: 697b ldr r3, [r7, #20]
  13636. 80056e8: f423 4370 bic.w r3, r3, #61440 ; 0xf000
  13637. 80056ec: 617b str r3, [r7, #20]
  13638. tmpccmr1 |= (TIM_ICFilter << 12U);
  13639. 80056ee: 687b ldr r3, [r7, #4]
  13640. 80056f0: 031b lsls r3, r3, #12
  13641. 80056f2: 697a ldr r2, [r7, #20]
  13642. 80056f4: 4313 orrs r3, r2
  13643. 80056f6: 617b str r3, [r7, #20]
  13644. /* Select the Polarity and set the CC2E Bit */
  13645. tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);
  13646. 80056f8: 693b ldr r3, [r7, #16]
  13647. 80056fa: f023 03a0 bic.w r3, r3, #160 ; 0xa0
  13648. 80056fe: 613b str r3, [r7, #16]
  13649. tmpccer |= (TIM_ICPolarity << 4U);
  13650. 8005700: 68bb ldr r3, [r7, #8]
  13651. 8005702: 011b lsls r3, r3, #4
  13652. 8005704: 693a ldr r2, [r7, #16]
  13653. 8005706: 4313 orrs r3, r2
  13654. 8005708: 613b str r3, [r7, #16]
  13655. /* Write to TIMx CCMR1 and CCER registers */
  13656. TIMx->CCMR1 = tmpccmr1 ;
  13657. 800570a: 68fb ldr r3, [r7, #12]
  13658. 800570c: 697a ldr r2, [r7, #20]
  13659. 800570e: 619a str r2, [r3, #24]
  13660. TIMx->CCER = tmpccer;
  13661. 8005710: 68fb ldr r3, [r7, #12]
  13662. 8005712: 693a ldr r2, [r7, #16]
  13663. 8005714: 621a str r2, [r3, #32]
  13664. }
  13665. 8005716: bf00 nop
  13666. 8005718: 371c adds r7, #28
  13667. 800571a: 46bd mov sp, r7
  13668. 800571c: f85d 7b04 ldr.w r7, [sp], #4
  13669. 8005720: 4770 bx lr
  13670. ...
  13671. 08005724 <TIM_ITRx_SetConfig>:
  13672. * (*) Value not defined in all devices.
  13673. *
  13674. * @retval None
  13675. */
  13676. static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource)
  13677. {
  13678. 8005724: b480 push {r7}
  13679. 8005726: b085 sub sp, #20
  13680. 8005728: af00 add r7, sp, #0
  13681. 800572a: 6078 str r0, [r7, #4]
  13682. 800572c: 6039 str r1, [r7, #0]
  13683. uint32_t tmpsmcr;
  13684. /* Get the TIMx SMCR register value */
  13685. tmpsmcr = TIMx->SMCR;
  13686. 800572e: 687b ldr r3, [r7, #4]
  13687. 8005730: 689b ldr r3, [r3, #8]
  13688. 8005732: 60fb str r3, [r7, #12]
  13689. /* Reset the TS Bits */
  13690. tmpsmcr &= ~TIM_SMCR_TS;
  13691. 8005734: 68fa ldr r2, [r7, #12]
  13692. 8005736: 4b09 ldr r3, [pc, #36] ; (800575c <TIM_ITRx_SetConfig+0x38>)
  13693. 8005738: 4013 ands r3, r2
  13694. 800573a: 60fb str r3, [r7, #12]
  13695. /* Set the Input Trigger source and the slave mode*/
  13696. tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1);
  13697. 800573c: 683a ldr r2, [r7, #0]
  13698. 800573e: 68fb ldr r3, [r7, #12]
  13699. 8005740: 4313 orrs r3, r2
  13700. 8005742: f043 0307 orr.w r3, r3, #7
  13701. 8005746: 60fb str r3, [r7, #12]
  13702. /* Write to TIMx SMCR */
  13703. TIMx->SMCR = tmpsmcr;
  13704. 8005748: 687b ldr r3, [r7, #4]
  13705. 800574a: 68fa ldr r2, [r7, #12]
  13706. 800574c: 609a str r2, [r3, #8]
  13707. }
  13708. 800574e: bf00 nop
  13709. 8005750: 3714 adds r7, #20
  13710. 8005752: 46bd mov sp, r7
  13711. 8005754: f85d 7b04 ldr.w r7, [sp], #4
  13712. 8005758: 4770 bx lr
  13713. 800575a: bf00 nop
  13714. 800575c: ffcfff8f .word 0xffcfff8f
  13715. 08005760 <TIM_ETR_SetConfig>:
  13716. * This parameter must be a value between 0x00 and 0x0F
  13717. * @retval None
  13718. */
  13719. void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler,
  13720. uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter)
  13721. {
  13722. 8005760: b480 push {r7}
  13723. 8005762: b087 sub sp, #28
  13724. 8005764: af00 add r7, sp, #0
  13725. 8005766: 60f8 str r0, [r7, #12]
  13726. 8005768: 60b9 str r1, [r7, #8]
  13727. 800576a: 607a str r2, [r7, #4]
  13728. 800576c: 603b str r3, [r7, #0]
  13729. uint32_t tmpsmcr;
  13730. tmpsmcr = TIMx->SMCR;
  13731. 800576e: 68fb ldr r3, [r7, #12]
  13732. 8005770: 689b ldr r3, [r3, #8]
  13733. 8005772: 617b str r3, [r7, #20]
  13734. /* Reset the ETR Bits */
  13735. tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);
  13736. 8005774: 697b ldr r3, [r7, #20]
  13737. 8005776: f423 437f bic.w r3, r3, #65280 ; 0xff00
  13738. 800577a: 617b str r3, [r7, #20]
  13739. /* Set the Prescaler, the Filter value and the Polarity */
  13740. tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U)));
  13741. 800577c: 683b ldr r3, [r7, #0]
  13742. 800577e: 021a lsls r2, r3, #8
  13743. 8005780: 687b ldr r3, [r7, #4]
  13744. 8005782: 431a orrs r2, r3
  13745. 8005784: 68bb ldr r3, [r7, #8]
  13746. 8005786: 4313 orrs r3, r2
  13747. 8005788: 697a ldr r2, [r7, #20]
  13748. 800578a: 4313 orrs r3, r2
  13749. 800578c: 617b str r3, [r7, #20]
  13750. /* Write to TIMx SMCR */
  13751. TIMx->SMCR = tmpsmcr;
  13752. 800578e: 68fb ldr r3, [r7, #12]
  13753. 8005790: 697a ldr r2, [r7, #20]
  13754. 8005792: 609a str r2, [r3, #8]
  13755. }
  13756. 8005794: bf00 nop
  13757. 8005796: 371c adds r7, #28
  13758. 8005798: 46bd mov sp, r7
  13759. 800579a: f85d 7b04 ldr.w r7, [sp], #4
  13760. 800579e: 4770 bx lr
  13761. 080057a0 <HAL_TIMEx_MasterConfigSynchronization>:
  13762. * mode.
  13763. * @retval HAL status
  13764. */
  13765. HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
  13766. TIM_MasterConfigTypeDef *sMasterConfig)
  13767. {
  13768. 80057a0: b480 push {r7}
  13769. 80057a2: b085 sub sp, #20
  13770. 80057a4: af00 add r7, sp, #0
  13771. 80057a6: 6078 str r0, [r7, #4]
  13772. 80057a8: 6039 str r1, [r7, #0]
  13773. assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
  13774. assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
  13775. assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
  13776. /* Check input state */
  13777. __HAL_LOCK(htim);
  13778. 80057aa: 687b ldr r3, [r7, #4]
  13779. 80057ac: f893 303c ldrb.w r3, [r3, #60] ; 0x3c
  13780. 80057b0: 2b01 cmp r3, #1
  13781. 80057b2: d101 bne.n 80057b8 <HAL_TIMEx_MasterConfigSynchronization+0x18>
  13782. 80057b4: 2302 movs r3, #2
  13783. 80057b6: e077 b.n 80058a8 <HAL_TIMEx_MasterConfigSynchronization+0x108>
  13784. 80057b8: 687b ldr r3, [r7, #4]
  13785. 80057ba: 2201 movs r2, #1
  13786. 80057bc: f883 203c strb.w r2, [r3, #60] ; 0x3c
  13787. /* Change the handler state */
  13788. htim->State = HAL_TIM_STATE_BUSY;
  13789. 80057c0: 687b ldr r3, [r7, #4]
  13790. 80057c2: 2202 movs r2, #2
  13791. 80057c4: f883 203d strb.w r2, [r3, #61] ; 0x3d
  13792. /* Get the TIMx CR2 register value */
  13793. tmpcr2 = htim->Instance->CR2;
  13794. 80057c8: 687b ldr r3, [r7, #4]
  13795. 80057ca: 681b ldr r3, [r3, #0]
  13796. 80057cc: 685b ldr r3, [r3, #4]
  13797. 80057ce: 60fb str r3, [r7, #12]
  13798. /* Get the TIMx SMCR register value */
  13799. tmpsmcr = htim->Instance->SMCR;
  13800. 80057d0: 687b ldr r3, [r7, #4]
  13801. 80057d2: 681b ldr r3, [r3, #0]
  13802. 80057d4: 689b ldr r3, [r3, #8]
  13803. 80057d6: 60bb str r3, [r7, #8]
  13804. /* If the timer supports ADC synchronization through TRGO2, set the master mode selection 2 */
  13805. if (IS_TIM_TRGO2_INSTANCE(htim->Instance))
  13806. 80057d8: 687b ldr r3, [r7, #4]
  13807. 80057da: 681b ldr r3, [r3, #0]
  13808. 80057dc: 4a35 ldr r2, [pc, #212] ; (80058b4 <HAL_TIMEx_MasterConfigSynchronization+0x114>)
  13809. 80057de: 4293 cmp r3, r2
  13810. 80057e0: d004 beq.n 80057ec <HAL_TIMEx_MasterConfigSynchronization+0x4c>
  13811. 80057e2: 687b ldr r3, [r7, #4]
  13812. 80057e4: 681b ldr r3, [r3, #0]
  13813. 80057e6: 4a34 ldr r2, [pc, #208] ; (80058b8 <HAL_TIMEx_MasterConfigSynchronization+0x118>)
  13814. 80057e8: 4293 cmp r3, r2
  13815. 80057ea: d108 bne.n 80057fe <HAL_TIMEx_MasterConfigSynchronization+0x5e>
  13816. {
  13817. /* Check the parameters */
  13818. assert_param(IS_TIM_TRGO2_SOURCE(sMasterConfig->MasterOutputTrigger2));
  13819. /* Clear the MMS2 bits */
  13820. tmpcr2 &= ~TIM_CR2_MMS2;
  13821. 80057ec: 68fb ldr r3, [r7, #12]
  13822. 80057ee: f423 0370 bic.w r3, r3, #15728640 ; 0xf00000
  13823. 80057f2: 60fb str r3, [r7, #12]
  13824. /* Select the TRGO2 source*/
  13825. tmpcr2 |= sMasterConfig->MasterOutputTrigger2;
  13826. 80057f4: 683b ldr r3, [r7, #0]
  13827. 80057f6: 685b ldr r3, [r3, #4]
  13828. 80057f8: 68fa ldr r2, [r7, #12]
  13829. 80057fa: 4313 orrs r3, r2
  13830. 80057fc: 60fb str r3, [r7, #12]
  13831. }
  13832. /* Reset the MMS Bits */
  13833. tmpcr2 &= ~TIM_CR2_MMS;
  13834. 80057fe: 68fb ldr r3, [r7, #12]
  13835. 8005800: f023 0370 bic.w r3, r3, #112 ; 0x70
  13836. 8005804: 60fb str r3, [r7, #12]
  13837. /* Select the TRGO source */
  13838. tmpcr2 |= sMasterConfig->MasterOutputTrigger;
  13839. 8005806: 683b ldr r3, [r7, #0]
  13840. 8005808: 681b ldr r3, [r3, #0]
  13841. 800580a: 68fa ldr r2, [r7, #12]
  13842. 800580c: 4313 orrs r3, r2
  13843. 800580e: 60fb str r3, [r7, #12]
  13844. /* Update TIMx CR2 */
  13845. htim->Instance->CR2 = tmpcr2;
  13846. 8005810: 687b ldr r3, [r7, #4]
  13847. 8005812: 681b ldr r3, [r3, #0]
  13848. 8005814: 68fa ldr r2, [r7, #12]
  13849. 8005816: 605a str r2, [r3, #4]
  13850. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  13851. 8005818: 687b ldr r3, [r7, #4]
  13852. 800581a: 681b ldr r3, [r3, #0]
  13853. 800581c: 4a25 ldr r2, [pc, #148] ; (80058b4 <HAL_TIMEx_MasterConfigSynchronization+0x114>)
  13854. 800581e: 4293 cmp r3, r2
  13855. 8005820: d02c beq.n 800587c <HAL_TIMEx_MasterConfigSynchronization+0xdc>
  13856. 8005822: 687b ldr r3, [r7, #4]
  13857. 8005824: 681b ldr r3, [r3, #0]
  13858. 8005826: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
  13859. 800582a: d027 beq.n 800587c <HAL_TIMEx_MasterConfigSynchronization+0xdc>
  13860. 800582c: 687b ldr r3, [r7, #4]
  13861. 800582e: 681b ldr r3, [r3, #0]
  13862. 8005830: 4a22 ldr r2, [pc, #136] ; (80058bc <HAL_TIMEx_MasterConfigSynchronization+0x11c>)
  13863. 8005832: 4293 cmp r3, r2
  13864. 8005834: d022 beq.n 800587c <HAL_TIMEx_MasterConfigSynchronization+0xdc>
  13865. 8005836: 687b ldr r3, [r7, #4]
  13866. 8005838: 681b ldr r3, [r3, #0]
  13867. 800583a: 4a21 ldr r2, [pc, #132] ; (80058c0 <HAL_TIMEx_MasterConfigSynchronization+0x120>)
  13868. 800583c: 4293 cmp r3, r2
  13869. 800583e: d01d beq.n 800587c <HAL_TIMEx_MasterConfigSynchronization+0xdc>
  13870. 8005840: 687b ldr r3, [r7, #4]
  13871. 8005842: 681b ldr r3, [r3, #0]
  13872. 8005844: 4a1f ldr r2, [pc, #124] ; (80058c4 <HAL_TIMEx_MasterConfigSynchronization+0x124>)
  13873. 8005846: 4293 cmp r3, r2
  13874. 8005848: d018 beq.n 800587c <HAL_TIMEx_MasterConfigSynchronization+0xdc>
  13875. 800584a: 687b ldr r3, [r7, #4]
  13876. 800584c: 681b ldr r3, [r3, #0]
  13877. 800584e: 4a1a ldr r2, [pc, #104] ; (80058b8 <HAL_TIMEx_MasterConfigSynchronization+0x118>)
  13878. 8005850: 4293 cmp r3, r2
  13879. 8005852: d013 beq.n 800587c <HAL_TIMEx_MasterConfigSynchronization+0xdc>
  13880. 8005854: 687b ldr r3, [r7, #4]
  13881. 8005856: 681b ldr r3, [r3, #0]
  13882. 8005858: 4a1b ldr r2, [pc, #108] ; (80058c8 <HAL_TIMEx_MasterConfigSynchronization+0x128>)
  13883. 800585a: 4293 cmp r3, r2
  13884. 800585c: d00e beq.n 800587c <HAL_TIMEx_MasterConfigSynchronization+0xdc>
  13885. 800585e: 687b ldr r3, [r7, #4]
  13886. 8005860: 681b ldr r3, [r3, #0]
  13887. 8005862: 4a1a ldr r2, [pc, #104] ; (80058cc <HAL_TIMEx_MasterConfigSynchronization+0x12c>)
  13888. 8005864: 4293 cmp r3, r2
  13889. 8005866: d009 beq.n 800587c <HAL_TIMEx_MasterConfigSynchronization+0xdc>
  13890. 8005868: 687b ldr r3, [r7, #4]
  13891. 800586a: 681b ldr r3, [r3, #0]
  13892. 800586c: 4a18 ldr r2, [pc, #96] ; (80058d0 <HAL_TIMEx_MasterConfigSynchronization+0x130>)
  13893. 800586e: 4293 cmp r3, r2
  13894. 8005870: d004 beq.n 800587c <HAL_TIMEx_MasterConfigSynchronization+0xdc>
  13895. 8005872: 687b ldr r3, [r7, #4]
  13896. 8005874: 681b ldr r3, [r3, #0]
  13897. 8005876: 4a17 ldr r2, [pc, #92] ; (80058d4 <HAL_TIMEx_MasterConfigSynchronization+0x134>)
  13898. 8005878: 4293 cmp r3, r2
  13899. 800587a: d10c bne.n 8005896 <HAL_TIMEx_MasterConfigSynchronization+0xf6>
  13900. {
  13901. /* Reset the MSM Bit */
  13902. tmpsmcr &= ~TIM_SMCR_MSM;
  13903. 800587c: 68bb ldr r3, [r7, #8]
  13904. 800587e: f023 0380 bic.w r3, r3, #128 ; 0x80
  13905. 8005882: 60bb str r3, [r7, #8]
  13906. /* Set master mode */
  13907. tmpsmcr |= sMasterConfig->MasterSlaveMode;
  13908. 8005884: 683b ldr r3, [r7, #0]
  13909. 8005886: 689b ldr r3, [r3, #8]
  13910. 8005888: 68ba ldr r2, [r7, #8]
  13911. 800588a: 4313 orrs r3, r2
  13912. 800588c: 60bb str r3, [r7, #8]
  13913. /* Update TIMx SMCR */
  13914. htim->Instance->SMCR = tmpsmcr;
  13915. 800588e: 687b ldr r3, [r7, #4]
  13916. 8005890: 681b ldr r3, [r3, #0]
  13917. 8005892: 68ba ldr r2, [r7, #8]
  13918. 8005894: 609a str r2, [r3, #8]
  13919. }
  13920. /* Change the htim state */
  13921. htim->State = HAL_TIM_STATE_READY;
  13922. 8005896: 687b ldr r3, [r7, #4]
  13923. 8005898: 2201 movs r2, #1
  13924. 800589a: f883 203d strb.w r2, [r3, #61] ; 0x3d
  13925. __HAL_UNLOCK(htim);
  13926. 800589e: 687b ldr r3, [r7, #4]
  13927. 80058a0: 2200 movs r2, #0
  13928. 80058a2: f883 203c strb.w r2, [r3, #60] ; 0x3c
  13929. return HAL_OK;
  13930. 80058a6: 2300 movs r3, #0
  13931. }
  13932. 80058a8: 4618 mov r0, r3
  13933. 80058aa: 3714 adds r7, #20
  13934. 80058ac: 46bd mov sp, r7
  13935. 80058ae: f85d 7b04 ldr.w r7, [sp], #4
  13936. 80058b2: 4770 bx lr
  13937. 80058b4: 40010000 .word 0x40010000
  13938. 80058b8: 40010400 .word 0x40010400
  13939. 80058bc: 40000400 .word 0x40000400
  13940. 80058c0: 40000800 .word 0x40000800
  13941. 80058c4: 40000c00 .word 0x40000c00
  13942. 80058c8: 40001800 .word 0x40001800
  13943. 80058cc: 40014000 .word 0x40014000
  13944. 80058d0: 4000e000 .word 0x4000e000
  13945. 80058d4: 4000e400 .word 0x4000e400
  13946. 080058d8 <HAL_TIMEx_CommutCallback>:
  13947. * @brief Hall commutation changed callback in non-blocking mode
  13948. * @param htim TIM handle
  13949. * @retval None
  13950. */
  13951. __weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim)
  13952. {
  13953. 80058d8: b480 push {r7}
  13954. 80058da: b083 sub sp, #12
  13955. 80058dc: af00 add r7, sp, #0
  13956. 80058de: 6078 str r0, [r7, #4]
  13957. UNUSED(htim);
  13958. /* NOTE : This function should not be modified, when the callback is needed,
  13959. the HAL_TIMEx_CommutCallback could be implemented in the user file
  13960. */
  13961. }
  13962. 80058e0: bf00 nop
  13963. 80058e2: 370c adds r7, #12
  13964. 80058e4: 46bd mov sp, r7
  13965. 80058e6: f85d 7b04 ldr.w r7, [sp], #4
  13966. 80058ea: 4770 bx lr
  13967. 080058ec <HAL_TIMEx_BreakCallback>:
  13968. * @brief Hall Break detection callback in non-blocking mode
  13969. * @param htim TIM handle
  13970. * @retval None
  13971. */
  13972. __weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim)
  13973. {
  13974. 80058ec: b480 push {r7}
  13975. 80058ee: b083 sub sp, #12
  13976. 80058f0: af00 add r7, sp, #0
  13977. 80058f2: 6078 str r0, [r7, #4]
  13978. UNUSED(htim);
  13979. /* NOTE : This function should not be modified, when the callback is needed,
  13980. the HAL_TIMEx_BreakCallback could be implemented in the user file
  13981. */
  13982. }
  13983. 80058f4: bf00 nop
  13984. 80058f6: 370c adds r7, #12
  13985. 80058f8: 46bd mov sp, r7
  13986. 80058fa: f85d 7b04 ldr.w r7, [sp], #4
  13987. 80058fe: 4770 bx lr
  13988. 08005900 <HAL_TIMEx_Break2Callback>:
  13989. * @brief Hall Break2 detection callback in non blocking mode
  13990. * @param htim: TIM handle
  13991. * @retval None
  13992. */
  13993. __weak void HAL_TIMEx_Break2Callback(TIM_HandleTypeDef *htim)
  13994. {
  13995. 8005900: b480 push {r7}
  13996. 8005902: b083 sub sp, #12
  13997. 8005904: af00 add r7, sp, #0
  13998. 8005906: 6078 str r0, [r7, #4]
  13999. UNUSED(htim);
  14000. /* NOTE : This function Should not be modified, when the callback is needed,
  14001. the HAL_TIMEx_Break2Callback could be implemented in the user file
  14002. */
  14003. }
  14004. 8005908: bf00 nop
  14005. 800590a: 370c adds r7, #12
  14006. 800590c: 46bd mov sp, r7
  14007. 800590e: f85d 7b04 ldr.w r7, [sp], #4
  14008. 8005912: 4770 bx lr
  14009. 08005914 <LL_GPIO_SetPinMode>:
  14010. * @arg @ref LL_GPIO_MODE_ALTERNATE
  14011. * @arg @ref LL_GPIO_MODE_ANALOG
  14012. * @retval None
  14013. */
  14014. __STATIC_INLINE void LL_GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode)
  14015. {
  14016. 8005914: b480 push {r7}
  14017. 8005916: b085 sub sp, #20
  14018. 8005918: af00 add r7, sp, #0
  14019. 800591a: 60f8 str r0, [r7, #12]
  14020. 800591c: 60b9 str r1, [r7, #8]
  14021. 800591e: 607a str r2, [r7, #4]
  14022. MODIFY_REG(GPIOx->MODER, ((Pin * Pin) * GPIO_MODER_MODE0), ((Pin * Pin) * Mode));
  14023. 8005920: 68fb ldr r3, [r7, #12]
  14024. 8005922: 6819 ldr r1, [r3, #0]
  14025. 8005924: 68bb ldr r3, [r7, #8]
  14026. 8005926: fb03 f203 mul.w r2, r3, r3
  14027. 800592a: 4613 mov r3, r2
  14028. 800592c: 005b lsls r3, r3, #1
  14029. 800592e: 4413 add r3, r2
  14030. 8005930: 43db mvns r3, r3
  14031. 8005932: ea01 0203 and.w r2, r1, r3
  14032. 8005936: 68bb ldr r3, [r7, #8]
  14033. 8005938: fb03 f303 mul.w r3, r3, r3
  14034. 800593c: 6879 ldr r1, [r7, #4]
  14035. 800593e: fb01 f303 mul.w r3, r1, r3
  14036. 8005942: 431a orrs r2, r3
  14037. 8005944: 68fb ldr r3, [r7, #12]
  14038. 8005946: 601a str r2, [r3, #0]
  14039. }
  14040. 8005948: bf00 nop
  14041. 800594a: 3714 adds r7, #20
  14042. 800594c: 46bd mov sp, r7
  14043. 800594e: f85d 7b04 ldr.w r7, [sp], #4
  14044. 8005952: 4770 bx lr
  14045. 08005954 <LL_GPIO_SetPinOutputType>:
  14046. * @arg @ref LL_GPIO_OUTPUT_PUSHPULL
  14047. * @arg @ref LL_GPIO_OUTPUT_OPENDRAIN
  14048. * @retval None
  14049. */
  14050. __STATIC_INLINE void LL_GPIO_SetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t PinMask, uint32_t OutputType)
  14051. {
  14052. 8005954: b480 push {r7}
  14053. 8005956: b085 sub sp, #20
  14054. 8005958: af00 add r7, sp, #0
  14055. 800595a: 60f8 str r0, [r7, #12]
  14056. 800595c: 60b9 str r1, [r7, #8]
  14057. 800595e: 607a str r2, [r7, #4]
  14058. MODIFY_REG(GPIOx->OTYPER, PinMask, (PinMask * OutputType));
  14059. 8005960: 68fb ldr r3, [r7, #12]
  14060. 8005962: 685a ldr r2, [r3, #4]
  14061. 8005964: 68bb ldr r3, [r7, #8]
  14062. 8005966: 43db mvns r3, r3
  14063. 8005968: 401a ands r2, r3
  14064. 800596a: 68bb ldr r3, [r7, #8]
  14065. 800596c: 6879 ldr r1, [r7, #4]
  14066. 800596e: fb01 f303 mul.w r3, r1, r3
  14067. 8005972: 431a orrs r2, r3
  14068. 8005974: 68fb ldr r3, [r7, #12]
  14069. 8005976: 605a str r2, [r3, #4]
  14070. }
  14071. 8005978: bf00 nop
  14072. 800597a: 3714 adds r7, #20
  14073. 800597c: 46bd mov sp, r7
  14074. 800597e: f85d 7b04 ldr.w r7, [sp], #4
  14075. 8005982: 4770 bx lr
  14076. 08005984 <LL_GPIO_SetPinSpeed>:
  14077. * @arg @ref LL_GPIO_SPEED_FREQ_HIGH
  14078. * @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH
  14079. * @retval None
  14080. */
  14081. __STATIC_INLINE void LL_GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Speed)
  14082. {
  14083. 8005984: b480 push {r7}
  14084. 8005986: b085 sub sp, #20
  14085. 8005988: af00 add r7, sp, #0
  14086. 800598a: 60f8 str r0, [r7, #12]
  14087. 800598c: 60b9 str r1, [r7, #8]
  14088. 800598e: 607a str r2, [r7, #4]
  14089. MODIFY_REG(GPIOx->OSPEEDR, ((Pin * Pin) * GPIO_OSPEEDR_OSPEED0), ((Pin * Pin) * Speed));
  14090. 8005990: 68fb ldr r3, [r7, #12]
  14091. 8005992: 6899 ldr r1, [r3, #8]
  14092. 8005994: 68bb ldr r3, [r7, #8]
  14093. 8005996: fb03 f203 mul.w r2, r3, r3
  14094. 800599a: 4613 mov r3, r2
  14095. 800599c: 005b lsls r3, r3, #1
  14096. 800599e: 4413 add r3, r2
  14097. 80059a0: 43db mvns r3, r3
  14098. 80059a2: ea01 0203 and.w r2, r1, r3
  14099. 80059a6: 68bb ldr r3, [r7, #8]
  14100. 80059a8: fb03 f303 mul.w r3, r3, r3
  14101. 80059ac: 6879 ldr r1, [r7, #4]
  14102. 80059ae: fb01 f303 mul.w r3, r1, r3
  14103. 80059b2: 431a orrs r2, r3
  14104. 80059b4: 68fb ldr r3, [r7, #12]
  14105. 80059b6: 609a str r2, [r3, #8]
  14106. }
  14107. 80059b8: bf00 nop
  14108. 80059ba: 3714 adds r7, #20
  14109. 80059bc: 46bd mov sp, r7
  14110. 80059be: f85d 7b04 ldr.w r7, [sp], #4
  14111. 80059c2: 4770 bx lr
  14112. 080059c4 <LL_GPIO_SetPinPull>:
  14113. * @arg @ref LL_GPIO_PULL_UP
  14114. * @arg @ref LL_GPIO_PULL_DOWN
  14115. * @retval None
  14116. */
  14117. __STATIC_INLINE void LL_GPIO_SetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Pull)
  14118. {
  14119. 80059c4: b480 push {r7}
  14120. 80059c6: b085 sub sp, #20
  14121. 80059c8: af00 add r7, sp, #0
  14122. 80059ca: 60f8 str r0, [r7, #12]
  14123. 80059cc: 60b9 str r1, [r7, #8]
  14124. 80059ce: 607a str r2, [r7, #4]
  14125. MODIFY_REG(GPIOx->PUPDR, ((Pin * Pin) * GPIO_PUPDR_PUPD0), ((Pin * Pin) * Pull));
  14126. 80059d0: 68fb ldr r3, [r7, #12]
  14127. 80059d2: 68d9 ldr r1, [r3, #12]
  14128. 80059d4: 68bb ldr r3, [r7, #8]
  14129. 80059d6: fb03 f203 mul.w r2, r3, r3
  14130. 80059da: 4613 mov r3, r2
  14131. 80059dc: 005b lsls r3, r3, #1
  14132. 80059de: 4413 add r3, r2
  14133. 80059e0: 43db mvns r3, r3
  14134. 80059e2: ea01 0203 and.w r2, r1, r3
  14135. 80059e6: 68bb ldr r3, [r7, #8]
  14136. 80059e8: fb03 f303 mul.w r3, r3, r3
  14137. 80059ec: 6879 ldr r1, [r7, #4]
  14138. 80059ee: fb01 f303 mul.w r3, r1, r3
  14139. 80059f2: 431a orrs r2, r3
  14140. 80059f4: 68fb ldr r3, [r7, #12]
  14141. 80059f6: 60da str r2, [r3, #12]
  14142. }
  14143. 80059f8: bf00 nop
  14144. 80059fa: 3714 adds r7, #20
  14145. 80059fc: 46bd mov sp, r7
  14146. 80059fe: f85d 7b04 ldr.w r7, [sp], #4
  14147. 8005a02: 4770 bx lr
  14148. 08005a04 <LL_GPIO_SetAFPin_0_7>:
  14149. * @arg @ref LL_GPIO_AF_14
  14150. * @arg @ref LL_GPIO_AF_15
  14151. * @retval None
  14152. */
  14153. __STATIC_INLINE void LL_GPIO_SetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
  14154. {
  14155. 8005a04: b480 push {r7}
  14156. 8005a06: b085 sub sp, #20
  14157. 8005a08: af00 add r7, sp, #0
  14158. 8005a0a: 60f8 str r0, [r7, #12]
  14159. 8005a0c: 60b9 str r1, [r7, #8]
  14160. 8005a0e: 607a str r2, [r7, #4]
  14161. MODIFY_REG(GPIOx->AFR[0], ((((Pin * Pin) * Pin) * Pin) * GPIO_AFRL_AFSEL0),
  14162. 8005a10: 68fb ldr r3, [r7, #12]
  14163. 8005a12: 6a19 ldr r1, [r3, #32]
  14164. 8005a14: 68bb ldr r3, [r7, #8]
  14165. 8005a16: fb03 f303 mul.w r3, r3, r3
  14166. 8005a1a: 68ba ldr r2, [r7, #8]
  14167. 8005a1c: fb02 f303 mul.w r3, r2, r3
  14168. 8005a20: 68ba ldr r2, [r7, #8]
  14169. 8005a22: fb02 f203 mul.w r2, r2, r3
  14170. 8005a26: 4613 mov r3, r2
  14171. 8005a28: 011b lsls r3, r3, #4
  14172. 8005a2a: 1a9b subs r3, r3, r2
  14173. 8005a2c: 43db mvns r3, r3
  14174. 8005a2e: ea01 0203 and.w r2, r1, r3
  14175. 8005a32: 68bb ldr r3, [r7, #8]
  14176. 8005a34: fb03 f303 mul.w r3, r3, r3
  14177. 8005a38: 68b9 ldr r1, [r7, #8]
  14178. 8005a3a: fb01 f303 mul.w r3, r1, r3
  14179. 8005a3e: 68b9 ldr r1, [r7, #8]
  14180. 8005a40: fb01 f303 mul.w r3, r1, r3
  14181. 8005a44: 6879 ldr r1, [r7, #4]
  14182. 8005a46: fb01 f303 mul.w r3, r1, r3
  14183. 8005a4a: 431a orrs r2, r3
  14184. 8005a4c: 68fb ldr r3, [r7, #12]
  14185. 8005a4e: 621a str r2, [r3, #32]
  14186. ((((Pin * Pin) * Pin) * Pin) * Alternate));
  14187. }
  14188. 8005a50: bf00 nop
  14189. 8005a52: 3714 adds r7, #20
  14190. 8005a54: 46bd mov sp, r7
  14191. 8005a56: f85d 7b04 ldr.w r7, [sp], #4
  14192. 8005a5a: 4770 bx lr
  14193. 08005a5c <LL_GPIO_SetAFPin_8_15>:
  14194. * @arg @ref LL_GPIO_AF_14
  14195. * @arg @ref LL_GPIO_AF_15
  14196. * @retval None
  14197. */
  14198. __STATIC_INLINE void LL_GPIO_SetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
  14199. {
  14200. 8005a5c: b480 push {r7}
  14201. 8005a5e: b085 sub sp, #20
  14202. 8005a60: af00 add r7, sp, #0
  14203. 8005a62: 60f8 str r0, [r7, #12]
  14204. 8005a64: 60b9 str r1, [r7, #8]
  14205. 8005a66: 607a str r2, [r7, #4]
  14206. MODIFY_REG(GPIOx->AFR[1], (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * GPIO_AFRH_AFSEL8),
  14207. 8005a68: 68fb ldr r3, [r7, #12]
  14208. 8005a6a: 6a59 ldr r1, [r3, #36] ; 0x24
  14209. 8005a6c: 68bb ldr r3, [r7, #8]
  14210. 8005a6e: 0a1b lsrs r3, r3, #8
  14211. 8005a70: 68ba ldr r2, [r7, #8]
  14212. 8005a72: 0a12 lsrs r2, r2, #8
  14213. 8005a74: fb02 f303 mul.w r3, r2, r3
  14214. 8005a78: 68ba ldr r2, [r7, #8]
  14215. 8005a7a: 0a12 lsrs r2, r2, #8
  14216. 8005a7c: fb02 f303 mul.w r3, r2, r3
  14217. 8005a80: 68ba ldr r2, [r7, #8]
  14218. 8005a82: 0a12 lsrs r2, r2, #8
  14219. 8005a84: fb02 f203 mul.w r2, r2, r3
  14220. 8005a88: 4613 mov r3, r2
  14221. 8005a8a: 011b lsls r3, r3, #4
  14222. 8005a8c: 1a9b subs r3, r3, r2
  14223. 8005a8e: 43db mvns r3, r3
  14224. 8005a90: ea01 0203 and.w r2, r1, r3
  14225. 8005a94: 68bb ldr r3, [r7, #8]
  14226. 8005a96: 0a1b lsrs r3, r3, #8
  14227. 8005a98: 68b9 ldr r1, [r7, #8]
  14228. 8005a9a: 0a09 lsrs r1, r1, #8
  14229. 8005a9c: fb01 f303 mul.w r3, r1, r3
  14230. 8005aa0: 68b9 ldr r1, [r7, #8]
  14231. 8005aa2: 0a09 lsrs r1, r1, #8
  14232. 8005aa4: fb01 f303 mul.w r3, r1, r3
  14233. 8005aa8: 68b9 ldr r1, [r7, #8]
  14234. 8005aaa: 0a09 lsrs r1, r1, #8
  14235. 8005aac: fb01 f303 mul.w r3, r1, r3
  14236. 8005ab0: 6879 ldr r1, [r7, #4]
  14237. 8005ab2: fb01 f303 mul.w r3, r1, r3
  14238. 8005ab6: 431a orrs r2, r3
  14239. 8005ab8: 68fb ldr r3, [r7, #12]
  14240. 8005aba: 625a str r2, [r3, #36] ; 0x24
  14241. (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * Alternate));
  14242. }
  14243. 8005abc: bf00 nop
  14244. 8005abe: 3714 adds r7, #20
  14245. 8005ac0: 46bd mov sp, r7
  14246. 8005ac2: f85d 7b04 ldr.w r7, [sp], #4
  14247. 8005ac6: 4770 bx lr
  14248. 08005ac8 <LL_GPIO_Init>:
  14249. * @retval An ErrorStatus enumeration value:
  14250. * - SUCCESS: GPIO registers are initialized according to GPIO_InitStruct content
  14251. * - ERROR: Not applicable
  14252. */
  14253. ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct)
  14254. {
  14255. 8005ac8: b580 push {r7, lr}
  14256. 8005aca: b088 sub sp, #32
  14257. 8005acc: af00 add r7, sp, #0
  14258. 8005ace: 6078 str r0, [r7, #4]
  14259. 8005ad0: 6039 str r1, [r7, #0]
  14260. assert_param(IS_LL_GPIO_MODE(GPIO_InitStruct->Mode));
  14261. assert_param(IS_LL_GPIO_PULL(GPIO_InitStruct->Pull));
  14262. /* ------------------------- Configure the port pins ---------------- */
  14263. /* Initialize pinpos on first pin set */
  14264. pinpos = POSITION_VAL(GPIO_InitStruct->Pin);
  14265. 8005ad2: 683b ldr r3, [r7, #0]
  14266. 8005ad4: 681b ldr r3, [r3, #0]
  14267. 8005ad6: 613b str r3, [r7, #16]
  14268. uint32_t result;
  14269. #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
  14270. (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
  14271. (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) )
  14272. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  14273. 8005ad8: 693b ldr r3, [r7, #16]
  14274. 8005ada: fa93 f3a3 rbit r3, r3
  14275. 8005ade: 60fb str r3, [r7, #12]
  14276. result |= value & 1U;
  14277. s--;
  14278. }
  14279. result <<= s; /* shift when v's highest bits are zero */
  14280. #endif
  14281. return result;
  14282. 8005ae0: 68fb ldr r3, [r7, #12]
  14283. 8005ae2: 617b str r3, [r7, #20]
  14284. optimisations using the logic "value was passed to __builtin_clz, so it
  14285. is non-zero".
  14286. ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a
  14287. single CLZ instruction.
  14288. */
  14289. if (value == 0U)
  14290. 8005ae4: 697b ldr r3, [r7, #20]
  14291. 8005ae6: 2b00 cmp r3, #0
  14292. 8005ae8: d101 bne.n 8005aee <LL_GPIO_Init+0x26>
  14293. {
  14294. return 32U;
  14295. 8005aea: 2320 movs r3, #32
  14296. 8005aec: e003 b.n 8005af6 <LL_GPIO_Init+0x2e>
  14297. }
  14298. return __builtin_clz(value);
  14299. 8005aee: 697b ldr r3, [r7, #20]
  14300. 8005af0: fab3 f383 clz r3, r3
  14301. 8005af4: b2db uxtb r3, r3
  14302. 8005af6: 61fb str r3, [r7, #28]
  14303. /* Configure the port pins */
  14304. while (((GPIO_InitStruct->Pin) >> pinpos) != 0x00000000U)
  14305. 8005af8: e048 b.n 8005b8c <LL_GPIO_Init+0xc4>
  14306. {
  14307. /* Get current io position */
  14308. currentpin = (GPIO_InitStruct->Pin) & (0x00000001UL << pinpos);
  14309. 8005afa: 683b ldr r3, [r7, #0]
  14310. 8005afc: 681a ldr r2, [r3, #0]
  14311. 8005afe: 2101 movs r1, #1
  14312. 8005b00: 69fb ldr r3, [r7, #28]
  14313. 8005b02: fa01 f303 lsl.w r3, r1, r3
  14314. 8005b06: 4013 ands r3, r2
  14315. 8005b08: 61bb str r3, [r7, #24]
  14316. if (currentpin != 0x00000000U)
  14317. 8005b0a: 69bb ldr r3, [r7, #24]
  14318. 8005b0c: 2b00 cmp r3, #0
  14319. 8005b0e: d03a beq.n 8005b86 <LL_GPIO_Init+0xbe>
  14320. {
  14321. if ((GPIO_InitStruct->Mode == LL_GPIO_MODE_OUTPUT) || (GPIO_InitStruct->Mode == LL_GPIO_MODE_ALTERNATE))
  14322. 8005b10: 683b ldr r3, [r7, #0]
  14323. 8005b12: 685b ldr r3, [r3, #4]
  14324. 8005b14: 2b01 cmp r3, #1
  14325. 8005b16: d003 beq.n 8005b20 <LL_GPIO_Init+0x58>
  14326. 8005b18: 683b ldr r3, [r7, #0]
  14327. 8005b1a: 685b ldr r3, [r3, #4]
  14328. 8005b1c: 2b02 cmp r3, #2
  14329. 8005b1e: d10e bne.n 8005b3e <LL_GPIO_Init+0x76>
  14330. {
  14331. /* Check Speed mode parameters */
  14332. assert_param(IS_LL_GPIO_SPEED(GPIO_InitStruct->Speed));
  14333. /* Speed mode configuration */
  14334. LL_GPIO_SetPinSpeed(GPIOx, currentpin, GPIO_InitStruct->Speed);
  14335. 8005b20: 683b ldr r3, [r7, #0]
  14336. 8005b22: 689b ldr r3, [r3, #8]
  14337. 8005b24: 461a mov r2, r3
  14338. 8005b26: 69b9 ldr r1, [r7, #24]
  14339. 8005b28: 6878 ldr r0, [r7, #4]
  14340. 8005b2a: f7ff ff2b bl 8005984 <LL_GPIO_SetPinSpeed>
  14341. /* Check Output mode parameters */
  14342. assert_param(IS_LL_GPIO_OUTPUT_TYPE(GPIO_InitStruct->OutputType));
  14343. /* Output mode configuration*/
  14344. LL_GPIO_SetPinOutputType(GPIOx, GPIO_InitStruct->Pin, GPIO_InitStruct->OutputType);
  14345. 8005b2e: 683b ldr r3, [r7, #0]
  14346. 8005b30: 6819 ldr r1, [r3, #0]
  14347. 8005b32: 683b ldr r3, [r7, #0]
  14348. 8005b34: 68db ldr r3, [r3, #12]
  14349. 8005b36: 461a mov r2, r3
  14350. 8005b38: 6878 ldr r0, [r7, #4]
  14351. 8005b3a: f7ff ff0b bl 8005954 <LL_GPIO_SetPinOutputType>
  14352. }
  14353. /* Pull-up Pull down resistor configuration*/
  14354. LL_GPIO_SetPinPull(GPIOx, currentpin, GPIO_InitStruct->Pull);
  14355. 8005b3e: 683b ldr r3, [r7, #0]
  14356. 8005b40: 691b ldr r3, [r3, #16]
  14357. 8005b42: 461a mov r2, r3
  14358. 8005b44: 69b9 ldr r1, [r7, #24]
  14359. 8005b46: 6878 ldr r0, [r7, #4]
  14360. 8005b48: f7ff ff3c bl 80059c4 <LL_GPIO_SetPinPull>
  14361. if (GPIO_InitStruct->Mode == LL_GPIO_MODE_ALTERNATE)
  14362. 8005b4c: 683b ldr r3, [r7, #0]
  14363. 8005b4e: 685b ldr r3, [r3, #4]
  14364. 8005b50: 2b02 cmp r3, #2
  14365. 8005b52: d111 bne.n 8005b78 <LL_GPIO_Init+0xb0>
  14366. {
  14367. /* Check Alternate parameter */
  14368. assert_param(IS_LL_GPIO_ALTERNATE(GPIO_InitStruct->Alternate));
  14369. /* Alternate function configuration */
  14370. if (currentpin < LL_GPIO_PIN_8)
  14371. 8005b54: 69bb ldr r3, [r7, #24]
  14372. 8005b56: 2bff cmp r3, #255 ; 0xff
  14373. 8005b58: d807 bhi.n 8005b6a <LL_GPIO_Init+0xa2>
  14374. {
  14375. LL_GPIO_SetAFPin_0_7(GPIOx, currentpin, GPIO_InitStruct->Alternate);
  14376. 8005b5a: 683b ldr r3, [r7, #0]
  14377. 8005b5c: 695b ldr r3, [r3, #20]
  14378. 8005b5e: 461a mov r2, r3
  14379. 8005b60: 69b9 ldr r1, [r7, #24]
  14380. 8005b62: 6878 ldr r0, [r7, #4]
  14381. 8005b64: f7ff ff4e bl 8005a04 <LL_GPIO_SetAFPin_0_7>
  14382. 8005b68: e006 b.n 8005b78 <LL_GPIO_Init+0xb0>
  14383. }
  14384. else
  14385. {
  14386. LL_GPIO_SetAFPin_8_15(GPIOx, currentpin, GPIO_InitStruct->Alternate);
  14387. 8005b6a: 683b ldr r3, [r7, #0]
  14388. 8005b6c: 695b ldr r3, [r3, #20]
  14389. 8005b6e: 461a mov r2, r3
  14390. 8005b70: 69b9 ldr r1, [r7, #24]
  14391. 8005b72: 6878 ldr r0, [r7, #4]
  14392. 8005b74: f7ff ff72 bl 8005a5c <LL_GPIO_SetAFPin_8_15>
  14393. }
  14394. }
  14395. /* Pin Mode configuration */
  14396. LL_GPIO_SetPinMode(GPIOx, currentpin, GPIO_InitStruct->Mode);
  14397. 8005b78: 683b ldr r3, [r7, #0]
  14398. 8005b7a: 685b ldr r3, [r3, #4]
  14399. 8005b7c: 461a mov r2, r3
  14400. 8005b7e: 69b9 ldr r1, [r7, #24]
  14401. 8005b80: 6878 ldr r0, [r7, #4]
  14402. 8005b82: f7ff fec7 bl 8005914 <LL_GPIO_SetPinMode>
  14403. }
  14404. pinpos++;
  14405. 8005b86: 69fb ldr r3, [r7, #28]
  14406. 8005b88: 3301 adds r3, #1
  14407. 8005b8a: 61fb str r3, [r7, #28]
  14408. while (((GPIO_InitStruct->Pin) >> pinpos) != 0x00000000U)
  14409. 8005b8c: 683b ldr r3, [r7, #0]
  14410. 8005b8e: 681a ldr r2, [r3, #0]
  14411. 8005b90: 69fb ldr r3, [r7, #28]
  14412. 8005b92: fa22 f303 lsr.w r3, r2, r3
  14413. 8005b96: 2b00 cmp r3, #0
  14414. 8005b98: d1af bne.n 8005afa <LL_GPIO_Init+0x32>
  14415. }
  14416. return (SUCCESS);
  14417. 8005b9a: 2300 movs r3, #0
  14418. }
  14419. 8005b9c: 4618 mov r0, r3
  14420. 8005b9e: 3720 adds r7, #32
  14421. 8005ba0: 46bd mov sp, r7
  14422. 8005ba2: bd80 pop {r7, pc}
  14423. 08005ba4 <LL_SPI_IsEnabled>:
  14424. {
  14425. 8005ba4: b480 push {r7}
  14426. 8005ba6: b083 sub sp, #12
  14427. 8005ba8: af00 add r7, sp, #0
  14428. 8005baa: 6078 str r0, [r7, #4]
  14429. return ((READ_BIT(SPIx->CR1, SPI_CR1_SPE) == (SPI_CR1_SPE)) ? 1UL : 0UL);
  14430. 8005bac: 687b ldr r3, [r7, #4]
  14431. 8005bae: 681b ldr r3, [r3, #0]
  14432. 8005bb0: f003 0301 and.w r3, r3, #1
  14433. 8005bb4: 2b01 cmp r3, #1
  14434. 8005bb6: d101 bne.n 8005bbc <LL_SPI_IsEnabled+0x18>
  14435. 8005bb8: 2301 movs r3, #1
  14436. 8005bba: e000 b.n 8005bbe <LL_SPI_IsEnabled+0x1a>
  14437. 8005bbc: 2300 movs r3, #0
  14438. }
  14439. 8005bbe: 4618 mov r0, r3
  14440. 8005bc0: 370c adds r7, #12
  14441. 8005bc2: 46bd mov sp, r7
  14442. 8005bc4: f85d 7b04 ldr.w r7, [sp], #4
  14443. 8005bc8: 4770 bx lr
  14444. 08005bca <LL_SPI_SetInternalSSLevel>:
  14445. {
  14446. 8005bca: b480 push {r7}
  14447. 8005bcc: b083 sub sp, #12
  14448. 8005bce: af00 add r7, sp, #0
  14449. 8005bd0: 6078 str r0, [r7, #4]
  14450. 8005bd2: 6039 str r1, [r7, #0]
  14451. MODIFY_REG(SPIx->CR1, SPI_CR1_SSI, SSLevel);
  14452. 8005bd4: 687b ldr r3, [r7, #4]
  14453. 8005bd6: 681b ldr r3, [r3, #0]
  14454. 8005bd8: f423 5280 bic.w r2, r3, #4096 ; 0x1000
  14455. 8005bdc: 683b ldr r3, [r7, #0]
  14456. 8005bde: 431a orrs r2, r3
  14457. 8005be0: 687b ldr r3, [r7, #4]
  14458. 8005be2: 601a str r2, [r3, #0]
  14459. }
  14460. 8005be4: bf00 nop
  14461. 8005be6: 370c adds r7, #12
  14462. 8005be8: 46bd mov sp, r7
  14463. 8005bea: f85d 7b04 ldr.w r7, [sp], #4
  14464. 8005bee: 4770 bx lr
  14465. 08005bf0 <LL_SPI_GetNSSPolarity>:
  14466. {
  14467. 8005bf0: b480 push {r7}
  14468. 8005bf2: b083 sub sp, #12
  14469. 8005bf4: af00 add r7, sp, #0
  14470. 8005bf6: 6078 str r0, [r7, #4]
  14471. return (uint32_t)(READ_BIT(SPIx->CFG2, SPI_CFG2_SSIOP));
  14472. 8005bf8: 687b ldr r3, [r7, #4]
  14473. 8005bfa: 68db ldr r3, [r3, #12]
  14474. 8005bfc: f003 5380 and.w r3, r3, #268435456 ; 0x10000000
  14475. }
  14476. 8005c00: 4618 mov r0, r3
  14477. 8005c02: 370c adds r7, #12
  14478. 8005c04: 46bd mov sp, r7
  14479. 8005c06: f85d 7b04 ldr.w r7, [sp], #4
  14480. 8005c0a: 4770 bx lr
  14481. 08005c0c <LL_SPI_SetCRCPolynomial>:
  14482. * @param SPIx SPI Instance
  14483. * @param CRCPoly 0..0xFFFFFFFF
  14484. * @retval None
  14485. */
  14486. __STATIC_INLINE void LL_SPI_SetCRCPolynomial(SPI_TypeDef *SPIx, uint32_t CRCPoly)
  14487. {
  14488. 8005c0c: b480 push {r7}
  14489. 8005c0e: b083 sub sp, #12
  14490. 8005c10: af00 add r7, sp, #0
  14491. 8005c12: 6078 str r0, [r7, #4]
  14492. 8005c14: 6039 str r1, [r7, #0]
  14493. WRITE_REG(SPIx->CRCPOLY, CRCPoly);
  14494. 8005c16: 687b ldr r3, [r7, #4]
  14495. 8005c18: 683a ldr r2, [r7, #0]
  14496. 8005c1a: 641a str r2, [r3, #64] ; 0x40
  14497. }
  14498. 8005c1c: bf00 nop
  14499. 8005c1e: 370c adds r7, #12
  14500. 8005c20: 46bd mov sp, r7
  14501. 8005c22: f85d 7b04 ldr.w r7, [sp], #4
  14502. 8005c26: 4770 bx lr
  14503. 08005c28 <LL_SPI_Init>:
  14504. * @param SPIx SPI Instance
  14505. * @param SPI_InitStruct pointer to a @ref LL_SPI_InitTypeDef structure
  14506. * @retval An ErrorStatus enumeration value. (Return always SUCCESS)
  14507. */
  14508. ErrorStatus LL_SPI_Init(SPI_TypeDef *SPIx, LL_SPI_InitTypeDef *SPI_InitStruct)
  14509. {
  14510. 8005c28: b580 push {r7, lr}
  14511. 8005c2a: b086 sub sp, #24
  14512. 8005c2c: af00 add r7, sp, #0
  14513. 8005c2e: 6078 str r0, [r7, #4]
  14514. 8005c30: 6039 str r1, [r7, #0]
  14515. ErrorStatus status = ERROR;
  14516. 8005c32: 2301 movs r3, #1
  14517. 8005c34: 75fb strb r3, [r7, #23]
  14518. assert_param(IS_LL_SPI_BAUDRATEPRESCALER(SPI_InitStruct->BaudRate));
  14519. assert_param(IS_LL_SPI_BITORDER(SPI_InitStruct->BitOrder));
  14520. assert_param(IS_LL_SPI_CRCCALCULATION(SPI_InitStruct->CRCCalculation));
  14521. /* Check the SPI instance is not enabled */
  14522. if (LL_SPI_IsEnabled(SPIx) == 0x00000000UL)
  14523. 8005c36: 6878 ldr r0, [r7, #4]
  14524. 8005c38: f7ff ffb4 bl 8005ba4 <LL_SPI_IsEnabled>
  14525. 8005c3c: 4603 mov r3, r0
  14526. 8005c3e: 2b00 cmp r3, #0
  14527. 8005c40: d169 bne.n 8005d16 <LL_SPI_Init+0xee>
  14528. * Configure SPIx CFG1 with parameters:
  14529. * - Master Baud Rate : SPI_CFG1_MBR[2:0] bits
  14530. * - CRC Computation Enable : SPI_CFG1_CRCEN bit
  14531. * - Length of data frame : SPI_CFG1_DSIZE[4:0] bits
  14532. */
  14533. MODIFY_REG(SPIx->CFG1, SPI_CFG1_MBR | SPI_CFG1_CRCEN | SPI_CFG1_DSIZE,
  14534. 8005c42: 687b ldr r3, [r7, #4]
  14535. 8005c44: 689a ldr r2, [r3, #8]
  14536. 8005c46: 4b36 ldr r3, [pc, #216] ; (8005d20 <LL_SPI_Init+0xf8>)
  14537. 8005c48: 4013 ands r3, r2
  14538. 8005c4a: 683a ldr r2, [r7, #0]
  14539. 8005c4c: 6991 ldr r1, [r2, #24]
  14540. 8005c4e: 683a ldr r2, [r7, #0]
  14541. 8005c50: 6a12 ldr r2, [r2, #32]
  14542. 8005c52: 4311 orrs r1, r2
  14543. 8005c54: 683a ldr r2, [r7, #0]
  14544. 8005c56: 6892 ldr r2, [r2, #8]
  14545. 8005c58: 430a orrs r2, r1
  14546. 8005c5a: 431a orrs r2, r3
  14547. 8005c5c: 687b ldr r3, [r7, #4]
  14548. 8005c5e: 609a str r2, [r3, #8]
  14549. SPI_InitStruct->BaudRate | SPI_InitStruct->CRCCalculation | SPI_InitStruct->DataWidth);
  14550. tmp_nss = SPI_InitStruct->NSS;
  14551. 8005c60: 683b ldr r3, [r7, #0]
  14552. 8005c62: 695b ldr r3, [r3, #20]
  14553. 8005c64: 613b str r3, [r7, #16]
  14554. tmp_mode = SPI_InitStruct->Mode;
  14555. 8005c66: 683b ldr r3, [r7, #0]
  14556. 8005c68: 685b ldr r3, [r3, #4]
  14557. 8005c6a: 60fb str r3, [r7, #12]
  14558. /* Checks to setup Internal SS signal level and avoid a MODF Error */
  14559. if ((tmp_nss == LL_SPI_NSS_SOFT) && (((LL_SPI_GetNSSPolarity(SPIx) == LL_SPI_NSS_POLARITY_LOW) && \
  14560. 8005c6c: 693b ldr r3, [r7, #16]
  14561. 8005c6e: f1b3 6f80 cmp.w r3, #67108864 ; 0x4000000
  14562. 8005c72: d118 bne.n 8005ca6 <LL_SPI_Init+0x7e>
  14563. 8005c74: 6878 ldr r0, [r7, #4]
  14564. 8005c76: f7ff ffbb bl 8005bf0 <LL_SPI_GetNSSPolarity>
  14565. 8005c7a: 4603 mov r3, r0
  14566. 8005c7c: 2b00 cmp r3, #0
  14567. 8005c7e: d103 bne.n 8005c88 <LL_SPI_Init+0x60>
  14568. 8005c80: 68fb ldr r3, [r7, #12]
  14569. 8005c82: f5b3 0f80 cmp.w r3, #4194304 ; 0x400000
  14570. 8005c86: d009 beq.n 8005c9c <LL_SPI_Init+0x74>
  14571. (tmp_mode == LL_SPI_MODE_MASTER)) || \
  14572. ((LL_SPI_GetNSSPolarity(SPIx) == LL_SPI_NSS_POLARITY_HIGH) && \
  14573. 8005c88: 6878 ldr r0, [r7, #4]
  14574. 8005c8a: f7ff ffb1 bl 8005bf0 <LL_SPI_GetNSSPolarity>
  14575. 8005c8e: 4603 mov r3, r0
  14576. (tmp_mode == LL_SPI_MODE_MASTER)) || \
  14577. 8005c90: f1b3 5f80 cmp.w r3, #268435456 ; 0x10000000
  14578. 8005c94: d107 bne.n 8005ca6 <LL_SPI_Init+0x7e>
  14579. ((LL_SPI_GetNSSPolarity(SPIx) == LL_SPI_NSS_POLARITY_HIGH) && \
  14580. 8005c96: 68fb ldr r3, [r7, #12]
  14581. 8005c98: 2b00 cmp r3, #0
  14582. 8005c9a: d104 bne.n 8005ca6 <LL_SPI_Init+0x7e>
  14583. (tmp_mode == LL_SPI_MODE_SLAVE))))
  14584. {
  14585. LL_SPI_SetInternalSSLevel(SPIx, LL_SPI_SS_LEVEL_HIGH);
  14586. 8005c9c: f44f 5180 mov.w r1, #4096 ; 0x1000
  14587. 8005ca0: 6878 ldr r0, [r7, #4]
  14588. 8005ca2: f7ff ff92 bl 8005bca <LL_SPI_SetInternalSSLevel>
  14589. * - ClockPhase : SPI_CFG2_CPHA bit
  14590. * - BitOrder : SPI_CFG2_LSBFRST bit
  14591. * - Master/Slave Mode : SPI_CFG2_MASTER bit
  14592. * - SPI Mode : SPI_CFG2_COMM[1:0] bits
  14593. */
  14594. MODIFY_REG(SPIx->CFG2, SPI_CFG2_SSM | SPI_CFG2_SSOE |
  14595. 8005ca6: 687b ldr r3, [r7, #4]
  14596. 8005ca8: 68da ldr r2, [r3, #12]
  14597. 8005caa: 4b1e ldr r3, [pc, #120] ; (8005d24 <LL_SPI_Init+0xfc>)
  14598. 8005cac: 4013 ands r3, r2
  14599. 8005cae: 683a ldr r2, [r7, #0]
  14600. 8005cb0: 6951 ldr r1, [r2, #20]
  14601. 8005cb2: 683a ldr r2, [r7, #0]
  14602. 8005cb4: 68d2 ldr r2, [r2, #12]
  14603. 8005cb6: 4311 orrs r1, r2
  14604. 8005cb8: 683a ldr r2, [r7, #0]
  14605. 8005cba: 6912 ldr r2, [r2, #16]
  14606. 8005cbc: 4311 orrs r1, r2
  14607. 8005cbe: 683a ldr r2, [r7, #0]
  14608. 8005cc0: 69d2 ldr r2, [r2, #28]
  14609. 8005cc2: 4311 orrs r1, r2
  14610. 8005cc4: 683a ldr r2, [r7, #0]
  14611. 8005cc6: 6852 ldr r2, [r2, #4]
  14612. 8005cc8: 4311 orrs r1, r2
  14613. 8005cca: 683a ldr r2, [r7, #0]
  14614. 8005ccc: 6812 ldr r2, [r2, #0]
  14615. 8005cce: f402 22c0 and.w r2, r2, #393216 ; 0x60000
  14616. 8005cd2: 430a orrs r2, r1
  14617. 8005cd4: 431a orrs r2, r3
  14618. 8005cd6: 687b ldr r3, [r7, #4]
  14619. 8005cd8: 60da str r2, [r3, #12]
  14620. /*---------------------------- SPIx CR1 Configuration ------------------------
  14621. * Configure SPIx CR1 with parameter:
  14622. * - Half Duplex Direction : SPI_CR1_HDDIR bit
  14623. */
  14624. MODIFY_REG(SPIx->CR1, SPI_CR1_HDDIR, SPI_InitStruct->TransferDirection & SPI_CR1_HDDIR);
  14625. 8005cda: 687b ldr r3, [r7, #4]
  14626. 8005cdc: 681b ldr r3, [r3, #0]
  14627. 8005cde: f423 6200 bic.w r2, r3, #2048 ; 0x800
  14628. 8005ce2: 683b ldr r3, [r7, #0]
  14629. 8005ce4: 681b ldr r3, [r3, #0]
  14630. 8005ce6: f403 6300 and.w r3, r3, #2048 ; 0x800
  14631. 8005cea: 431a orrs r2, r3
  14632. 8005cec: 687b ldr r3, [r7, #4]
  14633. 8005cee: 601a str r2, [r3, #0]
  14634. /*---------------------------- SPIx CRCPOLY Configuration ----------------------
  14635. * Configure SPIx CRCPOLY with parameter:
  14636. * - CRCPoly : CRCPOLY[31:0] bits
  14637. */
  14638. if (SPI_InitStruct->CRCCalculation == LL_SPI_CRCCALCULATION_ENABLE)
  14639. 8005cf0: 683b ldr r3, [r7, #0]
  14640. 8005cf2: 6a1b ldr r3, [r3, #32]
  14641. 8005cf4: f5b3 0f80 cmp.w r3, #4194304 ; 0x400000
  14642. 8005cf8: d105 bne.n 8005d06 <LL_SPI_Init+0xde>
  14643. {
  14644. assert_param(IS_LL_SPI_CRC_POLYNOMIAL(SPI_InitStruct->CRCPoly));
  14645. LL_SPI_SetCRCPolynomial(SPIx, SPI_InitStruct->CRCPoly);
  14646. 8005cfa: 683b ldr r3, [r7, #0]
  14647. 8005cfc: 6a5b ldr r3, [r3, #36] ; 0x24
  14648. 8005cfe: 4619 mov r1, r3
  14649. 8005d00: 6878 ldr r0, [r7, #4]
  14650. 8005d02: f7ff ff83 bl 8005c0c <LL_SPI_SetCRCPolynomial>
  14651. }
  14652. /* Activate the SPI mode (Reset I2SMOD bit in I2SCFGR register) */
  14653. CLEAR_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SMOD);
  14654. 8005d06: 687b ldr r3, [r7, #4]
  14655. 8005d08: 6d1b ldr r3, [r3, #80] ; 0x50
  14656. 8005d0a: f023 0201 bic.w r2, r3, #1
  14657. 8005d0e: 687b ldr r3, [r7, #4]
  14658. 8005d10: 651a str r2, [r3, #80] ; 0x50
  14659. status = SUCCESS;
  14660. 8005d12: 2300 movs r3, #0
  14661. 8005d14: 75fb strb r3, [r7, #23]
  14662. }
  14663. return status;
  14664. 8005d16: 7dfb ldrb r3, [r7, #23]
  14665. }
  14666. 8005d18: 4618 mov r0, r3
  14667. 8005d1a: 3718 adds r7, #24
  14668. 8005d1c: 46bd mov sp, r7
  14669. 8005d1e: bd80 pop {r7, pc}
  14670. 8005d20: 8fbfffe0 .word 0x8fbfffe0
  14671. 8005d24: d839ffff .word 0xd839ffff
  14672. 08005d28 <USB_CoreInit>:
  14673. * @param cfg pointer to a USB_OTG_CfgTypeDef structure that contains
  14674. * the configuration information for the specified USBx peripheral.
  14675. * @retval HAL status
  14676. */
  14677. HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg)
  14678. {
  14679. 8005d28: b084 sub sp, #16
  14680. 8005d2a: b580 push {r7, lr}
  14681. 8005d2c: b084 sub sp, #16
  14682. 8005d2e: af00 add r7, sp, #0
  14683. 8005d30: 6078 str r0, [r7, #4]
  14684. 8005d32: f107 001c add.w r0, r7, #28
  14685. 8005d36: e880 000e stmia.w r0, {r1, r2, r3}
  14686. HAL_StatusTypeDef ret;
  14687. if (cfg.phy_itface == USB_OTG_ULPI_PHY)
  14688. 8005d3a: 6b3b ldr r3, [r7, #48] ; 0x30
  14689. 8005d3c: 2b01 cmp r3, #1
  14690. 8005d3e: d120 bne.n 8005d82 <USB_CoreInit+0x5a>
  14691. {
  14692. USBx->GCCFG &= ~(USB_OTG_GCCFG_PWRDWN);
  14693. 8005d40: 687b ldr r3, [r7, #4]
  14694. 8005d42: 6b9b ldr r3, [r3, #56] ; 0x38
  14695. 8005d44: f423 3280 bic.w r2, r3, #65536 ; 0x10000
  14696. 8005d48: 687b ldr r3, [r7, #4]
  14697. 8005d4a: 639a str r2, [r3, #56] ; 0x38
  14698. /* Init The ULPI Interface */
  14699. USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_TSDPS | USB_OTG_GUSBCFG_ULPIFSLS | USB_OTG_GUSBCFG_PHYSEL);
  14700. 8005d4c: 687b ldr r3, [r7, #4]
  14701. 8005d4e: 68da ldr r2, [r3, #12]
  14702. 8005d50: 4b2a ldr r3, [pc, #168] ; (8005dfc <USB_CoreInit+0xd4>)
  14703. 8005d52: 4013 ands r3, r2
  14704. 8005d54: 687a ldr r2, [r7, #4]
  14705. 8005d56: 60d3 str r3, [r2, #12]
  14706. /* Select vbus source */
  14707. USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_ULPIEVBUSD | USB_OTG_GUSBCFG_ULPIEVBUSI);
  14708. 8005d58: 687b ldr r3, [r7, #4]
  14709. 8005d5a: 68db ldr r3, [r3, #12]
  14710. 8005d5c: f423 1240 bic.w r2, r3, #3145728 ; 0x300000
  14711. 8005d60: 687b ldr r3, [r7, #4]
  14712. 8005d62: 60da str r2, [r3, #12]
  14713. if (cfg.use_external_vbus == 1U)
  14714. 8005d64: 6cfb ldr r3, [r7, #76] ; 0x4c
  14715. 8005d66: 2b01 cmp r3, #1
  14716. 8005d68: d105 bne.n 8005d76 <USB_CoreInit+0x4e>
  14717. {
  14718. USBx->GUSBCFG |= USB_OTG_GUSBCFG_ULPIEVBUSD;
  14719. 8005d6a: 687b ldr r3, [r7, #4]
  14720. 8005d6c: 68db ldr r3, [r3, #12]
  14721. 8005d6e: f443 1280 orr.w r2, r3, #1048576 ; 0x100000
  14722. 8005d72: 687b ldr r3, [r7, #4]
  14723. 8005d74: 60da str r2, [r3, #12]
  14724. }
  14725. /* Reset after a PHY select */
  14726. ret = USB_CoreReset(USBx);
  14727. 8005d76: 6878 ldr r0, [r7, #4]
  14728. 8005d78: f001 fb4e bl 8007418 <USB_CoreReset>
  14729. 8005d7c: 4603 mov r3, r0
  14730. 8005d7e: 73fb strb r3, [r7, #15]
  14731. 8005d80: e01a b.n 8005db8 <USB_CoreInit+0x90>
  14732. }
  14733. else /* FS interface (embedded Phy) */
  14734. {
  14735. /* Select FS Embedded PHY */
  14736. USBx->GUSBCFG |= USB_OTG_GUSBCFG_PHYSEL;
  14737. 8005d82: 687b ldr r3, [r7, #4]
  14738. 8005d84: 68db ldr r3, [r3, #12]
  14739. 8005d86: f043 0240 orr.w r2, r3, #64 ; 0x40
  14740. 8005d8a: 687b ldr r3, [r7, #4]
  14741. 8005d8c: 60da str r2, [r3, #12]
  14742. /* Reset after a PHY select */
  14743. ret = USB_CoreReset(USBx);
  14744. 8005d8e: 6878 ldr r0, [r7, #4]
  14745. 8005d90: f001 fb42 bl 8007418 <USB_CoreReset>
  14746. 8005d94: 4603 mov r3, r0
  14747. 8005d96: 73fb strb r3, [r7, #15]
  14748. if (cfg.battery_charging_enable == 0U)
  14749. 8005d98: 6c3b ldr r3, [r7, #64] ; 0x40
  14750. 8005d9a: 2b00 cmp r3, #0
  14751. 8005d9c: d106 bne.n 8005dac <USB_CoreInit+0x84>
  14752. {
  14753. /* Activate the USB Transceiver */
  14754. USBx->GCCFG |= USB_OTG_GCCFG_PWRDWN;
  14755. 8005d9e: 687b ldr r3, [r7, #4]
  14756. 8005da0: 6b9b ldr r3, [r3, #56] ; 0x38
  14757. 8005da2: f443 3280 orr.w r2, r3, #65536 ; 0x10000
  14758. 8005da6: 687b ldr r3, [r7, #4]
  14759. 8005da8: 639a str r2, [r3, #56] ; 0x38
  14760. 8005daa: e005 b.n 8005db8 <USB_CoreInit+0x90>
  14761. }
  14762. else
  14763. {
  14764. /* Deactivate the USB Transceiver */
  14765. USBx->GCCFG &= ~(USB_OTG_GCCFG_PWRDWN);
  14766. 8005dac: 687b ldr r3, [r7, #4]
  14767. 8005dae: 6b9b ldr r3, [r3, #56] ; 0x38
  14768. 8005db0: f423 3280 bic.w r2, r3, #65536 ; 0x10000
  14769. 8005db4: 687b ldr r3, [r7, #4]
  14770. 8005db6: 639a str r2, [r3, #56] ; 0x38
  14771. }
  14772. }
  14773. if (cfg.dma_enable == 1U)
  14774. 8005db8: 6abb ldr r3, [r7, #40] ; 0x28
  14775. 8005dba: 2b01 cmp r3, #1
  14776. 8005dbc: d116 bne.n 8005dec <USB_CoreInit+0xc4>
  14777. {
  14778. /* make sure to reserve 18 fifo Locations for DMA buffers */
  14779. USBx->GDFIFOCFG &= ~(0xFFFFU << 16);
  14780. 8005dbe: 687b ldr r3, [r7, #4]
  14781. 8005dc0: 6ddb ldr r3, [r3, #92] ; 0x5c
  14782. 8005dc2: b29a uxth r2, r3
  14783. 8005dc4: 687b ldr r3, [r7, #4]
  14784. 8005dc6: 65da str r2, [r3, #92] ; 0x5c
  14785. USBx->GDFIFOCFG |= 0x3EEU << 16;
  14786. 8005dc8: 687b ldr r3, [r7, #4]
  14787. 8005dca: 6dda ldr r2, [r3, #92] ; 0x5c
  14788. 8005dcc: 4b0c ldr r3, [pc, #48] ; (8005e00 <USB_CoreInit+0xd8>)
  14789. 8005dce: 4313 orrs r3, r2
  14790. 8005dd0: 687a ldr r2, [r7, #4]
  14791. 8005dd2: 65d3 str r3, [r2, #92] ; 0x5c
  14792. USBx->GAHBCFG |= USB_OTG_GAHBCFG_HBSTLEN_2;
  14793. 8005dd4: 687b ldr r3, [r7, #4]
  14794. 8005dd6: 689b ldr r3, [r3, #8]
  14795. 8005dd8: f043 0206 orr.w r2, r3, #6
  14796. 8005ddc: 687b ldr r3, [r7, #4]
  14797. 8005dde: 609a str r2, [r3, #8]
  14798. USBx->GAHBCFG |= USB_OTG_GAHBCFG_DMAEN;
  14799. 8005de0: 687b ldr r3, [r7, #4]
  14800. 8005de2: 689b ldr r3, [r3, #8]
  14801. 8005de4: f043 0220 orr.w r2, r3, #32
  14802. 8005de8: 687b ldr r3, [r7, #4]
  14803. 8005dea: 609a str r2, [r3, #8]
  14804. }
  14805. return ret;
  14806. 8005dec: 7bfb ldrb r3, [r7, #15]
  14807. }
  14808. 8005dee: 4618 mov r0, r3
  14809. 8005df0: 3710 adds r7, #16
  14810. 8005df2: 46bd mov sp, r7
  14811. 8005df4: e8bd 4080 ldmia.w sp!, {r7, lr}
  14812. 8005df8: b004 add sp, #16
  14813. 8005dfa: 4770 bx lr
  14814. 8005dfc: ffbdffbf .word 0xffbdffbf
  14815. 8005e00: 03ee0000 .word 0x03ee0000
  14816. 08005e04 <USB_SetTurnaroundTime>:
  14817. * @param hclk: AHB clock frequency
  14818. * @retval USB turnaround time In PHY Clocks number
  14819. */
  14820. HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx,
  14821. uint32_t hclk, uint8_t speed)
  14822. {
  14823. 8005e04: b480 push {r7}
  14824. 8005e06: b087 sub sp, #28
  14825. 8005e08: af00 add r7, sp, #0
  14826. 8005e0a: 60f8 str r0, [r7, #12]
  14827. 8005e0c: 60b9 str r1, [r7, #8]
  14828. 8005e0e: 4613 mov r3, r2
  14829. 8005e10: 71fb strb r3, [r7, #7]
  14830. /* The USBTRD is configured according to the tables below, depending on AHB frequency
  14831. used by application. In the low AHB frequency range it is used to stretch enough the USB response
  14832. time to IN tokens, the USB turnaround time, so to compensate for the longer AHB read access
  14833. latency to the Data FIFO */
  14834. if (speed == USBD_FS_SPEED)
  14835. 8005e12: 79fb ldrb r3, [r7, #7]
  14836. 8005e14: 2b02 cmp r3, #2
  14837. 8005e16: d165 bne.n 8005ee4 <USB_SetTurnaroundTime+0xe0>
  14838. {
  14839. if ((hclk >= 14200000U) && (hclk < 15000000U))
  14840. 8005e18: 68bb ldr r3, [r7, #8]
  14841. 8005e1a: 4a41 ldr r2, [pc, #260] ; (8005f20 <USB_SetTurnaroundTime+0x11c>)
  14842. 8005e1c: 4293 cmp r3, r2
  14843. 8005e1e: d906 bls.n 8005e2e <USB_SetTurnaroundTime+0x2a>
  14844. 8005e20: 68bb ldr r3, [r7, #8]
  14845. 8005e22: 4a40 ldr r2, [pc, #256] ; (8005f24 <USB_SetTurnaroundTime+0x120>)
  14846. 8005e24: 4293 cmp r3, r2
  14847. 8005e26: d202 bcs.n 8005e2e <USB_SetTurnaroundTime+0x2a>
  14848. {
  14849. /* hclk Clock Range between 14.2-15 MHz */
  14850. UsbTrd = 0xFU;
  14851. 8005e28: 230f movs r3, #15
  14852. 8005e2a: 617b str r3, [r7, #20]
  14853. 8005e2c: e062 b.n 8005ef4 <USB_SetTurnaroundTime+0xf0>
  14854. }
  14855. else if ((hclk >= 15000000U) && (hclk < 16000000U))
  14856. 8005e2e: 68bb ldr r3, [r7, #8]
  14857. 8005e30: 4a3c ldr r2, [pc, #240] ; (8005f24 <USB_SetTurnaroundTime+0x120>)
  14858. 8005e32: 4293 cmp r3, r2
  14859. 8005e34: d306 bcc.n 8005e44 <USB_SetTurnaroundTime+0x40>
  14860. 8005e36: 68bb ldr r3, [r7, #8]
  14861. 8005e38: 4a3b ldr r2, [pc, #236] ; (8005f28 <USB_SetTurnaroundTime+0x124>)
  14862. 8005e3a: 4293 cmp r3, r2
  14863. 8005e3c: d202 bcs.n 8005e44 <USB_SetTurnaroundTime+0x40>
  14864. {
  14865. /* hclk Clock Range between 15-16 MHz */
  14866. UsbTrd = 0xEU;
  14867. 8005e3e: 230e movs r3, #14
  14868. 8005e40: 617b str r3, [r7, #20]
  14869. 8005e42: e057 b.n 8005ef4 <USB_SetTurnaroundTime+0xf0>
  14870. }
  14871. else if ((hclk >= 16000000U) && (hclk < 17200000U))
  14872. 8005e44: 68bb ldr r3, [r7, #8]
  14873. 8005e46: 4a38 ldr r2, [pc, #224] ; (8005f28 <USB_SetTurnaroundTime+0x124>)
  14874. 8005e48: 4293 cmp r3, r2
  14875. 8005e4a: d306 bcc.n 8005e5a <USB_SetTurnaroundTime+0x56>
  14876. 8005e4c: 68bb ldr r3, [r7, #8]
  14877. 8005e4e: 4a37 ldr r2, [pc, #220] ; (8005f2c <USB_SetTurnaroundTime+0x128>)
  14878. 8005e50: 4293 cmp r3, r2
  14879. 8005e52: d202 bcs.n 8005e5a <USB_SetTurnaroundTime+0x56>
  14880. {
  14881. /* hclk Clock Range between 16-17.2 MHz */
  14882. UsbTrd = 0xDU;
  14883. 8005e54: 230d movs r3, #13
  14884. 8005e56: 617b str r3, [r7, #20]
  14885. 8005e58: e04c b.n 8005ef4 <USB_SetTurnaroundTime+0xf0>
  14886. }
  14887. else if ((hclk >= 17200000U) && (hclk < 18500000U))
  14888. 8005e5a: 68bb ldr r3, [r7, #8]
  14889. 8005e5c: 4a33 ldr r2, [pc, #204] ; (8005f2c <USB_SetTurnaroundTime+0x128>)
  14890. 8005e5e: 4293 cmp r3, r2
  14891. 8005e60: d306 bcc.n 8005e70 <USB_SetTurnaroundTime+0x6c>
  14892. 8005e62: 68bb ldr r3, [r7, #8]
  14893. 8005e64: 4a32 ldr r2, [pc, #200] ; (8005f30 <USB_SetTurnaroundTime+0x12c>)
  14894. 8005e66: 4293 cmp r3, r2
  14895. 8005e68: d802 bhi.n 8005e70 <USB_SetTurnaroundTime+0x6c>
  14896. {
  14897. /* hclk Clock Range between 17.2-18.5 MHz */
  14898. UsbTrd = 0xCU;
  14899. 8005e6a: 230c movs r3, #12
  14900. 8005e6c: 617b str r3, [r7, #20]
  14901. 8005e6e: e041 b.n 8005ef4 <USB_SetTurnaroundTime+0xf0>
  14902. }
  14903. else if ((hclk >= 18500000U) && (hclk < 20000000U))
  14904. 8005e70: 68bb ldr r3, [r7, #8]
  14905. 8005e72: 4a2f ldr r2, [pc, #188] ; (8005f30 <USB_SetTurnaroundTime+0x12c>)
  14906. 8005e74: 4293 cmp r3, r2
  14907. 8005e76: d906 bls.n 8005e86 <USB_SetTurnaroundTime+0x82>
  14908. 8005e78: 68bb ldr r3, [r7, #8]
  14909. 8005e7a: 4a2e ldr r2, [pc, #184] ; (8005f34 <USB_SetTurnaroundTime+0x130>)
  14910. 8005e7c: 4293 cmp r3, r2
  14911. 8005e7e: d802 bhi.n 8005e86 <USB_SetTurnaroundTime+0x82>
  14912. {
  14913. /* hclk Clock Range between 18.5-20 MHz */
  14914. UsbTrd = 0xBU;
  14915. 8005e80: 230b movs r3, #11
  14916. 8005e82: 617b str r3, [r7, #20]
  14917. 8005e84: e036 b.n 8005ef4 <USB_SetTurnaroundTime+0xf0>
  14918. }
  14919. else if ((hclk >= 20000000U) && (hclk < 21800000U))
  14920. 8005e86: 68bb ldr r3, [r7, #8]
  14921. 8005e88: 4a2a ldr r2, [pc, #168] ; (8005f34 <USB_SetTurnaroundTime+0x130>)
  14922. 8005e8a: 4293 cmp r3, r2
  14923. 8005e8c: d906 bls.n 8005e9c <USB_SetTurnaroundTime+0x98>
  14924. 8005e8e: 68bb ldr r3, [r7, #8]
  14925. 8005e90: 4a29 ldr r2, [pc, #164] ; (8005f38 <USB_SetTurnaroundTime+0x134>)
  14926. 8005e92: 4293 cmp r3, r2
  14927. 8005e94: d802 bhi.n 8005e9c <USB_SetTurnaroundTime+0x98>
  14928. {
  14929. /* hclk Clock Range between 20-21.8 MHz */
  14930. UsbTrd = 0xAU;
  14931. 8005e96: 230a movs r3, #10
  14932. 8005e98: 617b str r3, [r7, #20]
  14933. 8005e9a: e02b b.n 8005ef4 <USB_SetTurnaroundTime+0xf0>
  14934. }
  14935. else if ((hclk >= 21800000U) && (hclk < 24000000U))
  14936. 8005e9c: 68bb ldr r3, [r7, #8]
  14937. 8005e9e: 4a26 ldr r2, [pc, #152] ; (8005f38 <USB_SetTurnaroundTime+0x134>)
  14938. 8005ea0: 4293 cmp r3, r2
  14939. 8005ea2: d906 bls.n 8005eb2 <USB_SetTurnaroundTime+0xae>
  14940. 8005ea4: 68bb ldr r3, [r7, #8]
  14941. 8005ea6: 4a25 ldr r2, [pc, #148] ; (8005f3c <USB_SetTurnaroundTime+0x138>)
  14942. 8005ea8: 4293 cmp r3, r2
  14943. 8005eaa: d202 bcs.n 8005eb2 <USB_SetTurnaroundTime+0xae>
  14944. {
  14945. /* hclk Clock Range between 21.8-24 MHz */
  14946. UsbTrd = 0x9U;
  14947. 8005eac: 2309 movs r3, #9
  14948. 8005eae: 617b str r3, [r7, #20]
  14949. 8005eb0: e020 b.n 8005ef4 <USB_SetTurnaroundTime+0xf0>
  14950. }
  14951. else if ((hclk >= 24000000U) && (hclk < 27700000U))
  14952. 8005eb2: 68bb ldr r3, [r7, #8]
  14953. 8005eb4: 4a21 ldr r2, [pc, #132] ; (8005f3c <USB_SetTurnaroundTime+0x138>)
  14954. 8005eb6: 4293 cmp r3, r2
  14955. 8005eb8: d306 bcc.n 8005ec8 <USB_SetTurnaroundTime+0xc4>
  14956. 8005eba: 68bb ldr r3, [r7, #8]
  14957. 8005ebc: 4a20 ldr r2, [pc, #128] ; (8005f40 <USB_SetTurnaroundTime+0x13c>)
  14958. 8005ebe: 4293 cmp r3, r2
  14959. 8005ec0: d802 bhi.n 8005ec8 <USB_SetTurnaroundTime+0xc4>
  14960. {
  14961. /* hclk Clock Range between 24-27.7 MHz */
  14962. UsbTrd = 0x8U;
  14963. 8005ec2: 2308 movs r3, #8
  14964. 8005ec4: 617b str r3, [r7, #20]
  14965. 8005ec6: e015 b.n 8005ef4 <USB_SetTurnaroundTime+0xf0>
  14966. }
  14967. else if ((hclk >= 27700000U) && (hclk < 32000000U))
  14968. 8005ec8: 68bb ldr r3, [r7, #8]
  14969. 8005eca: 4a1d ldr r2, [pc, #116] ; (8005f40 <USB_SetTurnaroundTime+0x13c>)
  14970. 8005ecc: 4293 cmp r3, r2
  14971. 8005ece: d906 bls.n 8005ede <USB_SetTurnaroundTime+0xda>
  14972. 8005ed0: 68bb ldr r3, [r7, #8]
  14973. 8005ed2: 4a1c ldr r2, [pc, #112] ; (8005f44 <USB_SetTurnaroundTime+0x140>)
  14974. 8005ed4: 4293 cmp r3, r2
  14975. 8005ed6: d202 bcs.n 8005ede <USB_SetTurnaroundTime+0xda>
  14976. {
  14977. /* hclk Clock Range between 27.7-32 MHz */
  14978. UsbTrd = 0x7U;
  14979. 8005ed8: 2307 movs r3, #7
  14980. 8005eda: 617b str r3, [r7, #20]
  14981. 8005edc: e00a b.n 8005ef4 <USB_SetTurnaroundTime+0xf0>
  14982. }
  14983. else /* if(hclk >= 32000000) */
  14984. {
  14985. /* hclk Clock Range between 32-200 MHz */
  14986. UsbTrd = 0x6U;
  14987. 8005ede: 2306 movs r3, #6
  14988. 8005ee0: 617b str r3, [r7, #20]
  14989. 8005ee2: e007 b.n 8005ef4 <USB_SetTurnaroundTime+0xf0>
  14990. }
  14991. }
  14992. else if (speed == USBD_HS_SPEED)
  14993. 8005ee4: 79fb ldrb r3, [r7, #7]
  14994. 8005ee6: 2b00 cmp r3, #0
  14995. 8005ee8: d102 bne.n 8005ef0 <USB_SetTurnaroundTime+0xec>
  14996. {
  14997. UsbTrd = USBD_HS_TRDT_VALUE;
  14998. 8005eea: 2309 movs r3, #9
  14999. 8005eec: 617b str r3, [r7, #20]
  15000. 8005eee: e001 b.n 8005ef4 <USB_SetTurnaroundTime+0xf0>
  15001. }
  15002. else
  15003. {
  15004. UsbTrd = USBD_DEFAULT_TRDT_VALUE;
  15005. 8005ef0: 2309 movs r3, #9
  15006. 8005ef2: 617b str r3, [r7, #20]
  15007. }
  15008. USBx->GUSBCFG &= ~USB_OTG_GUSBCFG_TRDT;
  15009. 8005ef4: 68fb ldr r3, [r7, #12]
  15010. 8005ef6: 68db ldr r3, [r3, #12]
  15011. 8005ef8: f423 5270 bic.w r2, r3, #15360 ; 0x3c00
  15012. 8005efc: 68fb ldr r3, [r7, #12]
  15013. 8005efe: 60da str r2, [r3, #12]
  15014. USBx->GUSBCFG |= (uint32_t)((UsbTrd << 10) & USB_OTG_GUSBCFG_TRDT);
  15015. 8005f00: 68fb ldr r3, [r7, #12]
  15016. 8005f02: 68da ldr r2, [r3, #12]
  15017. 8005f04: 697b ldr r3, [r7, #20]
  15018. 8005f06: 029b lsls r3, r3, #10
  15019. 8005f08: f403 5370 and.w r3, r3, #15360 ; 0x3c00
  15020. 8005f0c: 431a orrs r2, r3
  15021. 8005f0e: 68fb ldr r3, [r7, #12]
  15022. 8005f10: 60da str r2, [r3, #12]
  15023. return HAL_OK;
  15024. 8005f12: 2300 movs r3, #0
  15025. }
  15026. 8005f14: 4618 mov r0, r3
  15027. 8005f16: 371c adds r7, #28
  15028. 8005f18: 46bd mov sp, r7
  15029. 8005f1a: f85d 7b04 ldr.w r7, [sp], #4
  15030. 8005f1e: 4770 bx lr
  15031. 8005f20: 00d8acbf .word 0x00d8acbf
  15032. 8005f24: 00e4e1c0 .word 0x00e4e1c0
  15033. 8005f28: 00f42400 .word 0x00f42400
  15034. 8005f2c: 01067380 .word 0x01067380
  15035. 8005f30: 011a499f .word 0x011a499f
  15036. 8005f34: 01312cff .word 0x01312cff
  15037. 8005f38: 014ca43f .word 0x014ca43f
  15038. 8005f3c: 016e3600 .word 0x016e3600
  15039. 8005f40: 01a6ab1f .word 0x01a6ab1f
  15040. 8005f44: 01e84800 .word 0x01e84800
  15041. 08005f48 <USB_EnableGlobalInt>:
  15042. * Enables the controller's Global Int in the AHB Config reg
  15043. * @param USBx Selected device
  15044. * @retval HAL status
  15045. */
  15046. HAL_StatusTypeDef USB_EnableGlobalInt(USB_OTG_GlobalTypeDef *USBx)
  15047. {
  15048. 8005f48: b480 push {r7}
  15049. 8005f4a: b083 sub sp, #12
  15050. 8005f4c: af00 add r7, sp, #0
  15051. 8005f4e: 6078 str r0, [r7, #4]
  15052. USBx->GAHBCFG |= USB_OTG_GAHBCFG_GINT;
  15053. 8005f50: 687b ldr r3, [r7, #4]
  15054. 8005f52: 689b ldr r3, [r3, #8]
  15055. 8005f54: f043 0201 orr.w r2, r3, #1
  15056. 8005f58: 687b ldr r3, [r7, #4]
  15057. 8005f5a: 609a str r2, [r3, #8]
  15058. return HAL_OK;
  15059. 8005f5c: 2300 movs r3, #0
  15060. }
  15061. 8005f5e: 4618 mov r0, r3
  15062. 8005f60: 370c adds r7, #12
  15063. 8005f62: 46bd mov sp, r7
  15064. 8005f64: f85d 7b04 ldr.w r7, [sp], #4
  15065. 8005f68: 4770 bx lr
  15066. 08005f6a <USB_DisableGlobalInt>:
  15067. * Disable the controller's Global Int in the AHB Config reg
  15068. * @param USBx Selected device
  15069. * @retval HAL status
  15070. */
  15071. HAL_StatusTypeDef USB_DisableGlobalInt(USB_OTG_GlobalTypeDef *USBx)
  15072. {
  15073. 8005f6a: b480 push {r7}
  15074. 8005f6c: b083 sub sp, #12
  15075. 8005f6e: af00 add r7, sp, #0
  15076. 8005f70: 6078 str r0, [r7, #4]
  15077. USBx->GAHBCFG &= ~USB_OTG_GAHBCFG_GINT;
  15078. 8005f72: 687b ldr r3, [r7, #4]
  15079. 8005f74: 689b ldr r3, [r3, #8]
  15080. 8005f76: f023 0201 bic.w r2, r3, #1
  15081. 8005f7a: 687b ldr r3, [r7, #4]
  15082. 8005f7c: 609a str r2, [r3, #8]
  15083. return HAL_OK;
  15084. 8005f7e: 2300 movs r3, #0
  15085. }
  15086. 8005f80: 4618 mov r0, r3
  15087. 8005f82: 370c adds r7, #12
  15088. 8005f84: 46bd mov sp, r7
  15089. 8005f86: f85d 7b04 ldr.w r7, [sp], #4
  15090. 8005f8a: 4770 bx lr
  15091. 08005f8c <USB_SetCurrentMode>:
  15092. * @arg USB_DEVICE_MODE Peripheral mode
  15093. * @arg USB_HOST_MODE Host mode
  15094. * @retval HAL status
  15095. */
  15096. HAL_StatusTypeDef USB_SetCurrentMode(USB_OTG_GlobalTypeDef *USBx, USB_OTG_ModeTypeDef mode)
  15097. {
  15098. 8005f8c: b580 push {r7, lr}
  15099. 8005f8e: b084 sub sp, #16
  15100. 8005f90: af00 add r7, sp, #0
  15101. 8005f92: 6078 str r0, [r7, #4]
  15102. 8005f94: 460b mov r3, r1
  15103. 8005f96: 70fb strb r3, [r7, #3]
  15104. uint32_t ms = 0U;
  15105. 8005f98: 2300 movs r3, #0
  15106. 8005f9a: 60fb str r3, [r7, #12]
  15107. USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_FHMOD | USB_OTG_GUSBCFG_FDMOD);
  15108. 8005f9c: 687b ldr r3, [r7, #4]
  15109. 8005f9e: 68db ldr r3, [r3, #12]
  15110. 8005fa0: f023 42c0 bic.w r2, r3, #1610612736 ; 0x60000000
  15111. 8005fa4: 687b ldr r3, [r7, #4]
  15112. 8005fa6: 60da str r2, [r3, #12]
  15113. if (mode == USB_HOST_MODE)
  15114. 8005fa8: 78fb ldrb r3, [r7, #3]
  15115. 8005faa: 2b01 cmp r3, #1
  15116. 8005fac: d115 bne.n 8005fda <USB_SetCurrentMode+0x4e>
  15117. {
  15118. USBx->GUSBCFG |= USB_OTG_GUSBCFG_FHMOD;
  15119. 8005fae: 687b ldr r3, [r7, #4]
  15120. 8005fb0: 68db ldr r3, [r3, #12]
  15121. 8005fb2: f043 5200 orr.w r2, r3, #536870912 ; 0x20000000
  15122. 8005fb6: 687b ldr r3, [r7, #4]
  15123. 8005fb8: 60da str r2, [r3, #12]
  15124. do
  15125. {
  15126. HAL_Delay(1U);
  15127. 8005fba: 2001 movs r0, #1
  15128. 8005fbc: f7fb fafc bl 80015b8 <HAL_Delay>
  15129. ms++;
  15130. 8005fc0: 68fb ldr r3, [r7, #12]
  15131. 8005fc2: 3301 adds r3, #1
  15132. 8005fc4: 60fb str r3, [r7, #12]
  15133. } while ((USB_GetMode(USBx) != (uint32_t)USB_HOST_MODE) && (ms < 50U));
  15134. 8005fc6: 6878 ldr r0, [r7, #4]
  15135. 8005fc8: f001 f995 bl 80072f6 <USB_GetMode>
  15136. 8005fcc: 4603 mov r3, r0
  15137. 8005fce: 2b01 cmp r3, #1
  15138. 8005fd0: d01e beq.n 8006010 <USB_SetCurrentMode+0x84>
  15139. 8005fd2: 68fb ldr r3, [r7, #12]
  15140. 8005fd4: 2b31 cmp r3, #49 ; 0x31
  15141. 8005fd6: d9f0 bls.n 8005fba <USB_SetCurrentMode+0x2e>
  15142. 8005fd8: e01a b.n 8006010 <USB_SetCurrentMode+0x84>
  15143. }
  15144. else if (mode == USB_DEVICE_MODE)
  15145. 8005fda: 78fb ldrb r3, [r7, #3]
  15146. 8005fdc: 2b00 cmp r3, #0
  15147. 8005fde: d115 bne.n 800600c <USB_SetCurrentMode+0x80>
  15148. {
  15149. USBx->GUSBCFG |= USB_OTG_GUSBCFG_FDMOD;
  15150. 8005fe0: 687b ldr r3, [r7, #4]
  15151. 8005fe2: 68db ldr r3, [r3, #12]
  15152. 8005fe4: f043 4280 orr.w r2, r3, #1073741824 ; 0x40000000
  15153. 8005fe8: 687b ldr r3, [r7, #4]
  15154. 8005fea: 60da str r2, [r3, #12]
  15155. do
  15156. {
  15157. HAL_Delay(1U);
  15158. 8005fec: 2001 movs r0, #1
  15159. 8005fee: f7fb fae3 bl 80015b8 <HAL_Delay>
  15160. ms++;
  15161. 8005ff2: 68fb ldr r3, [r7, #12]
  15162. 8005ff4: 3301 adds r3, #1
  15163. 8005ff6: 60fb str r3, [r7, #12]
  15164. } while ((USB_GetMode(USBx) != (uint32_t)USB_DEVICE_MODE) && (ms < 50U));
  15165. 8005ff8: 6878 ldr r0, [r7, #4]
  15166. 8005ffa: f001 f97c bl 80072f6 <USB_GetMode>
  15167. 8005ffe: 4603 mov r3, r0
  15168. 8006000: 2b00 cmp r3, #0
  15169. 8006002: d005 beq.n 8006010 <USB_SetCurrentMode+0x84>
  15170. 8006004: 68fb ldr r3, [r7, #12]
  15171. 8006006: 2b31 cmp r3, #49 ; 0x31
  15172. 8006008: d9f0 bls.n 8005fec <USB_SetCurrentMode+0x60>
  15173. 800600a: e001 b.n 8006010 <USB_SetCurrentMode+0x84>
  15174. }
  15175. else
  15176. {
  15177. return HAL_ERROR;
  15178. 800600c: 2301 movs r3, #1
  15179. 800600e: e005 b.n 800601c <USB_SetCurrentMode+0x90>
  15180. }
  15181. if (ms == 50U)
  15182. 8006010: 68fb ldr r3, [r7, #12]
  15183. 8006012: 2b32 cmp r3, #50 ; 0x32
  15184. 8006014: d101 bne.n 800601a <USB_SetCurrentMode+0x8e>
  15185. {
  15186. return HAL_ERROR;
  15187. 8006016: 2301 movs r3, #1
  15188. 8006018: e000 b.n 800601c <USB_SetCurrentMode+0x90>
  15189. }
  15190. return HAL_OK;
  15191. 800601a: 2300 movs r3, #0
  15192. }
  15193. 800601c: 4618 mov r0, r3
  15194. 800601e: 3710 adds r7, #16
  15195. 8006020: 46bd mov sp, r7
  15196. 8006022: bd80 pop {r7, pc}
  15197. 08006024 <USB_DevInit>:
  15198. * @param cfg pointer to a USB_OTG_CfgTypeDef structure that contains
  15199. * the configuration information for the specified USBx peripheral.
  15200. * @retval HAL status
  15201. */
  15202. HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg)
  15203. {
  15204. 8006024: b084 sub sp, #16
  15205. 8006026: b580 push {r7, lr}
  15206. 8006028: b086 sub sp, #24
  15207. 800602a: af00 add r7, sp, #0
  15208. 800602c: 6078 str r0, [r7, #4]
  15209. 800602e: f107 0024 add.w r0, r7, #36 ; 0x24
  15210. 8006032: e880 000e stmia.w r0, {r1, r2, r3}
  15211. HAL_StatusTypeDef ret = HAL_OK;
  15212. 8006036: 2300 movs r3, #0
  15213. 8006038: 75fb strb r3, [r7, #23]
  15214. uint32_t USBx_BASE = (uint32_t)USBx;
  15215. 800603a: 687b ldr r3, [r7, #4]
  15216. 800603c: 60fb str r3, [r7, #12]
  15217. uint32_t i;
  15218. for (i = 0U; i < 15U; i++)
  15219. 800603e: 2300 movs r3, #0
  15220. 8006040: 613b str r3, [r7, #16]
  15221. 8006042: e009 b.n 8006058 <USB_DevInit+0x34>
  15222. {
  15223. USBx->DIEPTXF[i] = 0U;
  15224. 8006044: 687a ldr r2, [r7, #4]
  15225. 8006046: 693b ldr r3, [r7, #16]
  15226. 8006048: 3340 adds r3, #64 ; 0x40
  15227. 800604a: 009b lsls r3, r3, #2
  15228. 800604c: 4413 add r3, r2
  15229. 800604e: 2200 movs r2, #0
  15230. 8006050: 605a str r2, [r3, #4]
  15231. for (i = 0U; i < 15U; i++)
  15232. 8006052: 693b ldr r3, [r7, #16]
  15233. 8006054: 3301 adds r3, #1
  15234. 8006056: 613b str r3, [r7, #16]
  15235. 8006058: 693b ldr r3, [r7, #16]
  15236. 800605a: 2b0e cmp r3, #14
  15237. 800605c: d9f2 bls.n 8006044 <USB_DevInit+0x20>
  15238. }
  15239. /* VBUS Sensing setup */
  15240. if (cfg.vbus_sensing_enable == 0U)
  15241. 800605e: 6cfb ldr r3, [r7, #76] ; 0x4c
  15242. 8006060: 2b00 cmp r3, #0
  15243. 8006062: d11c bne.n 800609e <USB_DevInit+0x7a>
  15244. {
  15245. USBx_DEVICE->DCTL |= USB_OTG_DCTL_SDIS;
  15246. 8006064: 68fb ldr r3, [r7, #12]
  15247. 8006066: f503 6300 add.w r3, r3, #2048 ; 0x800
  15248. 800606a: 685b ldr r3, [r3, #4]
  15249. 800606c: 68fa ldr r2, [r7, #12]
  15250. 800606e: f502 6200 add.w r2, r2, #2048 ; 0x800
  15251. 8006072: f043 0302 orr.w r3, r3, #2
  15252. 8006076: 6053 str r3, [r2, #4]
  15253. /* Deactivate VBUS Sensing B */
  15254. USBx->GCCFG &= ~USB_OTG_GCCFG_VBDEN;
  15255. 8006078: 687b ldr r3, [r7, #4]
  15256. 800607a: 6b9b ldr r3, [r3, #56] ; 0x38
  15257. 800607c: f423 1200 bic.w r2, r3, #2097152 ; 0x200000
  15258. 8006080: 687b ldr r3, [r7, #4]
  15259. 8006082: 639a str r2, [r3, #56] ; 0x38
  15260. /* B-peripheral session valid override enable */
  15261. USBx->GOTGCTL |= USB_OTG_GOTGCTL_BVALOEN;
  15262. 8006084: 687b ldr r3, [r7, #4]
  15263. 8006086: 681b ldr r3, [r3, #0]
  15264. 8006088: f043 0240 orr.w r2, r3, #64 ; 0x40
  15265. 800608c: 687b ldr r3, [r7, #4]
  15266. 800608e: 601a str r2, [r3, #0]
  15267. USBx->GOTGCTL |= USB_OTG_GOTGCTL_BVALOVAL;
  15268. 8006090: 687b ldr r3, [r7, #4]
  15269. 8006092: 681b ldr r3, [r3, #0]
  15270. 8006094: f043 0280 orr.w r2, r3, #128 ; 0x80
  15271. 8006098: 687b ldr r3, [r7, #4]
  15272. 800609a: 601a str r2, [r3, #0]
  15273. 800609c: e005 b.n 80060aa <USB_DevInit+0x86>
  15274. }
  15275. else
  15276. {
  15277. /* Enable HW VBUS sensing */
  15278. USBx->GCCFG |= USB_OTG_GCCFG_VBDEN;
  15279. 800609e: 687b ldr r3, [r7, #4]
  15280. 80060a0: 6b9b ldr r3, [r3, #56] ; 0x38
  15281. 80060a2: f443 1200 orr.w r2, r3, #2097152 ; 0x200000
  15282. 80060a6: 687b ldr r3, [r7, #4]
  15283. 80060a8: 639a str r2, [r3, #56] ; 0x38
  15284. }
  15285. /* Restart the Phy Clock */
  15286. USBx_PCGCCTL = 0U;
  15287. 80060aa: 68fb ldr r3, [r7, #12]
  15288. 80060ac: f503 6360 add.w r3, r3, #3584 ; 0xe00
  15289. 80060b0: 461a mov r2, r3
  15290. 80060b2: 2300 movs r3, #0
  15291. 80060b4: 6013 str r3, [r2, #0]
  15292. /* Device mode configuration */
  15293. USBx_DEVICE->DCFG |= DCFG_FRAME_INTERVAL_80;
  15294. 80060b6: 68fb ldr r3, [r7, #12]
  15295. 80060b8: f503 6300 add.w r3, r3, #2048 ; 0x800
  15296. 80060bc: 4619 mov r1, r3
  15297. 80060be: 68fb ldr r3, [r7, #12]
  15298. 80060c0: f503 6300 add.w r3, r3, #2048 ; 0x800
  15299. 80060c4: 461a mov r2, r3
  15300. 80060c6: 680b ldr r3, [r1, #0]
  15301. 80060c8: 6013 str r3, [r2, #0]
  15302. if (cfg.phy_itface == USB_OTG_ULPI_PHY)
  15303. 80060ca: 6bbb ldr r3, [r7, #56] ; 0x38
  15304. 80060cc: 2b01 cmp r3, #1
  15305. 80060ce: d10c bne.n 80060ea <USB_DevInit+0xc6>
  15306. {
  15307. if (cfg.speed == USBD_HS_SPEED)
  15308. 80060d0: 6afb ldr r3, [r7, #44] ; 0x2c
  15309. 80060d2: 2b00 cmp r3, #0
  15310. 80060d4: d104 bne.n 80060e0 <USB_DevInit+0xbc>
  15311. {
  15312. /* Set Core speed to High speed mode */
  15313. (void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH);
  15314. 80060d6: 2100 movs r1, #0
  15315. 80060d8: 6878 ldr r0, [r7, #4]
  15316. 80060da: f000 f961 bl 80063a0 <USB_SetDevSpeed>
  15317. 80060de: e008 b.n 80060f2 <USB_DevInit+0xce>
  15318. }
  15319. else
  15320. {
  15321. /* Set Core speed to Full speed mode */
  15322. (void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH_IN_FULL);
  15323. 80060e0: 2101 movs r1, #1
  15324. 80060e2: 6878 ldr r0, [r7, #4]
  15325. 80060e4: f000 f95c bl 80063a0 <USB_SetDevSpeed>
  15326. 80060e8: e003 b.n 80060f2 <USB_DevInit+0xce>
  15327. }
  15328. }
  15329. else
  15330. {
  15331. /* Set Core speed to Full speed mode */
  15332. (void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_FULL);
  15333. 80060ea: 2103 movs r1, #3
  15334. 80060ec: 6878 ldr r0, [r7, #4]
  15335. 80060ee: f000 f957 bl 80063a0 <USB_SetDevSpeed>
  15336. }
  15337. /* Flush the FIFOs */
  15338. if (USB_FlushTxFifo(USBx, 0x10U) != HAL_OK) /* all Tx FIFOs */
  15339. 80060f2: 2110 movs r1, #16
  15340. 80060f4: 6878 ldr r0, [r7, #4]
  15341. 80060f6: f000 f8f3 bl 80062e0 <USB_FlushTxFifo>
  15342. 80060fa: 4603 mov r3, r0
  15343. 80060fc: 2b00 cmp r3, #0
  15344. 80060fe: d001 beq.n 8006104 <USB_DevInit+0xe0>
  15345. {
  15346. ret = HAL_ERROR;
  15347. 8006100: 2301 movs r3, #1
  15348. 8006102: 75fb strb r3, [r7, #23]
  15349. }
  15350. if (USB_FlushRxFifo(USBx) != HAL_OK)
  15351. 8006104: 6878 ldr r0, [r7, #4]
  15352. 8006106: f000 f91d bl 8006344 <USB_FlushRxFifo>
  15353. 800610a: 4603 mov r3, r0
  15354. 800610c: 2b00 cmp r3, #0
  15355. 800610e: d001 beq.n 8006114 <USB_DevInit+0xf0>
  15356. {
  15357. ret = HAL_ERROR;
  15358. 8006110: 2301 movs r3, #1
  15359. 8006112: 75fb strb r3, [r7, #23]
  15360. }
  15361. /* Clear all pending Device Interrupts */
  15362. USBx_DEVICE->DIEPMSK = 0U;
  15363. 8006114: 68fb ldr r3, [r7, #12]
  15364. 8006116: f503 6300 add.w r3, r3, #2048 ; 0x800
  15365. 800611a: 461a mov r2, r3
  15366. 800611c: 2300 movs r3, #0
  15367. 800611e: 6113 str r3, [r2, #16]
  15368. USBx_DEVICE->DOEPMSK = 0U;
  15369. 8006120: 68fb ldr r3, [r7, #12]
  15370. 8006122: f503 6300 add.w r3, r3, #2048 ; 0x800
  15371. 8006126: 461a mov r2, r3
  15372. 8006128: 2300 movs r3, #0
  15373. 800612a: 6153 str r3, [r2, #20]
  15374. USBx_DEVICE->DAINTMSK = 0U;
  15375. 800612c: 68fb ldr r3, [r7, #12]
  15376. 800612e: f503 6300 add.w r3, r3, #2048 ; 0x800
  15377. 8006132: 461a mov r2, r3
  15378. 8006134: 2300 movs r3, #0
  15379. 8006136: 61d3 str r3, [r2, #28]
  15380. for (i = 0U; i < cfg.dev_endpoints; i++)
  15381. 8006138: 2300 movs r3, #0
  15382. 800613a: 613b str r3, [r7, #16]
  15383. 800613c: e043 b.n 80061c6 <USB_DevInit+0x1a2>
  15384. {
  15385. if ((USBx_INEP(i)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA)
  15386. 800613e: 693b ldr r3, [r7, #16]
  15387. 8006140: 015a lsls r2, r3, #5
  15388. 8006142: 68fb ldr r3, [r7, #12]
  15389. 8006144: 4413 add r3, r2
  15390. 8006146: f503 6310 add.w r3, r3, #2304 ; 0x900
  15391. 800614a: 681b ldr r3, [r3, #0]
  15392. 800614c: f003 4300 and.w r3, r3, #2147483648 ; 0x80000000
  15393. 8006150: f1b3 4f00 cmp.w r3, #2147483648 ; 0x80000000
  15394. 8006154: d118 bne.n 8006188 <USB_DevInit+0x164>
  15395. {
  15396. if (i == 0U)
  15397. 8006156: 693b ldr r3, [r7, #16]
  15398. 8006158: 2b00 cmp r3, #0
  15399. 800615a: d10a bne.n 8006172 <USB_DevInit+0x14e>
  15400. {
  15401. USBx_INEP(i)->DIEPCTL = USB_OTG_DIEPCTL_SNAK;
  15402. 800615c: 693b ldr r3, [r7, #16]
  15403. 800615e: 015a lsls r2, r3, #5
  15404. 8006160: 68fb ldr r3, [r7, #12]
  15405. 8006162: 4413 add r3, r2
  15406. 8006164: f503 6310 add.w r3, r3, #2304 ; 0x900
  15407. 8006168: 461a mov r2, r3
  15408. 800616a: f04f 6300 mov.w r3, #134217728 ; 0x8000000
  15409. 800616e: 6013 str r3, [r2, #0]
  15410. 8006170: e013 b.n 800619a <USB_DevInit+0x176>
  15411. }
  15412. else
  15413. {
  15414. USBx_INEP(i)->DIEPCTL = USB_OTG_DIEPCTL_EPDIS | USB_OTG_DIEPCTL_SNAK;
  15415. 8006172: 693b ldr r3, [r7, #16]
  15416. 8006174: 015a lsls r2, r3, #5
  15417. 8006176: 68fb ldr r3, [r7, #12]
  15418. 8006178: 4413 add r3, r2
  15419. 800617a: f503 6310 add.w r3, r3, #2304 ; 0x900
  15420. 800617e: 461a mov r2, r3
  15421. 8006180: f04f 4390 mov.w r3, #1207959552 ; 0x48000000
  15422. 8006184: 6013 str r3, [r2, #0]
  15423. 8006186: e008 b.n 800619a <USB_DevInit+0x176>
  15424. }
  15425. }
  15426. else
  15427. {
  15428. USBx_INEP(i)->DIEPCTL = 0U;
  15429. 8006188: 693b ldr r3, [r7, #16]
  15430. 800618a: 015a lsls r2, r3, #5
  15431. 800618c: 68fb ldr r3, [r7, #12]
  15432. 800618e: 4413 add r3, r2
  15433. 8006190: f503 6310 add.w r3, r3, #2304 ; 0x900
  15434. 8006194: 461a mov r2, r3
  15435. 8006196: 2300 movs r3, #0
  15436. 8006198: 6013 str r3, [r2, #0]
  15437. }
  15438. USBx_INEP(i)->DIEPTSIZ = 0U;
  15439. 800619a: 693b ldr r3, [r7, #16]
  15440. 800619c: 015a lsls r2, r3, #5
  15441. 800619e: 68fb ldr r3, [r7, #12]
  15442. 80061a0: 4413 add r3, r2
  15443. 80061a2: f503 6310 add.w r3, r3, #2304 ; 0x900
  15444. 80061a6: 461a mov r2, r3
  15445. 80061a8: 2300 movs r3, #0
  15446. 80061aa: 6113 str r3, [r2, #16]
  15447. USBx_INEP(i)->DIEPINT = 0xFB7FU;
  15448. 80061ac: 693b ldr r3, [r7, #16]
  15449. 80061ae: 015a lsls r2, r3, #5
  15450. 80061b0: 68fb ldr r3, [r7, #12]
  15451. 80061b2: 4413 add r3, r2
  15452. 80061b4: f503 6310 add.w r3, r3, #2304 ; 0x900
  15453. 80061b8: 461a mov r2, r3
  15454. 80061ba: f64f 337f movw r3, #64383 ; 0xfb7f
  15455. 80061be: 6093 str r3, [r2, #8]
  15456. for (i = 0U; i < cfg.dev_endpoints; i++)
  15457. 80061c0: 693b ldr r3, [r7, #16]
  15458. 80061c2: 3301 adds r3, #1
  15459. 80061c4: 613b str r3, [r7, #16]
  15460. 80061c6: 6a7b ldr r3, [r7, #36] ; 0x24
  15461. 80061c8: 693a ldr r2, [r7, #16]
  15462. 80061ca: 429a cmp r2, r3
  15463. 80061cc: d3b7 bcc.n 800613e <USB_DevInit+0x11a>
  15464. }
  15465. for (i = 0U; i < cfg.dev_endpoints; i++)
  15466. 80061ce: 2300 movs r3, #0
  15467. 80061d0: 613b str r3, [r7, #16]
  15468. 80061d2: e043 b.n 800625c <USB_DevInit+0x238>
  15469. {
  15470. if ((USBx_OUTEP(i)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA)
  15471. 80061d4: 693b ldr r3, [r7, #16]
  15472. 80061d6: 015a lsls r2, r3, #5
  15473. 80061d8: 68fb ldr r3, [r7, #12]
  15474. 80061da: 4413 add r3, r2
  15475. 80061dc: f503 6330 add.w r3, r3, #2816 ; 0xb00
  15476. 80061e0: 681b ldr r3, [r3, #0]
  15477. 80061e2: f003 4300 and.w r3, r3, #2147483648 ; 0x80000000
  15478. 80061e6: f1b3 4f00 cmp.w r3, #2147483648 ; 0x80000000
  15479. 80061ea: d118 bne.n 800621e <USB_DevInit+0x1fa>
  15480. {
  15481. if (i == 0U)
  15482. 80061ec: 693b ldr r3, [r7, #16]
  15483. 80061ee: 2b00 cmp r3, #0
  15484. 80061f0: d10a bne.n 8006208 <USB_DevInit+0x1e4>
  15485. {
  15486. USBx_OUTEP(i)->DOEPCTL = USB_OTG_DOEPCTL_SNAK;
  15487. 80061f2: 693b ldr r3, [r7, #16]
  15488. 80061f4: 015a lsls r2, r3, #5
  15489. 80061f6: 68fb ldr r3, [r7, #12]
  15490. 80061f8: 4413 add r3, r2
  15491. 80061fa: f503 6330 add.w r3, r3, #2816 ; 0xb00
  15492. 80061fe: 461a mov r2, r3
  15493. 8006200: f04f 6300 mov.w r3, #134217728 ; 0x8000000
  15494. 8006204: 6013 str r3, [r2, #0]
  15495. 8006206: e013 b.n 8006230 <USB_DevInit+0x20c>
  15496. }
  15497. else
  15498. {
  15499. USBx_OUTEP(i)->DOEPCTL = USB_OTG_DOEPCTL_EPDIS | USB_OTG_DOEPCTL_SNAK;
  15500. 8006208: 693b ldr r3, [r7, #16]
  15501. 800620a: 015a lsls r2, r3, #5
  15502. 800620c: 68fb ldr r3, [r7, #12]
  15503. 800620e: 4413 add r3, r2
  15504. 8006210: f503 6330 add.w r3, r3, #2816 ; 0xb00
  15505. 8006214: 461a mov r2, r3
  15506. 8006216: f04f 4390 mov.w r3, #1207959552 ; 0x48000000
  15507. 800621a: 6013 str r3, [r2, #0]
  15508. 800621c: e008 b.n 8006230 <USB_DevInit+0x20c>
  15509. }
  15510. }
  15511. else
  15512. {
  15513. USBx_OUTEP(i)->DOEPCTL = 0U;
  15514. 800621e: 693b ldr r3, [r7, #16]
  15515. 8006220: 015a lsls r2, r3, #5
  15516. 8006222: 68fb ldr r3, [r7, #12]
  15517. 8006224: 4413 add r3, r2
  15518. 8006226: f503 6330 add.w r3, r3, #2816 ; 0xb00
  15519. 800622a: 461a mov r2, r3
  15520. 800622c: 2300 movs r3, #0
  15521. 800622e: 6013 str r3, [r2, #0]
  15522. }
  15523. USBx_OUTEP(i)->DOEPTSIZ = 0U;
  15524. 8006230: 693b ldr r3, [r7, #16]
  15525. 8006232: 015a lsls r2, r3, #5
  15526. 8006234: 68fb ldr r3, [r7, #12]
  15527. 8006236: 4413 add r3, r2
  15528. 8006238: f503 6330 add.w r3, r3, #2816 ; 0xb00
  15529. 800623c: 461a mov r2, r3
  15530. 800623e: 2300 movs r3, #0
  15531. 8006240: 6113 str r3, [r2, #16]
  15532. USBx_OUTEP(i)->DOEPINT = 0xFB7FU;
  15533. 8006242: 693b ldr r3, [r7, #16]
  15534. 8006244: 015a lsls r2, r3, #5
  15535. 8006246: 68fb ldr r3, [r7, #12]
  15536. 8006248: 4413 add r3, r2
  15537. 800624a: f503 6330 add.w r3, r3, #2816 ; 0xb00
  15538. 800624e: 461a mov r2, r3
  15539. 8006250: f64f 337f movw r3, #64383 ; 0xfb7f
  15540. 8006254: 6093 str r3, [r2, #8]
  15541. for (i = 0U; i < cfg.dev_endpoints; i++)
  15542. 8006256: 693b ldr r3, [r7, #16]
  15543. 8006258: 3301 adds r3, #1
  15544. 800625a: 613b str r3, [r7, #16]
  15545. 800625c: 6a7b ldr r3, [r7, #36] ; 0x24
  15546. 800625e: 693a ldr r2, [r7, #16]
  15547. 8006260: 429a cmp r2, r3
  15548. 8006262: d3b7 bcc.n 80061d4 <USB_DevInit+0x1b0>
  15549. }
  15550. USBx_DEVICE->DIEPMSK &= ~(USB_OTG_DIEPMSK_TXFURM);
  15551. 8006264: 68fb ldr r3, [r7, #12]
  15552. 8006266: f503 6300 add.w r3, r3, #2048 ; 0x800
  15553. 800626a: 691b ldr r3, [r3, #16]
  15554. 800626c: 68fa ldr r2, [r7, #12]
  15555. 800626e: f502 6200 add.w r2, r2, #2048 ; 0x800
  15556. 8006272: f423 7380 bic.w r3, r3, #256 ; 0x100
  15557. 8006276: 6113 str r3, [r2, #16]
  15558. /* Disable all interrupts. */
  15559. USBx->GINTMSK = 0U;
  15560. 8006278: 687b ldr r3, [r7, #4]
  15561. 800627a: 2200 movs r2, #0
  15562. 800627c: 619a str r2, [r3, #24]
  15563. /* Clear any pending interrupts */
  15564. USBx->GINTSTS = 0xBFFFFFFFU;
  15565. 800627e: 687b ldr r3, [r7, #4]
  15566. 8006280: f06f 4280 mvn.w r2, #1073741824 ; 0x40000000
  15567. 8006284: 615a str r2, [r3, #20]
  15568. /* Enable the common interrupts */
  15569. if (cfg.dma_enable == 0U)
  15570. 8006286: 6b3b ldr r3, [r7, #48] ; 0x30
  15571. 8006288: 2b00 cmp r3, #0
  15572. 800628a: d105 bne.n 8006298 <USB_DevInit+0x274>
  15573. {
  15574. USBx->GINTMSK |= USB_OTG_GINTMSK_RXFLVLM;
  15575. 800628c: 687b ldr r3, [r7, #4]
  15576. 800628e: 699b ldr r3, [r3, #24]
  15577. 8006290: f043 0210 orr.w r2, r3, #16
  15578. 8006294: 687b ldr r3, [r7, #4]
  15579. 8006296: 619a str r2, [r3, #24]
  15580. }
  15581. /* Enable interrupts matching to the Device mode ONLY */
  15582. USBx->GINTMSK |= USB_OTG_GINTMSK_USBSUSPM | USB_OTG_GINTMSK_USBRST |
  15583. 8006298: 687b ldr r3, [r7, #4]
  15584. 800629a: 699a ldr r2, [r3, #24]
  15585. 800629c: 4b0e ldr r3, [pc, #56] ; (80062d8 <USB_DevInit+0x2b4>)
  15586. 800629e: 4313 orrs r3, r2
  15587. 80062a0: 687a ldr r2, [r7, #4]
  15588. 80062a2: 6193 str r3, [r2, #24]
  15589. USB_OTG_GINTMSK_ENUMDNEM | USB_OTG_GINTMSK_IEPINT |
  15590. USB_OTG_GINTMSK_OEPINT | USB_OTG_GINTMSK_IISOIXFRM |
  15591. USB_OTG_GINTMSK_PXFRM_IISOOXFRM | USB_OTG_GINTMSK_WUIM;
  15592. if (cfg.Sof_enable != 0U)
  15593. 80062a4: 6bfb ldr r3, [r7, #60] ; 0x3c
  15594. 80062a6: 2b00 cmp r3, #0
  15595. 80062a8: d005 beq.n 80062b6 <USB_DevInit+0x292>
  15596. {
  15597. USBx->GINTMSK |= USB_OTG_GINTMSK_SOFM;
  15598. 80062aa: 687b ldr r3, [r7, #4]
  15599. 80062ac: 699b ldr r3, [r3, #24]
  15600. 80062ae: f043 0208 orr.w r2, r3, #8
  15601. 80062b2: 687b ldr r3, [r7, #4]
  15602. 80062b4: 619a str r2, [r3, #24]
  15603. }
  15604. if (cfg.vbus_sensing_enable == 1U)
  15605. 80062b6: 6cfb ldr r3, [r7, #76] ; 0x4c
  15606. 80062b8: 2b01 cmp r3, #1
  15607. 80062ba: d105 bne.n 80062c8 <USB_DevInit+0x2a4>
  15608. {
  15609. USBx->GINTMSK |= (USB_OTG_GINTMSK_SRQIM | USB_OTG_GINTMSK_OTGINT);
  15610. 80062bc: 687b ldr r3, [r7, #4]
  15611. 80062be: 699a ldr r2, [r3, #24]
  15612. 80062c0: 4b06 ldr r3, [pc, #24] ; (80062dc <USB_DevInit+0x2b8>)
  15613. 80062c2: 4313 orrs r3, r2
  15614. 80062c4: 687a ldr r2, [r7, #4]
  15615. 80062c6: 6193 str r3, [r2, #24]
  15616. }
  15617. return ret;
  15618. 80062c8: 7dfb ldrb r3, [r7, #23]
  15619. }
  15620. 80062ca: 4618 mov r0, r3
  15621. 80062cc: 3718 adds r7, #24
  15622. 80062ce: 46bd mov sp, r7
  15623. 80062d0: e8bd 4080 ldmia.w sp!, {r7, lr}
  15624. 80062d4: b004 add sp, #16
  15625. 80062d6: 4770 bx lr
  15626. 80062d8: 803c3800 .word 0x803c3800
  15627. 80062dc: 40000004 .word 0x40000004
  15628. 080062e0 <USB_FlushTxFifo>:
  15629. * This parameter can be a value from 1 to 15
  15630. 15 means Flush all Tx FIFOs
  15631. * @retval HAL status
  15632. */
  15633. HAL_StatusTypeDef USB_FlushTxFifo(USB_OTG_GlobalTypeDef *USBx, uint32_t num)
  15634. {
  15635. 80062e0: b480 push {r7}
  15636. 80062e2: b085 sub sp, #20
  15637. 80062e4: af00 add r7, sp, #0
  15638. 80062e6: 6078 str r0, [r7, #4]
  15639. 80062e8: 6039 str r1, [r7, #0]
  15640. __IO uint32_t count = 0U;
  15641. 80062ea: 2300 movs r3, #0
  15642. 80062ec: 60fb str r3, [r7, #12]
  15643. /* Wait for AHB master IDLE state. */
  15644. do
  15645. {
  15646. if (++count > 200000U)
  15647. 80062ee: 68fb ldr r3, [r7, #12]
  15648. 80062f0: 3301 adds r3, #1
  15649. 80062f2: 60fb str r3, [r7, #12]
  15650. 80062f4: 4a12 ldr r2, [pc, #72] ; (8006340 <USB_FlushTxFifo+0x60>)
  15651. 80062f6: 4293 cmp r3, r2
  15652. 80062f8: d901 bls.n 80062fe <USB_FlushTxFifo+0x1e>
  15653. {
  15654. return HAL_TIMEOUT;
  15655. 80062fa: 2303 movs r3, #3
  15656. 80062fc: e01a b.n 8006334 <USB_FlushTxFifo+0x54>
  15657. }
  15658. } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_AHBIDL) == 0U);
  15659. 80062fe: 687b ldr r3, [r7, #4]
  15660. 8006300: 691b ldr r3, [r3, #16]
  15661. 8006302: 2b00 cmp r3, #0
  15662. 8006304: daf3 bge.n 80062ee <USB_FlushTxFifo+0xe>
  15663. /* Flush TX Fifo */
  15664. count = 0U;
  15665. 8006306: 2300 movs r3, #0
  15666. 8006308: 60fb str r3, [r7, #12]
  15667. USBx->GRSTCTL = (USB_OTG_GRSTCTL_TXFFLSH | (num << 6));
  15668. 800630a: 683b ldr r3, [r7, #0]
  15669. 800630c: 019b lsls r3, r3, #6
  15670. 800630e: f043 0220 orr.w r2, r3, #32
  15671. 8006312: 687b ldr r3, [r7, #4]
  15672. 8006314: 611a str r2, [r3, #16]
  15673. do
  15674. {
  15675. if (++count > 200000U)
  15676. 8006316: 68fb ldr r3, [r7, #12]
  15677. 8006318: 3301 adds r3, #1
  15678. 800631a: 60fb str r3, [r7, #12]
  15679. 800631c: 4a08 ldr r2, [pc, #32] ; (8006340 <USB_FlushTxFifo+0x60>)
  15680. 800631e: 4293 cmp r3, r2
  15681. 8006320: d901 bls.n 8006326 <USB_FlushTxFifo+0x46>
  15682. {
  15683. return HAL_TIMEOUT;
  15684. 8006322: 2303 movs r3, #3
  15685. 8006324: e006 b.n 8006334 <USB_FlushTxFifo+0x54>
  15686. }
  15687. } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_TXFFLSH) == USB_OTG_GRSTCTL_TXFFLSH);
  15688. 8006326: 687b ldr r3, [r7, #4]
  15689. 8006328: 691b ldr r3, [r3, #16]
  15690. 800632a: f003 0320 and.w r3, r3, #32
  15691. 800632e: 2b20 cmp r3, #32
  15692. 8006330: d0f1 beq.n 8006316 <USB_FlushTxFifo+0x36>
  15693. return HAL_OK;
  15694. 8006332: 2300 movs r3, #0
  15695. }
  15696. 8006334: 4618 mov r0, r3
  15697. 8006336: 3714 adds r7, #20
  15698. 8006338: 46bd mov sp, r7
  15699. 800633a: f85d 7b04 ldr.w r7, [sp], #4
  15700. 800633e: 4770 bx lr
  15701. 8006340: 00030d40 .word 0x00030d40
  15702. 08006344 <USB_FlushRxFifo>:
  15703. * @brief USB_FlushRxFifo Flush Rx FIFO
  15704. * @param USBx Selected device
  15705. * @retval HAL status
  15706. */
  15707. HAL_StatusTypeDef USB_FlushRxFifo(USB_OTG_GlobalTypeDef *USBx)
  15708. {
  15709. 8006344: b480 push {r7}
  15710. 8006346: b085 sub sp, #20
  15711. 8006348: af00 add r7, sp, #0
  15712. 800634a: 6078 str r0, [r7, #4]
  15713. __IO uint32_t count = 0U;
  15714. 800634c: 2300 movs r3, #0
  15715. 800634e: 60fb str r3, [r7, #12]
  15716. /* Wait for AHB master IDLE state. */
  15717. do
  15718. {
  15719. if (++count > 200000U)
  15720. 8006350: 68fb ldr r3, [r7, #12]
  15721. 8006352: 3301 adds r3, #1
  15722. 8006354: 60fb str r3, [r7, #12]
  15723. 8006356: 4a11 ldr r2, [pc, #68] ; (800639c <USB_FlushRxFifo+0x58>)
  15724. 8006358: 4293 cmp r3, r2
  15725. 800635a: d901 bls.n 8006360 <USB_FlushRxFifo+0x1c>
  15726. {
  15727. return HAL_TIMEOUT;
  15728. 800635c: 2303 movs r3, #3
  15729. 800635e: e017 b.n 8006390 <USB_FlushRxFifo+0x4c>
  15730. }
  15731. } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_AHBIDL) == 0U);
  15732. 8006360: 687b ldr r3, [r7, #4]
  15733. 8006362: 691b ldr r3, [r3, #16]
  15734. 8006364: 2b00 cmp r3, #0
  15735. 8006366: daf3 bge.n 8006350 <USB_FlushRxFifo+0xc>
  15736. /* Flush RX Fifo */
  15737. count = 0U;
  15738. 8006368: 2300 movs r3, #0
  15739. 800636a: 60fb str r3, [r7, #12]
  15740. USBx->GRSTCTL = USB_OTG_GRSTCTL_RXFFLSH;
  15741. 800636c: 687b ldr r3, [r7, #4]
  15742. 800636e: 2210 movs r2, #16
  15743. 8006370: 611a str r2, [r3, #16]
  15744. do
  15745. {
  15746. if (++count > 200000U)
  15747. 8006372: 68fb ldr r3, [r7, #12]
  15748. 8006374: 3301 adds r3, #1
  15749. 8006376: 60fb str r3, [r7, #12]
  15750. 8006378: 4a08 ldr r2, [pc, #32] ; (800639c <USB_FlushRxFifo+0x58>)
  15751. 800637a: 4293 cmp r3, r2
  15752. 800637c: d901 bls.n 8006382 <USB_FlushRxFifo+0x3e>
  15753. {
  15754. return HAL_TIMEOUT;
  15755. 800637e: 2303 movs r3, #3
  15756. 8006380: e006 b.n 8006390 <USB_FlushRxFifo+0x4c>
  15757. }
  15758. } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_RXFFLSH) == USB_OTG_GRSTCTL_RXFFLSH);
  15759. 8006382: 687b ldr r3, [r7, #4]
  15760. 8006384: 691b ldr r3, [r3, #16]
  15761. 8006386: f003 0310 and.w r3, r3, #16
  15762. 800638a: 2b10 cmp r3, #16
  15763. 800638c: d0f1 beq.n 8006372 <USB_FlushRxFifo+0x2e>
  15764. return HAL_OK;
  15765. 800638e: 2300 movs r3, #0
  15766. }
  15767. 8006390: 4618 mov r0, r3
  15768. 8006392: 3714 adds r7, #20
  15769. 8006394: 46bd mov sp, r7
  15770. 8006396: f85d 7b04 ldr.w r7, [sp], #4
  15771. 800639a: 4770 bx lr
  15772. 800639c: 00030d40 .word 0x00030d40
  15773. 080063a0 <USB_SetDevSpeed>:
  15774. * @arg USB_OTG_SPEED_HIGH_IN_FULL: High speed core in Full Speed mode
  15775. * @arg USB_OTG_SPEED_FULL: Full speed mode
  15776. * @retval Hal status
  15777. */
  15778. HAL_StatusTypeDef USB_SetDevSpeed(USB_OTG_GlobalTypeDef *USBx, uint8_t speed)
  15779. {
  15780. 80063a0: b480 push {r7}
  15781. 80063a2: b085 sub sp, #20
  15782. 80063a4: af00 add r7, sp, #0
  15783. 80063a6: 6078 str r0, [r7, #4]
  15784. 80063a8: 460b mov r3, r1
  15785. 80063aa: 70fb strb r3, [r7, #3]
  15786. uint32_t USBx_BASE = (uint32_t)USBx;
  15787. 80063ac: 687b ldr r3, [r7, #4]
  15788. 80063ae: 60fb str r3, [r7, #12]
  15789. USBx_DEVICE->DCFG |= speed;
  15790. 80063b0: 68fb ldr r3, [r7, #12]
  15791. 80063b2: f503 6300 add.w r3, r3, #2048 ; 0x800
  15792. 80063b6: 681a ldr r2, [r3, #0]
  15793. 80063b8: 78fb ldrb r3, [r7, #3]
  15794. 80063ba: 68f9 ldr r1, [r7, #12]
  15795. 80063bc: f501 6100 add.w r1, r1, #2048 ; 0x800
  15796. 80063c0: 4313 orrs r3, r2
  15797. 80063c2: 600b str r3, [r1, #0]
  15798. return HAL_OK;
  15799. 80063c4: 2300 movs r3, #0
  15800. }
  15801. 80063c6: 4618 mov r0, r3
  15802. 80063c8: 3714 adds r7, #20
  15803. 80063ca: 46bd mov sp, r7
  15804. 80063cc: f85d 7b04 ldr.w r7, [sp], #4
  15805. 80063d0: 4770 bx lr
  15806. 080063d2 <USB_GetDevSpeed>:
  15807. * This parameter can be one of these values:
  15808. * @arg USBD_HS_SPEED: High speed mode
  15809. * @arg USBD_FS_SPEED: Full speed mode
  15810. */
  15811. uint8_t USB_GetDevSpeed(USB_OTG_GlobalTypeDef *USBx)
  15812. {
  15813. 80063d2: b480 push {r7}
  15814. 80063d4: b087 sub sp, #28
  15815. 80063d6: af00 add r7, sp, #0
  15816. 80063d8: 6078 str r0, [r7, #4]
  15817. uint32_t USBx_BASE = (uint32_t)USBx;
  15818. 80063da: 687b ldr r3, [r7, #4]
  15819. 80063dc: 613b str r3, [r7, #16]
  15820. uint8_t speed;
  15821. uint32_t DevEnumSpeed = USBx_DEVICE->DSTS & USB_OTG_DSTS_ENUMSPD;
  15822. 80063de: 693b ldr r3, [r7, #16]
  15823. 80063e0: f503 6300 add.w r3, r3, #2048 ; 0x800
  15824. 80063e4: 689b ldr r3, [r3, #8]
  15825. 80063e6: f003 0306 and.w r3, r3, #6
  15826. 80063ea: 60fb str r3, [r7, #12]
  15827. if (DevEnumSpeed == DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ)
  15828. 80063ec: 68fb ldr r3, [r7, #12]
  15829. 80063ee: 2b00 cmp r3, #0
  15830. 80063f0: d102 bne.n 80063f8 <USB_GetDevSpeed+0x26>
  15831. {
  15832. speed = USBD_HS_SPEED;
  15833. 80063f2: 2300 movs r3, #0
  15834. 80063f4: 75fb strb r3, [r7, #23]
  15835. 80063f6: e00a b.n 800640e <USB_GetDevSpeed+0x3c>
  15836. }
  15837. else if ((DevEnumSpeed == DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ) ||
  15838. 80063f8: 68fb ldr r3, [r7, #12]
  15839. 80063fa: 2b02 cmp r3, #2
  15840. 80063fc: d002 beq.n 8006404 <USB_GetDevSpeed+0x32>
  15841. 80063fe: 68fb ldr r3, [r7, #12]
  15842. 8006400: 2b06 cmp r3, #6
  15843. 8006402: d102 bne.n 800640a <USB_GetDevSpeed+0x38>
  15844. (DevEnumSpeed == DSTS_ENUMSPD_FS_PHY_48MHZ))
  15845. {
  15846. speed = USBD_FS_SPEED;
  15847. 8006404: 2302 movs r3, #2
  15848. 8006406: 75fb strb r3, [r7, #23]
  15849. 8006408: e001 b.n 800640e <USB_GetDevSpeed+0x3c>
  15850. }
  15851. else
  15852. {
  15853. speed = 0xFU;
  15854. 800640a: 230f movs r3, #15
  15855. 800640c: 75fb strb r3, [r7, #23]
  15856. }
  15857. return speed;
  15858. 800640e: 7dfb ldrb r3, [r7, #23]
  15859. }
  15860. 8006410: 4618 mov r0, r3
  15861. 8006412: 371c adds r7, #28
  15862. 8006414: 46bd mov sp, r7
  15863. 8006416: f85d 7b04 ldr.w r7, [sp], #4
  15864. 800641a: 4770 bx lr
  15865. 0800641c <USB_ActivateEndpoint>:
  15866. * @param USBx Selected device
  15867. * @param ep pointer to endpoint structure
  15868. * @retval HAL status
  15869. */
  15870. HAL_StatusTypeDef USB_ActivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep)
  15871. {
  15872. 800641c: b480 push {r7}
  15873. 800641e: b085 sub sp, #20
  15874. 8006420: af00 add r7, sp, #0
  15875. 8006422: 6078 str r0, [r7, #4]
  15876. 8006424: 6039 str r1, [r7, #0]
  15877. uint32_t USBx_BASE = (uint32_t)USBx;
  15878. 8006426: 687b ldr r3, [r7, #4]
  15879. 8006428: 60fb str r3, [r7, #12]
  15880. uint32_t epnum = (uint32_t)ep->num;
  15881. 800642a: 683b ldr r3, [r7, #0]
  15882. 800642c: 781b ldrb r3, [r3, #0]
  15883. 800642e: 60bb str r3, [r7, #8]
  15884. if (ep->is_in == 1U)
  15885. 8006430: 683b ldr r3, [r7, #0]
  15886. 8006432: 785b ldrb r3, [r3, #1]
  15887. 8006434: 2b01 cmp r3, #1
  15888. 8006436: d139 bne.n 80064ac <USB_ActivateEndpoint+0x90>
  15889. {
  15890. USBx_DEVICE->DAINTMSK |= USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK));
  15891. 8006438: 68fb ldr r3, [r7, #12]
  15892. 800643a: f503 6300 add.w r3, r3, #2048 ; 0x800
  15893. 800643e: 69da ldr r2, [r3, #28]
  15894. 8006440: 683b ldr r3, [r7, #0]
  15895. 8006442: 781b ldrb r3, [r3, #0]
  15896. 8006444: f003 030f and.w r3, r3, #15
  15897. 8006448: 2101 movs r1, #1
  15898. 800644a: fa01 f303 lsl.w r3, r1, r3
  15899. 800644e: b29b uxth r3, r3
  15900. 8006450: 68f9 ldr r1, [r7, #12]
  15901. 8006452: f501 6100 add.w r1, r1, #2048 ; 0x800
  15902. 8006456: 4313 orrs r3, r2
  15903. 8006458: 61cb str r3, [r1, #28]
  15904. if ((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_USBAEP) == 0U)
  15905. 800645a: 68bb ldr r3, [r7, #8]
  15906. 800645c: 015a lsls r2, r3, #5
  15907. 800645e: 68fb ldr r3, [r7, #12]
  15908. 8006460: 4413 add r3, r2
  15909. 8006462: f503 6310 add.w r3, r3, #2304 ; 0x900
  15910. 8006466: 681b ldr r3, [r3, #0]
  15911. 8006468: f403 4300 and.w r3, r3, #32768 ; 0x8000
  15912. 800646c: 2b00 cmp r3, #0
  15913. 800646e: d153 bne.n 8006518 <USB_ActivateEndpoint+0xfc>
  15914. {
  15915. USBx_INEP(epnum)->DIEPCTL |= (ep->maxpacket & USB_OTG_DIEPCTL_MPSIZ) |
  15916. 8006470: 68bb ldr r3, [r7, #8]
  15917. 8006472: 015a lsls r2, r3, #5
  15918. 8006474: 68fb ldr r3, [r7, #12]
  15919. 8006476: 4413 add r3, r2
  15920. 8006478: f503 6310 add.w r3, r3, #2304 ; 0x900
  15921. 800647c: 681a ldr r2, [r3, #0]
  15922. 800647e: 683b ldr r3, [r7, #0]
  15923. 8006480: 689b ldr r3, [r3, #8]
  15924. 8006482: f3c3 010a ubfx r1, r3, #0, #11
  15925. ((uint32_t)ep->type << 18) | (epnum << 22) |
  15926. 8006486: 683b ldr r3, [r7, #0]
  15927. 8006488: 78db ldrb r3, [r3, #3]
  15928. 800648a: 049b lsls r3, r3, #18
  15929. USBx_INEP(epnum)->DIEPCTL |= (ep->maxpacket & USB_OTG_DIEPCTL_MPSIZ) |
  15930. 800648c: 4319 orrs r1, r3
  15931. ((uint32_t)ep->type << 18) | (epnum << 22) |
  15932. 800648e: 68bb ldr r3, [r7, #8]
  15933. 8006490: 059b lsls r3, r3, #22
  15934. 8006492: 430b orrs r3, r1
  15935. USBx_INEP(epnum)->DIEPCTL |= (ep->maxpacket & USB_OTG_DIEPCTL_MPSIZ) |
  15936. 8006494: 431a orrs r2, r3
  15937. 8006496: 68bb ldr r3, [r7, #8]
  15938. 8006498: 0159 lsls r1, r3, #5
  15939. 800649a: 68fb ldr r3, [r7, #12]
  15940. 800649c: 440b add r3, r1
  15941. 800649e: f503 6310 add.w r3, r3, #2304 ; 0x900
  15942. 80064a2: 4619 mov r1, r3
  15943. 80064a4: 4b20 ldr r3, [pc, #128] ; (8006528 <USB_ActivateEndpoint+0x10c>)
  15944. 80064a6: 4313 orrs r3, r2
  15945. 80064a8: 600b str r3, [r1, #0]
  15946. 80064aa: e035 b.n 8006518 <USB_ActivateEndpoint+0xfc>
  15947. USB_OTG_DIEPCTL_USBAEP;
  15948. }
  15949. }
  15950. else
  15951. {
  15952. USBx_DEVICE->DAINTMSK |= USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16);
  15953. 80064ac: 68fb ldr r3, [r7, #12]
  15954. 80064ae: f503 6300 add.w r3, r3, #2048 ; 0x800
  15955. 80064b2: 69da ldr r2, [r3, #28]
  15956. 80064b4: 683b ldr r3, [r7, #0]
  15957. 80064b6: 781b ldrb r3, [r3, #0]
  15958. 80064b8: f003 030f and.w r3, r3, #15
  15959. 80064bc: 2101 movs r1, #1
  15960. 80064be: fa01 f303 lsl.w r3, r1, r3
  15961. 80064c2: 041b lsls r3, r3, #16
  15962. 80064c4: 68f9 ldr r1, [r7, #12]
  15963. 80064c6: f501 6100 add.w r1, r1, #2048 ; 0x800
  15964. 80064ca: 4313 orrs r3, r2
  15965. 80064cc: 61cb str r3, [r1, #28]
  15966. if (((USBx_OUTEP(epnum)->DOEPCTL) & USB_OTG_DOEPCTL_USBAEP) == 0U)
  15967. 80064ce: 68bb ldr r3, [r7, #8]
  15968. 80064d0: 015a lsls r2, r3, #5
  15969. 80064d2: 68fb ldr r3, [r7, #12]
  15970. 80064d4: 4413 add r3, r2
  15971. 80064d6: f503 6330 add.w r3, r3, #2816 ; 0xb00
  15972. 80064da: 681b ldr r3, [r3, #0]
  15973. 80064dc: f403 4300 and.w r3, r3, #32768 ; 0x8000
  15974. 80064e0: 2b00 cmp r3, #0
  15975. 80064e2: d119 bne.n 8006518 <USB_ActivateEndpoint+0xfc>
  15976. {
  15977. USBx_OUTEP(epnum)->DOEPCTL |= (ep->maxpacket & USB_OTG_DOEPCTL_MPSIZ) |
  15978. 80064e4: 68bb ldr r3, [r7, #8]
  15979. 80064e6: 015a lsls r2, r3, #5
  15980. 80064e8: 68fb ldr r3, [r7, #12]
  15981. 80064ea: 4413 add r3, r2
  15982. 80064ec: f503 6330 add.w r3, r3, #2816 ; 0xb00
  15983. 80064f0: 681a ldr r2, [r3, #0]
  15984. 80064f2: 683b ldr r3, [r7, #0]
  15985. 80064f4: 689b ldr r3, [r3, #8]
  15986. 80064f6: f3c3 010a ubfx r1, r3, #0, #11
  15987. ((uint32_t)ep->type << 18) |
  15988. 80064fa: 683b ldr r3, [r7, #0]
  15989. 80064fc: 78db ldrb r3, [r3, #3]
  15990. 80064fe: 049b lsls r3, r3, #18
  15991. USBx_OUTEP(epnum)->DOEPCTL |= (ep->maxpacket & USB_OTG_DOEPCTL_MPSIZ) |
  15992. 8006500: 430b orrs r3, r1
  15993. 8006502: 431a orrs r2, r3
  15994. 8006504: 68bb ldr r3, [r7, #8]
  15995. 8006506: 0159 lsls r1, r3, #5
  15996. 8006508: 68fb ldr r3, [r7, #12]
  15997. 800650a: 440b add r3, r1
  15998. 800650c: f503 6330 add.w r3, r3, #2816 ; 0xb00
  15999. 8006510: 4619 mov r1, r3
  16000. 8006512: 4b05 ldr r3, [pc, #20] ; (8006528 <USB_ActivateEndpoint+0x10c>)
  16001. 8006514: 4313 orrs r3, r2
  16002. 8006516: 600b str r3, [r1, #0]
  16003. USB_OTG_DIEPCTL_SD0PID_SEVNFRM |
  16004. USB_OTG_DOEPCTL_USBAEP;
  16005. }
  16006. }
  16007. return HAL_OK;
  16008. 8006518: 2300 movs r3, #0
  16009. }
  16010. 800651a: 4618 mov r0, r3
  16011. 800651c: 3714 adds r7, #20
  16012. 800651e: 46bd mov sp, r7
  16013. 8006520: f85d 7b04 ldr.w r7, [sp], #4
  16014. 8006524: 4770 bx lr
  16015. 8006526: bf00 nop
  16016. 8006528: 10008000 .word 0x10008000
  16017. 0800652c <USB_DeactivateEndpoint>:
  16018. * @param USBx Selected device
  16019. * @param ep pointer to endpoint structure
  16020. * @retval HAL status
  16021. */
  16022. HAL_StatusTypeDef USB_DeactivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep)
  16023. {
  16024. 800652c: b480 push {r7}
  16025. 800652e: b085 sub sp, #20
  16026. 8006530: af00 add r7, sp, #0
  16027. 8006532: 6078 str r0, [r7, #4]
  16028. 8006534: 6039 str r1, [r7, #0]
  16029. uint32_t USBx_BASE = (uint32_t)USBx;
  16030. 8006536: 687b ldr r3, [r7, #4]
  16031. 8006538: 60fb str r3, [r7, #12]
  16032. uint32_t epnum = (uint32_t)ep->num;
  16033. 800653a: 683b ldr r3, [r7, #0]
  16034. 800653c: 781b ldrb r3, [r3, #0]
  16035. 800653e: 60bb str r3, [r7, #8]
  16036. /* Read DEPCTLn register */
  16037. if (ep->is_in == 1U)
  16038. 8006540: 683b ldr r3, [r7, #0]
  16039. 8006542: 785b ldrb r3, [r3, #1]
  16040. 8006544: 2b01 cmp r3, #1
  16041. 8006546: d161 bne.n 800660c <USB_DeactivateEndpoint+0xe0>
  16042. {
  16043. if ((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA)
  16044. 8006548: 68bb ldr r3, [r7, #8]
  16045. 800654a: 015a lsls r2, r3, #5
  16046. 800654c: 68fb ldr r3, [r7, #12]
  16047. 800654e: 4413 add r3, r2
  16048. 8006550: f503 6310 add.w r3, r3, #2304 ; 0x900
  16049. 8006554: 681b ldr r3, [r3, #0]
  16050. 8006556: f003 4300 and.w r3, r3, #2147483648 ; 0x80000000
  16051. 800655a: f1b3 4f00 cmp.w r3, #2147483648 ; 0x80000000
  16052. 800655e: d11f bne.n 80065a0 <USB_DeactivateEndpoint+0x74>
  16053. {
  16054. USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK;
  16055. 8006560: 68bb ldr r3, [r7, #8]
  16056. 8006562: 015a lsls r2, r3, #5
  16057. 8006564: 68fb ldr r3, [r7, #12]
  16058. 8006566: 4413 add r3, r2
  16059. 8006568: f503 6310 add.w r3, r3, #2304 ; 0x900
  16060. 800656c: 681b ldr r3, [r3, #0]
  16061. 800656e: 68ba ldr r2, [r7, #8]
  16062. 8006570: 0151 lsls r1, r2, #5
  16063. 8006572: 68fa ldr r2, [r7, #12]
  16064. 8006574: 440a add r2, r1
  16065. 8006576: f502 6210 add.w r2, r2, #2304 ; 0x900
  16066. 800657a: f043 6300 orr.w r3, r3, #134217728 ; 0x8000000
  16067. 800657e: 6013 str r3, [r2, #0]
  16068. USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_EPDIS;
  16069. 8006580: 68bb ldr r3, [r7, #8]
  16070. 8006582: 015a lsls r2, r3, #5
  16071. 8006584: 68fb ldr r3, [r7, #12]
  16072. 8006586: 4413 add r3, r2
  16073. 8006588: f503 6310 add.w r3, r3, #2304 ; 0x900
  16074. 800658c: 681b ldr r3, [r3, #0]
  16075. 800658e: 68ba ldr r2, [r7, #8]
  16076. 8006590: 0151 lsls r1, r2, #5
  16077. 8006592: 68fa ldr r2, [r7, #12]
  16078. 8006594: 440a add r2, r1
  16079. 8006596: f502 6210 add.w r2, r2, #2304 ; 0x900
  16080. 800659a: f043 4380 orr.w r3, r3, #1073741824 ; 0x40000000
  16081. 800659e: 6013 str r3, [r2, #0]
  16082. }
  16083. USBx_DEVICE->DEACHMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)));
  16084. 80065a0: 68fb ldr r3, [r7, #12]
  16085. 80065a2: f503 6300 add.w r3, r3, #2048 ; 0x800
  16086. 80065a6: 6bda ldr r2, [r3, #60] ; 0x3c
  16087. 80065a8: 683b ldr r3, [r7, #0]
  16088. 80065aa: 781b ldrb r3, [r3, #0]
  16089. 80065ac: f003 030f and.w r3, r3, #15
  16090. 80065b0: 2101 movs r1, #1
  16091. 80065b2: fa01 f303 lsl.w r3, r1, r3
  16092. 80065b6: b29b uxth r3, r3
  16093. 80065b8: 43db mvns r3, r3
  16094. 80065ba: 68f9 ldr r1, [r7, #12]
  16095. 80065bc: f501 6100 add.w r1, r1, #2048 ; 0x800
  16096. 80065c0: 4013 ands r3, r2
  16097. 80065c2: 63cb str r3, [r1, #60] ; 0x3c
  16098. USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)));
  16099. 80065c4: 68fb ldr r3, [r7, #12]
  16100. 80065c6: f503 6300 add.w r3, r3, #2048 ; 0x800
  16101. 80065ca: 69da ldr r2, [r3, #28]
  16102. 80065cc: 683b ldr r3, [r7, #0]
  16103. 80065ce: 781b ldrb r3, [r3, #0]
  16104. 80065d0: f003 030f and.w r3, r3, #15
  16105. 80065d4: 2101 movs r1, #1
  16106. 80065d6: fa01 f303 lsl.w r3, r1, r3
  16107. 80065da: b29b uxth r3, r3
  16108. 80065dc: 43db mvns r3, r3
  16109. 80065de: 68f9 ldr r1, [r7, #12]
  16110. 80065e0: f501 6100 add.w r1, r1, #2048 ; 0x800
  16111. 80065e4: 4013 ands r3, r2
  16112. 80065e6: 61cb str r3, [r1, #28]
  16113. USBx_INEP(epnum)->DIEPCTL &= ~(USB_OTG_DIEPCTL_USBAEP |
  16114. 80065e8: 68bb ldr r3, [r7, #8]
  16115. 80065ea: 015a lsls r2, r3, #5
  16116. 80065ec: 68fb ldr r3, [r7, #12]
  16117. 80065ee: 4413 add r3, r2
  16118. 80065f0: f503 6310 add.w r3, r3, #2304 ; 0x900
  16119. 80065f4: 681a ldr r2, [r3, #0]
  16120. 80065f6: 68bb ldr r3, [r7, #8]
  16121. 80065f8: 0159 lsls r1, r3, #5
  16122. 80065fa: 68fb ldr r3, [r7, #12]
  16123. 80065fc: 440b add r3, r1
  16124. 80065fe: f503 6310 add.w r3, r3, #2304 ; 0x900
  16125. 8006602: 4619 mov r1, r3
  16126. 8006604: 4b35 ldr r3, [pc, #212] ; (80066dc <USB_DeactivateEndpoint+0x1b0>)
  16127. 8006606: 4013 ands r3, r2
  16128. 8006608: 600b str r3, [r1, #0]
  16129. 800660a: e060 b.n 80066ce <USB_DeactivateEndpoint+0x1a2>
  16130. USB_OTG_DIEPCTL_SD0PID_SEVNFRM |
  16131. USB_OTG_DIEPCTL_EPTYP);
  16132. }
  16133. else
  16134. {
  16135. if ((USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA)
  16136. 800660c: 68bb ldr r3, [r7, #8]
  16137. 800660e: 015a lsls r2, r3, #5
  16138. 8006610: 68fb ldr r3, [r7, #12]
  16139. 8006612: 4413 add r3, r2
  16140. 8006614: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16141. 8006618: 681b ldr r3, [r3, #0]
  16142. 800661a: f003 4300 and.w r3, r3, #2147483648 ; 0x80000000
  16143. 800661e: f1b3 4f00 cmp.w r3, #2147483648 ; 0x80000000
  16144. 8006622: d11f bne.n 8006664 <USB_DeactivateEndpoint+0x138>
  16145. {
  16146. USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
  16147. 8006624: 68bb ldr r3, [r7, #8]
  16148. 8006626: 015a lsls r2, r3, #5
  16149. 8006628: 68fb ldr r3, [r7, #12]
  16150. 800662a: 4413 add r3, r2
  16151. 800662c: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16152. 8006630: 681b ldr r3, [r3, #0]
  16153. 8006632: 68ba ldr r2, [r7, #8]
  16154. 8006634: 0151 lsls r1, r2, #5
  16155. 8006636: 68fa ldr r2, [r7, #12]
  16156. 8006638: 440a add r2, r1
  16157. 800663a: f502 6230 add.w r2, r2, #2816 ; 0xb00
  16158. 800663e: f043 6300 orr.w r3, r3, #134217728 ; 0x8000000
  16159. 8006642: 6013 str r3, [r2, #0]
  16160. USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_EPDIS;
  16161. 8006644: 68bb ldr r3, [r7, #8]
  16162. 8006646: 015a lsls r2, r3, #5
  16163. 8006648: 68fb ldr r3, [r7, #12]
  16164. 800664a: 4413 add r3, r2
  16165. 800664c: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16166. 8006650: 681b ldr r3, [r3, #0]
  16167. 8006652: 68ba ldr r2, [r7, #8]
  16168. 8006654: 0151 lsls r1, r2, #5
  16169. 8006656: 68fa ldr r2, [r7, #12]
  16170. 8006658: 440a add r2, r1
  16171. 800665a: f502 6230 add.w r2, r2, #2816 ; 0xb00
  16172. 800665e: f043 4380 orr.w r3, r3, #1073741824 ; 0x40000000
  16173. 8006662: 6013 str r3, [r2, #0]
  16174. }
  16175. USBx_DEVICE->DEACHMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16));
  16176. 8006664: 68fb ldr r3, [r7, #12]
  16177. 8006666: f503 6300 add.w r3, r3, #2048 ; 0x800
  16178. 800666a: 6bda ldr r2, [r3, #60] ; 0x3c
  16179. 800666c: 683b ldr r3, [r7, #0]
  16180. 800666e: 781b ldrb r3, [r3, #0]
  16181. 8006670: f003 030f and.w r3, r3, #15
  16182. 8006674: 2101 movs r1, #1
  16183. 8006676: fa01 f303 lsl.w r3, r1, r3
  16184. 800667a: 041b lsls r3, r3, #16
  16185. 800667c: 43db mvns r3, r3
  16186. 800667e: 68f9 ldr r1, [r7, #12]
  16187. 8006680: f501 6100 add.w r1, r1, #2048 ; 0x800
  16188. 8006684: 4013 ands r3, r2
  16189. 8006686: 63cb str r3, [r1, #60] ; 0x3c
  16190. USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16));
  16191. 8006688: 68fb ldr r3, [r7, #12]
  16192. 800668a: f503 6300 add.w r3, r3, #2048 ; 0x800
  16193. 800668e: 69da ldr r2, [r3, #28]
  16194. 8006690: 683b ldr r3, [r7, #0]
  16195. 8006692: 781b ldrb r3, [r3, #0]
  16196. 8006694: f003 030f and.w r3, r3, #15
  16197. 8006698: 2101 movs r1, #1
  16198. 800669a: fa01 f303 lsl.w r3, r1, r3
  16199. 800669e: 041b lsls r3, r3, #16
  16200. 80066a0: 43db mvns r3, r3
  16201. 80066a2: 68f9 ldr r1, [r7, #12]
  16202. 80066a4: f501 6100 add.w r1, r1, #2048 ; 0x800
  16203. 80066a8: 4013 ands r3, r2
  16204. 80066aa: 61cb str r3, [r1, #28]
  16205. USBx_OUTEP(epnum)->DOEPCTL &= ~(USB_OTG_DOEPCTL_USBAEP |
  16206. 80066ac: 68bb ldr r3, [r7, #8]
  16207. 80066ae: 015a lsls r2, r3, #5
  16208. 80066b0: 68fb ldr r3, [r7, #12]
  16209. 80066b2: 4413 add r3, r2
  16210. 80066b4: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16211. 80066b8: 681a ldr r2, [r3, #0]
  16212. 80066ba: 68bb ldr r3, [r7, #8]
  16213. 80066bc: 0159 lsls r1, r3, #5
  16214. 80066be: 68fb ldr r3, [r7, #12]
  16215. 80066c0: 440b add r3, r1
  16216. 80066c2: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16217. 80066c6: 4619 mov r1, r3
  16218. 80066c8: 4b05 ldr r3, [pc, #20] ; (80066e0 <USB_DeactivateEndpoint+0x1b4>)
  16219. 80066ca: 4013 ands r3, r2
  16220. 80066cc: 600b str r3, [r1, #0]
  16221. USB_OTG_DOEPCTL_MPSIZ |
  16222. USB_OTG_DOEPCTL_SD0PID_SEVNFRM |
  16223. USB_OTG_DOEPCTL_EPTYP);
  16224. }
  16225. return HAL_OK;
  16226. 80066ce: 2300 movs r3, #0
  16227. }
  16228. 80066d0: 4618 mov r0, r3
  16229. 80066d2: 3714 adds r7, #20
  16230. 80066d4: 46bd mov sp, r7
  16231. 80066d6: f85d 7b04 ldr.w r7, [sp], #4
  16232. 80066da: 4770 bx lr
  16233. 80066dc: ec337800 .word 0xec337800
  16234. 80066e0: eff37800 .word 0xeff37800
  16235. 080066e4 <USB_EPStartXfer>:
  16236. * 0 : DMA feature not used
  16237. * 1 : DMA feature used
  16238. * @retval HAL status
  16239. */
  16240. HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep, uint8_t dma)
  16241. {
  16242. 80066e4: b580 push {r7, lr}
  16243. 80066e6: b08a sub sp, #40 ; 0x28
  16244. 80066e8: af02 add r7, sp, #8
  16245. 80066ea: 60f8 str r0, [r7, #12]
  16246. 80066ec: 60b9 str r1, [r7, #8]
  16247. 80066ee: 4613 mov r3, r2
  16248. 80066f0: 71fb strb r3, [r7, #7]
  16249. uint32_t USBx_BASE = (uint32_t)USBx;
  16250. 80066f2: 68fb ldr r3, [r7, #12]
  16251. 80066f4: 61fb str r3, [r7, #28]
  16252. uint32_t epnum = (uint32_t)ep->num;
  16253. 80066f6: 68bb ldr r3, [r7, #8]
  16254. 80066f8: 781b ldrb r3, [r3, #0]
  16255. 80066fa: 61bb str r3, [r7, #24]
  16256. uint16_t pktcnt;
  16257. /* IN endpoint */
  16258. if (ep->is_in == 1U)
  16259. 80066fc: 68bb ldr r3, [r7, #8]
  16260. 80066fe: 785b ldrb r3, [r3, #1]
  16261. 8006700: 2b01 cmp r3, #1
  16262. 8006702: f040 8163 bne.w 80069cc <USB_EPStartXfer+0x2e8>
  16263. {
  16264. /* Zero Length Packet? */
  16265. if (ep->xfer_len == 0U)
  16266. 8006706: 68bb ldr r3, [r7, #8]
  16267. 8006708: 695b ldr r3, [r3, #20]
  16268. 800670a: 2b00 cmp r3, #0
  16269. 800670c: d132 bne.n 8006774 <USB_EPStartXfer+0x90>
  16270. {
  16271. USBx_INEP(epnum)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_PKTCNT);
  16272. 800670e: 69bb ldr r3, [r7, #24]
  16273. 8006710: 015a lsls r2, r3, #5
  16274. 8006712: 69fb ldr r3, [r7, #28]
  16275. 8006714: 4413 add r3, r2
  16276. 8006716: f503 6310 add.w r3, r3, #2304 ; 0x900
  16277. 800671a: 691a ldr r2, [r3, #16]
  16278. 800671c: 69bb ldr r3, [r7, #24]
  16279. 800671e: 0159 lsls r1, r3, #5
  16280. 8006720: 69fb ldr r3, [r7, #28]
  16281. 8006722: 440b add r3, r1
  16282. 8006724: f503 6310 add.w r3, r3, #2304 ; 0x900
  16283. 8006728: 4619 mov r1, r3
  16284. 800672a: 4ba5 ldr r3, [pc, #660] ; (80069c0 <USB_EPStartXfer+0x2dc>)
  16285. 800672c: 4013 ands r3, r2
  16286. 800672e: 610b str r3, [r1, #16]
  16287. USBx_INEP(epnum)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_PKTCNT & (1U << 19));
  16288. 8006730: 69bb ldr r3, [r7, #24]
  16289. 8006732: 015a lsls r2, r3, #5
  16290. 8006734: 69fb ldr r3, [r7, #28]
  16291. 8006736: 4413 add r3, r2
  16292. 8006738: f503 6310 add.w r3, r3, #2304 ; 0x900
  16293. 800673c: 691b ldr r3, [r3, #16]
  16294. 800673e: 69ba ldr r2, [r7, #24]
  16295. 8006740: 0151 lsls r1, r2, #5
  16296. 8006742: 69fa ldr r2, [r7, #28]
  16297. 8006744: 440a add r2, r1
  16298. 8006746: f502 6210 add.w r2, r2, #2304 ; 0x900
  16299. 800674a: f443 2300 orr.w r3, r3, #524288 ; 0x80000
  16300. 800674e: 6113 str r3, [r2, #16]
  16301. USBx_INEP(epnum)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_XFRSIZ);
  16302. 8006750: 69bb ldr r3, [r7, #24]
  16303. 8006752: 015a lsls r2, r3, #5
  16304. 8006754: 69fb ldr r3, [r7, #28]
  16305. 8006756: 4413 add r3, r2
  16306. 8006758: f503 6310 add.w r3, r3, #2304 ; 0x900
  16307. 800675c: 691a ldr r2, [r3, #16]
  16308. 800675e: 69bb ldr r3, [r7, #24]
  16309. 8006760: 0159 lsls r1, r3, #5
  16310. 8006762: 69fb ldr r3, [r7, #28]
  16311. 8006764: 440b add r3, r1
  16312. 8006766: f503 6310 add.w r3, r3, #2304 ; 0x900
  16313. 800676a: 4619 mov r1, r3
  16314. 800676c: 4b95 ldr r3, [pc, #596] ; (80069c4 <USB_EPStartXfer+0x2e0>)
  16315. 800676e: 4013 ands r3, r2
  16316. 8006770: 610b str r3, [r1, #16]
  16317. 8006772: e074 b.n 800685e <USB_EPStartXfer+0x17a>
  16318. /* Program the transfer size and packet count
  16319. * as follows: xfersize = N * maxpacket +
  16320. * short_packet pktcnt = N + (short_packet
  16321. * exist ? 1 : 0)
  16322. */
  16323. USBx_INEP(epnum)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_XFRSIZ);
  16324. 8006774: 69bb ldr r3, [r7, #24]
  16325. 8006776: 015a lsls r2, r3, #5
  16326. 8006778: 69fb ldr r3, [r7, #28]
  16327. 800677a: 4413 add r3, r2
  16328. 800677c: f503 6310 add.w r3, r3, #2304 ; 0x900
  16329. 8006780: 691a ldr r2, [r3, #16]
  16330. 8006782: 69bb ldr r3, [r7, #24]
  16331. 8006784: 0159 lsls r1, r3, #5
  16332. 8006786: 69fb ldr r3, [r7, #28]
  16333. 8006788: 440b add r3, r1
  16334. 800678a: f503 6310 add.w r3, r3, #2304 ; 0x900
  16335. 800678e: 4619 mov r1, r3
  16336. 8006790: 4b8c ldr r3, [pc, #560] ; (80069c4 <USB_EPStartXfer+0x2e0>)
  16337. 8006792: 4013 ands r3, r2
  16338. 8006794: 610b str r3, [r1, #16]
  16339. USBx_INEP(epnum)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_PKTCNT);
  16340. 8006796: 69bb ldr r3, [r7, #24]
  16341. 8006798: 015a lsls r2, r3, #5
  16342. 800679a: 69fb ldr r3, [r7, #28]
  16343. 800679c: 4413 add r3, r2
  16344. 800679e: f503 6310 add.w r3, r3, #2304 ; 0x900
  16345. 80067a2: 691a ldr r2, [r3, #16]
  16346. 80067a4: 69bb ldr r3, [r7, #24]
  16347. 80067a6: 0159 lsls r1, r3, #5
  16348. 80067a8: 69fb ldr r3, [r7, #28]
  16349. 80067aa: 440b add r3, r1
  16350. 80067ac: f503 6310 add.w r3, r3, #2304 ; 0x900
  16351. 80067b0: 4619 mov r1, r3
  16352. 80067b2: 4b83 ldr r3, [pc, #524] ; (80069c0 <USB_EPStartXfer+0x2dc>)
  16353. 80067b4: 4013 ands r3, r2
  16354. 80067b6: 610b str r3, [r1, #16]
  16355. USBx_INEP(epnum)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_PKTCNT &
  16356. 80067b8: 69bb ldr r3, [r7, #24]
  16357. 80067ba: 015a lsls r2, r3, #5
  16358. 80067bc: 69fb ldr r3, [r7, #28]
  16359. 80067be: 4413 add r3, r2
  16360. 80067c0: f503 6310 add.w r3, r3, #2304 ; 0x900
  16361. 80067c4: 691a ldr r2, [r3, #16]
  16362. (((ep->xfer_len + ep->maxpacket - 1U) / ep->maxpacket) << 19));
  16363. 80067c6: 68bb ldr r3, [r7, #8]
  16364. 80067c8: 6959 ldr r1, [r3, #20]
  16365. 80067ca: 68bb ldr r3, [r7, #8]
  16366. 80067cc: 689b ldr r3, [r3, #8]
  16367. 80067ce: 440b add r3, r1
  16368. 80067d0: 1e59 subs r1, r3, #1
  16369. 80067d2: 68bb ldr r3, [r7, #8]
  16370. 80067d4: 689b ldr r3, [r3, #8]
  16371. 80067d6: fbb1 f3f3 udiv r3, r1, r3
  16372. 80067da: 04d9 lsls r1, r3, #19
  16373. USBx_INEP(epnum)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_PKTCNT &
  16374. 80067dc: 4b7a ldr r3, [pc, #488] ; (80069c8 <USB_EPStartXfer+0x2e4>)
  16375. 80067de: 400b ands r3, r1
  16376. 80067e0: 69b9 ldr r1, [r7, #24]
  16377. 80067e2: 0148 lsls r0, r1, #5
  16378. 80067e4: 69f9 ldr r1, [r7, #28]
  16379. 80067e6: 4401 add r1, r0
  16380. 80067e8: f501 6110 add.w r1, r1, #2304 ; 0x900
  16381. 80067ec: 4313 orrs r3, r2
  16382. 80067ee: 610b str r3, [r1, #16]
  16383. USBx_INEP(epnum)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_XFRSIZ & ep->xfer_len);
  16384. 80067f0: 69bb ldr r3, [r7, #24]
  16385. 80067f2: 015a lsls r2, r3, #5
  16386. 80067f4: 69fb ldr r3, [r7, #28]
  16387. 80067f6: 4413 add r3, r2
  16388. 80067f8: f503 6310 add.w r3, r3, #2304 ; 0x900
  16389. 80067fc: 691a ldr r2, [r3, #16]
  16390. 80067fe: 68bb ldr r3, [r7, #8]
  16391. 8006800: 695b ldr r3, [r3, #20]
  16392. 8006802: f3c3 0312 ubfx r3, r3, #0, #19
  16393. 8006806: 69b9 ldr r1, [r7, #24]
  16394. 8006808: 0148 lsls r0, r1, #5
  16395. 800680a: 69f9 ldr r1, [r7, #28]
  16396. 800680c: 4401 add r1, r0
  16397. 800680e: f501 6110 add.w r1, r1, #2304 ; 0x900
  16398. 8006812: 4313 orrs r3, r2
  16399. 8006814: 610b str r3, [r1, #16]
  16400. if (ep->type == EP_TYPE_ISOC)
  16401. 8006816: 68bb ldr r3, [r7, #8]
  16402. 8006818: 78db ldrb r3, [r3, #3]
  16403. 800681a: 2b01 cmp r3, #1
  16404. 800681c: d11f bne.n 800685e <USB_EPStartXfer+0x17a>
  16405. {
  16406. USBx_INEP(epnum)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_MULCNT);
  16407. 800681e: 69bb ldr r3, [r7, #24]
  16408. 8006820: 015a lsls r2, r3, #5
  16409. 8006822: 69fb ldr r3, [r7, #28]
  16410. 8006824: 4413 add r3, r2
  16411. 8006826: f503 6310 add.w r3, r3, #2304 ; 0x900
  16412. 800682a: 691b ldr r3, [r3, #16]
  16413. 800682c: 69ba ldr r2, [r7, #24]
  16414. 800682e: 0151 lsls r1, r2, #5
  16415. 8006830: 69fa ldr r2, [r7, #28]
  16416. 8006832: 440a add r2, r1
  16417. 8006834: f502 6210 add.w r2, r2, #2304 ; 0x900
  16418. 8006838: f023 43c0 bic.w r3, r3, #1610612736 ; 0x60000000
  16419. 800683c: 6113 str r3, [r2, #16]
  16420. USBx_INEP(epnum)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_MULCNT & (1U << 29));
  16421. 800683e: 69bb ldr r3, [r7, #24]
  16422. 8006840: 015a lsls r2, r3, #5
  16423. 8006842: 69fb ldr r3, [r7, #28]
  16424. 8006844: 4413 add r3, r2
  16425. 8006846: f503 6310 add.w r3, r3, #2304 ; 0x900
  16426. 800684a: 691b ldr r3, [r3, #16]
  16427. 800684c: 69ba ldr r2, [r7, #24]
  16428. 800684e: 0151 lsls r1, r2, #5
  16429. 8006850: 69fa ldr r2, [r7, #28]
  16430. 8006852: 440a add r2, r1
  16431. 8006854: f502 6210 add.w r2, r2, #2304 ; 0x900
  16432. 8006858: f043 5300 orr.w r3, r3, #536870912 ; 0x20000000
  16433. 800685c: 6113 str r3, [r2, #16]
  16434. }
  16435. }
  16436. if (dma == 1U)
  16437. 800685e: 79fb ldrb r3, [r7, #7]
  16438. 8006860: 2b01 cmp r3, #1
  16439. 8006862: d14b bne.n 80068fc <USB_EPStartXfer+0x218>
  16440. {
  16441. if ((uint32_t)ep->dma_addr != 0U)
  16442. 8006864: 68bb ldr r3, [r7, #8]
  16443. 8006866: 691b ldr r3, [r3, #16]
  16444. 8006868: 2b00 cmp r3, #0
  16445. 800686a: d009 beq.n 8006880 <USB_EPStartXfer+0x19c>
  16446. {
  16447. USBx_INEP(epnum)->DIEPDMA = (uint32_t)(ep->dma_addr);
  16448. 800686c: 69bb ldr r3, [r7, #24]
  16449. 800686e: 015a lsls r2, r3, #5
  16450. 8006870: 69fb ldr r3, [r7, #28]
  16451. 8006872: 4413 add r3, r2
  16452. 8006874: f503 6310 add.w r3, r3, #2304 ; 0x900
  16453. 8006878: 461a mov r2, r3
  16454. 800687a: 68bb ldr r3, [r7, #8]
  16455. 800687c: 691b ldr r3, [r3, #16]
  16456. 800687e: 6153 str r3, [r2, #20]
  16457. }
  16458. if (ep->type == EP_TYPE_ISOC)
  16459. 8006880: 68bb ldr r3, [r7, #8]
  16460. 8006882: 78db ldrb r3, [r3, #3]
  16461. 8006884: 2b01 cmp r3, #1
  16462. 8006886: d128 bne.n 80068da <USB_EPStartXfer+0x1f6>
  16463. {
  16464. if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
  16465. 8006888: 69fb ldr r3, [r7, #28]
  16466. 800688a: f503 6300 add.w r3, r3, #2048 ; 0x800
  16467. 800688e: 689b ldr r3, [r3, #8]
  16468. 8006890: f403 7380 and.w r3, r3, #256 ; 0x100
  16469. 8006894: 2b00 cmp r3, #0
  16470. 8006896: d110 bne.n 80068ba <USB_EPStartXfer+0x1d6>
  16471. {
  16472. USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
  16473. 8006898: 69bb ldr r3, [r7, #24]
  16474. 800689a: 015a lsls r2, r3, #5
  16475. 800689c: 69fb ldr r3, [r7, #28]
  16476. 800689e: 4413 add r3, r2
  16477. 80068a0: f503 6310 add.w r3, r3, #2304 ; 0x900
  16478. 80068a4: 681b ldr r3, [r3, #0]
  16479. 80068a6: 69ba ldr r2, [r7, #24]
  16480. 80068a8: 0151 lsls r1, r2, #5
  16481. 80068aa: 69fa ldr r2, [r7, #28]
  16482. 80068ac: 440a add r2, r1
  16483. 80068ae: f502 6210 add.w r2, r2, #2304 ; 0x900
  16484. 80068b2: f043 5300 orr.w r3, r3, #536870912 ; 0x20000000
  16485. 80068b6: 6013 str r3, [r2, #0]
  16486. 80068b8: e00f b.n 80068da <USB_EPStartXfer+0x1f6>
  16487. }
  16488. else
  16489. {
  16490. USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
  16491. 80068ba: 69bb ldr r3, [r7, #24]
  16492. 80068bc: 015a lsls r2, r3, #5
  16493. 80068be: 69fb ldr r3, [r7, #28]
  16494. 80068c0: 4413 add r3, r2
  16495. 80068c2: f503 6310 add.w r3, r3, #2304 ; 0x900
  16496. 80068c6: 681b ldr r3, [r3, #0]
  16497. 80068c8: 69ba ldr r2, [r7, #24]
  16498. 80068ca: 0151 lsls r1, r2, #5
  16499. 80068cc: 69fa ldr r2, [r7, #28]
  16500. 80068ce: 440a add r2, r1
  16501. 80068d0: f502 6210 add.w r2, r2, #2304 ; 0x900
  16502. 80068d4: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000
  16503. 80068d8: 6013 str r3, [r2, #0]
  16504. }
  16505. }
  16506. /* EP enable, IN data in FIFO */
  16507. USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
  16508. 80068da: 69bb ldr r3, [r7, #24]
  16509. 80068dc: 015a lsls r2, r3, #5
  16510. 80068de: 69fb ldr r3, [r7, #28]
  16511. 80068e0: 4413 add r3, r2
  16512. 80068e2: f503 6310 add.w r3, r3, #2304 ; 0x900
  16513. 80068e6: 681b ldr r3, [r3, #0]
  16514. 80068e8: 69ba ldr r2, [r7, #24]
  16515. 80068ea: 0151 lsls r1, r2, #5
  16516. 80068ec: 69fa ldr r2, [r7, #28]
  16517. 80068ee: 440a add r2, r1
  16518. 80068f0: f502 6210 add.w r2, r2, #2304 ; 0x900
  16519. 80068f4: f043 4304 orr.w r3, r3, #2214592512 ; 0x84000000
  16520. 80068f8: 6013 str r3, [r2, #0]
  16521. 80068fa: e133 b.n 8006b64 <USB_EPStartXfer+0x480>
  16522. }
  16523. else
  16524. {
  16525. /* EP enable, IN data in FIFO */
  16526. USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
  16527. 80068fc: 69bb ldr r3, [r7, #24]
  16528. 80068fe: 015a lsls r2, r3, #5
  16529. 8006900: 69fb ldr r3, [r7, #28]
  16530. 8006902: 4413 add r3, r2
  16531. 8006904: f503 6310 add.w r3, r3, #2304 ; 0x900
  16532. 8006908: 681b ldr r3, [r3, #0]
  16533. 800690a: 69ba ldr r2, [r7, #24]
  16534. 800690c: 0151 lsls r1, r2, #5
  16535. 800690e: 69fa ldr r2, [r7, #28]
  16536. 8006910: 440a add r2, r1
  16537. 8006912: f502 6210 add.w r2, r2, #2304 ; 0x900
  16538. 8006916: f043 4304 orr.w r3, r3, #2214592512 ; 0x84000000
  16539. 800691a: 6013 str r3, [r2, #0]
  16540. if (ep->type != EP_TYPE_ISOC)
  16541. 800691c: 68bb ldr r3, [r7, #8]
  16542. 800691e: 78db ldrb r3, [r3, #3]
  16543. 8006920: 2b01 cmp r3, #1
  16544. 8006922: d015 beq.n 8006950 <USB_EPStartXfer+0x26c>
  16545. {
  16546. /* Enable the Tx FIFO Empty Interrupt for this EP */
  16547. if (ep->xfer_len > 0U)
  16548. 8006924: 68bb ldr r3, [r7, #8]
  16549. 8006926: 695b ldr r3, [r3, #20]
  16550. 8006928: 2b00 cmp r3, #0
  16551. 800692a: f000 811b beq.w 8006b64 <USB_EPStartXfer+0x480>
  16552. {
  16553. USBx_DEVICE->DIEPEMPMSK |= 1UL << (ep->num & EP_ADDR_MSK);
  16554. 800692e: 69fb ldr r3, [r7, #28]
  16555. 8006930: f503 6300 add.w r3, r3, #2048 ; 0x800
  16556. 8006934: 6b5a ldr r2, [r3, #52] ; 0x34
  16557. 8006936: 68bb ldr r3, [r7, #8]
  16558. 8006938: 781b ldrb r3, [r3, #0]
  16559. 800693a: f003 030f and.w r3, r3, #15
  16560. 800693e: 2101 movs r1, #1
  16561. 8006940: fa01 f303 lsl.w r3, r1, r3
  16562. 8006944: 69f9 ldr r1, [r7, #28]
  16563. 8006946: f501 6100 add.w r1, r1, #2048 ; 0x800
  16564. 800694a: 4313 orrs r3, r2
  16565. 800694c: 634b str r3, [r1, #52] ; 0x34
  16566. 800694e: e109 b.n 8006b64 <USB_EPStartXfer+0x480>
  16567. }
  16568. }
  16569. else
  16570. {
  16571. if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
  16572. 8006950: 69fb ldr r3, [r7, #28]
  16573. 8006952: f503 6300 add.w r3, r3, #2048 ; 0x800
  16574. 8006956: 689b ldr r3, [r3, #8]
  16575. 8006958: f403 7380 and.w r3, r3, #256 ; 0x100
  16576. 800695c: 2b00 cmp r3, #0
  16577. 800695e: d110 bne.n 8006982 <USB_EPStartXfer+0x29e>
  16578. {
  16579. USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
  16580. 8006960: 69bb ldr r3, [r7, #24]
  16581. 8006962: 015a lsls r2, r3, #5
  16582. 8006964: 69fb ldr r3, [r7, #28]
  16583. 8006966: 4413 add r3, r2
  16584. 8006968: f503 6310 add.w r3, r3, #2304 ; 0x900
  16585. 800696c: 681b ldr r3, [r3, #0]
  16586. 800696e: 69ba ldr r2, [r7, #24]
  16587. 8006970: 0151 lsls r1, r2, #5
  16588. 8006972: 69fa ldr r2, [r7, #28]
  16589. 8006974: 440a add r2, r1
  16590. 8006976: f502 6210 add.w r2, r2, #2304 ; 0x900
  16591. 800697a: f043 5300 orr.w r3, r3, #536870912 ; 0x20000000
  16592. 800697e: 6013 str r3, [r2, #0]
  16593. 8006980: e00f b.n 80069a2 <USB_EPStartXfer+0x2be>
  16594. }
  16595. else
  16596. {
  16597. USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
  16598. 8006982: 69bb ldr r3, [r7, #24]
  16599. 8006984: 015a lsls r2, r3, #5
  16600. 8006986: 69fb ldr r3, [r7, #28]
  16601. 8006988: 4413 add r3, r2
  16602. 800698a: f503 6310 add.w r3, r3, #2304 ; 0x900
  16603. 800698e: 681b ldr r3, [r3, #0]
  16604. 8006990: 69ba ldr r2, [r7, #24]
  16605. 8006992: 0151 lsls r1, r2, #5
  16606. 8006994: 69fa ldr r2, [r7, #28]
  16607. 8006996: 440a add r2, r1
  16608. 8006998: f502 6210 add.w r2, r2, #2304 ; 0x900
  16609. 800699c: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000
  16610. 80069a0: 6013 str r3, [r2, #0]
  16611. }
  16612. (void)USB_WritePacket(USBx, ep->xfer_buff, ep->num, (uint16_t)ep->xfer_len, dma);
  16613. 80069a2: 68bb ldr r3, [r7, #8]
  16614. 80069a4: 68d9 ldr r1, [r3, #12]
  16615. 80069a6: 68bb ldr r3, [r7, #8]
  16616. 80069a8: 781a ldrb r2, [r3, #0]
  16617. 80069aa: 68bb ldr r3, [r7, #8]
  16618. 80069ac: 695b ldr r3, [r3, #20]
  16619. 80069ae: b298 uxth r0, r3
  16620. 80069b0: 79fb ldrb r3, [r7, #7]
  16621. 80069b2: 9300 str r3, [sp, #0]
  16622. 80069b4: 4603 mov r3, r0
  16623. 80069b6: 68f8 ldr r0, [r7, #12]
  16624. 80069b8: f000 fa38 bl 8006e2c <USB_WritePacket>
  16625. 80069bc: e0d2 b.n 8006b64 <USB_EPStartXfer+0x480>
  16626. 80069be: bf00 nop
  16627. 80069c0: e007ffff .word 0xe007ffff
  16628. 80069c4: fff80000 .word 0xfff80000
  16629. 80069c8: 1ff80000 .word 0x1ff80000
  16630. {
  16631. /* Program the transfer size and packet count as follows:
  16632. * pktcnt = N
  16633. * xfersize = N * maxpacket
  16634. */
  16635. USBx_OUTEP(epnum)->DOEPTSIZ &= ~(USB_OTG_DOEPTSIZ_XFRSIZ);
  16636. 80069cc: 69bb ldr r3, [r7, #24]
  16637. 80069ce: 015a lsls r2, r3, #5
  16638. 80069d0: 69fb ldr r3, [r7, #28]
  16639. 80069d2: 4413 add r3, r2
  16640. 80069d4: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16641. 80069d8: 691a ldr r2, [r3, #16]
  16642. 80069da: 69bb ldr r3, [r7, #24]
  16643. 80069dc: 0159 lsls r1, r3, #5
  16644. 80069de: 69fb ldr r3, [r7, #28]
  16645. 80069e0: 440b add r3, r1
  16646. 80069e2: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16647. 80069e6: 4619 mov r1, r3
  16648. 80069e8: 4b61 ldr r3, [pc, #388] ; (8006b70 <USB_EPStartXfer+0x48c>)
  16649. 80069ea: 4013 ands r3, r2
  16650. 80069ec: 610b str r3, [r1, #16]
  16651. USBx_OUTEP(epnum)->DOEPTSIZ &= ~(USB_OTG_DOEPTSIZ_PKTCNT);
  16652. 80069ee: 69bb ldr r3, [r7, #24]
  16653. 80069f0: 015a lsls r2, r3, #5
  16654. 80069f2: 69fb ldr r3, [r7, #28]
  16655. 80069f4: 4413 add r3, r2
  16656. 80069f6: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16657. 80069fa: 691a ldr r2, [r3, #16]
  16658. 80069fc: 69bb ldr r3, [r7, #24]
  16659. 80069fe: 0159 lsls r1, r3, #5
  16660. 8006a00: 69fb ldr r3, [r7, #28]
  16661. 8006a02: 440b add r3, r1
  16662. 8006a04: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16663. 8006a08: 4619 mov r1, r3
  16664. 8006a0a: 4b5a ldr r3, [pc, #360] ; (8006b74 <USB_EPStartXfer+0x490>)
  16665. 8006a0c: 4013 ands r3, r2
  16666. 8006a0e: 610b str r3, [r1, #16]
  16667. if (ep->xfer_len == 0U)
  16668. 8006a10: 68bb ldr r3, [r7, #8]
  16669. 8006a12: 695b ldr r3, [r3, #20]
  16670. 8006a14: 2b00 cmp r3, #0
  16671. 8006a16: d123 bne.n 8006a60 <USB_EPStartXfer+0x37c>
  16672. {
  16673. USBx_OUTEP(epnum)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_XFRSIZ & ep->maxpacket);
  16674. 8006a18: 69bb ldr r3, [r7, #24]
  16675. 8006a1a: 015a lsls r2, r3, #5
  16676. 8006a1c: 69fb ldr r3, [r7, #28]
  16677. 8006a1e: 4413 add r3, r2
  16678. 8006a20: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16679. 8006a24: 691a ldr r2, [r3, #16]
  16680. 8006a26: 68bb ldr r3, [r7, #8]
  16681. 8006a28: 689b ldr r3, [r3, #8]
  16682. 8006a2a: f3c3 0312 ubfx r3, r3, #0, #19
  16683. 8006a2e: 69b9 ldr r1, [r7, #24]
  16684. 8006a30: 0148 lsls r0, r1, #5
  16685. 8006a32: 69f9 ldr r1, [r7, #28]
  16686. 8006a34: 4401 add r1, r0
  16687. 8006a36: f501 6130 add.w r1, r1, #2816 ; 0xb00
  16688. 8006a3a: 4313 orrs r3, r2
  16689. 8006a3c: 610b str r3, [r1, #16]
  16690. USBx_OUTEP(epnum)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_PKTCNT & (1U << 19));
  16691. 8006a3e: 69bb ldr r3, [r7, #24]
  16692. 8006a40: 015a lsls r2, r3, #5
  16693. 8006a42: 69fb ldr r3, [r7, #28]
  16694. 8006a44: 4413 add r3, r2
  16695. 8006a46: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16696. 8006a4a: 691b ldr r3, [r3, #16]
  16697. 8006a4c: 69ba ldr r2, [r7, #24]
  16698. 8006a4e: 0151 lsls r1, r2, #5
  16699. 8006a50: 69fa ldr r2, [r7, #28]
  16700. 8006a52: 440a add r2, r1
  16701. 8006a54: f502 6230 add.w r2, r2, #2816 ; 0xb00
  16702. 8006a58: f443 2300 orr.w r3, r3, #524288 ; 0x80000
  16703. 8006a5c: 6113 str r3, [r2, #16]
  16704. 8006a5e: e033 b.n 8006ac8 <USB_EPStartXfer+0x3e4>
  16705. }
  16706. else
  16707. {
  16708. pktcnt = (uint16_t)((ep->xfer_len + ep->maxpacket - 1U) / ep->maxpacket);
  16709. 8006a60: 68bb ldr r3, [r7, #8]
  16710. 8006a62: 695a ldr r2, [r3, #20]
  16711. 8006a64: 68bb ldr r3, [r7, #8]
  16712. 8006a66: 689b ldr r3, [r3, #8]
  16713. 8006a68: 4413 add r3, r2
  16714. 8006a6a: 1e5a subs r2, r3, #1
  16715. 8006a6c: 68bb ldr r3, [r7, #8]
  16716. 8006a6e: 689b ldr r3, [r3, #8]
  16717. 8006a70: fbb2 f3f3 udiv r3, r2, r3
  16718. 8006a74: 82fb strh r3, [r7, #22]
  16719. USBx_OUTEP(epnum)->DOEPTSIZ |= USB_OTG_DOEPTSIZ_PKTCNT & ((uint32_t)pktcnt << 19);
  16720. 8006a76: 69bb ldr r3, [r7, #24]
  16721. 8006a78: 015a lsls r2, r3, #5
  16722. 8006a7a: 69fb ldr r3, [r7, #28]
  16723. 8006a7c: 4413 add r3, r2
  16724. 8006a7e: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16725. 8006a82: 691a ldr r2, [r3, #16]
  16726. 8006a84: 8afb ldrh r3, [r7, #22]
  16727. 8006a86: 04d9 lsls r1, r3, #19
  16728. 8006a88: 4b3b ldr r3, [pc, #236] ; (8006b78 <USB_EPStartXfer+0x494>)
  16729. 8006a8a: 400b ands r3, r1
  16730. 8006a8c: 69b9 ldr r1, [r7, #24]
  16731. 8006a8e: 0148 lsls r0, r1, #5
  16732. 8006a90: 69f9 ldr r1, [r7, #28]
  16733. 8006a92: 4401 add r1, r0
  16734. 8006a94: f501 6130 add.w r1, r1, #2816 ; 0xb00
  16735. 8006a98: 4313 orrs r3, r2
  16736. 8006a9a: 610b str r3, [r1, #16]
  16737. USBx_OUTEP(epnum)->DOEPTSIZ |= USB_OTG_DOEPTSIZ_XFRSIZ & (ep->maxpacket * pktcnt);
  16738. 8006a9c: 69bb ldr r3, [r7, #24]
  16739. 8006a9e: 015a lsls r2, r3, #5
  16740. 8006aa0: 69fb ldr r3, [r7, #28]
  16741. 8006aa2: 4413 add r3, r2
  16742. 8006aa4: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16743. 8006aa8: 691a ldr r2, [r3, #16]
  16744. 8006aaa: 68bb ldr r3, [r7, #8]
  16745. 8006aac: 689b ldr r3, [r3, #8]
  16746. 8006aae: 8af9 ldrh r1, [r7, #22]
  16747. 8006ab0: fb01 f303 mul.w r3, r1, r3
  16748. 8006ab4: f3c3 0312 ubfx r3, r3, #0, #19
  16749. 8006ab8: 69b9 ldr r1, [r7, #24]
  16750. 8006aba: 0148 lsls r0, r1, #5
  16751. 8006abc: 69f9 ldr r1, [r7, #28]
  16752. 8006abe: 4401 add r1, r0
  16753. 8006ac0: f501 6130 add.w r1, r1, #2816 ; 0xb00
  16754. 8006ac4: 4313 orrs r3, r2
  16755. 8006ac6: 610b str r3, [r1, #16]
  16756. }
  16757. if (dma == 1U)
  16758. 8006ac8: 79fb ldrb r3, [r7, #7]
  16759. 8006aca: 2b01 cmp r3, #1
  16760. 8006acc: d10d bne.n 8006aea <USB_EPStartXfer+0x406>
  16761. {
  16762. if ((uint32_t)ep->xfer_buff != 0U)
  16763. 8006ace: 68bb ldr r3, [r7, #8]
  16764. 8006ad0: 68db ldr r3, [r3, #12]
  16765. 8006ad2: 2b00 cmp r3, #0
  16766. 8006ad4: d009 beq.n 8006aea <USB_EPStartXfer+0x406>
  16767. {
  16768. USBx_OUTEP(epnum)->DOEPDMA = (uint32_t)(ep->xfer_buff);
  16769. 8006ad6: 68bb ldr r3, [r7, #8]
  16770. 8006ad8: 68d9 ldr r1, [r3, #12]
  16771. 8006ada: 69bb ldr r3, [r7, #24]
  16772. 8006adc: 015a lsls r2, r3, #5
  16773. 8006ade: 69fb ldr r3, [r7, #28]
  16774. 8006ae0: 4413 add r3, r2
  16775. 8006ae2: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16776. 8006ae6: 460a mov r2, r1
  16777. 8006ae8: 615a str r2, [r3, #20]
  16778. }
  16779. }
  16780. if (ep->type == EP_TYPE_ISOC)
  16781. 8006aea: 68bb ldr r3, [r7, #8]
  16782. 8006aec: 78db ldrb r3, [r3, #3]
  16783. 8006aee: 2b01 cmp r3, #1
  16784. 8006af0: d128 bne.n 8006b44 <USB_EPStartXfer+0x460>
  16785. {
  16786. if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
  16787. 8006af2: 69fb ldr r3, [r7, #28]
  16788. 8006af4: f503 6300 add.w r3, r3, #2048 ; 0x800
  16789. 8006af8: 689b ldr r3, [r3, #8]
  16790. 8006afa: f403 7380 and.w r3, r3, #256 ; 0x100
  16791. 8006afe: 2b00 cmp r3, #0
  16792. 8006b00: d110 bne.n 8006b24 <USB_EPStartXfer+0x440>
  16793. {
  16794. USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SODDFRM;
  16795. 8006b02: 69bb ldr r3, [r7, #24]
  16796. 8006b04: 015a lsls r2, r3, #5
  16797. 8006b06: 69fb ldr r3, [r7, #28]
  16798. 8006b08: 4413 add r3, r2
  16799. 8006b0a: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16800. 8006b0e: 681b ldr r3, [r3, #0]
  16801. 8006b10: 69ba ldr r2, [r7, #24]
  16802. 8006b12: 0151 lsls r1, r2, #5
  16803. 8006b14: 69fa ldr r2, [r7, #28]
  16804. 8006b16: 440a add r2, r1
  16805. 8006b18: f502 6230 add.w r2, r2, #2816 ; 0xb00
  16806. 8006b1c: f043 5300 orr.w r3, r3, #536870912 ; 0x20000000
  16807. 8006b20: 6013 str r3, [r2, #0]
  16808. 8006b22: e00f b.n 8006b44 <USB_EPStartXfer+0x460>
  16809. }
  16810. else
  16811. {
  16812. USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SD0PID_SEVNFRM;
  16813. 8006b24: 69bb ldr r3, [r7, #24]
  16814. 8006b26: 015a lsls r2, r3, #5
  16815. 8006b28: 69fb ldr r3, [r7, #28]
  16816. 8006b2a: 4413 add r3, r2
  16817. 8006b2c: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16818. 8006b30: 681b ldr r3, [r3, #0]
  16819. 8006b32: 69ba ldr r2, [r7, #24]
  16820. 8006b34: 0151 lsls r1, r2, #5
  16821. 8006b36: 69fa ldr r2, [r7, #28]
  16822. 8006b38: 440a add r2, r1
  16823. 8006b3a: f502 6230 add.w r2, r2, #2816 ; 0xb00
  16824. 8006b3e: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000
  16825. 8006b42: 6013 str r3, [r2, #0]
  16826. }
  16827. }
  16828. /* EP enable */
  16829. USBx_OUTEP(epnum)->DOEPCTL |= (USB_OTG_DOEPCTL_CNAK | USB_OTG_DOEPCTL_EPENA);
  16830. 8006b44: 69bb ldr r3, [r7, #24]
  16831. 8006b46: 015a lsls r2, r3, #5
  16832. 8006b48: 69fb ldr r3, [r7, #28]
  16833. 8006b4a: 4413 add r3, r2
  16834. 8006b4c: f503 6330 add.w r3, r3, #2816 ; 0xb00
  16835. 8006b50: 681b ldr r3, [r3, #0]
  16836. 8006b52: 69ba ldr r2, [r7, #24]
  16837. 8006b54: 0151 lsls r1, r2, #5
  16838. 8006b56: 69fa ldr r2, [r7, #28]
  16839. 8006b58: 440a add r2, r1
  16840. 8006b5a: f502 6230 add.w r2, r2, #2816 ; 0xb00
  16841. 8006b5e: f043 4304 orr.w r3, r3, #2214592512 ; 0x84000000
  16842. 8006b62: 6013 str r3, [r2, #0]
  16843. }
  16844. return HAL_OK;
  16845. 8006b64: 2300 movs r3, #0
  16846. }
  16847. 8006b66: 4618 mov r0, r3
  16848. 8006b68: 3720 adds r7, #32
  16849. 8006b6a: 46bd mov sp, r7
  16850. 8006b6c: bd80 pop {r7, pc}
  16851. 8006b6e: bf00 nop
  16852. 8006b70: fff80000 .word 0xfff80000
  16853. 8006b74: e007ffff .word 0xe007ffff
  16854. 8006b78: 1ff80000 .word 0x1ff80000
  16855. 08006b7c <USB_EP0StartXfer>:
  16856. * 0 : DMA feature not used
  16857. * 1 : DMA feature used
  16858. * @retval HAL status
  16859. */
  16860. HAL_StatusTypeDef USB_EP0StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep, uint8_t dma)
  16861. {
  16862. 8006b7c: b480 push {r7}
  16863. 8006b7e: b087 sub sp, #28
  16864. 8006b80: af00 add r7, sp, #0
  16865. 8006b82: 60f8 str r0, [r7, #12]
  16866. 8006b84: 60b9 str r1, [r7, #8]
  16867. 8006b86: 4613 mov r3, r2
  16868. 8006b88: 71fb strb r3, [r7, #7]
  16869. uint32_t USBx_BASE = (uint32_t)USBx;
  16870. 8006b8a: 68fb ldr r3, [r7, #12]
  16871. 8006b8c: 617b str r3, [r7, #20]
  16872. uint32_t epnum = (uint32_t)ep->num;
  16873. 8006b8e: 68bb ldr r3, [r7, #8]
  16874. 8006b90: 781b ldrb r3, [r3, #0]
  16875. 8006b92: 613b str r3, [r7, #16]
  16876. /* IN endpoint */
  16877. if (ep->is_in == 1U)
  16878. 8006b94: 68bb ldr r3, [r7, #8]
  16879. 8006b96: 785b ldrb r3, [r3, #1]
  16880. 8006b98: 2b01 cmp r3, #1
  16881. 8006b9a: f040 80cd bne.w 8006d38 <USB_EP0StartXfer+0x1bc>
  16882. {
  16883. /* Zero Length Packet? */
  16884. if (ep->xfer_len == 0U)
  16885. 8006b9e: 68bb ldr r3, [r7, #8]
  16886. 8006ba0: 695b ldr r3, [r3, #20]
  16887. 8006ba2: 2b00 cmp r3, #0
  16888. 8006ba4: d132 bne.n 8006c0c <USB_EP0StartXfer+0x90>
  16889. {
  16890. USBx_INEP(epnum)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_PKTCNT);
  16891. 8006ba6: 693b ldr r3, [r7, #16]
  16892. 8006ba8: 015a lsls r2, r3, #5
  16893. 8006baa: 697b ldr r3, [r7, #20]
  16894. 8006bac: 4413 add r3, r2
  16895. 8006bae: f503 6310 add.w r3, r3, #2304 ; 0x900
  16896. 8006bb2: 691a ldr r2, [r3, #16]
  16897. 8006bb4: 693b ldr r3, [r7, #16]
  16898. 8006bb6: 0159 lsls r1, r3, #5
  16899. 8006bb8: 697b ldr r3, [r7, #20]
  16900. 8006bba: 440b add r3, r1
  16901. 8006bbc: f503 6310 add.w r3, r3, #2304 ; 0x900
  16902. 8006bc0: 4619 mov r1, r3
  16903. 8006bc2: 4b98 ldr r3, [pc, #608] ; (8006e24 <USB_EP0StartXfer+0x2a8>)
  16904. 8006bc4: 4013 ands r3, r2
  16905. 8006bc6: 610b str r3, [r1, #16]
  16906. USBx_INEP(epnum)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_PKTCNT & (1U << 19));
  16907. 8006bc8: 693b ldr r3, [r7, #16]
  16908. 8006bca: 015a lsls r2, r3, #5
  16909. 8006bcc: 697b ldr r3, [r7, #20]
  16910. 8006bce: 4413 add r3, r2
  16911. 8006bd0: f503 6310 add.w r3, r3, #2304 ; 0x900
  16912. 8006bd4: 691b ldr r3, [r3, #16]
  16913. 8006bd6: 693a ldr r2, [r7, #16]
  16914. 8006bd8: 0151 lsls r1, r2, #5
  16915. 8006bda: 697a ldr r2, [r7, #20]
  16916. 8006bdc: 440a add r2, r1
  16917. 8006bde: f502 6210 add.w r2, r2, #2304 ; 0x900
  16918. 8006be2: f443 2300 orr.w r3, r3, #524288 ; 0x80000
  16919. 8006be6: 6113 str r3, [r2, #16]
  16920. USBx_INEP(epnum)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_XFRSIZ);
  16921. 8006be8: 693b ldr r3, [r7, #16]
  16922. 8006bea: 015a lsls r2, r3, #5
  16923. 8006bec: 697b ldr r3, [r7, #20]
  16924. 8006bee: 4413 add r3, r2
  16925. 8006bf0: f503 6310 add.w r3, r3, #2304 ; 0x900
  16926. 8006bf4: 691a ldr r2, [r3, #16]
  16927. 8006bf6: 693b ldr r3, [r7, #16]
  16928. 8006bf8: 0159 lsls r1, r3, #5
  16929. 8006bfa: 697b ldr r3, [r7, #20]
  16930. 8006bfc: 440b add r3, r1
  16931. 8006bfe: f503 6310 add.w r3, r3, #2304 ; 0x900
  16932. 8006c02: 4619 mov r1, r3
  16933. 8006c04: 4b88 ldr r3, [pc, #544] ; (8006e28 <USB_EP0StartXfer+0x2ac>)
  16934. 8006c06: 4013 ands r3, r2
  16935. 8006c08: 610b str r3, [r1, #16]
  16936. 8006c0a: e04e b.n 8006caa <USB_EP0StartXfer+0x12e>
  16937. /* Program the transfer size and packet count
  16938. * as follows: xfersize = N * maxpacket +
  16939. * short_packet pktcnt = N + (short_packet
  16940. * exist ? 1 : 0)
  16941. */
  16942. USBx_INEP(epnum)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_XFRSIZ);
  16943. 8006c0c: 693b ldr r3, [r7, #16]
  16944. 8006c0e: 015a lsls r2, r3, #5
  16945. 8006c10: 697b ldr r3, [r7, #20]
  16946. 8006c12: 4413 add r3, r2
  16947. 8006c14: f503 6310 add.w r3, r3, #2304 ; 0x900
  16948. 8006c18: 691a ldr r2, [r3, #16]
  16949. 8006c1a: 693b ldr r3, [r7, #16]
  16950. 8006c1c: 0159 lsls r1, r3, #5
  16951. 8006c1e: 697b ldr r3, [r7, #20]
  16952. 8006c20: 440b add r3, r1
  16953. 8006c22: f503 6310 add.w r3, r3, #2304 ; 0x900
  16954. 8006c26: 4619 mov r1, r3
  16955. 8006c28: 4b7f ldr r3, [pc, #508] ; (8006e28 <USB_EP0StartXfer+0x2ac>)
  16956. 8006c2a: 4013 ands r3, r2
  16957. 8006c2c: 610b str r3, [r1, #16]
  16958. USBx_INEP(epnum)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_PKTCNT);
  16959. 8006c2e: 693b ldr r3, [r7, #16]
  16960. 8006c30: 015a lsls r2, r3, #5
  16961. 8006c32: 697b ldr r3, [r7, #20]
  16962. 8006c34: 4413 add r3, r2
  16963. 8006c36: f503 6310 add.w r3, r3, #2304 ; 0x900
  16964. 8006c3a: 691a ldr r2, [r3, #16]
  16965. 8006c3c: 693b ldr r3, [r7, #16]
  16966. 8006c3e: 0159 lsls r1, r3, #5
  16967. 8006c40: 697b ldr r3, [r7, #20]
  16968. 8006c42: 440b add r3, r1
  16969. 8006c44: f503 6310 add.w r3, r3, #2304 ; 0x900
  16970. 8006c48: 4619 mov r1, r3
  16971. 8006c4a: 4b76 ldr r3, [pc, #472] ; (8006e24 <USB_EP0StartXfer+0x2a8>)
  16972. 8006c4c: 4013 ands r3, r2
  16973. 8006c4e: 610b str r3, [r1, #16]
  16974. if (ep->xfer_len > ep->maxpacket)
  16975. 8006c50: 68bb ldr r3, [r7, #8]
  16976. 8006c52: 695a ldr r2, [r3, #20]
  16977. 8006c54: 68bb ldr r3, [r7, #8]
  16978. 8006c56: 689b ldr r3, [r3, #8]
  16979. 8006c58: 429a cmp r2, r3
  16980. 8006c5a: d903 bls.n 8006c64 <USB_EP0StartXfer+0xe8>
  16981. {
  16982. ep->xfer_len = ep->maxpacket;
  16983. 8006c5c: 68bb ldr r3, [r7, #8]
  16984. 8006c5e: 689a ldr r2, [r3, #8]
  16985. 8006c60: 68bb ldr r3, [r7, #8]
  16986. 8006c62: 615a str r2, [r3, #20]
  16987. }
  16988. USBx_INEP(epnum)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_PKTCNT & (1U << 19));
  16989. 8006c64: 693b ldr r3, [r7, #16]
  16990. 8006c66: 015a lsls r2, r3, #5
  16991. 8006c68: 697b ldr r3, [r7, #20]
  16992. 8006c6a: 4413 add r3, r2
  16993. 8006c6c: f503 6310 add.w r3, r3, #2304 ; 0x900
  16994. 8006c70: 691b ldr r3, [r3, #16]
  16995. 8006c72: 693a ldr r2, [r7, #16]
  16996. 8006c74: 0151 lsls r1, r2, #5
  16997. 8006c76: 697a ldr r2, [r7, #20]
  16998. 8006c78: 440a add r2, r1
  16999. 8006c7a: f502 6210 add.w r2, r2, #2304 ; 0x900
  17000. 8006c7e: f443 2300 orr.w r3, r3, #524288 ; 0x80000
  17001. 8006c82: 6113 str r3, [r2, #16]
  17002. USBx_INEP(epnum)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_XFRSIZ & ep->xfer_len);
  17003. 8006c84: 693b ldr r3, [r7, #16]
  17004. 8006c86: 015a lsls r2, r3, #5
  17005. 8006c88: 697b ldr r3, [r7, #20]
  17006. 8006c8a: 4413 add r3, r2
  17007. 8006c8c: f503 6310 add.w r3, r3, #2304 ; 0x900
  17008. 8006c90: 691a ldr r2, [r3, #16]
  17009. 8006c92: 68bb ldr r3, [r7, #8]
  17010. 8006c94: 695b ldr r3, [r3, #20]
  17011. 8006c96: f3c3 0312 ubfx r3, r3, #0, #19
  17012. 8006c9a: 6939 ldr r1, [r7, #16]
  17013. 8006c9c: 0148 lsls r0, r1, #5
  17014. 8006c9e: 6979 ldr r1, [r7, #20]
  17015. 8006ca0: 4401 add r1, r0
  17016. 8006ca2: f501 6110 add.w r1, r1, #2304 ; 0x900
  17017. 8006ca6: 4313 orrs r3, r2
  17018. 8006ca8: 610b str r3, [r1, #16]
  17019. }
  17020. if (dma == 1U)
  17021. 8006caa: 79fb ldrb r3, [r7, #7]
  17022. 8006cac: 2b01 cmp r3, #1
  17023. 8006cae: d11e bne.n 8006cee <USB_EP0StartXfer+0x172>
  17024. {
  17025. if ((uint32_t)ep->dma_addr != 0U)
  17026. 8006cb0: 68bb ldr r3, [r7, #8]
  17027. 8006cb2: 691b ldr r3, [r3, #16]
  17028. 8006cb4: 2b00 cmp r3, #0
  17029. 8006cb6: d009 beq.n 8006ccc <USB_EP0StartXfer+0x150>
  17030. {
  17031. USBx_INEP(epnum)->DIEPDMA = (uint32_t)(ep->dma_addr);
  17032. 8006cb8: 693b ldr r3, [r7, #16]
  17033. 8006cba: 015a lsls r2, r3, #5
  17034. 8006cbc: 697b ldr r3, [r7, #20]
  17035. 8006cbe: 4413 add r3, r2
  17036. 8006cc0: f503 6310 add.w r3, r3, #2304 ; 0x900
  17037. 8006cc4: 461a mov r2, r3
  17038. 8006cc6: 68bb ldr r3, [r7, #8]
  17039. 8006cc8: 691b ldr r3, [r3, #16]
  17040. 8006cca: 6153 str r3, [r2, #20]
  17041. }
  17042. /* EP enable, IN data in FIFO */
  17043. USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
  17044. 8006ccc: 693b ldr r3, [r7, #16]
  17045. 8006cce: 015a lsls r2, r3, #5
  17046. 8006cd0: 697b ldr r3, [r7, #20]
  17047. 8006cd2: 4413 add r3, r2
  17048. 8006cd4: f503 6310 add.w r3, r3, #2304 ; 0x900
  17049. 8006cd8: 681b ldr r3, [r3, #0]
  17050. 8006cda: 693a ldr r2, [r7, #16]
  17051. 8006cdc: 0151 lsls r1, r2, #5
  17052. 8006cde: 697a ldr r2, [r7, #20]
  17053. 8006ce0: 440a add r2, r1
  17054. 8006ce2: f502 6210 add.w r2, r2, #2304 ; 0x900
  17055. 8006ce6: f043 4304 orr.w r3, r3, #2214592512 ; 0x84000000
  17056. 8006cea: 6013 str r3, [r2, #0]
  17057. 8006cec: e092 b.n 8006e14 <USB_EP0StartXfer+0x298>
  17058. }
  17059. else
  17060. {
  17061. /* EP enable, IN data in FIFO */
  17062. USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
  17063. 8006cee: 693b ldr r3, [r7, #16]
  17064. 8006cf0: 015a lsls r2, r3, #5
  17065. 8006cf2: 697b ldr r3, [r7, #20]
  17066. 8006cf4: 4413 add r3, r2
  17067. 8006cf6: f503 6310 add.w r3, r3, #2304 ; 0x900
  17068. 8006cfa: 681b ldr r3, [r3, #0]
  17069. 8006cfc: 693a ldr r2, [r7, #16]
  17070. 8006cfe: 0151 lsls r1, r2, #5
  17071. 8006d00: 697a ldr r2, [r7, #20]
  17072. 8006d02: 440a add r2, r1
  17073. 8006d04: f502 6210 add.w r2, r2, #2304 ; 0x900
  17074. 8006d08: f043 4304 orr.w r3, r3, #2214592512 ; 0x84000000
  17075. 8006d0c: 6013 str r3, [r2, #0]
  17076. /* Enable the Tx FIFO Empty Interrupt for this EP */
  17077. if (ep->xfer_len > 0U)
  17078. 8006d0e: 68bb ldr r3, [r7, #8]
  17079. 8006d10: 695b ldr r3, [r3, #20]
  17080. 8006d12: 2b00 cmp r3, #0
  17081. 8006d14: d07e beq.n 8006e14 <USB_EP0StartXfer+0x298>
  17082. {
  17083. USBx_DEVICE->DIEPEMPMSK |= 1UL << (ep->num & EP_ADDR_MSK);
  17084. 8006d16: 697b ldr r3, [r7, #20]
  17085. 8006d18: f503 6300 add.w r3, r3, #2048 ; 0x800
  17086. 8006d1c: 6b5a ldr r2, [r3, #52] ; 0x34
  17087. 8006d1e: 68bb ldr r3, [r7, #8]
  17088. 8006d20: 781b ldrb r3, [r3, #0]
  17089. 8006d22: f003 030f and.w r3, r3, #15
  17090. 8006d26: 2101 movs r1, #1
  17091. 8006d28: fa01 f303 lsl.w r3, r1, r3
  17092. 8006d2c: 6979 ldr r1, [r7, #20]
  17093. 8006d2e: f501 6100 add.w r1, r1, #2048 ; 0x800
  17094. 8006d32: 4313 orrs r3, r2
  17095. 8006d34: 634b str r3, [r1, #52] ; 0x34
  17096. 8006d36: e06d b.n 8006e14 <USB_EP0StartXfer+0x298>
  17097. {
  17098. /* Program the transfer size and packet count as follows:
  17099. * pktcnt = N
  17100. * xfersize = N * maxpacket
  17101. */
  17102. USBx_OUTEP(epnum)->DOEPTSIZ &= ~(USB_OTG_DOEPTSIZ_XFRSIZ);
  17103. 8006d38: 693b ldr r3, [r7, #16]
  17104. 8006d3a: 015a lsls r2, r3, #5
  17105. 8006d3c: 697b ldr r3, [r7, #20]
  17106. 8006d3e: 4413 add r3, r2
  17107. 8006d40: f503 6330 add.w r3, r3, #2816 ; 0xb00
  17108. 8006d44: 691a ldr r2, [r3, #16]
  17109. 8006d46: 693b ldr r3, [r7, #16]
  17110. 8006d48: 0159 lsls r1, r3, #5
  17111. 8006d4a: 697b ldr r3, [r7, #20]
  17112. 8006d4c: 440b add r3, r1
  17113. 8006d4e: f503 6330 add.w r3, r3, #2816 ; 0xb00
  17114. 8006d52: 4619 mov r1, r3
  17115. 8006d54: 4b34 ldr r3, [pc, #208] ; (8006e28 <USB_EP0StartXfer+0x2ac>)
  17116. 8006d56: 4013 ands r3, r2
  17117. 8006d58: 610b str r3, [r1, #16]
  17118. USBx_OUTEP(epnum)->DOEPTSIZ &= ~(USB_OTG_DOEPTSIZ_PKTCNT);
  17119. 8006d5a: 693b ldr r3, [r7, #16]
  17120. 8006d5c: 015a lsls r2, r3, #5
  17121. 8006d5e: 697b ldr r3, [r7, #20]
  17122. 8006d60: 4413 add r3, r2
  17123. 8006d62: f503 6330 add.w r3, r3, #2816 ; 0xb00
  17124. 8006d66: 691a ldr r2, [r3, #16]
  17125. 8006d68: 693b ldr r3, [r7, #16]
  17126. 8006d6a: 0159 lsls r1, r3, #5
  17127. 8006d6c: 697b ldr r3, [r7, #20]
  17128. 8006d6e: 440b add r3, r1
  17129. 8006d70: f503 6330 add.w r3, r3, #2816 ; 0xb00
  17130. 8006d74: 4619 mov r1, r3
  17131. 8006d76: 4b2b ldr r3, [pc, #172] ; (8006e24 <USB_EP0StartXfer+0x2a8>)
  17132. 8006d78: 4013 ands r3, r2
  17133. 8006d7a: 610b str r3, [r1, #16]
  17134. if (ep->xfer_len > 0U)
  17135. 8006d7c: 68bb ldr r3, [r7, #8]
  17136. 8006d7e: 695b ldr r3, [r3, #20]
  17137. 8006d80: 2b00 cmp r3, #0
  17138. 8006d82: d003 beq.n 8006d8c <USB_EP0StartXfer+0x210>
  17139. {
  17140. ep->xfer_len = ep->maxpacket;
  17141. 8006d84: 68bb ldr r3, [r7, #8]
  17142. 8006d86: 689a ldr r2, [r3, #8]
  17143. 8006d88: 68bb ldr r3, [r7, #8]
  17144. 8006d8a: 615a str r2, [r3, #20]
  17145. }
  17146. USBx_OUTEP(epnum)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_PKTCNT & (1U << 19));
  17147. 8006d8c: 693b ldr r3, [r7, #16]
  17148. 8006d8e: 015a lsls r2, r3, #5
  17149. 8006d90: 697b ldr r3, [r7, #20]
  17150. 8006d92: 4413 add r3, r2
  17151. 8006d94: f503 6330 add.w r3, r3, #2816 ; 0xb00
  17152. 8006d98: 691b ldr r3, [r3, #16]
  17153. 8006d9a: 693a ldr r2, [r7, #16]
  17154. 8006d9c: 0151 lsls r1, r2, #5
  17155. 8006d9e: 697a ldr r2, [r7, #20]
  17156. 8006da0: 440a add r2, r1
  17157. 8006da2: f502 6230 add.w r2, r2, #2816 ; 0xb00
  17158. 8006da6: f443 2300 orr.w r3, r3, #524288 ; 0x80000
  17159. 8006daa: 6113 str r3, [r2, #16]
  17160. USBx_OUTEP(epnum)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_XFRSIZ & (ep->maxpacket));
  17161. 8006dac: 693b ldr r3, [r7, #16]
  17162. 8006dae: 015a lsls r2, r3, #5
  17163. 8006db0: 697b ldr r3, [r7, #20]
  17164. 8006db2: 4413 add r3, r2
  17165. 8006db4: f503 6330 add.w r3, r3, #2816 ; 0xb00
  17166. 8006db8: 691a ldr r2, [r3, #16]
  17167. 8006dba: 68bb ldr r3, [r7, #8]
  17168. 8006dbc: 689b ldr r3, [r3, #8]
  17169. 8006dbe: f3c3 0312 ubfx r3, r3, #0, #19
  17170. 8006dc2: 6939 ldr r1, [r7, #16]
  17171. 8006dc4: 0148 lsls r0, r1, #5
  17172. 8006dc6: 6979 ldr r1, [r7, #20]
  17173. 8006dc8: 4401 add r1, r0
  17174. 8006dca: f501 6130 add.w r1, r1, #2816 ; 0xb00
  17175. 8006dce: 4313 orrs r3, r2
  17176. 8006dd0: 610b str r3, [r1, #16]
  17177. if (dma == 1U)
  17178. 8006dd2: 79fb ldrb r3, [r7, #7]
  17179. 8006dd4: 2b01 cmp r3, #1
  17180. 8006dd6: d10d bne.n 8006df4 <USB_EP0StartXfer+0x278>
  17181. {
  17182. if ((uint32_t)ep->xfer_buff != 0U)
  17183. 8006dd8: 68bb ldr r3, [r7, #8]
  17184. 8006dda: 68db ldr r3, [r3, #12]
  17185. 8006ddc: 2b00 cmp r3, #0
  17186. 8006dde: d009 beq.n 8006df4 <USB_EP0StartXfer+0x278>
  17187. {
  17188. USBx_OUTEP(epnum)->DOEPDMA = (uint32_t)(ep->xfer_buff);
  17189. 8006de0: 68bb ldr r3, [r7, #8]
  17190. 8006de2: 68d9 ldr r1, [r3, #12]
  17191. 8006de4: 693b ldr r3, [r7, #16]
  17192. 8006de6: 015a lsls r2, r3, #5
  17193. 8006de8: 697b ldr r3, [r7, #20]
  17194. 8006dea: 4413 add r3, r2
  17195. 8006dec: f503 6330 add.w r3, r3, #2816 ; 0xb00
  17196. 8006df0: 460a mov r2, r1
  17197. 8006df2: 615a str r2, [r3, #20]
  17198. }
  17199. }
  17200. /* EP enable */
  17201. USBx_OUTEP(epnum)->DOEPCTL |= (USB_OTG_DOEPCTL_CNAK | USB_OTG_DOEPCTL_EPENA);
  17202. 8006df4: 693b ldr r3, [r7, #16]
  17203. 8006df6: 015a lsls r2, r3, #5
  17204. 8006df8: 697b ldr r3, [r7, #20]
  17205. 8006dfa: 4413 add r3, r2
  17206. 8006dfc: f503 6330 add.w r3, r3, #2816 ; 0xb00
  17207. 8006e00: 681b ldr r3, [r3, #0]
  17208. 8006e02: 693a ldr r2, [r7, #16]
  17209. 8006e04: 0151 lsls r1, r2, #5
  17210. 8006e06: 697a ldr r2, [r7, #20]
  17211. 8006e08: 440a add r2, r1
  17212. 8006e0a: f502 6230 add.w r2, r2, #2816 ; 0xb00
  17213. 8006e0e: f043 4304 orr.w r3, r3, #2214592512 ; 0x84000000
  17214. 8006e12: 6013 str r3, [r2, #0]
  17215. }
  17216. return HAL_OK;
  17217. 8006e14: 2300 movs r3, #0
  17218. }
  17219. 8006e16: 4618 mov r0, r3
  17220. 8006e18: 371c adds r7, #28
  17221. 8006e1a: 46bd mov sp, r7
  17222. 8006e1c: f85d 7b04 ldr.w r7, [sp], #4
  17223. 8006e20: 4770 bx lr
  17224. 8006e22: bf00 nop
  17225. 8006e24: e007ffff .word 0xe007ffff
  17226. 8006e28: fff80000 .word 0xfff80000
  17227. 08006e2c <USB_WritePacket>:
  17228. * 1 : DMA feature used
  17229. * @retval HAL status
  17230. */
  17231. HAL_StatusTypeDef USB_WritePacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *src,
  17232. uint8_t ch_ep_num, uint16_t len, uint8_t dma)
  17233. {
  17234. 8006e2c: b480 push {r7}
  17235. 8006e2e: b089 sub sp, #36 ; 0x24
  17236. 8006e30: af00 add r7, sp, #0
  17237. 8006e32: 60f8 str r0, [r7, #12]
  17238. 8006e34: 60b9 str r1, [r7, #8]
  17239. 8006e36: 4611 mov r1, r2
  17240. 8006e38: 461a mov r2, r3
  17241. 8006e3a: 460b mov r3, r1
  17242. 8006e3c: 71fb strb r3, [r7, #7]
  17243. 8006e3e: 4613 mov r3, r2
  17244. 8006e40: 80bb strh r3, [r7, #4]
  17245. uint32_t USBx_BASE = (uint32_t)USBx;
  17246. 8006e42: 68fb ldr r3, [r7, #12]
  17247. 8006e44: 617b str r3, [r7, #20]
  17248. uint8_t *pSrc = src;
  17249. 8006e46: 68bb ldr r3, [r7, #8]
  17250. 8006e48: 61fb str r3, [r7, #28]
  17251. uint32_t count32b;
  17252. uint32_t i;
  17253. if (dma == 0U)
  17254. 8006e4a: f897 3028 ldrb.w r3, [r7, #40] ; 0x28
  17255. 8006e4e: 2b00 cmp r3, #0
  17256. 8006e50: d123 bne.n 8006e9a <USB_WritePacket+0x6e>
  17257. {
  17258. count32b = ((uint32_t)len + 3U) / 4U;
  17259. 8006e52: 88bb ldrh r3, [r7, #4]
  17260. 8006e54: 3303 adds r3, #3
  17261. 8006e56: 089b lsrs r3, r3, #2
  17262. 8006e58: 613b str r3, [r7, #16]
  17263. for (i = 0U; i < count32b; i++)
  17264. 8006e5a: 2300 movs r3, #0
  17265. 8006e5c: 61bb str r3, [r7, #24]
  17266. 8006e5e: e018 b.n 8006e92 <USB_WritePacket+0x66>
  17267. {
  17268. USBx_DFIFO((uint32_t)ch_ep_num) = __UNALIGNED_UINT32_READ(pSrc);
  17269. 8006e60: 79fb ldrb r3, [r7, #7]
  17270. 8006e62: 031a lsls r2, r3, #12
  17271. 8006e64: 697b ldr r3, [r7, #20]
  17272. 8006e66: 4413 add r3, r2
  17273. 8006e68: f503 5380 add.w r3, r3, #4096 ; 0x1000
  17274. 8006e6c: 461a mov r2, r3
  17275. 8006e6e: 69fb ldr r3, [r7, #28]
  17276. 8006e70: 681b ldr r3, [r3, #0]
  17277. 8006e72: 6013 str r3, [r2, #0]
  17278. pSrc++;
  17279. 8006e74: 69fb ldr r3, [r7, #28]
  17280. 8006e76: 3301 adds r3, #1
  17281. 8006e78: 61fb str r3, [r7, #28]
  17282. pSrc++;
  17283. 8006e7a: 69fb ldr r3, [r7, #28]
  17284. 8006e7c: 3301 adds r3, #1
  17285. 8006e7e: 61fb str r3, [r7, #28]
  17286. pSrc++;
  17287. 8006e80: 69fb ldr r3, [r7, #28]
  17288. 8006e82: 3301 adds r3, #1
  17289. 8006e84: 61fb str r3, [r7, #28]
  17290. pSrc++;
  17291. 8006e86: 69fb ldr r3, [r7, #28]
  17292. 8006e88: 3301 adds r3, #1
  17293. 8006e8a: 61fb str r3, [r7, #28]
  17294. for (i = 0U; i < count32b; i++)
  17295. 8006e8c: 69bb ldr r3, [r7, #24]
  17296. 8006e8e: 3301 adds r3, #1
  17297. 8006e90: 61bb str r3, [r7, #24]
  17298. 8006e92: 69ba ldr r2, [r7, #24]
  17299. 8006e94: 693b ldr r3, [r7, #16]
  17300. 8006e96: 429a cmp r2, r3
  17301. 8006e98: d3e2 bcc.n 8006e60 <USB_WritePacket+0x34>
  17302. }
  17303. }
  17304. return HAL_OK;
  17305. 8006e9a: 2300 movs r3, #0
  17306. }
  17307. 8006e9c: 4618 mov r0, r3
  17308. 8006e9e: 3724 adds r7, #36 ; 0x24
  17309. 8006ea0: 46bd mov sp, r7
  17310. 8006ea2: f85d 7b04 ldr.w r7, [sp], #4
  17311. 8006ea6: 4770 bx lr
  17312. 08006ea8 <USB_ReadPacket>:
  17313. * @param dest source pointer
  17314. * @param len Number of bytes to read
  17315. * @retval pointer to destination buffer
  17316. */
  17317. void *USB_ReadPacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len)
  17318. {
  17319. 8006ea8: b480 push {r7}
  17320. 8006eaa: b08b sub sp, #44 ; 0x2c
  17321. 8006eac: af00 add r7, sp, #0
  17322. 8006eae: 60f8 str r0, [r7, #12]
  17323. 8006eb0: 60b9 str r1, [r7, #8]
  17324. 8006eb2: 4613 mov r3, r2
  17325. 8006eb4: 80fb strh r3, [r7, #6]
  17326. uint32_t USBx_BASE = (uint32_t)USBx;
  17327. 8006eb6: 68fb ldr r3, [r7, #12]
  17328. 8006eb8: 61bb str r3, [r7, #24]
  17329. uint8_t *pDest = dest;
  17330. 8006eba: 68bb ldr r3, [r7, #8]
  17331. 8006ebc: 627b str r3, [r7, #36] ; 0x24
  17332. uint32_t pData;
  17333. uint32_t i;
  17334. uint32_t count32b = (uint32_t)len >> 2U;
  17335. 8006ebe: 88fb ldrh r3, [r7, #6]
  17336. 8006ec0: 089b lsrs r3, r3, #2
  17337. 8006ec2: b29b uxth r3, r3
  17338. 8006ec4: 617b str r3, [r7, #20]
  17339. uint16_t remaining_bytes = len % 4U;
  17340. 8006ec6: 88fb ldrh r3, [r7, #6]
  17341. 8006ec8: f003 0303 and.w r3, r3, #3
  17342. 8006ecc: 83fb strh r3, [r7, #30]
  17343. for (i = 0U; i < count32b; i++)
  17344. 8006ece: 2300 movs r3, #0
  17345. 8006ed0: 623b str r3, [r7, #32]
  17346. 8006ed2: e014 b.n 8006efe <USB_ReadPacket+0x56>
  17347. {
  17348. __UNALIGNED_UINT32_WRITE(pDest, USBx_DFIFO(0U));
  17349. 8006ed4: 69bb ldr r3, [r7, #24]
  17350. 8006ed6: f503 5380 add.w r3, r3, #4096 ; 0x1000
  17351. 8006eda: 681a ldr r2, [r3, #0]
  17352. 8006edc: 6a7b ldr r3, [r7, #36] ; 0x24
  17353. 8006ede: 601a str r2, [r3, #0]
  17354. pDest++;
  17355. 8006ee0: 6a7b ldr r3, [r7, #36] ; 0x24
  17356. 8006ee2: 3301 adds r3, #1
  17357. 8006ee4: 627b str r3, [r7, #36] ; 0x24
  17358. pDest++;
  17359. 8006ee6: 6a7b ldr r3, [r7, #36] ; 0x24
  17360. 8006ee8: 3301 adds r3, #1
  17361. 8006eea: 627b str r3, [r7, #36] ; 0x24
  17362. pDest++;
  17363. 8006eec: 6a7b ldr r3, [r7, #36] ; 0x24
  17364. 8006eee: 3301 adds r3, #1
  17365. 8006ef0: 627b str r3, [r7, #36] ; 0x24
  17366. pDest++;
  17367. 8006ef2: 6a7b ldr r3, [r7, #36] ; 0x24
  17368. 8006ef4: 3301 adds r3, #1
  17369. 8006ef6: 627b str r3, [r7, #36] ; 0x24
  17370. for (i = 0U; i < count32b; i++)
  17371. 8006ef8: 6a3b ldr r3, [r7, #32]
  17372. 8006efa: 3301 adds r3, #1
  17373. 8006efc: 623b str r3, [r7, #32]
  17374. 8006efe: 6a3a ldr r2, [r7, #32]
  17375. 8006f00: 697b ldr r3, [r7, #20]
  17376. 8006f02: 429a cmp r2, r3
  17377. 8006f04: d3e6 bcc.n 8006ed4 <USB_ReadPacket+0x2c>
  17378. }
  17379. /* When Number of data is not word aligned, read the remaining byte */
  17380. if (remaining_bytes != 0U)
  17381. 8006f06: 8bfb ldrh r3, [r7, #30]
  17382. 8006f08: 2b00 cmp r3, #0
  17383. 8006f0a: d01e beq.n 8006f4a <USB_ReadPacket+0xa2>
  17384. {
  17385. i = 0U;
  17386. 8006f0c: 2300 movs r3, #0
  17387. 8006f0e: 623b str r3, [r7, #32]
  17388. __UNALIGNED_UINT32_WRITE(&pData, USBx_DFIFO(0U));
  17389. 8006f10: 69bb ldr r3, [r7, #24]
  17390. 8006f12: f503 5380 add.w r3, r3, #4096 ; 0x1000
  17391. 8006f16: 461a mov r2, r3
  17392. 8006f18: f107 0310 add.w r3, r7, #16
  17393. 8006f1c: 6812 ldr r2, [r2, #0]
  17394. 8006f1e: 601a str r2, [r3, #0]
  17395. do
  17396. {
  17397. *(uint8_t *)pDest = (uint8_t)(pData >> (8U * (uint8_t)(i)));
  17398. 8006f20: 693a ldr r2, [r7, #16]
  17399. 8006f22: 6a3b ldr r3, [r7, #32]
  17400. 8006f24: b2db uxtb r3, r3
  17401. 8006f26: 00db lsls r3, r3, #3
  17402. 8006f28: fa22 f303 lsr.w r3, r2, r3
  17403. 8006f2c: b2da uxtb r2, r3
  17404. 8006f2e: 6a7b ldr r3, [r7, #36] ; 0x24
  17405. 8006f30: 701a strb r2, [r3, #0]
  17406. i++;
  17407. 8006f32: 6a3b ldr r3, [r7, #32]
  17408. 8006f34: 3301 adds r3, #1
  17409. 8006f36: 623b str r3, [r7, #32]
  17410. pDest++;
  17411. 8006f38: 6a7b ldr r3, [r7, #36] ; 0x24
  17412. 8006f3a: 3301 adds r3, #1
  17413. 8006f3c: 627b str r3, [r7, #36] ; 0x24
  17414. remaining_bytes--;
  17415. 8006f3e: 8bfb ldrh r3, [r7, #30]
  17416. 8006f40: 3b01 subs r3, #1
  17417. 8006f42: 83fb strh r3, [r7, #30]
  17418. } while (remaining_bytes != 0U);
  17419. 8006f44: 8bfb ldrh r3, [r7, #30]
  17420. 8006f46: 2b00 cmp r3, #0
  17421. 8006f48: d1ea bne.n 8006f20 <USB_ReadPacket+0x78>
  17422. }
  17423. return ((void *)pDest);
  17424. 8006f4a: 6a7b ldr r3, [r7, #36] ; 0x24
  17425. }
  17426. 8006f4c: 4618 mov r0, r3
  17427. 8006f4e: 372c adds r7, #44 ; 0x2c
  17428. 8006f50: 46bd mov sp, r7
  17429. 8006f52: f85d 7b04 ldr.w r7, [sp], #4
  17430. 8006f56: 4770 bx lr
  17431. 08006f58 <USB_EPSetStall>:
  17432. * @param USBx Selected device
  17433. * @param ep pointer to endpoint structure
  17434. * @retval HAL status
  17435. */
  17436. HAL_StatusTypeDef USB_EPSetStall(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep)
  17437. {
  17438. 8006f58: b480 push {r7}
  17439. 8006f5a: b085 sub sp, #20
  17440. 8006f5c: af00 add r7, sp, #0
  17441. 8006f5e: 6078 str r0, [r7, #4]
  17442. 8006f60: 6039 str r1, [r7, #0]
  17443. uint32_t USBx_BASE = (uint32_t)USBx;
  17444. 8006f62: 687b ldr r3, [r7, #4]
  17445. 8006f64: 60fb str r3, [r7, #12]
  17446. uint32_t epnum = (uint32_t)ep->num;
  17447. 8006f66: 683b ldr r3, [r7, #0]
  17448. 8006f68: 781b ldrb r3, [r3, #0]
  17449. 8006f6a: 60bb str r3, [r7, #8]
  17450. if (ep->is_in == 1U)
  17451. 8006f6c: 683b ldr r3, [r7, #0]
  17452. 8006f6e: 785b ldrb r3, [r3, #1]
  17453. 8006f70: 2b01 cmp r3, #1
  17454. 8006f72: d12c bne.n 8006fce <USB_EPSetStall+0x76>
  17455. {
  17456. if (((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == 0U) && (epnum != 0U))
  17457. 8006f74: 68bb ldr r3, [r7, #8]
  17458. 8006f76: 015a lsls r2, r3, #5
  17459. 8006f78: 68fb ldr r3, [r7, #12]
  17460. 8006f7a: 4413 add r3, r2
  17461. 8006f7c: f503 6310 add.w r3, r3, #2304 ; 0x900
  17462. 8006f80: 681b ldr r3, [r3, #0]
  17463. 8006f82: 2b00 cmp r3, #0
  17464. 8006f84: db12 blt.n 8006fac <USB_EPSetStall+0x54>
  17465. 8006f86: 68bb ldr r3, [r7, #8]
  17466. 8006f88: 2b00 cmp r3, #0
  17467. 8006f8a: d00f beq.n 8006fac <USB_EPSetStall+0x54>
  17468. {
  17469. USBx_INEP(epnum)->DIEPCTL &= ~(USB_OTG_DIEPCTL_EPDIS);
  17470. 8006f8c: 68bb ldr r3, [r7, #8]
  17471. 8006f8e: 015a lsls r2, r3, #5
  17472. 8006f90: 68fb ldr r3, [r7, #12]
  17473. 8006f92: 4413 add r3, r2
  17474. 8006f94: f503 6310 add.w r3, r3, #2304 ; 0x900
  17475. 8006f98: 681b ldr r3, [r3, #0]
  17476. 8006f9a: 68ba ldr r2, [r7, #8]
  17477. 8006f9c: 0151 lsls r1, r2, #5
  17478. 8006f9e: 68fa ldr r2, [r7, #12]
  17479. 8006fa0: 440a add r2, r1
  17480. 8006fa2: f502 6210 add.w r2, r2, #2304 ; 0x900
  17481. 8006fa6: f023 4380 bic.w r3, r3, #1073741824 ; 0x40000000
  17482. 8006faa: 6013 str r3, [r2, #0]
  17483. }
  17484. USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_STALL;
  17485. 8006fac: 68bb ldr r3, [r7, #8]
  17486. 8006fae: 015a lsls r2, r3, #5
  17487. 8006fb0: 68fb ldr r3, [r7, #12]
  17488. 8006fb2: 4413 add r3, r2
  17489. 8006fb4: f503 6310 add.w r3, r3, #2304 ; 0x900
  17490. 8006fb8: 681b ldr r3, [r3, #0]
  17491. 8006fba: 68ba ldr r2, [r7, #8]
  17492. 8006fbc: 0151 lsls r1, r2, #5
  17493. 8006fbe: 68fa ldr r2, [r7, #12]
  17494. 8006fc0: 440a add r2, r1
  17495. 8006fc2: f502 6210 add.w r2, r2, #2304 ; 0x900
  17496. 8006fc6: f443 1300 orr.w r3, r3, #2097152 ; 0x200000
  17497. 8006fca: 6013 str r3, [r2, #0]
  17498. 8006fcc: e02b b.n 8007026 <USB_EPSetStall+0xce>
  17499. }
  17500. else
  17501. {
  17502. if (((USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == 0U) && (epnum != 0U))
  17503. 8006fce: 68bb ldr r3, [r7, #8]
  17504. 8006fd0: 015a lsls r2, r3, #5
  17505. 8006fd2: 68fb ldr r3, [r7, #12]
  17506. 8006fd4: 4413 add r3, r2
  17507. 8006fd6: f503 6330 add.w r3, r3, #2816 ; 0xb00
  17508. 8006fda: 681b ldr r3, [r3, #0]
  17509. 8006fdc: 2b00 cmp r3, #0
  17510. 8006fde: db12 blt.n 8007006 <USB_EPSetStall+0xae>
  17511. 8006fe0: 68bb ldr r3, [r7, #8]
  17512. 8006fe2: 2b00 cmp r3, #0
  17513. 8006fe4: d00f beq.n 8007006 <USB_EPSetStall+0xae>
  17514. {
  17515. USBx_OUTEP(epnum)->DOEPCTL &= ~(USB_OTG_DOEPCTL_EPDIS);
  17516. 8006fe6: 68bb ldr r3, [r7, #8]
  17517. 8006fe8: 015a lsls r2, r3, #5
  17518. 8006fea: 68fb ldr r3, [r7, #12]
  17519. 8006fec: 4413 add r3, r2
  17520. 8006fee: f503 6330 add.w r3, r3, #2816 ; 0xb00
  17521. 8006ff2: 681b ldr r3, [r3, #0]
  17522. 8006ff4: 68ba ldr r2, [r7, #8]
  17523. 8006ff6: 0151 lsls r1, r2, #5
  17524. 8006ff8: 68fa ldr r2, [r7, #12]
  17525. 8006ffa: 440a add r2, r1
  17526. 8006ffc: f502 6230 add.w r2, r2, #2816 ; 0xb00
  17527. 8007000: f023 4380 bic.w r3, r3, #1073741824 ; 0x40000000
  17528. 8007004: 6013 str r3, [r2, #0]
  17529. }
  17530. USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_STALL;
  17531. 8007006: 68bb ldr r3, [r7, #8]
  17532. 8007008: 015a lsls r2, r3, #5
  17533. 800700a: 68fb ldr r3, [r7, #12]
  17534. 800700c: 4413 add r3, r2
  17535. 800700e: f503 6330 add.w r3, r3, #2816 ; 0xb00
  17536. 8007012: 681b ldr r3, [r3, #0]
  17537. 8007014: 68ba ldr r2, [r7, #8]
  17538. 8007016: 0151 lsls r1, r2, #5
  17539. 8007018: 68fa ldr r2, [r7, #12]
  17540. 800701a: 440a add r2, r1
  17541. 800701c: f502 6230 add.w r2, r2, #2816 ; 0xb00
  17542. 8007020: f443 1300 orr.w r3, r3, #2097152 ; 0x200000
  17543. 8007024: 6013 str r3, [r2, #0]
  17544. }
  17545. return HAL_OK;
  17546. 8007026: 2300 movs r3, #0
  17547. }
  17548. 8007028: 4618 mov r0, r3
  17549. 800702a: 3714 adds r7, #20
  17550. 800702c: 46bd mov sp, r7
  17551. 800702e: f85d 7b04 ldr.w r7, [sp], #4
  17552. 8007032: 4770 bx lr
  17553. 08007034 <USB_EPClearStall>:
  17554. * @param USBx Selected device
  17555. * @param ep pointer to endpoint structure
  17556. * @retval HAL status
  17557. */
  17558. HAL_StatusTypeDef USB_EPClearStall(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep)
  17559. {
  17560. 8007034: b480 push {r7}
  17561. 8007036: b085 sub sp, #20
  17562. 8007038: af00 add r7, sp, #0
  17563. 800703a: 6078 str r0, [r7, #4]
  17564. 800703c: 6039 str r1, [r7, #0]
  17565. uint32_t USBx_BASE = (uint32_t)USBx;
  17566. 800703e: 687b ldr r3, [r7, #4]
  17567. 8007040: 60fb str r3, [r7, #12]
  17568. uint32_t epnum = (uint32_t)ep->num;
  17569. 8007042: 683b ldr r3, [r7, #0]
  17570. 8007044: 781b ldrb r3, [r3, #0]
  17571. 8007046: 60bb str r3, [r7, #8]
  17572. if (ep->is_in == 1U)
  17573. 8007048: 683b ldr r3, [r7, #0]
  17574. 800704a: 785b ldrb r3, [r3, #1]
  17575. 800704c: 2b01 cmp r3, #1
  17576. 800704e: d128 bne.n 80070a2 <USB_EPClearStall+0x6e>
  17577. {
  17578. USBx_INEP(epnum)->DIEPCTL &= ~USB_OTG_DIEPCTL_STALL;
  17579. 8007050: 68bb ldr r3, [r7, #8]
  17580. 8007052: 015a lsls r2, r3, #5
  17581. 8007054: 68fb ldr r3, [r7, #12]
  17582. 8007056: 4413 add r3, r2
  17583. 8007058: f503 6310 add.w r3, r3, #2304 ; 0x900
  17584. 800705c: 681b ldr r3, [r3, #0]
  17585. 800705e: 68ba ldr r2, [r7, #8]
  17586. 8007060: 0151 lsls r1, r2, #5
  17587. 8007062: 68fa ldr r2, [r7, #12]
  17588. 8007064: 440a add r2, r1
  17589. 8007066: f502 6210 add.w r2, r2, #2304 ; 0x900
  17590. 800706a: f423 1300 bic.w r3, r3, #2097152 ; 0x200000
  17591. 800706e: 6013 str r3, [r2, #0]
  17592. if ((ep->type == EP_TYPE_INTR) || (ep->type == EP_TYPE_BULK))
  17593. 8007070: 683b ldr r3, [r7, #0]
  17594. 8007072: 78db ldrb r3, [r3, #3]
  17595. 8007074: 2b03 cmp r3, #3
  17596. 8007076: d003 beq.n 8007080 <USB_EPClearStall+0x4c>
  17597. 8007078: 683b ldr r3, [r7, #0]
  17598. 800707a: 78db ldrb r3, [r3, #3]
  17599. 800707c: 2b02 cmp r3, #2
  17600. 800707e: d138 bne.n 80070f2 <USB_EPClearStall+0xbe>
  17601. {
  17602. USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM; /* DATA0 */
  17603. 8007080: 68bb ldr r3, [r7, #8]
  17604. 8007082: 015a lsls r2, r3, #5
  17605. 8007084: 68fb ldr r3, [r7, #12]
  17606. 8007086: 4413 add r3, r2
  17607. 8007088: f503 6310 add.w r3, r3, #2304 ; 0x900
  17608. 800708c: 681b ldr r3, [r3, #0]
  17609. 800708e: 68ba ldr r2, [r7, #8]
  17610. 8007090: 0151 lsls r1, r2, #5
  17611. 8007092: 68fa ldr r2, [r7, #12]
  17612. 8007094: 440a add r2, r1
  17613. 8007096: f502 6210 add.w r2, r2, #2304 ; 0x900
  17614. 800709a: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000
  17615. 800709e: 6013 str r3, [r2, #0]
  17616. 80070a0: e027 b.n 80070f2 <USB_EPClearStall+0xbe>
  17617. }
  17618. }
  17619. else
  17620. {
  17621. USBx_OUTEP(epnum)->DOEPCTL &= ~USB_OTG_DOEPCTL_STALL;
  17622. 80070a2: 68bb ldr r3, [r7, #8]
  17623. 80070a4: 015a lsls r2, r3, #5
  17624. 80070a6: 68fb ldr r3, [r7, #12]
  17625. 80070a8: 4413 add r3, r2
  17626. 80070aa: f503 6330 add.w r3, r3, #2816 ; 0xb00
  17627. 80070ae: 681b ldr r3, [r3, #0]
  17628. 80070b0: 68ba ldr r2, [r7, #8]
  17629. 80070b2: 0151 lsls r1, r2, #5
  17630. 80070b4: 68fa ldr r2, [r7, #12]
  17631. 80070b6: 440a add r2, r1
  17632. 80070b8: f502 6230 add.w r2, r2, #2816 ; 0xb00
  17633. 80070bc: f423 1300 bic.w r3, r3, #2097152 ; 0x200000
  17634. 80070c0: 6013 str r3, [r2, #0]
  17635. if ((ep->type == EP_TYPE_INTR) || (ep->type == EP_TYPE_BULK))
  17636. 80070c2: 683b ldr r3, [r7, #0]
  17637. 80070c4: 78db ldrb r3, [r3, #3]
  17638. 80070c6: 2b03 cmp r3, #3
  17639. 80070c8: d003 beq.n 80070d2 <USB_EPClearStall+0x9e>
  17640. 80070ca: 683b ldr r3, [r7, #0]
  17641. 80070cc: 78db ldrb r3, [r3, #3]
  17642. 80070ce: 2b02 cmp r3, #2
  17643. 80070d0: d10f bne.n 80070f2 <USB_EPClearStall+0xbe>
  17644. {
  17645. USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SD0PID_SEVNFRM; /* DATA0 */
  17646. 80070d2: 68bb ldr r3, [r7, #8]
  17647. 80070d4: 015a lsls r2, r3, #5
  17648. 80070d6: 68fb ldr r3, [r7, #12]
  17649. 80070d8: 4413 add r3, r2
  17650. 80070da: f503 6330 add.w r3, r3, #2816 ; 0xb00
  17651. 80070de: 681b ldr r3, [r3, #0]
  17652. 80070e0: 68ba ldr r2, [r7, #8]
  17653. 80070e2: 0151 lsls r1, r2, #5
  17654. 80070e4: 68fa ldr r2, [r7, #12]
  17655. 80070e6: 440a add r2, r1
  17656. 80070e8: f502 6230 add.w r2, r2, #2816 ; 0xb00
  17657. 80070ec: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000
  17658. 80070f0: 6013 str r3, [r2, #0]
  17659. }
  17660. }
  17661. return HAL_OK;
  17662. 80070f2: 2300 movs r3, #0
  17663. }
  17664. 80070f4: 4618 mov r0, r3
  17665. 80070f6: 3714 adds r7, #20
  17666. 80070f8: 46bd mov sp, r7
  17667. 80070fa: f85d 7b04 ldr.w r7, [sp], #4
  17668. 80070fe: 4770 bx lr
  17669. 08007100 <USB_SetDevAddress>:
  17670. * @param address new device address to be assigned
  17671. * This parameter can be a value from 0 to 255
  17672. * @retval HAL status
  17673. */
  17674. HAL_StatusTypeDef USB_SetDevAddress(USB_OTG_GlobalTypeDef *USBx, uint8_t address)
  17675. {
  17676. 8007100: b480 push {r7}
  17677. 8007102: b085 sub sp, #20
  17678. 8007104: af00 add r7, sp, #0
  17679. 8007106: 6078 str r0, [r7, #4]
  17680. 8007108: 460b mov r3, r1
  17681. 800710a: 70fb strb r3, [r7, #3]
  17682. uint32_t USBx_BASE = (uint32_t)USBx;
  17683. 800710c: 687b ldr r3, [r7, #4]
  17684. 800710e: 60fb str r3, [r7, #12]
  17685. USBx_DEVICE->DCFG &= ~(USB_OTG_DCFG_DAD);
  17686. 8007110: 68fb ldr r3, [r7, #12]
  17687. 8007112: f503 6300 add.w r3, r3, #2048 ; 0x800
  17688. 8007116: 681b ldr r3, [r3, #0]
  17689. 8007118: 68fa ldr r2, [r7, #12]
  17690. 800711a: f502 6200 add.w r2, r2, #2048 ; 0x800
  17691. 800711e: f423 63fe bic.w r3, r3, #2032 ; 0x7f0
  17692. 8007122: 6013 str r3, [r2, #0]
  17693. USBx_DEVICE->DCFG |= ((uint32_t)address << 4) & USB_OTG_DCFG_DAD;
  17694. 8007124: 68fb ldr r3, [r7, #12]
  17695. 8007126: f503 6300 add.w r3, r3, #2048 ; 0x800
  17696. 800712a: 681a ldr r2, [r3, #0]
  17697. 800712c: 78fb ldrb r3, [r7, #3]
  17698. 800712e: 011b lsls r3, r3, #4
  17699. 8007130: f403 63fe and.w r3, r3, #2032 ; 0x7f0
  17700. 8007134: 68f9 ldr r1, [r7, #12]
  17701. 8007136: f501 6100 add.w r1, r1, #2048 ; 0x800
  17702. 800713a: 4313 orrs r3, r2
  17703. 800713c: 600b str r3, [r1, #0]
  17704. return HAL_OK;
  17705. 800713e: 2300 movs r3, #0
  17706. }
  17707. 8007140: 4618 mov r0, r3
  17708. 8007142: 3714 adds r7, #20
  17709. 8007144: 46bd mov sp, r7
  17710. 8007146: f85d 7b04 ldr.w r7, [sp], #4
  17711. 800714a: 4770 bx lr
  17712. 0800714c <USB_DevConnect>:
  17713. * @brief USB_DevConnect : Connect the USB device by enabling Rpu
  17714. * @param USBx Selected device
  17715. * @retval HAL status
  17716. */
  17717. HAL_StatusTypeDef USB_DevConnect(USB_OTG_GlobalTypeDef *USBx)
  17718. {
  17719. 800714c: b480 push {r7}
  17720. 800714e: b085 sub sp, #20
  17721. 8007150: af00 add r7, sp, #0
  17722. 8007152: 6078 str r0, [r7, #4]
  17723. uint32_t USBx_BASE = (uint32_t)USBx;
  17724. 8007154: 687b ldr r3, [r7, #4]
  17725. 8007156: 60fb str r3, [r7, #12]
  17726. /* In case phy is stopped, ensure to ungate and restore the phy CLK */
  17727. USBx_PCGCCTL &= ~(USB_OTG_PCGCCTL_STOPCLK | USB_OTG_PCGCCTL_GATECLK);
  17728. 8007158: 68fb ldr r3, [r7, #12]
  17729. 800715a: f503 6360 add.w r3, r3, #3584 ; 0xe00
  17730. 800715e: 681b ldr r3, [r3, #0]
  17731. 8007160: 68fa ldr r2, [r7, #12]
  17732. 8007162: f502 6260 add.w r2, r2, #3584 ; 0xe00
  17733. 8007166: f023 0303 bic.w r3, r3, #3
  17734. 800716a: 6013 str r3, [r2, #0]
  17735. USBx_DEVICE->DCTL &= ~USB_OTG_DCTL_SDIS;
  17736. 800716c: 68fb ldr r3, [r7, #12]
  17737. 800716e: f503 6300 add.w r3, r3, #2048 ; 0x800
  17738. 8007172: 685b ldr r3, [r3, #4]
  17739. 8007174: 68fa ldr r2, [r7, #12]
  17740. 8007176: f502 6200 add.w r2, r2, #2048 ; 0x800
  17741. 800717a: f023 0302 bic.w r3, r3, #2
  17742. 800717e: 6053 str r3, [r2, #4]
  17743. return HAL_OK;
  17744. 8007180: 2300 movs r3, #0
  17745. }
  17746. 8007182: 4618 mov r0, r3
  17747. 8007184: 3714 adds r7, #20
  17748. 8007186: 46bd mov sp, r7
  17749. 8007188: f85d 7b04 ldr.w r7, [sp], #4
  17750. 800718c: 4770 bx lr
  17751. 0800718e <USB_DevDisconnect>:
  17752. * @brief USB_DevDisconnect : Disconnect the USB device by disabling Rpu
  17753. * @param USBx Selected device
  17754. * @retval HAL status
  17755. */
  17756. HAL_StatusTypeDef USB_DevDisconnect(USB_OTG_GlobalTypeDef *USBx)
  17757. {
  17758. 800718e: b480 push {r7}
  17759. 8007190: b085 sub sp, #20
  17760. 8007192: af00 add r7, sp, #0
  17761. 8007194: 6078 str r0, [r7, #4]
  17762. uint32_t USBx_BASE = (uint32_t)USBx;
  17763. 8007196: 687b ldr r3, [r7, #4]
  17764. 8007198: 60fb str r3, [r7, #12]
  17765. /* In case phy is stopped, ensure to ungate and restore the phy CLK */
  17766. USBx_PCGCCTL &= ~(USB_OTG_PCGCCTL_STOPCLK | USB_OTG_PCGCCTL_GATECLK);
  17767. 800719a: 68fb ldr r3, [r7, #12]
  17768. 800719c: f503 6360 add.w r3, r3, #3584 ; 0xe00
  17769. 80071a0: 681b ldr r3, [r3, #0]
  17770. 80071a2: 68fa ldr r2, [r7, #12]
  17771. 80071a4: f502 6260 add.w r2, r2, #3584 ; 0xe00
  17772. 80071a8: f023 0303 bic.w r3, r3, #3
  17773. 80071ac: 6013 str r3, [r2, #0]
  17774. USBx_DEVICE->DCTL |= USB_OTG_DCTL_SDIS;
  17775. 80071ae: 68fb ldr r3, [r7, #12]
  17776. 80071b0: f503 6300 add.w r3, r3, #2048 ; 0x800
  17777. 80071b4: 685b ldr r3, [r3, #4]
  17778. 80071b6: 68fa ldr r2, [r7, #12]
  17779. 80071b8: f502 6200 add.w r2, r2, #2048 ; 0x800
  17780. 80071bc: f043 0302 orr.w r3, r3, #2
  17781. 80071c0: 6053 str r3, [r2, #4]
  17782. return HAL_OK;
  17783. 80071c2: 2300 movs r3, #0
  17784. }
  17785. 80071c4: 4618 mov r0, r3
  17786. 80071c6: 3714 adds r7, #20
  17787. 80071c8: 46bd mov sp, r7
  17788. 80071ca: f85d 7b04 ldr.w r7, [sp], #4
  17789. 80071ce: 4770 bx lr
  17790. 080071d0 <USB_ReadInterrupts>:
  17791. * @brief USB_ReadInterrupts: return the global USB interrupt status
  17792. * @param USBx Selected device
  17793. * @retval HAL status
  17794. */
  17795. uint32_t USB_ReadInterrupts(USB_OTG_GlobalTypeDef *USBx)
  17796. {
  17797. 80071d0: b480 push {r7}
  17798. 80071d2: b085 sub sp, #20
  17799. 80071d4: af00 add r7, sp, #0
  17800. 80071d6: 6078 str r0, [r7, #4]
  17801. uint32_t tmpreg;
  17802. tmpreg = USBx->GINTSTS;
  17803. 80071d8: 687b ldr r3, [r7, #4]
  17804. 80071da: 695b ldr r3, [r3, #20]
  17805. 80071dc: 60fb str r3, [r7, #12]
  17806. tmpreg &= USBx->GINTMSK;
  17807. 80071de: 687b ldr r3, [r7, #4]
  17808. 80071e0: 699b ldr r3, [r3, #24]
  17809. 80071e2: 68fa ldr r2, [r7, #12]
  17810. 80071e4: 4013 ands r3, r2
  17811. 80071e6: 60fb str r3, [r7, #12]
  17812. return tmpreg;
  17813. 80071e8: 68fb ldr r3, [r7, #12]
  17814. }
  17815. 80071ea: 4618 mov r0, r3
  17816. 80071ec: 3714 adds r7, #20
  17817. 80071ee: 46bd mov sp, r7
  17818. 80071f0: f85d 7b04 ldr.w r7, [sp], #4
  17819. 80071f4: 4770 bx lr
  17820. 080071f6 <USB_ReadDevAllOutEpInterrupt>:
  17821. * @brief USB_ReadDevAllOutEpInterrupt: return the USB device OUT endpoints interrupt status
  17822. * @param USBx Selected device
  17823. * @retval HAL status
  17824. */
  17825. uint32_t USB_ReadDevAllOutEpInterrupt(USB_OTG_GlobalTypeDef *USBx)
  17826. {
  17827. 80071f6: b480 push {r7}
  17828. 80071f8: b085 sub sp, #20
  17829. 80071fa: af00 add r7, sp, #0
  17830. 80071fc: 6078 str r0, [r7, #4]
  17831. uint32_t USBx_BASE = (uint32_t)USBx;
  17832. 80071fe: 687b ldr r3, [r7, #4]
  17833. 8007200: 60fb str r3, [r7, #12]
  17834. uint32_t tmpreg;
  17835. tmpreg = USBx_DEVICE->DAINT;
  17836. 8007202: 68fb ldr r3, [r7, #12]
  17837. 8007204: f503 6300 add.w r3, r3, #2048 ; 0x800
  17838. 8007208: 699b ldr r3, [r3, #24]
  17839. 800720a: 60bb str r3, [r7, #8]
  17840. tmpreg &= USBx_DEVICE->DAINTMSK;
  17841. 800720c: 68fb ldr r3, [r7, #12]
  17842. 800720e: f503 6300 add.w r3, r3, #2048 ; 0x800
  17843. 8007212: 69db ldr r3, [r3, #28]
  17844. 8007214: 68ba ldr r2, [r7, #8]
  17845. 8007216: 4013 ands r3, r2
  17846. 8007218: 60bb str r3, [r7, #8]
  17847. return ((tmpreg & 0xffff0000U) >> 16);
  17848. 800721a: 68bb ldr r3, [r7, #8]
  17849. 800721c: 0c1b lsrs r3, r3, #16
  17850. }
  17851. 800721e: 4618 mov r0, r3
  17852. 8007220: 3714 adds r7, #20
  17853. 8007222: 46bd mov sp, r7
  17854. 8007224: f85d 7b04 ldr.w r7, [sp], #4
  17855. 8007228: 4770 bx lr
  17856. 0800722a <USB_ReadDevAllInEpInterrupt>:
  17857. * @brief USB_ReadDevAllInEpInterrupt: return the USB device IN endpoints interrupt status
  17858. * @param USBx Selected device
  17859. * @retval HAL status
  17860. */
  17861. uint32_t USB_ReadDevAllInEpInterrupt(USB_OTG_GlobalTypeDef *USBx)
  17862. {
  17863. 800722a: b480 push {r7}
  17864. 800722c: b085 sub sp, #20
  17865. 800722e: af00 add r7, sp, #0
  17866. 8007230: 6078 str r0, [r7, #4]
  17867. uint32_t USBx_BASE = (uint32_t)USBx;
  17868. 8007232: 687b ldr r3, [r7, #4]
  17869. 8007234: 60fb str r3, [r7, #12]
  17870. uint32_t tmpreg;
  17871. tmpreg = USBx_DEVICE->DAINT;
  17872. 8007236: 68fb ldr r3, [r7, #12]
  17873. 8007238: f503 6300 add.w r3, r3, #2048 ; 0x800
  17874. 800723c: 699b ldr r3, [r3, #24]
  17875. 800723e: 60bb str r3, [r7, #8]
  17876. tmpreg &= USBx_DEVICE->DAINTMSK;
  17877. 8007240: 68fb ldr r3, [r7, #12]
  17878. 8007242: f503 6300 add.w r3, r3, #2048 ; 0x800
  17879. 8007246: 69db ldr r3, [r3, #28]
  17880. 8007248: 68ba ldr r2, [r7, #8]
  17881. 800724a: 4013 ands r3, r2
  17882. 800724c: 60bb str r3, [r7, #8]
  17883. return ((tmpreg & 0xFFFFU));
  17884. 800724e: 68bb ldr r3, [r7, #8]
  17885. 8007250: b29b uxth r3, r3
  17886. }
  17887. 8007252: 4618 mov r0, r3
  17888. 8007254: 3714 adds r7, #20
  17889. 8007256: 46bd mov sp, r7
  17890. 8007258: f85d 7b04 ldr.w r7, [sp], #4
  17891. 800725c: 4770 bx lr
  17892. 0800725e <USB_ReadDevOutEPInterrupt>:
  17893. * @param epnum endpoint number
  17894. * This parameter can be a value from 0 to 15
  17895. * @retval Device OUT EP Interrupt register
  17896. */
  17897. uint32_t USB_ReadDevOutEPInterrupt(USB_OTG_GlobalTypeDef *USBx, uint8_t epnum)
  17898. {
  17899. 800725e: b480 push {r7}
  17900. 8007260: b085 sub sp, #20
  17901. 8007262: af00 add r7, sp, #0
  17902. 8007264: 6078 str r0, [r7, #4]
  17903. 8007266: 460b mov r3, r1
  17904. 8007268: 70fb strb r3, [r7, #3]
  17905. uint32_t USBx_BASE = (uint32_t)USBx;
  17906. 800726a: 687b ldr r3, [r7, #4]
  17907. 800726c: 60fb str r3, [r7, #12]
  17908. uint32_t tmpreg;
  17909. tmpreg = USBx_OUTEP((uint32_t)epnum)->DOEPINT;
  17910. 800726e: 78fb ldrb r3, [r7, #3]
  17911. 8007270: 015a lsls r2, r3, #5
  17912. 8007272: 68fb ldr r3, [r7, #12]
  17913. 8007274: 4413 add r3, r2
  17914. 8007276: f503 6330 add.w r3, r3, #2816 ; 0xb00
  17915. 800727a: 689b ldr r3, [r3, #8]
  17916. 800727c: 60bb str r3, [r7, #8]
  17917. tmpreg &= USBx_DEVICE->DOEPMSK;
  17918. 800727e: 68fb ldr r3, [r7, #12]
  17919. 8007280: f503 6300 add.w r3, r3, #2048 ; 0x800
  17920. 8007284: 695b ldr r3, [r3, #20]
  17921. 8007286: 68ba ldr r2, [r7, #8]
  17922. 8007288: 4013 ands r3, r2
  17923. 800728a: 60bb str r3, [r7, #8]
  17924. return tmpreg;
  17925. 800728c: 68bb ldr r3, [r7, #8]
  17926. }
  17927. 800728e: 4618 mov r0, r3
  17928. 8007290: 3714 adds r7, #20
  17929. 8007292: 46bd mov sp, r7
  17930. 8007294: f85d 7b04 ldr.w r7, [sp], #4
  17931. 8007298: 4770 bx lr
  17932. 0800729a <USB_ReadDevInEPInterrupt>:
  17933. * @param epnum endpoint number
  17934. * This parameter can be a value from 0 to 15
  17935. * @retval Device IN EP Interrupt register
  17936. */
  17937. uint32_t USB_ReadDevInEPInterrupt(USB_OTG_GlobalTypeDef *USBx, uint8_t epnum)
  17938. {
  17939. 800729a: b480 push {r7}
  17940. 800729c: b087 sub sp, #28
  17941. 800729e: af00 add r7, sp, #0
  17942. 80072a0: 6078 str r0, [r7, #4]
  17943. 80072a2: 460b mov r3, r1
  17944. 80072a4: 70fb strb r3, [r7, #3]
  17945. uint32_t USBx_BASE = (uint32_t)USBx;
  17946. 80072a6: 687b ldr r3, [r7, #4]
  17947. 80072a8: 617b str r3, [r7, #20]
  17948. uint32_t tmpreg;
  17949. uint32_t msk;
  17950. uint32_t emp;
  17951. msk = USBx_DEVICE->DIEPMSK;
  17952. 80072aa: 697b ldr r3, [r7, #20]
  17953. 80072ac: f503 6300 add.w r3, r3, #2048 ; 0x800
  17954. 80072b0: 691b ldr r3, [r3, #16]
  17955. 80072b2: 613b str r3, [r7, #16]
  17956. emp = USBx_DEVICE->DIEPEMPMSK;
  17957. 80072b4: 697b ldr r3, [r7, #20]
  17958. 80072b6: f503 6300 add.w r3, r3, #2048 ; 0x800
  17959. 80072ba: 6b5b ldr r3, [r3, #52] ; 0x34
  17960. 80072bc: 60fb str r3, [r7, #12]
  17961. msk |= ((emp >> (epnum & EP_ADDR_MSK)) & 0x1U) << 7;
  17962. 80072be: 78fb ldrb r3, [r7, #3]
  17963. 80072c0: f003 030f and.w r3, r3, #15
  17964. 80072c4: 68fa ldr r2, [r7, #12]
  17965. 80072c6: fa22 f303 lsr.w r3, r2, r3
  17966. 80072ca: 01db lsls r3, r3, #7
  17967. 80072cc: b2db uxtb r3, r3
  17968. 80072ce: 693a ldr r2, [r7, #16]
  17969. 80072d0: 4313 orrs r3, r2
  17970. 80072d2: 613b str r3, [r7, #16]
  17971. tmpreg = USBx_INEP((uint32_t)epnum)->DIEPINT & msk;
  17972. 80072d4: 78fb ldrb r3, [r7, #3]
  17973. 80072d6: 015a lsls r2, r3, #5
  17974. 80072d8: 697b ldr r3, [r7, #20]
  17975. 80072da: 4413 add r3, r2
  17976. 80072dc: f503 6310 add.w r3, r3, #2304 ; 0x900
  17977. 80072e0: 689b ldr r3, [r3, #8]
  17978. 80072e2: 693a ldr r2, [r7, #16]
  17979. 80072e4: 4013 ands r3, r2
  17980. 80072e6: 60bb str r3, [r7, #8]
  17981. return tmpreg;
  17982. 80072e8: 68bb ldr r3, [r7, #8]
  17983. }
  17984. 80072ea: 4618 mov r0, r3
  17985. 80072ec: 371c adds r7, #28
  17986. 80072ee: 46bd mov sp, r7
  17987. 80072f0: f85d 7b04 ldr.w r7, [sp], #4
  17988. 80072f4: 4770 bx lr
  17989. 080072f6 <USB_GetMode>:
  17990. * This parameter can be one of these values:
  17991. * 0 : Host
  17992. * 1 : Device
  17993. */
  17994. uint32_t USB_GetMode(USB_OTG_GlobalTypeDef *USBx)
  17995. {
  17996. 80072f6: b480 push {r7}
  17997. 80072f8: b083 sub sp, #12
  17998. 80072fa: af00 add r7, sp, #0
  17999. 80072fc: 6078 str r0, [r7, #4]
  18000. return ((USBx->GINTSTS) & 0x1U);
  18001. 80072fe: 687b ldr r3, [r7, #4]
  18002. 8007300: 695b ldr r3, [r3, #20]
  18003. 8007302: f003 0301 and.w r3, r3, #1
  18004. }
  18005. 8007306: 4618 mov r0, r3
  18006. 8007308: 370c adds r7, #12
  18007. 800730a: 46bd mov sp, r7
  18008. 800730c: f85d 7b04 ldr.w r7, [sp], #4
  18009. 8007310: 4770 bx lr
  18010. ...
  18011. 08007314 <USB_ActivateSetup>:
  18012. * @brief Activate EP0 for Setup transactions
  18013. * @param USBx Selected device
  18014. * @retval HAL status
  18015. */
  18016. HAL_StatusTypeDef USB_ActivateSetup(USB_OTG_GlobalTypeDef *USBx)
  18017. {
  18018. 8007314: b480 push {r7}
  18019. 8007316: b085 sub sp, #20
  18020. 8007318: af00 add r7, sp, #0
  18021. 800731a: 6078 str r0, [r7, #4]
  18022. uint32_t USBx_BASE = (uint32_t)USBx;
  18023. 800731c: 687b ldr r3, [r7, #4]
  18024. 800731e: 60fb str r3, [r7, #12]
  18025. /* Set the MPS of the IN EP0 to 64 bytes */
  18026. USBx_INEP(0U)->DIEPCTL &= ~USB_OTG_DIEPCTL_MPSIZ;
  18027. 8007320: 68fb ldr r3, [r7, #12]
  18028. 8007322: f503 6310 add.w r3, r3, #2304 ; 0x900
  18029. 8007326: 681a ldr r2, [r3, #0]
  18030. 8007328: 68fb ldr r3, [r7, #12]
  18031. 800732a: f503 6310 add.w r3, r3, #2304 ; 0x900
  18032. 800732e: 4619 mov r1, r3
  18033. 8007330: 4b09 ldr r3, [pc, #36] ; (8007358 <USB_ActivateSetup+0x44>)
  18034. 8007332: 4013 ands r3, r2
  18035. 8007334: 600b str r3, [r1, #0]
  18036. USBx_DEVICE->DCTL |= USB_OTG_DCTL_CGINAK;
  18037. 8007336: 68fb ldr r3, [r7, #12]
  18038. 8007338: f503 6300 add.w r3, r3, #2048 ; 0x800
  18039. 800733c: 685b ldr r3, [r3, #4]
  18040. 800733e: 68fa ldr r2, [r7, #12]
  18041. 8007340: f502 6200 add.w r2, r2, #2048 ; 0x800
  18042. 8007344: f443 7380 orr.w r3, r3, #256 ; 0x100
  18043. 8007348: 6053 str r3, [r2, #4]
  18044. return HAL_OK;
  18045. 800734a: 2300 movs r3, #0
  18046. }
  18047. 800734c: 4618 mov r0, r3
  18048. 800734e: 3714 adds r7, #20
  18049. 8007350: 46bd mov sp, r7
  18050. 8007352: f85d 7b04 ldr.w r7, [sp], #4
  18051. 8007356: 4770 bx lr
  18052. 8007358: fffff800 .word 0xfffff800
  18053. 0800735c <USB_EP0_OutStart>:
  18054. * 1 : DMA feature used
  18055. * @param psetup pointer to setup packet
  18056. * @retval HAL status
  18057. */
  18058. HAL_StatusTypeDef USB_EP0_OutStart(USB_OTG_GlobalTypeDef *USBx, uint8_t dma, uint8_t *psetup)
  18059. {
  18060. 800735c: b480 push {r7}
  18061. 800735e: b087 sub sp, #28
  18062. 8007360: af00 add r7, sp, #0
  18063. 8007362: 60f8 str r0, [r7, #12]
  18064. 8007364: 460b mov r3, r1
  18065. 8007366: 607a str r2, [r7, #4]
  18066. 8007368: 72fb strb r3, [r7, #11]
  18067. uint32_t USBx_BASE = (uint32_t)USBx;
  18068. 800736a: 68fb ldr r3, [r7, #12]
  18069. 800736c: 617b str r3, [r7, #20]
  18070. uint32_t gSNPSiD = *(__IO uint32_t *)(&USBx->CID + 0x1U);
  18071. 800736e: 68fb ldr r3, [r7, #12]
  18072. 8007370: 333c adds r3, #60 ; 0x3c
  18073. 8007372: 3304 adds r3, #4
  18074. 8007374: 681b ldr r3, [r3, #0]
  18075. 8007376: 613b str r3, [r7, #16]
  18076. if (gSNPSiD > USB_OTG_CORE_ID_300A)
  18077. 8007378: 693b ldr r3, [r7, #16]
  18078. 800737a: 4a26 ldr r2, [pc, #152] ; (8007414 <USB_EP0_OutStart+0xb8>)
  18079. 800737c: 4293 cmp r3, r2
  18080. 800737e: d90a bls.n 8007396 <USB_EP0_OutStart+0x3a>
  18081. {
  18082. if ((USBx_OUTEP(0U)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA)
  18083. 8007380: 697b ldr r3, [r7, #20]
  18084. 8007382: f503 6330 add.w r3, r3, #2816 ; 0xb00
  18085. 8007386: 681b ldr r3, [r3, #0]
  18086. 8007388: f003 4300 and.w r3, r3, #2147483648 ; 0x80000000
  18087. 800738c: f1b3 4f00 cmp.w r3, #2147483648 ; 0x80000000
  18088. 8007390: d101 bne.n 8007396 <USB_EP0_OutStart+0x3a>
  18089. {
  18090. return HAL_OK;
  18091. 8007392: 2300 movs r3, #0
  18092. 8007394: e037 b.n 8007406 <USB_EP0_OutStart+0xaa>
  18093. }
  18094. }
  18095. USBx_OUTEP(0U)->DOEPTSIZ = 0U;
  18096. 8007396: 697b ldr r3, [r7, #20]
  18097. 8007398: f503 6330 add.w r3, r3, #2816 ; 0xb00
  18098. 800739c: 461a mov r2, r3
  18099. 800739e: 2300 movs r3, #0
  18100. 80073a0: 6113 str r3, [r2, #16]
  18101. USBx_OUTEP(0U)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_PKTCNT & (1U << 19));
  18102. 80073a2: 697b ldr r3, [r7, #20]
  18103. 80073a4: f503 6330 add.w r3, r3, #2816 ; 0xb00
  18104. 80073a8: 691b ldr r3, [r3, #16]
  18105. 80073aa: 697a ldr r2, [r7, #20]
  18106. 80073ac: f502 6230 add.w r2, r2, #2816 ; 0xb00
  18107. 80073b0: f443 2300 orr.w r3, r3, #524288 ; 0x80000
  18108. 80073b4: 6113 str r3, [r2, #16]
  18109. USBx_OUTEP(0U)->DOEPTSIZ |= (3U * 8U);
  18110. 80073b6: 697b ldr r3, [r7, #20]
  18111. 80073b8: f503 6330 add.w r3, r3, #2816 ; 0xb00
  18112. 80073bc: 691b ldr r3, [r3, #16]
  18113. 80073be: 697a ldr r2, [r7, #20]
  18114. 80073c0: f502 6230 add.w r2, r2, #2816 ; 0xb00
  18115. 80073c4: f043 0318 orr.w r3, r3, #24
  18116. 80073c8: 6113 str r3, [r2, #16]
  18117. USBx_OUTEP(0U)->DOEPTSIZ |= USB_OTG_DOEPTSIZ_STUPCNT;
  18118. 80073ca: 697b ldr r3, [r7, #20]
  18119. 80073cc: f503 6330 add.w r3, r3, #2816 ; 0xb00
  18120. 80073d0: 691b ldr r3, [r3, #16]
  18121. 80073d2: 697a ldr r2, [r7, #20]
  18122. 80073d4: f502 6230 add.w r2, r2, #2816 ; 0xb00
  18123. 80073d8: f043 43c0 orr.w r3, r3, #1610612736 ; 0x60000000
  18124. 80073dc: 6113 str r3, [r2, #16]
  18125. if (dma == 1U)
  18126. 80073de: 7afb ldrb r3, [r7, #11]
  18127. 80073e0: 2b01 cmp r3, #1
  18128. 80073e2: d10f bne.n 8007404 <USB_EP0_OutStart+0xa8>
  18129. {
  18130. USBx_OUTEP(0U)->DOEPDMA = (uint32_t)psetup;
  18131. 80073e4: 697b ldr r3, [r7, #20]
  18132. 80073e6: f503 6330 add.w r3, r3, #2816 ; 0xb00
  18133. 80073ea: 461a mov r2, r3
  18134. 80073ec: 687b ldr r3, [r7, #4]
  18135. 80073ee: 6153 str r3, [r2, #20]
  18136. /* EP enable */
  18137. USBx_OUTEP(0U)->DOEPCTL |= USB_OTG_DOEPCTL_EPENA | USB_OTG_DOEPCTL_USBAEP;
  18138. 80073f0: 697b ldr r3, [r7, #20]
  18139. 80073f2: f503 6330 add.w r3, r3, #2816 ; 0xb00
  18140. 80073f6: 681b ldr r3, [r3, #0]
  18141. 80073f8: 697a ldr r2, [r7, #20]
  18142. 80073fa: f502 6230 add.w r2, r2, #2816 ; 0xb00
  18143. 80073fe: f043 2380 orr.w r3, r3, #2147516416 ; 0x80008000
  18144. 8007402: 6013 str r3, [r2, #0]
  18145. }
  18146. return HAL_OK;
  18147. 8007404: 2300 movs r3, #0
  18148. }
  18149. 8007406: 4618 mov r0, r3
  18150. 8007408: 371c adds r7, #28
  18151. 800740a: 46bd mov sp, r7
  18152. 800740c: f85d 7b04 ldr.w r7, [sp], #4
  18153. 8007410: 4770 bx lr
  18154. 8007412: bf00 nop
  18155. 8007414: 4f54300a .word 0x4f54300a
  18156. 08007418 <USB_CoreReset>:
  18157. * @brief Reset the USB Core (needed after USB clock settings change)
  18158. * @param USBx Selected device
  18159. * @retval HAL status
  18160. */
  18161. static HAL_StatusTypeDef USB_CoreReset(USB_OTG_GlobalTypeDef *USBx)
  18162. {
  18163. 8007418: b480 push {r7}
  18164. 800741a: b085 sub sp, #20
  18165. 800741c: af00 add r7, sp, #0
  18166. 800741e: 6078 str r0, [r7, #4]
  18167. __IO uint32_t count = 0U;
  18168. 8007420: 2300 movs r3, #0
  18169. 8007422: 60fb str r3, [r7, #12]
  18170. /* Wait for AHB master IDLE state. */
  18171. do
  18172. {
  18173. if (++count > 200000U)
  18174. 8007424: 68fb ldr r3, [r7, #12]
  18175. 8007426: 3301 adds r3, #1
  18176. 8007428: 60fb str r3, [r7, #12]
  18177. 800742a: 4a13 ldr r2, [pc, #76] ; (8007478 <USB_CoreReset+0x60>)
  18178. 800742c: 4293 cmp r3, r2
  18179. 800742e: d901 bls.n 8007434 <USB_CoreReset+0x1c>
  18180. {
  18181. return HAL_TIMEOUT;
  18182. 8007430: 2303 movs r3, #3
  18183. 8007432: e01a b.n 800746a <USB_CoreReset+0x52>
  18184. }
  18185. } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_AHBIDL) == 0U);
  18186. 8007434: 687b ldr r3, [r7, #4]
  18187. 8007436: 691b ldr r3, [r3, #16]
  18188. 8007438: 2b00 cmp r3, #0
  18189. 800743a: daf3 bge.n 8007424 <USB_CoreReset+0xc>
  18190. /* Core Soft Reset */
  18191. count = 0U;
  18192. 800743c: 2300 movs r3, #0
  18193. 800743e: 60fb str r3, [r7, #12]
  18194. USBx->GRSTCTL |= USB_OTG_GRSTCTL_CSRST;
  18195. 8007440: 687b ldr r3, [r7, #4]
  18196. 8007442: 691b ldr r3, [r3, #16]
  18197. 8007444: f043 0201 orr.w r2, r3, #1
  18198. 8007448: 687b ldr r3, [r7, #4]
  18199. 800744a: 611a str r2, [r3, #16]
  18200. do
  18201. {
  18202. if (++count > 200000U)
  18203. 800744c: 68fb ldr r3, [r7, #12]
  18204. 800744e: 3301 adds r3, #1
  18205. 8007450: 60fb str r3, [r7, #12]
  18206. 8007452: 4a09 ldr r2, [pc, #36] ; (8007478 <USB_CoreReset+0x60>)
  18207. 8007454: 4293 cmp r3, r2
  18208. 8007456: d901 bls.n 800745c <USB_CoreReset+0x44>
  18209. {
  18210. return HAL_TIMEOUT;
  18211. 8007458: 2303 movs r3, #3
  18212. 800745a: e006 b.n 800746a <USB_CoreReset+0x52>
  18213. }
  18214. } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_CSRST) == USB_OTG_GRSTCTL_CSRST);
  18215. 800745c: 687b ldr r3, [r7, #4]
  18216. 800745e: 691b ldr r3, [r3, #16]
  18217. 8007460: f003 0301 and.w r3, r3, #1
  18218. 8007464: 2b01 cmp r3, #1
  18219. 8007466: d0f1 beq.n 800744c <USB_CoreReset+0x34>
  18220. return HAL_OK;
  18221. 8007468: 2300 movs r3, #0
  18222. }
  18223. 800746a: 4618 mov r0, r3
  18224. 800746c: 3714 adds r7, #20
  18225. 800746e: 46bd mov sp, r7
  18226. 8007470: f85d 7b04 ldr.w r7, [sp], #4
  18227. 8007474: 4770 bx lr
  18228. 8007476: bf00 nop
  18229. 8007478: 00030d40 .word 0x00030d40
  18230. 0800747c <USBD_CDC_Init>:
  18231. * @param pdev: device instance
  18232. * @param cfgidx: Configuration index
  18233. * @retval status
  18234. */
  18235. static uint8_t USBD_CDC_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
  18236. {
  18237. 800747c: b580 push {r7, lr}
  18238. 800747e: b084 sub sp, #16
  18239. 8007480: af00 add r7, sp, #0
  18240. 8007482: 6078 str r0, [r7, #4]
  18241. 8007484: 460b mov r3, r1
  18242. 8007486: 70fb strb r3, [r7, #3]
  18243. UNUSED(cfgidx);
  18244. USBD_CDC_HandleTypeDef *hcdc;
  18245. hcdc = USBD_malloc(sizeof(USBD_CDC_HandleTypeDef));
  18246. 8007488: f44f 7007 mov.w r0, #540 ; 0x21c
  18247. 800748c: f002 f986 bl 800979c <USBD_static_malloc>
  18248. 8007490: 60f8 str r0, [r7, #12]
  18249. if (hcdc == NULL)
  18250. 8007492: 68fb ldr r3, [r7, #12]
  18251. 8007494: 2b00 cmp r3, #0
  18252. 8007496: d105 bne.n 80074a4 <USBD_CDC_Init+0x28>
  18253. {
  18254. pdev->pClassData = NULL;
  18255. 8007498: 687b ldr r3, [r7, #4]
  18256. 800749a: 2200 movs r2, #0
  18257. 800749c: f8c3 22bc str.w r2, [r3, #700] ; 0x2bc
  18258. return (uint8_t)USBD_EMEM;
  18259. 80074a0: 2302 movs r3, #2
  18260. 80074a2: e066 b.n 8007572 <USBD_CDC_Init+0xf6>
  18261. }
  18262. pdev->pClassData = (void *)hcdc;
  18263. 80074a4: 687b ldr r3, [r7, #4]
  18264. 80074a6: 68fa ldr r2, [r7, #12]
  18265. 80074a8: f8c3 22bc str.w r2, [r3, #700] ; 0x2bc
  18266. if (pdev->dev_speed == USBD_SPEED_HIGH)
  18267. 80074ac: 687b ldr r3, [r7, #4]
  18268. 80074ae: 7c1b ldrb r3, [r3, #16]
  18269. 80074b0: 2b00 cmp r3, #0
  18270. 80074b2: d119 bne.n 80074e8 <USBD_CDC_Init+0x6c>
  18271. {
  18272. /* Open EP IN */
  18273. (void)USBD_LL_OpenEP(pdev, CDC_IN_EP, USBD_EP_TYPE_BULK,
  18274. 80074b4: f44f 7300 mov.w r3, #512 ; 0x200
  18275. 80074b8: 2202 movs r2, #2
  18276. 80074ba: 2181 movs r1, #129 ; 0x81
  18277. 80074bc: 6878 ldr r0, [r7, #4]
  18278. 80074be: f002 f84a bl 8009556 <USBD_LL_OpenEP>
  18279. CDC_DATA_HS_IN_PACKET_SIZE);
  18280. pdev->ep_in[CDC_IN_EP & 0xFU].is_used = 1U;
  18281. 80074c2: 687b ldr r3, [r7, #4]
  18282. 80074c4: 2201 movs r2, #1
  18283. 80074c6: 871a strh r2, [r3, #56] ; 0x38
  18284. /* Open EP OUT */
  18285. (void)USBD_LL_OpenEP(pdev, CDC_OUT_EP, USBD_EP_TYPE_BULK,
  18286. 80074c8: f44f 7300 mov.w r3, #512 ; 0x200
  18287. 80074cc: 2202 movs r2, #2
  18288. 80074ce: 2101 movs r1, #1
  18289. 80074d0: 6878 ldr r0, [r7, #4]
  18290. 80074d2: f002 f840 bl 8009556 <USBD_LL_OpenEP>
  18291. CDC_DATA_HS_OUT_PACKET_SIZE);
  18292. pdev->ep_out[CDC_OUT_EP & 0xFU].is_used = 1U;
  18293. 80074d6: 687b ldr r3, [r7, #4]
  18294. 80074d8: 2201 movs r2, #1
  18295. 80074da: f8a3 2178 strh.w r2, [r3, #376] ; 0x178
  18296. /* Set bInterval for CDC CMD Endpoint */
  18297. pdev->ep_in[CDC_CMD_EP & 0xFU].bInterval = CDC_HS_BINTERVAL;
  18298. 80074de: 687b ldr r3, [r7, #4]
  18299. 80074e0: 2210 movs r2, #16
  18300. 80074e2: f8a3 204e strh.w r2, [r3, #78] ; 0x4e
  18301. 80074e6: e016 b.n 8007516 <USBD_CDC_Init+0x9a>
  18302. }
  18303. else
  18304. {
  18305. /* Open EP IN */
  18306. (void)USBD_LL_OpenEP(pdev, CDC_IN_EP, USBD_EP_TYPE_BULK,
  18307. 80074e8: 2340 movs r3, #64 ; 0x40
  18308. 80074ea: 2202 movs r2, #2
  18309. 80074ec: 2181 movs r1, #129 ; 0x81
  18310. 80074ee: 6878 ldr r0, [r7, #4]
  18311. 80074f0: f002 f831 bl 8009556 <USBD_LL_OpenEP>
  18312. CDC_DATA_FS_IN_PACKET_SIZE);
  18313. pdev->ep_in[CDC_IN_EP & 0xFU].is_used = 1U;
  18314. 80074f4: 687b ldr r3, [r7, #4]
  18315. 80074f6: 2201 movs r2, #1
  18316. 80074f8: 871a strh r2, [r3, #56] ; 0x38
  18317. /* Open EP OUT */
  18318. (void)USBD_LL_OpenEP(pdev, CDC_OUT_EP, USBD_EP_TYPE_BULK,
  18319. 80074fa: 2340 movs r3, #64 ; 0x40
  18320. 80074fc: 2202 movs r2, #2
  18321. 80074fe: 2101 movs r1, #1
  18322. 8007500: 6878 ldr r0, [r7, #4]
  18323. 8007502: f002 f828 bl 8009556 <USBD_LL_OpenEP>
  18324. CDC_DATA_FS_OUT_PACKET_SIZE);
  18325. pdev->ep_out[CDC_OUT_EP & 0xFU].is_used = 1U;
  18326. 8007506: 687b ldr r3, [r7, #4]
  18327. 8007508: 2201 movs r2, #1
  18328. 800750a: f8a3 2178 strh.w r2, [r3, #376] ; 0x178
  18329. /* Set bInterval for CMD Endpoint */
  18330. pdev->ep_in[CDC_CMD_EP & 0xFU].bInterval = CDC_FS_BINTERVAL;
  18331. 800750e: 687b ldr r3, [r7, #4]
  18332. 8007510: 2210 movs r2, #16
  18333. 8007512: f8a3 204e strh.w r2, [r3, #78] ; 0x4e
  18334. }
  18335. /* Open Command IN EP */
  18336. (void)USBD_LL_OpenEP(pdev, CDC_CMD_EP, USBD_EP_TYPE_INTR, CDC_CMD_PACKET_SIZE);
  18337. 8007516: 2308 movs r3, #8
  18338. 8007518: 2203 movs r2, #3
  18339. 800751a: 2182 movs r1, #130 ; 0x82
  18340. 800751c: 6878 ldr r0, [r7, #4]
  18341. 800751e: f002 f81a bl 8009556 <USBD_LL_OpenEP>
  18342. pdev->ep_in[CDC_CMD_EP & 0xFU].is_used = 1U;
  18343. 8007522: 687b ldr r3, [r7, #4]
  18344. 8007524: 2201 movs r2, #1
  18345. 8007526: f8a3 204c strh.w r2, [r3, #76] ; 0x4c
  18346. /* Init physical Interface components */
  18347. ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Init();
  18348. 800752a: 687b ldr r3, [r7, #4]
  18349. 800752c: f8d3 32c0 ldr.w r3, [r3, #704] ; 0x2c0
  18350. 8007530: 681b ldr r3, [r3, #0]
  18351. 8007532: 4798 blx r3
  18352. /* Init Xfer states */
  18353. hcdc->TxState = 0U;
  18354. 8007534: 68fb ldr r3, [r7, #12]
  18355. 8007536: 2200 movs r2, #0
  18356. 8007538: f8c3 2214 str.w r2, [r3, #532] ; 0x214
  18357. hcdc->RxState = 0U;
  18358. 800753c: 68fb ldr r3, [r7, #12]
  18359. 800753e: 2200 movs r2, #0
  18360. 8007540: f8c3 2218 str.w r2, [r3, #536] ; 0x218
  18361. if (pdev->dev_speed == USBD_SPEED_HIGH)
  18362. 8007544: 687b ldr r3, [r7, #4]
  18363. 8007546: 7c1b ldrb r3, [r3, #16]
  18364. 8007548: 2b00 cmp r3, #0
  18365. 800754a: d109 bne.n 8007560 <USBD_CDC_Init+0xe4>
  18366. {
  18367. /* Prepare Out endpoint to receive next packet */
  18368. (void)USBD_LL_PrepareReceive(pdev, CDC_OUT_EP, hcdc->RxBuffer,
  18369. 800754c: 68fb ldr r3, [r7, #12]
  18370. 800754e: f8d3 2204 ldr.w r2, [r3, #516] ; 0x204
  18371. 8007552: f44f 7300 mov.w r3, #512 ; 0x200
  18372. 8007556: 2101 movs r1, #1
  18373. 8007558: 6878 ldr r0, [r7, #4]
  18374. 800755a: f002 f8eb bl 8009734 <USBD_LL_PrepareReceive>
  18375. 800755e: e007 b.n 8007570 <USBD_CDC_Init+0xf4>
  18376. CDC_DATA_HS_OUT_PACKET_SIZE);
  18377. }
  18378. else
  18379. {
  18380. /* Prepare Out endpoint to receive next packet */
  18381. (void)USBD_LL_PrepareReceive(pdev, CDC_OUT_EP, hcdc->RxBuffer,
  18382. 8007560: 68fb ldr r3, [r7, #12]
  18383. 8007562: f8d3 2204 ldr.w r2, [r3, #516] ; 0x204
  18384. 8007566: 2340 movs r3, #64 ; 0x40
  18385. 8007568: 2101 movs r1, #1
  18386. 800756a: 6878 ldr r0, [r7, #4]
  18387. 800756c: f002 f8e2 bl 8009734 <USBD_LL_PrepareReceive>
  18388. CDC_DATA_FS_OUT_PACKET_SIZE);
  18389. }
  18390. return (uint8_t)USBD_OK;
  18391. 8007570: 2300 movs r3, #0
  18392. }
  18393. 8007572: 4618 mov r0, r3
  18394. 8007574: 3710 adds r7, #16
  18395. 8007576: 46bd mov sp, r7
  18396. 8007578: bd80 pop {r7, pc}
  18397. 0800757a <USBD_CDC_DeInit>:
  18398. * @param pdev: device instance
  18399. * @param cfgidx: Configuration index
  18400. * @retval status
  18401. */
  18402. static uint8_t USBD_CDC_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
  18403. {
  18404. 800757a: b580 push {r7, lr}
  18405. 800757c: b082 sub sp, #8
  18406. 800757e: af00 add r7, sp, #0
  18407. 8007580: 6078 str r0, [r7, #4]
  18408. 8007582: 460b mov r3, r1
  18409. 8007584: 70fb strb r3, [r7, #3]
  18410. UNUSED(cfgidx);
  18411. /* Close EP IN */
  18412. (void)USBD_LL_CloseEP(pdev, CDC_IN_EP);
  18413. 8007586: 2181 movs r1, #129 ; 0x81
  18414. 8007588: 6878 ldr r0, [r7, #4]
  18415. 800758a: f002 f80a bl 80095a2 <USBD_LL_CloseEP>
  18416. pdev->ep_in[CDC_IN_EP & 0xFU].is_used = 0U;
  18417. 800758e: 687b ldr r3, [r7, #4]
  18418. 8007590: 2200 movs r2, #0
  18419. 8007592: 871a strh r2, [r3, #56] ; 0x38
  18420. /* Close EP OUT */
  18421. (void)USBD_LL_CloseEP(pdev, CDC_OUT_EP);
  18422. 8007594: 2101 movs r1, #1
  18423. 8007596: 6878 ldr r0, [r7, #4]
  18424. 8007598: f002 f803 bl 80095a2 <USBD_LL_CloseEP>
  18425. pdev->ep_out[CDC_OUT_EP & 0xFU].is_used = 0U;
  18426. 800759c: 687b ldr r3, [r7, #4]
  18427. 800759e: 2200 movs r2, #0
  18428. 80075a0: f8a3 2178 strh.w r2, [r3, #376] ; 0x178
  18429. /* Close Command IN EP */
  18430. (void)USBD_LL_CloseEP(pdev, CDC_CMD_EP);
  18431. 80075a4: 2182 movs r1, #130 ; 0x82
  18432. 80075a6: 6878 ldr r0, [r7, #4]
  18433. 80075a8: f001 fffb bl 80095a2 <USBD_LL_CloseEP>
  18434. pdev->ep_in[CDC_CMD_EP & 0xFU].is_used = 0U;
  18435. 80075ac: 687b ldr r3, [r7, #4]
  18436. 80075ae: 2200 movs r2, #0
  18437. 80075b0: f8a3 204c strh.w r2, [r3, #76] ; 0x4c
  18438. pdev->ep_in[CDC_CMD_EP & 0xFU].bInterval = 0U;
  18439. 80075b4: 687b ldr r3, [r7, #4]
  18440. 80075b6: 2200 movs r2, #0
  18441. 80075b8: f8a3 204e strh.w r2, [r3, #78] ; 0x4e
  18442. /* DeInit physical Interface components */
  18443. if (pdev->pClassData != NULL)
  18444. 80075bc: 687b ldr r3, [r7, #4]
  18445. 80075be: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  18446. 80075c2: 2b00 cmp r3, #0
  18447. 80075c4: d00e beq.n 80075e4 <USBD_CDC_DeInit+0x6a>
  18448. {
  18449. ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->DeInit();
  18450. 80075c6: 687b ldr r3, [r7, #4]
  18451. 80075c8: f8d3 32c0 ldr.w r3, [r3, #704] ; 0x2c0
  18452. 80075cc: 685b ldr r3, [r3, #4]
  18453. 80075ce: 4798 blx r3
  18454. (void)USBD_free(pdev->pClassData);
  18455. 80075d0: 687b ldr r3, [r7, #4]
  18456. 80075d2: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  18457. 80075d6: 4618 mov r0, r3
  18458. 80075d8: f002 f8ee bl 80097b8 <USBD_static_free>
  18459. pdev->pClassData = NULL;
  18460. 80075dc: 687b ldr r3, [r7, #4]
  18461. 80075de: 2200 movs r2, #0
  18462. 80075e0: f8c3 22bc str.w r2, [r3, #700] ; 0x2bc
  18463. }
  18464. return (uint8_t)USBD_OK;
  18465. 80075e4: 2300 movs r3, #0
  18466. }
  18467. 80075e6: 4618 mov r0, r3
  18468. 80075e8: 3708 adds r7, #8
  18469. 80075ea: 46bd mov sp, r7
  18470. 80075ec: bd80 pop {r7, pc}
  18471. ...
  18472. 080075f0 <USBD_CDC_Setup>:
  18473. * @param req: usb requests
  18474. * @retval status
  18475. */
  18476. static uint8_t USBD_CDC_Setup(USBD_HandleTypeDef *pdev,
  18477. USBD_SetupReqTypedef *req)
  18478. {
  18479. 80075f0: b580 push {r7, lr}
  18480. 80075f2: b086 sub sp, #24
  18481. 80075f4: af00 add r7, sp, #0
  18482. 80075f6: 6078 str r0, [r7, #4]
  18483. 80075f8: 6039 str r1, [r7, #0]
  18484. USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
  18485. 80075fa: 687b ldr r3, [r7, #4]
  18486. 80075fc: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  18487. 8007600: 613b str r3, [r7, #16]
  18488. uint16_t len;
  18489. uint8_t ifalt = 0U;
  18490. 8007602: 2300 movs r3, #0
  18491. 8007604: 737b strb r3, [r7, #13]
  18492. uint16_t status_info = 0U;
  18493. 8007606: 2300 movs r3, #0
  18494. 8007608: 817b strh r3, [r7, #10]
  18495. USBD_StatusTypeDef ret = USBD_OK;
  18496. 800760a: 2300 movs r3, #0
  18497. 800760c: 75fb strb r3, [r7, #23]
  18498. if (hcdc == NULL)
  18499. 800760e: 693b ldr r3, [r7, #16]
  18500. 8007610: 2b00 cmp r3, #0
  18501. 8007612: d101 bne.n 8007618 <USBD_CDC_Setup+0x28>
  18502. {
  18503. return (uint8_t)USBD_FAIL;
  18504. 8007614: 2303 movs r3, #3
  18505. 8007616: e0af b.n 8007778 <USBD_CDC_Setup+0x188>
  18506. }
  18507. switch (req->bmRequest & USB_REQ_TYPE_MASK)
  18508. 8007618: 683b ldr r3, [r7, #0]
  18509. 800761a: 781b ldrb r3, [r3, #0]
  18510. 800761c: f003 0360 and.w r3, r3, #96 ; 0x60
  18511. 8007620: 2b00 cmp r3, #0
  18512. 8007622: d03f beq.n 80076a4 <USBD_CDC_Setup+0xb4>
  18513. 8007624: 2b20 cmp r3, #32
  18514. 8007626: f040 809f bne.w 8007768 <USBD_CDC_Setup+0x178>
  18515. {
  18516. case USB_REQ_TYPE_CLASS:
  18517. if (req->wLength != 0U)
  18518. 800762a: 683b ldr r3, [r7, #0]
  18519. 800762c: 88db ldrh r3, [r3, #6]
  18520. 800762e: 2b00 cmp r3, #0
  18521. 8007630: d02e beq.n 8007690 <USBD_CDC_Setup+0xa0>
  18522. {
  18523. if ((req->bmRequest & 0x80U) != 0U)
  18524. 8007632: 683b ldr r3, [r7, #0]
  18525. 8007634: 781b ldrb r3, [r3, #0]
  18526. 8007636: b25b sxtb r3, r3
  18527. 8007638: 2b00 cmp r3, #0
  18528. 800763a: da16 bge.n 800766a <USBD_CDC_Setup+0x7a>
  18529. {
  18530. ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest,
  18531. 800763c: 687b ldr r3, [r7, #4]
  18532. 800763e: f8d3 32c0 ldr.w r3, [r3, #704] ; 0x2c0
  18533. 8007642: 689b ldr r3, [r3, #8]
  18534. 8007644: 683a ldr r2, [r7, #0]
  18535. 8007646: 7850 ldrb r0, [r2, #1]
  18536. (uint8_t *)hcdc->data,
  18537. 8007648: 6939 ldr r1, [r7, #16]
  18538. ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest,
  18539. 800764a: 683a ldr r2, [r7, #0]
  18540. 800764c: 88d2 ldrh r2, [r2, #6]
  18541. 800764e: 4798 blx r3
  18542. req->wLength);
  18543. len = MIN(CDC_REQ_MAX_DATA_SIZE, req->wLength);
  18544. 8007650: 683b ldr r3, [r7, #0]
  18545. 8007652: 88db ldrh r3, [r3, #6]
  18546. 8007654: 2b07 cmp r3, #7
  18547. 8007656: bf28 it cs
  18548. 8007658: 2307 movcs r3, #7
  18549. 800765a: 81fb strh r3, [r7, #14]
  18550. (void)USBD_CtlSendData(pdev, (uint8_t *)hcdc->data, len);
  18551. 800765c: 693b ldr r3, [r7, #16]
  18552. 800765e: 89fa ldrh r2, [r7, #14]
  18553. 8007660: 4619 mov r1, r3
  18554. 8007662: 6878 ldr r0, [r7, #4]
  18555. 8007664: f001 fb19 bl 8008c9a <USBD_CtlSendData>
  18556. else
  18557. {
  18558. ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest,
  18559. (uint8_t *)req, 0U);
  18560. }
  18561. break;
  18562. 8007668: e085 b.n 8007776 <USBD_CDC_Setup+0x186>
  18563. hcdc->CmdOpCode = req->bRequest;
  18564. 800766a: 683b ldr r3, [r7, #0]
  18565. 800766c: 785a ldrb r2, [r3, #1]
  18566. 800766e: 693b ldr r3, [r7, #16]
  18567. 8007670: f883 2200 strb.w r2, [r3, #512] ; 0x200
  18568. hcdc->CmdLength = (uint8_t)req->wLength;
  18569. 8007674: 683b ldr r3, [r7, #0]
  18570. 8007676: 88db ldrh r3, [r3, #6]
  18571. 8007678: b2da uxtb r2, r3
  18572. 800767a: 693b ldr r3, [r7, #16]
  18573. 800767c: f883 2201 strb.w r2, [r3, #513] ; 0x201
  18574. (void)USBD_CtlPrepareRx(pdev, (uint8_t *)hcdc->data, req->wLength);
  18575. 8007680: 6939 ldr r1, [r7, #16]
  18576. 8007682: 683b ldr r3, [r7, #0]
  18577. 8007684: 88db ldrh r3, [r3, #6]
  18578. 8007686: 461a mov r2, r3
  18579. 8007688: 6878 ldr r0, [r7, #4]
  18580. 800768a: f001 fb32 bl 8008cf2 <USBD_CtlPrepareRx>
  18581. break;
  18582. 800768e: e072 b.n 8007776 <USBD_CDC_Setup+0x186>
  18583. ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest,
  18584. 8007690: 687b ldr r3, [r7, #4]
  18585. 8007692: f8d3 32c0 ldr.w r3, [r3, #704] ; 0x2c0
  18586. 8007696: 689b ldr r3, [r3, #8]
  18587. 8007698: 683a ldr r2, [r7, #0]
  18588. 800769a: 7850 ldrb r0, [r2, #1]
  18589. 800769c: 2200 movs r2, #0
  18590. 800769e: 6839 ldr r1, [r7, #0]
  18591. 80076a0: 4798 blx r3
  18592. break;
  18593. 80076a2: e068 b.n 8007776 <USBD_CDC_Setup+0x186>
  18594. case USB_REQ_TYPE_STANDARD:
  18595. switch (req->bRequest)
  18596. 80076a4: 683b ldr r3, [r7, #0]
  18597. 80076a6: 785b ldrb r3, [r3, #1]
  18598. 80076a8: 2b0b cmp r3, #11
  18599. 80076aa: d852 bhi.n 8007752 <USBD_CDC_Setup+0x162>
  18600. 80076ac: a201 add r2, pc, #4 ; (adr r2, 80076b4 <USBD_CDC_Setup+0xc4>)
  18601. 80076ae: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  18602. 80076b2: bf00 nop
  18603. 80076b4: 080076e5 .word 0x080076e5
  18604. 80076b8: 08007761 .word 0x08007761
  18605. 80076bc: 08007753 .word 0x08007753
  18606. 80076c0: 08007753 .word 0x08007753
  18607. 80076c4: 08007753 .word 0x08007753
  18608. 80076c8: 08007753 .word 0x08007753
  18609. 80076cc: 08007753 .word 0x08007753
  18610. 80076d0: 08007753 .word 0x08007753
  18611. 80076d4: 08007753 .word 0x08007753
  18612. 80076d8: 08007753 .word 0x08007753
  18613. 80076dc: 0800770f .word 0x0800770f
  18614. 80076e0: 08007739 .word 0x08007739
  18615. {
  18616. case USB_REQ_GET_STATUS:
  18617. if (pdev->dev_state == USBD_STATE_CONFIGURED)
  18618. 80076e4: 687b ldr r3, [r7, #4]
  18619. 80076e6: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  18620. 80076ea: b2db uxtb r3, r3
  18621. 80076ec: 2b03 cmp r3, #3
  18622. 80076ee: d107 bne.n 8007700 <USBD_CDC_Setup+0x110>
  18623. {
  18624. (void)USBD_CtlSendData(pdev, (uint8_t *)&status_info, 2U);
  18625. 80076f0: f107 030a add.w r3, r7, #10
  18626. 80076f4: 2202 movs r2, #2
  18627. 80076f6: 4619 mov r1, r3
  18628. 80076f8: 6878 ldr r0, [r7, #4]
  18629. 80076fa: f001 face bl 8008c9a <USBD_CtlSendData>
  18630. else
  18631. {
  18632. USBD_CtlError(pdev, req);
  18633. ret = USBD_FAIL;
  18634. }
  18635. break;
  18636. 80076fe: e032 b.n 8007766 <USBD_CDC_Setup+0x176>
  18637. USBD_CtlError(pdev, req);
  18638. 8007700: 6839 ldr r1, [r7, #0]
  18639. 8007702: 6878 ldr r0, [r7, #4]
  18640. 8007704: f001 fa58 bl 8008bb8 <USBD_CtlError>
  18641. ret = USBD_FAIL;
  18642. 8007708: 2303 movs r3, #3
  18643. 800770a: 75fb strb r3, [r7, #23]
  18644. break;
  18645. 800770c: e02b b.n 8007766 <USBD_CDC_Setup+0x176>
  18646. case USB_REQ_GET_INTERFACE:
  18647. if (pdev->dev_state == USBD_STATE_CONFIGURED)
  18648. 800770e: 687b ldr r3, [r7, #4]
  18649. 8007710: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  18650. 8007714: b2db uxtb r3, r3
  18651. 8007716: 2b03 cmp r3, #3
  18652. 8007718: d107 bne.n 800772a <USBD_CDC_Setup+0x13a>
  18653. {
  18654. (void)USBD_CtlSendData(pdev, &ifalt, 1U);
  18655. 800771a: f107 030d add.w r3, r7, #13
  18656. 800771e: 2201 movs r2, #1
  18657. 8007720: 4619 mov r1, r3
  18658. 8007722: 6878 ldr r0, [r7, #4]
  18659. 8007724: f001 fab9 bl 8008c9a <USBD_CtlSendData>
  18660. else
  18661. {
  18662. USBD_CtlError(pdev, req);
  18663. ret = USBD_FAIL;
  18664. }
  18665. break;
  18666. 8007728: e01d b.n 8007766 <USBD_CDC_Setup+0x176>
  18667. USBD_CtlError(pdev, req);
  18668. 800772a: 6839 ldr r1, [r7, #0]
  18669. 800772c: 6878 ldr r0, [r7, #4]
  18670. 800772e: f001 fa43 bl 8008bb8 <USBD_CtlError>
  18671. ret = USBD_FAIL;
  18672. 8007732: 2303 movs r3, #3
  18673. 8007734: 75fb strb r3, [r7, #23]
  18674. break;
  18675. 8007736: e016 b.n 8007766 <USBD_CDC_Setup+0x176>
  18676. case USB_REQ_SET_INTERFACE:
  18677. if (pdev->dev_state != USBD_STATE_CONFIGURED)
  18678. 8007738: 687b ldr r3, [r7, #4]
  18679. 800773a: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  18680. 800773e: b2db uxtb r3, r3
  18681. 8007740: 2b03 cmp r3, #3
  18682. 8007742: d00f beq.n 8007764 <USBD_CDC_Setup+0x174>
  18683. {
  18684. USBD_CtlError(pdev, req);
  18685. 8007744: 6839 ldr r1, [r7, #0]
  18686. 8007746: 6878 ldr r0, [r7, #4]
  18687. 8007748: f001 fa36 bl 8008bb8 <USBD_CtlError>
  18688. ret = USBD_FAIL;
  18689. 800774c: 2303 movs r3, #3
  18690. 800774e: 75fb strb r3, [r7, #23]
  18691. }
  18692. break;
  18693. 8007750: e008 b.n 8007764 <USBD_CDC_Setup+0x174>
  18694. case USB_REQ_CLEAR_FEATURE:
  18695. break;
  18696. default:
  18697. USBD_CtlError(pdev, req);
  18698. 8007752: 6839 ldr r1, [r7, #0]
  18699. 8007754: 6878 ldr r0, [r7, #4]
  18700. 8007756: f001 fa2f bl 8008bb8 <USBD_CtlError>
  18701. ret = USBD_FAIL;
  18702. 800775a: 2303 movs r3, #3
  18703. 800775c: 75fb strb r3, [r7, #23]
  18704. break;
  18705. 800775e: e002 b.n 8007766 <USBD_CDC_Setup+0x176>
  18706. break;
  18707. 8007760: bf00 nop
  18708. 8007762: e008 b.n 8007776 <USBD_CDC_Setup+0x186>
  18709. break;
  18710. 8007764: bf00 nop
  18711. }
  18712. break;
  18713. 8007766: e006 b.n 8007776 <USBD_CDC_Setup+0x186>
  18714. default:
  18715. USBD_CtlError(pdev, req);
  18716. 8007768: 6839 ldr r1, [r7, #0]
  18717. 800776a: 6878 ldr r0, [r7, #4]
  18718. 800776c: f001 fa24 bl 8008bb8 <USBD_CtlError>
  18719. ret = USBD_FAIL;
  18720. 8007770: 2303 movs r3, #3
  18721. 8007772: 75fb strb r3, [r7, #23]
  18722. break;
  18723. 8007774: bf00 nop
  18724. }
  18725. return (uint8_t)ret;
  18726. 8007776: 7dfb ldrb r3, [r7, #23]
  18727. }
  18728. 8007778: 4618 mov r0, r3
  18729. 800777a: 3718 adds r7, #24
  18730. 800777c: 46bd mov sp, r7
  18731. 800777e: bd80 pop {r7, pc}
  18732. 08007780 <USBD_CDC_DataIn>:
  18733. * @param pdev: device instance
  18734. * @param epnum: endpoint number
  18735. * @retval status
  18736. */
  18737. static uint8_t USBD_CDC_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum)
  18738. {
  18739. 8007780: b580 push {r7, lr}
  18740. 8007782: b084 sub sp, #16
  18741. 8007784: af00 add r7, sp, #0
  18742. 8007786: 6078 str r0, [r7, #4]
  18743. 8007788: 460b mov r3, r1
  18744. 800778a: 70fb strb r3, [r7, #3]
  18745. USBD_CDC_HandleTypeDef *hcdc;
  18746. PCD_HandleTypeDef *hpcd = pdev->pData;
  18747. 800778c: 687b ldr r3, [r7, #4]
  18748. 800778e: f8d3 32c4 ldr.w r3, [r3, #708] ; 0x2c4
  18749. 8007792: 60fb str r3, [r7, #12]
  18750. if (pdev->pClassData == NULL)
  18751. 8007794: 687b ldr r3, [r7, #4]
  18752. 8007796: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  18753. 800779a: 2b00 cmp r3, #0
  18754. 800779c: d101 bne.n 80077a2 <USBD_CDC_DataIn+0x22>
  18755. {
  18756. return (uint8_t)USBD_FAIL;
  18757. 800779e: 2303 movs r3, #3
  18758. 80077a0: e04f b.n 8007842 <USBD_CDC_DataIn+0xc2>
  18759. }
  18760. hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
  18761. 80077a2: 687b ldr r3, [r7, #4]
  18762. 80077a4: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  18763. 80077a8: 60bb str r3, [r7, #8]
  18764. if ((pdev->ep_in[epnum].total_length > 0U) &&
  18765. 80077aa: 78fa ldrb r2, [r7, #3]
  18766. 80077ac: 6879 ldr r1, [r7, #4]
  18767. 80077ae: 4613 mov r3, r2
  18768. 80077b0: 009b lsls r3, r3, #2
  18769. 80077b2: 4413 add r3, r2
  18770. 80077b4: 009b lsls r3, r3, #2
  18771. 80077b6: 440b add r3, r1
  18772. 80077b8: 3318 adds r3, #24
  18773. 80077ba: 681b ldr r3, [r3, #0]
  18774. 80077bc: 2b00 cmp r3, #0
  18775. 80077be: d029 beq.n 8007814 <USBD_CDC_DataIn+0x94>
  18776. ((pdev->ep_in[epnum].total_length % hpcd->IN_ep[epnum].maxpacket) == 0U))
  18777. 80077c0: 78fa ldrb r2, [r7, #3]
  18778. 80077c2: 6879 ldr r1, [r7, #4]
  18779. 80077c4: 4613 mov r3, r2
  18780. 80077c6: 009b lsls r3, r3, #2
  18781. 80077c8: 4413 add r3, r2
  18782. 80077ca: 009b lsls r3, r3, #2
  18783. 80077cc: 440b add r3, r1
  18784. 80077ce: 3318 adds r3, #24
  18785. 80077d0: 681a ldr r2, [r3, #0]
  18786. 80077d2: 78f9 ldrb r1, [r7, #3]
  18787. 80077d4: 68f8 ldr r0, [r7, #12]
  18788. 80077d6: 460b mov r3, r1
  18789. 80077d8: 00db lsls r3, r3, #3
  18790. 80077da: 1a5b subs r3, r3, r1
  18791. 80077dc: 009b lsls r3, r3, #2
  18792. 80077de: 4403 add r3, r0
  18793. 80077e0: 3344 adds r3, #68 ; 0x44
  18794. 80077e2: 681b ldr r3, [r3, #0]
  18795. 80077e4: fbb2 f1f3 udiv r1, r2, r3
  18796. 80077e8: fb03 f301 mul.w r3, r3, r1
  18797. 80077ec: 1ad3 subs r3, r2, r3
  18798. if ((pdev->ep_in[epnum].total_length > 0U) &&
  18799. 80077ee: 2b00 cmp r3, #0
  18800. 80077f0: d110 bne.n 8007814 <USBD_CDC_DataIn+0x94>
  18801. {
  18802. /* Update the packet total length */
  18803. pdev->ep_in[epnum].total_length = 0U;
  18804. 80077f2: 78fa ldrb r2, [r7, #3]
  18805. 80077f4: 6879 ldr r1, [r7, #4]
  18806. 80077f6: 4613 mov r3, r2
  18807. 80077f8: 009b lsls r3, r3, #2
  18808. 80077fa: 4413 add r3, r2
  18809. 80077fc: 009b lsls r3, r3, #2
  18810. 80077fe: 440b add r3, r1
  18811. 8007800: 3318 adds r3, #24
  18812. 8007802: 2200 movs r2, #0
  18813. 8007804: 601a str r2, [r3, #0]
  18814. /* Send ZLP */
  18815. (void)USBD_LL_Transmit(pdev, epnum, NULL, 0U);
  18816. 8007806: 78f9 ldrb r1, [r7, #3]
  18817. 8007808: 2300 movs r3, #0
  18818. 800780a: 2200 movs r2, #0
  18819. 800780c: 6878 ldr r0, [r7, #4]
  18820. 800780e: f001 ff70 bl 80096f2 <USBD_LL_Transmit>
  18821. 8007812: e015 b.n 8007840 <USBD_CDC_DataIn+0xc0>
  18822. }
  18823. else
  18824. {
  18825. hcdc->TxState = 0U;
  18826. 8007814: 68bb ldr r3, [r7, #8]
  18827. 8007816: 2200 movs r2, #0
  18828. 8007818: f8c3 2214 str.w r2, [r3, #532] ; 0x214
  18829. if (((USBD_CDC_ItfTypeDef *)pdev->pUserData)->TransmitCplt != NULL)
  18830. 800781c: 687b ldr r3, [r7, #4]
  18831. 800781e: f8d3 32c0 ldr.w r3, [r3, #704] ; 0x2c0
  18832. 8007822: 691b ldr r3, [r3, #16]
  18833. 8007824: 2b00 cmp r3, #0
  18834. 8007826: d00b beq.n 8007840 <USBD_CDC_DataIn+0xc0>
  18835. {
  18836. ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->TransmitCplt(hcdc->TxBuffer, &hcdc->TxLength, epnum);
  18837. 8007828: 687b ldr r3, [r7, #4]
  18838. 800782a: f8d3 32c0 ldr.w r3, [r3, #704] ; 0x2c0
  18839. 800782e: 691b ldr r3, [r3, #16]
  18840. 8007830: 68ba ldr r2, [r7, #8]
  18841. 8007832: f8d2 0208 ldr.w r0, [r2, #520] ; 0x208
  18842. 8007836: 68ba ldr r2, [r7, #8]
  18843. 8007838: f502 7104 add.w r1, r2, #528 ; 0x210
  18844. 800783c: 78fa ldrb r2, [r7, #3]
  18845. 800783e: 4798 blx r3
  18846. }
  18847. }
  18848. return (uint8_t)USBD_OK;
  18849. 8007840: 2300 movs r3, #0
  18850. }
  18851. 8007842: 4618 mov r0, r3
  18852. 8007844: 3710 adds r7, #16
  18853. 8007846: 46bd mov sp, r7
  18854. 8007848: bd80 pop {r7, pc}
  18855. 0800784a <USBD_CDC_DataOut>:
  18856. * @param pdev: device instance
  18857. * @param epnum: endpoint number
  18858. * @retval status
  18859. */
  18860. static uint8_t USBD_CDC_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum)
  18861. {
  18862. 800784a: b580 push {r7, lr}
  18863. 800784c: b084 sub sp, #16
  18864. 800784e: af00 add r7, sp, #0
  18865. 8007850: 6078 str r0, [r7, #4]
  18866. 8007852: 460b mov r3, r1
  18867. 8007854: 70fb strb r3, [r7, #3]
  18868. USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
  18869. 8007856: 687b ldr r3, [r7, #4]
  18870. 8007858: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  18871. 800785c: 60fb str r3, [r7, #12]
  18872. if (pdev->pClassData == NULL)
  18873. 800785e: 687b ldr r3, [r7, #4]
  18874. 8007860: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  18875. 8007864: 2b00 cmp r3, #0
  18876. 8007866: d101 bne.n 800786c <USBD_CDC_DataOut+0x22>
  18877. {
  18878. return (uint8_t)USBD_FAIL;
  18879. 8007868: 2303 movs r3, #3
  18880. 800786a: e015 b.n 8007898 <USBD_CDC_DataOut+0x4e>
  18881. }
  18882. /* Get the received data length */
  18883. hcdc->RxLength = USBD_LL_GetRxDataSize(pdev, epnum);
  18884. 800786c: 78fb ldrb r3, [r7, #3]
  18885. 800786e: 4619 mov r1, r3
  18886. 8007870: 6878 ldr r0, [r7, #4]
  18887. 8007872: f001 ff80 bl 8009776 <USBD_LL_GetRxDataSize>
  18888. 8007876: 4602 mov r2, r0
  18889. 8007878: 68fb ldr r3, [r7, #12]
  18890. 800787a: f8c3 220c str.w r2, [r3, #524] ; 0x20c
  18891. /* USB data will be immediately processed, this allow next USB traffic being
  18892. NAKed till the end of the application Xfer */
  18893. ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Receive(hcdc->RxBuffer, &hcdc->RxLength);
  18894. 800787e: 687b ldr r3, [r7, #4]
  18895. 8007880: f8d3 32c0 ldr.w r3, [r3, #704] ; 0x2c0
  18896. 8007884: 68db ldr r3, [r3, #12]
  18897. 8007886: 68fa ldr r2, [r7, #12]
  18898. 8007888: f8d2 0204 ldr.w r0, [r2, #516] ; 0x204
  18899. 800788c: 68fa ldr r2, [r7, #12]
  18900. 800788e: f502 7203 add.w r2, r2, #524 ; 0x20c
  18901. 8007892: 4611 mov r1, r2
  18902. 8007894: 4798 blx r3
  18903. return (uint8_t)USBD_OK;
  18904. 8007896: 2300 movs r3, #0
  18905. }
  18906. 8007898: 4618 mov r0, r3
  18907. 800789a: 3710 adds r7, #16
  18908. 800789c: 46bd mov sp, r7
  18909. 800789e: bd80 pop {r7, pc}
  18910. 080078a0 <USBD_CDC_EP0_RxReady>:
  18911. * Handle EP0 Rx Ready event
  18912. * @param pdev: device instance
  18913. * @retval status
  18914. */
  18915. static uint8_t USBD_CDC_EP0_RxReady(USBD_HandleTypeDef *pdev)
  18916. {
  18917. 80078a0: b580 push {r7, lr}
  18918. 80078a2: b084 sub sp, #16
  18919. 80078a4: af00 add r7, sp, #0
  18920. 80078a6: 6078 str r0, [r7, #4]
  18921. USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
  18922. 80078a8: 687b ldr r3, [r7, #4]
  18923. 80078aa: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  18924. 80078ae: 60fb str r3, [r7, #12]
  18925. if (hcdc == NULL)
  18926. 80078b0: 68fb ldr r3, [r7, #12]
  18927. 80078b2: 2b00 cmp r3, #0
  18928. 80078b4: d101 bne.n 80078ba <USBD_CDC_EP0_RxReady+0x1a>
  18929. {
  18930. return (uint8_t)USBD_FAIL;
  18931. 80078b6: 2303 movs r3, #3
  18932. 80078b8: e01b b.n 80078f2 <USBD_CDC_EP0_RxReady+0x52>
  18933. }
  18934. if ((pdev->pUserData != NULL) && (hcdc->CmdOpCode != 0xFFU))
  18935. 80078ba: 687b ldr r3, [r7, #4]
  18936. 80078bc: f8d3 32c0 ldr.w r3, [r3, #704] ; 0x2c0
  18937. 80078c0: 2b00 cmp r3, #0
  18938. 80078c2: d015 beq.n 80078f0 <USBD_CDC_EP0_RxReady+0x50>
  18939. 80078c4: 68fb ldr r3, [r7, #12]
  18940. 80078c6: f893 3200 ldrb.w r3, [r3, #512] ; 0x200
  18941. 80078ca: 2bff cmp r3, #255 ; 0xff
  18942. 80078cc: d010 beq.n 80078f0 <USBD_CDC_EP0_RxReady+0x50>
  18943. {
  18944. ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(hcdc->CmdOpCode,
  18945. 80078ce: 687b ldr r3, [r7, #4]
  18946. 80078d0: f8d3 32c0 ldr.w r3, [r3, #704] ; 0x2c0
  18947. 80078d4: 689b ldr r3, [r3, #8]
  18948. 80078d6: 68fa ldr r2, [r7, #12]
  18949. 80078d8: f892 0200 ldrb.w r0, [r2, #512] ; 0x200
  18950. (uint8_t *)hcdc->data,
  18951. 80078dc: 68f9 ldr r1, [r7, #12]
  18952. (uint16_t)hcdc->CmdLength);
  18953. 80078de: 68fa ldr r2, [r7, #12]
  18954. 80078e0: f892 2201 ldrb.w r2, [r2, #513] ; 0x201
  18955. ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(hcdc->CmdOpCode,
  18956. 80078e4: b292 uxth r2, r2
  18957. 80078e6: 4798 blx r3
  18958. hcdc->CmdOpCode = 0xFFU;
  18959. 80078e8: 68fb ldr r3, [r7, #12]
  18960. 80078ea: 22ff movs r2, #255 ; 0xff
  18961. 80078ec: f883 2200 strb.w r2, [r3, #512] ; 0x200
  18962. }
  18963. return (uint8_t)USBD_OK;
  18964. 80078f0: 2300 movs r3, #0
  18965. }
  18966. 80078f2: 4618 mov r0, r3
  18967. 80078f4: 3710 adds r7, #16
  18968. 80078f6: 46bd mov sp, r7
  18969. 80078f8: bd80 pop {r7, pc}
  18970. ...
  18971. 080078fc <USBD_CDC_GetFSCfgDesc>:
  18972. * @param speed : current device speed
  18973. * @param length : pointer data length
  18974. * @retval pointer to descriptor buffer
  18975. */
  18976. static uint8_t *USBD_CDC_GetFSCfgDesc(uint16_t *length)
  18977. {
  18978. 80078fc: b480 push {r7}
  18979. 80078fe: b083 sub sp, #12
  18980. 8007900: af00 add r7, sp, #0
  18981. 8007902: 6078 str r0, [r7, #4]
  18982. *length = (uint16_t)sizeof(USBD_CDC_CfgFSDesc);
  18983. 8007904: 687b ldr r3, [r7, #4]
  18984. 8007906: 2243 movs r2, #67 ; 0x43
  18985. 8007908: 801a strh r2, [r3, #0]
  18986. return USBD_CDC_CfgFSDesc;
  18987. 800790a: 4b03 ldr r3, [pc, #12] ; (8007918 <USBD_CDC_GetFSCfgDesc+0x1c>)
  18988. }
  18989. 800790c: 4618 mov r0, r3
  18990. 800790e: 370c adds r7, #12
  18991. 8007910: 46bd mov sp, r7
  18992. 8007912: f85d 7b04 ldr.w r7, [sp], #4
  18993. 8007916: 4770 bx lr
  18994. 8007918: 24000098 .word 0x24000098
  18995. 0800791c <USBD_CDC_GetHSCfgDesc>:
  18996. * @param speed : current device speed
  18997. * @param length : pointer data length
  18998. * @retval pointer to descriptor buffer
  18999. */
  19000. static uint8_t *USBD_CDC_GetHSCfgDesc(uint16_t *length)
  19001. {
  19002. 800791c: b480 push {r7}
  19003. 800791e: b083 sub sp, #12
  19004. 8007920: af00 add r7, sp, #0
  19005. 8007922: 6078 str r0, [r7, #4]
  19006. *length = (uint16_t)sizeof(USBD_CDC_CfgHSDesc);
  19007. 8007924: 687b ldr r3, [r7, #4]
  19008. 8007926: 2243 movs r2, #67 ; 0x43
  19009. 8007928: 801a strh r2, [r3, #0]
  19010. return USBD_CDC_CfgHSDesc;
  19011. 800792a: 4b03 ldr r3, [pc, #12] ; (8007938 <USBD_CDC_GetHSCfgDesc+0x1c>)
  19012. }
  19013. 800792c: 4618 mov r0, r3
  19014. 800792e: 370c adds r7, #12
  19015. 8007930: 46bd mov sp, r7
  19016. 8007932: f85d 7b04 ldr.w r7, [sp], #4
  19017. 8007936: 4770 bx lr
  19018. 8007938: 24000054 .word 0x24000054
  19019. 0800793c <USBD_CDC_GetOtherSpeedCfgDesc>:
  19020. * @param speed : current device speed
  19021. * @param length : pointer data length
  19022. * @retval pointer to descriptor buffer
  19023. */
  19024. static uint8_t *USBD_CDC_GetOtherSpeedCfgDesc(uint16_t *length)
  19025. {
  19026. 800793c: b480 push {r7}
  19027. 800793e: b083 sub sp, #12
  19028. 8007940: af00 add r7, sp, #0
  19029. 8007942: 6078 str r0, [r7, #4]
  19030. *length = (uint16_t)sizeof(USBD_CDC_OtherSpeedCfgDesc);
  19031. 8007944: 687b ldr r3, [r7, #4]
  19032. 8007946: 2243 movs r2, #67 ; 0x43
  19033. 8007948: 801a strh r2, [r3, #0]
  19034. return USBD_CDC_OtherSpeedCfgDesc;
  19035. 800794a: 4b03 ldr r3, [pc, #12] ; (8007958 <USBD_CDC_GetOtherSpeedCfgDesc+0x1c>)
  19036. }
  19037. 800794c: 4618 mov r0, r3
  19038. 800794e: 370c adds r7, #12
  19039. 8007950: 46bd mov sp, r7
  19040. 8007952: f85d 7b04 ldr.w r7, [sp], #4
  19041. 8007956: 4770 bx lr
  19042. 8007958: 240000dc .word 0x240000dc
  19043. 0800795c <USBD_CDC_GetDeviceQualifierDescriptor>:
  19044. * return Device Qualifier descriptor
  19045. * @param length : pointer data length
  19046. * @retval pointer to descriptor buffer
  19047. */
  19048. uint8_t *USBD_CDC_GetDeviceQualifierDescriptor(uint16_t *length)
  19049. {
  19050. 800795c: b480 push {r7}
  19051. 800795e: b083 sub sp, #12
  19052. 8007960: af00 add r7, sp, #0
  19053. 8007962: 6078 str r0, [r7, #4]
  19054. *length = (uint16_t)sizeof(USBD_CDC_DeviceQualifierDesc);
  19055. 8007964: 687b ldr r3, [r7, #4]
  19056. 8007966: 220a movs r2, #10
  19057. 8007968: 801a strh r2, [r3, #0]
  19058. return USBD_CDC_DeviceQualifierDesc;
  19059. 800796a: 4b03 ldr r3, [pc, #12] ; (8007978 <USBD_CDC_GetDeviceQualifierDescriptor+0x1c>)
  19060. }
  19061. 800796c: 4618 mov r0, r3
  19062. 800796e: 370c adds r7, #12
  19063. 8007970: 46bd mov sp, r7
  19064. 8007972: f85d 7b04 ldr.w r7, [sp], #4
  19065. 8007976: 4770 bx lr
  19066. 8007978: 24000010 .word 0x24000010
  19067. 0800797c <USBD_CDC_RegisterInterface>:
  19068. * @param fops: CD Interface callback
  19069. * @retval status
  19070. */
  19071. uint8_t USBD_CDC_RegisterInterface(USBD_HandleTypeDef *pdev,
  19072. USBD_CDC_ItfTypeDef *fops)
  19073. {
  19074. 800797c: b480 push {r7}
  19075. 800797e: b083 sub sp, #12
  19076. 8007980: af00 add r7, sp, #0
  19077. 8007982: 6078 str r0, [r7, #4]
  19078. 8007984: 6039 str r1, [r7, #0]
  19079. if (fops == NULL)
  19080. 8007986: 683b ldr r3, [r7, #0]
  19081. 8007988: 2b00 cmp r3, #0
  19082. 800798a: d101 bne.n 8007990 <USBD_CDC_RegisterInterface+0x14>
  19083. {
  19084. return (uint8_t)USBD_FAIL;
  19085. 800798c: 2303 movs r3, #3
  19086. 800798e: e004 b.n 800799a <USBD_CDC_RegisterInterface+0x1e>
  19087. }
  19088. pdev->pUserData = fops;
  19089. 8007990: 687b ldr r3, [r7, #4]
  19090. 8007992: 683a ldr r2, [r7, #0]
  19091. 8007994: f8c3 22c0 str.w r2, [r3, #704] ; 0x2c0
  19092. return (uint8_t)USBD_OK;
  19093. 8007998: 2300 movs r3, #0
  19094. }
  19095. 800799a: 4618 mov r0, r3
  19096. 800799c: 370c adds r7, #12
  19097. 800799e: 46bd mov sp, r7
  19098. 80079a0: f85d 7b04 ldr.w r7, [sp], #4
  19099. 80079a4: 4770 bx lr
  19100. 080079a6 <USBD_CDC_SetTxBuffer>:
  19101. * @param pbuff: Tx Buffer
  19102. * @retval status
  19103. */
  19104. uint8_t USBD_CDC_SetTxBuffer(USBD_HandleTypeDef *pdev,
  19105. uint8_t *pbuff, uint32_t length)
  19106. {
  19107. 80079a6: b480 push {r7}
  19108. 80079a8: b087 sub sp, #28
  19109. 80079aa: af00 add r7, sp, #0
  19110. 80079ac: 60f8 str r0, [r7, #12]
  19111. 80079ae: 60b9 str r1, [r7, #8]
  19112. 80079b0: 607a str r2, [r7, #4]
  19113. USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
  19114. 80079b2: 68fb ldr r3, [r7, #12]
  19115. 80079b4: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  19116. 80079b8: 617b str r3, [r7, #20]
  19117. if (hcdc == NULL)
  19118. 80079ba: 697b ldr r3, [r7, #20]
  19119. 80079bc: 2b00 cmp r3, #0
  19120. 80079be: d101 bne.n 80079c4 <USBD_CDC_SetTxBuffer+0x1e>
  19121. {
  19122. return (uint8_t)USBD_FAIL;
  19123. 80079c0: 2303 movs r3, #3
  19124. 80079c2: e008 b.n 80079d6 <USBD_CDC_SetTxBuffer+0x30>
  19125. }
  19126. hcdc->TxBuffer = pbuff;
  19127. 80079c4: 697b ldr r3, [r7, #20]
  19128. 80079c6: 68ba ldr r2, [r7, #8]
  19129. 80079c8: f8c3 2208 str.w r2, [r3, #520] ; 0x208
  19130. hcdc->TxLength = length;
  19131. 80079cc: 697b ldr r3, [r7, #20]
  19132. 80079ce: 687a ldr r2, [r7, #4]
  19133. 80079d0: f8c3 2210 str.w r2, [r3, #528] ; 0x210
  19134. return (uint8_t)USBD_OK;
  19135. 80079d4: 2300 movs r3, #0
  19136. }
  19137. 80079d6: 4618 mov r0, r3
  19138. 80079d8: 371c adds r7, #28
  19139. 80079da: 46bd mov sp, r7
  19140. 80079dc: f85d 7b04 ldr.w r7, [sp], #4
  19141. 80079e0: 4770 bx lr
  19142. 080079e2 <USBD_CDC_SetRxBuffer>:
  19143. * @param pdev: device instance
  19144. * @param pbuff: Rx Buffer
  19145. * @retval status
  19146. */
  19147. uint8_t USBD_CDC_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff)
  19148. {
  19149. 80079e2: b480 push {r7}
  19150. 80079e4: b085 sub sp, #20
  19151. 80079e6: af00 add r7, sp, #0
  19152. 80079e8: 6078 str r0, [r7, #4]
  19153. 80079ea: 6039 str r1, [r7, #0]
  19154. USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
  19155. 80079ec: 687b ldr r3, [r7, #4]
  19156. 80079ee: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  19157. 80079f2: 60fb str r3, [r7, #12]
  19158. if (hcdc == NULL)
  19159. 80079f4: 68fb ldr r3, [r7, #12]
  19160. 80079f6: 2b00 cmp r3, #0
  19161. 80079f8: d101 bne.n 80079fe <USBD_CDC_SetRxBuffer+0x1c>
  19162. {
  19163. return (uint8_t)USBD_FAIL;
  19164. 80079fa: 2303 movs r3, #3
  19165. 80079fc: e004 b.n 8007a08 <USBD_CDC_SetRxBuffer+0x26>
  19166. }
  19167. hcdc->RxBuffer = pbuff;
  19168. 80079fe: 68fb ldr r3, [r7, #12]
  19169. 8007a00: 683a ldr r2, [r7, #0]
  19170. 8007a02: f8c3 2204 str.w r2, [r3, #516] ; 0x204
  19171. return (uint8_t)USBD_OK;
  19172. 8007a06: 2300 movs r3, #0
  19173. }
  19174. 8007a08: 4618 mov r0, r3
  19175. 8007a0a: 3714 adds r7, #20
  19176. 8007a0c: 46bd mov sp, r7
  19177. 8007a0e: f85d 7b04 ldr.w r7, [sp], #4
  19178. 8007a12: 4770 bx lr
  19179. 08007a14 <USBD_CDC_TransmitPacket>:
  19180. * Transmit packet on IN endpoint
  19181. * @param pdev: device instance
  19182. * @retval status
  19183. */
  19184. uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev)
  19185. {
  19186. 8007a14: b580 push {r7, lr}
  19187. 8007a16: b084 sub sp, #16
  19188. 8007a18: af00 add r7, sp, #0
  19189. 8007a1a: 6078 str r0, [r7, #4]
  19190. USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
  19191. 8007a1c: 687b ldr r3, [r7, #4]
  19192. 8007a1e: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  19193. 8007a22: 60bb str r3, [r7, #8]
  19194. USBD_StatusTypeDef ret = USBD_BUSY;
  19195. 8007a24: 2301 movs r3, #1
  19196. 8007a26: 73fb strb r3, [r7, #15]
  19197. if (pdev->pClassData == NULL)
  19198. 8007a28: 687b ldr r3, [r7, #4]
  19199. 8007a2a: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  19200. 8007a2e: 2b00 cmp r3, #0
  19201. 8007a30: d101 bne.n 8007a36 <USBD_CDC_TransmitPacket+0x22>
  19202. {
  19203. return (uint8_t)USBD_FAIL;
  19204. 8007a32: 2303 movs r3, #3
  19205. 8007a34: e01a b.n 8007a6c <USBD_CDC_TransmitPacket+0x58>
  19206. }
  19207. if (hcdc->TxState == 0U)
  19208. 8007a36: 68bb ldr r3, [r7, #8]
  19209. 8007a38: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214
  19210. 8007a3c: 2b00 cmp r3, #0
  19211. 8007a3e: d114 bne.n 8007a6a <USBD_CDC_TransmitPacket+0x56>
  19212. {
  19213. /* Tx Transfer in progress */
  19214. hcdc->TxState = 1U;
  19215. 8007a40: 68bb ldr r3, [r7, #8]
  19216. 8007a42: 2201 movs r2, #1
  19217. 8007a44: f8c3 2214 str.w r2, [r3, #532] ; 0x214
  19218. /* Update the packet total length */
  19219. pdev->ep_in[CDC_IN_EP & 0xFU].total_length = hcdc->TxLength;
  19220. 8007a48: 68bb ldr r3, [r7, #8]
  19221. 8007a4a: f8d3 2210 ldr.w r2, [r3, #528] ; 0x210
  19222. 8007a4e: 687b ldr r3, [r7, #4]
  19223. 8007a50: 62da str r2, [r3, #44] ; 0x2c
  19224. /* Transmit next packet */
  19225. (void)USBD_LL_Transmit(pdev, CDC_IN_EP, hcdc->TxBuffer, hcdc->TxLength);
  19226. 8007a52: 68bb ldr r3, [r7, #8]
  19227. 8007a54: f8d3 2208 ldr.w r2, [r3, #520] ; 0x208
  19228. 8007a58: 68bb ldr r3, [r7, #8]
  19229. 8007a5a: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210
  19230. 8007a5e: 2181 movs r1, #129 ; 0x81
  19231. 8007a60: 6878 ldr r0, [r7, #4]
  19232. 8007a62: f001 fe46 bl 80096f2 <USBD_LL_Transmit>
  19233. ret = USBD_OK;
  19234. 8007a66: 2300 movs r3, #0
  19235. 8007a68: 73fb strb r3, [r7, #15]
  19236. }
  19237. return (uint8_t)ret;
  19238. 8007a6a: 7bfb ldrb r3, [r7, #15]
  19239. }
  19240. 8007a6c: 4618 mov r0, r3
  19241. 8007a6e: 3710 adds r7, #16
  19242. 8007a70: 46bd mov sp, r7
  19243. 8007a72: bd80 pop {r7, pc}
  19244. 08007a74 <USBD_CDC_ReceivePacket>:
  19245. * prepare OUT Endpoint for reception
  19246. * @param pdev: device instance
  19247. * @retval status
  19248. */
  19249. uint8_t USBD_CDC_ReceivePacket(USBD_HandleTypeDef *pdev)
  19250. {
  19251. 8007a74: b580 push {r7, lr}
  19252. 8007a76: b084 sub sp, #16
  19253. 8007a78: af00 add r7, sp, #0
  19254. 8007a7a: 6078 str r0, [r7, #4]
  19255. USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
  19256. 8007a7c: 687b ldr r3, [r7, #4]
  19257. 8007a7e: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  19258. 8007a82: 60fb str r3, [r7, #12]
  19259. if (pdev->pClassData == NULL)
  19260. 8007a84: 687b ldr r3, [r7, #4]
  19261. 8007a86: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  19262. 8007a8a: 2b00 cmp r3, #0
  19263. 8007a8c: d101 bne.n 8007a92 <USBD_CDC_ReceivePacket+0x1e>
  19264. {
  19265. return (uint8_t)USBD_FAIL;
  19266. 8007a8e: 2303 movs r3, #3
  19267. 8007a90: e016 b.n 8007ac0 <USBD_CDC_ReceivePacket+0x4c>
  19268. }
  19269. if (pdev->dev_speed == USBD_SPEED_HIGH)
  19270. 8007a92: 687b ldr r3, [r7, #4]
  19271. 8007a94: 7c1b ldrb r3, [r3, #16]
  19272. 8007a96: 2b00 cmp r3, #0
  19273. 8007a98: d109 bne.n 8007aae <USBD_CDC_ReceivePacket+0x3a>
  19274. {
  19275. /* Prepare Out endpoint to receive next packet */
  19276. (void)USBD_LL_PrepareReceive(pdev, CDC_OUT_EP, hcdc->RxBuffer,
  19277. 8007a9a: 68fb ldr r3, [r7, #12]
  19278. 8007a9c: f8d3 2204 ldr.w r2, [r3, #516] ; 0x204
  19279. 8007aa0: f44f 7300 mov.w r3, #512 ; 0x200
  19280. 8007aa4: 2101 movs r1, #1
  19281. 8007aa6: 6878 ldr r0, [r7, #4]
  19282. 8007aa8: f001 fe44 bl 8009734 <USBD_LL_PrepareReceive>
  19283. 8007aac: e007 b.n 8007abe <USBD_CDC_ReceivePacket+0x4a>
  19284. CDC_DATA_HS_OUT_PACKET_SIZE);
  19285. }
  19286. else
  19287. {
  19288. /* Prepare Out endpoint to receive next packet */
  19289. (void)USBD_LL_PrepareReceive(pdev, CDC_OUT_EP, hcdc->RxBuffer,
  19290. 8007aae: 68fb ldr r3, [r7, #12]
  19291. 8007ab0: f8d3 2204 ldr.w r2, [r3, #516] ; 0x204
  19292. 8007ab4: 2340 movs r3, #64 ; 0x40
  19293. 8007ab6: 2101 movs r1, #1
  19294. 8007ab8: 6878 ldr r0, [r7, #4]
  19295. 8007aba: f001 fe3b bl 8009734 <USBD_LL_PrepareReceive>
  19296. CDC_DATA_FS_OUT_PACKET_SIZE);
  19297. }
  19298. return (uint8_t)USBD_OK;
  19299. 8007abe: 2300 movs r3, #0
  19300. }
  19301. 8007ac0: 4618 mov r0, r3
  19302. 8007ac2: 3710 adds r7, #16
  19303. 8007ac4: 46bd mov sp, r7
  19304. 8007ac6: bd80 pop {r7, pc}
  19305. 08007ac8 <USBD_Init>:
  19306. * @param id: Low level core index
  19307. * @retval None
  19308. */
  19309. USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev,
  19310. USBD_DescriptorsTypeDef *pdesc, uint8_t id)
  19311. {
  19312. 8007ac8: b580 push {r7, lr}
  19313. 8007aca: b086 sub sp, #24
  19314. 8007acc: af00 add r7, sp, #0
  19315. 8007ace: 60f8 str r0, [r7, #12]
  19316. 8007ad0: 60b9 str r1, [r7, #8]
  19317. 8007ad2: 4613 mov r3, r2
  19318. 8007ad4: 71fb strb r3, [r7, #7]
  19319. USBD_StatusTypeDef ret;
  19320. /* Check whether the USB Host handle is valid */
  19321. if (pdev == NULL)
  19322. 8007ad6: 68fb ldr r3, [r7, #12]
  19323. 8007ad8: 2b00 cmp r3, #0
  19324. 8007ada: d101 bne.n 8007ae0 <USBD_Init+0x18>
  19325. {
  19326. #if (USBD_DEBUG_LEVEL > 1U)
  19327. USBD_ErrLog("Invalid Device handle");
  19328. #endif
  19329. return USBD_FAIL;
  19330. 8007adc: 2303 movs r3, #3
  19331. 8007ade: e01f b.n 8007b20 <USBD_Init+0x58>
  19332. }
  19333. /* Unlink previous class resources */
  19334. pdev->pClass = NULL;
  19335. 8007ae0: 68fb ldr r3, [r7, #12]
  19336. 8007ae2: 2200 movs r2, #0
  19337. 8007ae4: f8c3 22b8 str.w r2, [r3, #696] ; 0x2b8
  19338. pdev->pUserData = NULL;
  19339. 8007ae8: 68fb ldr r3, [r7, #12]
  19340. 8007aea: 2200 movs r2, #0
  19341. 8007aec: f8c3 22c0 str.w r2, [r3, #704] ; 0x2c0
  19342. pdev->pConfDesc = NULL;
  19343. 8007af0: 68fb ldr r3, [r7, #12]
  19344. 8007af2: 2200 movs r2, #0
  19345. 8007af4: f8c3 22cc str.w r2, [r3, #716] ; 0x2cc
  19346. /* Assign USBD Descriptors */
  19347. if (pdesc != NULL)
  19348. 8007af8: 68bb ldr r3, [r7, #8]
  19349. 8007afa: 2b00 cmp r3, #0
  19350. 8007afc: d003 beq.n 8007b06 <USBD_Init+0x3e>
  19351. {
  19352. pdev->pDesc = pdesc;
  19353. 8007afe: 68fb ldr r3, [r7, #12]
  19354. 8007b00: 68ba ldr r2, [r7, #8]
  19355. 8007b02: f8c3 22b4 str.w r2, [r3, #692] ; 0x2b4
  19356. }
  19357. /* Set Device initial State */
  19358. pdev->dev_state = USBD_STATE_DEFAULT;
  19359. 8007b06: 68fb ldr r3, [r7, #12]
  19360. 8007b08: 2201 movs r2, #1
  19361. 8007b0a: f883 229c strb.w r2, [r3, #668] ; 0x29c
  19362. pdev->id = id;
  19363. 8007b0e: 68fb ldr r3, [r7, #12]
  19364. 8007b10: 79fa ldrb r2, [r7, #7]
  19365. 8007b12: 701a strb r2, [r3, #0]
  19366. /* Initialize low level driver */
  19367. ret = USBD_LL_Init(pdev);
  19368. 8007b14: 68f8 ldr r0, [r7, #12]
  19369. 8007b16: f001 fcad bl 8009474 <USBD_LL_Init>
  19370. 8007b1a: 4603 mov r3, r0
  19371. 8007b1c: 75fb strb r3, [r7, #23]
  19372. return ret;
  19373. 8007b1e: 7dfb ldrb r3, [r7, #23]
  19374. }
  19375. 8007b20: 4618 mov r0, r3
  19376. 8007b22: 3718 adds r7, #24
  19377. 8007b24: 46bd mov sp, r7
  19378. 8007b26: bd80 pop {r7, pc}
  19379. 08007b28 <USBD_RegisterClass>:
  19380. * @param pDevice : Device Handle
  19381. * @param pclass: Class handle
  19382. * @retval USBD Status
  19383. */
  19384. USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass)
  19385. {
  19386. 8007b28: b580 push {r7, lr}
  19387. 8007b2a: b084 sub sp, #16
  19388. 8007b2c: af00 add r7, sp, #0
  19389. 8007b2e: 6078 str r0, [r7, #4]
  19390. 8007b30: 6039 str r1, [r7, #0]
  19391. uint16_t len = 0U;
  19392. 8007b32: 2300 movs r3, #0
  19393. 8007b34: 81fb strh r3, [r7, #14]
  19394. if (pclass == NULL)
  19395. 8007b36: 683b ldr r3, [r7, #0]
  19396. 8007b38: 2b00 cmp r3, #0
  19397. 8007b3a: d101 bne.n 8007b40 <USBD_RegisterClass+0x18>
  19398. {
  19399. #if (USBD_DEBUG_LEVEL > 1U)
  19400. USBD_ErrLog("Invalid Class handle");
  19401. #endif
  19402. return USBD_FAIL;
  19403. 8007b3c: 2303 movs r3, #3
  19404. 8007b3e: e016 b.n 8007b6e <USBD_RegisterClass+0x46>
  19405. }
  19406. /* link the class to the USB Device handle */
  19407. pdev->pClass = pclass;
  19408. 8007b40: 687b ldr r3, [r7, #4]
  19409. 8007b42: 683a ldr r2, [r7, #0]
  19410. 8007b44: f8c3 22b8 str.w r2, [r3, #696] ; 0x2b8
  19411. if (pdev->pClass->GetHSConfigDescriptor != NULL)
  19412. {
  19413. pdev->pConfDesc = (void *)pdev->pClass->GetHSConfigDescriptor(&len);
  19414. }
  19415. #else /* Default USE_USB_FS */
  19416. if (pdev->pClass->GetFSConfigDescriptor != NULL)
  19417. 8007b48: 687b ldr r3, [r7, #4]
  19418. 8007b4a: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  19419. 8007b4e: 6adb ldr r3, [r3, #44] ; 0x2c
  19420. 8007b50: 2b00 cmp r3, #0
  19421. 8007b52: d00b beq.n 8007b6c <USBD_RegisterClass+0x44>
  19422. {
  19423. pdev->pConfDesc = (void *)pdev->pClass->GetFSConfigDescriptor(&len);
  19424. 8007b54: 687b ldr r3, [r7, #4]
  19425. 8007b56: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  19426. 8007b5a: 6adb ldr r3, [r3, #44] ; 0x2c
  19427. 8007b5c: f107 020e add.w r2, r7, #14
  19428. 8007b60: 4610 mov r0, r2
  19429. 8007b62: 4798 blx r3
  19430. 8007b64: 4602 mov r2, r0
  19431. 8007b66: 687b ldr r3, [r7, #4]
  19432. 8007b68: f8c3 22cc str.w r2, [r3, #716] ; 0x2cc
  19433. }
  19434. #endif /* USE_USB_FS */
  19435. return USBD_OK;
  19436. 8007b6c: 2300 movs r3, #0
  19437. }
  19438. 8007b6e: 4618 mov r0, r3
  19439. 8007b70: 3710 adds r7, #16
  19440. 8007b72: 46bd mov sp, r7
  19441. 8007b74: bd80 pop {r7, pc}
  19442. 08007b76 <USBD_Start>:
  19443. * Start the USB Device Core.
  19444. * @param pdev: Device Handle
  19445. * @retval USBD Status
  19446. */
  19447. USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev)
  19448. {
  19449. 8007b76: b580 push {r7, lr}
  19450. 8007b78: b082 sub sp, #8
  19451. 8007b7a: af00 add r7, sp, #0
  19452. 8007b7c: 6078 str r0, [r7, #4]
  19453. /* Start the low level driver */
  19454. return USBD_LL_Start(pdev);
  19455. 8007b7e: 6878 ldr r0, [r7, #4]
  19456. 8007b80: f001 fcce bl 8009520 <USBD_LL_Start>
  19457. 8007b84: 4603 mov r3, r0
  19458. }
  19459. 8007b86: 4618 mov r0, r3
  19460. 8007b88: 3708 adds r7, #8
  19461. 8007b8a: 46bd mov sp, r7
  19462. 8007b8c: bd80 pop {r7, pc}
  19463. 08007b8e <USBD_RunTestMode>:
  19464. * Launch test mode process
  19465. * @param pdev: device instance
  19466. * @retval status
  19467. */
  19468. USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev)
  19469. {
  19470. 8007b8e: b480 push {r7}
  19471. 8007b90: b083 sub sp, #12
  19472. 8007b92: af00 add r7, sp, #0
  19473. 8007b94: 6078 str r0, [r7, #4]
  19474. /* Prevent unused argument compilation warning */
  19475. UNUSED(pdev);
  19476. return USBD_OK;
  19477. 8007b96: 2300 movs r3, #0
  19478. }
  19479. 8007b98: 4618 mov r0, r3
  19480. 8007b9a: 370c adds r7, #12
  19481. 8007b9c: 46bd mov sp, r7
  19482. 8007b9e: f85d 7b04 ldr.w r7, [sp], #4
  19483. 8007ba2: 4770 bx lr
  19484. 08007ba4 <USBD_SetClassConfig>:
  19485. * @param cfgidx: configuration index
  19486. * @retval status
  19487. */
  19488. USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
  19489. {
  19490. 8007ba4: b580 push {r7, lr}
  19491. 8007ba6: b084 sub sp, #16
  19492. 8007ba8: af00 add r7, sp, #0
  19493. 8007baa: 6078 str r0, [r7, #4]
  19494. 8007bac: 460b mov r3, r1
  19495. 8007bae: 70fb strb r3, [r7, #3]
  19496. USBD_StatusTypeDef ret = USBD_FAIL;
  19497. 8007bb0: 2303 movs r3, #3
  19498. 8007bb2: 73fb strb r3, [r7, #15]
  19499. if (pdev->pClass != NULL)
  19500. 8007bb4: 687b ldr r3, [r7, #4]
  19501. 8007bb6: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  19502. 8007bba: 2b00 cmp r3, #0
  19503. 8007bbc: d009 beq.n 8007bd2 <USBD_SetClassConfig+0x2e>
  19504. {
  19505. /* Set configuration and Start the Class */
  19506. ret = (USBD_StatusTypeDef)pdev->pClass->Init(pdev, cfgidx);
  19507. 8007bbe: 687b ldr r3, [r7, #4]
  19508. 8007bc0: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  19509. 8007bc4: 681b ldr r3, [r3, #0]
  19510. 8007bc6: 78fa ldrb r2, [r7, #3]
  19511. 8007bc8: 4611 mov r1, r2
  19512. 8007bca: 6878 ldr r0, [r7, #4]
  19513. 8007bcc: 4798 blx r3
  19514. 8007bce: 4603 mov r3, r0
  19515. 8007bd0: 73fb strb r3, [r7, #15]
  19516. }
  19517. return ret;
  19518. 8007bd2: 7bfb ldrb r3, [r7, #15]
  19519. }
  19520. 8007bd4: 4618 mov r0, r3
  19521. 8007bd6: 3710 adds r7, #16
  19522. 8007bd8: 46bd mov sp, r7
  19523. 8007bda: bd80 pop {r7, pc}
  19524. 08007bdc <USBD_ClrClassConfig>:
  19525. * @param pdev: device instance
  19526. * @param cfgidx: configuration index
  19527. * @retval status: USBD_StatusTypeDef
  19528. */
  19529. USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
  19530. {
  19531. 8007bdc: b580 push {r7, lr}
  19532. 8007bde: b082 sub sp, #8
  19533. 8007be0: af00 add r7, sp, #0
  19534. 8007be2: 6078 str r0, [r7, #4]
  19535. 8007be4: 460b mov r3, r1
  19536. 8007be6: 70fb strb r3, [r7, #3]
  19537. /* Clear configuration and De-initialize the Class process */
  19538. if (pdev->pClass != NULL)
  19539. 8007be8: 687b ldr r3, [r7, #4]
  19540. 8007bea: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  19541. 8007bee: 2b00 cmp r3, #0
  19542. 8007bf0: d007 beq.n 8007c02 <USBD_ClrClassConfig+0x26>
  19543. {
  19544. pdev->pClass->DeInit(pdev, cfgidx);
  19545. 8007bf2: 687b ldr r3, [r7, #4]
  19546. 8007bf4: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  19547. 8007bf8: 685b ldr r3, [r3, #4]
  19548. 8007bfa: 78fa ldrb r2, [r7, #3]
  19549. 8007bfc: 4611 mov r1, r2
  19550. 8007bfe: 6878 ldr r0, [r7, #4]
  19551. 8007c00: 4798 blx r3
  19552. }
  19553. return USBD_OK;
  19554. 8007c02: 2300 movs r3, #0
  19555. }
  19556. 8007c04: 4618 mov r0, r3
  19557. 8007c06: 3708 adds r7, #8
  19558. 8007c08: 46bd mov sp, r7
  19559. 8007c0a: bd80 pop {r7, pc}
  19560. 08007c0c <USBD_LL_SetupStage>:
  19561. * Handle the setup stage
  19562. * @param pdev: device instance
  19563. * @retval status
  19564. */
  19565. USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
  19566. {
  19567. 8007c0c: b580 push {r7, lr}
  19568. 8007c0e: b084 sub sp, #16
  19569. 8007c10: af00 add r7, sp, #0
  19570. 8007c12: 6078 str r0, [r7, #4]
  19571. 8007c14: 6039 str r1, [r7, #0]
  19572. USBD_StatusTypeDef ret;
  19573. USBD_ParseSetupRequest(&pdev->request, psetup);
  19574. 8007c16: 687b ldr r3, [r7, #4]
  19575. 8007c18: f203 23aa addw r3, r3, #682 ; 0x2aa
  19576. 8007c1c: 6839 ldr r1, [r7, #0]
  19577. 8007c1e: 4618 mov r0, r3
  19578. 8007c20: f000 ff90 bl 8008b44 <USBD_ParseSetupRequest>
  19579. pdev->ep0_state = USBD_EP0_SETUP;
  19580. 8007c24: 687b ldr r3, [r7, #4]
  19581. 8007c26: 2201 movs r2, #1
  19582. 8007c28: f8c3 2294 str.w r2, [r3, #660] ; 0x294
  19583. pdev->ep0_data_len = pdev->request.wLength;
  19584. 8007c2c: 687b ldr r3, [r7, #4]
  19585. 8007c2e: f8b3 32b0 ldrh.w r3, [r3, #688] ; 0x2b0
  19586. 8007c32: 461a mov r2, r3
  19587. 8007c34: 687b ldr r3, [r7, #4]
  19588. 8007c36: f8c3 2298 str.w r2, [r3, #664] ; 0x298
  19589. switch (pdev->request.bmRequest & 0x1FU)
  19590. 8007c3a: 687b ldr r3, [r7, #4]
  19591. 8007c3c: f893 32aa ldrb.w r3, [r3, #682] ; 0x2aa
  19592. 8007c40: f003 031f and.w r3, r3, #31
  19593. 8007c44: 2b02 cmp r3, #2
  19594. 8007c46: d01a beq.n 8007c7e <USBD_LL_SetupStage+0x72>
  19595. 8007c48: 2b02 cmp r3, #2
  19596. 8007c4a: d822 bhi.n 8007c92 <USBD_LL_SetupStage+0x86>
  19597. 8007c4c: 2b00 cmp r3, #0
  19598. 8007c4e: d002 beq.n 8007c56 <USBD_LL_SetupStage+0x4a>
  19599. 8007c50: 2b01 cmp r3, #1
  19600. 8007c52: d00a beq.n 8007c6a <USBD_LL_SetupStage+0x5e>
  19601. 8007c54: e01d b.n 8007c92 <USBD_LL_SetupStage+0x86>
  19602. {
  19603. case USB_REQ_RECIPIENT_DEVICE:
  19604. ret = USBD_StdDevReq(pdev, &pdev->request);
  19605. 8007c56: 687b ldr r3, [r7, #4]
  19606. 8007c58: f203 23aa addw r3, r3, #682 ; 0x2aa
  19607. 8007c5c: 4619 mov r1, r3
  19608. 8007c5e: 6878 ldr r0, [r7, #4]
  19609. 8007c60: f000 fa62 bl 8008128 <USBD_StdDevReq>
  19610. 8007c64: 4603 mov r3, r0
  19611. 8007c66: 73fb strb r3, [r7, #15]
  19612. break;
  19613. 8007c68: e020 b.n 8007cac <USBD_LL_SetupStage+0xa0>
  19614. case USB_REQ_RECIPIENT_INTERFACE:
  19615. ret = USBD_StdItfReq(pdev, &pdev->request);
  19616. 8007c6a: 687b ldr r3, [r7, #4]
  19617. 8007c6c: f203 23aa addw r3, r3, #682 ; 0x2aa
  19618. 8007c70: 4619 mov r1, r3
  19619. 8007c72: 6878 ldr r0, [r7, #4]
  19620. 8007c74: f000 fac6 bl 8008204 <USBD_StdItfReq>
  19621. 8007c78: 4603 mov r3, r0
  19622. 8007c7a: 73fb strb r3, [r7, #15]
  19623. break;
  19624. 8007c7c: e016 b.n 8007cac <USBD_LL_SetupStage+0xa0>
  19625. case USB_REQ_RECIPIENT_ENDPOINT:
  19626. ret = USBD_StdEPReq(pdev, &pdev->request);
  19627. 8007c7e: 687b ldr r3, [r7, #4]
  19628. 8007c80: f203 23aa addw r3, r3, #682 ; 0x2aa
  19629. 8007c84: 4619 mov r1, r3
  19630. 8007c86: 6878 ldr r0, [r7, #4]
  19631. 8007c88: f000 fb05 bl 8008296 <USBD_StdEPReq>
  19632. 8007c8c: 4603 mov r3, r0
  19633. 8007c8e: 73fb strb r3, [r7, #15]
  19634. break;
  19635. 8007c90: e00c b.n 8007cac <USBD_LL_SetupStage+0xa0>
  19636. default:
  19637. ret = USBD_LL_StallEP(pdev, (pdev->request.bmRequest & 0x80U));
  19638. 8007c92: 687b ldr r3, [r7, #4]
  19639. 8007c94: f893 32aa ldrb.w r3, [r3, #682] ; 0x2aa
  19640. 8007c98: f023 037f bic.w r3, r3, #127 ; 0x7f
  19641. 8007c9c: b2db uxtb r3, r3
  19642. 8007c9e: 4619 mov r1, r3
  19643. 8007ca0: 6878 ldr r0, [r7, #4]
  19644. 8007ca2: f001 fc9d bl 80095e0 <USBD_LL_StallEP>
  19645. 8007ca6: 4603 mov r3, r0
  19646. 8007ca8: 73fb strb r3, [r7, #15]
  19647. break;
  19648. 8007caa: bf00 nop
  19649. }
  19650. return ret;
  19651. 8007cac: 7bfb ldrb r3, [r7, #15]
  19652. }
  19653. 8007cae: 4618 mov r0, r3
  19654. 8007cb0: 3710 adds r7, #16
  19655. 8007cb2: 46bd mov sp, r7
  19656. 8007cb4: bd80 pop {r7, pc}
  19657. 08007cb6 <USBD_LL_DataOutStage>:
  19658. * @param pdata: data pointer
  19659. * @retval status
  19660. */
  19661. USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev,
  19662. uint8_t epnum, uint8_t *pdata)
  19663. {
  19664. 8007cb6: b580 push {r7, lr}
  19665. 8007cb8: b086 sub sp, #24
  19666. 8007cba: af00 add r7, sp, #0
  19667. 8007cbc: 60f8 str r0, [r7, #12]
  19668. 8007cbe: 460b mov r3, r1
  19669. 8007cc0: 607a str r2, [r7, #4]
  19670. 8007cc2: 72fb strb r3, [r7, #11]
  19671. USBD_EndpointTypeDef *pep;
  19672. USBD_StatusTypeDef ret;
  19673. if (epnum == 0U)
  19674. 8007cc4: 7afb ldrb r3, [r7, #11]
  19675. 8007cc6: 2b00 cmp r3, #0
  19676. 8007cc8: d138 bne.n 8007d3c <USBD_LL_DataOutStage+0x86>
  19677. {
  19678. pep = &pdev->ep_out[0];
  19679. 8007cca: 68fb ldr r3, [r7, #12]
  19680. 8007ccc: f503 73aa add.w r3, r3, #340 ; 0x154
  19681. 8007cd0: 613b str r3, [r7, #16]
  19682. if (pdev->ep0_state == USBD_EP0_DATA_OUT)
  19683. 8007cd2: 68fb ldr r3, [r7, #12]
  19684. 8007cd4: f8d3 3294 ldr.w r3, [r3, #660] ; 0x294
  19685. 8007cd8: 2b03 cmp r3, #3
  19686. 8007cda: d14a bne.n 8007d72 <USBD_LL_DataOutStage+0xbc>
  19687. {
  19688. if (pep->rem_length > pep->maxpacket)
  19689. 8007cdc: 693b ldr r3, [r7, #16]
  19690. 8007cde: 689a ldr r2, [r3, #8]
  19691. 8007ce0: 693b ldr r3, [r7, #16]
  19692. 8007ce2: 68db ldr r3, [r3, #12]
  19693. 8007ce4: 429a cmp r2, r3
  19694. 8007ce6: d913 bls.n 8007d10 <USBD_LL_DataOutStage+0x5a>
  19695. {
  19696. pep->rem_length -= pep->maxpacket;
  19697. 8007ce8: 693b ldr r3, [r7, #16]
  19698. 8007cea: 689a ldr r2, [r3, #8]
  19699. 8007cec: 693b ldr r3, [r7, #16]
  19700. 8007cee: 68db ldr r3, [r3, #12]
  19701. 8007cf0: 1ad2 subs r2, r2, r3
  19702. 8007cf2: 693b ldr r3, [r7, #16]
  19703. 8007cf4: 609a str r2, [r3, #8]
  19704. (void)USBD_CtlContinueRx(pdev, pdata, MIN(pep->rem_length, pep->maxpacket));
  19705. 8007cf6: 693b ldr r3, [r7, #16]
  19706. 8007cf8: 68da ldr r2, [r3, #12]
  19707. 8007cfa: 693b ldr r3, [r7, #16]
  19708. 8007cfc: 689b ldr r3, [r3, #8]
  19709. 8007cfe: 4293 cmp r3, r2
  19710. 8007d00: bf28 it cs
  19711. 8007d02: 4613 movcs r3, r2
  19712. 8007d04: 461a mov r2, r3
  19713. 8007d06: 6879 ldr r1, [r7, #4]
  19714. 8007d08: 68f8 ldr r0, [r7, #12]
  19715. 8007d0a: f001 f80f bl 8008d2c <USBD_CtlContinueRx>
  19716. 8007d0e: e030 b.n 8007d72 <USBD_LL_DataOutStage+0xbc>
  19717. }
  19718. else
  19719. {
  19720. if (pdev->dev_state == USBD_STATE_CONFIGURED)
  19721. 8007d10: 68fb ldr r3, [r7, #12]
  19722. 8007d12: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  19723. 8007d16: b2db uxtb r3, r3
  19724. 8007d18: 2b03 cmp r3, #3
  19725. 8007d1a: d10b bne.n 8007d34 <USBD_LL_DataOutStage+0x7e>
  19726. {
  19727. if (pdev->pClass->EP0_RxReady != NULL)
  19728. 8007d1c: 68fb ldr r3, [r7, #12]
  19729. 8007d1e: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  19730. 8007d22: 691b ldr r3, [r3, #16]
  19731. 8007d24: 2b00 cmp r3, #0
  19732. 8007d26: d005 beq.n 8007d34 <USBD_LL_DataOutStage+0x7e>
  19733. {
  19734. pdev->pClass->EP0_RxReady(pdev);
  19735. 8007d28: 68fb ldr r3, [r7, #12]
  19736. 8007d2a: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  19737. 8007d2e: 691b ldr r3, [r3, #16]
  19738. 8007d30: 68f8 ldr r0, [r7, #12]
  19739. 8007d32: 4798 blx r3
  19740. }
  19741. }
  19742. (void)USBD_CtlSendStatus(pdev);
  19743. 8007d34: 68f8 ldr r0, [r7, #12]
  19744. 8007d36: f001 f80a bl 8008d4e <USBD_CtlSendStatus>
  19745. 8007d3a: e01a b.n 8007d72 <USBD_LL_DataOutStage+0xbc>
  19746. #endif
  19747. }
  19748. }
  19749. else
  19750. {
  19751. if (pdev->dev_state == USBD_STATE_CONFIGURED)
  19752. 8007d3c: 68fb ldr r3, [r7, #12]
  19753. 8007d3e: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  19754. 8007d42: b2db uxtb r3, r3
  19755. 8007d44: 2b03 cmp r3, #3
  19756. 8007d46: d114 bne.n 8007d72 <USBD_LL_DataOutStage+0xbc>
  19757. {
  19758. if (pdev->pClass->DataOut != NULL)
  19759. 8007d48: 68fb ldr r3, [r7, #12]
  19760. 8007d4a: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  19761. 8007d4e: 699b ldr r3, [r3, #24]
  19762. 8007d50: 2b00 cmp r3, #0
  19763. 8007d52: d00e beq.n 8007d72 <USBD_LL_DataOutStage+0xbc>
  19764. {
  19765. ret = (USBD_StatusTypeDef)pdev->pClass->DataOut(pdev, epnum);
  19766. 8007d54: 68fb ldr r3, [r7, #12]
  19767. 8007d56: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  19768. 8007d5a: 699b ldr r3, [r3, #24]
  19769. 8007d5c: 7afa ldrb r2, [r7, #11]
  19770. 8007d5e: 4611 mov r1, r2
  19771. 8007d60: 68f8 ldr r0, [r7, #12]
  19772. 8007d62: 4798 blx r3
  19773. 8007d64: 4603 mov r3, r0
  19774. 8007d66: 75fb strb r3, [r7, #23]
  19775. if (ret != USBD_OK)
  19776. 8007d68: 7dfb ldrb r3, [r7, #23]
  19777. 8007d6a: 2b00 cmp r3, #0
  19778. 8007d6c: d001 beq.n 8007d72 <USBD_LL_DataOutStage+0xbc>
  19779. {
  19780. return ret;
  19781. 8007d6e: 7dfb ldrb r3, [r7, #23]
  19782. 8007d70: e000 b.n 8007d74 <USBD_LL_DataOutStage+0xbe>
  19783. }
  19784. }
  19785. }
  19786. }
  19787. return USBD_OK;
  19788. 8007d72: 2300 movs r3, #0
  19789. }
  19790. 8007d74: 4618 mov r0, r3
  19791. 8007d76: 3718 adds r7, #24
  19792. 8007d78: 46bd mov sp, r7
  19793. 8007d7a: bd80 pop {r7, pc}
  19794. 08007d7c <USBD_LL_DataInStage>:
  19795. * @param epnum: endpoint index
  19796. * @retval status
  19797. */
  19798. USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev,
  19799. uint8_t epnum, uint8_t *pdata)
  19800. {
  19801. 8007d7c: b580 push {r7, lr}
  19802. 8007d7e: b086 sub sp, #24
  19803. 8007d80: af00 add r7, sp, #0
  19804. 8007d82: 60f8 str r0, [r7, #12]
  19805. 8007d84: 460b mov r3, r1
  19806. 8007d86: 607a str r2, [r7, #4]
  19807. 8007d88: 72fb strb r3, [r7, #11]
  19808. USBD_EndpointTypeDef *pep;
  19809. USBD_StatusTypeDef ret;
  19810. if (epnum == 0U)
  19811. 8007d8a: 7afb ldrb r3, [r7, #11]
  19812. 8007d8c: 2b00 cmp r3, #0
  19813. 8007d8e: d16b bne.n 8007e68 <USBD_LL_DataInStage+0xec>
  19814. {
  19815. pep = &pdev->ep_in[0];
  19816. 8007d90: 68fb ldr r3, [r7, #12]
  19817. 8007d92: 3314 adds r3, #20
  19818. 8007d94: 613b str r3, [r7, #16]
  19819. if (pdev->ep0_state == USBD_EP0_DATA_IN)
  19820. 8007d96: 68fb ldr r3, [r7, #12]
  19821. 8007d98: f8d3 3294 ldr.w r3, [r3, #660] ; 0x294
  19822. 8007d9c: 2b02 cmp r3, #2
  19823. 8007d9e: d156 bne.n 8007e4e <USBD_LL_DataInStage+0xd2>
  19824. {
  19825. if (pep->rem_length > pep->maxpacket)
  19826. 8007da0: 693b ldr r3, [r7, #16]
  19827. 8007da2: 689a ldr r2, [r3, #8]
  19828. 8007da4: 693b ldr r3, [r7, #16]
  19829. 8007da6: 68db ldr r3, [r3, #12]
  19830. 8007da8: 429a cmp r2, r3
  19831. 8007daa: d914 bls.n 8007dd6 <USBD_LL_DataInStage+0x5a>
  19832. {
  19833. pep->rem_length -= pep->maxpacket;
  19834. 8007dac: 693b ldr r3, [r7, #16]
  19835. 8007dae: 689a ldr r2, [r3, #8]
  19836. 8007db0: 693b ldr r3, [r7, #16]
  19837. 8007db2: 68db ldr r3, [r3, #12]
  19838. 8007db4: 1ad2 subs r2, r2, r3
  19839. 8007db6: 693b ldr r3, [r7, #16]
  19840. 8007db8: 609a str r2, [r3, #8]
  19841. (void)USBD_CtlContinueSendData(pdev, pdata, pep->rem_length);
  19842. 8007dba: 693b ldr r3, [r7, #16]
  19843. 8007dbc: 689b ldr r3, [r3, #8]
  19844. 8007dbe: 461a mov r2, r3
  19845. 8007dc0: 6879 ldr r1, [r7, #4]
  19846. 8007dc2: 68f8 ldr r0, [r7, #12]
  19847. 8007dc4: f000 ff84 bl 8008cd0 <USBD_CtlContinueSendData>
  19848. /* Prepare endpoint for premature end of transfer */
  19849. (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
  19850. 8007dc8: 2300 movs r3, #0
  19851. 8007dca: 2200 movs r2, #0
  19852. 8007dcc: 2100 movs r1, #0
  19853. 8007dce: 68f8 ldr r0, [r7, #12]
  19854. 8007dd0: f001 fcb0 bl 8009734 <USBD_LL_PrepareReceive>
  19855. 8007dd4: e03b b.n 8007e4e <USBD_LL_DataInStage+0xd2>
  19856. }
  19857. else
  19858. {
  19859. /* last packet is MPS multiple, so send ZLP packet */
  19860. if ((pep->maxpacket == pep->rem_length) &&
  19861. 8007dd6: 693b ldr r3, [r7, #16]
  19862. 8007dd8: 68da ldr r2, [r3, #12]
  19863. 8007dda: 693b ldr r3, [r7, #16]
  19864. 8007ddc: 689b ldr r3, [r3, #8]
  19865. 8007dde: 429a cmp r2, r3
  19866. 8007de0: d11c bne.n 8007e1c <USBD_LL_DataInStage+0xa0>
  19867. (pep->total_length >= pep->maxpacket) &&
  19868. 8007de2: 693b ldr r3, [r7, #16]
  19869. 8007de4: 685a ldr r2, [r3, #4]
  19870. 8007de6: 693b ldr r3, [r7, #16]
  19871. 8007de8: 68db ldr r3, [r3, #12]
  19872. if ((pep->maxpacket == pep->rem_length) &&
  19873. 8007dea: 429a cmp r2, r3
  19874. 8007dec: d316 bcc.n 8007e1c <USBD_LL_DataInStage+0xa0>
  19875. (pep->total_length < pdev->ep0_data_len))
  19876. 8007dee: 693b ldr r3, [r7, #16]
  19877. 8007df0: 685a ldr r2, [r3, #4]
  19878. 8007df2: 68fb ldr r3, [r7, #12]
  19879. 8007df4: f8d3 3298 ldr.w r3, [r3, #664] ; 0x298
  19880. (pep->total_length >= pep->maxpacket) &&
  19881. 8007df8: 429a cmp r2, r3
  19882. 8007dfa: d20f bcs.n 8007e1c <USBD_LL_DataInStage+0xa0>
  19883. {
  19884. (void)USBD_CtlContinueSendData(pdev, NULL, 0U);
  19885. 8007dfc: 2200 movs r2, #0
  19886. 8007dfe: 2100 movs r1, #0
  19887. 8007e00: 68f8 ldr r0, [r7, #12]
  19888. 8007e02: f000 ff65 bl 8008cd0 <USBD_CtlContinueSendData>
  19889. pdev->ep0_data_len = 0U;
  19890. 8007e06: 68fb ldr r3, [r7, #12]
  19891. 8007e08: 2200 movs r2, #0
  19892. 8007e0a: f8c3 2298 str.w r2, [r3, #664] ; 0x298
  19893. /* Prepare endpoint for premature end of transfer */
  19894. (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
  19895. 8007e0e: 2300 movs r3, #0
  19896. 8007e10: 2200 movs r2, #0
  19897. 8007e12: 2100 movs r1, #0
  19898. 8007e14: 68f8 ldr r0, [r7, #12]
  19899. 8007e16: f001 fc8d bl 8009734 <USBD_LL_PrepareReceive>
  19900. 8007e1a: e018 b.n 8007e4e <USBD_LL_DataInStage+0xd2>
  19901. }
  19902. else
  19903. {
  19904. if (pdev->dev_state == USBD_STATE_CONFIGURED)
  19905. 8007e1c: 68fb ldr r3, [r7, #12]
  19906. 8007e1e: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  19907. 8007e22: b2db uxtb r3, r3
  19908. 8007e24: 2b03 cmp r3, #3
  19909. 8007e26: d10b bne.n 8007e40 <USBD_LL_DataInStage+0xc4>
  19910. {
  19911. if (pdev->pClass->EP0_TxSent != NULL)
  19912. 8007e28: 68fb ldr r3, [r7, #12]
  19913. 8007e2a: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  19914. 8007e2e: 68db ldr r3, [r3, #12]
  19915. 8007e30: 2b00 cmp r3, #0
  19916. 8007e32: d005 beq.n 8007e40 <USBD_LL_DataInStage+0xc4>
  19917. {
  19918. pdev->pClass->EP0_TxSent(pdev);
  19919. 8007e34: 68fb ldr r3, [r7, #12]
  19920. 8007e36: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  19921. 8007e3a: 68db ldr r3, [r3, #12]
  19922. 8007e3c: 68f8 ldr r0, [r7, #12]
  19923. 8007e3e: 4798 blx r3
  19924. }
  19925. }
  19926. (void)USBD_LL_StallEP(pdev, 0x80U);
  19927. 8007e40: 2180 movs r1, #128 ; 0x80
  19928. 8007e42: 68f8 ldr r0, [r7, #12]
  19929. 8007e44: f001 fbcc bl 80095e0 <USBD_LL_StallEP>
  19930. (void)USBD_CtlReceiveStatus(pdev);
  19931. 8007e48: 68f8 ldr r0, [r7, #12]
  19932. 8007e4a: f000 ff93 bl 8008d74 <USBD_CtlReceiveStatus>
  19933. (void)USBD_LL_StallEP(pdev, 0x80U);
  19934. }
  19935. #endif
  19936. }
  19937. if (pdev->dev_test_mode == 1U)
  19938. 8007e4e: 68fb ldr r3, [r7, #12]
  19939. 8007e50: f893 32a0 ldrb.w r3, [r3, #672] ; 0x2a0
  19940. 8007e54: 2b01 cmp r3, #1
  19941. 8007e56: d122 bne.n 8007e9e <USBD_LL_DataInStage+0x122>
  19942. {
  19943. (void)USBD_RunTestMode(pdev);
  19944. 8007e58: 68f8 ldr r0, [r7, #12]
  19945. 8007e5a: f7ff fe98 bl 8007b8e <USBD_RunTestMode>
  19946. pdev->dev_test_mode = 0U;
  19947. 8007e5e: 68fb ldr r3, [r7, #12]
  19948. 8007e60: 2200 movs r2, #0
  19949. 8007e62: f883 22a0 strb.w r2, [r3, #672] ; 0x2a0
  19950. 8007e66: e01a b.n 8007e9e <USBD_LL_DataInStage+0x122>
  19951. }
  19952. }
  19953. else
  19954. {
  19955. if (pdev->dev_state == USBD_STATE_CONFIGURED)
  19956. 8007e68: 68fb ldr r3, [r7, #12]
  19957. 8007e6a: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  19958. 8007e6e: b2db uxtb r3, r3
  19959. 8007e70: 2b03 cmp r3, #3
  19960. 8007e72: d114 bne.n 8007e9e <USBD_LL_DataInStage+0x122>
  19961. {
  19962. if (pdev->pClass->DataIn != NULL)
  19963. 8007e74: 68fb ldr r3, [r7, #12]
  19964. 8007e76: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  19965. 8007e7a: 695b ldr r3, [r3, #20]
  19966. 8007e7c: 2b00 cmp r3, #0
  19967. 8007e7e: d00e beq.n 8007e9e <USBD_LL_DataInStage+0x122>
  19968. {
  19969. ret = (USBD_StatusTypeDef)pdev->pClass->DataIn(pdev, epnum);
  19970. 8007e80: 68fb ldr r3, [r7, #12]
  19971. 8007e82: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  19972. 8007e86: 695b ldr r3, [r3, #20]
  19973. 8007e88: 7afa ldrb r2, [r7, #11]
  19974. 8007e8a: 4611 mov r1, r2
  19975. 8007e8c: 68f8 ldr r0, [r7, #12]
  19976. 8007e8e: 4798 blx r3
  19977. 8007e90: 4603 mov r3, r0
  19978. 8007e92: 75fb strb r3, [r7, #23]
  19979. if (ret != USBD_OK)
  19980. 8007e94: 7dfb ldrb r3, [r7, #23]
  19981. 8007e96: 2b00 cmp r3, #0
  19982. 8007e98: d001 beq.n 8007e9e <USBD_LL_DataInStage+0x122>
  19983. {
  19984. return ret;
  19985. 8007e9a: 7dfb ldrb r3, [r7, #23]
  19986. 8007e9c: e000 b.n 8007ea0 <USBD_LL_DataInStage+0x124>
  19987. }
  19988. }
  19989. }
  19990. }
  19991. return USBD_OK;
  19992. 8007e9e: 2300 movs r3, #0
  19993. }
  19994. 8007ea0: 4618 mov r0, r3
  19995. 8007ea2: 3718 adds r7, #24
  19996. 8007ea4: 46bd mov sp, r7
  19997. 8007ea6: bd80 pop {r7, pc}
  19998. 08007ea8 <USBD_LL_Reset>:
  19999. * @param pdev: device instance
  20000. * @retval status
  20001. */
  20002. USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
  20003. {
  20004. 8007ea8: b580 push {r7, lr}
  20005. 8007eaa: b082 sub sp, #8
  20006. 8007eac: af00 add r7, sp, #0
  20007. 8007eae: 6078 str r0, [r7, #4]
  20008. /* Upon Reset call user call back */
  20009. pdev->dev_state = USBD_STATE_DEFAULT;
  20010. 8007eb0: 687b ldr r3, [r7, #4]
  20011. 8007eb2: 2201 movs r2, #1
  20012. 8007eb4: f883 229c strb.w r2, [r3, #668] ; 0x29c
  20013. pdev->ep0_state = USBD_EP0_IDLE;
  20014. 8007eb8: 687b ldr r3, [r7, #4]
  20015. 8007eba: 2200 movs r2, #0
  20016. 8007ebc: f8c3 2294 str.w r2, [r3, #660] ; 0x294
  20017. pdev->dev_config = 0U;
  20018. 8007ec0: 687b ldr r3, [r7, #4]
  20019. 8007ec2: 2200 movs r2, #0
  20020. 8007ec4: 605a str r2, [r3, #4]
  20021. pdev->dev_remote_wakeup = 0U;
  20022. 8007ec6: 687b ldr r3, [r7, #4]
  20023. 8007ec8: 2200 movs r2, #0
  20024. 8007eca: f8c3 22a4 str.w r2, [r3, #676] ; 0x2a4
  20025. if (pdev->pClass == NULL)
  20026. 8007ece: 687b ldr r3, [r7, #4]
  20027. 8007ed0: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20028. 8007ed4: 2b00 cmp r3, #0
  20029. 8007ed6: d101 bne.n 8007edc <USBD_LL_Reset+0x34>
  20030. {
  20031. return USBD_FAIL;
  20032. 8007ed8: 2303 movs r3, #3
  20033. 8007eda: e02f b.n 8007f3c <USBD_LL_Reset+0x94>
  20034. }
  20035. if (pdev->pClassData != NULL)
  20036. 8007edc: 687b ldr r3, [r7, #4]
  20037. 8007ede: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  20038. 8007ee2: 2b00 cmp r3, #0
  20039. 8007ee4: d00f beq.n 8007f06 <USBD_LL_Reset+0x5e>
  20040. {
  20041. if (pdev->pClass->DeInit != NULL)
  20042. 8007ee6: 687b ldr r3, [r7, #4]
  20043. 8007ee8: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20044. 8007eec: 685b ldr r3, [r3, #4]
  20045. 8007eee: 2b00 cmp r3, #0
  20046. 8007ef0: d009 beq.n 8007f06 <USBD_LL_Reset+0x5e>
  20047. {
  20048. (void)pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
  20049. 8007ef2: 687b ldr r3, [r7, #4]
  20050. 8007ef4: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20051. 8007ef8: 685b ldr r3, [r3, #4]
  20052. 8007efa: 687a ldr r2, [r7, #4]
  20053. 8007efc: 6852 ldr r2, [r2, #4]
  20054. 8007efe: b2d2 uxtb r2, r2
  20055. 8007f00: 4611 mov r1, r2
  20056. 8007f02: 6878 ldr r0, [r7, #4]
  20057. 8007f04: 4798 blx r3
  20058. }
  20059. }
  20060. /* Open EP0 OUT */
  20061. (void)USBD_LL_OpenEP(pdev, 0x00U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
  20062. 8007f06: 2340 movs r3, #64 ; 0x40
  20063. 8007f08: 2200 movs r2, #0
  20064. 8007f0a: 2100 movs r1, #0
  20065. 8007f0c: 6878 ldr r0, [r7, #4]
  20066. 8007f0e: f001 fb22 bl 8009556 <USBD_LL_OpenEP>
  20067. pdev->ep_out[0x00U & 0xFU].is_used = 1U;
  20068. 8007f12: 687b ldr r3, [r7, #4]
  20069. 8007f14: 2201 movs r2, #1
  20070. 8007f16: f8a3 2164 strh.w r2, [r3, #356] ; 0x164
  20071. pdev->ep_out[0].maxpacket = USB_MAX_EP0_SIZE;
  20072. 8007f1a: 687b ldr r3, [r7, #4]
  20073. 8007f1c: 2240 movs r2, #64 ; 0x40
  20074. 8007f1e: f8c3 2160 str.w r2, [r3, #352] ; 0x160
  20075. /* Open EP0 IN */
  20076. (void)USBD_LL_OpenEP(pdev, 0x80U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
  20077. 8007f22: 2340 movs r3, #64 ; 0x40
  20078. 8007f24: 2200 movs r2, #0
  20079. 8007f26: 2180 movs r1, #128 ; 0x80
  20080. 8007f28: 6878 ldr r0, [r7, #4]
  20081. 8007f2a: f001 fb14 bl 8009556 <USBD_LL_OpenEP>
  20082. pdev->ep_in[0x80U & 0xFU].is_used = 1U;
  20083. 8007f2e: 687b ldr r3, [r7, #4]
  20084. 8007f30: 2201 movs r2, #1
  20085. 8007f32: 849a strh r2, [r3, #36] ; 0x24
  20086. pdev->ep_in[0].maxpacket = USB_MAX_EP0_SIZE;
  20087. 8007f34: 687b ldr r3, [r7, #4]
  20088. 8007f36: 2240 movs r2, #64 ; 0x40
  20089. 8007f38: 621a str r2, [r3, #32]
  20090. return USBD_OK;
  20091. 8007f3a: 2300 movs r3, #0
  20092. }
  20093. 8007f3c: 4618 mov r0, r3
  20094. 8007f3e: 3708 adds r7, #8
  20095. 8007f40: 46bd mov sp, r7
  20096. 8007f42: bd80 pop {r7, pc}
  20097. 08007f44 <USBD_LL_SetSpeed>:
  20098. * @param pdev: device instance
  20099. * @retval status
  20100. */
  20101. USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev,
  20102. USBD_SpeedTypeDef speed)
  20103. {
  20104. 8007f44: b480 push {r7}
  20105. 8007f46: b083 sub sp, #12
  20106. 8007f48: af00 add r7, sp, #0
  20107. 8007f4a: 6078 str r0, [r7, #4]
  20108. 8007f4c: 460b mov r3, r1
  20109. 8007f4e: 70fb strb r3, [r7, #3]
  20110. pdev->dev_speed = speed;
  20111. 8007f50: 687b ldr r3, [r7, #4]
  20112. 8007f52: 78fa ldrb r2, [r7, #3]
  20113. 8007f54: 741a strb r2, [r3, #16]
  20114. return USBD_OK;
  20115. 8007f56: 2300 movs r3, #0
  20116. }
  20117. 8007f58: 4618 mov r0, r3
  20118. 8007f5a: 370c adds r7, #12
  20119. 8007f5c: 46bd mov sp, r7
  20120. 8007f5e: f85d 7b04 ldr.w r7, [sp], #4
  20121. 8007f62: 4770 bx lr
  20122. 08007f64 <USBD_LL_Suspend>:
  20123. * @param pdev: device instance
  20124. * @retval status
  20125. */
  20126. USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
  20127. {
  20128. 8007f64: b480 push {r7}
  20129. 8007f66: b083 sub sp, #12
  20130. 8007f68: af00 add r7, sp, #0
  20131. 8007f6a: 6078 str r0, [r7, #4]
  20132. pdev->dev_old_state = pdev->dev_state;
  20133. 8007f6c: 687b ldr r3, [r7, #4]
  20134. 8007f6e: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  20135. 8007f72: b2da uxtb r2, r3
  20136. 8007f74: 687b ldr r3, [r7, #4]
  20137. 8007f76: f883 229d strb.w r2, [r3, #669] ; 0x29d
  20138. pdev->dev_state = USBD_STATE_SUSPENDED;
  20139. 8007f7a: 687b ldr r3, [r7, #4]
  20140. 8007f7c: 2204 movs r2, #4
  20141. 8007f7e: f883 229c strb.w r2, [r3, #668] ; 0x29c
  20142. return USBD_OK;
  20143. 8007f82: 2300 movs r3, #0
  20144. }
  20145. 8007f84: 4618 mov r0, r3
  20146. 8007f86: 370c adds r7, #12
  20147. 8007f88: 46bd mov sp, r7
  20148. 8007f8a: f85d 7b04 ldr.w r7, [sp], #4
  20149. 8007f8e: 4770 bx lr
  20150. 08007f90 <USBD_LL_Resume>:
  20151. * @param pdev: device instance
  20152. * @retval status
  20153. */
  20154. USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
  20155. {
  20156. 8007f90: b480 push {r7}
  20157. 8007f92: b083 sub sp, #12
  20158. 8007f94: af00 add r7, sp, #0
  20159. 8007f96: 6078 str r0, [r7, #4]
  20160. if (pdev->dev_state == USBD_STATE_SUSPENDED)
  20161. 8007f98: 687b ldr r3, [r7, #4]
  20162. 8007f9a: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  20163. 8007f9e: b2db uxtb r3, r3
  20164. 8007fa0: 2b04 cmp r3, #4
  20165. 8007fa2: d106 bne.n 8007fb2 <USBD_LL_Resume+0x22>
  20166. {
  20167. pdev->dev_state = pdev->dev_old_state;
  20168. 8007fa4: 687b ldr r3, [r7, #4]
  20169. 8007fa6: f893 329d ldrb.w r3, [r3, #669] ; 0x29d
  20170. 8007faa: b2da uxtb r2, r3
  20171. 8007fac: 687b ldr r3, [r7, #4]
  20172. 8007fae: f883 229c strb.w r2, [r3, #668] ; 0x29c
  20173. }
  20174. return USBD_OK;
  20175. 8007fb2: 2300 movs r3, #0
  20176. }
  20177. 8007fb4: 4618 mov r0, r3
  20178. 8007fb6: 370c adds r7, #12
  20179. 8007fb8: 46bd mov sp, r7
  20180. 8007fba: f85d 7b04 ldr.w r7, [sp], #4
  20181. 8007fbe: 4770 bx lr
  20182. 08007fc0 <USBD_LL_SOF>:
  20183. * @param pdev: device instance
  20184. * @retval status
  20185. */
  20186. USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
  20187. {
  20188. 8007fc0: b580 push {r7, lr}
  20189. 8007fc2: b082 sub sp, #8
  20190. 8007fc4: af00 add r7, sp, #0
  20191. 8007fc6: 6078 str r0, [r7, #4]
  20192. if (pdev->pClass == NULL)
  20193. 8007fc8: 687b ldr r3, [r7, #4]
  20194. 8007fca: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20195. 8007fce: 2b00 cmp r3, #0
  20196. 8007fd0: d101 bne.n 8007fd6 <USBD_LL_SOF+0x16>
  20197. {
  20198. return USBD_FAIL;
  20199. 8007fd2: 2303 movs r3, #3
  20200. 8007fd4: e012 b.n 8007ffc <USBD_LL_SOF+0x3c>
  20201. }
  20202. if (pdev->dev_state == USBD_STATE_CONFIGURED)
  20203. 8007fd6: 687b ldr r3, [r7, #4]
  20204. 8007fd8: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  20205. 8007fdc: b2db uxtb r3, r3
  20206. 8007fde: 2b03 cmp r3, #3
  20207. 8007fe0: d10b bne.n 8007ffa <USBD_LL_SOF+0x3a>
  20208. {
  20209. if (pdev->pClass->SOF != NULL)
  20210. 8007fe2: 687b ldr r3, [r7, #4]
  20211. 8007fe4: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20212. 8007fe8: 69db ldr r3, [r3, #28]
  20213. 8007fea: 2b00 cmp r3, #0
  20214. 8007fec: d005 beq.n 8007ffa <USBD_LL_SOF+0x3a>
  20215. {
  20216. (void)pdev->pClass->SOF(pdev);
  20217. 8007fee: 687b ldr r3, [r7, #4]
  20218. 8007ff0: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20219. 8007ff4: 69db ldr r3, [r3, #28]
  20220. 8007ff6: 6878 ldr r0, [r7, #4]
  20221. 8007ff8: 4798 blx r3
  20222. }
  20223. }
  20224. return USBD_OK;
  20225. 8007ffa: 2300 movs r3, #0
  20226. }
  20227. 8007ffc: 4618 mov r0, r3
  20228. 8007ffe: 3708 adds r7, #8
  20229. 8008000: 46bd mov sp, r7
  20230. 8008002: bd80 pop {r7, pc}
  20231. 08008004 <USBD_LL_IsoINIncomplete>:
  20232. * @param pdev: device instance
  20233. * @retval status
  20234. */
  20235. USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev,
  20236. uint8_t epnum)
  20237. {
  20238. 8008004: b580 push {r7, lr}
  20239. 8008006: b082 sub sp, #8
  20240. 8008008: af00 add r7, sp, #0
  20241. 800800a: 6078 str r0, [r7, #4]
  20242. 800800c: 460b mov r3, r1
  20243. 800800e: 70fb strb r3, [r7, #3]
  20244. if (pdev->pClass == NULL)
  20245. 8008010: 687b ldr r3, [r7, #4]
  20246. 8008012: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20247. 8008016: 2b00 cmp r3, #0
  20248. 8008018: d101 bne.n 800801e <USBD_LL_IsoINIncomplete+0x1a>
  20249. {
  20250. return USBD_FAIL;
  20251. 800801a: 2303 movs r3, #3
  20252. 800801c: e014 b.n 8008048 <USBD_LL_IsoINIncomplete+0x44>
  20253. }
  20254. if (pdev->dev_state == USBD_STATE_CONFIGURED)
  20255. 800801e: 687b ldr r3, [r7, #4]
  20256. 8008020: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  20257. 8008024: b2db uxtb r3, r3
  20258. 8008026: 2b03 cmp r3, #3
  20259. 8008028: d10d bne.n 8008046 <USBD_LL_IsoINIncomplete+0x42>
  20260. {
  20261. if (pdev->pClass->IsoINIncomplete != NULL)
  20262. 800802a: 687b ldr r3, [r7, #4]
  20263. 800802c: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20264. 8008030: 6a1b ldr r3, [r3, #32]
  20265. 8008032: 2b00 cmp r3, #0
  20266. 8008034: d007 beq.n 8008046 <USBD_LL_IsoINIncomplete+0x42>
  20267. {
  20268. (void)pdev->pClass->IsoINIncomplete(pdev, epnum);
  20269. 8008036: 687b ldr r3, [r7, #4]
  20270. 8008038: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20271. 800803c: 6a1b ldr r3, [r3, #32]
  20272. 800803e: 78fa ldrb r2, [r7, #3]
  20273. 8008040: 4611 mov r1, r2
  20274. 8008042: 6878 ldr r0, [r7, #4]
  20275. 8008044: 4798 blx r3
  20276. }
  20277. }
  20278. return USBD_OK;
  20279. 8008046: 2300 movs r3, #0
  20280. }
  20281. 8008048: 4618 mov r0, r3
  20282. 800804a: 3708 adds r7, #8
  20283. 800804c: 46bd mov sp, r7
  20284. 800804e: bd80 pop {r7, pc}
  20285. 08008050 <USBD_LL_IsoOUTIncomplete>:
  20286. * @param pdev: device instance
  20287. * @retval status
  20288. */
  20289. USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev,
  20290. uint8_t epnum)
  20291. {
  20292. 8008050: b580 push {r7, lr}
  20293. 8008052: b082 sub sp, #8
  20294. 8008054: af00 add r7, sp, #0
  20295. 8008056: 6078 str r0, [r7, #4]
  20296. 8008058: 460b mov r3, r1
  20297. 800805a: 70fb strb r3, [r7, #3]
  20298. if (pdev->pClass == NULL)
  20299. 800805c: 687b ldr r3, [r7, #4]
  20300. 800805e: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20301. 8008062: 2b00 cmp r3, #0
  20302. 8008064: d101 bne.n 800806a <USBD_LL_IsoOUTIncomplete+0x1a>
  20303. {
  20304. return USBD_FAIL;
  20305. 8008066: 2303 movs r3, #3
  20306. 8008068: e014 b.n 8008094 <USBD_LL_IsoOUTIncomplete+0x44>
  20307. }
  20308. if (pdev->dev_state == USBD_STATE_CONFIGURED)
  20309. 800806a: 687b ldr r3, [r7, #4]
  20310. 800806c: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  20311. 8008070: b2db uxtb r3, r3
  20312. 8008072: 2b03 cmp r3, #3
  20313. 8008074: d10d bne.n 8008092 <USBD_LL_IsoOUTIncomplete+0x42>
  20314. {
  20315. if (pdev->pClass->IsoOUTIncomplete != NULL)
  20316. 8008076: 687b ldr r3, [r7, #4]
  20317. 8008078: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20318. 800807c: 6a5b ldr r3, [r3, #36] ; 0x24
  20319. 800807e: 2b00 cmp r3, #0
  20320. 8008080: d007 beq.n 8008092 <USBD_LL_IsoOUTIncomplete+0x42>
  20321. {
  20322. (void)pdev->pClass->IsoOUTIncomplete(pdev, epnum);
  20323. 8008082: 687b ldr r3, [r7, #4]
  20324. 8008084: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20325. 8008088: 6a5b ldr r3, [r3, #36] ; 0x24
  20326. 800808a: 78fa ldrb r2, [r7, #3]
  20327. 800808c: 4611 mov r1, r2
  20328. 800808e: 6878 ldr r0, [r7, #4]
  20329. 8008090: 4798 blx r3
  20330. }
  20331. }
  20332. return USBD_OK;
  20333. 8008092: 2300 movs r3, #0
  20334. }
  20335. 8008094: 4618 mov r0, r3
  20336. 8008096: 3708 adds r7, #8
  20337. 8008098: 46bd mov sp, r7
  20338. 800809a: bd80 pop {r7, pc}
  20339. 0800809c <USBD_LL_DevConnected>:
  20340. * Handle device connection event
  20341. * @param pdev: device instance
  20342. * @retval status
  20343. */
  20344. USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
  20345. {
  20346. 800809c: b480 push {r7}
  20347. 800809e: b083 sub sp, #12
  20348. 80080a0: af00 add r7, sp, #0
  20349. 80080a2: 6078 str r0, [r7, #4]
  20350. /* Prevent unused argument compilation warning */
  20351. UNUSED(pdev);
  20352. return USBD_OK;
  20353. 80080a4: 2300 movs r3, #0
  20354. }
  20355. 80080a6: 4618 mov r0, r3
  20356. 80080a8: 370c adds r7, #12
  20357. 80080aa: 46bd mov sp, r7
  20358. 80080ac: f85d 7b04 ldr.w r7, [sp], #4
  20359. 80080b0: 4770 bx lr
  20360. 080080b2 <USBD_LL_DevDisconnected>:
  20361. * Handle device disconnection event
  20362. * @param pdev: device instance
  20363. * @retval status
  20364. */
  20365. USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev)
  20366. {
  20367. 80080b2: b580 push {r7, lr}
  20368. 80080b4: b082 sub sp, #8
  20369. 80080b6: af00 add r7, sp, #0
  20370. 80080b8: 6078 str r0, [r7, #4]
  20371. /* Free Class Resources */
  20372. pdev->dev_state = USBD_STATE_DEFAULT;
  20373. 80080ba: 687b ldr r3, [r7, #4]
  20374. 80080bc: 2201 movs r2, #1
  20375. 80080be: f883 229c strb.w r2, [r3, #668] ; 0x29c
  20376. if (pdev->pClass != NULL)
  20377. 80080c2: 687b ldr r3, [r7, #4]
  20378. 80080c4: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20379. 80080c8: 2b00 cmp r3, #0
  20380. 80080ca: d009 beq.n 80080e0 <USBD_LL_DevDisconnected+0x2e>
  20381. {
  20382. (void)pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
  20383. 80080cc: 687b ldr r3, [r7, #4]
  20384. 80080ce: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20385. 80080d2: 685b ldr r3, [r3, #4]
  20386. 80080d4: 687a ldr r2, [r7, #4]
  20387. 80080d6: 6852 ldr r2, [r2, #4]
  20388. 80080d8: b2d2 uxtb r2, r2
  20389. 80080da: 4611 mov r1, r2
  20390. 80080dc: 6878 ldr r0, [r7, #4]
  20391. 80080de: 4798 blx r3
  20392. }
  20393. return USBD_OK;
  20394. 80080e0: 2300 movs r3, #0
  20395. }
  20396. 80080e2: 4618 mov r0, r3
  20397. 80080e4: 3708 adds r7, #8
  20398. 80080e6: 46bd mov sp, r7
  20399. 80080e8: bd80 pop {r7, pc}
  20400. 080080ea <SWAPBYTE>:
  20401. /** @defgroup USBD_DEF_Exported_Macros
  20402. * @{
  20403. */
  20404. __STATIC_INLINE uint16_t SWAPBYTE(uint8_t *addr)
  20405. {
  20406. 80080ea: b480 push {r7}
  20407. 80080ec: b087 sub sp, #28
  20408. 80080ee: af00 add r7, sp, #0
  20409. 80080f0: 6078 str r0, [r7, #4]
  20410. uint16_t _SwapVal, _Byte1, _Byte2;
  20411. uint8_t *_pbuff = addr;
  20412. 80080f2: 687b ldr r3, [r7, #4]
  20413. 80080f4: 617b str r3, [r7, #20]
  20414. _Byte1 = *(uint8_t *)_pbuff;
  20415. 80080f6: 697b ldr r3, [r7, #20]
  20416. 80080f8: 781b ldrb r3, [r3, #0]
  20417. 80080fa: 827b strh r3, [r7, #18]
  20418. _pbuff++;
  20419. 80080fc: 697b ldr r3, [r7, #20]
  20420. 80080fe: 3301 adds r3, #1
  20421. 8008100: 617b str r3, [r7, #20]
  20422. _Byte2 = *(uint8_t *)_pbuff;
  20423. 8008102: 697b ldr r3, [r7, #20]
  20424. 8008104: 781b ldrb r3, [r3, #0]
  20425. 8008106: 823b strh r3, [r7, #16]
  20426. _SwapVal = (_Byte2 << 8) | _Byte1;
  20427. 8008108: 8a3b ldrh r3, [r7, #16]
  20428. 800810a: 021b lsls r3, r3, #8
  20429. 800810c: b21a sxth r2, r3
  20430. 800810e: f9b7 3012 ldrsh.w r3, [r7, #18]
  20431. 8008112: 4313 orrs r3, r2
  20432. 8008114: b21b sxth r3, r3
  20433. 8008116: 81fb strh r3, [r7, #14]
  20434. return _SwapVal;
  20435. 8008118: 89fb ldrh r3, [r7, #14]
  20436. }
  20437. 800811a: 4618 mov r0, r3
  20438. 800811c: 371c adds r7, #28
  20439. 800811e: 46bd mov sp, r7
  20440. 8008120: f85d 7b04 ldr.w r7, [sp], #4
  20441. 8008124: 4770 bx lr
  20442. ...
  20443. 08008128 <USBD_StdDevReq>:
  20444. * @param pdev: device instance
  20445. * @param req: usb request
  20446. * @retval status
  20447. */
  20448. USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
  20449. {
  20450. 8008128: b580 push {r7, lr}
  20451. 800812a: b084 sub sp, #16
  20452. 800812c: af00 add r7, sp, #0
  20453. 800812e: 6078 str r0, [r7, #4]
  20454. 8008130: 6039 str r1, [r7, #0]
  20455. USBD_StatusTypeDef ret = USBD_OK;
  20456. 8008132: 2300 movs r3, #0
  20457. 8008134: 73fb strb r3, [r7, #15]
  20458. switch (req->bmRequest & USB_REQ_TYPE_MASK)
  20459. 8008136: 683b ldr r3, [r7, #0]
  20460. 8008138: 781b ldrb r3, [r3, #0]
  20461. 800813a: f003 0360 and.w r3, r3, #96 ; 0x60
  20462. 800813e: 2b40 cmp r3, #64 ; 0x40
  20463. 8008140: d005 beq.n 800814e <USBD_StdDevReq+0x26>
  20464. 8008142: 2b40 cmp r3, #64 ; 0x40
  20465. 8008144: d853 bhi.n 80081ee <USBD_StdDevReq+0xc6>
  20466. 8008146: 2b00 cmp r3, #0
  20467. 8008148: d00b beq.n 8008162 <USBD_StdDevReq+0x3a>
  20468. 800814a: 2b20 cmp r3, #32
  20469. 800814c: d14f bne.n 80081ee <USBD_StdDevReq+0xc6>
  20470. {
  20471. case USB_REQ_TYPE_CLASS:
  20472. case USB_REQ_TYPE_VENDOR:
  20473. ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
  20474. 800814e: 687b ldr r3, [r7, #4]
  20475. 8008150: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20476. 8008154: 689b ldr r3, [r3, #8]
  20477. 8008156: 6839 ldr r1, [r7, #0]
  20478. 8008158: 6878 ldr r0, [r7, #4]
  20479. 800815a: 4798 blx r3
  20480. 800815c: 4603 mov r3, r0
  20481. 800815e: 73fb strb r3, [r7, #15]
  20482. break;
  20483. 8008160: e04a b.n 80081f8 <USBD_StdDevReq+0xd0>
  20484. case USB_REQ_TYPE_STANDARD:
  20485. switch (req->bRequest)
  20486. 8008162: 683b ldr r3, [r7, #0]
  20487. 8008164: 785b ldrb r3, [r3, #1]
  20488. 8008166: 2b09 cmp r3, #9
  20489. 8008168: d83b bhi.n 80081e2 <USBD_StdDevReq+0xba>
  20490. 800816a: a201 add r2, pc, #4 ; (adr r2, 8008170 <USBD_StdDevReq+0x48>)
  20491. 800816c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  20492. 8008170: 080081c5 .word 0x080081c5
  20493. 8008174: 080081d9 .word 0x080081d9
  20494. 8008178: 080081e3 .word 0x080081e3
  20495. 800817c: 080081cf .word 0x080081cf
  20496. 8008180: 080081e3 .word 0x080081e3
  20497. 8008184: 080081a3 .word 0x080081a3
  20498. 8008188: 08008199 .word 0x08008199
  20499. 800818c: 080081e3 .word 0x080081e3
  20500. 8008190: 080081bb .word 0x080081bb
  20501. 8008194: 080081ad .word 0x080081ad
  20502. {
  20503. case USB_REQ_GET_DESCRIPTOR:
  20504. USBD_GetDescriptor(pdev, req);
  20505. 8008198: 6839 ldr r1, [r7, #0]
  20506. 800819a: 6878 ldr r0, [r7, #4]
  20507. 800819c: f000 f9de bl 800855c <USBD_GetDescriptor>
  20508. break;
  20509. 80081a0: e024 b.n 80081ec <USBD_StdDevReq+0xc4>
  20510. case USB_REQ_SET_ADDRESS:
  20511. USBD_SetAddress(pdev, req);
  20512. 80081a2: 6839 ldr r1, [r7, #0]
  20513. 80081a4: 6878 ldr r0, [r7, #4]
  20514. 80081a6: f000 fb43 bl 8008830 <USBD_SetAddress>
  20515. break;
  20516. 80081aa: e01f b.n 80081ec <USBD_StdDevReq+0xc4>
  20517. case USB_REQ_SET_CONFIGURATION:
  20518. ret = USBD_SetConfig(pdev, req);
  20519. 80081ac: 6839 ldr r1, [r7, #0]
  20520. 80081ae: 6878 ldr r0, [r7, #4]
  20521. 80081b0: f000 fb82 bl 80088b8 <USBD_SetConfig>
  20522. 80081b4: 4603 mov r3, r0
  20523. 80081b6: 73fb strb r3, [r7, #15]
  20524. break;
  20525. 80081b8: e018 b.n 80081ec <USBD_StdDevReq+0xc4>
  20526. case USB_REQ_GET_CONFIGURATION:
  20527. USBD_GetConfig(pdev, req);
  20528. 80081ba: 6839 ldr r1, [r7, #0]
  20529. 80081bc: 6878 ldr r0, [r7, #4]
  20530. 80081be: f000 fc21 bl 8008a04 <USBD_GetConfig>
  20531. break;
  20532. 80081c2: e013 b.n 80081ec <USBD_StdDevReq+0xc4>
  20533. case USB_REQ_GET_STATUS:
  20534. USBD_GetStatus(pdev, req);
  20535. 80081c4: 6839 ldr r1, [r7, #0]
  20536. 80081c6: 6878 ldr r0, [r7, #4]
  20537. 80081c8: f000 fc52 bl 8008a70 <USBD_GetStatus>
  20538. break;
  20539. 80081cc: e00e b.n 80081ec <USBD_StdDevReq+0xc4>
  20540. case USB_REQ_SET_FEATURE:
  20541. USBD_SetFeature(pdev, req);
  20542. 80081ce: 6839 ldr r1, [r7, #0]
  20543. 80081d0: 6878 ldr r0, [r7, #4]
  20544. 80081d2: f000 fc81 bl 8008ad8 <USBD_SetFeature>
  20545. break;
  20546. 80081d6: e009 b.n 80081ec <USBD_StdDevReq+0xc4>
  20547. case USB_REQ_CLEAR_FEATURE:
  20548. USBD_ClrFeature(pdev, req);
  20549. 80081d8: 6839 ldr r1, [r7, #0]
  20550. 80081da: 6878 ldr r0, [r7, #4]
  20551. 80081dc: f000 fc90 bl 8008b00 <USBD_ClrFeature>
  20552. break;
  20553. 80081e0: e004 b.n 80081ec <USBD_StdDevReq+0xc4>
  20554. default:
  20555. USBD_CtlError(pdev, req);
  20556. 80081e2: 6839 ldr r1, [r7, #0]
  20557. 80081e4: 6878 ldr r0, [r7, #4]
  20558. 80081e6: f000 fce7 bl 8008bb8 <USBD_CtlError>
  20559. break;
  20560. 80081ea: bf00 nop
  20561. }
  20562. break;
  20563. 80081ec: e004 b.n 80081f8 <USBD_StdDevReq+0xd0>
  20564. default:
  20565. USBD_CtlError(pdev, req);
  20566. 80081ee: 6839 ldr r1, [r7, #0]
  20567. 80081f0: 6878 ldr r0, [r7, #4]
  20568. 80081f2: f000 fce1 bl 8008bb8 <USBD_CtlError>
  20569. break;
  20570. 80081f6: bf00 nop
  20571. }
  20572. return ret;
  20573. 80081f8: 7bfb ldrb r3, [r7, #15]
  20574. }
  20575. 80081fa: 4618 mov r0, r3
  20576. 80081fc: 3710 adds r7, #16
  20577. 80081fe: 46bd mov sp, r7
  20578. 8008200: bd80 pop {r7, pc}
  20579. 8008202: bf00 nop
  20580. 08008204 <USBD_StdItfReq>:
  20581. * @param pdev: device instance
  20582. * @param req: usb request
  20583. * @retval status
  20584. */
  20585. USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
  20586. {
  20587. 8008204: b580 push {r7, lr}
  20588. 8008206: b084 sub sp, #16
  20589. 8008208: af00 add r7, sp, #0
  20590. 800820a: 6078 str r0, [r7, #4]
  20591. 800820c: 6039 str r1, [r7, #0]
  20592. USBD_StatusTypeDef ret = USBD_OK;
  20593. 800820e: 2300 movs r3, #0
  20594. 8008210: 73fb strb r3, [r7, #15]
  20595. switch (req->bmRequest & USB_REQ_TYPE_MASK)
  20596. 8008212: 683b ldr r3, [r7, #0]
  20597. 8008214: 781b ldrb r3, [r3, #0]
  20598. 8008216: f003 0360 and.w r3, r3, #96 ; 0x60
  20599. 800821a: 2b40 cmp r3, #64 ; 0x40
  20600. 800821c: d005 beq.n 800822a <USBD_StdItfReq+0x26>
  20601. 800821e: 2b40 cmp r3, #64 ; 0x40
  20602. 8008220: d82f bhi.n 8008282 <USBD_StdItfReq+0x7e>
  20603. 8008222: 2b00 cmp r3, #0
  20604. 8008224: d001 beq.n 800822a <USBD_StdItfReq+0x26>
  20605. 8008226: 2b20 cmp r3, #32
  20606. 8008228: d12b bne.n 8008282 <USBD_StdItfReq+0x7e>
  20607. {
  20608. case USB_REQ_TYPE_CLASS:
  20609. case USB_REQ_TYPE_VENDOR:
  20610. case USB_REQ_TYPE_STANDARD:
  20611. switch (pdev->dev_state)
  20612. 800822a: 687b ldr r3, [r7, #4]
  20613. 800822c: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  20614. 8008230: b2db uxtb r3, r3
  20615. 8008232: 3b01 subs r3, #1
  20616. 8008234: 2b02 cmp r3, #2
  20617. 8008236: d81d bhi.n 8008274 <USBD_StdItfReq+0x70>
  20618. {
  20619. case USBD_STATE_DEFAULT:
  20620. case USBD_STATE_ADDRESSED:
  20621. case USBD_STATE_CONFIGURED:
  20622. if (LOBYTE(req->wIndex) <= USBD_MAX_NUM_INTERFACES)
  20623. 8008238: 683b ldr r3, [r7, #0]
  20624. 800823a: 889b ldrh r3, [r3, #4]
  20625. 800823c: b2db uxtb r3, r3
  20626. 800823e: 2b01 cmp r3, #1
  20627. 8008240: d813 bhi.n 800826a <USBD_StdItfReq+0x66>
  20628. {
  20629. ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
  20630. 8008242: 687b ldr r3, [r7, #4]
  20631. 8008244: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20632. 8008248: 689b ldr r3, [r3, #8]
  20633. 800824a: 6839 ldr r1, [r7, #0]
  20634. 800824c: 6878 ldr r0, [r7, #4]
  20635. 800824e: 4798 blx r3
  20636. 8008250: 4603 mov r3, r0
  20637. 8008252: 73fb strb r3, [r7, #15]
  20638. if ((req->wLength == 0U) && (ret == USBD_OK))
  20639. 8008254: 683b ldr r3, [r7, #0]
  20640. 8008256: 88db ldrh r3, [r3, #6]
  20641. 8008258: 2b00 cmp r3, #0
  20642. 800825a: d110 bne.n 800827e <USBD_StdItfReq+0x7a>
  20643. 800825c: 7bfb ldrb r3, [r7, #15]
  20644. 800825e: 2b00 cmp r3, #0
  20645. 8008260: d10d bne.n 800827e <USBD_StdItfReq+0x7a>
  20646. {
  20647. (void)USBD_CtlSendStatus(pdev);
  20648. 8008262: 6878 ldr r0, [r7, #4]
  20649. 8008264: f000 fd73 bl 8008d4e <USBD_CtlSendStatus>
  20650. }
  20651. else
  20652. {
  20653. USBD_CtlError(pdev, req);
  20654. }
  20655. break;
  20656. 8008268: e009 b.n 800827e <USBD_StdItfReq+0x7a>
  20657. USBD_CtlError(pdev, req);
  20658. 800826a: 6839 ldr r1, [r7, #0]
  20659. 800826c: 6878 ldr r0, [r7, #4]
  20660. 800826e: f000 fca3 bl 8008bb8 <USBD_CtlError>
  20661. break;
  20662. 8008272: e004 b.n 800827e <USBD_StdItfReq+0x7a>
  20663. default:
  20664. USBD_CtlError(pdev, req);
  20665. 8008274: 6839 ldr r1, [r7, #0]
  20666. 8008276: 6878 ldr r0, [r7, #4]
  20667. 8008278: f000 fc9e bl 8008bb8 <USBD_CtlError>
  20668. break;
  20669. 800827c: e000 b.n 8008280 <USBD_StdItfReq+0x7c>
  20670. break;
  20671. 800827e: bf00 nop
  20672. }
  20673. break;
  20674. 8008280: e004 b.n 800828c <USBD_StdItfReq+0x88>
  20675. default:
  20676. USBD_CtlError(pdev, req);
  20677. 8008282: 6839 ldr r1, [r7, #0]
  20678. 8008284: 6878 ldr r0, [r7, #4]
  20679. 8008286: f000 fc97 bl 8008bb8 <USBD_CtlError>
  20680. break;
  20681. 800828a: bf00 nop
  20682. }
  20683. return ret;
  20684. 800828c: 7bfb ldrb r3, [r7, #15]
  20685. }
  20686. 800828e: 4618 mov r0, r3
  20687. 8008290: 3710 adds r7, #16
  20688. 8008292: 46bd mov sp, r7
  20689. 8008294: bd80 pop {r7, pc}
  20690. 08008296 <USBD_StdEPReq>:
  20691. * @param pdev: device instance
  20692. * @param req: usb request
  20693. * @retval status
  20694. */
  20695. USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
  20696. {
  20697. 8008296: b580 push {r7, lr}
  20698. 8008298: b084 sub sp, #16
  20699. 800829a: af00 add r7, sp, #0
  20700. 800829c: 6078 str r0, [r7, #4]
  20701. 800829e: 6039 str r1, [r7, #0]
  20702. USBD_EndpointTypeDef *pep;
  20703. uint8_t ep_addr;
  20704. USBD_StatusTypeDef ret = USBD_OK;
  20705. 80082a0: 2300 movs r3, #0
  20706. 80082a2: 73fb strb r3, [r7, #15]
  20707. ep_addr = LOBYTE(req->wIndex);
  20708. 80082a4: 683b ldr r3, [r7, #0]
  20709. 80082a6: 889b ldrh r3, [r3, #4]
  20710. 80082a8: 73bb strb r3, [r7, #14]
  20711. switch (req->bmRequest & USB_REQ_TYPE_MASK)
  20712. 80082aa: 683b ldr r3, [r7, #0]
  20713. 80082ac: 781b ldrb r3, [r3, #0]
  20714. 80082ae: f003 0360 and.w r3, r3, #96 ; 0x60
  20715. 80082b2: 2b40 cmp r3, #64 ; 0x40
  20716. 80082b4: d007 beq.n 80082c6 <USBD_StdEPReq+0x30>
  20717. 80082b6: 2b40 cmp r3, #64 ; 0x40
  20718. 80082b8: f200 8145 bhi.w 8008546 <USBD_StdEPReq+0x2b0>
  20719. 80082bc: 2b00 cmp r3, #0
  20720. 80082be: d00c beq.n 80082da <USBD_StdEPReq+0x44>
  20721. 80082c0: 2b20 cmp r3, #32
  20722. 80082c2: f040 8140 bne.w 8008546 <USBD_StdEPReq+0x2b0>
  20723. {
  20724. case USB_REQ_TYPE_CLASS:
  20725. case USB_REQ_TYPE_VENDOR:
  20726. ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
  20727. 80082c6: 687b ldr r3, [r7, #4]
  20728. 80082c8: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20729. 80082cc: 689b ldr r3, [r3, #8]
  20730. 80082ce: 6839 ldr r1, [r7, #0]
  20731. 80082d0: 6878 ldr r0, [r7, #4]
  20732. 80082d2: 4798 blx r3
  20733. 80082d4: 4603 mov r3, r0
  20734. 80082d6: 73fb strb r3, [r7, #15]
  20735. break;
  20736. 80082d8: e13a b.n 8008550 <USBD_StdEPReq+0x2ba>
  20737. case USB_REQ_TYPE_STANDARD:
  20738. switch (req->bRequest)
  20739. 80082da: 683b ldr r3, [r7, #0]
  20740. 80082dc: 785b ldrb r3, [r3, #1]
  20741. 80082de: 2b03 cmp r3, #3
  20742. 80082e0: d007 beq.n 80082f2 <USBD_StdEPReq+0x5c>
  20743. 80082e2: 2b03 cmp r3, #3
  20744. 80082e4: f300 8129 bgt.w 800853a <USBD_StdEPReq+0x2a4>
  20745. 80082e8: 2b00 cmp r3, #0
  20746. 80082ea: d07f beq.n 80083ec <USBD_StdEPReq+0x156>
  20747. 80082ec: 2b01 cmp r3, #1
  20748. 80082ee: d03c beq.n 800836a <USBD_StdEPReq+0xd4>
  20749. 80082f0: e123 b.n 800853a <USBD_StdEPReq+0x2a4>
  20750. {
  20751. case USB_REQ_SET_FEATURE:
  20752. switch (pdev->dev_state)
  20753. 80082f2: 687b ldr r3, [r7, #4]
  20754. 80082f4: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  20755. 80082f8: b2db uxtb r3, r3
  20756. 80082fa: 2b02 cmp r3, #2
  20757. 80082fc: d002 beq.n 8008304 <USBD_StdEPReq+0x6e>
  20758. 80082fe: 2b03 cmp r3, #3
  20759. 8008300: d016 beq.n 8008330 <USBD_StdEPReq+0x9a>
  20760. 8008302: e02c b.n 800835e <USBD_StdEPReq+0xc8>
  20761. {
  20762. case USBD_STATE_ADDRESSED:
  20763. if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
  20764. 8008304: 7bbb ldrb r3, [r7, #14]
  20765. 8008306: 2b00 cmp r3, #0
  20766. 8008308: d00d beq.n 8008326 <USBD_StdEPReq+0x90>
  20767. 800830a: 7bbb ldrb r3, [r7, #14]
  20768. 800830c: 2b80 cmp r3, #128 ; 0x80
  20769. 800830e: d00a beq.n 8008326 <USBD_StdEPReq+0x90>
  20770. {
  20771. (void)USBD_LL_StallEP(pdev, ep_addr);
  20772. 8008310: 7bbb ldrb r3, [r7, #14]
  20773. 8008312: 4619 mov r1, r3
  20774. 8008314: 6878 ldr r0, [r7, #4]
  20775. 8008316: f001 f963 bl 80095e0 <USBD_LL_StallEP>
  20776. (void)USBD_LL_StallEP(pdev, 0x80U);
  20777. 800831a: 2180 movs r1, #128 ; 0x80
  20778. 800831c: 6878 ldr r0, [r7, #4]
  20779. 800831e: f001 f95f bl 80095e0 <USBD_LL_StallEP>
  20780. 8008322: bf00 nop
  20781. }
  20782. else
  20783. {
  20784. USBD_CtlError(pdev, req);
  20785. }
  20786. break;
  20787. 8008324: e020 b.n 8008368 <USBD_StdEPReq+0xd2>
  20788. USBD_CtlError(pdev, req);
  20789. 8008326: 6839 ldr r1, [r7, #0]
  20790. 8008328: 6878 ldr r0, [r7, #4]
  20791. 800832a: f000 fc45 bl 8008bb8 <USBD_CtlError>
  20792. break;
  20793. 800832e: e01b b.n 8008368 <USBD_StdEPReq+0xd2>
  20794. case USBD_STATE_CONFIGURED:
  20795. if (req->wValue == USB_FEATURE_EP_HALT)
  20796. 8008330: 683b ldr r3, [r7, #0]
  20797. 8008332: 885b ldrh r3, [r3, #2]
  20798. 8008334: 2b00 cmp r3, #0
  20799. 8008336: d10e bne.n 8008356 <USBD_StdEPReq+0xc0>
  20800. {
  20801. if ((ep_addr != 0x00U) && (ep_addr != 0x80U) && (req->wLength == 0x00U))
  20802. 8008338: 7bbb ldrb r3, [r7, #14]
  20803. 800833a: 2b00 cmp r3, #0
  20804. 800833c: d00b beq.n 8008356 <USBD_StdEPReq+0xc0>
  20805. 800833e: 7bbb ldrb r3, [r7, #14]
  20806. 8008340: 2b80 cmp r3, #128 ; 0x80
  20807. 8008342: d008 beq.n 8008356 <USBD_StdEPReq+0xc0>
  20808. 8008344: 683b ldr r3, [r7, #0]
  20809. 8008346: 88db ldrh r3, [r3, #6]
  20810. 8008348: 2b00 cmp r3, #0
  20811. 800834a: d104 bne.n 8008356 <USBD_StdEPReq+0xc0>
  20812. {
  20813. (void)USBD_LL_StallEP(pdev, ep_addr);
  20814. 800834c: 7bbb ldrb r3, [r7, #14]
  20815. 800834e: 4619 mov r1, r3
  20816. 8008350: 6878 ldr r0, [r7, #4]
  20817. 8008352: f001 f945 bl 80095e0 <USBD_LL_StallEP>
  20818. }
  20819. }
  20820. (void)USBD_CtlSendStatus(pdev);
  20821. 8008356: 6878 ldr r0, [r7, #4]
  20822. 8008358: f000 fcf9 bl 8008d4e <USBD_CtlSendStatus>
  20823. break;
  20824. 800835c: e004 b.n 8008368 <USBD_StdEPReq+0xd2>
  20825. default:
  20826. USBD_CtlError(pdev, req);
  20827. 800835e: 6839 ldr r1, [r7, #0]
  20828. 8008360: 6878 ldr r0, [r7, #4]
  20829. 8008362: f000 fc29 bl 8008bb8 <USBD_CtlError>
  20830. break;
  20831. 8008366: bf00 nop
  20832. }
  20833. break;
  20834. 8008368: e0ec b.n 8008544 <USBD_StdEPReq+0x2ae>
  20835. case USB_REQ_CLEAR_FEATURE:
  20836. switch (pdev->dev_state)
  20837. 800836a: 687b ldr r3, [r7, #4]
  20838. 800836c: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  20839. 8008370: b2db uxtb r3, r3
  20840. 8008372: 2b02 cmp r3, #2
  20841. 8008374: d002 beq.n 800837c <USBD_StdEPReq+0xe6>
  20842. 8008376: 2b03 cmp r3, #3
  20843. 8008378: d016 beq.n 80083a8 <USBD_StdEPReq+0x112>
  20844. 800837a: e030 b.n 80083de <USBD_StdEPReq+0x148>
  20845. {
  20846. case USBD_STATE_ADDRESSED:
  20847. if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
  20848. 800837c: 7bbb ldrb r3, [r7, #14]
  20849. 800837e: 2b00 cmp r3, #0
  20850. 8008380: d00d beq.n 800839e <USBD_StdEPReq+0x108>
  20851. 8008382: 7bbb ldrb r3, [r7, #14]
  20852. 8008384: 2b80 cmp r3, #128 ; 0x80
  20853. 8008386: d00a beq.n 800839e <USBD_StdEPReq+0x108>
  20854. {
  20855. (void)USBD_LL_StallEP(pdev, ep_addr);
  20856. 8008388: 7bbb ldrb r3, [r7, #14]
  20857. 800838a: 4619 mov r1, r3
  20858. 800838c: 6878 ldr r0, [r7, #4]
  20859. 800838e: f001 f927 bl 80095e0 <USBD_LL_StallEP>
  20860. (void)USBD_LL_StallEP(pdev, 0x80U);
  20861. 8008392: 2180 movs r1, #128 ; 0x80
  20862. 8008394: 6878 ldr r0, [r7, #4]
  20863. 8008396: f001 f923 bl 80095e0 <USBD_LL_StallEP>
  20864. 800839a: bf00 nop
  20865. }
  20866. else
  20867. {
  20868. USBD_CtlError(pdev, req);
  20869. }
  20870. break;
  20871. 800839c: e025 b.n 80083ea <USBD_StdEPReq+0x154>
  20872. USBD_CtlError(pdev, req);
  20873. 800839e: 6839 ldr r1, [r7, #0]
  20874. 80083a0: 6878 ldr r0, [r7, #4]
  20875. 80083a2: f000 fc09 bl 8008bb8 <USBD_CtlError>
  20876. break;
  20877. 80083a6: e020 b.n 80083ea <USBD_StdEPReq+0x154>
  20878. case USBD_STATE_CONFIGURED:
  20879. if (req->wValue == USB_FEATURE_EP_HALT)
  20880. 80083a8: 683b ldr r3, [r7, #0]
  20881. 80083aa: 885b ldrh r3, [r3, #2]
  20882. 80083ac: 2b00 cmp r3, #0
  20883. 80083ae: d11b bne.n 80083e8 <USBD_StdEPReq+0x152>
  20884. {
  20885. if ((ep_addr & 0x7FU) != 0x00U)
  20886. 80083b0: 7bbb ldrb r3, [r7, #14]
  20887. 80083b2: f003 037f and.w r3, r3, #127 ; 0x7f
  20888. 80083b6: 2b00 cmp r3, #0
  20889. 80083b8: d004 beq.n 80083c4 <USBD_StdEPReq+0x12e>
  20890. {
  20891. (void)USBD_LL_ClearStallEP(pdev, ep_addr);
  20892. 80083ba: 7bbb ldrb r3, [r7, #14]
  20893. 80083bc: 4619 mov r1, r3
  20894. 80083be: 6878 ldr r0, [r7, #4]
  20895. 80083c0: f001 f92d bl 800961e <USBD_LL_ClearStallEP>
  20896. }
  20897. (void)USBD_CtlSendStatus(pdev);
  20898. 80083c4: 6878 ldr r0, [r7, #4]
  20899. 80083c6: f000 fcc2 bl 8008d4e <USBD_CtlSendStatus>
  20900. ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
  20901. 80083ca: 687b ldr r3, [r7, #4]
  20902. 80083cc: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  20903. 80083d0: 689b ldr r3, [r3, #8]
  20904. 80083d2: 6839 ldr r1, [r7, #0]
  20905. 80083d4: 6878 ldr r0, [r7, #4]
  20906. 80083d6: 4798 blx r3
  20907. 80083d8: 4603 mov r3, r0
  20908. 80083da: 73fb strb r3, [r7, #15]
  20909. }
  20910. break;
  20911. 80083dc: e004 b.n 80083e8 <USBD_StdEPReq+0x152>
  20912. default:
  20913. USBD_CtlError(pdev, req);
  20914. 80083de: 6839 ldr r1, [r7, #0]
  20915. 80083e0: 6878 ldr r0, [r7, #4]
  20916. 80083e2: f000 fbe9 bl 8008bb8 <USBD_CtlError>
  20917. break;
  20918. 80083e6: e000 b.n 80083ea <USBD_StdEPReq+0x154>
  20919. break;
  20920. 80083e8: bf00 nop
  20921. }
  20922. break;
  20923. 80083ea: e0ab b.n 8008544 <USBD_StdEPReq+0x2ae>
  20924. case USB_REQ_GET_STATUS:
  20925. switch (pdev->dev_state)
  20926. 80083ec: 687b ldr r3, [r7, #4]
  20927. 80083ee: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  20928. 80083f2: b2db uxtb r3, r3
  20929. 80083f4: 2b02 cmp r3, #2
  20930. 80083f6: d002 beq.n 80083fe <USBD_StdEPReq+0x168>
  20931. 80083f8: 2b03 cmp r3, #3
  20932. 80083fa: d032 beq.n 8008462 <USBD_StdEPReq+0x1cc>
  20933. 80083fc: e097 b.n 800852e <USBD_StdEPReq+0x298>
  20934. {
  20935. case USBD_STATE_ADDRESSED:
  20936. if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
  20937. 80083fe: 7bbb ldrb r3, [r7, #14]
  20938. 8008400: 2b00 cmp r3, #0
  20939. 8008402: d007 beq.n 8008414 <USBD_StdEPReq+0x17e>
  20940. 8008404: 7bbb ldrb r3, [r7, #14]
  20941. 8008406: 2b80 cmp r3, #128 ; 0x80
  20942. 8008408: d004 beq.n 8008414 <USBD_StdEPReq+0x17e>
  20943. {
  20944. USBD_CtlError(pdev, req);
  20945. 800840a: 6839 ldr r1, [r7, #0]
  20946. 800840c: 6878 ldr r0, [r7, #4]
  20947. 800840e: f000 fbd3 bl 8008bb8 <USBD_CtlError>
  20948. break;
  20949. 8008412: e091 b.n 8008538 <USBD_StdEPReq+0x2a2>
  20950. }
  20951. pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
  20952. 8008414: f997 300e ldrsb.w r3, [r7, #14]
  20953. 8008418: 2b00 cmp r3, #0
  20954. 800841a: da0b bge.n 8008434 <USBD_StdEPReq+0x19e>
  20955. 800841c: 7bbb ldrb r3, [r7, #14]
  20956. 800841e: f003 027f and.w r2, r3, #127 ; 0x7f
  20957. 8008422: 4613 mov r3, r2
  20958. 8008424: 009b lsls r3, r3, #2
  20959. 8008426: 4413 add r3, r2
  20960. 8008428: 009b lsls r3, r3, #2
  20961. 800842a: 3310 adds r3, #16
  20962. 800842c: 687a ldr r2, [r7, #4]
  20963. 800842e: 4413 add r3, r2
  20964. 8008430: 3304 adds r3, #4
  20965. 8008432: e00b b.n 800844c <USBD_StdEPReq+0x1b6>
  20966. &pdev->ep_out[ep_addr & 0x7FU];
  20967. 8008434: 7bbb ldrb r3, [r7, #14]
  20968. 8008436: f003 027f and.w r2, r3, #127 ; 0x7f
  20969. pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
  20970. 800843a: 4613 mov r3, r2
  20971. 800843c: 009b lsls r3, r3, #2
  20972. 800843e: 4413 add r3, r2
  20973. 8008440: 009b lsls r3, r3, #2
  20974. 8008442: f503 73a8 add.w r3, r3, #336 ; 0x150
  20975. 8008446: 687a ldr r2, [r7, #4]
  20976. 8008448: 4413 add r3, r2
  20977. 800844a: 3304 adds r3, #4
  20978. 800844c: 60bb str r3, [r7, #8]
  20979. pep->status = 0x0000U;
  20980. 800844e: 68bb ldr r3, [r7, #8]
  20981. 8008450: 2200 movs r2, #0
  20982. 8008452: 601a str r2, [r3, #0]
  20983. (void)USBD_CtlSendData(pdev, (uint8_t *)&pep->status, 2U);
  20984. 8008454: 68bb ldr r3, [r7, #8]
  20985. 8008456: 2202 movs r2, #2
  20986. 8008458: 4619 mov r1, r3
  20987. 800845a: 6878 ldr r0, [r7, #4]
  20988. 800845c: f000 fc1d bl 8008c9a <USBD_CtlSendData>
  20989. break;
  20990. 8008460: e06a b.n 8008538 <USBD_StdEPReq+0x2a2>
  20991. case USBD_STATE_CONFIGURED:
  20992. if ((ep_addr & 0x80U) == 0x80U)
  20993. 8008462: f997 300e ldrsb.w r3, [r7, #14]
  20994. 8008466: 2b00 cmp r3, #0
  20995. 8008468: da11 bge.n 800848e <USBD_StdEPReq+0x1f8>
  20996. {
  20997. if (pdev->ep_in[ep_addr & 0xFU].is_used == 0U)
  20998. 800846a: 7bbb ldrb r3, [r7, #14]
  20999. 800846c: f003 020f and.w r2, r3, #15
  21000. 8008470: 6879 ldr r1, [r7, #4]
  21001. 8008472: 4613 mov r3, r2
  21002. 8008474: 009b lsls r3, r3, #2
  21003. 8008476: 4413 add r3, r2
  21004. 8008478: 009b lsls r3, r3, #2
  21005. 800847a: 440b add r3, r1
  21006. 800847c: 3324 adds r3, #36 ; 0x24
  21007. 800847e: 881b ldrh r3, [r3, #0]
  21008. 8008480: 2b00 cmp r3, #0
  21009. 8008482: d117 bne.n 80084b4 <USBD_StdEPReq+0x21e>
  21010. {
  21011. USBD_CtlError(pdev, req);
  21012. 8008484: 6839 ldr r1, [r7, #0]
  21013. 8008486: 6878 ldr r0, [r7, #4]
  21014. 8008488: f000 fb96 bl 8008bb8 <USBD_CtlError>
  21015. break;
  21016. 800848c: e054 b.n 8008538 <USBD_StdEPReq+0x2a2>
  21017. }
  21018. }
  21019. else
  21020. {
  21021. if (pdev->ep_out[ep_addr & 0xFU].is_used == 0U)
  21022. 800848e: 7bbb ldrb r3, [r7, #14]
  21023. 8008490: f003 020f and.w r2, r3, #15
  21024. 8008494: 6879 ldr r1, [r7, #4]
  21025. 8008496: 4613 mov r3, r2
  21026. 8008498: 009b lsls r3, r3, #2
  21027. 800849a: 4413 add r3, r2
  21028. 800849c: 009b lsls r3, r3, #2
  21029. 800849e: 440b add r3, r1
  21030. 80084a0: f503 73b2 add.w r3, r3, #356 ; 0x164
  21031. 80084a4: 881b ldrh r3, [r3, #0]
  21032. 80084a6: 2b00 cmp r3, #0
  21033. 80084a8: d104 bne.n 80084b4 <USBD_StdEPReq+0x21e>
  21034. {
  21035. USBD_CtlError(pdev, req);
  21036. 80084aa: 6839 ldr r1, [r7, #0]
  21037. 80084ac: 6878 ldr r0, [r7, #4]
  21038. 80084ae: f000 fb83 bl 8008bb8 <USBD_CtlError>
  21039. break;
  21040. 80084b2: e041 b.n 8008538 <USBD_StdEPReq+0x2a2>
  21041. }
  21042. }
  21043. pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
  21044. 80084b4: f997 300e ldrsb.w r3, [r7, #14]
  21045. 80084b8: 2b00 cmp r3, #0
  21046. 80084ba: da0b bge.n 80084d4 <USBD_StdEPReq+0x23e>
  21047. 80084bc: 7bbb ldrb r3, [r7, #14]
  21048. 80084be: f003 027f and.w r2, r3, #127 ; 0x7f
  21049. 80084c2: 4613 mov r3, r2
  21050. 80084c4: 009b lsls r3, r3, #2
  21051. 80084c6: 4413 add r3, r2
  21052. 80084c8: 009b lsls r3, r3, #2
  21053. 80084ca: 3310 adds r3, #16
  21054. 80084cc: 687a ldr r2, [r7, #4]
  21055. 80084ce: 4413 add r3, r2
  21056. 80084d0: 3304 adds r3, #4
  21057. 80084d2: e00b b.n 80084ec <USBD_StdEPReq+0x256>
  21058. &pdev->ep_out[ep_addr & 0x7FU];
  21059. 80084d4: 7bbb ldrb r3, [r7, #14]
  21060. 80084d6: f003 027f and.w r2, r3, #127 ; 0x7f
  21061. pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
  21062. 80084da: 4613 mov r3, r2
  21063. 80084dc: 009b lsls r3, r3, #2
  21064. 80084de: 4413 add r3, r2
  21065. 80084e0: 009b lsls r3, r3, #2
  21066. 80084e2: f503 73a8 add.w r3, r3, #336 ; 0x150
  21067. 80084e6: 687a ldr r2, [r7, #4]
  21068. 80084e8: 4413 add r3, r2
  21069. 80084ea: 3304 adds r3, #4
  21070. 80084ec: 60bb str r3, [r7, #8]
  21071. if ((ep_addr == 0x00U) || (ep_addr == 0x80U))
  21072. 80084ee: 7bbb ldrb r3, [r7, #14]
  21073. 80084f0: 2b00 cmp r3, #0
  21074. 80084f2: d002 beq.n 80084fa <USBD_StdEPReq+0x264>
  21075. 80084f4: 7bbb ldrb r3, [r7, #14]
  21076. 80084f6: 2b80 cmp r3, #128 ; 0x80
  21077. 80084f8: d103 bne.n 8008502 <USBD_StdEPReq+0x26c>
  21078. {
  21079. pep->status = 0x0000U;
  21080. 80084fa: 68bb ldr r3, [r7, #8]
  21081. 80084fc: 2200 movs r2, #0
  21082. 80084fe: 601a str r2, [r3, #0]
  21083. 8008500: e00e b.n 8008520 <USBD_StdEPReq+0x28a>
  21084. }
  21085. else if (USBD_LL_IsStallEP(pdev, ep_addr) != 0U)
  21086. 8008502: 7bbb ldrb r3, [r7, #14]
  21087. 8008504: 4619 mov r1, r3
  21088. 8008506: 6878 ldr r0, [r7, #4]
  21089. 8008508: f001 f8a8 bl 800965c <USBD_LL_IsStallEP>
  21090. 800850c: 4603 mov r3, r0
  21091. 800850e: 2b00 cmp r3, #0
  21092. 8008510: d003 beq.n 800851a <USBD_StdEPReq+0x284>
  21093. {
  21094. pep->status = 0x0001U;
  21095. 8008512: 68bb ldr r3, [r7, #8]
  21096. 8008514: 2201 movs r2, #1
  21097. 8008516: 601a str r2, [r3, #0]
  21098. 8008518: e002 b.n 8008520 <USBD_StdEPReq+0x28a>
  21099. }
  21100. else
  21101. {
  21102. pep->status = 0x0000U;
  21103. 800851a: 68bb ldr r3, [r7, #8]
  21104. 800851c: 2200 movs r2, #0
  21105. 800851e: 601a str r2, [r3, #0]
  21106. }
  21107. (void)USBD_CtlSendData(pdev, (uint8_t *)&pep->status, 2U);
  21108. 8008520: 68bb ldr r3, [r7, #8]
  21109. 8008522: 2202 movs r2, #2
  21110. 8008524: 4619 mov r1, r3
  21111. 8008526: 6878 ldr r0, [r7, #4]
  21112. 8008528: f000 fbb7 bl 8008c9a <USBD_CtlSendData>
  21113. break;
  21114. 800852c: e004 b.n 8008538 <USBD_StdEPReq+0x2a2>
  21115. default:
  21116. USBD_CtlError(pdev, req);
  21117. 800852e: 6839 ldr r1, [r7, #0]
  21118. 8008530: 6878 ldr r0, [r7, #4]
  21119. 8008532: f000 fb41 bl 8008bb8 <USBD_CtlError>
  21120. break;
  21121. 8008536: bf00 nop
  21122. }
  21123. break;
  21124. 8008538: e004 b.n 8008544 <USBD_StdEPReq+0x2ae>
  21125. default:
  21126. USBD_CtlError(pdev, req);
  21127. 800853a: 6839 ldr r1, [r7, #0]
  21128. 800853c: 6878 ldr r0, [r7, #4]
  21129. 800853e: f000 fb3b bl 8008bb8 <USBD_CtlError>
  21130. break;
  21131. 8008542: bf00 nop
  21132. }
  21133. break;
  21134. 8008544: e004 b.n 8008550 <USBD_StdEPReq+0x2ba>
  21135. default:
  21136. USBD_CtlError(pdev, req);
  21137. 8008546: 6839 ldr r1, [r7, #0]
  21138. 8008548: 6878 ldr r0, [r7, #4]
  21139. 800854a: f000 fb35 bl 8008bb8 <USBD_CtlError>
  21140. break;
  21141. 800854e: bf00 nop
  21142. }
  21143. return ret;
  21144. 8008550: 7bfb ldrb r3, [r7, #15]
  21145. }
  21146. 8008552: 4618 mov r0, r3
  21147. 8008554: 3710 adds r7, #16
  21148. 8008556: 46bd mov sp, r7
  21149. 8008558: bd80 pop {r7, pc}
  21150. ...
  21151. 0800855c <USBD_GetDescriptor>:
  21152. * @param pdev: device instance
  21153. * @param req: usb request
  21154. * @retval status
  21155. */
  21156. static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
  21157. {
  21158. 800855c: b580 push {r7, lr}
  21159. 800855e: b084 sub sp, #16
  21160. 8008560: af00 add r7, sp, #0
  21161. 8008562: 6078 str r0, [r7, #4]
  21162. 8008564: 6039 str r1, [r7, #0]
  21163. uint16_t len = 0U;
  21164. 8008566: 2300 movs r3, #0
  21165. 8008568: 813b strh r3, [r7, #8]
  21166. uint8_t *pbuf = NULL;
  21167. 800856a: 2300 movs r3, #0
  21168. 800856c: 60fb str r3, [r7, #12]
  21169. uint8_t err = 0U;
  21170. 800856e: 2300 movs r3, #0
  21171. 8008570: 72fb strb r3, [r7, #11]
  21172. switch (req->wValue >> 8)
  21173. 8008572: 683b ldr r3, [r7, #0]
  21174. 8008574: 885b ldrh r3, [r3, #2]
  21175. 8008576: 0a1b lsrs r3, r3, #8
  21176. 8008578: b29b uxth r3, r3
  21177. 800857a: 3b01 subs r3, #1
  21178. 800857c: 2b06 cmp r3, #6
  21179. 800857e: f200 8128 bhi.w 80087d2 <USBD_GetDescriptor+0x276>
  21180. 8008582: a201 add r2, pc, #4 ; (adr r2, 8008588 <USBD_GetDescriptor+0x2c>)
  21181. 8008584: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  21182. 8008588: 080085a5 .word 0x080085a5
  21183. 800858c: 080085bd .word 0x080085bd
  21184. 8008590: 080085fd .word 0x080085fd
  21185. 8008594: 080087d3 .word 0x080087d3
  21186. 8008598: 080087d3 .word 0x080087d3
  21187. 800859c: 08008773 .word 0x08008773
  21188. 80085a0: 0800879f .word 0x0800879f
  21189. err++;
  21190. }
  21191. break;
  21192. #endif
  21193. case USB_DESC_TYPE_DEVICE:
  21194. pbuf = pdev->pDesc->GetDeviceDescriptor(pdev->dev_speed, &len);
  21195. 80085a4: 687b ldr r3, [r7, #4]
  21196. 80085a6: f8d3 32b4 ldr.w r3, [r3, #692] ; 0x2b4
  21197. 80085aa: 681b ldr r3, [r3, #0]
  21198. 80085ac: 687a ldr r2, [r7, #4]
  21199. 80085ae: 7c12 ldrb r2, [r2, #16]
  21200. 80085b0: f107 0108 add.w r1, r7, #8
  21201. 80085b4: 4610 mov r0, r2
  21202. 80085b6: 4798 blx r3
  21203. 80085b8: 60f8 str r0, [r7, #12]
  21204. break;
  21205. 80085ba: e112 b.n 80087e2 <USBD_GetDescriptor+0x286>
  21206. case USB_DESC_TYPE_CONFIGURATION:
  21207. if (pdev->dev_speed == USBD_SPEED_HIGH)
  21208. 80085bc: 687b ldr r3, [r7, #4]
  21209. 80085be: 7c1b ldrb r3, [r3, #16]
  21210. 80085c0: 2b00 cmp r3, #0
  21211. 80085c2: d10d bne.n 80085e0 <USBD_GetDescriptor+0x84>
  21212. {
  21213. pbuf = pdev->pClass->GetHSConfigDescriptor(&len);
  21214. 80085c4: 687b ldr r3, [r7, #4]
  21215. 80085c6: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  21216. 80085ca: 6a9b ldr r3, [r3, #40] ; 0x28
  21217. 80085cc: f107 0208 add.w r2, r7, #8
  21218. 80085d0: 4610 mov r0, r2
  21219. 80085d2: 4798 blx r3
  21220. 80085d4: 60f8 str r0, [r7, #12]
  21221. pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
  21222. 80085d6: 68fb ldr r3, [r7, #12]
  21223. 80085d8: 3301 adds r3, #1
  21224. 80085da: 2202 movs r2, #2
  21225. 80085dc: 701a strb r2, [r3, #0]
  21226. else
  21227. {
  21228. pbuf = pdev->pClass->GetFSConfigDescriptor(&len);
  21229. pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
  21230. }
  21231. break;
  21232. 80085de: e100 b.n 80087e2 <USBD_GetDescriptor+0x286>
  21233. pbuf = pdev->pClass->GetFSConfigDescriptor(&len);
  21234. 80085e0: 687b ldr r3, [r7, #4]
  21235. 80085e2: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  21236. 80085e6: 6adb ldr r3, [r3, #44] ; 0x2c
  21237. 80085e8: f107 0208 add.w r2, r7, #8
  21238. 80085ec: 4610 mov r0, r2
  21239. 80085ee: 4798 blx r3
  21240. 80085f0: 60f8 str r0, [r7, #12]
  21241. pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
  21242. 80085f2: 68fb ldr r3, [r7, #12]
  21243. 80085f4: 3301 adds r3, #1
  21244. 80085f6: 2202 movs r2, #2
  21245. 80085f8: 701a strb r2, [r3, #0]
  21246. break;
  21247. 80085fa: e0f2 b.n 80087e2 <USBD_GetDescriptor+0x286>
  21248. case USB_DESC_TYPE_STRING:
  21249. switch ((uint8_t)(req->wValue))
  21250. 80085fc: 683b ldr r3, [r7, #0]
  21251. 80085fe: 885b ldrh r3, [r3, #2]
  21252. 8008600: b2db uxtb r3, r3
  21253. 8008602: 2b05 cmp r3, #5
  21254. 8008604: f200 80ac bhi.w 8008760 <USBD_GetDescriptor+0x204>
  21255. 8008608: a201 add r2, pc, #4 ; (adr r2, 8008610 <USBD_GetDescriptor+0xb4>)
  21256. 800860a: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  21257. 800860e: bf00 nop
  21258. 8008610: 08008629 .word 0x08008629
  21259. 8008614: 0800865d .word 0x0800865d
  21260. 8008618: 08008691 .word 0x08008691
  21261. 800861c: 080086c5 .word 0x080086c5
  21262. 8008620: 080086f9 .word 0x080086f9
  21263. 8008624: 0800872d .word 0x0800872d
  21264. {
  21265. case USBD_IDX_LANGID_STR:
  21266. if (pdev->pDesc->GetLangIDStrDescriptor != NULL)
  21267. 8008628: 687b ldr r3, [r7, #4]
  21268. 800862a: f8d3 32b4 ldr.w r3, [r3, #692] ; 0x2b4
  21269. 800862e: 685b ldr r3, [r3, #4]
  21270. 8008630: 2b00 cmp r3, #0
  21271. 8008632: d00b beq.n 800864c <USBD_GetDescriptor+0xf0>
  21272. {
  21273. pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev->dev_speed, &len);
  21274. 8008634: 687b ldr r3, [r7, #4]
  21275. 8008636: f8d3 32b4 ldr.w r3, [r3, #692] ; 0x2b4
  21276. 800863a: 685b ldr r3, [r3, #4]
  21277. 800863c: 687a ldr r2, [r7, #4]
  21278. 800863e: 7c12 ldrb r2, [r2, #16]
  21279. 8008640: f107 0108 add.w r1, r7, #8
  21280. 8008644: 4610 mov r0, r2
  21281. 8008646: 4798 blx r3
  21282. 8008648: 60f8 str r0, [r7, #12]
  21283. else
  21284. {
  21285. USBD_CtlError(pdev, req);
  21286. err++;
  21287. }
  21288. break;
  21289. 800864a: e091 b.n 8008770 <USBD_GetDescriptor+0x214>
  21290. USBD_CtlError(pdev, req);
  21291. 800864c: 6839 ldr r1, [r7, #0]
  21292. 800864e: 6878 ldr r0, [r7, #4]
  21293. 8008650: f000 fab2 bl 8008bb8 <USBD_CtlError>
  21294. err++;
  21295. 8008654: 7afb ldrb r3, [r7, #11]
  21296. 8008656: 3301 adds r3, #1
  21297. 8008658: 72fb strb r3, [r7, #11]
  21298. break;
  21299. 800865a: e089 b.n 8008770 <USBD_GetDescriptor+0x214>
  21300. case USBD_IDX_MFC_STR:
  21301. if (pdev->pDesc->GetManufacturerStrDescriptor != NULL)
  21302. 800865c: 687b ldr r3, [r7, #4]
  21303. 800865e: f8d3 32b4 ldr.w r3, [r3, #692] ; 0x2b4
  21304. 8008662: 689b ldr r3, [r3, #8]
  21305. 8008664: 2b00 cmp r3, #0
  21306. 8008666: d00b beq.n 8008680 <USBD_GetDescriptor+0x124>
  21307. {
  21308. pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev->dev_speed, &len);
  21309. 8008668: 687b ldr r3, [r7, #4]
  21310. 800866a: f8d3 32b4 ldr.w r3, [r3, #692] ; 0x2b4
  21311. 800866e: 689b ldr r3, [r3, #8]
  21312. 8008670: 687a ldr r2, [r7, #4]
  21313. 8008672: 7c12 ldrb r2, [r2, #16]
  21314. 8008674: f107 0108 add.w r1, r7, #8
  21315. 8008678: 4610 mov r0, r2
  21316. 800867a: 4798 blx r3
  21317. 800867c: 60f8 str r0, [r7, #12]
  21318. else
  21319. {
  21320. USBD_CtlError(pdev, req);
  21321. err++;
  21322. }
  21323. break;
  21324. 800867e: e077 b.n 8008770 <USBD_GetDescriptor+0x214>
  21325. USBD_CtlError(pdev, req);
  21326. 8008680: 6839 ldr r1, [r7, #0]
  21327. 8008682: 6878 ldr r0, [r7, #4]
  21328. 8008684: f000 fa98 bl 8008bb8 <USBD_CtlError>
  21329. err++;
  21330. 8008688: 7afb ldrb r3, [r7, #11]
  21331. 800868a: 3301 adds r3, #1
  21332. 800868c: 72fb strb r3, [r7, #11]
  21333. break;
  21334. 800868e: e06f b.n 8008770 <USBD_GetDescriptor+0x214>
  21335. case USBD_IDX_PRODUCT_STR:
  21336. if (pdev->pDesc->GetProductStrDescriptor != NULL)
  21337. 8008690: 687b ldr r3, [r7, #4]
  21338. 8008692: f8d3 32b4 ldr.w r3, [r3, #692] ; 0x2b4
  21339. 8008696: 68db ldr r3, [r3, #12]
  21340. 8008698: 2b00 cmp r3, #0
  21341. 800869a: d00b beq.n 80086b4 <USBD_GetDescriptor+0x158>
  21342. {
  21343. pbuf = pdev->pDesc->GetProductStrDescriptor(pdev->dev_speed, &len);
  21344. 800869c: 687b ldr r3, [r7, #4]
  21345. 800869e: f8d3 32b4 ldr.w r3, [r3, #692] ; 0x2b4
  21346. 80086a2: 68db ldr r3, [r3, #12]
  21347. 80086a4: 687a ldr r2, [r7, #4]
  21348. 80086a6: 7c12 ldrb r2, [r2, #16]
  21349. 80086a8: f107 0108 add.w r1, r7, #8
  21350. 80086ac: 4610 mov r0, r2
  21351. 80086ae: 4798 blx r3
  21352. 80086b0: 60f8 str r0, [r7, #12]
  21353. else
  21354. {
  21355. USBD_CtlError(pdev, req);
  21356. err++;
  21357. }
  21358. break;
  21359. 80086b2: e05d b.n 8008770 <USBD_GetDescriptor+0x214>
  21360. USBD_CtlError(pdev, req);
  21361. 80086b4: 6839 ldr r1, [r7, #0]
  21362. 80086b6: 6878 ldr r0, [r7, #4]
  21363. 80086b8: f000 fa7e bl 8008bb8 <USBD_CtlError>
  21364. err++;
  21365. 80086bc: 7afb ldrb r3, [r7, #11]
  21366. 80086be: 3301 adds r3, #1
  21367. 80086c0: 72fb strb r3, [r7, #11]
  21368. break;
  21369. 80086c2: e055 b.n 8008770 <USBD_GetDescriptor+0x214>
  21370. case USBD_IDX_SERIAL_STR:
  21371. if (pdev->pDesc->GetSerialStrDescriptor != NULL)
  21372. 80086c4: 687b ldr r3, [r7, #4]
  21373. 80086c6: f8d3 32b4 ldr.w r3, [r3, #692] ; 0x2b4
  21374. 80086ca: 691b ldr r3, [r3, #16]
  21375. 80086cc: 2b00 cmp r3, #0
  21376. 80086ce: d00b beq.n 80086e8 <USBD_GetDescriptor+0x18c>
  21377. {
  21378. pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev->dev_speed, &len);
  21379. 80086d0: 687b ldr r3, [r7, #4]
  21380. 80086d2: f8d3 32b4 ldr.w r3, [r3, #692] ; 0x2b4
  21381. 80086d6: 691b ldr r3, [r3, #16]
  21382. 80086d8: 687a ldr r2, [r7, #4]
  21383. 80086da: 7c12 ldrb r2, [r2, #16]
  21384. 80086dc: f107 0108 add.w r1, r7, #8
  21385. 80086e0: 4610 mov r0, r2
  21386. 80086e2: 4798 blx r3
  21387. 80086e4: 60f8 str r0, [r7, #12]
  21388. else
  21389. {
  21390. USBD_CtlError(pdev, req);
  21391. err++;
  21392. }
  21393. break;
  21394. 80086e6: e043 b.n 8008770 <USBD_GetDescriptor+0x214>
  21395. USBD_CtlError(pdev, req);
  21396. 80086e8: 6839 ldr r1, [r7, #0]
  21397. 80086ea: 6878 ldr r0, [r7, #4]
  21398. 80086ec: f000 fa64 bl 8008bb8 <USBD_CtlError>
  21399. err++;
  21400. 80086f0: 7afb ldrb r3, [r7, #11]
  21401. 80086f2: 3301 adds r3, #1
  21402. 80086f4: 72fb strb r3, [r7, #11]
  21403. break;
  21404. 80086f6: e03b b.n 8008770 <USBD_GetDescriptor+0x214>
  21405. case USBD_IDX_CONFIG_STR:
  21406. if (pdev->pDesc->GetConfigurationStrDescriptor != NULL)
  21407. 80086f8: 687b ldr r3, [r7, #4]
  21408. 80086fa: f8d3 32b4 ldr.w r3, [r3, #692] ; 0x2b4
  21409. 80086fe: 695b ldr r3, [r3, #20]
  21410. 8008700: 2b00 cmp r3, #0
  21411. 8008702: d00b beq.n 800871c <USBD_GetDescriptor+0x1c0>
  21412. {
  21413. pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev->dev_speed, &len);
  21414. 8008704: 687b ldr r3, [r7, #4]
  21415. 8008706: f8d3 32b4 ldr.w r3, [r3, #692] ; 0x2b4
  21416. 800870a: 695b ldr r3, [r3, #20]
  21417. 800870c: 687a ldr r2, [r7, #4]
  21418. 800870e: 7c12 ldrb r2, [r2, #16]
  21419. 8008710: f107 0108 add.w r1, r7, #8
  21420. 8008714: 4610 mov r0, r2
  21421. 8008716: 4798 blx r3
  21422. 8008718: 60f8 str r0, [r7, #12]
  21423. else
  21424. {
  21425. USBD_CtlError(pdev, req);
  21426. err++;
  21427. }
  21428. break;
  21429. 800871a: e029 b.n 8008770 <USBD_GetDescriptor+0x214>
  21430. USBD_CtlError(pdev, req);
  21431. 800871c: 6839 ldr r1, [r7, #0]
  21432. 800871e: 6878 ldr r0, [r7, #4]
  21433. 8008720: f000 fa4a bl 8008bb8 <USBD_CtlError>
  21434. err++;
  21435. 8008724: 7afb ldrb r3, [r7, #11]
  21436. 8008726: 3301 adds r3, #1
  21437. 8008728: 72fb strb r3, [r7, #11]
  21438. break;
  21439. 800872a: e021 b.n 8008770 <USBD_GetDescriptor+0x214>
  21440. case USBD_IDX_INTERFACE_STR:
  21441. if (pdev->pDesc->GetInterfaceStrDescriptor != NULL)
  21442. 800872c: 687b ldr r3, [r7, #4]
  21443. 800872e: f8d3 32b4 ldr.w r3, [r3, #692] ; 0x2b4
  21444. 8008732: 699b ldr r3, [r3, #24]
  21445. 8008734: 2b00 cmp r3, #0
  21446. 8008736: d00b beq.n 8008750 <USBD_GetDescriptor+0x1f4>
  21447. {
  21448. pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev->dev_speed, &len);
  21449. 8008738: 687b ldr r3, [r7, #4]
  21450. 800873a: f8d3 32b4 ldr.w r3, [r3, #692] ; 0x2b4
  21451. 800873e: 699b ldr r3, [r3, #24]
  21452. 8008740: 687a ldr r2, [r7, #4]
  21453. 8008742: 7c12 ldrb r2, [r2, #16]
  21454. 8008744: f107 0108 add.w r1, r7, #8
  21455. 8008748: 4610 mov r0, r2
  21456. 800874a: 4798 blx r3
  21457. 800874c: 60f8 str r0, [r7, #12]
  21458. else
  21459. {
  21460. USBD_CtlError(pdev, req);
  21461. err++;
  21462. }
  21463. break;
  21464. 800874e: e00f b.n 8008770 <USBD_GetDescriptor+0x214>
  21465. USBD_CtlError(pdev, req);
  21466. 8008750: 6839 ldr r1, [r7, #0]
  21467. 8008752: 6878 ldr r0, [r7, #4]
  21468. 8008754: f000 fa30 bl 8008bb8 <USBD_CtlError>
  21469. err++;
  21470. 8008758: 7afb ldrb r3, [r7, #11]
  21471. 800875a: 3301 adds r3, #1
  21472. 800875c: 72fb strb r3, [r7, #11]
  21473. break;
  21474. 800875e: e007 b.n 8008770 <USBD_GetDescriptor+0x214>
  21475. err++;
  21476. }
  21477. #endif
  21478. #if ((USBD_CLASS_USER_STRING_DESC == 0U) && (USBD_SUPPORT_USER_STRING_DESC == 0U))
  21479. USBD_CtlError(pdev, req);
  21480. 8008760: 6839 ldr r1, [r7, #0]
  21481. 8008762: 6878 ldr r0, [r7, #4]
  21482. 8008764: f000 fa28 bl 8008bb8 <USBD_CtlError>
  21483. err++;
  21484. 8008768: 7afb ldrb r3, [r7, #11]
  21485. 800876a: 3301 adds r3, #1
  21486. 800876c: 72fb strb r3, [r7, #11]
  21487. #endif
  21488. break;
  21489. 800876e: bf00 nop
  21490. }
  21491. break;
  21492. 8008770: e037 b.n 80087e2 <USBD_GetDescriptor+0x286>
  21493. case USB_DESC_TYPE_DEVICE_QUALIFIER:
  21494. if (pdev->dev_speed == USBD_SPEED_HIGH)
  21495. 8008772: 687b ldr r3, [r7, #4]
  21496. 8008774: 7c1b ldrb r3, [r3, #16]
  21497. 8008776: 2b00 cmp r3, #0
  21498. 8008778: d109 bne.n 800878e <USBD_GetDescriptor+0x232>
  21499. {
  21500. pbuf = pdev->pClass->GetDeviceQualifierDescriptor(&len);
  21501. 800877a: 687b ldr r3, [r7, #4]
  21502. 800877c: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  21503. 8008780: 6b5b ldr r3, [r3, #52] ; 0x34
  21504. 8008782: f107 0208 add.w r2, r7, #8
  21505. 8008786: 4610 mov r0, r2
  21506. 8008788: 4798 blx r3
  21507. 800878a: 60f8 str r0, [r7, #12]
  21508. else
  21509. {
  21510. USBD_CtlError(pdev, req);
  21511. err++;
  21512. }
  21513. break;
  21514. 800878c: e029 b.n 80087e2 <USBD_GetDescriptor+0x286>
  21515. USBD_CtlError(pdev, req);
  21516. 800878e: 6839 ldr r1, [r7, #0]
  21517. 8008790: 6878 ldr r0, [r7, #4]
  21518. 8008792: f000 fa11 bl 8008bb8 <USBD_CtlError>
  21519. err++;
  21520. 8008796: 7afb ldrb r3, [r7, #11]
  21521. 8008798: 3301 adds r3, #1
  21522. 800879a: 72fb strb r3, [r7, #11]
  21523. break;
  21524. 800879c: e021 b.n 80087e2 <USBD_GetDescriptor+0x286>
  21525. case USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION:
  21526. if (pdev->dev_speed == USBD_SPEED_HIGH)
  21527. 800879e: 687b ldr r3, [r7, #4]
  21528. 80087a0: 7c1b ldrb r3, [r3, #16]
  21529. 80087a2: 2b00 cmp r3, #0
  21530. 80087a4: d10d bne.n 80087c2 <USBD_GetDescriptor+0x266>
  21531. {
  21532. pbuf = pdev->pClass->GetOtherSpeedConfigDescriptor(&len);
  21533. 80087a6: 687b ldr r3, [r7, #4]
  21534. 80087a8: f8d3 32b8 ldr.w r3, [r3, #696] ; 0x2b8
  21535. 80087ac: 6b1b ldr r3, [r3, #48] ; 0x30
  21536. 80087ae: f107 0208 add.w r2, r7, #8
  21537. 80087b2: 4610 mov r0, r2
  21538. 80087b4: 4798 blx r3
  21539. 80087b6: 60f8 str r0, [r7, #12]
  21540. pbuf[1] = USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION;
  21541. 80087b8: 68fb ldr r3, [r7, #12]
  21542. 80087ba: 3301 adds r3, #1
  21543. 80087bc: 2207 movs r2, #7
  21544. 80087be: 701a strb r2, [r3, #0]
  21545. else
  21546. {
  21547. USBD_CtlError(pdev, req);
  21548. err++;
  21549. }
  21550. break;
  21551. 80087c0: e00f b.n 80087e2 <USBD_GetDescriptor+0x286>
  21552. USBD_CtlError(pdev, req);
  21553. 80087c2: 6839 ldr r1, [r7, #0]
  21554. 80087c4: 6878 ldr r0, [r7, #4]
  21555. 80087c6: f000 f9f7 bl 8008bb8 <USBD_CtlError>
  21556. err++;
  21557. 80087ca: 7afb ldrb r3, [r7, #11]
  21558. 80087cc: 3301 adds r3, #1
  21559. 80087ce: 72fb strb r3, [r7, #11]
  21560. break;
  21561. 80087d0: e007 b.n 80087e2 <USBD_GetDescriptor+0x286>
  21562. default:
  21563. USBD_CtlError(pdev, req);
  21564. 80087d2: 6839 ldr r1, [r7, #0]
  21565. 80087d4: 6878 ldr r0, [r7, #4]
  21566. 80087d6: f000 f9ef bl 8008bb8 <USBD_CtlError>
  21567. err++;
  21568. 80087da: 7afb ldrb r3, [r7, #11]
  21569. 80087dc: 3301 adds r3, #1
  21570. 80087de: 72fb strb r3, [r7, #11]
  21571. break;
  21572. 80087e0: bf00 nop
  21573. }
  21574. if (err != 0U)
  21575. 80087e2: 7afb ldrb r3, [r7, #11]
  21576. 80087e4: 2b00 cmp r3, #0
  21577. 80087e6: d11e bne.n 8008826 <USBD_GetDescriptor+0x2ca>
  21578. {
  21579. return;
  21580. }
  21581. if (req->wLength != 0U)
  21582. 80087e8: 683b ldr r3, [r7, #0]
  21583. 80087ea: 88db ldrh r3, [r3, #6]
  21584. 80087ec: 2b00 cmp r3, #0
  21585. 80087ee: d016 beq.n 800881e <USBD_GetDescriptor+0x2c2>
  21586. {
  21587. if (len != 0U)
  21588. 80087f0: 893b ldrh r3, [r7, #8]
  21589. 80087f2: 2b00 cmp r3, #0
  21590. 80087f4: d00e beq.n 8008814 <USBD_GetDescriptor+0x2b8>
  21591. {
  21592. len = MIN(len, req->wLength);
  21593. 80087f6: 683b ldr r3, [r7, #0]
  21594. 80087f8: 88da ldrh r2, [r3, #6]
  21595. 80087fa: 893b ldrh r3, [r7, #8]
  21596. 80087fc: 4293 cmp r3, r2
  21597. 80087fe: bf28 it cs
  21598. 8008800: 4613 movcs r3, r2
  21599. 8008802: b29b uxth r3, r3
  21600. 8008804: 813b strh r3, [r7, #8]
  21601. (void)USBD_CtlSendData(pdev, pbuf, len);
  21602. 8008806: 893b ldrh r3, [r7, #8]
  21603. 8008808: 461a mov r2, r3
  21604. 800880a: 68f9 ldr r1, [r7, #12]
  21605. 800880c: 6878 ldr r0, [r7, #4]
  21606. 800880e: f000 fa44 bl 8008c9a <USBD_CtlSendData>
  21607. 8008812: e009 b.n 8008828 <USBD_GetDescriptor+0x2cc>
  21608. }
  21609. else
  21610. {
  21611. USBD_CtlError(pdev, req);
  21612. 8008814: 6839 ldr r1, [r7, #0]
  21613. 8008816: 6878 ldr r0, [r7, #4]
  21614. 8008818: f000 f9ce bl 8008bb8 <USBD_CtlError>
  21615. 800881c: e004 b.n 8008828 <USBD_GetDescriptor+0x2cc>
  21616. }
  21617. }
  21618. else
  21619. {
  21620. (void)USBD_CtlSendStatus(pdev);
  21621. 800881e: 6878 ldr r0, [r7, #4]
  21622. 8008820: f000 fa95 bl 8008d4e <USBD_CtlSendStatus>
  21623. 8008824: e000 b.n 8008828 <USBD_GetDescriptor+0x2cc>
  21624. return;
  21625. 8008826: bf00 nop
  21626. }
  21627. }
  21628. 8008828: 3710 adds r7, #16
  21629. 800882a: 46bd mov sp, r7
  21630. 800882c: bd80 pop {r7, pc}
  21631. 800882e: bf00 nop
  21632. 08008830 <USBD_SetAddress>:
  21633. * @param pdev: device instance
  21634. * @param req: usb request
  21635. * @retval status
  21636. */
  21637. static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
  21638. {
  21639. 8008830: b580 push {r7, lr}
  21640. 8008832: b084 sub sp, #16
  21641. 8008834: af00 add r7, sp, #0
  21642. 8008836: 6078 str r0, [r7, #4]
  21643. 8008838: 6039 str r1, [r7, #0]
  21644. uint8_t dev_addr;
  21645. if ((req->wIndex == 0U) && (req->wLength == 0U) && (req->wValue < 128U))
  21646. 800883a: 683b ldr r3, [r7, #0]
  21647. 800883c: 889b ldrh r3, [r3, #4]
  21648. 800883e: 2b00 cmp r3, #0
  21649. 8008840: d131 bne.n 80088a6 <USBD_SetAddress+0x76>
  21650. 8008842: 683b ldr r3, [r7, #0]
  21651. 8008844: 88db ldrh r3, [r3, #6]
  21652. 8008846: 2b00 cmp r3, #0
  21653. 8008848: d12d bne.n 80088a6 <USBD_SetAddress+0x76>
  21654. 800884a: 683b ldr r3, [r7, #0]
  21655. 800884c: 885b ldrh r3, [r3, #2]
  21656. 800884e: 2b7f cmp r3, #127 ; 0x7f
  21657. 8008850: d829 bhi.n 80088a6 <USBD_SetAddress+0x76>
  21658. {
  21659. dev_addr = (uint8_t)(req->wValue) & 0x7FU;
  21660. 8008852: 683b ldr r3, [r7, #0]
  21661. 8008854: 885b ldrh r3, [r3, #2]
  21662. 8008856: b2db uxtb r3, r3
  21663. 8008858: f003 037f and.w r3, r3, #127 ; 0x7f
  21664. 800885c: 73fb strb r3, [r7, #15]
  21665. if (pdev->dev_state == USBD_STATE_CONFIGURED)
  21666. 800885e: 687b ldr r3, [r7, #4]
  21667. 8008860: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  21668. 8008864: b2db uxtb r3, r3
  21669. 8008866: 2b03 cmp r3, #3
  21670. 8008868: d104 bne.n 8008874 <USBD_SetAddress+0x44>
  21671. {
  21672. USBD_CtlError(pdev, req);
  21673. 800886a: 6839 ldr r1, [r7, #0]
  21674. 800886c: 6878 ldr r0, [r7, #4]
  21675. 800886e: f000 f9a3 bl 8008bb8 <USBD_CtlError>
  21676. if (pdev->dev_state == USBD_STATE_CONFIGURED)
  21677. 8008872: e01d b.n 80088b0 <USBD_SetAddress+0x80>
  21678. }
  21679. else
  21680. {
  21681. pdev->dev_address = dev_addr;
  21682. 8008874: 687b ldr r3, [r7, #4]
  21683. 8008876: 7bfa ldrb r2, [r7, #15]
  21684. 8008878: f883 229e strb.w r2, [r3, #670] ; 0x29e
  21685. (void)USBD_LL_SetUSBAddress(pdev, dev_addr);
  21686. 800887c: 7bfb ldrb r3, [r7, #15]
  21687. 800887e: 4619 mov r1, r3
  21688. 8008880: 6878 ldr r0, [r7, #4]
  21689. 8008882: f000 ff17 bl 80096b4 <USBD_LL_SetUSBAddress>
  21690. (void)USBD_CtlSendStatus(pdev);
  21691. 8008886: 6878 ldr r0, [r7, #4]
  21692. 8008888: f000 fa61 bl 8008d4e <USBD_CtlSendStatus>
  21693. if (dev_addr != 0U)
  21694. 800888c: 7bfb ldrb r3, [r7, #15]
  21695. 800888e: 2b00 cmp r3, #0
  21696. 8008890: d004 beq.n 800889c <USBD_SetAddress+0x6c>
  21697. {
  21698. pdev->dev_state = USBD_STATE_ADDRESSED;
  21699. 8008892: 687b ldr r3, [r7, #4]
  21700. 8008894: 2202 movs r2, #2
  21701. 8008896: f883 229c strb.w r2, [r3, #668] ; 0x29c
  21702. if (pdev->dev_state == USBD_STATE_CONFIGURED)
  21703. 800889a: e009 b.n 80088b0 <USBD_SetAddress+0x80>
  21704. }
  21705. else
  21706. {
  21707. pdev->dev_state = USBD_STATE_DEFAULT;
  21708. 800889c: 687b ldr r3, [r7, #4]
  21709. 800889e: 2201 movs r2, #1
  21710. 80088a0: f883 229c strb.w r2, [r3, #668] ; 0x29c
  21711. if (pdev->dev_state == USBD_STATE_CONFIGURED)
  21712. 80088a4: e004 b.n 80088b0 <USBD_SetAddress+0x80>
  21713. }
  21714. }
  21715. }
  21716. else
  21717. {
  21718. USBD_CtlError(pdev, req);
  21719. 80088a6: 6839 ldr r1, [r7, #0]
  21720. 80088a8: 6878 ldr r0, [r7, #4]
  21721. 80088aa: f000 f985 bl 8008bb8 <USBD_CtlError>
  21722. }
  21723. }
  21724. 80088ae: bf00 nop
  21725. 80088b0: bf00 nop
  21726. 80088b2: 3710 adds r7, #16
  21727. 80088b4: 46bd mov sp, r7
  21728. 80088b6: bd80 pop {r7, pc}
  21729. 080088b8 <USBD_SetConfig>:
  21730. * @param pdev: device instance
  21731. * @param req: usb request
  21732. * @retval status
  21733. */
  21734. static USBD_StatusTypeDef USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
  21735. {
  21736. 80088b8: b580 push {r7, lr}
  21737. 80088ba: b084 sub sp, #16
  21738. 80088bc: af00 add r7, sp, #0
  21739. 80088be: 6078 str r0, [r7, #4]
  21740. 80088c0: 6039 str r1, [r7, #0]
  21741. USBD_StatusTypeDef ret = USBD_OK;
  21742. 80088c2: 2300 movs r3, #0
  21743. 80088c4: 73fb strb r3, [r7, #15]
  21744. static uint8_t cfgidx;
  21745. cfgidx = (uint8_t)(req->wValue);
  21746. 80088c6: 683b ldr r3, [r7, #0]
  21747. 80088c8: 885b ldrh r3, [r3, #2]
  21748. 80088ca: b2da uxtb r2, r3
  21749. 80088cc: 4b4c ldr r3, [pc, #304] ; (8008a00 <USBD_SetConfig+0x148>)
  21750. 80088ce: 701a strb r2, [r3, #0]
  21751. if (cfgidx > USBD_MAX_NUM_CONFIGURATION)
  21752. 80088d0: 4b4b ldr r3, [pc, #300] ; (8008a00 <USBD_SetConfig+0x148>)
  21753. 80088d2: 781b ldrb r3, [r3, #0]
  21754. 80088d4: 2b01 cmp r3, #1
  21755. 80088d6: d905 bls.n 80088e4 <USBD_SetConfig+0x2c>
  21756. {
  21757. USBD_CtlError(pdev, req);
  21758. 80088d8: 6839 ldr r1, [r7, #0]
  21759. 80088da: 6878 ldr r0, [r7, #4]
  21760. 80088dc: f000 f96c bl 8008bb8 <USBD_CtlError>
  21761. return USBD_FAIL;
  21762. 80088e0: 2303 movs r3, #3
  21763. 80088e2: e088 b.n 80089f6 <USBD_SetConfig+0x13e>
  21764. }
  21765. switch (pdev->dev_state)
  21766. 80088e4: 687b ldr r3, [r7, #4]
  21767. 80088e6: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  21768. 80088ea: b2db uxtb r3, r3
  21769. 80088ec: 2b02 cmp r3, #2
  21770. 80088ee: d002 beq.n 80088f6 <USBD_SetConfig+0x3e>
  21771. 80088f0: 2b03 cmp r3, #3
  21772. 80088f2: d025 beq.n 8008940 <USBD_SetConfig+0x88>
  21773. 80088f4: e071 b.n 80089da <USBD_SetConfig+0x122>
  21774. {
  21775. case USBD_STATE_ADDRESSED:
  21776. if (cfgidx != 0U)
  21777. 80088f6: 4b42 ldr r3, [pc, #264] ; (8008a00 <USBD_SetConfig+0x148>)
  21778. 80088f8: 781b ldrb r3, [r3, #0]
  21779. 80088fa: 2b00 cmp r3, #0
  21780. 80088fc: d01c beq.n 8008938 <USBD_SetConfig+0x80>
  21781. {
  21782. pdev->dev_config = cfgidx;
  21783. 80088fe: 4b40 ldr r3, [pc, #256] ; (8008a00 <USBD_SetConfig+0x148>)
  21784. 8008900: 781b ldrb r3, [r3, #0]
  21785. 8008902: 461a mov r2, r3
  21786. 8008904: 687b ldr r3, [r7, #4]
  21787. 8008906: 605a str r2, [r3, #4]
  21788. ret = USBD_SetClassConfig(pdev, cfgidx);
  21789. 8008908: 4b3d ldr r3, [pc, #244] ; (8008a00 <USBD_SetConfig+0x148>)
  21790. 800890a: 781b ldrb r3, [r3, #0]
  21791. 800890c: 4619 mov r1, r3
  21792. 800890e: 6878 ldr r0, [r7, #4]
  21793. 8008910: f7ff f948 bl 8007ba4 <USBD_SetClassConfig>
  21794. 8008914: 4603 mov r3, r0
  21795. 8008916: 73fb strb r3, [r7, #15]
  21796. if (ret != USBD_OK)
  21797. 8008918: 7bfb ldrb r3, [r7, #15]
  21798. 800891a: 2b00 cmp r3, #0
  21799. 800891c: d004 beq.n 8008928 <USBD_SetConfig+0x70>
  21800. {
  21801. USBD_CtlError(pdev, req);
  21802. 800891e: 6839 ldr r1, [r7, #0]
  21803. 8008920: 6878 ldr r0, [r7, #4]
  21804. 8008922: f000 f949 bl 8008bb8 <USBD_CtlError>
  21805. }
  21806. else
  21807. {
  21808. (void)USBD_CtlSendStatus(pdev);
  21809. }
  21810. break;
  21811. 8008926: e065 b.n 80089f4 <USBD_SetConfig+0x13c>
  21812. (void)USBD_CtlSendStatus(pdev);
  21813. 8008928: 6878 ldr r0, [r7, #4]
  21814. 800892a: f000 fa10 bl 8008d4e <USBD_CtlSendStatus>
  21815. pdev->dev_state = USBD_STATE_CONFIGURED;
  21816. 800892e: 687b ldr r3, [r7, #4]
  21817. 8008930: 2203 movs r2, #3
  21818. 8008932: f883 229c strb.w r2, [r3, #668] ; 0x29c
  21819. break;
  21820. 8008936: e05d b.n 80089f4 <USBD_SetConfig+0x13c>
  21821. (void)USBD_CtlSendStatus(pdev);
  21822. 8008938: 6878 ldr r0, [r7, #4]
  21823. 800893a: f000 fa08 bl 8008d4e <USBD_CtlSendStatus>
  21824. break;
  21825. 800893e: e059 b.n 80089f4 <USBD_SetConfig+0x13c>
  21826. case USBD_STATE_CONFIGURED:
  21827. if (cfgidx == 0U)
  21828. 8008940: 4b2f ldr r3, [pc, #188] ; (8008a00 <USBD_SetConfig+0x148>)
  21829. 8008942: 781b ldrb r3, [r3, #0]
  21830. 8008944: 2b00 cmp r3, #0
  21831. 8008946: d112 bne.n 800896e <USBD_SetConfig+0xb6>
  21832. {
  21833. pdev->dev_state = USBD_STATE_ADDRESSED;
  21834. 8008948: 687b ldr r3, [r7, #4]
  21835. 800894a: 2202 movs r2, #2
  21836. 800894c: f883 229c strb.w r2, [r3, #668] ; 0x29c
  21837. pdev->dev_config = cfgidx;
  21838. 8008950: 4b2b ldr r3, [pc, #172] ; (8008a00 <USBD_SetConfig+0x148>)
  21839. 8008952: 781b ldrb r3, [r3, #0]
  21840. 8008954: 461a mov r2, r3
  21841. 8008956: 687b ldr r3, [r7, #4]
  21842. 8008958: 605a str r2, [r3, #4]
  21843. (void)USBD_ClrClassConfig(pdev, cfgidx);
  21844. 800895a: 4b29 ldr r3, [pc, #164] ; (8008a00 <USBD_SetConfig+0x148>)
  21845. 800895c: 781b ldrb r3, [r3, #0]
  21846. 800895e: 4619 mov r1, r3
  21847. 8008960: 6878 ldr r0, [r7, #4]
  21848. 8008962: f7ff f93b bl 8007bdc <USBD_ClrClassConfig>
  21849. (void)USBD_CtlSendStatus(pdev);
  21850. 8008966: 6878 ldr r0, [r7, #4]
  21851. 8008968: f000 f9f1 bl 8008d4e <USBD_CtlSendStatus>
  21852. }
  21853. else
  21854. {
  21855. (void)USBD_CtlSendStatus(pdev);
  21856. }
  21857. break;
  21858. 800896c: e042 b.n 80089f4 <USBD_SetConfig+0x13c>
  21859. else if (cfgidx != pdev->dev_config)
  21860. 800896e: 4b24 ldr r3, [pc, #144] ; (8008a00 <USBD_SetConfig+0x148>)
  21861. 8008970: 781b ldrb r3, [r3, #0]
  21862. 8008972: 461a mov r2, r3
  21863. 8008974: 687b ldr r3, [r7, #4]
  21864. 8008976: 685b ldr r3, [r3, #4]
  21865. 8008978: 429a cmp r2, r3
  21866. 800897a: d02a beq.n 80089d2 <USBD_SetConfig+0x11a>
  21867. (void)USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
  21868. 800897c: 687b ldr r3, [r7, #4]
  21869. 800897e: 685b ldr r3, [r3, #4]
  21870. 8008980: b2db uxtb r3, r3
  21871. 8008982: 4619 mov r1, r3
  21872. 8008984: 6878 ldr r0, [r7, #4]
  21873. 8008986: f7ff f929 bl 8007bdc <USBD_ClrClassConfig>
  21874. pdev->dev_config = cfgidx;
  21875. 800898a: 4b1d ldr r3, [pc, #116] ; (8008a00 <USBD_SetConfig+0x148>)
  21876. 800898c: 781b ldrb r3, [r3, #0]
  21877. 800898e: 461a mov r2, r3
  21878. 8008990: 687b ldr r3, [r7, #4]
  21879. 8008992: 605a str r2, [r3, #4]
  21880. ret = USBD_SetClassConfig(pdev, cfgidx);
  21881. 8008994: 4b1a ldr r3, [pc, #104] ; (8008a00 <USBD_SetConfig+0x148>)
  21882. 8008996: 781b ldrb r3, [r3, #0]
  21883. 8008998: 4619 mov r1, r3
  21884. 800899a: 6878 ldr r0, [r7, #4]
  21885. 800899c: f7ff f902 bl 8007ba4 <USBD_SetClassConfig>
  21886. 80089a0: 4603 mov r3, r0
  21887. 80089a2: 73fb strb r3, [r7, #15]
  21888. if (ret != USBD_OK)
  21889. 80089a4: 7bfb ldrb r3, [r7, #15]
  21890. 80089a6: 2b00 cmp r3, #0
  21891. 80089a8: d00f beq.n 80089ca <USBD_SetConfig+0x112>
  21892. USBD_CtlError(pdev, req);
  21893. 80089aa: 6839 ldr r1, [r7, #0]
  21894. 80089ac: 6878 ldr r0, [r7, #4]
  21895. 80089ae: f000 f903 bl 8008bb8 <USBD_CtlError>
  21896. (void)USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
  21897. 80089b2: 687b ldr r3, [r7, #4]
  21898. 80089b4: 685b ldr r3, [r3, #4]
  21899. 80089b6: b2db uxtb r3, r3
  21900. 80089b8: 4619 mov r1, r3
  21901. 80089ba: 6878 ldr r0, [r7, #4]
  21902. 80089bc: f7ff f90e bl 8007bdc <USBD_ClrClassConfig>
  21903. pdev->dev_state = USBD_STATE_ADDRESSED;
  21904. 80089c0: 687b ldr r3, [r7, #4]
  21905. 80089c2: 2202 movs r2, #2
  21906. 80089c4: f883 229c strb.w r2, [r3, #668] ; 0x29c
  21907. break;
  21908. 80089c8: e014 b.n 80089f4 <USBD_SetConfig+0x13c>
  21909. (void)USBD_CtlSendStatus(pdev);
  21910. 80089ca: 6878 ldr r0, [r7, #4]
  21911. 80089cc: f000 f9bf bl 8008d4e <USBD_CtlSendStatus>
  21912. break;
  21913. 80089d0: e010 b.n 80089f4 <USBD_SetConfig+0x13c>
  21914. (void)USBD_CtlSendStatus(pdev);
  21915. 80089d2: 6878 ldr r0, [r7, #4]
  21916. 80089d4: f000 f9bb bl 8008d4e <USBD_CtlSendStatus>
  21917. break;
  21918. 80089d8: e00c b.n 80089f4 <USBD_SetConfig+0x13c>
  21919. default:
  21920. USBD_CtlError(pdev, req);
  21921. 80089da: 6839 ldr r1, [r7, #0]
  21922. 80089dc: 6878 ldr r0, [r7, #4]
  21923. 80089de: f000 f8eb bl 8008bb8 <USBD_CtlError>
  21924. (void)USBD_ClrClassConfig(pdev, cfgidx);
  21925. 80089e2: 4b07 ldr r3, [pc, #28] ; (8008a00 <USBD_SetConfig+0x148>)
  21926. 80089e4: 781b ldrb r3, [r3, #0]
  21927. 80089e6: 4619 mov r1, r3
  21928. 80089e8: 6878 ldr r0, [r7, #4]
  21929. 80089ea: f7ff f8f7 bl 8007bdc <USBD_ClrClassConfig>
  21930. ret = USBD_FAIL;
  21931. 80089ee: 2303 movs r3, #3
  21932. 80089f0: 73fb strb r3, [r7, #15]
  21933. break;
  21934. 80089f2: bf00 nop
  21935. }
  21936. return ret;
  21937. 80089f4: 7bfb ldrb r3, [r7, #15]
  21938. }
  21939. 80089f6: 4618 mov r0, r3
  21940. 80089f8: 3710 adds r7, #16
  21941. 80089fa: 46bd mov sp, r7
  21942. 80089fc: bd80 pop {r7, pc}
  21943. 80089fe: bf00 nop
  21944. 8008a00: 24000210 .word 0x24000210
  21945. 08008a04 <USBD_GetConfig>:
  21946. * @param pdev: device instance
  21947. * @param req: usb request
  21948. * @retval status
  21949. */
  21950. static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
  21951. {
  21952. 8008a04: b580 push {r7, lr}
  21953. 8008a06: b082 sub sp, #8
  21954. 8008a08: af00 add r7, sp, #0
  21955. 8008a0a: 6078 str r0, [r7, #4]
  21956. 8008a0c: 6039 str r1, [r7, #0]
  21957. if (req->wLength != 1U)
  21958. 8008a0e: 683b ldr r3, [r7, #0]
  21959. 8008a10: 88db ldrh r3, [r3, #6]
  21960. 8008a12: 2b01 cmp r3, #1
  21961. 8008a14: d004 beq.n 8008a20 <USBD_GetConfig+0x1c>
  21962. {
  21963. USBD_CtlError(pdev, req);
  21964. 8008a16: 6839 ldr r1, [r7, #0]
  21965. 8008a18: 6878 ldr r0, [r7, #4]
  21966. 8008a1a: f000 f8cd bl 8008bb8 <USBD_CtlError>
  21967. default:
  21968. USBD_CtlError(pdev, req);
  21969. break;
  21970. }
  21971. }
  21972. }
  21973. 8008a1e: e023 b.n 8008a68 <USBD_GetConfig+0x64>
  21974. switch (pdev->dev_state)
  21975. 8008a20: 687b ldr r3, [r7, #4]
  21976. 8008a22: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  21977. 8008a26: b2db uxtb r3, r3
  21978. 8008a28: 2b02 cmp r3, #2
  21979. 8008a2a: dc02 bgt.n 8008a32 <USBD_GetConfig+0x2e>
  21980. 8008a2c: 2b00 cmp r3, #0
  21981. 8008a2e: dc03 bgt.n 8008a38 <USBD_GetConfig+0x34>
  21982. 8008a30: e015 b.n 8008a5e <USBD_GetConfig+0x5a>
  21983. 8008a32: 2b03 cmp r3, #3
  21984. 8008a34: d00b beq.n 8008a4e <USBD_GetConfig+0x4a>
  21985. 8008a36: e012 b.n 8008a5e <USBD_GetConfig+0x5a>
  21986. pdev->dev_default_config = 0U;
  21987. 8008a38: 687b ldr r3, [r7, #4]
  21988. 8008a3a: 2200 movs r2, #0
  21989. 8008a3c: 609a str r2, [r3, #8]
  21990. (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_default_config, 1U);
  21991. 8008a3e: 687b ldr r3, [r7, #4]
  21992. 8008a40: 3308 adds r3, #8
  21993. 8008a42: 2201 movs r2, #1
  21994. 8008a44: 4619 mov r1, r3
  21995. 8008a46: 6878 ldr r0, [r7, #4]
  21996. 8008a48: f000 f927 bl 8008c9a <USBD_CtlSendData>
  21997. break;
  21998. 8008a4c: e00c b.n 8008a68 <USBD_GetConfig+0x64>
  21999. (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_config, 1U);
  22000. 8008a4e: 687b ldr r3, [r7, #4]
  22001. 8008a50: 3304 adds r3, #4
  22002. 8008a52: 2201 movs r2, #1
  22003. 8008a54: 4619 mov r1, r3
  22004. 8008a56: 6878 ldr r0, [r7, #4]
  22005. 8008a58: f000 f91f bl 8008c9a <USBD_CtlSendData>
  22006. break;
  22007. 8008a5c: e004 b.n 8008a68 <USBD_GetConfig+0x64>
  22008. USBD_CtlError(pdev, req);
  22009. 8008a5e: 6839 ldr r1, [r7, #0]
  22010. 8008a60: 6878 ldr r0, [r7, #4]
  22011. 8008a62: f000 f8a9 bl 8008bb8 <USBD_CtlError>
  22012. break;
  22013. 8008a66: bf00 nop
  22014. }
  22015. 8008a68: bf00 nop
  22016. 8008a6a: 3708 adds r7, #8
  22017. 8008a6c: 46bd mov sp, r7
  22018. 8008a6e: bd80 pop {r7, pc}
  22019. 08008a70 <USBD_GetStatus>:
  22020. * @param pdev: device instance
  22021. * @param req: usb request
  22022. * @retval status
  22023. */
  22024. static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
  22025. {
  22026. 8008a70: b580 push {r7, lr}
  22027. 8008a72: b082 sub sp, #8
  22028. 8008a74: af00 add r7, sp, #0
  22029. 8008a76: 6078 str r0, [r7, #4]
  22030. 8008a78: 6039 str r1, [r7, #0]
  22031. switch (pdev->dev_state)
  22032. 8008a7a: 687b ldr r3, [r7, #4]
  22033. 8008a7c: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  22034. 8008a80: b2db uxtb r3, r3
  22035. 8008a82: 3b01 subs r3, #1
  22036. 8008a84: 2b02 cmp r3, #2
  22037. 8008a86: d81e bhi.n 8008ac6 <USBD_GetStatus+0x56>
  22038. {
  22039. case USBD_STATE_DEFAULT:
  22040. case USBD_STATE_ADDRESSED:
  22041. case USBD_STATE_CONFIGURED:
  22042. if (req->wLength != 0x2U)
  22043. 8008a88: 683b ldr r3, [r7, #0]
  22044. 8008a8a: 88db ldrh r3, [r3, #6]
  22045. 8008a8c: 2b02 cmp r3, #2
  22046. 8008a8e: d004 beq.n 8008a9a <USBD_GetStatus+0x2a>
  22047. {
  22048. USBD_CtlError(pdev, req);
  22049. 8008a90: 6839 ldr r1, [r7, #0]
  22050. 8008a92: 6878 ldr r0, [r7, #4]
  22051. 8008a94: f000 f890 bl 8008bb8 <USBD_CtlError>
  22052. break;
  22053. 8008a98: e01a b.n 8008ad0 <USBD_GetStatus+0x60>
  22054. }
  22055. #if (USBD_SELF_POWERED == 1U)
  22056. pdev->dev_config_status = USB_CONFIG_SELF_POWERED;
  22057. 8008a9a: 687b ldr r3, [r7, #4]
  22058. 8008a9c: 2201 movs r2, #1
  22059. 8008a9e: 60da str r2, [r3, #12]
  22060. #else
  22061. pdev->dev_config_status = 0U;
  22062. #endif
  22063. if (pdev->dev_remote_wakeup != 0U)
  22064. 8008aa0: 687b ldr r3, [r7, #4]
  22065. 8008aa2: f8d3 32a4 ldr.w r3, [r3, #676] ; 0x2a4
  22066. 8008aa6: 2b00 cmp r3, #0
  22067. 8008aa8: d005 beq.n 8008ab6 <USBD_GetStatus+0x46>
  22068. {
  22069. pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP;
  22070. 8008aaa: 687b ldr r3, [r7, #4]
  22071. 8008aac: 68db ldr r3, [r3, #12]
  22072. 8008aae: f043 0202 orr.w r2, r3, #2
  22073. 8008ab2: 687b ldr r3, [r7, #4]
  22074. 8008ab4: 60da str r2, [r3, #12]
  22075. }
  22076. (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_config_status, 2U);
  22077. 8008ab6: 687b ldr r3, [r7, #4]
  22078. 8008ab8: 330c adds r3, #12
  22079. 8008aba: 2202 movs r2, #2
  22080. 8008abc: 4619 mov r1, r3
  22081. 8008abe: 6878 ldr r0, [r7, #4]
  22082. 8008ac0: f000 f8eb bl 8008c9a <USBD_CtlSendData>
  22083. break;
  22084. 8008ac4: e004 b.n 8008ad0 <USBD_GetStatus+0x60>
  22085. default:
  22086. USBD_CtlError(pdev, req);
  22087. 8008ac6: 6839 ldr r1, [r7, #0]
  22088. 8008ac8: 6878 ldr r0, [r7, #4]
  22089. 8008aca: f000 f875 bl 8008bb8 <USBD_CtlError>
  22090. break;
  22091. 8008ace: bf00 nop
  22092. }
  22093. }
  22094. 8008ad0: bf00 nop
  22095. 8008ad2: 3708 adds r7, #8
  22096. 8008ad4: 46bd mov sp, r7
  22097. 8008ad6: bd80 pop {r7, pc}
  22098. 08008ad8 <USBD_SetFeature>:
  22099. * @param pdev: device instance
  22100. * @param req: usb request
  22101. * @retval status
  22102. */
  22103. static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
  22104. {
  22105. 8008ad8: b580 push {r7, lr}
  22106. 8008ada: b082 sub sp, #8
  22107. 8008adc: af00 add r7, sp, #0
  22108. 8008ade: 6078 str r0, [r7, #4]
  22109. 8008ae0: 6039 str r1, [r7, #0]
  22110. if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
  22111. 8008ae2: 683b ldr r3, [r7, #0]
  22112. 8008ae4: 885b ldrh r3, [r3, #2]
  22113. 8008ae6: 2b01 cmp r3, #1
  22114. 8008ae8: d106 bne.n 8008af8 <USBD_SetFeature+0x20>
  22115. {
  22116. pdev->dev_remote_wakeup = 1U;
  22117. 8008aea: 687b ldr r3, [r7, #4]
  22118. 8008aec: 2201 movs r2, #1
  22119. 8008aee: f8c3 22a4 str.w r2, [r3, #676] ; 0x2a4
  22120. (void)USBD_CtlSendStatus(pdev);
  22121. 8008af2: 6878 ldr r0, [r7, #4]
  22122. 8008af4: f000 f92b bl 8008d4e <USBD_CtlSendStatus>
  22123. }
  22124. }
  22125. 8008af8: bf00 nop
  22126. 8008afa: 3708 adds r7, #8
  22127. 8008afc: 46bd mov sp, r7
  22128. 8008afe: bd80 pop {r7, pc}
  22129. 08008b00 <USBD_ClrFeature>:
  22130. * @param pdev: device instance
  22131. * @param req: usb request
  22132. * @retval status
  22133. */
  22134. static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
  22135. {
  22136. 8008b00: b580 push {r7, lr}
  22137. 8008b02: b082 sub sp, #8
  22138. 8008b04: af00 add r7, sp, #0
  22139. 8008b06: 6078 str r0, [r7, #4]
  22140. 8008b08: 6039 str r1, [r7, #0]
  22141. switch (pdev->dev_state)
  22142. 8008b0a: 687b ldr r3, [r7, #4]
  22143. 8008b0c: f893 329c ldrb.w r3, [r3, #668] ; 0x29c
  22144. 8008b10: b2db uxtb r3, r3
  22145. 8008b12: 3b01 subs r3, #1
  22146. 8008b14: 2b02 cmp r3, #2
  22147. 8008b16: d80b bhi.n 8008b30 <USBD_ClrFeature+0x30>
  22148. {
  22149. case USBD_STATE_DEFAULT:
  22150. case USBD_STATE_ADDRESSED:
  22151. case USBD_STATE_CONFIGURED:
  22152. if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
  22153. 8008b18: 683b ldr r3, [r7, #0]
  22154. 8008b1a: 885b ldrh r3, [r3, #2]
  22155. 8008b1c: 2b01 cmp r3, #1
  22156. 8008b1e: d10c bne.n 8008b3a <USBD_ClrFeature+0x3a>
  22157. {
  22158. pdev->dev_remote_wakeup = 0U;
  22159. 8008b20: 687b ldr r3, [r7, #4]
  22160. 8008b22: 2200 movs r2, #0
  22161. 8008b24: f8c3 22a4 str.w r2, [r3, #676] ; 0x2a4
  22162. (void)USBD_CtlSendStatus(pdev);
  22163. 8008b28: 6878 ldr r0, [r7, #4]
  22164. 8008b2a: f000 f910 bl 8008d4e <USBD_CtlSendStatus>
  22165. }
  22166. break;
  22167. 8008b2e: e004 b.n 8008b3a <USBD_ClrFeature+0x3a>
  22168. default:
  22169. USBD_CtlError(pdev, req);
  22170. 8008b30: 6839 ldr r1, [r7, #0]
  22171. 8008b32: 6878 ldr r0, [r7, #4]
  22172. 8008b34: f000 f840 bl 8008bb8 <USBD_CtlError>
  22173. break;
  22174. 8008b38: e000 b.n 8008b3c <USBD_ClrFeature+0x3c>
  22175. break;
  22176. 8008b3a: bf00 nop
  22177. }
  22178. }
  22179. 8008b3c: bf00 nop
  22180. 8008b3e: 3708 adds r7, #8
  22181. 8008b40: 46bd mov sp, r7
  22182. 8008b42: bd80 pop {r7, pc}
  22183. 08008b44 <USBD_ParseSetupRequest>:
  22184. * @param pdev: device instance
  22185. * @param req: usb request
  22186. * @retval None
  22187. */
  22188. void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata)
  22189. {
  22190. 8008b44: b580 push {r7, lr}
  22191. 8008b46: b084 sub sp, #16
  22192. 8008b48: af00 add r7, sp, #0
  22193. 8008b4a: 6078 str r0, [r7, #4]
  22194. 8008b4c: 6039 str r1, [r7, #0]
  22195. uint8_t *pbuff = pdata;
  22196. 8008b4e: 683b ldr r3, [r7, #0]
  22197. 8008b50: 60fb str r3, [r7, #12]
  22198. req->bmRequest = *(uint8_t *)(pbuff);
  22199. 8008b52: 68fb ldr r3, [r7, #12]
  22200. 8008b54: 781a ldrb r2, [r3, #0]
  22201. 8008b56: 687b ldr r3, [r7, #4]
  22202. 8008b58: 701a strb r2, [r3, #0]
  22203. pbuff++;
  22204. 8008b5a: 68fb ldr r3, [r7, #12]
  22205. 8008b5c: 3301 adds r3, #1
  22206. 8008b5e: 60fb str r3, [r7, #12]
  22207. req->bRequest = *(uint8_t *)(pbuff);
  22208. 8008b60: 68fb ldr r3, [r7, #12]
  22209. 8008b62: 781a ldrb r2, [r3, #0]
  22210. 8008b64: 687b ldr r3, [r7, #4]
  22211. 8008b66: 705a strb r2, [r3, #1]
  22212. pbuff++;
  22213. 8008b68: 68fb ldr r3, [r7, #12]
  22214. 8008b6a: 3301 adds r3, #1
  22215. 8008b6c: 60fb str r3, [r7, #12]
  22216. req->wValue = SWAPBYTE(pbuff);
  22217. 8008b6e: 68f8 ldr r0, [r7, #12]
  22218. 8008b70: f7ff fabb bl 80080ea <SWAPBYTE>
  22219. 8008b74: 4603 mov r3, r0
  22220. 8008b76: 461a mov r2, r3
  22221. 8008b78: 687b ldr r3, [r7, #4]
  22222. 8008b7a: 805a strh r2, [r3, #2]
  22223. pbuff++;
  22224. 8008b7c: 68fb ldr r3, [r7, #12]
  22225. 8008b7e: 3301 adds r3, #1
  22226. 8008b80: 60fb str r3, [r7, #12]
  22227. pbuff++;
  22228. 8008b82: 68fb ldr r3, [r7, #12]
  22229. 8008b84: 3301 adds r3, #1
  22230. 8008b86: 60fb str r3, [r7, #12]
  22231. req->wIndex = SWAPBYTE(pbuff);
  22232. 8008b88: 68f8 ldr r0, [r7, #12]
  22233. 8008b8a: f7ff faae bl 80080ea <SWAPBYTE>
  22234. 8008b8e: 4603 mov r3, r0
  22235. 8008b90: 461a mov r2, r3
  22236. 8008b92: 687b ldr r3, [r7, #4]
  22237. 8008b94: 809a strh r2, [r3, #4]
  22238. pbuff++;
  22239. 8008b96: 68fb ldr r3, [r7, #12]
  22240. 8008b98: 3301 adds r3, #1
  22241. 8008b9a: 60fb str r3, [r7, #12]
  22242. pbuff++;
  22243. 8008b9c: 68fb ldr r3, [r7, #12]
  22244. 8008b9e: 3301 adds r3, #1
  22245. 8008ba0: 60fb str r3, [r7, #12]
  22246. req->wLength = SWAPBYTE(pbuff);
  22247. 8008ba2: 68f8 ldr r0, [r7, #12]
  22248. 8008ba4: f7ff faa1 bl 80080ea <SWAPBYTE>
  22249. 8008ba8: 4603 mov r3, r0
  22250. 8008baa: 461a mov r2, r3
  22251. 8008bac: 687b ldr r3, [r7, #4]
  22252. 8008bae: 80da strh r2, [r3, #6]
  22253. }
  22254. 8008bb0: bf00 nop
  22255. 8008bb2: 3710 adds r7, #16
  22256. 8008bb4: 46bd mov sp, r7
  22257. 8008bb6: bd80 pop {r7, pc}
  22258. 08008bb8 <USBD_CtlError>:
  22259. * @param pdev: device instance
  22260. * @param req: usb request
  22261. * @retval None
  22262. */
  22263. void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
  22264. {
  22265. 8008bb8: b580 push {r7, lr}
  22266. 8008bba: b082 sub sp, #8
  22267. 8008bbc: af00 add r7, sp, #0
  22268. 8008bbe: 6078 str r0, [r7, #4]
  22269. 8008bc0: 6039 str r1, [r7, #0]
  22270. UNUSED(req);
  22271. (void)USBD_LL_StallEP(pdev, 0x80U);
  22272. 8008bc2: 2180 movs r1, #128 ; 0x80
  22273. 8008bc4: 6878 ldr r0, [r7, #4]
  22274. 8008bc6: f000 fd0b bl 80095e0 <USBD_LL_StallEP>
  22275. (void)USBD_LL_StallEP(pdev, 0U);
  22276. 8008bca: 2100 movs r1, #0
  22277. 8008bcc: 6878 ldr r0, [r7, #4]
  22278. 8008bce: f000 fd07 bl 80095e0 <USBD_LL_StallEP>
  22279. }
  22280. 8008bd2: bf00 nop
  22281. 8008bd4: 3708 adds r7, #8
  22282. 8008bd6: 46bd mov sp, r7
  22283. 8008bd8: bd80 pop {r7, pc}
  22284. 08008bda <USBD_GetString>:
  22285. * @param unicode : Formatted string buffer (unicode)
  22286. * @param len : descriptor length
  22287. * @retval None
  22288. */
  22289. void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len)
  22290. {
  22291. 8008bda: b580 push {r7, lr}
  22292. 8008bdc: b086 sub sp, #24
  22293. 8008bde: af00 add r7, sp, #0
  22294. 8008be0: 60f8 str r0, [r7, #12]
  22295. 8008be2: 60b9 str r1, [r7, #8]
  22296. 8008be4: 607a str r2, [r7, #4]
  22297. uint8_t idx = 0U;
  22298. 8008be6: 2300 movs r3, #0
  22299. 8008be8: 75fb strb r3, [r7, #23]
  22300. uint8_t *pdesc;
  22301. if (desc == NULL)
  22302. 8008bea: 68fb ldr r3, [r7, #12]
  22303. 8008bec: 2b00 cmp r3, #0
  22304. 8008bee: d036 beq.n 8008c5e <USBD_GetString+0x84>
  22305. {
  22306. return;
  22307. }
  22308. pdesc = desc;
  22309. 8008bf0: 68fb ldr r3, [r7, #12]
  22310. 8008bf2: 613b str r3, [r7, #16]
  22311. *len = ((uint16_t)USBD_GetLen(pdesc) * 2U) + 2U;
  22312. 8008bf4: 6938 ldr r0, [r7, #16]
  22313. 8008bf6: f000 f836 bl 8008c66 <USBD_GetLen>
  22314. 8008bfa: 4603 mov r3, r0
  22315. 8008bfc: 3301 adds r3, #1
  22316. 8008bfe: b29b uxth r3, r3
  22317. 8008c00: 005b lsls r3, r3, #1
  22318. 8008c02: b29a uxth r2, r3
  22319. 8008c04: 687b ldr r3, [r7, #4]
  22320. 8008c06: 801a strh r2, [r3, #0]
  22321. unicode[idx] = *(uint8_t *)len;
  22322. 8008c08: 7dfb ldrb r3, [r7, #23]
  22323. 8008c0a: 68ba ldr r2, [r7, #8]
  22324. 8008c0c: 4413 add r3, r2
  22325. 8008c0e: 687a ldr r2, [r7, #4]
  22326. 8008c10: 7812 ldrb r2, [r2, #0]
  22327. 8008c12: 701a strb r2, [r3, #0]
  22328. idx++;
  22329. 8008c14: 7dfb ldrb r3, [r7, #23]
  22330. 8008c16: 3301 adds r3, #1
  22331. 8008c18: 75fb strb r3, [r7, #23]
  22332. unicode[idx] = USB_DESC_TYPE_STRING;
  22333. 8008c1a: 7dfb ldrb r3, [r7, #23]
  22334. 8008c1c: 68ba ldr r2, [r7, #8]
  22335. 8008c1e: 4413 add r3, r2
  22336. 8008c20: 2203 movs r2, #3
  22337. 8008c22: 701a strb r2, [r3, #0]
  22338. idx++;
  22339. 8008c24: 7dfb ldrb r3, [r7, #23]
  22340. 8008c26: 3301 adds r3, #1
  22341. 8008c28: 75fb strb r3, [r7, #23]
  22342. while (*pdesc != (uint8_t)'\0')
  22343. 8008c2a: e013 b.n 8008c54 <USBD_GetString+0x7a>
  22344. {
  22345. unicode[idx] = *pdesc;
  22346. 8008c2c: 7dfb ldrb r3, [r7, #23]
  22347. 8008c2e: 68ba ldr r2, [r7, #8]
  22348. 8008c30: 4413 add r3, r2
  22349. 8008c32: 693a ldr r2, [r7, #16]
  22350. 8008c34: 7812 ldrb r2, [r2, #0]
  22351. 8008c36: 701a strb r2, [r3, #0]
  22352. pdesc++;
  22353. 8008c38: 693b ldr r3, [r7, #16]
  22354. 8008c3a: 3301 adds r3, #1
  22355. 8008c3c: 613b str r3, [r7, #16]
  22356. idx++;
  22357. 8008c3e: 7dfb ldrb r3, [r7, #23]
  22358. 8008c40: 3301 adds r3, #1
  22359. 8008c42: 75fb strb r3, [r7, #23]
  22360. unicode[idx] = 0U;
  22361. 8008c44: 7dfb ldrb r3, [r7, #23]
  22362. 8008c46: 68ba ldr r2, [r7, #8]
  22363. 8008c48: 4413 add r3, r2
  22364. 8008c4a: 2200 movs r2, #0
  22365. 8008c4c: 701a strb r2, [r3, #0]
  22366. idx++;
  22367. 8008c4e: 7dfb ldrb r3, [r7, #23]
  22368. 8008c50: 3301 adds r3, #1
  22369. 8008c52: 75fb strb r3, [r7, #23]
  22370. while (*pdesc != (uint8_t)'\0')
  22371. 8008c54: 693b ldr r3, [r7, #16]
  22372. 8008c56: 781b ldrb r3, [r3, #0]
  22373. 8008c58: 2b00 cmp r3, #0
  22374. 8008c5a: d1e7 bne.n 8008c2c <USBD_GetString+0x52>
  22375. 8008c5c: e000 b.n 8008c60 <USBD_GetString+0x86>
  22376. return;
  22377. 8008c5e: bf00 nop
  22378. }
  22379. }
  22380. 8008c60: 3718 adds r7, #24
  22381. 8008c62: 46bd mov sp, r7
  22382. 8008c64: bd80 pop {r7, pc}
  22383. 08008c66 <USBD_GetLen>:
  22384. * return the string length
  22385. * @param buf : pointer to the ascii string buffer
  22386. * @retval string length
  22387. */
  22388. static uint8_t USBD_GetLen(uint8_t *buf)
  22389. {
  22390. 8008c66: b480 push {r7}
  22391. 8008c68: b085 sub sp, #20
  22392. 8008c6a: af00 add r7, sp, #0
  22393. 8008c6c: 6078 str r0, [r7, #4]
  22394. uint8_t len = 0U;
  22395. 8008c6e: 2300 movs r3, #0
  22396. 8008c70: 73fb strb r3, [r7, #15]
  22397. uint8_t *pbuff = buf;
  22398. 8008c72: 687b ldr r3, [r7, #4]
  22399. 8008c74: 60bb str r3, [r7, #8]
  22400. while (*pbuff != (uint8_t)'\0')
  22401. 8008c76: e005 b.n 8008c84 <USBD_GetLen+0x1e>
  22402. {
  22403. len++;
  22404. 8008c78: 7bfb ldrb r3, [r7, #15]
  22405. 8008c7a: 3301 adds r3, #1
  22406. 8008c7c: 73fb strb r3, [r7, #15]
  22407. pbuff++;
  22408. 8008c7e: 68bb ldr r3, [r7, #8]
  22409. 8008c80: 3301 adds r3, #1
  22410. 8008c82: 60bb str r3, [r7, #8]
  22411. while (*pbuff != (uint8_t)'\0')
  22412. 8008c84: 68bb ldr r3, [r7, #8]
  22413. 8008c86: 781b ldrb r3, [r3, #0]
  22414. 8008c88: 2b00 cmp r3, #0
  22415. 8008c8a: d1f5 bne.n 8008c78 <USBD_GetLen+0x12>
  22416. }
  22417. return len;
  22418. 8008c8c: 7bfb ldrb r3, [r7, #15]
  22419. }
  22420. 8008c8e: 4618 mov r0, r3
  22421. 8008c90: 3714 adds r7, #20
  22422. 8008c92: 46bd mov sp, r7
  22423. 8008c94: f85d 7b04 ldr.w r7, [sp], #4
  22424. 8008c98: 4770 bx lr
  22425. 08008c9a <USBD_CtlSendData>:
  22426. * @param len: length of data to be sent
  22427. * @retval status
  22428. */
  22429. USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev,
  22430. uint8_t *pbuf, uint32_t len)
  22431. {
  22432. 8008c9a: b580 push {r7, lr}
  22433. 8008c9c: b084 sub sp, #16
  22434. 8008c9e: af00 add r7, sp, #0
  22435. 8008ca0: 60f8 str r0, [r7, #12]
  22436. 8008ca2: 60b9 str r1, [r7, #8]
  22437. 8008ca4: 607a str r2, [r7, #4]
  22438. /* Set EP0 State */
  22439. pdev->ep0_state = USBD_EP0_DATA_IN;
  22440. 8008ca6: 68fb ldr r3, [r7, #12]
  22441. 8008ca8: 2202 movs r2, #2
  22442. 8008caa: f8c3 2294 str.w r2, [r3, #660] ; 0x294
  22443. pdev->ep_in[0].total_length = len;
  22444. 8008cae: 68fb ldr r3, [r7, #12]
  22445. 8008cb0: 687a ldr r2, [r7, #4]
  22446. 8008cb2: 619a str r2, [r3, #24]
  22447. #ifdef USBD_AVOID_PACKET_SPLIT_MPS
  22448. pdev->ep_in[0].rem_length = 0U;
  22449. #else
  22450. pdev->ep_in[0].rem_length = len;
  22451. 8008cb4: 68fb ldr r3, [r7, #12]
  22452. 8008cb6: 687a ldr r2, [r7, #4]
  22453. 8008cb8: 61da str r2, [r3, #28]
  22454. #endif
  22455. /* Start the transfer */
  22456. (void)USBD_LL_Transmit(pdev, 0x00U, pbuf, len);
  22457. 8008cba: 687b ldr r3, [r7, #4]
  22458. 8008cbc: 68ba ldr r2, [r7, #8]
  22459. 8008cbe: 2100 movs r1, #0
  22460. 8008cc0: 68f8 ldr r0, [r7, #12]
  22461. 8008cc2: f000 fd16 bl 80096f2 <USBD_LL_Transmit>
  22462. return USBD_OK;
  22463. 8008cc6: 2300 movs r3, #0
  22464. }
  22465. 8008cc8: 4618 mov r0, r3
  22466. 8008cca: 3710 adds r7, #16
  22467. 8008ccc: 46bd mov sp, r7
  22468. 8008cce: bd80 pop {r7, pc}
  22469. 08008cd0 <USBD_CtlContinueSendData>:
  22470. * @param len: length of data to be sent
  22471. * @retval status
  22472. */
  22473. USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev,
  22474. uint8_t *pbuf, uint32_t len)
  22475. {
  22476. 8008cd0: b580 push {r7, lr}
  22477. 8008cd2: b084 sub sp, #16
  22478. 8008cd4: af00 add r7, sp, #0
  22479. 8008cd6: 60f8 str r0, [r7, #12]
  22480. 8008cd8: 60b9 str r1, [r7, #8]
  22481. 8008cda: 607a str r2, [r7, #4]
  22482. /* Start the next transfer */
  22483. (void)USBD_LL_Transmit(pdev, 0x00U, pbuf, len);
  22484. 8008cdc: 687b ldr r3, [r7, #4]
  22485. 8008cde: 68ba ldr r2, [r7, #8]
  22486. 8008ce0: 2100 movs r1, #0
  22487. 8008ce2: 68f8 ldr r0, [r7, #12]
  22488. 8008ce4: f000 fd05 bl 80096f2 <USBD_LL_Transmit>
  22489. return USBD_OK;
  22490. 8008ce8: 2300 movs r3, #0
  22491. }
  22492. 8008cea: 4618 mov r0, r3
  22493. 8008cec: 3710 adds r7, #16
  22494. 8008cee: 46bd mov sp, r7
  22495. 8008cf0: bd80 pop {r7, pc}
  22496. 08008cf2 <USBD_CtlPrepareRx>:
  22497. * @param len: length of data to be received
  22498. * @retval status
  22499. */
  22500. USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev,
  22501. uint8_t *pbuf, uint32_t len)
  22502. {
  22503. 8008cf2: b580 push {r7, lr}
  22504. 8008cf4: b084 sub sp, #16
  22505. 8008cf6: af00 add r7, sp, #0
  22506. 8008cf8: 60f8 str r0, [r7, #12]
  22507. 8008cfa: 60b9 str r1, [r7, #8]
  22508. 8008cfc: 607a str r2, [r7, #4]
  22509. /* Set EP0 State */
  22510. pdev->ep0_state = USBD_EP0_DATA_OUT;
  22511. 8008cfe: 68fb ldr r3, [r7, #12]
  22512. 8008d00: 2203 movs r2, #3
  22513. 8008d02: f8c3 2294 str.w r2, [r3, #660] ; 0x294
  22514. pdev->ep_out[0].total_length = len;
  22515. 8008d06: 68fb ldr r3, [r7, #12]
  22516. 8008d08: 687a ldr r2, [r7, #4]
  22517. 8008d0a: f8c3 2158 str.w r2, [r3, #344] ; 0x158
  22518. #ifdef USBD_AVOID_PACKET_SPLIT_MPS
  22519. pdev->ep_out[0].rem_length = 0U;
  22520. #else
  22521. pdev->ep_out[0].rem_length = len;
  22522. 8008d0e: 68fb ldr r3, [r7, #12]
  22523. 8008d10: 687a ldr r2, [r7, #4]
  22524. 8008d12: f8c3 215c str.w r2, [r3, #348] ; 0x15c
  22525. #endif
  22526. /* Start the transfer */
  22527. (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
  22528. 8008d16: 687b ldr r3, [r7, #4]
  22529. 8008d18: 68ba ldr r2, [r7, #8]
  22530. 8008d1a: 2100 movs r1, #0
  22531. 8008d1c: 68f8 ldr r0, [r7, #12]
  22532. 8008d1e: f000 fd09 bl 8009734 <USBD_LL_PrepareReceive>
  22533. return USBD_OK;
  22534. 8008d22: 2300 movs r3, #0
  22535. }
  22536. 8008d24: 4618 mov r0, r3
  22537. 8008d26: 3710 adds r7, #16
  22538. 8008d28: 46bd mov sp, r7
  22539. 8008d2a: bd80 pop {r7, pc}
  22540. 08008d2c <USBD_CtlContinueRx>:
  22541. * @param len: length of data to be received
  22542. * @retval status
  22543. */
  22544. USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev,
  22545. uint8_t *pbuf, uint32_t len)
  22546. {
  22547. 8008d2c: b580 push {r7, lr}
  22548. 8008d2e: b084 sub sp, #16
  22549. 8008d30: af00 add r7, sp, #0
  22550. 8008d32: 60f8 str r0, [r7, #12]
  22551. 8008d34: 60b9 str r1, [r7, #8]
  22552. 8008d36: 607a str r2, [r7, #4]
  22553. (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
  22554. 8008d38: 687b ldr r3, [r7, #4]
  22555. 8008d3a: 68ba ldr r2, [r7, #8]
  22556. 8008d3c: 2100 movs r1, #0
  22557. 8008d3e: 68f8 ldr r0, [r7, #12]
  22558. 8008d40: f000 fcf8 bl 8009734 <USBD_LL_PrepareReceive>
  22559. return USBD_OK;
  22560. 8008d44: 2300 movs r3, #0
  22561. }
  22562. 8008d46: 4618 mov r0, r3
  22563. 8008d48: 3710 adds r7, #16
  22564. 8008d4a: 46bd mov sp, r7
  22565. 8008d4c: bd80 pop {r7, pc}
  22566. 08008d4e <USBD_CtlSendStatus>:
  22567. * send zero lzngth packet on the ctl pipe
  22568. * @param pdev: device instance
  22569. * @retval status
  22570. */
  22571. USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev)
  22572. {
  22573. 8008d4e: b580 push {r7, lr}
  22574. 8008d50: b082 sub sp, #8
  22575. 8008d52: af00 add r7, sp, #0
  22576. 8008d54: 6078 str r0, [r7, #4]
  22577. /* Set EP0 State */
  22578. pdev->ep0_state = USBD_EP0_STATUS_IN;
  22579. 8008d56: 687b ldr r3, [r7, #4]
  22580. 8008d58: 2204 movs r2, #4
  22581. 8008d5a: f8c3 2294 str.w r2, [r3, #660] ; 0x294
  22582. /* Start the transfer */
  22583. (void)USBD_LL_Transmit(pdev, 0x00U, NULL, 0U);
  22584. 8008d5e: 2300 movs r3, #0
  22585. 8008d60: 2200 movs r2, #0
  22586. 8008d62: 2100 movs r1, #0
  22587. 8008d64: 6878 ldr r0, [r7, #4]
  22588. 8008d66: f000 fcc4 bl 80096f2 <USBD_LL_Transmit>
  22589. return USBD_OK;
  22590. 8008d6a: 2300 movs r3, #0
  22591. }
  22592. 8008d6c: 4618 mov r0, r3
  22593. 8008d6e: 3708 adds r7, #8
  22594. 8008d70: 46bd mov sp, r7
  22595. 8008d72: bd80 pop {r7, pc}
  22596. 08008d74 <USBD_CtlReceiveStatus>:
  22597. * receive zero lzngth packet on the ctl pipe
  22598. * @param pdev: device instance
  22599. * @retval status
  22600. */
  22601. USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev)
  22602. {
  22603. 8008d74: b580 push {r7, lr}
  22604. 8008d76: b082 sub sp, #8
  22605. 8008d78: af00 add r7, sp, #0
  22606. 8008d7a: 6078 str r0, [r7, #4]
  22607. /* Set EP0 State */
  22608. pdev->ep0_state = USBD_EP0_STATUS_OUT;
  22609. 8008d7c: 687b ldr r3, [r7, #4]
  22610. 8008d7e: 2205 movs r2, #5
  22611. 8008d80: f8c3 2294 str.w r2, [r3, #660] ; 0x294
  22612. /* Start the transfer */
  22613. (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
  22614. 8008d84: 2300 movs r3, #0
  22615. 8008d86: 2200 movs r2, #0
  22616. 8008d88: 2100 movs r1, #0
  22617. 8008d8a: 6878 ldr r0, [r7, #4]
  22618. 8008d8c: f000 fcd2 bl 8009734 <USBD_LL_PrepareReceive>
  22619. return USBD_OK;
  22620. 8008d90: 2300 movs r3, #0
  22621. }
  22622. 8008d92: 4618 mov r0, r3
  22623. 8008d94: 3708 adds r7, #8
  22624. 8008d96: 46bd mov sp, r7
  22625. 8008d98: bd80 pop {r7, pc}
  22626. ...
  22627. 08008d9c <MX_USB_DEVICE_Init>:
  22628. /**
  22629. * Init USB device Library, add supported class and start the library
  22630. * @retval None
  22631. */
  22632. void MX_USB_DEVICE_Init(void)
  22633. {
  22634. 8008d9c: b580 push {r7, lr}
  22635. 8008d9e: af00 add r7, sp, #0
  22636. /* USER CODE BEGIN USB_DEVICE_Init_PreTreatment */
  22637. /* USER CODE END USB_DEVICE_Init_PreTreatment */
  22638. /* Init Device Library, add supported class and start the library. */
  22639. if (USBD_Init(&hUsbDeviceHS, &HS_Desc, DEVICE_HS) != USBD_OK)
  22640. 8008da0: 2201 movs r2, #1
  22641. 8008da2: 4913 ldr r1, [pc, #76] ; (8008df0 <MX_USB_DEVICE_Init+0x54>)
  22642. 8008da4: 4813 ldr r0, [pc, #76] ; (8008df4 <MX_USB_DEVICE_Init+0x58>)
  22643. 8008da6: f7fe fe8f bl 8007ac8 <USBD_Init>
  22644. 8008daa: 4603 mov r3, r0
  22645. 8008dac: 2b00 cmp r3, #0
  22646. 8008dae: d001 beq.n 8008db4 <MX_USB_DEVICE_Init+0x18>
  22647. {
  22648. Error_Handler();
  22649. 8008db0: f7f8 f982 bl 80010b8 <Error_Handler>
  22650. }
  22651. if (USBD_RegisterClass(&hUsbDeviceHS, &USBD_CDC) != USBD_OK)
  22652. 8008db4: 4910 ldr r1, [pc, #64] ; (8008df8 <MX_USB_DEVICE_Init+0x5c>)
  22653. 8008db6: 480f ldr r0, [pc, #60] ; (8008df4 <MX_USB_DEVICE_Init+0x58>)
  22654. 8008db8: f7fe feb6 bl 8007b28 <USBD_RegisterClass>
  22655. 8008dbc: 4603 mov r3, r0
  22656. 8008dbe: 2b00 cmp r3, #0
  22657. 8008dc0: d001 beq.n 8008dc6 <MX_USB_DEVICE_Init+0x2a>
  22658. {
  22659. Error_Handler();
  22660. 8008dc2: f7f8 f979 bl 80010b8 <Error_Handler>
  22661. }
  22662. if (USBD_CDC_RegisterInterface(&hUsbDeviceHS, &USBD_Interface_fops_HS) != USBD_OK)
  22663. 8008dc6: 490d ldr r1, [pc, #52] ; (8008dfc <MX_USB_DEVICE_Init+0x60>)
  22664. 8008dc8: 480a ldr r0, [pc, #40] ; (8008df4 <MX_USB_DEVICE_Init+0x58>)
  22665. 8008dca: f7fe fdd7 bl 800797c <USBD_CDC_RegisterInterface>
  22666. 8008dce: 4603 mov r3, r0
  22667. 8008dd0: 2b00 cmp r3, #0
  22668. 8008dd2: d001 beq.n 8008dd8 <MX_USB_DEVICE_Init+0x3c>
  22669. {
  22670. Error_Handler();
  22671. 8008dd4: f7f8 f970 bl 80010b8 <Error_Handler>
  22672. }
  22673. if (USBD_Start(&hUsbDeviceHS) != USBD_OK)
  22674. 8008dd8: 4806 ldr r0, [pc, #24] ; (8008df4 <MX_USB_DEVICE_Init+0x58>)
  22675. 8008dda: f7fe fecc bl 8007b76 <USBD_Start>
  22676. 8008dde: 4603 mov r3, r0
  22677. 8008de0: 2b00 cmp r3, #0
  22678. 8008de2: d001 beq.n 8008de8 <MX_USB_DEVICE_Init+0x4c>
  22679. {
  22680. Error_Handler();
  22681. 8008de4: f7f8 f968 bl 80010b8 <Error_Handler>
  22682. }
  22683. /* USER CODE BEGIN USB_DEVICE_Init_PostTreatment */
  22684. HAL_PWREx_EnableUSBVoltageDetector();
  22685. 8008de8: f7fa f8fe bl 8002fe8 <HAL_PWREx_EnableUSBVoltageDetector>
  22686. /* USER CODE END USB_DEVICE_Init_PostTreatment */
  22687. }
  22688. 8008dec: bf00 nop
  22689. 8008dee: bd80 pop {r7, pc}
  22690. 8008df0: 24000134 .word 0x24000134
  22691. 8008df4: 2400048c .word 0x2400048c
  22692. 8008df8: 2400001c .word 0x2400001c
  22693. 8008dfc: 24000120 .word 0x24000120
  22694. 08008e00 <CDC_Init_HS>:
  22695. /**
  22696. * @brief Initializes the CDC media low layer over the USB HS IP
  22697. * @retval USBD_OK if all operations are OK else USBD_FAIL
  22698. */
  22699. static int8_t CDC_Init_HS(void)
  22700. {
  22701. 8008e00: b580 push {r7, lr}
  22702. 8008e02: af00 add r7, sp, #0
  22703. /* USER CODE BEGIN 8 */
  22704. /* Set Application Buffers */
  22705. USBD_CDC_SetTxBuffer(&hUsbDeviceHS, UserTxBufferHS, 0);
  22706. 8008e04: 2200 movs r2, #0
  22707. 8008e06: 4905 ldr r1, [pc, #20] ; (8008e1c <CDC_Init_HS+0x1c>)
  22708. 8008e08: 4805 ldr r0, [pc, #20] ; (8008e20 <CDC_Init_HS+0x20>)
  22709. 8008e0a: f7fe fdcc bl 80079a6 <USBD_CDC_SetTxBuffer>
  22710. USBD_CDC_SetRxBuffer(&hUsbDeviceHS, UserRxBufferHS);
  22711. 8008e0e: 4905 ldr r1, [pc, #20] ; (8008e24 <CDC_Init_HS+0x24>)
  22712. 8008e10: 4803 ldr r0, [pc, #12] ; (8008e20 <CDC_Init_HS+0x20>)
  22713. 8008e12: f7fe fde6 bl 80079e2 <USBD_CDC_SetRxBuffer>
  22714. return (USBD_OK);
  22715. 8008e16: 2300 movs r3, #0
  22716. /* USER CODE END 8 */
  22717. }
  22718. 8008e18: 4618 mov r0, r3
  22719. 8008e1a: bd80 pop {r7, pc}
  22720. 8008e1c: 24000f5c .word 0x24000f5c
  22721. 8008e20: 2400048c .word 0x2400048c
  22722. 8008e24: 2400075c .word 0x2400075c
  22723. 08008e28 <CDC_DeInit_HS>:
  22724. * @brief DeInitializes the CDC media low layer
  22725. * @param None
  22726. * @retval USBD_OK if all operations are OK else USBD_FAIL
  22727. */
  22728. static int8_t CDC_DeInit_HS(void)
  22729. {
  22730. 8008e28: b480 push {r7}
  22731. 8008e2a: af00 add r7, sp, #0
  22732. /* USER CODE BEGIN 9 */
  22733. return (USBD_OK);
  22734. 8008e2c: 2300 movs r3, #0
  22735. /* USER CODE END 9 */
  22736. }
  22737. 8008e2e: 4618 mov r0, r3
  22738. 8008e30: 46bd mov sp, r7
  22739. 8008e32: f85d 7b04 ldr.w r7, [sp], #4
  22740. 8008e36: 4770 bx lr
  22741. 08008e38 <CDC_Control_HS>:
  22742. * @param pbuf: Buffer containing command data (request parameters)
  22743. * @param length: Number of data to be sent (in bytes)
  22744. * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
  22745. */
  22746. static int8_t CDC_Control_HS(uint8_t cmd, uint8_t* pbuf, uint16_t length)
  22747. {
  22748. 8008e38: b480 push {r7}
  22749. 8008e3a: b083 sub sp, #12
  22750. 8008e3c: af00 add r7, sp, #0
  22751. 8008e3e: 4603 mov r3, r0
  22752. 8008e40: 6039 str r1, [r7, #0]
  22753. 8008e42: 71fb strb r3, [r7, #7]
  22754. 8008e44: 4613 mov r3, r2
  22755. 8008e46: 80bb strh r3, [r7, #4]
  22756. /* USER CODE BEGIN 10 */
  22757. switch(cmd)
  22758. 8008e48: 79fb ldrb r3, [r7, #7]
  22759. 8008e4a: 2b23 cmp r3, #35 ; 0x23
  22760. 8008e4c: d84a bhi.n 8008ee4 <CDC_Control_HS+0xac>
  22761. 8008e4e: a201 add r2, pc, #4 ; (adr r2, 8008e54 <CDC_Control_HS+0x1c>)
  22762. 8008e50: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  22763. 8008e54: 08008ee5 .word 0x08008ee5
  22764. 8008e58: 08008ee5 .word 0x08008ee5
  22765. 8008e5c: 08008ee5 .word 0x08008ee5
  22766. 8008e60: 08008ee5 .word 0x08008ee5
  22767. 8008e64: 08008ee5 .word 0x08008ee5
  22768. 8008e68: 08008ee5 .word 0x08008ee5
  22769. 8008e6c: 08008ee5 .word 0x08008ee5
  22770. 8008e70: 08008ee5 .word 0x08008ee5
  22771. 8008e74: 08008ee5 .word 0x08008ee5
  22772. 8008e78: 08008ee5 .word 0x08008ee5
  22773. 8008e7c: 08008ee5 .word 0x08008ee5
  22774. 8008e80: 08008ee5 .word 0x08008ee5
  22775. 8008e84: 08008ee5 .word 0x08008ee5
  22776. 8008e88: 08008ee5 .word 0x08008ee5
  22777. 8008e8c: 08008ee5 .word 0x08008ee5
  22778. 8008e90: 08008ee5 .word 0x08008ee5
  22779. 8008e94: 08008ee5 .word 0x08008ee5
  22780. 8008e98: 08008ee5 .word 0x08008ee5
  22781. 8008e9c: 08008ee5 .word 0x08008ee5
  22782. 8008ea0: 08008ee5 .word 0x08008ee5
  22783. 8008ea4: 08008ee5 .word 0x08008ee5
  22784. 8008ea8: 08008ee5 .word 0x08008ee5
  22785. 8008eac: 08008ee5 .word 0x08008ee5
  22786. 8008eb0: 08008ee5 .word 0x08008ee5
  22787. 8008eb4: 08008ee5 .word 0x08008ee5
  22788. 8008eb8: 08008ee5 .word 0x08008ee5
  22789. 8008ebc: 08008ee5 .word 0x08008ee5
  22790. 8008ec0: 08008ee5 .word 0x08008ee5
  22791. 8008ec4: 08008ee5 .word 0x08008ee5
  22792. 8008ec8: 08008ee5 .word 0x08008ee5
  22793. 8008ecc: 08008ee5 .word 0x08008ee5
  22794. 8008ed0: 08008ee5 .word 0x08008ee5
  22795. 8008ed4: 08008ee5 .word 0x08008ee5
  22796. 8008ed8: 08008ee5 .word 0x08008ee5
  22797. 8008edc: 08008ee5 .word 0x08008ee5
  22798. 8008ee0: 08008ee5 .word 0x08008ee5
  22799. case CDC_SEND_BREAK:
  22800. break;
  22801. default:
  22802. break;
  22803. 8008ee4: bf00 nop
  22804. }
  22805. return (USBD_OK);
  22806. 8008ee6: 2300 movs r3, #0
  22807. /* USER CODE END 10 */
  22808. }
  22809. 8008ee8: 4618 mov r0, r3
  22810. 8008eea: 370c adds r7, #12
  22811. 8008eec: 46bd mov sp, r7
  22812. 8008eee: f85d 7b04 ldr.w r7, [sp], #4
  22813. 8008ef2: 4770 bx lr
  22814. 08008ef4 <CDC_Receive_HS>:
  22815. * @param Buf: Buffer of data to be received
  22816. * @param Len: Number of data received (in bytes)
  22817. * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAILL
  22818. */
  22819. static int8_t CDC_Receive_HS(uint8_t* Buf, uint32_t *Len)
  22820. {
  22821. 8008ef4: b580 push {r7, lr}
  22822. 8008ef6: b082 sub sp, #8
  22823. 8008ef8: af00 add r7, sp, #0
  22824. 8008efa: 6078 str r0, [r7, #4]
  22825. 8008efc: 6039 str r1, [r7, #0]
  22826. /* USER CODE BEGIN 11 */
  22827. USBD_CDC_SetRxBuffer(&hUsbDeviceHS, &Buf[0]);
  22828. 8008efe: 6879 ldr r1, [r7, #4]
  22829. 8008f00: 4805 ldr r0, [pc, #20] ; (8008f18 <CDC_Receive_HS+0x24>)
  22830. 8008f02: f7fe fd6e bl 80079e2 <USBD_CDC_SetRxBuffer>
  22831. USBD_CDC_ReceivePacket(&hUsbDeviceHS);
  22832. 8008f06: 4804 ldr r0, [pc, #16] ; (8008f18 <CDC_Receive_HS+0x24>)
  22833. 8008f08: f7fe fdb4 bl 8007a74 <USBD_CDC_ReceivePacket>
  22834. return (USBD_OK);
  22835. 8008f0c: 2300 movs r3, #0
  22836. /* USER CODE END 11 */
  22837. }
  22838. 8008f0e: 4618 mov r0, r3
  22839. 8008f10: 3708 adds r7, #8
  22840. 8008f12: 46bd mov sp, r7
  22841. 8008f14: bd80 pop {r7, pc}
  22842. 8008f16: bf00 nop
  22843. 8008f18: 2400048c .word 0x2400048c
  22844. 08008f1c <CDC_Transmit_HS>:
  22845. * @param Buf: Buffer of data to be sent
  22846. * @param Len: Number of data to be sent (in bytes)
  22847. * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY
  22848. */
  22849. uint8_t CDC_Transmit_HS(uint8_t* Buf, uint16_t Len)
  22850. {
  22851. 8008f1c: b580 push {r7, lr}
  22852. 8008f1e: b084 sub sp, #16
  22853. 8008f20: af00 add r7, sp, #0
  22854. 8008f22: 6078 str r0, [r7, #4]
  22855. 8008f24: 460b mov r3, r1
  22856. 8008f26: 807b strh r3, [r7, #2]
  22857. uint8_t result = USBD_OK;
  22858. 8008f28: 2300 movs r3, #0
  22859. 8008f2a: 73fb strb r3, [r7, #15]
  22860. /* USER CODE BEGIN 12 */
  22861. USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceHS.pClassData;
  22862. 8008f2c: 4b0d ldr r3, [pc, #52] ; (8008f64 <CDC_Transmit_HS+0x48>)
  22863. 8008f2e: f8d3 32bc ldr.w r3, [r3, #700] ; 0x2bc
  22864. 8008f32: 60bb str r3, [r7, #8]
  22865. if (hcdc->TxState != 0){
  22866. 8008f34: 68bb ldr r3, [r7, #8]
  22867. 8008f36: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214
  22868. 8008f3a: 2b00 cmp r3, #0
  22869. 8008f3c: d001 beq.n 8008f42 <CDC_Transmit_HS+0x26>
  22870. return USBD_BUSY;
  22871. 8008f3e: 2301 movs r3, #1
  22872. 8008f40: e00b b.n 8008f5a <CDC_Transmit_HS+0x3e>
  22873. }
  22874. USBD_CDC_SetTxBuffer(&hUsbDeviceHS, Buf, Len);
  22875. 8008f42: 887b ldrh r3, [r7, #2]
  22876. 8008f44: 461a mov r2, r3
  22877. 8008f46: 6879 ldr r1, [r7, #4]
  22878. 8008f48: 4806 ldr r0, [pc, #24] ; (8008f64 <CDC_Transmit_HS+0x48>)
  22879. 8008f4a: f7fe fd2c bl 80079a6 <USBD_CDC_SetTxBuffer>
  22880. result = USBD_CDC_TransmitPacket(&hUsbDeviceHS);
  22881. 8008f4e: 4805 ldr r0, [pc, #20] ; (8008f64 <CDC_Transmit_HS+0x48>)
  22882. 8008f50: f7fe fd60 bl 8007a14 <USBD_CDC_TransmitPacket>
  22883. 8008f54: 4603 mov r3, r0
  22884. 8008f56: 73fb strb r3, [r7, #15]
  22885. /* USER CODE END 12 */
  22886. return result;
  22887. 8008f58: 7bfb ldrb r3, [r7, #15]
  22888. }
  22889. 8008f5a: 4618 mov r0, r3
  22890. 8008f5c: 3710 adds r7, #16
  22891. 8008f5e: 46bd mov sp, r7
  22892. 8008f60: bd80 pop {r7, pc}
  22893. 8008f62: bf00 nop
  22894. 8008f64: 2400048c .word 0x2400048c
  22895. 08008f68 <CDC_TransmitCplt_HS>:
  22896. * @param Buf: Buffer of data to be received
  22897. * @param Len: Number of data received (in bytes)
  22898. * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
  22899. */
  22900. static int8_t CDC_TransmitCplt_HS(uint8_t *Buf, uint32_t *Len, uint8_t epnum)
  22901. {
  22902. 8008f68: b480 push {r7}
  22903. 8008f6a: b087 sub sp, #28
  22904. 8008f6c: af00 add r7, sp, #0
  22905. 8008f6e: 60f8 str r0, [r7, #12]
  22906. 8008f70: 60b9 str r1, [r7, #8]
  22907. 8008f72: 4613 mov r3, r2
  22908. 8008f74: 71fb strb r3, [r7, #7]
  22909. uint8_t result = USBD_OK;
  22910. 8008f76: 2300 movs r3, #0
  22911. 8008f78: 75fb strb r3, [r7, #23]
  22912. /* USER CODE BEGIN 14 */
  22913. UNUSED(Buf);
  22914. UNUSED(Len);
  22915. UNUSED(epnum);
  22916. /* USER CODE END 14 */
  22917. return result;
  22918. 8008f7a: f997 3017 ldrsb.w r3, [r7, #23]
  22919. }
  22920. 8008f7e: 4618 mov r0, r3
  22921. 8008f80: 371c adds r7, #28
  22922. 8008f82: 46bd mov sp, r7
  22923. 8008f84: f85d 7b04 ldr.w r7, [sp], #4
  22924. 8008f88: 4770 bx lr
  22925. ...
  22926. 08008f8c <USBD_HS_DeviceDescriptor>:
  22927. * @param speed : Current device speed
  22928. * @param length : Pointer to data length variable
  22929. * @retval Pointer to descriptor buffer
  22930. */
  22931. uint8_t * USBD_HS_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
  22932. {
  22933. 8008f8c: b480 push {r7}
  22934. 8008f8e: b083 sub sp, #12
  22935. 8008f90: af00 add r7, sp, #0
  22936. 8008f92: 4603 mov r3, r0
  22937. 8008f94: 6039 str r1, [r7, #0]
  22938. 8008f96: 71fb strb r3, [r7, #7]
  22939. UNUSED(speed);
  22940. *length = sizeof(USBD_HS_DeviceDesc);
  22941. 8008f98: 683b ldr r3, [r7, #0]
  22942. 8008f9a: 2212 movs r2, #18
  22943. 8008f9c: 801a strh r2, [r3, #0]
  22944. return USBD_HS_DeviceDesc;
  22945. 8008f9e: 4b03 ldr r3, [pc, #12] ; (8008fac <USBD_HS_DeviceDescriptor+0x20>)
  22946. }
  22947. 8008fa0: 4618 mov r0, r3
  22948. 8008fa2: 370c adds r7, #12
  22949. 8008fa4: 46bd mov sp, r7
  22950. 8008fa6: f85d 7b04 ldr.w r7, [sp], #4
  22951. 8008faa: 4770 bx lr
  22952. 8008fac: 24000150 .word 0x24000150
  22953. 08008fb0 <USBD_HS_LangIDStrDescriptor>:
  22954. * @param speed : Current device speed
  22955. * @param length : Pointer to data length variable
  22956. * @retval Pointer to descriptor buffer
  22957. */
  22958. uint8_t * USBD_HS_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
  22959. {
  22960. 8008fb0: b480 push {r7}
  22961. 8008fb2: b083 sub sp, #12
  22962. 8008fb4: af00 add r7, sp, #0
  22963. 8008fb6: 4603 mov r3, r0
  22964. 8008fb8: 6039 str r1, [r7, #0]
  22965. 8008fba: 71fb strb r3, [r7, #7]
  22966. UNUSED(speed);
  22967. *length = sizeof(USBD_LangIDDesc);
  22968. 8008fbc: 683b ldr r3, [r7, #0]
  22969. 8008fbe: 2204 movs r2, #4
  22970. 8008fc0: 801a strh r2, [r3, #0]
  22971. return USBD_LangIDDesc;
  22972. 8008fc2: 4b03 ldr r3, [pc, #12] ; (8008fd0 <USBD_HS_LangIDStrDescriptor+0x20>)
  22973. }
  22974. 8008fc4: 4618 mov r0, r3
  22975. 8008fc6: 370c adds r7, #12
  22976. 8008fc8: 46bd mov sp, r7
  22977. 8008fca: f85d 7b04 ldr.w r7, [sp], #4
  22978. 8008fce: 4770 bx lr
  22979. 8008fd0: 24000164 .word 0x24000164
  22980. 08008fd4 <USBD_HS_ProductStrDescriptor>:
  22981. * @param speed : current device speed
  22982. * @param length : pointer to data length variable
  22983. * @retval pointer to descriptor buffer
  22984. */
  22985. uint8_t * USBD_HS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
  22986. {
  22987. 8008fd4: b580 push {r7, lr}
  22988. 8008fd6: b082 sub sp, #8
  22989. 8008fd8: af00 add r7, sp, #0
  22990. 8008fda: 4603 mov r3, r0
  22991. 8008fdc: 6039 str r1, [r7, #0]
  22992. 8008fde: 71fb strb r3, [r7, #7]
  22993. if(speed == 0)
  22994. 8008fe0: 79fb ldrb r3, [r7, #7]
  22995. 8008fe2: 2b00 cmp r3, #0
  22996. 8008fe4: d105 bne.n 8008ff2 <USBD_HS_ProductStrDescriptor+0x1e>
  22997. {
  22998. USBD_GetString((uint8_t *)USBD_PRODUCT_STRING_HS, USBD_StrDesc, length);
  22999. 8008fe6: 683a ldr r2, [r7, #0]
  23000. 8008fe8: 4907 ldr r1, [pc, #28] ; (8009008 <USBD_HS_ProductStrDescriptor+0x34>)
  23001. 8008fea: 4808 ldr r0, [pc, #32] ; (800900c <USBD_HS_ProductStrDescriptor+0x38>)
  23002. 8008fec: f7ff fdf5 bl 8008bda <USBD_GetString>
  23003. 8008ff0: e004 b.n 8008ffc <USBD_HS_ProductStrDescriptor+0x28>
  23004. }
  23005. else
  23006. {
  23007. USBD_GetString((uint8_t *)USBD_PRODUCT_STRING_HS, USBD_StrDesc, length);
  23008. 8008ff2: 683a ldr r2, [r7, #0]
  23009. 8008ff4: 4904 ldr r1, [pc, #16] ; (8009008 <USBD_HS_ProductStrDescriptor+0x34>)
  23010. 8008ff6: 4805 ldr r0, [pc, #20] ; (800900c <USBD_HS_ProductStrDescriptor+0x38>)
  23011. 8008ff8: f7ff fdef bl 8008bda <USBD_GetString>
  23012. }
  23013. return USBD_StrDesc;
  23014. 8008ffc: 4b02 ldr r3, [pc, #8] ; (8009008 <USBD_HS_ProductStrDescriptor+0x34>)
  23015. }
  23016. 8008ffe: 4618 mov r0, r3
  23017. 8009000: 3708 adds r7, #8
  23018. 8009002: 46bd mov sp, r7
  23019. 8009004: bd80 pop {r7, pc}
  23020. 8009006: bf00 nop
  23021. 8009008: 2400175c .word 0x2400175c
  23022. 800900c: 0800a830 .word 0x0800a830
  23023. 08009010 <USBD_HS_ManufacturerStrDescriptor>:
  23024. * @param speed : Current device speed
  23025. * @param length : Pointer to data length variable
  23026. * @retval Pointer to descriptor buffer
  23027. */
  23028. uint8_t * USBD_HS_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
  23029. {
  23030. 8009010: b580 push {r7, lr}
  23031. 8009012: b082 sub sp, #8
  23032. 8009014: af00 add r7, sp, #0
  23033. 8009016: 4603 mov r3, r0
  23034. 8009018: 6039 str r1, [r7, #0]
  23035. 800901a: 71fb strb r3, [r7, #7]
  23036. UNUSED(speed);
  23037. USBD_GetString((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
  23038. 800901c: 683a ldr r2, [r7, #0]
  23039. 800901e: 4904 ldr r1, [pc, #16] ; (8009030 <USBD_HS_ManufacturerStrDescriptor+0x20>)
  23040. 8009020: 4804 ldr r0, [pc, #16] ; (8009034 <USBD_HS_ManufacturerStrDescriptor+0x24>)
  23041. 8009022: f7ff fdda bl 8008bda <USBD_GetString>
  23042. return USBD_StrDesc;
  23043. 8009026: 4b02 ldr r3, [pc, #8] ; (8009030 <USBD_HS_ManufacturerStrDescriptor+0x20>)
  23044. }
  23045. 8009028: 4618 mov r0, r3
  23046. 800902a: 3708 adds r7, #8
  23047. 800902c: 46bd mov sp, r7
  23048. 800902e: bd80 pop {r7, pc}
  23049. 8009030: 2400175c .word 0x2400175c
  23050. 8009034: 0800a848 .word 0x0800a848
  23051. 08009038 <USBD_HS_SerialStrDescriptor>:
  23052. * @param speed : Current device speed
  23053. * @param length : Pointer to data length variable
  23054. * @retval Pointer to descriptor buffer
  23055. */
  23056. uint8_t * USBD_HS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
  23057. {
  23058. 8009038: b580 push {r7, lr}
  23059. 800903a: b082 sub sp, #8
  23060. 800903c: af00 add r7, sp, #0
  23061. 800903e: 4603 mov r3, r0
  23062. 8009040: 6039 str r1, [r7, #0]
  23063. 8009042: 71fb strb r3, [r7, #7]
  23064. UNUSED(speed);
  23065. *length = USB_SIZ_STRING_SERIAL;
  23066. 8009044: 683b ldr r3, [r7, #0]
  23067. 8009046: 221a movs r2, #26
  23068. 8009048: 801a strh r2, [r3, #0]
  23069. /* Update the serial number string descriptor with the data from the unique
  23070. * ID */
  23071. Get_SerialNum();
  23072. 800904a: f000 f843 bl 80090d4 <Get_SerialNum>
  23073. /* USER CODE BEGIN USBD_HS_SerialStrDescriptor */
  23074. /* USER CODE END USBD_HS_SerialStrDescriptor */
  23075. return (uint8_t *) USBD_StringSerial;
  23076. 800904e: 4b02 ldr r3, [pc, #8] ; (8009058 <USBD_HS_SerialStrDescriptor+0x20>)
  23077. }
  23078. 8009050: 4618 mov r0, r3
  23079. 8009052: 3708 adds r7, #8
  23080. 8009054: 46bd mov sp, r7
  23081. 8009056: bd80 pop {r7, pc}
  23082. 8009058: 24000168 .word 0x24000168
  23083. 0800905c <USBD_HS_ConfigStrDescriptor>:
  23084. * @param speed : Current device speed
  23085. * @param length : Pointer to data length variable
  23086. * @retval Pointer to descriptor buffer
  23087. */
  23088. uint8_t * USBD_HS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
  23089. {
  23090. 800905c: b580 push {r7, lr}
  23091. 800905e: b082 sub sp, #8
  23092. 8009060: af00 add r7, sp, #0
  23093. 8009062: 4603 mov r3, r0
  23094. 8009064: 6039 str r1, [r7, #0]
  23095. 8009066: 71fb strb r3, [r7, #7]
  23096. if(speed == USBD_SPEED_HIGH)
  23097. 8009068: 79fb ldrb r3, [r7, #7]
  23098. 800906a: 2b00 cmp r3, #0
  23099. 800906c: d105 bne.n 800907a <USBD_HS_ConfigStrDescriptor+0x1e>
  23100. {
  23101. USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING_HS, USBD_StrDesc, length);
  23102. 800906e: 683a ldr r2, [r7, #0]
  23103. 8009070: 4907 ldr r1, [pc, #28] ; (8009090 <USBD_HS_ConfigStrDescriptor+0x34>)
  23104. 8009072: 4808 ldr r0, [pc, #32] ; (8009094 <USBD_HS_ConfigStrDescriptor+0x38>)
  23105. 8009074: f7ff fdb1 bl 8008bda <USBD_GetString>
  23106. 8009078: e004 b.n 8009084 <USBD_HS_ConfigStrDescriptor+0x28>
  23107. }
  23108. else
  23109. {
  23110. USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING_HS, USBD_StrDesc, length);
  23111. 800907a: 683a ldr r2, [r7, #0]
  23112. 800907c: 4904 ldr r1, [pc, #16] ; (8009090 <USBD_HS_ConfigStrDescriptor+0x34>)
  23113. 800907e: 4805 ldr r0, [pc, #20] ; (8009094 <USBD_HS_ConfigStrDescriptor+0x38>)
  23114. 8009080: f7ff fdab bl 8008bda <USBD_GetString>
  23115. }
  23116. return USBD_StrDesc;
  23117. 8009084: 4b02 ldr r3, [pc, #8] ; (8009090 <USBD_HS_ConfigStrDescriptor+0x34>)
  23118. }
  23119. 8009086: 4618 mov r0, r3
  23120. 8009088: 3708 adds r7, #8
  23121. 800908a: 46bd mov sp, r7
  23122. 800908c: bd80 pop {r7, pc}
  23123. 800908e: bf00 nop
  23124. 8009090: 2400175c .word 0x2400175c
  23125. 8009094: 0800a85c .word 0x0800a85c
  23126. 08009098 <USBD_HS_InterfaceStrDescriptor>:
  23127. * @param speed : Current device speed
  23128. * @param length : Pointer to data length variable
  23129. * @retval Pointer to descriptor buffer
  23130. */
  23131. uint8_t * USBD_HS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
  23132. {
  23133. 8009098: b580 push {r7, lr}
  23134. 800909a: b082 sub sp, #8
  23135. 800909c: af00 add r7, sp, #0
  23136. 800909e: 4603 mov r3, r0
  23137. 80090a0: 6039 str r1, [r7, #0]
  23138. 80090a2: 71fb strb r3, [r7, #7]
  23139. if(speed == 0)
  23140. 80090a4: 79fb ldrb r3, [r7, #7]
  23141. 80090a6: 2b00 cmp r3, #0
  23142. 80090a8: d105 bne.n 80090b6 <USBD_HS_InterfaceStrDescriptor+0x1e>
  23143. {
  23144. USBD_GetString((uint8_t *)USBD_INTERFACE_STRING_HS, USBD_StrDesc, length);
  23145. 80090aa: 683a ldr r2, [r7, #0]
  23146. 80090ac: 4907 ldr r1, [pc, #28] ; (80090cc <USBD_HS_InterfaceStrDescriptor+0x34>)
  23147. 80090ae: 4808 ldr r0, [pc, #32] ; (80090d0 <USBD_HS_InterfaceStrDescriptor+0x38>)
  23148. 80090b0: f7ff fd93 bl 8008bda <USBD_GetString>
  23149. 80090b4: e004 b.n 80090c0 <USBD_HS_InterfaceStrDescriptor+0x28>
  23150. }
  23151. else
  23152. {
  23153. USBD_GetString((uint8_t *)USBD_INTERFACE_STRING_HS, USBD_StrDesc, length);
  23154. 80090b6: 683a ldr r2, [r7, #0]
  23155. 80090b8: 4904 ldr r1, [pc, #16] ; (80090cc <USBD_HS_InterfaceStrDescriptor+0x34>)
  23156. 80090ba: 4805 ldr r0, [pc, #20] ; (80090d0 <USBD_HS_InterfaceStrDescriptor+0x38>)
  23157. 80090bc: f7ff fd8d bl 8008bda <USBD_GetString>
  23158. }
  23159. return USBD_StrDesc;
  23160. 80090c0: 4b02 ldr r3, [pc, #8] ; (80090cc <USBD_HS_InterfaceStrDescriptor+0x34>)
  23161. }
  23162. 80090c2: 4618 mov r0, r3
  23163. 80090c4: 3708 adds r7, #8
  23164. 80090c6: 46bd mov sp, r7
  23165. 80090c8: bd80 pop {r7, pc}
  23166. 80090ca: bf00 nop
  23167. 80090cc: 2400175c .word 0x2400175c
  23168. 80090d0: 0800a868 .word 0x0800a868
  23169. 080090d4 <Get_SerialNum>:
  23170. * @brief Create the serial number string descriptor
  23171. * @param None
  23172. * @retval None
  23173. */
  23174. static void Get_SerialNum(void)
  23175. {
  23176. 80090d4: b580 push {r7, lr}
  23177. 80090d6: b084 sub sp, #16
  23178. 80090d8: af00 add r7, sp, #0
  23179. uint32_t deviceserial0, deviceserial1, deviceserial2;
  23180. deviceserial0 = *(uint32_t *) DEVICE_ID1;
  23181. 80090da: 4b0f ldr r3, [pc, #60] ; (8009118 <Get_SerialNum+0x44>)
  23182. 80090dc: 681b ldr r3, [r3, #0]
  23183. 80090de: 60fb str r3, [r7, #12]
  23184. deviceserial1 = *(uint32_t *) DEVICE_ID2;
  23185. 80090e0: 4b0e ldr r3, [pc, #56] ; (800911c <Get_SerialNum+0x48>)
  23186. 80090e2: 681b ldr r3, [r3, #0]
  23187. 80090e4: 60bb str r3, [r7, #8]
  23188. deviceserial2 = *(uint32_t *) DEVICE_ID3;
  23189. 80090e6: 4b0e ldr r3, [pc, #56] ; (8009120 <Get_SerialNum+0x4c>)
  23190. 80090e8: 681b ldr r3, [r3, #0]
  23191. 80090ea: 607b str r3, [r7, #4]
  23192. deviceserial0 += deviceserial2;
  23193. 80090ec: 68fa ldr r2, [r7, #12]
  23194. 80090ee: 687b ldr r3, [r7, #4]
  23195. 80090f0: 4413 add r3, r2
  23196. 80090f2: 60fb str r3, [r7, #12]
  23197. if (deviceserial0 != 0)
  23198. 80090f4: 68fb ldr r3, [r7, #12]
  23199. 80090f6: 2b00 cmp r3, #0
  23200. 80090f8: d009 beq.n 800910e <Get_SerialNum+0x3a>
  23201. {
  23202. IntToUnicode(deviceserial0, &USBD_StringSerial[2], 8);
  23203. 80090fa: 2208 movs r2, #8
  23204. 80090fc: 4909 ldr r1, [pc, #36] ; (8009124 <Get_SerialNum+0x50>)
  23205. 80090fe: 68f8 ldr r0, [r7, #12]
  23206. 8009100: f000 f814 bl 800912c <IntToUnicode>
  23207. IntToUnicode(deviceserial1, &USBD_StringSerial[18], 4);
  23208. 8009104: 2204 movs r2, #4
  23209. 8009106: 4908 ldr r1, [pc, #32] ; (8009128 <Get_SerialNum+0x54>)
  23210. 8009108: 68b8 ldr r0, [r7, #8]
  23211. 800910a: f000 f80f bl 800912c <IntToUnicode>
  23212. }
  23213. }
  23214. 800910e: bf00 nop
  23215. 8009110: 3710 adds r7, #16
  23216. 8009112: 46bd mov sp, r7
  23217. 8009114: bd80 pop {r7, pc}
  23218. 8009116: bf00 nop
  23219. 8009118: 1ff1e800 .word 0x1ff1e800
  23220. 800911c: 1ff1e804 .word 0x1ff1e804
  23221. 8009120: 1ff1e808 .word 0x1ff1e808
  23222. 8009124: 2400016a .word 0x2400016a
  23223. 8009128: 2400017a .word 0x2400017a
  23224. 0800912c <IntToUnicode>:
  23225. * @param pbuf: pointer to the buffer
  23226. * @param len: buffer length
  23227. * @retval None
  23228. */
  23229. static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len)
  23230. {
  23231. 800912c: b480 push {r7}
  23232. 800912e: b087 sub sp, #28
  23233. 8009130: af00 add r7, sp, #0
  23234. 8009132: 60f8 str r0, [r7, #12]
  23235. 8009134: 60b9 str r1, [r7, #8]
  23236. 8009136: 4613 mov r3, r2
  23237. 8009138: 71fb strb r3, [r7, #7]
  23238. uint8_t idx = 0;
  23239. 800913a: 2300 movs r3, #0
  23240. 800913c: 75fb strb r3, [r7, #23]
  23241. for (idx = 0; idx < len; idx++)
  23242. 800913e: 2300 movs r3, #0
  23243. 8009140: 75fb strb r3, [r7, #23]
  23244. 8009142: e027 b.n 8009194 <IntToUnicode+0x68>
  23245. {
  23246. if (((value >> 28)) < 0xA)
  23247. 8009144: 68fb ldr r3, [r7, #12]
  23248. 8009146: 0f1b lsrs r3, r3, #28
  23249. 8009148: 2b09 cmp r3, #9
  23250. 800914a: d80b bhi.n 8009164 <IntToUnicode+0x38>
  23251. {
  23252. pbuf[2 * idx] = (value >> 28) + '0';
  23253. 800914c: 68fb ldr r3, [r7, #12]
  23254. 800914e: 0f1b lsrs r3, r3, #28
  23255. 8009150: b2da uxtb r2, r3
  23256. 8009152: 7dfb ldrb r3, [r7, #23]
  23257. 8009154: 005b lsls r3, r3, #1
  23258. 8009156: 4619 mov r1, r3
  23259. 8009158: 68bb ldr r3, [r7, #8]
  23260. 800915a: 440b add r3, r1
  23261. 800915c: 3230 adds r2, #48 ; 0x30
  23262. 800915e: b2d2 uxtb r2, r2
  23263. 8009160: 701a strb r2, [r3, #0]
  23264. 8009162: e00a b.n 800917a <IntToUnicode+0x4e>
  23265. }
  23266. else
  23267. {
  23268. pbuf[2 * idx] = (value >> 28) + 'A' - 10;
  23269. 8009164: 68fb ldr r3, [r7, #12]
  23270. 8009166: 0f1b lsrs r3, r3, #28
  23271. 8009168: b2da uxtb r2, r3
  23272. 800916a: 7dfb ldrb r3, [r7, #23]
  23273. 800916c: 005b lsls r3, r3, #1
  23274. 800916e: 4619 mov r1, r3
  23275. 8009170: 68bb ldr r3, [r7, #8]
  23276. 8009172: 440b add r3, r1
  23277. 8009174: 3237 adds r2, #55 ; 0x37
  23278. 8009176: b2d2 uxtb r2, r2
  23279. 8009178: 701a strb r2, [r3, #0]
  23280. }
  23281. value = value << 4;
  23282. 800917a: 68fb ldr r3, [r7, #12]
  23283. 800917c: 011b lsls r3, r3, #4
  23284. 800917e: 60fb str r3, [r7, #12]
  23285. pbuf[2 * idx + 1] = 0;
  23286. 8009180: 7dfb ldrb r3, [r7, #23]
  23287. 8009182: 005b lsls r3, r3, #1
  23288. 8009184: 3301 adds r3, #1
  23289. 8009186: 68ba ldr r2, [r7, #8]
  23290. 8009188: 4413 add r3, r2
  23291. 800918a: 2200 movs r2, #0
  23292. 800918c: 701a strb r2, [r3, #0]
  23293. for (idx = 0; idx < len; idx++)
  23294. 800918e: 7dfb ldrb r3, [r7, #23]
  23295. 8009190: 3301 adds r3, #1
  23296. 8009192: 75fb strb r3, [r7, #23]
  23297. 8009194: 7dfa ldrb r2, [r7, #23]
  23298. 8009196: 79fb ldrb r3, [r7, #7]
  23299. 8009198: 429a cmp r2, r3
  23300. 800919a: d3d3 bcc.n 8009144 <IntToUnicode+0x18>
  23301. }
  23302. }
  23303. 800919c: bf00 nop
  23304. 800919e: bf00 nop
  23305. 80091a0: 371c adds r7, #28
  23306. 80091a2: 46bd mov sp, r7
  23307. 80091a4: f85d 7b04 ldr.w r7, [sp], #4
  23308. 80091a8: 4770 bx lr
  23309. ...
  23310. 080091ac <HAL_PCD_MspInit>:
  23311. LL Driver Callbacks (PCD -> USB Device Library)
  23312. *******************************************************************************/
  23313. /* MSP Init */
  23314. void HAL_PCD_MspInit(PCD_HandleTypeDef* pcdHandle)
  23315. {
  23316. 80091ac: b580 push {r7, lr}
  23317. 80091ae: b0b6 sub sp, #216 ; 0xd8
  23318. 80091b0: af00 add r7, sp, #0
  23319. 80091b2: 6078 str r0, [r7, #4]
  23320. GPIO_InitTypeDef GPIO_InitStruct = {0};
  23321. 80091b4: f107 03c4 add.w r3, r7, #196 ; 0xc4
  23322. 80091b8: 2200 movs r2, #0
  23323. 80091ba: 601a str r2, [r3, #0]
  23324. 80091bc: 605a str r2, [r3, #4]
  23325. 80091be: 609a str r2, [r3, #8]
  23326. 80091c0: 60da str r2, [r3, #12]
  23327. 80091c2: 611a str r2, [r3, #16]
  23328. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  23329. 80091c4: f107 0310 add.w r3, r7, #16
  23330. 80091c8: 22b4 movs r2, #180 ; 0xb4
  23331. 80091ca: 2100 movs r1, #0
  23332. 80091cc: 4618 mov r0, r3
  23333. 80091ce: f000 fb83 bl 80098d8 <memset>
  23334. if(pcdHandle->Instance==USB_OTG_HS)
  23335. 80091d2: 687b ldr r3, [r7, #4]
  23336. 80091d4: 681b ldr r3, [r3, #0]
  23337. 80091d6: 4a2b ldr r2, [pc, #172] ; (8009284 <HAL_PCD_MspInit+0xd8>)
  23338. 80091d8: 4293 cmp r3, r2
  23339. 80091da: d14e bne.n 800927a <HAL_PCD_MspInit+0xce>
  23340. /* USER CODE BEGIN USB_OTG_HS_MspInit 0 */
  23341. /* USER CODE END USB_OTG_HS_MspInit 0 */
  23342. /** Initializes the peripherals clock
  23343. */
  23344. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB;
  23345. 80091dc: f44f 2380 mov.w r3, #262144 ; 0x40000
  23346. 80091e0: 613b str r3, [r7, #16]
  23347. PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
  23348. 80091e2: f44f 1340 mov.w r3, #3145728 ; 0x300000
  23349. 80091e6: f8c7 3090 str.w r3, [r7, #144] ; 0x90
  23350. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  23351. 80091ea: f107 0310 add.w r3, r7, #16
  23352. 80091ee: 4618 mov r0, r3
  23353. 80091f0: f7fa fe16 bl 8003e20 <HAL_RCCEx_PeriphCLKConfig>
  23354. 80091f4: 4603 mov r3, r0
  23355. 80091f6: 2b00 cmp r3, #0
  23356. 80091f8: d001 beq.n 80091fe <HAL_PCD_MspInit+0x52>
  23357. {
  23358. Error_Handler();
  23359. 80091fa: f7f7 ff5d bl 80010b8 <Error_Handler>
  23360. }
  23361. /** Enable USB Voltage detector
  23362. */
  23363. HAL_PWREx_EnableUSBVoltageDetector();
  23364. 80091fe: f7f9 fef3 bl 8002fe8 <HAL_PWREx_EnableUSBVoltageDetector>
  23365. __HAL_RCC_GPIOA_CLK_ENABLE();
  23366. 8009202: 4b21 ldr r3, [pc, #132] ; (8009288 <HAL_PCD_MspInit+0xdc>)
  23367. 8009204: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  23368. 8009208: 4a1f ldr r2, [pc, #124] ; (8009288 <HAL_PCD_MspInit+0xdc>)
  23369. 800920a: f043 0301 orr.w r3, r3, #1
  23370. 800920e: f8c2 30e0 str.w r3, [r2, #224] ; 0xe0
  23371. 8009212: 4b1d ldr r3, [pc, #116] ; (8009288 <HAL_PCD_MspInit+0xdc>)
  23372. 8009214: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0
  23373. 8009218: f003 0301 and.w r3, r3, #1
  23374. 800921c: 60fb str r3, [r7, #12]
  23375. 800921e: 68fb ldr r3, [r7, #12]
  23376. /**USB_OTG_HS GPIO Configuration
  23377. PA10 ------> USB_OTG_HS_ID
  23378. */
  23379. GPIO_InitStruct.Pin = USB_FS_ID_Pin;
  23380. 8009220: f44f 6380 mov.w r3, #1024 ; 0x400
  23381. 8009224: f8c7 30c4 str.w r3, [r7, #196] ; 0xc4
  23382. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  23383. 8009228: 2302 movs r3, #2
  23384. 800922a: f8c7 30c8 str.w r3, [r7, #200] ; 0xc8
  23385. GPIO_InitStruct.Pull = GPIO_NOPULL;
  23386. 800922e: 2300 movs r3, #0
  23387. 8009230: f8c7 30cc str.w r3, [r7, #204] ; 0xcc
  23388. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  23389. 8009234: 2300 movs r3, #0
  23390. 8009236: f8c7 30d0 str.w r3, [r7, #208] ; 0xd0
  23391. GPIO_InitStruct.Alternate = GPIO_AF10_OTG1_HS;
  23392. 800923a: 230a movs r3, #10
  23393. 800923c: f8c7 30d4 str.w r3, [r7, #212] ; 0xd4
  23394. HAL_GPIO_Init(USB_FS_ID_GPIO_Port, &GPIO_InitStruct);
  23395. 8009240: f107 03c4 add.w r3, r7, #196 ; 0xc4
  23396. 8009244: 4619 mov r1, r3
  23397. 8009246: 4811 ldr r0, [pc, #68] ; (800928c <HAL_PCD_MspInit+0xe0>)
  23398. 8009248: f7f8 faea bl 8001820 <HAL_GPIO_Init>
  23399. /* Peripheral clock enable */
  23400. __HAL_RCC_USB_OTG_HS_CLK_ENABLE();
  23401. 800924c: 4b0e ldr r3, [pc, #56] ; (8009288 <HAL_PCD_MspInit+0xdc>)
  23402. 800924e: f8d3 30d8 ldr.w r3, [r3, #216] ; 0xd8
  23403. 8009252: 4a0d ldr r2, [pc, #52] ; (8009288 <HAL_PCD_MspInit+0xdc>)
  23404. 8009254: f043 7300 orr.w r3, r3, #33554432 ; 0x2000000
  23405. 8009258: f8c2 30d8 str.w r3, [r2, #216] ; 0xd8
  23406. 800925c: 4b0a ldr r3, [pc, #40] ; (8009288 <HAL_PCD_MspInit+0xdc>)
  23407. 800925e: f8d3 30d8 ldr.w r3, [r3, #216] ; 0xd8
  23408. 8009262: f003 7300 and.w r3, r3, #33554432 ; 0x2000000
  23409. 8009266: 60bb str r3, [r7, #8]
  23410. 8009268: 68bb ldr r3, [r7, #8]
  23411. /* Peripheral interrupt init */
  23412. HAL_NVIC_SetPriority(OTG_HS_IRQn, 0, 0);
  23413. 800926a: 2200 movs r2, #0
  23414. 800926c: 2100 movs r1, #0
  23415. 800926e: 204d movs r0, #77 ; 0x4d
  23416. 8009270: f7f8 faa1 bl 80017b6 <HAL_NVIC_SetPriority>
  23417. HAL_NVIC_EnableIRQ(OTG_HS_IRQn);
  23418. 8009274: 204d movs r0, #77 ; 0x4d
  23419. 8009276: f7f8 fab8 bl 80017ea <HAL_NVIC_EnableIRQ>
  23420. /* USER CODE BEGIN USB_OTG_HS_MspInit 1 */
  23421. /* USER CODE END USB_OTG_HS_MspInit 1 */
  23422. }
  23423. }
  23424. 800927a: bf00 nop
  23425. 800927c: 37d8 adds r7, #216 ; 0xd8
  23426. 800927e: 46bd mov sp, r7
  23427. 8009280: bd80 pop {r7, pc}
  23428. 8009282: bf00 nop
  23429. 8009284: 40040000 .word 0x40040000
  23430. 8009288: 58024400 .word 0x58024400
  23431. 800928c: 58020000 .word 0x58020000
  23432. 08009290 <HAL_PCD_SetupStageCallback>:
  23433. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  23434. static void PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
  23435. #else
  23436. void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
  23437. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  23438. {
  23439. 8009290: b580 push {r7, lr}
  23440. 8009292: b082 sub sp, #8
  23441. 8009294: af00 add r7, sp, #0
  23442. 8009296: 6078 str r0, [r7, #4]
  23443. USBD_LL_SetupStage((USBD_HandleTypeDef*)hpcd->pData, (uint8_t *)hpcd->Setup);
  23444. 8009298: 687b ldr r3, [r7, #4]
  23445. 800929a: f8d3 2404 ldr.w r2, [r3, #1028] ; 0x404
  23446. 800929e: 687b ldr r3, [r7, #4]
  23447. 80092a0: f503 7371 add.w r3, r3, #964 ; 0x3c4
  23448. 80092a4: 4619 mov r1, r3
  23449. 80092a6: 4610 mov r0, r2
  23450. 80092a8: f7fe fcb0 bl 8007c0c <USBD_LL_SetupStage>
  23451. }
  23452. 80092ac: bf00 nop
  23453. 80092ae: 3708 adds r7, #8
  23454. 80092b0: 46bd mov sp, r7
  23455. 80092b2: bd80 pop {r7, pc}
  23456. 080092b4 <HAL_PCD_DataOutStageCallback>:
  23457. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  23458. static void PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
  23459. #else
  23460. void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
  23461. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  23462. {
  23463. 80092b4: b580 push {r7, lr}
  23464. 80092b6: b082 sub sp, #8
  23465. 80092b8: af00 add r7, sp, #0
  23466. 80092ba: 6078 str r0, [r7, #4]
  23467. 80092bc: 460b mov r3, r1
  23468. 80092be: 70fb strb r3, [r7, #3]
  23469. USBD_LL_DataOutStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff);
  23470. 80092c0: 687b ldr r3, [r7, #4]
  23471. 80092c2: f8d3 0404 ldr.w r0, [r3, #1028] ; 0x404
  23472. 80092c6: 78fa ldrb r2, [r7, #3]
  23473. 80092c8: 6879 ldr r1, [r7, #4]
  23474. 80092ca: 4613 mov r3, r2
  23475. 80092cc: 00db lsls r3, r3, #3
  23476. 80092ce: 1a9b subs r3, r3, r2
  23477. 80092d0: 009b lsls r3, r3, #2
  23478. 80092d2: 440b add r3, r1
  23479. 80092d4: f503 7302 add.w r3, r3, #520 ; 0x208
  23480. 80092d8: 681a ldr r2, [r3, #0]
  23481. 80092da: 78fb ldrb r3, [r7, #3]
  23482. 80092dc: 4619 mov r1, r3
  23483. 80092de: f7fe fcea bl 8007cb6 <USBD_LL_DataOutStage>
  23484. }
  23485. 80092e2: bf00 nop
  23486. 80092e4: 3708 adds r7, #8
  23487. 80092e6: 46bd mov sp, r7
  23488. 80092e8: bd80 pop {r7, pc}
  23489. 080092ea <HAL_PCD_DataInStageCallback>:
  23490. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  23491. static void PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
  23492. #else
  23493. void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
  23494. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  23495. {
  23496. 80092ea: b580 push {r7, lr}
  23497. 80092ec: b082 sub sp, #8
  23498. 80092ee: af00 add r7, sp, #0
  23499. 80092f0: 6078 str r0, [r7, #4]
  23500. 80092f2: 460b mov r3, r1
  23501. 80092f4: 70fb strb r3, [r7, #3]
  23502. USBD_LL_DataInStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff);
  23503. 80092f6: 687b ldr r3, [r7, #4]
  23504. 80092f8: f8d3 0404 ldr.w r0, [r3, #1028] ; 0x404
  23505. 80092fc: 78fa ldrb r2, [r7, #3]
  23506. 80092fe: 6879 ldr r1, [r7, #4]
  23507. 8009300: 4613 mov r3, r2
  23508. 8009302: 00db lsls r3, r3, #3
  23509. 8009304: 1a9b subs r3, r3, r2
  23510. 8009306: 009b lsls r3, r3, #2
  23511. 8009308: 440b add r3, r1
  23512. 800930a: 3348 adds r3, #72 ; 0x48
  23513. 800930c: 681a ldr r2, [r3, #0]
  23514. 800930e: 78fb ldrb r3, [r7, #3]
  23515. 8009310: 4619 mov r1, r3
  23516. 8009312: f7fe fd33 bl 8007d7c <USBD_LL_DataInStage>
  23517. }
  23518. 8009316: bf00 nop
  23519. 8009318: 3708 adds r7, #8
  23520. 800931a: 46bd mov sp, r7
  23521. 800931c: bd80 pop {r7, pc}
  23522. 0800931e <HAL_PCD_SOFCallback>:
  23523. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  23524. static void PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
  23525. #else
  23526. void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
  23527. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  23528. {
  23529. 800931e: b580 push {r7, lr}
  23530. 8009320: b082 sub sp, #8
  23531. 8009322: af00 add r7, sp, #0
  23532. 8009324: 6078 str r0, [r7, #4]
  23533. USBD_LL_SOF((USBD_HandleTypeDef*)hpcd->pData);
  23534. 8009326: 687b ldr r3, [r7, #4]
  23535. 8009328: f8d3 3404 ldr.w r3, [r3, #1028] ; 0x404
  23536. 800932c: 4618 mov r0, r3
  23537. 800932e: f7fe fe47 bl 8007fc0 <USBD_LL_SOF>
  23538. }
  23539. 8009332: bf00 nop
  23540. 8009334: 3708 adds r7, #8
  23541. 8009336: 46bd mov sp, r7
  23542. 8009338: bd80 pop {r7, pc}
  23543. 0800933a <HAL_PCD_ResetCallback>:
  23544. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  23545. static void PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
  23546. #else
  23547. void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
  23548. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  23549. {
  23550. 800933a: b580 push {r7, lr}
  23551. 800933c: b084 sub sp, #16
  23552. 800933e: af00 add r7, sp, #0
  23553. 8009340: 6078 str r0, [r7, #4]
  23554. USBD_SpeedTypeDef speed = USBD_SPEED_FULL;
  23555. 8009342: 2301 movs r3, #1
  23556. 8009344: 73fb strb r3, [r7, #15]
  23557. if ( hpcd->Init.speed == PCD_SPEED_HIGH)
  23558. 8009346: 687b ldr r3, [r7, #4]
  23559. 8009348: 68db ldr r3, [r3, #12]
  23560. 800934a: 2b00 cmp r3, #0
  23561. 800934c: d102 bne.n 8009354 <HAL_PCD_ResetCallback+0x1a>
  23562. {
  23563. speed = USBD_SPEED_HIGH;
  23564. 800934e: 2300 movs r3, #0
  23565. 8009350: 73fb strb r3, [r7, #15]
  23566. 8009352: e008 b.n 8009366 <HAL_PCD_ResetCallback+0x2c>
  23567. }
  23568. else if ( hpcd->Init.speed == PCD_SPEED_FULL)
  23569. 8009354: 687b ldr r3, [r7, #4]
  23570. 8009356: 68db ldr r3, [r3, #12]
  23571. 8009358: 2b02 cmp r3, #2
  23572. 800935a: d102 bne.n 8009362 <HAL_PCD_ResetCallback+0x28>
  23573. {
  23574. speed = USBD_SPEED_FULL;
  23575. 800935c: 2301 movs r3, #1
  23576. 800935e: 73fb strb r3, [r7, #15]
  23577. 8009360: e001 b.n 8009366 <HAL_PCD_ResetCallback+0x2c>
  23578. }
  23579. else
  23580. {
  23581. Error_Handler();
  23582. 8009362: f7f7 fea9 bl 80010b8 <Error_Handler>
  23583. }
  23584. /* Set Speed. */
  23585. USBD_LL_SetSpeed((USBD_HandleTypeDef*)hpcd->pData, speed);
  23586. 8009366: 687b ldr r3, [r7, #4]
  23587. 8009368: f8d3 3404 ldr.w r3, [r3, #1028] ; 0x404
  23588. 800936c: 7bfa ldrb r2, [r7, #15]
  23589. 800936e: 4611 mov r1, r2
  23590. 8009370: 4618 mov r0, r3
  23591. 8009372: f7fe fde7 bl 8007f44 <USBD_LL_SetSpeed>
  23592. /* Reset Device. */
  23593. USBD_LL_Reset((USBD_HandleTypeDef*)hpcd->pData);
  23594. 8009376: 687b ldr r3, [r7, #4]
  23595. 8009378: f8d3 3404 ldr.w r3, [r3, #1028] ; 0x404
  23596. 800937c: 4618 mov r0, r3
  23597. 800937e: f7fe fd93 bl 8007ea8 <USBD_LL_Reset>
  23598. }
  23599. 8009382: bf00 nop
  23600. 8009384: 3710 adds r7, #16
  23601. 8009386: 46bd mov sp, r7
  23602. 8009388: bd80 pop {r7, pc}
  23603. ...
  23604. 0800938c <HAL_PCD_SuspendCallback>:
  23605. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  23606. static void PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
  23607. #else
  23608. void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
  23609. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  23610. {
  23611. 800938c: b580 push {r7, lr}
  23612. 800938e: b082 sub sp, #8
  23613. 8009390: af00 add r7, sp, #0
  23614. 8009392: 6078 str r0, [r7, #4]
  23615. /* Inform USB library that core enters in suspend Mode. */
  23616. USBD_LL_Suspend((USBD_HandleTypeDef*)hpcd->pData);
  23617. 8009394: 687b ldr r3, [r7, #4]
  23618. 8009396: f8d3 3404 ldr.w r3, [r3, #1028] ; 0x404
  23619. 800939a: 4618 mov r0, r3
  23620. 800939c: f7fe fde2 bl 8007f64 <USBD_LL_Suspend>
  23621. __HAL_PCD_GATE_PHYCLOCK(hpcd);
  23622. 80093a0: 687b ldr r3, [r7, #4]
  23623. 80093a2: 681b ldr r3, [r3, #0]
  23624. 80093a4: f503 6360 add.w r3, r3, #3584 ; 0xe00
  23625. 80093a8: 681b ldr r3, [r3, #0]
  23626. 80093aa: 687a ldr r2, [r7, #4]
  23627. 80093ac: 6812 ldr r2, [r2, #0]
  23628. 80093ae: f502 6260 add.w r2, r2, #3584 ; 0xe00
  23629. 80093b2: f043 0301 orr.w r3, r3, #1
  23630. 80093b6: 6013 str r3, [r2, #0]
  23631. /* Enter in STOP mode. */
  23632. /* USER CODE BEGIN 2 */
  23633. if (hpcd->Init.low_power_enable)
  23634. 80093b8: 687b ldr r3, [r7, #4]
  23635. 80093ba: 6a1b ldr r3, [r3, #32]
  23636. 80093bc: 2b00 cmp r3, #0
  23637. 80093be: d005 beq.n 80093cc <HAL_PCD_SuspendCallback+0x40>
  23638. {
  23639. /* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register. */
  23640. SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
  23641. 80093c0: 4b04 ldr r3, [pc, #16] ; (80093d4 <HAL_PCD_SuspendCallback+0x48>)
  23642. 80093c2: 691b ldr r3, [r3, #16]
  23643. 80093c4: 4a03 ldr r2, [pc, #12] ; (80093d4 <HAL_PCD_SuspendCallback+0x48>)
  23644. 80093c6: f043 0306 orr.w r3, r3, #6
  23645. 80093ca: 6113 str r3, [r2, #16]
  23646. }
  23647. /* USER CODE END 2 */
  23648. }
  23649. 80093cc: bf00 nop
  23650. 80093ce: 3708 adds r7, #8
  23651. 80093d0: 46bd mov sp, r7
  23652. 80093d2: bd80 pop {r7, pc}
  23653. 80093d4: e000ed00 .word 0xe000ed00
  23654. 080093d8 <HAL_PCD_ResumeCallback>:
  23655. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  23656. static void PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
  23657. #else
  23658. void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
  23659. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  23660. {
  23661. 80093d8: b580 push {r7, lr}
  23662. 80093da: b082 sub sp, #8
  23663. 80093dc: af00 add r7, sp, #0
  23664. 80093de: 6078 str r0, [r7, #4]
  23665. /* USER CODE BEGIN 3 */
  23666. /* USER CODE END 3 */
  23667. USBD_LL_Resume((USBD_HandleTypeDef*)hpcd->pData);
  23668. 80093e0: 687b ldr r3, [r7, #4]
  23669. 80093e2: f8d3 3404 ldr.w r3, [r3, #1028] ; 0x404
  23670. 80093e6: 4618 mov r0, r3
  23671. 80093e8: f7fe fdd2 bl 8007f90 <USBD_LL_Resume>
  23672. }
  23673. 80093ec: bf00 nop
  23674. 80093ee: 3708 adds r7, #8
  23675. 80093f0: 46bd mov sp, r7
  23676. 80093f2: bd80 pop {r7, pc}
  23677. 080093f4 <HAL_PCD_ISOOUTIncompleteCallback>:
  23678. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  23679. static void PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
  23680. #else
  23681. void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
  23682. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  23683. {
  23684. 80093f4: b580 push {r7, lr}
  23685. 80093f6: b082 sub sp, #8
  23686. 80093f8: af00 add r7, sp, #0
  23687. 80093fa: 6078 str r0, [r7, #4]
  23688. 80093fc: 460b mov r3, r1
  23689. 80093fe: 70fb strb r3, [r7, #3]
  23690. USBD_LL_IsoOUTIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum);
  23691. 8009400: 687b ldr r3, [r7, #4]
  23692. 8009402: f8d3 3404 ldr.w r3, [r3, #1028] ; 0x404
  23693. 8009406: 78fa ldrb r2, [r7, #3]
  23694. 8009408: 4611 mov r1, r2
  23695. 800940a: 4618 mov r0, r3
  23696. 800940c: f7fe fe20 bl 8008050 <USBD_LL_IsoOUTIncomplete>
  23697. }
  23698. 8009410: bf00 nop
  23699. 8009412: 3708 adds r7, #8
  23700. 8009414: 46bd mov sp, r7
  23701. 8009416: bd80 pop {r7, pc}
  23702. 08009418 <HAL_PCD_ISOINIncompleteCallback>:
  23703. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  23704. static void PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
  23705. #else
  23706. void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
  23707. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  23708. {
  23709. 8009418: b580 push {r7, lr}
  23710. 800941a: b082 sub sp, #8
  23711. 800941c: af00 add r7, sp, #0
  23712. 800941e: 6078 str r0, [r7, #4]
  23713. 8009420: 460b mov r3, r1
  23714. 8009422: 70fb strb r3, [r7, #3]
  23715. USBD_LL_IsoINIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum);
  23716. 8009424: 687b ldr r3, [r7, #4]
  23717. 8009426: f8d3 3404 ldr.w r3, [r3, #1028] ; 0x404
  23718. 800942a: 78fa ldrb r2, [r7, #3]
  23719. 800942c: 4611 mov r1, r2
  23720. 800942e: 4618 mov r0, r3
  23721. 8009430: f7fe fde8 bl 8008004 <USBD_LL_IsoINIncomplete>
  23722. }
  23723. 8009434: bf00 nop
  23724. 8009436: 3708 adds r7, #8
  23725. 8009438: 46bd mov sp, r7
  23726. 800943a: bd80 pop {r7, pc}
  23727. 0800943c <HAL_PCD_ConnectCallback>:
  23728. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  23729. static void PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
  23730. #else
  23731. void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
  23732. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  23733. {
  23734. 800943c: b580 push {r7, lr}
  23735. 800943e: b082 sub sp, #8
  23736. 8009440: af00 add r7, sp, #0
  23737. 8009442: 6078 str r0, [r7, #4]
  23738. USBD_LL_DevConnected((USBD_HandleTypeDef*)hpcd->pData);
  23739. 8009444: 687b ldr r3, [r7, #4]
  23740. 8009446: f8d3 3404 ldr.w r3, [r3, #1028] ; 0x404
  23741. 800944a: 4618 mov r0, r3
  23742. 800944c: f7fe fe26 bl 800809c <USBD_LL_DevConnected>
  23743. }
  23744. 8009450: bf00 nop
  23745. 8009452: 3708 adds r7, #8
  23746. 8009454: 46bd mov sp, r7
  23747. 8009456: bd80 pop {r7, pc}
  23748. 08009458 <HAL_PCD_DisconnectCallback>:
  23749. #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
  23750. static void PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
  23751. #else
  23752. void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
  23753. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  23754. {
  23755. 8009458: b580 push {r7, lr}
  23756. 800945a: b082 sub sp, #8
  23757. 800945c: af00 add r7, sp, #0
  23758. 800945e: 6078 str r0, [r7, #4]
  23759. USBD_LL_DevDisconnected((USBD_HandleTypeDef*)hpcd->pData);
  23760. 8009460: 687b ldr r3, [r7, #4]
  23761. 8009462: f8d3 3404 ldr.w r3, [r3, #1028] ; 0x404
  23762. 8009466: 4618 mov r0, r3
  23763. 8009468: f7fe fe23 bl 80080b2 <USBD_LL_DevDisconnected>
  23764. }
  23765. 800946c: bf00 nop
  23766. 800946e: 3708 adds r7, #8
  23767. 8009470: 46bd mov sp, r7
  23768. 8009472: bd80 pop {r7, pc}
  23769. 08009474 <USBD_LL_Init>:
  23770. * @brief Initializes the low level portion of the device driver.
  23771. * @param pdev: Device handle
  23772. * @retval USBD status
  23773. */
  23774. USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev)
  23775. {
  23776. 8009474: b580 push {r7, lr}
  23777. 8009476: b082 sub sp, #8
  23778. 8009478: af00 add r7, sp, #0
  23779. 800947a: 6078 str r0, [r7, #4]
  23780. /* Init USB Ip. */
  23781. if (pdev->id == DEVICE_HS) {
  23782. 800947c: 687b ldr r3, [r7, #4]
  23783. 800947e: 781b ldrb r3, [r3, #0]
  23784. 8009480: 2b01 cmp r3, #1
  23785. 8009482: d143 bne.n 800950c <USBD_LL_Init+0x98>
  23786. /* Link the driver to the stack. */
  23787. hpcd_USB_OTG_HS.pData = pdev;
  23788. 8009484: 4a24 ldr r2, [pc, #144] ; (8009518 <USBD_LL_Init+0xa4>)
  23789. 8009486: 687b ldr r3, [r7, #4]
  23790. 8009488: f8c2 3404 str.w r3, [r2, #1028] ; 0x404
  23791. pdev->pData = &hpcd_USB_OTG_HS;
  23792. 800948c: 687b ldr r3, [r7, #4]
  23793. 800948e: 4a22 ldr r2, [pc, #136] ; (8009518 <USBD_LL_Init+0xa4>)
  23794. 8009490: f8c3 22c4 str.w r2, [r3, #708] ; 0x2c4
  23795. hpcd_USB_OTG_HS.Instance = USB_OTG_HS;
  23796. 8009494: 4b20 ldr r3, [pc, #128] ; (8009518 <USBD_LL_Init+0xa4>)
  23797. 8009496: 4a21 ldr r2, [pc, #132] ; (800951c <USBD_LL_Init+0xa8>)
  23798. 8009498: 601a str r2, [r3, #0]
  23799. hpcd_USB_OTG_HS.Init.dev_endpoints = 9;
  23800. 800949a: 4b1f ldr r3, [pc, #124] ; (8009518 <USBD_LL_Init+0xa4>)
  23801. 800949c: 2209 movs r2, #9
  23802. 800949e: 605a str r2, [r3, #4]
  23803. hpcd_USB_OTG_HS.Init.speed = PCD_SPEED_FULL;
  23804. 80094a0: 4b1d ldr r3, [pc, #116] ; (8009518 <USBD_LL_Init+0xa4>)
  23805. 80094a2: 2202 movs r2, #2
  23806. 80094a4: 60da str r2, [r3, #12]
  23807. hpcd_USB_OTG_HS.Init.dma_enable = DISABLE;
  23808. 80094a6: 4b1c ldr r3, [pc, #112] ; (8009518 <USBD_LL_Init+0xa4>)
  23809. 80094a8: 2200 movs r2, #0
  23810. 80094aa: 611a str r2, [r3, #16]
  23811. hpcd_USB_OTG_HS.Init.phy_itface = USB_OTG_EMBEDDED_PHY;
  23812. 80094ac: 4b1a ldr r3, [pc, #104] ; (8009518 <USBD_LL_Init+0xa4>)
  23813. 80094ae: 2202 movs r2, #2
  23814. 80094b0: 619a str r2, [r3, #24]
  23815. hpcd_USB_OTG_HS.Init.Sof_enable = DISABLE;
  23816. 80094b2: 4b19 ldr r3, [pc, #100] ; (8009518 <USBD_LL_Init+0xa4>)
  23817. 80094b4: 2200 movs r2, #0
  23818. 80094b6: 61da str r2, [r3, #28]
  23819. hpcd_USB_OTG_HS.Init.low_power_enable = DISABLE;
  23820. 80094b8: 4b17 ldr r3, [pc, #92] ; (8009518 <USBD_LL_Init+0xa4>)
  23821. 80094ba: 2200 movs r2, #0
  23822. 80094bc: 621a str r2, [r3, #32]
  23823. hpcd_USB_OTG_HS.Init.lpm_enable = DISABLE;
  23824. 80094be: 4b16 ldr r3, [pc, #88] ; (8009518 <USBD_LL_Init+0xa4>)
  23825. 80094c0: 2200 movs r2, #0
  23826. 80094c2: 625a str r2, [r3, #36] ; 0x24
  23827. hpcd_USB_OTG_HS.Init.battery_charging_enable = ENABLE;
  23828. 80094c4: 4b14 ldr r3, [pc, #80] ; (8009518 <USBD_LL_Init+0xa4>)
  23829. 80094c6: 2201 movs r2, #1
  23830. 80094c8: 629a str r2, [r3, #40] ; 0x28
  23831. hpcd_USB_OTG_HS.Init.vbus_sensing_enable = DISABLE;
  23832. 80094ca: 4b13 ldr r3, [pc, #76] ; (8009518 <USBD_LL_Init+0xa4>)
  23833. 80094cc: 2200 movs r2, #0
  23834. 80094ce: 62da str r2, [r3, #44] ; 0x2c
  23835. hpcd_USB_OTG_HS.Init.use_dedicated_ep1 = DISABLE;
  23836. 80094d0: 4b11 ldr r3, [pc, #68] ; (8009518 <USBD_LL_Init+0xa4>)
  23837. 80094d2: 2200 movs r2, #0
  23838. 80094d4: 631a str r2, [r3, #48] ; 0x30
  23839. hpcd_USB_OTG_HS.Init.use_external_vbus = DISABLE;
  23840. 80094d6: 4b10 ldr r3, [pc, #64] ; (8009518 <USBD_LL_Init+0xa4>)
  23841. 80094d8: 2200 movs r2, #0
  23842. 80094da: 635a str r2, [r3, #52] ; 0x34
  23843. if (HAL_PCD_Init(&hpcd_USB_OTG_HS) != HAL_OK)
  23844. 80094dc: 480e ldr r0, [pc, #56] ; (8009518 <USBD_LL_Init+0xa4>)
  23845. 80094de: f7f8 fb7a bl 8001bd6 <HAL_PCD_Init>
  23846. 80094e2: 4603 mov r3, r0
  23847. 80094e4: 2b00 cmp r3, #0
  23848. 80094e6: d001 beq.n 80094ec <USBD_LL_Init+0x78>
  23849. {
  23850. Error_Handler( );
  23851. 80094e8: f7f7 fde6 bl 80010b8 <Error_Handler>
  23852. HAL_PCD_RegisterDataInStageCallback(&hpcd_USB_OTG_HS, PCD_DataInStageCallback);
  23853. HAL_PCD_RegisterIsoOutIncpltCallback(&hpcd_USB_OTG_HS, PCD_ISOOUTIncompleteCallback);
  23854. HAL_PCD_RegisterIsoInIncpltCallback(&hpcd_USB_OTG_HS, PCD_ISOINIncompleteCallback);
  23855. #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
  23856. /* USER CODE BEGIN TxRx_Configuration */
  23857. HAL_PCDEx_SetRxFiFo(&hpcd_USB_OTG_HS, 0x200);
  23858. 80094ec: f44f 7100 mov.w r1, #512 ; 0x200
  23859. 80094f0: 4809 ldr r0, [pc, #36] ; (8009518 <USBD_LL_Init+0xa4>)
  23860. 80094f2: f7f9 fcfe bl 8002ef2 <HAL_PCDEx_SetRxFiFo>
  23861. HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_HS, 0, 0x80);
  23862. 80094f6: 2280 movs r2, #128 ; 0x80
  23863. 80094f8: 2100 movs r1, #0
  23864. 80094fa: 4807 ldr r0, [pc, #28] ; (8009518 <USBD_LL_Init+0xa4>)
  23865. 80094fc: f7f9 fcb2 bl 8002e64 <HAL_PCDEx_SetTxFiFo>
  23866. HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_HS, 1, 0x174);
  23867. 8009500: f44f 72ba mov.w r2, #372 ; 0x174
  23868. 8009504: 2101 movs r1, #1
  23869. 8009506: 4804 ldr r0, [pc, #16] ; (8009518 <USBD_LL_Init+0xa4>)
  23870. 8009508: f7f9 fcac bl 8002e64 <HAL_PCDEx_SetTxFiFo>
  23871. /* USER CODE END TxRx_Configuration */
  23872. }
  23873. return USBD_OK;
  23874. 800950c: 2300 movs r3, #0
  23875. }
  23876. 800950e: 4618 mov r0, r3
  23877. 8009510: 3708 adds r7, #8
  23878. 8009512: 46bd mov sp, r7
  23879. 8009514: bd80 pop {r7, pc}
  23880. 8009516: bf00 nop
  23881. 8009518: 2400195c .word 0x2400195c
  23882. 800951c: 40040000 .word 0x40040000
  23883. 08009520 <USBD_LL_Start>:
  23884. * @brief Starts the low level portion of the device driver.
  23885. * @param pdev: Device handle
  23886. * @retval USBD status
  23887. */
  23888. USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev)
  23889. {
  23890. 8009520: b580 push {r7, lr}
  23891. 8009522: b084 sub sp, #16
  23892. 8009524: af00 add r7, sp, #0
  23893. 8009526: 6078 str r0, [r7, #4]
  23894. HAL_StatusTypeDef hal_status = HAL_OK;
  23895. 8009528: 2300 movs r3, #0
  23896. 800952a: 73fb strb r3, [r7, #15]
  23897. USBD_StatusTypeDef usb_status = USBD_OK;
  23898. 800952c: 2300 movs r3, #0
  23899. 800952e: 73bb strb r3, [r7, #14]
  23900. hal_status = HAL_PCD_Start(pdev->pData);
  23901. 8009530: 687b ldr r3, [r7, #4]
  23902. 8009532: f8d3 32c4 ldr.w r3, [r3, #708] ; 0x2c4
  23903. 8009536: 4618 mov r0, r3
  23904. 8009538: f7f8 fc71 bl 8001e1e <HAL_PCD_Start>
  23905. 800953c: 4603 mov r3, r0
  23906. 800953e: 73fb strb r3, [r7, #15]
  23907. usb_status = USBD_Get_USB_Status(hal_status);
  23908. 8009540: 7bfb ldrb r3, [r7, #15]
  23909. 8009542: 4618 mov r0, r3
  23910. 8009544: f000 f942 bl 80097cc <USBD_Get_USB_Status>
  23911. 8009548: 4603 mov r3, r0
  23912. 800954a: 73bb strb r3, [r7, #14]
  23913. return usb_status;
  23914. 800954c: 7bbb ldrb r3, [r7, #14]
  23915. }
  23916. 800954e: 4618 mov r0, r3
  23917. 8009550: 3710 adds r7, #16
  23918. 8009552: 46bd mov sp, r7
  23919. 8009554: bd80 pop {r7, pc}
  23920. 08009556 <USBD_LL_OpenEP>:
  23921. * @param ep_type: Endpoint type
  23922. * @param ep_mps: Endpoint max packet size
  23923. * @retval USBD status
  23924. */
  23925. USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_mps)
  23926. {
  23927. 8009556: b580 push {r7, lr}
  23928. 8009558: b084 sub sp, #16
  23929. 800955a: af00 add r7, sp, #0
  23930. 800955c: 6078 str r0, [r7, #4]
  23931. 800955e: 4608 mov r0, r1
  23932. 8009560: 4611 mov r1, r2
  23933. 8009562: 461a mov r2, r3
  23934. 8009564: 4603 mov r3, r0
  23935. 8009566: 70fb strb r3, [r7, #3]
  23936. 8009568: 460b mov r3, r1
  23937. 800956a: 70bb strb r3, [r7, #2]
  23938. 800956c: 4613 mov r3, r2
  23939. 800956e: 803b strh r3, [r7, #0]
  23940. HAL_StatusTypeDef hal_status = HAL_OK;
  23941. 8009570: 2300 movs r3, #0
  23942. 8009572: 73fb strb r3, [r7, #15]
  23943. USBD_StatusTypeDef usb_status = USBD_OK;
  23944. 8009574: 2300 movs r3, #0
  23945. 8009576: 73bb strb r3, [r7, #14]
  23946. hal_status = HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type);
  23947. 8009578: 687b ldr r3, [r7, #4]
  23948. 800957a: f8d3 02c4 ldr.w r0, [r3, #708] ; 0x2c4
  23949. 800957e: 78bb ldrb r3, [r7, #2]
  23950. 8009580: 883a ldrh r2, [r7, #0]
  23951. 8009582: 78f9 ldrb r1, [r7, #3]
  23952. 8009584: f7f9 f876 bl 8002674 <HAL_PCD_EP_Open>
  23953. 8009588: 4603 mov r3, r0
  23954. 800958a: 73fb strb r3, [r7, #15]
  23955. usb_status = USBD_Get_USB_Status(hal_status);
  23956. 800958c: 7bfb ldrb r3, [r7, #15]
  23957. 800958e: 4618 mov r0, r3
  23958. 8009590: f000 f91c bl 80097cc <USBD_Get_USB_Status>
  23959. 8009594: 4603 mov r3, r0
  23960. 8009596: 73bb strb r3, [r7, #14]
  23961. return usb_status;
  23962. 8009598: 7bbb ldrb r3, [r7, #14]
  23963. }
  23964. 800959a: 4618 mov r0, r3
  23965. 800959c: 3710 adds r7, #16
  23966. 800959e: 46bd mov sp, r7
  23967. 80095a0: bd80 pop {r7, pc}
  23968. 080095a2 <USBD_LL_CloseEP>:
  23969. * @param pdev: Device handle
  23970. * @param ep_addr: Endpoint number
  23971. * @retval USBD status
  23972. */
  23973. USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
  23974. {
  23975. 80095a2: b580 push {r7, lr}
  23976. 80095a4: b084 sub sp, #16
  23977. 80095a6: af00 add r7, sp, #0
  23978. 80095a8: 6078 str r0, [r7, #4]
  23979. 80095aa: 460b mov r3, r1
  23980. 80095ac: 70fb strb r3, [r7, #3]
  23981. HAL_StatusTypeDef hal_status = HAL_OK;
  23982. 80095ae: 2300 movs r3, #0
  23983. 80095b0: 73fb strb r3, [r7, #15]
  23984. USBD_StatusTypeDef usb_status = USBD_OK;
  23985. 80095b2: 2300 movs r3, #0
  23986. 80095b4: 73bb strb r3, [r7, #14]
  23987. hal_status = HAL_PCD_EP_Close(pdev->pData, ep_addr);
  23988. 80095b6: 687b ldr r3, [r7, #4]
  23989. 80095b8: f8d3 32c4 ldr.w r3, [r3, #708] ; 0x2c4
  23990. 80095bc: 78fa ldrb r2, [r7, #3]
  23991. 80095be: 4611 mov r1, r2
  23992. 80095c0: 4618 mov r0, r3
  23993. 80095c2: f7f9 f8bf bl 8002744 <HAL_PCD_EP_Close>
  23994. 80095c6: 4603 mov r3, r0
  23995. 80095c8: 73fb strb r3, [r7, #15]
  23996. usb_status = USBD_Get_USB_Status(hal_status);
  23997. 80095ca: 7bfb ldrb r3, [r7, #15]
  23998. 80095cc: 4618 mov r0, r3
  23999. 80095ce: f000 f8fd bl 80097cc <USBD_Get_USB_Status>
  24000. 80095d2: 4603 mov r3, r0
  24001. 80095d4: 73bb strb r3, [r7, #14]
  24002. return usb_status;
  24003. 80095d6: 7bbb ldrb r3, [r7, #14]
  24004. }
  24005. 80095d8: 4618 mov r0, r3
  24006. 80095da: 3710 adds r7, #16
  24007. 80095dc: 46bd mov sp, r7
  24008. 80095de: bd80 pop {r7, pc}
  24009. 080095e0 <USBD_LL_StallEP>:
  24010. * @param pdev: Device handle
  24011. * @param ep_addr: Endpoint number
  24012. * @retval USBD status
  24013. */
  24014. USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
  24015. {
  24016. 80095e0: b580 push {r7, lr}
  24017. 80095e2: b084 sub sp, #16
  24018. 80095e4: af00 add r7, sp, #0
  24019. 80095e6: 6078 str r0, [r7, #4]
  24020. 80095e8: 460b mov r3, r1
  24021. 80095ea: 70fb strb r3, [r7, #3]
  24022. HAL_StatusTypeDef hal_status = HAL_OK;
  24023. 80095ec: 2300 movs r3, #0
  24024. 80095ee: 73fb strb r3, [r7, #15]
  24025. USBD_StatusTypeDef usb_status = USBD_OK;
  24026. 80095f0: 2300 movs r3, #0
  24027. 80095f2: 73bb strb r3, [r7, #14]
  24028. hal_status = HAL_PCD_EP_SetStall(pdev->pData, ep_addr);
  24029. 80095f4: 687b ldr r3, [r7, #4]
  24030. 80095f6: f8d3 32c4 ldr.w r3, [r3, #708] ; 0x2c4
  24031. 80095fa: 78fa ldrb r2, [r7, #3]
  24032. 80095fc: 4611 mov r1, r2
  24033. 80095fe: 4618 mov r0, r3
  24034. 8009600: f7f9 f997 bl 8002932 <HAL_PCD_EP_SetStall>
  24035. 8009604: 4603 mov r3, r0
  24036. 8009606: 73fb strb r3, [r7, #15]
  24037. usb_status = USBD_Get_USB_Status(hal_status);
  24038. 8009608: 7bfb ldrb r3, [r7, #15]
  24039. 800960a: 4618 mov r0, r3
  24040. 800960c: f000 f8de bl 80097cc <USBD_Get_USB_Status>
  24041. 8009610: 4603 mov r3, r0
  24042. 8009612: 73bb strb r3, [r7, #14]
  24043. return usb_status;
  24044. 8009614: 7bbb ldrb r3, [r7, #14]
  24045. }
  24046. 8009616: 4618 mov r0, r3
  24047. 8009618: 3710 adds r7, #16
  24048. 800961a: 46bd mov sp, r7
  24049. 800961c: bd80 pop {r7, pc}
  24050. 0800961e <USBD_LL_ClearStallEP>:
  24051. * @param pdev: Device handle
  24052. * @param ep_addr: Endpoint number
  24053. * @retval USBD status
  24054. */
  24055. USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
  24056. {
  24057. 800961e: b580 push {r7, lr}
  24058. 8009620: b084 sub sp, #16
  24059. 8009622: af00 add r7, sp, #0
  24060. 8009624: 6078 str r0, [r7, #4]
  24061. 8009626: 460b mov r3, r1
  24062. 8009628: 70fb strb r3, [r7, #3]
  24063. HAL_StatusTypeDef hal_status = HAL_OK;
  24064. 800962a: 2300 movs r3, #0
  24065. 800962c: 73fb strb r3, [r7, #15]
  24066. USBD_StatusTypeDef usb_status = USBD_OK;
  24067. 800962e: 2300 movs r3, #0
  24068. 8009630: 73bb strb r3, [r7, #14]
  24069. hal_status = HAL_PCD_EP_ClrStall(pdev->pData, ep_addr);
  24070. 8009632: 687b ldr r3, [r7, #4]
  24071. 8009634: f8d3 32c4 ldr.w r3, [r3, #708] ; 0x2c4
  24072. 8009638: 78fa ldrb r2, [r7, #3]
  24073. 800963a: 4611 mov r1, r2
  24074. 800963c: 4618 mov r0, r3
  24075. 800963e: f7f9 f9dc bl 80029fa <HAL_PCD_EP_ClrStall>
  24076. 8009642: 4603 mov r3, r0
  24077. 8009644: 73fb strb r3, [r7, #15]
  24078. usb_status = USBD_Get_USB_Status(hal_status);
  24079. 8009646: 7bfb ldrb r3, [r7, #15]
  24080. 8009648: 4618 mov r0, r3
  24081. 800964a: f000 f8bf bl 80097cc <USBD_Get_USB_Status>
  24082. 800964e: 4603 mov r3, r0
  24083. 8009650: 73bb strb r3, [r7, #14]
  24084. return usb_status;
  24085. 8009652: 7bbb ldrb r3, [r7, #14]
  24086. }
  24087. 8009654: 4618 mov r0, r3
  24088. 8009656: 3710 adds r7, #16
  24089. 8009658: 46bd mov sp, r7
  24090. 800965a: bd80 pop {r7, pc}
  24091. 0800965c <USBD_LL_IsStallEP>:
  24092. * @param pdev: Device handle
  24093. * @param ep_addr: Endpoint number
  24094. * @retval Stall (1: Yes, 0: No)
  24095. */
  24096. uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
  24097. {
  24098. 800965c: b480 push {r7}
  24099. 800965e: b085 sub sp, #20
  24100. 8009660: af00 add r7, sp, #0
  24101. 8009662: 6078 str r0, [r7, #4]
  24102. 8009664: 460b mov r3, r1
  24103. 8009666: 70fb strb r3, [r7, #3]
  24104. PCD_HandleTypeDef *hpcd = (PCD_HandleTypeDef*) pdev->pData;
  24105. 8009668: 687b ldr r3, [r7, #4]
  24106. 800966a: f8d3 32c4 ldr.w r3, [r3, #708] ; 0x2c4
  24107. 800966e: 60fb str r3, [r7, #12]
  24108. if((ep_addr & 0x80) == 0x80)
  24109. 8009670: f997 3003 ldrsb.w r3, [r7, #3]
  24110. 8009674: 2b00 cmp r3, #0
  24111. 8009676: da0b bge.n 8009690 <USBD_LL_IsStallEP+0x34>
  24112. {
  24113. return hpcd->IN_ep[ep_addr & 0x7F].is_stall;
  24114. 8009678: 78fb ldrb r3, [r7, #3]
  24115. 800967a: f003 027f and.w r2, r3, #127 ; 0x7f
  24116. 800967e: 68f9 ldr r1, [r7, #12]
  24117. 8009680: 4613 mov r3, r2
  24118. 8009682: 00db lsls r3, r3, #3
  24119. 8009684: 1a9b subs r3, r3, r2
  24120. 8009686: 009b lsls r3, r3, #2
  24121. 8009688: 440b add r3, r1
  24122. 800968a: 333e adds r3, #62 ; 0x3e
  24123. 800968c: 781b ldrb r3, [r3, #0]
  24124. 800968e: e00b b.n 80096a8 <USBD_LL_IsStallEP+0x4c>
  24125. }
  24126. else
  24127. {
  24128. return hpcd->OUT_ep[ep_addr & 0x7F].is_stall;
  24129. 8009690: 78fb ldrb r3, [r7, #3]
  24130. 8009692: f003 027f and.w r2, r3, #127 ; 0x7f
  24131. 8009696: 68f9 ldr r1, [r7, #12]
  24132. 8009698: 4613 mov r3, r2
  24133. 800969a: 00db lsls r3, r3, #3
  24134. 800969c: 1a9b subs r3, r3, r2
  24135. 800969e: 009b lsls r3, r3, #2
  24136. 80096a0: 440b add r3, r1
  24137. 80096a2: f503 73ff add.w r3, r3, #510 ; 0x1fe
  24138. 80096a6: 781b ldrb r3, [r3, #0]
  24139. }
  24140. }
  24141. 80096a8: 4618 mov r0, r3
  24142. 80096aa: 3714 adds r7, #20
  24143. 80096ac: 46bd mov sp, r7
  24144. 80096ae: f85d 7b04 ldr.w r7, [sp], #4
  24145. 80096b2: 4770 bx lr
  24146. 080096b4 <USBD_LL_SetUSBAddress>:
  24147. * @param pdev: Device handle
  24148. * @param dev_addr: Device address
  24149. * @retval USBD status
  24150. */
  24151. USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr)
  24152. {
  24153. 80096b4: b580 push {r7, lr}
  24154. 80096b6: b084 sub sp, #16
  24155. 80096b8: af00 add r7, sp, #0
  24156. 80096ba: 6078 str r0, [r7, #4]
  24157. 80096bc: 460b mov r3, r1
  24158. 80096be: 70fb strb r3, [r7, #3]
  24159. HAL_StatusTypeDef hal_status = HAL_OK;
  24160. 80096c0: 2300 movs r3, #0
  24161. 80096c2: 73fb strb r3, [r7, #15]
  24162. USBD_StatusTypeDef usb_status = USBD_OK;
  24163. 80096c4: 2300 movs r3, #0
  24164. 80096c6: 73bb strb r3, [r7, #14]
  24165. hal_status = HAL_PCD_SetAddress(pdev->pData, dev_addr);
  24166. 80096c8: 687b ldr r3, [r7, #4]
  24167. 80096ca: f8d3 32c4 ldr.w r3, [r3, #708] ; 0x2c4
  24168. 80096ce: 78fa ldrb r2, [r7, #3]
  24169. 80096d0: 4611 mov r1, r2
  24170. 80096d2: 4618 mov r0, r3
  24171. 80096d4: f7f8 ffa9 bl 800262a <HAL_PCD_SetAddress>
  24172. 80096d8: 4603 mov r3, r0
  24173. 80096da: 73fb strb r3, [r7, #15]
  24174. usb_status = USBD_Get_USB_Status(hal_status);
  24175. 80096dc: 7bfb ldrb r3, [r7, #15]
  24176. 80096de: 4618 mov r0, r3
  24177. 80096e0: f000 f874 bl 80097cc <USBD_Get_USB_Status>
  24178. 80096e4: 4603 mov r3, r0
  24179. 80096e6: 73bb strb r3, [r7, #14]
  24180. return usb_status;
  24181. 80096e8: 7bbb ldrb r3, [r7, #14]
  24182. }
  24183. 80096ea: 4618 mov r0, r3
  24184. 80096ec: 3710 adds r7, #16
  24185. 80096ee: 46bd mov sp, r7
  24186. 80096f0: bd80 pop {r7, pc}
  24187. 080096f2 <USBD_LL_Transmit>:
  24188. * @param pbuf: Pointer to data to be sent
  24189. * @param size: Data size
  24190. * @retval USBD status
  24191. */
  24192. USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size)
  24193. {
  24194. 80096f2: b580 push {r7, lr}
  24195. 80096f4: b086 sub sp, #24
  24196. 80096f6: af00 add r7, sp, #0
  24197. 80096f8: 60f8 str r0, [r7, #12]
  24198. 80096fa: 607a str r2, [r7, #4]
  24199. 80096fc: 603b str r3, [r7, #0]
  24200. 80096fe: 460b mov r3, r1
  24201. 8009700: 72fb strb r3, [r7, #11]
  24202. HAL_StatusTypeDef hal_status = HAL_OK;
  24203. 8009702: 2300 movs r3, #0
  24204. 8009704: 75fb strb r3, [r7, #23]
  24205. USBD_StatusTypeDef usb_status = USBD_OK;
  24206. 8009706: 2300 movs r3, #0
  24207. 8009708: 75bb strb r3, [r7, #22]
  24208. hal_status = HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size);
  24209. 800970a: 68fb ldr r3, [r7, #12]
  24210. 800970c: f8d3 02c4 ldr.w r0, [r3, #708] ; 0x2c4
  24211. 8009710: 7af9 ldrb r1, [r7, #11]
  24212. 8009712: 683b ldr r3, [r7, #0]
  24213. 8009714: 687a ldr r2, [r7, #4]
  24214. 8009716: f7f9 f8c2 bl 800289e <HAL_PCD_EP_Transmit>
  24215. 800971a: 4603 mov r3, r0
  24216. 800971c: 75fb strb r3, [r7, #23]
  24217. usb_status = USBD_Get_USB_Status(hal_status);
  24218. 800971e: 7dfb ldrb r3, [r7, #23]
  24219. 8009720: 4618 mov r0, r3
  24220. 8009722: f000 f853 bl 80097cc <USBD_Get_USB_Status>
  24221. 8009726: 4603 mov r3, r0
  24222. 8009728: 75bb strb r3, [r7, #22]
  24223. return usb_status;
  24224. 800972a: 7dbb ldrb r3, [r7, #22]
  24225. }
  24226. 800972c: 4618 mov r0, r3
  24227. 800972e: 3718 adds r7, #24
  24228. 8009730: 46bd mov sp, r7
  24229. 8009732: bd80 pop {r7, pc}
  24230. 08009734 <USBD_LL_PrepareReceive>:
  24231. * @param pbuf: Pointer to data to be received
  24232. * @param size: Data size
  24233. * @retval USBD status
  24234. */
  24235. USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size)
  24236. {
  24237. 8009734: b580 push {r7, lr}
  24238. 8009736: b086 sub sp, #24
  24239. 8009738: af00 add r7, sp, #0
  24240. 800973a: 60f8 str r0, [r7, #12]
  24241. 800973c: 607a str r2, [r7, #4]
  24242. 800973e: 603b str r3, [r7, #0]
  24243. 8009740: 460b mov r3, r1
  24244. 8009742: 72fb strb r3, [r7, #11]
  24245. HAL_StatusTypeDef hal_status = HAL_OK;
  24246. 8009744: 2300 movs r3, #0
  24247. 8009746: 75fb strb r3, [r7, #23]
  24248. USBD_StatusTypeDef usb_status = USBD_OK;
  24249. 8009748: 2300 movs r3, #0
  24250. 800974a: 75bb strb r3, [r7, #22]
  24251. hal_status = HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size);
  24252. 800974c: 68fb ldr r3, [r7, #12]
  24253. 800974e: f8d3 02c4 ldr.w r0, [r3, #708] ; 0x2c4
  24254. 8009752: 7af9 ldrb r1, [r7, #11]
  24255. 8009754: 683b ldr r3, [r7, #0]
  24256. 8009756: 687a ldr r2, [r7, #4]
  24257. 8009758: f7f9 f83e bl 80027d8 <HAL_PCD_EP_Receive>
  24258. 800975c: 4603 mov r3, r0
  24259. 800975e: 75fb strb r3, [r7, #23]
  24260. usb_status = USBD_Get_USB_Status(hal_status);
  24261. 8009760: 7dfb ldrb r3, [r7, #23]
  24262. 8009762: 4618 mov r0, r3
  24263. 8009764: f000 f832 bl 80097cc <USBD_Get_USB_Status>
  24264. 8009768: 4603 mov r3, r0
  24265. 800976a: 75bb strb r3, [r7, #22]
  24266. return usb_status;
  24267. 800976c: 7dbb ldrb r3, [r7, #22]
  24268. }
  24269. 800976e: 4618 mov r0, r3
  24270. 8009770: 3718 adds r7, #24
  24271. 8009772: 46bd mov sp, r7
  24272. 8009774: bd80 pop {r7, pc}
  24273. 08009776 <USBD_LL_GetRxDataSize>:
  24274. * @param pdev: Device handle
  24275. * @param ep_addr: Endpoint number
  24276. * @retval Received Data Size
  24277. */
  24278. uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
  24279. {
  24280. 8009776: b580 push {r7, lr}
  24281. 8009778: b082 sub sp, #8
  24282. 800977a: af00 add r7, sp, #0
  24283. 800977c: 6078 str r0, [r7, #4]
  24284. 800977e: 460b mov r3, r1
  24285. 8009780: 70fb strb r3, [r7, #3]
  24286. return HAL_PCD_EP_GetRxCount((PCD_HandleTypeDef*) pdev->pData, ep_addr);
  24287. 8009782: 687b ldr r3, [r7, #4]
  24288. 8009784: f8d3 32c4 ldr.w r3, [r3, #708] ; 0x2c4
  24289. 8009788: 78fa ldrb r2, [r7, #3]
  24290. 800978a: 4611 mov r1, r2
  24291. 800978c: 4618 mov r0, r3
  24292. 800978e: f7f9 f86e bl 800286e <HAL_PCD_EP_GetRxCount>
  24293. 8009792: 4603 mov r3, r0
  24294. }
  24295. 8009794: 4618 mov r0, r3
  24296. 8009796: 3708 adds r7, #8
  24297. 8009798: 46bd mov sp, r7
  24298. 800979a: bd80 pop {r7, pc}
  24299. 0800979c <USBD_static_malloc>:
  24300. * @brief Static single allocation.
  24301. * @param size: Size of allocated memory
  24302. * @retval None
  24303. */
  24304. void *USBD_static_malloc(uint32_t size)
  24305. {
  24306. 800979c: b480 push {r7}
  24307. 800979e: b083 sub sp, #12
  24308. 80097a0: af00 add r7, sp, #0
  24309. 80097a2: 6078 str r0, [r7, #4]
  24310. static uint32_t mem[(sizeof(USBD_CDC_HandleTypeDef)/4)+1];/* On 32-bit boundary */
  24311. return mem;
  24312. 80097a4: 4b03 ldr r3, [pc, #12] ; (80097b4 <USBD_static_malloc+0x18>)
  24313. }
  24314. 80097a6: 4618 mov r0, r3
  24315. 80097a8: 370c adds r7, #12
  24316. 80097aa: 46bd mov sp, r7
  24317. 80097ac: f85d 7b04 ldr.w r7, [sp], #4
  24318. 80097b0: 4770 bx lr
  24319. 80097b2: bf00 nop
  24320. 80097b4: 24000214 .word 0x24000214
  24321. 080097b8 <USBD_static_free>:
  24322. * @brief Dummy memory free
  24323. * @param p: Pointer to allocated memory address
  24324. * @retval None
  24325. */
  24326. void USBD_static_free(void *p)
  24327. {
  24328. 80097b8: b480 push {r7}
  24329. 80097ba: b083 sub sp, #12
  24330. 80097bc: af00 add r7, sp, #0
  24331. 80097be: 6078 str r0, [r7, #4]
  24332. }
  24333. 80097c0: bf00 nop
  24334. 80097c2: 370c adds r7, #12
  24335. 80097c4: 46bd mov sp, r7
  24336. 80097c6: f85d 7b04 ldr.w r7, [sp], #4
  24337. 80097ca: 4770 bx lr
  24338. 080097cc <USBD_Get_USB_Status>:
  24339. * @brief Returns the USB status depending on the HAL status:
  24340. * @param hal_status: HAL status
  24341. * @retval USB status
  24342. */
  24343. USBD_StatusTypeDef USBD_Get_USB_Status(HAL_StatusTypeDef hal_status)
  24344. {
  24345. 80097cc: b480 push {r7}
  24346. 80097ce: b085 sub sp, #20
  24347. 80097d0: af00 add r7, sp, #0
  24348. 80097d2: 4603 mov r3, r0
  24349. 80097d4: 71fb strb r3, [r7, #7]
  24350. USBD_StatusTypeDef usb_status = USBD_OK;
  24351. 80097d6: 2300 movs r3, #0
  24352. 80097d8: 73fb strb r3, [r7, #15]
  24353. switch (hal_status)
  24354. 80097da: 79fb ldrb r3, [r7, #7]
  24355. 80097dc: 2b03 cmp r3, #3
  24356. 80097de: d817 bhi.n 8009810 <USBD_Get_USB_Status+0x44>
  24357. 80097e0: a201 add r2, pc, #4 ; (adr r2, 80097e8 <USBD_Get_USB_Status+0x1c>)
  24358. 80097e2: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  24359. 80097e6: bf00 nop
  24360. 80097e8: 080097f9 .word 0x080097f9
  24361. 80097ec: 080097ff .word 0x080097ff
  24362. 80097f0: 08009805 .word 0x08009805
  24363. 80097f4: 0800980b .word 0x0800980b
  24364. {
  24365. case HAL_OK :
  24366. usb_status = USBD_OK;
  24367. 80097f8: 2300 movs r3, #0
  24368. 80097fa: 73fb strb r3, [r7, #15]
  24369. break;
  24370. 80097fc: e00b b.n 8009816 <USBD_Get_USB_Status+0x4a>
  24371. case HAL_ERROR :
  24372. usb_status = USBD_FAIL;
  24373. 80097fe: 2303 movs r3, #3
  24374. 8009800: 73fb strb r3, [r7, #15]
  24375. break;
  24376. 8009802: e008 b.n 8009816 <USBD_Get_USB_Status+0x4a>
  24377. case HAL_BUSY :
  24378. usb_status = USBD_BUSY;
  24379. 8009804: 2301 movs r3, #1
  24380. 8009806: 73fb strb r3, [r7, #15]
  24381. break;
  24382. 8009808: e005 b.n 8009816 <USBD_Get_USB_Status+0x4a>
  24383. case HAL_TIMEOUT :
  24384. usb_status = USBD_FAIL;
  24385. 800980a: 2303 movs r3, #3
  24386. 800980c: 73fb strb r3, [r7, #15]
  24387. break;
  24388. 800980e: e002 b.n 8009816 <USBD_Get_USB_Status+0x4a>
  24389. default :
  24390. usb_status = USBD_FAIL;
  24391. 8009810: 2303 movs r3, #3
  24392. 8009812: 73fb strb r3, [r7, #15]
  24393. break;
  24394. 8009814: bf00 nop
  24395. }
  24396. return usb_status;
  24397. 8009816: 7bfb ldrb r3, [r7, #15]
  24398. }
  24399. 8009818: 4618 mov r0, r3
  24400. 800981a: 3714 adds r7, #20
  24401. 800981c: 46bd mov sp, r7
  24402. 800981e: f85d 7b04 ldr.w r7, [sp], #4
  24403. 8009822: 4770 bx lr
  24404. 08009824 <__assert_func>:
  24405. 8009824: b51f push {r0, r1, r2, r3, r4, lr}
  24406. 8009826: 4614 mov r4, r2
  24407. 8009828: 461a mov r2, r3
  24408. 800982a: 4b09 ldr r3, [pc, #36] ; (8009850 <__assert_func+0x2c>)
  24409. 800982c: 681b ldr r3, [r3, #0]
  24410. 800982e: 4605 mov r5, r0
  24411. 8009830: 68d8 ldr r0, [r3, #12]
  24412. 8009832: b14c cbz r4, 8009848 <__assert_func+0x24>
  24413. 8009834: 4b07 ldr r3, [pc, #28] ; (8009854 <__assert_func+0x30>)
  24414. 8009836: 9100 str r1, [sp, #0]
  24415. 8009838: e9cd 3401 strd r3, r4, [sp, #4]
  24416. 800983c: 4906 ldr r1, [pc, #24] ; (8009858 <__assert_func+0x34>)
  24417. 800983e: 462b mov r3, r5
  24418. 8009840: f000 f814 bl 800986c <fiprintf>
  24419. 8009844: f000 fbfe bl 800a044 <abort>
  24420. 8009848: 4b04 ldr r3, [pc, #16] ; (800985c <__assert_func+0x38>)
  24421. 800984a: 461c mov r4, r3
  24422. 800984c: e7f3 b.n 8009836 <__assert_func+0x12>
  24423. 800984e: bf00 nop
  24424. 8009850: 24000184 .word 0x24000184
  24425. 8009854: 0800a968 .word 0x0800a968
  24426. 8009858: 0800a975 .word 0x0800a975
  24427. 800985c: 0800a9a3 .word 0x0800a9a3
  24428. 08009860 <__errno>:
  24429. 8009860: 4b01 ldr r3, [pc, #4] ; (8009868 <__errno+0x8>)
  24430. 8009862: 6818 ldr r0, [r3, #0]
  24431. 8009864: 4770 bx lr
  24432. 8009866: bf00 nop
  24433. 8009868: 24000184 .word 0x24000184
  24434. 0800986c <fiprintf>:
  24435. 800986c: b40e push {r1, r2, r3}
  24436. 800986e: b503 push {r0, r1, lr}
  24437. 8009870: 4601 mov r1, r0
  24438. 8009872: ab03 add r3, sp, #12
  24439. 8009874: 4805 ldr r0, [pc, #20] ; (800988c <fiprintf+0x20>)
  24440. 8009876: f853 2b04 ldr.w r2, [r3], #4
  24441. 800987a: 6800 ldr r0, [r0, #0]
  24442. 800987c: 9301 str r3, [sp, #4]
  24443. 800987e: f000 f85d bl 800993c <_vfiprintf_r>
  24444. 8009882: b002 add sp, #8
  24445. 8009884: f85d eb04 ldr.w lr, [sp], #4
  24446. 8009888: b003 add sp, #12
  24447. 800988a: 4770 bx lr
  24448. 800988c: 24000184 .word 0x24000184
  24449. 08009890 <__libc_init_array>:
  24450. 8009890: b570 push {r4, r5, r6, lr}
  24451. 8009892: 4d0d ldr r5, [pc, #52] ; (80098c8 <__libc_init_array+0x38>)
  24452. 8009894: 4c0d ldr r4, [pc, #52] ; (80098cc <__libc_init_array+0x3c>)
  24453. 8009896: 1b64 subs r4, r4, r5
  24454. 8009898: 10a4 asrs r4, r4, #2
  24455. 800989a: 2600 movs r6, #0
  24456. 800989c: 42a6 cmp r6, r4
  24457. 800989e: d109 bne.n 80098b4 <__libc_init_array+0x24>
  24458. 80098a0: 4d0b ldr r5, [pc, #44] ; (80098d0 <__libc_init_array+0x40>)
  24459. 80098a2: 4c0c ldr r4, [pc, #48] ; (80098d4 <__libc_init_array+0x44>)
  24460. 80098a4: f000 ffaa bl 800a7fc <_init>
  24461. 80098a8: 1b64 subs r4, r4, r5
  24462. 80098aa: 10a4 asrs r4, r4, #2
  24463. 80098ac: 2600 movs r6, #0
  24464. 80098ae: 42a6 cmp r6, r4
  24465. 80098b0: d105 bne.n 80098be <__libc_init_array+0x2e>
  24466. 80098b2: bd70 pop {r4, r5, r6, pc}
  24467. 80098b4: f855 3b04 ldr.w r3, [r5], #4
  24468. 80098b8: 4798 blx r3
  24469. 80098ba: 3601 adds r6, #1
  24470. 80098bc: e7ee b.n 800989c <__libc_init_array+0xc>
  24471. 80098be: f855 3b04 ldr.w r3, [r5], #4
  24472. 80098c2: 4798 blx r3
  24473. 80098c4: 3601 adds r6, #1
  24474. 80098c6: e7f2 b.n 80098ae <__libc_init_array+0x1e>
  24475. 80098c8: 0800aa3c .word 0x0800aa3c
  24476. 80098cc: 0800aa3c .word 0x0800aa3c
  24477. 80098d0: 0800aa3c .word 0x0800aa3c
  24478. 80098d4: 0800aa40 .word 0x0800aa40
  24479. 080098d8 <memset>:
  24480. 80098d8: 4402 add r2, r0
  24481. 80098da: 4603 mov r3, r0
  24482. 80098dc: 4293 cmp r3, r2
  24483. 80098de: d100 bne.n 80098e2 <memset+0xa>
  24484. 80098e0: 4770 bx lr
  24485. 80098e2: f803 1b01 strb.w r1, [r3], #1
  24486. 80098e6: e7f9 b.n 80098dc <memset+0x4>
  24487. 080098e8 <__sfputc_r>:
  24488. 80098e8: 6893 ldr r3, [r2, #8]
  24489. 80098ea: 3b01 subs r3, #1
  24490. 80098ec: 2b00 cmp r3, #0
  24491. 80098ee: b410 push {r4}
  24492. 80098f0: 6093 str r3, [r2, #8]
  24493. 80098f2: da08 bge.n 8009906 <__sfputc_r+0x1e>
  24494. 80098f4: 6994 ldr r4, [r2, #24]
  24495. 80098f6: 42a3 cmp r3, r4
  24496. 80098f8: db01 blt.n 80098fe <__sfputc_r+0x16>
  24497. 80098fa: 290a cmp r1, #10
  24498. 80098fc: d103 bne.n 8009906 <__sfputc_r+0x1e>
  24499. 80098fe: f85d 4b04 ldr.w r4, [sp], #4
  24500. 8009902: f000 badf b.w 8009ec4 <__swbuf_r>
  24501. 8009906: 6813 ldr r3, [r2, #0]
  24502. 8009908: 1c58 adds r0, r3, #1
  24503. 800990a: 6010 str r0, [r2, #0]
  24504. 800990c: 7019 strb r1, [r3, #0]
  24505. 800990e: 4608 mov r0, r1
  24506. 8009910: f85d 4b04 ldr.w r4, [sp], #4
  24507. 8009914: 4770 bx lr
  24508. 08009916 <__sfputs_r>:
  24509. 8009916: b5f8 push {r3, r4, r5, r6, r7, lr}
  24510. 8009918: 4606 mov r6, r0
  24511. 800991a: 460f mov r7, r1
  24512. 800991c: 4614 mov r4, r2
  24513. 800991e: 18d5 adds r5, r2, r3
  24514. 8009920: 42ac cmp r4, r5
  24515. 8009922: d101 bne.n 8009928 <__sfputs_r+0x12>
  24516. 8009924: 2000 movs r0, #0
  24517. 8009926: e007 b.n 8009938 <__sfputs_r+0x22>
  24518. 8009928: f814 1b01 ldrb.w r1, [r4], #1
  24519. 800992c: 463a mov r2, r7
  24520. 800992e: 4630 mov r0, r6
  24521. 8009930: f7ff ffda bl 80098e8 <__sfputc_r>
  24522. 8009934: 1c43 adds r3, r0, #1
  24523. 8009936: d1f3 bne.n 8009920 <__sfputs_r+0xa>
  24524. 8009938: bdf8 pop {r3, r4, r5, r6, r7, pc}
  24525. ...
  24526. 0800993c <_vfiprintf_r>:
  24527. 800993c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  24528. 8009940: 460d mov r5, r1
  24529. 8009942: b09d sub sp, #116 ; 0x74
  24530. 8009944: 4614 mov r4, r2
  24531. 8009946: 4698 mov r8, r3
  24532. 8009948: 4606 mov r6, r0
  24533. 800994a: b118 cbz r0, 8009954 <_vfiprintf_r+0x18>
  24534. 800994c: 6983 ldr r3, [r0, #24]
  24535. 800994e: b90b cbnz r3, 8009954 <_vfiprintf_r+0x18>
  24536. 8009950: f000 fc9a bl 800a288 <__sinit>
  24537. 8009954: 4b89 ldr r3, [pc, #548] ; (8009b7c <_vfiprintf_r+0x240>)
  24538. 8009956: 429d cmp r5, r3
  24539. 8009958: d11b bne.n 8009992 <_vfiprintf_r+0x56>
  24540. 800995a: 6875 ldr r5, [r6, #4]
  24541. 800995c: 6e6b ldr r3, [r5, #100] ; 0x64
  24542. 800995e: 07d9 lsls r1, r3, #31
  24543. 8009960: d405 bmi.n 800996e <_vfiprintf_r+0x32>
  24544. 8009962: 89ab ldrh r3, [r5, #12]
  24545. 8009964: 059a lsls r2, r3, #22
  24546. 8009966: d402 bmi.n 800996e <_vfiprintf_r+0x32>
  24547. 8009968: 6da8 ldr r0, [r5, #88] ; 0x58
  24548. 800996a: f000 fd2b bl 800a3c4 <__retarget_lock_acquire_recursive>
  24549. 800996e: 89ab ldrh r3, [r5, #12]
  24550. 8009970: 071b lsls r3, r3, #28
  24551. 8009972: d501 bpl.n 8009978 <_vfiprintf_r+0x3c>
  24552. 8009974: 692b ldr r3, [r5, #16]
  24553. 8009976: b9eb cbnz r3, 80099b4 <_vfiprintf_r+0x78>
  24554. 8009978: 4629 mov r1, r5
  24555. 800997a: 4630 mov r0, r6
  24556. 800997c: f000 faf4 bl 8009f68 <__swsetup_r>
  24557. 8009980: b1c0 cbz r0, 80099b4 <_vfiprintf_r+0x78>
  24558. 8009982: 6e6b ldr r3, [r5, #100] ; 0x64
  24559. 8009984: 07dc lsls r4, r3, #31
  24560. 8009986: d50e bpl.n 80099a6 <_vfiprintf_r+0x6a>
  24561. 8009988: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
  24562. 800998c: b01d add sp, #116 ; 0x74
  24563. 800998e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
  24564. 8009992: 4b7b ldr r3, [pc, #492] ; (8009b80 <_vfiprintf_r+0x244>)
  24565. 8009994: 429d cmp r5, r3
  24566. 8009996: d101 bne.n 800999c <_vfiprintf_r+0x60>
  24567. 8009998: 68b5 ldr r5, [r6, #8]
  24568. 800999a: e7df b.n 800995c <_vfiprintf_r+0x20>
  24569. 800999c: 4b79 ldr r3, [pc, #484] ; (8009b84 <_vfiprintf_r+0x248>)
  24570. 800999e: 429d cmp r5, r3
  24571. 80099a0: bf08 it eq
  24572. 80099a2: 68f5 ldreq r5, [r6, #12]
  24573. 80099a4: e7da b.n 800995c <_vfiprintf_r+0x20>
  24574. 80099a6: 89ab ldrh r3, [r5, #12]
  24575. 80099a8: 0598 lsls r0, r3, #22
  24576. 80099aa: d4ed bmi.n 8009988 <_vfiprintf_r+0x4c>
  24577. 80099ac: 6da8 ldr r0, [r5, #88] ; 0x58
  24578. 80099ae: f000 fd0a bl 800a3c6 <__retarget_lock_release_recursive>
  24579. 80099b2: e7e9 b.n 8009988 <_vfiprintf_r+0x4c>
  24580. 80099b4: 2300 movs r3, #0
  24581. 80099b6: 9309 str r3, [sp, #36] ; 0x24
  24582. 80099b8: 2320 movs r3, #32
  24583. 80099ba: f88d 3029 strb.w r3, [sp, #41] ; 0x29
  24584. 80099be: f8cd 800c str.w r8, [sp, #12]
  24585. 80099c2: 2330 movs r3, #48 ; 0x30
  24586. 80099c4: f8df 81c0 ldr.w r8, [pc, #448] ; 8009b88 <_vfiprintf_r+0x24c>
  24587. 80099c8: f88d 302a strb.w r3, [sp, #42] ; 0x2a
  24588. 80099cc: f04f 0901 mov.w r9, #1
  24589. 80099d0: 4623 mov r3, r4
  24590. 80099d2: 469a mov sl, r3
  24591. 80099d4: f813 2b01 ldrb.w r2, [r3], #1
  24592. 80099d8: b10a cbz r2, 80099de <_vfiprintf_r+0xa2>
  24593. 80099da: 2a25 cmp r2, #37 ; 0x25
  24594. 80099dc: d1f9 bne.n 80099d2 <_vfiprintf_r+0x96>
  24595. 80099de: ebba 0b04 subs.w fp, sl, r4
  24596. 80099e2: d00b beq.n 80099fc <_vfiprintf_r+0xc0>
  24597. 80099e4: 465b mov r3, fp
  24598. 80099e6: 4622 mov r2, r4
  24599. 80099e8: 4629 mov r1, r5
  24600. 80099ea: 4630 mov r0, r6
  24601. 80099ec: f7ff ff93 bl 8009916 <__sfputs_r>
  24602. 80099f0: 3001 adds r0, #1
  24603. 80099f2: f000 80aa beq.w 8009b4a <_vfiprintf_r+0x20e>
  24604. 80099f6: 9a09 ldr r2, [sp, #36] ; 0x24
  24605. 80099f8: 445a add r2, fp
  24606. 80099fa: 9209 str r2, [sp, #36] ; 0x24
  24607. 80099fc: f89a 3000 ldrb.w r3, [sl]
  24608. 8009a00: 2b00 cmp r3, #0
  24609. 8009a02: f000 80a2 beq.w 8009b4a <_vfiprintf_r+0x20e>
  24610. 8009a06: 2300 movs r3, #0
  24611. 8009a08: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff
  24612. 8009a0c: e9cd 2305 strd r2, r3, [sp, #20]
  24613. 8009a10: f10a 0a01 add.w sl, sl, #1
  24614. 8009a14: 9304 str r3, [sp, #16]
  24615. 8009a16: 9307 str r3, [sp, #28]
  24616. 8009a18: f88d 3053 strb.w r3, [sp, #83] ; 0x53
  24617. 8009a1c: 931a str r3, [sp, #104] ; 0x68
  24618. 8009a1e: 4654 mov r4, sl
  24619. 8009a20: 2205 movs r2, #5
  24620. 8009a22: f814 1b01 ldrb.w r1, [r4], #1
  24621. 8009a26: 4858 ldr r0, [pc, #352] ; (8009b88 <_vfiprintf_r+0x24c>)
  24622. 8009a28: f7f6 fc72 bl 8000310 <memchr>
  24623. 8009a2c: 9a04 ldr r2, [sp, #16]
  24624. 8009a2e: b9d8 cbnz r0, 8009a68 <_vfiprintf_r+0x12c>
  24625. 8009a30: 06d1 lsls r1, r2, #27
  24626. 8009a32: bf44 itt mi
  24627. 8009a34: 2320 movmi r3, #32
  24628. 8009a36: f88d 3053 strbmi.w r3, [sp, #83] ; 0x53
  24629. 8009a3a: 0713 lsls r3, r2, #28
  24630. 8009a3c: bf44 itt mi
  24631. 8009a3e: 232b movmi r3, #43 ; 0x2b
  24632. 8009a40: f88d 3053 strbmi.w r3, [sp, #83] ; 0x53
  24633. 8009a44: f89a 3000 ldrb.w r3, [sl]
  24634. 8009a48: 2b2a cmp r3, #42 ; 0x2a
  24635. 8009a4a: d015 beq.n 8009a78 <_vfiprintf_r+0x13c>
  24636. 8009a4c: 9a07 ldr r2, [sp, #28]
  24637. 8009a4e: 4654 mov r4, sl
  24638. 8009a50: 2000 movs r0, #0
  24639. 8009a52: f04f 0c0a mov.w ip, #10
  24640. 8009a56: 4621 mov r1, r4
  24641. 8009a58: f811 3b01 ldrb.w r3, [r1], #1
  24642. 8009a5c: 3b30 subs r3, #48 ; 0x30
  24643. 8009a5e: 2b09 cmp r3, #9
  24644. 8009a60: d94e bls.n 8009b00 <_vfiprintf_r+0x1c4>
  24645. 8009a62: b1b0 cbz r0, 8009a92 <_vfiprintf_r+0x156>
  24646. 8009a64: 9207 str r2, [sp, #28]
  24647. 8009a66: e014 b.n 8009a92 <_vfiprintf_r+0x156>
  24648. 8009a68: eba0 0308 sub.w r3, r0, r8
  24649. 8009a6c: fa09 f303 lsl.w r3, r9, r3
  24650. 8009a70: 4313 orrs r3, r2
  24651. 8009a72: 9304 str r3, [sp, #16]
  24652. 8009a74: 46a2 mov sl, r4
  24653. 8009a76: e7d2 b.n 8009a1e <_vfiprintf_r+0xe2>
  24654. 8009a78: 9b03 ldr r3, [sp, #12]
  24655. 8009a7a: 1d19 adds r1, r3, #4
  24656. 8009a7c: 681b ldr r3, [r3, #0]
  24657. 8009a7e: 9103 str r1, [sp, #12]
  24658. 8009a80: 2b00 cmp r3, #0
  24659. 8009a82: bfbb ittet lt
  24660. 8009a84: 425b neglt r3, r3
  24661. 8009a86: f042 0202 orrlt.w r2, r2, #2
  24662. 8009a8a: 9307 strge r3, [sp, #28]
  24663. 8009a8c: 9307 strlt r3, [sp, #28]
  24664. 8009a8e: bfb8 it lt
  24665. 8009a90: 9204 strlt r2, [sp, #16]
  24666. 8009a92: 7823 ldrb r3, [r4, #0]
  24667. 8009a94: 2b2e cmp r3, #46 ; 0x2e
  24668. 8009a96: d10c bne.n 8009ab2 <_vfiprintf_r+0x176>
  24669. 8009a98: 7863 ldrb r3, [r4, #1]
  24670. 8009a9a: 2b2a cmp r3, #42 ; 0x2a
  24671. 8009a9c: d135 bne.n 8009b0a <_vfiprintf_r+0x1ce>
  24672. 8009a9e: 9b03 ldr r3, [sp, #12]
  24673. 8009aa0: 1d1a adds r2, r3, #4
  24674. 8009aa2: 681b ldr r3, [r3, #0]
  24675. 8009aa4: 9203 str r2, [sp, #12]
  24676. 8009aa6: 2b00 cmp r3, #0
  24677. 8009aa8: bfb8 it lt
  24678. 8009aaa: f04f 33ff movlt.w r3, #4294967295 ; 0xffffffff
  24679. 8009aae: 3402 adds r4, #2
  24680. 8009ab0: 9305 str r3, [sp, #20]
  24681. 8009ab2: f8df a0e4 ldr.w sl, [pc, #228] ; 8009b98 <_vfiprintf_r+0x25c>
  24682. 8009ab6: 7821 ldrb r1, [r4, #0]
  24683. 8009ab8: 2203 movs r2, #3
  24684. 8009aba: 4650 mov r0, sl
  24685. 8009abc: f7f6 fc28 bl 8000310 <memchr>
  24686. 8009ac0: b140 cbz r0, 8009ad4 <_vfiprintf_r+0x198>
  24687. 8009ac2: 2340 movs r3, #64 ; 0x40
  24688. 8009ac4: eba0 000a sub.w r0, r0, sl
  24689. 8009ac8: fa03 f000 lsl.w r0, r3, r0
  24690. 8009acc: 9b04 ldr r3, [sp, #16]
  24691. 8009ace: 4303 orrs r3, r0
  24692. 8009ad0: 3401 adds r4, #1
  24693. 8009ad2: 9304 str r3, [sp, #16]
  24694. 8009ad4: f814 1b01 ldrb.w r1, [r4], #1
  24695. 8009ad8: 482c ldr r0, [pc, #176] ; (8009b8c <_vfiprintf_r+0x250>)
  24696. 8009ada: f88d 1028 strb.w r1, [sp, #40] ; 0x28
  24697. 8009ade: 2206 movs r2, #6
  24698. 8009ae0: f7f6 fc16 bl 8000310 <memchr>
  24699. 8009ae4: 2800 cmp r0, #0
  24700. 8009ae6: d03f beq.n 8009b68 <_vfiprintf_r+0x22c>
  24701. 8009ae8: 4b29 ldr r3, [pc, #164] ; (8009b90 <_vfiprintf_r+0x254>)
  24702. 8009aea: bb1b cbnz r3, 8009b34 <_vfiprintf_r+0x1f8>
  24703. 8009aec: 9b03 ldr r3, [sp, #12]
  24704. 8009aee: 3307 adds r3, #7
  24705. 8009af0: f023 0307 bic.w r3, r3, #7
  24706. 8009af4: 3308 adds r3, #8
  24707. 8009af6: 9303 str r3, [sp, #12]
  24708. 8009af8: 9b09 ldr r3, [sp, #36] ; 0x24
  24709. 8009afa: 443b add r3, r7
  24710. 8009afc: 9309 str r3, [sp, #36] ; 0x24
  24711. 8009afe: e767 b.n 80099d0 <_vfiprintf_r+0x94>
  24712. 8009b00: fb0c 3202 mla r2, ip, r2, r3
  24713. 8009b04: 460c mov r4, r1
  24714. 8009b06: 2001 movs r0, #1
  24715. 8009b08: e7a5 b.n 8009a56 <_vfiprintf_r+0x11a>
  24716. 8009b0a: 2300 movs r3, #0
  24717. 8009b0c: 3401 adds r4, #1
  24718. 8009b0e: 9305 str r3, [sp, #20]
  24719. 8009b10: 4619 mov r1, r3
  24720. 8009b12: f04f 0c0a mov.w ip, #10
  24721. 8009b16: 4620 mov r0, r4
  24722. 8009b18: f810 2b01 ldrb.w r2, [r0], #1
  24723. 8009b1c: 3a30 subs r2, #48 ; 0x30
  24724. 8009b1e: 2a09 cmp r2, #9
  24725. 8009b20: d903 bls.n 8009b2a <_vfiprintf_r+0x1ee>
  24726. 8009b22: 2b00 cmp r3, #0
  24727. 8009b24: d0c5 beq.n 8009ab2 <_vfiprintf_r+0x176>
  24728. 8009b26: 9105 str r1, [sp, #20]
  24729. 8009b28: e7c3 b.n 8009ab2 <_vfiprintf_r+0x176>
  24730. 8009b2a: fb0c 2101 mla r1, ip, r1, r2
  24731. 8009b2e: 4604 mov r4, r0
  24732. 8009b30: 2301 movs r3, #1
  24733. 8009b32: e7f0 b.n 8009b16 <_vfiprintf_r+0x1da>
  24734. 8009b34: ab03 add r3, sp, #12
  24735. 8009b36: 9300 str r3, [sp, #0]
  24736. 8009b38: 462a mov r2, r5
  24737. 8009b3a: 4b16 ldr r3, [pc, #88] ; (8009b94 <_vfiprintf_r+0x258>)
  24738. 8009b3c: a904 add r1, sp, #16
  24739. 8009b3e: 4630 mov r0, r6
  24740. 8009b40: f3af 8000 nop.w
  24741. 8009b44: 4607 mov r7, r0
  24742. 8009b46: 1c78 adds r0, r7, #1
  24743. 8009b48: d1d6 bne.n 8009af8 <_vfiprintf_r+0x1bc>
  24744. 8009b4a: 6e6b ldr r3, [r5, #100] ; 0x64
  24745. 8009b4c: 07d9 lsls r1, r3, #31
  24746. 8009b4e: d405 bmi.n 8009b5c <_vfiprintf_r+0x220>
  24747. 8009b50: 89ab ldrh r3, [r5, #12]
  24748. 8009b52: 059a lsls r2, r3, #22
  24749. 8009b54: d402 bmi.n 8009b5c <_vfiprintf_r+0x220>
  24750. 8009b56: 6da8 ldr r0, [r5, #88] ; 0x58
  24751. 8009b58: f000 fc35 bl 800a3c6 <__retarget_lock_release_recursive>
  24752. 8009b5c: 89ab ldrh r3, [r5, #12]
  24753. 8009b5e: 065b lsls r3, r3, #25
  24754. 8009b60: f53f af12 bmi.w 8009988 <_vfiprintf_r+0x4c>
  24755. 8009b64: 9809 ldr r0, [sp, #36] ; 0x24
  24756. 8009b66: e711 b.n 800998c <_vfiprintf_r+0x50>
  24757. 8009b68: ab03 add r3, sp, #12
  24758. 8009b6a: 9300 str r3, [sp, #0]
  24759. 8009b6c: 462a mov r2, r5
  24760. 8009b6e: 4b09 ldr r3, [pc, #36] ; (8009b94 <_vfiprintf_r+0x258>)
  24761. 8009b70: a904 add r1, sp, #16
  24762. 8009b72: 4630 mov r0, r6
  24763. 8009b74: f000 f880 bl 8009c78 <_printf_i>
  24764. 8009b78: e7e4 b.n 8009b44 <_vfiprintf_r+0x208>
  24765. 8009b7a: bf00 nop
  24766. 8009b7c: 0800a9fc .word 0x0800a9fc
  24767. 8009b80: 0800aa1c .word 0x0800aa1c
  24768. 8009b84: 0800a9dc .word 0x0800a9dc
  24769. 8009b88: 0800a9a8 .word 0x0800a9a8
  24770. 8009b8c: 0800a9b2 .word 0x0800a9b2
  24771. 8009b90: 00000000 .word 0x00000000
  24772. 8009b94: 08009917 .word 0x08009917
  24773. 8009b98: 0800a9ae .word 0x0800a9ae
  24774. 08009b9c <_printf_common>:
  24775. 8009b9c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
  24776. 8009ba0: 4616 mov r6, r2
  24777. 8009ba2: 4699 mov r9, r3
  24778. 8009ba4: 688a ldr r2, [r1, #8]
  24779. 8009ba6: 690b ldr r3, [r1, #16]
  24780. 8009ba8: f8dd 8020 ldr.w r8, [sp, #32]
  24781. 8009bac: 4293 cmp r3, r2
  24782. 8009bae: bfb8 it lt
  24783. 8009bb0: 4613 movlt r3, r2
  24784. 8009bb2: 6033 str r3, [r6, #0]
  24785. 8009bb4: f891 2043 ldrb.w r2, [r1, #67] ; 0x43
  24786. 8009bb8: 4607 mov r7, r0
  24787. 8009bba: 460c mov r4, r1
  24788. 8009bbc: b10a cbz r2, 8009bc2 <_printf_common+0x26>
  24789. 8009bbe: 3301 adds r3, #1
  24790. 8009bc0: 6033 str r3, [r6, #0]
  24791. 8009bc2: 6823 ldr r3, [r4, #0]
  24792. 8009bc4: 0699 lsls r1, r3, #26
  24793. 8009bc6: bf42 ittt mi
  24794. 8009bc8: 6833 ldrmi r3, [r6, #0]
  24795. 8009bca: 3302 addmi r3, #2
  24796. 8009bcc: 6033 strmi r3, [r6, #0]
  24797. 8009bce: 6825 ldr r5, [r4, #0]
  24798. 8009bd0: f015 0506 ands.w r5, r5, #6
  24799. 8009bd4: d106 bne.n 8009be4 <_printf_common+0x48>
  24800. 8009bd6: f104 0a19 add.w sl, r4, #25
  24801. 8009bda: 68e3 ldr r3, [r4, #12]
  24802. 8009bdc: 6832 ldr r2, [r6, #0]
  24803. 8009bde: 1a9b subs r3, r3, r2
  24804. 8009be0: 42ab cmp r3, r5
  24805. 8009be2: dc26 bgt.n 8009c32 <_printf_common+0x96>
  24806. 8009be4: f894 2043 ldrb.w r2, [r4, #67] ; 0x43
  24807. 8009be8: 1e13 subs r3, r2, #0
  24808. 8009bea: 6822 ldr r2, [r4, #0]
  24809. 8009bec: bf18 it ne
  24810. 8009bee: 2301 movne r3, #1
  24811. 8009bf0: 0692 lsls r2, r2, #26
  24812. 8009bf2: d42b bmi.n 8009c4c <_printf_common+0xb0>
  24813. 8009bf4: f104 0243 add.w r2, r4, #67 ; 0x43
  24814. 8009bf8: 4649 mov r1, r9
  24815. 8009bfa: 4638 mov r0, r7
  24816. 8009bfc: 47c0 blx r8
  24817. 8009bfe: 3001 adds r0, #1
  24818. 8009c00: d01e beq.n 8009c40 <_printf_common+0xa4>
  24819. 8009c02: 6823 ldr r3, [r4, #0]
  24820. 8009c04: 68e5 ldr r5, [r4, #12]
  24821. 8009c06: 6832 ldr r2, [r6, #0]
  24822. 8009c08: f003 0306 and.w r3, r3, #6
  24823. 8009c0c: 2b04 cmp r3, #4
  24824. 8009c0e: bf08 it eq
  24825. 8009c10: 1aad subeq r5, r5, r2
  24826. 8009c12: 68a3 ldr r3, [r4, #8]
  24827. 8009c14: 6922 ldr r2, [r4, #16]
  24828. 8009c16: bf0c ite eq
  24829. 8009c18: ea25 75e5 biceq.w r5, r5, r5, asr #31
  24830. 8009c1c: 2500 movne r5, #0
  24831. 8009c1e: 4293 cmp r3, r2
  24832. 8009c20: bfc4 itt gt
  24833. 8009c22: 1a9b subgt r3, r3, r2
  24834. 8009c24: 18ed addgt r5, r5, r3
  24835. 8009c26: 2600 movs r6, #0
  24836. 8009c28: 341a adds r4, #26
  24837. 8009c2a: 42b5 cmp r5, r6
  24838. 8009c2c: d11a bne.n 8009c64 <_printf_common+0xc8>
  24839. 8009c2e: 2000 movs r0, #0
  24840. 8009c30: e008 b.n 8009c44 <_printf_common+0xa8>
  24841. 8009c32: 2301 movs r3, #1
  24842. 8009c34: 4652 mov r2, sl
  24843. 8009c36: 4649 mov r1, r9
  24844. 8009c38: 4638 mov r0, r7
  24845. 8009c3a: 47c0 blx r8
  24846. 8009c3c: 3001 adds r0, #1
  24847. 8009c3e: d103 bne.n 8009c48 <_printf_common+0xac>
  24848. 8009c40: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
  24849. 8009c44: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  24850. 8009c48: 3501 adds r5, #1
  24851. 8009c4a: e7c6 b.n 8009bda <_printf_common+0x3e>
  24852. 8009c4c: 18e1 adds r1, r4, r3
  24853. 8009c4e: 1c5a adds r2, r3, #1
  24854. 8009c50: 2030 movs r0, #48 ; 0x30
  24855. 8009c52: f881 0043 strb.w r0, [r1, #67] ; 0x43
  24856. 8009c56: 4422 add r2, r4
  24857. 8009c58: f894 1045 ldrb.w r1, [r4, #69] ; 0x45
  24858. 8009c5c: f882 1043 strb.w r1, [r2, #67] ; 0x43
  24859. 8009c60: 3302 adds r3, #2
  24860. 8009c62: e7c7 b.n 8009bf4 <_printf_common+0x58>
  24861. 8009c64: 2301 movs r3, #1
  24862. 8009c66: 4622 mov r2, r4
  24863. 8009c68: 4649 mov r1, r9
  24864. 8009c6a: 4638 mov r0, r7
  24865. 8009c6c: 47c0 blx r8
  24866. 8009c6e: 3001 adds r0, #1
  24867. 8009c70: d0e6 beq.n 8009c40 <_printf_common+0xa4>
  24868. 8009c72: 3601 adds r6, #1
  24869. 8009c74: e7d9 b.n 8009c2a <_printf_common+0x8e>
  24870. ...
  24871. 08009c78 <_printf_i>:
  24872. 8009c78: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr}
  24873. 8009c7c: 460c mov r4, r1
  24874. 8009c7e: 4691 mov r9, r2
  24875. 8009c80: 7e27 ldrb r7, [r4, #24]
  24876. 8009c82: 990c ldr r1, [sp, #48] ; 0x30
  24877. 8009c84: 2f78 cmp r7, #120 ; 0x78
  24878. 8009c86: 4680 mov r8, r0
  24879. 8009c88: 469a mov sl, r3
  24880. 8009c8a: f104 0243 add.w r2, r4, #67 ; 0x43
  24881. 8009c8e: d807 bhi.n 8009ca0 <_printf_i+0x28>
  24882. 8009c90: 2f62 cmp r7, #98 ; 0x62
  24883. 8009c92: d80a bhi.n 8009caa <_printf_i+0x32>
  24884. 8009c94: 2f00 cmp r7, #0
  24885. 8009c96: f000 80d8 beq.w 8009e4a <_printf_i+0x1d2>
  24886. 8009c9a: 2f58 cmp r7, #88 ; 0x58
  24887. 8009c9c: f000 80a3 beq.w 8009de6 <_printf_i+0x16e>
  24888. 8009ca0: f104 0642 add.w r6, r4, #66 ; 0x42
  24889. 8009ca4: f884 7042 strb.w r7, [r4, #66] ; 0x42
  24890. 8009ca8: e03a b.n 8009d20 <_printf_i+0xa8>
  24891. 8009caa: f1a7 0363 sub.w r3, r7, #99 ; 0x63
  24892. 8009cae: 2b15 cmp r3, #21
  24893. 8009cb0: d8f6 bhi.n 8009ca0 <_printf_i+0x28>
  24894. 8009cb2: a001 add r0, pc, #4 ; (adr r0, 8009cb8 <_printf_i+0x40>)
  24895. 8009cb4: f850 f023 ldr.w pc, [r0, r3, lsl #2]
  24896. 8009cb8: 08009d11 .word 0x08009d11
  24897. 8009cbc: 08009d25 .word 0x08009d25
  24898. 8009cc0: 08009ca1 .word 0x08009ca1
  24899. 8009cc4: 08009ca1 .word 0x08009ca1
  24900. 8009cc8: 08009ca1 .word 0x08009ca1
  24901. 8009ccc: 08009ca1 .word 0x08009ca1
  24902. 8009cd0: 08009d25 .word 0x08009d25
  24903. 8009cd4: 08009ca1 .word 0x08009ca1
  24904. 8009cd8: 08009ca1 .word 0x08009ca1
  24905. 8009cdc: 08009ca1 .word 0x08009ca1
  24906. 8009ce0: 08009ca1 .word 0x08009ca1
  24907. 8009ce4: 08009e31 .word 0x08009e31
  24908. 8009ce8: 08009d55 .word 0x08009d55
  24909. 8009cec: 08009e13 .word 0x08009e13
  24910. 8009cf0: 08009ca1 .word 0x08009ca1
  24911. 8009cf4: 08009ca1 .word 0x08009ca1
  24912. 8009cf8: 08009e53 .word 0x08009e53
  24913. 8009cfc: 08009ca1 .word 0x08009ca1
  24914. 8009d00: 08009d55 .word 0x08009d55
  24915. 8009d04: 08009ca1 .word 0x08009ca1
  24916. 8009d08: 08009ca1 .word 0x08009ca1
  24917. 8009d0c: 08009e1b .word 0x08009e1b
  24918. 8009d10: 680b ldr r3, [r1, #0]
  24919. 8009d12: 1d1a adds r2, r3, #4
  24920. 8009d14: 681b ldr r3, [r3, #0]
  24921. 8009d16: 600a str r2, [r1, #0]
  24922. 8009d18: f104 0642 add.w r6, r4, #66 ; 0x42
  24923. 8009d1c: f884 3042 strb.w r3, [r4, #66] ; 0x42
  24924. 8009d20: 2301 movs r3, #1
  24925. 8009d22: e0a3 b.n 8009e6c <_printf_i+0x1f4>
  24926. 8009d24: 6825 ldr r5, [r4, #0]
  24927. 8009d26: 6808 ldr r0, [r1, #0]
  24928. 8009d28: 062e lsls r6, r5, #24
  24929. 8009d2a: f100 0304 add.w r3, r0, #4
  24930. 8009d2e: d50a bpl.n 8009d46 <_printf_i+0xce>
  24931. 8009d30: 6805 ldr r5, [r0, #0]
  24932. 8009d32: 600b str r3, [r1, #0]
  24933. 8009d34: 2d00 cmp r5, #0
  24934. 8009d36: da03 bge.n 8009d40 <_printf_i+0xc8>
  24935. 8009d38: 232d movs r3, #45 ; 0x2d
  24936. 8009d3a: 426d negs r5, r5
  24937. 8009d3c: f884 3043 strb.w r3, [r4, #67] ; 0x43
  24938. 8009d40: 485e ldr r0, [pc, #376] ; (8009ebc <_printf_i+0x244>)
  24939. 8009d42: 230a movs r3, #10
  24940. 8009d44: e019 b.n 8009d7a <_printf_i+0x102>
  24941. 8009d46: f015 0f40 tst.w r5, #64 ; 0x40
  24942. 8009d4a: 6805 ldr r5, [r0, #0]
  24943. 8009d4c: 600b str r3, [r1, #0]
  24944. 8009d4e: bf18 it ne
  24945. 8009d50: b22d sxthne r5, r5
  24946. 8009d52: e7ef b.n 8009d34 <_printf_i+0xbc>
  24947. 8009d54: 680b ldr r3, [r1, #0]
  24948. 8009d56: 6825 ldr r5, [r4, #0]
  24949. 8009d58: 1d18 adds r0, r3, #4
  24950. 8009d5a: 6008 str r0, [r1, #0]
  24951. 8009d5c: 0628 lsls r0, r5, #24
  24952. 8009d5e: d501 bpl.n 8009d64 <_printf_i+0xec>
  24953. 8009d60: 681d ldr r5, [r3, #0]
  24954. 8009d62: e002 b.n 8009d6a <_printf_i+0xf2>
  24955. 8009d64: 0669 lsls r1, r5, #25
  24956. 8009d66: d5fb bpl.n 8009d60 <_printf_i+0xe8>
  24957. 8009d68: 881d ldrh r5, [r3, #0]
  24958. 8009d6a: 4854 ldr r0, [pc, #336] ; (8009ebc <_printf_i+0x244>)
  24959. 8009d6c: 2f6f cmp r7, #111 ; 0x6f
  24960. 8009d6e: bf0c ite eq
  24961. 8009d70: 2308 moveq r3, #8
  24962. 8009d72: 230a movne r3, #10
  24963. 8009d74: 2100 movs r1, #0
  24964. 8009d76: f884 1043 strb.w r1, [r4, #67] ; 0x43
  24965. 8009d7a: 6866 ldr r6, [r4, #4]
  24966. 8009d7c: 60a6 str r6, [r4, #8]
  24967. 8009d7e: 2e00 cmp r6, #0
  24968. 8009d80: bfa2 ittt ge
  24969. 8009d82: 6821 ldrge r1, [r4, #0]
  24970. 8009d84: f021 0104 bicge.w r1, r1, #4
  24971. 8009d88: 6021 strge r1, [r4, #0]
  24972. 8009d8a: b90d cbnz r5, 8009d90 <_printf_i+0x118>
  24973. 8009d8c: 2e00 cmp r6, #0
  24974. 8009d8e: d04d beq.n 8009e2c <_printf_i+0x1b4>
  24975. 8009d90: 4616 mov r6, r2
  24976. 8009d92: fbb5 f1f3 udiv r1, r5, r3
  24977. 8009d96: fb03 5711 mls r7, r3, r1, r5
  24978. 8009d9a: 5dc7 ldrb r7, [r0, r7]
  24979. 8009d9c: f806 7d01 strb.w r7, [r6, #-1]!
  24980. 8009da0: 462f mov r7, r5
  24981. 8009da2: 42bb cmp r3, r7
  24982. 8009da4: 460d mov r5, r1
  24983. 8009da6: d9f4 bls.n 8009d92 <_printf_i+0x11a>
  24984. 8009da8: 2b08 cmp r3, #8
  24985. 8009daa: d10b bne.n 8009dc4 <_printf_i+0x14c>
  24986. 8009dac: 6823 ldr r3, [r4, #0]
  24987. 8009dae: 07df lsls r7, r3, #31
  24988. 8009db0: d508 bpl.n 8009dc4 <_printf_i+0x14c>
  24989. 8009db2: 6923 ldr r3, [r4, #16]
  24990. 8009db4: 6861 ldr r1, [r4, #4]
  24991. 8009db6: 4299 cmp r1, r3
  24992. 8009db8: bfde ittt le
  24993. 8009dba: 2330 movle r3, #48 ; 0x30
  24994. 8009dbc: f806 3c01 strble.w r3, [r6, #-1]
  24995. 8009dc0: f106 36ff addle.w r6, r6, #4294967295 ; 0xffffffff
  24996. 8009dc4: 1b92 subs r2, r2, r6
  24997. 8009dc6: 6122 str r2, [r4, #16]
  24998. 8009dc8: f8cd a000 str.w sl, [sp]
  24999. 8009dcc: 464b mov r3, r9
  25000. 8009dce: aa03 add r2, sp, #12
  25001. 8009dd0: 4621 mov r1, r4
  25002. 8009dd2: 4640 mov r0, r8
  25003. 8009dd4: f7ff fee2 bl 8009b9c <_printf_common>
  25004. 8009dd8: 3001 adds r0, #1
  25005. 8009dda: d14c bne.n 8009e76 <_printf_i+0x1fe>
  25006. 8009ddc: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
  25007. 8009de0: b004 add sp, #16
  25008. 8009de2: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  25009. 8009de6: 4835 ldr r0, [pc, #212] ; (8009ebc <_printf_i+0x244>)
  25010. 8009de8: f884 7045 strb.w r7, [r4, #69] ; 0x45
  25011. 8009dec: 6823 ldr r3, [r4, #0]
  25012. 8009dee: 680e ldr r6, [r1, #0]
  25013. 8009df0: 061f lsls r7, r3, #24
  25014. 8009df2: f856 5b04 ldr.w r5, [r6], #4
  25015. 8009df6: 600e str r6, [r1, #0]
  25016. 8009df8: d514 bpl.n 8009e24 <_printf_i+0x1ac>
  25017. 8009dfa: 07d9 lsls r1, r3, #31
  25018. 8009dfc: bf44 itt mi
  25019. 8009dfe: f043 0320 orrmi.w r3, r3, #32
  25020. 8009e02: 6023 strmi r3, [r4, #0]
  25021. 8009e04: b91d cbnz r5, 8009e0e <_printf_i+0x196>
  25022. 8009e06: 6823 ldr r3, [r4, #0]
  25023. 8009e08: f023 0320 bic.w r3, r3, #32
  25024. 8009e0c: 6023 str r3, [r4, #0]
  25025. 8009e0e: 2310 movs r3, #16
  25026. 8009e10: e7b0 b.n 8009d74 <_printf_i+0xfc>
  25027. 8009e12: 6823 ldr r3, [r4, #0]
  25028. 8009e14: f043 0320 orr.w r3, r3, #32
  25029. 8009e18: 6023 str r3, [r4, #0]
  25030. 8009e1a: 2378 movs r3, #120 ; 0x78
  25031. 8009e1c: 4828 ldr r0, [pc, #160] ; (8009ec0 <_printf_i+0x248>)
  25032. 8009e1e: f884 3045 strb.w r3, [r4, #69] ; 0x45
  25033. 8009e22: e7e3 b.n 8009dec <_printf_i+0x174>
  25034. 8009e24: 065e lsls r6, r3, #25
  25035. 8009e26: bf48 it mi
  25036. 8009e28: b2ad uxthmi r5, r5
  25037. 8009e2a: e7e6 b.n 8009dfa <_printf_i+0x182>
  25038. 8009e2c: 4616 mov r6, r2
  25039. 8009e2e: e7bb b.n 8009da8 <_printf_i+0x130>
  25040. 8009e30: 680b ldr r3, [r1, #0]
  25041. 8009e32: 6826 ldr r6, [r4, #0]
  25042. 8009e34: 6960 ldr r0, [r4, #20]
  25043. 8009e36: 1d1d adds r5, r3, #4
  25044. 8009e38: 600d str r5, [r1, #0]
  25045. 8009e3a: 0635 lsls r5, r6, #24
  25046. 8009e3c: 681b ldr r3, [r3, #0]
  25047. 8009e3e: d501 bpl.n 8009e44 <_printf_i+0x1cc>
  25048. 8009e40: 6018 str r0, [r3, #0]
  25049. 8009e42: e002 b.n 8009e4a <_printf_i+0x1d2>
  25050. 8009e44: 0671 lsls r1, r6, #25
  25051. 8009e46: d5fb bpl.n 8009e40 <_printf_i+0x1c8>
  25052. 8009e48: 8018 strh r0, [r3, #0]
  25053. 8009e4a: 2300 movs r3, #0
  25054. 8009e4c: 6123 str r3, [r4, #16]
  25055. 8009e4e: 4616 mov r6, r2
  25056. 8009e50: e7ba b.n 8009dc8 <_printf_i+0x150>
  25057. 8009e52: 680b ldr r3, [r1, #0]
  25058. 8009e54: 1d1a adds r2, r3, #4
  25059. 8009e56: 600a str r2, [r1, #0]
  25060. 8009e58: 681e ldr r6, [r3, #0]
  25061. 8009e5a: 6862 ldr r2, [r4, #4]
  25062. 8009e5c: 2100 movs r1, #0
  25063. 8009e5e: 4630 mov r0, r6
  25064. 8009e60: f7f6 fa56 bl 8000310 <memchr>
  25065. 8009e64: b108 cbz r0, 8009e6a <_printf_i+0x1f2>
  25066. 8009e66: 1b80 subs r0, r0, r6
  25067. 8009e68: 6060 str r0, [r4, #4]
  25068. 8009e6a: 6863 ldr r3, [r4, #4]
  25069. 8009e6c: 6123 str r3, [r4, #16]
  25070. 8009e6e: 2300 movs r3, #0
  25071. 8009e70: f884 3043 strb.w r3, [r4, #67] ; 0x43
  25072. 8009e74: e7a8 b.n 8009dc8 <_printf_i+0x150>
  25073. 8009e76: 6923 ldr r3, [r4, #16]
  25074. 8009e78: 4632 mov r2, r6
  25075. 8009e7a: 4649 mov r1, r9
  25076. 8009e7c: 4640 mov r0, r8
  25077. 8009e7e: 47d0 blx sl
  25078. 8009e80: 3001 adds r0, #1
  25079. 8009e82: d0ab beq.n 8009ddc <_printf_i+0x164>
  25080. 8009e84: 6823 ldr r3, [r4, #0]
  25081. 8009e86: 079b lsls r3, r3, #30
  25082. 8009e88: d413 bmi.n 8009eb2 <_printf_i+0x23a>
  25083. 8009e8a: 68e0 ldr r0, [r4, #12]
  25084. 8009e8c: 9b03 ldr r3, [sp, #12]
  25085. 8009e8e: 4298 cmp r0, r3
  25086. 8009e90: bfb8 it lt
  25087. 8009e92: 4618 movlt r0, r3
  25088. 8009e94: e7a4 b.n 8009de0 <_printf_i+0x168>
  25089. 8009e96: 2301 movs r3, #1
  25090. 8009e98: 4632 mov r2, r6
  25091. 8009e9a: 4649 mov r1, r9
  25092. 8009e9c: 4640 mov r0, r8
  25093. 8009e9e: 47d0 blx sl
  25094. 8009ea0: 3001 adds r0, #1
  25095. 8009ea2: d09b beq.n 8009ddc <_printf_i+0x164>
  25096. 8009ea4: 3501 adds r5, #1
  25097. 8009ea6: 68e3 ldr r3, [r4, #12]
  25098. 8009ea8: 9903 ldr r1, [sp, #12]
  25099. 8009eaa: 1a5b subs r3, r3, r1
  25100. 8009eac: 42ab cmp r3, r5
  25101. 8009eae: dcf2 bgt.n 8009e96 <_printf_i+0x21e>
  25102. 8009eb0: e7eb b.n 8009e8a <_printf_i+0x212>
  25103. 8009eb2: 2500 movs r5, #0
  25104. 8009eb4: f104 0619 add.w r6, r4, #25
  25105. 8009eb8: e7f5 b.n 8009ea6 <_printf_i+0x22e>
  25106. 8009eba: bf00 nop
  25107. 8009ebc: 0800a9b9 .word 0x0800a9b9
  25108. 8009ec0: 0800a9ca .word 0x0800a9ca
  25109. 08009ec4 <__swbuf_r>:
  25110. 8009ec4: b5f8 push {r3, r4, r5, r6, r7, lr}
  25111. 8009ec6: 460e mov r6, r1
  25112. 8009ec8: 4614 mov r4, r2
  25113. 8009eca: 4605 mov r5, r0
  25114. 8009ecc: b118 cbz r0, 8009ed6 <__swbuf_r+0x12>
  25115. 8009ece: 6983 ldr r3, [r0, #24]
  25116. 8009ed0: b90b cbnz r3, 8009ed6 <__swbuf_r+0x12>
  25117. 8009ed2: f000 f9d9 bl 800a288 <__sinit>
  25118. 8009ed6: 4b21 ldr r3, [pc, #132] ; (8009f5c <__swbuf_r+0x98>)
  25119. 8009ed8: 429c cmp r4, r3
  25120. 8009eda: d12b bne.n 8009f34 <__swbuf_r+0x70>
  25121. 8009edc: 686c ldr r4, [r5, #4]
  25122. 8009ede: 69a3 ldr r3, [r4, #24]
  25123. 8009ee0: 60a3 str r3, [r4, #8]
  25124. 8009ee2: 89a3 ldrh r3, [r4, #12]
  25125. 8009ee4: 071a lsls r2, r3, #28
  25126. 8009ee6: d52f bpl.n 8009f48 <__swbuf_r+0x84>
  25127. 8009ee8: 6923 ldr r3, [r4, #16]
  25128. 8009eea: b36b cbz r3, 8009f48 <__swbuf_r+0x84>
  25129. 8009eec: 6923 ldr r3, [r4, #16]
  25130. 8009eee: 6820 ldr r0, [r4, #0]
  25131. 8009ef0: 1ac0 subs r0, r0, r3
  25132. 8009ef2: 6963 ldr r3, [r4, #20]
  25133. 8009ef4: b2f6 uxtb r6, r6
  25134. 8009ef6: 4283 cmp r3, r0
  25135. 8009ef8: 4637 mov r7, r6
  25136. 8009efa: dc04 bgt.n 8009f06 <__swbuf_r+0x42>
  25137. 8009efc: 4621 mov r1, r4
  25138. 8009efe: 4628 mov r0, r5
  25139. 8009f00: f000 f92e bl 800a160 <_fflush_r>
  25140. 8009f04: bb30 cbnz r0, 8009f54 <__swbuf_r+0x90>
  25141. 8009f06: 68a3 ldr r3, [r4, #8]
  25142. 8009f08: 3b01 subs r3, #1
  25143. 8009f0a: 60a3 str r3, [r4, #8]
  25144. 8009f0c: 6823 ldr r3, [r4, #0]
  25145. 8009f0e: 1c5a adds r2, r3, #1
  25146. 8009f10: 6022 str r2, [r4, #0]
  25147. 8009f12: 701e strb r6, [r3, #0]
  25148. 8009f14: 6963 ldr r3, [r4, #20]
  25149. 8009f16: 3001 adds r0, #1
  25150. 8009f18: 4283 cmp r3, r0
  25151. 8009f1a: d004 beq.n 8009f26 <__swbuf_r+0x62>
  25152. 8009f1c: 89a3 ldrh r3, [r4, #12]
  25153. 8009f1e: 07db lsls r3, r3, #31
  25154. 8009f20: d506 bpl.n 8009f30 <__swbuf_r+0x6c>
  25155. 8009f22: 2e0a cmp r6, #10
  25156. 8009f24: d104 bne.n 8009f30 <__swbuf_r+0x6c>
  25157. 8009f26: 4621 mov r1, r4
  25158. 8009f28: 4628 mov r0, r5
  25159. 8009f2a: f000 f919 bl 800a160 <_fflush_r>
  25160. 8009f2e: b988 cbnz r0, 8009f54 <__swbuf_r+0x90>
  25161. 8009f30: 4638 mov r0, r7
  25162. 8009f32: bdf8 pop {r3, r4, r5, r6, r7, pc}
  25163. 8009f34: 4b0a ldr r3, [pc, #40] ; (8009f60 <__swbuf_r+0x9c>)
  25164. 8009f36: 429c cmp r4, r3
  25165. 8009f38: d101 bne.n 8009f3e <__swbuf_r+0x7a>
  25166. 8009f3a: 68ac ldr r4, [r5, #8]
  25167. 8009f3c: e7cf b.n 8009ede <__swbuf_r+0x1a>
  25168. 8009f3e: 4b09 ldr r3, [pc, #36] ; (8009f64 <__swbuf_r+0xa0>)
  25169. 8009f40: 429c cmp r4, r3
  25170. 8009f42: bf08 it eq
  25171. 8009f44: 68ec ldreq r4, [r5, #12]
  25172. 8009f46: e7ca b.n 8009ede <__swbuf_r+0x1a>
  25173. 8009f48: 4621 mov r1, r4
  25174. 8009f4a: 4628 mov r0, r5
  25175. 8009f4c: f000 f80c bl 8009f68 <__swsetup_r>
  25176. 8009f50: 2800 cmp r0, #0
  25177. 8009f52: d0cb beq.n 8009eec <__swbuf_r+0x28>
  25178. 8009f54: f04f 37ff mov.w r7, #4294967295 ; 0xffffffff
  25179. 8009f58: e7ea b.n 8009f30 <__swbuf_r+0x6c>
  25180. 8009f5a: bf00 nop
  25181. 8009f5c: 0800a9fc .word 0x0800a9fc
  25182. 8009f60: 0800aa1c .word 0x0800aa1c
  25183. 8009f64: 0800a9dc .word 0x0800a9dc
  25184. 08009f68 <__swsetup_r>:
  25185. 8009f68: 4b32 ldr r3, [pc, #200] ; (800a034 <__swsetup_r+0xcc>)
  25186. 8009f6a: b570 push {r4, r5, r6, lr}
  25187. 8009f6c: 681d ldr r5, [r3, #0]
  25188. 8009f6e: 4606 mov r6, r0
  25189. 8009f70: 460c mov r4, r1
  25190. 8009f72: b125 cbz r5, 8009f7e <__swsetup_r+0x16>
  25191. 8009f74: 69ab ldr r3, [r5, #24]
  25192. 8009f76: b913 cbnz r3, 8009f7e <__swsetup_r+0x16>
  25193. 8009f78: 4628 mov r0, r5
  25194. 8009f7a: f000 f985 bl 800a288 <__sinit>
  25195. 8009f7e: 4b2e ldr r3, [pc, #184] ; (800a038 <__swsetup_r+0xd0>)
  25196. 8009f80: 429c cmp r4, r3
  25197. 8009f82: d10f bne.n 8009fa4 <__swsetup_r+0x3c>
  25198. 8009f84: 686c ldr r4, [r5, #4]
  25199. 8009f86: 89a3 ldrh r3, [r4, #12]
  25200. 8009f88: f9b4 200c ldrsh.w r2, [r4, #12]
  25201. 8009f8c: 0719 lsls r1, r3, #28
  25202. 8009f8e: d42c bmi.n 8009fea <__swsetup_r+0x82>
  25203. 8009f90: 06dd lsls r5, r3, #27
  25204. 8009f92: d411 bmi.n 8009fb8 <__swsetup_r+0x50>
  25205. 8009f94: 2309 movs r3, #9
  25206. 8009f96: 6033 str r3, [r6, #0]
  25207. 8009f98: f042 0340 orr.w r3, r2, #64 ; 0x40
  25208. 8009f9c: 81a3 strh r3, [r4, #12]
  25209. 8009f9e: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
  25210. 8009fa2: e03e b.n 800a022 <__swsetup_r+0xba>
  25211. 8009fa4: 4b25 ldr r3, [pc, #148] ; (800a03c <__swsetup_r+0xd4>)
  25212. 8009fa6: 429c cmp r4, r3
  25213. 8009fa8: d101 bne.n 8009fae <__swsetup_r+0x46>
  25214. 8009faa: 68ac ldr r4, [r5, #8]
  25215. 8009fac: e7eb b.n 8009f86 <__swsetup_r+0x1e>
  25216. 8009fae: 4b24 ldr r3, [pc, #144] ; (800a040 <__swsetup_r+0xd8>)
  25217. 8009fb0: 429c cmp r4, r3
  25218. 8009fb2: bf08 it eq
  25219. 8009fb4: 68ec ldreq r4, [r5, #12]
  25220. 8009fb6: e7e6 b.n 8009f86 <__swsetup_r+0x1e>
  25221. 8009fb8: 0758 lsls r0, r3, #29
  25222. 8009fba: d512 bpl.n 8009fe2 <__swsetup_r+0x7a>
  25223. 8009fbc: 6b61 ldr r1, [r4, #52] ; 0x34
  25224. 8009fbe: b141 cbz r1, 8009fd2 <__swsetup_r+0x6a>
  25225. 8009fc0: f104 0344 add.w r3, r4, #68 ; 0x44
  25226. 8009fc4: 4299 cmp r1, r3
  25227. 8009fc6: d002 beq.n 8009fce <__swsetup_r+0x66>
  25228. 8009fc8: 4630 mov r0, r6
  25229. 8009fca: f000 fa61 bl 800a490 <_free_r>
  25230. 8009fce: 2300 movs r3, #0
  25231. 8009fd0: 6363 str r3, [r4, #52] ; 0x34
  25232. 8009fd2: 89a3 ldrh r3, [r4, #12]
  25233. 8009fd4: f023 0324 bic.w r3, r3, #36 ; 0x24
  25234. 8009fd8: 81a3 strh r3, [r4, #12]
  25235. 8009fda: 2300 movs r3, #0
  25236. 8009fdc: 6063 str r3, [r4, #4]
  25237. 8009fde: 6923 ldr r3, [r4, #16]
  25238. 8009fe0: 6023 str r3, [r4, #0]
  25239. 8009fe2: 89a3 ldrh r3, [r4, #12]
  25240. 8009fe4: f043 0308 orr.w r3, r3, #8
  25241. 8009fe8: 81a3 strh r3, [r4, #12]
  25242. 8009fea: 6923 ldr r3, [r4, #16]
  25243. 8009fec: b94b cbnz r3, 800a002 <__swsetup_r+0x9a>
  25244. 8009fee: 89a3 ldrh r3, [r4, #12]
  25245. 8009ff0: f403 7320 and.w r3, r3, #640 ; 0x280
  25246. 8009ff4: f5b3 7f00 cmp.w r3, #512 ; 0x200
  25247. 8009ff8: d003 beq.n 800a002 <__swsetup_r+0x9a>
  25248. 8009ffa: 4621 mov r1, r4
  25249. 8009ffc: 4630 mov r0, r6
  25250. 8009ffe: f000 fa07 bl 800a410 <__smakebuf_r>
  25251. 800a002: 89a0 ldrh r0, [r4, #12]
  25252. 800a004: f9b4 200c ldrsh.w r2, [r4, #12]
  25253. 800a008: f010 0301 ands.w r3, r0, #1
  25254. 800a00c: d00a beq.n 800a024 <__swsetup_r+0xbc>
  25255. 800a00e: 2300 movs r3, #0
  25256. 800a010: 60a3 str r3, [r4, #8]
  25257. 800a012: 6963 ldr r3, [r4, #20]
  25258. 800a014: 425b negs r3, r3
  25259. 800a016: 61a3 str r3, [r4, #24]
  25260. 800a018: 6923 ldr r3, [r4, #16]
  25261. 800a01a: b943 cbnz r3, 800a02e <__swsetup_r+0xc6>
  25262. 800a01c: f010 0080 ands.w r0, r0, #128 ; 0x80
  25263. 800a020: d1ba bne.n 8009f98 <__swsetup_r+0x30>
  25264. 800a022: bd70 pop {r4, r5, r6, pc}
  25265. 800a024: 0781 lsls r1, r0, #30
  25266. 800a026: bf58 it pl
  25267. 800a028: 6963 ldrpl r3, [r4, #20]
  25268. 800a02a: 60a3 str r3, [r4, #8]
  25269. 800a02c: e7f4 b.n 800a018 <__swsetup_r+0xb0>
  25270. 800a02e: 2000 movs r0, #0
  25271. 800a030: e7f7 b.n 800a022 <__swsetup_r+0xba>
  25272. 800a032: bf00 nop
  25273. 800a034: 24000184 .word 0x24000184
  25274. 800a038: 0800a9fc .word 0x0800a9fc
  25275. 800a03c: 0800aa1c .word 0x0800aa1c
  25276. 800a040: 0800a9dc .word 0x0800a9dc
  25277. 0800a044 <abort>:
  25278. 800a044: b508 push {r3, lr}
  25279. 800a046: 2006 movs r0, #6
  25280. 800a048: f000 fb04 bl 800a654 <raise>
  25281. 800a04c: 2001 movs r0, #1
  25282. 800a04e: f7f7 f8d1 bl 80011f4 <_exit>
  25283. ...
  25284. 0800a054 <__sflush_r>:
  25285. 800a054: 898a ldrh r2, [r1, #12]
  25286. 800a056: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
  25287. 800a05a: 4605 mov r5, r0
  25288. 800a05c: 0710 lsls r0, r2, #28
  25289. 800a05e: 460c mov r4, r1
  25290. 800a060: d458 bmi.n 800a114 <__sflush_r+0xc0>
  25291. 800a062: 684b ldr r3, [r1, #4]
  25292. 800a064: 2b00 cmp r3, #0
  25293. 800a066: dc05 bgt.n 800a074 <__sflush_r+0x20>
  25294. 800a068: 6c0b ldr r3, [r1, #64] ; 0x40
  25295. 800a06a: 2b00 cmp r3, #0
  25296. 800a06c: dc02 bgt.n 800a074 <__sflush_r+0x20>
  25297. 800a06e: 2000 movs r0, #0
  25298. 800a070: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
  25299. 800a074: 6ae6 ldr r6, [r4, #44] ; 0x2c
  25300. 800a076: 2e00 cmp r6, #0
  25301. 800a078: d0f9 beq.n 800a06e <__sflush_r+0x1a>
  25302. 800a07a: 2300 movs r3, #0
  25303. 800a07c: f412 5280 ands.w r2, r2, #4096 ; 0x1000
  25304. 800a080: 682f ldr r7, [r5, #0]
  25305. 800a082: 602b str r3, [r5, #0]
  25306. 800a084: d032 beq.n 800a0ec <__sflush_r+0x98>
  25307. 800a086: 6d60 ldr r0, [r4, #84] ; 0x54
  25308. 800a088: 89a3 ldrh r3, [r4, #12]
  25309. 800a08a: 075a lsls r2, r3, #29
  25310. 800a08c: d505 bpl.n 800a09a <__sflush_r+0x46>
  25311. 800a08e: 6863 ldr r3, [r4, #4]
  25312. 800a090: 1ac0 subs r0, r0, r3
  25313. 800a092: 6b63 ldr r3, [r4, #52] ; 0x34
  25314. 800a094: b10b cbz r3, 800a09a <__sflush_r+0x46>
  25315. 800a096: 6c23 ldr r3, [r4, #64] ; 0x40
  25316. 800a098: 1ac0 subs r0, r0, r3
  25317. 800a09a: 2300 movs r3, #0
  25318. 800a09c: 4602 mov r2, r0
  25319. 800a09e: 6ae6 ldr r6, [r4, #44] ; 0x2c
  25320. 800a0a0: 6a21 ldr r1, [r4, #32]
  25321. 800a0a2: 4628 mov r0, r5
  25322. 800a0a4: 47b0 blx r6
  25323. 800a0a6: 1c43 adds r3, r0, #1
  25324. 800a0a8: 89a3 ldrh r3, [r4, #12]
  25325. 800a0aa: d106 bne.n 800a0ba <__sflush_r+0x66>
  25326. 800a0ac: 6829 ldr r1, [r5, #0]
  25327. 800a0ae: 291d cmp r1, #29
  25328. 800a0b0: d82c bhi.n 800a10c <__sflush_r+0xb8>
  25329. 800a0b2: 4a2a ldr r2, [pc, #168] ; (800a15c <__sflush_r+0x108>)
  25330. 800a0b4: 40ca lsrs r2, r1
  25331. 800a0b6: 07d6 lsls r6, r2, #31
  25332. 800a0b8: d528 bpl.n 800a10c <__sflush_r+0xb8>
  25333. 800a0ba: 2200 movs r2, #0
  25334. 800a0bc: 6062 str r2, [r4, #4]
  25335. 800a0be: 04d9 lsls r1, r3, #19
  25336. 800a0c0: 6922 ldr r2, [r4, #16]
  25337. 800a0c2: 6022 str r2, [r4, #0]
  25338. 800a0c4: d504 bpl.n 800a0d0 <__sflush_r+0x7c>
  25339. 800a0c6: 1c42 adds r2, r0, #1
  25340. 800a0c8: d101 bne.n 800a0ce <__sflush_r+0x7a>
  25341. 800a0ca: 682b ldr r3, [r5, #0]
  25342. 800a0cc: b903 cbnz r3, 800a0d0 <__sflush_r+0x7c>
  25343. 800a0ce: 6560 str r0, [r4, #84] ; 0x54
  25344. 800a0d0: 6b61 ldr r1, [r4, #52] ; 0x34
  25345. 800a0d2: 602f str r7, [r5, #0]
  25346. 800a0d4: 2900 cmp r1, #0
  25347. 800a0d6: d0ca beq.n 800a06e <__sflush_r+0x1a>
  25348. 800a0d8: f104 0344 add.w r3, r4, #68 ; 0x44
  25349. 800a0dc: 4299 cmp r1, r3
  25350. 800a0de: d002 beq.n 800a0e6 <__sflush_r+0x92>
  25351. 800a0e0: 4628 mov r0, r5
  25352. 800a0e2: f000 f9d5 bl 800a490 <_free_r>
  25353. 800a0e6: 2000 movs r0, #0
  25354. 800a0e8: 6360 str r0, [r4, #52] ; 0x34
  25355. 800a0ea: e7c1 b.n 800a070 <__sflush_r+0x1c>
  25356. 800a0ec: 6a21 ldr r1, [r4, #32]
  25357. 800a0ee: 2301 movs r3, #1
  25358. 800a0f0: 4628 mov r0, r5
  25359. 800a0f2: 47b0 blx r6
  25360. 800a0f4: 1c41 adds r1, r0, #1
  25361. 800a0f6: d1c7 bne.n 800a088 <__sflush_r+0x34>
  25362. 800a0f8: 682b ldr r3, [r5, #0]
  25363. 800a0fa: 2b00 cmp r3, #0
  25364. 800a0fc: d0c4 beq.n 800a088 <__sflush_r+0x34>
  25365. 800a0fe: 2b1d cmp r3, #29
  25366. 800a100: d001 beq.n 800a106 <__sflush_r+0xb2>
  25367. 800a102: 2b16 cmp r3, #22
  25368. 800a104: d101 bne.n 800a10a <__sflush_r+0xb6>
  25369. 800a106: 602f str r7, [r5, #0]
  25370. 800a108: e7b1 b.n 800a06e <__sflush_r+0x1a>
  25371. 800a10a: 89a3 ldrh r3, [r4, #12]
  25372. 800a10c: f043 0340 orr.w r3, r3, #64 ; 0x40
  25373. 800a110: 81a3 strh r3, [r4, #12]
  25374. 800a112: e7ad b.n 800a070 <__sflush_r+0x1c>
  25375. 800a114: 690f ldr r7, [r1, #16]
  25376. 800a116: 2f00 cmp r7, #0
  25377. 800a118: d0a9 beq.n 800a06e <__sflush_r+0x1a>
  25378. 800a11a: 0793 lsls r3, r2, #30
  25379. 800a11c: 680e ldr r6, [r1, #0]
  25380. 800a11e: bf08 it eq
  25381. 800a120: 694b ldreq r3, [r1, #20]
  25382. 800a122: 600f str r7, [r1, #0]
  25383. 800a124: bf18 it ne
  25384. 800a126: 2300 movne r3, #0
  25385. 800a128: eba6 0807 sub.w r8, r6, r7
  25386. 800a12c: 608b str r3, [r1, #8]
  25387. 800a12e: f1b8 0f00 cmp.w r8, #0
  25388. 800a132: dd9c ble.n 800a06e <__sflush_r+0x1a>
  25389. 800a134: 6a21 ldr r1, [r4, #32]
  25390. 800a136: 6aa6 ldr r6, [r4, #40] ; 0x28
  25391. 800a138: 4643 mov r3, r8
  25392. 800a13a: 463a mov r2, r7
  25393. 800a13c: 4628 mov r0, r5
  25394. 800a13e: 47b0 blx r6
  25395. 800a140: 2800 cmp r0, #0
  25396. 800a142: dc06 bgt.n 800a152 <__sflush_r+0xfe>
  25397. 800a144: 89a3 ldrh r3, [r4, #12]
  25398. 800a146: f043 0340 orr.w r3, r3, #64 ; 0x40
  25399. 800a14a: 81a3 strh r3, [r4, #12]
  25400. 800a14c: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
  25401. 800a150: e78e b.n 800a070 <__sflush_r+0x1c>
  25402. 800a152: 4407 add r7, r0
  25403. 800a154: eba8 0800 sub.w r8, r8, r0
  25404. 800a158: e7e9 b.n 800a12e <__sflush_r+0xda>
  25405. 800a15a: bf00 nop
  25406. 800a15c: 20400001 .word 0x20400001
  25407. 0800a160 <_fflush_r>:
  25408. 800a160: b538 push {r3, r4, r5, lr}
  25409. 800a162: 690b ldr r3, [r1, #16]
  25410. 800a164: 4605 mov r5, r0
  25411. 800a166: 460c mov r4, r1
  25412. 800a168: b913 cbnz r3, 800a170 <_fflush_r+0x10>
  25413. 800a16a: 2500 movs r5, #0
  25414. 800a16c: 4628 mov r0, r5
  25415. 800a16e: bd38 pop {r3, r4, r5, pc}
  25416. 800a170: b118 cbz r0, 800a17a <_fflush_r+0x1a>
  25417. 800a172: 6983 ldr r3, [r0, #24]
  25418. 800a174: b90b cbnz r3, 800a17a <_fflush_r+0x1a>
  25419. 800a176: f000 f887 bl 800a288 <__sinit>
  25420. 800a17a: 4b14 ldr r3, [pc, #80] ; (800a1cc <_fflush_r+0x6c>)
  25421. 800a17c: 429c cmp r4, r3
  25422. 800a17e: d11b bne.n 800a1b8 <_fflush_r+0x58>
  25423. 800a180: 686c ldr r4, [r5, #4]
  25424. 800a182: f9b4 300c ldrsh.w r3, [r4, #12]
  25425. 800a186: 2b00 cmp r3, #0
  25426. 800a188: d0ef beq.n 800a16a <_fflush_r+0xa>
  25427. 800a18a: 6e62 ldr r2, [r4, #100] ; 0x64
  25428. 800a18c: 07d0 lsls r0, r2, #31
  25429. 800a18e: d404 bmi.n 800a19a <_fflush_r+0x3a>
  25430. 800a190: 0599 lsls r1, r3, #22
  25431. 800a192: d402 bmi.n 800a19a <_fflush_r+0x3a>
  25432. 800a194: 6da0 ldr r0, [r4, #88] ; 0x58
  25433. 800a196: f000 f915 bl 800a3c4 <__retarget_lock_acquire_recursive>
  25434. 800a19a: 4628 mov r0, r5
  25435. 800a19c: 4621 mov r1, r4
  25436. 800a19e: f7ff ff59 bl 800a054 <__sflush_r>
  25437. 800a1a2: 6e63 ldr r3, [r4, #100] ; 0x64
  25438. 800a1a4: 07da lsls r2, r3, #31
  25439. 800a1a6: 4605 mov r5, r0
  25440. 800a1a8: d4e0 bmi.n 800a16c <_fflush_r+0xc>
  25441. 800a1aa: 89a3 ldrh r3, [r4, #12]
  25442. 800a1ac: 059b lsls r3, r3, #22
  25443. 800a1ae: d4dd bmi.n 800a16c <_fflush_r+0xc>
  25444. 800a1b0: 6da0 ldr r0, [r4, #88] ; 0x58
  25445. 800a1b2: f000 f908 bl 800a3c6 <__retarget_lock_release_recursive>
  25446. 800a1b6: e7d9 b.n 800a16c <_fflush_r+0xc>
  25447. 800a1b8: 4b05 ldr r3, [pc, #20] ; (800a1d0 <_fflush_r+0x70>)
  25448. 800a1ba: 429c cmp r4, r3
  25449. 800a1bc: d101 bne.n 800a1c2 <_fflush_r+0x62>
  25450. 800a1be: 68ac ldr r4, [r5, #8]
  25451. 800a1c0: e7df b.n 800a182 <_fflush_r+0x22>
  25452. 800a1c2: 4b04 ldr r3, [pc, #16] ; (800a1d4 <_fflush_r+0x74>)
  25453. 800a1c4: 429c cmp r4, r3
  25454. 800a1c6: bf08 it eq
  25455. 800a1c8: 68ec ldreq r4, [r5, #12]
  25456. 800a1ca: e7da b.n 800a182 <_fflush_r+0x22>
  25457. 800a1cc: 0800a9fc .word 0x0800a9fc
  25458. 800a1d0: 0800aa1c .word 0x0800aa1c
  25459. 800a1d4: 0800a9dc .word 0x0800a9dc
  25460. 0800a1d8 <std>:
  25461. 800a1d8: 2300 movs r3, #0
  25462. 800a1da: b510 push {r4, lr}
  25463. 800a1dc: 4604 mov r4, r0
  25464. 800a1de: e9c0 3300 strd r3, r3, [r0]
  25465. 800a1e2: e9c0 3304 strd r3, r3, [r0, #16]
  25466. 800a1e6: 6083 str r3, [r0, #8]
  25467. 800a1e8: 8181 strh r1, [r0, #12]
  25468. 800a1ea: 6643 str r3, [r0, #100] ; 0x64
  25469. 800a1ec: 81c2 strh r2, [r0, #14]
  25470. 800a1ee: 6183 str r3, [r0, #24]
  25471. 800a1f0: 4619 mov r1, r3
  25472. 800a1f2: 2208 movs r2, #8
  25473. 800a1f4: 305c adds r0, #92 ; 0x5c
  25474. 800a1f6: f7ff fb6f bl 80098d8 <memset>
  25475. 800a1fa: 4b05 ldr r3, [pc, #20] ; (800a210 <std+0x38>)
  25476. 800a1fc: 6263 str r3, [r4, #36] ; 0x24
  25477. 800a1fe: 4b05 ldr r3, [pc, #20] ; (800a214 <std+0x3c>)
  25478. 800a200: 62a3 str r3, [r4, #40] ; 0x28
  25479. 800a202: 4b05 ldr r3, [pc, #20] ; (800a218 <std+0x40>)
  25480. 800a204: 62e3 str r3, [r4, #44] ; 0x2c
  25481. 800a206: 4b05 ldr r3, [pc, #20] ; (800a21c <std+0x44>)
  25482. 800a208: 6224 str r4, [r4, #32]
  25483. 800a20a: 6323 str r3, [r4, #48] ; 0x30
  25484. 800a20c: bd10 pop {r4, pc}
  25485. 800a20e: bf00 nop
  25486. 800a210: 0800a68d .word 0x0800a68d
  25487. 800a214: 0800a6af .word 0x0800a6af
  25488. 800a218: 0800a6e7 .word 0x0800a6e7
  25489. 800a21c: 0800a70b .word 0x0800a70b
  25490. 0800a220 <_cleanup_r>:
  25491. 800a220: 4901 ldr r1, [pc, #4] ; (800a228 <_cleanup_r+0x8>)
  25492. 800a222: f000 b8af b.w 800a384 <_fwalk_reent>
  25493. 800a226: bf00 nop
  25494. 800a228: 0800a161 .word 0x0800a161
  25495. 0800a22c <__sfmoreglue>:
  25496. 800a22c: b570 push {r4, r5, r6, lr}
  25497. 800a22e: 1e4a subs r2, r1, #1
  25498. 800a230: 2568 movs r5, #104 ; 0x68
  25499. 800a232: 4355 muls r5, r2
  25500. 800a234: 460e mov r6, r1
  25501. 800a236: f105 0174 add.w r1, r5, #116 ; 0x74
  25502. 800a23a: f000 f979 bl 800a530 <_malloc_r>
  25503. 800a23e: 4604 mov r4, r0
  25504. 800a240: b140 cbz r0, 800a254 <__sfmoreglue+0x28>
  25505. 800a242: 2100 movs r1, #0
  25506. 800a244: e9c0 1600 strd r1, r6, [r0]
  25507. 800a248: 300c adds r0, #12
  25508. 800a24a: 60a0 str r0, [r4, #8]
  25509. 800a24c: f105 0268 add.w r2, r5, #104 ; 0x68
  25510. 800a250: f7ff fb42 bl 80098d8 <memset>
  25511. 800a254: 4620 mov r0, r4
  25512. 800a256: bd70 pop {r4, r5, r6, pc}
  25513. 0800a258 <__sfp_lock_acquire>:
  25514. 800a258: 4801 ldr r0, [pc, #4] ; (800a260 <__sfp_lock_acquire+0x8>)
  25515. 800a25a: f000 b8b3 b.w 800a3c4 <__retarget_lock_acquire_recursive>
  25516. 800a25e: bf00 nop
  25517. 800a260: 24001d6c .word 0x24001d6c
  25518. 0800a264 <__sfp_lock_release>:
  25519. 800a264: 4801 ldr r0, [pc, #4] ; (800a26c <__sfp_lock_release+0x8>)
  25520. 800a266: f000 b8ae b.w 800a3c6 <__retarget_lock_release_recursive>
  25521. 800a26a: bf00 nop
  25522. 800a26c: 24001d6c .word 0x24001d6c
  25523. 0800a270 <__sinit_lock_acquire>:
  25524. 800a270: 4801 ldr r0, [pc, #4] ; (800a278 <__sinit_lock_acquire+0x8>)
  25525. 800a272: f000 b8a7 b.w 800a3c4 <__retarget_lock_acquire_recursive>
  25526. 800a276: bf00 nop
  25527. 800a278: 24001d67 .word 0x24001d67
  25528. 0800a27c <__sinit_lock_release>:
  25529. 800a27c: 4801 ldr r0, [pc, #4] ; (800a284 <__sinit_lock_release+0x8>)
  25530. 800a27e: f000 b8a2 b.w 800a3c6 <__retarget_lock_release_recursive>
  25531. 800a282: bf00 nop
  25532. 800a284: 24001d67 .word 0x24001d67
  25533. 0800a288 <__sinit>:
  25534. 800a288: b510 push {r4, lr}
  25535. 800a28a: 4604 mov r4, r0
  25536. 800a28c: f7ff fff0 bl 800a270 <__sinit_lock_acquire>
  25537. 800a290: 69a3 ldr r3, [r4, #24]
  25538. 800a292: b11b cbz r3, 800a29c <__sinit+0x14>
  25539. 800a294: e8bd 4010 ldmia.w sp!, {r4, lr}
  25540. 800a298: f7ff bff0 b.w 800a27c <__sinit_lock_release>
  25541. 800a29c: e9c4 3312 strd r3, r3, [r4, #72] ; 0x48
  25542. 800a2a0: 6523 str r3, [r4, #80] ; 0x50
  25543. 800a2a2: 4b13 ldr r3, [pc, #76] ; (800a2f0 <__sinit+0x68>)
  25544. 800a2a4: 4a13 ldr r2, [pc, #76] ; (800a2f4 <__sinit+0x6c>)
  25545. 800a2a6: 681b ldr r3, [r3, #0]
  25546. 800a2a8: 62a2 str r2, [r4, #40] ; 0x28
  25547. 800a2aa: 42a3 cmp r3, r4
  25548. 800a2ac: bf04 itt eq
  25549. 800a2ae: 2301 moveq r3, #1
  25550. 800a2b0: 61a3 streq r3, [r4, #24]
  25551. 800a2b2: 4620 mov r0, r4
  25552. 800a2b4: f000 f820 bl 800a2f8 <__sfp>
  25553. 800a2b8: 6060 str r0, [r4, #4]
  25554. 800a2ba: 4620 mov r0, r4
  25555. 800a2bc: f000 f81c bl 800a2f8 <__sfp>
  25556. 800a2c0: 60a0 str r0, [r4, #8]
  25557. 800a2c2: 4620 mov r0, r4
  25558. 800a2c4: f000 f818 bl 800a2f8 <__sfp>
  25559. 800a2c8: 2200 movs r2, #0
  25560. 800a2ca: 60e0 str r0, [r4, #12]
  25561. 800a2cc: 2104 movs r1, #4
  25562. 800a2ce: 6860 ldr r0, [r4, #4]
  25563. 800a2d0: f7ff ff82 bl 800a1d8 <std>
  25564. 800a2d4: 68a0 ldr r0, [r4, #8]
  25565. 800a2d6: 2201 movs r2, #1
  25566. 800a2d8: 2109 movs r1, #9
  25567. 800a2da: f7ff ff7d bl 800a1d8 <std>
  25568. 800a2de: 68e0 ldr r0, [r4, #12]
  25569. 800a2e0: 2202 movs r2, #2
  25570. 800a2e2: 2112 movs r1, #18
  25571. 800a2e4: f7ff ff78 bl 800a1d8 <std>
  25572. 800a2e8: 2301 movs r3, #1
  25573. 800a2ea: 61a3 str r3, [r4, #24]
  25574. 800a2ec: e7d2 b.n 800a294 <__sinit+0xc>
  25575. 800a2ee: bf00 nop
  25576. 800a2f0: 0800a9a4 .word 0x0800a9a4
  25577. 800a2f4: 0800a221 .word 0x0800a221
  25578. 0800a2f8 <__sfp>:
  25579. 800a2f8: b5f8 push {r3, r4, r5, r6, r7, lr}
  25580. 800a2fa: 4607 mov r7, r0
  25581. 800a2fc: f7ff ffac bl 800a258 <__sfp_lock_acquire>
  25582. 800a300: 4b1e ldr r3, [pc, #120] ; (800a37c <__sfp+0x84>)
  25583. 800a302: 681e ldr r6, [r3, #0]
  25584. 800a304: 69b3 ldr r3, [r6, #24]
  25585. 800a306: b913 cbnz r3, 800a30e <__sfp+0x16>
  25586. 800a308: 4630 mov r0, r6
  25587. 800a30a: f7ff ffbd bl 800a288 <__sinit>
  25588. 800a30e: 3648 adds r6, #72 ; 0x48
  25589. 800a310: e9d6 3401 ldrd r3, r4, [r6, #4]
  25590. 800a314: 3b01 subs r3, #1
  25591. 800a316: d503 bpl.n 800a320 <__sfp+0x28>
  25592. 800a318: 6833 ldr r3, [r6, #0]
  25593. 800a31a: b30b cbz r3, 800a360 <__sfp+0x68>
  25594. 800a31c: 6836 ldr r6, [r6, #0]
  25595. 800a31e: e7f7 b.n 800a310 <__sfp+0x18>
  25596. 800a320: f9b4 500c ldrsh.w r5, [r4, #12]
  25597. 800a324: b9d5 cbnz r5, 800a35c <__sfp+0x64>
  25598. 800a326: 4b16 ldr r3, [pc, #88] ; (800a380 <__sfp+0x88>)
  25599. 800a328: 60e3 str r3, [r4, #12]
  25600. 800a32a: f104 0058 add.w r0, r4, #88 ; 0x58
  25601. 800a32e: 6665 str r5, [r4, #100] ; 0x64
  25602. 800a330: f000 f847 bl 800a3c2 <__retarget_lock_init_recursive>
  25603. 800a334: f7ff ff96 bl 800a264 <__sfp_lock_release>
  25604. 800a338: e9c4 5501 strd r5, r5, [r4, #4]
  25605. 800a33c: e9c4 5504 strd r5, r5, [r4, #16]
  25606. 800a340: 6025 str r5, [r4, #0]
  25607. 800a342: 61a5 str r5, [r4, #24]
  25608. 800a344: 2208 movs r2, #8
  25609. 800a346: 4629 mov r1, r5
  25610. 800a348: f104 005c add.w r0, r4, #92 ; 0x5c
  25611. 800a34c: f7ff fac4 bl 80098d8 <memset>
  25612. 800a350: e9c4 550d strd r5, r5, [r4, #52] ; 0x34
  25613. 800a354: e9c4 5512 strd r5, r5, [r4, #72] ; 0x48
  25614. 800a358: 4620 mov r0, r4
  25615. 800a35a: bdf8 pop {r3, r4, r5, r6, r7, pc}
  25616. 800a35c: 3468 adds r4, #104 ; 0x68
  25617. 800a35e: e7d9 b.n 800a314 <__sfp+0x1c>
  25618. 800a360: 2104 movs r1, #4
  25619. 800a362: 4638 mov r0, r7
  25620. 800a364: f7ff ff62 bl 800a22c <__sfmoreglue>
  25621. 800a368: 4604 mov r4, r0
  25622. 800a36a: 6030 str r0, [r6, #0]
  25623. 800a36c: 2800 cmp r0, #0
  25624. 800a36e: d1d5 bne.n 800a31c <__sfp+0x24>
  25625. 800a370: f7ff ff78 bl 800a264 <__sfp_lock_release>
  25626. 800a374: 230c movs r3, #12
  25627. 800a376: 603b str r3, [r7, #0]
  25628. 800a378: e7ee b.n 800a358 <__sfp+0x60>
  25629. 800a37a: bf00 nop
  25630. 800a37c: 0800a9a4 .word 0x0800a9a4
  25631. 800a380: ffff0001 .word 0xffff0001
  25632. 0800a384 <_fwalk_reent>:
  25633. 800a384: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
  25634. 800a388: 4606 mov r6, r0
  25635. 800a38a: 4688 mov r8, r1
  25636. 800a38c: f100 0448 add.w r4, r0, #72 ; 0x48
  25637. 800a390: 2700 movs r7, #0
  25638. 800a392: e9d4 9501 ldrd r9, r5, [r4, #4]
  25639. 800a396: f1b9 0901 subs.w r9, r9, #1
  25640. 800a39a: d505 bpl.n 800a3a8 <_fwalk_reent+0x24>
  25641. 800a39c: 6824 ldr r4, [r4, #0]
  25642. 800a39e: 2c00 cmp r4, #0
  25643. 800a3a0: d1f7 bne.n 800a392 <_fwalk_reent+0xe>
  25644. 800a3a2: 4638 mov r0, r7
  25645. 800a3a4: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
  25646. 800a3a8: 89ab ldrh r3, [r5, #12]
  25647. 800a3aa: 2b01 cmp r3, #1
  25648. 800a3ac: d907 bls.n 800a3be <_fwalk_reent+0x3a>
  25649. 800a3ae: f9b5 300e ldrsh.w r3, [r5, #14]
  25650. 800a3b2: 3301 adds r3, #1
  25651. 800a3b4: d003 beq.n 800a3be <_fwalk_reent+0x3a>
  25652. 800a3b6: 4629 mov r1, r5
  25653. 800a3b8: 4630 mov r0, r6
  25654. 800a3ba: 47c0 blx r8
  25655. 800a3bc: 4307 orrs r7, r0
  25656. 800a3be: 3568 adds r5, #104 ; 0x68
  25657. 800a3c0: e7e9 b.n 800a396 <_fwalk_reent+0x12>
  25658. 0800a3c2 <__retarget_lock_init_recursive>:
  25659. 800a3c2: 4770 bx lr
  25660. 0800a3c4 <__retarget_lock_acquire_recursive>:
  25661. 800a3c4: 4770 bx lr
  25662. 0800a3c6 <__retarget_lock_release_recursive>:
  25663. 800a3c6: 4770 bx lr
  25664. 0800a3c8 <__swhatbuf_r>:
  25665. 800a3c8: b570 push {r4, r5, r6, lr}
  25666. 800a3ca: 460e mov r6, r1
  25667. 800a3cc: f9b1 100e ldrsh.w r1, [r1, #14]
  25668. 800a3d0: 2900 cmp r1, #0
  25669. 800a3d2: b096 sub sp, #88 ; 0x58
  25670. 800a3d4: 4614 mov r4, r2
  25671. 800a3d6: 461d mov r5, r3
  25672. 800a3d8: da07 bge.n 800a3ea <__swhatbuf_r+0x22>
  25673. 800a3da: 2300 movs r3, #0
  25674. 800a3dc: 602b str r3, [r5, #0]
  25675. 800a3de: 89b3 ldrh r3, [r6, #12]
  25676. 800a3e0: 061a lsls r2, r3, #24
  25677. 800a3e2: d410 bmi.n 800a406 <__swhatbuf_r+0x3e>
  25678. 800a3e4: f44f 6380 mov.w r3, #1024 ; 0x400
  25679. 800a3e8: e00e b.n 800a408 <__swhatbuf_r+0x40>
  25680. 800a3ea: 466a mov r2, sp
  25681. 800a3ec: f000 f9b4 bl 800a758 <_fstat_r>
  25682. 800a3f0: 2800 cmp r0, #0
  25683. 800a3f2: dbf2 blt.n 800a3da <__swhatbuf_r+0x12>
  25684. 800a3f4: 9a01 ldr r2, [sp, #4]
  25685. 800a3f6: f402 4270 and.w r2, r2, #61440 ; 0xf000
  25686. 800a3fa: f5a2 5300 sub.w r3, r2, #8192 ; 0x2000
  25687. 800a3fe: 425a negs r2, r3
  25688. 800a400: 415a adcs r2, r3
  25689. 800a402: 602a str r2, [r5, #0]
  25690. 800a404: e7ee b.n 800a3e4 <__swhatbuf_r+0x1c>
  25691. 800a406: 2340 movs r3, #64 ; 0x40
  25692. 800a408: 2000 movs r0, #0
  25693. 800a40a: 6023 str r3, [r4, #0]
  25694. 800a40c: b016 add sp, #88 ; 0x58
  25695. 800a40e: bd70 pop {r4, r5, r6, pc}
  25696. 0800a410 <__smakebuf_r>:
  25697. 800a410: 898b ldrh r3, [r1, #12]
  25698. 800a412: b573 push {r0, r1, r4, r5, r6, lr}
  25699. 800a414: 079d lsls r5, r3, #30
  25700. 800a416: 4606 mov r6, r0
  25701. 800a418: 460c mov r4, r1
  25702. 800a41a: d507 bpl.n 800a42c <__smakebuf_r+0x1c>
  25703. 800a41c: f104 0347 add.w r3, r4, #71 ; 0x47
  25704. 800a420: 6023 str r3, [r4, #0]
  25705. 800a422: 6123 str r3, [r4, #16]
  25706. 800a424: 2301 movs r3, #1
  25707. 800a426: 6163 str r3, [r4, #20]
  25708. 800a428: b002 add sp, #8
  25709. 800a42a: bd70 pop {r4, r5, r6, pc}
  25710. 800a42c: ab01 add r3, sp, #4
  25711. 800a42e: 466a mov r2, sp
  25712. 800a430: f7ff ffca bl 800a3c8 <__swhatbuf_r>
  25713. 800a434: 9900 ldr r1, [sp, #0]
  25714. 800a436: 4605 mov r5, r0
  25715. 800a438: 4630 mov r0, r6
  25716. 800a43a: f000 f879 bl 800a530 <_malloc_r>
  25717. 800a43e: b948 cbnz r0, 800a454 <__smakebuf_r+0x44>
  25718. 800a440: f9b4 300c ldrsh.w r3, [r4, #12]
  25719. 800a444: 059a lsls r2, r3, #22
  25720. 800a446: d4ef bmi.n 800a428 <__smakebuf_r+0x18>
  25721. 800a448: f023 0303 bic.w r3, r3, #3
  25722. 800a44c: f043 0302 orr.w r3, r3, #2
  25723. 800a450: 81a3 strh r3, [r4, #12]
  25724. 800a452: e7e3 b.n 800a41c <__smakebuf_r+0xc>
  25725. 800a454: 4b0d ldr r3, [pc, #52] ; (800a48c <__smakebuf_r+0x7c>)
  25726. 800a456: 62b3 str r3, [r6, #40] ; 0x28
  25727. 800a458: 89a3 ldrh r3, [r4, #12]
  25728. 800a45a: 6020 str r0, [r4, #0]
  25729. 800a45c: f043 0380 orr.w r3, r3, #128 ; 0x80
  25730. 800a460: 81a3 strh r3, [r4, #12]
  25731. 800a462: 9b00 ldr r3, [sp, #0]
  25732. 800a464: 6163 str r3, [r4, #20]
  25733. 800a466: 9b01 ldr r3, [sp, #4]
  25734. 800a468: 6120 str r0, [r4, #16]
  25735. 800a46a: b15b cbz r3, 800a484 <__smakebuf_r+0x74>
  25736. 800a46c: f9b4 100e ldrsh.w r1, [r4, #14]
  25737. 800a470: 4630 mov r0, r6
  25738. 800a472: f000 f983 bl 800a77c <_isatty_r>
  25739. 800a476: b128 cbz r0, 800a484 <__smakebuf_r+0x74>
  25740. 800a478: 89a3 ldrh r3, [r4, #12]
  25741. 800a47a: f023 0303 bic.w r3, r3, #3
  25742. 800a47e: f043 0301 orr.w r3, r3, #1
  25743. 800a482: 81a3 strh r3, [r4, #12]
  25744. 800a484: 89a0 ldrh r0, [r4, #12]
  25745. 800a486: 4305 orrs r5, r0
  25746. 800a488: 81a5 strh r5, [r4, #12]
  25747. 800a48a: e7cd b.n 800a428 <__smakebuf_r+0x18>
  25748. 800a48c: 0800a221 .word 0x0800a221
  25749. 0800a490 <_free_r>:
  25750. 800a490: b537 push {r0, r1, r2, r4, r5, lr}
  25751. 800a492: 2900 cmp r1, #0
  25752. 800a494: d048 beq.n 800a528 <_free_r+0x98>
  25753. 800a496: f851 3c04 ldr.w r3, [r1, #-4]
  25754. 800a49a: 9001 str r0, [sp, #4]
  25755. 800a49c: 2b00 cmp r3, #0
  25756. 800a49e: f1a1 0404 sub.w r4, r1, #4
  25757. 800a4a2: bfb8 it lt
  25758. 800a4a4: 18e4 addlt r4, r4, r3
  25759. 800a4a6: f000 f98b bl 800a7c0 <__malloc_lock>
  25760. 800a4aa: 4a20 ldr r2, [pc, #128] ; (800a52c <_free_r+0x9c>)
  25761. 800a4ac: 9801 ldr r0, [sp, #4]
  25762. 800a4ae: 6813 ldr r3, [r2, #0]
  25763. 800a4b0: 4615 mov r5, r2
  25764. 800a4b2: b933 cbnz r3, 800a4c2 <_free_r+0x32>
  25765. 800a4b4: 6063 str r3, [r4, #4]
  25766. 800a4b6: 6014 str r4, [r2, #0]
  25767. 800a4b8: b003 add sp, #12
  25768. 800a4ba: e8bd 4030 ldmia.w sp!, {r4, r5, lr}
  25769. 800a4be: f000 b985 b.w 800a7cc <__malloc_unlock>
  25770. 800a4c2: 42a3 cmp r3, r4
  25771. 800a4c4: d90b bls.n 800a4de <_free_r+0x4e>
  25772. 800a4c6: 6821 ldr r1, [r4, #0]
  25773. 800a4c8: 1862 adds r2, r4, r1
  25774. 800a4ca: 4293 cmp r3, r2
  25775. 800a4cc: bf04 itt eq
  25776. 800a4ce: 681a ldreq r2, [r3, #0]
  25777. 800a4d0: 685b ldreq r3, [r3, #4]
  25778. 800a4d2: 6063 str r3, [r4, #4]
  25779. 800a4d4: bf04 itt eq
  25780. 800a4d6: 1852 addeq r2, r2, r1
  25781. 800a4d8: 6022 streq r2, [r4, #0]
  25782. 800a4da: 602c str r4, [r5, #0]
  25783. 800a4dc: e7ec b.n 800a4b8 <_free_r+0x28>
  25784. 800a4de: 461a mov r2, r3
  25785. 800a4e0: 685b ldr r3, [r3, #4]
  25786. 800a4e2: b10b cbz r3, 800a4e8 <_free_r+0x58>
  25787. 800a4e4: 42a3 cmp r3, r4
  25788. 800a4e6: d9fa bls.n 800a4de <_free_r+0x4e>
  25789. 800a4e8: 6811 ldr r1, [r2, #0]
  25790. 800a4ea: 1855 adds r5, r2, r1
  25791. 800a4ec: 42a5 cmp r5, r4
  25792. 800a4ee: d10b bne.n 800a508 <_free_r+0x78>
  25793. 800a4f0: 6824 ldr r4, [r4, #0]
  25794. 800a4f2: 4421 add r1, r4
  25795. 800a4f4: 1854 adds r4, r2, r1
  25796. 800a4f6: 42a3 cmp r3, r4
  25797. 800a4f8: 6011 str r1, [r2, #0]
  25798. 800a4fa: d1dd bne.n 800a4b8 <_free_r+0x28>
  25799. 800a4fc: 681c ldr r4, [r3, #0]
  25800. 800a4fe: 685b ldr r3, [r3, #4]
  25801. 800a500: 6053 str r3, [r2, #4]
  25802. 800a502: 4421 add r1, r4
  25803. 800a504: 6011 str r1, [r2, #0]
  25804. 800a506: e7d7 b.n 800a4b8 <_free_r+0x28>
  25805. 800a508: d902 bls.n 800a510 <_free_r+0x80>
  25806. 800a50a: 230c movs r3, #12
  25807. 800a50c: 6003 str r3, [r0, #0]
  25808. 800a50e: e7d3 b.n 800a4b8 <_free_r+0x28>
  25809. 800a510: 6825 ldr r5, [r4, #0]
  25810. 800a512: 1961 adds r1, r4, r5
  25811. 800a514: 428b cmp r3, r1
  25812. 800a516: bf04 itt eq
  25813. 800a518: 6819 ldreq r1, [r3, #0]
  25814. 800a51a: 685b ldreq r3, [r3, #4]
  25815. 800a51c: 6063 str r3, [r4, #4]
  25816. 800a51e: bf04 itt eq
  25817. 800a520: 1949 addeq r1, r1, r5
  25818. 800a522: 6021 streq r1, [r4, #0]
  25819. 800a524: 6054 str r4, [r2, #4]
  25820. 800a526: e7c7 b.n 800a4b8 <_free_r+0x28>
  25821. 800a528: b003 add sp, #12
  25822. 800a52a: bd30 pop {r4, r5, pc}
  25823. 800a52c: 24000434 .word 0x24000434
  25824. 0800a530 <_malloc_r>:
  25825. 800a530: b5f8 push {r3, r4, r5, r6, r7, lr}
  25826. 800a532: 1ccd adds r5, r1, #3
  25827. 800a534: f025 0503 bic.w r5, r5, #3
  25828. 800a538: 3508 adds r5, #8
  25829. 800a53a: 2d0c cmp r5, #12
  25830. 800a53c: bf38 it cc
  25831. 800a53e: 250c movcc r5, #12
  25832. 800a540: 2d00 cmp r5, #0
  25833. 800a542: 4606 mov r6, r0
  25834. 800a544: db01 blt.n 800a54a <_malloc_r+0x1a>
  25835. 800a546: 42a9 cmp r1, r5
  25836. 800a548: d903 bls.n 800a552 <_malloc_r+0x22>
  25837. 800a54a: 230c movs r3, #12
  25838. 800a54c: 6033 str r3, [r6, #0]
  25839. 800a54e: 2000 movs r0, #0
  25840. 800a550: bdf8 pop {r3, r4, r5, r6, r7, pc}
  25841. 800a552: f000 f935 bl 800a7c0 <__malloc_lock>
  25842. 800a556: 4921 ldr r1, [pc, #132] ; (800a5dc <_malloc_r+0xac>)
  25843. 800a558: 680a ldr r2, [r1, #0]
  25844. 800a55a: 4614 mov r4, r2
  25845. 800a55c: b99c cbnz r4, 800a586 <_malloc_r+0x56>
  25846. 800a55e: 4f20 ldr r7, [pc, #128] ; (800a5e0 <_malloc_r+0xb0>)
  25847. 800a560: 683b ldr r3, [r7, #0]
  25848. 800a562: b923 cbnz r3, 800a56e <_malloc_r+0x3e>
  25849. 800a564: 4621 mov r1, r4
  25850. 800a566: 4630 mov r0, r6
  25851. 800a568: f000 f83c bl 800a5e4 <_sbrk_r>
  25852. 800a56c: 6038 str r0, [r7, #0]
  25853. 800a56e: 4629 mov r1, r5
  25854. 800a570: 4630 mov r0, r6
  25855. 800a572: f000 f837 bl 800a5e4 <_sbrk_r>
  25856. 800a576: 1c43 adds r3, r0, #1
  25857. 800a578: d123 bne.n 800a5c2 <_malloc_r+0x92>
  25858. 800a57a: 230c movs r3, #12
  25859. 800a57c: 6033 str r3, [r6, #0]
  25860. 800a57e: 4630 mov r0, r6
  25861. 800a580: f000 f924 bl 800a7cc <__malloc_unlock>
  25862. 800a584: e7e3 b.n 800a54e <_malloc_r+0x1e>
  25863. 800a586: 6823 ldr r3, [r4, #0]
  25864. 800a588: 1b5b subs r3, r3, r5
  25865. 800a58a: d417 bmi.n 800a5bc <_malloc_r+0x8c>
  25866. 800a58c: 2b0b cmp r3, #11
  25867. 800a58e: d903 bls.n 800a598 <_malloc_r+0x68>
  25868. 800a590: 6023 str r3, [r4, #0]
  25869. 800a592: 441c add r4, r3
  25870. 800a594: 6025 str r5, [r4, #0]
  25871. 800a596: e004 b.n 800a5a2 <_malloc_r+0x72>
  25872. 800a598: 6863 ldr r3, [r4, #4]
  25873. 800a59a: 42a2 cmp r2, r4
  25874. 800a59c: bf0c ite eq
  25875. 800a59e: 600b streq r3, [r1, #0]
  25876. 800a5a0: 6053 strne r3, [r2, #4]
  25877. 800a5a2: 4630 mov r0, r6
  25878. 800a5a4: f000 f912 bl 800a7cc <__malloc_unlock>
  25879. 800a5a8: f104 000b add.w r0, r4, #11
  25880. 800a5ac: 1d23 adds r3, r4, #4
  25881. 800a5ae: f020 0007 bic.w r0, r0, #7
  25882. 800a5b2: 1ac2 subs r2, r0, r3
  25883. 800a5b4: d0cc beq.n 800a550 <_malloc_r+0x20>
  25884. 800a5b6: 1a1b subs r3, r3, r0
  25885. 800a5b8: 50a3 str r3, [r4, r2]
  25886. 800a5ba: e7c9 b.n 800a550 <_malloc_r+0x20>
  25887. 800a5bc: 4622 mov r2, r4
  25888. 800a5be: 6864 ldr r4, [r4, #4]
  25889. 800a5c0: e7cc b.n 800a55c <_malloc_r+0x2c>
  25890. 800a5c2: 1cc4 adds r4, r0, #3
  25891. 800a5c4: f024 0403 bic.w r4, r4, #3
  25892. 800a5c8: 42a0 cmp r0, r4
  25893. 800a5ca: d0e3 beq.n 800a594 <_malloc_r+0x64>
  25894. 800a5cc: 1a21 subs r1, r4, r0
  25895. 800a5ce: 4630 mov r0, r6
  25896. 800a5d0: f000 f808 bl 800a5e4 <_sbrk_r>
  25897. 800a5d4: 3001 adds r0, #1
  25898. 800a5d6: d1dd bne.n 800a594 <_malloc_r+0x64>
  25899. 800a5d8: e7cf b.n 800a57a <_malloc_r+0x4a>
  25900. 800a5da: bf00 nop
  25901. 800a5dc: 24000434 .word 0x24000434
  25902. 800a5e0: 24000438 .word 0x24000438
  25903. 0800a5e4 <_sbrk_r>:
  25904. 800a5e4: b538 push {r3, r4, r5, lr}
  25905. 800a5e6: 4d06 ldr r5, [pc, #24] ; (800a600 <_sbrk_r+0x1c>)
  25906. 800a5e8: 2300 movs r3, #0
  25907. 800a5ea: 4604 mov r4, r0
  25908. 800a5ec: 4608 mov r0, r1
  25909. 800a5ee: 602b str r3, [r5, #0]
  25910. 800a5f0: f7f6 fe78 bl 80012e4 <_sbrk>
  25911. 800a5f4: 1c43 adds r3, r0, #1
  25912. 800a5f6: d102 bne.n 800a5fe <_sbrk_r+0x1a>
  25913. 800a5f8: 682b ldr r3, [r5, #0]
  25914. 800a5fa: b103 cbz r3, 800a5fe <_sbrk_r+0x1a>
  25915. 800a5fc: 6023 str r3, [r4, #0]
  25916. 800a5fe: bd38 pop {r3, r4, r5, pc}
  25917. 800a600: 24001d70 .word 0x24001d70
  25918. 0800a604 <_raise_r>:
  25919. 800a604: 291f cmp r1, #31
  25920. 800a606: b538 push {r3, r4, r5, lr}
  25921. 800a608: 4604 mov r4, r0
  25922. 800a60a: 460d mov r5, r1
  25923. 800a60c: d904 bls.n 800a618 <_raise_r+0x14>
  25924. 800a60e: 2316 movs r3, #22
  25925. 800a610: 6003 str r3, [r0, #0]
  25926. 800a612: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
  25927. 800a616: bd38 pop {r3, r4, r5, pc}
  25928. 800a618: 6c42 ldr r2, [r0, #68] ; 0x44
  25929. 800a61a: b112 cbz r2, 800a622 <_raise_r+0x1e>
  25930. 800a61c: f852 3021 ldr.w r3, [r2, r1, lsl #2]
  25931. 800a620: b94b cbnz r3, 800a636 <_raise_r+0x32>
  25932. 800a622: 4620 mov r0, r4
  25933. 800a624: f000 f830 bl 800a688 <_getpid_r>
  25934. 800a628: 462a mov r2, r5
  25935. 800a62a: 4601 mov r1, r0
  25936. 800a62c: 4620 mov r0, r4
  25937. 800a62e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
  25938. 800a632: f000 b817 b.w 800a664 <_kill_r>
  25939. 800a636: 2b01 cmp r3, #1
  25940. 800a638: d00a beq.n 800a650 <_raise_r+0x4c>
  25941. 800a63a: 1c59 adds r1, r3, #1
  25942. 800a63c: d103 bne.n 800a646 <_raise_r+0x42>
  25943. 800a63e: 2316 movs r3, #22
  25944. 800a640: 6003 str r3, [r0, #0]
  25945. 800a642: 2001 movs r0, #1
  25946. 800a644: e7e7 b.n 800a616 <_raise_r+0x12>
  25947. 800a646: 2400 movs r4, #0
  25948. 800a648: f842 4025 str.w r4, [r2, r5, lsl #2]
  25949. 800a64c: 4628 mov r0, r5
  25950. 800a64e: 4798 blx r3
  25951. 800a650: 2000 movs r0, #0
  25952. 800a652: e7e0 b.n 800a616 <_raise_r+0x12>
  25953. 0800a654 <raise>:
  25954. 800a654: 4b02 ldr r3, [pc, #8] ; (800a660 <raise+0xc>)
  25955. 800a656: 4601 mov r1, r0
  25956. 800a658: 6818 ldr r0, [r3, #0]
  25957. 800a65a: f7ff bfd3 b.w 800a604 <_raise_r>
  25958. 800a65e: bf00 nop
  25959. 800a660: 24000184 .word 0x24000184
  25960. 0800a664 <_kill_r>:
  25961. 800a664: b538 push {r3, r4, r5, lr}
  25962. 800a666: 4d07 ldr r5, [pc, #28] ; (800a684 <_kill_r+0x20>)
  25963. 800a668: 2300 movs r3, #0
  25964. 800a66a: 4604 mov r4, r0
  25965. 800a66c: 4608 mov r0, r1
  25966. 800a66e: 4611 mov r1, r2
  25967. 800a670: 602b str r3, [r5, #0]
  25968. 800a672: f7f6 fdaf bl 80011d4 <_kill>
  25969. 800a676: 1c43 adds r3, r0, #1
  25970. 800a678: d102 bne.n 800a680 <_kill_r+0x1c>
  25971. 800a67a: 682b ldr r3, [r5, #0]
  25972. 800a67c: b103 cbz r3, 800a680 <_kill_r+0x1c>
  25973. 800a67e: 6023 str r3, [r4, #0]
  25974. 800a680: bd38 pop {r3, r4, r5, pc}
  25975. 800a682: bf00 nop
  25976. 800a684: 24001d70 .word 0x24001d70
  25977. 0800a688 <_getpid_r>:
  25978. 800a688: f7f6 bd9c b.w 80011c4 <_getpid>
  25979. 0800a68c <__sread>:
  25980. 800a68c: b510 push {r4, lr}
  25981. 800a68e: 460c mov r4, r1
  25982. 800a690: f9b1 100e ldrsh.w r1, [r1, #14]
  25983. 800a694: f000 f8a0 bl 800a7d8 <_read_r>
  25984. 800a698: 2800 cmp r0, #0
  25985. 800a69a: bfab itete ge
  25986. 800a69c: 6d63 ldrge r3, [r4, #84] ; 0x54
  25987. 800a69e: 89a3 ldrhlt r3, [r4, #12]
  25988. 800a6a0: 181b addge r3, r3, r0
  25989. 800a6a2: f423 5380 biclt.w r3, r3, #4096 ; 0x1000
  25990. 800a6a6: bfac ite ge
  25991. 800a6a8: 6563 strge r3, [r4, #84] ; 0x54
  25992. 800a6aa: 81a3 strhlt r3, [r4, #12]
  25993. 800a6ac: bd10 pop {r4, pc}
  25994. 0800a6ae <__swrite>:
  25995. 800a6ae: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
  25996. 800a6b2: 461f mov r7, r3
  25997. 800a6b4: 898b ldrh r3, [r1, #12]
  25998. 800a6b6: 05db lsls r3, r3, #23
  25999. 800a6b8: 4605 mov r5, r0
  26000. 800a6ba: 460c mov r4, r1
  26001. 800a6bc: 4616 mov r6, r2
  26002. 800a6be: d505 bpl.n 800a6cc <__swrite+0x1e>
  26003. 800a6c0: f9b1 100e ldrsh.w r1, [r1, #14]
  26004. 800a6c4: 2302 movs r3, #2
  26005. 800a6c6: 2200 movs r2, #0
  26006. 800a6c8: f000 f868 bl 800a79c <_lseek_r>
  26007. 800a6cc: 89a3 ldrh r3, [r4, #12]
  26008. 800a6ce: f9b4 100e ldrsh.w r1, [r4, #14]
  26009. 800a6d2: f423 5380 bic.w r3, r3, #4096 ; 0x1000
  26010. 800a6d6: 81a3 strh r3, [r4, #12]
  26011. 800a6d8: 4632 mov r2, r6
  26012. 800a6da: 463b mov r3, r7
  26013. 800a6dc: 4628 mov r0, r5
  26014. 800a6de: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
  26015. 800a6e2: f000 b817 b.w 800a714 <_write_r>
  26016. 0800a6e6 <__sseek>:
  26017. 800a6e6: b510 push {r4, lr}
  26018. 800a6e8: 460c mov r4, r1
  26019. 800a6ea: f9b1 100e ldrsh.w r1, [r1, #14]
  26020. 800a6ee: f000 f855 bl 800a79c <_lseek_r>
  26021. 800a6f2: 1c43 adds r3, r0, #1
  26022. 800a6f4: 89a3 ldrh r3, [r4, #12]
  26023. 800a6f6: bf15 itete ne
  26024. 800a6f8: 6560 strne r0, [r4, #84] ; 0x54
  26025. 800a6fa: f423 5380 biceq.w r3, r3, #4096 ; 0x1000
  26026. 800a6fe: f443 5380 orrne.w r3, r3, #4096 ; 0x1000
  26027. 800a702: 81a3 strheq r3, [r4, #12]
  26028. 800a704: bf18 it ne
  26029. 800a706: 81a3 strhne r3, [r4, #12]
  26030. 800a708: bd10 pop {r4, pc}
  26031. 0800a70a <__sclose>:
  26032. 800a70a: f9b1 100e ldrsh.w r1, [r1, #14]
  26033. 800a70e: f000 b813 b.w 800a738 <_close_r>
  26034. ...
  26035. 0800a714 <_write_r>:
  26036. 800a714: b538 push {r3, r4, r5, lr}
  26037. 800a716: 4d07 ldr r5, [pc, #28] ; (800a734 <_write_r+0x20>)
  26038. 800a718: 4604 mov r4, r0
  26039. 800a71a: 4608 mov r0, r1
  26040. 800a71c: 4611 mov r1, r2
  26041. 800a71e: 2200 movs r2, #0
  26042. 800a720: 602a str r2, [r5, #0]
  26043. 800a722: 461a mov r2, r3
  26044. 800a724: f7f6 fd8d bl 8001242 <_write>
  26045. 800a728: 1c43 adds r3, r0, #1
  26046. 800a72a: d102 bne.n 800a732 <_write_r+0x1e>
  26047. 800a72c: 682b ldr r3, [r5, #0]
  26048. 800a72e: b103 cbz r3, 800a732 <_write_r+0x1e>
  26049. 800a730: 6023 str r3, [r4, #0]
  26050. 800a732: bd38 pop {r3, r4, r5, pc}
  26051. 800a734: 24001d70 .word 0x24001d70
  26052. 0800a738 <_close_r>:
  26053. 800a738: b538 push {r3, r4, r5, lr}
  26054. 800a73a: 4d06 ldr r5, [pc, #24] ; (800a754 <_close_r+0x1c>)
  26055. 800a73c: 2300 movs r3, #0
  26056. 800a73e: 4604 mov r4, r0
  26057. 800a740: 4608 mov r0, r1
  26058. 800a742: 602b str r3, [r5, #0]
  26059. 800a744: f7f6 fd99 bl 800127a <_close>
  26060. 800a748: 1c43 adds r3, r0, #1
  26061. 800a74a: d102 bne.n 800a752 <_close_r+0x1a>
  26062. 800a74c: 682b ldr r3, [r5, #0]
  26063. 800a74e: b103 cbz r3, 800a752 <_close_r+0x1a>
  26064. 800a750: 6023 str r3, [r4, #0]
  26065. 800a752: bd38 pop {r3, r4, r5, pc}
  26066. 800a754: 24001d70 .word 0x24001d70
  26067. 0800a758 <_fstat_r>:
  26068. 800a758: b538 push {r3, r4, r5, lr}
  26069. 800a75a: 4d07 ldr r5, [pc, #28] ; (800a778 <_fstat_r+0x20>)
  26070. 800a75c: 2300 movs r3, #0
  26071. 800a75e: 4604 mov r4, r0
  26072. 800a760: 4608 mov r0, r1
  26073. 800a762: 4611 mov r1, r2
  26074. 800a764: 602b str r3, [r5, #0]
  26075. 800a766: f7f6 fd94 bl 8001292 <_fstat>
  26076. 800a76a: 1c43 adds r3, r0, #1
  26077. 800a76c: d102 bne.n 800a774 <_fstat_r+0x1c>
  26078. 800a76e: 682b ldr r3, [r5, #0]
  26079. 800a770: b103 cbz r3, 800a774 <_fstat_r+0x1c>
  26080. 800a772: 6023 str r3, [r4, #0]
  26081. 800a774: bd38 pop {r3, r4, r5, pc}
  26082. 800a776: bf00 nop
  26083. 800a778: 24001d70 .word 0x24001d70
  26084. 0800a77c <_isatty_r>:
  26085. 800a77c: b538 push {r3, r4, r5, lr}
  26086. 800a77e: 4d06 ldr r5, [pc, #24] ; (800a798 <_isatty_r+0x1c>)
  26087. 800a780: 2300 movs r3, #0
  26088. 800a782: 4604 mov r4, r0
  26089. 800a784: 4608 mov r0, r1
  26090. 800a786: 602b str r3, [r5, #0]
  26091. 800a788: f7f6 fd93 bl 80012b2 <_isatty>
  26092. 800a78c: 1c43 adds r3, r0, #1
  26093. 800a78e: d102 bne.n 800a796 <_isatty_r+0x1a>
  26094. 800a790: 682b ldr r3, [r5, #0]
  26095. 800a792: b103 cbz r3, 800a796 <_isatty_r+0x1a>
  26096. 800a794: 6023 str r3, [r4, #0]
  26097. 800a796: bd38 pop {r3, r4, r5, pc}
  26098. 800a798: 24001d70 .word 0x24001d70
  26099. 0800a79c <_lseek_r>:
  26100. 800a79c: b538 push {r3, r4, r5, lr}
  26101. 800a79e: 4d07 ldr r5, [pc, #28] ; (800a7bc <_lseek_r+0x20>)
  26102. 800a7a0: 4604 mov r4, r0
  26103. 800a7a2: 4608 mov r0, r1
  26104. 800a7a4: 4611 mov r1, r2
  26105. 800a7a6: 2200 movs r2, #0
  26106. 800a7a8: 602a str r2, [r5, #0]
  26107. 800a7aa: 461a mov r2, r3
  26108. 800a7ac: f7f6 fd8c bl 80012c8 <_lseek>
  26109. 800a7b0: 1c43 adds r3, r0, #1
  26110. 800a7b2: d102 bne.n 800a7ba <_lseek_r+0x1e>
  26111. 800a7b4: 682b ldr r3, [r5, #0]
  26112. 800a7b6: b103 cbz r3, 800a7ba <_lseek_r+0x1e>
  26113. 800a7b8: 6023 str r3, [r4, #0]
  26114. 800a7ba: bd38 pop {r3, r4, r5, pc}
  26115. 800a7bc: 24001d70 .word 0x24001d70
  26116. 0800a7c0 <__malloc_lock>:
  26117. 800a7c0: 4801 ldr r0, [pc, #4] ; (800a7c8 <__malloc_lock+0x8>)
  26118. 800a7c2: f7ff bdff b.w 800a3c4 <__retarget_lock_acquire_recursive>
  26119. 800a7c6: bf00 nop
  26120. 800a7c8: 24001d68 .word 0x24001d68
  26121. 0800a7cc <__malloc_unlock>:
  26122. 800a7cc: 4801 ldr r0, [pc, #4] ; (800a7d4 <__malloc_unlock+0x8>)
  26123. 800a7ce: f7ff bdfa b.w 800a3c6 <__retarget_lock_release_recursive>
  26124. 800a7d2: bf00 nop
  26125. 800a7d4: 24001d68 .word 0x24001d68
  26126. 0800a7d8 <_read_r>:
  26127. 800a7d8: b538 push {r3, r4, r5, lr}
  26128. 800a7da: 4d07 ldr r5, [pc, #28] ; (800a7f8 <_read_r+0x20>)
  26129. 800a7dc: 4604 mov r4, r0
  26130. 800a7de: 4608 mov r0, r1
  26131. 800a7e0: 4611 mov r1, r2
  26132. 800a7e2: 2200 movs r2, #0
  26133. 800a7e4: 602a str r2, [r5, #0]
  26134. 800a7e6: 461a mov r2, r3
  26135. 800a7e8: f7f6 fd0e bl 8001208 <_read>
  26136. 800a7ec: 1c43 adds r3, r0, #1
  26137. 800a7ee: d102 bne.n 800a7f6 <_read_r+0x1e>
  26138. 800a7f0: 682b ldr r3, [r5, #0]
  26139. 800a7f2: b103 cbz r3, 800a7f6 <_read_r+0x1e>
  26140. 800a7f4: 6023 str r3, [r4, #0]
  26141. 800a7f6: bd38 pop {r3, r4, r5, pc}
  26142. 800a7f8: 24001d70 .word 0x24001d70
  26143. 0800a7fc <_init>:
  26144. 800a7fc: b5f8 push {r3, r4, r5, r6, r7, lr}
  26145. 800a7fe: bf00 nop
  26146. 800a800: bcf8 pop {r3, r4, r5, r6, r7}
  26147. 800a802: bc08 pop {r3}
  26148. 800a804: 469e mov lr, r3
  26149. 800a806: 4770 bx lr
  26150. 0800a808 <_fini>:
  26151. 800a808: b5f8 push {r3, r4, r5, r6, r7, lr}
  26152. 800a80a: bf00 nop
  26153. 800a80c: bcf8 pop {r3, r4, r5, r6, r7}
  26154. 800a80e: bc08 pop {r3}
  26155. 800a810: 469e mov lr, r3
  26156. 800a812: 4770 bx lr