|  | 
5#
 
 
 楼主|
发表于 2016-7-8 09:21:38
|
只看该作者 
| 本帖最后由 sss4550988 于 2016-7-8 09:25 编辑 
 
 /****************************************************************************/
 /*                                                                          */
 /*              中断服务函数                                                */
 /*                                                                          */
 /****************************************************************************/
 void uPPIsr(void) {
 unsigned int intr_dmai_status, intr_dmaq_status;
 int i;
 /*        if (measureflag == 0) {
 tAfter = _itoll(TSCH, TSCL);
 tOverhead = tAfter - tBefore;
 printf("-upp trans Cycle is %lld \n", tOverhead);
 printf("-upp trans Time is %lld us (CPU Frequency:456MHz)\n",
 tOverhead / 456);
 //measureflag = 1;
 }*/
 // 取得 DMA 中断状态
 intr_dmai_status = uPPIntStatus(SOC_UPP_0_REGS, uPP_DMA_CHI);
 intr_dmaq_status = uPPIntStatus(SOC_UPP_0_REGS, uPP_DMA_CHQ);
 IntEventClear(SYS_INT_UPP_INT);
 
 while (intr_dmai_status != 0 || intr_dmaq_status != 0) {
 if (intr_dmai_status & uPP_INT_EOL) {
 uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_EOL);
 }
 
 // 窗口接收完成
 if (intr_dmai_status & uPP_INT_EOW) {
 uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_EOW);
 GPIOBankIntEnable(SOC_GPIO_0_REGS, 4);
 //        CacheInv ((unsigned int)receive_buffer_a, sizeof(receive_buffer_a));
 GPIOPinWrite(SOC_GPIO_0_REGS, 94, GPIO_PIN_HIGH);
 }
 
 if (intr_dmai_status & uPP_INT_ERR) {
 uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_ERR);
 //upp_error_countA++;
 
 uPPReset(SOC_UPP_0_REGS);
 }
 
 if (intr_dmai_status & uPP_INT_UOR) {
 uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_UOR);
 //upp_error_countA++;
 uPPReset(SOC_UPP_0_REGS);
 }
 
 if (intr_dmai_status & uPP_INT_DPE) {
 uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_DPE);
 //upp_error_countA++;
 uPPReset(SOC_UPP_0_REGS);
 }
 
 if (intr_dmaq_status & uPP_INT_EOL) {
 uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHQ, uPP_INT_EOL);
 }
 
 if (intr_dmaq_status & uPP_INT_EOW) {
 uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHQ, uPP_INT_EOW);
 //receiveOK_b = 1;
 }
 
 if (intr_dmaq_status & uPP_INT_ERR) {
 uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHQ, uPP_INT_ERR);
 //upp_error_countB++;
 uPPReset(SOC_UPP_0_REGS);
 }
 
 if (intr_dmaq_status & uPP_INT_UOR) {
 uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHQ, uPP_INT_UOR);
 //upp_error_countB++;
 uPPReset(SOC_UPP_0_REGS);
 }
 
 if (intr_dmaq_status & uPP_INT_DPE) {
 uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHQ, uPP_INT_DPE);
 //upp_error_countB++;
 uPPReset(SOC_UPP_0_REGS);
 }
 
 // uPP 中断将多个事件组合为同一中断源
 // 判断是否全部事情被处理完毕
 intr_dmai_status = uPPIntStatus(SOC_UPP_0_REGS, uPP_DMA_CHI);
 intr_dmaq_status = uPPIntStatus(SOC_UPP_0_REGS, uPP_DMA_CHQ);
 }
 
 // 通知 CPU uPP 中断处理完毕以便后续事件可以产生
 uPPEndOfInt(SOC_UPP_0_REGS);
 //GPIOBankIntEnable(SOC_GPIO_0_REGS, 5);
 }
 
 | 
 |