本次所做实验为KL26Z的CPM功能,这个功能貌似被ADC里面的比较功能给覆盖了,但是ADC的比较功能只能是相应的两个AD通道,而CPM可以实现多通道进行比较,可以相互比较,也可以由自带的DAC产生基准电压与之比较,非常方便。
这次直接用到例程上的源程序,没有做更改,只是标注了一些地方。- #include "includes.h"
- void gpioInit(void) //配置需要点亮的LED的IO
- {
- SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK;
- PORTB_PCR18 |= (PORT_PCR_MUX(1) | PORT_PCR_DSE_MASK);
- FGPIOB_PSOR |= 1<<18;
- FGPIOB_PDDR |= 1<<18;
- }
- void cmpInit(INT8U ucdacOut)
- {
- SIM_SCGC4 |= SIM_SCGC4_CMP_MASK; //使能时钟
- SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK;
- /*
- * CMP DAC配置
- */
- CMP0_DACCR |= CMP_DACCR_DACEN_MASK | CMP_DACCR_VOSEL_MASK | CMP_DACCR_VOSEL(ucdacOut);
- PORTC_PCR6 |= PORT_PCR_MUX(0); /* 这里并不是源程序所说的模拟输入,而是PTC6的默认配置(MUX(0))就是DMP0输入*/
- /*
- * 选择通道为CMP0和DA产生的通道7
- */
- CMP0_MUXCR |= CMP_MUXCR_PSTM_MASK | CMP_MUXCR_MSEL(7) | CMP_MUXCR_PSEL(0);
- CMP0_CR1 |= CMP_CR1_COS_MASK | CMP_CR1_EN_MASK; /* 使能CMP为直通模式 */
- }
- BOOLEAN cmpOutput(void)
- {
- if(CMP0_SCR & CMP_SCR_COUT_MASK) { /* 判断CMP输出情况 */
- return 1;
- } else {
- return 0;
- }
- }
|