zoukankan      html  css  js  c++  java
  • 智能车学习(四)—— Cmp学习

    一、代码共享

    1、cmp.h

    #ifndef HSCMP_H
    #define HSCMP_H
    
    //1 头文件
    #include "common.h"
    
    //2 宏定义
    //2.1比较模块号宏定义
    #define cmpch0 CMP0_BASE_PTR
    
    //2.2 比较模块中断号处理
    #define CMP0irq 16
    
    //3函数声明
    //============================================================================
    //函数名称:hw_cmp_init
    //函数返回     无
    //参数说明;reference:参考电压选择  0=VDDA 3.3V 1=VREF 1.2V
    //         plusChannel: 正比较通道号
    //         minusChannel:负比较通道号
    //功能概要:CMP模块初始化
    //============================================================================
    void hw_cmp_init(uint8_t reference,uint8_t plusChannel,uint8_t minusChannel);
    
            
            
            
    //============================================================================
    //函数名称:hw_enable_cmp_int
    //函数返回:无
    //参数说明:无
    //功能概要:开比较中断。
    //============================================================================
    void hw_enable_cmp_int();
    
            
            
            
    //============================================================================
    //函数名称:hw_disable_cmp_int
    //函数返回:无
    //参数说明:无
    //功能概要:关比较中断
    //============================================================================
    void hw_disable_cmp_int();
            
            
            
    
    #endif  //__ISR_H

    2、cmp.c

    #include "cmp.h"
    
    
    //============================================================================
    //函数名称:hw_cmp_init
    //函数返回     无
    //参数说明    reference:参考电压选择  0=VDDA 3.3V   1=VREF 1.2V
    //           plusChannel: 正比较通道号
    //           minusChannel:负比较通道号
    //         通道0,1,2,3 对应 PTC6, PTC7, PTC8, PTC9
    //功能概要:CMP模块初始化
    //============================================================================
    void hw_cmp_init(uint8_t reference,uint8_t plusChannel,uint8_t minusChannel)
    {
            //通过获取模块号选择比较器基址
            CMP_MemMapPtr cmpch = CMP0_BASE_PTR;
    
            if(plusChannel>7)
                plusChannel = 7;
            if(plusChannel<=0)
                plusChannel = 0;
    
            if(minusChannel>7)
                minusChannel = 7;
            if(minusChannel<=0)
                minusChannel = 0;
    
            //使能比较模块时钟
            SIM_SCGC4 |=SIM_SCGC4_CMP_MASK;
    
            //初始化寄存器
            CMP_CR0_REG(cmpch) = 0;
           CMP_CR1_REG(cmpch) = 0;
           CMP_FPR_REG(cmpch) = 0;
            //如果设置了标志清除中断标志
            CMP_SCR_REG(cmpch) = 0x06;
           CMP_DACCR_REG(cmpch) = 0;
           CMP_MUXCR_REG(cmpch) = 0;
    
            //配置寄存器
            //过滤,数字延时禁止
            CMP_CR0_REG(cmpch) = 0x00;
            //连续模式,高速比较,无过滤输出,输出引脚禁止
            CMP_CR1_REG(cmpch) = 0x16;
            //过滤禁止
            CMP_FPR_REG(cmpch) = 0x00;
            //使能上升沿和下降沿中断,清标志位
            CMP_SCR_REG(cmpch) = 0x1E;
    
    
            if(reference==0)//参考电压选择VDD3.3V
            {
                //6位参考DAC使能,选择VDD作为DAC参考电压
                CMP_DACCR_REG(cmpch) |= 0xC0;
            }
            else//参考电压选择VREF OUT 1.2V
            {
                //6位参考DAC使能,选择VREF作为DAC参考电
                CMP_DACCR_REG(cmpch) |= 0x80;
            }
    
    
            CMP_MUXCR_REG(cmpch) = CMP_MUXCR_PSEL(plusChannel)//正通道选择
                                 | CMP_MUXCR_MSEL(minusChannel);//负通道选择
    
    
            //选择输出引脚
            PORTC_PCR5=PORT_PCR_MUX(6);
            //CMP使能
            CMP_CR1_REG(cmpch) |= CMP_CR1_EN_MASK;
    
    }
    
    
    
    
    //============================================================================
    //函数名称:hw_enable_cmp_int
    //函数返回:无
    //参数说明:无
    //功能概要:开比较中。
    //============================================================================
    void hw_enable_cmp_int()
    {
        //通过获取模块号选择比较器基址
         CMP_MemMapPtr cmpch = CMP0_BASE_PTR;
        //开放cmp接收中断,上升沿下降沿均触发
         CMP_SCR_REG(cmpch)|=  CMP_SCR_IEF_MASK  | CMP_SCR_IER_MASK;
         enable_irq(16);
    }
    
    //============================================================================
    //函数名称:hw_disable_cmp_int
    //函数返回:无
    //参数说明:无
    //功能概要:关比较中断
    //============================================================================
    void hw_disable_cmp_int()
    {
        //通过获取模块号选择比较器基址
        CMP_MemMapPtr cmpch = CMP0_BASE_PTR;
        //关闭cmp接收中断,上升沿下降沿均关闭
        CMP_SCR_REG(cmpch)&=(~CMP_SCR_IEF_MASK) | (~CMP_SCR_IER_MASK );
        //关接收引脚的IRQ中断
        disable_irq(16);
    
    }

    二、使用方法

    hw_enable_cmp_int();
        
    
        while(1)
        {
          hw_cmp_init(0,PTC6,PTC7);
        }

    三、存在的问题:

          代码能够执行,可以通过编译看结果,但是不知道是哪个管教进行输出的。

  • 相关阅读:
    proxool数据库连接池用法
    SQL Server 用链接server 同步MySQL
    使用DNSCrypt解决Dropbox污染问题
    POJ 1952 BUY LOW, BUY LOWER DP记录数据
    使用doxygen为C/C++程序生成中文文档
    构造器(二)----指定构造器、便利构造器
    Spring Boot 部署与服务配置
    排序算法c语言描述---冒泡排序
    【转】Android Studio系列教程一--下载与安装
    【转】Windows环境下Android Studio v1.0安装教程
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4862265.html
Copyright © 2011-2022 走看看