comp.lang.ada
 help / color / mirror / Atom feed
From: Mike Silva <hungupharps@gmail.com>
Subject: Re: Cleanest Ada way to do this?
Date: Sun, 22 Jun 2014 14:20:42 -0700 (PDT)
Date: 2014-06-22T14:20:42-07:00	[thread overview]
Message-ID: <de640d15-a0ae-45f9-b3da-f5ba414f81f1@googlegroups.com> (raw)
In-Reply-To: <lo79hk$bss$1@dont-email.me>

On Sunday, June 22, 2014 12:07:32 PM UTC-7, Simon Clubley wrote:
> On 2014-06-22, Mike Silva  wrote:
> 
> > I'd like some help on the cleanest, or most elegant, way to do this in Ada. 
> 
> > I'm writing to an LCD character display, in 4-bit mode, which requires writing
> 
> > an 8 bit character or command value as two 4 bit pieces.  The port (a memory
> 
> > address) being written to is 32 bits wide.  What I would like to be able to do
> 
> > is some form of this (not valid Ada, I know):
> 
> >
> 
> >  Port32(4..7) := Some_Char(4..7);
> 
> >  ..twiddle some other control bits..
> 
> >  Port32(4..7) := Some_Char(0..3);
> 
> >  ..twiddle some other control bits..
> 
> >
> 
> 
> 
> Do the other bits in Port32 need to be preserved when (4..7) are written ?
> 
> 
> 
> Is it _required_ that Port32 is written in units of 32 bits ?
> 
> (The answer to that is probably yes, but I thought I would check).
> 
> 
> 
> There was some discussion of this class of problem a few weeks ago when
> 
> I was proposing syntax to allow the atomic update of multiple bitfields
> 
> at the same time without having to use an intermediate variables.
> 
> 
> 
> The conclusions from that were that if you need to preserve the other
> 
> bits in Port32(4..7) your only real option is to use a temporary
> 
> variable with a 32-bit record structure to match your bitfield
> 
> requirements (unless you want to get into using C style bitmasks.)

Yes, the other bits need to be preserved.  In C the code would look something like this

P32 = (P32 & ~0x00F0) | (c & 0xF0);
...twiddle some control bits
P32 = (P32 & ~0x00F0) | ((c << 4) & 0xF0);


  reply	other threads:[~2014-06-22 21:20 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-22 16:51 Cleanest Ada way to do this? Mike Silva
2014-06-22 19:07 ` Simon Clubley
2014-06-22 21:20   ` Mike Silva [this message]
2014-06-22 21:05 ` Shark8
2014-06-23  0:17   ` Simon Clubley
2014-06-23  6:46     ` hungupharps
2014-06-23  7:32       ` Georg Bauhaus
2014-06-23 11:48         ` Simon Clubley
2014-06-23 15:40           ` G.B.
2014-06-23  9:02 ` rrr.eee.27
2014-06-23 11:57   ` Simon Clubley
2014-06-23 12:05     ` rrr.eee.27
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox