123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- /******************************************************************************************************************************************
- * 文件名称: SWM341_qei.c
- * 功能说明: SWM341单片机的正交编码器接口QEI功能驱动库
- * 技术支持: http://www.synwit.com.cn/e/tool/gbook/?bid=1
- * 注意事项:
- * 版本日期: V1.0.0 2013年06月30日
- * 升级记录:
- *
- *
- *******************************************************************************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH CODING INFORMATION
- * REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A RESULT, SYNWIT SHALL NOT BE HELD LIABLE
- * FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
- * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN IN CONN-
- * -ECTION WITH THEIR PRODUCTS.
- *
- * COPYRIGHT 2012 Synwit Technology
- *******************************************************************************************************************************************/
- #include "SWM341.h"
- #include "SWM341_qei.h"
- /******************************************************************************************************************************************
- * 函数名称: QEI_Init()
- * 功能说明: 正交编码器接口QEI初始化
- * 输 入: QEI_TypeDef * QEIx 指定要被设置的正交编码器接口,有效值包括QEI
- * QEI_InitStructure * initStruct 包含正交编码器接口相关设定值的结构体
- * 输 出: 无
- * 注意事项: 无
- ******************************************************************************************************************************************/
- void QEI_Init(QEI_TypeDef * QEIx,QEI_InitStructure * initStruct)
- {
- switch((uint32_t)QEIx)
- {
- case ((uint32_t)QEI):
- SYS->CLKEN1 |= (1 << SYS_CLKEN1_QEI_Pos);
- break;
- }
- QEI_Stop(QEIx); //配置前关闭QEI模块
- QEIx->CR = (initStruct->swapAB << QEI_CR_ABSWAP_Pos) |
- (initStruct->mode << QEI_CR_X2X4_Pos) |
- (1 << QEI_CR_RSTSRC_Pos) |
- (1 << QEI_CR_MODE_Pos);
- QEIx->POSCNT = 0;
- QEIx->MAXCNT = initStruct->maxcnt;
- QEIx->IC = 0x0F;
- QEIx->IE = 0x0F;
- QEIx->IM = (initStruct->intINDEXEn << QEI_IM_INDEX_Pos) |
- (initStruct->intMATCHEn << QEI_IM_MATCH_Pos) |
- (initStruct->intCNTOVEn << QEI_IM_CNTOV_Pos) |
- (initStruct->intERROREn << QEI_IM_ERROR_Pos);
- if(initStruct->intINDEXEn | initStruct->intMATCHEn | initStruct->intCNTOVEn | initStruct->intERROREn)
- {
- NVIC_EnableIRQ(QEI_IRQn);
- }
- }
- /******************************************************************************************************************************************
- * 函数名称: QEI_Start()
- * 功能说明: 启动指定QEI
- * 输 入: QEI_TypeDef * QEIx 指定要被设置的正交编码器接口,有效值包括QEI
- * 输 出: 无
- * 注意事项: 无
- ******************************************************************************************************************************************/
- void QEI_Start(QEI_TypeDef * QEIx)
- {
- QEIx->CR |= (1 << QEI_CR_ENA_Pos);
- }
- /******************************************************************************************************************************************
- * 函数名称: QEI_Stop()
- * 功能说明: 关闭指定QEI
- * 输 入: QEI_TypeDef * QEIx 指定要被设置的正交编码器接口,有效值包括QEI
- * 输 出: 无
- * 注意事项: 无
- ******************************************************************************************************************************************/
- void QEI_Stop(QEI_TypeDef * QEIx)
- {
- QEIx->CR &= ~(1 << QEI_CR_ENA_Pos);
- }
- /******************************************************************************************************************************************
- * 函数名称: QEI_IntEn()
- * 功能说明: QEI中断使能
- * 输 入: QEI_TypeDef * QEIx 指定要被设置的正交编码器接口,有效值包括QEI
- * uint32_t it interrupt type,取值QEI_INT_INDEX、QEI_INT_MATCH、QEI_INT_CNTOV、QEI_INT_ERROR 及其或
- * 输 出: 无
- * 注意事项: 无
- ******************************************************************************************************************************************/
- void QEI_IntEn(QEI_TypeDef * QEIx, uint32_t it)
- {
- QEIx->IM |= it;
- switch((uint32_t)QEIx)
- {
- case ((uint32_t)QEI):
- NVIC_EnableIRQ(QEI_IRQn);
- break;
- }
- }
- /******************************************************************************************************************************************
- * 函数名称: QEI_IntDis()
- * 功能说明: QEI中断关闭
- * 输 入: QEI_TypeDef * QEIx 指定要被设置的正交编码器接口,有效值包括QEI
- * uint32_t it interrupt type,取值QEI_INT_INDEX、QEI_INT_MATCH、QEI_INT_CNTOV、QEI_INT_ERROR 及其或
- * 输 出: 无
- * 注意事项: 无
- ******************************************************************************************************************************************/
- void QEI_IntDis(QEI_TypeDef * QEIx, uint32_t it)
- {
- QEIx->IM &= ~it;
- }
- /******************************************************************************************************************************************
- * 函数名称: QEI_IntClr()
- * 功能说明: QEI中断标志清除
- * 输 入: QEI_TypeDef * QEIx 指定要被设置的正交编码器接口,有效值包括QEI
- * uint32_t it interrupt type,取值QEI_INT_INDEX、QEI_INT_MATCH、QEI_INT_CNTOV、QEI_INT_ERROR 及其或
- * 输 出: 无
- * 注意事项: 无
- ******************************************************************************************************************************************/
- void QEI_IntClr(QEI_TypeDef * QEIx, uint32_t it)
- {
- QEIx->IC = it;
- }
- /******************************************************************************************************************************************
- * 函数名称: QEI_IntStat()
- * 功能说明: QEI中断状态查询
- * 输 入: QEI_TypeDef * QEIx 指定要被设置的正交编码器接口,有效值包括QEI
- * uint32_t it interrupt type,取值QEI_INT_INDEX、QEI_INT_MATCH、QEI_INT_CNTOV、QEI_INT_ERROR 及其或
- * 输 出: uint32_t 0 没有中断发生 非0值 有中断发生
- * 注意事项: 无
- ******************************************************************************************************************************************/
- uint32_t QEI_IntStat(QEI_TypeDef * QEIx, uint32_t it)
- {
- return (QEIx->IF & it);
- }
|