杰理AC695N创建100us的定时器

杰理AC695创建100us的定时器


695最小只有1ms精度的定时器接口,如果要更小的需要自己写

创建定时器

void timer3_100us(void) // 选择LSB的时钟源后, 初始化后系统不能切换频率
{
    log_info("%s[%d]", __func__, clk_get("lsb"));
    u32 prd_cnt;
    /* prd_cnt = clk_get("lsb") / 1000 / 4 / 10 * 1;//需要几倍就改最后1 */
    prd_cnt = 24 * 1000000 / 1000 / 4 / 10 * 1;//需要几倍就改最后1
    log_info("%s[0x%08x]", __func__, prd_cnt);

    request_irq(IRQ_TIME3_IDX, 6, timer3_isr, 0);
    /* irq_unmask_set(IRQ_TIME3_IDX, 0); */
    //const int CONFIG_CPU_UNMASK_IRQ_ENABLE = 1;

    JL_TIMER3->CNT = 0;
    JL_TIMER3->PRD = prd_cnt;
    /* JL_TIMER3->CON = (1 << 4) | (1 << 0);//lsb clk 4分频 */
    JL_TIMER3->CON = (1 << 4) | (0b10 << 2) | (1 << 0);//OSC clk 4分频

    timer_idle = 0;
    jiffies_timer = 0;

}

定时器中断

/********************************************************
 * 下面函数调用的使用函数都必须放在ram,
 * 中断频率小于1ms的,
 * 都建议加AT_VOLATILE_RAM_CODE,将代码指定到ram
 * 建议在100us中断内只赋值变量或者操作gpio,否则会影响蓝牙性能
/********************************************************/
static volatile unsigned long jiffies_timer; // unit: 100us

___interrupt
AT_VOLATILE_RAM_CODE
static void timer3_isr()
{
    JL_TIMER3->CON |= BIT(14);
    jiffies_timer++;
    if(jiffies_timer > 24 * 60 * 60 * 10){
        jiffies_timer = 0;
        // 超一天计时, 清0
    }
    static u8 flag = 0;
    if(flag){      // 拉IO示波器量波形
        flag = 0;
        /* gpio_set_output_value(IO_PORTC_02, 0); */
        JL_PORTC->OUT &= ~BIT(2);
    }else{
        flag = 1;
        /* gpio_set_output_value(IO_PORTC_02, 1); */
        JL_PORTC->OUT |= BIT(2);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值