Tool/software: Linux
I'm having some difficulty figuring out how to boot a custom DSP application from the ARM core running linux. I have built and am able to run all of the Syslink examples, but have had no success getting my own app to run.
The current goal is to integrate Slaveloader functionality with the MCASP Loopthrough example. I am able to load the DSP program through CCSv7 provided Linux is not loaded on the ARM.
When I attempt to start the DSP from Linux, Syslink reports successful starting of the slave, but the DSP doesn't seem to be doing anything.
To my knowledge, CCS is generating an ELF executable.
I am loading the program through linux using the following commands:
insmod /lib/modules/3.3.0/kernel/drivers/dsp/syslink.ko TRACE=1 TRACEFAILURE=1 TRACECLASS=3
./slaveloader startup DSP MCASP_AudioExampleProject.out MCASP_AudioExampleProject.map
After this, it seems that the DSP program counter appears to increment without stopping, as though there is no code loaded. At least, this is what it looks like when I step through the disassembly.
When starting the DSP from CCS, if I have linux running on the ARM, I get the following mesages through the console:
ARM9_0: Output: Target Connected.
ARM9_0: Output: ---------------------------------------------
ARM9_0: Output: Memory Map Cleared.
ARM9_0: Output: ---------------------------------------------
ARM9_0: Output: Memory Map Setup Complete.
ARM9_0: Output: ---------------------------------------------
ARM9_0: GEL: Error while executing OnTargetConnect(): Page fault occurred reading 0x01C10800
at (*((unsigned int *) ((0x01C10000+0x800)+(4*LPSC_num)))&0x1F) [OMAP-L138_LCDK.gel:868]
at PSC0_LPSC_enable(0, 0) [OMAP-L138_LCDK.gel:509]
at PSC_All_On() [OMAP-L138_LCDK.gel:244]
at OnTargetConnect()
The behavior of the DSP in this state is to sit in the idle loop without seeing the MCASP interrupts. I assume the page fault is due to the Linux kernel being loaded already.
When I do not load Linux (interrupt U-boot, then load program through JTAG), I see the following output on the console:
ARM9_0: Output: Target Connected.
ARM9_0: Output: ---------------------------------------------
ARM9_0: Output: Memory Map Cleared.
ARM9_0: Output: ---------------------------------------------
ARM9_0: Output: Memory Map Setup Complete.
ARM9_0: Output: ---------------------------------------------
ARM9_0: Output: PSC Enable Complete.
ARM9_0: Output: ---------------------------------------------
ARM9_0: Output: PLL0 init done for Core:300MHz, EMIFA:25MHz
ARM9_0: Output: DDR initialization is in progress....
ARM9_0: Output: PLL1 init done for DDR:150MHz
ARM9_0: Output: Using DDR2 settings
ARM9_0: Output: DDR2 init for 150 MHz is done
ARM9_0: Output: ---------------------------------------------
ARM9_0: Output: DSP Wake Complete.
ARM9_0: Output: ---------------------------------------------
And at this point the program starts as expected.
Either way, for the DSP console, the messages are the same:
[C674X_0]
EDMA driver initialization PASS.
Here are the target and platform:
Program Target: ti.targets.elf.C674
Program Platform: Platform: ti.platforms.evmOMAPL138:dsp
It seems like this may be a memory mapping issue, or some obscure configuration setting that I have been unable to track down. I have disabled the I2C and MCASP peripherals in my linux kernel, but saw no improvements.
Please let me know if there is any other information I can provide to help.
Jeff