|
本文的目的是利用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
|