You can write to IOPIN register, if you need ones and zeros appear at the
same time. It works. Apearently just marked as RO in the UM. pin levels
change accordingly as stated in the UM when you write to it.
Regards,
Kerem
----- Original Message -----
From: "Anton Erasmus" <>
To: <>
Sent: Thursday, January 06, 2005 10:23 PM
Subject: Re: [lpc2000] Writing to IOPIN on LPC21xx possible?
>
> On 4 Jan 2005 at 14:06, Aalt Lokhorst wrote:
>
>>
>> Hello All,
>>
>> In the Philips document 'UM_LPC21XX_LPC22XX_2.pdf' on page
137 I read:
>>
>> 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.
>>
>> The same document shows on page 135 that IO#PIN is a ReadOnly
>> register.
>>
>> Am I missing something, how can you write to a ReadOnly register?
>>
>
> Have you received any feedback on this from Philips ? I also notice that
> IOSET is defined as Read/Write. Why would one want to read the IOSET
> register. As far as I understand it, If one writes 1 to IOSET, then 1 to
> IOCLR,
> the output pin would be 0, but the IOSET register will still indicate a 1,
> hence
> making a read from this register meaningless.
>
> Regards
> Anton Erasmus
>
> --
> A J Erasmus
>
>
> Yahoo! Groups Links
>
No response directly from Philips. But I have to admit that I didn't ask
it directly to Philips. I asked it on the forum and I am assuming that
Philips is reading it also.
Regards
Aalt Lokhorst
Anton Erasmus wrote: > Have you received any feedback on this from
Philips ? I also notice that
> IOSET is defined as Read/Write. Why would one want to read the IOSET
> register. As far as I understand it, If one writes 1 to IOSET, then 1 to
> IOCLR,
> the output pin would be 0, but the IOSET register will still indicate a
> 1, hence
> making a read from this register meaningless.
>
> Regards
> Anton Erasmus
>
> --
> A J Erasmus
Reply by Anton Erasmus●January 6, 20052005-01-06
On 4 Jan 2005 at 14:06, Aalt Lokhorst wrote:
>
> Hello All,
>
> In the Philips document 'UM_LPC21XX_LPC22XX_2.pdf' on page 137 I
read:
>
> Applications that require instanatneous appearance of zeros and
> ones on the respected parallel port can use direct access to ports
> 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.
>
> The same document shows on page 135 that IO#PIN is a ReadOnly
> register.
>
> Am I missing something, how can you write to a ReadOnly register?
>
Have you received any feedback on this from Philips ? I also notice that
IOSET is defined as Read/Write. Why would one want to read the IOSET
register. As far as I understand it, If one writes 1 to IOSET, then 1 to
IOCLR,
the output pin would be 0, but the IOSET register will still indicate a 1,
hence
making a read from this register meaningless.
Regards
Anton Erasmus
--
A J Erasmus
Reply by Aalt Lokhorst●January 5, 20052005-01-05
Hello Gus and Rodrigo,
Thanks for the answer, I was confused by the fact that the IO#PIN
register is stated as a ReadOnly register on page 135 of the
'UM_LPC21XX_LPC22XX_2.pdf'.
The conclusion is that IO#PIN isn't a ReadOnly register so the
information on page 135 is wrong.
I am familiar with the Read Modify Write problem. In a 8051 circuit I
had some jumpers on a port. Extreme caution was needed to prevent the
use of ReadModifyWrite instructions.
I noticed the 'instanatneous', it is a copy and paste from the
usermanual page 137.
I never used IOPIN to set pins. I only use it to read status. This
doesn't mean that it is not possible. But it is a good practice to
ise IOCLR and IOSET because you are accessing the latches of the
pins directly. Consider this, IOPIN=IOPIN|1; this will happen as
read-medefy-write now, when you read IOPIN, you are reading the
actual state of the pin and if for some reason a load on that pin
that caused it to be in the wrong state (it is 1 but was read as 0)
that means after read-medify-write, the pin that you didn't want to
change got changed.
So, only use IOPIN to write not to read-modefy-write, safer.
Gus
--- In , "Aalt Lokhorst" <lokhorst@s...>
wrote: > Hello All,
>
> In the Philips document 'UM_LPC21XX_LPC22XX_2.pdf' on page 137 I
read: >
> 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.
>
> The same document shows on page 135 that IO#PIN is a ReadOnly register. >
> Am I missing something, how can you write to a ReadOnly register?
>
> Best Regards,
>
> -- ==============================
> Aalt Lokhorst
> Schut Geometrische Meettechniek bv
> Duinkerkenstraat 21
> 9723 BN Groningen
> P.O. Box 5225
> 9700 GE Groningen
> The Netherlands
> Tel: +31-50-5877877
> Fax: +31-50-5877899
> E-mail: Lokhorst@S...
> ==============================
Reply by Rodrigo Cesar da Silva Martins●January 4, 20052005-01-04
Yes, it's possible...but some people could not agree about
the "instantaneous"...;-))
--- In , "Aalt Lokhorst" <lokhorst@s...>
wrote: > Hello All,
>
> In the Philips document 'UM_LPC21XX_LPC22XX_2.pdf' on page 137 I
read: >
> 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.
>
> The same document shows on page 135 that IO#PIN is a ReadOnly register. >
> Am I missing something, how can you write to a ReadOnly register?
>
> Best Regards,
>
> -- ==============================
> Aalt Lokhorst
> Schut Geometrische Meettechniek bv
> Duinkerkenstraat 21
> 9723 BN Groningen
> P.O. Box 5225
> 9700 GE Groningen
> The Netherlands
> Tel: +31-50-5877877
> Fax: +31-50-5877899
> E-mail: Lokhorst@S...
> ==============================
Reply by Aalt Lokhorst●January 4, 20052005-01-04
Hello All,
In the Philips document 'UM_LPC21XX_LPC22XX_2.pdf' on page 137 I
read:
Applications that require instanatneous appearance of zeros and ones
on the respected parallel port can use direct access to ports
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.
The same document shows on page 135 that IO#PIN is a ReadOnly register.
Am I missing something, how can you write to a ReadOnly register?