966 lines
22 KiB
C
966 lines
22 KiB
C
|
#include "as5047d.h"
|
|||
|
#include <includes.h>
|
|||
|
|
|||
|
static BSP_OS_SEM ptz_hori_get_angle_mutex;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
|||
|
static BSP_OS_SEM ptz_vert_get_angle_mutex;
|
|||
|
|
|||
|
|
|||
|
static void as5047d_delay_nop(int as5047d_delay_time);
|
|||
|
static unsigned int as5047d_Parity_bit_even(unsigned int package);
|
|||
|
/// AS5047D<37><44><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
///
|
|||
|
/// <20><><EFBFBD><EFBFBD>AS5047D<37><44>SPIͨ<49>Ŷ<EFBFBD><C5B6><EFBFBD>ʱ
|
|||
|
/// @param delay_time <20><><EFBFBD><EFBFBD>ʱʱ<CAB1>䳤<EFBFBD><E4B3A4>
|
|||
|
/// @return <20><>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-06<30><36><EFBFBD><EFBFBD>
|
|||
|
static void as5047d_delay_nop(int delay_time)
|
|||
|
{
|
|||
|
for(int i = 0; i < delay_time; i ++)
|
|||
|
{
|
|||
|
asm("nop");
|
|||
|
asm("nop");
|
|||
|
asm("nop");
|
|||
|
asm("nop");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// AS5047D<37><44>ʼ<EFBFBD><CABC>
|
|||
|
///
|
|||
|
/// <20><>ʼ<EFBFBD><CABC>AS5047D
|
|||
|
/// @param <20><>
|
|||
|
/// @return <20><>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-06<30><36><EFBFBD><EFBFBD>
|
|||
|
/// LH<4C><EFBFBD><DEB8><EFBFBD>2022.0525
|
|||
|
void as5047d_init()
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʹ<EFBFBD><CAB9>
|
|||
|
rcu_periph_clock_enable(RCU_GPIOA);
|
|||
|
rcu_periph_clock_enable(RCU_GPIOC);
|
|||
|
rcu_periph_clock_enable(RCU_GPIOD);
|
|||
|
//ˮƽPC10--CLK,PC12--MOSI
|
|||
|
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_10| GPIO_PIN_12);
|
|||
|
gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_10| GPIO_PIN_12);
|
|||
|
//PA15--CS
|
|||
|
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_15);
|
|||
|
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_15);
|
|||
|
//PC11--MISO
|
|||
|
gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
|
|||
|
|
|||
|
AS5047D_HORI_CSN_DISABLE;
|
|||
|
AS5047D_HORI_CLK_LOW;
|
|||
|
AS5047D_HORI_MOSI_LOW;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//<2F><>ֱPD0--CS,PD1--CLK,PD3--MOSI
|
|||
|
gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0| GPIO_PIN_1| GPIO_PIN_3);
|
|||
|
gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_0| GPIO_PIN_1| GPIO_PIN_3);
|
|||
|
//PD2--MISO
|
|||
|
gpio_mode_set(GPIOD, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_2);
|
|||
|
|
|||
|
AS5047D_VERT_CSN_DISABLE;
|
|||
|
AS5047D_VERT_CLK_LOW;
|
|||
|
AS5047D_VERT_MOSI_LOW;
|
|||
|
}
|
|||
|
|
|||
|
/// AS5047D<37><44><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>żУ<C5BC><D0A3>(żУ<C5BC><D0A3>)
|
|||
|
///
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>żУ<C5BC><D0A3>(żУ<C5BC><D0A3>)
|
|||
|
/// @param package <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
/// @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>żУ<C5BC><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-06<30><36><EFBFBD><EFBFBD>
|
|||
|
static unsigned int as5047d_Parity_bit_even(unsigned int package)
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
char temp1 = 0;
|
|||
|
///<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ÿһλ<D2BB><CEBB>0<EFBFBD><30><EFBFBD><EFBFBD>1
|
|||
|
for(char i = 0; i < 15; i++)
|
|||
|
{
|
|||
|
temp = package & (1 << i);
|
|||
|
if(temp != 0)
|
|||
|
{
|
|||
|
///<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ֵΪ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp1++;
|
|||
|
}
|
|||
|
temp = 0;
|
|||
|
}
|
|||
|
///temp1<70><31><EFBFBD><EFBFBD>Ϊż<CEAA><C5BC>
|
|||
|
if(temp1 % 2 == 0)
|
|||
|
{
|
|||
|
///<2F><><EFBFBD><EFBFBD>żЧ<C5BC><D0A7>λ<EFBFBD><CEBB>Ϊ0
|
|||
|
package = package & 0X7FFF; //0111 1111 1111 1111
|
|||
|
}
|
|||
|
///temp1<70><31><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|||
|
else
|
|||
|
{
|
|||
|
///<2F><><EFBFBD><EFBFBD>żЧ<C5BC><D0A7>λ<EFBFBD><CEBB>Ϊ1
|
|||
|
package = package | 0X8000;//1000 0000 0000 0000
|
|||
|
}
|
|||
|
return package;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/// <20>趨<EFBFBD><E8B6A8><EFBFBD>ݰ<EFBFBD>read/write<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
///
|
|||
|
/// <20>趨<EFBFBD><E8B6A8><EFBFBD>ݰ<EFBFBD>read/write<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @param package <20><>Ҫ<EFBFBD>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
/// @return <20>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-07<30><37><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_command_type(unsigned int package, unsigned int type)
|
|||
|
{
|
|||
|
switch(type)
|
|||
|
{
|
|||
|
case AS5047D_WRITE_COMMAND:
|
|||
|
case AS5047D_WRITE_DATA:
|
|||
|
package = package & AS5047D_WRITE_COMMAND;
|
|||
|
break;
|
|||
|
|
|||
|
case AS5047D_READ_COMMAND:
|
|||
|
package = package | AS5047D_READ_COMMAND;
|
|||
|
break;
|
|||
|
|
|||
|
default :
|
|||
|
return 0;
|
|||
|
}
|
|||
|
return package;
|
|||
|
}
|
|||
|
|
|||
|
/// <20>жϽ<D0B6><CFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
///
|
|||
|
/// <20>жϽ<D0B6><CFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @param package <20><><EFBFBD>жϵ<D0B6><CFB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @param <20><>
|
|||
|
/// @return <20><><EFBFBD><EFBFBD><EFBFBD>жϽ<D0B6><CFBD><EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-08<30><38><EFBFBD><EFBFBD>
|
|||
|
As5047DJudgeReceivePackage as5047d_hori_judge_receive_package(unsigned int package)
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
As5047DJudgeReceivePackage temp1;
|
|||
|
memset(&temp1,0,sizeof(temp1));
|
|||
|
|
|||
|
temp1.package = package;
|
|||
|
temp1.Operation_Result = 1;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>żУ<C5BC><D0A3><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
|||
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(package != as5047d_Parity_bit_even(package))
|
|||
|
{
|
|||
|
temp1.parity_error_package = 1;
|
|||
|
temp1.Operation_Result = 0;
|
|||
|
}
|
|||
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
|
|||
|
else
|
|||
|
{
|
|||
|
//<2F>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>Ƿ<EFBFBD><C7B7>ǻظ<C7BB><D8B8><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp = package & AS5047D_JUDGE_RECEIVE_DATA;
|
|||
|
//<2F>ظ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(temp != 0)
|
|||
|
{
|
|||
|
// temp1.error_flag_command = 1;
|
|||
|
// temp1.framing_error_command = package & 0X0001;
|
|||
|
// temp1.command_invalid_command = package & (0X0001 << 1);
|
|||
|
// temp1.parity_error_command = package & (0X0001 << 2);
|
|||
|
as5047d_hori_cef_command();
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
return temp1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
As5047DJudgeReceivePackage as5047d_vert_judge_receive_package(unsigned int package)
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
As5047DJudgeReceivePackage temp1;
|
|||
|
memset(&temp1,0,sizeof(temp1));
|
|||
|
|
|||
|
temp1.package = package;
|
|||
|
temp1.Operation_Result = 1;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>żУ<C5BC><D0A3><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
|||
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(package != as5047d_Parity_bit_even(package))
|
|||
|
{
|
|||
|
temp1.parity_error_package = 1;
|
|||
|
temp1.Operation_Result = 0;
|
|||
|
}
|
|||
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
|
|||
|
else
|
|||
|
{
|
|||
|
//<2F>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>Ƿ<EFBFBD><C7B7>ǻظ<C7BB><D8B8><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp = package & AS5047D_JUDGE_RECEIVE_DATA;
|
|||
|
//<2F>ظ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(temp != 0)
|
|||
|
{
|
|||
|
// temp1.error_flag_command = 1;
|
|||
|
// temp1.framing_error_command = package & 0X0001;
|
|||
|
// temp1.command_invalid_command = package & (0X0001 << 1);
|
|||
|
// temp1.parity_error_command = package & (0X0001 << 2);
|
|||
|
as5047d_vert_cef_command();
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
return temp1;
|
|||
|
}
|
|||
|
|
|||
|
/*********************************************************************/
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/// ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
///
|
|||
|
/// <20><>as5047d<37><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @param <20><>
|
|||
|
/// @return <20><><EFBFBD>ؽ<EFBFBD><D8BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-08<30><38><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_hori_send_package(unsigned int package)
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
unsigned int temp1 = 0;
|
|||
|
unsigned int temp2 = 0;
|
|||
|
AS5047D_HORI_CLK_LOW;
|
|||
|
AS5047D_HORI_MOSI_LOW;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
for(int i = 15; i >= 0; i--)
|
|||
|
{
|
|||
|
AS5047D_HORI_CLK_LOW;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
temp = package & (1 << i);
|
|||
|
if(temp != 0)
|
|||
|
{
|
|||
|
AS5047D_HORI_MOSI_HIGH;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
AS5047D_HORI_MOSI_LOW;
|
|||
|
}
|
|||
|
as5047d_delay_nop(2);
|
|||
|
AS5047D_HORI_CLK_HIGH;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
|
|||
|
temp1 = AS5047D_HORI_MISO_READ;
|
|||
|
temp2 = temp2 | (temp1 << i);
|
|||
|
|
|||
|
temp1 = 0;
|
|||
|
temp = 0;
|
|||
|
}
|
|||
|
AS5047D_HORI_CLK_LOW;
|
|||
|
AS5047D_HORI_MOSI_LOW;
|
|||
|
//<2F><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return temp2;
|
|||
|
}
|
|||
|
|
|||
|
/// ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
///
|
|||
|
/// <20><><EFBFBD><EFBFBD>as5047d<37><64><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @param <20><>
|
|||
|
/// @return <20><><EFBFBD>ؽ<EFBFBD><D8BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-07<30><37><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_hori_receive_package()
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
unsigned int temp1 = 0;
|
|||
|
AS5047D_HORI_CLK_LOW;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
for(int j = 15; j >= 0; j--)
|
|||
|
{
|
|||
|
AS5047D_HORI_CLK_HIGH;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
temp = AS5047D_HORI_MISO_READ;
|
|||
|
temp1 = temp1 | (temp << j);
|
|||
|
AS5047D_HORI_CLK_LOW;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
temp = 0;
|
|||
|
}
|
|||
|
AS5047D_HORI_CLK_LOW;
|
|||
|
return temp1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// ˮƽ<CBAE><C6BD><EFBFBD>Ͷ<EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
///
|
|||
|
/// <20><><EFBFBD>Ͷ<EFBFBD>ȡas5047d<37><64><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
/// @param add <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
/// @return <20><><EFBFBD><EFBFBD><CDB9><EFBFBD><EFBFBD>н<EFBFBD><D0BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD> 111 1111 1111 1111
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-07<30><37><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_hori_read_command(unsigned int add)
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
add = as5047d_command_type(add,AS5047D_READ_COMMAND);
|
|||
|
add = as5047d_Parity_bit_even(add);
|
|||
|
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
temp = as5047d_hori_send_package(add);
|
|||
|
//<2F><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return temp;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// ˮƽ<CBAE><C6BD>ȡas5047d<37>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>е<EFBFBD>ֵ
|
|||
|
///
|
|||
|
/// <20><>ȡas5047d<37>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>е<EFBFBD>ֵ
|
|||
|
/// @param add <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
/// @return <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD>е<EFBFBD>ֵ
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-07<30><37><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_hori_read_data(unsigned int add)
|
|||
|
{
|
|||
|
|
|||
|
unsigned int temp = 0;
|
|||
|
|
|||
|
AS5047D_HORI_CSN_DISABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
AS5047D_HORI_CSN_ENABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
|
|||
|
//<2F><><EFBFBD>Ͷ<EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
as5047d_hori_read_command(add);
|
|||
|
|
|||
|
AS5047D_HORI_CSN_DISABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
AS5047D_HORI_CSN_ENABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp = as5047d_hori_nop_command();
|
|||
|
|
|||
|
AS5047D_HORI_CSN_DISABLE;
|
|||
|
return temp;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>дָ<D0B4><D6B8>
|
|||
|
///
|
|||
|
/// <20><>as5047d<37><64><EFBFBD><EFBFBD>дָ<D0B4><D6B8>
|
|||
|
/// @param add <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
/// @return <20><><EFBFBD><EFBFBD><CDB9><EFBFBD><EFBFBD>н<EFBFBD><D0BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-08<30><38><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_hori_write_command(unsigned int add)
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
add = as5047d_command_type(add,AS5047D_WRITE_COMMAND);
|
|||
|
add = as5047d_Parity_bit_even(add);
|
|||
|
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
temp = as5047d_hori_send_package(add);
|
|||
|
//<2F><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return temp;
|
|||
|
}
|
|||
|
|
|||
|
/// ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>NOPָ<50><D6B8>
|
|||
|
///
|
|||
|
/// <20><>as5047d<37><64><EFBFBD><EFBFBD>NOPָ<50><D6B8>
|
|||
|
/// @param <20><>
|
|||
|
/// @return <20><><EFBFBD><EFBFBD><CDB9><EFBFBD><EFBFBD>н<EFBFBD><D0BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-08<30><38><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_hori_nop_command()
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
temp = as5047d_hori_send_package(AS5047D_NOP);
|
|||
|
//<2F><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return temp;
|
|||
|
}
|
|||
|
|
|||
|
/// ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
///
|
|||
|
/// <20><>as5047d<37><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>CLEAR ERROR FLAG command
|
|||
|
/// @param <20><>
|
|||
|
/// @return 1<><31><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-08<30><38><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_hori_cef_command()
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
unsigned int temp1 = 0;
|
|||
|
|
|||
|
AS5047D_HORI_CSN_DISABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
AS5047D_HORI_CSN_ENABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
temp = as5047d_Parity_bit_even(AS5047D_CLEAR_ERROR_FLAG);
|
|||
|
as5047d_hori_send_package(temp);
|
|||
|
|
|||
|
AS5047D_HORI_CSN_DISABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
AS5047D_HORI_CSN_ENABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
temp1 = as5047d_hori_nop_command();
|
|||
|
|
|||
|
AS5047D_HORI_CSN_DISABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
AS5047D_HORI_CSN_ENABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
temp1 = as5047d_hori_nop_command();
|
|||
|
|
|||
|
AS5047D_HORI_CSN_DISABLE;
|
|||
|
return temp1;
|
|||
|
}
|
|||
|
|
|||
|
/// ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>дָ<D0B4><EFBFBD><EEB2A2>ȡ<EFBFBD><C8A1><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
///
|
|||
|
/// <20><>as5047d<37><64><EFBFBD><EFBFBD>дָ<D0B4><EFBFBD><EEB2A2>ȡ<EFBFBD><C8A1><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @param add <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
/// @param data <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @return <20><><EFBFBD><EFBFBD><CDB9><EFBFBD><EFBFBD>н<EFBFBD><D0BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-08<30><38><EFBFBD><EFBFBD>
|
|||
|
As5047DJudgeReceivePackage as5047d_hori_write_data(unsigned int add,unsigned int data)
|
|||
|
{
|
|||
|
As5047DJudgeReceivePackage temp;
|
|||
|
int i;
|
|||
|
for(i = 0; i < AS5047D_WRITE_NUM; i++)
|
|||
|
{
|
|||
|
AS5047D_HORI_CSN_DISABLE;
|
|||
|
as5047d_delay_nop(20);
|
|||
|
AS5047D_HORI_CSN_ENABLE;
|
|||
|
as5047d_delay_nop(20);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ָ<EFBFBD><D6B8>
|
|||
|
as5047d_hori_write_command(add);
|
|||
|
//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD><EFBFBD>оɵ<D0BE><C9B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
add = as5047d_command_type(data,AS5047D_WRITE_DATA);
|
|||
|
add = as5047d_Parity_bit_even(data);
|
|||
|
as5047d_hori_send_package(data);
|
|||
|
//<2F><><EFBFBD>ռĴ<D5BC><C4B4><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0X3FFF 0011 1111 1111 1111
|
|||
|
temp.package = as5047d_hori_nop_command();
|
|||
|
temp = as5047d_hori_judge_receive_package(temp.package);
|
|||
|
|
|||
|
as5047d_delay_nop(2);
|
|||
|
AS5047D_HORI_CSN_DISABLE;
|
|||
|
|
|||
|
if(temp.Operation_Result != 1)
|
|||
|
{
|
|||
|
as5047d_hori_cef_command();
|
|||
|
continue;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//<2F>ж<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD>·<EFBFBD><C2B7>صļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͬ
|
|||
|
if((data & 0X3FFF) == (temp.package & 0X3FFF))
|
|||
|
{
|
|||
|
temp.Operation_Result = 1;
|
|||
|
break;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return temp;
|
|||
|
}
|
|||
|
|
|||
|
/// <20><>ȡ<EFBFBD><C8A1>̨ˮƽ<CBAE>Ƕ<EFBFBD>
|
|||
|
///
|
|||
|
/// <20><>ȡ<EFBFBD><C8A1>̨ˮƽ<CBAE>Ƕ<EFBFBD>
|
|||
|
/// @param <20><>
|
|||
|
/// @param <20><>
|
|||
|
/// @return <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-1<><31>ȡʧ<C8A1>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ȡ<EFBFBD>ɹ<EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-27<32><37><EFBFBD><EFBFBD>
|
|||
|
float as5047d_hori_get_angle()
|
|||
|
{
|
|||
|
BSP_OS_SemWait(&ptz_hori_get_angle_mutex, 0u);
|
|||
|
float angle = 0;
|
|||
|
unsigned int angle1 = 0;
|
|||
|
unsigned int temp = 0;
|
|||
|
As5047DJudgeReceivePackage temp1;
|
|||
|
memset(&temp1, 0, sizeof(temp1));
|
|||
|
//<2F><>ȡ<EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp = as5047d_hori_read_data(AS5047D_ANGLE);
|
|||
|
//<2F>жϽ<D0B6><CFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp1 = as5047d_hori_judge_receive_package(temp);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
|
|||
|
if(temp1.Operation_Result == 1)
|
|||
|
{
|
|||
|
angle = (temp & 0x3FFF) * 0.02197265625;//0.02197265625 = 360.0 / 16384.0
|
|||
|
angle1 = (unsigned int)(angle * 1000.0);//ֻ<><D6BB><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3λ
|
|||
|
angle = (float)(angle1 / 1000.0);
|
|||
|
BSP_OS_SemPost(&ptz_hori_get_angle_mutex);
|
|||
|
return angle;
|
|||
|
}
|
|||
|
BSP_OS_SemPost(&ptz_hori_get_angle_mutex);
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/************************************************************************/
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/// <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
///
|
|||
|
/// <20><>as5047d<37><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @param <20><>
|
|||
|
/// @return <20><><EFBFBD>ؽ<EFBFBD><D8BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-08<30><38><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_vert_send_package(unsigned int package)
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
unsigned int temp1 = 0;
|
|||
|
unsigned int temp2 = 0;
|
|||
|
AS5047D_VERT_CLK_LOW;
|
|||
|
AS5047D_VERT_MOSI_LOW;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
for(int i = 15; i >= 0; i--)
|
|||
|
{
|
|||
|
AS5047D_VERT_CLK_LOW;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
temp = package & (1 << i);
|
|||
|
if(temp != 0)
|
|||
|
{
|
|||
|
AS5047D_VERT_MOSI_HIGH;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
AS5047D_VERT_MOSI_LOW;
|
|||
|
}
|
|||
|
as5047d_delay_nop(2);
|
|||
|
AS5047D_VERT_CLK_HIGH;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
|
|||
|
temp1 = AS5047D_VERT_MISO_READ;
|
|||
|
temp2 = temp2 | (temp1 << i);
|
|||
|
|
|||
|
temp1 = 0;
|
|||
|
temp = 0;
|
|||
|
}
|
|||
|
AS5047D_VERT_CLK_LOW;
|
|||
|
AS5047D_VERT_MOSI_LOW;
|
|||
|
//<2F><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return temp2;
|
|||
|
}
|
|||
|
|
|||
|
/// <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
///
|
|||
|
/// <20><><EFBFBD><EFBFBD>as5047d<37><64><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @param <20><>
|
|||
|
/// @return <20><><EFBFBD>ؽ<EFBFBD><D8BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-07<30><37><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_vert_receive_package()
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
unsigned int temp1 = 0;
|
|||
|
AS5047D_VERT_CLK_LOW;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
for(int j = 15; j >= 0; j--)
|
|||
|
{
|
|||
|
AS5047D_VERT_CLK_HIGH;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
temp = AS5047D_VERT_MISO_READ;
|
|||
|
temp1 = temp1 | (temp << j);
|
|||
|
AS5047D_VERT_CLK_LOW;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
temp = 0;
|
|||
|
}
|
|||
|
AS5047D_VERT_CLK_LOW;
|
|||
|
return temp1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <20><>ֱ<EFBFBD><D6B1><EFBFBD>Ͷ<EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
///
|
|||
|
/// <20><><EFBFBD>Ͷ<EFBFBD>ȡas5047d<37><64><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
/// @param add <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
/// @return <20><><EFBFBD><EFBFBD><CDB9><EFBFBD><EFBFBD>н<EFBFBD><D0BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD> 111 1111 1111 1111
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-07<30><37><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_vert_read_command(unsigned int add)
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
add = as5047d_command_type(add,AS5047D_READ_COMMAND);
|
|||
|
add = as5047d_Parity_bit_even(add);
|
|||
|
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
temp = as5047d_vert_send_package(add);
|
|||
|
//<2F><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return temp;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <20><>ֱ<EFBFBD><D6B1>ȡas5047d<37>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>е<EFBFBD>ֵ
|
|||
|
///
|
|||
|
/// <20><>ȡas5047d<37>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>е<EFBFBD>ֵ
|
|||
|
/// @param add <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
/// @return <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD>е<EFBFBD>ֵ
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-07<30><37><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_vert_read_data(unsigned int add)
|
|||
|
{
|
|||
|
|
|||
|
unsigned int temp = 0;
|
|||
|
|
|||
|
AS5047D_VERT_CSN_DISABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
AS5047D_VERT_CSN_ENABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
|
|||
|
//<2F><><EFBFBD>Ͷ<EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
as5047d_vert_read_command(add);
|
|||
|
|
|||
|
AS5047D_VERT_CSN_DISABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
AS5047D_VERT_CSN_ENABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp = as5047d_vert_nop_command();
|
|||
|
|
|||
|
AS5047D_VERT_CSN_DISABLE;
|
|||
|
return temp;
|
|||
|
}
|
|||
|
|
|||
|
/// <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>дָ<D0B4><D6B8>
|
|||
|
///
|
|||
|
/// <20><>as5047d<37><64><EFBFBD><EFBFBD>дָ<D0B4><D6B8>
|
|||
|
/// @param add <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
/// @return <20><><EFBFBD><EFBFBD><CDB9><EFBFBD><EFBFBD>н<EFBFBD><D0BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-08<30><38><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_vert_write_command(unsigned int add)
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
add = as5047d_command_type(add,AS5047D_WRITE_COMMAND);
|
|||
|
add = as5047d_Parity_bit_even(add);
|
|||
|
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
temp = as5047d_vert_send_package(add);
|
|||
|
//<2F><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return temp;
|
|||
|
}
|
|||
|
|
|||
|
/// <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>NOPָ<50><D6B8>
|
|||
|
///
|
|||
|
/// <20><>as5047d<37><64><EFBFBD><EFBFBD>NOPָ<50><D6B8>
|
|||
|
/// @param <20><>
|
|||
|
/// @return <20><><EFBFBD><EFBFBD><CDB9><EFBFBD><EFBFBD>н<EFBFBD><D0BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-08<30><38><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_vert_nop_command()
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
temp = as5047d_vert_send_package(AS5047D_NOP);
|
|||
|
//<2F><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return temp;
|
|||
|
}
|
|||
|
|
|||
|
/// <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
///
|
|||
|
/// <20><>as5047d<37><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>CLEAR ERROR FLAG command
|
|||
|
/// @param <20><>
|
|||
|
/// @return 1<><31><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-08<30><38><EFBFBD><EFBFBD>
|
|||
|
unsigned int as5047d_vert_cef_command()
|
|||
|
{
|
|||
|
unsigned int temp = 0;
|
|||
|
unsigned int temp1 = 0;
|
|||
|
|
|||
|
AS5047D_VERT_CSN_DISABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
AS5047D_VERT_CSN_ENABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
temp = as5047d_Parity_bit_even(AS5047D_CLEAR_ERROR_FLAG);
|
|||
|
as5047d_vert_send_package(temp);
|
|||
|
|
|||
|
AS5047D_VERT_CSN_DISABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
AS5047D_VERT_CSN_ENABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
temp1 = as5047d_vert_nop_command();
|
|||
|
|
|||
|
AS5047D_VERT_CSN_DISABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
AS5047D_VERT_CSN_ENABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
temp1 = as5047d_vert_nop_command();
|
|||
|
|
|||
|
AS5047D_VERT_CSN_DISABLE;
|
|||
|
return temp1;
|
|||
|
}
|
|||
|
|
|||
|
/// <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>дָ<D0B4><EFBFBD><EEB2A2>ȡ<EFBFBD><C8A1><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
///
|
|||
|
/// <20><>as5047d<37><64><EFBFBD><EFBFBD>дָ<D0B4><EFBFBD><EEB2A2>ȡ<EFBFBD><C8A1><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @param add <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
/// @param data <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @return <20><><EFBFBD><EFBFBD><CDB9><EFBFBD><EFBFBD>н<EFBFBD><D0BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-08<30><38><EFBFBD><EFBFBD>
|
|||
|
As5047DJudgeReceivePackage as5047d_vert_write_data(unsigned int add,unsigned int data)
|
|||
|
{
|
|||
|
As5047DJudgeReceivePackage temp;
|
|||
|
int i;
|
|||
|
for(i = 0; i < AS5047D_WRITE_NUM; i++)
|
|||
|
{
|
|||
|
AS5047D_VERT_CSN_DISABLE;
|
|||
|
as5047d_delay_nop(20);
|
|||
|
AS5047D_VERT_CSN_ENABLE;
|
|||
|
as5047d_delay_nop(20);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ָ<EFBFBD><D6B8>
|
|||
|
as5047d_vert_write_command(add);
|
|||
|
//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD><EFBFBD>оɵ<D0BE><C9B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
add = as5047d_command_type(data,AS5047D_WRITE_DATA);
|
|||
|
add = as5047d_Parity_bit_even(data);
|
|||
|
as5047d_vert_send_package(data);
|
|||
|
//<2F><><EFBFBD>ռĴ<D5BC><C4B4><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0X3FFF 0011 1111 1111 1111
|
|||
|
temp.package = as5047d_vert_nop_command();
|
|||
|
temp = as5047d_vert_judge_receive_package(temp.package);
|
|||
|
|
|||
|
as5047d_delay_nop(2);
|
|||
|
AS5047D_VERT_CSN_DISABLE;
|
|||
|
|
|||
|
if(temp.Operation_Result != 1)
|
|||
|
{
|
|||
|
as5047d_vert_cef_command();
|
|||
|
continue;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//<2F>ж<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD>·<EFBFBD><C2B7>صļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͬ
|
|||
|
if((data & 0X3FFF) == (temp.package & 0X3FFF))
|
|||
|
{
|
|||
|
temp.Operation_Result = 1;
|
|||
|
break;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return temp;
|
|||
|
}
|
|||
|
|
|||
|
/// <20><>ȡ<EFBFBD><C8A1>̨<EFBFBD><CCA8>ֱ<EFBFBD>Ƕ<EFBFBD>
|
|||
|
///
|
|||
|
/// <20><>ȡ<EFBFBD><C8A1>̨<EFBFBD><CCA8>ֱ<EFBFBD>Ƕ<EFBFBD>
|
|||
|
/// @param <20><>
|
|||
|
/// @param <20><>
|
|||
|
/// @return <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-1<><31>ȡʧ<C8A1>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ȡ<EFBFBD>ɹ<EFBFBD>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-27<32><37><EFBFBD><EFBFBD>
|
|||
|
float as5047d_vert_get_angle()
|
|||
|
{
|
|||
|
BSP_OS_SemWait(&ptz_vert_get_angle_mutex, 0u);
|
|||
|
float angle = 0;
|
|||
|
unsigned int angle1 = 0;
|
|||
|
unsigned int temp = 0;
|
|||
|
As5047DJudgeReceivePackage temp1;
|
|||
|
memset(&temp1, 0, sizeof(temp1));
|
|||
|
//<2F><>ȡ<EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp = as5047d_vert_read_data(AS5047D_ANGLE);
|
|||
|
//<2F>жϽ<D0B6><CFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp1 = as5047d_vert_judge_receive_package(temp);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
|
|||
|
if(temp1.Operation_Result == 1)
|
|||
|
{
|
|||
|
angle = (temp & 0x3FFF) * 0.02197265625;//0.02197265625 = 360.0 / 16384.0
|
|||
|
angle1 = (unsigned int)(angle * 1000.0);//ֻ<><D6BB><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3λ
|
|||
|
angle = (float)(angle1 / 1000.0);
|
|||
|
BSP_OS_SemPost(&ptz_vert_get_angle_mutex);
|
|||
|
return angle;
|
|||
|
}
|
|||
|
BSP_OS_SemPost(&ptz_vert_get_angle_mutex);
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/********************************************************************************/
|
|||
|
/********************************************************************************/
|
|||
|
/********************************************************************************/
|
|||
|
//ֱ<><D6B1>ͨ<EFBFBD><CDA8>ʱ<EFBFBD>Ӷ<EFBFBD>ȡ<EFBFBD>Ƕ<EFBFBD>
|
|||
|
unsigned int as5047d_hori_clk_read_angle()
|
|||
|
{
|
|||
|
unsigned int temp1 = 0;
|
|||
|
unsigned int temp2 = 0;
|
|||
|
AS5047D_HORI_CLK_LOW;
|
|||
|
AS5047D_HORI_MOSI_HIGH;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
for(int i = 15; i >= 0; i--)
|
|||
|
{
|
|||
|
AS5047D_HORI_CLK_LOW;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
AS5047D_HORI_CLK_HIGH;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
|
|||
|
temp1 = AS5047D_HORI_MISO_READ;
|
|||
|
temp2 = temp2 | (temp1 << i);
|
|||
|
|
|||
|
temp1 = 0;
|
|||
|
}
|
|||
|
AS5047D_HORI_CLK_LOW;
|
|||
|
return temp2;
|
|||
|
}
|
|||
|
|
|||
|
//<2F>Ķ<DEB8>ȡ<EFBFBD>Ƕȵķ<C8B5>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕȶ<C7B6>ȡ<EFBFBD>ٶ<EFBFBD>
|
|||
|
unsigned int as5047d_hori_read_data_a()
|
|||
|
{
|
|||
|
|
|||
|
unsigned int temp = 0;
|
|||
|
|
|||
|
AS5047D_HORI_CSN_DISABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
AS5047D_HORI_CSN_ENABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
|
|||
|
//<2F><><EFBFBD>Ͷ<EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
temp = as5047d_hori_clk_read_angle();
|
|||
|
|
|||
|
AS5047D_HORI_CSN_DISABLE;
|
|||
|
return temp;
|
|||
|
}
|
|||
|
|
|||
|
//<2F>µ<EFBFBD><C2B5>жϷ<D0B6>ʽ
|
|||
|
As5047DJudgeReceivePackage as5047d_hori_judge_receive_package_a(unsigned int package)
|
|||
|
{
|
|||
|
As5047DJudgeReceivePackage temp1;
|
|||
|
memset(&temp1,0,sizeof(temp1));
|
|||
|
|
|||
|
temp1.package = package;
|
|||
|
temp1.Operation_Result = 1;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>żУ<C5BC><D0A3><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
|||
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(package != as5047d_Parity_bit_even(package))
|
|||
|
{
|
|||
|
temp1.parity_error_package = 1;
|
|||
|
temp1.Operation_Result = 0;
|
|||
|
}
|
|||
|
return temp1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//<2F>µĶ<C2B5>ȡ<EFBFBD>Ƕȷ<C7B6>ʽ
|
|||
|
float as5047d_hori_get_angle_a()
|
|||
|
{
|
|||
|
BSP_OS_SemWait(&ptz_hori_get_angle_mutex, 0u);
|
|||
|
float angle = 0;
|
|||
|
unsigned int angle1 = 0;
|
|||
|
unsigned int temp = 0;
|
|||
|
As5047DJudgeReceivePackage temp1;
|
|||
|
memset(&temp1, 0, sizeof(temp1));
|
|||
|
//<2F><>ȡ<EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp = as5047d_hori_read_data_a();
|
|||
|
//<2F>жϽ<D0B6><CFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp1 = as5047d_hori_judge_receive_package_a(temp);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
|
|||
|
if(temp1.Operation_Result == 1)
|
|||
|
{
|
|||
|
angle = (temp & 0x3FFF) * 0.02197265625;//0.02197265625 = 360.0 / 16384.0
|
|||
|
angle1 = (unsigned int)(angle * 1000.0);//ֻ<><D6BB><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3λ
|
|||
|
angle = (float)(angle1 / 1000.0);
|
|||
|
BSP_OS_SemPost(&ptz_hori_get_angle_mutex);
|
|||
|
return angle;
|
|||
|
}
|
|||
|
BSP_OS_SemPost(&ptz_hori_get_angle_mutex);
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************************/
|
|||
|
/********************************************************************************/
|
|||
|
/********************************************************************************/
|
|||
|
|
|||
|
//ֱ<><D6B1>ͨ<EFBFBD><CDA8>ʱ<EFBFBD>Ӷ<EFBFBD>ȡ<EFBFBD>Ƕ<EFBFBD>
|
|||
|
unsigned int as5047d_vert_clk_read_angle()
|
|||
|
{
|
|||
|
unsigned int temp1 = 0;
|
|||
|
unsigned int temp2 = 0;
|
|||
|
AS5047D_VERT_CLK_LOW;
|
|||
|
AS5047D_VERT_MOSI_HIGH;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
for(int i = 15; i >= 0; i--)
|
|||
|
{
|
|||
|
AS5047D_VERT_CLK_LOW;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
AS5047D_VERT_CLK_HIGH;
|
|||
|
as5047d_delay_nop(2);
|
|||
|
|
|||
|
temp1 = AS5047D_VERT_MISO_READ;
|
|||
|
temp2 = temp2 | (temp1 << i);
|
|||
|
|
|||
|
temp1 = 0;
|
|||
|
}
|
|||
|
AS5047D_VERT_CLK_LOW;
|
|||
|
return temp2;
|
|||
|
}
|
|||
|
|
|||
|
//<2F>Ķ<DEB8>ȡ<EFBFBD>Ƕȵķ<C8B5>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕȶ<C7B6>ȡ<EFBFBD>ٶ<EFBFBD>
|
|||
|
unsigned int as5047d_vert_read_data_a()
|
|||
|
{
|
|||
|
|
|||
|
unsigned int temp = 0;
|
|||
|
|
|||
|
AS5047D_VERT_CSN_DISABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
AS5047D_VERT_CSN_ENABLE;
|
|||
|
as5047d_delay_nop(4);
|
|||
|
|
|||
|
//<2F><><EFBFBD>Ͷ<EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
temp = as5047d_vert_clk_read_angle();
|
|||
|
|
|||
|
AS5047D_VERT_CSN_DISABLE;
|
|||
|
return temp;
|
|||
|
}
|
|||
|
|
|||
|
//<2F>µ<EFBFBD><C2B5>жϷ<D0B6>ʽ
|
|||
|
As5047DJudgeReceivePackage as5047d_vert_judge_receive_package_a(unsigned int package)
|
|||
|
{
|
|||
|
As5047DJudgeReceivePackage temp1;
|
|||
|
memset(&temp1,0,sizeof(temp1));
|
|||
|
|
|||
|
temp1.package = package;
|
|||
|
temp1.Operation_Result = 1;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>żУ<C5BC><D0A3><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
|||
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(package != as5047d_Parity_bit_even(package))
|
|||
|
{
|
|||
|
temp1.parity_error_package = 1;
|
|||
|
temp1.Operation_Result = 0;
|
|||
|
}
|
|||
|
return temp1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//<2F>µĶ<C2B5>ȡ<EFBFBD>Ƕȷ<C7B6>ʽ
|
|||
|
float as5047d_vert_get_angle_a()
|
|||
|
{
|
|||
|
BSP_OS_SemWait(&ptz_vert_get_angle_mutex, 0u);
|
|||
|
float angle = 0;
|
|||
|
unsigned int angle1 = 0;
|
|||
|
unsigned int temp = 0;
|
|||
|
As5047DJudgeReceivePackage temp1;
|
|||
|
memset(&temp1, 0, sizeof(temp1));
|
|||
|
//<2F><>ȡ<EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp = as5047d_vert_read_data_a();
|
|||
|
//<2F>жϽ<D0B6><CFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp1 = as5047d_vert_judge_receive_package_a(temp);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
|
|||
|
if(temp1.Operation_Result == 1)
|
|||
|
{
|
|||
|
angle = (temp & 0x3FFF) * 0.02197265625;//0.02197265625 = 360.0 / 16384.0
|
|||
|
angle1 = (unsigned int)(angle * 1000.0);//ֻ<><D6BB><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3λ
|
|||
|
angle = (float)(angle1 / 1000.0);
|
|||
|
BSP_OS_SemPost(&ptz_vert_get_angle_mutex);
|
|||
|
return angle;
|
|||
|
}
|
|||
|
BSP_OS_SemPost(&ptz_vert_get_angle_mutex);
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************************/
|
|||
|
/********************************************************************************/
|
|||
|
/********************************************************************************/
|
|||
|
|