📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: Main.c
** Last modified Date: 2007-03-24
** Last Version: 1.0
** Description: Basic experiment of the quadrature encoder 正交编码器的基础实验
**
**------------------------------------------------------------------------------------------------------
** Created By: Steven Zhou 周绍刚
** Created date: 2007-04-05
** Version: 1.0
** Descriptions: The original version 初始版本
**
**------------------------------------------------------------------------------------------------------
** Modified by: Kang qinhua
** Modified date: 2008.01.19
** Version: v1.1
** Description:
**
********************************************************************************************************/
#define HWREG(x) ( *((volatile unsigned long *)(x)) )
#define SYSCTL_RCGC1 0x400fe104 // 运行模式时钟门控寄存器1
#define SYSCTL_RCGC2 0x400fe108 // 运行模式时钟门控寄存器2
#define SYSCTL_PERIPH_GPIOC 0x20000004 // GPIO C在系统控制器中的地址
#define SYSCTL_PERIPH_GPIOD 0x20000008 // GPIO D在系统控制器中的地址
#define SYSCTL_PERIPH_QEI 0x10000100 // 正交编码器在系统控制器中的地址
#define GPIO_PORTC_BASE 0x40006000 // GPIO C的基地址
#define GPIO_PORTD_BASE 0x40007000 // GPIO D的基地址
#define GPIO_O_DIR 0x00000400 // 方向寄存器
#define GPIO_O_AFSEL 0x00000420 // 模式选择寄存器
#define QEI_BASE 0x4002C000 // 正交编码器的基地址
#define QEI_O_CTL 0x00000000 // 正交编码器的控制寄存器的偏移地址
#define QEI_O_LOAD 0x00000010 // 正交编码器的装载寄存器的偏移地址
#define QEI_O_SPEED 0x0000001C // 正交编码器的速度寄存器的偏移地址
#define QEI_CONFIG_CAPTURE_A_B 0x00000008 // A,B通道边沿计数
#define QEI_CTL_ENABLE 0x00000001 // 使能正交编码器
#define QEI_CTL_VELEN 0x00000020 // 使能速度检测功能
/*********************************************************************************************************
** Function name: main
**
** Descriptions: Main function of the project 工程的主函数
**
** Input parameters: None 无
** Returned value: None 无
**
** Used global variables: None 无
** Calling modules: None 无
**
**
** Created by: Steven Zhou 周绍刚
** Created Date: 2007-03-24
**-------------------------------------------------------------------------------------------------------
** Modified by: Kang qinhua
** Modified date: v1.1
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int main(void)
{
unsigned int i;
HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOC & 0x0FFFFFFF; // 使能PC口外设
HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOD & 0x0FFFFFFF; // 使能PD口外设
HWREG(SYSCTL_RCGC1) |= SYSCTL_PERIPH_QEI & 0x0FFFFFFF; // 使能正交编码器外设
HWREG(GPIO_PORTC_BASE + GPIO_O_DIR) &= 0xFFFFFFAF; // 设置PC4,PC6为输入
HWREG(GPIO_PORTC_BASE + GPIO_O_AFSEL) |=0x00000050; // 选择硬件功能
HWREG(GPIO_PORTD_BASE + GPIO_O_DIR) &= 0xFFFFFF7F; // 设置PD7为输入
HWREG(GPIO_PORTD_BASE + GPIO_O_AFSEL) |=0x00000080; // 选择硬件功能
HWREG(QEI_BASE + QEI_O_CTL) |= QEI_CONFIG_CAPTURE_A_B; // 使用A,B通道共4个边沿计算速度
HWREG(QEI_BASE + QEI_O_LOAD) = 60000-1; // 设置速度检测周期为 0.01秒
HWREG(QEI_BASE + QEI_O_CTL) |= QEI_CTL_ENABLE; // 使能正交编码器
HWREG(QEI_BASE + QEI_O_CTL) |= QEI_CTL_VELEN; // 使能正交编码器的速度检测功能
while(1)
{
i = HWREG(QEI_BASE + QEI_O_SPEED); // 读出上一个周期的速度计数值
i = (i*100*60)/(4*512); // 转化为 转/分钟
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -