OisCmd.c 106 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054
  1. /* ******************************************************************************** */
  2. /* */
  3. /* << LC898122 Evaluation Soft >> */
  4. /* Program Name : OisCmd.c */
  5. /* Design : Y.Yamada */
  6. /* History : First edition 2009.07.31 Y.Tashita */
  7. /* ******************************************************************************** */
  8. /* ************************** */
  9. /* Include Header File */
  10. /* ************************** */
  11. #define OISCMD
  12. /* #include "Main.h" */
  13. /* #include "Cmd.h" */
  14. #include "Ois.h"
  15. #include "OisDef.h"
  16. /* ************************** */
  17. /* Local Function Prottype */
  18. /* ************************** */
  19. void MesFil(unsigned char); /* Measure Filter Setting */
  20. #ifdef MODULE_CALIBRATION
  21. #ifndef HALLADJ_HW
  22. void LopIni(unsigned char); /* Loop Gain Initialize */
  23. #endif
  24. void LopPar(unsigned char); /* Loop Gain Parameter initialize */
  25. #ifndef HALLADJ_HW
  26. void LopSin(unsigned char, unsigned char); /* Loop Gain Sin Wave Output */
  27. unsigned char LopAdj(unsigned char); /* Loop Gain Adjust */
  28. void LopMes(void); /* Loop Gain Measure */
  29. #endif
  30. #endif
  31. #ifndef HALLADJ_HW
  32. unsigned long GinMes(unsigned char); /* Measure Result Getting */
  33. #endif
  34. void GyrCon(unsigned char); /* Gyro Filter Control */
  35. short GenMes(unsigned short, unsigned char); /* General Measure */
  36. #ifndef HALLADJ_HW
  37. /* unsigned long TnePtp( unsigned char, unsigned char ) ; // Get Hall Peak to Peak Values */
  38. /* unsigned char TneCen( unsigned char, UnDwdVal ) ; // Tuning Hall Center */
  39. unsigned long TneOff(UnDwdVal, unsigned char); /* Hall Offset Tuning */
  40. unsigned long TneBia(UnDwdVal, unsigned char); /* Hall Bias Tuning */
  41. #endif
  42. void StbOnn(void); /* Servo ON Slope mode */
  43. void SetSineWave(unsigned char, unsigned char);
  44. void StartSineWave(void);
  45. void StopSineWave(void);
  46. void SetMeasFil(unsigned char);
  47. void ClrMeasFil(void);
  48. /* ************************** */
  49. /* define */
  50. /* ************************** */
  51. #define MES_XG1 0 /* LXG1 Measure Mode */
  52. #define MES_XG2 1 /* LXG2 Measure Mode */
  53. #define HALL_ADJ 0
  54. #define LOOPGAIN 1
  55. #define THROUGH 2
  56. #define NOISE 3
  57. /* Measure Mode */
  58. #define TNE 80 /* Waiting Time For Movement */
  59. #ifdef HALLADJ_HW
  60. #define __MEASURE_LOOPGAIN 0x00
  61. #define __MEASURE_BIASOFFSET 0x01
  62. #else
  63. /******* Hall calibration Type 1 *******/
  64. #define MARJIN 0x0300 /* Marjin */
  65. #define BIAS_ADJ_BORDER 0x1998 /* HALL_MAX_GAP < BIAS_ADJ_BORDER < HALL_MIN_GAP(80%) */
  66. #define HALL_MAX_GAP (BIAS_ADJ_BORDER - MARJIN)
  67. #define HALL_MIN_GAP (BIAS_ADJ_BORDER + MARJIN)
  68. /***************************************/
  69. #define BIAS_LIMIT 0xFFFF /* HALL BIAS LIMIT */
  70. #define OFFSET_DIV 2 /* Divide Difference For Offset Step */
  71. #define TIME_OUT 40 /* Time Out Count */
  72. /******* Hall calibration Type 2 *******/
  73. #define MARGIN 0x0300 /* Margin */
  74. #define BIAS_ADJ_OVER 0xD998 /* 85% */
  75. #define BIAS_ADJ_RANGE 0xCCCC /* 80% */
  76. #define BIAS_ADJ_SKIP 0xBFFF /* 75% */
  77. #define HALL_MAX_RANGE (BIAS_ADJ_RANGE + MARGIN)
  78. #define HALL_MIN_RANGE (BIAS_ADJ_RANGE - MARGIN)
  79. #define DECRE_CAL 0x0100 /* decrease value */
  80. /***************************************/
  81. #endif
  82. #ifdef H1COEF_CHANGER
  83. #ifdef CORRECT_1DEG
  84. #define MAXLMT 0x40400000 /* 3.0 */
  85. #define MINLMT 0x3FE66666 /* 1.8 */
  86. #define CHGCOEF 0xBA195555 /* */
  87. #else
  88. #define MAXLMT 0x40000000 /* 2.0 */
  89. #define MINLMT 0x3F8CCCCD /* 1.1 */
  90. #define CHGCOEF 0xBA4C71C7 /* */
  91. #endif
  92. #define MINLMT_MOV 0x00000000 /* 0.0 */
  93. #define CHGCOEF_MOV 0xB9700000
  94. #endif
  95. /* ************************** */
  96. /* Global Variable */
  97. /* ************************** */
  98. #ifdef HALLADJ_HW
  99. unsigned char UcAdjBsy;
  100. #else
  101. unsigned short UsStpSiz = 0; /* Bias Step Size */
  102. unsigned short UsErrBia, UsErrOfs;
  103. #endif
  104. /* ************************** */
  105. /* Const */
  106. /* ************************** */
  107. /* gxzoom Setting Value */
  108. #define ZOOMTBL 16
  109. const unsigned long ClGyxZom[ZOOMTBL] = {
  110. 0x3F800000,
  111. 0x3F800000,
  112. 0x3F800000,
  113. 0x3F800000,
  114. 0x3F800000,
  115. 0x3F800000,
  116. 0x3F800000,
  117. 0x3F800000,
  118. 0x3F800000,
  119. 0x3F800000,
  120. 0x3F800000,
  121. 0x3F800000,
  122. 0x3F800000,
  123. 0x3F800000,
  124. 0x3F800000,
  125. 0x3F800000
  126. };
  127. /* gyzoom Setting Value */
  128. const unsigned long ClGyyZom[ZOOMTBL] = {
  129. 0x3F800000,
  130. 0x3F800000,
  131. 0x3F800000,
  132. 0x3F800000,
  133. 0x3F800000,
  134. 0x3F800000,
  135. 0x3F800000,
  136. 0x3F800000,
  137. 0x3F800000,
  138. 0x3F800000,
  139. 0x3F800000,
  140. 0x3F800000,
  141. 0x3F800000,
  142. 0x3F800000,
  143. 0x3F800000,
  144. 0x3F800000
  145. };
  146. /* DI Coefficient Setting Value */
  147. #define COEFTBL 7
  148. const unsigned long ClDiCof[COEFTBL] = {
  149. DIFIL_S2, /* 0 */
  150. DIFIL_S2, /* 1 */
  151. DIFIL_S2, /* 2 */
  152. DIFIL_S2, /* 3 */
  153. DIFIL_S2, /* 4 */
  154. DIFIL_S2, /* 5 */
  155. DIFIL_S2 /* 6 */
  156. };
  157. /* ******************************************************************************** */
  158. /* Function Name : TneRun */
  159. /* Retun Value : Hall Tuning SUCCESS or FAILURE */
  160. /* Argment Value : NON */
  161. /* Explanation : Hall System Auto Adjustment Function */
  162. /* History : First edition 2009.12.1 YS.Kim */
  163. /* ******************************************************************************** */
  164. unsigned short TneRun(void)
  165. {
  166. unsigned char UcHlySts, UcHlxSts, UcAtxSts, UcAtySts;
  167. unsigned short UsFinSts, UsOscSts; /* Final Adjustment state */
  168. unsigned char UcDrvMod;
  169. #ifndef HALLADJ_HW
  170. UnDwdVal StTneVal;
  171. #endif
  172. #ifdef USE_EXTCLK_ALL /* 24MHz */
  173. UsOscSts = EXE_END;
  174. #else
  175. #ifdef MODULE_CALIBRATION
  176. /* OSC adjustment */
  177. UsOscSts = OscAdj();
  178. #else
  179. UsOscSts = EXE_END;
  180. #endif
  181. #endif
  182. UcDrvMod = UcPwmMod;
  183. if (UcDrvMod == PWMMOD_CVL)
  184. DrvPwmSw(Mpwm); /* PWM mode */
  185. #ifdef HALLADJ_HW
  186. UcHlySts = BiasOffsetAdj(Y_DIR, 0);
  187. WitTim_LC898122AF(TNE);
  188. UcHlxSts = BiasOffsetAdj(X_DIR, 0);
  189. WitTim_LC898122AF(TNE);
  190. UcHlySts = BiasOffsetAdj(Y_DIR, 1);
  191. WitTim_LC898122AF(TNE);
  192. UcHlxSts = BiasOffsetAdj(X_DIR, 1);
  193. SrvCon(Y_DIR, OFF);
  194. SrvCon(X_DIR, OFF);
  195. if (UcDrvMod == PWMMOD_CVL)
  196. DrvPwmSw(Mlnp); /* PWM mode */
  197. #ifdef NEUTRAL_CENTER
  198. TneHvc();
  199. #endif /* NEUTRAL_CENTER */
  200. #else
  201. /* StbOnnN( OFF , ON ) ; */ /* Y OFF, X ON */
  202. WitTim_LC898122AF(TNE);
  203. StTneVal.UlDwdVal = TnePtp(Y_DIR, PTP_BEFORE);
  204. /* UcHlySts = TneCen( Y_DIR, StTneVal ) ; */
  205. UcHlySts = TneCen(Y2_DIR, StTneVal);
  206. StbOnnN(ON, OFF); /* Y ON, X OFF */
  207. WitTim_LC898122AF(TNE);
  208. StTneVal.UlDwdVal = TnePtp(X_DIR, PTP_BEFORE);
  209. /* UcHlxSts = TneCen( X_DIR, StTneVal ) ; */
  210. UcHlxSts = TneCen(X2_DIR, StTneVal);
  211. StbOnnN(OFF, ON); /* Y OFF, X ON */
  212. WitTim_LC898122AF(TNE);
  213. StTneVal.UlDwdVal = TnePtp(Y_DIR, PTP_AFTER);
  214. /* UcHlySts = TneCen( Y_DIR, StTneVal ) ; */
  215. UcHlySts = TneCen(Y2_DIR, StTneVal);
  216. StbOnnN(ON, OFF); /* Y ON, X OFF */
  217. WitTim_LC898122AF(TNE);
  218. StTneVal.UlDwdVal = TnePtp(X_DIR, PTP_AFTER);
  219. /* UcHlxSts = TneCen( X_DIR, StTneVal ) ; */
  220. UcHlxSts = TneCen(X2_DIR, StTneVal);
  221. SrvCon(Y_DIR, OFF);
  222. SrvCon(X_DIR, OFF);
  223. if (UcDrvMod == PWMMOD_CVL)
  224. DrvPwmSw(Mlnp); /* PWM mode */
  225. #ifdef NEUTRAL_CENTER
  226. TneHvc();
  227. #endif /* NEUTRAL_CENTER */
  228. #endif
  229. WitTim_LC898122AF(TNE);
  230. RamAccFixMod(ON); /* Fix mode */
  231. StAdjPar.StHalAdj.UsAdxOff =
  232. (unsigned short)((unsigned long)0x00010000 - (unsigned long)StAdjPar.StHalAdj.UsHlxCna);
  233. StAdjPar.StHalAdj.UsAdyOff =
  234. (unsigned short)((unsigned long)0x00010000 - (unsigned long)StAdjPar.StHalAdj.UsHlyCna);
  235. RamWriteA_LC898122AF(OFF0Z, StAdjPar.StHalAdj.UsAdxOff); /* 0x1450 */
  236. RamWriteA_LC898122AF(OFF1Z, StAdjPar.StHalAdj.UsAdyOff); /* 0x14D0 */
  237. RamReadA_LC898122AF(DAXHLO, &StAdjPar.StHalAdj.UsHlxOff); /* 0x1479 */
  238. RamReadA_LC898122AF(DAXHLB, &StAdjPar.StHalAdj.UsHlxGan); /* 0x147A */
  239. RamReadA_LC898122AF(DAYHLO, &StAdjPar.StHalAdj.UsHlyOff); /* 0x14F9 */
  240. RamReadA_LC898122AF(DAYHLB, &StAdjPar.StHalAdj.UsHlyGan); /* 0x14FA */
  241. RamReadA_LC898122AF(OFF0Z, &StAdjPar.StHalAdj.UsAdxOff); /* 0x1450 */
  242. RamReadA_LC898122AF(OFF1Z, &StAdjPar.StHalAdj.UsAdyOff); /* 0x14D0 */
  243. RamAccFixMod(OFF); /* Float mode */
  244. StbOnn(); /* Slope Mode */
  245. WitTim_LC898122AF(TNE);
  246. #ifdef MODULE_CALIBRATION
  247. /* X Loop Gain Adjust */
  248. UcAtxSts = LopGan(X_DIR);
  249. /* Y Loop Gain Adjust */
  250. UcAtySts = LopGan(Y_DIR);
  251. #else /* default value */
  252. RamAccFixMod(ON); /* Fix mode */
  253. RamReadA_LC898122AF(sxg, &StAdjPar.StLopGan.UsLxgVal); /* 0x10D3 */
  254. RamReadA_LC898122AF(syg, &StAdjPar.StLopGan.UsLygVal); /* 0x11D3 */
  255. RamAccFixMod(OFF); /* Float mode */
  256. UcAtxSts = EXE_END;
  257. UcAtySts = EXE_END;
  258. #endif
  259. TneGvc();
  260. UsFinSts =
  261. (unsigned short)(UcHlxSts - EXE_END) + (unsigned short)(UcHlySts - EXE_END) +
  262. (unsigned short)(UcAtxSts - EXE_END) + (unsigned short)(UcAtySts - EXE_END) +
  263. (UsOscSts - (unsigned short)EXE_END) + (unsigned short)EXE_END;
  264. return UsFinSts;
  265. }
  266. #ifndef HALLADJ_HW
  267. /* ******************************************************************************** */
  268. /* Function Name : TnePtp */
  269. /* Retun Value : Hall Top & Bottom Gaps */
  270. /* Argment Value : X,Y Direction, Adjust Before After Parameter */
  271. /* Explanation : Measuring Hall Paek To Peak */
  272. /* History : First edition 2009.12.1 YS.Kim */
  273. /* ******************************************************************************** */
  274. unsigned long TnePtp(unsigned char UcDirSel, unsigned char UcBfrAft)
  275. {
  276. UnDwdVal StTneVal;
  277. MesFil(THROUGH); /* 測定用フィ?ターを設定する。 */
  278. if (!UcDirSel) {
  279. RamWrite32A_LC898122AF(sxsin, HALL_H_VAL); /* 0x10D5 */
  280. SetSinWavePara(0x0A, XHALWAVE);
  281. } else {
  282. RamWrite32A_LC898122AF(sysin, HALL_H_VAL); /* 0x11D5 */
  283. SetSinWavePara(0x0A, YHALWAVE);
  284. }
  285. if (!UcDirSel) { /* AXIS X */
  286. RegWriteA_LC898122AF(WC_MES1ADD0, (unsigned char)AD0Z); /* 0x0194 */
  287. RegWriteA_LC898122AF(WC_MES1ADD1, (unsigned char)((AD0Z >> 8) & 0x0001)); /* 0x0195 */
  288. } else { /* AXIS Y */
  289. RegWriteA_LC898122AF(WC_MES1ADD0, (unsigned char)AD1Z); /* 0x0194 */
  290. RegWriteA_LC898122AF(WC_MES1ADD1, (unsigned char)((AD1Z >> 8) & 0x0001)); /* 0x0195 */
  291. }
  292. RegWriteA_LC898122AF(WC_MESLOOP1, 0x00); /* 0x0193 CmMesLoop[15:8] */
  293. RegWriteA_LC898122AF(WC_MESLOOP0, 0x01); /* 0x0192 CmMesLoop[7:0] */
  294. RamWrite32A_LC898122AF(msmean, 0x3F800000); /* 0x1230 1/CmMesLoop[15:0] */
  295. RamWrite32A_LC898122AF(MSMAX1, 0x00000000); /* 0x1050 */
  296. RamWrite32A_LC898122AF(MSMAX1AV, 0x00000000); /* 0x1051 */
  297. RamWrite32A_LC898122AF(MSMIN1, 0x00000000); /* 0x1060 */
  298. RamWrite32A_LC898122AF(MSMIN1AV, 0x00000000); /* 0x1061 */
  299. RegWriteA_LC898122AF(WC_MESABS, 0x00); /* 0x0198 none ABS */
  300. BsyWit(WC_MESMODE, 0x02); /* 0x0190 Sine wave Measure */
  301. RamAccFixMod(ON); /* Fix mode */
  302. RamReadA_LC898122AF(MSMAX1AV, &StTneVal.StDwdVal.UsHigVal); /* 0x1051 */
  303. RamReadA_LC898122AF(MSMIN1AV, &StTneVal.StDwdVal.UsLowVal); /* 0x1061 */
  304. RamAccFixMod(OFF); /* Float mode */
  305. if (!UcDirSel) { /* AXIS X */
  306. SetSinWavePara(0x00, XHALWAVE); /* STOP */
  307. } else {
  308. SetSinWavePara(0x00, YHALWAVE); /* STOP */
  309. }
  310. if (UcBfrAft == 0) {
  311. if (UcDirSel == X_DIR) {
  312. StAdjPar.StHalAdj.UsHlxCen =
  313. ((signed short)StTneVal.StDwdVal.UsHigVal +
  314. (signed short)StTneVal.StDwdVal.UsLowVal) / 2;
  315. StAdjPar.StHalAdj.UsHlxMax = StTneVal.StDwdVal.UsHigVal;
  316. StAdjPar.StHalAdj.UsHlxMin = StTneVal.StDwdVal.UsLowVal;
  317. } else {
  318. StAdjPar.StHalAdj.UsHlyCen =
  319. ((signed short)StTneVal.StDwdVal.UsHigVal +
  320. (signed short)StTneVal.StDwdVal.UsLowVal) / 2;
  321. StAdjPar.StHalAdj.UsHlyMax = StTneVal.StDwdVal.UsHigVal;
  322. StAdjPar.StHalAdj.UsHlyMin = StTneVal.StDwdVal.UsLowVal;
  323. }
  324. } else {
  325. if (UcDirSel == X_DIR) {
  326. StAdjPar.StHalAdj.UsHlxCna =
  327. ((signed short)StTneVal.StDwdVal.UsHigVal +
  328. (signed short)StTneVal.StDwdVal.UsLowVal) / 2;
  329. StAdjPar.StHalAdj.UsHlxMxa = StTneVal.StDwdVal.UsHigVal;
  330. StAdjPar.StHalAdj.UsHlxMna = StTneVal.StDwdVal.UsLowVal;
  331. } else {
  332. StAdjPar.StHalAdj.UsHlyCna =
  333. ((signed short)StTneVal.StDwdVal.UsHigVal +
  334. (signed short)StTneVal.StDwdVal.UsLowVal) / 2;
  335. StAdjPar.StHalAdj.UsHlyMxa = StTneVal.StDwdVal.UsHigVal;
  336. StAdjPar.StHalAdj.UsHlyMna = StTneVal.StDwdVal.UsLowVal;
  337. }
  338. }
  339. StTneVal.StDwdVal.UsHigVal = 0x7fff - StTneVal.StDwdVal.UsHigVal;
  340. /* Maximum Gap = Maximum - Hall Peak Top */
  341. StTneVal.StDwdVal.UsLowVal = StTneVal.StDwdVal.UsLowVal - 0x7fff;
  342. /* Minimum Gap = Hall Peak Bottom - Minimum */
  343. return StTneVal.UlDwdVal;
  344. }
  345. /* ******************************************************************************** */
  346. /* Function Name : TneCen */
  347. /* Retun Value : Hall Center Tuning Result */
  348. /* Argment Value : X,Y Direction, Hall Top & Bottom Gaps */
  349. /* Explanation : Hall Center Tuning Function */
  350. /* History : First edition 2009.12.1 YS.Kim */
  351. /* ******************************************************************************** */
  352. unsigned short UsValBef, UsValNow;
  353. unsigned char TneCen(unsigned char UcTneAxs, UnDwdVal StTneVal)
  354. {
  355. unsigned char UcTneRst, UcTmeOut, UcTofRst;
  356. unsigned short UsOffDif;
  357. unsigned short UsBiasVal;
  358. UsErrBia = 0;
  359. UsErrOfs = 0;
  360. UcTmeOut = 1;
  361. UsStpSiz = 1;
  362. UcTneRst = FAILURE;
  363. UcTofRst = FAILURE;
  364. while (UcTneRst && UcTmeOut) {
  365. if (UcTofRst == FAILURE) {
  366. StTneVal.UlDwdVal = TneOff(StTneVal, UcTneAxs);
  367. } else {
  368. StTneVal.UlDwdVal = TneBia(StTneVal, UcTneAxs);
  369. UcTofRst = FAILURE;
  370. }
  371. if (!(UcTneAxs & 0xF0)) {
  372. if (StTneVal.StDwdVal.UsHigVal > StTneVal.StDwdVal.UsLowVal) { /* Check Offset Tuning Result */
  373. UsOffDif =
  374. (StTneVal.StDwdVal.UsHigVal - StTneVal.StDwdVal.UsLowVal) / 2;
  375. } else {
  376. UsOffDif =
  377. (StTneVal.StDwdVal.UsLowVal - StTneVal.StDwdVal.UsHigVal) / 2;
  378. }
  379. if (UsOffDif < MARJIN)
  380. UcTofRst = SUCCESS;
  381. else
  382. UcTofRst = FAILURE;
  383. /* Check Tuning Result */
  384. if ((StTneVal.StDwdVal.UsHigVal < HALL_MIN_GAP && StTneVal.StDwdVal.UsLowVal < HALL_MIN_GAP)
  385. && (StTneVal.StDwdVal.UsHigVal > HALL_MAX_GAP
  386. && StTneVal.StDwdVal.UsLowVal > HALL_MAX_GAP)) {
  387. UcTneRst = SUCCESS;
  388. break;
  389. } else if (UsStpSiz == 0) {
  390. UcTneRst = SUCCESS;
  391. break;
  392. } else {
  393. UcTneRst = FAILURE;
  394. UcTmeOut++;
  395. }
  396. } else {
  397. if ((StTneVal.StDwdVal.UsHigVal > MARGIN) && (StTneVal.StDwdVal.UsLowVal
  398. > MARGIN)) { /* position check */
  399. UcTofRst = SUCCESS;
  400. UsValBef = UsValNow = 0x0000;
  401. } else if ((StTneVal.StDwdVal.UsHigVal <= MARGIN)
  402. && (StTneVal.StDwdVal.UsLowVal <= MARGIN)) {
  403. UcTofRst = SUCCESS;
  404. UcTneRst = FAILURE;
  405. } else
  406. if (((unsigned short)0xFFFF -
  407. (StTneVal.StDwdVal.UsHigVal + StTneVal.StDwdVal.UsLowVal)) >
  408. BIAS_ADJ_OVER) {
  409. UcTofRst = SUCCESS;
  410. UcTneRst = FAILURE;
  411. } else {
  412. UcTofRst = FAILURE;
  413. UsValBef = UsValNow;
  414. RamAccFixMod(ON); /* Fix mode */
  415. if (!(UcTneAxs & 0x0F))
  416. RamReadA_LC898122AF(DAXHLO, &UsValNow); /* 0x1479 Hall X Offset Read */
  417. else
  418. RamReadA_LC898122AF(DAYHLO, &UsValNow); /* 0x14F9 Hall Y Offset Read */
  419. if ((((UsValBef & 0xFF00) == 0x8000)
  420. && (UsValNow & 0xFF00) == 0x8000)
  421. || (((UsValBef & 0xFF00) == 0x7F00)
  422. && (UsValNow & 0xFF00) == 0x7F00)) {
  423. if (!(UcTneAxs & 0x0F))
  424. RamReadA_LC898122AF(DAXHLB, &UsBiasVal); /* 0x147A Hall X Bias Read */
  425. else
  426. RamReadA_LC898122AF(DAYHLB, &UsBiasVal); /* 0x14FA Hall Y Bias Read */
  427. if (UsBiasVal > 0x8000)
  428. UsBiasVal -= 0x8000;
  429. else
  430. UsBiasVal += 0x8000;
  431. if (UsBiasVal > DECRE_CAL)
  432. UsBiasVal -= DECRE_CAL;
  433. UsBiasVal += 0x8000;
  434. if (!(UcTneAxs & 0x0F))
  435. RamWriteA_LC898122AF(DAXHLB, UsBiasVal); /* 0x147A Hall X Bias */
  436. else
  437. RamWriteA_LC898122AF(DAYHLB, UsBiasVal); /* 0x14FA Hall Y Bias */
  438. }
  439. RamAccFixMod(OFF); /* Float mode */
  440. }
  441. if ((((unsigned short)0xFFFF -
  442. (StTneVal.StDwdVal.UsHigVal + StTneVal.StDwdVal.UsLowVal)) <
  443. HALL_MAX_RANGE)
  444. &&
  445. (((unsigned short)0xFFFF -
  446. (StTneVal.StDwdVal.UsHigVal + StTneVal.StDwdVal.UsLowVal)) >
  447. HALL_MIN_RANGE)) {
  448. if (UcTofRst == SUCCESS) {
  449. UcTneRst = SUCCESS;
  450. break;
  451. }
  452. }
  453. UcTneRst = FAILURE;
  454. UcTmeOut++;
  455. }
  456. if (UcTneAxs & 0xF0) {
  457. if ((UcTmeOut / 2) == TIME_OUT)
  458. UcTmeOut = 0;
  459. /* Set Time Out Count */
  460. } else {
  461. if (UcTmeOut == TIME_OUT)
  462. UcTmeOut = 0;
  463. /* Set Time Out Count */
  464. }
  465. }
  466. if (UcTneRst == FAILURE) {
  467. if (!(UcTneAxs & 0x0F)) {
  468. UcTneRst = EXE_HXADJ;
  469. StAdjPar.StHalAdj.UsHlxGan = 0xFFFF;
  470. StAdjPar.StHalAdj.UsHlxOff = 0xFFFF;
  471. } else {
  472. UcTneRst = EXE_HYADJ;
  473. StAdjPar.StHalAdj.UsHlyGan = 0xFFFF;
  474. StAdjPar.StHalAdj.UsHlyOff = 0xFFFF;
  475. }
  476. } else {
  477. UcTneRst = EXE_END;
  478. }
  479. return UcTneRst;
  480. }
  481. /* ******************************************************************************** */
  482. /* Function Name : TneBia */
  483. /* Retun Value : Hall Top & Bottom Gaps */
  484. /* Argment Value : Hall Top & Bottom Gaps , X,Y Direction */
  485. /* Explanation : Hall Bias Tuning Function */
  486. /* History : First edition 2009.12.1 YS.Kim */
  487. /* ******************************************************************************** */
  488. unsigned long TneBia(UnDwdVal StTneVal, unsigned char UcTneAxs)
  489. {
  490. long SlSetBia;
  491. unsigned short UsSetBia;
  492. unsigned char UcChkFst;
  493. static unsigned short UsTneVax; /* Variable For 1/2 Searching */
  494. unsigned short UsDecCal;
  495. UcChkFst = 1;
  496. if (UsStpSiz == 1) {
  497. UsTneVax = 2;
  498. if (UcTneAxs & 0xF0) {
  499. if (((unsigned short)0xFFFF -
  500. (StTneVal.StDwdVal.UsHigVal + StTneVal.StDwdVal.UsLowVal)) >
  501. BIAS_ADJ_OVER) {
  502. UcChkFst = 0;
  503. RamAccFixMod(ON); /* Fix mode */
  504. if (!(UcTneAxs & 0x0F)) { /* Initializing Hall Offset & Bias, Step Size */
  505. RamReadA_LC898122AF(DAXHLB, &UsSetBia); /* 0x147A Hall X Bias Read */
  506. } else {
  507. RamReadA_LC898122AF(DAYHLB, &UsSetBia); /* 0x14FA Hall Y Bias Read */
  508. }
  509. if (UsSetBia > 0x8000)
  510. UsSetBia -= 0x8000;
  511. else
  512. UsSetBia += 0x8000;
  513. if (!UcChkFst)
  514. UsDecCal = (DECRE_CAL << 3);
  515. else
  516. UsDecCal = DECRE_CAL;
  517. if (UsSetBia > UsDecCal)
  518. UsSetBia -= UsDecCal;
  519. UsSetBia += 0x8000;
  520. if (!(UcTneAxs & 0x0F)) { /* Initializing Hall Offset & Bias, Step Size */
  521. RamWriteA_LC898122AF(DAXHLB, UsSetBia); /* 0x147A Hall X Bias */
  522. RamWriteA_LC898122AF(DAXHLO, 0x0000); /* 0x1479 Hall X Offset 0x0000 */
  523. } else {
  524. RamWriteA_LC898122AF(DAYHLB, UsSetBia); /* 0x14FA Hall Y Bias */
  525. RamWriteA_LC898122AF(DAYHLO, 0x0000); /* 0x14F9 Hall Y Offset 0x0000 */
  526. }
  527. UsStpSiz = BIAS_LIMIT / UsTneVax;
  528. RamAccFixMod(OFF); /* Float mode */
  529. }
  530. } else {
  531. if ((StTneVal.StDwdVal.UsHigVal + StTneVal.StDwdVal.UsLowVal) / 2 <
  532. BIAS_ADJ_BORDER) {
  533. UcChkFst = 0;
  534. }
  535. if (!UcTneAxs) { /* Initializing Hall Offset & Bias, Step Size */
  536. RamWrite32A_LC898122AF(DAXHLB, 0xBF800000); /* 0x147A Hall X Bias 0x8001 */
  537. RamWrite32A_LC898122AF(DAXHLO, 0x00000000); /* 0x1479 Hall X Offset 0x0000 */
  538. UsStpSiz = BIAS_LIMIT / UsTneVax;
  539. } else {
  540. RamWrite32A_LC898122AF(DAYHLB, 0xBF800000); /* 0x14FA Hall Y Bias 0x8001 */
  541. RamWrite32A_LC898122AF(DAYHLO, 0x00000000); /* 0x14F9 Y Offset 0x0000 */
  542. UsStpSiz = BIAS_LIMIT / UsTneVax;
  543. }
  544. }
  545. }
  546. RamAccFixMod(ON); /* Fix mode */
  547. if (!(UcTneAxs & 0x0F)) {
  548. RamReadA_LC898122AF(DAXHLB, &UsSetBia); /* 0x147A Hall X Bias Read */
  549. SlSetBia = (long)UsSetBia;
  550. } else {
  551. RamReadA_LC898122AF(DAYHLB, &UsSetBia); /* 0x14FA Hall Y Bias Read */
  552. SlSetBia = (long)UsSetBia;
  553. }
  554. if (SlSetBia >= 0x00008000)
  555. SlSetBia |= 0xFFFF0000;
  556. if (UcChkFst) {
  557. if (UcTneAxs & 0xF0) {
  558. /* Calculatiton For Hall BIAS 1/2 Searching */
  559. if (((unsigned short)0xFFFF - (StTneVal.StDwdVal.UsHigVal + StTneVal.StDwdVal.UsLowVal))
  560. < BIAS_ADJ_RANGE) {
  561. if (((unsigned short)0xFFFF -
  562. (StTneVal.StDwdVal.UsHigVal + StTneVal.StDwdVal.UsLowVal)) <
  563. BIAS_ADJ_SKIP) {
  564. SlSetBia += 0x0400;
  565. } else {
  566. SlSetBia += 0x0100;
  567. }
  568. } else {
  569. if (((unsigned short)0xFFFF -
  570. (StTneVal.StDwdVal.UsHigVal + StTneVal.StDwdVal.UsLowVal)) >
  571. BIAS_ADJ_OVER) {
  572. SlSetBia -= 0x0400;
  573. } else {
  574. SlSetBia -= 0x0100;
  575. }
  576. }
  577. UsStpSiz = 0x0200;
  578. } else {
  579. /* Calculatiton For Hall BIAS 1/2 Searching */
  580. if ((StTneVal.StDwdVal.UsHigVal + StTneVal.StDwdVal.UsLowVal) / 2 > BIAS_ADJ_BORDER)
  581. SlSetBia += UsStpSiz;
  582. else
  583. SlSetBia -= UsStpSiz;
  584. UsTneVax = UsTneVax * 2;
  585. UsStpSiz = BIAS_LIMIT / UsTneVax;
  586. }
  587. }
  588. if (SlSetBia > (long)0x00007FFF)
  589. SlSetBia = 0x00007FFF;
  590. else if (SlSetBia < (long)0xFFFF8001)
  591. SlSetBia = 0xFFFF8001;
  592. if (!(UcTneAxs & 0x0F))
  593. RamWriteA_LC898122AF(DAXHLB, SlSetBia); /* 0x147A Hall X Bias Ram Write */
  594. else
  595. RamWriteA_LC898122AF(DAYHLB, SlSetBia); /* 0x14FA Hall Y Bias Ram Write */
  596. RamAccFixMod(OFF); /* Float mode */
  597. StTneVal.UlDwdVal = TnePtp(UcTneAxs & 0x0F, PTP_AFTER);
  598. return StTneVal.UlDwdVal;
  599. }
  600. /* ******************************************************************************** */
  601. /* Function Name : TneOff */
  602. /* Retun Value : Hall Top & Bottom Gaps */
  603. /* Argment Value : Hall Top & Bottom Gaps , X,Y Direction */
  604. /* Explanation : Hall Offset Tuning Function */
  605. /* History : First edition 2009.12.1 YS.Kim */
  606. /* ******************************************************************************** */
  607. unsigned long TneOff(UnDwdVal StTneVal, unsigned char UcTneAxs)
  608. {
  609. long SlSetOff;
  610. unsigned short UsSetOff;
  611. UcTneAxs &= 0x0F;
  612. RamAccFixMod(ON); /* Fix mode */
  613. if (!UcTneAxs) { /* Initializing Hall Offset & Bias */
  614. RamReadA_LC898122AF(DAXHLO, &UsSetOff); /* 0x1479 Hall X Offset Read */
  615. SlSetOff = (long)UsSetOff;
  616. } else {
  617. RamReadA_LC898122AF(DAYHLO, &UsSetOff); /* 0x14F9 Hall Y Offset Read */
  618. SlSetOff = (long)UsSetOff;
  619. }
  620. if (SlSetOff > 0x00008000)
  621. SlSetOff |= 0xFFFF0000;
  622. if (StTneVal.StDwdVal.UsHigVal > StTneVal.StDwdVal.UsLowVal) {
  623. SlSetOff += (StTneVal.StDwdVal.UsHigVal - StTneVal.StDwdVal.UsLowVal) / OFFSET_DIV;
  624. /* Calculating Value For Increase Step */
  625. } else {
  626. SlSetOff -= (StTneVal.StDwdVal.UsLowVal - StTneVal.StDwdVal.UsHigVal) / OFFSET_DIV;
  627. /* Calculating Value For Decrease Step */
  628. }
  629. if (SlSetOff > (long)0x00007FFF)
  630. SlSetOff = 0x00007FFF;
  631. else if (SlSetOff < (long)0xFFFF8001)
  632. SlSetOff = 0xFFFF8001;
  633. if (!UcTneAxs)
  634. RamWriteA_LC898122AF(DAXHLO, SlSetOff); /* 0x1479 Hall X Offset Ram Write */
  635. else
  636. RamWriteA_LC898122AF(DAYHLO, SlSetOff); /* 0x14F9 Hall Y Offset Ram Write */
  637. RamAccFixMod(OFF); /* Float mode */
  638. StTneVal.UlDwdVal = TnePtp(UcTneAxs, PTP_AFTER);
  639. return StTneVal.UlDwdVal;
  640. }
  641. #endif
  642. /* ******************************************************************************** */
  643. /* Function Name : MesFil */
  644. /* Retun Value : NON */
  645. /* Argment Value : Measure Filter Mode */
  646. /* Explanation : Measure Filter Setting Function */
  647. /* History : First edition 2009.07.31 Y.Tashita */
  648. /* ******************************************************************************** */
  649. void MesFil(unsigned char UcMesMod)
  650. {
  651. #ifdef USE_EXTCLK_ALL /* 24MHz */
  652. if (!UcMesMod) { /* Hall Bias&Offset Adjust */
  653. /* Measure Filter1 Setting */
  654. RamWrite32A_LC898122AF(mes1aa, 0x3D1E5A40); /* 0x10F0 LPF150Hz */
  655. RamWrite32A_LC898122AF(mes1ab, 0x3D1E5A40); /* 0x10F1 */
  656. RamWrite32A_LC898122AF(mes1ac, 0x3F6C34C0); /* 0x10F2 */
  657. RamWrite32A_LC898122AF(mes1ad, 0x00000000); /* 0x10F3 */
  658. RamWrite32A_LC898122AF(mes1ae, 0x00000000); /* 0x10F4 */
  659. RamWrite32A_LC898122AF(mes1ba, 0x3F800000); /* 0x10F5 Through */
  660. RamWrite32A_LC898122AF(mes1bb, 0x00000000); /* 0x10F6 */
  661. RamWrite32A_LC898122AF(mes1bc, 0x00000000); /* 0x10F7 */
  662. RamWrite32A_LC898122AF(mes1bd, 0x00000000); /* 0x10F8 */
  663. RamWrite32A_LC898122AF(mes1be, 0x00000000); /* 0x10F9 */
  664. /* Measure Filter2 Setting */
  665. RamWrite32A_LC898122AF(mes2aa, 0x3D1E5A40); /* 0x11F0 LPF150Hz */
  666. RamWrite32A_LC898122AF(mes2ab, 0x3D1E5A40); /* 0x11F1 */
  667. RamWrite32A_LC898122AF(mes2ac, 0x3F6C34C0); /* 0x11F2 */
  668. RamWrite32A_LC898122AF(mes2ad, 0x00000000); /* 0x11F3 */
  669. RamWrite32A_LC898122AF(mes2ae, 0x00000000); /* 0x11F4 */
  670. RamWrite32A_LC898122AF(mes2ba, 0x3F800000); /* 0x11F5 Through */
  671. RamWrite32A_LC898122AF(mes2bb, 0x00000000); /* 0x11F6 */
  672. RamWrite32A_LC898122AF(mes2bc, 0x00000000); /* 0x11F7 */
  673. RamWrite32A_LC898122AF(mes2bd, 0x00000000); /* 0x11F8 */
  674. RamWrite32A_LC898122AF(mes2be, 0x00000000); /* 0x11F9 */
  675. } else if (UcMesMod == LOOPGAIN) { /* Loop Gain Adjust */
  676. /* Measure Filter1 Setting */
  677. RamWrite32A_LC898122AF(mes1aa, 0x3E587E00); /* 0x10F0 LPF1000Hz */
  678. RamWrite32A_LC898122AF(mes1ab, 0x3E587E00); /* 0x10F1 */
  679. RamWrite32A_LC898122AF(mes1ac, 0x3F13C100); /* 0x10F2 */
  680. RamWrite32A_LC898122AF(mes1ad, 0x00000000); /* 0x10F3 */
  681. RamWrite32A_LC898122AF(mes1ae, 0x00000000); /* 0x10F4 */
  682. RamWrite32A_LC898122AF(mes1ba, 0x3F7DF500); /* 0x10F5 HPF30Hz */
  683. RamWrite32A_LC898122AF(mes1bb, 0xBF7DF500); /* 0x10F6 */
  684. RamWrite32A_LC898122AF(mes1bc, 0x3F7BEA40); /* 0x10F7 */
  685. RamWrite32A_LC898122AF(mes1bd, 0x00000000); /* 0x10F8 */
  686. RamWrite32A_LC898122AF(mes1be, 0x00000000); /* 0x10F9 */
  687. /* Measure Filter2 Setting */
  688. RamWrite32A_LC898122AF(mes2aa, 0x3E587E00); /* 0x11F0 LPF1000Hz */
  689. RamWrite32A_LC898122AF(mes2ab, 0x3E587E00); /* 0x11F1 */
  690. RamWrite32A_LC898122AF(mes2ac, 0x3F13C100); /* 0x11F2 */
  691. RamWrite32A_LC898122AF(mes2ad, 0x00000000); /* 0x11F3 */
  692. RamWrite32A_LC898122AF(mes2ae, 0x00000000); /* 0x11F4 */
  693. RamWrite32A_LC898122AF(mes2ba, 0x3F7DF500); /* 0x11F5 HPF30Hz */
  694. RamWrite32A_LC898122AF(mes2bb, 0xBF7DF500); /* 0x11F6 */
  695. RamWrite32A_LC898122AF(mes2bc, 0x3F7BEA40); /* 0x11F7 */
  696. RamWrite32A_LC898122AF(mes2bd, 0x00000000); /* 0x11F8 */
  697. RamWrite32A_LC898122AF(mes2be, 0x00000000); /* 0x11F9 */
  698. } else if (UcMesMod == THROUGH) { /* for Through */
  699. /* Measure Filter1 Setting */
  700. RamWrite32A_LC898122AF(mes1aa, 0x3F800000); /* 0x10F0 Through */
  701. RamWrite32A_LC898122AF(mes1ab, 0x00000000); /* 0x10F1 */
  702. RamWrite32A_LC898122AF(mes1ac, 0x00000000); /* 0x10F2 */
  703. RamWrite32A_LC898122AF(mes1ad, 0x00000000); /* 0x10F3 */
  704. RamWrite32A_LC898122AF(mes1ae, 0x00000000); /* 0x10F4 */
  705. RamWrite32A_LC898122AF(mes1ba, 0x3F800000); /* 0x10F5 Through */
  706. RamWrite32A_LC898122AF(mes1bb, 0x00000000); /* 0x10F6 */
  707. RamWrite32A_LC898122AF(mes1bc, 0x00000000); /* 0x10F7 */
  708. RamWrite32A_LC898122AF(mes1bd, 0x00000000); /* 0x10F8 */
  709. RamWrite32A_LC898122AF(mes1be, 0x00000000); /* 0x10F9 */
  710. /* Measure Filter2 Setting */
  711. RamWrite32A_LC898122AF(mes2aa, 0x3F800000); /* 0x11F0 Through */
  712. RamWrite32A_LC898122AF(mes2ab, 0x00000000); /* 0x11F1 */
  713. RamWrite32A_LC898122AF(mes2ac, 0x00000000); /* 0x11F2 */
  714. RamWrite32A_LC898122AF(mes2ad, 0x00000000); /* 0x11F3 */
  715. RamWrite32A_LC898122AF(mes2ae, 0x00000000); /* 0x11F4 */
  716. RamWrite32A_LC898122AF(mes2ba, 0x3F800000); /* 0x11F5 Through */
  717. RamWrite32A_LC898122AF(mes2bb, 0x00000000); /* 0x11F6 */
  718. RamWrite32A_LC898122AF(mes2bc, 0x00000000); /* 0x11F7 */
  719. RamWrite32A_LC898122AF(mes2bd, 0x00000000); /* 0x11F8 */
  720. RamWrite32A_LC898122AF(mes2be, 0x00000000); /* 0x11F9 */
  721. } else if (UcMesMod == NOISE) { /* SINE WAVE TEST for NOISE */
  722. /* Measure Filter1 Setting */
  723. RamWrite32A_LC898122AF(mes1aa, 0x3D1E5A40); /* 0x10F0 LPF150Hz */
  724. RamWrite32A_LC898122AF(mes1ab, 0x3D1E5A40); /* 0x10F1 */
  725. RamWrite32A_LC898122AF(mes1ac, 0x3F6C34C0); /* 0x10F2 */
  726. RamWrite32A_LC898122AF(mes1ad, 0x00000000); /* 0x10F3 */
  727. RamWrite32A_LC898122AF(mes1ae, 0x00000000); /* 0x10F4 */
  728. RamWrite32A_LC898122AF(mes1ba, 0x3D1E5A40); /* 0x10F5 LPF150Hz */
  729. RamWrite32A_LC898122AF(mes1bb, 0x3D1E5A40); /* 0x10F6 */
  730. RamWrite32A_LC898122AF(mes1bc, 0x3F6C34C0); /* 0x10F7 */
  731. RamWrite32A_LC898122AF(mes1bd, 0x00000000); /* 0x10F8 */
  732. RamWrite32A_LC898122AF(mes1be, 0x00000000); /* 0x10F9 */
  733. /* Measure Filter2 Setting */
  734. RamWrite32A_LC898122AF(mes2aa, 0x3D1E5A40); /* 0x11F0 LPF150Hz */
  735. RamWrite32A_LC898122AF(mes2ab, 0x3D1E5A40); /* 0x11F1 */
  736. RamWrite32A_LC898122AF(mes2ac, 0x3F6C34C0); /* 0x11F2 */
  737. RamWrite32A_LC898122AF(mes2ad, 0x00000000); /* 0x11F3 */
  738. RamWrite32A_LC898122AF(mes2ae, 0x00000000); /* 0x11F4 */
  739. RamWrite32A_LC898122AF(mes2ba, 0x3D1E5A40); /* 0x11F5 LPF150Hz */
  740. RamWrite32A_LC898122AF(mes2bb, 0x3D1E5A40); /* 0x11F6 */
  741. RamWrite32A_LC898122AF(mes2bc, 0x3F6C34C0); /* 0x11F7 */
  742. RamWrite32A_LC898122AF(mes2bd, 0x00000000); /* 0x11F8 */
  743. RamWrite32A_LC898122AF(mes2be, 0x00000000); /* 0x11F9 */
  744. }
  745. #else
  746. if (!UcMesMod) { /* Hall Bias&Offset Adjust */
  747. /* Measure Filter1 Setting */
  748. RamWrite32A_LC898122AF(mes1aa, 0x3CA175C0); /* 0x10F0 LPF150Hz */
  749. RamWrite32A_LC898122AF(mes1ab, 0x3CA175C0); /* 0x10F1 */
  750. RamWrite32A_LC898122AF(mes1ac, 0x3F75E8C0); /* 0x10F2 */
  751. RamWrite32A_LC898122AF(mes1ad, 0x00000000); /* 0x10F3 */
  752. RamWrite32A_LC898122AF(mes1ae, 0x00000000); /* 0x10F4 */
  753. RamWrite32A_LC898122AF(mes1ba, 0x3F800000); /* 0x10F5 Through */
  754. RamWrite32A_LC898122AF(mes1bb, 0x00000000); /* 0x10F6 */
  755. RamWrite32A_LC898122AF(mes1bc, 0x00000000); /* 0x10F7 */
  756. RamWrite32A_LC898122AF(mes1bd, 0x00000000); /* 0x10F8 */
  757. RamWrite32A_LC898122AF(mes1be, 0x00000000); /* 0x10F9 */
  758. /* Measure Filter2 Setting */
  759. RamWrite32A_LC898122AF(mes2aa, 0x3CA175C0); /* 0x11F0 LPF150Hz */
  760. RamWrite32A_LC898122AF(mes2ab, 0x3CA175C0); /* 0x11F1 */
  761. RamWrite32A_LC898122AF(mes2ac, 0x3F75E8C0); /* 0x11F2 */
  762. RamWrite32A_LC898122AF(mes2ad, 0x00000000); /* 0x11F3 */
  763. RamWrite32A_LC898122AF(mes2ae, 0x00000000); /* 0x11F4 */
  764. RamWrite32A_LC898122AF(mes2ba, 0x3F800000); /* 0x11F5 Through */
  765. RamWrite32A_LC898122AF(mes2bb, 0x00000000); /* 0x11F6 */
  766. RamWrite32A_LC898122AF(mes2bc, 0x00000000); /* 0x11F7 */
  767. RamWrite32A_LC898122AF(mes2bd, 0x00000000); /* 0x11F8 */
  768. RamWrite32A_LC898122AF(mes2be, 0x00000000); /* 0x11F9 */
  769. } else if (UcMesMod == LOOPGAIN) { /* Loop Gain Adjust */
  770. /* Measure Filter1 Setting */
  771. RamWrite32A_LC898122AF(mes1aa, 0x3DF21080); /* 0x10F0 LPF1000Hz */
  772. RamWrite32A_LC898122AF(mes1ab, 0x3DF21080); /* 0x10F1 */
  773. RamWrite32A_LC898122AF(mes1ac, 0x3F437BC0); /* 0x10F2 */
  774. RamWrite32A_LC898122AF(mes1ad, 0x00000000); /* 0x10F3 */
  775. RamWrite32A_LC898122AF(mes1ae, 0x00000000); /* 0x10F4 */
  776. RamWrite32A_LC898122AF(mes1ba, 0x3F7EF980); /* 0x10F5 HPF30Hz */
  777. RamWrite32A_LC898122AF(mes1bb, 0xBF7EF980); /* 0x10F6 */
  778. RamWrite32A_LC898122AF(mes1bc, 0x3F7DF300); /* 0x10F7 */
  779. RamWrite32A_LC898122AF(mes1bd, 0x00000000); /* 0x10F8 */
  780. RamWrite32A_LC898122AF(mes1be, 0x00000000); /* 0x10F9 */
  781. /* Measure Filter2 Setting */
  782. RamWrite32A_LC898122AF(mes2aa, 0x3DF21080); /* 0x11F0 LPF1000Hz */
  783. RamWrite32A_LC898122AF(mes2ab, 0x3DF21080); /* 0x11F1 */
  784. RamWrite32A_LC898122AF(mes2ac, 0x3F437BC0); /* 0x11F2 */
  785. RamWrite32A_LC898122AF(mes2ad, 0x00000000); /* 0x11F3 */
  786. RamWrite32A_LC898122AF(mes2ae, 0x00000000); /* 0x11F4 */
  787. RamWrite32A_LC898122AF(mes2ba, 0x3F7EF980); /* 0x11F5 HPF30Hz */
  788. RamWrite32A_LC898122AF(mes2bb, 0xBF7EF980); /* 0x11F6 */
  789. RamWrite32A_LC898122AF(mes2bc, 0x3F7DF300); /* 0x11F7 */
  790. RamWrite32A_LC898122AF(mes2bd, 0x00000000); /* 0x11F8 */
  791. RamWrite32A_LC898122AF(mes2be, 0x00000000); /* 0x11F9 */
  792. } else if (UcMesMod == THROUGH) { /* for Through */
  793. /* Measure Filter1 Setting */
  794. RamWrite32A_LC898122AF(mes1aa, 0x3F800000); /* 0x10F0 Through */
  795. RamWrite32A_LC898122AF(mes1ab, 0x00000000); /* 0x10F1 */
  796. RamWrite32A_LC898122AF(mes1ac, 0x00000000); /* 0x10F2 */
  797. RamWrite32A_LC898122AF(mes1ad, 0x00000000); /* 0x10F3 */
  798. RamWrite32A_LC898122AF(mes1ae, 0x00000000); /* 0x10F4 */
  799. RamWrite32A_LC898122AF(mes1ba, 0x3F800000); /* 0x10F5 Through */
  800. RamWrite32A_LC898122AF(mes1bb, 0x00000000); /* 0x10F6 */
  801. RamWrite32A_LC898122AF(mes1bc, 0x00000000); /* 0x10F7 */
  802. RamWrite32A_LC898122AF(mes1bd, 0x00000000); /* 0x10F8 */
  803. RamWrite32A_LC898122AF(mes1be, 0x00000000); /* 0x10F9 */
  804. /* Measure Filter2 Setting */
  805. RamWrite32A_LC898122AF(mes2aa, 0x3F800000); /* 0x11F0 Through */
  806. RamWrite32A_LC898122AF(mes2ab, 0x00000000); /* 0x11F1 */
  807. RamWrite32A_LC898122AF(mes2ac, 0x00000000); /* 0x11F2 */
  808. RamWrite32A_LC898122AF(mes2ad, 0x00000000); /* 0x11F3 */
  809. RamWrite32A_LC898122AF(mes2ae, 0x00000000); /* 0x11F4 */
  810. RamWrite32A_LC898122AF(mes2ba, 0x3F800000); /* 0x11F5 Through */
  811. RamWrite32A_LC898122AF(mes2bb, 0x00000000); /* 0x11F6 */
  812. RamWrite32A_LC898122AF(mes2bc, 0x00000000); /* 0x11F7 */
  813. RamWrite32A_LC898122AF(mes2bd, 0x00000000); /* 0x11F8 */
  814. RamWrite32A_LC898122AF(mes2be, 0x00000000); /* 0x11F9 */
  815. } else if (UcMesMod == NOISE) { /* SINE WAVE TEST for NOISE */
  816. /* Measure Filter1 Setting */
  817. RamWrite32A_LC898122AF(mes1aa, 0x3CA175C0); /* 0x10F0 LPF150Hz */
  818. RamWrite32A_LC898122AF(mes1ab, 0x3CA175C0); /* 0x10F1 */
  819. RamWrite32A_LC898122AF(mes1ac, 0x3F75E8C0); /* 0x10F2 */
  820. RamWrite32A_LC898122AF(mes1ad, 0x00000000); /* 0x10F3 */
  821. RamWrite32A_LC898122AF(mes1ae, 0x00000000); /* 0x10F4 */
  822. RamWrite32A_LC898122AF(mes1ba, 0x3CA175C0); /* 0x10F5 LPF150Hz */
  823. RamWrite32A_LC898122AF(mes1bb, 0x3CA175C0); /* 0x10F6 */
  824. RamWrite32A_LC898122AF(mes1bc, 0x3F75E8C0); /* 0x10F7 */
  825. RamWrite32A_LC898122AF(mes1bd, 0x00000000); /* 0x10F8 */
  826. RamWrite32A_LC898122AF(mes1be, 0x00000000); /* 0x10F9 */
  827. /* Measure Filter2 Setting */
  828. RamWrite32A_LC898122AF(mes2aa, 0x3CA175C0); /* 0x11F0 LPF150Hz */
  829. RamWrite32A_LC898122AF(mes2ab, 0x3CA175C0); /* 0x11F1 */
  830. RamWrite32A_LC898122AF(mes2ac, 0x3F75E8C0); /* 0x11F2 */
  831. RamWrite32A_LC898122AF(mes2ad, 0x00000000); /* 0x11F3 */
  832. RamWrite32A_LC898122AF(mes2ae, 0x00000000); /* 0x11F4 */
  833. RamWrite32A_LC898122AF(mes2ba, 0x3CA175C0); /* 0x11F5 LPF150Hz */
  834. RamWrite32A_LC898122AF(mes2bb, 0x3CA175C0); /* 0x11F6 */
  835. RamWrite32A_LC898122AF(mes2bc, 0x3F75E8C0); /* 0x11F7 */
  836. RamWrite32A_LC898122AF(mes2bd, 0x00000000); /* 0x11F8 */
  837. RamWrite32A_LC898122AF(mes2be, 0x00000000); /* 0x11F9 */
  838. }
  839. #endif
  840. }
  841. /* ******************************************************************************** */
  842. /* Function Name : SrvCon */
  843. /* Retun Value : NON */
  844. /* Argment Value : X or Y Select, Servo ON/OFF */
  845. /* Explanation : Servo ON,OFF Function */
  846. /* History : First edition 2013.01.09 Y.Shigeoka */
  847. /* ******************************************************************************** */
  848. void SrvCon(unsigned char UcDirSel, unsigned char UcSwcCon)
  849. {
  850. if (UcSwcCon) {
  851. if (!UcDirSel) { /* X Direction */
  852. RegWriteA_LC898122AF(WH_EQSWX, 0x03); /* 0x0170 */
  853. RamWrite32A_LC898122AF(sxggf, 0x00000000); /* 0x10B5 */
  854. } else { /* Y Direction */
  855. RegWriteA_LC898122AF(WH_EQSWY, 0x03); /* 0x0171 */
  856. RamWrite32A_LC898122AF(syggf, 0x00000000); /* 0x11B5 */
  857. }
  858. } else {
  859. if (!UcDirSel) { /* X Direction */
  860. RegWriteA_LC898122AF(WH_EQSWX, 0x02); /* 0x0170 */
  861. RamWrite32A_LC898122AF(SXLMT, 0x00000000); /* 0x1477 */
  862. } else { /* Y Direction */
  863. RegWriteA_LC898122AF(WH_EQSWY, 0x02); /* 0x0171 */
  864. RamWrite32A_LC898122AF(SYLMT, 0x00000000); /* 0x14F7 */
  865. }
  866. }
  867. }
  868. #ifdef MODULE_CALIBRATION
  869. /* ******************************************************************************** */
  870. /* Function Name : LopGan */
  871. /* Retun Value : Execute Result */
  872. /* Argment Value : X,Y Direction */
  873. /* Explanation : Loop Gain Adjust Function */
  874. /* History : First edition 2009.07.31 Y.Tashita */
  875. /* ******************************************************************************** */
  876. unsigned char LopGan(unsigned char UcDirSel)
  877. {
  878. unsigned char UcLpAdjSts;
  879. #ifdef HALLADJ_HW
  880. UcLpAdjSts = LoopGainAdj(UcDirSel);
  881. #else
  882. MesFil(LOOPGAIN);
  883. /* Servo ON */
  884. SrvCon(X_DIR, ON);
  885. SrvCon(Y_DIR, ON);
  886. /* Wait 300ms */
  887. WitTim_LC898122AF(300);
  888. /* Loop Gain Adjust Initialize */
  889. LopIni(UcDirSel);
  890. /* Loop Gain Adjust */
  891. UcLpAdjSts = LopAdj(UcDirSel);
  892. #endif
  893. /* Servo OFF */
  894. SrvCon(X_DIR, OFF);
  895. SrvCon(Y_DIR, OFF);
  896. if (!UcLpAdjSts) {
  897. return EXE_END;
  898. } else {
  899. if (!UcDirSel)
  900. return EXE_LXADJ;
  901. else
  902. return EXE_LYADJ;
  903. }
  904. }
  905. #ifndef HALLADJ_HW
  906. /* ******************************************************************************** */
  907. /* Function Name : LopIni */
  908. /* Retun Value : NON */
  909. /* Argment Value : X,Y Direction */
  910. /* Explanation : Loop Gain Adjust Initialize Function */
  911. /* History : First edition 2009.07.31 Y.Tashita */
  912. /* ******************************************************************************** */
  913. void LopIni(unsigned char UcDirSel)
  914. {
  915. /* Loop Gain Value Initialize */
  916. LopPar(UcDirSel);
  917. /* Sign Wave Output Setting */
  918. LopSin(UcDirSel, ON);
  919. }
  920. #endif
  921. /* ******************************************************************************** */
  922. /* Function Name : LopPar */
  923. /* Retun Value : NON */
  924. /* Argment Value : X,Y Direction */
  925. /* Explanation : Loop Gain Adjust Parameter Initialize Function */
  926. /* History : First edition 2013.01.15 Y.Shigeoka */
  927. /* ******************************************************************************** */
  928. void LopPar(unsigned char UcDirSel)
  929. {
  930. unsigned short UsLopGan;
  931. RamAccFixMod(ON); /* Fix mode */
  932. if (!UcDirSel) {
  933. UsLopGan = SXGAIN_LOP;
  934. RamWriteA_LC898122AF(sxg, UsLopGan); /* 0x10D3 */
  935. } else {
  936. UsLopGan = SYGAIN_LOP;
  937. RamWriteA_LC898122AF(syg, UsLopGan); /* 0x11D3 */
  938. }
  939. RamAccFixMod(OFF); /* Float mode */
  940. }
  941. #ifndef HALLADJ_HW
  942. /* ******************************************************************************** */
  943. /* Function Name : LopSin */
  944. /* Retun Value : NON */
  945. /* Argment Value : X,Y Direction, ON/OFF Switch */
  946. /* Explanation : Loop Gain Adjust Sign Wave Initialize Function */
  947. /* History : First edition 2009.07.31 Y.Tashita */
  948. /* ******************************************************************************** */
  949. void LopSin(unsigned char UcDirSel, unsigned char UcSonOff)
  950. {
  951. unsigned short UsFreqVal;
  952. unsigned char UcEqSwX, UcEqSwY;
  953. RegReadA_LC898122AF(WH_EQSWX, &UcEqSwX); /* 0x0170 */
  954. RegReadA_LC898122AF(WH_EQSWY, &UcEqSwY); /* 0x0171 */
  955. if (UcSonOff) {
  956. #ifdef USE_EXTCLK_ALL /* 24MHz */
  957. /* Freq = CmSinFrq * 11.718kHz / 65536 / 16 */
  958. #ifdef ACTREG_6P5OHM
  959. /* UsFreqVal = 0x30EE ; */ /* 139.9Hz */
  960. UsFreqVal = 0x29F1; /* 119.9Hz */
  961. #endif
  962. #ifdef ACTREG_10P2OHM
  963. UsFreqVal = 0x29F1; /* 119.9Hz */
  964. #endif
  965. #ifdef ACTREG_15OHM
  966. UsFreqVal = 0x3B6B; /* 169.9Hz */
  967. #endif
  968. #else
  969. /* Freq = CmSinFrq * 23.4375kHz / 65536 / 16 */
  970. #ifdef ACTREG_6P5OHM
  971. /* UsFreqVal = 0x1877 ; */ /* 139.9Hz */
  972. UsFreqVal = 0x14F8; /* 119.9Hz */
  973. #endif
  974. #ifdef ACTREG_10P2OHM
  975. UsFreqVal = 0x14F8; /* 119.9Hz */
  976. #endif
  977. #ifdef ACTREG_15OHM
  978. UsFreqVal = 0x1DB5; /* 169.9Hz */
  979. #endif
  980. #endif
  981. RegWriteA_LC898122AF(WC_SINFRQ0, (unsigned char)UsFreqVal); /* 0x0181 Freq L */
  982. RegWriteA_LC898122AF(WC_SINFRQ1, (unsigned char)(UsFreqVal >> 8)); /* 0x0182 Freq H */
  983. if (!UcDirSel) {
  984. UcEqSwX |= 0x10;
  985. UcEqSwY &= ~EQSINSW;
  986. RamWrite32A_LC898122AF(sxsin, 0x3CA3D70A); /* 0x10D5 -34dB */
  987. } else {
  988. UcEqSwX &= ~EQSINSW;
  989. UcEqSwY |= 0x10;
  990. RamWrite32A_LC898122AF(sysin, 0x3CA3D70A); /* 0x11D5 -34dB */
  991. }
  992. RegWriteA_LC898122AF(WC_SINPHSX, 0x00); /* 0x0183 X Sine phase */
  993. RegWriteA_LC898122AF(WC_SINPHSY, 0x00); /* 0x0184 Y Sine phase */
  994. RegWriteA_LC898122AF(WH_EQSWX, UcEqSwX); /* 0x0170 Switch control */
  995. RegWriteA_LC898122AF(WH_EQSWY, UcEqSwY); /* 0x0171 Switch control */
  996. RegWriteA_LC898122AF(WC_SINON, 0x01); /* 0x0180 Sine wave */
  997. } else {
  998. UcEqSwX &= ~EQSINSW;
  999. UcEqSwY &= ~EQSINSW;
  1000. RegWriteA_LC898122AF(WC_SINON, 0x00); /* 0x0180 Sine wave */
  1001. if (!UcDirSel)
  1002. RamWrite32A_LC898122AF(sxsin, 0x00000000); /* 0x10D5 */
  1003. else
  1004. RamWrite32A_LC898122AF(sysin, 0x00000000); /* 0x11D5 */
  1005. RegWriteA_LC898122AF(WH_EQSWX, UcEqSwX); /* 0x0170 Switch control */
  1006. RegWriteA_LC898122AF(WH_EQSWY, UcEqSwY); /* 0x0171 Switch control */
  1007. }
  1008. }
  1009. /* ******************************************************************************** */
  1010. /* Function Name : LopAdj */
  1011. /* Retun Value : Command Status */
  1012. /* Argment Value : X,Y Direction */
  1013. /* Explanation : Loop Gain Adjust Function */
  1014. /* History : First edition 2013.01.15 Y.Shigeoka */
  1015. /* ******************************************************************************** */
  1016. unsigned char LopAdj(unsigned char UcDirSel)
  1017. {
  1018. unsigned char UcAdjSts = FAILURE;
  1019. unsigned short UsRtnVal;
  1020. float SfCmpVal;
  1021. unsigned char UcIdxCnt;
  1022. unsigned char UcIdxCn1;
  1023. unsigned char UcIdxCn2;
  1024. UnFltVal UnAdcXg1, UnAdcXg2, UnRtnVa;
  1025. float DfGanVal[5];
  1026. float DfTemVal;
  1027. if (!UcDirSel) {
  1028. RegWriteA_LC898122AF(WC_MES1ADD0, (unsigned char)SXGZ); /* 0x0194 */
  1029. RegWriteA_LC898122AF(WC_MES1ADD1, (unsigned char)((SXGZ >> 8) & 0x0001)); /* 0x0195 */
  1030. RegWriteA_LC898122AF(WC_MES2ADD0, (unsigned char)SXG3Z); /* 0x0196 */
  1031. RegWriteA_LC898122AF(WC_MES2ADD1, (unsigned char)((SXG3Z >> 8) & 0x0001)); /* 0x0197 */
  1032. } else {
  1033. RegWriteA_LC898122AF(WC_MES1ADD0, (unsigned char)SYGZ); /* 0x0194 */
  1034. RegWriteA_LC898122AF(WC_MES1ADD1, (unsigned char)((SYGZ >> 8) & 0x0001)); /* 0x0195 */
  1035. RegWriteA_LC898122AF(WC_MES2ADD0, (unsigned char)SYG3Z); /* 0x0196 */
  1036. RegWriteA_LC898122AF(WC_MES2ADD1, (unsigned char)((SYG3Z >> 8) & 0x0001)); /* 0x0197 */
  1037. }
  1038. /* 5 Times Average Value Calculation */
  1039. for (UcIdxCnt = 0; UcIdxCnt < 5; UcIdxCnt++) {
  1040. LopMes(); /* Loop Gain Mesurement Start */
  1041. UnAdcXg1.UlLngVal = GinMes(MES_XG1); /* LXG1 Measure */
  1042. UnAdcXg2.UlLngVal = GinMes(MES_XG2); /* LXG2 Measure */
  1043. SfCmpVal = UnAdcXg2.SfFltVal / UnAdcXg1.SfFltVal; /* Compare Coefficient Value */
  1044. if (!UcDirSel)
  1045. RamRead32A_LC898122AF(sxg, &UnRtnVa.UlLngVal); /* 0x10D3 */
  1046. else
  1047. RamRead32A_LC898122AF(syg, &UnRtnVa.UlLngVal); /* 0x11D3 */
  1048. UnRtnVa.SfFltVal = UnRtnVa.SfFltVal * SfCmpVal;
  1049. DfGanVal[UcIdxCnt] = UnRtnVa.SfFltVal;
  1050. }
  1051. for (UcIdxCn1 = 0; UcIdxCn1 < 4; UcIdxCn1++) {
  1052. for (UcIdxCn2 = UcIdxCn1 + 1; UcIdxCn2 < 5; UcIdxCn2++) {
  1053. if (DfGanVal[UcIdxCn1] > DfGanVal[UcIdxCn2]) {
  1054. DfTemVal = DfGanVal[UcIdxCn1];
  1055. DfGanVal[UcIdxCn1] = DfGanVal[UcIdxCn2];
  1056. DfGanVal[UcIdxCn2] = DfTemVal;
  1057. }
  1058. }
  1059. }
  1060. UnRtnVa.SfFltVal = (DfGanVal[1] + DfGanVal[2] + DfGanVal[3]) / 3;
  1061. LopSin(UcDirSel, OFF);
  1062. if (UnRtnVa.UlLngVal < 0x3F800000) /* Adjust Error */
  1063. UcAdjSts = SUCCESS; /* Status OK */
  1064. if (UcAdjSts) {
  1065. if (!UcDirSel) {
  1066. RamWrite32A_LC898122AF(sxg, 0x3F800000); /* 0x10D3 */
  1067. StAdjPar.StLopGan.UsLxgVal = 0x7FFF;
  1068. StAdjPar.StLopGan.UsLxgSts = 0x0000;
  1069. } else {
  1070. RamWrite32A_LC898122AF(syg, 0x3F800000); /* 0x11D3 */
  1071. StAdjPar.StLopGan.UsLygVal = 0x7FFF;
  1072. StAdjPar.StLopGan.UsLygSts = 0x0000;
  1073. }
  1074. } else {
  1075. if (!UcDirSel) {
  1076. RamWrite32A_LC898122AF(sxg, UnRtnVa.UlLngVal); /* 0x10D3 */
  1077. RamAccFixMod(ON); /* Fix mode */
  1078. RamReadA_LC898122AF(sxg, &UsRtnVal); /* 0x10D3 */
  1079. StAdjPar.StLopGan.UsLxgVal = UsRtnVal;
  1080. StAdjPar.StLopGan.UsLxgSts = 0xFFFF;
  1081. } else {
  1082. RamWrite32A_LC898122AF(syg, UnRtnVa.UlLngVal); /* 0x11D3 */
  1083. RamAccFixMod(ON); /* Fix mode */
  1084. RamReadA_LC898122AF(syg, &UsRtnVal); /* 0x11D3 */
  1085. StAdjPar.StLopGan.UsLygVal = UsRtnVal;
  1086. StAdjPar.StLopGan.UsLygSts = 0xFFFF;
  1087. }
  1088. RamAccFixMod(OFF); /* Float mode */
  1089. }
  1090. return UcAdjSts;
  1091. }
  1092. /* ******************************************************************************** */
  1093. /* Function Name : LopMes */
  1094. /* Retun Value : void */
  1095. /* Argment Value : void */
  1096. /* Explanation : Loop Gain Adjust Measure Setting */
  1097. /* History : First edition 2013.01.15 Y.Shigeoka */
  1098. /* ******************************************************************************** */
  1099. void LopMes(void)
  1100. {
  1101. ClrGyr(0x1000, CLR_FRAM1); /* Measure Filter RAM Clear */
  1102. RamWrite32A_LC898122AF(MSABS1AV, 0x00000000); /* 0x1041 Clear */
  1103. RamWrite32A_LC898122AF(MSABS2AV, 0x00000000); /* 0x1141 Clear */
  1104. RegWriteA_LC898122AF(WC_MESLOOP1, 0x04); /* 0x0193 */
  1105. RegWriteA_LC898122AF(WC_MESLOOP0, 0x00); /* 0x0192 1024 Times Measure */
  1106. RamWrite32A_LC898122AF(msmean, 0x3A800000); /* 0x1230 1/CmMesLoop[15:0] */
  1107. RegWriteA_LC898122AF(WC_MESABS, 0x01); /* 0x0198 ABS */
  1108. RegWriteA_LC898122AF(WC_MESWAIT, 0x00); /* 0x0199 0 cross wait */
  1109. BsyWit(WC_MESMODE, 0x01); /* 0x0190 Sin Wave Measure */
  1110. }
  1111. /* ******************************************************************************** */
  1112. /* Function Name : GinMes */
  1113. /* Retun Value : Measure Result */
  1114. /* Argment Value : MES1/MES2 Select */
  1115. /* Explanation : Measure Result Read */
  1116. /* History : First edition 2013.01.15 Y.Shigeoka */
  1117. /* ******************************************************************************** */
  1118. unsigned long GinMes(unsigned char UcXg1Xg2)
  1119. {
  1120. unsigned long UlMesVal;
  1121. if (!UcXg1Xg2)
  1122. RamRead32A_LC898122AF(MSABS1AV, &UlMesVal); /* 0x1041 */
  1123. else
  1124. RamRead32A_LC898122AF(MSABS2AV, &UlMesVal); /* 0x1141 */
  1125. return UlMesVal;
  1126. }
  1127. #endif
  1128. #endif
  1129. /* ******************************************************************************** */
  1130. /* Function Name : TneGvc */
  1131. /* Retun Value : NON */
  1132. /* Argment Value : NON */
  1133. /* Explanation : Tunes the Gyro VC offset */
  1134. /* History : First edition 2013.01.15 Y.Shigeoka */
  1135. /* ******************************************************************************** */
  1136. #define LIMITH 0x0FA0
  1137. #define LIMITL 0xF060
  1138. #define INITVAL 0x0000
  1139. unsigned char TneGvc(void)
  1140. {
  1141. unsigned char UcRsltSts;
  1142. /* A/D Offset Clear */
  1143. RegWriteA_LC898122AF(IZAH, (unsigned char)(INITVAL >> 8)); /* 0x02A0 Set Offset High byte */
  1144. RegWriteA_LC898122AF(IZAL, (unsigned char)INITVAL); /* 0x02A1 Set Offset Low byte */
  1145. RegWriteA_LC898122AF(IZBH, (unsigned char)(INITVAL >> 8)); /* 0x02A2 Set Offset High byte */
  1146. RegWriteA_LC898122AF(IZBL, (unsigned char)INITVAL); /* 0x02A3 Set Offset Low byte */
  1147. MesFil(THROUGH); /* 測定用フィ?ターを設定する。 */
  1148. /* //////// */
  1149. /* X */
  1150. /* //////// */
  1151. RegWriteA_LC898122AF(WC_MES1ADD0, 0x00); /* 0x0194 */
  1152. RegWriteA_LC898122AF(WC_MES1ADD1, 0x00); /* 0x0195 */
  1153. ClrGyr(0x1000, CLR_FRAM1); /* Measure Filter RAM Clear */
  1154. StAdjPar.StGvcOff.UsGxoVal = (unsigned short)GenMes(AD2Z, 0);
  1155. /* 64回の平均値測定 GYRMON1(0x1110) <- GXADZ(0x144A) */
  1156. RegWriteA_LC898122AF(IZAH, (unsigned char)(StAdjPar.StGvcOff.UsGxoVal >> 8));
  1157. /* 0x02A0 Set Offset High byte */
  1158. RegWriteA_LC898122AF(IZAL, (unsigned char)(StAdjPar.StGvcOff.UsGxoVal));
  1159. /* 0x02A1 Set Offset Low byte */
  1160. /* //////// */
  1161. /* Y */
  1162. /* //////// */
  1163. RegWriteA_LC898122AF(WC_MES1ADD0, 0x00); /* 0x0194 */
  1164. RegWriteA_LC898122AF(WC_MES1ADD1, 0x00); /* 0x0195 */
  1165. ClrGyr(0x1000, CLR_FRAM1); /* Measure Filter RAM Clear */
  1166. StAdjPar.StGvcOff.UsGyoVal = (unsigned short)GenMes(AD3Z, 0);
  1167. /* 64回の平均値測定 GYRMON2(0x1111) <- GYADZ(0x14CA) */
  1168. RegWriteA_LC898122AF(IZBH, (unsigned char)(StAdjPar.StGvcOff.UsGyoVal >> 8));
  1169. /* 0x02A2 Set Offset High byte */
  1170. RegWriteA_LC898122AF(IZBL, (unsigned char)(StAdjPar.StGvcOff.UsGyoVal));
  1171. /* 0x02A3 Set Offset Low byte */
  1172. UcRsltSts = EXE_END; /* Clear Status */
  1173. StAdjPar.StGvcOff.UsGxoSts = 0xFFFF;
  1174. if (((short)StAdjPar.StGvcOff.UsGxoVal < (short)LIMITL)
  1175. || ((short)StAdjPar.StGvcOff.UsGxoVal > (short)LIMITH)) {
  1176. UcRsltSts |= EXE_GXADJ;
  1177. StAdjPar.StGvcOff.UsGxoSts = 0x0000;
  1178. }
  1179. StAdjPar.StGvcOff.UsGyoSts = 0xFFFF;
  1180. if (((short)StAdjPar.StGvcOff.UsGyoVal < (short)LIMITL)
  1181. || ((short)StAdjPar.StGvcOff.UsGyoVal > (short)LIMITH)) {
  1182. UcRsltSts |= EXE_GYADJ;
  1183. StAdjPar.StGvcOff.UsGyoSts = 0x0000;
  1184. }
  1185. return UcRsltSts;
  1186. }
  1187. /* ******************************************************************************** */
  1188. /* Function Name : RtnCen */
  1189. /* Retun Value : Command Status */
  1190. /* Argment Value : Command Parameter */
  1191. /* Explanation : Return to center Command Function */
  1192. /* History : First edition 2013.01.15 Y.Shigeoka */
  1193. /* ******************************************************************************** */
  1194. unsigned char RtnCen(unsigned char UcCmdPar)
  1195. {
  1196. unsigned char UcCmdSts;
  1197. UcCmdSts = EXE_END;
  1198. GyrCon(OFF); /* Gyro OFF */
  1199. if (!UcCmdPar) { /* X,Y Centering */
  1200. StbOnn(); /* Slope Mode */
  1201. } else if (UcCmdPar == 0x01) { /* X Centering Only */
  1202. SrvCon(X_DIR, ON); /* X only Servo ON */
  1203. SrvCon(Y_DIR, OFF);
  1204. } else if (UcCmdPar == 0x02) { /* Y Centering Only */
  1205. SrvCon(X_DIR, OFF); /* Y only Servo ON */
  1206. SrvCon(Y_DIR, ON);
  1207. }
  1208. return UcCmdSts;
  1209. }
  1210. /* ******************************************************************************** */
  1211. /* Function Name : GyrCon */
  1212. /* Retun Value : NON */
  1213. /* Argment Value : Gyro Filter ON or OFF */
  1214. /* Explanation : Gyro Filter Control Function */
  1215. /* History : First edition 2013.01.15 Y.Shigeoka */
  1216. /* ******************************************************************************** */
  1217. void GyrCon(unsigned char UcGyrCon)
  1218. {
  1219. /* Return HPF Setting */
  1220. RegWriteA_LC898122AF(WG_SHTON, 0x00); /* 0x0107 */
  1221. if (UcGyrCon == ON) { /* Gyro ON */
  1222. #ifdef GAIN_CONT
  1223. /* Gain3 Register */
  1224. /* AutoGainControlSw( ON ) ; */ /* Auto Gain Control Mode ON */
  1225. #endif
  1226. ClrGyr(0x000E, CLR_FRAM1); /* Gyro Delay RAM Clear */
  1227. RamWrite32A_LC898122AF(sxggf, 0x3F800000); /* 0x10B5 */
  1228. RamWrite32A_LC898122AF(syggf, 0x3F800000); /* 0x11B5 */
  1229. } else if (UcGyrCon == SPC) { /* Gyro ON for LINE */
  1230. #ifdef GAIN_CONT
  1231. /* Gain3 Register */
  1232. /* AutoGainControlSw( ON ) ; */ /* Auto Gain Control Mode ON */
  1233. #endif
  1234. RamWrite32A_LC898122AF(sxggf, 0x3F800000); /* 0x10B5 */
  1235. RamWrite32A_LC898122AF(syggf, 0x3F800000); /* 0x11B5 */
  1236. } else { /* Gyro OFF */
  1237. RamWrite32A_LC898122AF(sxggf, 0x00000000); /* 0x10B5 */
  1238. RamWrite32A_LC898122AF(syggf, 0x00000000); /* 0x11B5 */
  1239. #ifdef GAIN_CONT
  1240. /* Gain3 Register */
  1241. /* AutoGainControlSw( OFF ) ; */ /* Auto Gain Control Mode OFF */
  1242. #endif
  1243. }
  1244. }
  1245. /* ******************************************************************************** */
  1246. /* Function Name : OisEna */
  1247. /* Retun Value : NON */
  1248. /* Argment Value : Command Parameter */
  1249. /* Explanation : OIS Enable Control Function */
  1250. /* History : First edition 2013.01.15 Y.Shigeoka */
  1251. /* ******************************************************************************** */
  1252. void OisEna(void)
  1253. {
  1254. /* Servo ON */
  1255. SrvCon(X_DIR, ON);
  1256. SrvCon(Y_DIR, ON);
  1257. GyrCon(ON);
  1258. }
  1259. /* ******************************************************************************** */
  1260. /* Function Name : OisEnaLin */
  1261. /* Retun Value : NON */
  1262. /* Argment Value : Command Parameter */
  1263. /* Explanation : OIS Enable Control Function for Line adjustment */
  1264. /* History : First edition 2013.09.05 Y.Shigeoka */
  1265. /* ******************************************************************************** */
  1266. void OisEnaLin(void)
  1267. {
  1268. /* Servo ON */
  1269. SrvCon(X_DIR, ON);
  1270. SrvCon(Y_DIR, ON);
  1271. GyrCon(SPC);
  1272. }
  1273. /* ******************************************************************************** */
  1274. /* Function Name : TimPro */
  1275. /* Retun Value : NON */
  1276. /* Argment Value : NON */
  1277. /* Explanation : Timer Interrupt Process Function */
  1278. /* History : First edition 2013.01.15 Y.Shigeoka */
  1279. /* ******************************************************************************** */
  1280. void TimPro(void)
  1281. {
  1282. #ifdef MODULE_CALIBRATION
  1283. if (UcOscAdjFlg) {
  1284. if (UcOscAdjFlg == MEASSTR) {
  1285. RegWriteA_LC898122AF(OSCCNTEN, 0x01); /* 0x0258 OSC Cnt enable */
  1286. UcOscAdjFlg = MEASCNT;
  1287. } else if (UcOscAdjFlg == MEASCNT) {
  1288. RegWriteA_LC898122AF(OSCCNTEN, 0x00); /* 0x0258 OSC Cnt disable */
  1289. UcOscAdjFlg = MEASFIX;
  1290. }
  1291. }
  1292. #endif
  1293. }
  1294. /* ******************************************************************************** */
  1295. /* Function Name : S2cPro */
  1296. /* Retun Value : NON */
  1297. /* Argment Value : NON */
  1298. /* Explanation : S2 Command Function */
  1299. /* History : First edition 2013.01.15 Y.Shigeoka */
  1300. /* ******************************************************************************** */
  1301. void S2cPro(unsigned char uc_mode)
  1302. {
  1303. if (uc_mode == 1) {
  1304. #ifdef H1COEF_CHANGER
  1305. SetH1cMod(S2MODE); /* cancel Lvl change */
  1306. #endif
  1307. /* HPF→Through Setting */
  1308. RegWriteA_LC898122AF(WG_SHTON, 0x11); /* 0x0107 */
  1309. RamWrite32A_LC898122AF(gxh1c, DIFIL_S2); /* 0x1012 */
  1310. RamWrite32A_LC898122AF(gyh1c, DIFIL_S2); /* 0x1112 */
  1311. } else {
  1312. RamWrite32A_LC898122AF(gxh1c, UlH1Coefval); /* 0x1012 */
  1313. RamWrite32A_LC898122AF(gyh1c, UlH1Coefval); /* 0x1112 */
  1314. /* HPF→Through Setting */
  1315. RegWriteA_LC898122AF(WG_SHTON, 0x00); /* 0x0107 */
  1316. #ifdef H1COEF_CHANGER
  1317. SetH1cMod(UcH1LvlMod); /* Re-setting */
  1318. #endif
  1319. }
  1320. }
  1321. /* ******************************************************************************** */
  1322. /* Function Name : GenMes */
  1323. /* Retun Value : A/D Convert Result */
  1324. /* Argment Value : Measure Filter Input Signal Ram Address */
  1325. /* Explanation : General Measure Function */
  1326. /* History : First edition 2013.01.10 Y.Shigeoka */
  1327. /* ******************************************************************************** */
  1328. short GenMes(unsigned short UsRamAdd, unsigned char UcMesMod)
  1329. {
  1330. short SsMesRlt;
  1331. RegWriteA_LC898122AF(WC_MES1ADD0, (unsigned char)UsRamAdd); /* 0x0194 */
  1332. RegWriteA_LC898122AF(WC_MES1ADD1, (unsigned char)((UsRamAdd >> 8) & 0x0001)); /* 0x0195 */
  1333. RamWrite32A_LC898122AF(MSABS1AV, 0x00000000); /* 0x1041 Clear */
  1334. if (!UcMesMod) {
  1335. RegWriteA_LC898122AF(WC_MESLOOP1, 0x04); /* 0x0193 */
  1336. RegWriteA_LC898122AF(WC_MESLOOP0, 0x00); /* 0x0192 1024 Times Measure */
  1337. RamWrite32A_LC898122AF(msmean, 0x3A7FFFF7); /* 0x1230 1/CmMesLoop[15:0] */
  1338. } else {
  1339. RegWriteA_LC898122AF(WC_MESLOOP1, 0x01); /* 0x0193 */
  1340. RegWriteA_LC898122AF(WC_MESLOOP0, 0x00); /* 0x0192 1 Times Measure */
  1341. RamWrite32A_LC898122AF(msmean, 0x3F800000); /* 0x1230 1/CmMesLoop[15:0] */
  1342. }
  1343. RegWriteA_LC898122AF(WC_MESABS, 0x00); /* 0x0198 none ABS */
  1344. BsyWit(WC_MESMODE, 0x01); /* 0x0190 normal Measure */
  1345. RamAccFixMod(ON); /* Fix mode */
  1346. RamReadA_LC898122AF(MSABS1AV, (unsigned short *)&SsMesRlt); /* 0x1041 */
  1347. RamAccFixMod(OFF); /* Float mode */
  1348. return SsMesRlt;
  1349. }
  1350. /* ******************************************************************************** */
  1351. /* Function Name : SetSinWavePara */
  1352. /* Retun Value : NON */
  1353. /* Argment Value : NON */
  1354. /* Explanation : Sine wave Test Function */
  1355. /* History : First edition 2013.01.15 Y.Shigeoka */
  1356. /* ******************************************************************************** */
  1357. #ifdef USE_EXTCLK_ALL /* 24MHz */
  1358. /********* Parameter Setting *********/
  1359. /* Servo Sampling Clock = 11.71875kHz */
  1360. /* Freq = CmSinFreq*Fs/65536/16 */
  1361. /* 05 00 XX MM XX:Freq MM:Sin or Circle */
  1362. const unsigned short CucFreqVal[17] = {
  1363. 0xFFFF, /* 0: Stop */
  1364. 0x0059, /* 1: 0.994653Hz */
  1365. 0x00B2, /* 2: 1.989305Hz */
  1366. 0x010C, /* 3: 2.995133Hz */
  1367. 0x0165, /* 4: 3.989786Hz */
  1368. 0x01BF, /* 5: 4.995614Hz */
  1369. 0x0218, /* 6: 5.990267Hz */
  1370. 0x0272, /* 7: 6.996095Hz */
  1371. 0x02CB, /* 8: 7.990748Hz */
  1372. 0x0325, /* 9: 8.996576Hz */
  1373. 0x037E, /* A: 9.991229Hz */
  1374. 0x03D8, /* B: 10.99706Hz */
  1375. 0x0431, /* C: 11.99171Hz */
  1376. 0x048B, /* D: 12.99754Hz */
  1377. 0x04E4, /* E: 13.99219Hz */
  1378. 0x053E, /* F: 14.99802Hz */
  1379. 0x0597 /* 10: 15.99267Hz */
  1380. };
  1381. #else
  1382. /********* Parameter Setting *********/
  1383. /* Servo Sampling Clock = 23.4375kHz */
  1384. /* Freq = CmSinFreq*Fs/65536/16 */
  1385. /* 05 00 XX MM XX:Freq MM:Sin or Circle */
  1386. const unsigned short CucFreqVal[17] = {
  1387. 0xFFFF, /* 0: Stop */
  1388. 0x002C, /* 1: 0.983477Hz */
  1389. 0x0059, /* 2: 1.989305Hz */
  1390. 0x0086, /* 3: 2.995133Hz */
  1391. 0x00B2, /* 4: 3.97861Hz */
  1392. 0x00DF, /* 5: 4.984438Hz */
  1393. 0x010C, /* 6: 5.990267Hz */
  1394. 0x0139, /* 7: 6.996095Hz */
  1395. 0x0165, /* 8: 7.979572Hz */
  1396. 0x0192, /* 9: 8.9854Hz */
  1397. 0x01BF, /* A: 9.991229Hz */
  1398. 0x01EC, /* B: 10.99706Hz */
  1399. 0x0218, /* C: 11.98053Hz */
  1400. 0x0245, /* D: 12.98636Hz */
  1401. 0x0272, /* E: 13.99219Hz */
  1402. 0x029F, /* F: 14.99802Hz */
  1403. 0x02CB /* 10: 15.9815Hz */
  1404. };
  1405. #endif
  1406. #define USE_SINLPF /* if sin or circle movement is used LPF , this define has to enable */
  1407. /* 振?はsxsin(0x10D5),sysin(0x11D5)で調整 */
  1408. void SetSinWavePara(unsigned char UcTableVal, unsigned char UcMethodVal)
  1409. {
  1410. unsigned short UsFreqDat;
  1411. unsigned char UcEqSwX, UcEqSwY;
  1412. if (UcTableVal > 0x10)
  1413. UcTableVal = 0x10; /* Limit */
  1414. UsFreqDat = CucFreqVal[UcTableVal];
  1415. if (UcMethodVal == SINEWAVE) {
  1416. RegWriteA_LC898122AF(WC_SINPHSX, 0x00); /* 0x0183 */
  1417. RegWriteA_LC898122AF(WC_SINPHSY, 0x00); /* 0x0184 */
  1418. } else if (UcMethodVal == CIRCWAVE) {
  1419. RegWriteA_LC898122AF(WC_SINPHSX, 0x00); /* 0x0183 */
  1420. RegWriteA_LC898122AF(WC_SINPHSY, 0x20); /* 0x0184 */
  1421. } else {
  1422. RegWriteA_LC898122AF(WC_SINPHSX, 0x00); /* 0x0183 */
  1423. RegWriteA_LC898122AF(WC_SINPHSY, 0x00); /* 0x0184 */
  1424. }
  1425. #ifdef USE_SINLPF
  1426. if ((UcMethodVal != XHALWAVE) && (UcMethodVal != YHALWAVE))
  1427. MesFil(NOISE); /* LPF */
  1428. #endif
  1429. if (UsFreqDat == 0xFFFF) { /* Sine波?止 */
  1430. RegReadA_LC898122AF(WH_EQSWX, &UcEqSwX); /* 0x0170 */
  1431. RegReadA_LC898122AF(WH_EQSWY, &UcEqSwY); /* 0x0171 */
  1432. UcEqSwX &= ~EQSINSW;
  1433. UcEqSwY &= ~EQSINSW;
  1434. RegWriteA_LC898122AF(WH_EQSWX, UcEqSwX); /* 0x0170 */
  1435. RegWriteA_LC898122AF(WH_EQSWY, UcEqSwY); /* 0x0171 */
  1436. #ifdef USE_SINLPF
  1437. if ((UcMethodVal != XHALWAVE) && (UcMethodVal != YHALWAVE)) {
  1438. RegWriteA_LC898122AF(WC_DPON, 0x00); /* 0x0105 Data pass off */
  1439. RegWriteA_LC898122AF(WC_DPO1ADD0, 0x00); /* 0x01B8 output initial */
  1440. RegWriteA_LC898122AF(WC_DPO1ADD1, 0x00); /* 0x01B9 output initial */
  1441. RegWriteA_LC898122AF(WC_DPO2ADD0, 0x00); /* 0x01BA output initial */
  1442. RegWriteA_LC898122AF(WC_DPO2ADD1, 0x00); /* 0x01BB output initial */
  1443. RegWriteA_LC898122AF(WC_DPI1ADD0, 0x00); /* 0x01B0 input initial */
  1444. RegWriteA_LC898122AF(WC_DPI1ADD1, 0x00); /* 0x01B1 input initial */
  1445. RegWriteA_LC898122AF(WC_DPI2ADD0, 0x00); /* 0x01B2 input initial */
  1446. RegWriteA_LC898122AF(WC_DPI2ADD1, 0x00); /* 0x01B3 input initial */
  1447. /* Ram Access */
  1448. RamAccFixMod(ON); /* Fix mode */
  1449. RamWriteA_LC898122AF(SXOFFZ1, UsCntXof); /* 0x1461 set optical value */
  1450. RamWriteA_LC898122AF(SYOFFZ1, UsCntYof); /* 0x14E1 set optical value */
  1451. /* Ram Access */
  1452. RamAccFixMod(OFF); /* Float mode */
  1453. RegWriteA_LC898122AF(WC_MES1ADD0, 0x00); /* 0x0194 */
  1454. RegWriteA_LC898122AF(WC_MES1ADD1, 0x00); /* 0x0195 */
  1455. RegWriteA_LC898122AF(WC_MES2ADD0, 0x00); /* 0x0196 */
  1456. RegWriteA_LC898122AF(WC_MES2ADD1, 0x00); /* 0x0197 */
  1457. }
  1458. #endif
  1459. RegWriteA_LC898122AF(WC_SINON, 0x00); /* 0x0180 Sine wave */
  1460. } else {
  1461. RegReadA_LC898122AF(WH_EQSWX, &UcEqSwX); /* 0x0170 */
  1462. RegReadA_LC898122AF(WH_EQSWY, &UcEqSwY); /* 0x0171 */
  1463. if ((UcMethodVal != XHALWAVE) && (UcMethodVal != YHALWAVE)) {
  1464. #ifdef USE_SINLPF
  1465. RegWriteA_LC898122AF(WC_DPI1ADD0, (unsigned char)MES1BZ2);
  1466. /* 0x01B0 input Meas-Fil */
  1467. RegWriteA_LC898122AF(WC_DPI1ADD1, (unsigned char)((MES1BZ2 >> 8) & 0x0001));
  1468. /* 0x01B1 input Meas-Fil */
  1469. RegWriteA_LC898122AF(WC_DPI2ADD0, (unsigned char)MES2BZ2);
  1470. /* 0x01B2 input Meas-Fil */
  1471. RegWriteA_LC898122AF(WC_DPI2ADD1, (unsigned char)((MES2BZ2 >> 8) & 0x0001));
  1472. /* 0x01B3 input Meas-Fil */
  1473. RegWriteA_LC898122AF(WC_DPO1ADD0, (unsigned char)SXOFFZ1);
  1474. /* 0x01B8 output SXOFFZ1 */
  1475. RegWriteA_LC898122AF(WC_DPO1ADD1, (unsigned char)((SXOFFZ1 >> 8) & 0x0001));
  1476. /* 0x01B9 output SXOFFZ1 */
  1477. RegWriteA_LC898122AF(WC_DPO2ADD0, (unsigned char)SYOFFZ1);
  1478. /* 0x01BA output SYOFFZ1 */
  1479. RegWriteA_LC898122AF(WC_DPO2ADD1, (unsigned char)((SYOFFZ1 >> 8) & 0x0001));
  1480. /* 0x01BA output SYOFFZ1 */
  1481. RegWriteA_LC898122AF(WC_MES1ADD0, (unsigned char)SINXZ); /* 0x0194 */
  1482. RegWriteA_LC898122AF(WC_MES1ADD1, (unsigned char)((SINXZ >> 8) & 0x0001)); /* 0x0195 */
  1483. RegWriteA_LC898122AF(WC_MES2ADD0, (unsigned char)SINYZ); /* 0x0196 */
  1484. RegWriteA_LC898122AF(WC_MES2ADD1, (unsigned char)((SINYZ >> 8) & 0x0001)); /* 0x0197 */
  1485. RegWriteA_LC898122AF(WC_DPON, 0x03); /* 0x0105 Data pass[1:0] on */
  1486. UcEqSwX &= ~EQSINSW;
  1487. UcEqSwY &= ~EQSINSW;
  1488. #else
  1489. UcEqSwX |= 0x08;
  1490. UcEqSwY |= 0x08;
  1491. #endif
  1492. } else {
  1493. if (UcMethodVal == XHALWAVE) {
  1494. UcEqSwX = 0x22; /* SW[5] */
  1495. /* UcEqSwY = 0x03 ; */
  1496. } else {
  1497. /* UcEqSwX = 0x03 ; */
  1498. UcEqSwY = 0x22; /* SW[5] */
  1499. }
  1500. }
  1501. RegWriteA_LC898122AF(WC_SINFRQ0, (unsigned char)UsFreqDat); /* 0x0181 Freq L */
  1502. RegWriteA_LC898122AF(WC_SINFRQ1, (unsigned char)(UsFreqDat >> 8)); /* 0x0182 Freq H */
  1503. RegWriteA_LC898122AF(WC_MESSINMODE, 0x00); /* 0x0191 Sine 0 cross */
  1504. RegWriteA_LC898122AF(WH_EQSWX, UcEqSwX); /* 0x0170 */
  1505. RegWriteA_LC898122AF(WH_EQSWY, UcEqSwY); /* 0x0171 */
  1506. RegWriteA_LC898122AF(WC_SINON, 0x01); /* 0x0180 Sine wave */
  1507. }
  1508. }
  1509. #ifdef STANDBY_MODE
  1510. /* ******************************************************************************** */
  1511. /* Function Name : SetStandby */
  1512. /* Retun Value : NON */
  1513. /* Argment Value : 0:Standby ON 1:Standby OFF 2:Standby2 ON 3:Standby2 OFF */
  1514. /* : 4:Standby3 ON 5:Standby3 OFF */
  1515. /* Explanation : Set Standby */
  1516. /* History : First edition 2013.01.15 Y.Shigeoka */
  1517. /* ******************************************************************************** */
  1518. void SetStandby(unsigned char UcContMode)
  1519. {
  1520. unsigned char UcStbb0, UcClkon;
  1521. switch (UcContMode) {
  1522. case STB1_ON:
  1523. #ifdef AF_PWMMODE
  1524. #else
  1525. RegWriteA_LC898122AF(DRVFCAF, 0x00);
  1526. /* 0x0081 Drv.MODEAF=0,Drv.ENAAF=0,MODE-0 */
  1527. #endif
  1528. RegWriteA_LC898122AF(STBB0, 0x00);
  1529. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1530. RegWriteA_LC898122AF(STBB1, 0x00);
  1531. /* 0x0264 [ - | - | - | - ][ - | STBAFOP1 | - | STBAFDAC ] */
  1532. RegWriteA_LC898122AF(PWMA, 0x00); /* 0x0010 PWM Standby */
  1533. RegWriteA_LC898122AF(PWMAAF, 0x00); /* 0x0090 AF PWM Standby */
  1534. RegWriteA_LC898122AF(CVA, 0x00); /* 0x0020 LINEAR PWM mode standby */
  1535. DrvSw(OFF); /* Driver OFF */
  1536. AfDrvSw(OFF); /* AF Driver OFF */
  1537. #ifdef MONITOR_OFF
  1538. #else
  1539. RegWriteA_LC898122AF(PWMMONA, 0x00); /* 0x0030 Monitor Standby */
  1540. #endif
  1541. /* RegWriteA_LC898122AF( DACMONFC, 0x01 ) ; // 0x0032 DAC Monitor Standby */
  1542. SelectGySleep(ON); /* Gyro Sleep */
  1543. break;
  1544. case STB1_OFF:
  1545. SelectGySleep(OFF); /* Gyro Wake Up */
  1546. /* RegWriteA_LC898122AF( DACMONFC, 0x81 ) ; // 0x0032 DAC Monitor Active */
  1547. RegWriteA_LC898122AF(PWMMONA, 0x80); /* 0x0030 Monitor Active */
  1548. DrvSw(ON); /* Driver Mode setting */
  1549. AfDrvSw(ON); /* AF Driver Mode setting */
  1550. RegWriteA_LC898122AF(CVA, 0xC0); /* 0x0020 Linear PWM mode enable */
  1551. RegWriteA_LC898122AF(PWMAAF, 0x00); /* 0x0090 AF PWM Standby */
  1552. RegWriteA_LC898122AF(PWMA, 0xC0); /* 0x0010 PWM enable */
  1553. RegWriteA_LC898122AF(STBB1, 0x05);
  1554. /* 0x0264 [ - | - | - | - ][ - | STBAFOP1 | - | STBAFDAC ] */
  1555. RegWriteA_LC898122AF(STBB0, 0xDF);
  1556. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1557. break;
  1558. case STB2_ON:
  1559. #ifdef AF_PWMMODE
  1560. #else
  1561. RegWriteA_LC898122AF(DRVFCAF, 0x00);
  1562. /* 0x0081 Drv.MODEAF=0,Drv.ENAAF=0,MODE-0 */
  1563. #endif
  1564. RegWriteA_LC898122AF(STBB0, 0x00);
  1565. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1566. RegWriteA_LC898122AF(STBB1, 0x00);
  1567. /* 0x0264 [ - | - | - | - ][ - | STBAFOP1 | - | STBAFDAC ] */
  1568. RegWriteA_LC898122AF(PWMA, 0x00); /* 0x0010 PWM Standby */
  1569. RegWriteA_LC898122AF(PWMAAF, 0x00); /* 0x0090 AF PWM Standby */
  1570. RegWriteA_LC898122AF(CVA, 0x00); /* 0x0020 LINEAR PWM mode standby */
  1571. DrvSw(OFF); /* Drvier Block Ena=0 */
  1572. AfDrvSw(OFF); /* AF Drvier Block Ena=0 */
  1573. #ifdef MONITOR_OFF
  1574. #else
  1575. RegWriteA_LC898122AF(PWMMONA, 0x00); /* 0x0030 Monitor Standby */
  1576. #endif
  1577. /* RegWriteA_LC898122AF( DACMONFC, 0x01 ) ; // 0x0032 DAC Monitor Standby */
  1578. SelectGySleep(ON); /* Gyro Sleep */
  1579. RegWriteA_LC898122AF(CLKON, 0x00); /* 0x020B Servo & PWM Clock OFF + D-Gyro I/F OFF */
  1580. break;
  1581. case STB2_OFF:
  1582. RegWriteA_LC898122AF(CLKON, 0x1F);
  1583. /* 0x020B [ - | - | CmOpafClkOn | CmAfpwmClkOn | CMGifClkOn | CmScmClkOn | CmSrvClkOn | CmPwmClkOn ] */
  1584. SelectGySleep(OFF); /* Gyro Wake Up */
  1585. /* RegWriteA_LC898122AF( DACMONFC, 0x81 ) ; // 0x0032 DAC Monitor Active */
  1586. RegWriteA_LC898122AF(PWMMONA, 0x80); /* 0x0030 Monitor Active */
  1587. DrvSw(ON); /* Driver Mode setting */
  1588. AfDrvSw(ON); /* AF Driver Mode setting */
  1589. RegWriteA_LC898122AF(CVA, 0xC0); /* 0x0020 Linear PWM mode enable */
  1590. RegWriteA_LC898122AF(PWMAAF, 0x00); /* 0x0090 AF PWM Standby */
  1591. RegWriteA_LC898122AF(PWMA, 0xC0); /* 0x0010 PWM enable */
  1592. RegWriteA_LC898122AF(STBB1, 0x05);
  1593. /* 0x0264 [ - | - | - | - ][ - | STBAFOP1 | - | STBAFDAC ] */
  1594. RegWriteA_LC898122AF(STBB0, 0xDF);
  1595. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1596. break;
  1597. case STB3_ON:
  1598. #ifdef AF_PWMMODE
  1599. #else
  1600. RegWriteA_LC898122AF(DRVFCAF, 0x00);
  1601. /* 0x0081 Drv.MODEAF=0,Drv.ENAAF=0,MODE-0 */
  1602. #endif
  1603. RegWriteA_LC898122AF(STBB0, 0x00);
  1604. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1605. RegWriteA_LC898122AF(STBB1, 0x00);
  1606. /* 0x0264 [ - | - | - | - ][ - | STBAFOP1 | - | STBAFDAC ] */
  1607. RegWriteA_LC898122AF(PWMA, 0x00); /* 0x0010 PWM Standby */
  1608. RegWriteA_LC898122AF(PWMAAF, 0x00); /* 0x0090 AF PWM Standby */
  1609. RegWriteA_LC898122AF(CVA, 0x00); /* 0x0020 LINEAR PWM mode standby */
  1610. DrvSw(OFF); /* Drvier Block Ena=0 */
  1611. AfDrvSw(OFF); /* AF Drvier Block Ena=0 */
  1612. #ifdef MONITOR_OFF
  1613. #else
  1614. RegWriteA_LC898122AF(PWMMONA, 0x00); /* 0x0030 Monitor Standby */
  1615. #endif
  1616. /* RegWriteA_LC898122AF( DACMONFC, 0x01 ) ; // 0x0032 DAC Monitor Standby */
  1617. SelectGySleep(ON); /* Gyro Sleep */
  1618. RegWriteA_LC898122AF(CLKON, 0x00); /* 0x020B Servo & PWM Clock OFF + D-Gyro I/F OFF */
  1619. RegWriteA_LC898122AF(I2CSEL, 0x01); /* 0x0248 I2C Noise Cancel circuit OFF */
  1620. RegWriteA_LC898122AF(OSCSTOP, 0x02); /* 0x0256 Source Clock Input OFF */
  1621. break;
  1622. case STB3_OFF:
  1623. RegWriteA_LC898122AF(OSCSTOP, 0x00); /* 0x0256 Source Clock Input ON */
  1624. RegWriteA_LC898122AF(I2CSEL, 0x00); /* 0x0248 I2C Noise Cancel circuit ON */
  1625. RegWriteA_LC898122AF(CLKON, 0x1F);
  1626. /* 0x020B [ - | - | - | - | CMGifClkOn | CmScmClkOn | CmSrvClkOn | CmPwmClkOn ] */
  1627. SelectGySleep(OFF); /* Gyro Wake Up */
  1628. /* RegWriteA_LC898122AF( DACMONFC, 0x81 ) ; // 0x0032 DAC Monitor Active */
  1629. RegWriteA_LC898122AF(PWMMONA, 0x80);
  1630. /* 0x0030 Monitor Active */
  1631. DrvSw(ON); /* Driver Mode setting */
  1632. AfDrvSw(ON); /* AF Driver Mode setting */
  1633. RegWriteA_LC898122AF(CVA, 0xC0);
  1634. /* 0x0020 Linear PWM mode enable */
  1635. RegWriteA_LC898122AF(PWMAAF, 0x00);
  1636. /* 0x0090 AF PWM Standby */
  1637. RegWriteA_LC898122AF(PWMA, 0xC0);
  1638. /* 0x0010 PWM enable */
  1639. RegWriteA_LC898122AF(STBB1, 0x05);
  1640. /* 0x0264 [ - | - | - | - ][ - | STBAFOP1 | - | STBAFDAC ] */
  1641. RegWriteA_LC898122AF(STBB0, 0xDF);
  1642. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1643. break;
  1644. case STB4_ON:
  1645. #ifdef AF_PWMMODE
  1646. #else
  1647. RegWriteA_LC898122AF(DRVFCAF, 0x00);
  1648. /* 0x0081 Drv.MODEAF=0,Drv.ENAAF=0,MODE-0 */
  1649. #endif
  1650. RegWriteA_LC898122AF(STBB0, 0x00);
  1651. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1652. RegWriteA_LC898122AF(STBB1, 0x00);
  1653. /* 0x0264 [ - | - | - | - ][ - | STBAFOP1 | - | STBAFDAC ] */
  1654. RegWriteA_LC898122AF(PWMA, 0x00); /* 0x0010 PWM Standby */
  1655. RegWriteA_LC898122AF(PWMAAF, 0x00); /* 0x0090 AF PWM Standby */
  1656. RegWriteA_LC898122AF(CVA, 0x00); /* 0x0020 LINEAR PWM mode standby */
  1657. DrvSw(OFF); /* Drvier Block Ena=0 */
  1658. AfDrvSw(OFF); /* AF Drvier Block Ena=0 */
  1659. #ifdef MONITOR_OFF
  1660. #else
  1661. RegWriteA_LC898122AF(PWMMONA, 0x00); /* 0x0030 Monitor Standby */
  1662. #endif
  1663. /* RegWriteA_LC898122AF( DACMONFC, 0x01 ) ; // 0x0032 DAC Monitor Standby */
  1664. GyOutSignalCont(); /* Gyro Continuos mode */
  1665. RegWriteA_LC898122AF(CLKON, 0x04);
  1666. /* 0x020B Servo & PWM Clock OFF + D-Gyro I/F ON */
  1667. break;
  1668. case STB4_OFF:
  1669. RegWriteA_LC898122AF(CLKON, 0x1F);
  1670. /* 0x020B [ - | - | - | - | CMGifClkOn | CmScmClkOn | CmSrvClkOn | CmPwmClkOn ] */
  1671. SelectGySleep(OFF); /* Gyro OIS mode */
  1672. /* RegWriteA_LC898122AF( DACMONFC, 0x81 ) ; // 0x0032 DAC Monitor Active */
  1673. RegWriteA_LC898122AF(PWMMONA, 0x80); /* 0x0030 Monitor Active */
  1674. DrvSw(ON); /* Driver Mode setting */
  1675. AfDrvSw(ON); /* AF Driver Mode setting */
  1676. RegWriteA_LC898122AF(CVA, 0xC0); /* 0x0020 Linear PWM mode enable */
  1677. RegWriteA_LC898122AF(PWMAAF, 0x00); /* 0x0090 AF PWM Standby */
  1678. RegWriteA_LC898122AF(PWMA, 0xC0); /* 0x0010 PWM enable */
  1679. RegWriteA_LC898122AF(STBB1, 0x05);
  1680. /* 0x0264 [ - | - | - | - ][ - | STBAFOP1 | - | STBAFDAC ] */
  1681. RegWriteA_LC898122AF(STBB0, 0xDF);
  1682. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1683. break;
  1684. /************** special mode ************/
  1685. case STB2_OISON:
  1686. RegReadA_LC898122AF(STBB0, &UcStbb0);
  1687. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1688. UcStbb0 &= 0x80;
  1689. RegWriteA_LC898122AF(STBB0, UcStbb0);
  1690. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1691. RegWriteA_LC898122AF(PWMA, 0x00); /* 0x0010 PWM Standby */
  1692. RegWriteA_LC898122AF(CVA, 0x00); /* 0x0020 LINEAR PWM mode standby */
  1693. DrvSw(OFF); /* Drvier Block Ena=0 */
  1694. #ifdef MONITOR_OFF
  1695. #else
  1696. RegWriteA_LC898122AF(PWMMONA, 0x00); /* 0x0030 Monitor Standby */
  1697. #endif
  1698. /* RegWriteA_LC898122AF( DACMONFC, 0x01 ) ; // 0x0032 DAC Monitor Standby */
  1699. SelectGySleep(ON); /* Gyro Sleep */
  1700. RegReadA_LC898122AF(CLKON, &UcClkon);
  1701. /* 0x020B PWM Clock OFF + D-Gyro I/F OFF SRVCLK can't OFF */
  1702. UcClkon &= 0x1A;
  1703. RegWriteA_LC898122AF(CLKON, UcClkon);
  1704. /* 0x020B PWM Clock OFF + D-Gyro I/F OFF SRVCLK can't OFF */
  1705. break;
  1706. case STB2_OISOFF:
  1707. RegReadA_LC898122AF(CLKON, &UcClkon);
  1708. /* 0x020B PWM Clock OFF + D-Gyro I/F ON */
  1709. UcClkon |= 0x05;
  1710. RegWriteA_LC898122AF(CLKON, UcClkon);
  1711. /* 0x020B [ - | - | CmOpafClkOn | CmAfpwmClkOn | CMGifClkOn | CmScmClkOn | CmSrvClkOn | CmPwmClkOn ] */
  1712. SelectGySleep(OFF); /* Gyro Wake Up */
  1713. /* RegWriteA_LC898122AF( DACMONFC, 0x81 ) ; // 0x0032 DAC Monitor Active */
  1714. RegWriteA_LC898122AF(PWMMONA, 0x80);
  1715. /* 0x0030 Monitor Active */
  1716. DrvSw(ON);
  1717. /* Driver Mode setting */
  1718. RegWriteA_LC898122AF(CVA, 0xC0);
  1719. /* 0x0020 Linear PWM mode enable */
  1720. RegWriteA_LC898122AF(PWMA, 0xC0);
  1721. /* 0x0010 PWM enable */
  1722. RegReadA_LC898122AF(STBB0, &UcStbb0);
  1723. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1724. UcStbb0 |= 0x5F;
  1725. RegWriteA_LC898122AF(STBB0, UcStbb0);
  1726. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1727. break;
  1728. case STB2_AFON:
  1729. #ifdef AF_PWMMODE
  1730. #else
  1731. RegWriteA_LC898122AF(DRVFCAF, 0x00);
  1732. /* 0x0081 Drv.MODEAF=0,Drv.ENAAF=0,MODE-0 */
  1733. #endif
  1734. RegReadA_LC898122AF(STBB0, &UcStbb0);
  1735. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1736. UcStbb0 &= 0x7F;
  1737. RegWriteA_LC898122AF(STBB0, UcStbb0);
  1738. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1739. RegWriteA_LC898122AF(STBB1, 0x00);
  1740. /* 0x0264 [ - | - | - | - ][ - | STBAFOP1 | - | STBAFDAC ] */
  1741. RegWriteA_LC898122AF(PWMAAF, 0x00);
  1742. /* 0x0090 AF PWM Standby */
  1743. AfDrvSw(OFF); /* AF Drvier Block Ena=0 */
  1744. #ifdef MONITOR_OFF
  1745. #else
  1746. RegWriteA_LC898122AF(PWMMONA, 0x00);
  1747. /* 0x0030 Monitor Standby */
  1748. #endif
  1749. RegReadA_LC898122AF(CLKON, &UcClkon);
  1750. /* 0x020B OPAF Clock OFF + AFPWM OFF SRVCLK can't OFF */
  1751. UcClkon &= 0x07;
  1752. RegWriteA_LC898122AF(CLKON, UcClkon);
  1753. /* 0x020B OPAF Clock OFF + AFPWM OFF SRVCLK can't OFF */
  1754. break;
  1755. case STB2_AFOFF:
  1756. RegReadA_LC898122AF(CLKON, &UcClkon);
  1757. /* 0x020B OPAF Clock ON + AFPWM ON */
  1758. UcClkon |= 0x18;
  1759. RegWriteA_LC898122AF(CLKON, UcClkon);
  1760. /* 0x020B [ - | - | CmOpafClkOn | CmAfpwmClkOn | CMGifClkOn | CmScmClkOn | CmSrvClkOn | CmPwmClkOn ] */
  1761. AfDrvSw(ON);
  1762. /* AF Driver Mode setting */
  1763. RegWriteA_LC898122AF(PWMAAF, 0x00);
  1764. /* 0x0090 AF PWM Standby */
  1765. RegWriteA_LC898122AF(STBB1, 0x05);
  1766. /* 0x0264 [ - | - | - | - ][ - | STBAFOP1 | - | STBAFDAC ] */
  1767. RegReadA_LC898122AF(STBB0, &UcStbb0);
  1768. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1769. UcStbb0 |= 0x80;
  1770. RegWriteA_LC898122AF(STBB0, UcStbb0);
  1771. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1772. break;
  1773. /************** special mode ************/
  1774. }
  1775. }
  1776. #endif
  1777. /* ******************************************************************************** */
  1778. /* Function Name : SetZsp */
  1779. /* Retun Value : NON */
  1780. /* Argment Value : Command Parameter */
  1781. /* Explanation : Set Zoom Step parameter Function */
  1782. /* History : First edition 2013.01.15 Y.Shigeoka */
  1783. /* ******************************************************************************** */
  1784. void SetZsp(unsigned char UcZoomStepDat)
  1785. {
  1786. unsigned long UlGyrZmx, UlGyrZmy, UlGyrZrx, UlGyrZry;
  1787. /* Zoom Step */
  1788. if (UcZoomStepDat > (ZOOMTBL - 1))
  1789. UcZoomStepDat = (ZOOMTBL - 1); /* 上限をZOOMTBL-1に設定する */
  1790. if (UcZoomStepDat == 0) { /* initial setting */
  1791. UlGyrZmx = ClGyxZom[0]; /* Same Wide Coefficient */
  1792. UlGyrZmy = ClGyyZom[0]; /* Same Wide Coefficient */
  1793. /* Initial Rate value = 1 */
  1794. } else {
  1795. UlGyrZmx = ClGyxZom[UcZoomStepDat];
  1796. UlGyrZmy = ClGyyZom[UcZoomStepDat];
  1797. }
  1798. /* Zoom Value Setting */
  1799. RamWrite32A_LC898122AF(gxlens, UlGyrZmx); /* 0x1022 */
  1800. RamWrite32A_LC898122AF(gylens, UlGyrZmy); /* 0x1122 */
  1801. RamRead32A_LC898122AF(gxlens, &UlGyrZrx); /* 0x1022 */
  1802. RamRead32A_LC898122AF(gylens, &UlGyrZry); /* 0x1122 */
  1803. /* Zoom Value Setting Error Check */
  1804. if (UlGyrZmx != UlGyrZrx)
  1805. RamWrite32A_LC898122AF(gxlens, UlGyrZmx); /* 0x1022 */
  1806. if (UlGyrZmy != UlGyrZry)
  1807. RamWrite32A_LC898122AF(gylens, UlGyrZmy); /* 0x1122 */
  1808. }
  1809. /* ******************************************************************************** */
  1810. /* Function Name : StbOnn */
  1811. /* Retun Value : NON */
  1812. /* Argment Value : NON */
  1813. /* Explanation : Stabilizer For Servo On Function */
  1814. /* History : First edition 2013.01.09 Y.Shigeoka */
  1815. /* ******************************************************************************** */
  1816. void StbOnn(void)
  1817. {
  1818. unsigned char UcRegValx, UcRegValy; /* Registor value */
  1819. unsigned char UcRegIni;
  1820. RegReadA_LC898122AF(WH_EQSWX, &UcRegValx); /* 0x0170 */
  1821. RegReadA_LC898122AF(WH_EQSWY, &UcRegValy); /* 0x0171 */
  1822. if (((UcRegValx & 0x01) != 0x01) && ((UcRegValy & 0x01) != 0x01)) {
  1823. RegWriteA_LC898122AF(WH_SMTSRVON, 0x01); /* 0x017C Smooth Servo ON */
  1824. SrvCon(X_DIR, ON);
  1825. SrvCon(Y_DIR, ON);
  1826. UcRegIni = 0x11;
  1827. while ((UcRegIni & 0x77) != 0x66)
  1828. RegReadA_LC898122AF(RH_SMTSRVSTT, &UcRegIni); /* 0x01F8 Smooth Servo phase read */
  1829. RegWriteA_LC898122AF(WH_SMTSRVON, 0x00); /* 0x017C Smooth Servo OFF */
  1830. } else {
  1831. SrvCon(X_DIR, ON);
  1832. SrvCon(Y_DIR, ON);
  1833. }
  1834. }
  1835. /* ******************************************************************************** */
  1836. /* Function Name : StbOnnN */
  1837. /* Retun Value : NON */
  1838. /* Argment Value : NON */
  1839. /* Explanation : Stabilizer For Servo On Function */
  1840. /* History : First edition 2013.10.09 Y.Shigeoka */
  1841. /* ******************************************************************************** */
  1842. void StbOnnN(unsigned char UcStbY, unsigned char UcStbX)
  1843. {
  1844. unsigned char UcRegIni;
  1845. unsigned char UcSttMsk = 0;
  1846. RegWriteA_LC898122AF(WH_SMTSRVON, 0x01); /* 0x017C Smooth Servo ON */
  1847. if (UcStbX == ON)
  1848. UcSttMsk |= 0x07;
  1849. if (UcStbY == ON)
  1850. UcSttMsk |= 0x70;
  1851. SrvCon(X_DIR, UcStbX);
  1852. SrvCon(Y_DIR, UcStbY);
  1853. UcRegIni = 0x11;
  1854. while ((UcRegIni & UcSttMsk) != (0x66 & UcSttMsk))
  1855. RegReadA_LC898122AF(RH_SMTSRVSTT, &UcRegIni); /* 0x01F8 Smooth Servo phase read */
  1856. RegWriteA_LC898122AF(WH_SMTSRVON, 0x00); /* 0x017C Smooth Servo OFF */
  1857. }
  1858. /* ******************************************************************************** */
  1859. /* Function Name : OptCen */
  1860. /* Retun Value : NON */
  1861. /* Argment Value : UcOptMode 0:Set 1:Save&Set */
  1862. /* : UsOptXval Xaxis offset */
  1863. /* : UsOptYval Yaxis offset */
  1864. /* Explanation : Send Optical Center */
  1865. /* History : First edition 2013.01.15 Y.Shigeoka */
  1866. /* ******************************************************************************** */
  1867. void OptCen(unsigned char UcOptmode, unsigned short UsOptXval, unsigned short UsOptYval)
  1868. {
  1869. RamAccFixMod(ON); /* Fix mode */
  1870. switch (UcOptmode) {
  1871. case VAL_SET:
  1872. RamWriteA_LC898122AF(SXOFFZ1, UsOptXval); /* 0x1461 Check Hall X optical center */
  1873. RamWriteA_LC898122AF(SYOFFZ1, UsOptYval); /* 0x14E1 Check Hall Y optical center */
  1874. break;
  1875. case VAL_FIX:
  1876. UsCntXof = UsOptXval;
  1877. UsCntYof = UsOptYval;
  1878. RamWriteA_LC898122AF(SXOFFZ1, UsCntXof); /* 0x1461 Check Hall X optical center */
  1879. RamWriteA_LC898122AF(SYOFFZ1, UsCntYof); /* 0x14E1 Check Hall Y optical center */
  1880. break;
  1881. case VAL_SPC:
  1882. RamReadA_LC898122AF(SXOFFZ1, &UsOptXval); /* 0x1461 Check Hall X optical center */
  1883. RamReadA_LC898122AF(SYOFFZ1, &UsOptYval); /* 0x14E1 Check Hall Y optical center */
  1884. UsCntXof = UsOptXval;
  1885. UsCntYof = UsOptYval;
  1886. break;
  1887. }
  1888. RamAccFixMod(OFF); /* Float mode */
  1889. }
  1890. #ifdef MODULE_CALIBRATION
  1891. /* ******************************************************************************** */
  1892. /* Function Name : OscAdj */
  1893. /* Retun Value : NON */
  1894. /* Argment Value : NON */
  1895. /* Explanation : OSC Clock adjustment */
  1896. /* History : First edition 2013.01.15 Y.Shigeoka */
  1897. /* ******************************************************************************** */
  1898. #define RRATETABLE 8
  1899. #define CRATETABLE 16
  1900. const signed char ScRselRate[RRATETABLE] = {
  1901. -12, /* -12% */
  1902. -9, /* -9% */
  1903. -6, /* -6% */
  1904. -3, /* -3% */
  1905. 0, /* 0% */
  1906. 3, /* 3% */
  1907. 7, /* 7% */
  1908. 11 /* 11% */
  1909. };
  1910. const signed char ScCselRate[CRATETABLE] = {
  1911. -14, /* -14% */
  1912. -12, /* -12% */
  1913. -10, /* -10% */
  1914. -8, /* -8% */
  1915. -6, /* -6% */
  1916. -4, /* -4% */
  1917. -2, /* -2% */
  1918. 0, /* 0% */
  1919. 0, /* 0% */
  1920. 2, /* 2% */
  1921. 4, /* 4% */
  1922. 6, /* 6% */
  1923. 8, /* 8% */
  1924. 10, /* 10% */
  1925. 12, /* 12% */
  1926. 14 /* 14% */
  1927. };
  1928. #define TARGET_FREQ 48000.0F /* 48MHz */
  1929. /* #define TARGET_FREQ 24000.0F */ /* 24MHz */
  1930. #define START_RSEL 0x04 /* Typ */
  1931. #define START_CSEL 0x08 /* Typ bit4:OSCPMSEL */
  1932. #define MEAS_MAX 32 /* 上限32回 */
  1933. /* Measure Status (UcClkJdg) */
  1934. #define UNDR_MEAS 0x00
  1935. #define FIX_MEAS 0x01
  1936. #define JST_FIX 0x03
  1937. #define OVR_MEAS 0x80
  1938. /* Measure Check Flag (UcMeasFlg) */
  1939. #define RSELFX 0x08
  1940. #define RSEL1ST 0x01
  1941. #define RSEL2ND 0x02
  1942. #define CSELFX 0x80
  1943. #define CSELPLS 0x10
  1944. #define CSELMNS 0x20
  1945. unsigned short OscAdj(void)
  1946. {
  1947. unsigned char UcMeasFlg; /* Measure check flag */
  1948. UnWrdVal StClkVal; /* Measure value */
  1949. unsigned char UcMeasCnt; /* Measure counter */
  1950. unsigned char UcOscrsel, UcOsccsel; /* Reg set value */
  1951. unsigned char UcSrvDivBk; /* back up value */
  1952. unsigned char UcClkJdg; /* State flag */
  1953. float FcalA, FcalB; /* calcurate value */
  1954. signed char ScTblRate_Val, ScTblRate_Now, ScTblRate_Tgt; /* rate */
  1955. float FlRatePbk, FlRateMbk; /* Rate bk */
  1956. unsigned char UcOsccselP, UcOsccselM; /* Reg set value */
  1957. unsigned short UsResult;
  1958. /* unsigned char UcOscsetBk ; */ /* Reg set value */
  1959. UcMeasFlg = 0; /* Clear Measure check flag */
  1960. UcMeasCnt = 0; /* Clear Measure counter */
  1961. UcClkJdg = UNDR_MEAS; /* under Measure */
  1962. UcOscrsel = START_RSEL;
  1963. UcOsccsel = START_CSEL;
  1964. /* check */
  1965. /* RegReadA_LC898122AF( OSCSET, &UcOscsetBk ) ; // 0x0264 */
  1966. /* UcOscrsel = ( UcOscsetBk & 0xE0 ) >> 5 ; */
  1967. /* UcOsccsel = ( UcOscsetBk & 0x1E ) >> 1 ; */
  1968. /**/ RegReadA_LC898122AF(SRVDIV, &UcSrvDivBk); /* 0x0211 */
  1969. RegWriteA_LC898122AF(SRVDIV, 0x00); /* 0x0211 SRV Clock = Xtalck */
  1970. RegWriteA_LC898122AF(OSCSET, (UcOscrsel << 5) | (UcOsccsel << 1)); /* 0x0257 */
  1971. while (UcClkJdg == UNDR_MEAS) {
  1972. UcMeasCnt++; /* Measure count up */
  1973. UcOscAdjFlg = MEASSTR; /* Start trigger ON */
  1974. while (UcOscAdjFlg != MEASFIX) {
  1975. ;
  1976. }
  1977. UcOscAdjFlg = 0x00; /* Clear Flag */
  1978. RegReadA_LC898122AF(OSCCK_CNTR0, &StClkVal.StWrdVal.UcLowVal); /* 0x025E */
  1979. RegReadA_LC898122AF(OSCCK_CNTR1, &StClkVal.StWrdVal.UcHigVal); /* 0x025F */
  1980. FcalA = (float)StClkVal.UsWrdVal;
  1981. FcalB = TARGET_FREQ / FcalA;
  1982. FcalB = FcalB - 1.0F;
  1983. FcalB *= 100.0F;
  1984. if (FcalB == 0.0F) {
  1985. UcClkJdg = JST_FIX; /* Just 36MHz */
  1986. UcMeasFlg |= (CSELFX | RSELFX); /* Fix Flag */
  1987. break;
  1988. }
  1989. /* Rsel check */
  1990. if (!(UcMeasFlg & RSELFX)) {
  1991. if (UcMeasFlg & RSEL1ST)
  1992. UcMeasFlg |= (RSELFX | RSEL2ND);
  1993. else
  1994. UcMeasFlg |= RSEL1ST;
  1995. ScTblRate_Now = ScRselRate[UcOscrsel]; /* 今のRate */
  1996. ScTblRate_Tgt = ScTblRate_Now + (short)FcalB;
  1997. if (ScTblRate_Now > ScTblRate_Tgt) {
  1998. while (1) {
  1999. if (UcOscrsel == 0)
  2000. break;
  2001. UcOscrsel -= 1;
  2002. ScTblRate_Val = ScRselRate[UcOscrsel];
  2003. if (ScTblRate_Tgt >= ScTblRate_Val)
  2004. break;
  2005. }
  2006. } else if (ScTblRate_Now < ScTblRate_Tgt) {
  2007. while (1) {
  2008. if (UcOscrsel == (RRATETABLE - 1))
  2009. break;
  2010. UcOscrsel += 1;
  2011. ScTblRate_Val = ScRselRate[UcOscrsel];
  2012. if (ScTblRate_Tgt <= ScTblRate_Val)
  2013. break;
  2014. }
  2015. } else {
  2016. ;
  2017. }
  2018. } else {
  2019. /* Csel check */
  2020. if (FcalB > 0) { /* Plus */
  2021. UcMeasFlg |= CSELPLS;
  2022. FlRatePbk = FcalB;
  2023. UcOsccselP = UcOsccsel;
  2024. if (UcMeasFlg & CSELMNS) {
  2025. UcMeasFlg |= CSELFX;
  2026. UcClkJdg = FIX_MEAS; /* OK */
  2027. } else if (UcOsccsel == (CRATETABLE - 1)) {
  2028. if (UcOscrsel < (RRATETABLE - 1)) {
  2029. UcOscrsel += 1;
  2030. UcOsccsel = START_CSEL;
  2031. UcMeasFlg = 0; /* Clear */
  2032. } else {
  2033. UcClkJdg = OVR_MEAS; /* Over */
  2034. }
  2035. } else {
  2036. UcOsccsel += 1;
  2037. }
  2038. } else { /* Minus */
  2039. UcMeasFlg |= CSELMNS;
  2040. FlRateMbk = (-1) * FcalB;
  2041. UcOsccselM = UcOsccsel;
  2042. if (UcMeasFlg & CSELPLS) {
  2043. UcMeasFlg |= CSELFX;
  2044. UcClkJdg = FIX_MEAS; /* OK */
  2045. } else if (UcOsccsel == 0x00) {
  2046. if (UcOscrsel > 0) {
  2047. UcOscrsel -= 1;
  2048. UcOsccsel = START_CSEL;
  2049. UcMeasFlg = 0; /* Clear */
  2050. } else {
  2051. UcClkJdg = OVR_MEAS; /* Over */
  2052. }
  2053. } else {
  2054. UcOsccsel -= 1;
  2055. }
  2056. }
  2057. if (UcMeasCnt >= MEAS_MAX)
  2058. UcClkJdg = OVR_MEAS; /* Over */
  2059. }
  2060. RegWriteA_LC898122AF(OSCSET, (UcOscrsel << 5) | (UcOsccsel << 1)); /* 0x0257 */
  2061. }
  2062. UsResult = EXE_END;
  2063. if (UcClkJdg == FIX_MEAS) {
  2064. if (FlRatePbk < FlRateMbk)
  2065. UcOsccsel = UcOsccselP;
  2066. else
  2067. UcOsccsel = UcOsccselM;
  2068. RegWriteA_LC898122AF(OSCSET, (UcOscrsel << 5) | (UcOsccsel << 1)); /* 0x0264 */
  2069. /* check */
  2070. /* RegReadA_LC898122AF( OSCSET, &UcOscsetBk ) ; // 0x0257 */
  2071. }
  2072. StAdjPar.UcOscVal = ((UcOscrsel << 5) | (UcOsccsel << 1));
  2073. if (UcClkJdg == OVR_MEAS) {
  2074. UsResult = EXE_OCADJ;
  2075. StAdjPar.UcOscVal = 0x00;
  2076. }
  2077. RegWriteA_LC898122AF(SRVDIV, UcSrvDivBk); /* 0x0211 SRV Clock set */
  2078. return UsResult;
  2079. }
  2080. #endif
  2081. #ifdef HALLADJ_HW
  2082. /* ============================================================================== */
  2083. /* Function : SetSineWave() */
  2084. /* inputs : UcJikuSel 0: X-Axis */
  2085. /* 1: Y-Axis */
  2086. /* UcMeasMode 0: Loop Gain frequency setting */
  2087. /* 1: Bias/Offset frequency setting */
  2088. /* outputs : void */
  2089. /* explanation : Initializes sine wave settings: */
  2090. /* Sine Table, Amplitue, Offset, Frequency */
  2091. /* revisions : First Edition 2013.01.15 Y.Shigeoka */
  2092. /* ============================================================================== */
  2093. void SetSineWave(unsigned char UcJikuSel, unsigned char UcMeasMode)
  2094. {
  2095. #ifdef USE_EXTCLK_ALL /* 24MHz */
  2096. unsigned short UsFRQ[] = { 0x30EE /*139.9Hz */ , 0x037E /*10Hz */ };
  2097. /* { Loop Gain setting , Bias/Offset setting} */
  2098. #else
  2099. unsigned short UsFRQ[] = { 0x1877 /*139.9Hz */ , 0x01BF /*10Hz */ };
  2100. /* { Loop Gain setting , Bias/Offset setting} */
  2101. #endif
  2102. unsigned long UlAMP[2][2] = { {0x3CA3D70A, 0x3CA3D70A}, /* Loop Gain { X amp , Y amp } */
  2103. {0x3F800000, 0x3F800000}
  2104. }; /* Bias/offset { X amp , Y amp } */
  2105. unsigned char UcEqSwX, UcEqSwY;
  2106. UcMeasMode &= 0x01;
  2107. UcJikuSel &= 0x01;
  2108. /* Phase parameter 0deg */
  2109. RegWriteA_LC898122AF(WC_SINPHSX, 0x00); /* 0x0183 */
  2110. RegWriteA_LC898122AF(WC_SINPHSY, 0x00); /* 0x0184 */
  2111. /* wait 0 cross */
  2112. RegWriteA_LC898122AF(WC_MESSINMODE, 0x00); /* 0x0191 Sine 0 cross */
  2113. RegWriteA_LC898122AF(WC_MESWAIT, 0x00); /* 0x0199 0 cross wait */
  2114. /* Manually Set Amplitude */
  2115. RamWrite32A_LC898122AF(sxsin, UlAMP[UcMeasMode][X_DIR]); /* 0x10D5 */
  2116. RamWrite32A_LC898122AF(sysin, UlAMP[UcMeasMode][Y_DIR]); /* 0x11D5 */
  2117. /* Freq */
  2118. RegWriteA_LC898122AF(WC_SINFRQ0, (unsigned char)UsFRQ[UcMeasMode]); /* 0x0181 Freq L */
  2119. RegWriteA_LC898122AF(WC_SINFRQ1, (unsigned char)(UsFRQ[UcMeasMode] >> 8)); /* 0x0182 Freq H */
  2120. /* Clear Optional Sine wave input address */
  2121. RegReadA_LC898122AF(WH_EQSWX, &UcEqSwX); /* 0x0170 */
  2122. RegReadA_LC898122AF(WH_EQSWY, &UcEqSwY); /* 0x0171 */
  2123. if (!UcMeasMode && !UcJikuSel) { /* Loop Gain mode X-axis */
  2124. UcEqSwX |= 0x10; /* SW[4] */
  2125. UcEqSwY &= ~EQSINSW;
  2126. } else if (!UcMeasMode && UcJikuSel) { /* Loop Gain mode Y-Axis */
  2127. UcEqSwX &= ~EQSINSW;
  2128. UcEqSwY |= 0x10; /* SW[4] */
  2129. } else if (UcMeasMode && !UcJikuSel) { /* Bias/Offset mode X-Axis */
  2130. UcEqSwX = 0x22; /* SW[5] */
  2131. UcEqSwY = 0x03;
  2132. } else { /* Bias/Offset mode Y-Axis */
  2133. UcEqSwX = 0x03;
  2134. UcEqSwY = 0x22; /* SW[5] */
  2135. }
  2136. RegWriteA_LC898122AF(WH_EQSWX, UcEqSwX); /* 0x0170 */
  2137. RegWriteA_LC898122AF(WH_EQSWY, UcEqSwY); /* 0x0171 */
  2138. }
  2139. /* ============================================================================== */
  2140. /* Function : StartSineWave() */
  2141. /* inputs : none */
  2142. /* outputs : void */
  2143. /* explanation : Starts sine wave */
  2144. /* revisions : First Edition 2011.04.13 d.yamagata */
  2145. /* ============================================================================== */
  2146. void StartSineWave(void)
  2147. {
  2148. /* Start Sine Wave */
  2149. RegWriteA_LC898122AF(WC_SINON, 0x01); /* 0x0180 Sine wave */
  2150. }
  2151. /* ============================================================================== */
  2152. /* Function : StopSineWave() */
  2153. /* inputs : void */
  2154. /* outputs : void */
  2155. /* explanation : Stops sine wave */
  2156. /* revisions : First Edition 2013.01.15 Y.Shigeoka */
  2157. /* ============================================================================== */
  2158. void StopSineWave(void)
  2159. {
  2160. unsigned char UcEqSwX, UcEqSwY;
  2161. RegWriteA_LC898122AF(WC_SINON, 0x00); /* 0x0180 Sine wave Stop */
  2162. RegReadA_LC898122AF(WH_EQSWX, &UcEqSwX); /* 0x0170 */
  2163. RegReadA_LC898122AF(WH_EQSWY, &UcEqSwY); /* 0x0171 */
  2164. UcEqSwX &= ~EQSINSW;
  2165. UcEqSwY &= ~EQSINSW;
  2166. RegWriteA_LC898122AF(WH_EQSWX, UcEqSwX); /* 0x0170 Switch control */
  2167. RegWriteA_LC898122AF(WH_EQSWY, UcEqSwY); /* 0x0171 Switch control */
  2168. }
  2169. /* ============================================================================== */
  2170. /* Function : SetMeaseFil_LoopGain() */
  2171. /* inputs : UcJikuSel 0: X-Axis */
  2172. /* 1: Y-Axis */
  2173. /* UcMeasMode 0: Loop Gain frequency setting */
  2174. /* 1: Bias/Offset frequency setting */
  2175. /* UcFilSel */
  2176. /* outputs : void */
  2177. /* explanation : */
  2178. /* revisions : First Edition 2013.01.15 Y.Shigeoka */
  2179. /* ============================================================================== */
  2180. void SetMeasFil(unsigned char UcFilSel)
  2181. {
  2182. MesFil(UcFilSel); /* Set Measure filter */
  2183. }
  2184. /* ============================================================================== */
  2185. /* Function : ClrMeasFil() */
  2186. /* inputs : void */
  2187. /* outputs : void */
  2188. /* explanation : */
  2189. /* revisions : First Edition 2013.01.15 Y.Shigeoka */
  2190. /* ============================================================================== */
  2191. void ClrMeasFil(void)
  2192. {
  2193. /* Measure Filters clear */
  2194. ClrGyr(0x1000, CLR_FRAM1); /* MEAS-FIL Delay RAM Clear */
  2195. }
  2196. #ifdef MODULE_CALIBRATION
  2197. /* ============================================================================== */
  2198. /* Function : LoopGainAdj() */
  2199. /* inputs : UcJikuSel 0: X-Axis, 1: Y-Axis */
  2200. /* outputs : void */
  2201. /* explanation : */
  2202. /* revisions : First Edition 2011.04.13 d.yamagata */
  2203. /* ============================================================================== */
  2204. unsigned char LoopGainAdj(unsigned char UcJikuSel)
  2205. {
  2206. unsigned short UsRltVal;
  2207. unsigned char UcAdjSts = FAILURE;
  2208. UcJikuSel &= 0x01;
  2209. StbOnn(); /* Slope Mode */
  2210. /* Wait 200ms */
  2211. WitTim_LC898122AF(200);
  2212. /* set start gain */
  2213. LopPar(UcJikuSel);
  2214. /* set sine wave */
  2215. SetSineWave(UcJikuSel, __MEASURE_LOOPGAIN);
  2216. /* Measure count */
  2217. RegWriteA_LC898122AF(WC_MESLOOP1, 0x00); /* 0x0193 */
  2218. RegWriteA_LC898122AF(WC_MESLOOP0, 0x40); /* 0x0192 64 Times Measure */
  2219. RamWrite32A_LC898122AF(msmean, 0x3C800000); /* 0x1230 1/CmMesLoop[15:0] */
  2220. RegWriteA_LC898122AF(WC_MESABS, 0x01); /* 0x0198 ABS */
  2221. /* Set Adjustment Limits */
  2222. RamWrite32A_LC898122AF(LGMax, 0x3F800000); /* 0x1092 Loop gain adjustment max limit */
  2223. RamWrite32A_LC898122AF(LGMin, 0x3E000100); /* 0x1091 Loop gain adjustment min limit */
  2224. RegWriteA_LC898122AF(WC_AMJLOOP1, 0x00); /* 0x01A3 Time-Out time */
  2225. RegWriteA_LC898122AF(WC_AMJLOOP0, 0x41); /* 0x01A2 Time-Out time */
  2226. RegWriteA_LC898122AF(WC_AMJIDL1, 0x00); /* 0x01A5 wait */
  2227. RegWriteA_LC898122AF(WC_AMJIDL0, 0x00); /* 0x01A4 wait */
  2228. /* set Measure Filter */
  2229. SetMeasFil(LOOPGAIN);
  2230. /* Clear Measure Filters */
  2231. ClrMeasFil();
  2232. /* Start Sine Wave */
  2233. StartSineWave();
  2234. /* Enable Loop Gain Adjustment */
  2235. /* Check Busy Flag */
  2236. BsyWit(WC_AMJMODE, (0x0E | (UcJikuSel << 4))); /* 0x01A0 Loop Gain adjustment */
  2237. RegReadA_LC898122AF(RC_AMJERROR, &UcAdjBsy); /* 0x01AD */
  2238. /* Ram Access */
  2239. RamAccFixMod(ON); /* Fix mode */
  2240. if (UcAdjBsy) {
  2241. if (UcJikuSel == X_DIR) {
  2242. RamReadA_LC898122AF(sxg, &UsRltVal); /* 0x10D3 */
  2243. StAdjPar.StLopGan.UsLxgVal = UsRltVal;
  2244. StAdjPar.StLopGan.UsLxgSts = 0x0000;
  2245. } else {
  2246. RamReadA_LC898122AF(syg, &UsRltVal); /* 0x11D3 */
  2247. StAdjPar.StLopGan.UsLygVal = UsRltVal;
  2248. StAdjPar.StLopGan.UsLygSts = 0x0000;
  2249. }
  2250. } else {
  2251. if (UcJikuSel == X_DIR) {
  2252. RamReadA_LC898122AF(sxg, &UsRltVal); /* 0x10D3 */
  2253. StAdjPar.StLopGan.UsLxgVal = UsRltVal;
  2254. StAdjPar.StLopGan.UsLxgSts = 0xFFFF;
  2255. } else {
  2256. RamReadA_LC898122AF(syg, &UsRltVal); /* 0x11D3 */
  2257. StAdjPar.StLopGan.UsLygVal = UsRltVal;
  2258. StAdjPar.StLopGan.UsLygSts = 0xFFFF;
  2259. }
  2260. UcAdjSts = SUCCESS; /* Status OK */
  2261. }
  2262. /* Ram Access */
  2263. RamAccFixMod(OFF); /* Float mode */
  2264. /* Stop Sine Wave */
  2265. StopSineWave();
  2266. return UcAdjSts;
  2267. }
  2268. #endif
  2269. /* ============================================================================== */
  2270. /* Function : BiasOffsetAdj() */
  2271. /* inputs : UcJikuSel 0: X-Axis, 1: Y-Axis UcMeasCnt :Measure Count */
  2272. /* outputs : Result status */
  2273. /* explanation : */
  2274. /* revisions : First Edition 2013.01.16 Y.Shigeoka */
  2275. /* ============================================================================== */
  2276. unsigned char BiasOffsetAdj(unsigned char UcJikuSel, unsigned char UcMeasCnt)
  2277. {
  2278. unsigned char UcHadjRst;
  2279. /* STEP OFSTH OFSTL AMPH AMPL (80%) */
  2280. unsigned long UlTgtVal[2][5] = { {0x3F800000, 0x3D200140, 0xBD200140, 0x3F547AE1, 0x3F451EB8}, /* ROUGH */
  2281. {0x3F000000, 0x3D200140, 0xBD200140, 0x3F50A3D7, 0x3F48F5C3}
  2282. }; /* FINE */
  2283. if (UcMeasCnt > 1)
  2284. UcMeasCnt = 1;
  2285. UcJikuSel &= 0x01;
  2286. /* Set Sine Wave */
  2287. SetSineWave(UcJikuSel, __MEASURE_BIASOFFSET);
  2288. /* Measure count */
  2289. RegWriteA_LC898122AF(WC_MESLOOP1, 0x00); /* 0x0193 */
  2290. RegWriteA_LC898122AF(WC_MESLOOP0, 0x04); /* 0x0192 4 Times Measure */
  2291. RamWrite32A_LC898122AF(msmean, 0x3E000000); /* 0x10AE 1/CmMesLoop[15:0]/2 */
  2292. RegWriteA_LC898122AF(WC_MESABS, 0x00); /* 0x0198 ABS */
  2293. /* Set Adjustment Limits */
  2294. RamWrite32A_LC898122AF(HOStp, UlTgtVal[UcMeasCnt][0]); /* 0x1070 Hall Offset Stp */
  2295. RamWrite32A_LC898122AF(HOMax, UlTgtVal[UcMeasCnt][1]); /* 0x1072 Hall Offset max limit */
  2296. RamWrite32A_LC898122AF(HOMin, UlTgtVal[UcMeasCnt][2]); /* 0x1071 Hall Offset min limit */
  2297. RamWrite32A_LC898122AF(HBStp, UlTgtVal[UcMeasCnt][0]); /* 0x1080 Hall Bias Stp */
  2298. RamWrite32A_LC898122AF(HBMax, UlTgtVal[UcMeasCnt][3]); /* 0x1082 Hall Bias max limit */
  2299. RamWrite32A_LC898122AF(HBMin, UlTgtVal[UcMeasCnt][4]); /* 0x1081 Hall Bias min limit */
  2300. RegWriteA_LC898122AF(WC_AMJLOOP1, 0x00); /* 0x01A3 Time-Out time */
  2301. RegWriteA_LC898122AF(WC_AMJLOOP0, 0x40); /* 0x01A2 Time-Out time */
  2302. RegWriteA_LC898122AF(WC_AMJIDL1, 0x00); /* 0x01A5 wait */
  2303. RegWriteA_LC898122AF(WC_AMJIDL0, 0x00); /* 0x01A4 wait */
  2304. /* Set Measure Filter */
  2305. SetMeasFil(HALL_ADJ);
  2306. /* Clear Measure Filters */
  2307. ClrMeasFil();
  2308. /* Start Sine Wave */
  2309. StartSineWave();
  2310. /* Check Busy Flag */
  2311. BsyWit(WC_AMJMODE, (0x0C | (UcJikuSel << 4))); /* 0x01A0 Hall bais/offset ppt adjustment */
  2312. RegReadA_LC898122AF(RC_AMJERROR, &UcAdjBsy); /* 0x01AD */
  2313. if (UcAdjBsy) {
  2314. if (UcJikuSel == X_DIR)
  2315. UcHadjRst = EXE_HXADJ;
  2316. else
  2317. UcHadjRst = EXE_HYADJ;
  2318. } else {
  2319. UcHadjRst = EXE_END;
  2320. }
  2321. /* Stop Sine Wave */
  2322. StopSineWave();
  2323. /* Set Servo Filter */
  2324. /* Ram Access */
  2325. RamAccFixMod(ON); /* Fix mode */
  2326. if (UcJikuSel == X_DIR) {
  2327. RamReadA_LC898122AF(MSPP1AV, &StAdjPar.StHalAdj.UsHlxMxa); /* 0x1042 Max width value */
  2328. RamReadA_LC898122AF(MSCT1AV, &StAdjPar.StHalAdj.UsHlxCna); /* 0x1052 offset value */
  2329. } else {
  2330. /* RamReadA_LC898122AF( MSPP2AV, &StAdjPar.StHalAdj.UsHlyMxa ) ; // 0x1142 Max width value */
  2331. /* RamReadA_LC898122AF( MSCT2AV, &StAdjPar.StHalAdj.UsHlyCna ) ; // 0x1152 offset value */
  2332. RamReadA_LC898122AF(MSPP1AV, &StAdjPar.StHalAdj.UsHlyMxa); /* 0x1042 Max width value */
  2333. RamReadA_LC898122AF(MSCT1AV, &StAdjPar.StHalAdj.UsHlyCna); /* 0x1052 offset value */
  2334. }
  2335. StAdjPar.StHalAdj.UsHlxCna =
  2336. (unsigned short)((signed short)StAdjPar.StHalAdj.UsHlxCna << 1);
  2337. StAdjPar.StHalAdj.UsHlyCna =
  2338. (unsigned short)((signed short)StAdjPar.StHalAdj.UsHlyCna << 1);
  2339. /* Ram Access */
  2340. RamAccFixMod(OFF); /* Float mode */
  2341. return UcHadjRst;
  2342. }
  2343. #endif
  2344. /* ******************************************************************************** */
  2345. /* Function Name : GyrGan */
  2346. /* Retun Value : NON */
  2347. /* Argment Value : UcGygmode 0:Set 1:Save&Set */
  2348. /* : UlGygXval Xaxis Gain */
  2349. /* : UlGygYval Yaxis Gain */
  2350. /* Explanation : Send Gyro Gain */
  2351. /* History : First edition 2011.02.09 Y.Shigeoka */
  2352. /* ******************************************************************************** */
  2353. void GyrGan(unsigned char UcGygmode, unsigned long UlGygXval, unsigned long UlGygYval)
  2354. {
  2355. switch (UcGygmode) {
  2356. case VAL_SET:
  2357. RamWrite32A_LC898122AF(gxzoom, UlGygXval); /* 0x1020 */
  2358. RamWrite32A_LC898122AF(gyzoom, UlGygYval); /* 0x1120 */
  2359. break;
  2360. case VAL_FIX:
  2361. RamWrite32A_LC898122AF(gxzoom, UlGygXval); /* 0x1020 */
  2362. RamWrite32A_LC898122AF(gyzoom, UlGygYval); /* 0x1120 */
  2363. break;
  2364. case VAL_SPC:
  2365. RamRead32A_LC898122AF(gxzoom, &UlGygXval); /* 0x1020 */
  2366. RamRead32A_LC898122AF(gyzoom, &UlGygYval); /* 0x1120 */
  2367. break;
  2368. }
  2369. }
  2370. /* ******************************************************************************** */
  2371. /* Function Name : SetPanTiltMode */
  2372. /* Retun Value : NON */
  2373. /* Argment Value : NON */
  2374. /* Explanation : Pan-Tilt Enable/Disable */
  2375. /* History : First edition 2013.01.09 Y.Shigeoka */
  2376. /* ******************************************************************************** */
  2377. void SetPanTiltMode(unsigned char UcPnTmod)
  2378. {
  2379. switch (UcPnTmod) {
  2380. case OFF:
  2381. RegWriteA_LC898122AF(WG_PANON, 0x00); /* 0x0109 X,Y Pan/Tilt Function OFF */
  2382. break;
  2383. case ON:
  2384. RegWriteA_LC898122AF(WG_PANON, 0x01); /* 0x0109 X,Y Pan/Tilt Function ON */
  2385. /* RegWriteA_LC898122AF( WG_PANON, 0x10 ) ; // 0x0109 X,Y New Pan/Tilt Function ON */
  2386. break;
  2387. }
  2388. }
  2389. #ifdef GAIN_CONT
  2390. /* ******************************************************************************** */
  2391. /* Function Name : TriSts */
  2392. /* Retun Value : Tripod Status */
  2393. /* : bit0( 1:Y Tripod ON / 0:OFF) */
  2394. /* : bit4( 1:X Tripod ON / 0:OFF) */
  2395. /* : bit7( 1:Tripod ENABLE / 0:DISABLE) */
  2396. /* Argment Value : NON */
  2397. /* Explanation : Read Status of Tripod mode Function */
  2398. /* History : First edition 2013.02.18 Y.Shigeoka */
  2399. /* ******************************************************************************** */
  2400. unsigned char TriSts(void)
  2401. {
  2402. unsigned char UcRsltSts = 0;
  2403. unsigned char UcVal;
  2404. RegReadA_LC898122AF(WG_ADJGANGXATO, &UcVal); /* 0x0129 */
  2405. if (UcVal & 0x03) { /* Gain control enable? */
  2406. RegReadA_LC898122AF(RG_LEVJUGE, &UcVal); /* 0x01F4 */
  2407. UcRsltSts = UcVal & 0x11; /* bit0, bit4 set */
  2408. UcRsltSts |= 0x80; /* bit7 ON */
  2409. }
  2410. return UcRsltSts;
  2411. }
  2412. #endif
  2413. /* ******************************************************************************** */
  2414. /* Function Name : DrvPwmSw */
  2415. /* Retun Value : Mode Status */
  2416. /* : bit4( 1:PWM / 0:LinearPwm) */
  2417. /* Argment Value : NON */
  2418. /* Explanation : Select Driver mode Function */
  2419. /* History : First edition 2013.02.18 Y.Shigeoka */
  2420. /* ******************************************************************************** */
  2421. unsigned char DrvPwmSw(unsigned char UcSelPwmMod)
  2422. {
  2423. switch (UcSelPwmMod) {
  2424. case Mlnp:
  2425. RegWriteA_LC898122AF(DRVFC, 0xF0); /* 0x0001 Drv.MODE=1,Drv.BLK=1,MODE2,LCEN */
  2426. UcPwmMod = PWMMOD_CVL;
  2427. break;
  2428. case Mpwm:
  2429. #ifdef PWM_BREAK
  2430. RegWriteA_LC898122AF(DRVFC, 0x00); /* 0x0001 Drv.MODE=0,Drv.BLK=0,MODE0B */
  2431. #else
  2432. RegWriteA_LC898122AF(DRVFC, 0xC0); /* 0x0001 Drv.MODE=1,Drv.BLK=1,MODE1 */
  2433. #endif
  2434. UcPwmMod = PWMMOD_PWM;
  2435. break;
  2436. }
  2437. return UcSelPwmMod << 4;
  2438. }
  2439. #ifdef NEUTRAL_CENTER
  2440. /* ******************************************************************************** */
  2441. /* Function Name : TneHvc */
  2442. /* Retun Value : NON */
  2443. /* Argment Value : NON */
  2444. /* Explanation : Tunes the Hall VC offset */
  2445. /* History : First edition 2013.03.13 T.Tokoro */
  2446. /* ******************************************************************************** */
  2447. unsigned char TneHvc(void)
  2448. {
  2449. unsigned char UcRsltSts;
  2450. unsigned short UsMesRlt1;
  2451. unsigned short UsMesRlt2;
  2452. SrvCon(X_DIR, OFF); /* X Servo OFF */
  2453. SrvCon(Y_DIR, OFF); /* Y Servo OFF */
  2454. WitTim_LC898122AF(500);
  2455. /* 平均値測定 */
  2456. MesFil(THROUGH); /* Set Measure Filter */
  2457. RegWriteA_LC898122AF(WC_MESLOOP1, 0x00); /* 0x0193 CmMesLoop[15:8] */
  2458. RegWriteA_LC898122AF(WC_MESLOOP0, 0x40); /* 0x0192 CmMesLoop[7:0] */
  2459. RamWrite32A_LC898122AF(msmean, 0x3C800000); /* 0x1230 1/CmMesLoop[15:0] */
  2460. RegWriteA_LC898122AF(WC_MES1ADD0, (unsigned char)AD0Z); /* 0x0194 */
  2461. RegWriteA_LC898122AF(WC_MES1ADD1, (unsigned char)((AD0Z >> 8) & 0x0001)); /* 0x0195 */
  2462. RegWriteA_LC898122AF(WC_MES2ADD0, (unsigned char)AD1Z); /* 0x0196 */
  2463. RegWriteA_LC898122AF(WC_MES2ADD1, (unsigned char)((AD1Z >> 8) & 0x0001)); /* 0x0197 */
  2464. RamWrite32A_LC898122AF(MSABS1AV, 0x00000000); /* 0x1041 */
  2465. RamWrite32A_LC898122AF(MSABS2AV, 0x00000000); /* 0x1141 */
  2466. RegWriteA_LC898122AF(WC_MESABS, 0x00); /* 0x0198 none ABS */
  2467. BsyWit(WC_MESMODE, 0x01); /* 0x0190 Normal Measure */
  2468. RamAccFixMod(ON); /* Fix mode */
  2469. RamReadA_LC898122AF(MSABS1AV, &UsMesRlt1); /* 0x1041 Measure Result */
  2470. RamReadA_LC898122AF(MSABS2AV, &UsMesRlt2); /* 0x1141 Measure Result */
  2471. RamAccFixMod(OFF); /* Float mode */
  2472. StAdjPar.StHalAdj.UsHlxCna = UsMesRlt1; /* Measure Result Store */
  2473. StAdjPar.StHalAdj.UsHlxCen = UsMesRlt1; /* Measure Result Store */
  2474. StAdjPar.StHalAdj.UsHlyCna = UsMesRlt2; /* Measure Result Store */
  2475. StAdjPar.StHalAdj.UsHlyCen = UsMesRlt2; /* Measure Result Store */
  2476. UcRsltSts = EXE_END; /* Clear Status */
  2477. return UcRsltSts;
  2478. }
  2479. #endif /* NEUTRAL_CENTER */
  2480. /* ******************************************************************************** */
  2481. /* Function Name : SetGcf */
  2482. /* Retun Value : NON */
  2483. /* Argment Value : Command Parameter */
  2484. /* Explanation : Set DI filter coefficient Function */
  2485. /* History : First edition 2013.03.22 Y.Shigeoka */
  2486. /* ******************************************************************************** */
  2487. void SetGcf(unsigned char UcSetNum)
  2488. {
  2489. /* Zoom Step */
  2490. if (UcSetNum > (COEFTBL - 1))
  2491. UcSetNum = (COEFTBL - 1); /* 上限をCOEFTBL-1に設定する */
  2492. UlH1Coefval = ClDiCof[UcSetNum];
  2493. /* Zoom Value Setting */
  2494. RamWrite32A_LC898122AF(gxh1c, UlH1Coefval); /* 0x1012 */
  2495. RamWrite32A_LC898122AF(gyh1c, UlH1Coefval); /* 0x1112 */
  2496. #ifdef H1COEF_CHANGER
  2497. SetH1cMod(UcSetNum); /* Re-setting */
  2498. #endif
  2499. }
  2500. #ifdef H1COEF_CHANGER
  2501. /* ******************************************************************************** */
  2502. /* Function Name : SetH1cMod */
  2503. /* Retun Value : NON */
  2504. /* Argment Value : Command Parameter */
  2505. /* Explanation : Set H1C coefficient Level chang Function */
  2506. /* History : First edition 2013.04.18 Y.Shigeoka */
  2507. /* ******************************************************************************** */
  2508. void SetH1cMod(unsigned char UcSetNum)
  2509. {
  2510. switch (UcSetNum) {
  2511. case (ACTMODE): /* initial */
  2512. IniPtMovMod(OFF); /* Pan/Tilt setting (Still) */
  2513. /* enable setting */
  2514. /* Zoom Step */
  2515. UlH1Coefval = ClDiCof[0];
  2516. UcH1LvlMod = 0;
  2517. /* Limit value Value Setting */
  2518. RamWrite32A_LC898122AF(gxlmt6L, MINLMT); /* 0x102D L-Limit */
  2519. RamWrite32A_LC898122AF(gxlmt6H, MAXLMT); /* 0x102E H-Limit */
  2520. RamWrite32A_LC898122AF(gylmt6L, MINLMT); /* 0x112D L-Limit */
  2521. RamWrite32A_LC898122AF(gylmt6H, MAXLMT); /* 0x112E H-Limit */
  2522. RamWrite32A_LC898122AF(gxhc_tmp, UlH1Coefval); /* 0x100E Base Coef */
  2523. RamWrite32A_LC898122AF(gxmg, CHGCOEF); /* 0x10AA Change coefficient gain */
  2524. RamWrite32A_LC898122AF(gyhc_tmp, UlH1Coefval); /* 0x110E Base Coef */
  2525. RamWrite32A_LC898122AF(gymg, CHGCOEF); /* 0x11AA Change coefficient gain */
  2526. RegWriteA_LC898122AF(WG_HCHR, 0x12); /* 0x011B GmHChrOn[1]=1 Sw ON */
  2527. break;
  2528. case (S2MODE): /* cancel lvl change mode */
  2529. RegWriteA_LC898122AF(WG_HCHR, 0x10); /* 0x011B GmHChrOn[1]=0 Sw OFF */
  2530. break;
  2531. case (MOVMODE): /* Movie mode */
  2532. IniPtMovMod(ON); /* Pan/Tilt setting (Movie) */
  2533. RamWrite32A_LC898122AF(gxlmt6L, MINLMT_MOV); /* 0x102D L-Limit */
  2534. RamWrite32A_LC898122AF(gylmt6L, MINLMT_MOV); /* 0x112D L-Limit */
  2535. RamWrite32A_LC898122AF(gxmg, CHGCOEF_MOV); /* 0x10AA Change coefficient gain */
  2536. RamWrite32A_LC898122AF(gymg, CHGCOEF_MOV); /* 0x11AA Change coefficient gain */
  2537. RamWrite32A_LC898122AF(gxhc_tmp, UlH1Coefval); /* 0x100E Base Coef */
  2538. RamWrite32A_LC898122AF(gyhc_tmp, UlH1Coefval); /* 0x110E Base Coef */
  2539. RegWriteA_LC898122AF(WG_HCHR, 0x12); /* 0x011B GmHChrOn[1]=1 Sw ON */
  2540. break;
  2541. default:
  2542. IniPtMovMod(OFF); /* Pan/Tilt setting (Still) */
  2543. UcH1LvlMod = UcSetNum;
  2544. RamWrite32A_LC898122AF(gxlmt6L, MINLMT); /* 0x102D L-Limit */
  2545. RamWrite32A_LC898122AF(gylmt6L, MINLMT); /* 0x112D L-Limit */
  2546. RamWrite32A_LC898122AF(gxmg, CHGCOEF); /* 0x10AA Change coefficient gain */
  2547. RamWrite32A_LC898122AF(gymg, CHGCOEF); /* 0x11AA Change coefficient gain */
  2548. RamWrite32A_LC898122AF(gxhc_tmp, UlH1Coefval); /* 0x100E Base Coef */
  2549. RamWrite32A_LC898122AF(gyhc_tmp, UlH1Coefval); /* 0x110E Base Coef */
  2550. RegWriteA_LC898122AF(WG_HCHR, 0x12); /* 0x011B GmHChrOn[1]=1 Sw ON */
  2551. break;
  2552. }
  2553. }
  2554. #endif
  2555. /* ******************************************************************************** */
  2556. /* Function Name : RdFwVr */
  2557. /* Retun Value : Firmware version */
  2558. /* Argment Value : NON */
  2559. /* Explanation : Read Fw Version Function */
  2560. /* History : First edition 2013.05.07 Y.Shigeoka */
  2561. /* ******************************************************************************** */
  2562. unsigned short RdFwVr(void)
  2563. {
  2564. unsigned short UsVerVal;
  2565. UsVerVal = (unsigned short)((MDL_VER << 8) | FW_VER);
  2566. return UsVerVal;
  2567. }