6657多核多镜像通信例程中,第一次是如何进ipc中断的? - TMS320C665x - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4249|回复: 1

[未解决] 6657多核多镜像通信例程中,第一次是如何进ipc中断的?

[复制链接]

1

主题

2

帖子

25

积分

新手上路

Rank: 1

积分
25
发表于 2020-4-3 11:22:43 | 显示全部楼层 |阅读模式
在C6657多核多镜像通信例程调试中,不知道第一次是如何进ipc中断服务函数的。调试先运行core1,再运行core0,推测是先进入了core1的中断服务函数,后进入了core0的中断服务函数。如果实现可以“随意”进入ipc中断传输数据该注意修改哪些地方~~
还希望各位可以指导一下,谢谢大家!



core1部分代码如下:

/****************************************************************************/
/*              中断服务函数                                                */
/****************************************************************************/
Void IPCIsr(UArg arg)
{
unsigned int rc;
rc = IPCIntAcknowledge(Core0_Notify_Core1);
UARTprintf(&uart0cfg, "[Core %d] Flag = %08d Source ID 0x%08x\r\n", DNUM, Flag, rc);
// 数据处理
Flag = 15;
Cache_wb((void *)&Flag, 4, Cache_Type_ALLD, TRUE);
// 触发 IPC 中断(通知核心 0)
IPCIntGenerate(CPU_Core0, Core1_Notify_Core0);
}
/****************************************************************************/
/*              任务(Task)线程                                            */
/****************************************************************************/
Void LEDTask(UArg a0, UArg a1)
{
// 主循环
for(;;)
{
  LEDControl(CoreLED_D8, Status_ON);
  Task_sleep(2000);
  LEDControl(CoreLED_D8, Status_OFF);
  Task_sleep(2000);
}
}
/****************************************************************************/
/*              硬件中断(Hwi)线程初始化                                   */
/****************************************************************************/
Void HwiInit()
{
    // 动态创建硬件中断
    Hwi_Params hwiParams;
    // 使用默认值初始化参数
    Hwi_Params_init(&hwiParams);
    // 中断事件
    hwiParams.eventId = 90;
    // 创建 Hwi 线程
    Hwi_create(4, IPCIsr, &hwiParams, NULL);
}
/****************************************************************************/
/*              任务(Task)线程初始化                                      */
/****************************************************************************/
Void TaskInit()
{
// 动态创建任务
Task_Params TaskParams;
// 使用默认值初始化参数
Task_Params_init(&TaskParams);
// 创建任务线程
TaskParams.priority = 1;
Task_create(LEDTask, &TaskParams, NULL);
}
/****************************************************************************/
/*              线程初始化                                                  */
/****************************************************************************/
Void ThreadInit()
{
// 硬件中断
HwiInit();
    // 任务
TaskInit();
}
/****************************************************************************/
/*              主函数                                                      */
/****************************************************************************/
Int main()
{
UARTprintf(&uart0cfg, "[Core %d] Tronlong Simple IPC Application......\r\n", DNUM);
// 取得芯片型号
DSPChipType = DSPTypeGet();
// 多核启动
UARTprintf(&uart0cfg, "[Core %d] Core 1 has been initialized.\r\n", DNUM);
BootStatus = BootCompleteCode;
Cache_wb((void *)&BootStatus, 4, Cache_Type_ALLD, TRUE);
    // 线程初始化
    ThreadInit();
    // 启动 SYS/BIOS 系统
    BIOS_start();
    return(0);
}


763905e86a882e71ed.png(39.83 KB, 下载次数: 0)
下载附件
13 分钟前 上传




和红框部分有关系吗?查了文档也没看明白是怎么触发的,其中,
BootCompleteCode   0xFF00FF00


core0部分代码:
/****************************************************************************/
/*              宏定义                                                      */
/****************************************************************************/
// 启动完成代码
#define BootCompleteCode   0xFF00FF00
// 核心
#define CPU_Core0          0
#define CPU_Core1          1
// 通信命令
#define Core0_Notify_Core1 0x00000010
#define Core1_Notify_Core0 0x00000100




