⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 srvttm.h

📁 本程序为ST公司开发的源代码
💻 H
字号:
/**************************************************
 *
 * srvttm.h
 *
 * CVS ID:   $Id: srvttm.h,v 1.10 2007/09/26 15:11:13 dellorto Exp $
 * Author:   Fabio Dell'Orto [FD] - STM
 * Date:     $Date: 2007/09/26 15:11:13 $
 * Revision: $Revision: 1.10 $
 *
 * Description:
 *
 *
 ***************************************************
 *
 * COPYRIGHT (C) ST Microelectronics  2005
 *            All Rights Reserved
 *
 ***************************************************
 *
 * STM CVS Log:
 *
 * $Log: srvttm.h,v $ * Revision 1.10  2007/09/26 15:11:13  dellorto * improvement to make ttm recover safe * * Revision 1.9  2007/08/14 15:29:57  dellorto * multiple mechanisms *
 * Revision 1.8  2007/03/16 14:25:56  dellorto
 * added command for improved ttm recover
 *
 * Revision 1.7  2006/10/09 15:16:26  dellorto
 * no message
 *
 * Revision 1.6  2006/09/18 09:55:26  belardi
 * Corrected CVS keyword usage
 *
 * Revision 1.5  2006/09/18 09:25:49  belardi
 * AddeLogg$ CVS keyword into file header
 *
 *
 ***************************************************/

#ifndef __SRVTTM_H
#define __SRVTTM_H

typedef enum
{
  TTM_CALLER_KICK_CMD,
  TTM_CALLER_BRAKE_CMD,
  TTM_CALLER_CHECK_SPEED_CMD,
  TTM_CALLER_RECOVER_CMD,
  TTM_CALLER_MAX_CMD,
  TTM_CALLER_TIMEOUT = TTM_CALLER_MAX_CMD,
  TTM_CALLER_CAV_ISR,
  TTM_CALLER_DSP_SPEED_OK,
  TTM_CALLER_DSP_SPEED_NOT_OK,
  TTM_CALLER_SPEED_RESET,
  TTM_CALLER_DELTA_TRK_OK
} t_ttm_caller;

typedef enum
{
  TTM_NO_EVENT = NO_EVENT,
  TTM_EVENT_UNKNOWN,
  TTM_EVENT_BRAKING,
  TTM_EVENT_STOPPED,
  TTM_EVENT_STOP_ERROR,
  TTM_EVENT_STARTING,
  TTM_EVENT_SPEED_CHANGING,
  TTM_EVENT_ON_SPEED,
  TTM_EVENT_SPEED_ERROR
} t_ttm_event;


typedef struct
{
  UInt ttm_speed_ok : 1;
  UInt ttm_speed_error : 1;
#ifdef APM_PICKUP
  UInt stop_ttm_error : 1;
  UInt unused : 5;
#else
  UInt unused : 6;
#endif
} SERVO_TTM_FLAGS_STRUCT;

typedef union
{
  uint8 all;
  SERVO_TTM_FLAGS_STRUCT field;
} SERVO_TTM_FLAGS_UNION;


typedef enum
{
  SET_SPEED_RESULT_OK,
  SET_SPEED_RESULT_DEC_RATIO_CHANGED,
  SET_SPEED_RESULT_CLV_ENABLED
} t_set_speed_result;


#ifdef ECC_WORKAROUND
typedef enum
{
  CLV_IRQ_NO_EVENT = NO_EVENT,
  CLV_IRQ_EVENT_OVERFLOW,
  CLV_IRQ_EVENT_UNDERFLOW
} t_clv_irq_event;
#endif


void init_ttm_fsm(void);
void ttm_init(void);
RETVAL check_ttm_braking(void);
RETVAL check_ttm_speed(void);
void kick_ttm(void);
void brake_ttm(void);
void check_ttm_speed_request(void);
RETVAL start_ttm(void);
void prepare_ttm_for_recover(void);
void ttm_fsm_call(t_ttm_caller ttm_caller);
t_set_speed_result set_speed(uint8 speed);
void set_disc_control(uint8 disc_control_mode);
#ifdef ECC_WORKAROUND
void clv_isr_irq(void);
#endif


/*----------------------------------------------------------------------------*/
/* TTM defines                                                                */
/*----------------------------------------------------------------------------*/

#define DISC_CONTROL_RECOVER     0x00
#define DISC_CONTROL_SET_SPEED   0x01
#define DISC_CONTROL_LONG_JUMP   0x02
#define DISC_CONTROL_SHORT_JUMP  0x03

#define DISC_MODE                0x70
#define DISC_SPEED               0x0F
#define CDV_AUX_FLAG             0x80

#define CLV                      0x00   /* CLV mode */
#define CDV                      0x10   /* CDV mode */
#define CDV_PREPARED             0x20   /* CDV mode prepared (will be active after starting kick) */
#define SCP_CLV                  0x40   /* CLV mode without CLV buffer control */

#define CLV_1X                   0x01
#define CLV_2X                   0x02
#define CDV_1X_IN_DISC           0x01
#define CDV_AUX                  0x0A

/*
  FREQ_CLV_1X = BIT_RATE * 2^(17+dec_ratio) / Fsys
              = 4.3218[Mb/s] * 2^(17+2) / 13.54[Mhz]
  For DSP: FREQ_1T_CLV_1X = FREQ_CLV_1X >> 4
*/
#define FREQ_1T_CLV_1X           0x28DB
#define FREQ_1T_CLV_2X           0x51B6


/*----------------------------------------------------------------------------*/
/* TTM FSM State defines                                                      */
/*----------------------------------------------------------------------------*/

typedef enum
{
  TTM_STATE_IDLE           = STATE_1,
  TTM_STATE_START_KICK     = STATE_2,
  TTM_STATE_RECOVER_KICK   = STATE_3,
  TTM_STATE_RECOVER_CHECK  = STATE_4,
  TTM_STATE_WAIT_KICK      = STATE_5,
  TTM_STATE_WAIT_SPIN_UP   = STATE_6,
  TTM_STATE_CHECK_ON_SPEED = STATE_7,
  TTM_STATE_ACTIVE         = STATE_8,
  TTM_STATE_START_BRAKE    = STATE_9,
  TTM_STATE_WAIT_BRAKE     = STATE_10,
  TTM_STATE_WAIT_SPIN_DOWN = STATE_11
} t_ttm_state;

#define IS_TTM_MOVING(x)   (((x) != TTM_STATE_IDLE) && ((x) < TTM_STATE_START_BRAKE))


extern t_ttm_state ttm_fsm_state;
extern sint16 aux_ttm_input;

extern uint32 freq_1T;
extern uint16 target_freq_1T;
extern uint8 target_ttm_speed;
extern uint8 current_ttm_speed;

#endif /* __SRVTTM_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -