完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
修改官方例程后,不再进入DMA中断。
这是代码,请问哪里配置错啦? /* 中断服务函数 */ Void uPPIsr(UArg arg) { unsigned int intr_dmai_status; // 取得 DMA 中断状态 intr_dmai_status = uPPIntStatus(SOC_UPP_0_REGS, uPP_DMA_CHI); while(intr_dmai_status != 0 )//|| intr_dmaq_status != 0) { if (intr_dmai_status & uPP_INT_EOW) { uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_EOW); upp_interrupt_count++; } // 判断是否全部事情被处理完毕 intr_dmai_status = uPPIntStatus(SOC_UPP_0_REGS, uPP_DMA_CHI); } // 通知 CPU uPP 中断处理完毕以便后续事件可以产生 uPPEndOfInt(SOC_UPP_0_REGS); } /* uPP 初始化 */ void OmaplFPGAuPPSetup(void) { // 外设使能 PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UPP, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); // 引脚复用配置 uPPPinMuxSetup(uPP_CHA_8BIT); // uPP复位 uPPReset(SOC_UPP_0_REGS); // 数据格式配置 uPPDataFmtConfig(SOC_UPP_0_REGS, uPP_CHA, uPP_DataPackingFmt_LJZE | uPP_DataPacking_FULL | uPP_InterfaceWidth_8BIT | uPP_DataRate_SINGLE); // 通道配置 uPPChannelConfig(SOC_UPP_0_REGS, uPP_DDRDEMUX_DISABLE | uPP_SDRTXIL_DISABLE | uPP_CHN_ONE | uPP_ALL_RECEIVE); // 引脚配置 uPPPinConfig(SOC_UPP_0_REGS, uPP_CHA, uPP_PIN_TRIS | uPP_PIN_ENABLE | uPP_PIN_WAIT | uPP_PIN_START); // 中断使能 uPPIntEnable(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_EOW); // uPP使能 uPPEnable(SOC_UPP_0_REGS); } /****************************************************************************/ /* */ /* 初始化 */ /* */ /****************************************************************************/ Void PeriphInit(Void) { OmaplFpgauPPSetup(); } Void HWIInit(Void) { // 动态创建硬件中断 Hwi_Params hwiParams; Hwi_Params_init(&hwiParams); hwiParams.eventid = SYS_INT_UPP_INT; hwiParams.enableInt = true; Hwi_create(C674X_MASK_INT6, uPPIsr, &hwiParams, NULL); } Void ThreadInit(Void) { // 硬件中断 HWIInit(); } /****************************************************************************/ /* */ /* 缓存配置 */ /* */ /****************************************************************************/ void CacheInit() { Cache_Size cacheSize; cacheSize.l1pSize = Cache_L1Size_32K; cacheSize.l1dSize =Cache_L1Size_32K; cacheSize.l2Size = Cache_L2Size_256K; Cache_setSize(&cacheSize); } Void taskMain(UArg arg1, UArg arg2) { int target_int_count = 1; // A 通道参数 接收 transposeParA.WindowAddress = (unsigned int *)((int)upp_buffer_a); transposeParA.LineCount = upp_line_count; transposeParA.ByteCount = (upp_line_size*sizeof(unsigned short)); transposeParA.LineOffsetAddress = (upp_line_offset*sizeof(unsigned short)); while(1) { upp_interrupt_count = 0; Cache_wb((void *)upp_buffer_a, sizeof(upp_buffer_a), Cache_Type_ALLD, TRUE); // uPP A 通道启动接收 uPPDMATransfer(SOC_UPP_0_REGS, uPP_DMA_CHI, &transposeParA); // // 等待 uPP 传输完毕 while (upp_interrupt_count < target_int_count) { } Cache_inv((void *)upp_buffer_a, sizeof(upp_buffer_a), Cache_Type_ALLD, TRUE); } } /****************************************************************************/ /* */ /* 主函数 */ /* */ /****************************************************************************/ Int main() { Task_Handle task; Error_Block eb; Task_Params taskParams; // 外设初始化 PeriphInit(); // 线程初始化 ThreadInit(); // 初始化参数 Error_init(&eb); // 创建主任务 Task_Params_init(&taskParams); taskParams.priority = 8; taskParams.stackSize = 8192; task = Task_create(taskMain, &taskParams, &eb); if (task == NULL) { System_printf("Task create failed!n"); BIOS_exit(0); } // 使能中断 Hwi_enable(); // 启动 SYS/BIOS 系统 BIOS_start(); return(0); } |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于 DSP5509 进行数字图像处理中 Sobel 算子边缘检测的硬件连接电路图
3280 浏览 0 评论
800 浏览 0 评论
普中科技F28335开发板中,如何使用aic23播放由代码生成的正弦波
3715 浏览 0 评论
4469 浏览 1 评论
1386 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 10:16 , Processed in 0.628353 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号