杰理AC690X---定时器中断时间配置(17)

废话不多说,直奔主题。请看代码:

定时器中断函数:

void timer1_interrupt() ///125uS中断一次
{
    ///os_time_dly(1000);//延时函数
    //timer_ctrl(timer1_hl,TIMER_CMD_SET_CNT,0,NULL);
    time1_test_flag++;
    if(time1_test_flag==8) ///假设中断时间是125微妙,那么加8次就等于1毫秒
    {
        time1_test_flag=0;
        TEST1_PORT_ON();
        //printf("SYS_CLK:%d",clock_get_sys_freq());
        //printf("1\r\n");

    }
    else
    {
        TEST1_PORT_OFF();
       // printf("2222222\r\n");
    }
    //printf("time1_test_flag:%d\r\n",time1_test_flag);
}

定时器初始化函数:

s32 time1_init(void)
{
	s32 ret;
    __timer_param   timer_parm;

	timer1_hl = timer_open(TIMER1,1);
	if(NULL == timer1_hl)
	{
		printf("timer_open err");
		ret = TIMER_DRV_OPEN_ERR;
		return ret;
	}
	timer_parm.work_mode  = TIMER_WORK_MODE_COUNTER;
	//timer_parm.tick_time  = 1000;//(1ms)
	ret = timer_init_api(timer1_hl,&timer_parm);
	if(ret != TIMER_NO_ERR)
	{
		printf("timer_init err = %x\n",ret);
		return ret;
	}

	ret = timer_start(timer1_hl);
	if(ret != TIMER_NO_ERR)
	{
		printf("timer_start err = %x\n",ret);
		return ret;
	}

	/// JL_TIMER1->CON = 0x0051;///4*2分频
	 JL_TIMER1->CON = 0x0001;
     //JL_TIMER1->CNT = 0;
     JL_TIMER1->PRD = 7500;///60000/60M == 0.001秒
                           ///7500/60M == 125us
	ret = timer_reg_isr_callback_fun(timer1_hl,4,timer1_interrupt);
	if(ret != TIMER_NO_ERR)
	{
		printf("timer_reg_isr_callback_fun err = %x\n",ret);
		return ret;
	}
	return ret;
}

定时器的时钟周期是60M

JL_TIMER1->PRD这个寄存器的赋值可影响定时器中断时间

计算方式请看代码的注释。

做好这些,然后你就会发现定时器再也不是1ms中断一次了,可以做到微妙级了。

下面是PWM输出的周期和占空比设置,原理大致类似:

void PWM2_init(u16 led_pwm_cnt)
{
    JL_IOMAP->CON1 &= ~(BIT(11)|BIT(12)|BIT(13));
    JL_IOMAP->CON1 |= BIT(12);

    JL_PORTC->DIR &= ~BIT(5);
    JL_PORTC->PU   |= BIT(5);
    JL_PORTC->PD   |= BIT(5);
    JL_PORTC->DIE  |= BIT(5);

    JL_TIMER2->CNT = 0;
    JL_TIMER2->PWM = led_pwm_cnt;//led_pwm_cnt/3600*100%==占空比为%
    JL_TIMER2->PRD = 3600;//周期频率 3600/60M == 60us
    JL_TIMER2->CON =BIT(0); //BIT(8)|BIT(0);
}

OK,以上请自行实测,多动手。Good Luck.

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jim天河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值