一、代码共享

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. jenkins gitlab整合注意事项

    jenkins整合gitlab时,Source Code Management添加gitlab仓库路径无论怎么尝试都报如下两个异常: Failed to connect to repository : ...

  2. Unity关于用LoadLevelAdditiveAsync导致新场景的Navmesh数据不正确Loading条的实践

    为了解决用Application.LoadLevelAdditiveAsync 导致新场景的Navmesh数据不正确(我们用的是4.63),我们现在loading条做法是先切到Loading的场景,然 ...

  3. ACM/ICPC 之 Floyd范例两道(POJ2570-POJ2263)

    两道以Floyd算法为解法的范例,第二题如果数据量较大,须采用其他解法 POJ2570-Fiber Network //经典的传递闭包问题,由于只有26个公司可以采用二进制存储 //Time:141M ...

  4. ubunto安装pycharm

    转载:http://www.cnblogs.com/zhcncn/p/4027025.html 1. 下载 http://www.jetbrains.com/pycharm/download/ 选择L ...

  5. UIDynamic动画

    UIDynamic是从iOS7开始引入的技术 属于UIkit框架 可以模拟显示生活中的物理现象 如碰撞 抖动 摆动等 一.使用UIDynamic步骤: 1.创建一个动力效果器UIDynamicAnim ...

  6. linux初体验

    linux系统和window一样,也是一套独立的操作系统,它只是没有图形化界面而已

  7. DB2应用中嵌入式SQL取值入本地变量

    Declare section for host variables in C and C++ embedded SQL applications You must use an SQL declar ...

  8. "".equals(str)和str.equals("")的区别

    如果当str为null的话 "".equals(str)不会报空指针异常,而str.equals("")会报异常.这种方式主要用来防止空指针异常

  9. 数据结构和算法 – 番外篇.时间测试类Timing

    public class Timing { //startingTime--用来存储正在测试的代码的开始时间. TimeSpan startingTime; //duration--用来存储正在测试的 ...

  10. PHP中比较两个时间的大小与日期的差值

    在这里我们全用到时间戳 mktime(hour,minute,second,month,day,year,[is_dst])     其参数可以从右向左省略,任何省略的参数都会被设置成本地日期和时间的 ...