📄 mupdd.c
字号:
// completing all pending activities by checking the status register.
// Wait for pending General Purpose Interrupts to be serviced
msrFields = MUStatusRegField_MGIP0 | MUStatusRegField_MGIP1 |
MUStatusRegField_MGIP2 | MUStatusRegField_MGIP3;
while(INREG32(&g_pMU->MCR) & msrFields)
{
Sleep(1);
}
EnterCriticalSection(&g_csMULock);
// Disable all interrupts and clear flags
mcrFields = MUCtrlRegField_MGIE0 | MUCtrlRegField_MGIE1 | MUCtrlRegField_MGIE2 |
MUCtrlRegField_MGIE3 | MUCtrlRegField_MTIE0 | MUCtrlRegField_MTIE1 |
MUCtrlRegField_MTIE2 | MUCtrlRegField_MTIE3 | MUCtrlRegField_MRIE0 |
MUCtrlRegField_MRIE1 | MUCtrlRegField_MRIE2 | MUCtrlRegField_MRIE3 |
MUCtrlRegField_DRDIE | MUCtrlRegField_MDF2 | MUCtrlRegField_MDF1 |
MUCtrlRegField_MDF0;
OUTREG32(&g_pMU->MCR, INREG32(&g_pMU->MCR) & ~mcrFields);
LeaveCriticalSection(&g_csMULock);
MU_FUNCTION_EXIT();
}
//------------------------------------------------------------------------------
//
// Function: MUResetAllRegs
//
// Set MU registers to initial state.
//
// Parameters:
// None.
//
// Returns:
// None
//
//------------------------------------------------------------------------------
void MUResetAllRegs(void)
{
MU_FUNCTION_ENTRY();
EnterCriticalSection(&g_csMULock);
// Issue reset
INSREG32BF(&g_pMU->MCR, MU_MCR_MMUR, MU_MCR_MMUR_ASSERT_RESET);
LeaveCriticalSection(&g_csMULock);
MU_FUNCTION_EXIT();
}
//------------------------------------------------------------------------------
//
// Function: MUAssertDSPReset
//
// Hold the DSP in reset until MUDeassertDSPReset is called.
//
// Parameters:
// None.
//
// Returns:
// None
//
//------------------------------------------------------------------------------
void MUAssertDSPReset(void)
{
MU_FUNCTION_ENTRY();
EnterCriticalSection(&g_csMULock);
// Issue reset
INSREG32BF(&g_pMU->MCR, MU_MCR_DHR, MU_MCR_DHR_ASSERT_RESET);
LeaveCriticalSection(&g_csMULock);
MU_FUNCTION_EXIT();
}
//------------------------------------------------------------------------------
//
// Function: MUDeassertDSPReset
//
// Release the DSP from reset.
//
// Parameters:
// None.
//
// Returns:
// None
//
//------------------------------------------------------------------------------
void MUDeassertDSPReset(void)
{
MU_FUNCTION_ENTRY();
EnterCriticalSection(&g_csMULock);
// Deassert reset
INSREG32BF(&g_pMU->MCR, MU_MCR_DHR, MU_MCR_DHR_DEASSERT_RESET);
LeaveCriticalSection(&g_csMULock);
MU_FUNCTION_EXIT();
}
//------------------------------------------------------------------------------
//
// Function: MUWaitForReset
//
// Wait for the DSP side to come out of reset.
//
// Parameters:
// None.
//
// Returns:
// None
//
//------------------------------------------------------------------------------
void MUWaitForReset(void)
{
MU_FUNCTION_ENTRY();
EnterCriticalSection(&g_csMULock);
// Wait for DSP-side to complete reset
while (EXTREG32BF(&g_pMU->MSR, MU_MSR_DRS)){}
LeaveCriticalSection(&g_csMULock);
MU_FUNCTION_EXIT();
}
//------------------------------------------------------------------------------
//
// Function: MUEnableIntrs
//
// This function enables an MU interrupt.
//
// Parameters:
// muInterrupt
// [in] Interrupt to enable.
//
// Returns:
// None
//
//------------------------------------------------------------------------------
void MUEnableIntrs(MUIntrType_c muInterrupt)
{
MU_FUNCTION_ENTRY();
DEBUGMSG (ZONE_INFO, (TEXT("%s: muInterrupt value: 0x%x\r\n"),
__WFUNCTION__, muInterrupt));
// Check to see if the muInterrupt parameter contains an illegal value.
if ((muInterrupt > NUM_MU_INTERRUPTS - 1) || (muInterrupt < 0))
{
DEBUGMSG (ZONE_INFO, (TEXT("%s: Error. Invalid MUIntrType 0x%x\r\n"),
__WFUNCTION__, muInterrupt));
return;
}
// Only one interrupt may be enabled at a time
switch (muInterrupt)
{
case MUIntrType_Receive0Full:
INSREG32BF(&g_pMU->MCR, MU_MCR_MRIE0, MU_MCR_MRIE0_ENABLE);
break;
case MUIntrType_Receive1Full:
INSREG32BF(&g_pMU->MCR, MU_MCR_MRIE1, MU_MCR_MRIE1_ENABLE);
break;
case MUIntrType_Receive2Full:
INSREG32BF(&g_pMU->MCR, MU_MCR_MRIE2, MU_MCR_MRIE2_ENABLE);
break;
case MUIntrType_Receive3Full:
INSREG32BF(&g_pMU->MCR, MU_MCR_MRIE3, MU_MCR_MRIE3_ENABLE);
break;
case MUIntrType_Transmit0Empty:
INSREG32BF(&g_pMU->MCR, MU_MCR_MTIE0, MU_MCR_MTIE0_ENABLE);
break;
case MUIntrType_Transmit1Empty:
INSREG32BF(&g_pMU->MCR, MU_MCR_MTIE1, MU_MCR_MTIE1_ENABLE);
break;
case MUIntrType_Transmit2Empty:
INSREG32BF(&g_pMU->MCR, MU_MCR_MTIE2, MU_MCR_MTIE2_ENABLE);
break;
case MUIntrType_Transmit3Empty:
INSREG32BF(&g_pMU->MCR, MU_MCR_MTIE3, MU_MCR_MTIE3_ENABLE);
break;
case MUIntrType_GPI0:
INSREG32BF(&g_pMU->MCR, MU_MCR_MGIE0, MU_MCR_MGIE0_ENABLE);
break;
case MUIntrType_GPI1:
INSREG32BF(&g_pMU->MCR, MU_MCR_MGIE1, MU_MCR_MGIE1_ENABLE);
break;
case MUIntrType_GPI2:
INSREG32BF(&g_pMU->MCR, MU_MCR_MGIE2, MU_MCR_MGIE2_ENABLE);
break;
case MUIntrType_GPI3:
INSREG32BF(&g_pMU->MCR, MU_MCR_MGIE3, MU_MCR_MGIE3_ENABLE);
break;
default:
DEBUGMSG (ZONE_ERROR,
(TEXT("%s: Invalid MUIntrType to enable: 0x%x\r\n"),
__WFUNCTION__, muInterrupt));
return;
}
MU_FUNCTION_EXIT();
}
//------------------------------------------------------------------------------
//
// Function: MUDisableIntrs
//
// This function disables an MU interrupt.
//
// Parameters:
// muInterrupt
// [in] Interrupt to enable.
//
// Returns:
// None
//
//------------------------------------------------------------------------------
void MUDisableIntrs(MUIntrType_c muInterrupt)
{
MU_FUNCTION_ENTRY();
DEBUGMSG (ZONE_INFO, (TEXT("%s: muInterrupt value: 0x%x\r\n"),
__WFUNCTION__, muInterrupt));
// Check to see if the muInterrupt parameter contains an illegal value.
if ((muInterrupt > NUM_MU_INTERRUPTS - 1) || (muInterrupt < 0))
{
DEBUGMSG (ZONE_INFO, (TEXT("%s: Error. Invalid MUIntrType 0x%x\r\n"),
__WFUNCTION__, muInterrupt));
return;
}
switch (muInterrupt)
{
case MUIntrType_Receive0Full:
INSREG32BF(&g_pMU->MCR, MU_MCR_MRIE0, MU_MCR_MRIE0_DISABLE);
break;
case MUIntrType_Receive1Full:
INSREG32BF(&g_pMU->MCR, MU_MCR_MRIE1, MU_MCR_MRIE1_DISABLE);
break;
case MUIntrType_Receive2Full:
INSREG32BF(&g_pMU->MCR, MU_MCR_MRIE2, MU_MCR_MRIE2_DISABLE);
break;
case MUIntrType_Receive3Full:
INSREG32BF(&g_pMU->MCR, MU_MCR_MRIE3, MU_MCR_MRIE3_DISABLE);
break;
case MUIntrType_Transmit0Empty:
INSREG32BF(&g_pMU->MCR, MU_MCR_MTIE0, MU_MCR_MTIE0_DISABLE);
break;
case MUIntrType_Transmit1Empty:
INSREG32BF(&g_pMU->MCR, MU_MCR_MTIE1, MU_MCR_MTIE1_DISABLE);
break;
case MUIntrType_Transmit2Empty:
INSREG32BF(&g_pMU->MCR, MU_MCR_MTIE2, MU_MCR_MTIE2_DISABLE);
break;
case MUIntrType_Transmit3Empty:
INSREG32BF(&g_pMU->MCR, MU_MCR_MTIE3, MU_MCR_MTIE3_DISABLE);
break;
case MUIntrType_GPI0:
INSREG32BF(&g_pMU->MCR, MU_MCR_MGIE0, MU_MCR_MGIE0_DISABLE);
break;
case MUIntrType_GPI1:
INSREG32BF(&g_pMU->MCR, MU_MCR_MGIE1, MU_MCR_MGIE1_DISABLE);
break;
case MUIntrType_GPI2:
INSREG32BF(&g_pMU->MCR, MU_MCR_MGIE2, MU_MCR_MGIE2_DISABLE);
break;
case MUIntrType_GPI3:
INSREG32BF(&g_pMU->MCR, MU_MCR_MGIE3, MU_MCR_MGIE3_DISABLE);
break;
default:
DEBUGMSG (ZONE_ERROR,
(TEXT("%s: Invalid MUIntrType to disable: 0x%x\r\n"),
__WFUNCTION__, muInterrupt));
return;
}
MU_FUNCTION_EXIT();
}
//------------------------------------------------------------------------------
//
// Function: MUReadIntrThread
//
// This function is the IST thread for read operations.
//
// Parameters:
// None
//
// Returns:
// None
//
//------------------------------------------------------------------------------
void MUReadIntrThread(void)
{
MU_FUNCTION_ENTRY();
MUReadISRLoop(INFINITE);
MU_FUNCTION_ENTRY();
return;
}
//------------------------------------------------------------------------------
//
// Function: MUWriteIntrThread
//
// This function is the IST thread for write operations.
//
// Parameters:
// None
//
// Returns:
// None
//
//------------------------------------------------------------------------------
void MUWriteIntrThread(void)
{
MU_FUNCTION_ENTRY();
MUWriteISRLoop(INFINITE);
MU_FUNCTION_ENTRY();
return;
}
//------------------------------------------------------------------------------
//
// Function: MUGPI3IntrThread
//
// This function is the IST thread for General Purpose Interrupt 3.
//
// Parameters:
// None
//
// Returns:
// None
//
//------------------------------------------------------------------------------
void MUGPI3IntrThread(void)
{
MU_FUNCTION_ENTRY();
MUGPI3ISRLoop(INFINITE);
MU_FUNCTION_ENTRY();
return;
}
//------------------------------------------------------------------------------
//
// Function: MUGPI2IntrThread
//
// This function is the IST thread for General Purpose Interrupt 2.
//
// Parameters:
// None
//
// Returns:
// None
//
//------------------------------------------------------------------------------
void MUGPI2IntrThread(void)
{
MU_FUNCTION_ENTRY();
MUGPI2ISRLoop(INFINITE);
MU_FUNCTION_ENTRY();
return;
}
//------------------------------------------------------------------------------
//
// Function: MUGPI1IntrThread
//
// This function is the IST thread for General Purpose Interrupt 1.
//
// Parameters:
// None
//
// Returns:
// None
//
//------------------------------------------------------------------------------
void MUGPI1IntrThread(void)
{
MU_FUNCTION_ENTRY();
MUGPI1ISRLoop(INFINITE);
MU_FUNCTION_ENTRY();
return;
}
//------------------------------------------------------------------------------
//
// Function: MUGPI0IntrThread
//
// This function is the IST thread for General Purpose Interrupt 0.
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -