打印

DM642在DSP/BIOS中建立外部中断

[复制链接]
1742|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 拿起书本 于 2014-10-9 13:52 编辑

在非dsp/bios系统下,可以编辑dsp的中断向量表来初始化中断,可能稍微复杂一些。可以参考这篇博文:TI C64X DSP中断向量表的配置实现总结。
        因为项目要用到DSP\BIOS系统,因此想在bios先建立中断,按照网上的一些教程,弄了很久都没成功,不断尝试下今天终于成功了,主要还是网上的方法没有全部详细的说明,有些地方还是要按照实际情况来设置。下面是我自己的配置过程:
        一、在tcf文件里依次进入Scheduling----HWI----HWI_INT6(这里我用的外部中断6、7),右键HWI_INT6点击Properties。弹出窗口:

  在function这栏里写上你的中断函数名(记得在前面加上一个下划线)。
        二、接下来选择Dispatcher这个小窗口,将Use Dispatcher这个复选框勾上。不然中断只会执行一次,就不会再就去了。选好之后点确定,退出。


  我的外部中断是用按键来控制的,在按键按下去产生一次中断,所以中断在下降沿时发生,这里需要把External Interrupt Pin 6 Polarity改成 high-to-low。实际设置看板子的设计和中断发生的条件来。然后点确定,保存TCF文件。bios这里都设置好了,转到.C文件里面。

  三、右键选择HWI-Hardware Interrupt Service Routine,弹出窗口:

    我的外部中断是用按键来控制的,在按键按下去产生一次中断,所以中断在下降沿时发生,这里需要把External Interrupt Pin 6 Polarity改成 high-to-low。实际设置看板子的设计和中断发生的条件来。然后点确定,保存TCF文件。bios这里都设置好了,转到.C文件里面。

相关帖子

沙发
拿起书本|  楼主 | 2014-10-9 13:53 | 只看该作者
    四、我只写了一个简单的测试程序,用中断来控制led的亮灭。下面是全部程序:
#include "bios_hwicfg.h"
#include <csl.h>
#include <csl_gpio.h>
GPIO_Handle hGpio;
Uint32 PinOutID;
Uint32 PinInID;
Uint8 flag = 0;
void main()
{
        LOG_printf(&trace, "hi!");
        CSL_init();
        hGpio=GPIO_open(GPIO_DEV0,GPIO_OPEN_RESET);
        IRQ_globalEnable();//ʹÄÜÈ«¾ÖÖжϿØÖÆλ
        IRQ_nmiEnable();
        IRQ_enable(IRQ_EVT_EXTINT6);//ÖжÏʹÄÜ£¬Ä¬ÈÏEXTINT7ÊǹرյÄ
        IRQ_enable(IRQ_EVT_EXTINT7);//ÖжÏʹÄÜ£¬Ä¬ÈÏEXTINT7ÊǹرյÄ
        // GPIOµÄ³õʼ»¯
        PinOutID = GPIO_PIN0 | GPIO_PIN9 | GPIO_PIN10 | GPIO_PIN11 | GPIO_PIN12;
        PinInID = GPIO_PIN6 | GPIO_PIN7;
        GPIO_pinEnable(hGpio,PinOutID | PinInID);
        GPIO_pinDirection(hGpio, PinOutID, 1);
        GPIO_pinDirection(hGpio, PinInID, 0);        
        GPIO_pinWrite(hGpio, 1<<9, 1);
        GPIO_pinWrite(hGpio, 1<<10, 1);
        GPIO_pinWrite(hGpio, 1<<11, 1);
        GPIO_pinWrite(hGpio, 1<<12, 1);  // GPIO12ÓëadcµÄalert¹Ü½ÅÏàÓ룬¿ØÖƺìÂÌLEDµÄ¿ª¹Ø
        for(;;)        {}
}
void int_isp6()
{
        if((GPIO_pinRead(hGpio, 1<<6)==0))
        {
                if(flag == 0)
                {
                        GPIO_pinWrite(hGpio, 1<<9, 0);
                        flag = 1;
                }
                else
                {
                        GPIO_pinWrite(hGpio, 1<<9, 1);
                        flag =0;
                }
        }        
        LOG_printf(&trace, "interrupt 6 is OK!");
        return;
}

void int_isp7()
{
        if((GPIO_pinRead(hGpio, 1<<7)==0))
        {
                GPIO_pinWrite(hGpio, 1<<10, 1);
        }
        LOG_printf(&trace, "interrupt 7 is OK!");
}
  这里有两点需要注意的:
        1、中断函数名一定要跟前面第一点里面设置的相同,而且不用再加interrupt关键字。
        2、主函数里面应该要写上

使用特权

评论回复
板凳
edishen| | 2014-10-9 20:35 | 只看该作者
支持

使用特权

评论回复
地板
lijiabaobei| | 2014-10-9 21:54 | 只看该作者
看不懂

使用特权

评论回复
5
long009| | 2014-11-30 13:47 | 只看该作者
谢谢分享

使用特权

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

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4195

帖子

31

粉丝