6、具体代码分析 文件plib_ocmp1.c
//OCMP1初始化函数 void OCMP1_Initialize (void) { /*Setup OC1CON */ /*OCM = 4 */ //OCM<2:0>=100,双比较模式单输出脉冲 /*OCTSEL = 0 */ // 输出比较定时器选择位,0:TMR2,1:TMR3 /*OC32 = 0 */ //32 位比较模式位 /*SIDL = false */ //空闲模式停止位 OC1CON = 0x4; //输出比较控制寄存器 OC1R = 2000; //输出比较比较寄存器 OC1RS = 60000; //辅助比较寄存器 IEC0SET = _IEC0_OC1IE_MASK; //中断允许控制 } //使能输出比较外设 void OCMP1_Enable (void) { OC1CONSET = _OC1CON_ON_MASK; //输出比较外设使能位 } //禁止输出比较外设 void OCMP1_Disable (void) { OC1CONCLR = _OC1CON_ON_MASK; //输出比较外设使能位 } //输出比较比较寄存器 void OCMP1_CompareValueSet (uint16_t value) { OC1R = value; //16位比较值 } //获取输出比较比较寄存器值 uint16_t OCMP1_CompareValueGet (void) { return (uint16_t)OC1R; //16位比较值 } //输出比较辅助比较寄存器 void OCMP1_CompareSecondaryValueSet (uint16_t value) { OC1RS = value; //16位辅助比较寄存器值 } //获取输出比较辅助比较寄存器值 uint16_t OCMP1_CompareSecondaryValueGet (void) { return (uint16_t)OC1RS; //16位辅助比较寄存器值 } // void OCMP1_CallbackRegister(OCMP_CALLBACK callback, uintptr_t context) { ocmp1Obj.callback = callback; ocmp1Obj.context = context; } //输出比较中断服务函数 void OUTPUT_COMPARE_1_InterruptHandler (void) { IFS0CLR = _IFS0_OC1IF_MASK; //Clear IRQ flag /* 可添加中断处理内容 */ GPIO_RB0_Toggle(); if( (ocmp1Obj.callback != NULL)) { ocmp1Obj.callback(ocmp1Obj.context); } }
interrupts.c文件
void __ISR(_OUTPUT_COMPARE_1_VECTOR, ipl1SOFT) OUTPUT_COMPARE_1_Handler (void) { OUTPUT_COMPARE_1_InterruptHandler(); }
|