DSP论坛
直播中

陈俊

5年用户 9经验值
擅长:嵌入式技术
私信 关注

C6748,请问如何修改SYSBIOS的UPP_B_TO_A官方例程,变成单通道接收?

修改官方例程后,不再进入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);
}


已退回5积分

更多回帖

发帖
×
20
完善资料,
赚取积分