AfSTMV.c 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. //********************************************************************************
  2. //
  3. // << LC89821x Step Move module >>
  4. // Program Name : AfSTMV.c
  5. // Design : Y.Yamada
  6. // History : First edition 2009.07.31 Y.Tashita
  7. // History : LC898211 changes 2012.06.11 YS.Kim
  8. // History : LC898212 changes 2013.07.19 Rex.Tang
  9. //********************************************************************************
  10. //**************************
  11. // Include Header File
  12. //**************************
  13. #include "AfSTMV.h"
  14. #include "AfDef.h"
  15. //**************************
  16. // Definations
  17. //**************************
  18. #define abs(x) ((x) < 0 ? -(x) : (x))
  19. #define LC898211_fs 234375
  20. /*--------------------------
  21. Local defination
  22. ---------------------------*/
  23. static stSmvPar StSmvPar;
  24. /* Step Move to Finish Check Function */
  25. /* static unsigned char StmvEnd( unsigned char ) ; */
  26. /*====================================================================
  27. Interface functions (import)
  28. =====================================================================*/
  29. extern void RamWriteA(unsigned short addr, unsigned short data);
  30. extern void RamReadA(unsigned short addr, unsigned short *data);
  31. extern void RegWriteA(unsigned short addr, unsigned char data);
  32. extern void RegReadA(unsigned short addr, unsigned char *data);
  33. extern void WaitTime(unsigned short msec);
  34. /*-----------------------------------------------------------
  35. Function Name : StmvSet, StmvTo, StmvEnd
  36. Description : StepMove Setting, Execute, Finish, Current Limit
  37. Arguments : Stepmove Mode Parameter
  38. Return : Stepmove Mode Parameter
  39. -----------------------------------------------------------*/
  40. //StmvSet -> StmvTo -> StmvEnd -> StmvTo -> StmvEnd ->�E�E�E
  41. //********************************************************************************
  42. // Function Name : StmvSet
  43. // Retun Value : NON
  44. // Argment Value : NON
  45. // Explanation : Stpmove parameter Setting Function
  46. // History : First edition 2012.06.12 YS.Kim
  47. // History : Changes 2013.07.19 Rex.Tang
  48. //********************************************************************************
  49. void StmvSet( stSmvPar StSetSmv )
  50. {
  51. unsigned char UcSetEnb;
  52. unsigned char UcSetSwt;
  53. unsigned short UsParSiz;
  54. unsigned char UcParItv;
  55. short SsParStt; // StepMove Start Position
  56. StSmvPar.UsSmvSiz = StSetSmv.UsSmvSiz;
  57. StSmvPar.UcSmvItv = StSetSmv.UcSmvItv;
  58. StSmvPar.UcSmvEnb = StSetSmv.UcSmvEnb;
  59. RegWriteA( AFSEND_211 , 0x00 ); // StepMove Enable Bit Clear
  60. RegReadA( ENBL_211 , &UcSetEnb );
  61. UcSetEnb &= (unsigned char)0xFD ;
  62. RegWriteA( ENBL_211 , UcSetEnb ); // Measuremenet Circuit1 Off
  63. RegReadA( SWTCH_211 , &UcSetSwt );
  64. UcSetSwt &= (unsigned char)0x7F ;
  65. RegWriteA( SWTCH_211 , UcSetSwt ); // RZ1 Switch Cut Off
  66. RamReadA( RZ_211H , (unsigned short *)&SsParStt ); // Get Start Position
  67. UsParSiz = StSetSmv.UsSmvSiz ; // Get StepSize
  68. UcParItv = StSetSmv.UcSmvItv ; // Get StepInterval
  69. RamWriteA( ms11a_211H , (unsigned short)0x0800 ); // Set Coefficient Value For StepMove
  70. RamWriteA( MS1Z22_211H , (unsigned short)SsParStt ); // Set Start Positon
  71. RamWriteA( MS1Z12_211H , UsParSiz ); // Set StepSize
  72. RegWriteA( STMINT_211 , UcParItv ); // Set StepInterval
  73. UcSetSwt |= (unsigned char)0x80;
  74. RegWriteA( SWTCH_211, UcSetSwt ); // RZ1 Switch ON
  75. }
  76. //********************************************************************************
  77. // Function Name : StmvTo
  78. // Retun Value : Stepmove Parameter
  79. // Argment Value : Stepmove Parameter, Target Position
  80. // Explanation : Stpmove Function
  81. // History : First edition 2012.06.12 YS.Kim
  82. // History : Changes 2013.07.19 Rex.Tang
  83. //********************************************************************************
  84. unsigned char StmvTo( short SsSmvEnd )
  85. {
  86. /* unsigned short UsSmvTim; */
  87. unsigned short UsSmvDpl;
  88. short SsParStt; // StepMove Start Position
  89. //PIOA_SetOutput(_PIO_PA29); // Monitor I/O Port
  90. RamReadA( RZ_211H , (unsigned short *)&SsParStt ); // Get Start Position
  91. UsSmvDpl = abs( SsParStt - SsSmvEnd );
  92. if( ( UsSmvDpl <= StSmvPar.UsSmvSiz ) && (( StSmvPar.UcSmvEnb & STMSV_ON ) == STMSV_ON ) ){
  93. if( StSmvPar.UcSmvEnb & STMCHTG_ON ){
  94. RegWriteA( MSSET_211 , INI_MSSET_211 | (unsigned char)0x01 );
  95. }
  96. RamWriteA( MS1Z22_211H, SsSmvEnd ); // Handling Single Step For ES1
  97. StSmvPar.UcSmvEnb |= STMVEN_ON; // Combine StepMove Enable Bit & StepMove Mode Bit
  98. } else {
  99. if( SsParStt < SsSmvEnd ){ // Check StepMove Direction
  100. RamWriteA( MS1Z12_211H , StSmvPar.UsSmvSiz );
  101. } else if( SsParStt > SsSmvEnd ){
  102. RamWriteA( MS1Z12_211H , -StSmvPar.UsSmvSiz );
  103. }
  104. RamWriteA( STMVENDH_211, SsSmvEnd ); // Set StepMove Target Positon
  105. StSmvPar.UcSmvEnb |= STMVEN_ON; // Combine StepMove Enable Bit & StepMove Mode Bit
  106. RegWriteA( STMVEN_211 , StSmvPar.UcSmvEnb ); // Start StepMove
  107. }
  108. #if 1
  109. /*
  110. * AF step_moveto is set per 33ms, so don't need this waiting.
  111. */
  112. return 0;
  113. #else
  114. UsSmvTim=(UsSmvDpl/STMV_SIZE)*((STMV_INTERVAL+1)*10000 / LC898211_fs); // Stepmove Operation time
  115. WaitTime( UsSmvTim );
  116. //TRACE("STMV Operation Time = %d \n", UsSmvTim ) ;
  117. return StmvEnd( StSmvPar.UcSmvEnb );
  118. #endif
  119. }
  120. //********************************************************************************
  121. // Function Name : StmvEnd
  122. // Retun Value : Stepmove Parameter
  123. // Argment Value : Stepmove Parameter
  124. // Explanation : Stpmove Finish Check Function
  125. // History : First edition 2012.06.12 YS.Kim
  126. // History : Changes 2013.07.19 Rex.Tang
  127. //********************************************************************************
  128. /* unsigned char StmvEnd( unsigned char UcParMod )
  129. {
  130. unsigned char UcChtGst;
  131. unsigned short i = 0;
  132. while( (UcParMod & (unsigned char)STMVEN_ON ) && (i++ < 100)) // Wait StepMove operation end
  133. {
  134. RegReadA( STMVEN_211 , &UcParMod );
  135. }
  136. if( ( UcParMod & (unsigned char)0x08 ) == (unsigned char)STMCHTG_ON ){ // If Convergence Judgement is Enabled
  137. for(i=0; i<CHTGOKN_WAIT; i++)
  138. {
  139. RegReadA( MSSET_211, &UcChtGst );
  140. if(!(UcChtGst & 0x01)) break;
  141. WaitTime(1);
  142. }
  143. }
  144. if( UcChtGst & 0x01 ){
  145. UcParMod |= (unsigned char)0x80 ; // STMV Success But Settling Time Over
  146. //PIOA_ClearOutput(_PIO_PA29); // Monitor I/O Port
  147. }else{
  148. UcParMod &= (unsigned char)0x7F ; // STMV Success
  149. }
  150. return UcParMod; // Bit0:0 Successful convergence Bit0:1 Time Over
  151. } */