From f024e4e23e2ec83805f422b0ee075222982b965f Mon Sep 17 00:00:00 2001 From: "michael.divia" <michael.divia@etu.hesge.ch> Date: Fri, 7 Jun 2024 10:02:56 +0200 Subject: [PATCH] Touch Screen Working --- .cproject | 40 ++++++++++++------------- src/Labo_Keyboard.c | 15 +++++++--- src/touch.c | 72 +++++++++++++++++++++++++++++++++++++++++++++ src/touch.h | 20 +++++++++++++ 4 files changed, 123 insertions(+), 24 deletions(-) create mode 100644 src/touch.c create mode 100644 src/touch.h diff --git a/.cproject b/.cproject index 66731b9..6b399a5 100644 --- a/.cproject +++ b/.cproject @@ -23,7 +23,7 @@ <tool id="com.crt.advproject.cpp.exe.debug.1161736663" name="MCU C++ Compiler" superClass="com.crt.advproject.cpp.exe.debug"> <option id="com.crt.advproject.cpp.hdrlib.678266389" name="Library headers" superClass="com.crt.advproject.cpp.hdrlib" useByScannerDiscovery="false"/> <option id="com.crt.advproject.cpp.fpu.13202551" name="Floating point" superClass="com.crt.advproject.cpp.fpu" useByScannerDiscovery="true"/> - <option id="gnu.cpp.compiler.option.preprocessor.def.310449329" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false"/> + <option id="gnu.cpp.compiler.option.preprocessor.def.310449329" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false"/> </tool> <tool id="com.crt.advproject.gcc.exe.debug.1331006025" name="MCU C Compiler" superClass="com.crt.advproject.gcc.exe.debug"> <option id="com.crt.advproject.gcc.thumb.327103022" name="Thumb mode" superClass="com.crt.advproject.gcc.thumb" useByScannerDiscovery="false" value="true" valueType="boolean"/> @@ -40,11 +40,11 @@ <option id="gnu.c.compiler.option.optimization.flags.1816103936" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common" valueType="string"/> <option id="com.crt.advproject.gcc.hdrlib.1233635811" name="Library headers" superClass="com.crt.advproject.gcc.hdrlib" useByScannerDiscovery="false" value="Redlib" valueType="enumerated"/> <option id="com.crt.advproject.gcc.fpu.1350464088" name="Floating point" superClass="com.crt.advproject.gcc.fpu" useByScannerDiscovery="true"/> - <option id="com.crt.advproject.gcc.specs.1483065204" superClass="com.crt.advproject.gcc.specs" useByScannerDiscovery="false" value="com.crt.advproject.gcc.specs.codered" valueType="enumerated"/> - <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.495808465" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + <option id="com.crt.advproject.gcc.specs.1483065204" name="Specs" superClass="com.crt.advproject.gcc.specs" useByScannerDiscovery="false" value="com.crt.advproject.gcc.specs.codered" valueType="enumerated"/> + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.495808465" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> <listOptionValue builtIn="false" value=""${workspace_loc:/CMSIS_CORE_LPC17xx/inc}""/> </option> - <option id="com.crt.advproject.gcc.exe.debug.option.optimization.level.2000074488" superClass="com.crt.advproject.gcc.exe.debug.option.optimization.level" useByScannerDiscovery="true"/> + <option id="com.crt.advproject.gcc.exe.debug.option.optimization.level.2000074488" name="Optimization Level" superClass="com.crt.advproject.gcc.exe.debug.option.optimization.level" useByScannerDiscovery="true"/> <inputType id="com.crt.advproject.compiler.input.1058785932" superClass="com.crt.advproject.compiler.input"/> </tool> <tool id="com.crt.advproject.gas.exe.debug.1410871385" name="MCU Assembler" superClass="com.crt.advproject.gas.exe.debug"> @@ -53,8 +53,8 @@ <option id="gnu.both.asm.option.flags.crt.231436674" name="Assembler flags" superClass="gnu.both.asm.option.flags.crt" value="-c -x assembler-with-cpp -DDEBUG -D__CODE_RED -DCORE_M3 -D__USE_CMSIS=CMSIS_CORE_LPC17xx -D__LPC17XX__ -D__REDLIB__" valueType="string"/> <option id="com.crt.advproject.gas.hdrlib.125352232" name="Library headers" superClass="com.crt.advproject.gas.hdrlib" value="Redlib" valueType="enumerated"/> <option id="com.crt.advproject.gas.fpu.1375562808" name="Floating point" superClass="com.crt.advproject.gas.fpu"/> - <option id="com.crt.advproject.gas.specs.1003653227" superClass="com.crt.advproject.gas.specs" value="com.crt.advproject.gas.specs.codered" valueType="enumerated"/> - <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.7746426" superClass="gnu.both.asm.option.include.paths" valueType="includePath"> + <option id="com.crt.advproject.gas.specs.1003653227" name="Specs" superClass="com.crt.advproject.gas.specs" value="com.crt.advproject.gas.specs.codered" valueType="enumerated"/> + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.7746426" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath"> <listOptionValue builtIn="false" value=""${workspace_loc:/CMSIS_CORE_LPC17xx/inc}""/> </option> <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1391121765" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> @@ -83,16 +83,16 @@ <listOptionValue builtIn="false" value="--gc-sections"/> <listOptionValue builtIn="false" value="-print-memory-usage"/> </option> - <option id="com.crt.advproject.link.gcc.hdrlib.1760099707" name="Library" superClass="com.crt.advproject.link.gcc.hdrlib" value="com.crt.advproject.gcc.link.hdrlib.codered.none" valueType="enumerated"/> + <option id="com.crt.advproject.link.gcc.hdrlib.1760099707" name="Library" superClass="com.crt.advproject.link.gcc.hdrlib" value="com.crt.advproject.gcc.link.hdrlib.codered.semihost" valueType="enumerated"/> <option id="com.crt.advproject.link.fpu.475700601" name="Floating point" superClass="com.crt.advproject.link.fpu"/> <option id="com.crt.advproject.link.gcc.multicore.master.1625029294" name="Multicore master" superClass="com.crt.advproject.link.gcc.multicore.master"/> - <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.libs.1468852738" superClass="gnu.c.link.option.libs" valueType="libs"> + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.libs.1468852738" name="Libraries (-l)" superClass="gnu.c.link.option.libs" valueType="libs"> <listOptionValue builtIn="false" value="CMSIS_CORE_LPC17xx"/> </option> - <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.paths.1795555647" superClass="gnu.c.link.option.paths" valueType="libPaths"> + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.paths.1795555647" name="Library search path (-L)" superClass="gnu.c.link.option.paths" valueType="libPaths"> <listOptionValue builtIn="false" value=""${workspace_loc:/CMSIS_CORE_LPC17xx/Debug}""/> </option> - <option id="com.crt.advproject.link.crpenable.2056618516" superClass="com.crt.advproject.link.crpenable" value="true" valueType="boolean"/> + <option id="com.crt.advproject.link.crpenable.2056618516" name="Enable automatic placement of Code Read Protection field in image" superClass="com.crt.advproject.link.crpenable" value="true" valueType="boolean"/> <inputType id="cdt.managedbuild.tool.gnu.c.linker.input.111018516" superClass="cdt.managedbuild.tool.gnu.c.linker.input"> <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> <additionalInput kind="additionalinput" paths="$(LIBS)"/> @@ -141,9 +141,9 @@ </option> <option id="gnu.c.compiler.option.misc.other.459010815" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections" valueType="string"/> <option id="gnu.c.compiler.option.optimization.flags.2123484550" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common" valueType="string"/> - <option id="com.crt.advproject.gcc.hdrlib.1035408900" superClass="com.crt.advproject.gcc.hdrlib" useByScannerDiscovery="false" value="Redlib" valueType="enumerated"/> - <option id="com.crt.advproject.gcc.specs.2122165542" superClass="com.crt.advproject.gcc.specs" useByScannerDiscovery="false" value="com.crt.advproject.gcc.specs.codered" valueType="enumerated"/> - <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.1909001652" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + <option id="com.crt.advproject.gcc.hdrlib.1035408900" name="Library headers" superClass="com.crt.advproject.gcc.hdrlib" useByScannerDiscovery="false" value="Redlib" valueType="enumerated"/> + <option id="com.crt.advproject.gcc.specs.2122165542" name="Specs" superClass="com.crt.advproject.gcc.specs" useByScannerDiscovery="false" value="com.crt.advproject.gcc.specs.codered" valueType="enumerated"/> + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.1909001652" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> <listOptionValue builtIn="false" value=""${workspace_loc:/CMSIS_CORE_LPC17xx/inc}""/> </option> <inputType id="com.crt.advproject.compiler.input.657861116" superClass="com.crt.advproject.compiler.input"/> @@ -152,9 +152,9 @@ <option id="com.crt.advproject.gas.thumb.8052322" name="Thumb mode" superClass="com.crt.advproject.gas.thumb" value="true" valueType="boolean"/> <option id="com.crt.advproject.gas.arch.1627140913" name="Architecture" superClass="com.crt.advproject.gas.arch" value="com.crt.advproject.gas.target.cm3" valueType="enumerated"/> <option id="gnu.both.asm.option.flags.crt.323389192" name="Assembler flags" superClass="gnu.both.asm.option.flags.crt" value="-c -x assembler-with-cpp -DNDEBUG -D__CODE_RED -DCORE_M3 -D__USE_CMSIS=CMSIS_CORE_LPC17xx -D__LPC17XX__ -D__REDLIB__" valueType="string"/> - <option id="com.crt.advproject.gas.hdrlib.780335802" superClass="com.crt.advproject.gas.hdrlib" value="Redlib" valueType="enumerated"/> - <option id="com.crt.advproject.gas.specs.1946253947" superClass="com.crt.advproject.gas.specs" value="com.crt.advproject.gas.specs.codered" valueType="enumerated"/> - <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.1473592508" superClass="gnu.both.asm.option.include.paths" valueType="includePath"> + <option id="com.crt.advproject.gas.hdrlib.780335802" name="Library headers" superClass="com.crt.advproject.gas.hdrlib" value="Redlib" valueType="enumerated"/> + <option id="com.crt.advproject.gas.specs.1946253947" name="Specs" superClass="com.crt.advproject.gas.specs" value="com.crt.advproject.gas.specs.codered" valueType="enumerated"/> + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.1473592508" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath"> <listOptionValue builtIn="false" value=""${workspace_loc:/CMSIS_CORE_LPC17xx/inc}""/> </option> <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1477970645" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> @@ -180,14 +180,14 @@ <listOptionValue builtIn="false" value="--gc-sections"/> <listOptionValue builtIn="false" value="-print-memory-usage"/> </option> - <option id="com.crt.advproject.link.gcc.hdrlib.575405103" name="Library" superClass="com.crt.advproject.link.gcc.hdrlib" value="com.crt.advproject.gcc.link.hdrlib.codered.none" valueType="enumerated"/> - <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.libs.1752739164" superClass="gnu.c.link.option.libs" valueType="libs"> + <option id="com.crt.advproject.link.gcc.hdrlib.575405103" name="Library" superClass="com.crt.advproject.link.gcc.hdrlib" value="com.crt.advproject.gcc.link.hdrlib.codered.semihost" valueType="enumerated"/> + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.libs.1752739164" name="Libraries (-l)" superClass="gnu.c.link.option.libs" valueType="libs"> <listOptionValue builtIn="false" value="CMSIS_CORE_LPC17xx"/> </option> - <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.paths.1892982033" superClass="gnu.c.link.option.paths" valueType="libPaths"> + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.paths.1892982033" name="Library search path (-L)" superClass="gnu.c.link.option.paths" valueType="libPaths"> <listOptionValue builtIn="false" value=""${workspace_loc:/CMSIS_CORE_LPC17xx/Release}""/> </option> - <option id="com.crt.advproject.link.crpenable.623706927" superClass="com.crt.advproject.link.crpenable" value="true" valueType="boolean"/> + <option id="com.crt.advproject.link.crpenable.623706927" name="Enable automatic placement of Code Read Protection field in image" superClass="com.crt.advproject.link.crpenable" value="true" valueType="boolean"/> <inputType id="cdt.managedbuild.tool.gnu.c.linker.input.675476394" superClass="cdt.managedbuild.tool.gnu.c.linker.input"> <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> <additionalInput kind="additionalinput" paths="$(LIBS)"/> diff --git a/src/Labo_Keyboard.c b/src/Labo_Keyboard.c index 76f8fba..7ba8c8b 100644 --- a/src/Labo_Keyboard.c +++ b/src/Labo_Keyboard.c @@ -20,12 +20,15 @@ #include "input.h" #include "lcd.h" #include "i2c.h" +#include "touch.h" #define KEY_SIZE 50 #define KEY_SHIFT 20 #define SHIFT_WIDTH (KEY_SHIFT*3) +extern int screenTouch; + int main_master() { uart_send_string("I'm the Master !\r\n", 18); @@ -81,9 +84,13 @@ int main_master() square(255, 255, 255, 239-(KEY_SIZE*4), 0, SHIFT_WIDTH, 1); /*#######################################################*/ - while(1) + while(true) { - + if(screenTouch) + { + touch_get_values(); + screenTouch=0; + } } return 0; @@ -115,8 +122,8 @@ int main(void) // Init I2C i2c_init(); - //uint8_t addr_data[1] = {0x00}; - //i2c_write_bytes(0x38 << 1, 0xA4, 1, addr_data); + // Init Touch screen + touch_init(); // Set switch 0 as input LPC_GPIO2->FIODIR &= ~(1); diff --git a/src/touch.c b/src/touch.c new file mode 100644 index 0000000..a01e0c6 --- /dev/null +++ b/src/touch.c @@ -0,0 +1,72 @@ +/* + * touch.c + * + * Created on: 7 juin 2024 + * Author: padi + */ + +#include "touch.h" + +volatile int screenTouch; + +void touch_init() +{ + // GPIO pin mode + LPC_PINCON->PINSEL4 &= ~(0b11 << 11); + + // Clock + LPC_I2C0->I2SCLH = 125; + LPC_I2C0->I2SCLL = 125; + + // Interrupt + LPC_GPIOINT->IO2IntEnF |= 0b1 << 11; // enable falling p02.11 + LPC_GPIOINT->IO2IntEnR |= 0b1 << 11; // enable rising p02.11 + NVIC_EnableIRQ(EINT3_IRQn); + + // WHO_AM_I + /*uint8_t trans_1[1]; + i2c_read_bytes(0x38, 0x0F, 1, trans_1); + + char buf[10]; + int size = snprintf(buf, sizeof(buf), "WHO AM I = %x", trans_1[0]); + uart_send_string(buf, size); + */ + + uint8_t trans_2[1]; + + trans_2[0] = 0b00; + + i2c_write_bytes(0x38, 0xA4, 1, trans_2); + + uart_send_string("Touch Screen Initialized !\n\r", 28); +} + +void touch_get_values() +{ + uint8_t value_xl[1] = {0}; + uint8_t value_yh[1] = {0}; + uint8_t value_yl[1] = {0}; + + i2c_read_bytes(0x38, 0x04, 1, value_xl); + i2c_read_bytes(0x38, 0x05, 1, value_yh); + i2c_read_bytes(0x38, 0x06, 1, value_yl); + + uint16_t value_y = value_yl[0] | ((value_yh[0] & 0b111) << 8); + + printf("%d / %d \n",value_xl[0], value_y); +} + +void EINT3_IRQHandler(void) +{ + if (LPC_GPIOINT->IO2IntStatF & (0b1 << 11)) + { + screenTouch = 1; + LPC_GPIOINT->IO2IntClr |= (0b1 << 11); + } + + if (LPC_GPIOINT->IO2IntStatR & (0b1 << 11)) + { + screenTouch = 0; + LPC_GPIOINT->IO2IntClr |= (0b1 << 11); + } +} diff --git a/src/touch.h b/src/touch.h new file mode 100644 index 0000000..c8c6af5 --- /dev/null +++ b/src/touch.h @@ -0,0 +1,20 @@ +/* + * touch.h + * + * Created on: 7 juin 2024 + * Author: padi + */ + +#ifndef TOUCH_H_ +#define TOUCH_H_ + +#include <stdio.h> + +#include "LPC17xx.h" +#include "i2c.h" +#include "uart.h" + +void touch_init(); +void touch_get_values(); + +#endif /* TOUCH_H_ */ -- GitLab