Interfacing an open-drain input to a Timer capture signal in PSOC with internal Pull-Up
I am having a tachometer (Open-drain/Open-Collector) output connected to a timer input capture inside PSoC 1 for measuring speed. I have configured the pin as Pull-up inside PSoC to read the Open-Drain output from the tach. My Timer Capture does not function. What is going wrong?
Inside PSoC 1 GPIO cell, if a pin is configured in any drive mode other than Hi-Z or Hi-Z analog and if Global Input/Output Select (connection to GIO/GIE/GOO/GOE) is enabled then the pin actually connects to GOO or GOE lines depending on the port number. Even if the pin in Chip editor is connected to a Global Input (GIO/GIE) line, a pull-up drive mode on the pin will enable the connection to Global output (GOO/GOE) instead of input GIO/GIE. Since your timer capture signal is connected to the pin through a Global Input net, this connection is cut when drive mode bits are set to Pull-Up, thus breaking the intended Capture operation. For more details on GPIO cell refer – AN2094 or Technical Reference Manual (TRM) of the respective PSoC 1 device, Section - 'PSoC Core'; Chapter - 'General Purpose IO (GPIO)'.
Only when the pin is in Hi-Z digital or Analog mode, it is connected to a GIO/GIE line – as there is only one switch controlling Global select connection and selection of Global Input or Output line is controlled by drive mode bits. (Attached image shows the GPIO Cell part that enables the connection to Global Input bus)
- Use an external pull up and clear the internal pull up (reset the drive mode to Hi-Z)
- Or enable GPIO interrupt on the pin and use GPIO ISR to do a software capture.