打印
[ARM入门]

28035通过定时器0控制LED灯

[复制链接]
526|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
使用28035的定时器0来控制LED0亮灭。
首先,根据官方例程文件来配置GPIO3(LED).
void LED_Init(void)
{
   EALLOW;

   GpioCtrlRegs.GPAMUX1.bit.LED1 = 0; //设置为通用GPIO功能
   GpioCtrlRegs.GPADIR.bit.LED1 = 1; //设置GPIO方向为输出
   GpioCtrlRegs.GPAPUD.bit.LED1 = 0; //设置GPIO上拉

   GpioDataRegs.GPASET.bit.LED1 = 1; //设置GPIO上拉

   EDIS;
}
然后根据官方例程配置TIME0,官方例程不全,需补充中断部分。
官方TIME0配置--例程内容
//指向定时器0的寄存器地址
        CpuTimer0.RegsAddr = &CpuTimer0Regs;
        //设置定时器0的周期寄存器值
        CpuTimer0Regs.PRD.all  = 0xFFFFFFFF;
        //设置定时器预定标计数器值为0
        CpuTimer0Regs.TPR.all  = 0;
        CpuTimer0Regs.TPRH.all = 0;
        //确保定时器0为停止状态
        CpuTimer0Regs.TCR.bit.TSS = 1;
        //重载使能
        CpuTimer0Regs.TCR.bit.TRB = 1;
        // Reset interrupt counters:
        CpuTimer0.InterruptCount = 0;
配置完成后调用配置函数完成寄存器数据写入。
ConfigCpuTimer(&CpuTimer0, Freq, Period);
补充TIME0中断部分。
根据手册可知,TIME0对应中断向量表INT0的第七个小中断,故配置如下:
EALLOW;
        SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0
        EDIS;

        //设置定时器0的中断入口地址为中断向量表的INT0
        EALLOW;
        PieVectTable.TINT0 = &TIM0_IRQn;
        EDIS;
//开启CPU第一组中断并使能第一组中断的第7个小中断,即定时器0
        IER |= M_INT1;
        PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
中断配置部分和TIME0功能配置部分组合起来
//定时器0初始化函数
//Freq:CPU时钟频率(60MHz)
//Period:定时周期值,单位us
void TIM0_Init(float Freq, float Period)
{
        EALLOW;
        SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0
        EDIS;

        //设置定时器0的中断入口地址为中断向量表的INT0
        EALLOW;
        PieVectTable.TINT0 = &TIM0_IRQn;
        EDIS;

        //指向定时器0的寄存器地址
        CpuTimer0.RegsAddr = &CpuTimer0Regs;
        //设置定时器0的周期寄存器值
        CpuTimer0Regs.PRD.all  = 0xFFFFFFFF;
        //设置定时器预定标计数器值为0
        CpuTimer0Regs.TPR.all  = 0;
        CpuTimer0Regs.TPRH.all = 0;
        //确保定时器0为停止状态
        CpuTimer0Regs.TCR.bit.TSS = 1;
        //重载使能
        CpuTimer0Regs.TCR.bit.TRB = 1;
        // Reset interrupt counters:
        CpuTimer0.InterruptCount = 0;

        ConfigCpuTimer(&CpuTimer0, Freq, Period);

        //开始定时器功能
        CpuTimer0Regs.TCR.bit.TSS=0;
        //开启CPU第一组中断并使能第一组中断的第7个小中断,即定时器0
        IER |= M_INT1;
        PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
        //使能总中断 仿真调试中断
        EINT;
        ERTM;
}
编写TIME0中断函数
interrupt void TIM0_IRQn(void)
{
        EALLOW;
        PieCtrlRegs.PIEACK.bit.ACK1=1; //清除中断标志位
        EDIS;
}


28035_LED_TIME0.zip

233.47 KB

使用特权

评论回复

相关帖子

沙发
呐咯密密| | 2023-3-28 16:18 | 只看该作者
整的不错,继续加油

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

85

帖子

1

粉丝