FPGA+DSP SRIO通信(四)——中断系统(二)

本文详细介绍了如何配置DSP6678的中断系统,使得FPGA通过SRIO发送的Doorbell中断能够映射到CPU中断。首先,解释了系统事件号和系统中断号的概念,然后分别阐述了裸机和sysbios两种方式下,从FPGA的Doorbell中断到CPU中断的配置过程,包括中断服务函数的编写和中断映射配置。最后,提供了一些中断配置的技巧和参考文献。
摘要由CSDN通过智能技术生成
“It doesn’t matter where you are, you are nowhere compared to where you can go.”

经过上一篇博客FPGA+DSP SRIO通信(四)——中断系统(一)的学习,我们已经可以将FPGA端产生的doorbell中断变成INTDST,也就是系统中断,接下来要做的就是使系统中断主机中断 相互关联起来,再将主机中断和CPU中断映射起来,最终编写程序以使CPU知道当某个主机中断发生时,应该做出什么操作。


DSP所做的行为只与CPU中断直接联系。

目录

文章目录


(本文的基础是FPGA能向DSP发送doorbell类型的包。)

上图所示为完整的FPGA到DSP的doorbell映射示意图,本文要实现的是上图右边红色箭头所指的蓝色框内的内容。
那么如何配置cpintc/CIC(CorePac Interrupt Controller)和Intc(Interrupt Controller),以生成主机中断呢?往下看。

##1、配置方法分类
笔者所接触的配置方法有两种,这两种方法的区别在于你的项目要使用sysbios程序还是裸机程序。
两种方法没有孰优孰劣,只是在代码实现方面,sysbios版本显得更加精简优雅。

在实现具体代码配置之前,我们先明确几个数字概念。

【系统事件号】
6678数据手册中的 Table7-38展示了6678的所有系统事件映射,也是一级中断映射,一级中断一共有128个,这128个中断可以被中断选择器选择,映射给12个CPU中断。笔者选择62号和63号系统事件,在表中的展示如下图:
这里写图片描述

【系统中断号】

##2、6678裸机中断配置

笔者所参照的6678裸机中断配置例程所在位置为C:\ti\pdk_C6678_1_1_2_6\packages\ti\csl\example\cpintc\cpintc_test.c,我会在文末将该例程共享出来供大家学习。该官方示例程序大家可以在读完本文后仔细阅读,会对6678的中断系统有更加详细的了解。

通用中断系统

上图为一般中断系统的运行原理,DSP在执行指令时,如果遇到中断,会优先执行中断,而中断所要执行的内容就是ISR(中断服务函数)中的内容。如果同时接收到多个中断,会优先执行优先级高的中断。

根据以上说明,我们首先得编写一个中断服务函数,在DSP收到中断后,执行相应的功能,这里以打印出一串字符串为例。

CSL_CPINTC_Handle           hnd;// 中断配置句柄
static void print_isr_handler (void* handle)
{
	// 触发中断后编程者自定义的功能
	printf("receive a interrupt from SRIO\n");
	// 使主机中断失效
	CSL_CPINTC_disableHostInterrupt (hnd, 2);
	// 清除系统中断
	CSL_CPINTC_clearSysInterrupt (hnd,116);
	// 使能主机中断
	CSL_CPINTC_enableHostInterrupt (hnd, 2);
	// 获得正在等待的doorbell中断状态
	CSL_SRIO_GetDoorbellPendingInterrupt (hSrio, 0, &doorbellStatus);
	// 如果有doorbell中断正在等待,则清除正在等待的doorbell中断,以等待进入下一次中断
	CSL_SRIO_ClearDoorbellPendingInterrupt (hSrio, 0, doorbellStatus);
}

下面一一解决上面这段代码中的疑问。
##

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值