This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA3XEVM:创建显示控制器驱动程序

Guru**** 2979400 points

Other Parts Discussed in Thread: TFP410

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/665157/tda3xevm-display-controller-driver-creation

器件型号:TDA3XEVM
主题中讨论的其他器件:TFP410

我正在尝试使用 PDK 中的 DssApp 示例


在此项目过程"Fvid2_create"中、尝试打开显示控制器的驱动程序:
///--------------------------------------------------------------
printf(“:系统初始化规范-> Fvid2创建...\r\n\r\n”);
//创建 DCTRL 句柄,用于通用驱动程序配置
appObj->dctrlHandle = Fvid2_create (
FVID2_VPS_DCTRL_DRV、
VPS_DCTRL_INST_0、
空、//对于 VPS_DCTRL_INST_0为 NULL
空、//对于 VPS_DCTRL_INST_0为 NULL
空);//对于 VPS_DCTRL_INST_0为 NULL

///--------------------------------------------------------------
但由于 Fvid2_create 过程中没有正确的 gFdmObj.fdmDriverObjects[...]元素、因此失败:
///--------------------------------------------------------------
Fvid2_handle Fvid2_create (uint32 drvId、
uint32 instanceId、
PTR CreateArgs、
PTR createStatusArgs、
const Fvid2_CbParams * cbParams)
{
FDM_Driver * drv =空;
uint32 cnt;
Fdrv_handle drvHandle = NULL;
FDM_Channel *通道=空;
Fvid2_DrvCbParams fdmCbParams、* tempCbParams;

gFdmObj.fdmDriverObjects[5].isused = 1;
gFdmObj.fdmDriverObjects[5].drvOps->drvId = drvId;

BspOsal_semWait (gFdmObj.lockSem、BSP_OSAL_WAIT_FOREVER);

printf("fvid2_create:正在从%d 获取匹配的驱动程序对象一个... \n\n",FVID2_CFG_FDM_NUM_DRV_OBJS );
for (cnt = 0U;cnt < FVID2_CFG_FDM_NUM_DRV_OBJS;cnt++)
{
printf ("否:%2D、已使用:%d、DriverID:0x%4X -"、cnt、gFdmObj.fdmDriverObjects[cnt].isused、 gFdmObj.fdmDriverObjects[cnt].drvOps->drvId );
if (true =gFdmObj.fdmDriverObjects[cnt].isused)
{
if (gFdmObj.fdmDriverObjects[cnt].drvOps == NULL) printf ("Fvid2_create:[%d].ddrvnt 为 NULL!!!!!\n",cnt);

if (drvId =gFdmObj.fdmDriverObjects[cnt].drvOps->drvId)
{
DRV =&gFdmObj.fdmDriverObjects[cnt];
//分配通道对象
printf ("ID 是正确的! 尝试 fdmAllocChannelObject");
CHANNEL = fdmAllocChannelObject();break;
}否则 printf (“错误 ID”);

}否则 printf ("不使用...");

printf ("\n");
}
///--------------------------------------------------------------
该程序将打印:
///--------------------------------------------------------------

构建时间:[2018年2月14日18:07:29日]
FVID2版本:[FVID_02_01_00_01]
BSP 版本:[pdk_01_08_00_xx]
:系统初始化完成。
:系统初始化标准-> Fvid2创建...
fvid2_create:正在从40个驱动程序对象中获取匹配的驱动程序对象...

否:0、已用:1、DriverID:0x 400 -错误 ID
否:1、已使用:1、DriverID:0x 100 -错误 ID
否:2、已使用:1、DriverID:0x 302 -错误 ID
否:3、已使用:1、DriverID:0x1300 -错误 ID
否:4、已使用:1、DriverID:0x1100 -错误 ID
否:5、已使用:0、DriverID:0x 0 -无使用...
否:6、已使用:0、DriverID:0x 0 -无使用...
否:7、已使用:0、DriverID:0x 0 -无使用...
否:8、已用:0、DriverID:0x 0 -不使用...
否:9、已使用:0、DriverID:0x 0 -无使用...
否:10、已用:0、DriverID:0x 0 -不使用...
否:11、已用:0、DriverID:0x 0 -不使用...
否:12、已用:0、DriverID:0x 0 -不使用...
否:13、已用:0、DriverID:0x 0 -不使用...
否:14、已用:0、DriverID:0x 0 -不使用...
否:15、已用:0、DriverID:0x 0 -无使用...
否:16、已用:0、DriverID:0x 0 -不使用...
否:17、已用:0、DriverID:0x 0 -不使用...
否:18、已用:0、DriverID:0x 0 -不使用...
否:19、已用:0、DriverID:0x 0 -不使用...
否:20、已用:0、DriverID:0x 0 -不使用...
否:21、已用:0、DriverID:0x 0 -不使用...
否:22、已用:0、DriverID:0x 0 -不使用...
否:23、已用:0、DriverID:0x 0 -不使用...
否:24、已用:0、DriverID:0x 0 -无使用...
否:25、已用:0、DriverID:0x 0 -无使用...
否:26、已用:0、DriverID:0x 0 -不使用...
否:27、已用:0、DriverID:0x 0 -无使用...
否:28、已用:0、DriverID:0x 0 -不使用...
否:29、已用:0、DriverID:0x 0 -不使用...
否:30、已用:0、DriverID:0x 0 -不使用...
否:31、已用:0、DriverID:0x 0 -不使用...
否:32、已用:0、DriverID:0x 0 -不使用...
否:33、已用:0、DriverID:0x 0 -不使用...
否:34、已用:0、DriverID:0x 0 -不使用...
否:35、已用:0、DriverID:0x 0 -不使用...
否:36、已用:0、DriverID:0x 0 -不使用...
否:37、已用:0、DriverID:0x 0 -不使用...
否:38、已用:0、DriverID:0x 0 -不使用...
否:39、已用:0、DriverID:0x 0 -不使用...
EALLOC:无效的驱动程序 ID!!
///--------------------------------------------------------------

因此、您无法看到用于 FVID2_VPS_DCTRL_DRV 的正确驱动程序、也无法为其创建新的驱动程序

///--------------------------------------------------------------

我有几个问题:

1) 1)如何解决此问题?

