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

📄 use_encode_roll_driver.c

📁 MSP430z_f247.rar
💻 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 + -