From: Shark8 <OneWingedShark@gmail.com>
Subject: Re: Cleanest Ada way to do this?
Date: Sun, 22 Jun 2014 15:05:05 -0600
Date: 2014-06-22T15:05:05-06:00 [thread overview]
Message-ID: <6yHpv.55741$G37.7010@fx07.iad> (raw)
In-Reply-To: <7eaee5fc-2045-4bb3-8b16-d757b54760da@googlegroups.com>
On 22-Jun-14 10:51, 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..
>
> Any thoughts?
>
Depends on the situation, I think; if there's a lot of them [ports] like
say one for each 'character' you may be better off making a generic
package to interface with it.
Package Parent is
Type Segment is range 1..16 with Size => 4;
Type LCD_Character is private;
Type LCD_Handle is not null access LCD_Character;
Private
Type Segment_Array is Array(Segment) of Boolean
with Size => Segment'Last;
Type LCD_Character is record
Segments : Segment_Array;
end record;
End Parent;
Generic
Port_Address : in Address;
Package Parent.Port is
Port : aliased LCD_Character with Volatile, Address => Port_Address;
End Parent.port;
With Parent.Port;
Package Display is
Number_of_Segments : Constant Positive := 3;
Type LCD_Array is Array(1..Number_of_Segments) of LCD_Handle;
Display : constant LCD_Array;
Private
Package Segment_1 is new Parent.Port( ######## );
Package Segment_2 is new Parent.Port( ######## );
Package Segment_3 is new Parent.Port( ######## );
Display : constant LCD_Array:=
( 1 => Segment_1.Port, 2 => Segment_2.Port, 3 => Segment_3.Port );
End Display;
Or if it's a one-off type thing do it more directly:
LCD_Display : LCD_Character with Address => Port_Address;
next prev parent reply other threads:[~2014-06-22 21:05 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
2014-06-22 21:05 ` Shark8 [this message]
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