MC9S12G128 的IOC有两种模式,
第一种是使用定时器累加的方式对捕获输入(只有ioc7可以实现这个功能),
第二种是对应引脚一有捕获就立即产生中断手动记数(所有的ioc引脚都可以实现这个功能)
第一种 自动累加(只有ioc7可以实现这个功能)
static void IOC_Init(void)
{
PACTL=0X50;// 使能累加器让
TCTL3=0x80;TCTL4=0x00;//设定引脚捕捉何种类型的情况,有上升沿下降沿,还有一起。
TIE_C7I =0;//禁止ioc7中断
TIOS_IOS7 =0;//设定ioc7为输入捕获
TSCR1_TEN=1;//打开定时器模块
}
设定完毕后只要去读取PACNT寄存器就可以得到累加器里面的值。
第二种 中断手动记数(所有的ioc引脚都可以实现这个功能)
void IOC_Init(void)
{
TSCR1_TEN=0;//关闭定时器模块
TIOS_IOS6 =0;//设置ioc6为输入
TCTL3_EDG6A = 0;//设置ioc6为输入捕获
TCTL3_EDG6B = 1;//设置ioc6为输入捕获
TIE_C6I=1;///使能中断
TSCR1_TEN=1;//打开定时器模块
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt VectorNumber_Vtimch6 OSC_ISR(void)
{
DisableInterrupts;
TFLG1_C6F=1;//清除中断标志位。
EnableInterrupts;
}
#pragma CODE_SEG DEFAULT