AM5728利用IPU1sh定时打印 - AM57x - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5645|回复: 0

[未解决] AM5728利用IPU1sh定时打印

[复制链接]

13

主题

23

帖子

1153

积分

金牌会员

Rank: 6Rank: 6

积分
1153
发表于 2018-9-29 17:10:10 | 显示全部楼层 |阅读模式
本文的目的是利用ipu1使用定时器周期性地打印,但运行时好像没有执行到中断响应函数,请问应该怎么修改呢。以下为工程代码:
MainIpu1.c:
/*
*  ======== main_Ipu1.c ========
*
*/

/* xdctools header files */
#include <xdc/std.h>
#include <xdc/runtime/Diags.h>
#include <xdc/runtime/Error.h>
#include <xdc/runtime/Log.h>
#include <xdc/runtime/System.h>

/* package header files */
#include <ti/ipc/Ipc.h>
#include <ti/ipc/MultiProc.h>
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Task.h>
#include <ti/ipc/remoteproc/Resource.h>
#include <ti/sysbios/timers/dmtimer/Timer.h>

/* local header files */
#include "rsc_table_ipu1.h"


void TimerFunction(void)
{
        Log_print0(Diags_INFO,"TimerFunction----");       
}

/*
*  ======== main ========
*/
Int main(Int argc, Char* argv[])
{
    Log_print0(Diags_INFO,"mian----");       

    /* start scheduler, this never returns */
    BIOS_start();

    /* should never get here */
    Log_print0(Diags_EXIT, "<-- main:");
    return (0);
}


ipu1.cfg:
/* root of the configuration object model */
var Program = xdc.useModule('xdc.cfg.Program');

/* build arguments for this executable */
var cfgArgs = Program.build.cfgArgs;
var configBld = xdc.loadCapsule(cfgArgs.configBld);

/* application uses the following modules and packages */
xdc.useModule('xdc.runtime.Assert');
xdc.useModule('xdc.runtime.Diags');
xdc.useModule('xdc.runtime.Error');
xdc.useModule('xdc.runtime.Log');
xdc.useModule('xdc.runtime.Registry');

xdc.useModule('ti.sysbios.gates.GateHwi');
xdc.useModule('ti.sysbios.knl.Semaphore');
xdc.useModule('ti.sysbios.knl.Task');

/*
*  ======== IPC Configuration ========
*/
xdc.useModule('ti.ipc.ipcmgr.IpcMgr');

/* load the configuration shared across cores  */
Program.global.procName = "IPU1";
var ipc_cfg = xdc.loadCapsule("../shared/ipc.cfg.xs");

var BIOS        = xdc.useModule('ti.sysbios.BIOS');
BIOS.addUserStartupFunction('&IpcMgr_ipcStartup');

var Ipc = xdc.useModule('ti.sdo.ipc.Ipc');
Ipc.procSync = Ipc.ProcSync_PAIR;
BIOS.addUserStartupFunction('&IpcMgr_callIpcStart');

/* Override the default resource table to add SR0 */
var Resource = xdc.useModule('ti.ipc.remoteproc.Resource');
Resource.customTable = true;

/*
*  ======== SYS/BIOS Configuration ========
*/
if (Program.build.profile == "debug") {
    BIOS.libType = BIOS.LibType_Debug;
} else {
    BIOS.libType = BIOS.LibType_Custom;
}
BIOS.smpEnabled = true; /* only support SMP mode on IPU */

var Core = xdc.useModule('ti.sysbios.family.arm.ducati.Core');
Core.ipuId = 1;

/* no rts heap */
Program.argSize = 100;  /* minimum size */
Program.stack = 0x1000;

var Task = xdc.useModule('ti.sysbios.knl.Task');
Task.common$.namedInstance = true;

/* Remap the interrupt xbar mmr base address to match AMMU settings */
var IntXbar = xdc.useModule('ti.sysbios.family.shared.vayu.IntXbar');
IntXbar.mmrBaseAddr = 0x6A002000;

/* Remap the spinlocks to match AMMU settings */
var GateHWSpinlock = xdc.useModule('ti.sdo.ipc.gates.GateHWSpinlock');
GateHWSpinlock.baseAddr = 0x6A0F6800;

/* default memory heap */
var Memory = xdc.useModule('xdc.runtime.Memory');
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
var heapMemParams = new HeapMem.Params();
heapMemParams.size = 0x8000;
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);

var HeapBufMP   = xdc.useModule('ti.sdo.ipc.heaps.HeapBufMP');

/* create a heap for MessageQ host<->slave messages */
var MessageQ  = xdc.useModule('ti.sdo.ipc.MessageQ');
var HeapBuf = xdc.useModule('ti.sysbios.heaps.HeapBuf');
var params = new HeapBuf.Params;
params.align = 8;
params.blockSize = 512;
params.numBlocks = 256;
var msgHeap = HeapBuf.create(params);

MessageQ.registerHeapMeta(msgHeap, 0);

/* Setup MessageQ transport */
var VirtioSetup = xdc.useModule('ti.ipc.transports.TransportRpmsgSetup');
//MessageQ.SetupTransportProxy = VirtioSetup;  // Commented out to use standard proxy

/* Setup NameServer remote proxy */
var NameServer = xdc.useModule("ti.sdo.utils.NameServer");
var NsRemote = xdc.useModule("ti.ipc.namesrv.NameServerRemoteRpmsg");
//NameServer.SetupProxy = NsRemote;   // Commented out to use standard nsremote

/* Enable Memory Translation module that operates on the BIOS Resource Table */
var Resource = xdc.useModule('ti.ipc.remoteproc.Resource');

