IO mode of Unit

本文详细介绍了Unix下的五种I/O模型:阻塞I/O、非阻塞I/O、I/O复用、信号驱动I/O及异步I/O,并对比了同步I/O与异步I/O的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. I/O模型 
Unix
下共有五种I/O模型 
a.
阻塞I/O 
b.
非阻塞I/O 
c. I/O
复用(selectpoll 
d.
信号驱动I/OSIGIO 
e.
异步I/OPosix.1aio_系列函数) 
1). 
阻塞I/O模型 
应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 
如果数据没有准备好,一直等待。。。。 
数据准备好了,从内核拷贝到用户空间 
I/O
函数返回成功指示

 

2). 非阻塞I/O模型 
我们把一个套接口设置为非阻塞就是告诉内核,当所请求的I/O操作无法完成时,不要将进程睡眠,而是返回一个错误。这样我们的I/O操作函数将不断的测试数据是否已经准备好,如果没有准备好,继续测试,直到数据准备好为止。在这个不断测试的过程中,会大量的占用CPU的时间。

 

3). I/O复用模型 
I/O
复用模型会用到select或者poll函数,这两个函数也会使进程阻塞,但是和阻塞I/O所不同的的,这两个函数可以同时阻塞多个I/O操作。而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或可写时,才真正调用I/O操作函数。 

4). 
信号驱动I/O模型 
首先我们允许套接口进行信号驱动I/O,并安装一个信号处理函数,进程继续运行并不阻塞。当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数据。


5). 
异步I/O模型 
调用aio_read函数,告诉内核描述字,缓冲区指针,缓冲区大小,文件偏移以及通知的方式,然后立即返回。当内核将数据拷贝到缓冲区后,再通知应用程序。


2. 
几种I/O模型的比较 
前四种模型的区别是第一阶段基本相同,第二阶段基本相同,都是将数据从内核拷贝到调用者的缓冲区。而异步I/O的两个阶段都不同于前四个模型。

 

3. 同步I/O和异步I/O 
a.
同步I/O操作引起请求进程阻塞,直到I/O操作完成。 
异步I/O操作不引起请求进程阻塞。 
b.
我们的前四个模型都是同步I/O,只有最后一个异步I/O模型是异步I/O 

部分内容来自:http://blog.youkuaiyun.com/sunyubo458/archive/2010/12/24/6096723.aspx

