| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720 | #include <rtthread.h>#include <rtdevice.h>#include <board.h>#include "deviceinit.h" /*  * 设备初始化 *  *  *//**************************************** *        Device_Init       *函数功能 : 设备初始化 *参数描述 : 无 *返回值   : 无 ****************************************/void Device_Init(void){	LED_V14_Init();	XS7_Init();	XS22_Init();	XS15_Init();	XS30_Init();	XS20_Init();	XS21_Init();	XS17_Init();	XS18_Init();	XS11_Init();	XS14_Init();	XS16_Init();		XS12_Init();	XS13_Init();		creat_all_sem();	//创建信号量	Uartx_Config();		//查找串口设备并初始化	Spix_Config();		//查找spi设备并初始化	Canx_Config();		//查找can设备并初始化	Eth_Config();		//以太网初始化}/**************************************** *        DO_Init       *函数功能 :  *参数描述 : 无 *返回值   : 无 ****************************************/void LED_V14_Init(void){	/* 板载LED */    rt_pin_mode(LED_V14_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(LED_V14_PIN, PIN_HIGH);	}void XS7_Init(void){	/* 指示灯LED */	rt_pin_mode (XS7_1_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS7_1_PIN, PIN_LOW);	rt_pin_mode (XS7_2_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS7_2_PIN, PIN_LOW);	rt_pin_mode (XS7_3_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS7_3_PIN, PIN_LOW);	rt_pin_mode (XS7_5_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS7_5_PIN, PIN_LOW);	rt_pin_mode (XS7_6_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS7_6_PIN, PIN_LOW);	rt_pin_mode (XS7_7_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS7_7_PIN, PIN_LOW);	}void XS22_Init(void){	/* 指示灯LED */	rt_pin_mode (XS22_1_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS22_1_PIN, PIN_LOW);	rt_pin_mode (XS22_2_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS22_2_PIN, PIN_LOW);	}void XS15_Init(void){	rt_pin_mode(XS15_2_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS15_4_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS15_6_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS15_8_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS15_10_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS15_12_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入}void XS30_Init(void){	rt_pin_mode(XS30_3_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS30_4_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS30_5_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS30_6_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS30_7_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS30_8_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS30_9_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS30_10_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS30_11_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS30_12_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS30_13_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入}void XS20_Init(void){	rt_pin_mode(XS20_2_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS20_3_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS20_4_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS20_5_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入		rt_pin_mode (XS20_6_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS20_6_PIN, PIN_LOW);	rt_pin_mode (XS20_7_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS20_7_PIN, PIN_LOW);	rt_pin_mode (XS20_8_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS20_8_PIN, PIN_LOW);	rt_pin_mode (XS20_9_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS20_9_PIN, PIN_LOW);}void XS21_Init(void){	rt_pin_mode(XS21_2_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS21_3_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS21_4_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS21_5_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入		rt_pin_mode (XS21_6_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS21_6_PIN, PIN_LOW);	rt_pin_mode (XS21_7_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS21_7_PIN, PIN_LOW);	rt_pin_mode (XS21_8_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS21_8_PIN, PIN_LOW);	rt_pin_mode (XS21_9_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS21_9_PIN, PIN_LOW);}void XS17_Init(void){	rt_pin_mode(XS17_2_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS17_3_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS17_4_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS17_5_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入		rt_pin_mode (XS17_6_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS17_6_PIN, PIN_LOW);	rt_pin_mode (XS17_7_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS17_7_PIN, PIN_LOW);	rt_pin_mode (XS17_8_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS17_8_PIN, PIN_LOW);	rt_pin_mode (XS17_9_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS17_9_PIN, PIN_LOW);}void XS18_Init(void){	rt_pin_mode(XS18_2_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS18_3_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS18_4_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS18_5_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入		rt_pin_mode (XS18_6_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS18_6_PIN, PIN_LOW);	rt_pin_mode (XS18_7_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS18_7_PIN, PIN_LOW);	rt_pin_mode (XS18_8_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS18_8_PIN, PIN_LOW);	rt_pin_mode (XS18_9_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS18_9_PIN, PIN_LOW);}void XS11_Init(void){	rt_pin_mode(XS11_5_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS11_6_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS11_11_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS11_12_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS11_17_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS11_18_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入}void XS14_Init(void){	rt_pin_mode(XS14_5_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS14_6_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS14_11_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	rt_pin_mode(XS14_12_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入	}void XS16_Init(void){	rt_pin_mode (XS16_1_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS16_1_PIN, PIN_LOW);	rt_pin_mode (XS16_3_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS16_3_PIN, PIN_LOW);	rt_pin_mode (XS16_5_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS16_5_PIN, PIN_LOW);	rt_pin_mode (XS16_7_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS16_7_PIN, PIN_LOW);	rt_pin_mode (XS16_9_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS16_9_PIN, PIN_LOW);	rt_pin_mode (XS16_11_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS16_11_PIN, PIN_LOW);	rt_pin_mode (XS16_13_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS16_13_PIN, PIN_LOW);	rt_pin_mode (XS16_15_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS16_15_PIN, PIN_LOW);	rt_pin_mode (XS16_17_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS16_17_PIN, PIN_LOW);	rt_pin_mode (XS16_19_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS16_19_PIN, PIN_LOW);		}void XS12_Init(void){	rt_pin_mode (XS12_1_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS12_1_PIN, PIN_LOW);	rt_pin_mode (XS12_2_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS12_2_PIN, PIN_LOW);	rt_pin_mode (XS12_3_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS12_3_PIN, PIN_LOW);	rt_pin_mode (XS12_4_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS12_4_PIN, PIN_LOW);		rt_pin_mode(XS12_5_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入}void XS13_Init(void){	rt_pin_mode (XS13_1_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS13_1_PIN, PIN_LOW);	rt_pin_mode (XS13_2_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS13_2_PIN, PIN_LOW);	rt_pin_mode (XS13_3_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS13_3_PIN, PIN_LOW);	rt_pin_mode (XS13_4_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(XS13_4_PIN, PIN_LOW);		rt_pin_mode(XS13_5_PIN, PIN_MODE_INPUT_PULLUP);	//上拉输入}/**************************************** *        Uartx_Config      *函数功能 : 串口配置初始化 *参数描述 : 无 *返回值   : 无 ****************************************/void  Uartx_Config(void){	struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;  /* 初始化配置参数 */	//串口2:RS232	/* step1:查找串口设备 */	uart2_serial = rt_device_find(UART2_NAME);		//查找编程口设备//	if (uart2_serial)//	{//        LOG_W("find %s OK", UART2_NAME);       				//    }//	else//	{	//		LOG_E("find %s failed!", UART2_NAME);     //	}		/* step3:修改串口配置参数 */	config.baud_rate = BAUD_RATE_19200;        //修改波特率为 19200	config.data_bits = DATA_BITS_8;           //数据位 9	config.stop_bits = STOP_BITS_1;           //停止位 1	config.bufsz     = 128;                   //修改缓冲区 buff size 为 128	config.parity    = PARITY_NONE;           //偶校验位	/* step2:控制串口设备。通过控制接口传入命令控制字,与控制参数 */	rt_device_control(uart2_serial, RT_DEVICE_CTRL_CONFIG, &config);	/* step4:打开串口设备。以中断接收及轮询发送模式打开串口设备 */        /* 以中断接收及轮询发送模式打开串口设备 */    rt_device_open(uart2_serial, RT_DEVICE_FLAG_INT_RX);    /* 设置接收回调函数 */    rt_device_set_rx_indicate(uart2_serial, uart2_callback);				//串口3:RS232	/* step1:查找串口设备 */	uart3_serial = rt_device_find(UART3_NAME);		//查找编程口设备//	if (uart3_serial)//	{//        LOG_W("find %s OK", UART3_NAME);       				//    }//	else//	{	//		LOG_E("find %s failed!", UART3_NAME);     //	}		/* step2:修改串口配置参数 */	config.baud_rate = BAUD_RATE_19200;        //修改波特率为 19200	config.data_bits = DATA_BITS_8;           //数据位 9	config.stop_bits = STOP_BITS_1;           //停止位 1	config.bufsz     = 128;                   //修改缓冲区 buff size 为 128	config.parity    = PARITY_NONE;           //偶校验位	/* step3:控制串口设备。通过控制接口传入命令控制字,与控制参数 */	rt_device_control(uart3_serial, RT_DEVICE_CTRL_CONFIG, &config);	/* step4:打开串口设备。以中断接收及轮询发送模式打开串口设备 */        /* 以中断接收及轮询发送模式打开串口设备 */    rt_device_open(uart3_serial, RT_DEVICE_FLAG_INT_RX);    /* 设置接收回调函数 */    rt_device_set_rx_indicate(uart3_serial, uart3_callback);   		//串口4:RS232	/* step1:查找串口设备 */	uart4_serial = rt_device_find(UART4_NAME);		//查找编程口设备//	if (uart4_serial)//	{//        LOG_W("find %s OK", UART4_NAME);       				//    }//	else//	{	//		LOG_E("find %s failed!", UART4_NAME);     //	}		/* step2:修改串口配置参数 */	config.baud_rate = BAUD_RATE_19200;        //修改波特率为 19200	config.data_bits = DATA_BITS_8;           //数据位 9	config.stop_bits = STOP_BITS_1;           //停止位 1	config.bufsz     = 128;                   //修改缓冲区 buff size 为 128	config.parity    = PARITY_NONE;           //偶校验位	/* step3:控制串口设备。通过控制接口传入命令控制字,与控制参数 */	rt_device_control(uart4_serial, RT_DEVICE_CTRL_CONFIG, &config);	/* step4:打开串口设备。以中断接收及轮询发送模式打开串口设备 */        /* 以中断接收及轮询发送模式打开串口设备 */    rt_device_open(uart4_serial, RT_DEVICE_FLAG_INT_RX);    /* 设置接收回调函数 */    rt_device_set_rx_indicate(uart4_serial, uart4_callback);			//串口5:RS232	/* step1:查找串口设备 */	uart5_serial = rt_device_find(UART5_NAME);		//查找编程口设备//	if (uart5_serial)//	{//        LOG_W("find %s OK", UART5_NAME);       				//    }//	else//	{	//		LOG_E("find %s failed!", UART5_NAME);     //	}		/* step2:修改串口配置参数 */	config.baud_rate = BAUD_RATE_19200;        //修改波特率为 19200	config.data_bits = DATA_BITS_8;           //数据位 9	config.stop_bits = STOP_BITS_1;           //停止位 1	config.bufsz     = 128;                   //修改缓冲区 buff size 为 128	config.parity    = PARITY_NONE;           //偶校验位	/* step3:控制串口设备。通过控制接口传入命令控制字,与控制参数 */	rt_device_control(uart5_serial, RT_DEVICE_CTRL_CONFIG, &config);	/* step4:打开串口设备。以中断接收及轮询发送模式打开串口设备 */        /* 以中断接收及轮询发送模式打开串口设备 */    rt_device_open(uart5_serial, RT_DEVICE_FLAG_INT_RX);    /* 设置接收回调函数 */    rt_device_set_rx_indicate(uart5_serial, uart5_callback);				//串口6:RS232	/* step1:查找串口设备 */	uart6_serial = rt_device_find(UART6_NAME);		//查找编程口设备//	if (uart6_serial)//	{//        LOG_W("find %s OK", UART6_NAME);       				//    }//	else//	{	//		LOG_E("find %s failed!", UART6_NAME);     //	}		/* step2:修改串口配置参数 */	config.baud_rate = BAUD_RATE_19200;        //修改波特率为 19200	config.data_bits = DATA_BITS_8;           //数据位 9	config.stop_bits = STOP_BITS_1;           //停止位 1	config.bufsz     = 128;                   //修改缓冲区 buff size 为 128	config.parity    = PARITY_NONE;           //偶校验位	/* step3:控制串口设备。通过控制接口传入命令控制字,与控制参数 */	rt_device_control(uart6_serial, RT_DEVICE_CTRL_CONFIG, &config);	/* step4:打开串口设备。以中断接收及轮询发送模式打开串口设备 */        /* 以中断接收及轮询发送模式打开串口设备 */    rt_device_open(uart6_serial, RT_DEVICE_FLAG_INT_RX);    /* 设置接收回调函数 */    rt_device_set_rx_indicate(uart6_serial, uart6_callback);			//串口7:RS485	/* step1:查找串口设备 */	uart7_serial = rt_device_find(UART7_NAME);		//查找编程口设备//	if (uart7_serial)//	{//        LOG_W("find %s OK", UART7_NAME);       				//    }//	else//	{	//		LOG_E("find %s failed!", UART7_NAME);     //	}		/* step2:修改串口配置参数 */	config.baud_rate = BAUD_RATE_115200;        //修改波特率为 19200	config.data_bits = DATA_BITS_8;           //数据位 9	config.stop_bits = STOP_BITS_1;           //停止位 1	config.bufsz     = 128;                   //修改缓冲区 buff size 为 128	config.parity    = PARITY_NONE;           //偶校验位	/* step3:控制串口设备。通过控制接口传入命令控制字,与控制参数 */	rt_device_control(uart7_serial, RT_DEVICE_CTRL_CONFIG, &config);	/* step4:打开串口设备。以中断接收及轮询发送模式打开串口设备 */        /* 以中断接收及轮询发送模式打开串口设备 */    rt_device_open(uart7_serial, RT_DEVICE_FLAG_INT_RX);    /* 设置接收回调函数 */    rt_device_set_rx_indicate(uart7_serial, uart7_callback);	/* 485控制脚,高电平是发送 */    rt_pin_mode(MAX3485_DIR_PIN, PIN_MODE_OUTPUT);	//输出	rt_pin_write(MAX3485_DIR_PIN, PIN_LOW);		//串口8:RS232	/* step1:查找串口设备 */	uart8_serial = rt_device_find(UART8_NAME);		//查找编程口设备//	if (uart8_serial)//	{//        LOG_W("find %s OK", UART8_NAME);       				//    }//	else//	{	//		LOG_E("find %s failed!", UART8_NAME);     //	}		/* step2:修改串口配置参数 */	config.baud_rate = BAUD_RATE_19200;        //修改波特率为 19200	config.data_bits = DATA_BITS_8;           //数据位 9	config.stop_bits = STOP_BITS_1;           //停止位 1	config.bufsz     = 128;                   //修改缓冲区 buff size 为 128	config.parity    = PARITY_NONE;           //偶校验位	/* step3:控制串口设备。通过控制接口传入命令控制字,与控制参数 */	rt_device_control(uart8_serial, RT_DEVICE_CTRL_CONFIG, &config);	/* step4:打开串口设备。以中断接收及轮询发送模式打开串口设备 */        /* 以中断接收及轮询发送模式打开串口设备 */    rt_device_open(uart8_serial, RT_DEVICE_FLAG_INT_RX);    /* 设置接收回调函数 */    rt_device_set_rx_indicate(uart8_serial, uart8_callback);		}/* 接收数据回调函数 */rt_err_t uart2_callback(rt_device_t dev, rt_size_t size){	    /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */    if (size > 0)    {        rt_sem_release(uart2_sem);    }    return RT_EOK;}/* 接收数据回调函数 */rt_err_t uart3_callback(rt_device_t dev, rt_size_t size){	    /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */    if (size > 0)    {        rt_sem_release(uart3_sem);    }    return RT_EOK;}/* 接收数据回调函数 */rt_err_t uart4_callback(rt_device_t dev, rt_size_t size){	    /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */    if (size > 0)    {        rt_sem_release(uart4_sem);    }    return RT_EOK;}/* 接收数据回调函数 */rt_err_t uart5_callback(rt_device_t dev, rt_size_t size){	    /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */    if (size > 0)    {        rt_sem_release(uart5_sem);    }    return RT_EOK;}/* 接收数据回调函数 */rt_err_t uart6_callback(rt_device_t dev, rt_size_t size){	    /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */    if (size > 0)    {        rt_sem_release(uart6_sem);    }    return RT_EOK;}/* 接收数据回调函数 */rt_err_t uart7_callback(rt_device_t dev, rt_size_t size){	    /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */    if (size > 0)    {        rt_sem_release(uart7_sem);    }    return RT_EOK;}/* 接收数据回调函数 */rt_err_t uart8_callback(rt_device_t dev, rt_size_t size){	    /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */    if (size > 0)    {        rt_sem_release(uart8_sem);    }    return RT_EOK;}/**************************************** *        Spix_Config      *函数功能 : Spi配置初始化 *参数描述 : 无 *返回值   : 无 ****************************************/void  Spix_Config(void){	struct	rt_spi_configuration	config;		/* step1:向SPI总线挂载SPI设备 */	//挂载SPI 到SPI总线,cs引脚,0是使能	 __HAL_RCC_GPIOB_CLK_ENABLE();	rt_hw_spi_device_attach("spi3", SPI30_NAME, GPIOB, GPIO_PIN_6);	//PB6				/* step2:查找SPI设备 */	/* 查找 spi 设备获取设备句柄 */    spi_dev_fm25cl = (struct rt_spi_device *)rt_device_find(SPI30_NAME);//	if (spi_dev_fm25cl)//    {//        LOG_W("find %s OK", SPI30_NAME);       //    }//	else//	{	//		LOG_E("find %s failed!", SPI30_NAME);       		  //	}		/* step3:修改SPI配置参数 */	config.data_width = 8;        //8bit	config.mode       = RT_SPI_MASTER | RT_SPI_MODE_0 | RT_SPI_MSB;  //spi主机,模式0,MSB在前,soft_cs(软件模拟),3线 	config.max_hz     = 20*1000*1000;                   //45M		/* step4:控制SPI设备。通过控制接口传入命令控制字,与控制参数 */	rt_spi_configure(spi_dev_fm25cl,&config);		}/**************************************** *        Canx_Config      *函数功能 : Can配置初始化 *参数描述 : 无 *返回值   : 无 ****************************************/void  Canx_Config(void){	//CAN1	/* step1:查找CAN设备 */	can1_dev = rt_device_find(CAN1_DEV_NAME);		//查找CAN口设备//	if (can1_dev)//    {//        LOG_W("find %s OK", CAN1_DEV_NAME);    //    }//	else//	{			//		LOG_E("find %s failed!", CAN1_DEV_NAME);             //	}	/* step2:打开CAN口设备。以中断接收及发送模式打开CAN设备 */	rt_device_open(can1_dev, RT_DEVICE_FLAG_INT_TX | RT_DEVICE_FLAG_INT_RX);	/* 设置 CAN 通信的波特率为 500kbit/s*/	rt_device_control(can1_dev, RT_CAN_CMD_SET_BAUD, (void *)CAN500kBaud);		can1_msg.id = 0x78;	 /* ID 为 0x78 */	can1_msg.ide = RT_CAN_STDID;     /* 标准格式 */	can1_msg.rtr = RT_CAN_DTR;       /* 数据帧 */	can1_msg.len = 8;                /* 数据长度为 8 */	/* 待发送的 8 字节数据 */	can1_msg.data[0] = 0x00;	can1_msg.data[1] = 0x11;	can1_msg.data[2] = 0x22;	can1_msg.data[3] = 0x33;	can1_msg.data[4] = 0x44;	can1_msg.data[5] = 0x55;	can1_msg.data[6] = 0x66;	can1_msg.data[7] = 0x77;		    /* 设置接收回调函数 */    rt_device_set_rx_indicate(can1_dev, can1_rx_callback);	 /* 设置硬件过滤表 */#ifdef RT_CAN_USING_HDR    struct rt_can_filter_item items[5] =    {        RT_CAN_FILTER_ITEM_INIT(0x100, 0, 0, 1, 0x700, RT_NULL, RT_NULL), /* std,match ID:0x100~0x1ff,hdr 为 - 1,设置默认过滤表 */        RT_CAN_FILTER_ITEM_INIT(0x300, 0, 0, 1, 0x700, RT_NULL, RT_NULL), /* std,match ID:0x300~0x3ff,hdr 为 - 1 */        RT_CAN_FILTER_ITEM_INIT(0x211, 0, 0, 1, 0x7ff, RT_NULL, RT_NULL), /* std,match ID:0x211,hdr 为 - 1 */        RT_CAN_FILTER_STD_INIT(0x486, RT_NULL, RT_NULL),                  /* std,match ID:0x486,hdr 为 - 1 */        {0x555, 0, 0, 1, 0x7ff, 7,}                                       /* std,match ID:0x555,hdr 为 7,指定设置 7 号过滤表 */    };    struct rt_can_filter_config cfg = {5, 1, items}; /* 一共有 5 个过滤表 */    /* 设置硬件过滤表 */    rt_device_control(can_dev, RT_CAN_CMD_SET_FILTER, &cfg);#endif			//CAN2	/* step1:查找CAN设备 */	can2_dev = rt_device_find(CAN2_DEV_NAME);		//查找CAN口设备//	if (can2_dev)//    {//        LOG_W("find %s OK", CAN2_DEV_NAME);    //    }//	else//	{			//		LOG_E("find %s failed!", CAN2_DEV_NAME);             //	}	/* step2:打开CAN口设备。以中断接收及发送模式打开CAN设备 */	rt_device_open(can2_dev, RT_DEVICE_FLAG_INT_TX | RT_DEVICE_FLAG_INT_RX);	/* 设置 CAN 通信的波特率为 500kbit/s*/	rt_device_control(can2_dev, RT_CAN_CMD_SET_BAUD, (void *)CAN500kBaud);    /* 设置接收回调函数 */    rt_device_set_rx_indicate(can2_dev, can2_rx_callback);	 /* 设置硬件过滤表 */	#ifdef RT_CAN_USING_HDR    struct rt_can_filter_item items[5] =    {        RT_CAN_FILTER_ITEM_INIT(0x100, 0, 0, 1, 0x700, RT_NULL, RT_NULL), /* std,match ID:0x100~0x1ff,hdr 为 - 1,设置默认过滤表 */        RT_CAN_FILTER_ITEM_INIT(0x300, 0, 0, 1, 0x700, RT_NULL, RT_NULL), /* std,match ID:0x300~0x3ff,hdr 为 - 1 */        RT_CAN_FILTER_ITEM_INIT(0x211, 0, 0, 1, 0x7ff, RT_NULL, RT_NULL), /* std,match ID:0x211,hdr 为 - 1 */        RT_CAN_FILTER_STD_INIT(0x486, RT_NULL, RT_NULL),                  /* std,match ID:0x486,hdr 为 - 1 */        {0x555, 0, 0, 1, 0x7ff, 7,}                                       /* std,match ID:0x555,hdr 为 7,指定设置 7 号过滤表 */    };    struct rt_can_filter_config cfg = {5, 1, items}; /* 一共有 5 个过滤表 */    /* 设置硬件过滤表 */    rt_device_control(can_dev, RT_CAN_CMD_SET_FILTER, &cfg);#endif				}/* 接收数据回调函数 */rt_err_t can1_rx_callback(rt_device_t dev, rt_size_t size){    /* CAN 接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */    rt_sem_release(can1_sem);    return RT_EOK;}/* 接收数据回调函数 */rt_err_t can2_rx_callback(rt_device_t dev, rt_size_t size){    /* CAN 接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */    rt_sem_release(can2_sem);    return RT_EOK;}/**************************************** *        Eth_Config      *函数功能 : Eth配置初始化 *参数描述 : 无 *返回值   : 无 ****************************************/void  Eth_Config(void){	phy_init();	phy_reset();}/**************************************** *        Uartx_test   *函数功能 : Uartx_test *参数描述 : 无 *返回值   : 无 ****************************************/void  Uartx_test(void){	rt_uint8_t	i,err;		/***uart2***/		for(test_point = 2;test_point<9;i++)	{		err=1;					if(chat_test[test_point] != sta_OK)		{			for(i=0;i<3;i++)	//测试3次			{				rt_memset(can1_msg.data, 't', 8);	//置t				rt_memset(can2_msg.data, 'e', 8);	//置e				switch(test_point)				{					case	2:						rt_device_write(uart2_serial,0,can1_msg.data,8);						rt_thread_mdelay(5);						rt_device_read(uart2_serial, 0, can2_msg.data,8);								break;					case	3:						rt_device_write(uart3_serial,0,can1_msg.data,8);						rt_thread_mdelay(5);						rt_device_read(uart3_serial, 0, can2_msg.data,8);								break;					case	4:						rt_device_write(uart4_serial,0,can1_msg.data,8);						rt_thread_mdelay(5);						rt_device_read(uart4_serial, 0, can2_msg.data,8);								break;					case	5:						rt_device_write(uart5_serial,0,can1_msg.data,8);						rt_thread_mdelay(5);						rt_device_read(uart5_serial, 0, can2_msg.data,8);								break;					case	6:						rt_device_write(uart6_serial,0,can1_msg.data,8);						rt_thread_mdelay(5);						rt_device_read(uart6_serial, 0, can2_msg.data,8);								break;					case	7:						/* 485控制脚,高电平是发送 */						rt_pin_write(MAX3485_DIR_PIN, PIN_HIGH);						rt_device_write(uart7_serial,0,can1_msg.data,8);						rt_thread_mdelay(5);						/* 485控制脚,高电平是发送 */						rt_pin_write(MAX3485_DIR_PIN, PIN_LOW);						rt_thread_mdelay(300);						rt_device_read(uart7_serial, 0, can2_msg.data,8);								break;					case	8:						rt_device_write(uart8_serial,0,can1_msg.data,8);						rt_thread_mdelay(5);						rt_device_read(uart8_serial, 0, can2_msg.data,8);								break;				}				if(rt_memcmp(can1_msg.data,can2_msg.data,8)==0)				{					err=0;						break;								}				}						}		if(err)		{			if(chat_test[test_point] == sta_unkown)	//等于未知状态时就可以输出			{				chat_test[test_point] = sta_Err;				rt_kprintf(" %d		uart%d	 		Err\n",test_point,test_point);						}					}		else		{			if(chat_test[test_point] !=sta_OK)			{				chat_test[test_point] = sta_OK;				rt_kprintf(" %d		uart%d	 		OK\n",test_point,test_point);					}					}		test_point++;		}	//for(test_point = 2;test_point<9;i++)}	/**************************************** *        Canx_test   *函数功能 : Canx_test *参数描述 : 无 *返回值   : 无 ****************************************/void  Canx_test(void){	rt_uint8_t err=0,i;		err=1;	test_point = 9;	if(chat_test[test_point] != sta_OK)	{				for(i=0;i<3;i++)	//测试3次		{			rt_memset(can1_msg.data, 't', 8);	//置t			rt_memset(can2_msg.data, 'e', 8);	//置e			/* 发送一帧 CAN 数据 */			rt_device_write(can1_dev, 0, &can1_msg, sizeof(can1_msg));			rt_thread_mdelay(100);			rt_device_read(can1_dev, 0, &can2_msg, sizeof(can2_msg));			if(rt_memcmp(can2_msg.data,can1_msg.data,8)==0)			{				err = 0;				break;			}		}		if(err)		{			if(chat_test[test_point] == sta_unkown)	//等于未知状态时就可以输出			{				chat_test[test_point] = sta_Err;				rt_kprintf(" %d		can%d	 		Err\n",test_point,test_point-8);						}					}		else		{			if(chat_test[test_point] !=sta_OK)			{				chat_test[test_point] = sta_OK;				rt_kprintf(" %d		can%d	 		OK\n",test_point,test_point-8);				}					}	}	//	err=1;//	for(i=0;i<3;i++)	//测试3次//	{//		/* 发送一帧 CAN 数据 *///		rt_device_write(can2_dev, 0, &can1_msg, sizeof(can1_msg));//		rt_thread_mdelay(100);//		rt_device_read(can2_dev, 0, &can2_msg, sizeof(can2_msg));//		if(rt_memcmp(can2_msg.data,can1_msg.data,8)==0)//		{//			err = 0;;	//			break;//		}//	}//	if(err)//	{//		rt_kprintf("10		can2	 		Err\n");//	}//	else//	{//		rt_kprintf("10		can2	 		OK\n");//		//	}}/**************************************** *       Eth_test   *函数功能 : Eth_test *参数描述 : 无 *返回值   : 无 ****************************************/void  Eth_test(void){	 	rt_uint8_t	i,err=1;    qznetdev = netdev_get_by_name("e0");    if(!qznetdev)    {        rt_kprintf("10		ethnet	 		None\n");    }	else	{		test_point = 10;		if(chat_test[test_point] != sta_OK)		{			for(i=0;i<3;i++)	//测试3次			{				if(netdev_is_link_up(qznetdev))				{					err = 0;					break;				}											}						if(err)			{				if(chat_test[test_point] == sta_unkown)	//等于未知状态时就可以输出				{					chat_test[test_point] = sta_Err;					rt_kprintf("%d		ethnet	 		Err\n",test_point);				}							}			else			{				if(chat_test[test_point] !=sta_OK)				{					chat_test[test_point] = sta_OK;					rt_kprintf("%d		ethnet	 		OK\n",test_point);				}							}						}	//if(!netdev)else					}		   	}/**************************************** *       Di_test   *函数功能 : di测试 *参数描述 : 无 *返回值   : 无 ****************************************/void  Di_test(rt_uint8_t	mode){	if(mode==1)	rt_memset(key_up, 1, 11);	//置1;	/**************************************** xs15 ****************************************//***Butt Input***/		if(key_up[XS15_PRES])	{		if(		   !rt_pin_read(XS15_2_PIN) 		|| !rt_pin_read(XS15_4_PIN)		|| !rt_pin_read(XS15_6_PIN)		|| !rt_pin_read(XS15_8_PIN)		|| !rt_pin_read(XS15_10_PIN)		|| !rt_pin_read(XS15_12_PIN)				  )	//判断XS15是否按下		{			Key_count++;			rt_kprintf("%d		XS15	 		Checked\n",Key_count);			key_up[XS15_PRES]=0;			flag_key_press = 1;			key_addr |= XS15_checked;			if(rt_pin_read(XS15_2_PIN))			{				rt_kprintf("  		XS15_2	 		Err\n");					}			else			{				rt_kprintf("  		XS15_2	 		OK\n");						}			if(rt_pin_read(XS15_4_PIN))			{				rt_kprintf("  		XS15_4	 		Err\n");					}			else			{				rt_kprintf("  		XS15_4	 		OK\n");						}			if(rt_pin_read(XS15_6_PIN))			{				rt_kprintf("  		XS15_6	 		Err\n");						}			else			{				rt_kprintf("  		XS15_6	 		OK\n");						}			if(rt_pin_read(XS15_8_PIN))			{				rt_kprintf("  		XS15_8	 		Err\n");						}			else			{				rt_kprintf("  		XS15_8	 		OK\n");						}			if(rt_pin_read(XS15_10_PIN))			{				rt_kprintf("  		XS15_10	 		Err\n");						}			else			{				rt_kprintf("  		XS15_10	 		OK\n");						}			if(rt_pin_read(XS15_12_PIN))			{				rt_kprintf("  		XS15_12	 		Err\n");						}			else			{				rt_kprintf("  		XS15_12	 		OK\n");						}		}	//判断XS15是否按下		}	else 	if(		rt_pin_read(XS15_2_PIN)	  &&rt_pin_read(XS15_4_PIN)	  &&rt_pin_read(XS15_6_PIN)	  &&rt_pin_read(XS15_8_PIN)	  &&rt_pin_read(XS15_10_PIN)	  &&rt_pin_read(XS15_12_PIN)	)	key_up[XS15_PRES] = 1;		/**************************************** XS30 ****************************************/	/***RMT***/	if(key_up[XS30_PRES])	{		if(		   !rt_pin_read(XS30_3_PIN) 		|| !rt_pin_read(XS30_4_PIN)		|| !rt_pin_read(XS30_5_PIN)		|| !rt_pin_read(XS30_6_PIN)		|| !rt_pin_read(XS30_7_PIN)		|| !rt_pin_read(XS30_8_PIN)			|| !rt_pin_read(XS30_9_PIN)			|| !rt_pin_read(XS30_10_PIN)			|| !rt_pin_read(XS30_11_PIN)			|| !rt_pin_read(XS30_12_PIN)			|| !rt_pin_read(XS30_13_PIN)					  )//判断XS30是否按下		{			Key_count++;			rt_kprintf("%d		XS30	 		Checked\n",Key_count);			key_up[XS30_PRES]=0;			flag_key_press = 1;			key_addr |= XS30_checked;			if(rt_pin_read(XS30_3_PIN))			{				rt_kprintf("  		XS30_3 			Err\n");							}			else			{				rt_kprintf("  		XS30_3	 		OK\n");													}			if(rt_pin_read(XS30_4_PIN))			{				rt_kprintf("  		XS30_4 			Err\n");							}			else			{				rt_kprintf("  		XS30_4	 		OK\n");													}			if(rt_pin_read(XS30_5_PIN))			{				rt_kprintf("  		XS30_5 			Err\n");							}			else			{				rt_kprintf("  		XS30_5	 		OK\n");													}			if(rt_pin_read(XS30_6_PIN))			{				rt_kprintf("  		XS30_6 			Err\n");							}			else			{				rt_kprintf("  		XS30_6	 		OK\n");													}			if(rt_pin_read(XS30_7_PIN))			{				rt_kprintf("  		XS30_7 			Err\n");							}			else			{				rt_kprintf("  		XS30_7	 		OK\n");													}			if(rt_pin_read(XS30_8_PIN))			{				rt_kprintf("  		XS30_8 			Err\n");							}			else			{				rt_kprintf("  		XS30_8	 		OK\n");													}			if(rt_pin_read(XS30_9_PIN))			{				rt_kprintf("  		XS30_9 			Err\n");							}			else			{				rt_kprintf("  		XS30_9	 		OK\n");													}			if(rt_pin_read(XS30_10_PIN))			{				rt_kprintf("  		XS30_10 		Err\n");							}			else			{				rt_kprintf("  		XS30_10	 		OK\n");													}			if(rt_pin_read(XS30_11_PIN))			{				rt_kprintf("  		XS30_11 		Err\n");							}			else			{				rt_kprintf("  		XS30_11	 		OK\n");													}			if(rt_pin_read(XS30_12_PIN))			{				rt_kprintf("  		XS30_12 		Err\n");							}			else			{				rt_kprintf("  		XS30_12	 		OK\n");													}			if(rt_pin_read(XS30_13_PIN))			{				rt_kprintf("  		XS30_13 		Err\n");							}			else			{				rt_kprintf("  		XS30_13	 		OK\n");													}		}	//判断XS30是否按下		}	else 	if(		rt_pin_read(XS30_3_PIN)	  &&rt_pin_read(XS30_4_PIN) 	  &&rt_pin_read(XS30_5_PIN)	  &&rt_pin_read(XS30_6_PIN)	  &&rt_pin_read(XS30_7_PIN)	  &&rt_pin_read(XS30_8_PIN)	  &&rt_pin_read(XS30_9_PIN)	  &&rt_pin_read(XS30_10_PIN)	  &&rt_pin_read(XS30_11_PIN)	  &&rt_pin_read(XS30_12_PIN)	  &&rt_pin_read(XS30_13_PIN)	)	key_up[XS30_PRES] = 1;	/**************************************** XS20 ****************************************/	/***OBS1***/	if(key_up[XS20_PRES])	{		if(		   !rt_pin_read(XS20_2_PIN) 		|| !rt_pin_read(XS20_3_PIN)		|| !rt_pin_read(XS20_4_PIN)		|| !rt_pin_read(XS20_5_PIN)			  )//判断XS20是否按下		{			Key_count++;			rt_kprintf("%d		XS20	 		Checked\n",Key_count);			key_up[XS20_PRES]=0;			flag_key_press = 1;			key_addr |= XS20_checked;			if(rt_pin_read(XS20_2_PIN))			{				rt_kprintf("  		XS20_2 			Err\n");							}			else			{				rt_kprintf("  		XS20_2	 		OK\n");													}			if(rt_pin_read(XS20_3_PIN))			{				rt_kprintf("  		XS20_3 			Err\n");							}			else			{				rt_kprintf("  		XS20_3	 		OK\n");													}			if(rt_pin_read(XS20_4_PIN))			{				rt_kprintf("  		XS20_4 			Err\n");							}			else			{				rt_kprintf("  		XS20_4	 		OK\n");													}			if(rt_pin_read(XS20_5_PIN))			{				rt_kprintf("  		XS20_5 			Err\n");							}			else			{				rt_kprintf("  		XS20_5	 		OK\n");													}					}	//判断XS20是否按下		}	else 	if(		rt_pin_read(XS20_2_PIN)	  &&rt_pin_read(XS20_3_PIN) 	  &&rt_pin_read(XS20_4_PIN)	  &&rt_pin_read(XS20_5_PIN)	)	key_up[XS20_PRES] = 1;		/**************************************** XS21 ****************************************/	/***OBS2***/	if(key_up[XS21_PRES])	{		if(		   !rt_pin_read(XS21_2_PIN) 		|| !rt_pin_read(XS21_3_PIN)		|| !rt_pin_read(XS21_4_PIN)		|| !rt_pin_read(XS21_5_PIN)			  )//判断XS21是否按下		{			Key_count++;			rt_kprintf("%d		XS21	 		Checked\n",Key_count);			key_up[XS21_PRES]=0;			flag_key_press = 1;			key_addr |= XS21_checked;			if(rt_pin_read(XS21_2_PIN))			{				rt_kprintf("  		XS21_2 			Err\n");							}			else			{				rt_kprintf("  		XS21_2	 		OK\n");													}			if(rt_pin_read(XS21_3_PIN))			{				rt_kprintf("  		XS21_3 			Err\n");							}			else			{				rt_kprintf("  		XS21_3	 		OK\n");													}			if(rt_pin_read(XS21_4_PIN))			{				rt_kprintf("  		XS21_4 			Err\n");							}			else			{				rt_kprintf("  		XS21_4	 		OK\n");													}			if(rt_pin_read(XS21_5_PIN))			{				rt_kprintf("  		XS21_5 			Err\n");							}			else			{				rt_kprintf("  		XS21_5	 		OK\n");													}		}	//判断XS21是否按下		}	else 	if(		rt_pin_read(XS21_2_PIN)	  &&rt_pin_read(XS21_3_PIN) 	  &&rt_pin_read(XS21_4_PIN)	  &&rt_pin_read(XS21_5_PIN)	)	key_up[XS21_PRES] = 1;			/**************************************** XS17 ****************************************/	/***OBS3***/	if(key_up[XS17_PRES])	{		if(		   !rt_pin_read(XS17_2_PIN) 		|| !rt_pin_read(XS17_3_PIN)		|| !rt_pin_read(XS17_4_PIN)		|| !rt_pin_read(XS17_5_PIN)			  )//判断XS17是否按下		{			Key_count++;			rt_kprintf("%d		XS17	 		Checked\n",Key_count);			key_up[XS17_PRES]=0;			flag_key_press = 1;			key_addr |= XS17_checked;			if(rt_pin_read(XS17_2_PIN))			{				rt_kprintf("  		XS17_2 			Err\n");							}			else			{				rt_kprintf("  		XS17_2	 		OK\n");													}			if(rt_pin_read(XS17_3_PIN))			{				rt_kprintf("  		XS17_3 			Err\n");							}			else			{				rt_kprintf("  		XS17_3	 		OK\n");													}			if(rt_pin_read(XS17_4_PIN))			{				rt_kprintf("  		XS17_4 			Err\n");							}			else			{				rt_kprintf("  		XS17_4	 		OK\n");													}			if(rt_pin_read(XS17_5_PIN))			{				rt_kprintf("  		XS17_5 			Err\n");							}			else			{				rt_kprintf("  		XS17_5	 		OK\n");													}		}	//判断XS17是否按下		}	else 	if(		rt_pin_read(XS17_2_PIN)	  &&rt_pin_read(XS17_3_PIN) 	  &&rt_pin_read(XS17_4_PIN)	  &&rt_pin_read(XS17_5_PIN)	)	key_up[XS17_PRES] = 1;		/**************************************** XS18 ****************************************/	/***OBS4***/	if(key_up[XS18_PRES])	{		if(		   !rt_pin_read(XS18_2_PIN) 		|| !rt_pin_read(XS18_3_PIN)		|| !rt_pin_read(XS18_4_PIN)		|| !rt_pin_read(XS18_5_PIN)			  )//判断XS18是否按下		{			Key_count++;			rt_kprintf("%d		XS18	 		Checked\n",Key_count);			key_up[XS18_PRES]=0;			flag_key_press = 1;			key_addr |= XS18_checked;			if(rt_pin_read(XS18_2_PIN))			{				rt_kprintf("  		XS18_2 			Err\n");							}			else			{				rt_kprintf("  		XS18_2	 		OK\n");													}			if(rt_pin_read(XS18_3_PIN))			{				rt_kprintf("  		XS18_3 			Err\n");							}			else			{				rt_kprintf("  		XS18_3	 		OK\n");													}			if(rt_pin_read(XS18_4_PIN))			{				rt_kprintf("  		XS18_4 			Err\n");							}			else			{				rt_kprintf("  		XS18_4	 		OK\n");													}			if(rt_pin_read(XS18_5_PIN))			{				rt_kprintf("  		XS18_5 			Err\n");							}			else			{				rt_kprintf("  		XS18_5	 		OK\n");													}		}	//判断XS18是否按下		}	else 	if(		rt_pin_read(XS18_2_PIN)	  &&rt_pin_read(XS18_3_PIN) 	  &&rt_pin_read(XS18_4_PIN)	  &&rt_pin_read(XS18_5_PIN)	)	key_up[XS18_PRES] = 1;		/**************************************** XS11 ****************************************/	/***NPN Input-1***/	if(key_up[XS11_PRES])	{		if(		   !rt_pin_read(XS11_5_PIN) 		|| !rt_pin_read(XS11_6_PIN)		|| !rt_pin_read(XS11_11_PIN)		|| !rt_pin_read(XS11_12_PIN)			|| !rt_pin_read(XS11_17_PIN)		|| !rt_pin_read(XS11_18_PIN)		  )//判断XS11是否按下		{			Key_count++;			rt_kprintf("%d		XS11	 		Checked\n",Key_count);			key_up[XS11_PRES]=0;			flag_key_press = 1;			key_addr |= XS11_checked;			if(rt_pin_read(XS11_5_PIN))			{				rt_kprintf("  		XS11_5 			Err\n");							}			else			{				rt_kprintf("  		XS11_5	 		OK\n");													}			if(rt_pin_read(XS11_6_PIN))			{				rt_kprintf("  		XS11_6 			Err\n");							}			else			{				rt_kprintf("  		XS11_6	 		OK\n");													}			if(rt_pin_read(XS11_11_PIN))			{				rt_kprintf("  		XS11_11 		Err\n");							}			else			{				rt_kprintf("  		XS11_11	 		OK\n");													}			if(rt_pin_read(XS11_12_PIN))			{				rt_kprintf("  		XS11_12 		Err\n");							}			else			{				rt_kprintf("  		XS11_12	 		OK\n");													}			if(rt_pin_read(XS11_17_PIN))			{				rt_kprintf("  		XS11_17 		Err\n");							}			else			{				rt_kprintf("  		XS11_17	 		OK\n");													}			if(rt_pin_read(XS11_18_PIN))			{				rt_kprintf("  		XS11_18 		Err\n");							}			else			{				rt_kprintf("  		XS11_18	 		OK\n");													}		}	//判断XS11是否按下		}	else 	if(		rt_pin_read(XS11_5_PIN)	  &&rt_pin_read(XS11_6_PIN)	  &&rt_pin_read(XS11_11_PIN) 	  &&rt_pin_read(XS11_12_PIN)	  &&rt_pin_read(XS11_17_PIN)	  &&rt_pin_read(XS11_18_PIN)	)	key_up[XS11_PRES] = 1;	/**************************************** XS14 ****************************************/	/***NPN Input-2***/	if(key_up[XS14_PRES])	{		if(		   !rt_pin_read(XS14_5_PIN) 		|| !rt_pin_read(XS14_6_PIN)		|| !rt_pin_read(XS14_11_PIN)		|| !rt_pin_read(XS14_12_PIN)			  )//判断XS14是否按下		{			Key_count++;			rt_kprintf("%d		XS14	 		Checked\n",Key_count);			key_up[XS14_PRES]=0;			flag_key_press = 1;			key_addr |= XS14_checked;			if(rt_pin_read(XS14_5_PIN))			{				rt_kprintf("  		XS14_5 			Err\n");							}			else			{				rt_kprintf("  		XS14_5	 		OK\n");													}			if(rt_pin_read(XS14_6_PIN))			{				rt_kprintf("  		XS14_6 			Err\n");							}			else			{				rt_kprintf("  		XS14_6	 		OK\n");													}			if(rt_pin_read(XS14_11_PIN))			{				rt_kprintf("  		XS14_11 			Err\n");							}			else			{				rt_kprintf("  		XS14_11	 		OK\n");													}			if(rt_pin_read(XS14_12_PIN))			{				rt_kprintf("  		XS14_12 			Err\n");							}			else			{				rt_kprintf("  		XS14_12	 		OK\n");													}		}	//判断XS14是否按下		}	else 	if(		rt_pin_read(XS14_5_PIN)	  &&rt_pin_read(XS14_6_PIN)	  &&rt_pin_read(XS14_11_PIN) 	  &&rt_pin_read(XS14_12_PIN)	)	key_up[XS14_PRES] = 1;	/**************************************** XS12 ****************************************/	/***motor-1***/	if(key_up[XS12_PRES])	{		if(!rt_pin_read(XS12_5_PIN))//判断XS12是否按下		{			Key_count++;			key_up[XS12_PRES]=0;			flag_key_press = 1;			key_addr |= XS12_checked;			rt_kprintf("%d		XS12_5	 		OK\n",Key_count);		}	//判断XS12是否按下		}	else 	if(		rt_pin_read(XS12_5_PIN)	)	key_up[XS12_PRES] = 1;		/**************************************** XS13 ****************************************/	/***motor-1***/	if(key_up[XS13_PRES])	{		if(!rt_pin_read(XS13_5_PIN))//判断XS13是否按下		{			Key_count++;			key_up[XS13_PRES]=0;			flag_key_press = 1;			key_addr |= XS13_checked;			rt_kprintf("%d		XS13_5	 		OK\n",Key_count);		}	//判断XS13是否按下		}	else 	if(		rt_pin_read(XS13_5_PIN)	)	key_up[XS13_PRES] = 1;		}void	dox_down(void){		rt_pin_write(LED_V14_PIN, PIN_HIGH);				/* 指示灯LED */		rt_pin_write(XS7_1_PIN, PIN_HIGH);		rt_pin_write(XS7_2_PIN, PIN_HIGH);		rt_pin_write(XS7_3_PIN, PIN_HIGH);		rt_pin_write(XS7_5_PIN, PIN_HIGH);		rt_pin_write(XS7_6_PIN, PIN_HIGH);		rt_pin_write(XS7_7_PIN, PIN_HIGH);					rt_pin_write(XS22_1_PIN, PIN_HIGH);		rt_pin_write(XS22_2_PIN, PIN_HIGH);					rt_pin_write(XS20_6_PIN, PIN_LOW);		rt_pin_write(XS20_7_PIN, PIN_LOW);		rt_pin_write(XS20_8_PIN, PIN_LOW);		rt_pin_write(XS20_9_PIN, PIN_LOW);		rt_pin_write(XS21_6_PIN, PIN_LOW);		rt_pin_write(XS21_7_PIN, PIN_LOW);		rt_pin_write(XS21_8_PIN, PIN_LOW);		rt_pin_write(XS21_9_PIN, PIN_LOW);		rt_pin_write(XS17_6_PIN, PIN_LOW);		rt_pin_write(XS17_7_PIN, PIN_LOW);		rt_pin_write(XS17_8_PIN, PIN_LOW);		rt_pin_write(XS17_9_PIN, PIN_LOW);		rt_pin_write(XS18_6_PIN, PIN_LOW);		rt_pin_write(XS18_7_PIN, PIN_LOW);		rt_pin_write(XS18_8_PIN, PIN_LOW);		rt_pin_write(XS18_9_PIN, PIN_LOW);		rt_pin_write(XS16_1_PIN, PIN_HIGH);		rt_pin_write(XS16_3_PIN, PIN_HIGH);		rt_pin_write(XS16_5_PIN, PIN_HIGH);		rt_pin_write(XS16_7_PIN, PIN_HIGH);		rt_pin_write(XS16_9_PIN, PIN_HIGH);		rt_pin_write(XS16_11_PIN, PIN_HIGH);		rt_pin_write(XS16_13_PIN, PIN_HIGH);		rt_pin_write(XS16_15_PIN, PIN_HIGH);		rt_pin_write(XS16_17_PIN, PIN_HIGH);		rt_pin_write(XS16_19_PIN, PIN_HIGH);		rt_pin_write(XS12_1_PIN, PIN_HIGH);		rt_pin_write(XS12_2_PIN, PIN_HIGH);		rt_pin_write(XS12_3_PIN, PIN_LOW);		rt_pin_write(XS12_4_PIN, PIN_LOW);		rt_pin_write(XS13_1_PIN, PIN_HIGH);		rt_pin_write(XS13_2_PIN, PIN_HIGH);				rt_pin_write(XS13_3_PIN, PIN_LOW);		rt_pin_write(XS13_4_PIN, PIN_LOW);}void	dox_up(void){	rt_pin_write(LED_V14_PIN, PIN_LOW);		/* 指示灯LED */		rt_pin_write(XS7_1_PIN, PIN_LOW);		rt_pin_write(XS7_2_PIN, PIN_LOW);		rt_pin_write(XS7_3_PIN, PIN_LOW);		rt_pin_write(XS7_5_PIN, PIN_LOW);		rt_pin_write(XS7_6_PIN, PIN_LOW);		rt_pin_write(XS7_7_PIN, PIN_LOW);				rt_pin_write(XS22_1_PIN, PIN_LOW);		rt_pin_write(XS22_2_PIN, PIN_LOW);					rt_pin_write(XS20_6_PIN, PIN_HIGH);		rt_pin_write(XS20_7_PIN, PIN_HIGH);		rt_pin_write(XS20_8_PIN, PIN_HIGH);		rt_pin_write(XS20_9_PIN, PIN_HIGH);		rt_pin_write(XS21_6_PIN, PIN_HIGH);		rt_pin_write(XS21_7_PIN, PIN_HIGH);		rt_pin_write(XS21_8_PIN, PIN_HIGH);		rt_pin_write(XS21_9_PIN, PIN_HIGH);		rt_pin_write(XS17_6_PIN, PIN_HIGH);		rt_pin_write(XS17_7_PIN, PIN_HIGH);		rt_pin_write(XS17_8_PIN, PIN_HIGH);		rt_pin_write(XS17_9_PIN, PIN_HIGH);		rt_pin_write(XS18_6_PIN, PIN_HIGH);		rt_pin_write(XS18_7_PIN, PIN_HIGH);		rt_pin_write(XS18_8_PIN, PIN_HIGH);		rt_pin_write(XS18_9_PIN, PIN_HIGH);		rt_pin_write(XS16_1_PIN, PIN_LOW);		rt_pin_write(XS16_3_PIN, PIN_LOW);		rt_pin_write(XS16_5_PIN, PIN_LOW);		rt_pin_write(XS16_7_PIN, PIN_LOW);		rt_pin_write(XS16_9_PIN, PIN_LOW);		rt_pin_write(XS16_11_PIN, PIN_LOW);		rt_pin_write(XS16_13_PIN, PIN_LOW);		rt_pin_write(XS16_15_PIN, PIN_LOW);		rt_pin_write(XS16_17_PIN, PIN_LOW);		rt_pin_write(XS16_19_PIN, PIN_LOW);		rt_pin_write(XS12_1_PIN, PIN_LOW);		rt_pin_write(XS12_2_PIN, PIN_LOW);		rt_pin_write(XS12_3_PIN, PIN_HIGH);		rt_pin_write(XS12_4_PIN, PIN_HIGH);		rt_pin_write(XS13_1_PIN, PIN_LOW);		rt_pin_write(XS13_2_PIN, PIN_LOW);				rt_pin_write(XS13_3_PIN, PIN_HIGH);		rt_pin_write(XS13_4_PIN, PIN_HIGH);	}
 |