一、代码共享

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. javascript 数组去重

    2015年5月15日 20:17:05 星期五 原理: .......(说不清楚, 自己看代码吧, 很简单.....) //去重 var hash_already_input = {}; for (v ...

  2. nyoj17_又做最大递增子序列

    单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4   输入 ...

  3. 迷宫问题_BFS_挑战程序设计竞赛p34

    给定一个N*M的迷宫,求从起点到终点的最小步数. N,M<100: 输入: 10 10#S######.#......#..#.#.##.##.#.#........##.##.####.... ...

  4. codeforces 492C. Vanya and Exams 解题报告

    题目链接:http://codeforces.com/problemset/problem/492/C 题目意思:给出 3 个整数:n,  r,  avg.然后有 n 行,每行有两个数:第 i 行有 ...

  5. 数据结构-链表逆置(c++模板类实现)

    链表结点类模板定义: template <class T> class SingleList; template <class T> class Node { private: ...

  6. mybatis跨XML引用

    resultMap中association标签的select属性使用嵌套查询的时候需要引用其它xml文件的配置 此时可以用要引用xml的namespace.引用select的ID 如 <resu ...

  7. php继承、多态

    继承: 概念:子类可以继承父类的一切 特点:单继承:一个子类只能有一个父类,一个父类可以派生出多个子类 方法重写:在子类里面对父类的方法进行重写. 重写:override 重载,编译多态:overlo ...

  8. IIS 发布mvc 403.14

    转载: iis7 发布mvc3 遇到的HTTP错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容及Login on failed for “IIS APPPOOL\ASP ...

  9. xmpp xml基本语义

    基本语义 9.2.1 消息语义 <message/>节种类可被看作“推”机制,一个实体推信息给其它实体,与 EMAIL 系统中发生的通信类似.所有消息节应该拥有‘to’ 属性,指定有意的消 ...

  10. xmpp即时通讯的笔记(摘抄)

    xmpp的使用: 即时通讯 instant messaging(IM) :  -->实时收发信息! 即时通讯相关软件: **QQ,MSN,GoogleTalk,AIM,Jabber(XMPP别名 ...