57.6.15.9 Pen Detect Method
When there is no contact, it is not necessary to perform a conversion. However, it is important to detect a contact by keeping the power consumption as low as possible.
The implementation polarizes one panel by closing the switch on (XP/UL) and ties the horizontal panel by an embedded resistor connected to YM / Sense. This resistor is enabled by a fifth switch. Since there is no contact, no current is flowing and there is no related power consumption. As soon as a contact occurs, a current is flowing in the Touchscreen and a Schmitt trigger detects the voltage in the resistor.
The Touchscreen Interrupt configuration is entered by programming ADC_TSMR.PENDET. If this bit is written at 1, the controller samples the pen contact state when it is not converting and waiting for a trigger.
To complete the circuit, a programmable debouncer is placed at the output of the Schmitt trigger. This debouncer is programmable up to 215 ADC clock periods. The debouncer length can be selected by programming the ADC_TSMR.PENDBC field.
Due to the analog switch’s structure, the debouncer circuitry is only active when no conversion (touchscreen or classic ADC channels) is in progress. Thus, if the time between the end of a conversion sequence and the arrival of the next trigger event is lower than the debouncing time configured on ADC_TSMR.PENDBC, the debouncer will not detect any contact.
The touchscreen pen detect can be used to generate an ADC interrupt to wake up the system. The pen detect generates two types of status, reported in ADC_ISR:
- ADC_ISR.PEN is set as soon as a contact exceeds the debouncing time as defined by ADC_TSMR.PENDBC and remains set until ADC_ISR is read.
- ADC_ISR.NOPEN is set as soon as no current flows for a time over the debouncing time as defined by PENDBC and remains set until ADC_ISR is read.
Both bits are automatically cleared as soon as ADC_ISR is read, and can generate an interrupt by writing ADC_IER.
Moreover, the rising of either one of them clears the other, they cannot be set at the same time.
ADC_ISR.PENS shows the current status of the pen contact.