Не знаю что вы тут с GPIO нового нашли. У меня ещё в древнем мануале на 2114/.../2214 написано:
Цитата
GPIO Output Set Register
(IO0SET - 0xE0028004, IO1SET - 0xE0028014, IO2SET - 0xE0028024, IO3SET - 0xE0028034)
This register is used to produce a HIGH level output at the port pins if they are configured as GPIO in an OUTPUT mode. Writing
1 produces a HIGH level at the corresponding port pins. Writing 0 has no effect. If any pin is configured as an input or a secondary
function, writing to IOSET has no effect.
Reading the IOSET register returns the value of this register, as determined by previous writes to IOSET and IOCLR (or IOPIN as noted above). This value does not reflect the effect of any outside world influence on the I/O pins.
Цитата
Applications that require instanatneous appearance of zeros and ones on the respected parallel port can use direct access to port’s corresponding GPIO Pin Value Register (IOPIN).
Assuming that pins P0.8 to P0.15 are configured as output, write to IO0PIN:
IO0PIN = 0x0000 C700
will produce the same output as following sequence of writes:
IO0SET = 0x0000 C700
IO0CLR = 0x0000 3800
Solution utilizing access to IO0SET and IO0CLR will take more steps compared to a single IO0PIN write access.
Хотя тамже IO0PIN и указан как RO.
Другими словами:
Чтение IOхPIN читает реальное состояние пинов, например для сконфигурённого на выход пина с установленным в нём нулём, из IOхPIN можно прочитать единицу если этот порт сильно нагружен, например сильноточным светодиодом. (ни в коей мере не призываю выходить за границы дозволеных токов.)
Чтение IOxSET читает то что задумывалось программерами на выход. (даже если пин сконфигурён как вход).
Запись в IOxPIN - есть параллельная запись всего порта.