本人双核新手一枚,刚接触starterware这个软件,有很多疑惑,希望能得到解答;第一个问题,starterware的例程需要分别倒入arm和dsp核吗?比如说我要用gpio这个例程,是不是需要两个工程(gpio_arm5_omapl138_lcdkomapl138和gpio_c674x_omapl138_lcdkomapl138)?第二个问题,如果两个都需要,但我发现两个gpio工程的主文件代码是一样的,而ipc_interrupt两个工程主文件又是不同的,这是怎么回事?第三个问题,starterware有没有双核通信的程序,能否指点一下?
try_omap:
回复 Tony Tang:
谢谢你的回答,像你说的那样,两者不相关的话。我有一个设计,初期只需要dsp核,那是否初期我可以不用管arm核,也不用配置arm端一些寄存器及工作模式等?因为两者没有必然联系,只是在内存上注意一下就可以了。
try_omap:
回复 Tony Tang:
谢谢你的答复,我还想知道starterware是开源的吗?我最近学习starterware代码时遇到,一些函数的意义不太清晰,想借助源码看一看。比如说以下gpio的控制程序,PSCModuleControl(SOC_PSC_1_REGS(psc1的首地址), HW_PSC_GPIO(模块号为3), PSC_POWERDOMAIN_ALWAYS_ON,PSC_MDCTL_NEXT_ENABLE);这个函数是怎样控制寄存器实现的?我参考过omapl138的技术参考手册psc模块,没有发现控制模块号选择这一段位区域啊?所以想得到starterware的函数源代码;即使软件不开源,也请你给我解释一下PSCModuleControl这个函数是怎么实现的?控制的是哪几个寄存器?
敬待你的回复。
#include "gpio.h"#include "psc.h"
#include "soc_OMAPL138.h"#include "lcdkOMAPL138.h"
/****************************************************************************//* LOCAL FUNCTION PROTOTYPES *//****************************************************************************/static void Delay(volatile unsigned int delay);
/****************************************************************************//* GLOBAL VARIABLES *//****************************************************************************/
/****************************************************************************//* LOCAL FUNCTION DEFINITIONS *//****************************************************************************/
int main(void){
/* The Local PSC number for GPIO is 3. GPIO belongs to PSC1 module.*/ PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
/* Pin Multiplexing of pin 12 of GPIO Bank 6.*/ GPIOBank6Pin12PinMuxSetup();
/* Sets the pin 109 (GP6[12]) as input.*/ GPIODirModeSet(SOC_GPIO_0_REGS, 109, GPIO_DIR_OUTPUT);
while(1) { GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_LOW);
Delay(1000000);
GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_HIGH);
Delay(1000000); }
}
/*** \brief This function checks the insertion status of the MMC/SD card** in the device and prints related statements on the serial** commuincation console of the external device.** */
/*** \brief This function can be called to generate a delay.*/
static void Delay(volatile unsigned int delay){ while(delay–);}
try_omap:
回复 Tony Tang:
我再补充一下,我查阅过starterware的帮助文档,没有发现对这几个函数的解释,如果starterware不开源的话,能否给予这几个函数的帮助文档,谢谢。
#ifndef __LCDKOMAPL138_H__#define __LCDKOMAPL138_H__
#ifdef __cplusplusextern "C" {#endif
extern unsigned int LCDVersionGet(void);extern void UARTPinMuxSetup(unsigned int instanceNum, unsigned int modemCtrlChoice);extern void RTCPinMuxSetup(unsigned int alarmPinReqd);extern void SPI0CSPinMuxSetup(unsigned int csPinNum);extern void SPI1CSPinMuxSetup(unsigned int csPinNum); extern void I2CPinMuxSetup(unsigned int instanceNum);extern void SPIPinMuxSetup(unsigned int instanceNum);extern void ConfigRasterDisplayEnable(void);extern void GPIOBank4Pin0PinMuxSetup(void);extern void GPIOBank6Pin12PinMuxSetup(void);extern void SysCfgRegistersUnlock(void);extern void SysCfgRegistersLock(void);extern void EHRPWM0PinMuxSetup(void);extern void EHRPWM1PinMuxSetup(void);extern void LIDDDisplayEnable(void);extern void McASPPinMuxSetup(void);extern void EMACPinMuxSetup(void);extern void LIDDPinMuxSetup(void);extern void LCDPinMuxSetup(void);extern void NANDPinMuxSetup(void);extern void EMIFAClkConfig(void);extern void VPIFPinMuxSetup(void);