/****************************************************************************/
/*              中断服务函数                                                */
/****************************************************************************/
Void IPCIsr(UArg arg)
{
unsigned int rc;
rc = IPCIntAcknowledge(Core1_Notify_Core0);
Cache_inv((void *)&Flag, 4, Cache_Type_ALLD, TRUE);
UARTprintf(&uart0cfg, "[Core %d] Flag = %08d Source ID 0x%08x\r\n", DNUM, Flag, rc);
}
/****************************************************************************/
/*              任务(Task)线程                                            */
/****************************************************************************/
Void IPCTask(UArg a0, UArg a1)
{
UARTprintf(&uart0cfg, "[Core %d] Waiting for Core 1 Initialization Complete......\r\n", DNUM);
while(BootStatus != BootCompleteCode)
{
  Cache_inv((void *)BootStatus, 4, Cache_Type_ALLD, TRUE);
}
Flag = 5;
Cache_wb((void *)&Flag, 4, Cache_Type_ALLD, TRUE);
Task_sleep(500);
IPCIntGenerate(CPU_Core1, Core0_Notify_Core1);
}
Void LEDTask(UArg a0, UArg a1)
{
// 主循环
for(;;)
{
  LEDControl(CoreLED_D7, Status_OFF);
  Task_sleep(1000);
  LEDControl(CoreLED_D7, Status_ON);
  Task_sleep(1000);
}
}
/****************************************************************************/
/*              外设初始化                                                  */
/****************************************************************************/
Void PeriphInit()
{
// LED 初始化
LEDInit();
// 串口初始化
uart0cfg.ID = BoardUART0;
uart0cfg.BaudRate = BAUD_115200;
uart0cfg.config = UART_WORDL_8BITS;
uart0cfg.OverSampRate = UART_OVER_SAMP_RATE_16;
    UARTInit(&uart0cfg);
}
/****************************************************************************/
/*              硬件中断(Hwi)线程初始化                                   */
/****************************************************************************/
Void HwiInit()
{
    // 动态创建硬件中断
    Hwi_Params hwiParams;
    // 使用默认值初始化参数
    Hwi_Params_init(&hwiParams);
    // 中断事件
    hwiParams.eventId = 90;
    // 创建 Hwi 线程
    Hwi_create(4, IPCIsr, &hwiParams, NULL);
}
/****************************************************************************/
/*              任务(Task)线程初始化                                      */
/****************************************************************************/
Void TaskInit()
{
// 动态创建任务
Task_Params TaskParams;
// 使用默认值初始化参数
Task_Params_init(&TaskParams);
// 创建任务线程
TaskParams.priority = 2;
Task_create(IPCTask, &TaskParams, NULL);
TaskParams.priority = 1;
Task_create(LEDTask, &TaskParams, NULL);
}
/****************************************************************************/
/*                                                                          */
/*              线程初始化                                                  */
/*                                                                          */
/****************************************************************************/
Void ThreadInit()
{
// 硬件中断
HwiInit();
    // 任务
TaskInit();
}
/****************************************************************************/
/*                                                                          */
/*              缓存配置                                                    */
/*                                                                          */
/****************************************************************************/
void CacheInit()
{
Cache_Size cacheSize;
cacheSize.l1pSize = Cache_L1Size_32K;
cacheSize.l1dSize = Cache_L1Size_32K;
cacheSize.l2Size  = Cache_L2Size_128K;
Cache_setSize(&cacheSize);
    /* 配置缓存区域 */
    Cache_setMar((Ptr *)0x80000000, 0x20000000, Cache_Mar_ENABLE | Cache_PFX); // 512MB 可缓存可预取区域
}
/****************************************************************************/
/*              主函数                                                      */
/****************************************************************************/
Int main()
{
// 取得芯片型号
DSPChipType = DSPTypeGet();
// 外设初始化
PeriphInit();
UARTprintf(&uart0cfg, "[Core %d] Tronlong Simple IPC Application......\r\n", DNUM);
    // 线程初始化
    ThreadInit();
    // 启动 SYS/BIOS 系统
    BIOS_start();
    return(0);
}

回复

使用道具 举报

1

主题

2

帖子

25

积分

新手上路

Rank: 1

积分
25
 楼主| 发表于 2020-4-3 17:43:31 | 显示全部楼层
我好像知道了,先留一下吧,、
IPCIntGenerate(CPU_Core1, Core0_Notify_Core1);//触发 IPC 中断(通知core 1)
rc = IPCIntAcknowledge(Core1_Notify_Core0);
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-3-29 21:35 , Processed in 0.035799 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表