NuMaker emWin HMI

Committer:
csyang2
Date:
Mon Mar 04 15:47:41 2024 +0800
Revision:
10:c8165817d92a
Parent:
6:d15151941247
Support NuMaker-IoT-M467

Who changed what in which revision?

UserRevisionLine numberNew contents of line
csyang2 6:d15151941247 1 #if 0 // moved to the related target folders
csyang2 1:c0f972361605 2 #include "M480.h"
csyang2 1:c0f972361605 3
csyang2 1:c0f972361605 4 //#include "stdlib.h"
csyang2 1:c0f972361605 5 #include "GUI.h"
csyang2 1:c0f972361605 6 //#include "W55FA93_adc.h"
csyang2 1:c0f972361605 7 #include "M48XTouchPanel.h"
csyang2 1:c0f972361605 8 //#include "lcdconf.h"
csyang2 1:c0f972361605 9
csyang2 1:c0f972361605 10
csyang2 1:c0f972361605 11
csyang2 1:c0f972361605 12 int Init_TouchPanel(void)
csyang2 1:c0f972361605 13 {
csyang2 1:c0f972361605 14 /* Enable peripheral clock */
csyang2 1:c0f972361605 15 CLK_EnableModuleClock(EADC_MODULE);
csyang2 1:c0f972361605 16
csyang2 1:c0f972361605 17 /* Peripheral clock source */
csyang2 1:c0f972361605 18 CLK_SetModuleClock(EADC_MODULE, 0, CLK_CLKDIV0_EADC(8));
csyang2 1:c0f972361605 19
csyang2 1:c0f972361605 20 /* Init ADC for TP */
csyang2 1:c0f972361605 21 /* Set input mode as single-end and enable the A/D converter */
csyang2 1:c0f972361605 22 EADC_Open(EADC, EADC_CTL_DIFFEN_SINGLE_END);
csyang2 1:c0f972361605 23
csyang2 1:c0f972361605 24 return 1;
csyang2 1:c0f972361605 25 }
csyang2 1:c0f972361605 26
csyang2 1:c0f972361605 27 static volatile uint32_t g_u32AdcIntFlag_TP;
csyang2 1:c0f972361605 28
csyang2 1:c0f972361605 29 /*-----------------------------------------------*/
csyang2 1:c0f972361605 30 // ADC01 ISR
csyang2 1:c0f972361605 31 //
csyang2 1:c0f972361605 32 /*-----------------------------------------------*/
csyang2 1:c0f972361605 33 void ADC01_IRQHandler(void)
csyang2 1:c0f972361605 34 {
csyang2 1:c0f972361605 35 /* Clear the A/D ADINT1 interrupt flag */
csyang2 1:c0f972361605 36 EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
csyang2 1:c0f972361605 37
csyang2 1:c0f972361605 38 g_u32AdcIntFlag_TP = 1;
csyang2 1:c0f972361605 39
csyang2 1:c0f972361605 40 }
csyang2 1:c0f972361605 41
csyang2 1:c0f972361605 42 /*-----------------------------------------------*/
csyang2 1:c0f972361605 43 // Get X Position from Touch Panel (ADC input)
csyang2 1:c0f972361605 44 //
csyang2 1:c0f972361605 45 /*-----------------------------------------------*/
csyang2 1:c0f972361605 46 uint16_t Get_TP_X(void)
csyang2 1:c0f972361605 47 {
csyang2 1:c0f972361605 48 uint16_t x_adc_in;
csyang2 1:c0f972361605 49
csyang2 1:c0f972361605 50 /*=== Get X from ADC input ===*/
csyang2 1:c0f972361605 51 GPIO_SetMode(PB, BIT9, GPIO_MODE_OUTPUT); // XR
csyang2 1:c0f972361605 52 GPIO_SetMode(PH, BIT5, GPIO_MODE_INPUT); // YD
csyang2 1:c0f972361605 53 GPIO_SetMode(PH, BIT4, GPIO_MODE_OUTPUT); // XL
csyang2 1:c0f972361605 54 PB9 = 1;
csyang2 1:c0f972361605 55 PH4 = 0;
csyang2 1:c0f972361605 56
csyang2 1:c0f972361605 57 /* Configure the GPB8 ADC analog input pins. */
csyang2 1:c0f972361605 58 SYS->GPB_MFPH &= ~(SYS_GPB_MFPH_PB8MFP_Msk | SYS_GPB_MFPH_PB9MFP_Msk);
csyang2 1:c0f972361605 59 SYS->GPB_MFPH |= SYS_GPB_MFPH_PB8MFP_EADC0_CH8;
csyang2 1:c0f972361605 60
csyang2 1:c0f972361605 61 /* Disable the GPB8 digital input path to avoid the leakage current. */
csyang2 1:c0f972361605 62 GPIO_DISABLE_DIGITAL_PATH(PB, BIT8);
csyang2 1:c0f972361605 63
csyang2 1:c0f972361605 64 /* Configure the sample module 1 for analog input channel 8 and software trigger source.*/
csyang2 1:c0f972361605 65 EADC_ConfigSampleModule(EADC, 1, EADC_SOFTWARE_TRIGGER, 8); // YU
csyang2 1:c0f972361605 66
csyang2 1:c0f972361605 67 /* Clear the A/D ADINT1 interrupt flag for safe */
csyang2 1:c0f972361605 68 EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
csyang2 1:c0f972361605 69
csyang2 1:c0f972361605 70 /* Enable the sample module 1 interrupt. */
csyang2 1:c0f972361605 71 EADC_ENABLE_INT(EADC, BIT1); //Enable sample module A/D ADINT1 interrupt.
csyang2 1:c0f972361605 72 EADC_ENABLE_SAMPLE_MODULE_INT(EADC, 1, BIT1); //Enable sample module 1 interrupt.
SHLIU1@OANBE02333.nuvoton.com 4:3d28c66231b0 73 NVIC_EnableIRQ(43); //for ADC1_IRQn and EADC01_IRQn
csyang2 1:c0f972361605 74
csyang2 1:c0f972361605 75 /* Reset the ADC interrupt indicator and trigger sample module 1 to start A/D conversion */
csyang2 1:c0f972361605 76 g_u32AdcIntFlag_TP = 0;
csyang2 1:c0f972361605 77 EADC_START_CONV(EADC, BIT1);
csyang2 1:c0f972361605 78
csyang2 1:c0f972361605 79 /* Wait ADC interrupt (g_u32AdcIntFlag_TP will be set at IRQ_Handler function) */
csyang2 1:c0f972361605 80 //while(g_u32AdcIntFlag_TP == 0);
csyang2 1:c0f972361605 81 EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
csyang2 1:c0f972361605 82 g_u32AdcIntFlag_TP = 1;
csyang2 1:c0f972361605 83 x_adc_in = EADC_GET_CONV_DATA(EADC, 1);
csyang2 1:c0f972361605 84 return x_adc_in;
csyang2 1:c0f972361605 85
csyang2 1:c0f972361605 86 }
csyang2 1:c0f972361605 87
csyang2 1:c0f972361605 88
csyang2 1:c0f972361605 89 /*-----------------------------------------------*/
csyang2 1:c0f972361605 90 // Get Y Position from Touch Panel (ADC input)
csyang2 1:c0f972361605 91 //
csyang2 1:c0f972361605 92 /*-----------------------------------------------*/
csyang2 1:c0f972361605 93 uint16_t Get_TP_Y(void)
csyang2 1:c0f972361605 94 {
csyang2 1:c0f972361605 95 uint16_t y_adc_in;
csyang2 1:c0f972361605 96
csyang2 1:c0f972361605 97 /*=== Get Y from ADC input ===*/
csyang2 1:c0f972361605 98 GPIO_SetMode(PB, BIT8, GPIO_MODE_OUTPUT); // YU
csyang2 1:c0f972361605 99 GPIO_SetMode(PH, BIT5, GPIO_MODE_OUTPUT); // YD
csyang2 1:c0f972361605 100 GPIO_SetMode(PH, BIT4, GPIO_MODE_INPUT); // XL
csyang2 1:c0f972361605 101 PB8 = 1;
csyang2 1:c0f972361605 102 PH5 = 0;
csyang2 1:c0f972361605 103
csyang2 1:c0f972361605 104 /* Configure the GPB9 ADC analog input pins. */
csyang2 1:c0f972361605 105 SYS->GPB_MFPH &= ~(SYS_GPB_MFPH_PB8MFP_Msk | SYS_GPB_MFPH_PB9MFP_Msk);
csyang2 1:c0f972361605 106 SYS->GPB_MFPH |= SYS_GPB_MFPH_PB9MFP_EADC0_CH9;
csyang2 1:c0f972361605 107
csyang2 1:c0f972361605 108 /* Disable the GPB9 digital input path to avoid the leakage current. */
csyang2 1:c0f972361605 109 GPIO_DISABLE_DIGITAL_PATH(PB, BIT9);
csyang2 1:c0f972361605 110
csyang2 1:c0f972361605 111 /* Configure the sample module 2 for analog input channel 9 and software trigger source.*/
csyang2 1:c0f972361605 112 EADC_ConfigSampleModule(EADC, 2, EADC_SOFTWARE_TRIGGER, 9); // XR
csyang2 1:c0f972361605 113
csyang2 1:c0f972361605 114 /* Clear the A/D ADINT1 interrupt flag for safe */
csyang2 1:c0f972361605 115 EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
csyang2 1:c0f972361605 116
csyang2 1:c0f972361605 117 /* Enable the sample module 2 interrupt. */
csyang2 1:c0f972361605 118 EADC_ENABLE_INT(EADC, BIT2); //Enable sample module A/D ADINT1 interrupt.
csyang2 1:c0f972361605 119 EADC_ENABLE_SAMPLE_MODULE_INT(EADC, 1, BIT2); //Enable sample module 2 interrupt.
SHLIU1@OANBE02333.nuvoton.com 4:3d28c66231b0 120 NVIC_EnableIRQ(43); //for ADC1_IRQn and EADC01_IRQn)
csyang2 1:c0f972361605 121
csyang2 1:c0f972361605 122 /* Reset the ADC interrupt indicator and trigger sample module 2 to start A/D conversion */
csyang2 1:c0f972361605 123 g_u32AdcIntFlag_TP = 0;
csyang2 1:c0f972361605 124 EADC_START_CONV(EADC, BIT2);
csyang2 1:c0f972361605 125
csyang2 1:c0f972361605 126 /* Wait ADC interrupt (g_u32AdcIntFlag_TP will be set at IRQ_Handler function) */
csyang2 1:c0f972361605 127 //while(g_u32AdcIntFlag_TP == 0);
csyang2 1:c0f972361605 128 EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
csyang2 1:c0f972361605 129 g_u32AdcIntFlag_TP = 1;
csyang2 1:c0f972361605 130 y_adc_in = EADC_GET_CONV_DATA(EADC, 2);
csyang2 1:c0f972361605 131 return y_adc_in;
csyang2 1:c0f972361605 132
csyang2 1:c0f972361605 133 }
csyang2 1:c0f972361605 134
csyang2 1:c0f972361605 135 int Read_TouchPanel(int *x, int *y)
csyang2 1:c0f972361605 136 {
csyang2 1:c0f972361605 137 *x = Get_TP_X();
csyang2 1:c0f972361605 138 *y = Get_TP_Y();
csyang2 1:c0f972361605 139 if ( (*x == 0xFFF) || (*y == 0xFFF) )
csyang2 1:c0f972361605 140 return 0;
csyang2 1:c0f972361605 141 else
csyang2 1:c0f972361605 142 return 1;
csyang2 1:c0f972361605 143 }
csyang2 1:c0f972361605 144
csyang2 1:c0f972361605 145 int Uninit_TouchPanel(void)
csyang2 1:c0f972361605 146 {
csyang2 1:c0f972361605 147 return 1;
csyang2 1:c0f972361605 148 }
csyang2 1:c0f972361605 149
csyang2 1:c0f972361605 150 int Check_TouchPanel(void)
csyang2 1:c0f972361605 151 {
csyang2 1:c0f972361605 152 return 0; //Pen up;
csyang2 1:c0f972361605 153 }
csyang2 6:d15151941247 154 #endif