OisIni.c 54 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296
  1. /* ******************************************************************************** */
  2. /* */
  3. /* << LC898122 Evaluation Soft >> */
  4. /* Program Name : OisIni.c */
  5. /* Design : Y.Yamada */
  6. /* History : LC898122 2013.01.09 Y.Shigeoka */
  7. /* ******************************************************************************** */
  8. /* ************************** */
  9. /* Include Header File */
  10. /* ************************** */
  11. #define OISINI
  12. /* #include "Main.h" */
  13. /* #include "Cmd.h" */
  14. #include "Ois.h"
  15. #include "OisFil.h"
  16. #include "OisDef.h"
  17. /* ************************** */
  18. /* Local Function Prottype */
  19. /* ************************** */
  20. void IniClk(void); /* Clock Setting */
  21. void IniIop(void); /* I/O Port Initial Setting */
  22. void IniMon(void); /* Monitor & Other Initial Setting */
  23. void IniSrv(void); /* Servo Register Initial Setting */
  24. void IniGyr(void); /* Gyro Filter Register Initial Setting */
  25. void IniFil(void); /* Gyro Filter Initial Parameter Setting */
  26. void IniAdj(void); /* Adjust Fix Value Setting */
  27. void IniCmd(void); /* Command Execute Process Initial */
  28. void IniDgy(void); /* Digital Gyro Initial Setting */
  29. void IniAf(void); /* Open AF Initial Setting */
  30. void IniPtAve(void); /* Average setting */
  31. /* ******************************************************************************** */
  32. /* Function Name : IniSet */
  33. /* Retun Value : NON */
  34. /* Argment Value : NON */
  35. /* Explanation : Initial Setting Function */
  36. /* History : First edition 2009.07.30 Y.Tashita */
  37. /* ******************************************************************************** */
  38. void IniSet(void)
  39. {
  40. /* Command Execute Process Initial */
  41. IniCmd();
  42. /* Clock Setting */
  43. IniClk();
  44. /* I/O Port Initial Setting */
  45. IniIop();
  46. /* DigitalGyro Initial Setting */
  47. IniDgy();
  48. /* Monitor & Other Initial Setting */
  49. IniMon();
  50. /* Servo Initial Setting */
  51. IniSrv();
  52. /* Gyro Filter Initial Setting */
  53. IniGyr();
  54. /* Gyro Filter Initial Setting */
  55. IniFil();
  56. /* Adjust Fix Value Setting */
  57. IniAdj();
  58. }
  59. /* ******************************************************************************** */
  60. /* Function Name : IniSetAf */
  61. /* Retun Value : NON */
  62. /* Argment Value : NON */
  63. /* Explanation : Initial AF Setting Function */
  64. /* History : First edition 2013.09.12 Y.Shigeoka */
  65. /* ******************************************************************************** */
  66. void IniSetAf(void)
  67. {
  68. /* Command Execute Process Initial */
  69. IniCmd();
  70. /* Clock Setting */
  71. IniClk();
  72. /* AF Initial Setting */
  73. IniAf();
  74. }
  75. /* ******************************************************************************** */
  76. /* Function Name : IniClk */
  77. /* Retun Value : NON */
  78. /* Argment Value : NON */
  79. /* Explanation : Clock Setting */
  80. /* History : First edition 2013.01.08 Y.Shigeoka */
  81. /* ******************************************************************************** */
  82. void IniClk(void)
  83. {
  84. ChkCvr(); /* Read Cver */
  85. /*OSC Enables */
  86. UcOscAdjFlg = 0; /* Osc adj flag */
  87. #ifdef DEF_SET
  88. /*OSC ENABLE */
  89. RegWriteA_LC898122AF(OSCSTOP, 0x00); /* 0x0256 */
  90. RegWriteA_LC898122AF(OSCSET, 0x90); /* 0x0257 OSC ini */
  91. RegWriteA_LC898122AF(OSCCNTEN, 0x00); /* 0x0258 OSC Cnt disable */
  92. #endif
  93. /*Clock Enables */
  94. RegWriteA_LC898122AF(CLKON, 0x1F); /* 0x020B */
  95. #ifdef USE_EXTCLK_ALL
  96. RegWriteA_LC898122AF(CLKSEL, 0x07); /* 0x020C All */
  97. #else
  98. #ifdef USE_EXTCLK_PWM
  99. RegWriteA_LC898122AF(CLKSEL, 0x01); /* 0x020C only PWM */
  100. #else
  101. #ifdef DEF_SET
  102. RegWriteA_LC898122AF(CLKSEL, 0x00); /* 0x020C */
  103. #endif
  104. #endif
  105. #endif
  106. #ifdef USE_EXTCLK_ALL /* 24MHz */
  107. RegWriteA_LC898122AF(PWMDIV, 0x00); /* 0x0210 24MHz/1 */
  108. RegWriteA_LC898122AF(SRVDIV, 0x00); /* 0x0211 24MHz/1 */
  109. RegWriteA_LC898122AF(GIFDIV, 0x02); /* 0x0212 24MHz/2 = 12MHz */
  110. RegWriteA_LC898122AF(AFPWMDIV, 0x00); /* 0x0213 24MHz/1 = 24MHz */
  111. RegWriteA_LC898122AF(OPAFDIV, 0x02); /* 0x0214 24MHz/2 = 12MHz */
  112. #else
  113. #ifdef DEF_SET
  114. RegWriteA_LC898122AF(PWMDIV, 0x00); /* 0x0210 48MHz/1 */
  115. RegWriteA_LC898122AF(SRVDIV, 0x00); /* 0x0211 48MHz/1 */
  116. RegWriteA_LC898122AF(GIFDIV, 0x03); /* 0x0212 48MHz/3 = 16MHz */
  117. #ifdef AF_PWMMODE
  118. RegWriteA_LC898122AF(AFPWMDIV, 0x00); /* 0x0213 48MHz/1 */
  119. #else
  120. RegWriteA_LC898122AF(AFPWMDIV, 0x02); /* 0x0213 48MHz/2 = 24MHz */
  121. #endif
  122. RegWriteA_LC898122AF(OPAFDIV, 0x04); /* 0x0214 48MHz/4 = 12MHz */
  123. #endif
  124. #endif
  125. }
  126. /* ******************************************************************************** */
  127. /* Function Name : IniIop */
  128. /* Retun Value : NON */
  129. /* Argment Value : NON */
  130. /* Explanation : I/O Port Initial Setting */
  131. /* History : First edition 2013.01.08 Y.Shigeoka */
  132. /* ******************************************************************************** */
  133. void IniIop(void)
  134. {
  135. #ifdef DEF_SET
  136. /*set IOP direction */
  137. RegWriteA_LC898122AF(P0LEV, 0x00); /* 0x0220 [ - | - | WLEV5 | WLEV4 ][ WLEV3 | WLEV2 | WLEV1 | WLEV0 ] */
  138. RegWriteA_LC898122AF(P0DIR, 0x00); /* 0x0221 [ - | - | DIR5 | DIR4 ][ DIR3 | DIR2 | DIR1 | DIR0 ] */
  139. /*set pull up/down */
  140. RegWriteA_LC898122AF(P0PON, 0x0F); /* 0x0222 [ - | - | PON5 | PON4 ][ PON3 | PON2 | PON1 | PON0 ] */
  141. RegWriteA_LC898122AF(P0PUD, 0x0F); /* 0x0223 [ - | - | PUD5 | PUD4 ][ PUD3 | PUD2 | PUD1 | PUD0 ] */
  142. #endif
  143. /*select IOP signal */
  144. #ifdef USE_3WIRE_DGYRO
  145. RegWriteA_LC898122AF(IOP1SEL, 0x02); /* 0x0231 IOP1 : IOP1 */
  146. #else
  147. RegWriteA_LC898122AF(IOP1SEL, 0x00); /* 0x0231 IOP1 : DGDATAIN (ATT:0236h[0]=1) */
  148. #endif
  149. #ifdef DEF_SET
  150. RegWriteA_LC898122AF(IOP0SEL, 0x02); /* 0x0230 IOP0 : IOP0 */
  151. RegWriteA_LC898122AF(IOP2SEL, 0x02); /* 0x0232 IOP2 : IOP2 */
  152. RegWriteA_LC898122AF(IOP3SEL, 0x00); /* 0x0233 IOP3 : DGDATAOUT */
  153. RegWriteA_LC898122AF(IOP4SEL, 0x00); /* 0x0234 IOP4 : DGSCLK */
  154. RegWriteA_LC898122AF(IOP5SEL, 0x00); /* 0x0235 IOP5 : DGSSB */
  155. RegWriteA_LC898122AF(DGINSEL, 0x00); /* 0x0236 DGDATAIN 0:IOP1 1:IOP2 */
  156. RegWriteA_LC898122AF(I2CSEL, 0x00); /* 0x0248 I2C noise reduction ON */
  157. RegWriteA_LC898122AF(DLMODE, 0x00); /* 0x0249 Download OFF */
  158. #endif
  159. }
  160. /* ******************************************************************************** */
  161. /* Function Name : IniDgy */
  162. /* Retun Value : NON */
  163. /* Argment Value : NON */
  164. /* Explanation : Digital Gyro Initial Setting */
  165. /* History : First edition 2013.01.08 Y.Shigeoka */
  166. /* ******************************************************************************** */
  167. void IniDgy(void)
  168. {
  169. #ifdef USE_INVENSENSE
  170. unsigned char UcGrini;
  171. #endif
  172. /*************/
  173. /*For ST gyro */
  174. /*************/
  175. /*Set SPI Type */
  176. #ifdef USE_3WIRE_DGYRO
  177. RegWriteA_LC898122AF(SPIM, 0x00); /* 0x028F [ - | - | - | - ][ - | - | - | DGSPI4 ] */
  178. #else
  179. RegWriteA_LC898122AF(SPIM, 0x01); /* 0x028F [ - | - | - | - ][ - | - | - | DGSPI4 ] */
  180. #endif
  181. /* DGSPI4 0: 3-wire SPI, 1: 4-wire SPI */
  182. /*Set to Command Mode */
  183. RegWriteA_LC898122AF(GRSEL, 0x01); /* 0x0280 [ - | - | - | - ][ - | SRDMOE | OISMODE | COMMODE ] */
  184. /*Digital Gyro Read settings */
  185. RegWriteA_LC898122AF(GRINI, 0x80); /* 0x0281 [ PARA_REG | AXIS7EN | AXIS4EN | - ][ - | SLOWMODE | - | - ] */
  186. #ifdef USE_INVENSENSE
  187. RegReadA_LC898122AF(GRINI, &UcGrini); /* 0x0281 [ PARA_REG | AXIS7EN | AXIS4EN | - ][ - | SLOWMODE | - | - ] */
  188. RegWriteA_LC898122AF(GRINI, (UcGrini | SLOWMODE));
  189. /* 0x0281 [ PARA_REG | AXIS7EN | AXIS4EN | - ][ - | SLOWMODE | - | - ] */
  190. RegWriteA_LC898122AF(GRADR0, 0x6A); /* 0x0283 Set I2C_DIS */
  191. RegWriteA_LC898122AF(GSETDT, 0x10); /* 0x028A Set Write Data */
  192. RegWriteA_LC898122AF(GRACC, 0x10); /* 0x0282 Set Trigger ON */
  193. AccWit(0x10); /* Digital Gyro busy wait */
  194. RegWriteA_LC898122AF(GRADR0, 0x1B); /* 0x0283 Set GYRO_CONFIG */
  195. RegWriteA_LC898122AF(GSETDT, (FS_SEL << 3)); /* 0x028A Set Write Data */
  196. RegWriteA_LC898122AF(GRACC, 0x10); /* 0x0282 Set Trigger ON */
  197. AccWit(0x10); /* Digital Gyro busy wait */
  198. RegReadA_LC898122AF(GRINI, &UcGrini); /* 0x0281 [ PARA_REG | AXIS7EN | AXIS4EN | - ][ - | SLOWMODE | - | - ] */
  199. RegWriteA_LC898122AF(GRINI, (UcGrini & ~SLOWMODE));
  200. /* 0x0281 [ PARA_REG | AXIS7EN | AXIS4EN | - ][ - | SLOWMODE | - | - ] */
  201. #endif
  202. RegWriteA_LC898122AF(RDSEL, 0x7C); /* 0x028B RDSEL(Data1 and 2 for continuos mode) */
  203. GyOutSignal();
  204. }
  205. /* ******************************************************************************** */
  206. /* Function Name : IniMon */
  207. /* Retun Value : NON */
  208. /* Argment Value : NON */
  209. /* Explanation : Monitor & Other Initial Setting */
  210. /* History : First edition 2013.01.08 Y.Shigeoka */
  211. /* ******************************************************************************** */
  212. void IniMon(void)
  213. {
  214. RegWriteA_LC898122AF(PWMMONA, 0x00); /* 0x0030 0:off */
  215. RegWriteA_LC898122AF(MONSELA, 0x5C); /* 0x0270 DLYMON1 */
  216. RegWriteA_LC898122AF(MONSELB, 0x5D); /* 0x0271 DLYMON2 */
  217. RegWriteA_LC898122AF(MONSELC, 0x00); /* 0x0272 */
  218. RegWriteA_LC898122AF(MONSELD, 0x00); /* 0x0273 */
  219. /* Monitor Circuit */
  220. RegWriteA_LC898122AF(WC_PINMON1, 0x00); /* 0x01C0 Filter Monitor */
  221. RegWriteA_LC898122AF(WC_PINMON2, 0x00); /* 0x01C1 */
  222. RegWriteA_LC898122AF(WC_PINMON3, 0x00); /* 0x01C2 */
  223. RegWriteA_LC898122AF(WC_PINMON4, 0x00); /* 0x01C3 */
  224. /* Delay Monitor */
  225. RegWriteA_LC898122AF(WC_DLYMON11, 0x04); /* 0x01C5 DlyMonAdd1[10:8] */
  226. RegWriteA_LC898122AF(WC_DLYMON10, 0x40); /* 0x01C4 DlyMonAdd1[ 7:0] */
  227. RegWriteA_LC898122AF(WC_DLYMON21, 0x04); /* 0x01C7 DlyMonAdd2[10:8] */
  228. RegWriteA_LC898122AF(WC_DLYMON20, 0xC0); /* 0x01C6 DlyMonAdd2[ 7:0] */
  229. RegWriteA_LC898122AF(WC_DLYMON31, 0x00); /* 0x01C9 DlyMonAdd3[10:8] */
  230. RegWriteA_LC898122AF(WC_DLYMON30, 0x00); /* 0x01C8 DlyMonAdd3[ 7:0] */
  231. RegWriteA_LC898122AF(WC_DLYMON41, 0x00); /* 0x01CB DlyMonAdd4[10:8] */
  232. RegWriteA_LC898122AF(WC_DLYMON40, 0x00); /* 0x01CA DlyMonAdd4[ 7:0] */
  233. /* Monitor */
  234. RegWriteA_LC898122AF(PWMMONA, 0x80); /* 0x0030 1:on */
  235. /* RegWriteA_LC898122AF( IOP0SEL, 0x01 ); // 0x0230 IOP0 : MONA */
  236. /**/}
  237. /* ******************************************************************************** */
  238. /* Function Name : IniSrv */
  239. /* Retun Value : NON */
  240. /* Argment Value : NON */
  241. /* Explanation : Servo Initial Setting */
  242. /* History : First edition 2013.01.08 Y.Shigeoka */
  243. /* ******************************************************************************** */
  244. void IniSrv(void)
  245. {
  246. unsigned char UcStbb0;
  247. UcPwmMod = INIT_PWMMODE; /* Driver output mode */
  248. RegWriteA_LC898122AF(WC_EQON, 0x00); /* 0x0101 Filter Calcu */
  249. RegWriteA_LC898122AF(WC_RAMINITON, 0x00); /* 0x0102 */
  250. ClrGyr(0x0000, CLR_ALL_RAM); /* All Clear */
  251. RegWriteA_LC898122AF(WH_EQSWX, 0x02); /* 0x0170 [ - | - | Sw5 | Sw4 ][ Sw3 | Sw2 | Sw1 | Sw0 ] */
  252. RegWriteA_LC898122AF(WH_EQSWY, 0x02); /* 0x0171 [ - | - | Sw5 | Sw4 ][ Sw3 | Sw2 | Sw1 | Sw0 ] */
  253. RamAccFixMod(OFF); /* 32bit Float mode */
  254. /* Monitor Gain */
  255. RamWrite32A_LC898122AF(dm1g, 0x3F800000); /* 0x109A */
  256. RamWrite32A_LC898122AF(dm2g, 0x3F800000); /* 0x109B */
  257. RamWrite32A_LC898122AF(dm3g, 0x3F800000); /* 0x119A */
  258. RamWrite32A_LC898122AF(dm4g, 0x3F800000); /* 0x119B */
  259. /* Hall output limitter */
  260. RamWrite32A_LC898122AF(sxlmta1, 0x3F800000); /* 0x10E6 Hall X output Limit */
  261. RamWrite32A_LC898122AF(sylmta1, 0x3F800000); /* 0x11E6 Hall Y output Limit */
  262. /* Emargency Stop */
  263. RegWriteA_LC898122AF(WH_EMGSTPON, 0x00); /* 0x0178 Emargency Stop OFF */
  264. RegWriteA_LC898122AF(WH_EMGSTPTMR, 0xFF); /* 0x017A 255*(16/23.4375kHz)=174ms */
  265. RamWrite32A_LC898122AF(sxemglev, 0x3F800000); /* 0x10EC Hall X Emargency threshold */
  266. RamWrite32A_LC898122AF(syemglev, 0x3F800000); /* 0x11EC Hall Y Emargency threshold */
  267. /* Hall Servo smoothing */
  268. RegWriteA_LC898122AF(WH_SMTSRVON, 0x00); /* 0x017C Smooth Servo OFF */
  269. #ifdef USE_EXTCLK_ALL /* 24MHz */
  270. RegWriteA_LC898122AF(WH_SMTSRVSMP, 0x03); /* 0x017D 2.7ms=2^03/11.718kHz */
  271. RegWriteA_LC898122AF(WH_SMTTMR, 0x00); /* 0x017E 1.3ms=(0+1)*16/11.718kHz */
  272. #else
  273. RegWriteA_LC898122AF(WH_SMTSRVSMP, 0x06); /* 0x017D 2.7ms=2^06/23.4375kHz */
  274. RegWriteA_LC898122AF(WH_SMTTMR, 0x01); /* 0x017E 1.3ms=(1+1)*16/23.4375kHz */
  275. #endif
  276. RamWrite32A_LC898122AF(sxsmtav, 0xBC800000); /* 0x10ED 1/64 X smoothing ave coefficient */
  277. RamWrite32A_LC898122AF(sysmtav, 0xBC800000); /* 0x11ED 1/64 Y smoothing ave coefficient */
  278. RamWrite32A_LC898122AF(sxsmtstp, 0x3AE90466); /* 0x10EE 0.001778 X smoothing offset */
  279. RamWrite32A_LC898122AF(sysmtstp, 0x3AE90466); /* 0x11EE 0.001778 Y smoothing offset */
  280. /* High-dimensional correction */
  281. RegWriteA_LC898122AF(WH_HOFCON, 0x11); /* 0x0174 OUT 3x3 */
  282. /* Front */
  283. RamWrite32A_LC898122AF(sxiexp3, A3_IEXP3); /* 0x10BA */
  284. RamWrite32A_LC898122AF(sxiexp2, 0x00000000); /* 0x10BB */
  285. RamWrite32A_LC898122AF(sxiexp1, A1_IEXP1); /* 0x10BC */
  286. RamWrite32A_LC898122AF(sxiexp0, 0x00000000); /* 0x10BD */
  287. RamWrite32A_LC898122AF(sxiexp, 0x3F800000); /* 0x10BE */
  288. RamWrite32A_LC898122AF(syiexp3, A3_IEXP3); /* 0x11BA */
  289. RamWrite32A_LC898122AF(syiexp2, 0x00000000); /* 0x11BB */
  290. RamWrite32A_LC898122AF(syiexp1, A1_IEXP1); /* 0x11BC */
  291. RamWrite32A_LC898122AF(syiexp0, 0x00000000); /* 0x11BD */
  292. RamWrite32A_LC898122AF(syiexp, 0x3F800000); /* 0x11BE */
  293. /* Back */
  294. RamWrite32A_LC898122AF(sxoexp3, A3_IEXP3); /* 0x10FA */
  295. RamWrite32A_LC898122AF(sxoexp2, 0x00000000); /* 0x10FB */
  296. RamWrite32A_LC898122AF(sxoexp1, A1_IEXP1); /* 0x10FC */
  297. RamWrite32A_LC898122AF(sxoexp0, 0x00000000); /* 0x10FD */
  298. RamWrite32A_LC898122AF(sxoexp, 0x3F800000); /* 0x10FE */
  299. RamWrite32A_LC898122AF(syoexp3, A3_IEXP3); /* 0x11FA */
  300. RamWrite32A_LC898122AF(syoexp2, 0x00000000); /* 0x11FB */
  301. RamWrite32A_LC898122AF(syoexp1, A1_IEXP1); /* 0x11FC */
  302. RamWrite32A_LC898122AF(syoexp0, 0x00000000); /* 0x11FD */
  303. RamWrite32A_LC898122AF(syoexp, 0x3F800000); /* 0x11FE */
  304. /* Sine wave */
  305. #ifdef DEF_SET
  306. RegWriteA_LC898122AF(WC_SINON, 0x00); /* 0x0180 Sin Wave off */
  307. RegWriteA_LC898122AF(WC_SINFRQ0, 0x00); /* 0x0181 */
  308. RegWriteA_LC898122AF(WC_SINFRQ1, 0x60); /* 0x0182 */
  309. RegWriteA_LC898122AF(WC_SINPHSX, 0x00); /* 0x0183 */
  310. RegWriteA_LC898122AF(WC_SINPHSY, 0x20); /* 0x0184 */
  311. /* AD over sampling */
  312. RegWriteA_LC898122AF(WC_ADMODE, 0x06); /* 0x0188 AD Over Sampling */
  313. /* Measure mode */
  314. RegWriteA_LC898122AF(WC_MESMODE, 0x00); /* 0x0190 Measurement Mode */
  315. RegWriteA_LC898122AF(WC_MESSINMODE, 0x00); /* 0x0191 */
  316. RegWriteA_LC898122AF(WC_MESLOOP0, 0x08); /* 0x0192 */
  317. RegWriteA_LC898122AF(WC_MESLOOP1, 0x02); /* 0x0193 */
  318. RegWriteA_LC898122AF(WC_MES1ADD0, 0x00); /* 0x0194 */
  319. RegWriteA_LC898122AF(WC_MES1ADD1, 0x00); /* 0x0195 */
  320. RegWriteA_LC898122AF(WC_MES2ADD0, 0x00); /* 0x0196 */
  321. RegWriteA_LC898122AF(WC_MES2ADD1, 0x00); /* 0x0197 */
  322. RegWriteA_LC898122AF(WC_MESABS, 0x00); /* 0x0198 */
  323. RegWriteA_LC898122AF(WC_MESWAIT, 0x00); /* 0x0199 */
  324. /* auto measure */
  325. RegWriteA_LC898122AF(WC_AMJMODE, 0x00); /* 0x01A0 Automatic measurement mode */
  326. RegWriteA_LC898122AF(WC_AMJLOOP0, 0x08); /* 0x01A2 Self-Aadjustment */
  327. RegWriteA_LC898122AF(WC_AMJLOOP1, 0x02); /* 0x01A3 */
  328. RegWriteA_LC898122AF(WC_AMJIDL0, 0x02); /* 0x01A4 */
  329. RegWriteA_LC898122AF(WC_AMJIDL1, 0x00); /* 0x01A5 */
  330. RegWriteA_LC898122AF(WC_AMJ1ADD0, 0x00); /* 0x01A6 */
  331. RegWriteA_LC898122AF(WC_AMJ1ADD1, 0x00); /* 0x01A7 */
  332. RegWriteA_LC898122AF(WC_AMJ2ADD0, 0x00); /* 0x01A8 */
  333. RegWriteA_LC898122AF(WC_AMJ2ADD1, 0x00); /* 0x01A9 */
  334. /* Data Pass */
  335. RegWriteA_LC898122AF(WC_DPI1ADD0, 0x00); /* 0x01B0 Data Pass */
  336. RegWriteA_LC898122AF(WC_DPI1ADD1, 0x00); /* 0x01B1 */
  337. RegWriteA_LC898122AF(WC_DPI2ADD0, 0x00); /* 0x01B2 */
  338. RegWriteA_LC898122AF(WC_DPI2ADD1, 0x00); /* 0x01B3 */
  339. RegWriteA_LC898122AF(WC_DPI3ADD0, 0x00); /* 0x01B4 */
  340. RegWriteA_LC898122AF(WC_DPI3ADD1, 0x00); /* 0x01B5 */
  341. RegWriteA_LC898122AF(WC_DPI4ADD0, 0x00); /* 0x01B6 */
  342. RegWriteA_LC898122AF(WC_DPI4ADD1, 0x00); /* 0x01B7 */
  343. RegWriteA_LC898122AF(WC_DPO1ADD0, 0x00); /* 0x01B8 Data Pass */
  344. RegWriteA_LC898122AF(WC_DPO1ADD1, 0x00); /* 0x01B9 */
  345. RegWriteA_LC898122AF(WC_DPO2ADD0, 0x00); /* 0x01BA */
  346. RegWriteA_LC898122AF(WC_DPO2ADD1, 0x00); /* 0x01BB */
  347. RegWriteA_LC898122AF(WC_DPO3ADD0, 0x00); /* 0x01BC */
  348. RegWriteA_LC898122AF(WC_DPO3ADD1, 0x00); /* 0x01BD */
  349. RegWriteA_LC898122AF(WC_DPO4ADD0, 0x00); /* 0x01BE */
  350. RegWriteA_LC898122AF(WC_DPO4ADD1, 0x00); /* 0x01BF */
  351. RegWriteA_LC898122AF(WC_DPON, 0x00); /* 0x0105 Data pass OFF */
  352. /* Interrupt Flag */
  353. RegWriteA_LC898122AF(WC_INTMSK, 0xFF); /* 0x01CE All Mask */
  354. #endif
  355. /* Ram Access */
  356. RamAccFixMod(OFF); /* 32bit float mode */
  357. /* PWM Signal Generate */
  358. DrvSw(OFF); /* 0x0070 Drvier Block Ena=0 */
  359. RegWriteA_LC898122AF(DRVFC2, 0x90); /* 0x0002 Slope 3, Dead Time = 30 ns */
  360. RegWriteA_LC898122AF(DRVSELX, 0xFF); /* 0x0003 PWM X drv max current DRVSELX[7:0] */
  361. RegWriteA_LC898122AF(DRVSELY, 0xFF); /* 0x0004 PWM Y drv max current DRVSELY[7:0] */
  362. #ifdef PWM_BREAK
  363. #ifdef PWM_CAREER_TEST
  364. RegWriteA_LC898122AF(PWMFC, 0x7C);
  365. /* 0x0011 VREF, PWMFRQ=7:PWMCLK(EXCLK)/PWMPERIODX[5:2]=18MHz/4=4.5MHz, MODE0B, 11-bit Accuracy */
  366. #else /* PWM_CAREER_TEST */
  367. if (UcCvrCod == CVER122)
  368. RegWriteA_LC898122AF(PWMFC, 0x2D); /* 0x0011 VREF, PWMCLK/256, MODE0B, 12Bit Accuracy */
  369. else
  370. RegWriteA_LC898122AF(PWMFC, 0x3D); /* 0x0011 VREF, PWMCLK/128, MODE0B, 12Bit Accuracy */
  371. #endif /* PWM_CAREER_TEST */
  372. #else
  373. RegWriteA_LC898122AF(PWMFC, 0x21); /* 0x0011 VREF, PWMCLK/256, MODE1, 12Bit Accuracy */
  374. #endif
  375. #ifdef USE_VH_SYNC
  376. RegWriteA_LC898122AF(STROBEFC, 0x80); /* 0x001C 外?入力Strobe信?の有効 */
  377. RegWriteA_LC898122AF(STROBEDLYX, 0x00); /* 0x001D Delay */
  378. RegWriteA_LC898122AF(STROBEDLYY, 0x00); /* 0x001E Delay */
  379. #endif /* USE_VH_SYNC */
  380. RegWriteA_LC898122AF(PWMA, 0x00); /* 0x0010 PWM X/Y standby */
  381. RegWriteA_LC898122AF(PWMDLYX, 0x04); /* 0x0012 X Phase Delay Setting */
  382. RegWriteA_LC898122AF(PWMDLYY, 0x04); /* 0x0013 Y Phase Delay Setting */
  383. #ifdef DEF_SET
  384. RegWriteA_LC898122AF(DRVCH1SEL, 0x00); /* 0x0005 OUT1/OUT2 X axis */
  385. RegWriteA_LC898122AF(DRVCH2SEL, 0x00); /* 0x0006 OUT3/OUT4 Y axis */
  386. RegWriteA_LC898122AF(PWMDLYTIMX, 0x00); /* 0x0014 PWM Timing */
  387. RegWriteA_LC898122AF(PWMDLYTIMY, 0x00); /* 0x0015 PWM Timing */
  388. #endif
  389. if (UcCvrCod == CVER122) {
  390. #ifdef PWM_CAREER_TEST
  391. RegWriteA_LC898122AF(PWMPERIODY, 0xD0); /* 0x001A 11010000h --> PWMPERIODX[5:2] = 0100h = 4 */
  392. RegWriteA_LC898122AF(PWMPERIODY2, 0xD0); /* 0x001B 11010000h --> PWMPERIODY[5:2] = 0100h = 4 */
  393. #else /* PWM_CAREER_TEST */
  394. RegWriteA_LC898122AF(PWMPERIODY, 0x00); /* 0x001A PWM Carrier Freq */
  395. RegWriteA_LC898122AF(PWMPERIODY2, 0x00); /* 0x001B PWM Carrier Freq */
  396. #endif
  397. } else {
  398. #ifdef PWM_CAREER_TEST
  399. RegWriteA_LC898122AF(PWMPERIODX, 0xF2); /* 0x0018 PWM Carrier Freq */
  400. RegWriteA_LC898122AF(PWMPERIODX2, 0x00); /* 0x0019 PWM Carrier Freq */
  401. RegWriteA_LC898122AF(PWMPERIODY, 0xF2); /* 0x001A PWM Carrier Freq */
  402. RegWriteA_LC898122AF(PWMPERIODY2, 0x00); /* 0x001B PWM Carrier Freq */
  403. #else /* PWM_CAREER_TEST */
  404. RegWriteA_LC898122AF(PWMPERIODX, 0x00); /* 0x0018 PWM Carrier Freq */
  405. RegWriteA_LC898122AF(PWMPERIODX2, 0x00); /* 0x0019 PWM Carrier Freq */
  406. RegWriteA_LC898122AF(PWMPERIODY, 0x00); /* 0x001A PWM Carrier Freq */
  407. RegWriteA_LC898122AF(PWMPERIODY2, 0x00); /* 0x001B PWM Carrier Freq */
  408. #endif
  409. }
  410. /* Linear PWM circuit setting */
  411. RegWriteA_LC898122AF(CVA, 0xC0); /* 0x0020 Linear PWM mode enable */
  412. if (UcCvrCod == CVER122)
  413. RegWriteA_LC898122AF(CVFC, 0x22); /* 0x0021 */
  414. RegWriteA_LC898122AF(CVFC2, 0x80); /* 0x0022 */
  415. if (UcCvrCod == CVER122) {
  416. RegWriteA_LC898122AF(CVSMTHX, 0x00); /* 0x0023 smooth off */
  417. RegWriteA_LC898122AF(CVSMTHY, 0x00); /* 0x0024 smooth off */
  418. }
  419. RegReadA_LC898122AF(STBB0, &UcStbb0);
  420. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  421. UcStbb0 &= 0x80;
  422. RegWriteA_LC898122AF(STBB0, UcStbb0); /* 0x0250 OIS standby */
  423. }
  424. /* ******************************************************************************** */
  425. /* Function Name : IniGyr */
  426. /* Retun Value : NON */
  427. /* Argment Value : NON */
  428. /* Explanation : Gyro Filter Setting Initialize Function */
  429. /* History : First edition 2013.01.09 Y.Shigeoka */
  430. /* ******************************************************************************** */
  431. #ifdef GAIN_CONT
  432. #define TRI_LEVEL 0x3A031280 /* 0.0005 */
  433. #define TIMELOW 0x50 /* */
  434. #define TIMEHGH 0x05 /* */
  435. #ifdef USE_EXTCLK_ALL /* 24MHz */
  436. #define TIMEBSE 0x2F /* 4.0ms */
  437. #else
  438. #define TIMEBSE 0x5D /* 3.96ms */
  439. #endif
  440. #define MONADR GXXFZ
  441. #define GANADR gxadj
  442. #define XMINGAIN 0x00000000
  443. #define XMAXGAIN 0x3F800000
  444. #define YMINGAIN 0x00000000
  445. #define YMAXGAIN 0x3F800000
  446. #define XSTEPUP 0x38D1B717 /* 0.0001 */
  447. #define XSTEPDN 0xBD4CCCCD /* -0.05 */
  448. #define YSTEPUP 0x38D1B717 /* 0.0001 */
  449. #define YSTEPDN 0xBD4CCCCD /* -0.05 */
  450. #endif
  451. void IniGyr(void)
  452. {
  453. /*Gyro Filter Setting */
  454. RegWriteA_LC898122AF(WG_EQSW, 0x03); /* 0x0110 [ - | Sw6 | Sw5 | Sw4 ][ Sw3 | Sw2 | Sw1 | Sw0 ] */
  455. /*Gyro Filter Down Sampling */
  456. RegWriteA_LC898122AF(WG_SHTON, 0x10); /* 0x0107 [ - | - | - | CmSht2PanOff ][ - | - | CmShtOpe(1:0) ] */
  457. /* CmShtOpe[1:0] 00: シ?ッターOFF, 01: シ?ッターON, 1x:外?制御 */
  458. #ifdef DEF_SET
  459. RegWriteA_LC898122AF(WG_SHTDLYTMR, 0x00); /* 0x0117 Shutter Delay */
  460. RegWriteA_LC898122AF(WG_GADSMP, 0x00); /* 0x011C Sampling timing */
  461. RegWriteA_LC898122AF(WG_HCHR, 0x00); /* 0x011B H-filter limitter control not USE */
  462. RegWriteA_LC898122AF(WG_LMT3MOD, 0x00); /* 0x0118 [ - | - | - | - ][ - | - | - | CmLmt3Mod ] */
  463. /* CmLmt3Mod 0: 通常?ミッター動作, 1: 円の半径?ミッター動作 */
  464. RegWriteA_LC898122AF(WG_VREFADD, 0x12);
  465. /* 0x0119 セ?ター行う遅?RAMのアド?ス下位6ビット (default 0x12 = GXH1Z2/GYH1Z2) */
  466. #endif
  467. RegWriteA_LC898122AF(WG_SHTMOD, 0x06); /* 0x0116 Shutter Hold mode */
  468. /* Limiter */
  469. RamWrite32A_LC898122AF(gxlmt1H, GYRLMT1H); /* 0x1028 */
  470. RamWrite32A_LC898122AF(gylmt1H, GYRLMT1H); /* 0x1128 */
  471. RamWrite32A_LC898122AF(gxlmt3HS0, GYRLMT3_S1); /* 0x1029 */
  472. RamWrite32A_LC898122AF(gylmt3HS0, GYRLMT3_S1); /* 0x1129 */
  473. RamWrite32A_LC898122AF(gxlmt3HS1, GYRLMT3_S2); /* 0x102A */
  474. RamWrite32A_LC898122AF(gylmt3HS1, GYRLMT3_S2); /* 0x112A */
  475. RamWrite32A_LC898122AF(gylmt4HS0, GYRLMT4_S1); /* 0x112B Y軸Limiter4 High?値0 */
  476. RamWrite32A_LC898122AF(gxlmt4HS0, GYRLMT4_S1); /* 0x102B X軸Limiter4 High?値0 */
  477. RamWrite32A_LC898122AF(gxlmt4HS1, GYRLMT4_S2); /* 0x102C X軸Limiter4 High?値1 */
  478. RamWrite32A_LC898122AF(gylmt4HS1, GYRLMT4_S2); /* 0x112C Y軸Limiter4 High?値1 */
  479. /* Pan/Tilt parameter */
  480. RegWriteA_LC898122AF(WG_PANADDA, 0x12); /* 0x0130 GXH1Z2/GYH1Z2 Select */
  481. RegWriteA_LC898122AF(WG_PANADDB, 0x09); /* 0x0131 GXIZ/GYIZ Select */
  482. /* Threshold */
  483. RamWrite32A_LC898122AF(SttxHis, 0x00000000); /* 0x1226 */
  484. RamWrite32A_LC898122AF(SttxaL, 0x00000000); /* 0x109D */
  485. RamWrite32A_LC898122AF(SttxbL, 0x00000000); /* 0x109E */
  486. RamWrite32A_LC898122AF(Sttx12aM, GYRA12_MID); /* 0x104F */
  487. RamWrite32A_LC898122AF(Sttx12aH, GYRA12_HGH); /* 0x105F */
  488. RamWrite32A_LC898122AF(Sttx12bM, GYRB12_MID); /* 0x106F */
  489. RamWrite32A_LC898122AF(Sttx12bH, GYRB12_HGH); /* 0x107F */
  490. RamWrite32A_LC898122AF(Sttx34aM, GYRA34_MID); /* 0x108F */
  491. RamWrite32A_LC898122AF(Sttx34aH, GYRA34_HGH); /* 0x109F */
  492. RamWrite32A_LC898122AF(Sttx34bM, GYRB34_MID); /* 0x10AF */
  493. RamWrite32A_LC898122AF(Sttx34bH, GYRB34_HGH); /* 0x10BF */
  494. RamWrite32A_LC898122AF(SttyaL, 0x00000000); /* 0x119D */
  495. RamWrite32A_LC898122AF(SttybL, 0x00000000); /* 0x119E */
  496. RamWrite32A_LC898122AF(Stty12aM, GYRA12_MID); /* 0x114F */
  497. RamWrite32A_LC898122AF(Stty12aH, GYRA12_HGH); /* 0x115F */
  498. RamWrite32A_LC898122AF(Stty12bM, GYRB12_MID); /* 0x116F */
  499. RamWrite32A_LC898122AF(Stty12bH, GYRB12_HGH); /* 0x117F */
  500. RamWrite32A_LC898122AF(Stty34aM, GYRA34_MID); /* 0x118F */
  501. RamWrite32A_LC898122AF(Stty34aH, GYRA34_HGH); /* 0x119F */
  502. RamWrite32A_LC898122AF(Stty34bM, GYRB34_MID); /* 0x11AF */
  503. RamWrite32A_LC898122AF(Stty34bH, GYRB34_HGH); /* 0x11BF */
  504. /* Pan level */
  505. RegWriteA_LC898122AF(WG_PANLEVABS, 0x00); /* 0x0133 */
  506. /* Average parameter are set IniAdj */
  507. /* Phase Transition Setting */
  508. /* State 2 -> 1 */
  509. RegWriteA_LC898122AF(WG_PANSTT21JUG0, 0x00); /* 0x0140 */
  510. RegWriteA_LC898122AF(WG_PANSTT21JUG1, 0x00); /* 0x0141 */
  511. /* State 3 -> 1 */
  512. RegWriteA_LC898122AF(WG_PANSTT31JUG0, 0x00); /* 0x0142 */
  513. RegWriteA_LC898122AF(WG_PANSTT31JUG1, 0x00); /* 0x0143 */
  514. /* State 4 -> 1 */
  515. RegWriteA_LC898122AF(WG_PANSTT41JUG0, 0x01); /* 0x0144 */
  516. RegWriteA_LC898122AF(WG_PANSTT41JUG1, 0x00); /* 0x0145 */
  517. /* State 1 -> 2 */
  518. RegWriteA_LC898122AF(WG_PANSTT12JUG0, 0x00); /* 0x0146 */
  519. RegWriteA_LC898122AF(WG_PANSTT12JUG1, 0x07); /* 0x0147 */
  520. /* State 1 -> 3 */
  521. RegWriteA_LC898122AF(WG_PANSTT13JUG0, 0x00); /* 0x0148 */
  522. RegWriteA_LC898122AF(WG_PANSTT13JUG1, 0x00); /* 0x0149 */
  523. /* State 2 -> 3 */
  524. RegWriteA_LC898122AF(WG_PANSTT23JUG0, 0x11); /* 0x014A */
  525. RegWriteA_LC898122AF(WG_PANSTT23JUG1, 0x00); /* 0x014B */
  526. /* State 4 -> 3 */
  527. RegWriteA_LC898122AF(WG_PANSTT43JUG0, 0x00); /* 0x014C */
  528. RegWriteA_LC898122AF(WG_PANSTT43JUG1, 0x00); /* 0x014D */
  529. /* State 3 -> 4 */
  530. RegWriteA_LC898122AF(WG_PANSTT34JUG0, 0x01); /* 0x014E */
  531. RegWriteA_LC898122AF(WG_PANSTT34JUG1, 0x00); /* 0x014F */
  532. /* State 2 -> 4 */
  533. RegWriteA_LC898122AF(WG_PANSTT24JUG0, 0x00); /* 0x0150 */
  534. RegWriteA_LC898122AF(WG_PANSTT24JUG1, 0x00); /* 0x0151 */
  535. /* State 4 -> 2 */
  536. RegWriteA_LC898122AF(WG_PANSTT42JUG0, 0x44); /* 0x0152 */
  537. RegWriteA_LC898122AF(WG_PANSTT42JUG1, 0x04); /* 0x0153 */
  538. /* State Timer */
  539. RegWriteA_LC898122AF(WG_PANSTT1LEVTMR, 0x00); /* 0x015B */
  540. RegWriteA_LC898122AF(WG_PANSTT2LEVTMR, 0x00); /* 0x015C */
  541. RegWriteA_LC898122AF(WG_PANSTT3LEVTMR, 0x00); /* 0x015D */
  542. RegWriteA_LC898122AF(WG_PANSTT4LEVTMR, 0x03); /* 0x015E */
  543. /* Control filter */
  544. RegWriteA_LC898122AF(WG_PANTRSON0, 0x11); /* 0x0132 USE I12/iSTP/Gain-Filter */
  545. /* State Setting */
  546. IniPtMovMod(OFF); /* Pan/Tilt setting (Still) */
  547. /* Hold */
  548. RegWriteA_LC898122AF(WG_PANSTTSETILHLD, 0x00); /* 0x015F */
  549. /* State2,4 Step Time Setting */
  550. RegWriteA_LC898122AF(WG_PANSTT2TMR0, 0x01); /* 0x013C */
  551. RegWriteA_LC898122AF(WG_PANSTT2TMR1, 0x00); /* 0x013D */
  552. RegWriteA_LC898122AF(WG_PANSTT4TMR0, 0x02); /* 0x013E */
  553. RegWriteA_LC898122AF(WG_PANSTT4TMR1, 0x07); /* 0x013F */
  554. RegWriteA_LC898122AF(WG_PANSTTXXXTH, 0x00); /* 0x015A */
  555. #ifdef GAIN_CONT
  556. RamWrite32A_LC898122AF(gxlevlow, TRI_LEVEL); /* 0x10AE Low Th */
  557. RamWrite32A_LC898122AF(gylevlow, TRI_LEVEL); /* 0x11AE Low Th */
  558. RamWrite32A_LC898122AF(gxadjmin, XMINGAIN); /* 0x1094 Low gain */
  559. RamWrite32A_LC898122AF(gxadjmax, XMAXGAIN); /* 0x1095 Hgh gain */
  560. RamWrite32A_LC898122AF(gxadjdn, XSTEPDN); /* 0x1096 -step */
  561. RamWrite32A_LC898122AF(gxadjup, XSTEPUP); /* 0x1097 +step */
  562. RamWrite32A_LC898122AF(gyadjmin, YMINGAIN); /* 0x1194 Low gain */
  563. RamWrite32A_LC898122AF(gyadjmax, YMAXGAIN); /* 0x1195 Hgh gain */
  564. RamWrite32A_LC898122AF(gyadjdn, YSTEPDN); /* 0x1196 -step */
  565. RamWrite32A_LC898122AF(gyadjup, YSTEPUP); /* 0x1197 +step */
  566. RegWriteA_LC898122AF(WG_LEVADD, (unsigned char)MONADR); /* 0x0120 Input signal */
  567. RegWriteA_LC898122AF(WG_LEVTMR, TIMEBSE); /* 0x0123 Base Time */
  568. RegWriteA_LC898122AF(WG_LEVTMRLOW, TIMELOW); /* 0x0121 X Low Time */
  569. RegWriteA_LC898122AF(WG_LEVTMRHGH, TIMEHGH); /* 0x0122 X Hgh Time */
  570. RegWriteA_LC898122AF(WG_ADJGANADD, (unsigned char)GANADR); /* 0x0128 control address */
  571. RegWriteA_LC898122AF(WG_ADJGANGO, 0x00); /* 0x0108 manual off */
  572. /* exe function */
  573. /* AutoGainControlSw( OFF ) ; */ /* Auto Gain Control Mode OFF */
  574. AutoGainControlSw(ON); /* Auto Gain Control Mode ON */
  575. #endif
  576. }
  577. /* ******************************************************************************** */
  578. /* Function Name : IniFil */
  579. /* Retun Value : NON */
  580. /* Argment Value : NON */
  581. /* Explanation : Gyro Filter Initial Parameter Setting */
  582. /* History : First edition 2009.07.30 Y.Tashita */
  583. /* ******************************************************************************** */
  584. void IniFil(void)
  585. {
  586. unsigned short UsAryId;
  587. /* Filter Registor Parameter Setting */
  588. UsAryId = 0;
  589. while (CsFilReg[UsAryId].UsRegAdd != 0xFFFF) {
  590. RegWriteA_LC898122AF(CsFilReg[UsAryId].UsRegAdd, CsFilReg[UsAryId].UcRegDat);
  591. UsAryId++;
  592. }
  593. /* Filter Ram Parameter Setting */
  594. UsAryId = 0;
  595. while (CsFilRam[UsAryId].UsRamAdd != 0xFFFF) {
  596. RamWrite32A_LC898122AF(CsFilRam[UsAryId].UsRamAdd, CsFilRam[UsAryId].UlRamDat);
  597. UsAryId++;
  598. }
  599. }
  600. /* ******************************************************************************** */
  601. /* Function Name : IniAdj */
  602. /* Retun Value : NON */
  603. /* Argment Value : NON */
  604. /* Explanation : Adjust Value Setting */
  605. /* History : First edition 2009.07.30 Y.Tashita */
  606. /* ******************************************************************************** */
  607. void IniAdj(void)
  608. {
  609. RegWriteA_LC898122AF(WC_RAMACCXY, 0x00); /* 0x018D Filter copy off */
  610. IniPtAve(); /* Average setting */
  611. /* OIS */
  612. RegWriteA_LC898122AF(CMSDAC0, BIAS_CUR_OIS); /* 0x0251 Hall Dac電流 */
  613. RegWriteA_LC898122AF(OPGSEL0, AMP_GAIN_X); /* 0x0253 Hall amp Gain X */
  614. RegWriteA_LC898122AF(OPGSEL1, AMP_GAIN_Y); /* 0x0254 Hall amp Gain Y */
  615. /* AF */
  616. RegWriteA_LC898122AF(CMSDAC1, BIAS_CUR_AF); /* 0x0252 Hall Dac電流 */
  617. RegWriteA_LC898122AF(OPGSEL2, AMP_GAIN_AF); /* 0x0255 Hall amp Gain AF */
  618. RegWriteA_LC898122AF(OSCSET, OSC_INI); /* 0x0257 OSC ini */
  619. /* adjusted value */
  620. RegWriteA_LC898122AF(IZAH, DGYRO_OFST_XH); /* 0x02A0 Set Offset High byte */
  621. RegWriteA_LC898122AF(IZAL, DGYRO_OFST_XL); /* 0x02A1 Set Offset Low byte */
  622. RegWriteA_LC898122AF(IZBH, DGYRO_OFST_YH); /* 0x02A2 Set Offset High byte */
  623. RegWriteA_LC898122AF(IZBL, DGYRO_OFST_YL); /* 0x02A3 Set Offset Low byte */
  624. /* Ram Access */
  625. RamAccFixMod(ON); /* 16bit Fix mode */
  626. /* OIS adjusted parameter */
  627. RamWriteA_LC898122AF(DAXHLO, DAHLXO_INI); /* 0x1479 */
  628. RamWriteA_LC898122AF(DAXHLB, DAHLXB_INI); /* 0x147A */
  629. RamWriteA_LC898122AF(DAYHLO, DAHLYO_INI); /* 0x14F9 */
  630. RamWriteA_LC898122AF(DAYHLB, DAHLYB_INI); /* 0x14FA */
  631. RamWriteA_LC898122AF(OFF0Z, HXOFF0Z_INI); /* 0x1450 */
  632. RamWriteA_LC898122AF(OFF1Z, HYOFF1Z_INI); /* 0x14D0 */
  633. RamWriteA_LC898122AF(sxg, SXGAIN_INI); /* 0x10D3 */
  634. RamWriteA_LC898122AF(syg, SYGAIN_INI); /* 0x11D3 */
  635. /* UsCntXof = OPTCEN_X ; */ /* Clear Optical center X value */
  636. /* UsCntYof = OPTCEN_Y ; */ /* Clear Optical center Y value */
  637. /* RamWriteA_LC898122AF( SXOFFZ1, UsCntXof ) ; // 0x1461 */
  638. /* RamWriteA_LC898122AF( SYOFFZ1, UsCntYof ) ; // 0x14E1 */
  639. /* AF adjusted parameter */
  640. RamWriteA_LC898122AF(DAZHLO, DAHLZO_INI); /* 0x1529 */
  641. RamWriteA_LC898122AF(DAZHLB, DAHLZB_INI); /* 0x152A */
  642. /* Ram Access */
  643. RamAccFixMod(OFF); /* 32bit Float mode */
  644. RamWrite32A_LC898122AF(gxzoom, GXGAIN_INI); /* 0x1020 Gyro X axis Gain adjusted value */
  645. RamWrite32A_LC898122AF(gyzoom, GYGAIN_INI); /* 0x1120 Gyro Y axis Gain adjusted value */
  646. RamWrite32A_LC898122AF(sxq, SXQ_INI); /* 0x10E5 X axis output direction initial value */
  647. RamWrite32A_LC898122AF(syq, SYQ_INI); /* 0x11E5 Y axis output direction initial value */
  648. if (GXHY_GYHX) { /* GX -> HY , GY -> HX */
  649. RamWrite32A_LC898122AF(sxgx, 0x00000000); /* 0x10B8 */
  650. RamWrite32A_LC898122AF(sxgy, 0x3F800000); /* 0x10B9 */
  651. RamWrite32A_LC898122AF(sygy, 0x00000000); /* 0x11B8 */
  652. RamWrite32A_LC898122AF(sygx, 0x3F800000); /* 0x11B9 */
  653. }
  654. SetZsp(0); /* Zoom coefficient Initial Setting */
  655. RegWriteA_LC898122AF(PWMA, 0xC0); /* 0x0010 PWM enable */
  656. RegWriteA_LC898122AF(STBB0, 0xDF);
  657. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  658. RegWriteA_LC898122AF(WC_EQSW, 0x02); /* 0x01E0 */
  659. RegWriteA_LC898122AF(WC_MESLOOP1, 0x02); /* 0x0193 */
  660. RegWriteA_LC898122AF(WC_MESLOOP0, 0x00); /* 0x0192 */
  661. RegWriteA_LC898122AF(WC_AMJLOOP1, 0x02); /* 0x01A3 */
  662. RegWriteA_LC898122AF(WC_AMJLOOP0, 0x00); /* 0x01A2 */
  663. SetPanTiltMode(OFF); /* Pan/Tilt OFF */
  664. SetGcf(0); /* DI initial value */
  665. #ifdef H1COEF_CHANGER
  666. SetH1cMod(ACTMODE); /* Lvl Change Active mode */
  667. #endif
  668. DrvSw(ON); /* 0x0001 Driver Mode setting */
  669. RegWriteA_LC898122AF(WC_EQON, 0x01); /* 0x0101 Filter ON */
  670. }
  671. /* ******************************************************************************** */
  672. /* Function Name : IniCmd */
  673. /* Retun Value : NON */
  674. /* Argment Value : NON */
  675. /* Explanation : Command Execute Process Initial */
  676. /* History : First edition 2009.07.30 Y.Tashita */
  677. /* ******************************************************************************** */
  678. void IniCmd(void)
  679. {
  680. MemClr((unsigned char *)&StAdjPar, sizeof(stAdjPar)); /* Adjust Parameter Clear */
  681. }
  682. /* ******************************************************************************** */
  683. /* Function Name : BsyWit */
  684. /* Retun Value : NON */
  685. /* Argment Value : Trigger Register Address, Trigger Register Data */
  686. /* Explanation : Busy Wait Function */
  687. /* History : First edition 2013.01.09 Y.Shigeoka */
  688. /* ******************************************************************************** */
  689. void BsyWit(unsigned short UsTrgAdr, unsigned char UcTrgDat)
  690. {
  691. unsigned char UcFlgVal;
  692. RegWriteA_LC898122AF(UsTrgAdr, UcTrgDat); /* Trigger Register Setting */
  693. UcFlgVal = 1;
  694. while (UcFlgVal) {
  695. RegReadA_LC898122AF(UsTrgAdr, &UcFlgVal);
  696. UcFlgVal &= (UcTrgDat & 0x0F);
  697. };
  698. }
  699. /* ******************************************************************************** */
  700. /* Function Name : MemClr */
  701. /* Retun Value : void */
  702. /* Argment Value : Clear Target Pointer, Clear Byte Number */
  703. /* Explanation : Memory Clear Function */
  704. /* History : First edition 2009.07.30 Y.Tashita */
  705. /* ******************************************************************************** */
  706. void MemClr(unsigned char *NcTgtPtr, unsigned short UsClrSiz)
  707. {
  708. unsigned short UsClrIdx;
  709. for (UsClrIdx = 0; UsClrIdx < UsClrSiz; UsClrIdx++) {
  710. *NcTgtPtr = 0;
  711. NcTgtPtr++;
  712. }
  713. }
  714. /* ******************************************************************************** */
  715. /* Function Name : WitTim_LC898122AF */
  716. /* Retun Value : NON */
  717. /* Argment Value : Wait Time(ms) */
  718. /* Explanation : Timer Wait Function */
  719. /* History : First edition 2009.07.31 Y.Tashita */
  720. /* ******************************************************************************** */
  721. /*void WitTim_LC898122AF( unsigned short UsWitTim )
  722. {
  723. unsigned long UlLopIdx, UlWitCyc ;
  724. UlWitCyc = ( unsigned long )( ( float )UsWitTim / NOP_TIME / ( float )12 ) ;
  725. for( UlLopIdx = 0 ; UlLopIdx < UlWitCyc ; UlLopIdx++ )
  726. {
  727. ;
  728. }
  729. }*/
  730. /* ******************************************************************************** */
  731. /* Function Name : GyOutSignal */
  732. /* Retun Value : NON */
  733. /* Argment Value : NON */
  734. /* Explanation : Select Gyro Signal Function */
  735. /* History : First edition 2010.12.27 Y.Shigeoka */
  736. /* ******************************************************************************** */
  737. void GyOutSignal(void)
  738. {
  739. RegWriteA_LC898122AF(GRADR0, GYROX_INI); /* 0x0283 Set Gyro XOUT H~L */
  740. RegWriteA_LC898122AF(GRADR1, GYROY_INI); /* 0x0284 Set Gyro YOUT H~L */
  741. /*Start OIS Reading */
  742. RegWriteA_LC898122AF(GRSEL, 0x02); /* 0x0280 [ - | - | - | - ][ - | SRDMOE | OISMODE | COMMODE ] */
  743. }
  744. /* ******************************************************************************** */
  745. /* Function Name : GyOutSignalCont */
  746. /* Retun Value : NON */
  747. /* Argment Value : NON */
  748. /* Explanation : Select Gyro Continuosl Function */
  749. /* History : First edition 2013.06.06 Y.Shigeoka */
  750. /* ******************************************************************************** */
  751. void GyOutSignalCont(void)
  752. {
  753. /*Start OIS Reading */
  754. RegWriteA_LC898122AF(GRSEL, 0x04); /* 0x0280 [ - | - | - | - ][ - | SRDMOE | OISMODE | COMMODE ] */
  755. }
  756. #ifdef STANDBY_MODE
  757. /* ******************************************************************************** */
  758. /* Function Name : AccWit */
  759. /* Retun Value : NON */
  760. /* Argment Value : Trigger Register Data */
  761. /* Explanation : Acc Wait Function */
  762. /* History : First edition 2010.12.27 Y.Shigeoka */
  763. /* ******************************************************************************** */
  764. void AccWit(unsigned char UcTrgDat)
  765. {
  766. unsigned char UcFlgVal;
  767. UcFlgVal = 1;
  768. while (UcFlgVal) {
  769. RegReadA_LC898122AF(GRACC, &UcFlgVal); /* 0x0282 */
  770. UcFlgVal &= UcTrgDat;
  771. };
  772. }
  773. /* ******************************************************************************** */
  774. /* Function Name : SelectGySleep */
  775. /* Retun Value : NON */
  776. /* Argment Value : mode */
  777. /* Explanation : Select Gyro mode Function */
  778. /* History : First edition 2010.12.27 Y.Shigeoka */
  779. /* ******************************************************************************** */
  780. void SelectGySleep(unsigned char UcSelMode)
  781. {
  782. #ifdef USE_INVENSENSE
  783. unsigned char UcRamIni;
  784. unsigned char UcGrini;
  785. if (UcSelMode == ON) {
  786. RegWriteA_LC898122AF(WC_EQON, 0x00); /* 0x0101 Equalizer OFF */
  787. RegWriteA_LC898122AF(GRSEL, 0x01); /* 0x0280 Set Command Mode */
  788. RegReadA_LC898122AF(GRINI, &UcGrini);
  789. /* 0x0281 [ PARA_REG | AXIS7EN | AXIS4EN | - ][ - | SLOWMODE | - | - ] */
  790. RegWriteA_LC898122AF(GRINI, (UcGrini | SLOWMODE));
  791. /* 0x0281 [ PARA_REG | AXIS7EN | AXIS4EN | - ][ - | SLOWMODE | - | - ] */
  792. RegWriteA_LC898122AF(GRADR0, 0x6B); /* 0x0283 Set Write Command */
  793. RegWriteA_LC898122AF(GRACC, 0x01); /* 0x0282 Set Read Trigger ON */
  794. AccWit(0x01); /* Digital Gyro busy wait */
  795. RegReadA_LC898122AF(GRDAT0H, &UcRamIni); /* 0x0290 */
  796. UcRamIni |= 0x40; /* Set Sleep bit */
  797. #ifdef GYROSTBY
  798. UcRamIni &= ~0x01; /* Clear PLL bit(internal oscillator */
  799. #endif
  800. RegWriteA_LC898122AF(GRADR0, 0x6B); /* 0x0283 Set Write Command */
  801. RegWriteA_LC898122AF(GSETDT, UcRamIni); /* 0x028A Set Write Data(Sleep ON) */
  802. RegWriteA_LC898122AF(GRACC, 0x10); /* 0x0282 Set Trigger ON */
  803. AccWit(0x10); /* Digital Gyro busy wait */
  804. #ifdef GYROSTBY
  805. RegWriteA_LC898122AF(GRADR0, 0x6C); /* 0x0283 Set Write Command */
  806. RegWriteA_LC898122AF(GSETDT, 0x07); /* 0x028A Set Write Data(STBY ON) */
  807. RegWriteA_LC898122AF(GRACC, 0x10); /* 0x0282 Set Trigger ON */
  808. AccWit(0x10); /* Digital Gyro busy wait */
  809. #endif
  810. } else {
  811. #ifdef GYROSTBY
  812. RegWriteA_LC898122AF(GRADR0, 0x6C); /* 0x0283 Set Write Command */
  813. RegWriteA_LC898122AF(GSETDT, 0x00); /* 0x028A Set Write Data(STBY OFF) */
  814. RegWriteA_LC898122AF(GRACC, 0x10); /* 0x0282 Set Trigger ON */
  815. AccWit(0x10); /* Digital Gyro busy wait */
  816. #endif
  817. RegWriteA_LC898122AF(GRADR0, 0x6B); /* 0x0283 Set Write Command */
  818. RegWriteA_LC898122AF(GRACC, 0x01); /* 0x0282 Set Read Trigger ON */
  819. AccWit(0x01); /* Digital Gyro busy wait */
  820. RegReadA_LC898122AF(GRDAT0H, &UcRamIni); /* 0x0290 */
  821. UcRamIni &= ~0x40; /* Clear Sleep bit */
  822. #ifdef GYROSTBY
  823. UcRamIni |= 0x01; /* Set PLL bit */
  824. #endif
  825. RegWriteA_LC898122AF(GSETDT, UcRamIni); /* 0x028A Set Write Data(Sleep OFF) */
  826. RegWriteA_LC898122AF(GRACC, 0x10); /* 0x0282 Set Trigger ON */
  827. AccWit(0x10); /* Digital Gyro busy wait */
  828. RegReadA_LC898122AF(GRINI, &UcGrini);
  829. /* 0x0281 [ PARA_REG | AXIS7EN | AXIS4EN | - ][ LSBF | SLOWMODE | I2CMODE | - ] */
  830. RegWriteA_LC898122AF(GRINI, (UcGrini & ~SLOWMODE));
  831. /* 0x0281 [ PARA_REG | AXIS7EN | AXIS4EN | - ][ LSBF | SLOWMODE | I2CMODE | - ] */
  832. GyOutSignal(); /* Select Gyro output signal */
  833. WitTim_LC898122AF(50); /* 50ms wait */
  834. RegWriteA_LC898122AF(WC_EQON, 0x01); /* 0x0101 GYRO Equalizer ON */
  835. ClrGyr(0x007F, CLR_FRAM1); /* Gyro Delay RAM Clear */
  836. }
  837. #else /* Panasonic */
  838. /* unsigned char UcRamIni ; */
  839. if (UcSelMode == ON) {
  840. RegWriteA_LC898122AF(WC_EQON, 0x00); /* 0x0101 GYRO Equalizer OFF */
  841. RegWriteA_LC898122AF(GRSEL, 0x01); /* 0x0280 Set Command Mode */
  842. RegWriteA_LC898122AF(GRADR0, 0x4C); /* 0x0283 Set Write Command */
  843. RegWriteA_LC898122AF(GSETDT, 0x02); /* 0x028A Set Write Data(Sleep ON) */
  844. RegWriteA_LC898122AF(GRACC, 0x10); /* 0x0282 Set Trigger ON */
  845. AccWit(0x10); /* Digital Gyro busy wait */
  846. } else {
  847. RegWriteA_LC898122AF(GRADR0, 0x4C); /* 0x0283 Set Write Command */
  848. RegWriteA_LC898122AF(GSETDT, 0x00); /* 0x028A Set Write Data(Sleep OFF) */
  849. RegWriteA_LC898122AF(GRACC, 0x10); /* 0x0282 Set Trigger ON */
  850. AccWit(0x10); /* Digital Gyro busy wait */
  851. GyOutSignal(); /* Select Gyro output signal */
  852. WitTim_LC898122AF(50); /* 50ms wait */
  853. RegWriteA_LC898122AF(WC_EQON, 0x01); /* 0x0101 GYRO Equalizer ON */
  854. ClrGyr(0x007F, CLR_FRAM1); /* Gyro Delay RAM Clear */
  855. }
  856. #endif
  857. }
  858. #endif
  859. #ifdef GAIN_CONT
  860. /* ******************************************************************************** */
  861. /* Function Name : AutoGainControlSw */
  862. /* Retun Value : NON */
  863. /* Argment Value : 0 :OFF 1:ON */
  864. /* Explanation : Select Gyro Signal Function */
  865. /* History : First edition 2010.11.30 Y.Shigeoka */
  866. /* ******************************************************************************** */
  867. void AutoGainControlSw(unsigned char UcModeSw)
  868. {
  869. if (UcModeSw == OFF) {
  870. RegWriteA_LC898122AF(WG_ADJGANGXATO, 0xA0); /* 0x0129 X exe off */
  871. RegWriteA_LC898122AF(WG_ADJGANGYATO, 0xA0); /* 0x012A Y exe off */
  872. RamWrite32A_LC898122AF(GANADR, XMAXGAIN); /* Gain Through */
  873. RamWrite32A_LC898122AF(GANADR | 0x0100, YMAXGAIN); /* Gain Through */
  874. } else {
  875. RegWriteA_LC898122AF(WG_ADJGANGXATO, 0xA3); /* 0x0129 X exe on */
  876. RegWriteA_LC898122AF(WG_ADJGANGYATO, 0xA3); /* 0x012A Y exe on */
  877. }
  878. }
  879. #endif
  880. /* ******************************************************************************** */
  881. /* Function Name : ClrGyr */
  882. /* Retun Value : NON */
  883. /* Argment Value : UsClrFil - Select filter to clear. If 0x0000, clears entire filter */
  884. /* UcClrMod - 0x01: FRAM0 Clear, 0x02: FRAM1, 0x03: All RAM Clear */
  885. /* Explanation : Gyro RAM clear function */
  886. /* History : First edition 2013.01.09 Y.Shigeoka */
  887. /* ******************************************************************************** */
  888. void ClrGyr(unsigned short UsClrFil, unsigned char UcClrMod)
  889. {
  890. unsigned char UcRamClr;
  891. /*Select Filter to clear */
  892. RegWriteA_LC898122AF(WC_RAMDLYMOD1, (unsigned char)(UsClrFil >> 8)); /* 0x018F FRAM Initialize Hbyte */
  893. RegWriteA_LC898122AF(WC_RAMDLYMOD0, (unsigned char)UsClrFil); /* 0x018E FRAM Initialize Lbyte */
  894. /*Enable Clear */
  895. RegWriteA_LC898122AF(WC_RAMINITON, UcClrMod); /* 0x0102 [ - | - | - | - ][ - | - | 遅?Clr | 係?Clr ] */
  896. /*Check RAM Clear complete */
  897. do {
  898. RegReadA_LC898122AF(WC_RAMINITON, &UcRamClr);
  899. UcRamClr &= UcClrMod;
  900. } while (UcRamClr != 0x00);
  901. }
  902. /* ******************************************************************************** */
  903. /* Function Name : DrvSw */
  904. /* Retun Value : NON */
  905. /* Argment Value : 0:OFF 1:ON */
  906. /* Explanation : Driver Mode setting function */
  907. /* History : First edition 2012.04.25 Y.Shigeoka */
  908. /* ******************************************************************************** */
  909. void DrvSw(unsigned char UcDrvSw)
  910. {
  911. if (UcDrvSw == ON) {
  912. if (UcPwmMod == PWMMOD_CVL) {
  913. RegWriteA_LC898122AF(DRVFC, 0xF0); /* 0x0001 Drv.MODE=1,Drv.BLK=1,MODE2,LCEN */
  914. } else {
  915. #ifdef PWM_BREAK
  916. RegWriteA_LC898122AF(DRVFC, 0x00); /* 0x0001 Drv.MODE=0,Drv.BLK=0,MODE0B */
  917. #else
  918. RegWriteA_LC898122AF(DRVFC, 0xC0); /* 0x0001 Drv.MODE=1,Drv.BLK=1,MODE1 */
  919. #endif
  920. }
  921. } else {
  922. if (UcPwmMod == PWMMOD_CVL) {
  923. RegWriteA_LC898122AF(DRVFC, 0x30); /* 0x0001 Drvier Block Ena=0 */
  924. } else {
  925. #ifdef PWM_BREAK
  926. RegWriteA_LC898122AF(DRVFC, 0x00); /* 0x0001 Drv.MODE=0,Drv.BLK=0,MODE0B */
  927. #else
  928. RegWriteA_LC898122AF(DRVFC, 0x00); /* 0x0001 Drvier Block Ena=0 */
  929. #endif
  930. }
  931. }
  932. }
  933. /* ******************************************************************************** */
  934. /* Function Name : AfDrvSw */
  935. /* Retun Value : NON */
  936. /* Argment Value : 0:OFF 1:ON */
  937. /* Explanation : AF Driver Mode setting function */
  938. /* History : First edition 2013.09.12 Y.Shigeoka */
  939. /* ******************************************************************************** */
  940. void AfDrvSw(unsigned char UcDrvSw)
  941. {
  942. if (UcDrvSw == ON) {
  943. #ifdef AF_PWMMODE
  944. RegWriteA_LC898122AF(DRVFCAF, 0x00); /* 0x0081 Drv.MODEAF=0,Drv.ENAAF=0,MODE-0 */
  945. #else
  946. RegWriteA_LC898122AF(DRVFCAF, 0x20); /* 0x0081 Drv.MODEAF=0,Drv.ENAAF=0,MODE-2 */
  947. #endif
  948. RegWriteA_LC898122AF(CCAAF, 0x80); /* 0x00A0 [7]=0:OFF 1:ON */
  949. } else {
  950. RegWriteA_LC898122AF(CCAAF, 0x00); /* 0x00A0 [7]=0:OFF 1:ON */
  951. }
  952. }
  953. /* ******************************************************************************** */
  954. /* Function Name : RamAccFixMod */
  955. /* Retun Value : NON */
  956. /* Argment Value : 0:OFF 1:ON */
  957. /* Explanation : Ram Access Fix Mode setting function */
  958. /* History : First edition 2013.05.21 Y.Shigeoka */
  959. /* ******************************************************************************** */
  960. void RamAccFixMod(unsigned char UcAccMod)
  961. {
  962. switch (UcAccMod) {
  963. case OFF:
  964. RegWriteA_LC898122AF(WC_RAMACCMOD, 0x00); /* 0x018C GRAM Access Float32bit */
  965. break;
  966. case ON:
  967. RegWriteA_LC898122AF(WC_RAMACCMOD, 0x31); /* 0x018C GRAM Access Fix32bit */
  968. break;
  969. }
  970. }
  971. /* ******************************************************************************** */
  972. /* Function Name : IniAf */
  973. /* Retun Value : NON */
  974. /* Argment Value : NON */
  975. /* Explanation : Open AF Initial Setting */
  976. /* History : First edition 2013.09.12 Y.Shigeoka */
  977. /* ******************************************************************************** */
  978. void IniAf(void)
  979. {
  980. unsigned char UcStbb0;
  981. AfDrvSw(OFF); /* AF Drvier Block Ena=0 */
  982. #ifdef AF_PWMMODE
  983. RegWriteA_LC898122AF(DRVFCAF, 0x00); /* 0x0081 Drv.MODEAF=0,Drv.ENAAF=0,MODE-0 */
  984. #else
  985. RegWriteA_LC898122AF(DRVFCAF, 0x20); /* 0x0081 Drv.MODEAF=0,Drv.ENAAF=0,MODE-2 */
  986. #endif
  987. RegWriteA_LC898122AF(DRVFC3AF, 0x00); /* 0x0083 DGAINDAF Gain 0 */
  988. RegWriteA_LC898122AF(DRVFC4AF, 0x80); /* 0x0084 DOFSTDAF */
  989. RegWriteA_LC898122AF(PWMAAF, 0x00); /* 0x0090 AF PWM standby */
  990. RegWriteA_LC898122AF(AFFC, 0x80); /* 0x0088 OpenAF/-/- */
  991. #ifdef AF_PWMMODE
  992. RegWriteA_LC898122AF(DRVFC2AF, 0x82); /* 0x0082 AF slope3 */
  993. RegWriteA_LC898122AF(DRVCH3SEL, 0x02); /* 0x0085 AF only IN1 control */
  994. RegWriteA_LC898122AF(PWMFCAF, 0x89); /* 0x0091 AF GND , Carrier , MODE1 */
  995. RegWriteA_LC898122AF(PWMPERIODAF, 0xA0); /* 0x0099 AF none-synchronism */
  996. #else
  997. RegWriteA_LC898122AF(DRVFC2AF, 0x00); /* 0x0082 AF slope0 */
  998. RegWriteA_LC898122AF(DRVCH3SEL, 0x00); /* 0x0085 AF H bridge control */
  999. RegWriteA_LC898122AF(PWMFCAF, 0x01); /* 0x0091 AF VREF , Carrier , MODE1 */
  1000. RegWriteA_LC898122AF(PWMPERIODAF, 0x20); /* 0x0099 AF none-synchronism */
  1001. #endif
  1002. RegWriteA_LC898122AF(CCFCAF, 0x40); /* 0x00A1 GND/- */
  1003. RegReadA_LC898122AF(STBB0, &UcStbb0);
  1004. /* 0x0250 [ STBAFDRV | STBOISDRV | STBOPAAF | STBOPAY ][ STBOPAX | STBDACI | STBDACV | STBADC ] */
  1005. UcStbb0 &= 0x7F;
  1006. RegWriteA_LC898122AF(STBB0, UcStbb0); /* 0x0250 OIS standby */
  1007. RegWriteA_LC898122AF(STBB1, 0x00); /* 0x0264 All standby */
  1008. /* AF Initial setting */
  1009. RegWriteA_LC898122AF(FSTMODE, FSTMODE_AF); /* 0x0302 */
  1010. RamWriteA_LC898122AF(RWEXD1_L, RWEXD1_L_AF); /* 0x0396 - 0x0397 (Register continuos write) */
  1011. RamWriteA_LC898122AF(RWEXD2_L, RWEXD2_L_AF); /* 0x0398 - 0x0399 (Register continuos write) */
  1012. RamWriteA_LC898122AF(RWEXD3_L, RWEXD3_L_AF); /* 0x039A - 0x039B (Register continuos write) */
  1013. RegWriteA_LC898122AF(FSTCTIME, FSTCTIME_AF); /* 0x0303 */
  1014. RamWriteA_LC898122AF(TCODEH, 0x0000); /* 0x0304 - 0x0305 (Register continuos write) */
  1015. #ifdef AF_PWMMODE
  1016. RegWriteA_LC898122AF(PWMAAF, 0x80); /* 0x0090 AF PWM enable */
  1017. #endif
  1018. UcStbb0 |= 0x80;
  1019. RegWriteA_LC898122AF(STBB0, UcStbb0); /* 0x0250 */
  1020. RegWriteA_LC898122AF(STBB1, 0x05); /* 0x0264 [ - | - | - | - ][ - | STBAFOP1 | - | STBAFDAC ] */
  1021. AfDrvSw(ON); /* AF Drvier Block Ena=1 */
  1022. }
  1023. /* ******************************************************************************** */
  1024. /* Function Name : IniPtAve */
  1025. /* Retun Value : NON */
  1026. /* Argment Value : NON */
  1027. /* Explanation : Pan/Tilt Average parameter setting function */
  1028. /* History : First edition 2013.09.26 Y.Shigeoka */
  1029. /* ******************************************************************************** */
  1030. void IniPtAve(void)
  1031. {
  1032. RegWriteA_LC898122AF(WG_PANSTT1DWNSMP0, 0x00); /* 0x0134 */
  1033. RegWriteA_LC898122AF(WG_PANSTT1DWNSMP1, 0x00); /* 0x0135 */
  1034. RegWriteA_LC898122AF(WG_PANSTT2DWNSMP0, 0x90); /* 0x0136 400 */
  1035. RegWriteA_LC898122AF(WG_PANSTT2DWNSMP1, 0x01); /* 0x0137 */
  1036. RegWriteA_LC898122AF(WG_PANSTT3DWNSMP0, 0x64); /* 0x0138 100 */
  1037. RegWriteA_LC898122AF(WG_PANSTT3DWNSMP1, 0x00); /* 0x0139 */
  1038. RegWriteA_LC898122AF(WG_PANSTT4DWNSMP0, 0x00); /* 0x013A */
  1039. RegWriteA_LC898122AF(WG_PANSTT4DWNSMP1, 0x00); /* 0x013B */
  1040. RamWrite32A_LC898122AF(st1mean, 0x3f800000); /* 0x1235 */
  1041. RamWrite32A_LC898122AF(st2mean, 0x3B23D700); /* 0x1236 1/400 */
  1042. RamWrite32A_LC898122AF(st3mean, 0x3C23D700); /* 0x1237 1/100 */
  1043. RamWrite32A_LC898122AF(st4mean, 0x3f800000); /* 0x1238 */
  1044. }
  1045. /* ******************************************************************************** */
  1046. /* Function Name : IniPtMovMod */
  1047. /* Retun Value : NON */
  1048. /* Argment Value : OFF:Still ON:Movie */
  1049. /* Explanation : Pan/Tilt parameter setting by mode function */
  1050. /* History : First edition 2013.09.26 Y.Shigeoka */
  1051. /* ******************************************************************************** */
  1052. void IniPtMovMod(unsigned char UcPtMod)
  1053. {
  1054. switch (UcPtMod) {
  1055. case OFF:
  1056. RegWriteA_LC898122AF(WG_PANSTTSETGYRO, 0x00); /* 0x0154 */
  1057. RegWriteA_LC898122AF(WG_PANSTTSETGAIN, 0x54); /* 0x0155 */
  1058. RegWriteA_LC898122AF(WG_PANSTTSETISTP, 0x14); /* 0x0156 */
  1059. RegWriteA_LC898122AF(WG_PANSTTSETIFTR, 0x94); /* 0x0157 */
  1060. RegWriteA_LC898122AF(WG_PANSTTSETLFTR, 0x00); /* 0x0158 */
  1061. break;
  1062. case ON:
  1063. RegWriteA_LC898122AF(WG_PANSTTSETGYRO, 0x00); /* 0x0154 */
  1064. RegWriteA_LC898122AF(WG_PANSTTSETGAIN, 0x00); /* 0x0155 */
  1065. RegWriteA_LC898122AF(WG_PANSTTSETISTP, 0x14); /* 0x0156 */
  1066. RegWriteA_LC898122AF(WG_PANSTTSETIFTR, 0x94); /* 0x0157 */
  1067. RegWriteA_LC898122AF(WG_PANSTTSETLFTR, 0x00); /* 0x0158 */
  1068. break;
  1069. }
  1070. }
  1071. /* ******************************************************************************** */
  1072. /* Function Name : ChkCvr */
  1073. /* Retun Value : NON */
  1074. /* Argment Value : NON */
  1075. /* Explanation : Check Cver function */
  1076. /* History : First edition 2013.10.03 Y.Shigeoka */
  1077. /* ******************************************************************************** */
  1078. void ChkCvr(void)
  1079. {
  1080. RegReadA_LC898122AF(CVER, &UcCvrCod); /* 0x027E */
  1081. RegWriteA_LC898122AF(MDLREG, MDL_VER); /* 0x00FF Model */
  1082. RegWriteA_LC898122AF(VRREG, FW_VER); /* 0x02D0 Version */
  1083. }