Abstract
The digitalPinToPort() is a macro that returns the port of a specified pin.
Source Code
The digitalPinToPort() is defined in hardware/arduino/avr/cores/arduino/Arduino.h as below.
|
|
The input is P. The macro calls pgm_read_byte() with an argument digital_pin_to_timer_PGM + (P).
The digital_pin_to_timer_PGM is defined in hardware/arduino/variants/standard/pins_arduino.h(in case of Arduino Uno). It is an array shown below. As this array is declared as PROGMEM, it is placed on flash memory rather than SRAM.
|
|
As the digital_pin_to_timer_PGM is an array, adding (P) to the digital_pin_to_timer_PGM means the (P+1)th element of the array. In C++ language, the element of array x[i] can be accessed by *(x + i). For example, if the P is 3, the fortth element(note that the elements begins with 0) of the array, that is TIMER2B, is returned.
The pgm_read_byte() is a macro to read a valiable maked as PROGMEM and is defined in hardware/tools/avr/avr/include/avr/pgmspace.h.
As a result digitalPinToTimer() returns the (P+1)th element of digital_pin_to_timer_PGM which is placed on the flash memory.
Version
Arduino AVR Boards 1.8.6
Last Update
March 21, 2023