| 
									
										
										
										
											2023-06-26 18:07:08 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | #include "board.h"
 | 
					
						
							| 
									
										
										
										
											2023-09-09 17:27:06 +08:00
										 |  |  |  | #include "stm32f10x.h"
 | 
					
						
							| 
									
										
										
										
											2023-06-26 18:07:08 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-09 17:27:06 +08:00
										 |  |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2023-06-26 18:07:08 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-09 17:27:06 +08:00
										 |  |  |  | 输入通道对应关系 | 
					
						
							|  |  |  |  | PC3|PC2|PC1|PC0|PB9|PB8|PB7|PB6|PB5|PC12 | 
					
						
							|  |  |  |  | IN0|IN1|IN2|IN3|IN4|IN5|IN6|IN7|IN8|IN9 | 
					
						
							| 
									
										
										
										
											2023-06-26 18:07:08 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-09 17:27:06 +08:00
										 |  |  |  | */ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #define GPIO_Initer() {.GPIO_Speed=GPIO_Speed_50MHz,\
 | 
					
						
							|  |  |  |  |   .GPIO_Mode=GPIO_Mode_IPU,\ | 
					
						
							| 
									
										
										
										
											2023-06-26 18:07:08 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | typedef struct{ | 
					
						
							|  |  |  |  |   const char *name; | 
					
						
							|  |  |  |  |   void (*gpio_clock_fun)(uint32_t,FunctionalState); | 
					
						
							|  |  |  |  |   uint32_t gpio_rcc; | 
					
						
							|  |  |  |  |   GPIO_TypeDef *gpio_base; | 
					
						
							|  |  |  |  |   uint16_t gpio_pin; | 
					
						
							|  |  |  |  |   volatile uint32_t *bitmap_pin; | 
					
						
							|  |  |  |  | }gpioin_dtb; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | static const gpioin_dtb g_dtb[]={ | 
					
						
							| 
									
										
										
										
											2023-09-09 17:27:06 +08:00
										 |  |  |  |   { | 
					
						
							|  |  |  |  |     .name="gpioin0", | 
					
						
							|  |  |  |  |     .gpio_clock_fun=RCC_APB2PeriphClockCmd, | 
					
						
							|  |  |  |  |     .gpio_rcc=RCC_APB2Periph_GPIOC, | 
					
						
							|  |  |  |  |     .gpio_base=GPIOC, | 
					
						
							|  |  |  |  |     .gpio_pin=3, | 
					
						
							|  |  |  |  |     .bitmap_pin=&PININ(C,3), | 
					
						
							|  |  |  |  |   }, | 
					
						
							| 
									
										
										
										
											2023-06-26 18:07:08 +08:00
										 |  |  |  |   { | 
					
						
							|  |  |  |  |     .name="gpioin1", | 
					
						
							| 
									
										
										
										
											2023-09-09 17:27:06 +08:00
										 |  |  |  |     .gpio_clock_fun=RCC_APB2PeriphClockCmd, | 
					
						
							|  |  |  |  |     .gpio_rcc=RCC_APB2Periph_GPIOC, | 
					
						
							|  |  |  |  |     .gpio_base=GPIOC, | 
					
						
							|  |  |  |  |     .gpio_pin=2, | 
					
						
							|  |  |  |  |     .bitmap_pin=&PININ(C,2), | 
					
						
							| 
									
										
										
										
											2023-06-26 18:07:08 +08:00
										 |  |  |  |   }, | 
					
						
							|  |  |  |  |   { | 
					
						
							|  |  |  |  |     .name="gpioin2", | 
					
						
							| 
									
										
										
										
											2023-09-09 17:27:06 +08:00
										 |  |  |  |     .gpio_clock_fun=RCC_APB2PeriphClockCmd, | 
					
						
							|  |  |  |  |     .gpio_rcc=RCC_APB2Periph_GPIOC, | 
					
						
							|  |  |  |  |     .gpio_base=GPIOC, | 
					
						
							|  |  |  |  |     .gpio_pin=1, | 
					
						
							|  |  |  |  |     .bitmap_pin=&PININ(C,1), | 
					
						
							| 
									
										
										
										
											2023-06-26 18:07:08 +08:00
										 |  |  |  |   }, | 
					
						
							|  |  |  |  |   { | 
					
						
							|  |  |  |  |     .name="gpioin3", | 
					
						
							| 
									
										
										
										
											2023-09-09 17:27:06 +08:00
										 |  |  |  |     .gpio_clock_fun=RCC_APB2PeriphClockCmd, | 
					
						
							|  |  |  |  |     .gpio_rcc=RCC_APB2Periph_GPIOC, | 
					
						
							|  |  |  |  |     .gpio_base=GPIOC, | 
					
						
							|  |  |  |  |     .gpio_pin=0, | 
					
						
							|  |  |  |  |     .bitmap_pin=&PININ(C,0), | 
					
						
							| 
									
										
										
										
											2023-06-26 18:07:08 +08:00
										 |  |  |  |   }, | 
					
						
							|  |  |  |  |   { | 
					
						
							|  |  |  |  |     .name="gpioin4", | 
					
						
							| 
									
										
										
										
											2023-09-09 17:27:06 +08:00
										 |  |  |  |     .gpio_clock_fun=RCC_APB2PeriphClockCmd, | 
					
						
							|  |  |  |  |     .gpio_rcc=RCC_APB2Periph_GPIOB, | 
					
						
							| 
									
										
										
										
											2023-06-26 18:07:08 +08:00
										 |  |  |  |     .gpio_base=GPIOB, | 
					
						
							|  |  |  |  |     .gpio_pin=9, | 
					
						
							|  |  |  |  |     .bitmap_pin=&PININ(B,9), | 
					
						
							|  |  |  |  |   }, | 
					
						
							| 
									
										
										
										
											2023-09-09 17:27:06 +08:00
										 |  |  |  |   { | 
					
						
							|  |  |  |  |     .name="gpioin5", | 
					
						
							|  |  |  |  |     .gpio_clock_fun=RCC_APB2PeriphClockCmd, | 
					
						
							|  |  |  |  |     .gpio_rcc=RCC_APB2Periph_GPIOB, | 
					
						
							|  |  |  |  |     .gpio_base=GPIOB, | 
					
						
							|  |  |  |  |     .gpio_pin=8, | 
					
						
							|  |  |  |  |     .bitmap_pin=&PININ(B,8), | 
					
						
							|  |  |  |  |   }, | 
					
						
							|  |  |  |  |   { | 
					
						
							|  |  |  |  |     .name="gpioin6", | 
					
						
							|  |  |  |  |     .gpio_clock_fun=RCC_APB2PeriphClockCmd, | 
					
						
							|  |  |  |  |     .gpio_rcc=RCC_APB2Periph_GPIOB, | 
					
						
							|  |  |  |  |     .gpio_base=GPIOB, | 
					
						
							|  |  |  |  |     .gpio_pin=7, | 
					
						
							|  |  |  |  |     .bitmap_pin=&PININ(B,7), | 
					
						
							|  |  |  |  |   }, | 
					
						
							|  |  |  |  |   { | 
					
						
							|  |  |  |  |     .name="gpioin7", | 
					
						
							|  |  |  |  |     .gpio_clock_fun=RCC_APB2PeriphClockCmd, | 
					
						
							|  |  |  |  |     .gpio_rcc=RCC_APB2Periph_GPIOB, | 
					
						
							|  |  |  |  |     .gpio_base=GPIOB, | 
					
						
							|  |  |  |  |     .gpio_pin=6, | 
					
						
							|  |  |  |  |     .bitmap_pin=&PININ(B,6), | 
					
						
							|  |  |  |  |   }, | 
					
						
							|  |  |  |  |   { | 
					
						
							|  |  |  |  |     .name="gpioin8", | 
					
						
							|  |  |  |  |     .gpio_clock_fun=RCC_APB2PeriphClockCmd, | 
					
						
							|  |  |  |  |     .gpio_rcc=RCC_APB2Periph_GPIOB, | 
					
						
							|  |  |  |  |     .gpio_base=GPIOB, | 
					
						
							|  |  |  |  |     .gpio_pin=5, | 
					
						
							|  |  |  |  |     .bitmap_pin=&PININ(B,5), | 
					
						
							|  |  |  |  |   }, | 
					
						
							|  |  |  |  |   { | 
					
						
							|  |  |  |  |     .name="gpioin9", | 
					
						
							|  |  |  |  |     .gpio_clock_fun=RCC_APB2PeriphClockCmd, | 
					
						
							|  |  |  |  |     .gpio_rcc=RCC_APB2Periph_GPIOC, | 
					
						
							|  |  |  |  |     .gpio_base=GPIOC, | 
					
						
							|  |  |  |  |     .gpio_pin=12, | 
					
						
							|  |  |  |  |     .bitmap_pin=&PININ(C,12), | 
					
						
							|  |  |  |  |   }, | 
					
						
							| 
									
										
										
										
											2023-06-26 18:07:08 +08:00
										 |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | typedef struct{ | 
					
						
							|  |  |  |  |   const gpioin_dtb *dtb; | 
					
						
							|  |  |  |  | }self_data; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | static self_data g_self[LENGTH(g_dtb)]; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | def_find_fun(gpioin_dtb,g_dtb) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | static int init(gpioin_def *g) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   param_check(g); | 
					
						
							|  |  |  |  |   if(g->private_data) return 0; | 
					
						
							|  |  |  |  |   GPIO_InitTypeDef init=GPIO_Initer(); | 
					
						
							|  |  |  |  |   int index; | 
					
						
							|  |  |  |  |   const gpioin_dtb *dtb=find(g->name,&index); | 
					
						
							|  |  |  |  |   self_data *self=&g_self[index]; | 
					
						
							|  |  |  |  |   self->dtb=dtb; | 
					
						
							|  |  |  |  |   g->private_data=self; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   dtb->gpio_clock_fun(dtb->gpio_rcc,ENABLE); | 
					
						
							|  |  |  |  | 	init.GPIO_Pin = 1<<dtb->gpio_pin;	  | 
					
						
							|  |  |  |  | 	GPIO_Init(dtb->gpio_base, &init);	 | 
					
						
							|  |  |  |  |   return 0; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | static int deinit(gpioin_def *g) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   return 0; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | static int state(gpioin_def *g) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   param_check(g); | 
					
						
							|  |  |  |  |   param_check(g->private_data); | 
					
						
							|  |  |  |  |   self_data *self=g->private_data; | 
					
						
							| 
									
										
										
										
											2023-09-09 17:27:06 +08:00
										 |  |  |  |   // 电路上0为导通,逻辑上1为真,这里反向
 | 
					
						
							|  |  |  |  |   return !(*self->dtb->bitmap_pin); | 
					
						
							| 
									
										
										
										
											2023-06-26 18:07:08 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-09 17:27:06 +08:00
										 |  |  |  | gpioin_init_export(gpioin0,init,deinit,state,0) | 
					
						
							| 
									
										
										
										
											2023-06-26 18:07:08 +08:00
										 |  |  |  | gpioin_init_export(gpioin1,init,deinit,state,0) | 
					
						
							|  |  |  |  | gpioin_init_export(gpioin2,init,deinit,state,0) | 
					
						
							|  |  |  |  | gpioin_init_export(gpioin3,init,deinit,state,0) | 
					
						
							|  |  |  |  | gpioin_init_export(gpioin4,init,deinit,state,0) | 
					
						
							| 
									
										
										
										
											2023-09-09 17:27:06 +08:00
										 |  |  |  | gpioin_init_export(gpioin5,init,deinit,state,0) | 
					
						
							|  |  |  |  | gpioin_init_export(gpioin6,init,deinit,state,0) | 
					
						
							|  |  |  |  | gpioin_init_export(gpioin7,init,deinit,state,0) | 
					
						
							|  |  |  |  | gpioin_init_export(gpioin8,init,deinit,state,0) | 
					
						
							|  |  |  |  | gpioin_init_export(gpioin9,init,deinit,state,0) | 
					
						
							| 
									
										
										
										
											2023-06-26 18:07:08 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 |