一、代码共享

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. offset求结构体成员的偏移量

    [代码]  C++ Code  12345678910111213141516171819202122232425262728293031   /* version: 1.0 author: hell ...

  2. 使用Servlet和jdbc创建用户登录验证

    首先创建一个用户表,用来保存用户名 密码,并插入几条数据 mysql> desc user;+----------+-------------+------+-----+---------+-- ...

  3. MongoDB 副本集管理(不定时更新)

    简介: 前面介绍完了副本集的搭建.用户的管理.参数和日常操作的说明,那副本集搭建好该如何管理呢?现在来说明下副本集的日常查看和管理. 说明: 1)查看命令行参数:db.serverCmdLineOpt ...

  4. glib-2.49.4-msys-x86-staticLib.7z

    glib-2.49.4 MSYS 静态库 编译 export LIBFFI_CFLAGS=" -I/usr/local/lib/libffi-3.2.1/include " \ e ...

  5. Effective C++ -----条款44:将与参数无关的代码抽离templates

    Templates生成多个classes和多个函数,所以任何template代码都不该与某个造成膨胀的template参数产生相依关系. 因非类型模板参数(non-type template para ...

  6. WPS文字在表格中打字自动跳动

    可以设置表格的属性来实现. 1.选择表格,点击鼠标右键,选择“表格属性” 2.在出现的对话框中,文字环绕选择“无”,“行”的设置为“允许跨页断行”,就可以了.

  7. DropDownList如何添加一个空白的选项

    ddl_class.Items.Insert(0,new ListItem("",""));

  8. struts2文件上传和下载

    1. struts系统中的拦截器介绍 过滤器:javaweb中的服务器组件,主要针对的请求和响应进行拦截. 拦截器:主要针对方法的调用,进行拦截器,当使用代理对象调用某个方法时候 对方法的调用进行拦截 ...

  9. 获取driver网络路径名称

    'get the web path of the drive s: Dim MM As New Management.ManagementObject(String.Format("win3 ...

  10. 3dmax导出3ds具有过多要导出的面超过64k解决方法

    参考:http://blog.sina.com.cn/s/blog_7a71dd090100w3r0.html 修改器->网格编辑->ProOptimizer 选中对象, 原始模型 顶点数 ...