| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444 |
- /**
- ******************************************************************************
- * 文件名 : PAN312x_Driver.c
- * 作者 : PAN312x RF Team
- * 版本 : V0.4.0
- * 时间 :
- * 文件描述:
- *******************************************************************************/
- #include <stdint.h>
- #include "PAN312x_Driver.h"
- #include "PAN312x_Hal.h"
- /*
- 注意,本文件的函数实现了从RF的驱动与MCU的兼容
- */
- volatile uint8_t vcol_cal_code;
- volatile uint8_t tp_auto_code;
- volatile uint8_t rc_code;
- uint8_t TcxoControlByGpio = 0;
- //-------------------------------------------------//
- //PAN312x power
- //--------------------------------------------------------------//
- #define PAN31XX_LDO_POWER_GET_VDD_PA_TRIM(v) (((v) >> 11) & 0x1f)
- #define PAN31XX_LDO_POWER_GET_PA_2ND_RAMP(v) (((v) >> 5) & 0x3f)
- #define PAN31XX_LDO_POWER_GET_PA_BIAS_TRIM(v) (((v) >> 1) & 0xf)
- #define PAN31XX_LDO_POWER_GET_LP_EN(v) ((v) & 1)
- #define PAN31XX_LDO_POWER_MAKE(VDD_PA_TRIM, PA_2ND_RAMP, PA_BIAS_TRIM, lp_en) \
- (((VDD_PA_TRIM) << 11) | ((PA_2ND_RAMP) << 5) | ((PA_BIAS_TRIM) << 1) | (lp_en))
-
-
- const uint16_t pan31xx_ldo_power_0603_420_445mhz[41] = {
- PAN31XX_LDO_POWER_MAKE(0x00, 0x0e, 0x0, 1), //-20dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x11, 0x0, 1), //-19dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x05, 0x1, 1), //-18dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x06, 0x1, 1), //-17dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x17, 0x0, 1), //-16dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x01, 0x3, 1), //-15dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x00, 0x5, 1), //-14dBm
- PAN31XX_LDO_POWER_MAKE(0x0e, 0x00, 0x5, 1), //-13dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x00, 0x8, 1), //-12dBm
- PAN31XX_LDO_POWER_MAKE(0x03, 0x00, 0x9, 1), //-11dBm
- PAN31XX_LDO_POWER_MAKE(0x03, 0x00, 0xc, 1), //-10dBm
- PAN31XX_LDO_POWER_MAKE(0x08, 0x00, 0xc, 1), //-9dBm
- PAN31XX_LDO_POWER_MAKE(0x10, 0x00, 0xc, 1), //-8dBm
- PAN31XX_LDO_POWER_MAKE(0x19, 0x00, 0xc, 1), //-7dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x00, 0xe, 1), //-6dBm
- PAN31XX_LDO_POWER_MAKE(0x02, 0x01, 0xc, 1), //-5dBm
- PAN31XX_LDO_POWER_MAKE(0x07, 0x01, 0xc, 1), //-4dBm
- PAN31XX_LDO_POWER_MAKE(0x0d, 0x01, 0xc, 1), //-3dBm
- PAN31XX_LDO_POWER_MAKE(0x04, 0x02, 0xc, 1), //-2dBm
- PAN31XX_LDO_POWER_MAKE(0x08, 0x02, 0xc, 1), //-1dBm
- PAN31XX_LDO_POWER_MAKE(0x0f, 0x02, 0xc, 1), //0dBm
- PAN31XX_LDO_POWER_MAKE(0x17, 0x02, 0xc, 1), //1dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x02, 0xc, 1), //2dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x03, 0xc, 1), //3dBm
- PAN31XX_LDO_POWER_MAKE(0x15, 0x04, 0xc, 1), //4dBm
- PAN31XX_LDO_POWER_MAKE(0x15, 0x05, 0xc, 1), //5dBm
- PAN31XX_LDO_POWER_MAKE(0x17, 0x06, 0xc, 1), //6dBm
- PAN31XX_LDO_POWER_MAKE(0x19, 0x07, 0xc, 1), //7dBm
- PAN31XX_LDO_POWER_MAKE(0x17, 0x0a, 0xc, 1), //8dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x0a, 0xc, 1), //9dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x0d, 0xc, 1), //10dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x12, 0xc, 1), //11dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x1c, 0xc, 1), //12dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x3f, 0xc, 1), //13dBm
- PAN31XX_LDO_POWER_MAKE(0x02, 0x3c, 0xc, 0), //14dBm
- PAN31XX_LDO_POWER_MAKE(0x05, 0x3c, 0xc, 0), //15dBm
- PAN31XX_LDO_POWER_MAKE(0x09, 0x3c, 0xc, 0), //16dBm
- PAN31XX_LDO_POWER_MAKE(0x0d, 0x3c, 0xc, 0), //17dBm
- PAN31XX_LDO_POWER_MAKE(0x12, 0x3c, 0xc, 0), //18dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x3c, 0xc, 0), //19dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x3c, 0xc, 0) //20dBm
- };
- const uint16_t pan31xx_ldo_power_0603_470_510mhz[41] = {
- PAN31XX_LDO_POWER_MAKE(0x00, 0x0e, 0x0, 1), //-20dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x11, 0x0, 1), //-19dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x05, 0x1, 1), //-18dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x06, 0x1, 1), //-17dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x17, 0x0, 1), //-16dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x01, 0x3, 1), //-15dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x00, 0x5, 1), //-14dBm
- PAN31XX_LDO_POWER_MAKE(0x0e, 0x00, 0x5, 1), //-13dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x00, 0x8, 1), //-12dBm
- PAN31XX_LDO_POWER_MAKE(0x03, 0x00, 0x9, 1), //-11dBm
- PAN31XX_LDO_POWER_MAKE(0x03, 0x00, 0xc, 1), //-10dBm
- PAN31XX_LDO_POWER_MAKE(0x08, 0x00, 0xc, 1), //-9dBm
- PAN31XX_LDO_POWER_MAKE(0x10, 0x00, 0xc, 1), //-8dBm
- PAN31XX_LDO_POWER_MAKE(0x19, 0x00, 0xc, 1), //-7dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x00, 0xe, 1), //-6dBm
- PAN31XX_LDO_POWER_MAKE(0x02, 0x01, 0xc, 1), //-5dBm
- PAN31XX_LDO_POWER_MAKE(0x07, 0x01, 0xc, 1), //-4dBm
- PAN31XX_LDO_POWER_MAKE(0x0d, 0x01, 0xc, 1), //-3dBm
- PAN31XX_LDO_POWER_MAKE(0x04, 0x02, 0xc, 1), //-2dBm
- PAN31XX_LDO_POWER_MAKE(0x08, 0x02, 0xc, 1), //-1dBm
- PAN31XX_LDO_POWER_MAKE(0x0f, 0x02, 0xc, 1), //0dBm
- PAN31XX_LDO_POWER_MAKE(0x17, 0x02, 0xc, 1), //1dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x02, 0xc, 1), //2dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x03, 0xc, 1), //3dBm
- PAN31XX_LDO_POWER_MAKE(0x15, 0x04, 0xc, 1), //4dBm
- PAN31XX_LDO_POWER_MAKE(0x15, 0x05, 0xc, 1), //5dBm
- PAN31XX_LDO_POWER_MAKE(0x17, 0x06, 0xc, 1), //6dBm
- PAN31XX_LDO_POWER_MAKE(0x19, 0x07, 0xc, 1), //7dBm
- PAN31XX_LDO_POWER_MAKE(0x17, 0x0a, 0xc, 1), //8dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x0a, 0xc, 1), //9dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x0d, 0xc, 1), //10dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x12, 0xc, 1), //11dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x1c, 0xc, 1), //12dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x3f, 0xc, 1), //13dBm
- PAN31XX_LDO_POWER_MAKE(0x02, 0x3c, 0xc, 0), //14dBm
- PAN31XX_LDO_POWER_MAKE(0x05, 0x3c, 0xc, 0), //15dBm
- PAN31XX_LDO_POWER_MAKE(0x09, 0x3c, 0xc, 0), //16dBm
- PAN31XX_LDO_POWER_MAKE(0x0d, 0x3c, 0xc, 0), //17dBm
- PAN31XX_LDO_POWER_MAKE(0x12, 0x3c, 0xc, 0), //18dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x3c, 0xc, 0), //19dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x3c, 0xc, 0) //20dBm
- };
- const uint16_t pan31xx_ldo_power_0603_860_870mhz[41] = {
- PAN31XX_LDO_POWER_MAKE(0x00, 0x0e, 0x0, 1), //-20dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x11, 0x0, 1), //-19dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x05, 0x1, 1), //-18dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x06, 0x1, 1), //-17dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x17, 0x0, 1), //-16dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x00, 0x5, 1), //-15dBm
- PAN31XX_LDO_POWER_MAKE(0x0e, 0x00, 0x5, 1), //-14dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x00, 0x8, 1), //-13dBm
- PAN31XX_LDO_POWER_MAKE(0x05, 0x00, 0x9, 1), //-12dBm
- PAN31XX_LDO_POWER_MAKE(0x05, 0x00, 0xc, 1), //-11dBm
- PAN31XX_LDO_POWER_MAKE(0x0b, 0x00, 0xc, 1), //-10dBm
- PAN31XX_LDO_POWER_MAKE(0x13, 0x00, 0xc, 1), //-9dBm
- PAN31XX_LDO_POWER_MAKE(0x1c, 0x00, 0xc, 1), //-8dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x00, 0xe, 1), //-7dBm
- PAN31XX_LDO_POWER_MAKE(0x06, 0x01, 0xc, 1), //-6dBm
- PAN31XX_LDO_POWER_MAKE(0x0b, 0x01, 0xc, 1), //-5dBm
- PAN31XX_LDO_POWER_MAKE(0x10, 0x01, 0xc, 1), //-4dBm
- PAN31XX_LDO_POWER_MAKE(0x06, 0x02, 0xc, 1), //-3dBm
- PAN31XX_LDO_POWER_MAKE(0x0b, 0x02, 0xc, 1), //-2dBm
- PAN31XX_LDO_POWER_MAKE(0x12, 0x02, 0xc, 1), //-1dBm
- PAN31XX_LDO_POWER_MAKE(0x19, 0x02, 0xc, 1), //0dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x02, 0xf, 1), //1dBm
- PAN31XX_LDO_POWER_MAKE(0x1b, 0x03, 0xc, 1), //2dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x04, 0xc, 1), //3dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x05, 0xc, 1), //4dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x06, 0xc, 1), //5dBm
- PAN31XX_LDO_POWER_MAKE(0x1c, 0x07, 0xc, 1), //6dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x0a, 0xc, 1), //7dBm
- PAN31XX_LDO_POWER_MAKE(0x0a, 0x2c, 0xc, 1), //8dBm
- PAN31XX_LDO_POWER_MAKE(0x0d, 0x2c, 0xc, 1), //9dBm
- PAN31XX_LDO_POWER_MAKE(0x13, 0x2c, 0xc, 1), //10dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x2c, 0xc, 1), //11dBm
- PAN31XX_LDO_POWER_MAKE(0x1c, 0x2c, 0xc, 1), //12dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x3f, 0xc, 1), //13dBm
- PAN31XX_LDO_POWER_MAKE(0x02, 0x3c, 0xc, 0), //14dBm
- PAN31XX_LDO_POWER_MAKE(0x05, 0x3c, 0xc, 0), //15dBm
- PAN31XX_LDO_POWER_MAKE(0x09, 0x3c, 0xc, 0), //16dBm
- PAN31XX_LDO_POWER_MAKE(0x0d, 0x3c, 0xc, 0), //17dBm
- PAN31XX_LDO_POWER_MAKE(0x12, 0x3c, 0xc, 0), //18dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x3c, 0xc, 0), //19dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x3c, 0xc, 0) //20dBm
- };
- const uint16_t pan31xx_ldo_power_0603_902_928mhz[41] = {
- PAN31XX_LDO_POWER_MAKE(0x00, 0x06, 0x1, 1), //-20dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x07, 0x1, 1), //-19dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x08, 0x1, 1), //-18dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x09, 0x1, 1), //-17dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x0a, 0x1, 1), //-16dBm
- PAN31XX_LDO_POWER_MAKE(0x03, 0x04, 0x2, 1), //-15dBm
- PAN31XX_LDO_POWER_MAKE(0x03, 0x05, 0x2, 1), //-14dBm
- PAN31XX_LDO_POWER_MAKE(0x04, 0x00, 0x8, 1), //-13dBm
- PAN31XX_LDO_POWER_MAKE(0x08, 0x00, 0x9, 1), //-12dBm
- PAN31XX_LDO_POWER_MAKE(0x05, 0x00, 0xc, 1), //-11dBm
- PAN31XX_LDO_POWER_MAKE(0x0b, 0x00, 0xc, 1), //-10dBm
- PAN31XX_LDO_POWER_MAKE(0x13, 0x00, 0xc, 1), //-9dBm
- PAN31XX_LDO_POWER_MAKE(0x1c, 0x00, 0xc, 1), //-8dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x00, 0xe, 1), //-7dBm
- PAN31XX_LDO_POWER_MAKE(0x06, 0x01, 0xc, 1), //-6dBm
- PAN31XX_LDO_POWER_MAKE(0x0b, 0x01, 0xc, 1), //-5dBm
- PAN31XX_LDO_POWER_MAKE(0x10, 0x01, 0xc, 1), //-4dBm
- PAN31XX_LDO_POWER_MAKE(0x06, 0x02, 0xc, 1), //-3dBm
- PAN31XX_LDO_POWER_MAKE(0x0b, 0x02, 0xc, 1), //-2dBm
- PAN31XX_LDO_POWER_MAKE(0x12, 0x02, 0xc, 1), //-1dBm
- PAN31XX_LDO_POWER_MAKE(0x19, 0x02, 0xc, 1), //0dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x02, 0xf, 1), //1dBm
- PAN31XX_LDO_POWER_MAKE(0x1b, 0x03, 0xc, 1), //2dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x04, 0xc, 1), //3dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x05, 0xc, 1), //4dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x06, 0xc, 1), //5dBm
- PAN31XX_LDO_POWER_MAKE(0x1c, 0x07, 0xc, 1), //6dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x0a, 0xc, 1), //7dBm
- PAN31XX_LDO_POWER_MAKE(0x07, 0x2c, 0xc, 1), //8dBm
- PAN31XX_LDO_POWER_MAKE(0x0a, 0x2c, 0xc, 1), //9dBm
- PAN31XX_LDO_POWER_MAKE(0x10, 0x2c, 0xc, 1), //10dBm
- PAN31XX_LDO_POWER_MAKE(0x17, 0x2c, 0xc, 1), //11dBm
- PAN31XX_LDO_POWER_MAKE(0x1b, 0x2c, 0xc, 1), //12dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x3f, 0xc, 1), //13dBm
- PAN31XX_LDO_POWER_MAKE(0x02, 0x3c, 0xc, 0), //14dBm
- PAN31XX_LDO_POWER_MAKE(0x05, 0x3c, 0xc, 0), //15dBm
- PAN31XX_LDO_POWER_MAKE(0x09, 0x3c, 0xc, 0), //16dBm
- PAN31XX_LDO_POWER_MAKE(0x0d, 0x3c, 0xc, 0), //17dBm
- PAN31XX_LDO_POWER_MAKE(0x12, 0x3c, 0xc, 0), //18dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x3c, 0xc, 0), //19dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x3c, 0xc, 0) //20dBm
- };
- const uint16_t pan31xx_ldo_power_0402_420_445mhz[41] = {
- PAN31XX_LDO_POWER_MAKE(0x00, 0x05, 0x1, 1), //-20dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x13, 0x0, 1), //-19dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x06, 0x1, 1), //-18dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x07, 0x1, 1), //-17dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x08, 0x1, 1), //-16dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x00, 0x8, 1), //-15dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x00, 0xb, 1), //-14dBm
- PAN31XX_LDO_POWER_MAKE(0x04, 0x00, 0xc, 1), //-13dBm
- PAN31XX_LDO_POWER_MAKE(0x0a, 0x00, 0xc, 1), //-12dBm
- PAN31XX_LDO_POWER_MAKE(0x12, 0x00, 0xc, 1), //-11dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x00, 0xc, 1), //-10dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x00, 0xf, 1), //-9dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x01, 0xc, 1), //-8dBm
- PAN31XX_LDO_POWER_MAKE(0x07, 0x01, 0xc, 1), //-7dBm
- PAN31XX_LDO_POWER_MAKE(0x0e, 0x01, 0xc, 1), //-6dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x02, 0xc, 1), //-5dBm
- PAN31XX_LDO_POWER_MAKE(0x07, 0x02, 0xc, 1), //-4dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x03, 0xc, 1), //-3dBm
- PAN31XX_LDO_POWER_MAKE(0x06, 0x03, 0xc, 1), //-2dBm
- PAN31XX_LDO_POWER_MAKE(0x03, 0x04, 0xc, 1), //-1dBm
- PAN31XX_LDO_POWER_MAKE(0x03, 0x05, 0xc, 1), //0dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x07, 0xc, 1), //1dBm
- PAN31XX_LDO_POWER_MAKE(0x06, 0x07, 0xc, 1), //2dBm
- PAN31XX_LDO_POWER_MAKE(0x0a, 0x07, 0xc, 1), //3dBm
- PAN31XX_LDO_POWER_MAKE(0x11, 0x07, 0xc, 1), //4dBm
- PAN31XX_LDO_POWER_MAKE(0x17, 0x07, 0xc, 1), //5dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x07, 0xc, 1), //6dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x09, 0xc, 1), //7dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x0b, 0xc, 1), //8dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x0d, 0xc, 1), //9dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x11, 0xc, 1), //10dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x16, 0xc, 1), //11dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x1f, 0xc, 1), //12dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x30, 0xc, 1), //13dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x0f, 0xc, 0), //14dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x12, 0xc, 0), //15dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x15, 0xc, 0), //16dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x1a, 0xc, 0), //17dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x20, 0xc, 0), //18dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x2b, 0xc, 0), //19dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x3f, 0xc, 0) //20dBm
- };
- const uint16_t pan31xx_ldo_power_0402_470_510mhz[41] = {
- PAN31XX_LDO_POWER_MAKE(0x00, 0x05, 0x1, 1), //-20dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x13, 0x0, 1), //-19dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x06, 0x1, 1), //-18dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x07, 0x1, 1), //-17dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x08, 0x1, 1), //-16dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x00, 0x8, 1), //-15dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x00, 0xb, 1), //-14dBm
- PAN31XX_LDO_POWER_MAKE(0x04, 0x00, 0xc, 1), //-13dBm
- PAN31XX_LDO_POWER_MAKE(0x0a, 0x00, 0xc, 1), //-12dBm
- PAN31XX_LDO_POWER_MAKE(0x12, 0x00, 0xc, 1), //-11dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x00, 0xc, 1), //-10dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x00, 0xf, 1), //-9dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x01, 0xc, 1), //-8dBm
- PAN31XX_LDO_POWER_MAKE(0x07, 0x01, 0xc, 1), //-7dBm
- PAN31XX_LDO_POWER_MAKE(0x0e, 0x01, 0xc, 1), //-6dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x02, 0xc, 1), //-5dBm
- PAN31XX_LDO_POWER_MAKE(0x07, 0x02, 0xc, 1), //-4dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x03, 0xc, 1), //-3dBm
- PAN31XX_LDO_POWER_MAKE(0x06, 0x03, 0xc, 1), //-2dBm
- PAN31XX_LDO_POWER_MAKE(0x03, 0x04, 0xc, 1), //-1dBm
- PAN31XX_LDO_POWER_MAKE(0x03, 0x05, 0xc, 1), //0dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x07, 0xc, 1), //1dBm
- PAN31XX_LDO_POWER_MAKE(0x06, 0x07, 0xc, 1), //2dBm
- PAN31XX_LDO_POWER_MAKE(0x0a, 0x07, 0xc, 1), //3dBm
- PAN31XX_LDO_POWER_MAKE(0x11, 0x07, 0xc, 1), //4dBm
- PAN31XX_LDO_POWER_MAKE(0x17, 0x07, 0xc, 1), //5dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x07, 0xc, 1), //6dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x09, 0xc, 1), //7dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x0b, 0xc, 1), //8dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x0d, 0xc, 1), //9dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x11, 0xc, 1), //10dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x16, 0xc, 1), //11dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x1f, 0xc, 1), //12dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x30, 0xc, 1), //13dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x0f, 0xc, 0), //14dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x12, 0xc, 0), //15dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x15, 0xc, 0), //16dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x1a, 0xc, 0), //17dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x20, 0xc, 0), //18dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x2b, 0xc, 0), //19dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x3f, 0xc, 0) //20dBm
- };
- const uint16_t pan31xx_ldo_power_0402_860_870mhz[41] = {
- PAN31XX_LDO_POWER_MAKE(0x00, 0x05, 0x1, 1), //-20dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x13, 0x0, 1), //-19dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x06, 0x1, 1), //-18dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x07, 0x1, 1), //-17dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x08, 0x1, 1), //-16dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x00, 0x8, 1), //-15dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x00, 0xb, 1), //-14dBm
- PAN31XX_LDO_POWER_MAKE(0x04, 0x00, 0xc, 1), //-13dBm
- PAN31XX_LDO_POWER_MAKE(0x0a, 0x00, 0xc, 1), //-12dBm
- PAN31XX_LDO_POWER_MAKE(0x12, 0x00, 0xc, 1), //-11dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x00, 0xc, 1), //-10dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x00, 0xf, 1), //-9dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x01, 0xc, 1), //-8dBm
- PAN31XX_LDO_POWER_MAKE(0x07, 0x01, 0xc, 1), //-7dBm
- PAN31XX_LDO_POWER_MAKE(0x0e, 0x01, 0xc, 1), //-6dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x02, 0xc, 1), //-5dBm
- PAN31XX_LDO_POWER_MAKE(0x07, 0x02, 0xc, 1), //-4dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x03, 0xc, 1), //-3dBm
- PAN31XX_LDO_POWER_MAKE(0x06, 0x03, 0xc, 1), //-2dBm
- PAN31XX_LDO_POWER_MAKE(0x03, 0x04, 0xc, 1), //-1dBm
- PAN31XX_LDO_POWER_MAKE(0x03, 0x05, 0xc, 1), //0dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x07, 0xc, 1), //1dBm
- PAN31XX_LDO_POWER_MAKE(0x06, 0x07, 0xc, 1), //2dBm
- PAN31XX_LDO_POWER_MAKE(0x0a, 0x07, 0xc, 1), //3dBm
- PAN31XX_LDO_POWER_MAKE(0x11, 0x07, 0xc, 1), //4dBm
- PAN31XX_LDO_POWER_MAKE(0x17, 0x07, 0xc, 1), //5dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x07, 0xc, 1), //6dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x09, 0xc, 1), //7dBm
- PAN31XX_LDO_POWER_MAKE(0x07, 0x2c, 0xc, 1), //8dBm
- PAN31XX_LDO_POWER_MAKE(0x0b, 0x2c, 0xc, 1), //9dBm
- PAN31XX_LDO_POWER_MAKE(0x10, 0x2c, 0xc, 1), //10dBm
- PAN31XX_LDO_POWER_MAKE(0x15, 0x2c, 0xc, 1), //11dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x2c, 0xc, 1), //12dBm
- PAN31XX_LDO_POWER_MAKE(0x1b, 0x3f, 0xc, 1), //13dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x3c, 0xc, 0), //14dBm
- PAN31XX_LDO_POWER_MAKE(0x04, 0x3c, 0xc, 0), //15dBm
- PAN31XX_LDO_POWER_MAKE(0x08, 0x3c, 0xc, 0), //16dBm
- PAN31XX_LDO_POWER_MAKE(0x0c, 0x3c, 0xc, 0), //17dBm
- PAN31XX_LDO_POWER_MAKE(0x11, 0x3c, 0xc, 0), //18dBm
- PAN31XX_LDO_POWER_MAKE(0x16, 0x3c, 0xc, 0), //19dBm
- PAN31XX_LDO_POWER_MAKE(0x1c, 0x3c, 0xc, 0) //20dBm
- };
- const uint16_t pan31xx_ldo_power_0402_902_928mhz[41] = {
- PAN31XX_LDO_POWER_MAKE(0x00, 0x05, 0x1, 1), //-20dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x13, 0x0, 1), //-19dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x06, 0x1, 1), //-18dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x07, 0x1, 1), //-17dBm
- PAN31XX_LDO_POWER_MAKE(0x18, 0x08, 0x1, 1), //-16dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x00, 0x8, 1), //-15dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x00, 0xb, 1), //-14dBm
- PAN31XX_LDO_POWER_MAKE(0x04, 0x00, 0xc, 1), //-13dBm
- PAN31XX_LDO_POWER_MAKE(0x0a, 0x00, 0xc, 1), //-12dBm
- PAN31XX_LDO_POWER_MAKE(0x12, 0x00, 0xc, 1), //-11dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x00, 0xc, 1), //-10dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x00, 0xf, 1), //-9dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x01, 0xc, 1), //-8dBm
- PAN31XX_LDO_POWER_MAKE(0x07, 0x01, 0xc, 1), //-7dBm
- PAN31XX_LDO_POWER_MAKE(0x0e, 0x01, 0xc, 1), //-6dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x02, 0xc, 1), //-5dBm
- PAN31XX_LDO_POWER_MAKE(0x07, 0x02, 0xc, 1), //-4dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x03, 0xc, 1), //-3dBm
- PAN31XX_LDO_POWER_MAKE(0x06, 0x03, 0xc, 1), //-2dBm
- PAN31XX_LDO_POWER_MAKE(0x03, 0x04, 0xc, 1), //-1dBm
- PAN31XX_LDO_POWER_MAKE(0x03, 0x05, 0xc, 1), //0dBm
- PAN31XX_LDO_POWER_MAKE(0x00, 0x07, 0xc, 1), //1dBm
- PAN31XX_LDO_POWER_MAKE(0x06, 0x07, 0xc, 1), //2dBm
- PAN31XX_LDO_POWER_MAKE(0x0a, 0x07, 0xc, 1), //3dBm
- PAN31XX_LDO_POWER_MAKE(0x11, 0x07, 0xc, 1), //4dBm
- PAN31XX_LDO_POWER_MAKE(0x17, 0x07, 0xc, 1), //5dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x07, 0xc, 1), //6dBm
- PAN31XX_LDO_POWER_MAKE(0x1f, 0x09, 0xc, 1), //7dBm
- PAN31XX_LDO_POWER_MAKE(0x07, 0x2c, 0xc, 1), //8dBm
- PAN31XX_LDO_POWER_MAKE(0x0b, 0x2c, 0xc, 1), //9dBm
- PAN31XX_LDO_POWER_MAKE(0x10, 0x2c, 0xc, 1), //10dBm
- PAN31XX_LDO_POWER_MAKE(0x15, 0x2c, 0xc, 1), //11dBm
- PAN31XX_LDO_POWER_MAKE(0x1a, 0x2c, 0xc, 1), //12dBm
- PAN31XX_LDO_POWER_MAKE(0x1b, 0x3f, 0xc, 1), //13dBm
- PAN31XX_LDO_POWER_MAKE(0x01, 0x3c, 0xc, 0), //14dBm
- PAN31XX_LDO_POWER_MAKE(0x04, 0x3c, 0xc, 0), //15dBm
- PAN31XX_LDO_POWER_MAKE(0x08, 0x3c, 0xc, 0), //16dBm
- PAN31XX_LDO_POWER_MAKE(0x0c, 0x3c, 0xc, 0), //17dBm
- PAN31XX_LDO_POWER_MAKE(0x11, 0x3c, 0xc, 0), //18dBm
- PAN31XX_LDO_POWER_MAKE(0x16, 0x3c, 0xc, 0), //19dBm
- PAN31XX_LDO_POWER_MAKE(0x1c, 0x3c, 0xc, 0) //20dBm
- };
- #define PAN31XX_DCDC_POWER_GET_VDD_PA_TRIM(v) (((v) >> 11) & 0x1f)
- #define PAN31XX_DCDC_POWER_GET_PA_2ND_RAMP(v) (((v) >> 5) & 0x3f)
- #define PAN31XX_DCDC_POWER_GET_PA_BIAS_TRIM(v) (((v) >> 1) & 0xf)
- #define PAN31XX_DCDC_POWER_GET_LP_EN(v) ((v) & 1)
- #define PAN31XX_DCDC_POWER_GET_DCDC_EN(v) (((v) >> 21) & 1)
- #define PAN31XX_DCDC_POWER_GET_DCDC_VOUT_TRIM(v) (((v) >> 16) & 0x1f)
- #define PAN31XX_DCDC_POWER_MAKE(VDD_PA_TRIM, PA_2ND_RAMP, PA_BIAS_TRIM, lp_en, DCDC_EN, DCDC_VOUT_TRIM) \
- (((VDD_PA_TRIM) << 11) | ((PA_2ND_RAMP) << 5) | ((PA_BIAS_TRIM) << 1) | (lp_en) | ((DCDC_EN) << 21) | ((DCDC_VOUT_TRIM) << 16))
- const uint32_t pan31xx_dcdc_power_0603_420_445mhz[34] = {
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x0e, 0x0, 1, 1, 0x0d), //-20dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x11, 0x0, 1, 1, 0x0d), //-19dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x05, 0x1, 1, 1, 0x0d), //-18dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x06, 0x1, 1, 1, 0x0d), //-17dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x17, 0x0, 1, 1, 0x0d), //-16dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x01, 0x3, 1, 1, 0x0d), //-15dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x00, 0x5, 1, 1, 0x0d), //-14dBm
- PAN31XX_DCDC_POWER_MAKE(0x0e, 0x00, 0x5, 1, 1, 0x0d), //-13dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x00, 0x8, 1, 1, 0x0d), //-12dBm
- PAN31XX_DCDC_POWER_MAKE(0x03, 0x00, 0x9, 1, 1, 0x0d), //-11dBm
- PAN31XX_DCDC_POWER_MAKE(0x03, 0x00, 0xc, 1, 1, 0x0d), //-10dBm
- PAN31XX_DCDC_POWER_MAKE(0x08, 0x00, 0xc, 1, 1, 0x0d), //-9dBm
- PAN31XX_DCDC_POWER_MAKE(0x10, 0x00, 0xc, 1, 1, 0x0d), //-8dBm
- PAN31XX_DCDC_POWER_MAKE(0x19, 0x00, 0xc, 1, 1, 0x0d), //-7dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x00, 0xe, 1, 1, 0x0d), //-6dBm
- PAN31XX_DCDC_POWER_MAKE(0x02, 0x01, 0xc, 1, 1, 0x0d), //-5dBm
- PAN31XX_DCDC_POWER_MAKE(0x07, 0x01, 0xc, 1, 1, 0x0d), //-4dBm
- PAN31XX_DCDC_POWER_MAKE(0x0d, 0x01, 0xc, 1, 1, 0x0d), //-3dBm
- PAN31XX_DCDC_POWER_MAKE(0x04, 0x02, 0xc, 1, 1, 0x0d), //-2dBm
- PAN31XX_DCDC_POWER_MAKE(0x08, 0x02, 0xc, 1, 1, 0x0d), //-1dBm
- PAN31XX_DCDC_POWER_MAKE(0x0f, 0x02, 0xc, 1, 1, 0x0d), //0dBm
- PAN31XX_DCDC_POWER_MAKE(0x17, 0x02, 0xc, 1, 1, 0x0d), //1dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x02, 0xc, 1, 1, 0x0d), //2dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x03, 0xc, 1, 1, 0x0d), //3dBm
- PAN31XX_DCDC_POWER_MAKE(0x15, 0x04, 0xc, 1, 1, 0x0d), //4dBm
- PAN31XX_DCDC_POWER_MAKE(0x15, 0x05, 0xc, 1, 1, 0x0d), //5dBm
- PAN31XX_DCDC_POWER_MAKE(0x17, 0x06, 0xc, 1, 1, 0x0d), //6dBm
- PAN31XX_DCDC_POWER_MAKE(0x19, 0x07, 0xc, 1, 1, 0x0d), //7dBm
- PAN31XX_DCDC_POWER_MAKE(0x17, 0x0a, 0xc, 1, 1, 0x0d), //8dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x0a, 0xc, 1, 1, 0x0d), //9dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x0d, 0xc, 1, 1, 0x0d), //10dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x12, 0xc, 1, 1, 0x0d), //11dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x1c, 0xc, 1, 1, 0x0d), //12dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x3f, 0xc, 1, 1, 0x13) //13dBm
- };
- const uint32_t pan31xx_dcdc_power_0603_470_510mhz[34] = {
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x0e, 0x0, 1, 1, 0x0f), //-20dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x11, 0x0, 1, 1, 0x0f), //-19dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x05, 0x1, 1, 1, 0x0f), //-18dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x06, 0x1, 1, 1, 0x0f), //-17dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x17, 0x0, 1, 1, 0x0f), //-16dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x01, 0x3, 1, 1, 0x0f), //-15dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x00, 0x5, 1, 1, 0x0f), //-14dBm
- PAN31XX_DCDC_POWER_MAKE(0x0e, 0x00, 0x5, 1, 1, 0x0f), //-13dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x00, 0x8, 1, 1, 0x0f), //-12dBm
- PAN31XX_DCDC_POWER_MAKE(0x03, 0x00, 0x9, 1, 1, 0x0f), //-11dBm
- PAN31XX_DCDC_POWER_MAKE(0x03, 0x00, 0xc, 1, 1, 0x0f), //-10dBm
- PAN31XX_DCDC_POWER_MAKE(0x08, 0x00, 0xc, 1, 1, 0x0f), //-9dBm
- PAN31XX_DCDC_POWER_MAKE(0x10, 0x00, 0xc, 1, 1, 0x0f), //-8dBm
- PAN31XX_DCDC_POWER_MAKE(0x19, 0x00, 0xc, 1, 1, 0x0f), //-7dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x00, 0xe, 1, 1, 0x0f), //-6dBm
- PAN31XX_DCDC_POWER_MAKE(0x02, 0x01, 0xc, 1, 1, 0x0f), //-5dBm
- PAN31XX_DCDC_POWER_MAKE(0x07, 0x01, 0xc, 1, 1, 0x0f), //-4dBm
- PAN31XX_DCDC_POWER_MAKE(0x0d, 0x01, 0xc, 1, 1, 0x0f), //-3dBm
- PAN31XX_DCDC_POWER_MAKE(0x04, 0x02, 0xc, 1, 1, 0x0f), //-2dBm
- PAN31XX_DCDC_POWER_MAKE(0x08, 0x02, 0xc, 1, 1, 0x0f), //-1dBm
- PAN31XX_DCDC_POWER_MAKE(0x0f, 0x02, 0xc, 1, 1, 0x0f), //0dBm
- PAN31XX_DCDC_POWER_MAKE(0x17, 0x02, 0xc, 1, 1, 0x0f), //1dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x02, 0xc, 1, 1, 0x0f), //2dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x03, 0xc, 1, 1, 0x0f), //3dBm
- PAN31XX_DCDC_POWER_MAKE(0x15, 0x04, 0xc, 1, 1, 0x0f), //4dBm
- PAN31XX_DCDC_POWER_MAKE(0x15, 0x05, 0xc, 1, 1, 0x0f), //5dBm
- PAN31XX_DCDC_POWER_MAKE(0x17, 0x06, 0xc, 1, 1, 0x0f), //6dBm
- PAN31XX_DCDC_POWER_MAKE(0x19, 0x07, 0xc, 1, 1, 0x0f), //7dBm
- PAN31XX_DCDC_POWER_MAKE(0x17, 0x0a, 0xc, 1, 1, 0x0f), //8dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x0a, 0xc, 1, 1, 0x0f), //9dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x0d, 0xc, 1, 1, 0x0f), //10dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x12, 0xc, 1, 1, 0x0f), //11dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x1c, 0xc, 1, 1, 0x0f), //12dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x3f, 0xc, 1, 1, 0x13) //13dBm
- };
- const uint32_t pan31xx_dcdc_power_0603_860_870mhz[34] = {
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x0e, 0x0, 1, 1, 0x0f), //-20dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x11, 0x0, 1, 1, 0x0f), //-19dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x05, 0x1, 1, 1, 0x0f), //-18dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x06, 0x1, 1, 1, 0x0f), //-17dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x17, 0x0, 1, 1, 0x0f), //-16dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x00, 0x5, 1, 1, 0x0f), //-15dBm
- PAN31XX_DCDC_POWER_MAKE(0x0e, 0x00, 0x5, 1, 1, 0x0f), //-14dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x00, 0x8, 1, 1, 0x0f), //-13dBm
- PAN31XX_DCDC_POWER_MAKE(0x05, 0x00, 0x9, 1, 1, 0x0f), //-12dBm
- PAN31XX_DCDC_POWER_MAKE(0x05, 0x00, 0xc, 1, 1, 0x0f), //-11dBm
- PAN31XX_DCDC_POWER_MAKE(0x0b, 0x00, 0xc, 1, 1, 0x0f), //-10dBm
- PAN31XX_DCDC_POWER_MAKE(0x13, 0x00, 0xc, 1, 1, 0x0f), //-9dBm
- PAN31XX_DCDC_POWER_MAKE(0x1c, 0x00, 0xc, 1, 1, 0x0f), //-8dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x00, 0xe, 1, 1, 0x0f), //-7dBm
- PAN31XX_DCDC_POWER_MAKE(0x06, 0x01, 0xc, 1, 1, 0x0f), //-6dBm
- PAN31XX_DCDC_POWER_MAKE(0x0b, 0x01, 0xc, 1, 1, 0x0f), //-5dBm
- PAN31XX_DCDC_POWER_MAKE(0x10, 0x01, 0xc, 1, 1, 0x0f), //-4dBm
- PAN31XX_DCDC_POWER_MAKE(0x06, 0x02, 0xc, 1, 1, 0x0f), //-3dBm
- PAN31XX_DCDC_POWER_MAKE(0x0b, 0x02, 0xc, 1, 1, 0x0f), //-2dBm
- PAN31XX_DCDC_POWER_MAKE(0x12, 0x02, 0xc, 1, 1, 0x0f), //-1dBm
- PAN31XX_DCDC_POWER_MAKE(0x19, 0x02, 0xc, 1, 1, 0x0f), //0dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x02, 0xf, 1, 1, 0x0f), //1dBm
- PAN31XX_DCDC_POWER_MAKE(0x1b, 0x03, 0xc, 1, 1, 0x0f), //2dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x04, 0xc, 1, 1, 0x0f), //3dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x05, 0xc, 1, 1, 0x0f), //4dBm
- PAN31XX_DCDC_POWER_MAKE(0x1a, 0x06, 0xc, 1, 1, 0x0f), //5dBm
- PAN31XX_DCDC_POWER_MAKE(0x1c, 0x07, 0xc, 1, 1, 0x0f), //6dBm
- PAN31XX_DCDC_POWER_MAKE(0x1a, 0x0a, 0xc, 1, 1, 0x0f), //7dBm
- PAN31XX_DCDC_POWER_MAKE(0x0a, 0x2c, 0xc, 1, 1, 0x0f), //8dBm
- PAN31XX_DCDC_POWER_MAKE(0x0d, 0x2c, 0xc, 1, 1, 0x0f), //9dBm
- PAN31XX_DCDC_POWER_MAKE(0x13, 0x2c, 0xc, 1, 1, 0x13), //10dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x2c, 0xc, 1, 1, 0x13), //11dBm
- PAN31XX_DCDC_POWER_MAKE(0x1c, 0x2c, 0xc, 1, 1, 0x13), //12dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x3f, 0xc, 1, 1, 0x17) //13dBm
- };
- const uint32_t pan31xx_dcdc_power_0603_902_928mhz[34] = {
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x06, 0x1, 1, 1, 0x0f), //-20dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x07, 0x1, 1, 1, 0x0f), //-19dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x08, 0x1, 1, 1, 0x0f), //-18dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x09, 0x1, 1, 1, 0x0f), //-17dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x0a, 0x1, 1, 1, 0x0f), //-16dBm
- PAN31XX_DCDC_POWER_MAKE(0x03, 0x04, 0x2, 1, 1, 0x0f), //-15dBm
- PAN31XX_DCDC_POWER_MAKE(0x03, 0x05, 0x2, 1, 1, 0x0f), //-14dBm
- PAN31XX_DCDC_POWER_MAKE(0x04, 0x00, 0x8, 1, 1, 0x0f), //-13dBm
- PAN31XX_DCDC_POWER_MAKE(0x08, 0x00, 0x9, 1, 1, 0x0f), //-12dBm
- PAN31XX_DCDC_POWER_MAKE(0x05, 0x00, 0xc, 1, 1, 0x0f), //-11dBm
- PAN31XX_DCDC_POWER_MAKE(0x0b, 0x00, 0xc, 1, 1, 0x0f), //-10dBm
- PAN31XX_DCDC_POWER_MAKE(0x13, 0x00, 0xc, 1, 1, 0x0f), //-9dBm
- PAN31XX_DCDC_POWER_MAKE(0x1c, 0x00, 0xc, 1, 1, 0x0f), //-8dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x00, 0xe, 1, 1, 0x0f), //-7dBm
- PAN31XX_DCDC_POWER_MAKE(0x06, 0x01, 0xc, 1, 1, 0x0f), //-6dBm
- PAN31XX_DCDC_POWER_MAKE(0x0b, 0x01, 0xc, 1, 1, 0x0f), //-5dBm
- PAN31XX_DCDC_POWER_MAKE(0x10, 0x01, 0xc, 1, 1, 0x0f), //-4dBm
- PAN31XX_DCDC_POWER_MAKE(0x06, 0x02, 0xc, 1, 1, 0x0f), //-3dBm
- PAN31XX_DCDC_POWER_MAKE(0x0b, 0x02, 0xc, 1, 1, 0x0f), //-2dBm
- PAN31XX_DCDC_POWER_MAKE(0x12, 0x02, 0xc, 1, 1, 0x0f), //-1dBm
- PAN31XX_DCDC_POWER_MAKE(0x19, 0x02, 0xc, 1, 1, 0x0f), //0dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x02, 0xf, 1, 1, 0x0f), //1dBm
- PAN31XX_DCDC_POWER_MAKE(0x1b, 0x03, 0xc, 1, 1, 0x0f), //2dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x04, 0xc, 1, 1, 0x0f), //3dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x05, 0xc, 1, 1, 0x0f), //4dBm
- PAN31XX_DCDC_POWER_MAKE(0x1a, 0x06, 0xc, 1, 1, 0x0f), //5dBm
- PAN31XX_DCDC_POWER_MAKE(0x1c, 0x07, 0xc, 1, 1, 0x0f), //6dBm
- PAN31XX_DCDC_POWER_MAKE(0x1a, 0x0a, 0xc, 1, 1, 0x0f), //7dBm
- PAN31XX_DCDC_POWER_MAKE(0x07, 0x2c, 0xc, 1, 1, 0x0f), //8dBm
- PAN31XX_DCDC_POWER_MAKE(0x0a, 0x2c, 0xc, 1, 1, 0x0f), //9dBm
- PAN31XX_DCDC_POWER_MAKE(0x10, 0x2c, 0xc, 1, 1, 0x13), //10dBm
- PAN31XX_DCDC_POWER_MAKE(0x17, 0x2c, 0xc, 1, 1, 0x13), //11dBm
- PAN31XX_DCDC_POWER_MAKE(0x1b, 0x2c, 0xc, 1, 1, 0x13), //12dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x3f, 0xc, 1, 1, 0x17) //13dBm
- };
- const uint32_t pan31xx_dcdc_power_0402_420_445mhz[34] = {
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x05, 0x1, 1, 1, 0x0d), //-20dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x13, 0x0, 1, 1, 0x0d), //-19dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x06, 0x1, 1, 1, 0x0d), //-18dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x07, 0x1, 1, 1, 0x0d), //-17dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x08, 0x1, 1, 1, 0x0d), //-16dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x00, 0x8, 1, 1, 0x0d), //-15dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x00, 0xb, 1, 1, 0x0d), //-14dBm
- PAN31XX_DCDC_POWER_MAKE(0x04, 0x00, 0xc, 1, 1, 0x0d), //-13dBm
- PAN31XX_DCDC_POWER_MAKE(0x0a, 0x00, 0xc, 1, 1, 0x0d), //-12dBm
- PAN31XX_DCDC_POWER_MAKE(0x12, 0x00, 0xc, 1, 1, 0x0d), //-11dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x00, 0xc, 1, 1, 0x0d), //-10dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x00, 0xf, 1, 1, 0x0d), //-9dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x01, 0xc, 1, 1, 0x0d), //-8dBm
- PAN31XX_DCDC_POWER_MAKE(0x07, 0x01, 0xc, 1, 1, 0x0d), //-7dBm
- PAN31XX_DCDC_POWER_MAKE(0x0e, 0x01, 0xc, 1, 1, 0x0d), //-6dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x02, 0xc, 1, 1, 0x0d), //-5dBm
- PAN31XX_DCDC_POWER_MAKE(0x07, 0x02, 0xc, 1, 1, 0x0d), //-4dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x03, 0xc, 1, 1, 0x0d), //-3dBm
- PAN31XX_DCDC_POWER_MAKE(0x06, 0x03, 0xc, 1, 1, 0x0d), //-2dBm
- PAN31XX_DCDC_POWER_MAKE(0x03, 0x04, 0xc, 1, 1, 0x0d), //-1dBm
- PAN31XX_DCDC_POWER_MAKE(0x03, 0x05, 0xc, 1, 1, 0x0d), //0dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x07, 0xc, 1, 1, 0x0d), //1dBm
- PAN31XX_DCDC_POWER_MAKE(0x06, 0x07, 0xc, 1, 1, 0x0d), //2dBm
- PAN31XX_DCDC_POWER_MAKE(0x0a, 0x07, 0xc, 1, 1, 0x0d), //3dBm
- PAN31XX_DCDC_POWER_MAKE(0x11, 0x07, 0xc, 1, 1, 0x0d), //4dBm
- PAN31XX_DCDC_POWER_MAKE(0x17, 0x07, 0xc, 1, 1, 0x0d), //5dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x07, 0xc, 1, 1, 0x0d), //6dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x09, 0xc, 1, 1, 0x0d), //7dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x0b, 0xc, 1, 1, 0x0d), //8dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x0d, 0xc, 1, 1, 0x10), //9dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x11, 0xc, 1, 1, 0x10), //10dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x16, 0xc, 1, 1, 0x10), //11dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x1f, 0xc, 1, 1, 0x13), //12dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x30, 0xc, 1, 1, 0x13) //13dBm
- };
- const uint32_t pan31xx_dcdc_power_0402_470_510mhz[34] = {
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x05, 0x1, 1, 1, 0x0d), //-20dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x13, 0x0, 1, 1, 0x0d), //-19dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x06, 0x1, 1, 1, 0x0d), //-18dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x07, 0x1, 1, 1, 0x0d), //-17dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x08, 0x1, 1, 1, 0x0d), //-16dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x00, 0x8, 1, 1, 0x0d), //-15dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x00, 0xb, 1, 1, 0x0d), //-14dBm
- PAN31XX_DCDC_POWER_MAKE(0x04, 0x00, 0xc, 1, 1, 0x0d), //-13dBm
- PAN31XX_DCDC_POWER_MAKE(0x0a, 0x00, 0xc, 1, 1, 0x0d), //-12dBm
- PAN31XX_DCDC_POWER_MAKE(0x12, 0x00, 0xc, 1, 1, 0x0d), //-11dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x00, 0xc, 1, 1, 0x0d), //-10dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x00, 0xf, 1, 1, 0x0d), //-9dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x01, 0xc, 1, 1, 0x0d), //-8dBm
- PAN31XX_DCDC_POWER_MAKE(0x07, 0x01, 0xc, 1, 1, 0x0d), //-7dBm
- PAN31XX_DCDC_POWER_MAKE(0x0e, 0x01, 0xc, 1, 1, 0x0d), //-6dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x02, 0xc, 1, 1, 0x0d), //-5dBm
- PAN31XX_DCDC_POWER_MAKE(0x07, 0x02, 0xc, 1, 1, 0x0d), //-4dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x03, 0xc, 1, 1, 0x0d), //-3dBm
- PAN31XX_DCDC_POWER_MAKE(0x06, 0x03, 0xc, 1, 1, 0x0d), //-2dBm
- PAN31XX_DCDC_POWER_MAKE(0x03, 0x04, 0xc, 1, 1, 0x0d), //-1dBm
- PAN31XX_DCDC_POWER_MAKE(0x03, 0x05, 0xc, 1, 1, 0x0d), //0dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x07, 0xc, 1, 1, 0x0d), //1dBm
- PAN31XX_DCDC_POWER_MAKE(0x06, 0x07, 0xc, 1, 1, 0x0d), //2dBm
- PAN31XX_DCDC_POWER_MAKE(0x0a, 0x07, 0xc, 1, 1, 0x0d), //3dBm
- PAN31XX_DCDC_POWER_MAKE(0x11, 0x07, 0xc, 1, 1, 0x0d), //4dBm
- PAN31XX_DCDC_POWER_MAKE(0x17, 0x07, 0xc, 1, 1, 0x0d), //5dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x07, 0xc, 1, 1, 0x0d), //6dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x09, 0xc, 1, 1, 0x0d), //7dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x0b, 0xc, 1, 1, 0x0d), //8dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x0d, 0xc, 1, 1, 0x10), //9dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x11, 0xc, 1, 1, 0x10), //10dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x16, 0xc, 1, 1, 0x10), //11dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x1f, 0xc, 1, 1, 0x13), //12dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x30, 0xc, 1, 1, 0x13) //13dBm
- };
- const uint32_t pan31xx_dcdc_power_0402_860_870mhz[34] = {
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x05, 0x1, 1, 1, 0x10), //-20dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x13, 0x0, 1, 1, 0x10), //-19dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x06, 0x1, 1, 1, 0x10), //-18dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x07, 0x1, 1, 1, 0x10), //-17dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x08, 0x1, 1, 1, 0x10), //-16dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x00, 0x8, 1, 1, 0x10), //-15dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x00, 0xb, 1, 1, 0x10), //-14dBm
- PAN31XX_DCDC_POWER_MAKE(0x04, 0x00, 0xc, 1, 1, 0x10), //-13dBm
- PAN31XX_DCDC_POWER_MAKE(0x0a, 0x00, 0xc, 1, 1, 0x10), //-12dBm
- PAN31XX_DCDC_POWER_MAKE(0x12, 0x00, 0xc, 1, 1, 0x10), //-11dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x00, 0xc, 1, 1, 0x10), //-10dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x00, 0xf, 1, 1, 0x10), //-9dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x01, 0xc, 1, 1, 0x10), //-8dBm
- PAN31XX_DCDC_POWER_MAKE(0x07, 0x01, 0xc, 1, 1, 0x10), //-7dBm
- PAN31XX_DCDC_POWER_MAKE(0x0e, 0x01, 0xc, 1, 1, 0x10), //-6dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x02, 0xc, 1, 1, 0x10), //-5dBm
- PAN31XX_DCDC_POWER_MAKE(0x07, 0x02, 0xc, 1, 1, 0x10), //-4dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x03, 0xc, 1, 1, 0x10), //-3dBm
- PAN31XX_DCDC_POWER_MAKE(0x06, 0x03, 0xc, 1, 1, 0x10), //-2dBm
- PAN31XX_DCDC_POWER_MAKE(0x03, 0x04, 0xc, 1, 1, 0x10), //-1dBm
- PAN31XX_DCDC_POWER_MAKE(0x03, 0x05, 0xc, 1, 1, 0x10), //0dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x07, 0xc, 1, 1, 0x10), //1dBm
- PAN31XX_DCDC_POWER_MAKE(0x06, 0x07, 0xc, 1, 1, 0x10), //2dBm
- PAN31XX_DCDC_POWER_MAKE(0x0a, 0x07, 0xc, 1, 1, 0x10), //3dBm
- PAN31XX_DCDC_POWER_MAKE(0x11, 0x07, 0xc, 1, 1, 0x10), //4dBm
- PAN31XX_DCDC_POWER_MAKE(0x17, 0x07, 0xc, 1, 1, 0x10), //5dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x07, 0xc, 1, 1, 0x10), //6dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x09, 0xc, 1, 1, 0x10), //7dBm
- PAN31XX_DCDC_POWER_MAKE(0x07, 0x2c, 0xc, 1, 1, 0x0f), //8dBm
- PAN31XX_DCDC_POWER_MAKE(0x0b, 0x2c, 0xc, 1, 1, 0x0f), //9dBm
- PAN31XX_DCDC_POWER_MAKE(0x10, 0x2c, 0xc, 1, 1, 0x13), //10dBm
- PAN31XX_DCDC_POWER_MAKE(0x15, 0x2c, 0xc, 1, 1, 0x13), //11dBm
- PAN31XX_DCDC_POWER_MAKE(0x1a, 0x2c, 0xc, 1, 1, 0x15), //12dBm
- PAN31XX_DCDC_POWER_MAKE(0x1b, 0x3f, 0xc, 1, 1, 0x19) //13dBm
- };
- const uint32_t pan31xx_dcdc_power_0402_902_928mhz[34] = {
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x05, 0x1, 1, 1, 0x10), //-20dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x13, 0x0, 1, 1, 0x10), //-19dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x06, 0x1, 1, 1, 0x10), //-18dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x07, 0x1, 1, 1, 0x10), //-17dBm
- PAN31XX_DCDC_POWER_MAKE(0x18, 0x08, 0x1, 1, 1, 0x10), //-16dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x00, 0x8, 1, 1, 0x10), //-15dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x00, 0xb, 1, 1, 0x10), //-14dBm
- PAN31XX_DCDC_POWER_MAKE(0x04, 0x00, 0xc, 1, 1, 0x10), //-13dBm
- PAN31XX_DCDC_POWER_MAKE(0x0a, 0x00, 0xc, 1, 1, 0x10), //-12dBm
- PAN31XX_DCDC_POWER_MAKE(0x12, 0x00, 0xc, 1, 1, 0x10), //-11dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x00, 0xc, 1, 1, 0x10), //-10dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x00, 0xf, 1, 1, 0x10), //-9dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x01, 0xc, 1, 1, 0x10), //-8dBm
- PAN31XX_DCDC_POWER_MAKE(0x07, 0x01, 0xc, 1, 1, 0x10), //-7dBm
- PAN31XX_DCDC_POWER_MAKE(0x0e, 0x01, 0xc, 1, 1, 0x10), //-6dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x02, 0xc, 1, 1, 0x10), //-5dBm
- PAN31XX_DCDC_POWER_MAKE(0x07, 0x02, 0xc, 1, 1, 0x10), //-4dBm
- PAN31XX_DCDC_POWER_MAKE(0x01, 0x03, 0xc, 1, 1, 0x10), //-3dBm
- PAN31XX_DCDC_POWER_MAKE(0x06, 0x03, 0xc, 1, 1, 0x10), //-2dBm
- PAN31XX_DCDC_POWER_MAKE(0x03, 0x04, 0xc, 1, 1, 0x10), //-1dBm
- PAN31XX_DCDC_POWER_MAKE(0x03, 0x05, 0xc, 1, 1, 0x10), //0dBm
- PAN31XX_DCDC_POWER_MAKE(0x00, 0x07, 0xc, 1, 1, 0x10), //1dBm
- PAN31XX_DCDC_POWER_MAKE(0x06, 0x07, 0xc, 1, 1, 0x10), //2dBm
- PAN31XX_DCDC_POWER_MAKE(0x0a, 0x07, 0xc, 1, 1, 0x10), //3dBm
- PAN31XX_DCDC_POWER_MAKE(0x11, 0x07, 0xc, 1, 1, 0x10), //4dBm
- PAN31XX_DCDC_POWER_MAKE(0x17, 0x07, 0xc, 1, 1, 0x10), //5dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x07, 0xc, 1, 1, 0x10), //6dBm
- PAN31XX_DCDC_POWER_MAKE(0x1f, 0x09, 0xc, 1, 1, 0x10), //7dBm
- PAN31XX_DCDC_POWER_MAKE(0x07, 0x2c, 0xc, 1, 1, 0x0f), //8dBm
- PAN31XX_DCDC_POWER_MAKE(0x0b, 0x2c, 0xc, 1, 1, 0x0f), //9dBm
- PAN31XX_DCDC_POWER_MAKE(0x10, 0x2c, 0xc, 1, 1, 0x13), //10dBm
- PAN31XX_DCDC_POWER_MAKE(0x15, 0x2c, 0xc, 1, 1, 0x13), //11dBm
- PAN31XX_DCDC_POWER_MAKE(0x1a, 0x2c, 0xc, 1, 1, 0x15), //12dBm
- PAN31XX_DCDC_POWER_MAKE(0x1b, 0x3f, 0xc, 1, 1, 0x1a) //13dBm
- };
- //-------------------------PAN312x api接口------------------------//
- //--------------------------------------------------------------//
- static int __PAN312xCmd_Write__(const void* wbuf, int wlen);
- static int __PAN312xCmd_Write(const void* wbuf, int wlen);
- static int __PAN312xCmd_WriteRead(const void* wbuf, int wlen, void* rbuf, int rlen);
- #if PAN312x_INTERFACE == PAN312x_IF_SPI
- #define PAN312x_DataBeginWrite() PAN312x_DataBegin()
- #define PAN312x_DataBeginRead() /* nothing to do */
- #define PAN312x_DataReadNonLast(B, L) PAN312x_DataRead((B), (L))
- #define PAN312x_DataReadLast(B, L) PAN312x_DataRead((B), (L))
- #define PAN312xReg_Waddr(adr) (((adr) << 1) | 1)
- #define PAN312xReg_Raddr(adr) (((adr) << 1) | 0)
-
- #elif PAN312x_INTERFACE == PAN312x_IF_3SPI
- #define PAN312x_DataBeginWrite() PAN312x_DataBegin()
- #define PAN312x_DataBeginRead() /* nothing to do */
- #define PAN312x_DataReadNonLast(B, L) PAN312x_DataRead((B), (L))
- #define PAN312x_DataReadLast(B, L) PAN312x_DataRead((B), (L))
- #define PAN312xReg_Waddr(adr) (((adr) << 1) | 1)
- #define PAN312xReg_Raddr(adr) (((adr) << 1) | 0)
- #elif PAN312x_INTERFACE == PAN312x_IF_I2C
- #define PAN312x_DataBeginWrite() PAN312x_DataBegin()
- #define PAN312x_DataBeginRead() PAN312x_DataReadBegin()/* nothing to do */
- #define PAN312x_DataReadNonLast(B, L) PAN312x_DataReadNonLast((B), (L))
- #define PAN312x_DataReadLast(B, L) PAN312x_DataRead((B), (L))
- #define PAN312xReg_Waddr(adr) (((adr) << 1) | 0)
- #define PAN312xReg_Raddr(adr) (((adr) << 1) | 1)
- #endif //PAN312x_INTERFACE
- /**
- * @简介:等待OTP加载完成,写R004并查询CTS直到芯片可接受命令
- * @参数:无
- * @返回值: PAN312x_OK=成功,其余=总线/CTS错误
- */
- int PAN312x_Trigger()
- {
- while(1){
- uint8_t temp = PAN312xReg_ReadB1(R000);
- if(temp & R000_OTP_LOAD_DONE_Msk){
- break;
- }
- }
-
- PAN312xReg_WriteB1(R004, 0x1C);
- int ret;
- uint8_t cmd = COMMADN_CTS, cts;
- do{
- PAN312x_DataBeginWrite();
- ret = PAN312x_DataWrite(&cmd, 1);
- if(ret == 1) {
- PAN312x_DataBeginRead();
- ret = PAN312x_DataReadLast(&cts, 1);
- }
- PAN312x_DataEnd();
- if(ret == 1){
- if((cts & 0xC0u) == 0x40u){
- ret = PAN312x_OK;
- break;
- }
- }
- } while(ret == 1);
- return ret;
- }
- //--------------------------------------------------------------------------------------------------
- /**
- * @简介:底层总线写数据(不加寄存器地址)
- * @参数:buf:写缓冲
- * len:字节数
- * @返回值: 实际写入字节数,或负错误码
- */
- int PAN312xRaw_Write(const void* buf, int len){
- PAN312x_Lock();
- PAN312x_DataBeginWrite();
- int ret = PAN312x_DataWrite(buf, len);
- PAN312x_DataEnd();
- PAN312x_Unlock();
- return ret;
- }
- /**
- * @简介:底层总线按地址写数据
- * @参数:adr:总线地址
- * buf:写缓冲
- * len:字节数
- * @返回值: 实际写入字节数,或负错误码
- */
- int PAN312xRaw_WriteAddr(uint8_t adr, const void* buf, int len){
- int ret;
- PAN312x_Lock();
- PAN312x_DataBeginWrite();
-
- ret = PAN312x_DataWrite(&adr, 1);
- if(ret == 1){
- ret = PAN312x_DataWrite(buf, len);
- }
- PAN312x_DataEnd();
- PAN312x_Unlock();
- return ret;
- }
- /**
- * @简介:按地址写1字节
- * @参数:adr:总线地址
- * val:数据
- * @返回值: 0-成功,非0-失败
- */
- int PAN312xRaw_WriteAddrB1(uint8_t adr, uint8_t val){
- int ret = PAN312xRaw_WriteAddr(adr, &val, 1);
- return ret == 1 ? 0 : ret;
- }
- /**
- * @简介:按地址写2字节
- * @参数:adr:总线地址
- * val:数据
- * @返回值: 0-成功,非0-失败
- */
- int PAN312xRaw_WriteAddrB2(uint8_t adr, uint16_t val){
- int ret = PAN312xRaw_WriteAddr(adr, &val, 2);
- return ret == 2 ? 0 : ret;
- }
- /**
- * @简介:按地址写3字节
- * @参数:adr:总线地址
- * val:数据
- * @返回值: 0-成功,非0-失败
- */
- int PAN312xRaw_WriteAddrB3(uint8_t adr, uint32_t val){
- int ret = PAN312xRaw_WriteAddr(adr, &val, 3);
- return ret == 3 ? 0 : ret;
- }
- /**
- * @简介:按地址写4字节
- * @参数:adr:总线地址
- * val:数据
- * @返回值: 0-成功,非0-失败
- */
- int PAN312xRaw_WriteAddrB4(uint8_t adr, uint32_t val){
- int ret = PAN312xRaw_WriteAddr(adr, &val, 4);
- return ret == 4 ? 0 : ret;
- }
- /**
- * @简介:底层总线按地址读数据
- * @参数:adr:总线地址
- * buf:读缓冲
- * len:字节数
- * @返回值: 实际读取字节数,或负错误码
- */
- int PAN312xRaw_ReadAddr(uint8_t adr, void* buf, int len){
- int ret;
- PAN312x_Lock();
- PAN312x_DataBeginWrite();
- ret = PAN312x_DataWrite(&adr, 1);
- if(ret == 1){
- PAN312x_DataBeginRead();
- ret = PAN312x_DataReadLast(buf, len);
- }
- PAN312x_DataEnd();
- PAN312x_Unlock();
- return ret;
- }
- /**
- * @简介:按地址读1字节
- * @参数:adr:总线地址
- * @返回值: 读到的数据
- */
- int PAN312xRaw_ReadAddrB1(uint8_t adr){
- uint8_t val;
- int ret = PAN312xRaw_ReadAddr(adr, &val, 1);
- return ret == 1 ? val : ret;
- }
- /**
- * @简介:按地址读2字节
- * @参数:adr:总线地址
- * @返回值: 读到的数据
- */
- int PAN312xRaw_ReadAddrB2(uint8_t adr){
- uint16_t val;
- int ret = PAN312xRaw_ReadAddr(adr, &val, 2);
- return ret == 2 ? val : ret;
- }
- /**
- * @简介:按地址读3字节
- * @参数:adr:总线地址
- * @返回值: 读到的数据
- */
- int PAN312xRaw_ReadAddrB3(uint8_t adr){
- uint32_t val = 0;
- int ret = PAN312xRaw_ReadAddr(adr, &val, 3);
- return ret == 3 ? val : ret;
- }
- /**
- * @简介:按地址读4字节
- * @参数:adr:总线地址
- * @返回值: 读到的数据
- */
- uint32_t PAN312xRaw_ReadAddrB4(uint8_t adr){
- uint32_t val;
- int ret = PAN312xRaw_ReadAddr(adr, &val, 4);
- return val;
- }
- //--------------------------------------------------------------------------------------------------
- /**
- * @简介:写PAN312x寄存器
- * @参数:reg:寄存器地址
- * buf:写缓冲
- * len:字节数
- * @返回值: 实际写入字节数,或负错误码
- */
- int PAN312xReg_Write(uint8_t reg, const void* buf, int len){
- return PAN312xRaw_WriteAddr(PAN312xReg_Waddr(reg), buf, len);
- }
- /**
- * @简介:写寄存器1字节
- * @参数:reg:寄存器地址
- * val:数据
- * @返回值: 实际写入字节数或负错误码
- */
- int PAN312xReg_WriteB1(uint8_t reg, uint8_t val){
- int ret = PAN312xReg_Write(reg, &val, 1);
- return ret == 1 ? PAN312x_OK : ret;
- }
- /**
- * @简介:写寄存器2字节
- * @参数:reg:寄存器地址
- * val:数据
- * @返回值: 实际写入字节数或负错误码
- */
- int PAN312xReg_WriteB2(uint8_t reg, uint16_t val){
- int ret = PAN312xReg_Write(reg, &val, 2);
- return ret == 2 ? PAN312x_OK : ret;
- }
- /**
- * @简介:写寄存器3字节
- * @参数:reg:寄存器地址
- * val:数据
- * @返回值: 实际写入字节数或负错误码
- */
- int PAN312xReg_WriteB3(uint8_t reg, uint32_t val){
- int ret = PAN312xReg_Write(reg, &val, 3);
- return ret == 3 ? PAN312x_OK : ret;
- }
- /**
- * @简介:写寄存器4字节
- * @参数:reg:寄存器地址
- * val:数据
- * @返回值: 实际写入字节数或负错误码
- */
- int PAN312xReg_WriteB4(uint8_t reg, uint32_t val){
- int ret = PAN312xReg_Write(reg, &val, 4);
- return ret == 4 ? PAN312x_OK : ret;
- }
- /**
- * @简介:读PAN312x寄存器
- * @参数:reg:寄存器地址
- * buf:读缓冲
- * len:字节数
- * @返回值: 实际读取字节数,或负错误码
- */
- int PAN312xReg_Read(uint8_t reg, void* buf, int len){
- return PAN312xRaw_ReadAddr(PAN312xReg_Raddr(reg), buf, len);
- }
- /**
- * @简介:读寄存器1字节
- * @参数:reg:寄存器地址
- * @返回值: 读到的数据
- */
- int PAN312xReg_ReadB1(uint8_t reg){
- uint8_t val;
- int ret = PAN312xReg_Read(reg, &val, 1);
- return ret == 1 ? val : ret;
- }
- /**
- * @简介:读寄存器2字节
- * @参数:reg:寄存器地址
- * @返回值: 读到的数据
- */
- int PAN312xReg_ReadB2(uint8_t reg){
- uint16_t val;
- int ret = PAN312xReg_Read(reg, &val, 2);
- return ret == 2 ? val : ret;
- }
- /**
- * @简介:读寄存器3字节
- * @参数:reg:寄存器地址
- * @返回值: 读到的数据
- */
- int PAN312xReg_ReadB3(uint8_t reg){
- uint32_t val = 0;
- int ret = PAN312xReg_Read(reg, &val, 3);
- return ret == 3 ? val : ret;
- }
- /**
- * @简介:读寄存器4字节
- * @参数:reg:寄存器地址
- * @返回值: 读到的数据
- */
- uint32_t PAN312xReg_ReadB4(uint8_t reg){
- uint32_t val;
- int ret = PAN312xReg_Read(reg, &val, 4);
- return val;
- }
- //--------------------------------------------------------------------------------------------------
- /**
- * @简介:命令通道等待CTS就绪(已持锁)
- * @参数:无
- * @返回值: PAN312x_OK=成功,其余=CTS/总线错误
- */
- static int __PAN312xCmd_WaitCts__()
- {
- int ret;
- uint8_t cmd = COMMADN_CTS, cts;
- do{
- PAN312x_DataBeginWrite();
- ret = PAN312x_DataWrite(&cmd, 1);
- if(ret == 1) {
- PAN312x_DataBeginRead();
- ret = PAN312x_DataReadLast(&cts, 1);
- }
- PAN312x_DataEnd();
- if(ret == 1){
- if(!(cts & 0x40)) ret = PAN312x_CTS_ERROR;
- else if(!(cts & 0x80)) ret = PAN312x_OK;
- }
- } while(ret == 1);
- return ret;
- }
- /**
- * @简介:命令通道写并等待CTS(已持锁)
- * @参数:wbuf:命令缓冲
- * wlen:字节数
- * @返回值: 写入字节数或错误码
- */
- static int __PAN312xCmd_Write__(const void* wbuf, int wlen){
- PAN312x_DataBeginWrite();
- int ret = PAN312x_DataWrite(wbuf, wlen);
- PAN312x_DataEnd();
- if(ret == wlen){
- int _ret = __PAN312xCmd_WaitCts__();
- if(_ret != PAN312x_OK) ret = _ret;
- }
- return ret;
- }
- /**
- * @简介:命令通道写并等待CTS
- * @参数:wbuf:命令缓冲
- * wlen:字节数
- * @返回值: 写入字节数或错误码
- */
- static int __PAN312xCmd_Write(const void* wbuf, int wlen){
- PAN312x_Lock();
- int ret = __PAN312xCmd_Write__(wbuf, wlen);
- PAN312x_Unlock();
- return ret;
- }
- /**
- * @简介:命令通道写后读应答
- * @参数:wbuf:命令缓冲
- * wlen:写字节数
- * rbuf:读缓冲
- * rlen:读字节数
- * @返回值: 读取字节数或错误码
- */
- static int __PAN312xCmd_WriteRead(const void* wbuf, int wlen, void* rbuf, int rlen)
- {
- PAN312x_Lock();
- int ret = __PAN312xCmd_Write__(wbuf, wlen);
-
- if(ret == wlen){
- uint8_t temp = COMMADN_CTS;//0x44;
- PAN312x_DataBeginWrite();
- ret = PAN312x_DataWrite(&temp, 1);
- if(ret == 1){
- PAN312x_DataBeginRead();
- ret = PAN312x_DataReadNonLast(&temp, 1); //skip CTS
- if(ret == 1){
- ret = PAN312x_DataReadLast(rbuf, rlen);
- }
- }
- PAN312x_DataEnd();
- }
- PAN312x_Unlock();
- return ret;
- }
- /**
- * @简介:查询一次CTS状态
- * @参数:无
- * @返回值: PAN312x_OK=就绪,PAN312x_CTS_ERROR=未就绪,PAN312x_IO_ERROR=总线错误
- */
- int PAN312x_CheckCts(void)
- {
- int ret;
- uint8_t cmd = COMMADN_CTS, cts;
- PAN312x_DataBeginWrite();
- ret = PAN312x_DataWrite(&cmd, 1);
- if(ret == 1) {
- PAN312x_DataBeginRead();
- ret = PAN312x_DataReadLast(&cts, 1);
- }
- PAN312x_DataEnd();
- if(ret == 1){
- if((cts & 0xC0u) == 0x40u){
- return PAN312x_OK;
- } else {
- return PAN312x_CTS_ERROR;
- }
- }
- return PAN312x_IO_ERROR;
- }
- /**
- * @简介:阻塞等待CTS就绪
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_WaitCtsOk(void)
- {
-
- while(1){
- int ret = PAN312x_CheckCts();
- if(ret == PAN312x_OK || ret == PAN312x_IO_ERROR){
- break;
- }
- }
- }
- void PAN312x_ReadInvalidData(void)
- {
- uint8_t tmpBuffer[33];
- PAN312xReg_Read(0x22, tmpBuffer, sizeof(tmpBuffer));
- }
- /**
- * @简介:向寄存器地址写1字节数据
- * @参数:addr - 寄存器地址
- * data - 数据
- * @返回值:无
- */
- void PAN312x_Write( uint8_t addr, uint8_t data )
- {
- PAN312xReg_WriteB1(addr, data);
-
- }
- /**
- * @简介:向寄存器地址读1字节数据
- * @参数:addr - 寄存器地址
- * data - 读数据存储地址
- * @返回值:无
- */
- void PAN312x_Read( uint8_t addr, uint8_t *data )
- {
- PAN312xReg_Read(addr, data, 1);
- }
- /**
- * @简介:按地址连续写操作寄存器(XDATA)
- * @参数:addr:起始地址
- * num_value:字节数
- * value:写缓冲
- * @返回值: 0-成功,非0-失败
- */
- void PAN312x_Set_OP_Reg(uint16_t addr, uint8_t num_value, const uint8_t *value)
- {
- PAN312x_SetXdatas(addr, value, num_value);
- }
- /**
- * @简介:按地址连续读操作寄存器(XDATA)
- * @参数:addr:起始地址
- * num_value:字节数
- * value:读缓冲
- * @返回值: 0-成功,非0-失败
- */
- void PAN312x_Get_OP_Reg(uint16_t addr, uint8_t num_value, uint8_t *value)
- {
- PAN312x_GetXdatas(addr, value, num_value);
- }
- /**
- * @简介:通过PAD复位PAN312x(低电平有效)
- * @参数:无
- * @返回值:无
- */
- void PAN312x_Reset(void)
- {
- PAN312x_Reset_Init();
- PAN312x_Reset_Low();
- delay1ms(20);
- PAN312x_Reset_High();
- delay1ms(20);
- }
- /**
- * @简介:PAN312x IO初始化及配置
- * @参数:无
- * @返回值:无
- */
- void PAN312x_InitIo(void)
- {
- PAN312x_DIO8_INPUT();
- }
- /**
- * @简介:DIO8中断开启使能
- * @参数:无
- * @返回值:无
- */
- void DIO8_EnableInterrupt(void)
- {
- PAN312x_DIO8_INTENABLE();
- }
- /**
- * @简介:DIO8中断关闭使能
- * @参数:无
- * @返回值:无
- */
- void DIO8_DisableInterrupt(void)
- {
- PAN312x_DIO8_INTDISABLE();
- }
- /**
- * @简介:DIO8引脚状态获取
- * @参数:无
- * @返回值:State表示DIO0获取的电平,高电平"1",低电平"0"
- */
- bool DIO8_GetState(void)
- {
- bool State;
- State = PAN312x_DIO8_GetState();
- return State;
- }
- /**
- * @简介:PAN312x FSK初始化
- * @参数:无
- * @返回值:无
- */
- void PAN312x_Fsk_Init(void)
- {
- PAN312x_InitIo(); // PAIO口初始化
- PAN312x_SPI_Init(); // SPI初始化
- PAN312x_Reset(); // 复位RF
- #if PAN312x_INTERFACE == PAN312x_IF_3SPI
- PAN312x_SPI3wire_Enable();
- #endif
- if(TcxoControlByGpio == 0x01){
- PAN312x_TCXO_ControlByGpio(PAN312x_GPIO_PIN_9, 1); /* 使能TCXO, 高电平有效 */
- }
-
-
- PAN312x_Trigger();
- PAN312x_RegMap_Init();
-
- //RC校准
- PAN312x_RC_Calibration();
- }
- /**
- * @简介:PAN312x寄存器RegMap初始化
- * @参数:无
- * @返回值:无
- */
- void PAN312x_RegMap_Init(void)
- {
- uint8_t tmp;
-
- //XTH_DEGLITCH
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C6);
- tmp &= ~PROPERTY_MSK_R2C6_XTH_DEGLITCH_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C6, tmp);
-
-
- //[0x70][0x3e][0x13e]: 0x80
- //[8]:adc_clk相位选择;
- //0:不取反;1:取反
- tmp = 0x80;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R13E, tmp);
-
- //[0x72][0x31]
- tmp = 0x7d;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R231, tmp);
-
- //[0x73][0x53]修改PLL_CP_ISEL,PSHIFT,优化相噪
- tmp = 0x2e;//v1.0:0x28,v1.1:0x2e
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2BE, tmp);
-
- //[0x73][0x41]修改XTH_HYS_EN,优化相噪
- tmp = 0x00;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C1, tmp);
-
- //[0x73][0x53]修改PLL_CP_ISEL,PSHIFT,优化相噪
- tmp = 0x7d;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D3, tmp);
-
- //[0x73][0x53]修改PLL_CP_ISEL,PSHIFT,优化相噪
- tmp = 0xfd;//v1.0:0x7d,v1.1:0xfd
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D4, tmp);
- //[0x73][0x57]:PA模拟模式 ramp时间常数调节
- //PA_RAMP_RC_TRIM[3:1]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D7);
- tmp &= ~PROPERTY_MSK_R2D7_PA_RAMP_RC_TRIM;
- tmp |= (0x06 << 1);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D7, tmp);
-
- //[0x73][0x5c],默认值修改
- tmp = 0xff;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2DC, tmp);
-
- //[0x74][0x16] AGC输入使能
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R316);
- tmp |= PROPERTY_MSK_R316_REG_AGC_IN_MODE | PROPERTY_MSK_R316_REG_DC_CAL_TRIG;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R316, tmp);
-
-
- //V1.1
- //[0x72][0x38]
- tmp = 0x71;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R238, tmp);
-
- //[0x72][0x40]
- tmp = 0x86;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R240, tmp);
-
- //DCDC_CAL_EN: [0x73][0x45][5:3] =111b dcdc
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C5);
- tmp &= ~PROPERTY_MSK_R2C5_DCDC_IMAX;
- tmp |= (0x07 << PROPERTY_POS_R2C5_DCDC_IMAX);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C5, tmp);
-
-
- //[0x73][0x44]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C4);
- //DCDC_BUFSEL:[0x73][0x44][7:5] = 000b
- tmp &= ~PROPERTY_MSK_R2C4_DCDC_BUFSEL;
- //DCDC_RESSEL:[0x73][0x44][4:2] = 010b
- tmp &= ~PROPERTY_MSK_R2C4_DCDC_RESSEL;
- tmp |= (0x02 << PROPERTY_POS_R2C4_DCDC_RESSEL);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C4, tmp);
-
- //[0x73][0x48]
- //XTH_AMP_SEL[7]=0,优化DCDC杂散,32M spur,功耗
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C8);
- tmp &= ~PROPERTY_MSK_R2C8_XTH_AMP_SEL;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C8, tmp);
-
- //[0x73][0x44] RX_TIA_DCOC_ENABLE = 0,analog dc close
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C3);
- tmp &= ~PROPERTY_MSK_R2C3_RX_TIA_DCOC_ENABLE;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C3, tmp);
- //
- // //20250928 tx_setting and rx_setting time
- //[0x74][0x40]
- tmp = 0x02;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R340, tmp);
- //[0x74][0x41]
- tmp = 0x08;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R341, tmp);
- //[0x74][0x43]
- tmp = 0x10;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R343, tmp);
- //[0x74][0x44], 03 to 02,128us to 64us
- tmp = 0x02;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R344, tmp);
- //[0x74][0x45],
- //ramp down 时间,从128us改为64us
- tmp = 0x02;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R345, tmp);
-
- //500kbps
- tmp = 0x22;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R338, tmp);
- }
- /**
- * @简介:读取GET_FWID的4字节应答
- * @参数:tmp:4字节缓冲区,低2字节FwId,高2字节YMDH
- * @返回值: 0-成功,非0-失败
- */
- static int __PAN312x_Get_FwIdReply(uint8_t tmp[4])
- {
- uint8_t cmd = COMMAND_GET_FWID;
- int ret = __PAN312xCmd_WriteRead(&cmd, 1, tmp, 4);
- return ret == 4 ? PAN312x_OK : ret;
- }
- /**
- * @简介:获取PAN312x固件ID(GET_FWID 低2字节)
- * @参数:fwid:固件ID缓冲区
- * @返回值: 0-成功,非0-失败
- */
- int PAN312x_Get_FwId(uint16_t *fwid)
- {
- uint8_t tmp[4];
- int ret = __PAN312x_Get_FwIdReply(tmp);
- if(ret != PAN312x_OK){
- return ret;
- }
- *fwid = (uint16_t)tmp[0] | ((uint16_t)tmp[1] << 8);
- return PAN312x_OK;
- }
- /**
- * @简介:解析 PAN312x 固件编译时间(GET_FWID 应答高字节)
- * @参数:build_time:输出年/月/日/时
- * @返回值: 0-成功,非0-失败
- */
- int PAN312x_Get_FwBuildTime(PAN312xFwBuildTime *build_time)
- {
- uint8_t tmp[4];
- uint16_t ymdh;
- int ret = __PAN312x_Get_FwIdReply(tmp);
- if(ret != PAN312x_OK){
- return ret;
- }
- ymdh = (uint16_t)tmp[2] | ((uint16_t)tmp[3] << 8);
- build_time->ymdh = ymdh;
- build_time->year = (uint16_t)(((ymdh >> 13) & 0x07u) + 2026u);
- build_time->month = (uint8_t)((ymdh >> 9) & 0x0Fu);
- build_time->day = (uint8_t)((ymdh >> 4) & 0x1Fu);
- build_time->hour = (uint8_t)((ymdh & 0x0Fu) + 7u);
- return PAN312x_OK;
- }
- /**
- * @简介:寄存器操作
- * @参数:op_reg_flag - 操作标志,参考PAN312x_OpRegFlag_t
- * addr - 寄存器地址
- * buf - 寄存器值缓冲区
- * len - 缓冲区长度
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_OpRegister(uint8_t op_reg_flag, uint16_t addr, void* buf, int len)
- {
- int ret;
- if(op_reg_flag & OP_REG_FLAG_READ_INFO){
- uint8_t txbuf[3] = {COMMAND_OP_REGISTER, OP_REG_FLAG_READ_INFO, addr};
- ret = __PAN312xCmd_WriteRead(txbuf, 3, buf, 2);
- if(ret == 1) ret = PAN312x_OK;
- } else if(op_reg_flag & OP_REG_FLAG_WRITE){
- uint8_t txbuf[33];
- txbuf[0] = COMMAND_OP_REGISTER;
- txbuf[1] = (op_reg_flag & 0xf0) | ((addr >> 8) & 0x07);
- txbuf[2] = addr;
- memcpy(txbuf + 3, buf, len);
- ret = __PAN312xCmd_Write(txbuf, len + 3);
- if(ret == len + 3) ret = PAN312x_OK;
- } else {
- uint8_t txbuf[4] = {COMMAND_OP_REGISTER, (op_reg_flag & 0xf0) | ((addr >> 8) & 0x07), addr, len};
- ret = __PAN312xCmd_WriteRead(txbuf, 4, buf, len);
- if(ret == len) ret = PAN312x_OK;
- }
- return ret;
- }
- /**
- * @简介:设置sfr/data值,地址自增
- * @参数:addr - sfr/data地址
- * buff - 数据缓冲区
- * len - 数据长度
- * @返回值:实际设置的数据量
- */
- int PAN312x_SetDatas(uint8_t addr, const void* buff, int len)
- {
- int count = len;
- uint8_t* ptr = (uint8_t*)buff;
- uint8_t adr = addr;
- while(len > 0){
- int tx = len > 30 ? 30 : len;
- int ret = PAN312x_OpRegister(OP_REG_FLAG_INC_ADDR | OP_REG_FLAG_WRITE, adr, ptr, tx);
- if(ret != PAN312x_OK) return ret;
- adr += tx;
- ptr += tx;
- len -= tx;
- }
- return count;
- }
- /**
- * @简介:设置单个sfr/data数据
- * @参数:addr - sfr/data地址
- * value - sfr/data数据
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_SetData(uint8_t addr, uint8_t value)
- {
- int ret = PAN312x_SetDatas(addr, &value, 1);
- return ret == 1 ? PAN312x_OK : ret;
- }
- /**
- * @简介:获取sfr/data数据,地址自增
- * @参数:addr - sfr/data地址
- * buff - 数据缓冲区
- * len - 数据长度
- * @返回值:实际设置的数据量
- */
- int PAN312x_GetDatas(uint8_t addr, void* buff, int len)
- {
- int count = len;
- uint8_t* ptr = (uint8_t*)buff;
- uint8_t adr = addr;
- while(len > 0){
- int rx = len > 30 ? 30 : len;
- int ret = PAN312x_OpRegister(OP_REG_FLAG_INC_ADDR, adr, ptr, rx);
- if(ret != PAN312x_OK) return ret;
- adr += rx;
- ptr += rx;
- len -= rx;
- }
- return count;
- }
- /**
- * @简介:获取单个sfr/data数据
- * @参数:addr - sfr/data地址
- * @返回值:成功返回数据值,失败返回负数
- */
- int PAN312x_GetData(uint8_t addr)
- {
- uint8_t value;
- if(PAN312x_GetDatas(addr, &value, 1) == 1){
- return value;
- }
- return -1;
- }
- /**
- * @简介:设置xdata数据,地址自增
- * @参数:addr - xdata地址
- * buff - 数据缓冲区
- * len - 数据长度
- * @返回值:实际设置的数据量
- */
- int PAN312x_SetXdatas(uint16_t addr, const void* buff, int len)
- {
- int count = len;
- uint8_t* ptr = (uint8_t*)buff;
- uint16_t adr = addr;
- while(len > 0){
- int tx = len > 30 ? 30 : len;
- int ret = PAN312x_OpRegister(OP_REG_FLAG_INC_ADDR | OP_REG_FLAG_XDATA | OP_REG_FLAG_WRITE, adr, ptr, tx);
- if(ret != PAN312x_OK) return ret;
- adr += tx;
- ptr += tx;
- len -= tx;
- }
- return count;
- }
- /**
- * @简介:设置单个xdata数据
- * @参数:addr - xdata地址
- * value - xdata数据
- * @返回值:实际设置的数据量
- */
- int PAN312x_SetXdata(uint16_t addr, uint8_t value)
- {
- int ret = PAN312x_SetXdatas(addr, &value, 1);
- return ret == 1 ? PAN312x_OK : ret;
- }
- /**
- * @简介:获取xdata数据,地址自增
- * @参数:addr - xdata地址
- * buff - 数据缓冲区
- * len - 缓冲区长度
- * @返回值:实际获取的数据量
- */
- int PAN312x_GetXdatas(uint16_t addr, void* buff, int len)
- {
- int count = len;
- uint8_t* ptr = (uint8_t*)buff;
- uint16_t adr = addr;
- while(len > 0){
- int rx = len > 30 ? 30 : len;
- int ret = PAN312x_OpRegister(OP_REG_FLAG_INC_ADDR | OP_REG_FLAG_XDATA, adr, ptr, rx);
- if(ret != PAN312x_OK) return ret;
- adr += rx;
- ptr += rx;
- len -= rx;
- }
- return count;
- }
- /**
- * @简介:获取单个xdata数据
- * @参数:addr - xdata地址
- * @返回值:成功返回数据,失败返回负数
- */
- int PAN312x_GetXdata(uint16_t addr)
- {
- uint8_t value;
- if(PAN312x_GetXdatas(addr, &value, 1) == 1){
- return value;
- }
- return -1;
- }
- /**
- * @简介:底层总线写数据(不加寄存器地址)
- * @addr - INFO
- * buff - 数据缓冲区
- * len -
- * @
- */
- int PAN312x_GetInfoDatas(uint8_t addr, void* buff, int len)
- {
- int count = len;
- uint8_t* ptr = (uint8_t*)buff;
- while(len > 0){
- int ret = PAN312x_OpRegister(OP_REG_FLAG_READ_INFO, addr, ptr, 2);
- if(ret != PAN312x_OK) return ret;
- addr += 1;
- ptr += 2;
- len -= 2;
- }
- return count;
- }
- /**
- * @简介:强制进入READY状态,非休眠状态下有效
- * @addr - INFO
- * @简介:底层总线写数据(不加寄存器地址)
- */
- int PAN312x_GetInfoData(uint8_t addr)
- {
- uint16_t value;
- if(PAN312x_GetInfoDatas(addr, &value, 2) == 2){
- return value;
- }
- return -1;
- }
- /**
- * @简介:设置PAN312x进入Tx
- * @参数:channel: 信道
- * condition: 条件标志,参考PAN312xStartCond
- * tx_len: 发送数据长度
-
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Enter_Tx(uint16_t channel, uint8_t condition, uint16_t tx_len)
- {
- uint8_t txbuf[6] = {
- COMMAND_START_TX,
- channel, channel >> 8,
- condition,
- tx_len, (tx_len >> 8) & 0x1f
- };
- int ret = __PAN312xCmd_Write(txbuf, 6);
- return ret == 6 ? PAN312x_OK : ret;
- }
- /**
- * @简介:设置PAN312x进入Rx
- * @参数:channel: 信道
- * condition: 条件标志,参考PAN312xStartCond
- * rx_len: 接收数据长度
- * 注意:可变包长帧结构时,该参数设置为0x00
- * 固定包长帧结构时,该参数需要与发端的数据长度一致
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Enter_Rx(uint16_t channel, uint8_t condition, uint16_t rx_len)
- {
- uint8_t txbuf[6] = {
- COMMAND_START_RX,
- channel, channel >> 8,
- condition,
- rx_len, (rx_len >> 8) & 0x1f
- };
- int ret = __PAN312xCmd_Write(txbuf, 6);
- return ret == 6 ? PAN312x_OK : ret;
- }
- /**
- * @简介:PAN312x发送ACK
- * @参数:无
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Tx_Ack(void)
- {
- uint8_t cmd = COMMAND_TX_ACK;
- int ret = __PAN312xCmd_Write(&cmd, 1);
- return ret == 1 ? PAN312x_OK : ret;
- }
- /**
- * @简介:设置PAN312x进入sleep状态
- * @参数:sleep_mode - 休眠模式,参考PAN312x_SleepMode_t
- * wake_up_state - 唤醒后进入状态(仅NormalSleep有效),参考PAN312x_WakeUpState_t
- * @返回值:无
- */
- int PAN312x_Enter_Sleep(PAN312xSleepMode sleep_mode, PAN312xWakeUpState wake_up_state)
- {
- uint8_t txbuf[2] = {
- COMMAND_GO_SLEEP,
- (sleep_mode == DEEP_SLEEP_MODE ? 0x08 : 0x00) | (wake_up_state & 0x03)
- };
- int ret = PAN312xRaw_Write(txbuf, 2);
- return ret == 2 ? PAN312x_OK : ret;
- }
- /**
- * @简介:强制进入READY状态,非休眠状态下有效
- * @参数:无
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Enter_Ready(void)
- {
- uint8_t cmd = COMMAND_GO_READY;
- int ret = __PAN312xCmd_Write(&cmd, 1);
- return ret == 1 ? PAN312x_OK : ret;
- }
- /**
- * @简介:设置属性寄存器
- * @参数:group- 寄存器地址
- * num_value - 缓冲区长度
- * value - 寄存器值缓冲区
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Set_Property(uint16_t group, uint8_t num_value, const void* value)
- {
- uint8_t txbuf[33];
- txbuf[0] = COMMAND_SET_PROPERTY;
- txbuf[1] = group >> 8;
- txbuf[2] = group;
- memcpy(txbuf + 3, value, num_value);
- int ret = __PAN312xCmd_Write(txbuf, num_value + 3);
- return ret == num_value + 3 ? PAN312x_OK : ret;
- }
- /**
- * @简介:设置1个字节的属性寄存器值
- * @参数:group- 寄存器地址
- * value - 值
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Set_PropertyB1(uint16_t group, uint8_t value)
- {
- int ret = PAN312x_Set_Property(group, 1, &value);
- return ret == 1 ? PAN312x_OK : ret;
- }
- /**
- * @简介:设置2个字节的属性寄存器值
- * @参数:group- 寄存器地址
- * value - 值
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Set_PropertyB2(uint16_t group, uint16_t value)
- {
- int ret = PAN312x_Set_Property(group, 2, &value);
- return ret == 2 ? PAN312x_OK : ret;
- }
- /**
- * @简介:设置3个字节的属性寄存器值
- * @参数:group- 寄存器地址
- * value - 值
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Set_PropertyB3(uint16_t group, uint32_t value)
- {
- int ret = PAN312x_Set_Property(group, 3, &value);
- return ret == 3 ? PAN312x_OK : ret;
- }
- /**
- * @简介:设置4个字节的属性寄存器值
- * @参数:group- 寄存器地址
- * value - 值
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Set_PropertyB4(uint16_t group, uint32_t value)
- {
- int ret = PAN312x_Set_Property(group, 4, &value);
- return ret == 4 ? PAN312x_OK : ret;
- }
- /**
- * @简介:获取属性寄存器
- * @参数:group- 寄存器地址
- * num_value - 缓冲区长度
- * value - 寄存器值缓冲区
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Get_Property(uint16_t group, uint8_t num_value, void *value)
- {
- uint8_t txbuf[4] = {
- COMMAND_GET_PROPERTY,
- num_value, group >> 8, group
- };
- int ret = __PAN312xCmd_WriteRead(txbuf, 4, value, num_value);
- return ret == num_value ? PAN312x_OK : ret;
- }
- /**
- * @简介:获取1个字节的属性寄存器值
- * @参数:group- 寄存器地址
- * value - 值
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Get_PropertyB1(uint16_t group)
- {
- uint8_t value;
- int ret = PAN312x_Get_Property(group, 1, &value);
- return ret == PAN312x_OK ? value : ret;
- }
- /**
- * @简介:获取2个字节的属性寄存器值
- * @参数:group- 寄存器地址
- * value - 值
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Get_PropertyB2(uint16_t group)
- {
- uint16_t value = 0;
- int ret = PAN312x_Get_Property(group, 2, &value);
- return ret == PAN312x_OK ? value : ret;
- }
- /**
- * @简介:获取3个字节的属性寄存器值
- * @参数:group- 寄存器地址
- * value - 值
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Get_PropertyB3(uint16_t group)
- {
- uint32_t value = 0;
- int ret = PAN312x_Get_Property(group, 3, &value);
- return ret == PAN312x_OK ? value : ret;
- }
- /**
- * @简介:获取4个字节的属性寄存器值
- * @参数:group- 寄存器地址
- * value - 值
- * @返回值:返回寄存器值,注意该函数无法区分是否发生错误
- */
- uint32_t PAN312x_Get_PropertyB4(uint16_t group)
- {
- uint32_t value;
- PAN312x_Get_Property(group, 4, &value);
- return value;
- }
- /**
- * @简介:读取芯片当前工作状态
- * @参数:无
- * @返回值: 芯片状态(GET_STATUS字节1低3位)
- */
- uint8_t PAN312x_Get_ChipState(void)
- {
- uint32_t status;
-
- uint8_t cmd = COMMAND_GET_STATUS;
- int ret = __PAN312xCmd_WriteRead(&cmd, 1, &status, 4);
-
- //memcpy(pIrqStatus, &status, 4);
-
- return (uint8_t)((status >> 8) & 0x07);
- }
- /**
- * @简介:启动DutyCycle
- * @参数:sleep_now:
- 0x00:启动DutyCycle时,发送一包报数据,然后休眠
- 0x01:启动DutyCycle时,立即休眠(Sleep)
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Enter_DutyCycle(uint8_t sleep_now)
- {
- uint8_t txbuf[2] = {
- COMMAND_DUTY_CYCLE,
- sleep_now ? 0x08 : 0x00
- };
- int ret = sleep_now ? PAN312xRaw_Write(txbuf, 2) : __PAN312xCmd_Write(txbuf, 2);
- return ret == 2 ? PAN312x_OK : ret;
- }
- /**
- * @简介:退出DutyCycle
- * @参数:无
- * @返回值:无
- */
- int PAN312x_Exit_DutyCycle(uint32_t timeout)
- {
- // int ret;
- // uint32_t tick0 = sys_tick_get();
- // //PAN312x_WaitCtsOk();
- // do{
- // ret = PAN312x_CheckCts();
- // // printf("CtsRetValue: %d\r\n", ret);
- // if(ret == PAN312x_OK){
- // PAN312x_Enter_Ready();
- // PAN312x_Irq_Clear_AllStatus();
- // PAN312x_FlushTxFifoRxFifo();
- // PAN312x_Reset_Modem();
- // PAN312x_WutDisable();
-
- // break;
- // } else if(timeout) {
- // uint32_t ticks = sys_tick_get() - tick0;
- // if(ticks >= timeout){
- // return PAN312x_TIMEOUT;
- // }
- // }
- // }while(1);
- return PAN312x_OK;
- }
- /**
- * @简介:获取PAN312x的irq的状态
- * @参数:pIrqStatus:参考PAN312xIrqs;
- * @返回值:无
- */
- int PAN312x_Irq_Get_Status(PAN312xIrqs* pIrqStatus)
- {
- uint32_t status;
-
- uint8_t cmd = COMMAND_GET_STATUS;
- int ret = __PAN312xCmd_WriteRead(&cmd, 1, &status, 4);
-
- memcpy(pIrqStatus, &status, 4);
-
- return ret == 4 ? PAN312x_OK : ret;
- }
- /**
- * @简介:清除PAN312x的所有irq的状态
- * @参数:无;
- * @返回值:无
- */
- int PAN312x_Irq_Clear_AllStatus(void)
- {
- uint32_t status = 0xffffffff;
- uint8_t txbuf[5];
- txbuf[0] = COMMAND_CLEAR_STATUS;
- memcpy(txbuf + 1, &status, 4);
- int ret = __PAN312xCmd_Write(txbuf, 5);
- return ret == 5 ? PAN312x_OK : ret;
- }
- /**
- * @简介:清除PAN312x的irq的状态
- * @参数:pIrqStatus:参考PAN312xIrqs;
- * @返回值:无
- */
- int PAN312x_Irq_Clear_Status(PAN312xIrqs pIrqStatus)
- {
- uint32_t status;
- memcpy(&status, &pIrqStatus, 4);
- status &= ~(IRQ_STATUS_FW_STATE | IRQ_STATUS_DUTYCYCLE_FLAG);
- uint8_t txbuf[5];
- txbuf[0] = COMMAND_CLEAR_STATUS;
- memcpy(txbuf + 1, &status, 4);
- int ret = __PAN312xCmd_Write(txbuf, 5);
- return ret == 5 ? PAN312x_OK : ret;
- }
- /**
- * @简介:清除PAN312x的tx fifo的状态
- * @参数:pIrqStatus:参考PAN312xIrqs;
- * @返回值:无
- */
- int PAN312x_Irq_Clear_TxFifo_Status(PAN312xIrqs pIrqStatus)
- {
- uint32_t status;
- memcpy(&status, &pIrqStatus, 4);
-
- status &= ~(IRQ_STATUS_FW_STATE | IRQ_STATUS_DUTYCYCLE_FLAG);
- uint8_t txbuf[5];
- txbuf[0] = COMMAND_CLEAR_STATUS;
- memcpy(txbuf + 1, &status, 4);
- int ret = __PAN312xCmd_Write(txbuf, 5);
- return ret == 5 ? PAN312x_OK : ret;
- }
- /**
- * @简介:清除PAN312x的rx fifo的状态
- * @参数:无;
- * @返回值:无
- */
- int PAN312x_Irq_Clear_RxFifo_Status(void)
- {
- uint32_t status = IRQ_STATUS_RX_FIFO;
-
- status &= ~(IRQ_STATUS_FW_STATE | IRQ_STATUS_DUTYCYCLE_FLAG);
- uint8_t txbuf[5];
- txbuf[0] = COMMAND_CLEAR_STATUS;
- memcpy(txbuf + 1, &status, 4);
- int ret = __PAN312xCmd_Write(txbuf, 5);
- return ret == 5 ? PAN312x_OK : ret;
- }
- /**
- * @简介:清除PAN312x的rx done的状态
- * @参数:无
- * @返回值:无
- */
- int PAN312x_Irq_Clear_RxDone_Status(void)
- {
- uint32_t status = IRQ_STATUS_RX_DONE | IRQ_STATUS_RX_FIFO;
-
- status &= ~(IRQ_STATUS_FW_STATE | IRQ_STATUS_DUTYCYCLE_FLAG);
- uint8_t txbuf[5];
- txbuf[0] = COMMAND_CLEAR_STATUS;
- memcpy(txbuf + 1, &status, 4);
- int ret = __PAN312xCmd_Write(txbuf, 5);
- return ret == 5 ? PAN312x_OK : ret;
- }
- /**
- * @简介:清除PAN312x的rx crc error的状态
- * @参数:无
- * @返回值:无
- */
- int PAN312x_Irq_Clear_RxCrcError_Status(void)
- {
- uint32_t status = IRQ_STATUS_CRC_ERROR | IRQ_STATUS_RX_FIFO;
-
- status &= ~(IRQ_STATUS_FW_STATE | IRQ_STATUS_DUTYCYCLE_FLAG);
- uint8_t txbuf[5];
- txbuf[0] = COMMAND_CLEAR_STATUS;
- memcpy(txbuf + 1, &status, 4);
- int ret = __PAN312xCmd_Write(txbuf, 5);
- return ret == 5 ? PAN312x_OK : ret;
- }
- /**
- * @简介:获取PAN312x的GpioIrq 使能的状态
- * @参数:无
- * @返回值:GpioIrq 使能的状态值
- */
- uint32_t PAN312x_Get_GpioIrq_EnableStatus(void)
- {
- return PAN312x_Get_PropertyB3(PROPERTY_ADDR_IRQ_ENABLE);
- }
- /**
- * @简介:使能or失能某个中断映射到Gpio引脚上
- * @参数:status:
- * @返回值:无
- */
- void PAN312x_GpioIrq_EnableStatus(uint32_t status)
- {
- PAN312x_Set_PropertyB3(PROPERTY_ADDR_IRQ_ENABLE, status);
- }
- /**
- * @简介:将PAN312x的中断映射到PAN312x的irq(GPIO8)引脚上
- * @参数:pIrqStatus:参考PAN312xIrqList;
- * xNewState: 0:enable
- * 1:disable
- * @返回值:无
- */
- void PAN312x_GpioIrq_Config(PAN312xIrqList xIrq, SFunctionalState xNewState)
- {
- uint32_t status = PAN312x_Get_GpioIrq_EnableStatus();
- uint32_t newsts = xNewState ? (status | xIrq) : (status & (~xIrq));
- if(status != newsts){
- PAN312x_GpioIrq_EnableStatus(newsts);
- }
- }
- /**
- * @简介:设置PAN312x的包过滤控制
- * @参数:epat1: 0:
- * 1:
- * epat2: 0:
- * 1:
- * epat3: 0:
- * 1:
- * inten: 0: 失能node id中断
- * 1: 使能node id中断
- * reset: 0:node id不匹配时,不丢弃数据,继续接收
- 1:node id不匹配时,丢弃已接收的数据,继续接收
- * @返回值:无
- */
- void PAN312x_Set_PacketFilter_Ctrl(uint8_t PacketFilterCtrl)
- {
- //uint8_t tmp = 0x00;
- //tmp |= (inten << 7) | (epat3 << 6) | (epat2 << 5) | (epat1 << 4) | (reset << 3);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_PACKET_FILTER_CTRL, PacketFilterCtrl);
- }
- /**
- * @简介:设置PAN312x的包过滤掩码
- * @参数:pat_mask:
- * @返回值:无
- */
- void PAN312x_Set_PacketFilter_Mask(uint32_t pat_mask)
- {
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_PACKET_FILTER_MASK, pat_mask);
- }
- /**
- * @简介:设置PAN312x的包过滤pat1_value
- * @参数: pat1_value:
- * @返回值:无
- */
- void PAN312x_Set_PacketFilter_Pat1Value(uint32_t pat1_value)
- {
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_PACKET_FILTER_PAT1, pat1_value);
- }
- /**
- * @简介:设置PAN312x的包过滤pat2_value
- * @参数: pat2_value:
- * @返回值:无
- */
- void PAN312x_Set_PacketFilter_Pat2Value(uint32_t pat2_value)
- {
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_PACKET_FILTER_PAT2, pat2_value);
- }
- /**
- * @简介:设置PAN312x的包过滤pat3_value
- * @参数: pat3_value:
- * @返回值:无
- */
- void PAN312x_Set_PacketFilter_Pat3Value(uint32_t pat3_value)
- {
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_PACKET_FILTER_PAT3, pat3_value);
- }
- /**
- * @简介:设置PAN312x的NodeId
- * @参数: nodeid_length : nodeid的长度(最大4bytes)
- * nodeid_position(该参数只针对rx有效):
- 0 nodeid before length
- * 1 nodeid after length
- * @返回值:无
- */
- void PAN312x_Set_Rx_NodeId_Config(uint8_t nodeid_length, uint8_t nodeid_position)
- {
- uint8_t tmp = (nodeid_length << 2) | (nodeid_position << 1);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_NODE_ID_CONF, tmp);
- }
- /**
- * @简介:获取PAN312x接收的NodeId的值
- * @参数: nodeid_value : nodeid_value的值
- * @返回值:无
- * 备注:
- * 这个只支持如下帧结构:
- * preamble + syncword + node_id + length + data + crc
- */
- uint32_t PAN312x_Get_Rx_NodeId_Value(void)
- {
- return PAN312x_Get_PropertyB4(PROPERTY_ADDR_RX_NODE_ID);
- }
- /**
- * @简介:设置PAN3110的Tx NodeId的长度
- * @参数: nodeid_length : nodeid的长度(最大4bytes)
- * @返回值:无
- * 备注:tx时,只支持node id在前的帧结构
- * nodeid_length = 0时,帧结构为preamble + syncword + length + data + crc;
- * nodeid_length非0时,帧结构为preamble + nodeid + syncword + length + data + crc;
- */
- void PAN312x_Set_Tx_NodeId_Lnegth(uint8_t nodeid_length)
- {
- uint8_t tmp = (nodeid_length << 5);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_NODE_ID_CONF, tmp);
- }
- /**
- * @简介:设置PAN312x的NodeId的值
- * @参数: nodeid_value : nodeid_value的值
- * @返回值:无
- * 备注:
- * 这个只支持如下帧结构:
- * preamble + syncword + node_id + length + data + crc
- */
- void PAN312x_Set_Tx_NodeId_Value(uint32_t nodeid_value)
- {
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_R11C_REG_NODE_ID_L1, nodeid_value);
- }
- /**
- * @简介:设置PAN312x的TxPacket
- * @参数:crc_state: 0 失能crc
- * 1 使能crc
- * packet_type: 0 固定包长
- * 1 可变包长
- * @返回值:无
- */
- void PAN312x_Set_TxPacket_Config(PAN312xTxPacketConfig TxPacketConfig)
- {
-
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_TXPKT_CONF, TxPacketConfig);
- }
- /**
- * @简介:设置PAN312x的TxPacket Number
- * @参数:number:
- * @返回值:无
- */
- void PAN312x_Set_TxPacket_ExtraNumber(uint8_t number)
- {
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_TX_REPEAT_TIMES, number);
- }
- /**
- * @简介:设置PAN312x的TxPacket Gap
- * @参数:gap:(单位:1us))
- * @返回值:无
- */
- void PAN312x_Set_TxPacket_Gap(uint16_t gap)
- {
- PAN312x_Set_PropertyB2(PROPERTY_ADDR_TX_PACKET_GAP, gap);
- }
- /**
- * @简介:设置PAN312x的退出当前状态后的状态
- * @参数:cond:参考 PAN312x_ExitStateCond_t
- * state:参考 PAN312x_State_t
- * @返回值:无
- */
- void PAN312x_Set_ExitState(PAN312xExitStateCond cond, PAN312xState state)
- {
- PAN312x_Set_PropertyB1(cond, state & 0x03);
- }
- /**
- * 注意:可变包长帧结构时,该参数设置为0x00
- * @cond PAN312x_ExitStateCond_t
- * @
- */
- PAN312xState PAN312x_Get_ExitState(PAN312xExitStateCond cond)
- {
- return (PAN312xState)PAN312x_Get_PropertyB1(cond);
- }
- /**
- * @简介:PAN312x Tx Ok后,rf的退出状态
- * @参数:state:参考PAN312x_State_t
- * @返回值:无
- */
- void PAN312x_Set_TxOk_ExitState(PAN312xState state)
- {
- PAN312x_Set_ExitState(EXIT_STATE_COND_TX_OK, state);
- }
- /**
- * @简介:设置PAN312x的RxPacket
- * @参数:crc_host: 0: 由mcu来自己计算crc
- * 1: 由PAN312x固件来计算crc,同时需要使能crc,失能硬件计算crc
- * crc_hardware: 0: 失能硬件计算crc
- * 1: 使能引荐计算crc,同时需要使能crc
- * crc_state: 0: 失能crc
- * 1: 使能crc
- * read_pl_by_cmd:
- * length_in_payload:
- * rx_packet_type: 0:固定包长
- * 1:可变包长
- *
- * @返回值:接收的数据长度
- */
- void PAN312x_Set_RxPacket_Config(PAN312xRxPacketConfig RxPacketConfig)
- {
-
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_RXPKT_CONF, RxPacketConfig);
- }
- /**
- * @简介:设置PAN312x Rx Timeout时间
- * @参数:rx_time_out:单位(us)
- * @返回值:无
- */
- void PAN312x_Set_RxTimeOut(uint32_t rx_time_out)
- {
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_RX_TIMEOUT, rx_time_out);
- }
- /**
- * @简介:设置PAN312x Rx Timeout2时间
- * @参数:rx_time_out_2:单位(us)
- * @返回值: 无
- */
- void PAN312x_Set_RxTimeOut2(uint32_t rx_time_out_2)
- {
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_RX_TIMEOUT2, rx_time_out_2);
- }
- /**
- * @简介:设置Rx Timeout2使能条件
- * @参数:Cond:参考PAN312xRxTimeout2EnableCond
- * @返回值: 无
- */
- void PAN312x_Set_RxTimeout2EnableCond(PAN312xRxTimeout2EnableCond Cond)
- {
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_RXPKT_CONF2, Cond);
- }
-
- /**
- * @简介:PAN312x Rx Timeout后,从rx退出后的状态
- * @参数:state:参考PAN312x_State_t
- * @返回值:无
- */
- void PAN312x_Set_RxTimeout_ExitState(PAN312xState state)
- {
- PAN312x_Set_ExitState(EXIT_STATE_COND_RX_TIMEOUT, state);
- }
- /**
- * @简介:PAN312x Rx Invalid(CRC ERROR)后,rf的退出状态
- * @参数:state:参考PAN312x_State_t
- * @返回值:无
- */
- void PAN312x_Set_RxInvalid_ExitState(PAN312xState state)
- {
- PAN312x_Set_ExitState(EXIT_STATE_COND_RX_INVALID, state);
- }
- /**
- * @简介:PAN312x Rx Valid(RX DONE)后,rf的退出状态
- * @参数:state:参考PAN312x_State_t
- * @返回值:无
- */
- void PAN312x_Set_RxValid_ExitState(PAN312xState state)
- {
- PAN312x_Set_ExitState(EXIT_STATE_COND_RX_VALID, state);
- }
- void PAN312x_Set_AckError_ExitState(PAN312xState state)
- {
- PAN312x_Set_ExitState(EXIT_STATE_COND_ACK_ERROR, state);
- }
- /**
- * @简介:读取自动应答接收字节
- * @参数:无
- * @返回值: 应答字节
- */
- uint8_t PAN312x_GetAckRxByte(void)
- {
- return PAN312x_Get_PropertyB1(PROPERTY_ADDR_RX_ACK_BYTE);
- }
- /**
- * @简介:设置自动应答发送字节
- * @参数:AckTxByte:应答发送字节
- * @返回值: 无
- */
- void PAN312x_SetAckTxByte(uint8_t AckTxByte)
- {
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_TX_ACK_BYTE, AckTxByte);
- }
- /**
- * @简介:设置自动应答校验字节
- * @参数:AckCheckByte:应答校验字节
- * @返回值: 无
- */
- void PAN312x_SetAckCheckByte(uint8_t AckCheckByte)
- {
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_ACK_CHECK_BYTE, AckCheckByte);
- }
- /**
- * @简介:设置PAN312x Ack Timeout时间
- * @参数:ack_time_out: 单位(us)
- * @返回值:无
- */
- void PAN312x_Set_AckTimeOut(uint32_t ack_time_out)
- {
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_ACK_TIMEOUT, ack_time_out);
- }
- /**
- * @简介:PAN312x Ack Timeout后,rf的退出状态
- * @参数:state:参考PAN312x_State_t
- * @返回值:无
- * 备注:tx端发送完数据,转为rx,如果一直未接收到ack,直至AckTimeout后,rf退出后的状态
- */
- void PAN312x_Set_AckTimeout_ExitState(PAN312xState state)
- {
- PAN312x_Set_ExitState(EXIT_STATE_COND_ACK_TIMEOUT, state);
- }
- /**
- * @简介:单位:10us
- * @参数:state:参考PAN312x_State_t
- * @返回值:无
- * 备注:
- */
- void PAN312x_Set_AckTxDelay1(uint8_t delay1)
- {
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_ACK_TX_DELAY1, delay1);
- }
- /**
- * @简介:单位:1us
- * @参数:delay2
- * @返回值:无
- * 备注:
- */
- void PAN312x_Set_AckTxDelay2(uint8_t delay2)
- {
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_ACK_TX_DELAY2, delay2);
- }
- /**
- * @简介:设置DutyCycle基准时间
- * @参数:BaseTime
- * @返回值:无
- * 备注:最小时间62.5us
- */
- void PAN312x_Set_BaseDutyCycleTime(uint32_t BaseTime)
- {
- PAN312x_Set_PropertyB3(PROPERTY_ADDR_DUTY_CYCLE_BASE, BaseTime);
- }
- /**
- * @简介:设置PAN312x 系统控制
- * @参数:ctrl:参考PAN312x_SysCtrl_t
- * @返回值:无
- */
- void PAN312x_System_Ctrl(PAN312xSysCtrl ctrl)
- {
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_SYS_CTRL0, ctrl);
- }
- /**
- * @简介:获取PAN312x的接收数据长度
- * @参数:无
- * @返回值:接收的数据长度
- */
- uint16_t PAN312x_Get_Rx_Length(void)
- {
- return PAN312x_Get_PropertyB2(PROPERTY_ADDR_RX_LENGTH_IN_PACKET);
-
- }
- /**
- * @简介:获取当前接收包内的数据长度
- * @参数:无
- * @返回值: 接收数据长度
- */
- uint16_t PAN312x_Get_RxLengthInPacket(void)
- {
- return PAN312x_Get_PropertyB2(PROPERTY_ADDR_RX_LENGTH_IN_PACKET);
- }
- uint16_t PAN312x_Get_RxLengthInFifo(void)
- {
- return PAN312x_Get_PropertyB2(PROPERTY_ADDR_RX_LENGTH_IN_FIFO);
- }
- /**
- * @简介:PAN312x 向FIFO写数据
- * @参数:uint8_t *buffer,数组指针 uint8_t size长度
- * @返回值:无
- */
- void PAN312x_Write_Fifo(const void *buffer, uint8_t size )
- {
- if(size == 0 || size > 128){
- return;
- }
- PAN312xReg_Write(0x01, buffer, size);
- }
- /**
- * @简介:PAN312x 向FIFO读数据
- * @参数:uint8_t *buffer,数组指针 uint8_t size长度
- * @返回值:uint8_t *buffer 存储读取内容
- */
- void PAN312x_Read_Fifo( uint8_t *buffer, uint8_t size )
- {
- if(size == 0 || size > 128){
- return;
- }
- PAN312xReg_Read(0x01, buffer, size);
- }
- /**
- * @简介:PAN312x通过命令获取SPI接收数据,固件计算CRC时必须使用该接口
- * @参数:ubuf - 数据缓冲区
- * len - 缓冲区长度
- * @返回值:0-成功,非0-失败
- */
- int PAN312x_Get_RxDataByCmd(void *data, uint8_t length)
- {
- uint8_t cmd = COMMAND_GET_RXDATA;
- int ret = __PAN312xCmd_WriteRead(&cmd, 1, data, length);
- return ret == length ? PAN312x_OK : ret;
- }
- /**
- * @简介:设置PAN312x的可变包长length为几个bytes
- * @参数:LengthFieldConfig:
- * 0: 1 bytes
- * 1: 2 bytes
- * @返回值: 无
- */
- void PAN312x_SetLengthFiled(PAN312xLengthFieldConfig LengthFieldConfig)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R11B);
-
- tmp &= ~PROPERTY_MSK_R11B_REG_VIA_LENGTH_LEN;
-
- tmp |= (LengthFieldConfig << 7);
-
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R11B, tmp);
- }
- /**
- * @简介:设置PAN312x的可变包长lengthField的大小端
- * @参数:number_byte:
- * 0: 小端
- * 1: 大端
- * @返回值: 无
- */
- void PAN312x_SetLengthFiledEndian(uint8_t endian)
- {
- uint8_t tmp;
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R12B);
-
- tmp &= ~PROPERTY_MSK_R12B_REG_VIA_LEN_ENDIAN;
-
- tmp |= (endian << 5);
-
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R12B, tmp);
- }
- /**
- * @简介:设置PAN312x的Payload Manchester mode
- * @参数:mode:参考PAN312x_MANCHESTER_Mode_t
- * @返回值:无
- */
- void PAN312x_Set_PayloadManchesterMode(PAN312xManchesterMode mode)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R11A);
- tmp &= ~PROPERTY_MSK_R11A_REG_PL_MAN_MODE;
- tmp |= (mode << 4);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R11A, tmp);
- }
- /**
- * @简介:使能PAN312x的Payload Manchester
- * @参数:无
- * @返回值:无
- */
- void PAN312x_PayloadManchesterEnable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R12E);
- tmp |= PROPERTY_MSK_R12E_FIELD1_MAN_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R12E, tmp);
- }
- /**
- * @简介:失能PAN312x的Payload Manchester
- * @参数:无
- * @返回值:无
- */
- void PAN312x_PayloadManchesterDisable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R12E);
- tmp &= ~PROPERTY_MSK_R12E_FIELD1_MAN_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R12E, tmp);
- }
- /**
- * @简介:设置PAN312x的Payload Msb First
- * @参数:无
- * @返回值:无
- */
- void PAN312x_Set_Payload_MsbFirst(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R10D);
- tmp &= ~PROPERTY_MSK_R10D_REG_PAYLOAD_ENDIAN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R10D, tmp);
-
- }
- /**
- * @简介:设置PAN312x的Payload Lsb First
- * @参数:无
- * @返回值:无
- */
- void PAN312x_Set_Payload_LsbFirst(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R10D);
- tmp |= PROPERTY_MSK_R10D_REG_PAYLOAD_ENDIAN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R10D, tmp);
- }
- /**
- * @简介:使能PAN312x的Whitening
- * @参数:无
- * @返回值:无
- */
- void PAN312x_Whitening_Enable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R12E);
- tmp |= PROPERTY_MSK_R12E_FIELD1_WHITE_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R12E, tmp);
-
- }
- /**
- * @简介:失能PAN312x的Whitening
- * @参数:无
- * @返回值:无
- */
- void PAN312x_Whitening_Disable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R12E);
- tmp &= ~PROPERTY_MSK_R12E_FIELD1_WHITE_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R12E, tmp);
- }
- /**
- * @简介:使能PAN312x的PN9IBM扰码模式
- * @参数:无
- * @返回值:无
- */
- void PAN312x_Whitening_PN9IBM_Enable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R12B);
- tmp |= PROPERTY_MSK_R12B_REG_WHITEN_PN9_SEL;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R12B, tmp);
- }
- /**
- * @简介:失能PAN312x的PN9IBM扰码模式
- * @参数:无
- * @返回值:无
- */
- void PAN312x_Whitening_PN9IBM_Disable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R12B);
- tmp &= ~PROPERTY_MSK_R12B_REG_WHITEN_PN9_SEL;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R12B, tmp);
- }
- /**
- * @简介:设置PAN312x的白化计算复位
- * @参数:无
- * @返回值:无
- */
- void PAN312x_Whitening_Cal_Reset(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R12E);
- tmp |= PROPERTY_MSK_R12E_FIELD1_WHITE_SET;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R12E, tmp);
- }
- /**
- * @简介:设置PAN312x的白化计算不复位
- * @参数:无
- * @返回值:无
- */
- void PAN312x_Whitening_Cal_NoReset(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R12E);
- tmp &= ~PROPERTY_MSK_R12E_FIELD1_WHITE_SET;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R12E, tmp);
- }
- /**
- * @简介:设置PAN312x的白化多项式长度
- * @参数:length
- * @返回值:无
- */
- void PAN312x_Set_Whitening_Length(uint8_t length)
- {
- uint8_t tmp;
- if(length > 15){
- return;
- }
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R11A);
- tmp &= ~PROPERTY_MSK_R11A_REG_WHITEN_LENGTH;
- tmp |= (length & 0x0f);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R11A, tmp);
- }
- /**
- * @简介:设置PAN312x的白化输出序列模式
- * @参数:mode:
- * 0:白化输出序列从第一个序列开始
- * 1:白化输出序列从第二个序列开始
- * @返回值:无
- */
- void PAN312x_Set_Whitening_Mode(uint8_t mode)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R116);
- tmp &= ~PROPERTY_MSK_R116_REG_WHITEN_SEL;
- tmp |= (mode << 3);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R116, tmp);
- }
- /**
- * @简介:设置PAN312x的白化初始值
- * @参数:seed:白化初始值
- * @返回值:无
- */
- void PAN312x_Set_Whitening_Seed(uint16_t seed)
- {
- PAN312x_Set_PropertyB2(PROPERTY_ADDR_R118, seed);
- }
- /**
- * @简介:设置PAN312x的白化与或输入bit和输出bit
- * @参数:xor1_bit:
- * xor2_bit:
- * output_bit
- * example:
- * xor1_bit | xor2_bit | output_bit
- * PN6: 2 | 1 | 6
- * @返回值:无
- */
- void PAN312x_Set_Whitening_BitSel(uint8_t xor1_bit, uint8_t xor2_bit, uint8_t output_bit)
- {
- uint8_t tmp;
- if((xor1_bit > 15) || (xor2_bit > 15) || (output_bit > 15)){
- return;
- }
- tmp = xor1_bit | (xor2_bit << 4);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R117, tmp);
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R116);
- tmp &= ~PROPERTY_MSK_R116_REG_WHITEN_OUT_SEL;
- tmp |= (output_bit << 4);
-
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R116, tmp);
- }
- /**
- * @简介:设置PAN312x的payload 的白化类型
- * @参数:WhiteningPattern
- * typedef enum{
- * WHITENING_DISABLE = 0,
- * WHITENING_PN6 = 1,
- * WHITENING_PN7 = 2,
- * WHITENING_PN9 = 3,
- * WHITENING_PN9_IBM = 4,
- * WHITENING_IEEE_802154g = 5,
- * WHITENING_PN9_CCITT = 6,
- * WHITENING_PN11 = 7,
- * WHITENING_PN13 = 8,
- * WHITENING_PN15 = 9
- * }PAN312xWhiteningPattern;
- * @返回值:无
- */
- void PAN312x_Set_Payload_Whitening_Pattern(PAN312xWhiteningPattern WhiteningPattern)
- {
- if(WhiteningPattern == WHITENING_DISABLE){
- PAN312x_Whitening_Disable();
- PAN312x_Whitening_PN9IBM_Disable();
- return;
- }else{
- PAN312x_Whitening_Enable();
- }
- PAN312x_Whitening_Cal_Reset();
- PAN312x_Set_Whitening_Mode(0);
-
- if(WhiteningPattern == WHITENING_PN6){
- PAN312x_Set_Whitening_Length(6);
- PAN312x_Set_Whitening_BitSel(2,1,6);
- PAN312x_Set_Whitening_Mode(0);
- PAN312x_Set_Whitening_Seed(0xffff);
- PAN312x_Whitening_PN9IBM_Disable();
- }else if(WhiteningPattern == WHITENING_PN7){
- PAN312x_Set_Whitening_Length(7);
- PAN312x_Set_Whitening_BitSel(5,1,1);
- PAN312x_Set_Whitening_Mode(0);
- PAN312x_Set_Whitening_Seed(0xffff);
- PAN312x_Whitening_PN9IBM_Disable();
- }else if(WhiteningPattern == WHITENING_PN9){
- PAN312x_Set_Whitening_Length(9);
- PAN312x_Set_Whitening_BitSel(6,1,9);
- PAN312x_Set_Whitening_Mode(0);
- PAN312x_Set_Whitening_Seed(0xffff);
- PAN312x_Whitening_PN9IBM_Disable();
- }else if(WhiteningPattern == WHITENING_PN9_IBM){
- PAN312x_Set_Whitening_Length(9);
- PAN312x_Set_Whitening_BitSel(6,1,9);
- PAN312x_Set_Whitening_Mode(1);
- PAN312x_Set_Whitening_Seed(0xffff);
- PAN312x_Whitening_PN9IBM_Enable();
- }else if(WhiteningPattern == WHITENING_IEEE_802154g){
- PAN312x_Set_Whitening_Length(9);
- PAN312x_Set_Whitening_BitSel(6,1,9);
- PAN312x_Set_Whitening_Mode(1);
- PAN312x_Set_Whitening_Seed(0xffff);
- PAN312x_Whitening_PN9IBM_Disable();
- }else if(WhiteningPattern == WHITENING_PN9_CCITT){
- PAN312x_Set_Whitening_Length(9);
- PAN312x_Set_Whitening_BitSel(6,1,1);
- PAN312x_Set_Whitening_Mode(0);
- PAN312x_Set_Whitening_Seed(0xffff);
- PAN312x_Whitening_PN9IBM_Disable();
- }else if(WhiteningPattern == WHITENING_PN11){
- PAN312x_Set_Whitening_Length(11);
- PAN312x_Set_Whitening_BitSel(3,1,11);
- PAN312x_Set_Whitening_Mode(0);
- PAN312x_Set_Whitening_Seed(0xffff);
- PAN312x_Whitening_PN9IBM_Disable();
- }else if(WhiteningPattern == WHITENING_PN13){
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R11A);
- tmp |= PROPERTY_MSK_R11A_REG_WHITEN_PN13_SEL;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R11A, tmp);
-
- PAN312x_Set_Whitening_Length(13);
- PAN312x_Set_Whitening_BitSel(4,5,13);
- PAN312x_Set_Whitening_Mode(0);
- PAN312x_Set_Whitening_Seed(0xffff);
- PAN312x_Whitening_PN9IBM_Disable();
- }else if(WhiteningPattern == WHITENING_PN15){
- PAN312x_Set_Whitening_Length(15);
- PAN312x_Set_Whitening_BitSel(2,1,15);
- PAN312x_Set_Whitening_Mode(0);
- PAN312x_Set_Whitening_Seed(0xffff);
- PAN312x_Whitening_PN9IBM_Disable();
- }
- }
- /**
- * @简介:设置PAN312x的CrcMode
- * @参数:CrcMode
- * 0: crc-8
- * 1: crc-16
- * 2: crc-24
- * 3: crc-32
- * @返回值:无
- */
- void PAN312x_Set_CrcMode(PAN312xCrcMode CrcMode)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R116);
- tmp &= ~PROPERTY_MSK_R116_REG_CRC_MODE;
- tmp |= CrcMode;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R116, tmp);
- }
- /**
- * @简介:设置PAN312x的CrcSeed
- * @参数:CrcSeed
- * @返回值:无
- */
- void PAN312x_Set_CrcSeed(uint32_t CrcSeed)
- {
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_R112, CrcSeed);
- }
- /**
- * @简介:设置PAN312x的crc多项式
- * @参数:CrcPolynomial
- * @返回值:无
- */
- void PAN312x_Set_CrcPolynomial(uint32_t CrcPolynomial)
- {
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_R10E, CrcPolynomial);
- }
- /**
- * @简介:设置PAN312x的crc invert(CRC结果是否取反)
- * @参数:xNewState
- * 0: 不取反
- * 1: 取反
- * @返回值:无
- */
- void PAN312x_Set_CrcInvert(SFunctionalState xNewState)
- {
- uint8_t tmp;
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R116);
-
- if(xNewState == S_ENABLE) {
- tmp |= PROPERTY_MSK_R116_REG_CRC_NOT_SEL;
- }
- else{
- tmp &= ~PROPERTY_MSK_R116_REG_CRC_NOT_SEL;
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R116, tmp);
-
- }
- /**
- // PAN312x_Get_OP_Reg(R10D, 1, &tmp_test);
- * @xNewState
- * @
- */
- //uint8_t tmp_test;
- void PAN312x_Set_CrcEndian(SFunctionalState xNewState)
- {
- uint8_t tmp;
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R10D);
-
- if(xNewState == S_ENABLE) {
- tmp |= PROPERTY_MSK_R10D_REG_CRC_ENDIAN;
- }
- else{
- tmp &= ~PROPERTY_MSK_R10D_REG_CRC_ENDIAN;
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R10D, tmp);
- }
- /**
- * @简介:设置PAN312x的crc
- * @参数:xNewState
- * 0:帧结构中没有crc字段
- * 1:帧结构中插入crc字段
- * @返回值:无
- */
- void PAN312x_CrcInsertSelect(SFunctionalState xNewState)
- {
- uint8_t tmp;
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R12E);
-
- if(xNewState == S_ENABLE) {
- tmp |= PROPERTY_MSK_R12E_FIELD1_CRC_IN;
- }
- else{
- tmp &= ~PROPERTY_MSK_R12E_FIELD1_CRC_IN;
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R12E, tmp);
- }
- /**
- * @简介:将整个CRC部分的高低顺序倒过来
- * @参数:CrcBitOrder:参考PAN312xCrcBitOrder
- * @返回值:无
- */
- void PAN312x_Set_CrcBitOrder(PAN312xCrcBitOrder CrcBitOrder)
- {
- uint8_t tmp;
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R10D);
-
- if(CrcBitOrder == CRC_BIT_ORDER_MSB_FIRST) {
- tmp &= ~PROPERTY_MSK_R10D_REG_CRC_ENDIAN;
-
- }else if(CrcBitOrder == CRC_BIT_ORDER_LSB_FIRST){
- tmp |= PROPERTY_MSK_R10D_REG_CRC_ENDIAN;
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R10D, tmp);
- }
- /**
- * @简介:将整个CRC将两个Byte的位置倒过来,但是不改变每个Byte里面的Bit的顺序
- * @参数:CrcByteSwap:参考PAN312xCrcByteSwap
- * @返回值:无
- */
- void PAN312x_Set_CrcByteSwap(PAN312xCrcByteSwap CrcByteSwap)
- {
- uint8_t tmp;
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R12B);
-
- if(CrcByteSwap == CRC_BIT_ORDER_MSB_FIRST) {
- tmp &= ~PROPERTY_MSK_R12B_CRC_BYTE_ENDIAN;
-
- }else if(CrcByteSwap == CRC_BIT_ORDER_LSB_FIRST){
- tmp |= PROPERTY_MSK_R12B_CRC_BYTE_ENDIAN;
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R12B, tmp);
- }
- /**
- * @简介:设置PAN312x的SyncWord Pattern
- * @参数:Syncwords
- * SyncLength
- * @返回值:无
- */
- void PAN312x_Set_SyncWordPattern(uint32_t Syncwords, uint8_t SyncWordLength)
- {
- uint8_t tmp;
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R10D);
- tmp &= ~PROPERTY_MSK_R10D_REG_SYNC_LEN;
- tmp |= (SyncWordLength << 0);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R10D, tmp);
-
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_R189, Syncwords);
- }
- /**
- * @简介:设置PAN312x的SyncWord Length
- * @参数:SyncWordLength
- * @返回值:无
- */
- void PAN312x_Set_SyncWordLength(uint8_t SyncWordLength)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R10D);
- tmp &= ~PROPERTY_MSK_R10D_REG_SYNC_LEN;
- tmp |= (SyncWordLength << 0);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R10D, tmp);
- }
- /**
- * @简介:设置PAN312x的Syncword Manchester编码
- * @参数:PreambleManchesterMode:
- * 0: 0->01
- * 1: 0->10
- * @返回值:无
- */
- void PAN312x_Set_SyncwordManchesterMode(PAN312xManchesterMode SyncwordManchesterMode)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R10D);
- tmp &= ~PROPERTY_MSK_R10D_REG_SYNC_MAN_MODE;
- tmp |= (SyncwordManchesterMode << 4);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R10D, tmp);
- }
- /**
- * @简介:使能PAN312x的Syncword Manchester编码
- * @参数:无
- * @返回值:无
- */
- void PAN312x_SyncwordManchesterEnable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R10D);
- tmp |= PROPERTY_MSK_R10D_REG_SYNC_MAN_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R10D, tmp);
- }
- /**
- * @简介:使能PAN312x的Syncword Manchester编码
- * @参数:无
- * @返回值:无
- */
- void PAN312x_SyncwordManchesterDisable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R10D);
- tmp &= ~PROPERTY_MSK_R10D_REG_SYNC_MAN_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R10D, tmp);
- }
- /**
- * @简介:设置PAN312x的Preamble Manchester编码
- * @参数:PreambleManchesterMode:
- * 0: 0->01
- * 1: 0->10
- * @返回值:无
- */
- void PAN312x_Set_PreambleManchesterMode(PAN312xManchesterMode PreambleManchesterMode)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R107);
- tmp &= ~PROPERTY_MSK_R107_REG_PRE_MAN_MODE;
- tmp |= (PreambleManchesterMode << 1);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R107, tmp);
- }
- /**
- * @简介:使能PAN312x的Preamble Manchester编码
- * @参数:无
- * @返回值:无
- */
- void PAN312x_PreambleManchesterEnable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R107);
- tmp |= PROPERTY_MSK_R107_REG_PRE_MAN_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R107, tmp);
-
- }
- /**
- * @简介:失能PAN312x的Preamble Manchester编码
- * @参数:无
- * @返回值:无
- */
- void PAN312x_PreambleManchesterDisable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R107);
- tmp &= ~PROPERTY_MSK_R107_REG_PRE_MAN_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R107, tmp);
-
- }
- /**
- * @简介:设置PAN312x的Preamble Pattern
- * @参数:PreamblePattern
- * 0: non standard
- * 1: 0101
- * 2: 1010(default)
- * @返回值:无
- */
- void PAN312x_Set_PreamblePattern(uint8_t PreamblePattern)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R107);
- tmp &= ~PROPERTY_MSK_R107_REG_PRE_SEL;
- tmp |= (PreamblePattern << 2);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R107, tmp);
- }
- /**
- * @简介:设置PAN312x的Preamble Endian
- * @参数:PreambleEndian
- * 0: big endian
- * 1: little endian
- * @返回值:无
- */
- void PAN312x_Set_PreambleEndian(uint8_t PreambleEndian)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R107);
- tmp &= ~PROPERTY_MSK_R107_REG_PRE_BIT_MODE;
- tmp |= (PreambleEndian << 4);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R107, tmp);
- }
- /**
- * @简介:设置PAN312x的Preamble 长度
- * @参数:PreambleLength:preamble的长度
- * @返回值:无
- */
- void PAN312x_Set_PreambleLength(uint8_t PreambleLength)
- {
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R10C, PreambleLength);
- }
- /**
- * @简介:获取PAN312x的Preamble长度
- * @参数:无
- * @返回值:Preamble的长度
- */
- uint8_t PAN312x_Get_PreambleLength(void)
- {
- return PAN312x_Get_PropertyB1(PROPERTY_ADDR_R10C);
- }
- /**
- * @简介:设置PAN312x的非标准Preamble Pattern
- * @参数:PreamblePattern:
- * PreambleLength:
- * @返回值:无
- */
- void PAN312x_Set_NonStandardPreamblePattern(uint32_t PreamblePattern)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R107);
- tmp &= PROPERTY_MSK_R107_REG_PRE_SEL;
- if(tmp != 0x00){
- return;
- }
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_R108, PreamblePattern);
- }
- /**
- * @简介:获取PAN312x的非标准Preamble Pattern
- * @参数:无
- * @返回值:非标准Preamble Pattern值
- */
- uint32_t PAN312x_Get_NonStandardPreamblePattern(void)
- {
- return PAN312x_Get_PropertyB4(PROPERTY_ADDR_R108);
- }
- /**
- * @简介:使能PAN312x的Postamble
- * @参数:无
- * @返回值:无
- */
- void PAN312x_PostambleEnable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R125);
- tmp |= PROPERTY_MSK_R125_REG_POST_EN;
-
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R125, tmp);
- }
- /**
- * @简介:使能PAN312x的Postamble
- * @参数:无
- * @返回值:无
- */
- void PAN312x_PostambleDisable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R125);
- tmp &= ~PROPERTY_MSK_R125_REG_POST_EN;
-
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R125, tmp);
-
- }
- /**
- * @简介:设置PAN312x的Postamble长度
- * @参数:PostambleLength: Postamble长度
- * @返回值:无
- */
- void PAN312x_Set_PostambleLength(uint8_t PostambleLength)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R120);
- tmp &= ~PROPERTY_MSK_R120_REG_POSTAMBLE_LEN;
- tmp |= (PostambleLength << PROPERTY_POS_R120_REG_POSTAMBLE_LEN);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R120, tmp);
- }
- /**
- * @简介:设置PAN312x的Postamble内容
- * @参数:PostamblePattern: Postamble内容
- * @返回值:无
- */
- void PAN312x_Set_PostamblePattern(uint32_t PostamblePattern)
- {
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_R121, PostamblePattern);
- }
- /**
- * @简介:设置PAN312x的Postamble Endian
- * @参数:PostambleEndian
- * 0: big endian
- * 1: little endian
- * @返回值:无
- */
- void PAN312x_Set_PostambleEndian(uint8_t PostambleEndian)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R125);
- tmp &= ~PROPERTY_MSK_R125_REG_POST_BIT_MODE;
-
- tmp |= (PostambleEndian << PROPERTY_POS_R125_REG_POST_BIT_MODE);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R125, tmp);
- }
- /**
- * @简介:设置PAN312x的tx deviation
- * @参数:tx_deviation:(单位hz)
- * @返回值:无
- */
- void PAN312x_Set_Tx_Deviation(uint32_t tx_deviation)
- {
- int tmp;
- if(tx_deviation == 1000000){
- tmp = 255;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R142, tmp);
- tmp = 128;
- PAN312x_Set_PropertyB2(PROPERTY_ADDR_R15A, tmp);
- }else if((tx_deviation > 2400) &&(tx_deviation <= 500000)){
- tmp = 0x80;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R142, tmp);
- tmp = (int)(tx_deviation * 256.0 / 500000);
- if(tmp > 511){
- tmp = 511;
- }
- PAN312x_Set_PropertyB2(PROPERTY_ADDR_R15A, tmp);
- }else if((tx_deviation <= 2400) &&(tx_deviation >= 500)){
-
- //[0x70][0x42]配置fsk_dev,当deviation小于2.4k以后,此时需要按比例修改fsk_dev配置
- tmp = tx_deviation * 128 / 2400;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R142,tmp);
- tmp = 1;
- PAN312x_Set_PropertyB2(PROPERTY_ADDR_R15A,tmp);
- }
- }
- /**
- * @简介:设置PAN312x的rx deviation h 小于或等于1的配置
- * @参数:rx_dev
- * @返回值:无
- */
- void PAN312x_Set_Rx_Deviation_H_BelowOne(uint16_t rx_deviation_tmp)
- {
- uint8_t tmp;
- uint8_t tmpBuffer[2];
- //[0x70][0x46]: reg_rx_tr_dev_outer_l
- //[0x70][0x47][3:0]: reg_rx_tr_dev_outer_h
- tmpBuffer[0] = (uint8_t)rx_deviation_tmp;
- tmpBuffer[1] = (uint8_t)((rx_deviation_tmp >> 8) & PROPERTY_MSK_R147_REG_RX_TR_DEV_OUTER_H);
- PAN312x_Set_Property(PROPERTY_ADDR_R146, 2, tmpBuffer);
-
-
- //[0x70][0x3d][7:0]:reg_fltr_dev_l
- //[0x70][0x3e][0]: reg_fltr_dev_h
-
- tmpBuffer[0] = 0x00;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R13E);
- tmp &= ~PROPERTY_MSK_R13E_REG_FLTR_DEV_H;
- tmpBuffer[1] = tmp;
- PAN312x_Set_Property(PROPERTY_ADDR_R13D, 2, tmpBuffer);
-
-
- //[0x70][0x4b][6]:high_dev_decimat_en
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R14B);
- tmp &= ~PROPERTY_MSK_R14B_HIGH_DEV_DECIMAT_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R14B, tmp);
-
- //[0x72][0x52][6]:decimat_last_manu_en
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R252);
- tmp &= ~PROPERTY_MSK_R252_DECIMAT_LAST_MANU_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R252, tmp);
-
-
- }
- /**
- * @简介:设置PAN312x的rx deviation h 大于1的配置
- * @参数:rx_dev
- * @返回值:无
- */
- void PAN312x_Set_Rx_Deviation_H_HighOne(uint16_t rx_deviation_tmp, uint32_t rx_deviation, uint32_t data_rate)
- {
- uint8_t tmp;
- uint8_t tmpBuffer[3];
- uint16_t fltr_dev;
- uint32_t symbrate_rbw;
- uint8_t chf_sel;
- uint8_t a, b;
- double high_dev_decimat_num;
- int decimat_last_manu_num;
-
-
-
- //[0x70][0x46]: reg_rx_tr_dev_outer_l
- //[0x70][0x47][3:0]: reg_rx_tr_dev_outer_h
- tmpBuffer[0] = (uint8_t)rx_deviation_tmp;
- tmpBuffer[1] = (uint8_t)((rx_deviation_tmp >> 8) & PROPERTY_MSK_R147_REG_RX_TR_DEV_OUTER_H);
-
- PAN312x_Set_Property(PROPERTY_ADDR_R146, 2, tmpBuffer);
-
-
- //[0x70][0x3d][7:0]:reg_fltr_dev_l
- //[0x70][0x3e][0]: reg_fltr_dev_h
- fltr_dev = (int)rx_deviation * 1.0 / 100;
- tmpBuffer[0] = (uint8_t)fltr_dev;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R13E);
- tmp |= (uint8_t)((fltr_dev >> 8) & PROPERTY_MSK_R13E_REG_FLTR_DEV_H);
- tmpBuffer[1] = tmp;
-
- PAN312x_Set_Property(PROPERTY_ADDR_R13D, 2, tmpBuffer);
-
-
- symbrate_rbw = 2 * rx_deviation;
-
-
- //[0x70][0x50][7:4]:reg_chf_sel
- if(symbrate_rbw > 1000000){
- chf_sel = 0;
- }else if(symbrate_rbw > 500000){
- chf_sel = 1;
- }else if(symbrate_rbw > 400000){
- chf_sel = 2;
- }else if(symbrate_rbw > 250000){
- chf_sel = 3;
- }else if(symbrate_rbw > 200000){
- chf_sel = 4;
- }else if(symbrate_rbw > 125000){
- chf_sel = 5;
- }else if(symbrate_rbw > 100000){
- chf_sel = 6;
- }else if(symbrate_rbw > 80000){
- chf_sel = 7;
- }else if(symbrate_rbw > 62500){
- chf_sel = 8;
- }else if(symbrate_rbw > 50000){
- chf_sel = 9;
- }else if(symbrate_rbw > 40000){
- chf_sel = 10;
- }else if(symbrate_rbw == 40000){
- chf_sel = 11;
- }else if(symbrate_rbw > 10000){
- chf_sel = 12;
- }else{
- chf_sel = 13;
- }
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R150);
- tmp &= ~PROPERTY_MSK_R150_REG_CHF_SEL;
- tmp |= (chf_sel << 4);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R150, tmp);
-
- //[0x70][0x4b][6]:high_dev_decimat_en
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R14B);
- if(symbrate_rbw <= data_rate){
- tmp &= ~PROPERTY_MSK_R14B_HIGH_DEV_DECIMAT_EN;
- }else{
- tmp |= PROPERTY_MSK_R14B_HIGH_DEV_DECIMAT_EN;
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R14B, tmp);
-
-
- //[0x72][0x52][6]:decimat_last_manu_en
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R252);
- if(symbrate_rbw <= data_rate){
- tmp &= ~PROPERTY_MSK_R252_DECIMAT_LAST_MANU_EN;
- }else{
- tmp |= PROPERTY_MSK_R252_DECIMAT_LAST_MANU_EN;
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R252, tmp);
-
- if(symbrate_rbw >= 10000){
- a = 8;
- }else{
- a = 16;
- }
-
- if(data_rate >= 10000){
- b = 8;
- }else{
- b = 16;
- }
- //high_dev_decimat_num = (int)1.0 * a * symbrate_rbw / b / data_rate;
- high_dev_decimat_num = round(1.0 * a * symbrate_rbw / b / data_rate * 10000) / 10000.0;
- decimat_last_manu_num = (int)1.0 * 320000 / high_dev_decimat_num;
-
- //[0x72][0x50][7:0]:decimat_last_manu_num_l1
- //[0x72][0x51][7:0]:decimat_last_manu_num_l2
- //[0x72][0x52][2:0]:decimat_last_manu_num_h
- tmpBuffer[0] = (uint8_t)decimat_last_manu_num;
- tmpBuffer[1] = (uint8_t)(decimat_last_manu_num >> 8);
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R252);
- tmp |= (uint8_t)((decimat_last_manu_num >> 16) & 0x07);
- tmpBuffer[2] = tmp;
- PAN312x_Set_Property(PROPERTY_ADDR_R250, 3, tmpBuffer);
-
- }
- /**
- * @简介:设置PAN312x的rx deviation
- * @参数:rx_deviation:(单位hz)
- * @返回值:无
- */
- void PAN312x_Set_Rx_Deviation(uint32_t rx_deviation)
- {
- uint8_t tmp;
- uint8_t rate_tmp;
- uint32_t data_rate;
- int rx_dev_tmp;
- float h;
- //[0x71][0x06]
- rate_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R186);
- if((rate_tmp & PROPERTY_MSK_R186_REG_SYMB_AB_SEL) == PROPERTY_MSK_R186_REG_SYMB_AB_SEL){
- //data rate >= 50kbps
- rate_tmp = (rate_tmp & PROPERTY_MSK_R186_REG_SYMBRATE_B) >> 4;
- if(rate_tmp == 0x00){
- //50kbps
- data_rate = 50000;
- }else if(rate_tmp == 0x01){
- //62.5kbps
- data_rate = 62500;
- }else if(rate_tmp == 0x02){
- //80kbps
- data_rate = 80000;
- }else if(rate_tmp == 0x03){
- //100kbps
- data_rate = 100000;
- }else if(rate_tmp == 0x04){
- //125kbps
- data_rate = 125000;
- }else if(rate_tmp == 0x05){
- //200kbps
- data_rate = 200000;
- }else if(rate_tmp == 0x06){
- //250kbps
- data_rate = 250000;
- }else if(rate_tmp == 0x07){
- //400kbps
- data_rate = 400000;
- }else if(rate_tmp == 0x08){
- //500kbps
- data_rate = 500000;
- }
- else if(rate_tmp == 0x09){
- //1Mbps
- data_rate = 1000000;
- }else if(rate_tmp == 0x0a){
- //2Mbps
- data_rate = 2000000;
- }
- }else{
- //data rate <= 40kbps
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R187);
- data_rate = tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R188);
- data_rate |= ((tmp & PROPERTY_MSK_R188_REG_SYMBRATE_A_H) << 8);
- data_rate *= 100;
- }
- h = 2.0f * rx_deviation / data_rate;
-
- if((h >= 0.5) && (h <= 1.0)){
- rx_dev_tmp = (int)rx_deviation * 1.0 * (1 << 14) / data_rate / 8 / 2;
- // if(data_rate >= 10000){
- // rx_dev_tmp = rx_dev_tmp / 2;
- // }
- PAN312x_Set_Rx_Deviation_H_BelowOne(rx_dev_tmp);
- }else if((h > 1.0) && (h <= 20)){
- rx_dev_tmp = 1024;
- // if(data_rate >= 10000){
- // rx_dev_tmp = rx_dev_tmp / 2;
- // }
- rx_dev_tmp = rx_dev_tmp / 2;
- PAN312x_Set_Rx_Deviation_H_HighOne(rx_dev_tmp, rx_deviation, data_rate);
- }else{
- return;
- }
- }
- /**
- * @简介:使能PAN312x的GPIO Direct Tx
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_GPIO_Direct_Tx_Enable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R107);
- tmp |= PROPERTY_MSK_R107_REG_DIRECT_TX_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R107, tmp);
- }
- /**
- * @简介:失能PAN312x的GPIO Direct Tx
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_GPIO_Direct_Tx_Disable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R107);
- tmp &= ~PROPERTY_MSK_R107_REG_DIRECT_TX_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R107, tmp);
- }
- /**
- * @简介:使能PAN312x的GPIO Direct Rx
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_GPIO_Direct_Rx_Enable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R107);
- tmp |= PROPERTY_MSK_R107_REG_DIRECT_RX_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R107, tmp);
- }
- /**
- * @简介:失能PAN312x的GPIO Direct Rx
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_GPIO_Direct_Rx_Disable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R107);
- tmp &= ~PROPERTY_MSK_R107_REG_DIRECT_RX_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R107, tmp);
- }
- /**
- * @简介:设置PAN312x的GPIO Direct 异步模式
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_Gpio_Direct_Asynchronous_Mode(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R107);
- tmp &= ~PROPERTY_MSK_R107_REG_DIRECT_MODE;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R107, tmp);
- }
- /**
- * @简介:设置PAN312x的GPIO Direct 同步模式
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_Gpio_Direct_Synchronous_Mode(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R107);
- tmp |= PROPERTY_MSK_R107_REG_DIRECT_MODE;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R107, tmp);
- }
- /**
- * @简介:设置PAN312x的EncodingHaming模式
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_Set_FecHamingEncoding(PAN312xFecEncoding HamingEncoding)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R106);
- if(HamingEncoding == FEC_HAMING_DISABLE){
- tmp &= ~PROPERTY_MSK_R106_REG_HAMMING_EN;
- }else if(HamingEncoding == FEC_HAMING_X3_X_1){
- tmp |= PROPERTY_MSK_R106_REG_HAMMING_EN;
- tmp &= ~PROPERTY_MSK_R106_REG_HAMMING_MODE;
- }else if(HamingEncoding == FEC_HAMING_X3_X2_1){
- tmp |= (PROPERTY_MSK_R106_REG_HAMMING_EN | PROPERTY_MSK_R106_REG_HAMMING_MODE);
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R106, tmp);
- }
- /**
- * @802.15.4g FECPROPERTY_ADDR_R106 bit[4:3]
- * @Fec802154Type0=1=RSC2=NRNSC3=3-out-of-6
- * @:
- */
- void PAN312x_Set_802154FecType(PAN312x802154FecType Fec802154Type)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R106);
- tmp &= ~PROPERTY_MSK_R106_REG_FEC_TYPE;
- tmp |= ((uint8_t)Fec802154Type << PROPERTY_POS_R106_REG_FEC_TYPE) & PROPERTY_MSK_R106_REG_FEC_TYPE;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R106, tmp);
- }
- /**
- * @简介:设置 3-out-of-6 编码输出大小端(PROPERTY_ADDR_R106 bit[6])
- * @参数:Endian
- * MBUS_3OF6_OUT_BIG_ENDIAN = 0:大端
- * MBUS_3OF6_OUT_LITTLE_ENDIAN = 1:小端
- * @返回值: 无
- */
- void PAN312x_Set_Mbus3OutOf6Endian(PAN312xMbus3OutOf6Endian Endian)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R106);
- if (Endian == MBUS_3OF6_OUT_LITTLE_ENDIAN) {
- tmp |= PROPERTY_MSK_R106_REG_MBUS_MSB_OUT_SEL;
- } else {
- tmp &= (uint8_t)(~PROPERTY_MSK_R106_REG_MBUS_MSB_OUT_SEL);
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R106, tmp);
- }
- /**
- * @简介:使能硬件 3-out-of-6 编码(PROPERTY_ADDR_R106)
- * bit[4:3]=3:3-out-of-6;bit[6]:输出大小端
- * @参数:Endian 输出大小端选择
- * @返回值: 无
- *
- * @note bit[4:3]:0=no FEC,1=RSC,2=NRNSC,3=3-out-of-6
- * 关闭时调用 PAN312x_Set_802154FecType(FEC_802154_DISABLE)
- */
- void PAN312x_Set_3OutOf6Encoding(PAN312xMbus3OutOf6Endian Endian)
- {
- PAN312x_Set_802154FecType(FEC_3_OUT_OF_6);
- PAN312x_Set_Mbus3OutOf6Endian(Endian);
- }
- /**
- * @简介:使能或关闭802.15.4g交织
- * @参数:InterleavingState:S_ENABLE/S_DISABLE
- * @返回值: 无
- */
- void PAN312x_Set_InterleavingState(SFunctionalState InterleavingState)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R106);
- if(InterleavingState == S_DISABLE){
- tmp &= ~PROPERTY_MSK_R106_REG_INT_EN;
- }else if(InterleavingState == S_ENABLE){
- tmp |= PROPERTY_MSK_R106_REG_INT_EN;
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R106, tmp);
- }
- /**
- * @简介:底层总线写数据(不加寄存器地址)
- * @简介:底层总线写数据(不加寄存器地址)
- * @:
- */
- void PAN312x_SetDualSyncWordPattern(uint32_t SyncWords)
- {
- uint8_t tmp;
- //Second SyncWord
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R13E);
- tmp |= PROPERTY_MSK_R13E_REG_SYNC_WORD2_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R13E, tmp);
- //Second SyncWord Value
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_R18D, SyncWords);
- }
- /**
- * @飺 3-out-of-6 СPROPERTY_ADDR_R106 bit[6]
- * @
- * @简介:按DCDC校准码设置PAN312x发射功率
- */
- uint32_t PAN312x_GetDualSyncWordPattern(void)
- {
- return PAN312x_Get_PropertyB4(PROPERTY_ADDR_R18D);
- }
- /**
- * @简介:底层总线写数据(不加寄存器地址)
- * @
- * @:
- */
- void PAN312x_MaxPayloadLimitDisable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R31C);
- tmp &= ~PROPERTY_MSK_R31C_REG_MAX_VLD;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R31C, tmp);
- }
- /**
- * @简介:设置PAN312x的
- * @参数:base_frequency(hz):
- * frequency_step(hz):
- * channel_number
- * @返回值:无
- */
- void PAN312x_Set_ModulationType(PAN312xModulationSelect ModType)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R186);
-
- tmp &= ~PROPERTY_MSK_R186_REG_MODTYPE;
- tmp |= (ModType << PROPERTY_POS_R186_REG_MODTYPE);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R186, tmp);
- }
- /**
- * @PAN312xBase Frequency
- * @base_frequency(hz):
- * frequency_step(hz):
- * channel_number
- * @
- */
- /* LO/VCO AFE segment cache: updated at end of PAN312x_Set_Frequency */
- static uint8_t s_freq_afe_valid = 0;
- static uint16_t s_freq_afe_seg = 0;
- /**
- * @简介:按最终频点归类 LO/VCO 模拟前端分段
- * 同段内跳频可只改 channel;跨段必须全量 Set_Frequency
- * @参数:final_hz:目标频点(Hz)
- * @返回值: 高字节=LO档,低字节=VCO子档;0xFFFF=不支持频点
- */
- static uint16_t PAN312x_Get_FrequencyAfeSegment(uint32_t final_hz)
- {
- uint8_t lo = 0xFFu;
- uint8_t vco = 0xFFu;
- if ((final_hz >= 127000000u) && (final_hz <= 183000000u)) {
- lo = 12u;
- if (final_hz < 130000000u) {
- vco = 0u;
- } else if (final_hz < 135000000u) {
- vco = 1u;
- } else if (final_hz < 140000000u) {
- vco = 2u;
- } else if (final_hz < 147000000u) {
- vco = 3u;
- } else if (final_hz < 153000000u) {
- vco = 4u;
- } else if (final_hz < 162000000u) {
- vco = 5u;
- } else if (final_hz < 170000000u) {
- vco = 6u;
- } else {
- vco = 7u;
- }
- } else if ((final_hz >= 190000000u) && (final_hz < 253000000u)) {
- lo = 8u;
- if (final_hz < 195000000u) {
- vco = 0u;
- } else if (final_hz < 203000000u) {
- vco = 1u;
- } else if (final_hz < 210000000u) {
- vco = 2u;
- } else if (final_hz < 220000000u) {
- vco = 3u;
- } else if (final_hz < 230000000u) {
- vco = 4u;
- } else if (final_hz < 243000000u) {
- vco = 5u;
- } else {
- vco = 6u;
- }
- } else if ((final_hz >= 253000000u) && (final_hz <= 367000000u)) {
- lo = 6u;
- if (final_hz < 260000000u) {
- vco = 0u;
- } else if (final_hz < 270000000u) {
- vco = 1u;
- } else if (final_hz < 280000000u) {
- vco = 2u;
- } else if (final_hz < 293000000u) {
- vco = 3u;
- } else if (final_hz < 307000000u) {
- vco = 4u;
- } else if (final_hz < 323000000u) {
- vco = 5u;
- } else if (final_hz < 340000000u) {
- vco = 6u;
- } else {
- vco = 7u;
- }
- } else if ((final_hz >= 380000000u) && (final_hz <= 550000000u)) {
- lo = 4u;
- if (final_hz < 390000000u) {
- vco = 0u;
- } else if (final_hz < 405000000u) {
- vco = 1u;
- } else if (final_hz < 420000000u) {
- vco = 2u;
- } else if (final_hz < 440000000u) {
- vco = 3u;
- } else if (final_hz < 460000000u) {
- vco = 4u;
- } else if (final_hz < 485000000u) {
- vco = 5u;
- } else if (final_hz < 510000000u) {
- vco = 6u;
- } else {
- vco = 7u;
- }
- } else if ((final_hz >= 760000000u) && (final_hz <= 1100000000u)) {
- lo = 2u;
- if (final_hz < 780000000u) {
- vco = 0u;
- } else if (final_hz < 810000000u) {
- vco = 1u;
- } else if (final_hz < 840000000u) {
- vco = 2u;
- } else if (final_hz < 880000000u) {
- vco = 3u;
- } else if (final_hz < 920000000u) {
- vco = 4u;
- } else if (final_hz < 970000000u) {
- vco = 5u;
- } else if (final_hz < 1020000000u) {
- vco = 6u;
- } else {
- vco = 7u;
- }
- } else {
- return 0xFFFFu;
- }
- return (uint16_t)(((uint16_t)lo << 8) | (uint16_t)vco);
- }
- /**
- * @简介:设置PAN312x的Base Frequency
- * @参数:base_frequency(hz):
- * frequency_step(hz):
- * channel_number
- * @返回值:无
- */
- void PAN312x_Set_Frequency(uint32_t base_frequency, uint32_t frequency_step, uint16_t channel_number)
- {
- uint8_t tmp;
- uint8_t vco_tmp;
- uint8_t vco_vd_sw_tmp;
- uint8_t tmpBuffer[4];
- int base_frequency_tmp;
-
- int carrier_frequency;
- uint32_t carrier_frequency_tmp;
- // int freq_step_integer;
- float freq_step_fraction;
- float mid_frequency_tmp;
- float frequency_step_tmp;
- uint32_t ref_freq = 32000000;
- uint32_t mid_frequency = 500000;
- uint32_t final_frequency;
-
- uint8_t freq_tmp;
-
- final_frequency = base_frequency + frequency_step * channel_number;
- //1lo
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1B3);
- tmp &= 0xf8;
-
- //2vco
- vco_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D2);
- vco_vd_sw_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D4);
- vco_vd_sw_tmp &= ~PROPERTY_MSK_R2D4_PLL_VCO_VD_SW;
- vco_tmp &= 0xc7;
-
- if((final_frequency >= 127000000) && (final_frequency <= 183000000)){
- //lo12
- tmp |= 0x04;
- base_frequency_tmp = base_frequency * 12.0 / ref_freq * (1 << 24);
- frequency_step_tmp = frequency_step * 12.0 / ref_freq * (1 << 24);
- mid_frequency_tmp = mid_frequency * 12.0 / ref_freq * (1 << 24);
-
- //127Mhz~183Mhz
- if((final_frequency >= 127000000) && (final_frequency < 130000000)){
- vco_tmp |= (0x0 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 130000000) && (final_frequency < 135000000)){
- vco_tmp |= (0x1 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 135000000) && (final_frequency < 140000000)){
- vco_tmp |= (0x2 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 140000000) && (final_frequency < 147000000)){
- vco_tmp |= (0x3 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 147000000) && (final_frequency < 153000000)){
- vco_tmp |= (0x4 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 153000000) && (final_frequency < 162000000)){
- vco_tmp |= (0x5 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 162000000) && (final_frequency < 170000000)){
- vco_tmp |= (0x6 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 170000000) && (final_frequency <= 183000000)){
- vco_tmp |= (0x07 << 3);
- vco_vd_sw_tmp |= 0x01;
- }
-
- freq_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C4);
- freq_tmp &= ~PROPERTY_MSK_R2C4_TRX_COMATCH_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C4, freq_tmp);
-
-
- freq_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D9);
- freq_tmp &= ~PROPERTY_MSK_R2D9_RX_LNA2_ICORE;
- freq_tmp |= (0x04 << PROPERTY_POS_R2D9_RX_LNA2_ICORE);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D9, freq_tmp);
-
-
- }else if((final_frequency >= 190000000) && (final_frequency < 253000000)){
- //lo8
- tmp |= 0x03;
- base_frequency_tmp = base_frequency * 8.0 / ref_freq * (1 << 24);
- frequency_step_tmp = frequency_step * 8.0 / ref_freq * (1 << 24);
- mid_frequency_tmp = mid_frequency * 8.0 / ref_freq * (1 << 24);
-
- //190Mhz~253Mhz
- if((final_frequency >= 190000000) && (final_frequency < 195000000)){
- vco_tmp |= (0x0 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 195000000) && (final_frequency < 203000000)){
- vco_tmp |= (0x1 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 203000000) && (final_frequency < 210000000)){
- vco_tmp |= (0x2 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 210000000) && (final_frequency < 220000000)){
- vco_tmp |= (0x3 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 220000000) && (final_frequency < 230000000)){
- vco_tmp |= (0x4 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 230000000) && (final_frequency < 243000000)){
- vco_tmp |= (0x5 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 243000000) && (final_frequency < 253000000)){
- vco_tmp |= (0x6 << 3);
- vco_vd_sw_tmp |= 0x01;
- }
- // else if((final_frequency >= 253000000) && (final_frequency <= 275000000)){
- // vco_tmp |= (0x07 << 3);
- // vco_vd_sw_tmp |= 0x01;
- // }
-
- freq_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C4);
- freq_tmp &= ~PROPERTY_MSK_R2C4_TRX_COMATCH_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C4, freq_tmp);
-
-
- freq_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D9);
- freq_tmp &= ~PROPERTY_MSK_R2D9_RX_LNA2_ICORE;
- freq_tmp |= (0x04 << PROPERTY_POS_R2D9_RX_LNA2_ICORE);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D9, freq_tmp);
-
-
- }else if((final_frequency >= 253000000) && (final_frequency <= 367000000)){
- //lo6
- tmp |= 0x02;
- base_frequency_tmp = base_frequency * 6.0 / ref_freq * (1 << 24);
- frequency_step_tmp = frequency_step * 6.0 / ref_freq * (1 << 24);
- mid_frequency_tmp = mid_frequency * 6.0 / ref_freq * (1 << 24);
-
- //253Mhz~367Mhz
- if((final_frequency >= 253000000) && (final_frequency < 260000000)){
- vco_tmp |= (0x0 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 260000000) && (final_frequency < 270000000)){
- vco_tmp |= (0x1 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 270000000) && (final_frequency < 280000000)){
- vco_tmp |= (0x2 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 280000000) && (final_frequency < 293000000)){
- vco_tmp |= (0x3 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 293000000) && (final_frequency < 307000000)){
- vco_tmp |= (0x4 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 307000000) && (final_frequency < 323000000)){
- vco_tmp |= (0x5 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 323000000) && (final_frequency < 340000000)){
- vco_tmp |= (0x6 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 340000000) && (final_frequency <= 367000000)){
- vco_tmp |= (0x07 << 3);
- vco_vd_sw_tmp |= 0x01;
- }
-
- freq_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C4);
- freq_tmp &= ~PROPERTY_MSK_R2C4_TRX_COMATCH_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C4, freq_tmp);
-
-
- freq_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D9);
- freq_tmp &= ~PROPERTY_MSK_R2D9_RX_LNA2_ICORE;
- freq_tmp |= (0x04 << PROPERTY_POS_R2D9_RX_LNA2_ICORE);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D9, freq_tmp);
-
-
- }else if((final_frequency >= 380000000) && (final_frequency <= 550000000)){
- //lo4
- tmp |= 0x01;
- base_frequency_tmp = base_frequency * 4.0 / ref_freq * (1 << 24);
- frequency_step_tmp = frequency_step * 4.0 / ref_freq * (1 << 24);
- mid_frequency_tmp = mid_frequency * 4.0 / ref_freq * (1 << 24);
-
- //380Mhz~550Mhz
- if((final_frequency >= 380000000) && (final_frequency < 390000000)){
- vco_tmp |= (0x0 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 390000000) && (final_frequency < 405000000)){
- vco_tmp |= (0x1 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 405000000) && (final_frequency < 420000000)){
- vco_tmp |= (0x2 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 420000000) && (final_frequency < 440000000)){
- vco_tmp |= (0x3 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 440000000) && (final_frequency < 460000000)){
- vco_tmp |= (0x4 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 460000000) && (final_frequency < 485000000)){
- vco_tmp |= (0x5 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 485000000) && (final_frequency < 510000000)){
- vco_tmp |= (0x6 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 510000000) && (final_frequency <= 550000000)){
- vco_tmp |= (0x07 << 3);
- vco_vd_sw_tmp |= 0x01;
- }
-
-
- freq_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C4);
- freq_tmp &= ~PROPERTY_MSK_R2C4_TRX_COMATCH_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C4, freq_tmp);
-
-
- freq_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D9);
- freq_tmp &= ~PROPERTY_MSK_R2D9_RX_LNA2_ICORE;
- freq_tmp |= (0x04 << PROPERTY_POS_R2D9_RX_LNA2_ICORE);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D9, freq_tmp);
-
- }else if((final_frequency >= 760000000) && (final_frequency <= 1100000000)){
- //lo2
- base_frequency_tmp = base_frequency * 2.0 / ref_freq * (1 << 24);
- frequency_step_tmp = frequency_step * 2.0 / ref_freq * (1 << 24);
- mid_frequency_tmp = mid_frequency * 2.0 / ref_freq * (1 << 24);
-
- //760Mhz~1100Mhz
- if((final_frequency >= 760000000) && (final_frequency < 780000000)){
- vco_tmp |= (0x0 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 780000000) && (final_frequency < 810000000)){
- vco_tmp |= (0x1 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 810000000) && (final_frequency < 840000000)){
- vco_tmp |= (0x2 << 3);
- vco_vd_sw_tmp |= 0x02;
- }else if((final_frequency >= 840000000) && (final_frequency < 880000000)){
- vco_tmp |= (0x3 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 880000000) && (final_frequency < 920000000)){
- vco_tmp |= (0x4 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 920000000) && (final_frequency < 970000000)){
- vco_tmp |= (0x5 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 970000000) && (final_frequency < 1020000000)){
- vco_tmp |= (0x6 << 3);
- vco_vd_sw_tmp |= 0x01;
- }else if((final_frequency >= 1020000000) && (final_frequency <= 1100000000)){
- vco_tmp |= (0x07 << 3);
- vco_vd_sw_tmp |= 0x01;
- }
-
-
- freq_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C4);
- freq_tmp |= PROPERTY_MSK_R2C4_TRX_COMATCH_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C4, freq_tmp);
-
-
- freq_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D9);
- freq_tmp &= ~PROPERTY_MSK_R2D9_RX_LNA2_ICORE;
- freq_tmp |= (0x0a << PROPERTY_POS_R2D9_RX_LNA2_ICORE);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D9, freq_tmp);
- }
-
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1B3, tmp);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D2, vco_tmp);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D4, vco_vd_sw_tmp);
-
- //帧结构中插入crc字段
- freq_step_fraction = frequency_step_tmp - (int)frequency_step_tmp;
-
- base_frequency_tmp += round(freq_step_fraction * channel_number);
-
-
- //3[0x71][0x15][0x71][0x16][0x71][0x17][0x71][0x18]base frequency
- PAN312x_Set_PropertyB4(PROPERTY_ADDR_R195, (uint32_t)base_frequency_tmp);
-
- //4[0x71][0x11][0x71][0x12]frequency step
- PAN312x_Set_PropertyB2(PROPERTY_ADDR_R191, (uint16_t)frequency_step_tmp);
-
- //5[0x71][0x13][0x71][0x14]channel number
- PAN312x_Set_PropertyB2(PROPERTY_ADDR_R193, channel_number);
-
- //[0x74][0x40]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R236);
- tmp |= PROPERTY_MSK_R236_HI_LO_SET;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R236, tmp);
-
- //7[0x71][0x19][0x71][0x1a][0x71][0x1b](:500khz)
- PAN312x_Set_PropertyB3(PROPERTY_ADDR_R199, (uint32_t)mid_frequency_tmp);
-
-
- //8reg_ppm_enable([74][0x22][6]),
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R322);
- if((tmp & 0x40) == 0x40){
- carrier_frequency_tmp = base_frequency + channel_number * frequency_step;
- carrier_frequency = (int)(ref_freq * 1.0f * (1 << 10) / carrier_frequency_tmp);
- tmpBuffer[0] = (carrier_frequency & 0xff);
-
- tmpBuffer[1] = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R14B);
- tmpBuffer[1] |= ((carrier_frequency >> 8) & 0xff);
- PAN312x_Set_Property(PROPERTY_ADDR_R14A, 2, tmpBuffer);
- }
- s_freq_afe_seg = PAN312x_Get_FrequencyAfeSegment(final_frequency);
- s_freq_afe_valid = 1u;
- }
- /**
- * @简介:跳频友好的频率更新
- * 仅当目标频点跨过 LO/VCO 模拟前端分段时,才调用完整 PAN312x_Set_Frequency;
- * 同段内跳频跳过全量配置,由随后 Enter_Tx/Rx(..., START_COND_ENABLE_CHANNEL, ...) 切换信道
- * @参数:base_frequency(hz):
- * frequency_step(hz):
- * channel_number
- * @返回值: 1-执行了全量 Set_Frequency,0-同段跳过
- */
- int PAN312x_Set_Frequency_ForHop(uint32_t base_frequency, uint32_t frequency_step, uint16_t channel_number)
- {
- uint32_t final_hz;
- uint16_t seg;
- final_hz = base_frequency + frequency_step * (uint32_t)channel_number;
- seg = PAN312x_Get_FrequencyAfeSegment(final_hz);
- if ((s_freq_afe_valid == 0u) || (seg != s_freq_afe_seg) || (seg == 0xFFFFu)) {
- PAN312x_Set_Frequency(base_frequency, frequency_step, channel_number);
- return 1;
- }
- return 0;
- }
- /**
- * @简介:设置PAN312x的Frequency_Channel_Number
- * @参数:channel_number:
- * @返回值:无
- */
- void PAN312x_Set_Frequency_Channel_Number(uint16_t channel_number)
- {
- PAN312x_Set_PropertyB2(PROPERTY_ADDR_R193, channel_number);
- }
- /**
- * @简介:设置PAN312x的发射功率(dBm)
- * @参数:PAN312xPowerdBm:(-20dBm ~ 21dBm,step:1dBm)
- * @返回值:无
- */
- void PAN312x_Set_Power_Ldo(uint16_t Power)
- {
- uint8_t tmp;
- uint8_t vdd_pa_trim ;
- uint8_t pa_2nd_ramp ;
- uint8_t pa_bias_trim ;
- uint8_t lp_en;
- vdd_pa_trim = PAN31XX_LDO_POWER_GET_VDD_PA_TRIM(Power);
- pa_2nd_ramp = PAN31XX_LDO_POWER_GET_PA_2ND_RAMP(Power);
- pa_bias_trim = PAN31XX_LDO_POWER_GET_PA_BIAS_TRIM(Power);
- lp_en = PAN31XX_LDO_POWER_GET_LP_EN(Power);
-
- //VDD_PA_TRIM[0x73][0x32][7:3]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2B2);
- tmp &= ~PROPERTY_MSK_R2B2_VDD_PA_TRIM;
- tmp |= (vdd_pa_trim << PROPERTY_POS_R2B2_VDD_PA_TRIM);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2B2, tmp);
-
- //PA_2ND_RAMP[0x70][0x4e][5:0]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R14E);
- tmp &= ~PROPERTY_MSK_R14E_PA_2ND_RAMP;
- tmp |= (pa_2nd_ramp << PROPERTY_POS_R14E_PA_2ND_RAMP);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R14E, tmp);
-
- //PA_BIAS_TRIM[0x73][0x57][7:4]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D7);
- tmp &= ~PROPERTY_MSK_R2D7_PA_BIAS_TRIM;
- tmp |= (pa_bias_trim << PROPERTY_POS_R2D7_PA_BIAS_TRIM);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D7, tmp);
-
-
- //lp en[0x73][0x46][7]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C6);
- tmp &= ~PROPERTY_MSK_R2C6_PA_LP_SEL;
- tmp |= (lp_en << PROPERTY_POS_R2C6_PA_LP_SEL);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C6, tmp);
- }
-
- /**
- * @简介:按DCDC校准码设置PAN312x发射功率
- * @参数:Power:DCDC功率校准码
- * @返回值: 无
- */
- void PAN312x_Set_Power_Dcdc(uint32_t Power)
- {
- uint8_t tmp;
- uint8_t vdd_pa_trim ;
- uint8_t pa_2nd_ramp ;
- uint8_t pa_bias_trim ;
- uint8_t lp_en;
- uint8_t dcdc_en;
- uint8_t dcdc_vout_trim;
-
- vdd_pa_trim = PAN31XX_DCDC_POWER_GET_VDD_PA_TRIM(Power);
- pa_2nd_ramp = PAN31XX_DCDC_POWER_GET_PA_2ND_RAMP(Power);
- pa_bias_trim = PAN31XX_DCDC_POWER_GET_PA_BIAS_TRIM(Power);
- lp_en = PAN31XX_DCDC_POWER_GET_LP_EN(Power);
- dcdc_en = PAN31XX_DCDC_POWER_GET_DCDC_EN(Power);
- dcdc_vout_trim = PAN31XX_DCDC_POWER_GET_DCDC_VOUT_TRIM(Power);
-
- //VDD_PA_TRIM[0x73][0x32][7:3]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2B2);
- tmp &= ~PROPERTY_MSK_R2B2_VDD_PA_TRIM;
- tmp |= (vdd_pa_trim << PROPERTY_POS_R2B2_VDD_PA_TRIM);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2B2, tmp);
-
- //PA_2ND_RAMP[0x70][0x4e][5:0]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R14E);
- tmp &= ~PROPERTY_MSK_R14E_PA_2ND_RAMP;
- tmp |= (pa_2nd_ramp << PROPERTY_POS_R14E_PA_2ND_RAMP);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R14E, tmp);
-
- //PA_BIAS_TRIM[0x73][0x57][7:4]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D7);
- tmp &= ~PROPERTY_MSK_R2D7_PA_BIAS_TRIM;
- tmp |= (pa_bias_trim << PROPERTY_POS_R2D7_PA_BIAS_TRIM);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D7, tmp);
-
-
- //lp en[0x73][0x46][7]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C6);
- tmp &= ~PROPERTY_MSK_R2C6_PA_LP_SEL;
- tmp |= (lp_en << PROPERTY_POS_R2C6_PA_LP_SEL);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C6, tmp);
-
-
- //dcdc en[0x60][0x06][7]
- PAN312x_Get_OP_Reg(R006, 1, &tmp);
- tmp &= ~R006_EN_DCDC_Msk;
- tmp |= (dcdc_en << R006_EN_DCDC_Pos);
- PAN312x_Set_OP_Reg(R006, 1, &tmp);
-
- //dcdc vout trim[0x73][0x34][4:0]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2B4);
- tmp &= ~PROPERTY_MSK_R2B4_DCDC_VOUT_TRIM;
- tmp |= (dcdc_vout_trim << PROPERTY_POS_R2B4_DCDC_VOUT_TRIM);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2B4, tmp);
- }
- /**
- * @简介:设置PAN312x的发射功率(dBm)
- * @参数:PowerdBm:(-20dBm ~ 21dBm,step:1dBm)
- * @返回值: 无
- */
- void PAN312x_Set_Power(uint32_t Frequency, uint32_t FrequencyStep, uint16_t ChannelNumber, PAN312xPowerSelect PowerSelect, PAN312xPowerdBm PowerdBm)
- {
- int power;
- power = (int)(PowerdBm & 0xff) - 20;
- if((PowerSelect == POWER_LDO_0603) || (PowerSelect == POWER_LDO_0402)){
- if((power > 20) || (power < -20)){
- while(1);
- }
- }else if((PowerSelect == POWER_DCDC_0603) || (PowerSelect == POWER_DCDC_0402)){
- if((power > 13) || (power < -20)){
- while(1);
- }
- }
- uint32_t freq_tmp = Frequency + ChannelNumber * FrequencyStep;
- if(freq_tmp >= 127000000 && (freq_tmp <= 183000000)){
- if(PowerSelect == POWER_LDO_0603){
- PAN312x_Set_Power_Ldo(pan31xx_ldo_power_0603_420_445mhz[PowerdBm]);
- }else if(PowerSelect == POWER_LDO_0402){
- PAN312x_Set_Power_Ldo(pan31xx_ldo_power_0402_420_445mhz[PowerdBm]);
- }else if(PowerSelect == POWER_DCDC_0603){
- PAN312x_Set_Power_Dcdc(pan31xx_dcdc_power_0603_420_445mhz[PowerdBm]);
- }else if(PowerSelect == POWER_DCDC_0402){
- PAN312x_Set_Power_Dcdc(pan31xx_dcdc_power_0402_420_445mhz[PowerdBm]);
- }
- }else if(freq_tmp >= 420000000 && (freq_tmp <= 445000000)){
- if(PowerSelect == POWER_LDO_0603){
- PAN312x_Set_Power_Ldo(pan31xx_ldo_power_0603_420_445mhz[PowerdBm]);
- }else if(PowerSelect == POWER_LDO_0402){
- PAN312x_Set_Power_Ldo(pan31xx_ldo_power_0402_420_445mhz[PowerdBm]);
- }else if(PowerSelect == POWER_DCDC_0603){
- PAN312x_Set_Power_Dcdc(pan31xx_dcdc_power_0603_420_445mhz[PowerdBm]);
- }else if(PowerSelect == POWER_DCDC_0402){
- PAN312x_Set_Power_Dcdc(pan31xx_dcdc_power_0402_420_445mhz[PowerdBm]);
- }
- }else if(freq_tmp >= 470000000 && (freq_tmp <= 510000000)){
- if(PowerSelect == POWER_LDO_0603){
- PAN312x_Set_Power_Ldo(pan31xx_ldo_power_0603_470_510mhz[PowerdBm]);
- }else if(PowerSelect == POWER_LDO_0402){
- PAN312x_Set_Power_Ldo(pan31xx_ldo_power_0402_470_510mhz[PowerdBm]);
- }else if(PowerSelect == POWER_DCDC_0603){
- PAN312x_Set_Power_Dcdc(pan31xx_dcdc_power_0603_470_510mhz[PowerdBm]);
- }else if(PowerSelect == POWER_DCDC_0402){
- PAN312x_Set_Power_Dcdc(pan31xx_dcdc_power_0402_470_510mhz[PowerdBm]);
- }
- }else if(freq_tmp >= 860000000 && (freq_tmp <= 870000000)){
- if(PowerSelect == POWER_LDO_0603){
- PAN312x_Set_Power_Ldo(pan31xx_ldo_power_0603_860_870mhz[PowerdBm]);
- }else if(PowerSelect == POWER_LDO_0402){
- PAN312x_Set_Power_Ldo(pan31xx_ldo_power_0402_860_870mhz[PowerdBm]);
- }else if(PowerSelect == POWER_DCDC_0603){
- PAN312x_Set_Power_Dcdc(pan31xx_dcdc_power_0603_860_870mhz[PowerdBm]);
- }else if(PowerSelect == POWER_DCDC_0402){
- PAN312x_Set_Power_Dcdc(pan31xx_dcdc_power_0402_860_870mhz[PowerdBm]);
- }
- }else if(freq_tmp >= 902000000 && (freq_tmp <= 928000000)){
- if(PowerSelect == POWER_LDO_0603){
- PAN312x_Set_Power_Ldo(pan31xx_ldo_power_0603_902_928mhz[PowerdBm]);
- }else if(PowerSelect == POWER_LDO_0402){
- PAN312x_Set_Power_Ldo(pan31xx_ldo_power_0402_902_928mhz[PowerdBm]);
- }else if(PowerSelect == POWER_DCDC_0603){
- PAN312x_Set_Power_Dcdc(pan31xx_dcdc_power_0603_902_928mhz[PowerdBm]);
- }else if(PowerSelect == POWER_DCDC_0402){
- PAN312x_Set_Power_Dcdc(pan31xx_dcdc_power_0402_902_928mhz[PowerdBm]);
- }
- }
- }
- /**
- * @简介:获取PAN312x的接收信号的RSSI值
- * 芯片收取到数据时,芯片内部逻辑会统计当前数据包的信号强度。
- * @参数:无
- * @返回值:RSSI值
- */
- int PAN312x_GetRSSI(void)
- {
- uint8_t tmp;
- uint8_t rate_tmp;
- uint16_t data_rate_a;
- uint8_t rssi_offset = 0;
- uint16_t fw_id;
- uint8_t lo_mux_tmp;
- uint8_t vco_tmp;
-
- int cRssi;
-
- //[0x71][0x06]
- rate_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R186);
- if((rate_tmp & PROPERTY_MSK_R186_REG_SYMB_AB_SEL) == PROPERTY_MSK_R186_REG_SYMB_AB_SEL){
- rate_tmp = (rate_tmp & PROPERTY_MSK_R186_REG_SYMBRATE_B) >> 4;
- if((rate_tmp == 0x00) || (rate_tmp == 0x03) || (rate_tmp == 0x05) || (rate_tmp == 0x07)){
- //50kbps100kbps200kbps400kbps
- rssi_offset = 5;
- }else if(rate_tmp == 0x02){
- //80kbps
- rssi_offset = 3;
- }else{
- rssi_offset = 0;
- }
- }else{
- //data rate <= 40kbps
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R187);
- data_rate_a = tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R188);
- data_rate_a |= ((tmp & PROPERTY_MSK_R188_REG_SYMBRATE_A_H) << 8);
- if(data_rate_a == 400){
- //40kbps
- rssi_offset = 3;
- }else{
- rssi_offset = 0;
- }
- }
- PAN312x_Get_FwId(&fw_id);
- if(fw_id == 0x0003){
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1BD);
- }else{
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_RSSI_RBW_HOLD);
- }
- cRssi = (int)tmp;
- if(cRssi > 0x7f){
- cRssi = (0x100 - cRssi - rssi_offset);
- }else{
- cRssi -= rssi_offset;
- }
- lo_mux_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1B3);
- vco_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D2);
-
- if(((lo_mux_tmp & 0x07) == 0x01) && (((vco_tmp&0x38) >> 3) == 0x3)){
- cRssi -= 3;
- }else if(((lo_mux_tmp & 0x07) == 0x01) && (((vco_tmp&0x38) >> 3) == 0x4)){
- cRssi -= 5;
- }else if(((lo_mux_tmp & 0x07) == 0x01) && (((vco_tmp&0x38) >> 3) == 0x5)){
- cRssi += 1;
- }else if(((lo_mux_tmp & 0x07) == 0x00) && (((vco_tmp&0x38) >> 3) == 0x4)){
- cRssi -= 7;
- }else if(((lo_mux_tmp & 0x07) == 0x00) && (((vco_tmp&0x38) >> 3) == 0x5)){
- cRssi -= 7;
- }
- return cRssi;
- }
- /**
- * PAN312x RF Team
- * @RSSI
- * @
- * @RSSI
- */
- int PAN312x_GetChannelCheckRssi(void)
- {
- uint8_t tmp;
- int cRssi;
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1BF);
- cRssi = (int)tmp;
-
- if(cRssi > 0x7f){
- cRssi = (0x100 - cRssi);
- }
- return cRssi;
- }
- /**
- * @简介:获取PAN312x接收信号的LQI
- * @参数:无
- * @返回值: LQI值(低12位有效)
- */
- int PAN312x_GetLqi(void)
- {
- return (PAN312x_Get_PropertyB2(PROPERTY_ADDR_NOISE_PWR) & 0xfff);
- }
- /**
- * @简介:PAN312x的两点式校准
- * @参数:symbol_rate:速率
- * tx_deviation:发送 deviation
- * ref_diff:参考值
- * @返回值:无
- * 备注:
- * 1、当速率大于等于200kbps时,需要进行两点式校准
- */
- void PAN312x_Two_Point_Calibration(uint8_t symbol_rate, uint32_t tx_deviation, uint16_t ref_diff)
- {
- uint8_t tmp;
- //[0x70][0x59][4:3],设置0,表示使用第一组两点式校准code
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R159);
- tmp &= ~PROPERTY_MSK_R159_TP_CODE_GROUP_SEL;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R159, tmp);
-
- /*
- * 2 780~1110 [0x73][0x42][1] 0
- //5[0x73][0x4f][5:0]RCCAL_CAPTUNE,
- //5[0x73][0x4f][5:0]RCCAL_CAPTUNE,
- */
- //[0x73][0x42][1]
- uint8_t lo_tmp;
- lo_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1B3);
- lo_tmp &= PROPERTY_MSK_R1B3_LO_MUX_SEL;
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C2);
-
- if(lo_tmp == 0x00){
- //2
- tmp &= ~PROPERTY_MSK_R2C2_DAC_SG_SEL;
- }else if(lo_tmp == 0x01){
- //4
- tmp |= PROPERTY_MSK_R2C2_DAC_SG_SEL;
- }else if(lo_tmp == 0x02){
- //6
- tmp |= PROPERTY_MSK_R2C2_DAC_SG_SEL;
- }
-
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C2, tmp);
-
-
- if(symbol_rate == 0x0a){
- //2M
- //[0x70][0x4d]
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R14D);
- tmp &= ~PROPERTY_MSK_R14D_PLL_VCO_TXCTK;
- tmp |= 0x01;//tmp |= 0x03;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R14D, tmp);
-
- //[0x73][0x42]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C2);
- tmp &= ~PROPERTY_MSK_R2C2_DAC_SEL_SW;
- tmp |= (0x01 << 2);//tmp |= (0x03 << 2);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C2, tmp);
- }else{
- //[0x70][0x4d]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R14D);
- tmp &= ~PROPERTY_MSK_R14D_PLL_VCO_TXCTK;
- tmp |= 0x01;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R14D, tmp);
-
- //[0x73][0x42]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C2);
- tmp &= ~PROPERTY_MSK_R2C2_DAC_SEL_SW;
- tmp |= (0x01 << 2);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C2, tmp);
- }
-
- if((symbol_rate == 0x0a) || ((symbol_rate == 0x09) && tx_deviation == 500000)){
- //2M
- //1M & tx_deviation = 500000hz
- //[0x73][0x58]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D8);
- tmp &= ~PROPERTY_MSK_R2D8_DAC_ISEL;
- tmp |= (0x07 << 4);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D8, tmp);
- }else{
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D8);
- tmp &= ~PROPERTY_MSK_R2D8_DAC_ISEL;
- tmp |= (0x02 << 4);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D8, tmp);
- }
-
- //[0x71][0x24]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1A4);
- tmp |= 0x01;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1A4, tmp);
-
-
- //enter tx
-
- tmp = 0x10;
- PAN312x_Set_OP_Reg(R003, 1, &tmp);
- tmp = 0x20;
- PAN312x_Set_OP_Reg(R003, 1, &tmp);
-
-
-
- delay1ms(200);
-
- //[0x70][0x63]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R163);
- vcol_cal_code = (tmp & 0x3f);
-
- //[0x70][0x69]
- PAN312x_Set_PropertyB2(PROPERTY_ADDR_R169, ref_diff);
-
- //[0x73][0x4b]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2CB);
- tmp |= (0x01 << 2);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2CB, tmp);
-
-
- //[0x70][0x57]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R157);
- tmp &= 0x7f;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R157, tmp);
-
- //[70][0x64]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R164);
- tmp |= (0x01 << 6);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R164, tmp);
-
- delay10us(200);
-
-
-
- tmp |= (0x01 << 7);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R164, tmp);
- delay10us(200);
-
-
- tmp |= (0x01 << 4);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R164, tmp);
- delay10us(200);
-
-
- tmp &= 0xef;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R164, tmp);
- delay1ms(200);
-
-
- //[0x70][0x5e]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R15E);
- tp_auto_code = tmp;
- //tp_auto_code = 0x77;
-
- //[0x70][0x64]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R164);
- tmp |= 0x7f;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R164, tmp);
- tmp &= 0xbf;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R164, tmp);
-
- //[0x70][0x67]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R167);
- tmp &= 0xe0;
- tmp |= (tp_auto_code & 0x1f);
- #if 0
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R167, tmp);
- #else
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R165, tmp);
- // PAN312x_Set_PropertyB1(PROPERTY_ADDR_R166, tmp);
- // PAN312x_Set_PropertyB1(PROPERTY_ADDR_R167, tmp);
- // PAN312x_Set_PropertyB1(PROPERTY_ADDR_R168, tmp);
- #endif
- //[0x73][0x4b]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2CB);
- tmp &= 0xfb;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2CB, tmp);
-
-
- //[0x71][0x24]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1A4);
- tmp &= 0xfe;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1A4, tmp);
-
-
- delay10us(120);
-
- //[0x70][0x42]
- // tmp = 0x80;
- // PAN312x_Set_PropertyB1(PROPERTY_ADDR_R142, tmp);
-
-
- //7ready
-
- tmp = 0x10;
- PAN312x_Set_OP_Reg(R003, 1, &tmp);
-
- }
- /**
- * @简介:PAN312x的RC校准
- * @参数:无
- * @返回值:无
- */
- void PAN312x_RC_Calibration(void)
- {
- uint8_t tmp;
- //1rx
- tmp = 0x40;
- PAN312x_Set_OP_Reg(R003, 1, &tmp);
-
- //[0x74][0x40]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D9);
- tmp |= PROPERTY_MSK_R2D9_EN_RX_RCCAL;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D9, tmp);
-
-
- delay10us(10);
-
- //[0x74][0x40]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D9);
- tmp |= PROPERTY_MSK_R2D9_RX_RCCAL_RST;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D9, tmp);
- delay10us(10);
-
- //[0x74][0x40]
- do{
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2CF);
- }while(!((tmp & PROPERTY_MSK_R2CF_RCCAL_DONE) == PROPERTY_MSK_R2CF_RCCAL_DONE));
-
- //5[0x73][0x4f][5:0]RCCAL_CAPTUNE,
- //[0x74][0x40]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2CF);
- tmp &= PROPERTY_MSK_R2CF_RCCAL_CAPTUNE;
- rc_code = tmp;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R14F, tmp);
-
- //6[0x73][0x59][1]0
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D9);
- tmp &= ~PROPERTY_MSK_R2D9_RX_RCCAL_RST;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D9, tmp);
-
- //7ready
- tmp = 0x10;
- PAN312x_Set_OP_Reg(R003, 1, &tmp);
- }
- /**
- * @简介:使能PAN312x的DCDC
- * @参数:无
- * @返回值: 无
- * 备注:
- * 1、rx若需要用dcdc模式,需在初始化中调用该函数;
- * 2、tx若需要用dcdc模式,只需要配置功率就可以了(PAN312x_Set_Power),
- * 因为在PAN312x_Set_Power中已经使能dcdc,需要注意tx如果使能dcdc,发射功率最大只支持到14dBm。
- */
- void PAN312x_DCDC_Enable(void)
- {
- uint8_t tmp;
- //[0x60][06]
- PAN312x_Get_OP_Reg(R006, 1, &tmp);
- tmp |= R006_EN_DCDC_Msk;
- PAN312x_Set_OP_Reg(R006, 1, &tmp);
- //[0x73][0x44]
- ////regmap inittx rx
- // PAN312x_Get_OP_Reg(R2C4, 1, &tmp);
- // //DCDC_BUFSEL:[0x73][0x44][7:5] = 000b
- // tmp &= ~R2C4_DCDC_BUFSEL_Msk;
- // //DCDC_RESSEL:[0x73][0x44][4:2] = 010b
- // tmp &= ~R2C4_DCDC_RESSEL_Msk;
- // tmp |= (0x02 << R2C4_DCDC_RESSEL_Pos);
- // PAN312x_Set_OP_Reg(R2C4, 1, &tmp);
- //[0x73][0x45]
- //PAN312x_Get_OP_Reg(R2C5, 1, &tmp);
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C5);
- //DCDC_CAL_EN: [0x73][0x45][7:6] =00b dcdc自动校准关闭
-
- tmp &= ~PROPERTY_MSK_R2C5_DCDC_CAL_EN;
- //DCDC_CAL_EN: [0x73][0x45][5:3] =111b dcdc
- //regmap inittx rx
- // tmp &= ~R2C5_DCDC_IMAX_Msk;
- // tmp |= (0x07 << R2C5_DCDC_IMAX_Pos);
- //test begin
- //tmp |= R2C5_DCDC_SSEN_Msk;
- //test end
- //PAN312x_Set_OP_Reg(R2C5, 1, &tmp);
-
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C5, tmp);
-
- }
- void PAN312x_DCDC_Disable(void)
- {
- uint8_t tmp;
- //[0x60][06]
- PAN312x_Get_OP_Reg(R006, 1, &tmp);
- tmp &= ~R006_EN_DCDC_Msk;
- PAN312x_Set_OP_Reg(R006, 1, &tmp);
-
- }
- /**
- //GPIO Direct Rx寄存器初始化
- * @
- * @:
- */
- //同步模式
- void PAN312x_SynchoronousMode_GpioDirectTxInit(void)
- {
- //GPIO Direct Rx寄存器初始化
- // PAN312x_Iomux_Gpio(IOMUX_GPIO0_AS_DIRECT_TX);
- // PAN312x_Set_Gpio_Mode(GPIO_PIN_0, GPIO_INPUT_MODE);
- //
- // //GPIO1
- // PAN312x_Iomux_Gpio(IOMUX_GPIO1_AS_DIRECT_CLK);
- // PAN312x_Set_Gpio_Mode(GPIO_PIN_1, GPIO_OUTPUT_MODE);
-
- //GPIO Direct Tx
- PAN312x_GPIO_Direct_Tx_Enable();
-
- //
- PAN312x_Gpio_Direct_Synchronous_Mode();
-
- }
- void PAN312x_AsynchoronousMode_GpioDirectTxInit(void)
- {
- //GPIO Direct Tx
- PAN312x_GPIO_Direct_Tx_Enable();
-
- //
- PAN312x_Gpio_Direct_Asynchronous_Mode();
-
- }
- /**
- //GPIO Direct Rx寄存器初始化
- * @
- * @:
- */
- //void EXTI9_5_IRQHandler(void)
- //{
- // HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5);
- //}
- void PAN312x_Gpio_Direct_RxByPass_Enable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R30E);
- tmp |= PROPERTY_MSK_R30E_DIRECT_BYPASS_MODE;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R30E, tmp);
- }
- void PAN312x_Gpio_Direct_RxByPass_Disnable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R30E);
- tmp &= ~PROPERTY_MSK_R30E_DIRECT_BYPASS_MODE;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R30E, tmp);
- }
- //
- /**
- * @简介:初始化同步模式GPIO Direct Rx
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_SynchoronousMode_GpioDirectRxInit(void)
- {
- // PAN312x_Enter_Ready();
-
-
-
- //GPIO Direct Rx
- PAN312x_GPIO_Direct_Rx_Enable();
-
- //GPIO Direct Rx寄存器初始化
- PAN312x_Gpio_Direct_Rx_Regmap_Init();
-
- //
- PAN312x_Gpio_Direct_Synchronous_Mode();
-
- }
- //
- /**
- * @简介:初始化异步模式GPIO Direct Rx
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_AsynchoronousMode_GpioDirectRxInit(void)
- {
- // PAN312x_Iomux_Gpio(IOMUX_GPIO0_AS_DIRECT_RX);
- // PAN312x_Set_Gpio_Mode(PAN312x_GPIO_PIN_0, GPIO_OUTPUT_MODE);
- //
- // PAN312x_Iomux_Gpio(IOMUX_GPIO1_AS_DIRECT_RX);
- // PAN312x_Set_Gpio_Mode(PAN312x_GPIO_PIN_1, GPIO_OUTPUT_MODE);
-
- // PAN312x_Iomux_Gpio(IOMUX_GPIO2_AS_DIRECT_RX);
- // PAN312x_Set_Gpio_Mode(PAN312x_GPIO_PIN_2, GPIO_OUTPUT_MODE);
-
- //GPIO Direct Rx
- PAN312x_GPIO_Direct_Rx_Enable();
-
- //GPIO Direct Rx寄存器初始化
- PAN312x_Gpio_Direct_Rx_Regmap_Init();
-
-
- PAN312x_Gpio_Direct_Asynchronous_Mode();
-
- //agc_manu_en
- // PAN312x_Get_OP_Reg(R206, 1, &tmp);
- // tmp |= R206_REG_AGC_MANU_EN_Msk;
- // PAN312x_Set_OP_Reg(R206, 1, &tmp);
- //
- // //[0x74][0x16][1]:dagc_manu_en
- // PAN312x_Get_OP_Reg(R316, 1, &tmp);
- // tmp |= R316_REG_DAGC_MANU_EN_Msk;
- // PAN312x_Set_OP_Reg(R316, 1, &tmp);
-
- //[0x74][0x1a]
-
- //Direct rx bypass mode
- PAN312x_Gpio_Direct_RxByPass_Enable();
- }
- /**
- * @简介:PAN312x的GPIO Direct Rx寄存器初始化
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_Gpio_Direct_Rx_Regmap_Init(void)
- {
- uint8_t tmp;
-
- //[0x74][0x0b]:盲同步纠频偏快慢阈值
- tmp = 0xcf;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R30B, tmp);
- //[0x74][0x0c]:盲同步PPM计算快慢阈值
- tmp = 0x6b;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R30C, tmp);
- //[0x74][0x0e]:打开盲同步使能,盲同步频偏计算使能
- tmp = 0x50;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R30E, tmp);
-
- //[0x74][0x18]:配置dagc的alpha belta系数
- tmp = 0xa7;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R318, tmp);
-
-
- }
- /**
- * @简介:Iomux PAN312x的GPIO功能
- * @参数:IomuxGpio
- * @返回值: 无
- */
- void PAN312x_Iomux_Gpio(uint32_t IomuxGpio)
- {
- uint8_t tmp;
- uint16_t reg_addr;
- reg_addr = (uint16_t)(IomuxGpio & 0x7ff);
- PAN312x_Get_OP_Reg(reg_addr, 1, &tmp);
-
- tmp &= ~((uint8_t)(IomuxGpio >> 16));
-
- tmp |= ((uint8_t)(IomuxGpio >> 24));
-
- PAN312x_Set_OP_Reg(reg_addr, 1, &tmp);
- }
- /**
- * @简介:设置PAN312x的GPIO模式
- * @参数:GpioPin:
- * Mode:
- * 0x01: 输出模式
- * 0x00: 输入模式
- * @返回值: 无
- */
- void PAN312x_Set_Gpio_Mode(uint16_t GpioPin, uint8_t Mode)
- {
- uint8_t tmp;
- uint8_t GpioPin0_2_11 = 0x00,GpioPin3_10 = 0x00;
- GpioPin0_2_11 = (uint8_t)GpioPin;
- GpioPin3_10 = (uint8_t)(GpioPin >> 8);
-
- if(GpioPin0_2_11 != 0x00){
- //[0x71][0x30]
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1B0);
-
- if(Mode == GPIO_INPUT_MODE) {
-
- tmp &= ~(GpioPin0_2_11 << 4);
- tmp |= GpioPin0_2_11;
- }
- else if(Mode == GPIO_OUTPUT_MODE){
- tmp |= (GpioPin0_2_11 << 4);
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1B0, tmp);
- }
-
- if(GpioPin3_10 != 0x00){
- //[0x60][0x19]
- PAN312x_Get_OP_Reg(R019, 1, &tmp);
- if(Mode == GPIO_INPUT_MODE) {
- tmp &= ~GpioPin3_10;
- PAN312x_Set_OP_Reg(R019, 1, &tmp);
-
- PAN312x_Get_OP_Reg(R018, 1, &tmp);
- tmp |= GpioPin3_10;
- PAN312x_Set_OP_Reg(R018, 1, &tmp);
- }
- else if(Mode == GPIO_OUTPUT_MODE){
- tmp |= GpioPin3_10;
- PAN312x_Set_OP_Reg(R019, 1, &tmp);
- }
- }
- }
- void PAN312x_Gpio_Write_Pin(uint16_t GpioPin, uint8_t PinState)
- {
- uint8_t tmp;
- uint8_t GpioPin0_2_11 = 0x00,GpioPin3_10 = 0x00;
- GpioPin0_2_11 = (uint8_t)GpioPin;
- GpioPin3_10 = (uint8_t)(GpioPin >> 8);
-
- if(GpioPin0_2_11 != 0x00){
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1B2);
- if(PinState == 0) {
- tmp &= ~GpioPin0_2_11;
- }
- else if(PinState == 1){
- tmp |= GpioPin0_2_11;
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1B2, tmp);
-
- }
-
- if(GpioPin3_10 != 0x00){
- PAN312x_Get_OP_Reg(R017, 1, &tmp);
- if(PinState == 0) {
- tmp &= ~GpioPin3_10;
- }
- else if(PinState == 1){
- tmp |= GpioPin3_10;
- }
- PAN312x_Set_OP_Reg(R017, 1, &tmp);
- }
- }
- /**
- * @简介:设置PAN312x的gpio输出系统时钟
- * @参数:IomuxGpio:时钟输出的gpio(gpio0、gpio1、gpio2、gpio9、gpio10)
- * OclkFrequency:
- * 0: 16Mhz
- * 1: 8Mhz
- * 2: 4Mhz
- * 3: 2Mhz
- * 4: 2Mhz
- * 5: 500Khz
- * @返回值:无
- */
- void PAN312x_GpioOutputOclk(uint32_t IomuxGpio, PAN312xGpioOutputClk ClkFrequency)
- {
- uint8_t clk_select,clk_set;
- clk_select = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R14D);
- clk_set = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R150);
- clk_set |= (PROPERTY_MSK_R150_OCLK_EN | PROPERTY_MSK_R150_OCLK_SRC_SEL);
- if(ClkFrequency <4){
- //16Mhz8Mhz4Mhz2Mhz
- clk_select &= ~PROPERTY_MSK_R14D_OCLK_500K_SEL;
- clk_set &= ~PROPERTY_MSK_R150_OCLK_DIV_SEL;
- clk_set |=(ClkFrequency << PROPERTY_POS_R150_OCLK_DIV_SEL);
- }else if(ClkFrequency == 4){
- //500Khzclk
- clk_select |= PROPERTY_MSK_R14D_OCLK_500K_SEL;
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R14D,clk_select);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R150,clk_set);
- PAN312x_Iomux_Gpio(IomuxGpio);
- }
- /**
- * @简介:设置PAN312x进入单载波模式
- * @参数:frequency:频点
- * power:发射功率
- * @返回值:无
- */
- void PAN312x_Enter_Carrier(uint32_t Frequency, uint32_t FrequencyStep, uint16_t ChannelNumber, PAN312xPowerSelect PowerSelect, PAN312xPowerdBm PowerdBm)
- {
- uint8_t tmp;
- // tmp = 0x10;
- // PAN312x_Set_OP_Reg(R003, 1, &tmp);
- PAN312x_Enter_Ready();
- //1tx
- tmp = 0x20;
- PAN312x_Set_OP_Reg(R003, 1, &tmp);
-
- //2
-
- PAN312x_Set_Frequency(Frequency, FrequencyStep, ChannelNumber);
- //3
- PAN312x_Set_Power(Frequency, FrequencyStep, ChannelNumber, PowerSelect, PowerdBm);
-
- //4tx
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R153);
- tmp |= PROPERTY_MSK_R153_REG_TX_CFG_MODE;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R153, tmp);
-
- //5
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1A4);
- tmp |= PROPERTY_MSK_R1A4_REG_TX_FIFO_FULL;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1A4, tmp);
- }
- /**
- * @简介:通过spi命令唤醒PAN312x
- * @参数:无
- * @返回值:无
- */
- void PAN312x_WakeUp_BySpi(void)
- {
- uint8_t tmp;
- //rch_en改为用状态机控制
- PAN312x_Read(R004, &tmp);
- tmp &= ~R004_REG_ENRCH_SEL_Msk;
- PAN312x_Write(R004, tmp);
- PAN312x_Write(R005, 0x60);
- PAN312x_Read(R007, &tmp);
- tmp |= (R007_SPI_WKEN_Msk | R007_SPI_WKTRIG_Msk);
- PAN312x_Write(R007, tmp);
- //31.25us, 3rcl 100us
- delay10us(100);
- tmp &= ~R007_SPI_WKTRIG_Msk;
- PAN312x_Write(R007, tmp);
-
- tmp = 0x00;
- PAN312x_Write(R005, tmp);
- }
- /**
- * @简介:使能PAN312x的rcl时钟
- * @参数:无
- * @返回值:无
- */
- void PAN312x_ClkRcl_Enable(void)
- {
- uint8_t tmp;
- PAN312x_Write(R005, 0x60);
- PAN312x_Read(R00E, &tmp);
- tmp |= R00E_EN_RCL_3V_Msk;
- PAN312x_Write(R00E, tmp);
- PAN312x_Write(R005, 0x00);
- }
- /**
- * @简介:失能PAN312x的rcl时钟
- * @参数:无
- * @返回值:无
- */
- void PAN312x_ClkRcl_Disable(void)
- {
- uint8_t tmp;
- PAN312x_Write(R005, 0x60);
- PAN312x_Read(R00E, &tmp);
- tmp &= ~R00E_EN_RCL_3V_Msk;
- PAN312x_Write(R00E, tmp);
- PAN312x_Write(R005, 0x00);
- }
- /**
- * @简介:设置PAN312x 的SymbolRate(SymbolRate <= 40kbps)
- * @参数:symbol_rate_a:
- * example:200(设置的值) 实际对应的速率 20kbps
- * @返回值:无
- */
- void PAN312x_Set_Symbol_RateA(uint16_t symbol_rate_a)
- {
- uint8_t tmp, tmpBuffer[3];
- uint32_t IntermediateFrequency;
-
- uint8_t lo_tmp;
-
-
- //agc config for 760Mhz ~ 1110Mhz
- uint8_t Agc2_500Kbps_LoDiv2[37] = {0x06, 0x5f, 0x05, 0x35, 0x66, 0x23, 0x05, 0x00,
- 0x5d, 0x23, 0x05, 0x00, 0x5d, 0x23, 0x05, 0x00,
- 0x5d, 0x23, 0x05, 0x00, 0x5d, 0x23, 0x05, 0x00,
- 0x4e, 0x37, 0x05, 0x10, 0x3F, 0x57, 0x05, 0x20,
- 0x30, 0x6f, 0x05, 0x2e, 0x0c};
-
- //agc config for 380Mhz ~ 550Mhz
- uint8_t Agc2_500Kbps_LoDiv4[37] = {0x06, 0x5f, 0x05, 0x35, 0x66, 0x23, 0x05, 0x05,
- 0x56, 0x23, 0x05, 0x05, 0x56, 0x23, 0x05, 0x05,
- 0x56, 0x23, 0x05, 0x05, 0x56, 0x23, 0x05, 0x05,
- 0x56, 0x37, 0x05, 0x18, 0x3F, 0x3f, 0x05, 0x25,
- 0x33, 0x5f, 0x05, 0x36, 0x0c};
-
-
- //page71, 0x06
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R186);
- tmp &= ~PROPERTY_MSK_R186_REG_SYMB_AB_SEL;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R186, tmp);
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R187);
- tmp = symbol_rate_a;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R187, tmp);
-
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R188);
- tmp &= ~PROPERTY_MSK_R188_REG_SYMBRATE_A_H;
- tmp = (symbol_rate_a >> 8);
- tmp &= PROPERTY_MSK_R188_REG_SYMBRATE_A_H;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R188, tmp);
- //page70, 0x50 chf_sel
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R150);
- tmp &= ~PROPERTY_MSK_R150_REG_CHF_SEL;
-
- if(symbol_rate_a == 400){
- //40k
- tmp |= (0x0b << 4);
-
- }else if(symbol_rate_a >= 100 && symbol_rate_a < 400){
-
- tmp |= (0x0c << 4);
-
- //}else if(symbol_rate_a >= 20 && symbol_rate_a < 100){
- }else if(symbol_rate_a >= 2 && symbol_rate_a < 100){
- tmp |= (0x0d << 4);
-
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R150, tmp);
-
- IntermediateFrequency = 0x004000;
- tmpBuffer[0] = (uint8_t)IntermediateFrequency;
- tmpBuffer[1] = (uint8_t)((uint32_t)IntermediateFrequency >> 8);
-
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R153);
- tmp &= ~PROPERTY_MSK_R153_IF_H;
- tmp |= (uint8_t)(((uint32_t)IntermediateFrequency >> 16) & 0x0f);
- tmpBuffer[2] = tmp;
-
- PAN312x_Set_Property(PROPERTY_ADDR_R151, 3, tmpBuffer);
-
-
- //[0x70][0x4e][0x14e] RX_ADC_BWSEL
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R14E);
- tmp &= ~PROPERTY_MSK_R14E_RX_ADC_BWSEL;
- tmp |= (0x01 << 6);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R14E, tmp);
-
- //[0x70][0x4d][0x14d] RX_ADC_IFSEL
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R14D);
- tmp &= ~PROPERTY_MSK_R14D_RX_ADC_IFSEL;
- tmp |= (0x01 << 5);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R14D, tmp);
-
- //[0x73][0x52][0x2d2] RX_ADC_IBSEL
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D2);
- tmp &= ~PROPERTY_MSK_R2D2_RX_ADC_IBSEL;
- tmp |= (0x01 << 6);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D2, tmp);
-
- //[0x73][0x46] RX_TIA_BWSEL
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C6);
- tmp &= ~PROPERTY_MSK_R2C6_RX_TIA_BWSEL;
- tmp |= (0x02 << 4);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C6, tmp);
-
- //[0x73][0x43][0x2c3] RX_TIA_DCOC_BWSEL
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C3);
- tmp &= ~PROPERTY_MSK_R2C3_RX_TIA_DCOC_BWSEL;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C3, tmp);
-
-
- //[0x73][0x51][0x2D1] RX_TIA_IBIAS(2Mbps)
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D1);
- tmp &= ~PROPERTY_MSK_R2D1_RX_TIA_IBIAS;
- tmp |= (0x04 << 3);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D1, tmp);
-
-
- //bit[7]不用管,用默认值1,[6:1]等于rc_code
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D0);
- tmp &= 0x81;
- tmp |= (rc_code << 1);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D0, tmp);
-
-
- //Rx AdjustFrequency
- PAN312x_Set_RxAdjustFrequency(500000);
- //AGC & RSSI
- lo_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1B3);
- lo_tmp &= 0x07;
- if(lo_tmp == 0x00){
- //[0x72][0x06 ~ 0x1d]
- PAN312x_Set_Property(PROPERTY_ADDR_R206, 24, &Agc2_500Kbps_LoDiv2);
-
- //[0x72][0x1e ~ 0x2a]
- PAN312x_Set_Property(PROPERTY_ADDR_R21E, 13, &Agc2_500Kbps_LoDiv2[24]);
- }else if(lo_tmp == 0x01){
- //[0x72][0x06 ~ 0x1d]
- PAN312x_Set_Property(PROPERTY_ADDR_R206, 24, &Agc2_500Kbps_LoDiv4);
-
- //[0x72][0x1e ~ 0x2a]
- PAN312x_Set_Property(PROPERTY_ADDR_R21E, 13, &Agc2_500Kbps_LoDiv4[24]);
- }
-
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R30E);
-
- tmp |= PROPERTY_MSK_R30E_REG_SLOPE_FREQ_VLD;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R30E, tmp);
-
-
- tmp = 0x7d;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R231, tmp);
- }
- /**
- * @简介:设置PAN312x 的SymbolRate(SymbolRate >= 50kbps)
- * @参数:symbol_rate_b:
- * index symbol_rate fs
- * 0x00: 50k 4M
- * 0x01: 62.5k 4M
- * 0x02: 80k 6.4M
- * 0x03: 100k 6.4M
- * 0x04: 125k 8M
- * 0x05: 200k 16M
- * 0x06: 250k 16M
- * 0x07: 400k 16M
- * 0x08: 500k 16M
- * 0x09: 1M
- * 0x0a: 2M
- * IF = symbol_rate / fs *2^20
- * @返回值:无
- */
- void PAN312x_Set_Symbol_RateB(uint32_t DataRate, uint32_t TxDeviation)
- {
- uint8_t tmp, tmpBuffer[4];
-
- //agc config for 760Mhz ~ 1110Mhz
- uint8_t Agc2_500Kbps_LoDiv2[37] = {0x06, 0x5f, 0x05, 0x35, 0x66, 0x23, 0x05, 0x00,
- 0x5d, 0x23, 0x05, 0x00, 0x5d, 0x23, 0x05, 0x00,
- 0x5d, 0x23, 0x05, 0x00, 0x5d, 0x23, 0x05, 0x00,
- 0x4e, 0x37, 0x05, 0x10, 0x3F, 0x57, 0x05, 0x20,
- 0x30, 0x6f, 0x05, 0x2e, 0x0c};
-
- uint8_t Agc1Mbps_LoDiv2[37] = {0x06, 0x57, 0x05, 0x1f, 0x66, 0x23, 0x05, 0x00,
- 0x61, 0x23, 0x05, 0x00, 0x61, 0x23, 0x05, 0x00,
- 0x61, 0x23, 0x05, 0x00, 0x61, 0x23, 0x05, 0x00,
- 0x51, 0x37, 0x05, 0x10, 0x42, 0x57, 0x05, 0x1f,
- 0x33, 0x6f, 0x05, 0x2e, 0x0e};
- uint8_t Agc2Mbps_LoDiv2[37] = {0x06, 0x23, 0x05, 0x00, 0x66, 0x23, 0x05, 0x00,
- 0x4c, 0x23, 0x05, 0x00, 0x4c, 0x23, 0x05, 0x00,
- 0x4c, 0x23, 0x05, 0x00, 0x4c, 0x23, 0x05, 0x00,
- 0x40, 0x37, 0x05, 0x10, 0x2f, 0x57, 0x05, 0x1f,
- 0x1d, 0x7f, 0x05, 0x33, 0x0e};
-
- //agc config for 380Mhz ~ 550Mhz
- uint8_t Agc2_500Kbps_LoDiv4[37] = {0x06, 0x5f, 0x05, 0x35, 0x66, 0x23, 0x05, 0x05,
- 0x56, 0x23, 0x05, 0x05, 0x56, 0x23, 0x05, 0x05,
- 0x56, 0x23, 0x05, 0x05, 0x56, 0x23, 0x05, 0x05,
- 0x56, 0x37, 0x05, 0x18, 0x3F, 0x3f, 0x05, 0x25,
- 0x33, 0x5f, 0x05, 0x36, 0x0c};
-
- uint8_t Agc1Mbps_LoDiv4[37] = {0x06, 0x23, 0x05, 0x03, 0x66, 0x23, 0x05, 0x06,
- 0x57, 0x23, 0x05, 0x06, 0x57, 0x23, 0x05, 0x06,
- 0x57, 0x23, 0x05, 0x06, 0x57, 0x23, 0x05, 0x06,
- 0x55, 0x37, 0x05, 0x18, 0x3f, 0x3f, 0x05, 0x25,
- 0x2d, 0xff, 0x05, 0x3e, 0x0c};
-
- uint8_t Agc2Mbps_LoDiv4[37] = {0x07, 0xff, 0x05, 0x03, 0x66, 0x23, 0x05, 0x03,
- 0x3c, 0x23, 0x05, 0x03, 0x3c, 0x23, 0x05, 0x03,
- 0x3c, 0x23, 0x05, 0x03, 0x3c, 0x23, 0x05, 0x03,
- 0x3c, 0x37, 0x05, 0x15, 0x24, 0x3f, 0x05, 0x22,
- 0x18, 0xff, 0x05, 0x3b, 0x0c};
-
- uint32_t IntermediateFrequency;
- uint8_t symbol_rate_b;
- uint8_t lo_tmp;
-
-
- float h;
-
- h = 2.0f * TxDeviation / DataRate;
- if(DataRate == 50000){
- symbol_rate_b = 0x00;
- }else if(DataRate == 62500){
- symbol_rate_b = 0x01;
- }else if(DataRate == 80000){
- symbol_rate_b = 0x02;
- }else if(DataRate == 100000){
- symbol_rate_b = 0x03;
- }else if(DataRate == 125000){
- symbol_rate_b = 0x04;
- }else if(DataRate == 200000){
- symbol_rate_b = 0x05;
- }else if(DataRate == 250000){
- symbol_rate_b = 0x06;
- }else if(DataRate == 400000){
- symbol_rate_b = 0x07;
- }else if(DataRate == 500000){
- symbol_rate_b = 0x08;
- }else if(DataRate == 1000000){
- symbol_rate_b = 0x09;
- }else if(DataRate == 2000000){
- symbol_rate_b = 0x0a;
- }
- //Page71 0x06: 0x186 data_rate
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R186);
- tmp &= ~(PROPERTY_MSK_R186_REG_SYMBRATE_B | PROPERTY_MSK_R186_REG_SYMB_AB_SEL);
- tmp |= ((symbol_rate_b << 4) | (PROPERTY_MSK_R186_REG_SYMB_AB_SEL));
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R186, tmp);
- // //page70, 0x50 chf_sel
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R150);
- tmp &= ~PROPERTY_MSK_R150_REG_CHF_SEL;
-
- switch(symbol_rate_b){
- case 0x00:
- //50kbps
- tmp |= (0x0a << 4);
- break;
- case 0x01:
- //62.5kbps
- tmp |= (0x09 << 4);
- break;
- case 0x02:
- //80kbps
- tmp |= (0x08 << 4);
- break;
- case 0x03:
- //100kbps
- tmp |= (0x07 << 4);
- break;
- case 0x04:
- //125kbps
- tmp |= (0x06 << 4);
- break;
- case 0x05:
- //200kbps
- tmp |= (0x05 << 4);
- break;
- case 0x06:
- //250kbps
- tmp |= (0x04 << 4);
- break;
- case 0x07:
- //400kbps
- tmp |= (0x03 << 4);
- break;
- case 0x08:
- //500kbps
- tmp |= (0x02 << 4);
- break;
- case 0x09:
- //1Mbps
- tmp |= (0x01 << 4);
- break;
- case 0x0a:
- //2Mbps
- tmp |= (0x00 << 4);
- break;
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R150, tmp);
-
- //[0x70][0x51~0x53] 数字中频:500Khz
-
- if(symbol_rate_b == 0x09){
- //DataRate1Mbps
- IntermediateFrequency = 0x008000;
- }else if(symbol_rate_b == 0x0a){
- //DataRate2Mbps
- IntermediateFrequency = 0x010000;
- }else{
- //DataRate2kbps ~ 500kbps
- IntermediateFrequency = 0x004000;
- }
- tmpBuffer[0] = (uint8_t)IntermediateFrequency;
- tmpBuffer[1] = (uint8_t)((uint32_t)IntermediateFrequency >> 8);
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R153);
- tmp &= ~PROPERTY_MSK_R153_IF_H;
- tmp |= (uint8_t)(((uint32_t)IntermediateFrequency >> 16) & 0x0f);
- tmpBuffer[2] = tmp;
- PAN312x_Set_Property(PROPERTY_ADDR_R151, 3, tmpBuffer);
-
-
- //[0x70][0x4e][0x14e] RX_ADC_BWSEL
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R14E);
- tmp &= ~PROPERTY_MSK_R14E_RX_ADC_BWSEL;
- if(symbol_rate_b == 0x09){
- //DataRate1Mbps
- //ADC带宽选择:±1Mhz
- tmp |= (0x02 << 6);
- }else if(symbol_rate_b == 0x0a){
- //DataRate2Mbps
- //ADC带宽选择:±1Mhz
- tmp |= (0x03 << 6);
- }else{
- //DataRate2kbps ~ 500kbps
- //ADC带宽选择:±1Mhz
- tmp |= (0x01 << 6);
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R14E, tmp);
-
- //[0x70][0x4d][0x14d] RX_ADC_IFSEL
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R14D);
- tmp &= ~PROPERTY_MSK_R14D_RX_ADC_IFSEL;
-
- if(symbol_rate_b == 0x09){
- //DataRate1Mbps
- //ADC带宽选择:±1Mhz
- tmp |= (0x02 << 5);
- }else if(symbol_rate_b == 0x0a){
- //DataRate2Mbps
- //ADC带宽选择:±1Mhz
- tmp |= (0x03 << 5);
- }else{
- //DataRate2kbps ~ 500kbps
- //ADC带宽选择:±1Mhz
- tmp |= (0x01 << 5);
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R14D, tmp);
-
- //[0x73][0x52][0x2d2] RX_ADC_IBSEL
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D2);
- tmp &= ~PROPERTY_MSK_R2D2_RX_ADC_IBSEL;
-
- if(symbol_rate_b == 0x0a){
- //DataRate2Mbps
- tmp |= (0x03 << 6);
- }else{
- //DataRate2kbps ~ 500kbps, 1mbps
- tmp |= (0x01 << 6);
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D2, tmp);
-
- //[0x73][0x46] RX_TIA_BWSEL
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C6);
- tmp &= ~PROPERTY_MSK_R2C6_RX_TIA_BWSEL;
- if(symbol_rate_b == 0x09){
- //DataRate1Mbps
- //ADC带宽选择:±1Mhz
- tmp |= (0x01 << 4);
- }else if(symbol_rate_b == 0x0a){
- //DataRate2Mbps
- //ADC带宽选择:±1Mhz
- tmp |= (0x00 << 4);
- }else{
- //DataRate2kbps ~ 500kbps
- tmp |= (0x02 << 4);
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C6, tmp);
-
- //[0x73][0x43][0x2c3] RX_TIA_DCOC_BWSEL
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C3);
- tmp &= ~PROPERTY_MSK_R2C3_RX_TIA_DCOC_BWSEL;
-
- if(symbol_rate_b == 0x0a){
- //DataRate2Mbps
- tmp |= (0x01 << 2);
- }
-
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C3, tmp);
-
-
- //[0x73][0x51][0x2D1] RX_TIA_IBIAS(2Mbps)
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D1);
- tmp &= ~PROPERTY_MSK_R2D1_RX_TIA_IBIAS;
-
- if(symbol_rate_b == 0x0a){
- //DataRate2Mbps
- tmp |= (0x07 << 3);
- }else{
- //DataRate2kbps ~ 500kbps, 1mbps
- tmp |= (0x04 << 3);
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D1, tmp);
-
-
- //bit[7]不用管,用默认值1,[6:1]等于rc_code
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2D0);
- if(symbol_rate_b == 0x0a){
- //DataRate2Mbps
- tmp |= (0x7f << 1);
- }else{
- tmp &= 0x81;
- tmp |= (rc_code << 1);
-
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2D0, tmp);
-
-
-
- if(symbol_rate_b == 0x0a){
- //DataRate2Mbps
- tmp = 0xa3;
- }else if(symbol_rate_b == 0x09){
- //DataRate1Mbps
- tmp = 0x8f;
- }else{
- //DataRate2kbps ~ 500kbps
- tmp =0x7d;
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R231, tmp);
-
-
- lo_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1B3);
- lo_tmp &= 0x07;
-
- //Rx AdjustFrequency
- if(symbol_rate_b == 0x09){
- //DataRate1Mbps, A
- PAN312x_Set_RxAdjustFrequency(1000000);
-
- //printf("agc1M\r\n");
-
- if(lo_tmp == 0x00){
- //[0x72][0x06 ~ 0x1d]
- PAN312x_Set_Property(PROPERTY_ADDR_R206, 24, &Agc1Mbps_LoDiv2);
-
- //[0x72][0x1e ~ 0x2a]
- PAN312x_Set_Property(PROPERTY_ADDR_R21E, 13, &Agc1Mbps_LoDiv2[24]);
- }else if(lo_tmp == 0x01){
- //[0x72][0x06 ~ 0x1d]
- PAN312x_Set_Property(PROPERTY_ADDR_R206, 24, &Agc1Mbps_LoDiv4);
-
- //[0x72][0x1e ~ 0x2a]
- PAN312x_Set_Property(PROPERTY_ADDR_R21E, 13, &Agc1Mbps_LoDiv4[24]);
- }
-
- }else if(symbol_rate_b == 0x0a){
- //DataRate2Mbps
- PAN312x_Set_RxAdjustFrequency(2000000);
- //printf("agc2M\r\n");
- if(lo_tmp == 0x00){
- //[0x72][0x06 ~ 0x1d]
- PAN312x_Set_Property(PROPERTY_ADDR_R206, 24, &Agc2Mbps_LoDiv2);
-
- //[0x72][0x1e ~ 0x2a]
- PAN312x_Set_Property(PROPERTY_ADDR_R21E, 13, &Agc2Mbps_LoDiv2[24]);
- }else if(lo_tmp == 0x01){
- //[0x72][0x06 ~ 0x1d]
- PAN312x_Set_Property(PROPERTY_ADDR_R206, 24, &Agc2Mbps_LoDiv4);
-
- //[0x72][0x1e ~ 0x2a]
- PAN312x_Set_Property(PROPERTY_ADDR_R21E, 13, &Agc2Mbps_LoDiv4[24]);
- }
- }else{
- //DataRate2kbps ~ 500kbps
- PAN312x_Set_RxAdjustFrequency(500000);
-
- //printf("agc1_500kbps\r\n");
-
- if(lo_tmp == 0x00){
- //[0x72][0x06 ~ 0x1d]
- PAN312x_Set_Property(PROPERTY_ADDR_R206, 24, &Agc2_500Kbps_LoDiv2);
-
- //[0x72][0x1e ~ 0x2a]
- PAN312x_Set_Property(PROPERTY_ADDR_R21E, 13, &Agc2_500Kbps_LoDiv2[24]);
- }else if(lo_tmp == 0x01){
- //[0x72][0x06 ~ 0x1d]
- PAN312x_Set_Property(PROPERTY_ADDR_R206, 24, &Agc2_500Kbps_LoDiv4);
-
- //[0x72][0x1e ~ 0x2a]
- PAN312x_Set_Property(PROPERTY_ADDR_R21E, 13, &Agc2_500Kbps_LoDiv4[24]);
- }
- }
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R30E);
- if(symbol_rate_b <= 0x07){
- //500kbps
- tmp |= PROPERTY_MSK_R30E_REG_SLOPE_FREQ_VLD;
- }else if((symbol_rate_b >= 0x08) && (symbol_rate_b <= 0x0a)){
- //500kbps
- tmp &= ~PROPERTY_MSK_R30E_REG_SLOPE_FREQ_VLD;
- }
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R30E, tmp);
-
-
- //diff
- if(symbol_rate_b >= 0x05){
- //200Khz
- //[0x70][0x57][8] 0:带内带外都有 1:单带内模式
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R157);
- tmp &= ~PROPERTY_MSK_R157_IB_ONLY;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R157, tmp);
-
- uint32_t tx_dev;
- uint16_t ref_diff;
- uint8_t lo_tmp;
- lo_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1B3);
- lo_tmp &= PROPERTY_MSK_R1B3_LO_MUX_SEL;
- if(((symbol_rate_b == 0x05) &&(h == 1.0)) || (((symbol_rate_b == 0x07) &&(h == 0.5)) )){
- //datarate = 200kbps deviation = 100khz, h = 1
- //datarate = 400kbps deviation = 100khz, h = 0.5
- tx_dev = 100000;
- if(lo_tmp == 0x00){
- //2:760Mhz ~ 1110Mhz
- ref_diff = 205;
- }else if(lo_tmp == 0x01){
- //4:380Mhz ~ 550Mhz
- ref_diff = 410;
- }else if(lo_tmp == 0x02){
- //6:253Mhz ~ 380Mhz
- ref_diff = 614;
- }else if(lo_tmp == 0x03){
- //8:190Mhz ~ 280Mhz
- ref_diff = 819;
- }else if(lo_tmp == 0x04){
- //16Mhz8Mhz4Mhz2Mhz
- ref_diff = 1229;
- }
-
- }else if((symbol_rate_b == 0x05) &&(h == 0.5)){
- //datarate = 200kbps deviation = 50khz, h = 0.5
- tx_dev = 50000;
- if(lo_tmp == 0x00){
- //2:760Mhz ~ 1110Mhz
- ref_diff = 102;
- }else if(lo_tmp == 0x01){
- //4:380Mhz ~ 550Mhz
- ref_diff = 205;
- }else if(lo_tmp == 0x02){
- //6:253Mhz ~ 380Mhz
- ref_diff = 307;
- }else if(lo_tmp == 0x03){
- //8:190Mhz ~ 280Mhz
- ref_diff = 410;
- }else if(lo_tmp == 0x04){
- //16Mhz8Mhz4Mhz2Mhz
- ref_diff = 614;
- }
- }
- else if((symbol_rate_b == 0x06) &&(h == 0.5)){
- //datarate = 250kbps deviation = 62.5khz, h = 0.5
- tx_dev = 62500;
- if(lo_tmp == 0x00){
- //2:760Mhz ~ 1110Mhz
- ref_diff = 128;
- }else if(lo_tmp == 0x01){
- //4:380Mhz ~ 550Mhz
- ref_diff = 256;
- }else if(lo_tmp == 0x02){
- //6:253Mhz ~ 380Mhz
- ref_diff = 384;
- }else if(lo_tmp == 0x03){
- //8:190Mhz ~ 280Mhz
- ref_diff = 512;
- }else if(lo_tmp == 0x04){
- //16Mhz8Mhz4Mhz2Mhz
- ref_diff = 768;
- }
- }
- else if(((symbol_rate_b == 0x06) &&(h == 1.0)) || (((symbol_rate_b == 0x08) &&(h == 0.5)))){
- //250kbps
- //datarate = 250kbps deviation = 125khz, h = 1
- //datarate = 500kbps deviation = 125khz, h = 0.5
- tx_dev = 125000;
- if(lo_tmp == 0x00){
- //2:760Mhz ~ 1110Mhz
- ref_diff = 256;
- }else if(lo_tmp == 0x01){
- //4:380Mhz ~ 550Mhz
- ref_diff = 512;
- }else if(lo_tmp == 0x02){
- //6:253Mhz ~ 380Mhz
- ref_diff = 768;
- }else if(lo_tmp == 0x03){
- //8:190Mhz ~ 280Mhz
- ref_diff = 1024;
- }else if(lo_tmp == 0x04){
- //16Mhz8Mhz4Mhz2Mhz
- ref_diff = 1536;
- }
- }else if((symbol_rate_b == 0x07) &&(h == 1.0)){
- //400kbps
- //datarate = 400kbps deviation = 200khz, h = 1
- tx_dev = 200000;
- if(lo_tmp == 0x00){
- //2:760Mhz ~ 1110Mhz
- ref_diff = 410;
- }else if(lo_tmp == 0x01){
- //4:380Mhz ~ 550Mhz
- ref_diff = 819;
- }else if(lo_tmp == 0x02){
- //6:253Mhz ~ 380Mhz
- ref_diff = 1229;
- }else if(lo_tmp == 0x03){
- //8:190Mhz ~ 280Mhz
- ref_diff = 1638;
- }else if(lo_tmp == 0x04){
- //16Mhz8Mhz4Mhz2Mhz
- ref_diff = 2458;
- }
- }else if(((symbol_rate_b == 0x08) &&(h == 1.0)) || ((symbol_rate_b == 0x09) && (h == 0.5))){
- //datarate = 500kbps deviation = 250khz, h = 1
- //datarate = 1Mbps deviation = 250khz, h = 0.5
- tx_dev = 250000;
- if(lo_tmp == 0x00){
- //2:760Mhz ~ 1110Mhz
- ref_diff = 512;
- }else if(lo_tmp == 0x01){
- //4:380Mhz ~ 550Mhz
- ref_diff = 1024;
- }else if(lo_tmp == 0x02){
- //6:253Mhz ~ 380Mhz
- ref_diff = 1536;
- }else if(lo_tmp == 0x03){
- //8:190Mhz ~ 280Mhz
- ref_diff = 2048;
- }else if(lo_tmp == 0x04){
- //16Mhz8Mhz4Mhz2Mhz
- ref_diff = 3072;
- }
- }else if(((symbol_rate_b == 0x09) &&(h == 1.0)) || ((symbol_rate_b == 0x0a) && (h == 0.5))){
- //datarate = 1Mbps deviation = 500khz, h = 1
- //datarate = 2Mbps deviation = 500khz, h = 0.5
- tx_dev = 500000;
- if(lo_tmp == 0x00){
- //2:760Mhz ~ 1110Mhz
- ref_diff = 1024;
- }else if(lo_tmp == 0x01){
- //4:380Mhz ~ 550Mhz
- ref_diff = 2048;
- }else if(lo_tmp == 0x02){
- //6:253Mhz ~ 380Mhz
- ref_diff = 3072;
- }else if(lo_tmp == 0x03){
- //8:190Mhz ~ 280Mhz
- ref_diff = 4096;
- }
- }else if((symbol_rate_b == 0x0a) &&(h == 1.0)){
- //datarate = 2Mbps deviation = 1Mhz, h = 1
- tx_dev = 1000000;
- if(lo_tmp == 0x00){
- //2:760Mhz ~ 1110Mhz
- ref_diff = 2048;
- }else if(lo_tmp == 0x01){
- //4:380Mhz ~ 550Mhz
- ref_diff = 4096;
- }
- }
- PAN312x_Two_Point_Calibration(symbol_rate_b, tx_dev, ref_diff);
- }else{
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R157);
- tmp |= PROPERTY_MSK_R157_IB_ONLY;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R157, tmp);
- }
- }
- void PAN312x_SyncwordLastByteIgnoreEnable(uint8_t SyncwordMask)
- {
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1D5, SyncwordMask);
- }
- void PAN312x_PreambleLastByteIgnoreEnable(uint8_t PreambleMask)
- {
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1D6, PreambleMask);
- }
- uint8_t PAN312x_GetRealSyncwordLastByte(void)
- {
- return PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1D7);
- }
- uint8_t PAN312x_GetRealPreambleLastByte(void)
- {
- return PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1D8);
- }
- /**
- * @简介:关闭接收最大净荷限制
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_RxMaxPayloadLimitDisable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R31C);
- tmp &= ~PROPERTY_MSK_R31C_REG_MAX_VLD;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R31C, tmp);
- }
- void PAN312x_RxMaxPayloadLimitEnable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R31C);
- tmp |= PROPERTY_MSK_R31C_REG_MAX_VLD;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R31C, tmp);
- }
- void PAN312x_Reset_Modem(void)
- {
- uint8_t tmp = 0;
- tmp |= R100_REG_SOFT_RST_Msk;
- PAN312x_Set_OP_Reg(R100, 1, &tmp);
- tmp &= ~R100_REG_SOFT_RST_Msk;
- PAN312x_Set_OP_Reg(R100, 1, &tmp);
- }
- void PAN312x_SoftReset(void)
- {
- uint8_t tmp;
- PAN312x_Write(R005, 0x60);
- PAN312x_Read(R004, &tmp);
- tmp &= ~R004_REG_NRST_L_Msk;
- PAN312x_Write(R004, tmp);
- tmp |= R004_REG_NRST_L_Msk;
- PAN312x_Write(R005, 0x00);
- }
- void PAN312x_Flush_RxFifo(void)
- {
- uint8_t tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1C1);
- tmp |= (PROPERTY_MSK_R1C1_FIFO1_WADDR_CLR | PROPERTY_MSK_R1C1_FIFO1_RADDR_CLR);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1C1, tmp);
- tmp &= ~(PROPERTY_MSK_R1C1_FIFO1_WADDR_CLR | PROPERTY_MSK_R1C1_FIFO1_RADDR_CLR);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1C1, tmp);
- }
- void PAN312x_Flush_TxFifo(void)
- {
- uint8_t tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1C0);
- tmp |= (PROPERTY_MSK_R1C0_FIFO0_WADDR_CLR | PROPERTY_MSK_R1C0_FIFO0_RADDR_CLR);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1C0, tmp);
- tmp &= ~(PROPERTY_MSK_R1C0_FIFO0_WADDR_CLR | PROPERTY_MSK_R1C0_FIFO0_RADDR_CLR);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1C0, tmp);
- }
- void PAN312x_RadioInit(PAN312xRadioInit* pRadioInitStruct)
- {
- // ready ;
- PAN312x_Enter_Ready();
- PAN312x_Set_ModulationType(pRadioInitStruct->ModulationSelect);//调制方式
-
- //
- PAN312x_Set_Frequency(pRadioInitStruct->FrequencyBase, pRadioInitStruct->FrequencyStep, pRadioInitStruct->FrequencyChannelNumber);
- //tx deviation
- PAN312x_Set_Tx_Deviation(pRadioInitStruct->TxDeviation);
-
- //
- if(pRadioInitStruct->DataRate > 40000){
- PAN312x_Set_Symbol_RateB(pRadioInitStruct->DataRate, pRadioInitStruct->TxDeviation);
- }else if(pRadioInitStruct->DataRate <= 40000){
- PAN312x_Set_Symbol_RateA(pRadioInitStruct->DataRate / 100);
- }
-
-
- //rx deviation
- PAN312x_Set_Rx_Deviation(pRadioInitStruct->RxDeviation);
-
- //
- PAN312x_Set_Power(pRadioInitStruct->FrequencyBase,pRadioInitStruct->FrequencyStep,pRadioInitStruct->FrequencyChannelNumber,pRadioInitStruct->PowerSelect,pRadioInitStruct->Power);
- }
- void PAN312x_PktInit(PAN312xPacketInit* pPktInitStruct)
- {
- //Preamble length
- PAN312x_Set_PreambleLength(pPktInitStruct->PreambleLength);
- //Preamble pattern
- PAN312x_Set_PreamblePattern(pPktInitStruct->PreambleSeclect);
- //Preamble patternpattern
- if(pPktInitStruct->PreambleSeclect == PREAMBLE_NON_STANDARD){
- PAN312x_Set_NonStandardPreamblePattern(pPktInitStruct->NonStandardPreamblePattern);
- }
-
- //syncword pattern syncword length
- PAN312x_Set_SyncWordPattern(pPktInitStruct->SyncwordPattern, pPktInitStruct->SyncwordLength);
-
- //Preamble Manchester
- if(pPktInitStruct->PreambleManchester == S_ENABLE){
- PAN312x_PreambleManchesterEnable();
- PAN312x_Set_PreambleManchesterMode(pPktInitStruct->PreambleManchesterMode);
- }else if(pPktInitStruct->PreambleManchester == S_DISABLE){
- PAN312x_PreambleManchesterDisable();
- }
-
- //Syncword Manchester
- if(pPktInitStruct->SyncwordManchester == S_ENABLE){
- PAN312x_SyncwordManchesterEnable();
- PAN312x_Set_SyncwordManchesterMode(pPktInitStruct->SyncwordManchesterMode);
- }else if(pPktInitStruct->PreambleManchester == S_DISABLE){
- PAN312x_SyncwordManchesterDisable();
- }
- //Payload Manchester
- if(pPktInitStruct->PayloadManchester == S_ENABLE){
- PAN312x_PayloadManchesterEnable();
- PAN312x_Set_PayloadManchesterMode(pPktInitStruct->PayloadManchesterMode);
- }else if(pPktInitStruct->PreambleManchester == S_DISABLE){
- PAN312x_PayloadManchesterDisable();
- }
- //Haming
- PAN312x_Set_FecHamingEncoding(pPktInitStruct->FecEncoding);
- //
- PAN312x_Set_Payload_Whitening_Pattern(pPktInitStruct->WhiteningPattern);
-
- // ready ;
- if(pPktInitStruct->DataMode == DATA_MODE_DIRECT){
-
- }
- }
- void PAN312x_CrcInit(PAN312xCrcInit* pCrcInitStruct)
- {
- //帧结构中插入crc字段
- PAN312x_CrcInsertSelect(S_ENABLE);
-
- if(pCrcInitStruct->CrcMode == CRC_MODE_8_BIT){
- PAN312x_Set_CrcMode(CRC_MODE_8_BIT);
- }else if(pCrcInitStruct->CrcMode == CRC_MODE_16_BIT){
- PAN312x_Set_CrcMode(CRC_MODE_16_BIT);
- }else if(pCrcInitStruct->CrcMode == CRC_MODE_24_BIT){
- PAN312x_Set_CrcMode(CRC_MODE_24_BIT);
- }else if(pCrcInitStruct->CrcMode == CRC_MODE_32_BIT){
- PAN312x_Set_CrcMode(CRC_MODE_32_BIT);
- }
-
- PAN312x_Set_CrcSeed(pCrcInitStruct->CrcSeed);
- PAN312x_Set_CrcPolynomial(pCrcInitStruct->CrcPolynomial);
- PAN312x_Set_CrcBitOrder(pCrcInitStruct->CrcBitOrder);
- PAN312x_Set_CrcByteSwap(pCrcInitStruct->CrcByteSwap);
- PAN312x_Set_CrcInvert(pCrcInitStruct->CrcBitInv);
-
- }
- void PAN312x_RxNodeIdInit(PAN312xPacketInit* pPktInitStruct)
- {
- if(pPktInitStruct->NodeIdState == S_ENABLE){
- PAN312x_Set_Rx_NodeId_Config(pPktInitStruct->RxNodeIdLength, pPktInitStruct->RxNodeIdPos);
- PAN312x_Set_PacketFilter_Ctrl(pPktInitStruct->PacketFilterCtrl);
- PAN312x_Set_PacketFilter_Mask(pPktInitStruct->PacketFilterMask);
- if((pPktInitStruct->PacketFilterCtrl & PACKET_FILTER_CTRL_PATTERN1_ENABLE) == PACKET_FILTER_CTRL_PATTERN1_ENABLE){
- PAN312x_Set_PacketFilter_Pat1Value(pPktInitStruct->PacketFilterPat1Value);
- }
- if((pPktInitStruct->PacketFilterCtrl & PACKET_FILTER_CTRL_PATTERN2_ENABLE) == PACKET_FILTER_CTRL_PATTERN2_ENABLE){
- PAN312x_Set_PacketFilter_Pat2Value(pPktInitStruct->PacketFilterPat2Value);
- }
- if((pPktInitStruct->PacketFilterCtrl & PACKET_FILTER_CTRL_PATTERN3_ENABLE) == PACKET_FILTER_CTRL_PATTERN3_ENABLE){
- PAN312x_Set_PacketFilter_Pat3Value(pPktInitStruct->PacketFilterPat3Value);
- }
- }
- }
- void PAN312x_TxNodeIdInit(PAN312xPacketInit* pPktInitStruct)
- {
- if(pPktInitStruct->NodeIdState == S_ENABLE){
- PAN312x_Set_Tx_NodeId_Lnegth(pPktInitStruct->TxNodeIdLength);
- PAN312x_Set_Tx_NodeId_Value(pPktInitStruct->TxNodeIdValue);
- }
- }
- /**
- * @简介:Iomux PAN312x的GPIO功能(只使用GPIO3 ~ GPIO10)
- * @参数:IomuxGpio:
- * @返回值: 无
- */
- void PAN312x_Iomux_Gpio_BySpi(uint32_t IomuxGpio)
- {
- uint8_t tmp;
- uint16_t reg_addr;
- PAN312x_Write(R005, 0x60);
- reg_addr = (uint16_t)(IomuxGpio & 0x7ff);
-
- tmp = PAN312xReg_ReadB1(reg_addr);
-
- tmp &= ~((uint8_t)(IomuxGpio >> 16));
-
- tmp |= ((uint8_t)(IomuxGpio >> 24));
-
- PAN312xReg_WriteB1(reg_addr, tmp);
-
- PAN312x_Write(R005, 0x00);
- }
- /**
- * @简介:设置PAN312x的GPIO模式(只使用GPIO3 ~ GPIO10)
- * @参数:GpioPin:
- * Mode:
- * 0x01: 输出模式
- * 0x00: 输入模式
- * @返回值: 无
- */
- void PAN312x_Set_Gpio_Mode_BySpi(uint16_t GpioPin, uint8_t Mode)
- {
- uint8_t tmp;
- uint8_t GpioPin3_10 = 0x00;
- GpioPin3_10 = (uint8_t)(GpioPin >> 8);
-
- PAN312x_Write(R005, 0x60);
-
- if(GpioPin3_10 != 0x00){
- //[0x60][0x19]
- tmp = PAN312xReg_ReadB1(R019);
-
- if(Mode == GPIO_INPUT_MODE) {
- tmp &= ~GpioPin3_10;
- PAN312xReg_WriteB1(R019, tmp);
-
- tmp = PAN312xReg_ReadB1(R018);
- tmp |= GpioPin3_10;
- PAN312xReg_WriteB1(R018, tmp);
- }
- else if(Mode == GPIO_OUTPUT_MODE){
- tmp |= GpioPin3_10;
- PAN312xReg_WriteB1(R019, tmp);
- }
- }
- PAN312x_Write(R005, 0x00);
- }
- /**
- * @简介:设置PAN312x的GPIO输出高低电平(只使用GPIO3 ~ GPIO10)
- * @参数:GpioPin:
- * Mode:
- * 0x01: 高电平
- * 0x00: 低电平
- * @返回值: 无
- */
- void PAN312x_Gpio_Write_Pin_BySpi(uint16_t GpioPin, uint8_t PinState)
- {
- uint8_t tmp;
- uint8_t GpioPin3_10 = 0x00;
- GpioPin3_10 = (uint8_t)(GpioPin >> 8);
-
- PAN312x_Write(R005, 0x60);
- if(GpioPin3_10 != 0x00){
- tmp = PAN312xReg_ReadB1(R017);
- if(PinState == 0) {
- tmp &= ~GpioPin3_10;
- }
- else if(PinState == 1){
- tmp |= GpioPin3_10;
- }
- PAN312xReg_WriteB1(R017, tmp);
- }
-
- PAN312x_Write(R005, 0x00);
- }
- //uint8_t tmp_test;
- /**
- * @简介:使能PAN312x三线SPI
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_SPI3wire_Enable(void)
- {
-
-
- PAN312xReg_WriteB1(R005, 0x60);
- //3spi
- PAN312xReg_WriteB1(R00E, 0x84);
-
- // tmp_test = PAN312xReg_ReadB1(R00E);
- PAN312xReg_WriteB1(R005, 0x00);
-
- }
- void PAN312x_PreambleCadIndEnable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1CB);
- tmp |= PROPERTY_MSK_R1CB_PRE_BUSY_MASK;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1CB, tmp);
- }
- void PAN312x_PreambleCadIndDisable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1CB);
- tmp &= ~PROPERTY_MSK_R1CB_PRE_BUSY_MASK;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1CB, tmp);
- }
- void PAN312x_SyncwordCadIndEnable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1CB);
- tmp |= PROPERTY_MSK_R1CB_SW_BUSY_MASK;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1CB, tmp);
- }
- void PAN312x_SyncwordCadIndDisable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1CB);
- tmp &= ~PROPERTY_MSK_R1CB_SW_BUSY_MASK;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1CB, tmp);
- }
- /**
- * @简介:使能RSSI CAD指示
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_RssiCadIndEnable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1CB);
- tmp |= PROPERTY_MSK_R1CB_RSSI_BUSY_MASK;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1CB, tmp);
- }
- void PAN312x_RssiCadIndDisable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1CB);
- tmp &= ~PROPERTY_MSK_R1CB_RSSI_BUSY_MASK;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1CB, tmp);
- }
- /**
- * @简介:设置RSSI CAD指示门限
- * @参数:threshold:门限值
- * @返回值: 无
- */
- void PAN312x_SetRssiCadIndThreshold(uint8_t threshold)
- {
- uint8_t tmp = threshold;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1AC, tmp);
- }
- /**
- * @简介:使能GPIO命令触发发送
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_GpioCmdTxEnable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1A4);
- tmp |= PROPERTY_MSK_R1A4_REG_GPIO_TX_MODE;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1A4, tmp);
- }
- void PAN312x_GpioCmdTxDisable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1A4);
- tmp &= ~PROPERTY_MSK_R1A4_REG_GPIO_TX_MODE;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1A4, tmp);
- }
- /**
- * @简介:使能GPIO命令触发接收
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_GpioCmdRxEnable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1A4);
- tmp |= PROPERTY_MSK_R1A4_REG_GPIO_RX_MODE;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1A4, tmp);
- }
- void PAN312x_GpioCmdRxDisable(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1A4);
- tmp &= ~PROPERTY_MSK_R1A4_REG_GPIO_RX_MODE;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1A4, tmp);
- }
- void PAN312x_Set_XthCapTrim(uint8_t TrimCode)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R2C7);
- tmp &= ~PROPERTY_MSK_R2C7_XTH_CAP_TRIM;
- tmp |= (TrimCode << PROPERTY_POS_R2C7_XTH_CAP_TRIM);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R2C7, tmp);
- }
- void PAN312x_WutEnable(void)
- {
- uint8_t tmp;
- PAN312x_Get_OP_Reg(R02F, 1, &tmp);
- tmp |= R02F_WUT_EN_Msk;
- PAN312x_Set_OP_Reg(R02F, 1, &tmp);
-
- }
- void PAN312x_WutDisable(void)
- {
- uint8_t tmp;
- PAN312x_Get_OP_Reg(R02F, 1, &tmp);
- tmp &= ~R02F_WUT_EN_Msk;
- PAN312x_Set_OP_Reg(R02F, 1, &tmp);
- }
- void PAN312x_IomuxGpio3Rcl(void)
- {
- uint8_t tmp;
- PAN312x_Get_OP_Reg(R00E, 1, &tmp);
- tmp &= ~R00E_GPIO3_MUX15_SEL_Msk;
- tmp |= (0x02 << R00E_GPIO3_MUX15_SEL_Pos);
- PAN312x_Set_OP_Reg(R00E, 1, &tmp);
-
- PAN312x_Iomux_Gpio(IOMUX_GPIO3_AS_BOD_LVR_RCL_XTL);
- }
- /**
- * @简介:设置802.15.4g数据包的头文件字段中fcs类型
- * @参数:FcsType:
- * 0x00: CRC32,多项式为0x04C011BB7
- * 0x01: CRC16,多项式为0x1021
- * @返回值: 无
- */
- void PAN312x_Set_FcsType(PAN312x802154FcsType FcsType)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R11B);
- tmp &= ~PROPERTY_MSK_R11B_REG_M802_FCS;
- tmp |= (FcsType << PROPERTY_POS_R11B_REG_M802_FCS);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R11B, tmp);
- }
- /**
- * @简介:通过PAN312x的gpio输出高电平到TCXO的使能引脚,以此来激活TCXO,
- * @参数:GpioPin:只支持GPIO9和GPIO10
- * PinState:如果TCXO EN高电平有效, 则使能的话PinState = 1, 失能的话PinState = 0;
- * 如果TCXO EN低电平有效, 则使能的话PinState = 0, 失能的话PinState = 1;
- * @返回值: 无
- * @备注:如果使用TCXO,并且需要PAN3120的GPIO来激活,则需要将此函数PAN312x_Trigger()前面执行;
- */
- void PAN312x_TCXO_ControlByGpio(uint16_t GpioPin, uint8_t PinState)
- {
- if(PAN312x_GPIO_PIN_9 == GpioPin){
-
- PAN312x_Iomux_Gpio_BySpi(IOMUX_GPIO9_AS_GPIO);
- PAN312x_Set_Gpio_Mode_BySpi(PAN312x_GPIO_PIN_9, GPIO_OUTPUT_MODE);
- PAN312x_Gpio_Write_Pin_BySpi(PAN312x_GPIO_PIN_9,PinState);
- }else if(PAN312x_GPIO_PIN_10 == GpioPin){
- PAN312x_Iomux_Gpio_BySpi(IOMUX_GPIO10_AS_GPIO);
- PAN312x_Set_Gpio_Mode_BySpi(PAN312x_GPIO_PIN_10, GPIO_OUTPUT_MODE);
- PAN312x_Gpio_Write_Pin_BySpi(PAN312x_GPIO_PIN_10,PinState);
- }
- }
- /**
- * @简介:初始化控制TRxSwitch的GPIO引脚
- * @参数:吴
- * @返回值: 无
- * @备注:
- */
- void PAN312x_TRxSwitchGpioInit(void)
- {
- PAN312x_Iomux_Gpio(IOMUX_GPIO0_AS_GPIO);
- PAN312x_Iomux_Gpio(IOMUX_GPIO1_AS_GPIO);
- PAN312x_Set_Gpio_Mode(PAN312x_GPIO_PIN_0|PAN312x_GPIO_PIN_1, GPIO_OUTPUT_MODE);
- }
- /**
- * @简介:关闭TxSwitch
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_TxSwitchOn(void)
- {
- PAN312x_Gpio_Write_Pin(PAN312x_GPIO_PIN_0, 0);
- PAN312x_Gpio_Write_Pin(PAN312x_GPIO_PIN_1, 1);
-
- }
- /**
- * @简介:打开RxSwitch
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_RxSwitchOn(void)
- {
- PAN312x_Gpio_Write_Pin(PAN312x_GPIO_PIN_0, 1);
- PAN312x_Gpio_Write_Pin(PAN312x_GPIO_PIN_1, 0);
- }
- /**
- * @简介:关闭TRxSwitch
- * @参数:无
- * @返回值: 无
- */
- void PAN312x_TRxSwitchOff(void)
- {
- PAN312x_Gpio_Write_Pin(PAN312x_GPIO_PIN_0, 0);
- PAN312x_Gpio_Write_Pin(PAN312x_GPIO_PIN_1, 0);
- }
- void PAN312x_SetSyncwordTimeout(PAN312xPacketInit* pPacketInitStruct)
- {
- uint8_t tmp;
- uint8_t timeout_byte;
- timeout_byte = pPacketInitStruct->PreambleLength + pPacketInitStruct->SyncwordLength + 8;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1A4);
- tmp |= PROPERTY_MSK_R1A4_REG_TIMEOUT_EN;
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1A4, tmp);
-
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1A4, timeout_byte);
-
-
- }
- /**
- * @简介:合并tx fifo作为rx fifo 此时rx fifo大小变为256 bytes
- * @参数:无
- * @
- */
- void PAN312x_MergeTxFifoAsRxFifo(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R16B);
- tmp &= ~PROPERTY_MSK_R16B_FIFO_MODE;
- tmp |= (0x02 << PROPERTY_POS_R16B_FIFO_MODE);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R16B, tmp);
- }
- /**
- * @简介:合并rx fifo作为tx fifo,此时tx fifo大小变为256 bytes
- * @参数:无
- * @
- */
- void PAN312x_MergeRxFifoAsTxFifo(void)
- {
- uint8_t tmp;
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R16B);
- tmp &= ~PROPERTY_MSK_R16B_FIFO_MODE;
- tmp |= (0x01 << PROPERTY_POS_R16B_FIFO_MODE);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R16B, tmp);
- }
- /**
- * @简介:清除TxFifo和RxFifo
- * @参数:无
- * @
- */
- void PAN312x_FlushTxFifoRxFifo(void)
- {
- uint8_t tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1C0);
- tmp |= (PROPERTY_MSK_R1C0_FIFO0_WADDR_CLR | PROPERTY_MSK_R1C0_FIFO0_RADDR_CLR);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1C0, tmp);
- tmp &= ~(PROPERTY_MSK_R1C0_FIFO0_WADDR_CLR | PROPERTY_MSK_R1C0_FIFO0_RADDR_CLR);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1C0, tmp);
-
- tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1C1);
- tmp |= (PROPERTY_MSK_R1C1_FIFO1_WADDR_CLR | PROPERTY_MSK_R1C1_FIFO1_RADDR_CLR);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1C1, tmp);
- tmp &= ~(PROPERTY_MSK_R1C1_FIFO1_WADDR_CLR | PROPERTY_MSK_R1C1_FIFO1_RADDR_CLR);
- PAN312x_Set_PropertyB1(PROPERTY_ADDR_R1C1, tmp);
-
- }
- void PAN312x_Set_RxAdjustFrequency(uint32_t AdjustFrequency)
- {
- float mid_frequency_tmp;
- uint32_t ref_freq = 32000000;
- uint8_t lo_tmp;
- lo_tmp = PAN312x_Get_PropertyB1(PROPERTY_ADDR_R1B3);
-
- lo_tmp &= 0x07;
-
- if(lo_tmp == 0){
- mid_frequency_tmp = AdjustFrequency * 2.0f / ref_freq * (1 << 24);
- }else if(lo_tmp == 1){
- mid_frequency_tmp = AdjustFrequency * 4.0f / ref_freq * (1 << 24);
- }else if(lo_tmp == 2){
- mid_frequency_tmp = AdjustFrequency * 6.0f / ref_freq * (1 << 24);
- }else if(lo_tmp == 3){
- mid_frequency_tmp = AdjustFrequency * 8.0f / ref_freq * (1 << 24);
- }else if(lo_tmp == 4){
- mid_frequency_tmp = AdjustFrequency * 12.0f / ref_freq * (1 << 24);
- }
-
- //[0x71][0x19][0x71][0x1a][0x71][0x1b]Rx AdjustFrequency
- PAN312x_Set_PropertyB3(PROPERTY_ADDR_R199, (uint32_t)mid_frequency_tmp);
- }
- /****** Copyright (C) 2025-2050 Shanghai Panchip Microelectronics Co., Ltd. All rights reserved. *******/
|