[资料分享与下载] CMP简单功能实现

[复制链接]
895|2
 楼主| 史迪威将军 发表于 2015-11-6 21:02 | 显示全部楼层 |阅读模式
AD, IO, pc, ADC, dc
本次所做实验为KL26Z的CPM功能,这个功能貌似被ADC里面的比较功能给覆盖了,但是ADC的比较功能只能是相应的两个AD通道,而CPM可以实现多通道进行比较,可以相互比较,也可以由自带的DAC产生基准电压与之比较,非常方便。

这次直接用到例程上的源程序,没有做更改,只是标注了一些地方。
  1. #include "includes.h"

  2. void gpioInit(void)                                             //配置需要点亮的LED的IO
  3. {
  4.     SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK;                                
  5.     PORTB_PCR18 |= (PORT_PCR_MUX(1) | PORT_PCR_DSE_MASK);              
  6.     FGPIOB_PSOR |= 1<<18;                                            
  7.     FGPIOB_PDDR |= 1<<18;                                               
  8. }


  9. void cmpInit(INT8U ucdacOut)
  10. {
  11.     SIM_SCGC4 |= SIM_SCGC4_CMP_MASK;                                    //使能时钟
  12.     SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK;                                 
  13.         /*
  14.      *  CMP DAC配置
  15.      */
  16.     CMP0_DACCR |= CMP_DACCR_DACEN_MASK | CMP_DACCR_VOSEL_MASK | CMP_DACCR_VOSEL(ucdacOut);
  17.     PORTC_PCR6 |= PORT_PCR_MUX(0);                                 /* 这里并不是源程序所说的模拟输入,而是PTC6的默认配置(MUX(0))就是DMP0输入*/
  18.     /*
  19.      *  选择通道为CMP0和DA产生的通道7
  20.      */
  21.     CMP0_MUXCR |= CMP_MUXCR_PSTM_MASK | CMP_MUXCR_MSEL(7) | CMP_MUXCR_PSEL(0);
  22.     CMP0_CR1 |=  CMP_CR1_COS_MASK | CMP_CR1_EN_MASK;                    /* 使能CMP为直通模式 */

  23. }


  24. BOOLEAN cmpOutput(void)
  25. {
  26.     if(CMP0_SCR & CMP_SCR_COUT_MASK) {                                  /* 判断CMP输出情况          */
  27.         return 1;
  28.     } else {
  29.         return 0;
  30.     }
  31. }



  32. void redLedSet(BOOLEAN bMode)                       //判断并决定LED现在应该是什么状态{
  33.     if(bMode == True) {
  34.         FGPIOB_PCOR |= 1<<18;                                          
  35.     } else {
  36.         FGPIOB_PSOR |= 1<<18;                                          
  37.     }
  38. }



  39. int  main (void)
  40. {
  41.     INT8U ucdacOut = 1.50 * 64 / 2.90;                               //设置DA输出的值,即输入值与其比较(通道7)
  42.     SystemCoreClockUpdate();
  43.     gpioInit();                                                     
  44.     cmpInit(ucdacOut);                                                
  45.     while(1){
  46.         redLedSet(cmpOutput());                                       
  47.     };
  48. }


FSL_TICS_ZJJ 发表于 2015-11-9 10:24 | 显示全部楼层
感谢楼主的代码分享!
perry_peng 发表于 2015-11-9 11:22 | 显示全部楼层
谢谢分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

291

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部