#include "l6235d.h"

//l6235d初始化
#ifdef L6235D

void l6235d_init()
{
  //水平电机PD11-EN,PD12-F/R,PD10-BRK
  gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_12);
  gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_PIN_11);//PD11上拉电阻
  gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, GPIO_PIN_10);//PD10下拉电阻
  gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_10| GPIO_PIN_11| GPIO_PIN_12);
  //水平hall，PD13-H1,PD14-H2,PD15-H3
  gpio_mode_set(GPIOD, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_13| GPIO_PIN_14| GPIO_PIN_15);
  
  L6235D_HORI_BRAKE_STOP; 
  L6235D_HORI_EN_DISABLE;

  //垂直电机PA8-EN,PA11-F/R,PC9-BRK
  gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
  gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_PIN_8);//PA8上拉电阻
  gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_8| GPIO_PIN_11);
  
  gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, GPIO_PIN_9);//PC9下拉电阻
  gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_9);
  
  //垂直hall，PC6-H1,PC7-H2,PC8-H3
  gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_6| GPIO_PIN_7| GPIO_PIN_8);
  
  L6235D_VERT_BRAKE_STOP; 
  L6235D_VERT_EN_DISABLE;
}
//设定转向
char l6235d_hori_set_direction(char dir)
{
  if(dir == L6235D_MOTOR_DIR_FWD)
  {
    L6235D_HORI_FWD;
    return L6235D_MOTOR_DIR_FWD;
  }
  if(dir == L6235D_MOTOR_DIR_REV)
  {
    L6235D_HORI_REV;
    return L6235D_MOTOR_DIR_REV;
  }
  return -1;
}

char l6235d_vert_set_direction(char dir)
{
  if(dir == L6235D_MOTOR_DIR_FWD)
  {
    L6235D_VERT_FWD;
    return L6235D_MOTOR_DIR_FWD;
  }
  if(dir == L6235D_MOTOR_DIR_REV)
  {
    L6235D_VERT_REV;
    return L6235D_MOTOR_DIR_REV;
  }
  return -1;
}

//电机启停控制
char l6235d_hori_start_stop(char flag)
{
  if(flag == L6235D_MOTOR_START)
  {
    L6235D_HORI_EN_ENABLE;
    OSTimeDlyHMSM(0u, 0u, 0u, 1u);
    L6235D_HORI_BRAKE_START;
    return L6235D_MOTOR_START;
  }
  if(flag == L6235D_MOTOR_STOP)
  {
    L6235D_HORI_BRAKE_STOP;
    OSTimeDlyHMSM(0u, 0u, 0u, 1u);
    L6235D_HORI_EN_DISABLE;
    return L6235D_MOTOR_STOP;
  }
  return -1;
}

char l6235d_vert_start_stop(char flag)
{
  if(flag == L6235D_MOTOR_START)
  {
    L6235D_VERT_EN_ENABLE;
    OSTimeDlyHMSM(0u, 0u, 0u, 1u);
    L6235D_VERT_BRAKE_START;    
    return L6235D_MOTOR_START;
  }
  if(flag == L6235D_MOTOR_STOP)
  {
    L6235D_VERT_BRAKE_STOP;
    OSTimeDlyHMSM(0u, 0u, 0u, 1u);
    L6235D_VERT_EN_DISABLE;
    return L6235D_MOTOR_STOP;
  }
  return -1;
}

#endif
