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; }
/* ** 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)); }