//**************************************************************************** // @Module Project Settings // @Filename MAIN.c // @Project tiaoshi.dav //---------------------------------------------------------------------------- // @Controller Infineon XC2267M-104F80 // // @Compiler Keil // // @Codegenerator 2.0 // // @Description This file contains the project initialization function. // //---------------------------------------------------------------------------- // @Date 2025/6/14 14:52:15 // //**************************************************************************** // USER CODE BEGIN (MAIN_General,1) // USER CODE END //**************************************************************************** // @Project Includes //**************************************************************************** #include "MAIN.h" // USER CODE BEGIN (MAIN_General,2) // USER CODE END //**************************************************************************** // @Macros //**************************************************************************** // USER CODE BEGIN (MAIN_General,3) // USER CODE END //**************************************************************************** // @Defines //**************************************************************************** // USER CODE BEGIN (MAIN_General,4) // USER CODE END //**************************************************************************** // @Typedefs //**************************************************************************** // USER CODE BEGIN (MAIN_General,5) // USER CODE END //**************************************************************************** // @Imported Global Variables //**************************************************************************** // USER CODE BEGIN (MAIN_General,6) // USER CODE END //**************************************************************************** // @Global Variables //**************************************************************************** // USER CODE BEGIN (MAIN_General,7) // USER CODE END //**************************************************************************** // @External Prototypes //**************************************************************************** // USER CODE BEGIN (MAIN_General,8) // USER CODE END //**************************************************************************** // @Prototypes Of Local Functions //**************************************************************************** // USER CODE BEGIN (MAIN_General,9) // ¿ÂĬµç¶¯ ´Ë´¦¶¨ÒåÑÓʱº¯Êý void delay(int time) { unsigned int i; for(i=0;i<time;i++) { _nop_();_nop_();_nop_(); } } // ¿ÂĬµç¶¯ ´Ë´¦¶¨Ò忪¹ØÁ¿×´Ì¬º¯Êý void Switch_State(void) { //ST[0]µÄ״̬£º1£¨ÓÐЧ£©»òÕß0£¨ÎÞЧ£©¡£8λ´ÓµÍµ½¸ß¶ÔÓ¦SP0-SP7.¹Ü½Å¸ßµçƽʱÓÐЧ¡£ if(P7_IN_P2==0) //SP0 ST[0]=ST[0]|0x01; else ST[0]=ST[0]&0xfe; if(P7_IN_P1==0) //SP1 ST[0]=ST[0]|0x02; else ST[0]=ST[0]&0xfd; if(P6_IN_P1==0) //SP2 ST[0]=ST[0]|0x04; else ST[0]=ST[0]&0xfb; if(P6_IN_P2==0) //SP3 ST[0]=ST[0]|0x08; else ST[0]=ST[0]&0xf7; if(P5_IN_P3==0) //SP4 ST[0]=ST[0]|0x10; else ST[0]=ST[0]&0xef; if(P5_IN_P5==0) //SP5 ST[0]=ST[0]|0x20; else ST[0]=ST[0]&0xdf; if(P5_IN_P8==0) //SP6 ST[0]=ST[0]|0x40; else ST[0]=ST[0]&0xbf; if(P5_IN_P9==0) //SP7 ST[0]=ST[0]|0x80; else ST[0]=ST[0]&0x7f; //ST[1]µÄ״̬£º1£¨ÓÐЧ£©»òÕß0£¨ÎÞЧ£©¡£8λ´ÓµÍµ½¸ß¶ÔÓ¦SG0-SG7.¹Ü½ÅµÍµçƽʱÓÐЧ¡£ if(P5_IN_P10==0) //SG0 ST[1]=ST[1]|0x01; else ST[1]=ST[1]&0xfe; if(P5_IN_P11==0) //SG1 ST[1]=ST[1]|0x02; else ST[1]=ST[1]&0xfd; if(P5_IN_P13==0) //SG2 ST[1]=ST[1]|0x04; else ST[1]=ST[1]&0xfb; if(P5_IN_P15==0) //SG3 ST[1]=ST[1]|0x08; else ST[1]=ST[1]&0xf7; if(P2_IN_P12==0) //SG4 ST[1]=ST[1]|0x10; else ST[1]=ST[1]&0xef; if(P2_IN_P11==0) //SG5 ST[1]=ST[1]|0x20; else ST[1]=ST[1]&0xdf; if(P2_IN_P2==0) //SG6 ST[1]=ST[1]|0x40; else ST[1]=ST[1]&0xbf; if(P4_IN_P0==0) //SG7 ST[1]=ST[1]|0x80; else ST[1]=ST[1]&0x7f; //ST[2]µÄ״̬£º1£¨ÓÐЧ£©»òÕß0£¨ÎÞЧ£©¡£7λ´ÓµÍµ½¸ß¶ÔÓ¦SG8-SG14.¹Ü½ÅµÍµçƽʱÓÐЧ¡£ if(P4_IN_P1==0) //SG8 ST[2]=ST[2]|0x01; else ST[2]=ST[2]&0xfe; if(P2_IN_P8==0) //SG9 ST[2]=ST[2]|0x02; else ST[2]=ST[2]&0xfd; if(P2_IN_P13==0) //SG10 ST[2]=ST[2]|0x04; else ST[2]=ST[2]&0xfb; if(P2_IN_P10==0) //SG11 ST[2]=ST[2]|0x08; else ST[2]=ST[2]&0xf7; if(P10_IN_P6==0) //SG12 ST[2]=ST[2]|0x10; else ST[2]=ST[2]&0xef; if(P10_IN_P7==0) //SG13 ST[2]=ST[2]|0x20; else ST[2]=ST[2]&0xdf; if(P1_IN_P7==0) //SG14 ST[2]=ST[2]|0x40; else ST[2]=ST[2]&0xbf; //ST[3]µÄ״̬£º1£¨ÓÐЧ£©»òÕß0£¨ÎÞЧ£©¡£8λ´ÓµÍµ½¸ß¶ÔÓ¦SP8-SP15.¹Ü½Å¸ßµçƽʱÓÐЧ¡£ if(P10_IN_P9==0) //SP8 ST[3]=ST[3]|0x01; else ST[3]=ST[3]&0xfe; if(P10_IN_P12==0) //SP9 ST[3]=ST[3]|0x02; else ST[3]=ST[3]&0xfd; if(P1_IN_P3==0) //SP10 ST[3]=ST[3]|0x04; else ST[3]=ST[3]&0xfb; if(P10_IN_P14==0) //SP11 ST[3]=ST[3]|0x08; else ST[3]=ST[3]&0xf7; if(P1_IN_P4==0) //SP12 ST[3]=ST[3]|0x10; else ST[3]=ST[3]&0xef; if(P10_IN_P15==0) //SP13 ST[3]=ST[3]|0x20; else ST[3]=ST[3]&0xdf; if(P1_IN_P5==0) //SP14 ST[3]=ST[3]|0x40; else ST[3]=ST[3]&0xbf; if(P1_IN_P6==0) //SP15 ST[3]=ST[3]|0x80; else ST[3]=ST[3]&0x7f; } void Switch_Control(void) { //µÍ±ß¿ª¹Ø£º´ÓÉϵ½ÏÂΪ1~10 1:off 0:on OUT¹Ü½ÅÓÐЧÏ൱Óڵء£ P7_OUT_P3 = ST[4]&0x01; //µÍ±ß¿ª¹Ø1 P7_OUT_P4 =(ST[4]>>1)&0x01; //µÍ±ß¿ª¹Ø2 P6_OUT_P0 =(ST[4]>>2)&0x01; //µÍ±ß¿ª¹Ø3 P10_OUT_P10=(ST[4]>>3)&0x01; //µÍ±ß¿ª¹Ø4 P10_OUT_P11=(ST[4]>>4)&0x01; //µÍ±ß¿ª¹Ø5 P1_OUT_P2 =(ST[4]>>5)&0x01; //µÍ±ß¿ª¹Ø6 P10_OUT_P8 =(ST[4]>>6)&0x01; //µÍ±ß¿ª¹Ø7 P10_OUT_P13=(ST[4]>>7)&0x01; //µÍ±ß¿ª¹Ø8 P0_OUT_P7 = ST[5]&0x01; //µÍ±ß¿ª¹Ø9 P1_OUT_P0 =(ST[5]>>1)&0x01; //µÍ±ß¿ª¹Ø10 //¸ß±ß¿ª¹Ø£º´ÓÉϵ½ÏÂΪ1~4 1:on 0:off£¬OUT¹Ü½ÅÓÐЧÏ൱ÓÚ+24V/12V¡£ P10_OUT_P3 = ST[6]&0x01; //¸ß±ß¿ª¹Ø1 P0_OUT_P5 =(ST[6]>>1)&0x01; //¸ß±ß¿ª¹Ø2 P10_OUT_P4 =(ST[6]>>2)&0x01; //¸ß±ß¿ª¹Ø3 P1_OUT_P1 =(ST[6]>>3)&0x01; //¸ß±ß¿ª¹Ø4 } // ¿ÂĬµç¶¯ ´Ë´¦¶¨ÒåÄ£Êýת»»º¯Êý ´ÓÉϵ½ÏÂÊÇͨµÀAI1~6 void ADC_State(void) { ADC1_vStartSeq0ReqChNum(0,0,0,0); while(!(ADC1_RCR0 & 0x1000)); //AI1£¬5V¶ÔÓ¦0x03FF¡£ ADC_High[1]=((ADC1_RESR0>>2)&0x0300)>>8; //high 2bit ADC_Low[1] =((ADC1_RESR0>>2)&0x00ff); //low 8bit delay(500); ADC1_vStartSeq0ReqChNum(0,0,0,2); while(!(ADC1_RCR2 & 0x1000)); //AI2£¬5V¶ÔÓ¦0x03FF¡£ ADC_High[2]=((ADC1_RESR2>>2)&0x0300)>>8; //high 2bit ADC_Low[2] =((ADC1_RESR2>>2)&0x00ff); //low 8bit delay(500); ADC1_vStartSeq0ReqChNum(0,0,0,4); while(!(ADC1_RCR4 & 0x1000)); //AI3£¬5V¶ÔÓ¦0x03FF¡£ ADC_High[3]=((ADC1_RESR4>>2)&0x0300)>>8; //high 2bit ADC_Low[3] =((ADC1_RESR4>>2)&0x00ff); //low 8bit delay(500); ADC1_vStartSeq0ReqChNum(0,0,0,5); while(!(ADC1_RCR5 & 0x1000)); // AI4£¬24V/5V¶ÔÓ¦0x03FF¡£ ADC_High[4]=((ADC1_RESR5>>2)&0x0300)>>8; //high 2bit ADC_Low[4] =((ADC1_RESR5>>2)&0x00ff); //low 8bit delay(500); ADC1_vStartSeq0ReqChNum(0,0,0,6); while(!(ADC1_RCR6 & 0x1000)); // AI5£¬24V/5V¶ÔÓ¦0x03FF¡£ ADC_High[5]=((ADC1_RESR6>>2)&0x0300)>>8; //high 2bit ADC_Low[5] =((ADC1_RESR6>>2)&0x00ff); //low 8bit delay(500); ADC0_vStartSeq0ReqChNum(0,0,0,0); while(!(ADC0_RCR0 & 0x1000)); // AI6£¬24V/5V¶ÔÓ¦0x03FF¡£ ADC_High[6]=((ADC0_RESR0>>2)&0x0300)>>8; //high 2bit ADC_Low[6] =((ADC0_RESR0>>2)&0x00ff); //low 8bit } // ¿ÂĬµç¶¯ ´Ë´¦¶¨ÒåµÍ±ß¿ª¹ØSPI¿ØÖÆÄ£Ê½ ±¾º¯ÊýÐèÔÚwhileÖÐÑ­»· void SPI_Control(void) { P0_OUT_P3=1; // delay(3); // P0_OUT_P3=0; // delay(3); // // U1C0_SSC_vSendData(0x24ff); // while(!U1C0_SSC_ubTxDataReady()); // // P0_OUT_P3=1; // delay(3); // P0_OUT_P3=0; // delay(3); // U1C0_SSC_vSendData(0x27ff); // while(!U1C0_SSC_ubTxDataReady()); // // P0_OUT_P3=1; // delay(3); // P0_OUT_P3=0; // delay(3); // U1C0_SSC_vSendData(0x2ecf); // while(!U1C0_SSC_ubTxDataReady()); // // delay(3); // P0_OUT_P3=1; // } // USER CODE END //**************************************************************************** // @Function void MAIN_vInit(void) // //---------------------------------------------------------------------------- // @Description This function initializes the microcontroller. // //---------------------------------------------------------------------------- // @Returnvalue None // //---------------------------------------------------------------------------- // @Parameters None // //---------------------------------------------------------------------------- // @Date 2025/6/14 // //**************************************************************************** // USER CODE BEGIN (Init,1) // USER CODE END void MAIN_vInit(void) { SCS_ErrorType Error; // USER CODE BEGIN (Init,2) // USER CODE END // globally disable interrupts PSW_IEN = 0; /// ----------------------------------------------------------------------- /// Configuration of the System Clock: /// ----------------------------------------------------------------------- /// - VCO clock used, input clock is connected /// - input frequency is 8.00 MHz /// - configured system frequency is 80.00 MHz /// - system clock is 80.00MHz MAIN_vUnlockProtecReg(); // unlock write security // initialize CCU6 timer T13 for SCS driver SCS_InitTimer(); // perform transition from base mode to normal operating mode Error = SCS_GoFromBaseToNormalMode(); // restore CCU6 timer used by SCS driver SCS_RestoreTimer(); // ----------------------------------------------------------------------- // Initialization of the Peripherals: // ----------------------------------------------------------------------- // initializes the Parallel Ports IO_vInit(); // initializes the General Purpose Timer Unit (GPT1) GPT1_vInit(); // initializes the General Purpose Timer Unit (GPT2) GPT2_vInit(); // initializes the Capture / Compare Unit 2 (CAPCOM2) CC2_vInit(); // initializes the Analog / Digital Converter (ADC0) ADC0_vInit(); // initializes the Analog / Digital Converter (ADC1) ADC1_vInit(); // initializes the MultiCAN Module (CAN) CAN_vInit(); // initializes the USIC0 Module USIC0_vInit(); // initializes the USIC1 Module USIC1_vInit(); // ----------------------------------------------------------------------- // Initialization of the Bank Select registers: // ----------------------------------------------------------------------- // USER CODE BEGIN (Init,3) delay(1000); // USER CODE END MAIN_vLockProtecReg(); // lock write security // globally enable interrupts PSW_IEN = 1; } // End of function MAIN_vInit //**************************************************************************** // @Function void MAIN_vUnlockProtecReg(void) // //---------------------------------------------------------------------------- // @Description This function makes it possible to write one protected // register. // //---------------------------------------------------------------------------- // @Returnvalue None // //---------------------------------------------------------------------------- // @Parameters None // //---------------------------------------------------------------------------- // @Date 2025/6/14 // //**************************************************************************** // USER CODE BEGIN (UnlockProtecReg,1) // USER CODE END void MAIN_vUnlockProtecReg(void) { SCU_SLC = 0xAAAA; // command 0 SCU_SLC = 0x5554; // command 1 SCU_SLC = 0x96FF; // command 2 SCU_SLC = 0x0000; // command 3 } // End of function MAIN_vUnlockProtecReg //**************************************************************************** // @Function void MAIN_vLockProtecReg(void) // //---------------------------------------------------------------------------- // @Description This function makes it possible to lock one protected // register. // //---------------------------------------------------------------------------- // @Returnvalue None // //---------------------------------------------------------------------------- // @Parameters None // //---------------------------------------------------------------------------- // @Date 2025/6/14 // //**************************************************************************** // USER CODE BEGIN (LockProtecReg,1) // USER CODE END void MAIN_vLockProtecReg(void) { SCU_SLC = 0xAAAA; // command 0 SCU_SLC = 0x5554; // command 1 SCU_SLC = 0x96FF; // command 2 SCU_SLC = 0x1800; // command 3; SCU_SLC = 0x8EFF; // command 4 } // End of function MAIN_vLockProtecReg //**************************************************************************** // @Function void main(void) // //---------------------------------------------------------------------------- // @Description This is the main function. // //---------------------------------------------------------------------------- // @Returnvalue None // //---------------------------------------------------------------------------- // @Parameters None // //---------------------------------------------------------------------------- // @Date 2025/6/14 // //**************************************************************************** // USER CODE BEGIN (Main,1) adcValue1 = 0x0000; adcValue2 = 0x0000; float voltage1; float voltage2; float pedalOpening0; float pedalOpening1; float ADC_to_Voltage(adcValue) { return (adcValue * 5.0) / 1024.0; } float Calculate_Pedal_Opening(float voltage) { return (voltage / 5.0) * 100.0; } // ¿ÂĬµç¶¯ ´Ë´¦½øÐбäÁ¿¶¨Òå ÔÚMAIN.HÖнøÐбäÁ¿È«¾ÖÉùÃ÷ ubyte ST[8]; // ¿ª¹ØÁ¿²É¼¯¼°¿ØÖÆ ubyte Data3[8], Data4[8], Data5[8],CAN_Mark[8]; // CAN½ÓÊÕÊý¾Ý ÖжϱêÖ¾ ²âÊÔ·¢ËÍÊý¾Ý ubyte CAN_Test[8]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; ubyte CAN_Break_Timer=0,CAN_Break_Flag=0; // CAN¶ÏÏßʱ¼ä ¶ÏÏß±êÖ¾ ubyte CC2_Mark[8],Period_Low[8],Period_High[8]; // »ô¶ûÂÖËÙ ²¶×½ÖÐ¶Ï ÖÜÆÚ¸ßµÍ×Ö½Ú uword Period[8]; // ÖÜÆÚ ubyte ADC_High[8]={0},ADC_Low[8]={0}; // Ä£ÄâÁ¿×ª»»¸ßµÍ×Ö½Ú ubyte T_Mark[8]={0},T_Mark_i[8]={0}; // ¶¨Ê±Æ÷±êÖ¾ // USER CODE END void main(void) { // USER CODE BEGIN (Main,2) adcValue1 = 0x0000; adcValue2 = 0x0000; //¿ÂĬµç¶¯ ³õʼ»¯±äÁ¿ ST[4] = 0xFF; ST[5] = 0xFF; ST[6] = 0x00; // USER CODE END MAIN_vInit(); // USER CODE BEGIN (Main,3) // USER CODE END while(1) { // USER CODE BEGIN (Main,4) SPI_Control(); // SPI¿ØÖÆ whileÖÐÑ­»· // ³ÌÐò´ÓÕâÀ↑ʼִÐÐ ADC_State(); // Ä£ÄâÁ¿×´Ì¬²É¼¯º¯Êý Switch_State(); // ¿ª¹ØÁ¿×´Ì¬²É¼¯º¯Êý Switch_Control(); // ¿ª¹ØÁ¿¿ØÖƺ¯Êý adcValue1 = (ADC_High[1] << 8) | ADC_Low[1]; //tong dao 1 de zhi voltage1 = ADC_to_Voltage(adcValue1); pedalOpening0 = Calculate_Pedal_Opening(voltage1); adcValue2 = (ADC_High[2] << 8) | ADC_Low[2]; //tong dao 2 de zhi voltage2 = ADC_to_Voltage(adcValue2); pedalOpening1 = Calculate_Pedal_Opening(voltage2); // USER CODE END } } // End of function main // USER CODE BEGIN (MAIN_General,10) // USER CODE END //**************************************************************************** // @Module Parallel Ports // @Filename IO.c // @Project tiaoshi.dav //---------------------------------------------------------------------------- // @Controller Infineon XC2267M-104F80 // // @Compiler Keil // // @Codegenerator 2.0 // // @Description This file contains all function prototypes and macros for // the IO module. // //---------------------------------------------------------------------------- // @Date 2025/6/14 14:52:16 // //**************************************************************************** // USER CODE BEGIN (IO_Header,1) // USER CODE END #ifndef _IO_H_ #define _IO_H_ //**************************************************************************** // @Project Includes //**************************************************************************** // USER CODE BEGIN (IO_Header,2) // USER CODE END //**************************************************************************** // @Macros //**************************************************************************** // USER CODE BEGIN (IO_Header,3) // USER CODE END //**************************************************************************** // @Defines //**************************************************************************** #define IO_NO_PULL 0x00 #define IO_PULL_DOWN 0x01 #define IO_PULL_UP 0x02 #define IO_LOOP_BACK 0x03 #define IO_INVERTED_NO_PULL 0x04 #define IO_INVERTED_PULL_DOWN 0x05 #define IO_INVERTED_PULL_UP 0x06 #define IO_INVERTED_LOOP_BACK 0x07 #define IO_PUSH_PULL 0x08 #define IO_OPEN_DRAIN 0x0C //---------------------------------------------------------------------------- // Defines for the parameter PinName //---------------------------------------------------------------------------- #define IO_P0_0 P0_OUT_P0 #define IO_P0_1 P0_OUT_P1 #define IO_P0_2 P0_OUT_P2 #define IO_P0_3 P0_OUT_P3 #define IO_P0_4 P0_OUT_P4 #define IO_P0_5 P0_OUT_P5 #define IO_P0_6 P0_OUT_P6 #define IO_P0_7 P0_OUT_P7 #define IO_P1_0 P1_OUT_P0 #define IO_P1_1 P1_OUT_P1 #define IO_P1_2 P1_OUT_P2 #define IO_P1_3 P1_OUT_P3 #define IO_P1_4 P1_OUT_P4 #define IO_P1_5 P1_OUT_P5 #define IO_P1_6 P1_OUT_P6 #define IO_P1_7 P1_OUT_P7 #define IO_P2_0 P2_OUT_P0 #define IO_P2_1 P2_OUT_P1 #define IO_P2_2 P2_OUT_P2 #define IO_P2_3 P2_OUT_P3 #define IO_P2_4 P2_OUT_P4 #define IO_P2_5 P2_OUT_P5 #define IO_P2_6 P2_OUT_P6 #define IO_P2_7 P2_OUT_P7 #define IO_P2_8 P2_OUT_P8 #define IO_P2_9 P2_OUT_P9 #define IO_P2_10 P2_OUT_P10 #define IO_P2_11 P2_OUT_P11 #define IO_P2_12 P2_OUT_P12 #define IO_P2_13 P2_OUT_P13 #define IO_P4_0 P4_OUT_P0 #define IO_P4_1 P4_OUT_P1 #define IO_P4_2 P4_OUT_P2 #define IO_P4_3 P4_OUT_P3 #define IO_P6_0 P6_OUT_P0 #define IO_P6_1 P6_OUT_P1 #define IO_P6_2 P6_OUT_P2 #define IO_P7_0 P7_OUT_P0 #define IO_P7_1 P7_OUT_P1 #define IO_P7_2 P7_OUT_P2 #define IO_P7_3 P7_OUT_P3 #define IO_P7_4 P7_OUT_P4 #define IO_P10_0 P10_OUT_P0 #define IO_P10_1 P10_OUT_P1 #define IO_P10_2 P10_OUT_P2 #define IO_P10_3 P10_OUT_P3 #define IO_P10_4 P10_OUT_P4 #define IO_P10_5 P10_OUT_P5 #define IO_P10_6 P10_OUT_P6 #define IO_P10_7 P10_OUT_P7 #define IO_P10_8 P10_OUT_P8 #define IO_P10_9 P10_OUT_P9 #define IO_P10_10 P10_OUT_P10 #define IO_P10_11 P10_OUT_P11 #define IO_P10_12 P10_OUT_P12 #define IO_P10_13 P10_OUT_P13 #define IO_P10_14 P10_OUT_P14 #define IO_P10_15 P10_OUT_P15 //---------------------------------------------------------------------------- // Defines used by DAvE //---------------------------------------------------------------------------- #define INIO_P0_0 P0_IN_P0 #define INIO_P0_1 P0_IN_P1 #define INIO_P0_2 P0_IN_P2 #define INIO_P0_3 P0_IN_P3 #define INIO_P0_4 P0_IN_P4 #define INIO_P0_5 P0_IN_P5 #define INIO_P0_6 P0_IN_P6 #define INIO_P0_7 P0_IN_P7 #define SETIO_P0_0 P0_OMRL = 0x0001 #define SETIO_P0_1 P0_OMRL = 0x0002 #define SETIO_P0_2 P0_OMRL = 0x0004 #define SETIO_P0_3 P0_OMRL = 0x0008 #define SETIO_P0_4 P0_OMRL = 0x0010 #define SETIO_P0_5 P0_OMRL = 0x0020 #define SETIO_P0_6 P0_OMRL = 0x0040 #define SETIO_P0_7 P0_OMRL = 0x0080 #define CLEARIO_P0_0 P0_OMRL = 0x0100 #define CLEARIO_P0_1 P0_OMRL = 0x0200 #define CLEARIO_P0_2 P0_OMRL = 0x0400 #define CLEARIO_P0_3 P0_OMRL = 0x0800 #define CLEARIO_P0_4 P0_OMRL = 0x1000 #define CLEARIO_P0_5 P0_OMRL = 0x2000 #define CLEARIO_P0_6 P0_OMRL = 0x4000 #define CLEARIO_P0_7 P0_OMRL = 0x8000 #define TOGGLEIO_P0_0 P0_OMRL = 0x0101 #define TOGGLEIO_P0_1 P0_OMRL = 0x0202 #define TOGGLEIO_P0_2 P0_OMRL = 0x0404 #define TOGGLEIO_P0_3 P0_OMRL = 0x0808 #define TOGGLEIO_P0_4 P0_OMRL = 0x1010 #define TOGGLEIO_P0_5 P0_OMRL = 0x2020 #define TOGGLEIO_P0_6 P0_OMRL = 0x4040 #define TOGGLEIO_P0_7 P0_OMRL = 0x8080 #define CONTROLIO_P0_0(Mode) P0_IOCR00 = (P0_IOCR00 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P0_1(Mode) P0_IOCR01 = (P0_IOCR01 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P0_2(Mode) P0_IOCR02 = (P0_IOCR02 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P0_3(Mode) P0_IOCR03 = (P0_IOCR03 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P0_4(Mode) P0_IOCR04 = (P0_IOCR04 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P0_5(Mode) P0_IOCR05 = (P0_IOCR05 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P0_6(Mode) P0_IOCR06 = (P0_IOCR06 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P0_7(Mode) P0_IOCR07 = (P0_IOCR07 & ~0x00F0) | (Mode << 4) #define INIO_P1_0 P1_IN_P0 #define INIO_P1_1 P1_IN_P1 #define INIO_P1_2 P1_IN_P2 #define INIO_P1_3 P1_IN_P3 #define INIO_P1_4 P1_IN_P4 #define INIO_P1_5 P1_IN_P5 #define INIO_P1_6 P1_IN_P6 #define INIO_P1_7 P1_IN_P7 #define SETIO_P1_0 P1_OMRL = 0x0001 #define SETIO_P1_1 P1_OMRL = 0x0002 #define SETIO_P1_2 P1_OMRL = 0x0004 #define SETIO_P1_3 P1_OMRL = 0x0008 #define SETIO_P1_4 P1_OMRL = 0x0010 #define SETIO_P1_5 P1_OMRL = 0x0020 #define SETIO_P1_6 P1_OMRL = 0x0040 #define SETIO_P1_7 P1_OMRL = 0x0080 #define CLEARIO_P1_0 P1_OMRL = 0x0100 #define CLEARIO_P1_1 P1_OMRL = 0x0200 #define CLEARIO_P1_2 P1_OMRL = 0x0400 #define CLEARIO_P1_3 P1_OMRL = 0x0800 #define CLEARIO_P1_4 P1_OMRL = 0x1000 #define CLEARIO_P1_5 P1_OMRL = 0x2000 #define CLEARIO_P1_6 P1_OMRL = 0x4000 #define CLEARIO_P1_7 P1_OMRL = 0x8000 #define TOGGLEIO_P1_0 P1_OMRL = 0x0101 #define TOGGLEIO_P1_1 P1_OMRL = 0x0202 #define TOGGLEIO_P1_2 P1_OMRL = 0x0404 #define TOGGLEIO_P1_3 P1_OMRL = 0x0808 #define TOGGLEIO_P1_4 P1_OMRL = 0x1010 #define TOGGLEIO_P1_5 P1_OMRL = 0x2020 #define TOGGLEIO_P1_6 P1_OMRL = 0x4040 #define TOGGLEIO_P1_7 P1_OMRL = 0x8080 #define CONTROLIO_P1_0(Mode) P1_IOCR00 = (P1_IOCR00 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P1_1(Mode) P1_IOCR01 = (P1_IOCR01 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P1_2(Mode) P1_IOCR02 = (P1_IOCR02 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P1_3(Mode) P1_IOCR03 = (P1_IOCR03 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P1_4(Mode) P1_IOCR04 = (P1_IOCR04 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P1_5(Mode) P1_IOCR05 = (P1_IOCR05 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P1_6(Mode) P1_IOCR06 = (P1_IOCR06 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P1_7(Mode) P1_IOCR07 = (P1_IOCR07 & ~0x00F0) | (Mode << 4) #define INIO_P2_0 P2_IN_P0 #define INIO_P2_1 P2_IN_P1 #define INIO_P2_2 P2_IN_P2 #define INIO_P2_3 P2_IN_P3 #define INIO_P2_4 P2_IN_P4 #define INIO_P2_5 P2_IN_P5 #define INIO_P2_6 P2_IN_P6 #define INIO_P2_7 P2_IN_P7 #define INIO_P2_8 P2_IN_P8 #define INIO_P2_9 P2_IN_P9 #define INIO_P2_10 P2_IN_P10 #define INIO_P2_11 P2_IN_P11 #define INIO_P2_12 P2_IN_P12 #define INIO_P2_13 P2_IN_P13 #define SETIO_P2_0 P2_OMRL = 0x0001 #define SETIO_P2_1 P2_OMRL = 0x0002 #define SETIO_P2_2 P2_OMRL = 0x0004 #define SETIO_P2_3 P2_OMRL = 0x0008 #define SETIO_P2_4 P2_OMRL = 0x0010 #define SETIO_P2_5 P2_OMRL = 0x0020 #define SETIO_P2_6 P2_OMRL = 0x0040 #define SETIO_P2_7 P2_OMRL = 0x0080 #define SETIO_P2_8 P2_OMRH = 0x0001 #define SETIO_P2_9 P2_OMRH = 0x0002 #define SETIO_P2_10 P2_OMRH = 0x0004 #define SETIO_P2_11 P2_OMRH = 0x0008 #define SETIO_P2_12 P2_OMRH = 0x0010 #define SETIO_P2_13 P2_OMRH = 0x0020 #define CLEARIO_P2_0 P2_OMRL = 0x0100 #define CLEARIO_P2_1 P2_OMRL = 0x0200 #define CLEARIO_P2_2 P2_OMRL = 0x0400 #define CLEARIO_P2_3 P2_OMRL = 0x0800 #define CLEARIO_P2_4 P2_OMRL = 0x1000 #define CLEARIO_P2_5 P2_OMRL = 0x2000 #define CLEARIO_P2_6 P2_OMRL = 0x4000 #define CLEARIO_P2_7 P2_OMRL = 0x8000 #define CLEARIO_P2_8 P2_OMRH = 0x0100 #define CLEARIO_P2_9 P2_OMRH = 0x0200 #define CLEARIO_P2_10 P2_OMRH = 0x0400 #define CLEARIO_P2_11 P2_OMRH = 0x0800 #define CLEARIO_P2_12 P2_OMRH = 0x1000 #define CLEARIO_P2_13 P2_OMRH = 0x2000 #define TOGGLEIO_P2_0 P2_OMRL = 0x0101 #define TOGGLEIO_P2_1 P2_OMRL = 0x0202 #define TOGGLEIO_P2_2 P2_OMRL = 0x0404 #define TOGGLEIO_P2_3 P2_OMRL = 0x0808 #define TOGGLEIO_P2_4 P2_OMRL = 0x1010 #define TOGGLEIO_P2_5 P2_OMRL = 0x2020 #define TOGGLEIO_P2_6 P2_OMRL = 0x4040 #define TOGGLEIO_P2_7 P2_OMRL = 0x8080 #define TOGGLEIO_P2_8 P2_OMRH = 0x0101 #define TOGGLEIO_P2_9 P2_OMRH = 0x0202 #define TOGGLEIO_P2_10 P2_OMRH = 0x0404 #define TOGGLEIO_P2_11 P2_OMRH = 0x0808 #define TOGGLEIO_P2_12 P2_OMRH = 0x1010 #define TOGGLEIO_P2_13 P2_OMRH = 0x2020 #define CONTROLIO_P2_0(Mode) P2_IOCR00 = (P2_IOCR00 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P2_1(Mode) P2_IOCR01 = (P2_IOCR01 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P2_2(Mode) P2_IOCR02 = (P2_IOCR02 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P2_3(Mode) P2_IOCR03 = (P2_IOCR03 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P2_4(Mode) P2_IOCR04 = (P2_IOCR04 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P2_5(Mode) P2_IOCR05 = (P2_IOCR05 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P2_6(Mode) P2_IOCR06 = (P2_IOCR06 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P2_7(Mode) P2_IOCR07 = (P2_IOCR07 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P2_8(Mode) P2_IOCR08 = (P2_IOCR08 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P2_9(Mode) P2_IOCR09 = (P2_IOCR09 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P2_10(Mode) P2_IOCR10 = (P2_IOCR10 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P2_11(Mode) P2_IOCR11 = (P2_IOCR11 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P2_12(Mode) P2_IOCR12 = (P2_IOCR12 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P2_13(Mode) P2_IOCR13 = (P2_IOCR13 & ~0x00F0) | (Mode << 4) #define INIO_P4_0 P4_IN_P0 #define INIO_P4_1 P4_IN_P1 #define INIO_P4_2 P4_IN_P2 #define INIO_P4_3 P4_IN_P3 #define SETIO_P4_0 P4_OMRL = 0x0001 #define SETIO_P4_1 P4_OMRL = 0x0002 #define SETIO_P4_2 P4_OMRL = 0x0004 #define SETIO_P4_3 P4_OMRL = 0x0008 #define CLEARIO_P4_0 P4_OMRL = 0x0100 #define CLEARIO_P4_1 P4_OMRL = 0x0200 #define CLEARIO_P4_2 P4_OMRL = 0x0400 #define CLEARIO_P4_3 P4_OMRL = 0x0800 #define TOGGLEIO_P4_0 P4_OMRL = 0x0101 #define TOGGLEIO_P4_1 P4_OMRL = 0x0202 #define TOGGLEIO_P4_2 P4_OMRL = 0x0404 #define TOGGLEIO_P4_3 P4_OMRL = 0x0808 #define CONTROLIO_P4_0(Mode) P4_IOCR00 = (P4_IOCR00 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P4_1(Mode) P4_IOCR01 = (P4_IOCR01 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P4_2(Mode) P4_IOCR02 = (P4_IOCR02 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P4_3(Mode) P4_IOCR03 = (P4_IOCR03 & ~0x00F0) | (Mode << 4) #define INIO_P5_0 P5_IN_P0 #define INIO_P5_2 P5_IN_P2 #define INIO_P5_3 P5_IN_P3 #define INIO_P5_4 P5_IN_P4 #define INIO_P5_5 P5_IN_P5 #define INIO_P5_8 P5_IN_P8 #define INIO_P5_9 P5_IN_P9 #define INIO_P5_10 P5_IN_P10 #define INIO_P5_11 P5_IN_P11 #define INIO_P5_13 P5_IN_P13 #define INIO_P5_15 P5_IN_P15 #define INIO_P6_0 P6_IN_P0 #define INIO_P6_1 P6_IN_P1 #define INIO_P6_2 P6_IN_P2 #define SETIO_P6_0 P6_OMRL = 0x0001 #define SETIO_P6_1 P6_OMRL = 0x0002 #define SETIO_P6_2 P6_OMRL = 0x0004 #define CLEARIO_P6_0 P6_OMRL = 0x0100 #define CLEARIO_P6_1 P6_OMRL = 0x0200 #define CLEARIO_P6_2 P6_OMRL = 0x0400 #define TOGGLEIO_P6_0 P6_OMRL = 0x0101 #define TOGGLEIO_P6_1 P6_OMRL = 0x0202 #define TOGGLEIO_P6_2 P6_OMRL = 0x0404 #define CONTROLIO_P6_0(Mode) P6_IOCR00 = (P6_IOCR00 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P6_1(Mode) P6_IOCR01 = (P6_IOCR01 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P6_2(Mode) P6_IOCR02 = (P6_IOCR02 & ~0x00F0) | (Mode << 4) #define INIO_P7_0 P7_IN_P0 #define INIO_P7_1 P7_IN_P1 #define INIO_P7_2 P7_IN_P2 #define INIO_P7_3 P7_IN_P3 #define INIO_P7_4 P7_IN_P4 #define SETIO_P7_0 P7_OMRL = 0x0001 #define SETIO_P7_1 P7_OMRL = 0x0002 #define SETIO_P7_2 P7_OMRL = 0x0004 #define SETIO_P7_3 P7_OMRL = 0x0008 #define SETIO_P7_4 P7_OMRL = 0x0010 #define CLEARIO_P7_0 P7_OMRL = 0x0100 #define CLEARIO_P7_1 P7_OMRL = 0x0200 #define CLEARIO_P7_2 P7_OMRL = 0x0400 #define CLEARIO_P7_3 P7_OMRL = 0x0800 #define CLEARIO_P7_4 P7_OMRL = 0x1000 #define TOGGLEIO_P7_0 P7_OMRL = 0x0101 #define TOGGLEIO_P7_1 P7_OMRL = 0x0202 #define TOGGLEIO_P7_2 P7_OMRL = 0x0404 #define TOGGLEIO_P7_3 P7_OMRL = 0x0808 #define TOGGLEIO_P7_4 P7_OMRL = 0x1010 #define CONTROLIO_P7_0(Mode) P7_IOCR00 = (P7_IOCR00 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P7_1(Mode) P7_IOCR01 = (P7_IOCR01 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P7_2(Mode) P7_IOCR02 = (P7_IOCR02 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P7_3(Mode) P7_IOCR03 = (P7_IOCR03 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P7_4(Mode) P7_IOCR04 = (P7_IOCR04 & ~0x00F0) | (Mode << 4) #define INIO_P10_0 P10_IN_P0 #define INIO_P10_1 P10_IN_P1 #define INIO_P10_2 P10_IN_P2 #define INIO_P10_3 P10_IN_P3 #define INIO_P10_4 P10_IN_P4 #define INIO_P10_5 P10_IN_P5 #define INIO_P10_6 P10_IN_P6 #define INIO_P10_7 P10_IN_P7 #define INIO_P10_8 P10_IN_P8 #define INIO_P10_9 P10_IN_P9 #define INIO_P10_10 P10_IN_P10 #define INIO_P10_11 P10_IN_P11 #define INIO_P10_12 P10_IN_P12 #define INIO_P10_13 P10_IN_P13 #define INIO_P10_14 P10_IN_P14 #define INIO_P10_15 P10_IN_P15 #define SETIO_P10_0 P10_OMRL = 0x0001 #define SETIO_P10_1 P10_OMRL = 0x0002 #define SETIO_P10_2 P10_OMRL = 0x0004 #define SETIO_P10_3 P10_OMRL = 0x0008 #define SETIO_P10_4 P10_OMRL = 0x0010 #define SETIO_P10_5 P10_OMRL = 0x0020 #define SETIO_P10_6 P10_OMRL = 0x0040 #define SETIO_P10_7 P10_OMRL = 0x0080 #define SETIO_P10_8 P10_OMRH = 0x0001 #define SETIO_P10_9 P10_OMRH = 0x0002 #define SETIO_P10_10 P10_OMRH = 0x0004 #define SETIO_P10_11 P10_OMRH = 0x0008 #define SETIO_P10_12 P10_OMRH = 0x0010 #define SETIO_P10_13 P10_OMRH = 0x0020 #define SETIO_P10_14 P10_OMRH = 0x0040 #define SETIO_P10_15 P10_OMRH = 0x0080 #define CLEARIO_P10_0 P10_OMRL = 0x0100 #define CLEARIO_P10_1 P10_OMRL = 0x0200 #define CLEARIO_P10_2 P10_OMRL = 0x0400 #define CLEARIO_P10_3 P10_OMRL = 0x0800 #define CLEARIO_P10_4 P10_OMRL = 0x1000 #define CLEARIO_P10_5 P10_OMRL = 0x2000 #define CLEARIO_P10_6 P10_OMRL = 0x4000 #define CLEARIO_P10_7 P10_OMRL = 0x8000 #define CLEARIO_P10_8 P10_OMRH = 0x0100 #define CLEARIO_P10_9 P10_OMRH = 0x0200 #define CLEARIO_P10_10 P10_OMRH = 0x0400 #define CLEARIO_P10_11 P10_OMRH = 0x0800 #define CLEARIO_P10_12 P10_OMRH = 0x1000 #define CLEARIO_P10_13 P10_OMRH = 0x2000 #define CLEARIO_P10_14 P10_OMRH = 0x4000 #define CLEARIO_P10_15 P10_OMRH = 0x8000 #define TOGGLEIO_P10_0 P10_OMRL = 0x0101 #define TOGGLEIO_P10_1 P10_OMRL = 0x0202 #define TOGGLEIO_P10_2 P10_OMRL = 0x0404 #define TOGGLEIO_P10_3 P10_OMRL = 0x0808 #define TOGGLEIO_P10_4 P10_OMRL = 0x1010 #define TOGGLEIO_P10_5 P10_OMRL = 0x2020 #define TOGGLEIO_P10_6 P10_OMRL = 0x4040 #define TOGGLEIO_P10_7 P10_OMRL = 0x8080 #define TOGGLEIO_P10_8 P10_OMRH = 0x0101 #define TOGGLEIO_P10_9 P10_OMRH = 0x0202 #define TOGGLEIO_P10_10 P10_OMRH = 0x0404 #define TOGGLEIO_P10_11 P10_OMRH = 0x0808 #define TOGGLEIO_P10_12 P10_OMRH = 0x1010 #define TOGGLEIO_P10_13 P10_OMRH = 0x2020 #define TOGGLEIO_P10_14 P10_OMRH = 0x4040 #define TOGGLEIO_P10_15 P10_OMRH = 0x8080 #define CONTROLIO_P10_0(Mode) P10_IOCR00 = (P10_IOCR00 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_1(Mode) P10_IOCR01 = (P10_IOCR01 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_2(Mode) P10_IOCR02 = (P10_IOCR02 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_3(Mode) P10_IOCR03 = (P10_IOCR03 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_4(Mode) P10_IOCR04 = (P10_IOCR04 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_5(Mode) P10_IOCR05 = (P10_IOCR05 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_6(Mode) P10_IOCR06 = (P10_IOCR06 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_7(Mode) P10_IOCR07 = (P10_IOCR07 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_8(Mode) P10_IOCR08 = (P10_IOCR08 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_9(Mode) P10_IOCR09 = (P10_IOCR09 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_10(Mode) P10_IOCR10 = (P10_IOCR10 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_11(Mode) P10_IOCR11 = (P10_IOCR11 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_12(Mode) P10_IOCR12 = (P10_IOCR12 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_13(Mode) P10_IOCR13 = (P10_IOCR13 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_14(Mode) P10_IOCR14 = (P10_IOCR14 & ~0x00F0) | (Mode << 4) #define CONTROLIO_P10_15(Mode) P10_IOCR15 = (P10_IOCR15 & ~0x00F0) | (Mode << 4) #define INIO_P15_0 P15_IN_P0 #define INIO_P15_2 P15_IN_P2 #define INIO_P15_4 P15_IN_P4 #define INIO_P15_5 P15_IN_P5 #define INIO_P15_6 P15_IN_P6 // USER CODE BEGIN (IO_Header,4) // USER CODE END //**************************************************************************** // @Typedefs //**************************************************************************** // USER CODE BEGIN (IO_Header,5) // USER CODE END //**************************************************************************** // @Imported Global Variables //**************************************************************************** // USER CODE BEGIN (IO_Header,6) // USER CODE END //**************************************************************************** // @Global Variables //**************************************************************************** // USER CODE BEGIN (IO_Header,7) // USER CODE END //**************************************************************************** // @Prototypes Of Global Functions //**************************************************************************** void IO_vInit(void); // USER CODE BEGIN (IO_Header,8) // USER CODE END //**************************************************************************** // @Interrupt Vectors //**************************************************************************** // USER CODE BEGIN (IO_Header,9) // USER CODE END #endif // ifndef _IO_H_ 这是一部分代码,通过我的代码再修改你的开发
最新发布
06-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值