예제 #1
0
// =============================================================================
// 函数功能:看门狗模块的初始化
// 输入参数:
// 输出参数:
// 返回值  :1成功  0失败
// 说明    :创建看门狗硬件对应的软看门狗。注册看门狗异常信息解析器
// =============================================================================
ptu32_t ModuleInstall_Wdt(ptu32_t para)
{
    bool_t  result_bool;
    u16     evttid;

    g_ptWdtPool = M_Malloc(gc_u32CfgWdtLimit * sizeof(tagWdt),0);
    if(g_ptWdtPool == NULL)
        return 0;
    ptWdtPool = Mb_CreatePool(g_ptWdtPool,gc_u32CfgWdtLimit,sizeof(tagWdt),0,0,"wdt pool");
    //init the queue
    ptWdtHead = NULL;
    ptWdtTail = NULL;
    ptWdtHard = NULL;

    //create the msg box for the api to snd msg to the wdt service task
    ptWdtMsgBox = MsgQ_Create(CN_WDTMSG_LIMIT,sizeof(tagWdtMsg),CN_MSGQ_TYPE_FIFO);

    //create the main service
    evttid = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_WDT,0,0,Wdt_Service,
                                NULL,0x1000,"wdt service");
    if(evttid == CN_EVTT_ID_INVALID)
        return 0;
    if( Djy_EventPop(evttid,NULL,0,0,0,0) == CN_EVENT_ID_INVALID)
    {
        printk("WDT MODULE:POP SERVICE FAILED!\n\r");
        Djy_EvttUnregist(evttid);
        return 0;
    }

    //create the soft wdt match the hard wdt
    struct tagWdtHalChipInfo hardpara;
    result_bool = WdtHal_GetChipPara(&hardpara);
    if(true == result_bool)//存在硬件看门狗,则创建硬件看门狗
    {
        fnWdtHardFeed = hardpara.wdtchip_feed;
        ptWdtHard = Wdt_Create(hardpara.wdtchip_name,\
                               hardpara.wdtchip_cycle,\
                               __Wdt_HardWdtYipHook,\
                               EN_EXP_DEAL_IGNORE, NULL);
    }
//todo:此处有警告
    extern bool_t Exp_RegisterThrowinfoDecoder(fnExp_ThrowinfoDecoderModule decoder,const char *name);
    if(false ==Exp_RegisterThrowinfoDecoder(__Wdt_WdtExpInfoDecoder,\
                                            CN_WDT_EXPDECODERNAME))
    {
        printk("WDT MODULE: Register Wdt Exp Decoder Failed!\n\r");
    }

    printk("WDT MODULE:Init end ...\n\r");
    return 1;
}
예제 #2
0
파일: cpu_peri_can.c 프로젝트: djyos/djyos
//----初始化CAN配置参数---------------------------------------------------------
//功能: 初始化CAN配置参数
//参数: pCanPara,CAN控制器配置参数结构体指针
//返回: 成功初始化则返回true,否则则返回false.
//-----------------------------------------------------------------------------
bool_t CAN_Main(void)
{
	uint16_t evtt;
	uint8_t i;
	bool_t ret;
	CanFilterConfPara *pFilterConfPara;
	pFilterConfPara=malloc(sizeof(CanFilterConfPara));
	if(pFilterConfPara==NULL)
	{
		printf("Can Init failed.\r\n");
		return false;
	}
	pFilterConfPara->FilterNumber=0;
	pFilterConfPara->FilterMode=CAN_FILTERMODE_IDMASK;
	pFilterConfPara->FilterScale=CAN_FILTERSCALE_32BIT;
	pFilterConfPara->FilterIdHigh=0x0000;
	pFilterConfPara->FilterIdLow=0x0000;
	pFilterConfPara->FilterMaskIdHigh=0x0000;
	pFilterConfPara->FilterMaskIdLow=0x0000;
	pFilterConfPara->FilterFIFOAssignment=0;
	pFilterConfPara->FilterActivation=1;
	pFilterConfPara->BankNumber=14;

	for(i=0;i<CN_CAN_NUM;i++)
	{
		ret=CAN_Hard_Init(i,125,pFilterConfPara);
		if(!ret)
		{
			printf("Can Init failed.\r\n");
			return false;
		}
	}
	CAN_Shell_Module_Install();
	evtt = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_RRS,0,0,__Can_Monitor,
			  CAN_MonitorStack,sizeof(CAN_MonitorStack),"CAN Monitor function");
    if(evtt!=CN_EVTT_ID_INVALID)
    {
	   Djy_EventPop(evtt,NULL,0,NULL,0,0);
    }
    else
    {
	   Djy_EvttUnregist(evtt);
    }

    printf("CAN install OK.\r\n");
    return true;
}