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

IPC函数查找

工程师,你好,我先请教下你们,下面这些函数是在那个文件里面,我在CSL的帮助文档的IPC这一个里面是找到了这些函数的。但是,我引用的库文件里面是没有的。在CSL_chipAux.h这个文件里面也没有,所以,我像想你们请教一下,关于这些函数的位置,谢谢。

CSL_intcGlobalEnable 
CSL_intcGlobalNmiEnable
CSL_intcHwControl 
CSL_intcInit 
CSL_intcOpen 
CSL_intcPlugEventHandler 

user1871791:

参考一下这个http://www.deyisupport.com/question_answer/f/53/t/11077.aspx

shuyang hua:

不知为啥无法建新帖,问题有关IPC,就借这个帖子发一下,请帖主不要介意。

以下是我参考几个别人的程序自己新建的程序,如下:

#include "ti/platform/platform.h"#include "ti/platform/resource_mgr.h"#include "ti/csl/csl_bootcfgAux.h"

#define KICK0             (*((volatile uint32_t *) 0x02620038))#define KICK1             (*((volatile uint32_t *) 0x0262003C))#define IPCGR0                    ( ((volatile uint32_t *) 0x02620240))#define Local_L2_Address          (*((volatile uint32_t *) 0x00800000))#define Core0_L2_Address          (*((volatile uint32_t *) 0x10800000))#define Core1_L2_Address          (*((volatile uint32_t *) 0x11800000))#define Core2_L2_Address          (*((volatile uint32_t *) 0x12800000))#define Core3_L2_Address          (*((volatile uint32_t *) 0x13800000))#define Boot_Magic_Address        (*((volatile uint32_t *) 0x1180D23C))

#define BOOT_UART_BAUDRATE 115200

unsigned char *Osal_platformMalloc (uint32_t num_bytes, uint32_t alignment){ return malloc(num_bytes);}

void Osal_platformFree (uint8_t *dataPtr, uint32_t num_bytes){    /* Free up the memory */    if (dataPtr)    {        free(dataPtr);    }}

void Osal_platformSpiCsEnter(void){    return;}

void Osal_platformSpiCsExit (void){    return;}

/****************************************************************************** * Function:    write_uart ******************************************************************************/voidwrite_uart(    char*      msg){    uint32_t i;    uint32_t msg_len = strlen(msg);

    /* Write the message to the UART */    for (i = 0; i < msg_len; i++)    {        platform_uart_write(msg[i]);    }}

