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

📄 8016.c

📁 SmartARM2400系列开发板全套资料
💻 C
字号:
void MiniISA_Task (void *pdata)
{
	uint8        cmd[4];
	uint8        err;
    uint8        ucSemErr;
    static  uint32 MiniISA_Err = 0;
    uint32       i;
    ISA_CFG_DATA icdCfgData = {0};
	uint8 relay;
	
    pdata = pdata;
	
    icdCfgData.ucIrqEn   = 1;                                           /*  全局中断使能                */   
    icdCfgData.ucIrqPrio = 7;                                           /*  中断优先级为7               */
    icdCfgData.ucEINTn   = 1;                                           /*  使用CPU外部中断号(0 ~ 3)    */
    icdCfgData.ucIrq0En  = 1;                                           /*  中断通道0使能               */
    icdCfgData.ucIrq1En  = 0;                                           /*  中断通道1禁止               */
    icdCfgData.ucIrq2En  = 0;                                           /*  中断通道2禁止               */
    icdCfgData.ucIrq3En  = 0;                                           /*  中断通道3禁止               */                                         
    if (OPERATE_FAIL == MiniISAInit(MINIISA0, NULL, &icdCfgData)) {
        while (1);
    }
	OSTimeDly(OS_TICKS_PER_SEC / 3);                                    /*  等待8016A复位完成           */

	while (1) {                                                          
        OSSemPend(MiniISASem,0,&ucSemErr);                              /*  等待信号量                  */
       
        cmd[0] = 0x40;
        cmd[1] = 0;
        cmd[2] = 0x40;
        WriteCmd8016A(cmd, BoardB0);                                    /*  设置IDI0 计数初始为100      */
        cmd[0] = 0x41;
        cmd[1] = 0;
        cmd[2] = 0x48;
        WriteCmd8016A(cmd, BoardB0);                                    /*  设置IDI0 计数匹配值101      */
        cmd[0] = 0xff;
        cmd[1] = 0;
        cmd[2] = 0x2B;
        WriteCmd8016A(cmd, BoardB0);                                    /*  使能IDI0 计数器匹配中断     */
        cmd[0] = 1;
        cmd[1] = 0;
        cmd[2] = 0x28;
        WriteCmd8016A(cmd, BoardB0);                                    /*  使能IDI0 加法计数功能       */
        
        /*
         *  中断产生条件,IDI0 输入7 个脉冲产生中断 
         */
        Wreg8016A(M8016_INT_EN, BoardB0, INTCTR);                       /*  中断总使能                  */

        cmd[2] = 0x01;                                                  /*  禁能继电器命令              */
        relay = 0x01;	
    	for (i=0; i<10; i++) {                                          /*  继电器输出测试              */
    		cmd[0] = relay;
    		Write8016A(cmd, BoardB0);
    		relay <<= 1;
    		OSTimeDly(OS_TICKS_PER_SEC / 2);                 			
    	}
    	for (i = 0; i < 0x10; i++) {                                    /*  输入测试                    */
    		cmd[0] = Rreg8016A(BoardB0, IMB3);                      /*  读取输入状态                */
    		Write8016A(cmd, BoardB0);
    		MiniISAIrqPend(ISA_IRQ_CHN0, 3, &err);
            if (err == OS_NO_ERR) {
    	        Int8016A();                                             /*  8016A中断处理函数           */
    	        MiniISA_Err ++;
    	        break;
            }
    	}
       
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -