[仿真]

昊芯 利用Timer中断控制LED

[复制链接]
471|2
手机看帖
扫描二维码
随时随地手机跟帖
月雾|  楼主 | 2022-7-18 14:48 | 显示全部楼层 |阅读模式
本帖最后由 月雾 于 2022-7-18 14:49 编辑

导语
在电机控制或者开关电源软件设计中,中断几乎是必用的功能。很多情况下,如何优化中断算法开销成了算法工程师的核心工作。DSP芯片初学者很有必要掌握中断的原理机制、配置方式。本期我们做一个简单中断程序:timer中断控制LED。

什么是中断?
在实时控制(real-time control)中,代码一般顺序执行或者跳转执行。当需要处理某些实时性要求较高的程序时,软件或硬件向CPU发出中断请求,如果请求被接受,CPU将暂停当前指令、保存状态并执行中断服务程序(interrupt service routine,ISR)。执行完ISR后,CPU再恢复中断前的状态,并继续运行。
与跳转指令不同的是,中断是无法预测的,一旦设置使能后,只要满足触发条件,就能产生中断。
在电机或电源的数字化控制中,中断机制是最佳的算法实现手段。毫不夸张地说,几乎的所有的核心算法都是中断函数实现的。昊芯28027支持丰富的中断机制:timer,ADC,PWM,SCI,SPI等外设都支持中断配置。

Timer控制LED的原理
昊芯28027内置3个timer(0/1/2)。利用Timer0每间隔1秒产生一次timer0中断,在中断服务程序中,每次都将LED对应的GPIO口输出电平反转,就能产生LED亮灭的效果。
本程序基于昊芯28027核心板,相关资料可以在中科昊芯官网下载。
5119fb731110f27540d040e966818a5a2142b5ad.gif
/*
* main.c
*
*  Created on: 2021年9月25日
*      Author: daieq
*/

#include "dsc_config.h"
#include <syscalls.h>
#include "IQmathLib.h"

Uint16 IntCount = 0;

INTERRUPT void timer0_isr(void);

int main(void)
{
    //系统初始化 120MHz
    InitSysCtrl();

    //GPIO初始化
    EALLOW;
    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;
    GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
    GpioDataRegs.GPASET.bit.GPIO0 = 1;
    EDIS;

    //关闭CPU中断
    DINT;

    //初始化PIE模块
    InitPieCtrl();

    //关闭并清除CPU中断标志位
    IER = 0x0000;
    IFR = 0x0000;

    //初始化PIE中断向量表
    InitPieVectTable();

    //配置中断向量表
    EALLOW;
    PieVectTable.TINT0 = &timer0_isr;
    EDIS;

    // 模块初始化
    EALLOW;
    CpuTimer0Regs.TCR.bit.TSS = 1;
    CpuTimer0Regs.PRD.all =  120000000;
    CpuTimer0Regs.TCR.bit.TIF = 1;
    CpuTimer0Regs.TCR.bit.TRB = 1;
    CpuTimer0Regs.TCR.bit.TIE = 1;
    CpuTimer0Regs.TCR.bit.TSS = 0;
    EDIS;

    //使能CPU中断
    IER |= M_INT1;

    //使能PIE中断
    PieCtrlRegs.PIEIER1.bit.INTx7 = 1;

    EINT;
    ERTM;

    for(;;)
    {}
}

void CODE_SECTION("ramfuncs") INTERRUPT timer0_isr()
{
    IntCount++;

    GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1;

    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}


作者:昊芯 https://www.bilibili.com/read/cv13539303?spm_id_from=333.999.0.0 出处:bilibili

使用特权

评论回复
月蓉小豆包| | 2022-7-20 08:58 | 显示全部楼层
昊芯加油~!!!

使用特权

评论回复
月蓉小豆包| | 2022-7-28 13:22 | 显示全部楼层

使用特权

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

本版积分规则