예제 #1
0
파일: qifa.c 프로젝트: httpftpli/appdriver
bool qifaInit(TCHAR *path) {
    if (__qifainit(&qifaSys, path) == false) {
        return false;
    }
    memset(qifaSys.QiFa_Reg_Table, 0, sizeof qifaSys.QiFa_Reg_Table);
    for (uint32 i = 0; i < lenthof(qifaSys.QiFa_Reg); i++) {

        if (qifaSys.QiFa_Reg[i] == NULL || qifaSys.QiFa_Reg[i]->flag != QIFA_FLAG) {
            continue;
        }
        uint32 board = qifaSys.QiFa_Reg[i]->board_id;
        uint32 iqifa = qifaSys.QiFa_Reg[i]->xuhao;
        if (board >= qifaSys.numofboard || iqifa >= qifaSys.numperboard) {
            return false;
        }
        qifaSys.QiFa_Reg_Table[board][iqifa] = qifaSys.QiFa_Reg[i];
    }

    ringBufInit(&qifaringbuf, qifavalbuf, sizeof(QIFA_VAL), lenthof(qifavalbuf), 1);

#if QIFA_USE_MAILBOX==1
    mailboxInit(MODULE_ID_MB);
    uint32 mbaddr = modulelist[MODULE_ID_MB].baseAddr;
    MBenableNewMsgInt(mbaddr, 0, 0);
    mbRegistHandler(0, qifa_mailbox_handler);
#endif
    //////////////////////////////////////

    return true;
}
예제 #2
0
/*
** Initialize the Mailbox
**  - Enable clock and reset mailbox
*/
void initializeMailbox(unsigned int baseAdd)
{
    /* Enable Mailbox clock */
    enableModuleClock(CLK_MAILBOX0);

    /* Reset Mailbox */
    MBresetMailbox(baseAdd);

    /* Clear new message status */
    MBclrNewMsgStatus(baseAdd, MAILBOX_USER_CM3WKUP, MAILBOX_QUEUE_0);

    /* Enable new message interrupt */
    MBenableNewMsgInt(baseAdd, MAILBOX_USER_CM3WKUP, MAILBOX_QUEUE_0);

    /* Configure idle mode */
    MBconfigIdleMode(MAILBOX_0_BASE_ADDR,
                     (MAILBOX_SYSCONFIG_SIDLEMODE_FORCEIDLE <<
                                            MAILBOX_SYSCONFIG_SIDLEMODE_SHIFT));
}