/*  Use SysMin because trace buffer address is required for Linux/QNX
*  trace debug driver, plus provides better performance.
*/
var System = xdc.useModule('xdc.runtime.System');
var SysMin = xdc.useModule('ti.trace.SysMin');
System.SupportProxy = SysMin;
SysMin.bufSize  = 0x8000;

Program.sectMap[".tracebuf"] = "TRACE_BUF";
Program.sectMap[".errorbuf"] = "EXC_DATA";

/*  Configure external timer base address to match resource table mapping.
*/
var dmTimer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');
/* dmTimer 0 mapped to GPT1 */
dmTimer.timerSettings[0].baseAddr = 0x6AE18000;
/* dmTimer 1 mapped to GPT2 */
dmTimer.timerSettings[1].baseAddr = 0x68032000;
/* dmTimer 2 mapped to GPT3 */
dmTimer.timerSettings[2].baseAddr = 0x68034000;
/* dmTimer 3 mapped to GPT4 */
dmTimer.timerSettings[3].baseAddr = 0x68036000;
/* dmTimer 4 mapped to GPT5 */
dmTimer.timerSettings[4].baseAddr = 0x68820000;
/* dmTimer 5 mapped to GPT6 */
dmTimer.timerSettings[5].baseAddr = 0x68822000;
/* dmTimer 6 mapped to GPT7 */
dmTimer.timerSettings[6].baseAddr = 0x68034000;
/* dmTimer 7 mapped to GPT8 */
dmTimer.timerSettings[7].baseAddr = 0x68036000;
/* dmTimer 8 mapped to GPT9 */
dmTimer.timerSettings[8].baseAddr = 0x6803E000;
/* dmTimer 9 mapped to GPT10 */
dmTimer.timerSettings[9].baseAddr = 0x68086000;
/* dmTimer 10 mapped to GPT11 */
dmTimer.timerSettings[10].baseAddr = 0x68088000;
/* dmTimer 11 mapped to GPT12 */
dmTimer.timerSettings[11].baseAddr = 0x6AE20000;
/* dmTimer 12 mapped to GPT13 */
dmTimer.timerSettings[12].baseAddr = 0x68828000;
/* dmTimer 13 mapped to GPT14 */
dmTimer.timerSettings[13].baseAddr = 0x6882A000;
/* dmTimer 14 mapped to GPT15 */
dmTimer.timerSettings[14].baseAddr = 0x6882C000;
/* dmTimer 15 mapped to GPT16 */
dmTimer.timerSettings[15].baseAddr = 0x6882E000;

/* use external timers because they keep running when IPU is not */
var halTimer = xdc.useModule('ti.sysbios.hal.Timer');
halTimer.TimerProxy = dmTimer;

/* ----------------------------- TICK ---------------------------------------*/
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
Clock.tickSource = Clock.TickSource_USER;
/* Configure GPTimer11 as BIOS clock source */
Clock.timerId = 10;

var Timer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');
var timerParams = new Timer.Params();
timerParams.period = Clock.tickPeriod;
timerParams.periodType = Timer.PeriodType_MICROSECS;
/* Smart-idle wake-up-capable mode */
timerParams.tiocpCfg.idlemode = 0x3;
/* Wake-up generation for Overflow */
timerParams.twer.ovf_wup_ena = 0x1;
Timer.create(Clock.timerId, "&TimerFunction", timerParams);

/* configure the IPU AMMU */
xdc.loadCapsule("IpuAmmu.cfg");


/*
*  ======== Power Management Configuration ========
*/
xdc.loadPackage('ti.pm');
var Power = xdc.useModule('ti.sysbios.family.arm.ducati.smp.Power');
Power.loadSegment = "PM_DATA";

/* idle functions, power management functions should be last */
var Idle = xdc.useModule('ti.sysbios.knl.Idle');

/* function to flush unicache on each core */
Idle.addCoreFunc('&VirtQueue_cacheWb', 0);
Idle.addCoreFunc('&VirtQueue_cacheWb', 1);

/* power management idle functions for each core */
/*Idle.addCoreFunc('&IpcPower_idle', 0);
Idle.addCoreFunc('&IpcPower_idle', 1);*/

/*
*  ======== Instrumentation Configuration ========
*/

/* system logger */
var LoggerSys = xdc.useModule('xdc.runtime.LoggerSys');
var LoggerSysParams = new LoggerSys.Params();
var Defaults = xdc.useModule('xdc.runtime.Defaults');
Defaults.common$.logger = LoggerSys.create(LoggerSysParams);

/* enable runtime Diags_setMask() for non-XDC spec'd modules */
var Diags = xdc.useModule('xdc.runtime.Diags');
Diags.setMaskEnabled = true;

/* override diags mask for selected modules */
xdc.useModule('xdc.runtime.Main');
Diags.setMaskMeta("xdc.runtime.Main",
    Diags.ENTRY | Diags.EXIT | Diags.INFO, Diags.RUNTIME_ON);

var Registry = xdc.useModule('xdc.runtime.Registry');
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
Registry.common$.diags_LIFECYCLE = Diags.RUNTIME_OFF;
Registry.common$.diags_STATUS = Diags.RUNTIME_OFF;

var Main = xdc.useModule('xdc.runtime.Main');
Main.common$.diags_ASSERT = Diags.ALWAYS_ON;
Main.common$.diags_INTERNAL = Diags.ALWAYS_ON;

var Hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi');
Hwi.nvicCCR.DIV_0_TRP = 1;




运行结果:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 09:37 , Processed in 0.037070 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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