28 #include "sysconfig.h" 39 #include "stm32f4xx_hal.h" 45 static unsigned char fore_color_h = 0;
46 static unsigned char fore_color_l = 0;
47 static unsigned char back_color_h = 0;
48 static unsigned char back_color_l = 0;
50 static unsigned long f_bsrr_a_h;
51 static unsigned long f_bsrr_b_h;
52 static unsigned long f_bsrr_c_h;
53 static unsigned long f_bsrr_a_l;
54 static unsigned long f_bsrr_b_l;
55 static unsigned long f_bsrr_c_l;
57 static unsigned long b_bsrr_a_h;
58 static unsigned long b_bsrr_b_h;
59 static unsigned long b_bsrr_c_h;
60 static unsigned long b_bsrr_a_l;
61 static unsigned long b_bsrr_b_l;
64 #ifdef GSC_DEV_ENABLE_TOUCHSENSOR 65 static struct st_mutex gpio_mutex;
66 #define lock() mutex_lock(&gpio_mutex, 0) 67 #define unlock() mutex_unlock(&gpio_mutex) 73 #define DATA_TO_GPIOA_BSRR(data) (\ 74 ((((unsigned long)(data & (1<<0))?1:0)<<9) |\ 75 (((unsigned long)(data & (1<<2))?1:0)<<10) |\ 76 (((unsigned long)(data & (1<<7))?1:0)<<8))\ 78 (((((unsigned long)(data & (1<<0))?0:1)<<9) |\ 79 (((unsigned long)(data & (1<<2))?0:1)<<10) |\ 80 (((unsigned long)(data & (1<<7))?0:1)<<8)) << 16)\ 83 #define DATA_TO_GPIOB_BSRR(data) (\ 84 ((((unsigned long)(data & (1<<3))?1:0)<<3) |\ 85 (((unsigned long)(data & (1<<4))?1:0)<<5) |\ 86 (((unsigned long)(data & (1<<5))?1:0)<<4) |\ 87 (((unsigned long)(data & (1<<6))?1:0)<<10))\ 89 (((((unsigned long)(data & (1<<3))?0:1)<<3) |\ 90 (((unsigned long)(data & (1<<4))?0:1)<<5) |\ 91 (((unsigned long)(data & (1<<5))?0:1)<<4) |\ 92 (((unsigned long)(data & (1<<6))?0:1)<<10)) << 16)\ 95 #define DATA_TO_GPIOC_BSRR(data) (\ 96 (((unsigned long)(data & (1<<1))?1:0)<<7)\ 98 ((((unsigned long)(data & (1<<1))?0:1)<<7) << 16)\ 101 static void MX_GPIO_Init(
void)
103 GPIO_InitTypeDef GPIO_InitStruct;
106 __GPIOC_CLK_ENABLE();
107 __GPIOA_CLK_ENABLE();
108 __GPIOB_CLK_ENABLE();
111 GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_7;
112 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
113 GPIO_InitStruct.Pull = GPIO_NOPULL;
114 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
115 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
119 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_8
120 |GPIO_PIN_9|GPIO_PIN_10;
121 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
122 GPIO_InitStruct.Pull = GPIO_NOPULL;
123 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
124 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
128 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_10|GPIO_PIN_3|GPIO_PIN_4
129 |GPIO_PIN_5|GPIO_PIN_6;
130 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
131 GPIO_InitStruct.Pull = GPIO_NOPULL;
132 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
133 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
135 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
140 static inline void rd_active(
void)
143 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
145 GPIOA->BSRR = (((
unsigned long)GPIO_PIN_0) << 16);
150 static inline void rd_idle(
void)
153 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
156 GPIOA->BSRR = (
unsigned long)GPIO_PIN_0;
160 static inline void wr_active(
void)
163 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
165 GPIOA->BSRR = (((
unsigned long)GPIO_PIN_1) << 16);
170 static inline void wr_idle(
void)
173 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
176 GPIOA->BSRR = (
unsigned long)GPIO_PIN_1;
180 static inline void cd_command(
void)
182 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
185 static inline void cd_data(
void)
187 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
190 static inline void set_reset(
unsigned long arg)
192 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, arg);
195 static inline void set_cs(
unsigned long arg)
197 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, arg);
200 static void dir_out_data(
void)
204 GPIO_InitTypeDef GPIO_InitStruct;
207 GPIO_InitStruct.Pin = GPIO_PIN_7;
208 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
209 GPIO_InitStruct.Pull = GPIO_NOPULL;
210 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
211 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
214 GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10;
215 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
216 GPIO_InitStruct.Pull = GPIO_NOPULL;
217 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
218 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
221 GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_3|GPIO_PIN_4
223 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
224 GPIO_InitStruct.Pull = GPIO_NOPULL;
225 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
226 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
229 static void dir_in_data(
void)
233 GPIO_InitTypeDef GPIO_InitStruct;
236 GPIO_InitStruct.Pin = GPIO_PIN_7;
237 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
238 GPIO_InitStruct.Pull = GPIO_NOPULL;
239 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
240 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
243 GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10;
244 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
245 GPIO_InitStruct.Pull = GPIO_NOPULL;
246 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
247 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
250 GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_3|GPIO_PIN_4
252 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
253 GPIO_InitStruct.Pull = GPIO_NOPULL;
254 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
255 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
258 static unsigned char read_8bits(
void)
261 return (((
unsigned char)(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_9)) << 0) |
262 ((
unsigned char)(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_7)) << 1) |
263 ((
unsigned char)(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_10)) << 2) |
264 ((
unsigned char)(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_3)) << 3) |
265 ((
unsigned char)(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5)) << 4) |
266 ((
unsigned char)(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4)) << 5) |
267 ((
unsigned char)(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10)) << 6) |
268 ((
unsigned char)(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8)) << 7));
271 (((GPIOA->IDR & 0x0100) >> 8) << 7) |
272 (((GPIOB->IDR & 0x0400) >> 10) << 6) |
273 (((GPIOB->IDR & 0x0010) >> 4) << 5) |
274 (((GPIOB->IDR & 0x0020) >> 5) << 4) |
275 (((GPIOB->IDR & 0x0008) >> 3) << 3) |
276 (((GPIOA->IDR & 0x0400) >> 10) << 2) |
277 (((GPIOC->IDR & 0x0080) >> 7) << 1) |
278 (((GPIOA->IDR & 0x0200) >> 9) << 0);
282 static void write_8bits(
unsigned char data)
285 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, data & (1<<0));
286 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, data & (1<<1));
287 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, data & (1<<2));
288 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, data & (1<<3));
289 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, data & (1<<4));
290 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, data & (1<<5));
291 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, data & (1<<6));
292 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, data & (1<<7));
298 GPIOA->ODR = ((GPIOA->IDR & (~((1<<9) | (1<<10) | (1<<8)))) | (
299 (((
unsigned short)(data & (1<<0))?1:0)<<9) |
300 (((
unsigned short)(data & (1<<2))?1:0)<<10) |
301 (((
unsigned short)(data & (1<<7))?1:0)<<8)));
302 GPIOB->ODR = ((GPIOB->IDR & (~((1<<3) | (1<<5) | (1<<4) | (1<<10)))) | (
303 (((
unsigned short)(data & (1<<3))?1:0)<<3) |
304 (((
unsigned short)(data & (1<<4))?1:0)<<5) |
305 (((
unsigned short)(data & (1<<5))?1:0)<<4) |
306 (((
unsigned short)(data & (1<<6))?1:0)<<10)));
307 GPIOC->ODR = ((GPIOC->IDR & (~((1<<7)))) | (
308 (((
unsigned short)(data & (1<<1))?1:0)<<7)));
310 GPIOA->BSRR = DATA_TO_GPIOA_BSRR(data);
311 GPIOB->BSRR = DATA_TO_GPIOB_BSRR(data);
312 GPIOC->BSRR = DATA_TO_GPIOC_BSRR(data);
321 static int gpio_read(
struct st_device *dev,
void *data,
unsigned int size)
324 unsigned char *dp = data;
330 for(i=0; i<size/2; i++) {
331 unsigned char oh, ol;
332 #define LCD_PIXEL_3BYTES 333 #ifdef LCD_PIXEL_3BYTES 334 unsigned char ih, im, il;
338 DKPRINTF(0x02,
" %02X", ih);
343 DKPRINTF(0x02,
" %02X", im);
348 DKPRINTF(0x02,
" %02X\n", il);
350 oh = (ih & 0xf8) | ((im & 0xe0) >> 5);
351 ol = ((im & 0x1c) << 3) | ((il & 0xf8) >> 3);
356 DKPRINTF(0x02,
" %02X", ih);
361 DKPRINTF(0x02,
" %02X", im);
373 KXDUMP(0x01, data, size);
378 static int gpio_write(
struct st_device *dev,
const void *data,
unsigned int size)
381 const unsigned char *dp = data;
386 for(i=0; i<size/2; i++) {
388 write_8bits(*(dp + 1));
402 static inline void write_fore_word(
void)
404 GPIOA->BSRR = f_bsrr_a_h;
405 GPIOB->BSRR = f_bsrr_b_h;
406 GPIOC->BSRR = f_bsrr_c_h;
410 GPIOA->BSRR = f_bsrr_a_l;
411 GPIOB->BSRR = f_bsrr_b_l;
412 GPIOC->BSRR = f_bsrr_c_l;
417 static inline void write_back_word(
void)
419 GPIOA->BSRR = b_bsrr_a_h;
420 GPIOB->BSRR = b_bsrr_b_h;
421 GPIOC->BSRR = b_bsrr_c_h;
425 GPIOA->BSRR = b_bsrr_a_l;
426 GPIOB->BSRR = b_bsrr_b_l;
432 static int gpio_ioctl(
struct st_device *dev,
unsigned int com,
unsigned int arg,
void *param)
436 DKFPRINTF(0x02,
"com = %08lX, arg = %08lX\n", com, arg);
465 write_8bits((
unsigned char)((arg >> 8) & 0xff));
470 write_8bits((
unsigned char)((arg >> 0) & 0xff));
480 unsigned char ad_h = ((arg >> 24) & 0xff);
482 unsigned char ad_l = ((arg >> 16) & 0xff);
483 unsigned char dt_l = ((arg >> 0) & 0xff);
507 unsigned char ad_h = ((arg >> 24) & 0xff);
509 unsigned char ad_l = ((arg >> 16) & 0xff);
510 unsigned char dt_h = ((arg >> 8) & 0xff);
511 unsigned char dt_l = ((arg >> 0) & 0xff);
539 unsigned char ad_h = ((arg >> 8) & 0xff);
541 unsigned char ad_l = ((arg >> 0) & 0xff);
542 unsigned long dt = 0;
586 unsigned char dt = (arg & 0xff);
599 unsigned char dt_h = ((arg >> 8) & 0xff);
600 unsigned char dt_l = ((arg >> 0) & 0xff);
635 unsigned char dt_h = ((arg >> 8) & 0xff);
636 unsigned char dt_l = ((arg >> 0) & 0xff);
650 unsigned char dt_hh = ((arg >> 24) & 0xff);
651 unsigned char dt_hl = ((arg >> 16) & 0xff);
652 unsigned char dt_lh = ((arg >> 8) & 0xff);
653 unsigned char dt_ll = ((arg >> 0) & 0xff);
675 fore_color_h = (arg >> 8) & 0xff;
676 fore_color_l = (arg >> 0) & 0xff;
678 f_bsrr_a_h = DATA_TO_GPIOA_BSRR(fore_color_h);
679 f_bsrr_b_h = DATA_TO_GPIOB_BSRR(fore_color_h);
680 f_bsrr_c_h = DATA_TO_GPIOC_BSRR(fore_color_h);
681 f_bsrr_a_l = DATA_TO_GPIOA_BSRR(fore_color_l);
682 f_bsrr_b_l = DATA_TO_GPIOB_BSRR(fore_color_l);
683 f_bsrr_c_l = DATA_TO_GPIOC_BSRR(fore_color_l);
689 back_color_h = (arg >> 8) & 0xff;
690 back_color_l = (arg >> 0) & 0xff;
692 b_bsrr_a_h = DATA_TO_GPIOA_BSRR(back_color_h);
693 b_bsrr_b_h = DATA_TO_GPIOB_BSRR(back_color_h);
694 b_bsrr_c_h = DATA_TO_GPIOC_BSRR(back_color_h);
695 b_bsrr_a_l = DATA_TO_GPIOA_BSRR(back_color_l);
696 b_bsrr_b_l = DATA_TO_GPIOB_BSRR(back_color_l);
697 b_bsrr_c_l = DATA_TO_GPIOC_BSRR(back_color_l);
708 if(fore_color_h == fore_color_l) {
709 GPIOA->BSRR = f_bsrr_a_h;
710 GPIOB->BSRR = f_bsrr_b_h;
711 GPIOC->BSRR = f_bsrr_c_h;
712 for(i=0; i<arg; i++) {
719 for(i=0; i<arg; i++) {
729 int sbit = ((com >> 12) & 0x7);
730 int count = (com & 0x0fff);
731 unsigned char *data = (
unsigned char *)param;
732 unsigned char bit = (0x80 >> sbit);
738 DKPRINTF(0x02,
"sbit=%d count=%d, data=%p\n", sbit, count, data);
739 for(i=0; i<count; i++) {
757 SYSERR_PRINT(
"Unknow command %08lX arg %08lX\n", com, arg);
765 #ifdef GSC_DEV_ENABLE_TOUCHSENSOR 766 ADC_HandleTypeDef hadc1;
769 static void MX_ADC1_Init(
void)
771 hadc1.Instance = ADC1;
773 hadc1.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
774 hadc1.Init.Resolution = ADC_RESOLUTION_12B;
775 hadc1.Init.ScanConvMode = DISABLE;
776 hadc1.Init.ContinuousConvMode = DISABLE;
777 hadc1.Init.DiscontinuousConvMode = DISABLE;
778 hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
779 hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
780 hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
781 hadc1.Init.NbrOfConversion = 1;
782 hadc1.Init.DMAContinuousRequests = DISABLE;
783 hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
785 if (HAL_ADC_Init(&hadc1) != HAL_OK) {
786 SYSERR_PRINT(
"ADC1 Initialize error");
793 sConfig.Channel = ADC_CHANNEL_8;
795 sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
796 if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) {
797 SYSERR_PRINT(
"ADC1 Config error");
802 void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
804 GPIO_InitTypeDef GPIO_InitStruct;
805 if(hadc->Instance==ADC1) {
806 __HAL_RCC_ADC1_CLK_ENABLE();
807 GPIO_InitStruct.Pin = GPIO_PIN_4;
808 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
809 GPIO_InitStruct.Pull = GPIO_NOPULL;
810 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
812 GPIO_InitStruct.Pin = GPIO_PIN_0;
813 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
814 GPIO_InitStruct.Pull = GPIO_NOPULL;
815 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
827 unsigned long read_pos_x(
void)
829 GPIO_InitTypeDef GPIO_InitStruct;
830 ADC_ChannelConfTypeDef sConfig;
835 GPIO_InitStruct.Pin = GPIO_PIN_4;
836 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
837 GPIO_InitStruct.Pull = GPIO_NOPULL;
840 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
844 GPIO_InitStruct.Pin = GPIO_PIN_9;
845 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
847 GPIO_InitStruct.Pull = GPIO_PULLUP;
849 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
850 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
858 GPIO_InitStruct.Pin = GPIO_PIN_7;
859 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
860 GPIO_InitStruct.Pull = GPIO_NOPULL;
862 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
863 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
864 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_SET);
869 GPIO_InitStruct.Pin = GPIO_PIN_0;
870 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
871 GPIO_InitStruct.Pull = GPIO_NOPULL;
872 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
873 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
874 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
876 sConfig.Channel = ADC_CHANNEL_4;
878 sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
879 if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
881 SYSERR_PRINT(
"ADC1 Config error");
884 HAL_ADC_Start(&hadc1);
885 HAL_ADC_PollForConversion(&hadc1, 100);
886 val = HAL_ADC_GetValue(&hadc1);
887 HAL_ADC_Stop(&hadc1);
894 unsigned int read_pos_y(
void)
896 GPIO_InitTypeDef GPIO_InitStruct;
897 ADC_ChannelConfTypeDef sConfig;
902 GPIO_InitStruct.Pin = GPIO_PIN_7;
903 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
906 GPIO_InitStruct.Pull = GPIO_PULLDOWN;
907 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
908 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
912 GPIO_InitStruct.Pin = GPIO_PIN_0;
913 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
914 GPIO_InitStruct.Pull = GPIO_NOPULL;
917 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
925 GPIO_InitStruct.Pin = GPIO_PIN_4;
926 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
927 GPIO_InitStruct.Pull = GPIO_NOPULL;
928 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
929 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
930 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
935 GPIO_InitStruct.Pin = GPIO_PIN_9;
936 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
937 GPIO_InitStruct.Pull = GPIO_NOPULL;
938 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
939 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
940 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);
942 sConfig.Channel = ADC_CHANNEL_8;
944 sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
945 if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
947 SYSERR_PRINT(
"ADC1 Config error");
950 HAL_ADC_Start(&hadc1);
951 HAL_ADC_PollForConversion(&hadc1, 100);
952 val = HAL_ADC_GetValue(&hadc1);
953 HAL_ADC_Stop(&hadc1);
959 #ifdef GSC_DEV_ENABLE_TOUCHSENSOR 960 #define SIZEOFSTACK (1024*1) 962 static unsigned int stack[SIZEOFSTACK/
sizeof(
unsigned int)];
965 static void ts_timer_func(
void *
sp,
unsigned long long systime)
970 static int ts_mxl = 16;
971 static int ts_xl = 576;
972 static int ts_mxr = (GSC_GRAPHICS_DISPLAY_WIDTH-16);
973 static int ts_xr = 3667;
975 static int ts_myt = 16;
976 static int ts_yt = 659;
977 static int ts_myb = (GSC_GRAPHICS_DISPLAY_HEIGHT-16);
978 static int ts_yb = 3446;
980 static volatile int flg_touch = 0;
983 static int ts_low_val[2];
1000 ev.private_data = (
void *)ts_low_val;
1006 if((vx < 4000) && (vy > 420)) {
1007 DKPRINTF(0x02,
"VX= %4ld, VY= %4ld\n", vx, vy);
1010 px = (((vx - ts_xl + ts_mxl) * (ts_mxr - ts_mxl)) / (ts_xr - ts_xl)) + ts_mxl;
1011 py = (((vy - ts_yt + ts_myt) * (ts_myb - ts_myt)) / (ts_yb - ts_yt)) + ts_myt;
1012 DKPRINTF(0x01,
"X = %4ld, Y = %4ld\n", px, py);
1014 if(flg_touch == 0) {
1015 DKPRINTF(0x01,
"TS START\n");
1024 }
else if((px != lpos_x) || (py != lpos_y)) {
1032 DKPRINTF(0x01,
"TS STAY\n");
1035 if(flg_touch != 0) {
1036 DKPRINTF(0x02,
"TS END\n");
1051 #endif // GSC_DEV_ENABLE_TOUCHSENSOR 1053 static int gpio_register(
struct st_device *dev,
char *param)
1055 #ifdef GSC_DEV_ENABLE_TOUCHSENSOR 1057 __HAL_RCC_ADC1_CLK_ENABLE();
1061 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
1062 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
1063 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
1064 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
1065 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET);
1067 #ifdef GSC_DEV_ENABLE_TOUCHSENSOR 1071 stack, SIZEOFSTACK, 0);
1079 const struct st_device lcd_gpio_device = {
1081 .explan =
"STM32F4 LCD GPIO",
1082 .register_dev = gpio_register,
1084 .write = gpio_write,
1085 .ioctl = gpio_ioctl,
1089 #ifdef GSC_DEV_ENABLE_TOUCHSENSOR 1093 static int ts_analog_ioctl(
struct st_device *dev,
unsigned int com,
unsigned int arg,
void *param)
1097 DKFPRINTF(0x02,
"com = %08lX, arg = %08lX\n", com, arg);
1099 switch(
IOCTL(com)) {
1105 DKPRINTF(0x01,
"LEFT POS=%4d, VAL=%5d\n", cd->left_pos, cd->left_val);
1106 DKPRINTF(0x01,
"RIGHT POS=%4d, VAL=%5d\n", cd->right_pos, cd->right_val);
1107 DKPRINTF(0x01,
"TOP POS=%4d, VAL=%5d\n", cd->top_pos, cd->top_val);
1108 DKPRINTF(0x01,
"BOTTOM POS=%4d, VAL=%5d\n", cd->bottom_pos, cd->bottom_val);
1110 ts_mxl = cd->left_pos;
1111 ts_xl = cd->left_val;
1112 ts_mxr = cd->right_pos;
1113 ts_xr = cd->right_val;
1115 ts_myt = cd->top_pos;
1116 ts_yt = cd->top_val;
1117 ts_myb = cd->bottom_pos;
1118 ts_yb = cd->bottom_val;
1123 SYSERR_PRINT(
"Unknow command %08lX arg %08lX\n", com, arg);
1131 const struct st_device ts_analog_device = {
1133 .explan =
"STM32F4 LCD Touch Sensor",
1134 .ioctl = ts_analog_ioctl,
1137 #endif // GSC_DEV_ENABLE_TOUCHSENSOR #define IOCTL(ioctl)
ioctlコマンド
#define IOCMD_VIO_READ_DATA8
コントローラデバイスから8ビットデータを読み出す
#define IOCMD_VIO_WRITE_REG16
コントローラデバイスのレジスタに16ビットデータを書き込む
#define IOCMD_VIO_REPEAT_BITS
指定のビットデータを描画データ0、1で描画する
#define EVT_TOUCHEND
(画面に)タッチした状態から離した
#define IOCMD_VIO_LOCK_BUS
バスをMUTEXロックする
#define IOCMD_VIO_WRITE_DATA16
コントローラデバイスに16ビットデータを書き込む
#define IOCMD_VIO_SET_RESET
デバイスのリセットを設定する
#define DEF_DEV_NAME_TS
標準タッチセンサデバイス名
#define IOCMD_VIO_WRITE_COMMAND
コントローラデバイスにコマンドを書き込む
int set_event(struct st_sysevent *event)
システムイベントを登録する
#define IOCMD_VIO_READ_REG32
コントローラデバイスのレジスタより32ビットデータを読み出す
int task_add(task_func func, char *name, int priority, struct st_tcb *tcb, unsigned int *stack, int stack_size, char *arg)
タスクを追加する
int register_timer_func(timer_func func, unsigned long interval)
周期処理を追加する
#define IOCMD_VIO_REPEAT_DATA
描画データ0で指定ドット数描画する
void task_pause(void)
タスクを停止する
unsigned short what
イベント種類
static int ts_task(char *arg)
#define IOCMD_VIO_SET_WRITEDATA0
描画データ0を設定する
unsigned short pos_x
イベント発生X座標
#define IOCMD_VIO_NOLOCK_WRITE_DATA16
コントローラデバイスに16ビットデータを書き込む(ロックは無視)
#define IOCMD_VIO_SET_WRITEDATA1
描画データ1を設定する
#define IOCMD_VIO_SET_CS
CSを設定する
#define IOCMD_VIO_WRITE_DATA32
コントローラデバイスに32ビットデータを書き込む
#define EVT_TOUCHSTART
(画面に)タッチした
#define EVT_TOUCHMOVE
(画面に)タッチしたまま動かした
void wait_utime(unsigned int time)
指定時間待つ
void task_wakeup_id_ISR(void *sp, int id)
idタスクを実行する
#define IOCMD_VIO_UNLOCK_BUS
バスをMUTEXアンロックする
#define IOCMD_VIO_WRITE_DATA8
コントローラデバイスに8ビットデータを書き込む
static unsigned long b_bsrr_c_l
$gsc タッチセンサデバイスを有効にする
#define IOCMD_VIO_WRITE_REG8
コントローラデバイスのレジスタに8ビットデータを書き込む
#define DEF_DEV_NAME_VIDEOIO
標準ビデオIOデバイスドライバ名
unsigned short pos_y
イベント発生Y座標
char name[MAX_DEVNAMELRN]
デバイス名文字列
void mutex_register_ISR(struct st_mutex *mutex, const char *name)
MUTEXを登録する
#define IOCMD_TS_SET_CALIB
キャリブレーションデータを設定する