本帖最后由 dongshan 于 2013-12-17 11:03 编辑
本来打算是用比较器来作为定时器模块的的捕捉输入信号,然后计算信号频率。 实际使用中发现定时器的捕捉中断不停的发生,怀疑是比较器模块出了问题。 于是,单独写了一个测试程序来测试比较器模块, 比现不能正常工作。
我的输入信号是这样的,一个传感器信号和一个直流偏移,进入比较器,进行比较,判断过零,并计算频率。信号如下:
输出结果如下:
我的配置代码如下:
实际的代码如下:
static void CMP0_Init(void)
{
/* SIM_SCGC4: CMP=1 */
SIM_SCGC4 |= SIM_SCGC4_CMP_MASK;
/* CMP0_CR1: SE=0,WE=0,??=0,PMODE=0,INV=0,COS=0,OPE=0,EN=0 */
CMP0_CR1 = 0x00U;
/* CMP0_CR0: ??=0,FILTER_CNT=0,??=0,??=0,HYSTCTR=0 */
CMP0_CR0 = (CMP_CR0_FILTER_CNT(0x00) | CMP_CR0_HYSTCTR(0x00));
/* CMP0_MUXCR: ??=0,??=0,PSEL=0,MSEL=0 */
CMP0_MUXCR = (CMP_MUXCR_PSEL(0x00) | CMP_MUXCR_MSEL(0x00));
/* CMP0_FPR: FILT_PER=0xC8 */
CMP0_FPR = CMP_FPR_FILT_PER(0xC8);
/* CMP0_CR1: SE=0,WE=0,??=0,PMODE=0,INV=0,COS=0,OPE=1,EN=0 */
CMP0_CR1 = CMP_CR1_OPE_MASK;
/* CMP0_SCR: ??=0,DMAEN=0,??=0,IER=1,IEF=0,CFR=1,CFF=1,COUT=0 */
CMP0_SCR = (CMP_SCR_IER_MASK | CMP_SCR_CFR_MASK | CMP_SCR_CFF_MASK);
/* CMP0_CR0: ??=0,FILTER_CNT=3,??=0,??=0,HYSTCTR=3 */
CMP0_CR0 = (CMP_CR0_FILTER_CNT(0x03) | CMP_CR0_HYSTCTR(0x03));
/* CMP0_MUXCR: ??=0,??=0,PSEL=1,MSEL=0 */
CMP0_MUXCR = (CMP_MUXCR_PSEL(0x01) | CMP_MUXCR_MSEL(0x00));
/* CMP0_CR1: EN=1 */
CMP0_CR1 |= CMP_CR1_EN_MASK;
}
请问下这是怎么回事呢,比较器模块应不算复杂的模块,所以不知道从什么地方找原因了。
|