DSP28335的自学之路:定时器实验

DSP28335的定时器介绍

        DSP28335的定时器模块包括三个独立的定时器:Timer0、Timer1和Timer2。每个定时器都有多种工作模式和配置选项,以满足不同应用需求。

主要特性和用途:

  1. 时间延迟生成: 可以使用定时器来生成精确的时间延迟。你可以配置定时器的计数值和时钟源,从而实现特定的延迟时间。

  2. PWM生成: 定时器可以用于生成脉冲宽度调制(PWM)信号,用于控制电机、LED亮度调节、电源逆变器等应用。

  3. 定时中断: 定时器可以配置为在特定的时间间隔内生成中断请求,从而用于实现定时任务,例如周期性数据采集、控制循环等。

  4. 计时: 定时器可以用于测量特定事件的时间间隔,如脉冲宽度、周期等。

  5. 捕获模式: 定时器可以在外部事件触发时记录计数器的值,用于精确测量外部事件的发生时间。

  6. 辅助时钟源: 定时器可以配置为使用内部时钟源或外部时钟源,从而具有较高的灵活性。

设置定时器点亮LED程序

 timer0定时器设置

        timer0定时器初始化

void timer0_Init(void)
{
    EALLOW;
    PieVectTable.TINT0 = &timer0_isr;   //定时器中断地址
    EDIS;

    InitCpuTimers();
    ConfigCpuTimer(&CpuTimer0, 150, 1000);  //定时为 1 ms
    CpuTimer0Regs.TCR.all = 0x4001;         //设置 TSS bit = 0
    IER |= M_INT1;                          //CPU-Timer0 属于CPU INT1 使能
    PieCtrlRegs.PIEIER1.bit.INTx7 = 1;      //使能 TINT0 在 PIE 中 第七中断

    EINT;   //使能INTM中断
    ERTM;   //使能DBGM中断
}

        timer0定时器中断服务函数设置,注意这里因为timer0属于PIE管理需要手动复位。

interrupt void timer0_isr(void)
{
    //清除中断标志
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

    LED1 = ~LED1;
    DELAY_US(200000);
    LED1 = ~LED1;
    DELAY_US(200000);
}

 timer1定时器设置

         timer1定时器初始化

void timer1_Init(void)
{
    EALLOW;
    PieVectTable.XINT13 = &timer1_isr;   //定时器中断地址
    EDIS;

    InitCpuTimers();
    ConfigCpuTimer(&CpuTimer1, 150, 10000);  //定时为 10 ms
    CpuTimer1Regs.TCR.all = 0x4001;         //设置 TSS bit = 0
    IER |= M_INT13;                          //CPU-Timer0 属于CPU INT1 使能

    EINT;   //使能INTM中断
    ERTM;   //使能DBGM中断
}

        timer1定时器中断服务函数设置

interrupt void timer1_isr(void)
{
    LED2 = ~LED2;
    DELAY_US(200000);
    LED2 = ~LED2;
    DELAY_US(200000);
}

 main函数

void main(void)
{
    InitSysCtrl();

    //initGpio();
    InitXintf16Gpio();

    DINT;

    InitPieCtrl();

    IER = 0x0000;
    IFR = 0x0000;

    InitPieVectTable();

    configtestled();
 
    //timer0_Init();
    timer1_Init();

    while(1){
        LED3 = ~LED3;
        DELAY_US(200000);
        LED3 = ~LED3;
        DELAY_US(200000);
    }

}

timer0与其他两个定时器的配置差异

        timer0的中断函数在PIE模块中,对于标志位需要手动复位,所以可以看到调用中断函数的时候会编写 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1 以实现复位。而其他两个定时器直接与CPU相联系,不需要手动复位。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值