RL78G13,定时器模块我进程
有8个定时器
看箭头对应的引脚,ch0的P00只能作为输入,P01只能作为输出,而 ch1,ch2,ch3,ch4,ch5,ch6对应的引脚可以两用,同理ch7一样,加了括号只是这个功能用在那个引脚上。
在Applilet3功能设置上可以看到,觉得瑞萨这个有点特别
channel0,channel2,channel4,channel6,的功能比较多,定时作用,外部事件计数,脉冲输入周期检测,脉冲宽度检测,PWM输出,多通道PWM输出等,我觉得脉冲输入周期检测,脉冲宽度检测这两个很好用,刚好愁着频率跟占空比的检测方法,这个内部还集成噪声滤波器,使能就可以。多能PWM输出时,ch0作为周期设定,其它的控制占比,这个可以用来驱动步进电机,8个,刚好作为2相的步进电机驱动器控制,用6个可以驱动交流电机驱动器。至于Interval timer是用于一般的定时用,square wave output,什么方波输出,PWM不是很好的实现,一个定时器,怎输出方波,这个不是很理解,而divider function,分频功能,也不是不理解,事件计数器,很好理解,通过外部上升,下降延来做为事件的触发源,计数,到达设定的次数(在里面有输入窗口)就进入中断,然后做自己想做的事,在下面有个例子。Input pulse interval measurement 是测量脉冲周期,Iput pulse high-/low-level width measurement可以测量脉冲高或低电平的宽度,与前面一除就知道占空比了,最大16M,有待验证,我自己要测的是100K左右,应该可以很好实现。Delay count function这个也不知道用在那比较合适,也是太理解,延时计数功能....PWM output也就是用两个定时器实现PWM,也是跟PWM相似的吧,也没用过,不知道适合用在那。最后一个multi PWM,几路PWM,也好理解。
一般定时中断功能
在Applilet3设计完后,在main函数写上CG_timer.C的
void main(void)
{
TAU0_Channel0_Start();//加入的,等于是对定时器的使能吧
/* Start user code. Do not edit comment generated here */
while (1U)
{
;
}
/* End user code. Do not edit comment generated here */
}
然后在
CG_timer_user.C的中断函数加入自己要实现的功能。LED灯
#pragma vector = INTTM00_vect
__interrupt void MD_INTTM00(void)
{
P7=~P7;//我加入LED闪烁
delay(1000);
/* Start user code. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
}
最好一次设置成功,第二次设置,IAR会reload更新,看的是自己写的程序,可关掉后双击打开就会回到原来的设置,关掉后在Project ----Add Exiting Porject打开重新编写,我发现里面的几个文件,可这样太乱了,不知有什么方法可以解决,不改写好的程序,又要更新applilet的设置。
利用两个定时器实现这PWM output,更简单点,设计完后,在main里加入CG_timer.C的
void main(void)
{
TAU0_Channel0_Start();//加入的
/* Start user code. Do not edit comment generated here */
while (1U)
{
;
}
/* End user code. Do not edit comment generated here */
}
输入捕获功能,外部事件计数,我在外部接一个开关,上升延检测,10次LED换一次
这跟定时中断一样的,设置完后,要改的程序也一样,只时中断不是定时本身计数,而是通过外部事件,10次(这可以修改)中断一次。这我也是第一次用到这功能。
至于检测脉冲周期跟脉宽的检测应用,在后面会用到,我要做的就需要检测这个占空比的。
我不理解这个定时器
输出比较功能是什么(在项目要求中写到的),知者说说