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.
修改SYSBIOS官方例程UPP_B_TO_A,想修改成单通道接收,但不再进入DMA中断了。下面是我配置和中断服务程序部分与task中的代码,能告诉我哪里配置错了嘛
/* 中断服务函数 */
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_TWO
| uPP_ALL_RECEIVE);
//通道DLB配置 ZM APPEND
uPPDLBConfig(SOC_UPP_0_REGS, UPP_UPDLB_BA);
// 引脚配置
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 HWIInit(Void)
{
// 动态创建硬件中断
Hwi_Params hwiParams;
Hwi_Params_init(&hwiParams);
hwiParams.eventId = SYS_INT_UPP_INT;
hwiParams.enableInt = true;
Hwi_create(C674X_MASK_INT4, uPPIsr, &hwiParams, NULL);
}
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 A 通道启动接收
uPPDMATransfer(SOC_UPP_0_REGS, uPP_DMA_CHI, &transposeParA);
// // 等待 uPP 传输完毕
while (upp_interrupt_count < target_int_count)
{
}
}
}