📄 use_encode_roll_driver.c
字号:
/*****************************************************************
* 函数库名称:旋转编码器驱动函数库 *
* 版本: v0.01 *
* 作者: I ROBOT *
* 创建日期: Copyright (C) 2008年10月24日 *
*----------------------------------------------------------------*
* [支持库] *
* 支持库名称:USE_Encode_Roll_Driver.h(旋转编码器驱动配置库) *
* 支持库版本:v0.01 *
* 支持库说明:与本文件相应的函数声明 *
*----------------------------------------------------------------*
* [版本更新] *
* 更新: I ROBOT *
* 更新日期: *
* 版本: *
*----------------------------------------------------------------*
* [版本历史] *
* v0.01 创建版本,创建了旋转编码器数据采样的函数 *
*----------------------------------------------------------------*
* [使用说明] *
* 1.直接调用数据采样函数 *
*****************************************************************/
/********************
* 头 文 件 配 置 区 *
********************/
# include "USE_Encode_Roll_Driver.h"
/********************
* 系 统 宏 定 义 *
********************/
/*------------------*
* 常 数 宏 定 义 *
*------------------*/
/*------------------*
* 动 作 宏 定 义 *
*------------------*/
/********************
* 模块结构体定义区 *
********************/
/********************
* 函 数 声 明 区 *
********************/
void Encode_Roll_Hardware_Configure(void);
static void MCU_Register_Configure(void);
static void MCU_Port_Configure(void);
static void INT0_ISR_PHASE_A(void);
static void INT1_ISR_PHASE_B(void);
/********************
* 模块函数声明区 *
********************/
/********************
* 模块变量声明区 *
********************/
/********************
* 全局变量声明区 *
********************/
extern INT32 g_dwPulse_Counter = 0;
/******************************************************************
* 函 数 定 义 区 *
******************************************************************/
/****************************************
* 函数说明: Encode_Roll硬件配置函数 *
* 输入 :无 *
* 输出 :无 *
* 调用函数: 无 *
****************************************/
void Encode_Roll_Hardware_Configure(void)
{
//TODO:在这里添加Encode_Roll的硬件配置代码
MCU_Register_Configure();
MCU_Port_Configure();
}
/****************************************
* 函数说明: MCU寄存器配置函数 *
* 输入 :无 *
* 输出 :无 *
* 调用函数: 无 *
****************************************/
static void MCU_Register_Configure(void)
{
//TODO:在这里添加MCU寄存器配置代码
MCUCR |= 0x03;
GICR |= 0x40;
//开启外中断0
MCUCR |= 0x0F;
GICR |= 0x80;
//开启外中断1
}
/****************************************
* 函数说明: MCU端口配置函数 *
* 输入 :无 *
* 输出 :无 *
* 调用函数: 无 *
****************************************/
static void MCU_Port_Configure(void)
{
//TODO:在这里添加MCU端口配置代码
DDRD &= ~(BIT(PD2)|BIT(PD3));
PORTD |= BIT(PD2)|BIT(PD3);
}
/****************************************
* 函数说明: Encode_Roll外中断调用函数 *
* 输入 :无 *
* 输出 :无 *
* 调用函数: 无 *
****************************************/
//TODO:在这里配置中断向量
#pragma interrupt_handler INT0_ISR_PHASE_A:iv_INT0
static void INT0_ISR_PHASE_A(void)
{
static chEven_Odd_Change = 0;
switch (chEven_Odd_Change)
{
case 0:
if (A_RISING_AND_B_HIGH)
{
g_dwPulse_Counter++;
}
else
{
g_dwPulse_Counter--;
}
A_USE_FALLING_EDGE_DETECT;
break;
case 1:
if (A_FALLING_AND_B_HIGH)
{
g_dwPulse_Counter--;
}
else
{
g_dwPulse_Counter++;
}
A_USE_RISING_EDGE_DETECT;
break;
}
chEven_Odd_Change = (chEven_Odd_Change+1)&(0X01);
}
/****************************************
* 函数说明: Encode_Roll外中断调用函数 *
* 输入 :无 *
* 输出 :无 *
* 调用函数: 无 *
****************************************/
//TODO:在这里配置中断向量
#pragma interrupt_handler INT1_ISR_PHASE_B:iv_INT1
static void INT1_ISR_PHASE_B(void)
{
static chEven_Odd_Change = 0;
switch (chEven_Odd_Change)
{
case 0:
if (B_RISING_AND_A_HIGH)
{
g_dwPulse_Counter--;
}
else
{
g_dwPulse_Counter++;
}
B_USE_FALLING_EDGE_DETECT;
break;
case 1:
if (B_FALLING_AND_A_HIGH)
{
g_dwPulse_Counter++;
}
else
{
g_dwPulse_Counter--;
}
B_USE_RISING_EDGE_DETECT;
break;
}
chEven_Odd_Change = (chEven_Odd_Change+1)&(0X01);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -