Forum: FPGA, VHDL & Co. Mico32 LCD Busy Flag


von Peter (Gast)


Lesenswert?

Hallo,

ich verwende einen Lattice ECP2 mit integriertem Mico32 Kern sowie ein 
LCD mit HD44780 Controller.
Ich habe bis jetzt mit delays gearbeitet, möchte nun allerdings auf die 
Abfrage des Busy Flags umsteigen.

Ich habe im Mico32 in der Platform ein Signal "DB7" als "Both Input and 
Output" definiert, dann bekomme ich zwei Signale
1
; DB7PIO_BOTH_IN : in std_logic_vector(0 downto 0)
2
; DB7PIO_BOTH_OUT : out std_logic_vector(0 downto 0)
die ich so an meinen physikalischen Ausgangspin DB7 am FPGA verdrahte.
1
,DB7PIO_BOTH_IN(0)  => DB7
2
,DB7PIO_BOTH_OUT(0)  => DB7
Nun möchte ich das BusyFlag abfragen, die Enable Leitung wird getoggelt, 
RW ist auf high und RS ist auf low:
1
while (busy_flag)
2
{
3
  *((volatile unsigned char *)(lcd_E->base))  = 1;
4
  busy_flag = *((volatile unsigned char *)(lcddb7->base));  
5
  *((volatile unsigned char *)(lcd_E->base))  = 0;
6
}
allerdings bleibt das Programm hier stehen.
Muss ich die Richtung des Pins umschalten um ihn lesen zu können, oder 
bin ich hier komplett auf dem Holzweg?

Vielen Dank
Peter

von Peter (Gast)


Lesenswert?

Edit:

Der physikalische Pin "DB7" ist als inout definiert:
1
DB7   : inout  std_logic;
Vielen Dank
Peter

von Duke Scarring (Gast)


Lesenswert?

Peter schrieb:
> Muss ich die Richtung des Pins umschalten um ihn lesen zu können, oder
> bin ich hier komplett auf dem Holzweg?
Ja. Du musst den Treiber im FPGA abschalten, z.B. so:
1
    sda_in    <= pad_sda;                             -- input
2
    pad_sda   <= sda_out when sda_oen = '0' else 'Z'; -- output
Duke

von Peter (Gast)


Lesenswert?

Hallo,

also müsste ich ein weiteres Signal in die Platform integrieren, z.B. 
"lcd_busy_flag_enable", und dieses Signal vom Mico32 aus auf 0 setzen 
wenn ich Daten an das LCD senden möchte und auf 1 setzen wenn ich das 
BusyFlag lesen möchte?

Und im FPGA dann so realisieren?
1
DB7PIO_BOTH_IN(0)  <= DB7;
2
DB7 <= DB7PIO_BOTH_OUT(0) when lcd_busy_flag_enable = '0' else 'Z';
Vielen Dank
Peter

von Duke Scarring (Gast)


Lesenswert?

Peter schrieb:
> also müsste ich ein weiteres Signal in die Platform integrieren, z.B.
> "lcd_busy_flag_enable", und dieses Signal vom Mico32 aus auf 0 setzen
> wenn ich Daten an das LCD senden möchte und auf 1 setzen wenn ich das
> BusyFlag lesen möchte?
Genau.
Ich denke bei der GPIO-Komponente müsste sowas schon realisiert sein.

Duke

von Peter (Gast)


Lesenswert?

Hallo Duke,
vielen Dank für deine Antworten, funktioniert perfekt!

Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
Lade...