int main(){ platform_init_flags  sFlags;    platform_init_config sConfig;    /* Status of the call to initialize the platform */    Int32 pform_status;    int coreId = 0;    /* Platform Information – we will read it form the Platform Library */    platform_info    sPlatformInfo;

 int i;    char core_msg0[] = "\r\n\r\n I am core0! ";    char core_msg1[] = "\r\n\r\n I am core1! ";

    /*     * You can choose what to initialize on the platform by setting the following     * flags. We will initialize everything.     */    memset( (void *) &sFlags,  0, sizeof(platform_init_flags));    memset( (void *) &sConfig, 0, sizeof(platform_init_config));

    sFlags.pll  = 0;    /* PLLs for clocking      */    sFlags.ddr  = 0;    /* External memory         */    sFlags.tcsl = 0;    /* Time stamp counter  /=1   */    sFlags.phy  = 0;    /* Ethernet  /=1           */    sFlags.ecc  = 0;    /* Memory ECC             */

    sConfig.pllm = 0;    /* Use libraries default clock divisor */    pform_status = platform_init(&sFlags, &sConfig);

    coreId = platform_get_coreid ();

    platform_led(0, PLATFORM_LED_ON, PLATFORM_USER_LED_CLASS);    platform_led(1, PLATFORM_LED_ON, PLATFORM_USER_LED_CLASS);    platform_led(2, PLATFORM_LED_ON, PLATFORM_USER_LED_CLASS);    platform_led(3, PLATFORM_LED_ON, PLATFORM_USER_LED_CLASS);

    if (pform_status == Platform_EOK && coreId == 0)     {  memcpy((void*)(0x11800000),(void*)0x00800000,512*1024);      platform_get_info(&sPlatformInfo);      platform_led(0, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);      platform_led(1, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);      platform_led(2, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);      platform_led(3, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);

     platform_uart_init();     platform_uart_set_baudrate(BOOT_UART_BAUDRATE);

        /*Unlock Boot Config*/        CSL_BootCfgUnlockKicker();

        IPCGR0[1] = 1;//IPC give to the subcores

        Boot_Magic_Address = 0x1180d820;//Start boot for Core1//        Boot_Magic_Address = 0x128FFFFC;//Start boot for Core2//        Boot_Magic_Address = 0x138FFFFC;//Start boot for Core3     while(1)     {      for(i=0;i<100000000;i++);      write_uart(core_msg0);     }     }    else    {     printf("Not the CORE0!\n");     platform_write("Not the CORE0!\n");  while(1)  {      for(i=0;i<100000000;i++);      write_uart(core_msg1);  }    }}

运行后同样存在IPC寄存器无法置位的情况,无法顺利引导1核工作,请各位专家大神帮忙!

另外,我目前还没有实现多核引导多核分工运行程序,求各位高手帮忙,要是有例子程序和相应工具包就更好了。卡了比较久了,十分感谢!!! 

Andy Yin1:

WU LANBIN,您好

你所贴出的函数是INTC中断控制器相关,并非IPC的函数,如果要使用CSL INT API,需要在工程中包含ti.csl.intc.ae66(for little endian)或者ti.csl.intc.ae66e(for big endian)。至于INTC API实现所在文件,可以在CSL INTC相关的源文件中找到。

Andy Yin1:

回复 shuyang hua:

关于IPC请先下载之前的培训教程,其中包含IPC的介绍及IPC例程,可以在板子上跑一下:http://www.deyisupport.com/question_answer/f/53/t/4899.aspx

多核boot程序参考EMAC multicore boot,其中有通过core0去引导其他核的程序:http://www.deyisupport.com/question_answer/f/53/t/10240.aspx

关于上述程序的调试,请查看运行程序前后IPC寄存器地址的值确认其状态。首先确认下面这句话是否有问题。

IPCGR0[1] = 1;//IPC give to the subcores,

修改为

 #define IPCGR1                    ( ((volatile uint32_t *) 0x02620244))

IPCGR1 = srcID | 1;

在写完后查看IPCAR1的相应SRC是否置位。

或者可以再UNLOCK后调用CSL_IPC_genGEMInterrupt(index, srcId) 产生IPC中断。

shuyang hua:

回复 Andy Yin1:

Hi, Andy Yin:

我用您提供的多核boot程序EMAC multicore boot(http://www.deyisupport.com/question_answer/f/53/t/10240.aspx)进行多核引导尝试,但是到最后一步时把boot table打包成MAC包,其中的xxx.eth文件虽然给出了如下格式:

1st line: CCS data format

    2nd line: 0x0000

    3rd line: length of first packet in bytes, length counts not include itself

    …….

    first packet

    …….

 

    0xEA00

    0x0000

    length of the second packet in bytes, length counts not include itself

    …….

    second packet

    …….

   

 

    0xEA00

    0x0000

    length of the other packet in bytes, length counts not include itself

    …….

    other packets

    …….

 

    0xEA00

    0X0000

    0X0000: end of the file

但其具体内容还是有些不是很清楚:

如图中所述 0x00FC

                      0x1F63

为UDP有关数据但未给出其具体是什么参数,因其0x00FC只有最后一个包中被改为0x007C,故我猜测为UDP的通讯端口号,而0x1F63在每个包中都有变化,我猜测其为每个包的数据校验码。

请您对其中的格式、内容给出明确的说明,如有说明文档,请您贴出来,谢谢!

with regards

Tom

shuyang hua:

回复 Andy Yin1:

上个帖子的图片如附件所示

另外,请问CSL_IPC_genGEMInterrupt(index, srcId) 函数包含在哪个库里,谢谢?

shuyang hua:

回复 shuyang hua:

求各位专家帮忙啊!怎么没人回复呢??

Andy Yin1:

回复 shuyang hua:

CSL_IPC_genGEMInterrupt在ti.csl.ae66e(大端)或者ti.csl.ae66(小端),包含相应的IPC头文件。

shuyang hua:

回复 Andy Yin1:

Andy Yin:

您好,您只回答了一部分问题,请您仔细阅读附件中内容耐心帮助我解决相应问题!十分迫切,十分着急!!!

谢谢!!!

Tom

shuyang hua:

回复 shuyang hua:

各位专家:

以上我问的问题还没有解答,求各位专家予以解答!!!不胜感激,工程任务很急,谢谢了!!!

Tom

赞(0)
未经允许不得转载:TI中文支持网 » IPC函数查找
分享到: 更多 (0)