工程师,你好,我先请教下你们,下面这些函数是在那个文件里面,我在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