TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320C6678: HYPERLINK

Part Number:TMS320C6678

1.我现在使用的是hyperlink的例程实现两个DSP之间的数据交互,我认为DSP0和DSP1之间进行数据交流之后,应该发一个中断用来通知对方,我看到例程上有中断的程序,但是我只能使事件号111(hyperlink中断)通过中断映射实现DSP0的核间通信,没法实现DSP0核DSP1之间的中断,这个怎么解决。 

2.hyperlink实现两个DSP之间的通信,两个DSP之间是怎么实现真正的数据交互,我理解的是通过中断来通知对方数据已经传输完毕,事实上是使用中断吗,或者是轮询

Shine:

中断是针对芯片内部的,外面事件给DSP一个中断信号到INTC,然后再route到CPU响应中断。您需要的应该是DSP0和DSP1之间的握手信号,可以通过gpio管脚来作握手信号。

,

Duan Yang:

谢谢您的答复 我还有点不懂  那事件号(111)就算是外部事件吗   DSP1可以发送事件111给DSP0 从而触发DSP0的中断 是这样吗 

,

Shine:

可以在软件上发送中断包给remote dsp触发中断。可以参考STK里的中断例程以及附件traning资料。https://e2echina.ti.com/support/processors/f/processors-forum/47664/faq-keystone1#pi239031350=2C66x-KeyStoneTraining-HyperLink.pdf

,

Duan Yang:

谢谢您的答复 您给个文档我有看过 但是还存在以下问题 期望您可以帮我解答

/*——————Initialize Hyperlink interrupt———————-*/ /*map Hyperlink error/status interrupt to interrupt vector 0*/ hyperLink_cfg.interrupt_cfg.sts_int_enable = 1; hyperLink_cfg.interrupt_cfg.sts_int_vec= 0;

/*interrupt to remote DSP to interrupt vector 1*/ hyperLink_cfg.interrupt_cfg.int_event_cntl[HW_EVENT_FOR_INT_TEST].si_en = 1; hyperLink_cfg.interrupt_cfg.int_event_cntl[HW_EVENT_FOR_INT_TEST].mps = 0; hyperLink_cfg.interrupt_cfg.int_event_cntl[HW_EVENT_FOR_INT_TEST].vector = 1;

/*generate interrupt packet to remote DSP when local interrupt event happens*/ hyperLink_cfg.interrupt_cfg.int_local= 0; /*route interrupt packet from remote DSP to interrupt pending register*/ hyperLink_cfg.interrupt_cfg.int2cfg = 1;

我使用例程中的初始化代码如上代码进行初始化 然后  再使用如下代码进行事件中断映射 再使用gpHyperLinkRegs->SW_INT= 0;进行中断触发但是我只能触发本DSP的不同核的中断触发并没有发送到DSP1

void HyperLink_Interrupts_Init(void){// TDSP_Board_Type DSP_Board_Type; printf("HyperLink_Interrupts_Init_start\n"); /* Disable Global host interrupts. */ gpCIC1_regs->GLOBAL_ENABLE_HINT_REG= 0;

uiHyLink_pend_host_event_num= 55;

/*map HyperLink Interrupt events (111) to CIC0 out33*/ KeyStone_CIC_event_map(gpCIC1_regs, CSL_INTC0_VUSR_INT_O, 55);

/* Enable Global host interrupts. */ gpCIC1_regs->GLOBAL_ENABLE_HINT_REG= 1;

/*on Nyquist, CIC0 out64 event number are 22 on core 0 on Shannon, CIC0 out33 event number are 22 on core0 map this event 22 to INT6 */ gpCGEM_regs->INTMUX1 = (22<<CSL_CGEM_INTMUX1_INTSEL6_SHIFT);

/*Clear all DSP core events*/ gpCGEM_regs->EVTCLR[0]= 0xFFFFFFFF; gpCGEM_regs->EVTCLR[1]= 0xFFFFFFFF; gpCGEM_regs->EVTCLR[2]= 0xFFFFFFFF; gpCGEM_regs->EVTCLR[3]= 0xFFFFFFFF;

//clear DSP core interrupt flag ICR= IFR;

//enable INT6 IER = 3|(1<<6);

/*Interrupt Service Table Pointer to begining of LL2 memory*/ ISTP= 0x800000;

//enable GIE TSR = TSR|1; printf("HyperLink_Interrupts_Init_end\n");}

,

Shine:

请问参考的是哪里的例程? 请参考一下下面的帖子。https://e2e.ti.com/support/processors-group/processors/f/processors-forum/193417/generating-interrupts-on-hyperlink-recieve

,

Duan Yang:

我看了您发给我的链接,我也看了其他几篇相关帖子,但是感觉并没有实质性的解决,我在上面已经给您发了我的配置,我的配置里有什么错误的地方吗?期望您能帮我指出来,我用的历程是STK的Hyperlink的例程

,

Duan Yang:

我总结了我的几个疑惑,希望您看到的时候帮我解答一下1.interrupt point index 的ipidx和 interrupt control value的mps要相等 这两个字段表示的是微处理器,这里的微处理器指的是接管中断的核吗?2.Interrupt Control Index (Base Address + 0x60)中的icidx和 Generate Soft Interrupt Value Register (Base Address + 0x18)中的ivector字段相等这两个字段是否填写1-32中的任意值就可以?3.我设置local dsp 的 intlocal = 0 int2cfg = 1;设置remote dsp 的intlocal = 0 int2cfg = 1,这样设置我看将会使得remote dsp 产生 hyperlink_init_o这个是表示事件111吗?如果这个表示的是事件111,那么我是不是要在remote dsp进行 中断映射,从而实现中断被我指定的核接收,

,

Shine:

我把您的代码发给e2e的工程师看一下,请关注下面帖子的回复。https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1036193/tms320c6678-how-to-generate-hyperlink-interrupt-for-remote-dsp

,

Duan Yang:

您好!感谢您帮我发帖子,回复说,好像不支持本地dsp直接给远端dsp发送中断,他的额建议是映射远端dsp的中断寄存器到本地dsp,这里的寄存器指哪些寄存器呢

,

Shine:

应该是可以通过发中断包给远程DSP的,我去跟进帖子了,请等待e2e产品线工程师的回复。

,

Duan Yang:

我看那个帖子还没有回复您能帮我再催催吗?我这边挺着急的

,

Duan Yang:

我还有一个问题想请教您,Figure 7-32 TMS320C6678 System Event Inputs — C66x CorePac Primary Interrupts (Sheet 1 of 4) 这个表里的事件和Table 7-38 CIC0(和其他表) Event Inputs (Secondary Interrupts for C66x CorePacs) 里的事件有什么联系或不同吗  也就是这里的一级和二级中断有什么联系吗

,

Shine:

Duan Yang 说:我看那个帖子还没有回复您能帮我再催催吗?我这边挺着急的

抱歉,e2e那边这条产品线的人手不够,有很多case要处理,很多问题要延时处理。一有回复,我会转发给您。

,

Shine:

Duan Yang 说:我还有一个问题想请教您,Figure 7-32 TMS320C6678 System Event Inputs — C66x CorePac Primary Interrupts (Sheet 1 of 4) 这个表里的事件和Table 7-38 CIC0(和其他表) Event Inputs (Secondary Interrupts for C66x CorePacs) 里的事件有什么联系或不同吗  也就是这里的一级和二级中断有什么联系吗

两者是独立的。请看附件文档。

4530.Keystone系列DSP中断子系统结构和中断映射原理.pdf0550.Configuring Interrupts on Keystone Devices.pdf

,

Zahir Wang:

你好 我想问下 你出于什么考虑把host-event设置为55?

是想将中断route到core2吗?

,

Zahir Wang:

如果是必须映射远端dsp的中断寄存器到本地dsp,那么在本地hyperlink window写值,就相当于对远端dsp的中断寄存器进行操作。那么是不是就类似于loopback模式下的sw_int触发?sw_int寄存器的地址(3.2.7 Generate Soft Interrupt Value Register (Base Address + 0x18))

,

Duan Yang:

我是想要route到core6,  我用的是gpCIC1_regs ,所以就是core6了。

,

Zahir Wang:

那么是不是要把mps从0改为6?

mps:MicroProcessor Select. this field indicates which micro processor (typically, interrupt controller within SoC) can be used to set interrupt when the outgoing interrupt packet is transferred to the remote device. maximum 8 unit can be chosen.

,

Duan Yang:

我没有改这个字段,mps = 0是能触发core6的中断的。但是这个办法只能触发local dsp 的 core 6中断

,

Duan Yang:

我没有改这个字段,mps = 0是能触发core6的中断的。但是这个办法只能触发local dsp 的 core 6中断

,

Zahir Wang:

remote dsp中断配置的也是CIC1OUT55吗?我这边还是建议你改一下这个字段试试,因为在手册上看到是这样描述的 MPS: only eight MicroProcessors are supported, so only the 3LSB bits are used. the MSB bit should be always set to 0. This field is used to send interrupt packet to the remote device.

,

Duan Yang:

好的 ,我手里目前没有那个板卡, 我中秋收假后试一试

,

Duan Yang:

我按回帖想要生成例程,但是我又遇到了困难,我把我的错误和尝试过程整理了一个pdf,希望您能解答一下。生成例程错误.pdf

,

Shine:

请参考我下面的帖子如何生成例程。https://e2echina.ti.com/support/processors/f/processors-forum/209204/am5708-myexampleprojects/658888

,

Duan Yang:

我安装了

PROCESSOR-SDK-RTOS-C667x  06_03_00_106和ccs_v9,生成例程后导入工程后又有如下问题

我真的挺着急调Hyperlink的  希望您能给我一些建议,谢谢您

,

Duan Yang:

Detecting all projects in PDK and importing them in the workspace "C:\ti\pdk_c667x_2_0_15\packages"\MyExampleProjectsDetected Test Project: cppi_evmc6678_c66BiosExampleProject

——————————————————————————–Creating project 'cppi_evmc6678_c66BiosExampleProject'…

Done!Copying macros.ini系统找不到指定的文件。Detected Test Project: cppi_evmc6678_C66BiosTestProject

——————————————————————————–Creating project 'cppi_evmc6678_C66BiosTestProject'…

Done!Copying macros.ini系统找不到指定的文件。Detected Test Project: GPIO_LedBlink_C6678_EVM_c66xTestProject

——————————————————————————–

这个是我生成例程时打的log这一步是否正确,我的疑问是这里显示

Copying macros.ini系统找不到指定的文件

这个macros.ini是存在的而且这个配置文件里的

PDK_INSTALL_PATH = ../../CSL_INSTALL_PATH = ../../BOARD_INSTALL_PATH = ../../SBL_BOOT_INSTALL_PATH = ../../FATFS_INSTALL_PATH = ../../OSAL_INSTALL_PATH = ../../NIMU_INSTAL_PATH = ../../NIMU_ICSS_INSTALL_PATH = ../../GPIO_INSTALL_PATH = ../../I2C_INSTALL_PATH = ../../ICSS_EMAC_INSTALL_PATH = ../../MMCSD_INSTALL_PATH = ../../PCIE_INSTALL_PATH = ../../PRUSS_INSTALL_PATH = ../../SPI_INSTALL_PATH = ../../UART_INSTALL_PATH = ../../USB_INSTALL_PATH = ../../SRIO_INSTALL_PATH = ../../CPPI_INSTALL_PATH = ../../QMSS_INSTALL_PATH = ../../FFTC_INSTALL_PATH = ../../TCP3D_INSTALL_PATH = ../../PASS_INSTALL_PATH = ../../BCP_INSTALL_PATH = ../../AIF2_INSTALL_PATH = ../../PKTLIB_INSTALL_PATH = ../../NWAL_INSTALL_PATH = ../../SA_INSTALL_PATH = ../../DFE_INSTALL_PATH = ../../IQN_INSTALL_PATH = ../../IQN2_INSTALL_PATH = ../../PKTLIB_INSTALL_PATH = ../../

这些需要改动什么吗

,

Duan Yang:

我已经解决了例程生成不正确的问题和例程打开错误

,

Shine:

可以分享一下怎么解决的么?

,

Duan Yang:

我直接安装了CCS_v9和sdk c667x 06_03_00_106 ,安装后 要打开CCS把SDK导进来

之后用电脑的cmd命令行运行pdkProjectCreate.bat 批处理文件 这时候如果缺什么会提示就去下载安装就好了 运行你批处理的时候  只要用pdkProjectCreate.bat C6678 all little all all dsp 就好了  这个后面就不要加"C:\ti\pdk_c667x_2_0_15\packages"这个路径了 加了这个可能会出现生成的工程不能用

,

Shine:

感谢分享!

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6678: HYPERLINK
分享到: 更多 (0)