指针的应用(zlg)

INT32S zyIsrSet (unsigned int uiChannel, unsigned long ulFunction, unsigned int uiPrio)

{

    unsigned int uiTmp1, uiTmp2, uiTmp3;

 

    if (uiChannel > MAX_VICS) {

        return -ZY_NOT_OK;

    }

 

    zyIrqDisable();

 

    if (uiChannel >= 16) {

        uiTmp3 = uiChannel - 16;

        uiTmp1 = uiTmp3 / 32;

        uiTmp2 = uiTmp3 % 32;

 

        ((INT32U *)0xE000E100)[uiTmp1] = 1ul << uiTmp2;    //这里((INT32U *)0xE000E100)[uiTmp1]  好好理解

        ((INT8U *)0xE000E400)[uiTmp3]  = uiPrio;

    } else {

        switch (uiChannel) {

 

        case MMI:

            SHCSR = SHCSR | (1 << 16);

            break;

 

        case BFI:

            SHCSR = SHCSR | (1 << 17);

            break;

 

        case UFI:

            SHCSR = SHCSR | (1 << 18);

            break;

 

        default:

            break;

        }

        if (uiChannel >= MMI) {

            uiTmp3 = uiChannel - MMI;

            ((INT8U *)0xE000ED18)[uiTmp3]  = uiPrio;

        }

    }

 

#if VECTOR_TABLE_IN_FLASH == 0

    ((unsigned long *)VTOR)[uiChannel] = ulFunction;

#endif

    zyIrqEnable();

    return ZY_OK;

}

你可能感兴趣的:(指针的应用(zlg))