合泰单片机时基中断和计时器中断

合泰单片机时基中断和计时器中断

在工作中使用到了合泰单片机,以HT67F5660为例子

一、时基中断以及初始化

时基中断初始化


 void time_base_init()
{
 
	_tbc=0b10110010;
	_tb1e=1;//时基1的中断控制位,根據中斷結構看到的
	_emi=1;
}

在这里插入图片描述
在这里插入图片描述
这里有2个timebase–timebase0和timebase1,选择fsub(低频时钟)作为timebase的时钟源ftb (我的fsub=32.768khz)
timebase1的产生一次中断周期是2^15/ftb (1)秒
timebase0的产生一次中断周期是2^10/ftb (1024/32768)秒

 
_tb1e=1;
_emi=1;
//上面两个bit是用来控制时基中断的中的标志位,可以去datasheet里查询,简单一点就到下面的中断结构图中去查找

写时基中断函数

在这里插入图片描述


void	__attribute((interrupt(0x18)))	isr_time_base1(void)//這裡要參考“中斷結構”---時基1中斷的地址是0x18
 {
 		_tb1f=0;  //进入中断函数后,这个请求位要置0
 
	if(off_tmr!=0)
	{
		off_tmr--;
 		if(off_tmr==0)
 		{
			sleep_flag=1;//这个功能是在别的地方给off_tmr赋值,如果off_tmr不为=0,就开始倒计时,倒计时到0的时候,sleep_flag置1
 		}
	}

 }

到这里不算完,因为合泰单片机自动初始化了看门狗,一定要注意看门狗的喂狗时间,会不会影响到time_base中断。这里给出喂狗函数GCC_CLRWDT();

二、计时器中断及初始化

计时器中断初始化

同样的道理,根据datasheet给寄存器赋值
详情参考他的博文 讲的非常好

引用文本
https://blog.csdn.net/weixin_44783974/article/details/89278887

void time_init()
{  //我这里的系统频率是4.9152MHz,我要求10ms进入一次计时器中断
 _stm3c0=0b00110000;  //频率Fh/64= 4.9152Mhz/64=76KHZ=13us即计数器加一次就要13us
 _stm3c1=0b11000001;
 //从0加到10ms 需要进入769次(近似)
 _stm3al=769%256; 	//这里要除以256(规定) =1      ccra比较器的低8位
 _stm3ah=769/256;  //这里要除以256(规定就要除256)=3  ccra比较器的高2位
 //高2位和低8位合起来就是0b11 00000001
 _t3on=1;
 //计数器加1次要13us 加769次就是10ms   进入中断
   _emi=1;
  _t3ae=1;//標準計時器3的中断控制位,根據中斷結構看到的
  _mf3e=1;//多功能中斷控制位,根據中斷結構看到的	
}

当然中断结构图也是要参考的
](https://img-blog.csdnimg.cn/20200520170344362.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FybWluZA==,size_16,color_FFFFFF,t_70)

写计时器中断

 void	__attribute((interrupt(0x24)))	isr_time0(void)
{	//10MS


	_t3af=0; //进入中断函数后,这个请求位要置0
	key_loop++;
	if(key_loop>9)
	{
		key_loop=0;
		key_scan_flag=1;
	}
	//-------------------------------

} 

以上!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值