2) 2)全局值"gFdmObj"在哪里启动? 我搜索所有 PDK - PDK 中没有分配。

我将 CCS7项目附加到了 rewiev 代码。

e2e.ti.com/.../VencRT.17.02.2018.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    看起来没有注册驱动程序 ID 为0x101的 DCTRL 驱动程序初始化。

    各种驱动程序 ID 是 pdk/packages/ti/drv/vPS/include/vps.h 文件的一部分

    /**\brief 显示在创建 FVID2时使用的控制器驱动程序 ID。 *
    #define FVID2_VPS_DCTRL_DRV            (VPS_DISP_DRV_BASE + 0x00000001U)

    显示控制器驱动程序初始化通过 VPS_init() API 调用自动完成。

    您能否使用 pdk\packages/ti\drv\v\examples\utils\src\bsputils_app.c 中的应用实用程序函数中提供的 BspUtils_appDefaultInit()检查初始化序列

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    静态 FDM_Object     gFdmObj;// FDM 对象

    该结构具有的  

    typedef 结构
    {
    char *versionString;// FVID2驱动程序版本号为字符串
    uint32 versionNumber;// FVID2驱动程序版本号为字符串
    FDM_Driver fdmDriverObjects [FVID2_CFG_FDM_NUM_DRV_OBJS];// FDM 驱动程序对象
    FDM_Channel fdmChannelObjects[FVID2_CFG_FDM_NUM_CH_OBJS ];// FDM 通道对象
    BspOsal_SemHandle lockSem;//信号量来保护函数调用和其他内存分配
    } FDM_Object;

    和:

    typedef 结构
    {
    const Fvid2_DrvOps * drvOps;//驱动程序操作表指针
    uint32 numOpens;//使用创建 API 打开驱动程序的次数
    已使用 uint32;//指示是否使用对象的标志
    } FDM_Driver;

    为什么 const Fvid_DrvOps????????

    我找不到该驱动程序选项初始化步骤。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我从驱动程序对象中删除了 const、直接设置 init:
    gFdmObj.fdmDriverObjects[5].isused = 1;
    gFdmObj.fdmDriverObjects[5].drvOps->drvId = 0x101;

    但我找不到任何 createFxn 函数、
    在 VSDK 中搜索不会带来任何好处、
    drvHandle = drv->drvOps->createFxn( drvId、instanceId、createArgs、createStatusArgs、tempCbParams );

    因此驱动程序初始化失败。

    驱动程序对象数据位于何处? 没有源代码?? 仅在*。obj 文件中?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您不应更改任何驱动程序文件。
    您是否查看了初始化序列? 您能否通过 VPS_init()函数进行设置,并了解为何没有像我在第一篇帖子中提到的那样调用 DCTRL init。
    这位于文件 pdk\packages/ti\drv\vps\src\vpsdrv\src\vpsdrv_init.c 和函数 VPS_dispInit()和 VpsDrv_dctrlInit()中。

    此致
    Sivaraj R
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的!  所有这些函数都在工作前执行、之后没有错误消息。

    但是…

    我使用    C:\ti\pdk\packages/ti\drv\vps\src\vpsl\b\drv\src\vPS_dctrlDrv.c 中的 VpsDrv_dctrlInit

    这太小:

    int32 VpsDrv_dctrlInit (const VpsDrv_DctrlInitParams * initPrms)
    {
    gDctrlDrvObj.drvInstId = 0;
    gDctrlDrvObj.coreInstObj = initPrms->coreInstObj;
    gDctrlDrvObj.coreOps = initPrms->coreOps;

    gDrvInit = 1U;
    返回 BSP_SOK;
    }

    我在 C:\ti\pdk\packages/ti\drv\vps\src\vpsdrv\dispddrv\src\vpsdrv_dctrl.c 中看到了该函数的另一个重塑:

    int32 VpsDrv_dctrlInit (const VpsDrv_DctrlInitParams * initPrms)
    {
    Int32 RetVal = FVID2_SOK;
    VpsDrv_DctrlCommonObj *pObj;
    int32 initValue;

    pObj =&gVpsDctrlCommonObj;
    bspUtils_memset (pObj、0、sizeof (VpsDrv_DctrlCommonObj));

    /*初始化实例对象成员*/
    pObj->instObj =&gVpsDctrlInstObj;

    pObj->instObj->coreInstObj = initPrms->coreInstObj;
    pObj->instObj->coreOps = initPrms->coreOps;

    /*分配实例信标*/
    initValue = 1;
    pObj->instObj->lockSem = BspOsal_semCreate (initValue、false);
    if (NULL =pObj->instObj->lockSem)
    {
    GT_0TRACE (VpsDrvDctrlTrace、GT_ERR、
    "实例信标创建失败!!\r\n");
    RetVal = FVID2_EALLOC;
    }

    pObj->instObj->state.isInit =(uint32) true;
    pObj->instObj->state.isOped=(uint32) false;
    pObj->instObj->state.isStarted =(uint32) false;

    IF (FVID2_SOK =RetVal)
    {
    /*初始化驱动程序操作*/
    Fvid2DrvOps_init (&pObj->fvidDrvOps);

    pObj->fvidDrvOps.drvId = FVID2_VPS_DCTRL_DRV;
    pObj->fvidDrvOps.createFxn =&VpsDrv_dctrlCreate;
    pObj->fvidDrvOps.deleteFxn =&VpsDrv_dctrlDelete;
    pObj->fvidDrvOps.controlFxn =&VpsDrv_dctrlControl;

    RetVal = Fvid2_registerDriver (&pObj->fvidDrvOps);
    IF (FVID2_Sok!= RetVal)
    {
    GT_0TRACE (VpsDrvDctrlTrace、GT_ERR、
    "注册到 FVID2驱动程序管理器失败\r\n");
    }
    其他
    {
    /*成功初始化*/
    pObj->isRegistered =(uint32) true;
    }
    }

    返回(RetVal);
    }

    可能我使用了不正确的功能?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    这两个 init 函数实际上用于两个不同的层。 第一个是低层、即 VPS 库层。 第二个是用于 FVID2层。  

    请根据您在应用程序中使用的层调用 init 函数。

    Rgds、

    Brijesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我还想知道为什么您直接调用 DCTRL init 而不调用 VPS_init()。 在 VPS 组件下,VPS_init()函数会处理许多子组件和相互依赖性。 因此、TI 不建议直接从用户应用调用任何内部函数。 用户应用程序的所有接口都分离得很好、是 VPS/包含文件夹的一部分。 因此、用户应用程序应仅调用这些头文件中公开的函数。

    您能解释一下您尝试实现什么目标吗? 如果我们知道用例是什么以及从哪里开始、我们可以更好地指导您。 我建议您从 VPS/Examples/DSS 文件夹中的 DSS 示例之一开始、然后根据用例进行修改。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    无直接呼叫。 我只调用 VPS_init()。
    我只想将 DSS 示例 makefile 工程传输到 CCS7、
    因此、我需要解压我必须添加到项目中的*。c 源代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Alexander、

    是否要将所有库源文件移动到 CCS 工程?
    在 makefile 文件中定义了许多编译标志、并根据标志执行不同的代码。
    最好的建议是采用使用 makefile 编译的 VPS 库、并将其链接到具有 DSS 示例源文件的 CCS 工程。

    此致、
    Rishabh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我希望将所有库源移动到 CCS (只需1次、忘记了 furver)、但还没有足够的时间。 因此、我仅移动一组必要的源。
    您能建议一些软件实用程序和 pdf 文档来浏览 PDK makefile 集中的正确位置吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我从编译中排除了 VPS_dctrlDrv.c、而现在是 vpsdrv_dctrl.c。 编译成功。

    在 bsputils_App.c 中
    I2C Init 有2种类型、由 VPS_TI_RTOS_I2C 编译键选择:

    #IF 定义(VPS_TI_RTOS_I2C)
    I2C_init (SOC_I2C1_base);
    其他
    printf(“I2C:%d 实例”,i2cData->numInst );
    for (instCnt = 0U;instCnt < i2cData->numInst;instCnt++)
    {
    i2cInstData =&i2cData->InstData[instCnt];

    i2cInitParams[instCnt].opMode = HSI2C_OPMODE_INTERRUPT;
    i2cInitParams[instCnt].isMasterMode = true;
    i2cInitParams[instCnt].is10BitAddr = false;
    i2cInitParams[instCnt].i2cBusFreq =(LLD_i2c_busspeed) i2cInstData->busClkKHz;
    i2cInitParams[instCnt].i2cIntNum = i2cInstData->intNum;
    i2cInitParams[instCnt].i2cOwnAddr = 0xCC;

    gI2cDevInitParams[instCnt].initParams =&i2cInitParams[instCnt];
    gI2cDevInitParams[instCnt].hsi2c_sem = BspOsal_semCreate (((Int32) 1、(bool) true);
    gI2cDevInitParams[instCnt].instId = i2cInstData->instId;
    }
    printf ("I2C:参数初始化完成。" );

    if (i2cData->numInst >0)
    {
    RetVal += I2C_GlobalInit (i2cData->numInst、&gI2cDevInitParams[0U]);
    如果(bsp_sok!= RetVal) printf ("错误:I2C Init 失败!!!!\r\n");
    其他 printf (" I2C 初始化完成。 \r\n");
    }
    #endif


    能否停用 VPS_TI_RTOS_I2C 编译密钥? 现在我使用 SYS/BIOS。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    下面是 VPS DSS Init 的 hirahy:


    void dss_Init_Path (void)
    {
    DispApp_Obj * appObj = NULL;

    DispApp_init( appObj );
    //->>>-->----------------------------------------------------
    bspUtils_appDefaultInit( isI2cInitReq );
    //->>>-->----------------------------------
    //Объявляется- commonInitPrms
    BspCommonInitParams_init (&commonInitPrms);//Почти без действий
    bsp_commonInit (&commonInitPrms);//Совершенно пустая(см。 ниже μ A)
    //->>>
    bspUtils_init(); //Совершенно пустая

    BspBoardInitParams_init (&boardInitPrms);// 3 общих параметра для- boardInitPrms
    bsp_boardInit (&boardInitPrms);
    //->>>
    BspBoardInitParams_init (&localInitPrms);//Если boardInitPrms нулевой(повтор)
    bsp_boardTda3xxInit(); //при необходимости-но тоже пустая

    BspPlatformInitParams_init (&platInitPrms);// 5 параметров
    bsp_platformInit (&platInitPrms);
    //->>>>-->------------------------
    BspPlatformInitParams_init (); //Повторный вызов-если пустые параметры
    bsp_platformTda3xxInit(); //引脚 MUX、Xbar、IRQ
    bsp_platformTda3xxGetCpuRev();
    bsp_platformTda3xxGetPackageType();
    ///----------------------
    //Инициализация обобщенного драйвера FVID2
    //для 显示控制器
    fvid2_init( NULL ); //Общие поля- gFdmObj
    VpsInitParams_init (&vpsInitPrms); //Общие параметры

    vps_init(&vpsInitPrms );
    //->>>-->------------------------------------
    vpsInitTda3xxPlatData(); //Параметры- gVpsDrvPlatDataTda3xx
    VpsInitParams_init(&localInitPrms );//если не проинициализировано до
    VpsLib_init (&vpsLibInitPrms);
    //->>>-->----------------------------
    vpsLibInitParams_init(&localInitPrms );//Параметры
    VpsHal_init (halInitPrms);
    //->>>-->------------------------------------
    VpsHal_getPlatformData ();//Возвращает- gVpsHalPlatDataTda3xx
    VpsHal_dssVidInit(); //Инициализирует VID 对象
    //->>>-->------------
    halDssVidInitInstance();//Создает и настраивает объекты для всех VID
    ///----------------
    VpsHal_dssOvlyInit(); //Создает объект для оверлеев
    //--->>-->--------------------------
    halDispcOvlyInitInstance (dispovlyObj);//Создает объект для оверлеев
    halDispcReset(); //Сброс контроллера дисплея
    halDispcSetDefIntfWidth(); //将 DPI 接口宽度设置为24位
    ///------------------------------
    //------------------------------
    VpsHal_open();
    //->>>-->----------------------------
    VpsLib_getPlatformData();
    VpsHal_dssVidOpen (&vidPipeOpenPrms); //Несколько раз открывает 视频管道
    ///------------------------------
    vps_commonInit (initPrms);
    //->>>-->----------------
    VpsLib_getPlatformData ();//во второй раз
    ///------------------
    vps_dispCoreInit (initPrms);
    //->>>-->------------------------
    VpsLib_getPlatformData ();//в третий раз
    VpsCore_dsInit (&dssCoreInitPrms);
    //->>>-->----------------------------
    bspUtils_initPool();
    ///----------------------------
    VpsCore_dsWbInit(&dsWbCoreInitPrms);
    //->>>-->----------------------------
    bspUtils_initPool();
    ///----------------------------


    VpsCore_dctrlInit(&dctrlCoreInitPrms );
    //->>>-->----------------------------
    VpsCore_DctrlInit (pNewObj);
    //->>>-->----------------
    vpsCore_DctrlGraphInit();
    //->>>-->----------------
    vgraph_Init();
    //->>>-->----------------------------
    vgraph_Connect (inNodeList、inEdgeList);//Автономная
    ///------------------------------
    ///------------------
    ///------------------
    BspOsal_clearIntr ();
    BspOSAL_registerIntr ();
    ///----------------------------



    ///--------------------
    ///------------------------------
    ///----------------------

    //
    bspUtils_memInit();
    bspUtils_prfInit();
    bspUtils_AppInit();
    bspUtils_uartInit();
    BspOsal_Init(&bspOsalInitPrms );
    bsp_platformPrintInfo();
    bsp_boardPrintInfo();
    //------------------------------------
    appObj->dctrlHandle = Fvid2_create;
    DispApp_configureVideoPllAndClkSrc( appObj、defPixelClk );
    bsp_platformEnableHdmiPll (真);
    DispApp_LoadBuf (appObj,.gDispDssLoadBufCfg[bufCfgId]);
    ///----------------------------------------------------------
    bsp_boardGetId();
    //Далее в цикле определяется номер теста
    testID = DispApp_getTestId( appObj );
    //и выполняется соответствующий тест
    DispApp_RunTest( appObj,testPrms );
    //и заканчиваем
    DispApp_deInit( appObj );
    };
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [Cortex_M4_IPU1_C0]输入 main ()
    错误信息>>>
    任务创建>>>
    BIOS 开始>>>
    输入 taskFxn()
    启动显示...
    开始显示 DSS...
    :样片申请-开始!!!
    在 DispApp_init 内部->尝试 BspUtils_appDefaultInit...
    启动 BspUtils_appDefaultInit
    正在启动 BSP_commonInit
    ...结束...启动 BspBoardInitParams_init
    ---无 initPrms->CustomData =>调用 bsp_boardTda3xxInit();
    电路板初始化正常。
    BspPlatformInitParams_init 完成。
    :CPU 修订版1.0
    :15x15号封装
    平台初始化完成。
    FVID2空 Init 完成。
    VpsInitParams_init 完成。
    启动 VPS_init...
    在 VPS_init 内部-尝试 vpsInitTda3xxPlatData
    在 vpsInitTda3xxPlatData...中
    结束 vpsInitTda3xxPlatData...
    尝试 VpsLib_init...
    在 VpsLib_init...->BspUtils_memset 内
    VpsHal_init 完成。
    VpsLib_getPlatformData 完成。
    ***视频管道***
    视频管道数- 3开始打开视频管道 HAL...
    视频管道数量- 3.
    正在尝试 dsVid Open HAL 计数- 0
    打开视频管道 HAL 已完成。
    正在尝试 dsVid Open HAL 计数- 1.
    打开视频管道 HAL 已完成。
    正在尝试 dsVid Open HAL 计数- 2.
    打开视频管道 HAL 已完成。
    WB 管道数- 1开始打开 WB 管道 HAL...
    打开 WB 管道 HAL 已完成。
    --重叠管理器的数量---- 2.
    开始打开覆盖 HAL...
    打开覆盖 HAL 已完成。
    打开覆盖 HAL 已完成。
    VpsHal_open 完成。
    VPS_commonInit 完成。
    VpsLib_init 完成。
    VpsDrv_ctrlInit 完成。
    VPS_dispInit 完成。
    VPS 初始化完成。

    ------------------
    bsp_boardGetI2cData 开始…… bsp_boardGetI2cData 完成。
    BspDeviceInitParams_init 完成。
    器件初始化完成。
    App MEM Utils 初始化完成。
    应用程序 PRF 实用程序完成初始化。
    应用实用程序初始化完成。
    BspOsal_Init 完成。

    构建时间 :[13:32:33 2018年2月21日]
    FVID2版本 :[FVID_02_01_00_01]
    BSP 版本 :[pdk_01_08_00_xx]
    平台 :[EVM]
    SoC :[TDA3XX]
    SoC 修订版 :[ES1.0]
    FT 版本 :[0]
    封装 :[15x15]
    内核 :[M4]
    检测到电路板 :[未知]
    I2C0:初始化期间未启用实例... 错误!!!
    I2C0:初始化期间未启用实例... 错误!!!
    EEPROM 读取失败!!
    基板修订版:[REV A]
    子卡修订版:[Rev A]



    :系统初始化完成。

    :系统初始化标准-> Fvid2创建...
    fvid2_create:正在从40个驱动程序对象中获取匹配的驱动程序对象...

    否:0、已使用:1、DriverID:0x 400
    否:1、已使用:1、DriverID:0x 101
    -- ID 是正确的!!! 尝试 fdmAllocChannelObject
    fdmAllocChannelObject:分配自由通道对象

    将4个大小为1920x1080的 YUV422I_YUYV 视频帧加载到位置:0x8000000
    正在尝试从 SD 卡加载缓冲区。

    将4个大小为1920x1080的 BGR24_888视频帧加载到位置:0x80fd2000
    正在尝试从 SD 卡加载缓冲区。


    :DispApp_init()-完成!!!
    显示应用程序初始化完成!!!




    --测试 N4
    :处理1:运行计数30:输入:1!!!
    设备驱动程序 ID 无效!!
    设备驱动程序 ID 无效!!
    设备驱动程序 ID 无效!!
    I2C0:初始化期间未启用实例... 错误!!!
    I2C 写入失败!!
    I2C0:初始化期间未启用实例... 错误!!!
    I2C 写入失败!!
    I2C0:初始化期间未启用实例... 错误!!!
    I2C 读取失败!!
    设备选择模式失败
    E:0x8f012da8。
    任务堆栈大小:0x800。
    R0 = 0xFF0000 R8 = 0xFFFF
    R1 = 0xffffff0004 R9 = 0xFFFF
    R2 = 0x00000000 R10 = 0xffffffff
    R3 = 0x00000000 R11 = 0xffffffff
    R4 = 0x5e5c5d80 R12 = 0x8f018030
    R5 = 0x0000000f SP (R13)= 0x8f013468
    R6 = 0x2f2e2ec0 LR (R14)= 0x8f02d6df
    R7 = 0xffffffff PC (R15)= 0x0000009e
    PSR = 0x81000000
    ICSR = 0x0440f803
    MMFSR = 0x00
    BFSR = 0x86
    UFSR = 0x0000
    HFSR = 0x40000000
    DFSR = 0x00000001
    MMAR = 0xffffff0038
    BFAR = 0xff0038
    AFSR = 0x00000000
    正在终止执行...




    可能所有这些都适用于显示控制器初始化?
    DispApp_init()-完成时没有错误....
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否走进去、看看为什么会失败?

    此致

    Sivaraj R

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    现在、显示控制器似乎工作正常-我按顺序看到此驱动程序(0x101)。

    现在我调用 DispApp_configureLCD( DispApp_Obj *appObj )
    此过程调用
    过程 bsp_boardGetVideoDeviceInstId 返回无效的设备驱动程序 ID:
    ///--------------------------------------------------------------
    uint32 bsp_boardGetVideoDeviceInstId( uint32 devDrvId, uint32 drvId, uint32 drvInstId )
    {
    uint32 instId = bsp_Board_invalid_INST_ID;
    uint32 devCnt;
    const BSP_BoardData *板载数据;
    const BSP_BoardDeviceData * devData;

    boardData = BSP_boardGetData();
    GT_ASSERT (BspBoardTrace、(boardData!= NULL));

    for (devCnt = 0U;devCnt < boardData->numDev;devCnt++)
    {
    GT_ASSERT (BspBoardTrace、(boardDate->devData!= NULL));
    devData =&boardData->devData[devCnt];
    if ((devData->devDrvId == devDrvId)&&
    (devData->drvId == drvId)&&
    (devData->drvInstId == drvInstId))
    {
    instId = devData->instId;
    中断;
    }
    }

    if (bsp_Board_invalid_INST_ID == instId) printf ("无效的设备驱动程序 ID!! (instId)\r\n");

    return (instId);
    }
    ///--------------------------------------------------------------

    我不想使用 LCD、只想使用外部 DPI HDMI 编码器 SII9022 (1种型号)

    下一个变体- TDA3xx 内部 PAL 编码器。

    现在、我对 PAL 使用测试 ID = 14
    对于 HDMI、测试 ID = 4

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    可能只需关闭 LCD? 如何简单地做到这一点?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您使用的是 PDK 软件包中提供的 DSS 示例(pdk\packages/ti\drv\vPS\examples\dss\displayDss\src)、则只需将 gDispAppTestPrms[]测试变量中相应选项的 encDrvId 设置为0。 这将跳过示例中的所有 LCD 配置。 然后、您需要使用 I2C 对 HDMI 控制器进行编程。
    BTW 您是否正在使用 TDA3xx TI EVM? 然后、该示例已经支持基板中的 HDMI SIL9022A 显示屏。 您可以运行正确的选项。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的-我桌上的那块板和丝9022 (你是书法教育的人(正确的方式)-所有的都在代码中-"Sii"...9022-现在就不要为什么了)。

    我想知道-如果需要 PAL 内部解码器-为什么要避开 LCD 点?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    具有 sil9022 -入门套件15x15 TDA3x ES1.0 GP (EVMTDA3G-01-40-00 01NOV16 703754-1101修订版 A)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Alex、

    PDK 尚未正式支持 TDA3x 入门套件。 计划在4月18日发布。

    同时、我已要求我们的合作伙伴 D3 Engineering 进行检查并为您提供帮助。

    此致

    Sivaraj R

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    :-((((((((((((. !!!!!!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是-我尝试启动测试 N14:

    {//----------------------------------------------------------
    14U、 //测试用例 ID
    "DSS Video1. (YUY422I) ->DPI1 -> SD-VENC (PAL)"、// testDescStr
    1U、 //编码器数量
    {0、}、 // encDrvId[]
    {VPS_DCTRL_DSS_VENC_LCD1、}、// vencId[]
    { FVID2_STD_PAL,}, //标准[]
    对、 // isSdVenc
    错误、 // isRtParamUpdateTest
    1U、 // numofHandles
    {VPS_DISP_INST_DSS_VID1、}、// instId[]
    {FVID2_DF_YUV422I_YUYV、}、// inDataFmt
    {720、}、 // inWidth
    { 576,}, // inHeight
    {0U、}、 // Posx
    {0U、}、 // poxy
    { FVID2_SF_Interlased,}, //扫描格式
    {真,}, //字段合并
    disp_app_run_count、 // runCount
    BSP_Board_mode_default、 // boardMode
    (bsp_Board_BASE_TDA3XX | bsp_Board_MULTIDES)、// boardId
    }、


    所以-它似乎 encDrvId==14已经是默认值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    --测试 N14
    :处理1:运行计数150:输入:1!!!
    尝试调用 DispApp_create
    尝试调用 DispApp_initParams
    DispApp_initParams 完成。
    在 DispApp_create()-> 1编码器中进行配置
    DispApp_create:编码器- 0
    编码器驱动器- LCD 或 HDMI SII9022A 或 DS90UH925
    引脚复用完成
    编码器驱动程序- LCD
    启动 DispApp_configureLCD
    设备驱动程序 ID 无效!! (instId)
    DispApp_configureLCD ()-尝试:为 LCD 控制器(BSP_boardPowerOnDevice)上电
    DispApp_configureLCD ()-尝试:在板级多路复用器(BSP_boardSelectDevice)上选择 LCD 控制器
    DispApp_configureLCD ()-尝试:在板级执行所需的任何复位(BSP_boardResetDevice)
    DispApp_configureLCD()尝试:选择特定模式()


    这是正常的- instId = 0 -所以-无效的设备驱动程序 ID!!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    下面是我从 D3获得的响应

    Starterkit 不使用 SIL9022、而是使用 TFP410。 要初始化 TFP410、必须将 PDN 信号设置为高电平、以使 TFP410退出复位状态。 这是通过将位于 U22和 I2C 地址0xE4 (7位)的 GPIO 扩展器(TCA9539PW)的 IO1_7设置为高电平来实现的。 执行此操作的写入是

     

      uint8 regAddr;

      uint8 regData;

     

    #define RVP_IOEXP_I2C_ADDR (0x74)

        /* TFP410启用*/

        /*启用 TFP410输出、扩展器的位7设置为输出*/

        regAddr = 7;

        regData = 0x0;

        RetVal = BSP_deviceRead8 (

                  bsp_device_I2C_INST_ID_1、

                  RVP_IOEXP_I2C_ADDR、

                  regAddr (regAddr)、

                  regData (regData)、

                  1);

        regData &= 0x7F;

        RetVal = BSP_deviceWrite8 (

                  bsp_device_I2C_INST_ID_1、

                  RVP_IOEXP_I2C_ADDR、

                  regAddr (regAddr)、

                  regData (regData)、

                  1);

     

     

    配置 TFP410无需其他初始化

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不不不不!  

    我使用具有 Sil9022的 Spectrum Digital TDA3x EVM ES1.0 GP 套件

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    然后 DSS 示例应开箱即用、而不进行任何更改。 我在这里有点迷路了。 您能否重新解释一下您的问题是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    注意:当我说开箱即用时、我的意思是无需更改驱动程序和示例。 如果您有原始的 PDK 版本、则在通过 CCS 编译和运行时、它们应按原样工作。 您需要通过 UART 选择正确的示例选项以在 HDMI 中显示。 您使用的是哪个版本的 PDK?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../VencRT.28.02.2018.zipNice!!!

    现在、我们处于最感兴趣和最重要的时刻。

    所有示例都是 Linux-make-file 样式的项目。  

    并且没有指导如何将此类工程快速转换为 CCS 工程的指南。 下面给出了"小心地获取一些文件并手动形成 CCS 项目"的建议。 我已经完成了、但遇到了代码的一些功能:

    1)#include 指令的一部分是错误的-我认为这是 Linux 的补偿并使行为发生-我纠正了它(可能会出错)。

    2) 2)一些 TDA3x 文件需要来自 TDA2x One 的常量-我手动删除要添加的常量。

    3) 3)来自不同级别的不同文件的类似过程-需要确定哪一个文件专用。

    我们需要一组紧凑的函数才能与 TDA3x 配合使用、此示例只是工作的起点。 PDK 过大、无法按原样使用、没有任何更改。  

    现在我完成了 CCS 转换、工程编译和启动、但在某些方面工作不正常。 我附加了这个项目。  

    我可以看到控制台输出:

    [Cortex_M4_IPU1_C0]输入 main ()
    错误信息>>>
    任务创建>>>
    启动显示...
    开始显示 DSS...
    :样片申请-开始!!!
    在 DispApp_init 内部->尝试 BspUtils_appDefaultInit...
    启动 BspUtils_appDefaultInit
    正在启动 BSP_commonInit
    ...结束...启动 BspBoardInitParams_init
    ---无 initPrms->CustomData =>调用 bsp_boardTda3xxInit();
    电路板初始化正常。
    BspPlatformInitParams_init 完成。
    :CPU 修订版1.0
    :15x15号封装
    平台初始化完成。
    FVID2空 Init 完成。
    VpsInitParams_init 完成。
    启动 VPS_init...
    在 VPS_init 内部-尝试 vpsInitTda3xxPlatData
    在 vpsInitTda3xxPlatData...中
    结束 vpsInitTda3xxPlatData...
    尝试 VpsLib_init...
    在 VpsLib_init...->BspUtils_memset 内
    VpsHal_init 完成。
    VpsLib_getPlatformData 完成。
    ***视频管道***
    视频管道数- 3开始打开视频管道 HAL...
    视频管道数量- 3.
    正在尝试 dsVid Open HAL 计数- 0
    打开视频管道 HAL 已完成。
    正在尝试 dsVid Open HAL 计数- 1.
    打开视频管道 HAL 已完成。
    正在尝试 dsVid Open HAL 计数- 2.
    打开视频管道 HAL 已完成。
    WB 管道数- 1开始打开 WB 管道 HAL...
    打开 WB 管道 HAL 已完成。


    --重叠管理器的数量---- 2.
    开始打开覆盖 HAL...
    打开覆盖 HAL 已完成。
    打开覆盖 HAL 已完成。
    VpsHal_open 完成。
    VPS_commonInit 完成。
    VpsLib_init 完成。
    VpsDrv_ctrlInit 完成。
    VPS_dispInit 完成。
    VPS 初始化完成。

    ------------------
    App MEM Utils 初始化完成。
    应用程序 PRF 实用程序完成初始化。
    应用实用程序初始化完成。
    BspOsal_Init 完成。

    构建时间:[14:50:29 2018年2月27日]
    FVID2版本:[FVID_02_01_00_01]
    BSP 版本:[pdk_01_08_00_xx]
    平台:[evm]
    SoC:[TDA3XX]
    SoC 修订版:[ES1.0]
    FT 修订版本:[0]
    封装:[15x15]
    内核:[M4]
    检测到电路板:[未知]
    基板版本:[未知]
    子卡版本:[未知]
    :系统初始化完成。
    :系统初始化标准-> Fvid2创建...
    fvid2_create:正在从40个驱动程序对象中获取匹配的驱动程序对象...

    否:0、已使用:1、DriverID:0x 400
    否:1、已使用:1、DriverID:0x 101
    -- ID 是正确的!!! 尝试 fdmAllocChannelObject
    fdmAllocChannelObject:分配自由通道对象
    :在 Fvid2_create 完成后创建 DCTRL。
    启动 bsp_platformSetPllFreq...
    在 bsp_platformTda3xxSetPllFreq 内部....尝试 PMLIBVideopllSetFreq...
    :配置 PLL 完成。
    :设置 Venc 时钟源完成。
    将4个大小为1920x1080的 YUV422I_YUYV 视频帧加载到位置:0x8000000
    正在尝试从 SD 卡加载缓冲区。
    加载缓冲器完成。
    将4个大小为1920x1080的 BGR24_888视频帧加载到位置:0x80fd2000
    正在尝试从 SD 卡加载缓冲区。
    加载缓冲器完成。
    :DispApp_init()-完成!!!
    显示应用程序初始化完成!!!

    vv --测试 N14 ------------------- vv
    :处理1:运行计数150:输入:1!!!
    尝试调用 DispApp_create
    尝试调用 DispApp_initParams
    DispApp_initParams 完成。
    在 DispApp_create()-> 1编码器中进行配置
    DispApp_create:编码器- 0
    编码器驱动器- LCD 或 HDMI SII9022A 或 DS90UH925
    引脚复用完成
    编码器驱动程序- LCD
    启动 DispApp_configureLCD
    设备驱动程序 ID 无效!! (instId)
    DispApp_configureLCD ()-尝试:为 LCD 控制器(BSP_boardPowerOnDevice)上电
    器件上电完成。
    DispApp_configureLCD ()-尝试:在板级多路复用器(BSP_boardSelectDevice)上选择 LCD 控制器
    器件选择完成。
    DispApp_configureLCD ()-尝试:在板级执行所需的任何复位(BSP_boardResetDevice)
    器件复位完成。
    DispApp_configureLCD()尝试:选择特定模式()
    bsp_boardSelectMode:bsp_boardLock()
    bsp_boardLock()完成。
    电路板模式为真
    bsp_boardSelectMode:bsp_boardUnlock()
    bsp_boardUnlock()完成。
    器件选择特定模式完成。
    启动 DispApp_configDctrl
    VpsDctrlConfig_init 完成。
    启动 Fvid2ModeInfo_init (LCD1)
    Fvid2ModeInfo_init 完成。
    磁芯控制:设置 venc 输出失败!!
    :DCTRL 设置 Venc 输出 IOCTL 失败!!!
    :DCTRL 设置 ADV TDM 打印机完成。
    不支持的标准!!
    模式不受支持
    内核控制:设置配置失败!
    :DCTRL 设置配置 IOCTL 失败!!!
    :DCTRL 设置管道参数 IOCTL 完成。
    DispApp_configDctrlPipe 完成。
    启动 bsp_platformSetPllFreq...
    在 bsp_platformTda3xxSetPllFreq 内部....尝试 PMLIBVideopllSetFreq...
    :配置 PLL 失败!!!
    :配置视频 PLL 失败!!!
    DispApp_configDctrl 完成
    fvid2_create:正在从40个驱动程序对象中获取匹配的驱动程序对象...

    否:0、已使用:1、DriverID:0x 400
    否:1、已使用:1、DriverID:0x 101
    否:2、已使用:1、DriverID:0x 100
    -- ID 是正确的!!! 尝试 fdmAllocChannelObject
    fdmAllocChannelObject:分配自由通道对象
    队列长度(0)无效
    驱动程序创建失败!!
    :显示创建失败!!!
    :正在启动显示... !!!
    :正在显示... 不要停下来!!!
    EBADARGS:空指针!!
    :显示启动失败!!!
    测试结束---------------------------------------------------------
    显示 DSS 完成。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    也许最好通过建立 make-files (PDK 中为127个)的字符串来获得 CCS 工程中预定义的符号和文件集的正确设置。 您能否指出相关文档中对 PDK make 文件集的担忧描述?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    PDK makefile 是分层构建的。 我们有一个顶级 makefile、用于定义通用"-D"选项。 您可以在 pdk/packages/ti/build/makerules 中查看这些文件(build_config.mk、component.mk)。 在这些文件中搜索-D。 或替代方法在执行 make 操作时通过删除-s 来查找选项。

    接下来、每个子模块在模块文件夹的底部定义自己的 component.mk 文件。 例如、请参阅 pdk/packages/ti/CSL/CSL_component.mk 和 pdk/packages/ti/drv/vPS/VPS_component.mk。

    构建这些模块时、编译器标志会添加到 makerules 文件夹中定义的通用编译器标志之上。

    由于 VPS 模块具有多个驱动程序、因此我们提供了选项、可选择性地仅编译基于-D 选项的所需文件/驱动程序。 因此、我认为在构建 VPS 文件时、省略了一些所需的-D 选项。 请参阅 pdk/packages/ti/drv/vPS/vps_component.mk、查看您是否错过了 CCS 工程中的任何选项。

    具体而言、您将需要以下编译器选项来构建 TDA3xx 的 VPS 模块。

    -dTrace_enable
    -DASDERT_ENABLE
    -dvps_vIP_build
    -DVPS_CAPT_BUILD
    -DVPS_VIP1_BUILD
    -DVPS_DSS_BUILD
    -DVPS_DISP_BUILD
    -DVPS_CAL_BUILD
    -DVPS_CAPT_BUILD
    -dvps_iSS_BUILD
    -DVPS_ISS_ISP_DEF
    -dvps_iSS_BUILD
    -DVPS_SIMCOP_BUILD

    同样、要编译的文件存在于每个文件夹中的各种.mk 文件中、这些文件基于通过 make 系统传播的软件包/驱动程序选择。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的-一开始 您在 Nike Windows macine 中-仅限 VSDK 和 CCS -您是否可以快速展示如何快速模拟 DSS 示例??? 问题是否存在,或者它可能只存在于具有新的影响的 Linux macine 中???? 我真的需要知道。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉。 您能否细化您的问题? 我无法跟随
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    还可以。。。 让我尝试手动将 DSS 工程从 make 表单转换为 CCS 表单。 我将在一些关键问题上寻求您的帮助。

    您坚持认为 DSS 示例工程可以在没有更改的情况下进行转换。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们目前没有。 但是、我们计划在本月末之前创建一个有关 PDK make 系统的 wiki。 完成后、我将发布它。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    仅如何启动 DSS -查看 Display 的工作原理

    您会非常熟悉将项目传输到 CCS 的速度。

    1) 1)预定义符号

    2)文件列表

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我能否仅使用1个 DSS 示例工程复制 PDK?
    CCS 是否可以理解 make 文件的结构?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    CCS 无法理解 PDK 中存在的 makefile。

    BTW 仅在2018年4月20日前完成 PDK 中使用的 makefile 的 wiki 页面。 完成后、我会随时通知您。