完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ti的工程师你们好!
目前使用6678 在BIOS下进行QDMA的调试 目前发现的问题是 想要配置成Region0 下的QDMA发送 但是Region0的IPR一直是0 但是Global内的IPR正常置位 并且QDMA传数正常 在DDR内(EMIF-》DDR)可以看到正确的图像数据,所以想问下我的程序究竟是哪里出了问题,程序依照CSL EDMA3的测试合集程序修改 QDMA初始化源程序: int QdmaInit ( int instNum, unsigned char channelNum, int regionNum, int CoreId, CSL_Edma3CmdIntr* regionIntr, CSL_Edma3Handle* hModule, CSL_Edma3Obj* edmaObj, CSL_Edma3ParamHandle* hParamPing, CSL_Edma3ChannelObj* chObj, CSL_Edma3ChannelHandle* hChannel, CSL_Edma3ParamSetup* myParamSetup ) [ CSL_Edma3CmdDrae regionAccess; CSL_Edma3Context context; CSL_Edma3ChannelAttr chAttr; CSL_Edma3CmdQrae qraeSetup; CSL_Status status; /* Module initialization */ if (CSL_edma3Init(&context) != CSL_SOK) [ printf ("Error: EDMA module initialization failedn"); return -1; /* Module level open */ *hModule = CSL_edma3Open(edmaObj,instNum,NULL,&status); if ((*hModule == NULL) || (status != CSL_SOK)) [ printf ("Error: EDMA module open failedn"); return -2; /* Shadow Region: Enable DRAE enable(Bits 0-15) it. */ regionAccess.region = regionNum; regionAccess.drae = 0x0000; regionAccess.draeh = 0x0000; if (CSL_edma3HwControl(*hModule,CSL_EDMA3_CMD_DMAREGION_ENABLE, ®ionAccess) != CSL_SOK) [ printf ("Error: EDMA region enable command failedn"); return -3; /* Enable access for all QDMA channels in the SHADOW Region. */ qraeSetup.region = regionNum; qraeSetup.qrae = 0xFF; if (CSL_edma3HwControl(*hModule,CSL_EDMA3_CMD_QDMAREGION_ENABLE, &qraeSetup) != CSL_SOK) [ printf ("Error: EDMA QDMA region enable command failedn"); return -4; /* QDMA Channel Open */ chAttr.regionNum = regionNum; chAttr.chaNum = channelNum; *hChannel = CSL_edma3ChannelOpen(chObj, instNum, &chAttr, &status); if ((*hChannel == NULL) || (status != CSL_SOK)) [ printf ("Error: EDMA channel open failedn"); return -5; /* Map QDMA Channel to the PING Param Block i.e. 1 */ CSL_edma3HwChannelSetupParam (*hChannel, 3); /* Setup the trigger word for the QDMA Channel. */ CSL_edma3HwChannelSetupTriggerWord(*hChannel, 7); /* PING Parameter Entry Handle */ *hParamPing = CSL_edma3GetParamHandle(*hChannel, 3, &status); if (*hParamPing == NULL) [ printf ("Error: EDMA get handle for param entry 1 failedn"); return -6; /* Setup param entry */ myParamSetup->option = CSL_EDMA3_OPT_MAKE(CSL_EDMA3_ITCCH_DIS, CSL_EDMA3_TCCH_DIS, CSL_EDMA3_ITCINT_DIS, CSL_EDMA3_TCINT_EN, 0,CSL_EDMA3_TCC_NORMAL, CSL_EDMA3_FIFOWIDTH_NONE, CSL_EDMA3_STATIC_EN, CSL_EDMA3_SYNC_AB, CSL_EDMA3_ADDRMODE_INCR, CSL_EDMA3_ADDRMODE_INCR); //myParamSetup->option = 0x0010000C; myParamSetup->srcAddr = 0x70000000; myParamSetup->aCntbCnt = 0x024402D0; myParamSetup->dstAddr = 0x81000000; myParamSetup->srcDstBidx = 0x02D002D0;//high 16bit is for dest myParamSetup->linkBcntrld = 0x0000ffff; myParamSetup->srcDstCidx = 0x0; myParamSetup->cCnt = 0x00000001; /* Setup PING to operate with this PARAM Entry. */ if (CSL_edma3ParamSetup(*hParamPing, myParamSetup) != CSL_SOK) [ printf ("Error: EDMA param setup failedn"); return -7; /* Enable Channel */ if (CSL_edma3HwChannelControl(*hChannel,CSL_EDMA3_CMD_CHANNEL_ENABLE, NULL) != CSL_SOK) [ printf ("Error: EDMA channel enable command failedn"); return -8; return 0; Main 函数调用: i=QdmaInit ( 1, //使用EDMA CC 1 64, //使用QDMA channel0 CSL_EDMA3_REGION_0, CoreId, ®ionIntr, &hModule, &edmaObj, &hParamPing, &chObj, &hChannel, &myParamSetup ); Hwi内调用: if (CSL_edma3ParamWriteWord(hParamPing,3,0x81000000+0x65F40*CountIn) != CSL_SOK) [ printf ("Error: EDMA param write word failedn"); if (CSL_edma3ParamWriteWord(hParamPing,7,2) != CSL_SOK) [ printf ("Error: EDMA param write word failedn"); /* Poll IPR bit */ regionIntr.region = CSL_EDMA3_REGION_0; do [ CSL_edma3GetHwStatus(hModule,CSL_EDMA3_QUERY_INTRPEND,®ionIntr); ] while (!(regionIntr.intr & 0x1)); /* Clear pending interrupt */ if (CSL_edma3HwControl(hModule,CSL_EDMA3_CMD_INTRPEND_CLEAR, ®ionIntr) != CSL_SOK) [ printf ("Error: EDMA clear interrupt pend command failedn"); 程序最后一直卡在那个do while循环里了 通过观察0x02722000发现IPR都是0 但是观察0x02721068发现IPR正确置位了,我试过在调用的时候 将CSL_EDMA3_REGION_0 改为 CSL_EDMA3_REGION_GLOBAL 发现程序就正常运行了 同时观察Region0 的 QDMA event enable寄存器 发现是 0x00000001 说明region0的 QDMA channel0 也正确打开了 但是为什么IPR就是不能置位 是还有什么地方没有配置吗? |
|
相关推荐
2 个讨论
|
|
zbb9612 发表于 2018-8-3 07:55 /* Enable access for all QDMA channels in the SHADOW Region. */ qraeSetup.region = regionNum; qraeSetup.qrae = 0xFF; if (CSL_edma3HwControl(*hModule,CSL_EDMA3_CMD_QDMAREGION_ENABLE, &qraeSetup) != CSL_SOK) [ printf ("Error: EDMA QDMA region enable command failedn"); return -4; ] 程序里这句就是置位QREA了吧? 我也确认了0x0380 也确实就是0xFF 不过没有置高 不过现在我使用DMA 并且使用手动置位的方式实现了同样的功能 现在程序运转正常了! |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
707 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
617 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1079 浏览 1 评论
773 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
537 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
183浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
145浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
10浏览 13评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
137浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
130浏览 12评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-3 02:18 , Processed in 1.162592 second(s), Total 66, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号