一、代码共享

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);
}

三、存在的问题:

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

智能车学习(四)—— Cmp学习的更多相关文章

  1. SCARA——OpenGL入门学习四(颜色)

    OpenGL入门学习[四] 本次学习的是颜色的选择.终于要走出黑白的世界了~~ OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数 ...

  2. 智能车学习(十五)——K60野火2013版例程

    一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,);//定时中断初始化 set_vector_handler(PIT0_ ...

  3. apue第四章学习总结

    apue第四章学习总结 4.1.若以stat函数去替换lstat函数,会发生: 原来的目录路径: $:~/workspace/apue2/include$ ls -l apue.h abc lrwxr ...

  4. TweenMax动画库学习(四)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  5. Factorization Machines 学习笔记(四)学习算法

      近期学习了一种叫做 Factorization Machines(简称 FM)的算法.它可对随意的实值向量进行预測.其主要长处包含: 1) 可用于高度稀疏数据场景:2) 具有线性的计算复杂度.本文 ...

  6. 《Linux内核设计与实现》第四章学习笔记

    <Linux内核设计与实现>第四章学习笔记           ——进程调度 姓名:王玮怡  学号:20135116 一.多任务 1.多任务操作系统的含义 多任务操作系统就是能同时并发地交 ...

  7. SVG 学习<四> 基础API

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  8. 《Linux内核设计与实现》第四章学习笔记——进程调度

                                                                        <Linux内核设计与实现>第四章学习笔记——进程调 ...

  9. Android JNI学习(四)——JNI的常用方法的中文API

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  10. Spring实战第四章学习笔记————面向切面的Spring

    Spring实战第四章学习笔记----面向切面的Spring 什么是面向切面的编程 我们把影响应用多处的功能描述为横切关注点.比如安全就是一个横切关注点,应用中许多方法都会涉及安全规则.而切面可以帮我 ...

随机推荐

  1. cf555b

    题意:按顺序给出多个互不相交的区间(表示一些小岛),和一些可以连接区间的桥,每个桥有固定的长度.区间和桥的数量都是2*10^5. 两个相邻的小岛之间的桥的长度必须小于等于最远点距离,大于等于最近点距离 ...

  2. 汉企PHP开班

    明天PHP正式开班,没什么大目标 ,在四个半月的时间吧基础知识掌握牢固,自信的面对企业.

  3. ACdream 1224 Robbers (贪心)

    一道贪心题,很久前做的,代码是我以前写的. 题意:有n个抢劫者抢劫了m块金子,然后第i个人平分xi/y块金子,但是会有除不尽的情况而金子不可再分,那么每个人都有一个不满意度fabs(xi / y - ...

  4. .net在当前日期的基础上加一天

    比如今天是:2015-11-10 18:57:01,在这个基础上加一天,那么就是2015-11-11 18:57:01,代码如下: DateTime now_dt = DateTime.Now; ). ...

  5. mysql TIMESTAMP 报错

    [Err] 1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTA ...

  6. DOM动画效果基础入门

    一.什么是DOM? Document Object Model文档对象模型 当创建一个网页并把它加载到web浏览器中时,如果没有document(文档): DOM根据你编写的网页文档创建一个文档对象 ...

  7. 1.2 容器-container

    1) *  容器是用于存放数据的类模板,实例化后就是容器类.用容器定义的对象称为容器对象. **类型相同的容器可以进行比较运算 2)分类 容器可分为顺序容器和关联容器两大类. *:顺序容器 元素的位置 ...

  8. 傻瓜式十分钟免费开启 HTTPS,是时候为你的站点加上小绿锁了

    http://gold.xitu.io/entry/57df65690bd1d00057f9455b?from=singlemessage&isappinstalled=0 原文链接:http ...

  9. 【javascript】 for循环小技巧

    最近在读[Jquery技术内幕],里面介绍了一种js for循环的实用写法. 一般写for循环是这么写的: var elemts = [1,2,3,4,5]; for(var i=0; i<el ...

  10. HTTP中302与301的区别以及在ASP.NET中如何实现

    一.官方说法301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于: 301 redirect: 301 代表永久性转移(Permanently Moved).302 re ...