⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mupdd.c

📁 freescale i.mx31 BSP CE5.0全部源码
💻 C
📖 第 1 页 / 共 5 页
字号:
    // 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 + -