1.我现在使用的是hyperlink的例程实现两个DSP之间的数据交互,我认为DSP0和DSP1之间进行数据交流之后,应该发一个中断用来通知对方,我看到例程上有中断的程序,但是我只能使事件号111(hyperlink中断)通过中断映射实现DSP0的核间通信,没法实现DSP0核DSP1之间的中断,这个怎么解决。
2.hyperlink实现两个DSP之间的通信,两个DSP之间是怎么实现真正的数据交互,我理解的是通过中断来通知对方数据已经传输完毕,事实上是使用中断吗,或者是轮询
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
1.我现在使用的是hyperlink的例程实现两个DSP之间的数据交互,我认为DSP0和DSP1之间进行数据交流之后,应该发一个中断用来通知对方,我看到例程上有中断的程序,但是我只能使事件号111(hyperlink中断)通过中断映射实现DSP0的核间通信,没法实现DSP0核DSP1之间的中断,这个怎么解决。
2.hyperlink实现两个DSP之间的通信,两个DSP之间是怎么实现真正的数据交互,我理解的是通过中断来通知对方数据已经传输完毕,事实上是使用中断吗,或者是轮询
可以在软件上发送中断包给remote dsp触发中断。可以参考STK里的中断例程以及附件traning资料。
https://e2echina.ti.com/support/processors/f/processors-forum/47664/faq-keystone1#pi239031350=2
C66x-KeyStoneTraining-HyperLink.pdf
谢谢您的答复 您给个文档我有看过 但是还存在以下问题 期望您可以帮我解答
/*------------------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");
}
我总结了我的几个疑惑,希望您看到的时候帮我解答一下
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进行 中断映射,从而实现中断被我指定的核接收,
我看那个帖子还没有回复您能帮我再催催吗?我这边挺着急的
抱歉,e2e那边这条产品线的人手不够,有很多case要处理,很多问题要延时处理。一有回复,我会转发给您。
我还有一个问题想请教您,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
那么是不是要把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.
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.
Detecting all projects in PDK and importing them in the workspace "C:\ti\pdk_c667x_2_0_15\packages"\MyExampleProjects
Detected 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 = ../../
这些需要改动什么吗
我直接安装了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"这个路径了 加了这个可能会出现生成的工程不能用