module DK_5 Title 'DK_5' " Programm for Disp_Kbd_2 - XC95108 PC84. " Display PG320240, connector H1 " " " Port assignment: " DD - Graphic LCD display " IOB, - Universal IO bus, matrix KBD row " KBDO, - Matrix keyboard column, PC keyboard input " TS_OUT - Touch screen controller input signals " TS_IN - Touch screen controller output signels " " Graphic LCD display controller SED1330/1335. " " DWR timing: " " TCNT 0 1 2 3 4 (5) " FI _|---|___|---|___|---|___|---|___|---|___|---|___ " . " DCS ---|___________________________________|--------- " . " DWR ---|_____________________________|--------------- " " " " " " " " " " " " ========================================================= Declarations " Adress bus " AX0..AX5 PIN 1,2,3,4,5,6 istype 'pos'; AX17..AX20 PIN 7,11,13,14 istype 'pos'; " Data bus. Connected to D8..D15 of CPU " DX0..DX7 PIN 19,21,25,26,75,79,80,81 istype 'pos'; FI PIN 9 istype 'pos'; " CPU clock " Bus control signals " !HWR PIN 15 istype 'pos'; !RD PIN 23 istype 'pos'; !CS2 PIN 32 istype 'pos'; !CS3 PIN 18 istype 'pos'; " Display data bus " DDX0..DDX7 PIN 35,36,37,39,40,41,43,44 istype 'pos'; " Display control signals " !DRD PIN 47 istype 'pos'; !DWR PIN 46 istype 'pos'; DRS PIN 66 istype 'pos'; !DCS PIN 48 istype 'pos'; " Touch Screen IC TS_DIN PIN 50 istype 'reg'; TS_DOUT PIN 51 istype 'pos'; TS_DCLK PIN 52 istype 'reg'; TS_BUSY PIN 53 istype 'pos'; TS_PENIRQ PIN 54 istype 'pos'; TS_CS PIN 55 istype 'reg'; " Keyboard ROW " KB_DIN PIN 56 istype 'reg'; KB_CLK PIN 57 istype 'reg'; KB_AUX1 PIN 58 istype 'reg'; KB_AUX2 PIN 61 istype 'reg'; " IOB bus " IOBX0..IOBX7 PIN 45,63,67,68,69,70,71,72 istype 'reg'; " LED " LED1 PIN 82 istype 'pos'; LED2 PIN 83 istype 'pos'; " General " DRST PIN 20 istype 'pos'; " Reset LCD display (active L) RESET PIN 74 istype 'pos'; " /RESET input - pin GSR (active L) CPU_WAIT PIN 24 istype 'pos'; " RD and WR signals IOB_WR, IOB_RD NODE; " RD & WR signals IOB_DIR_WR, IOB_DIR_RD NODE; DISP_WR, DISP_RD NODE; KBD_WR, KBD_RD NODE; TS_OUT_WR, TS_OUT_RD NODE; TS_IN_RD NODE; IOB_DIR0..IOB_DIR7 NODE istype 'reg'; " IOB direction register IOBIX7..IOBIX0 NODE; " IOB input buffer TS_INX2..TS_INX0 NODE; " TS input buffer KB_CLK_DIR,KB_DIN_DIR NODE istype 'reg'; " KBO dir" KBIX1..KBIX0 NODE; TCNTX2..TCNTX0 NODE istype 'reg'; " clock counter AS = [AX3..AX0]; DBUS = [DX7..DX0]; DD = [DDX7..DDX0]; IOB = [IOBX7..IOBX0]; KBI = [0, 0, KB_CLK_DIR, KB_DIN_DIR, KB_AUX2, KB_AUX1, KBIX1, KBIX0]; KBO = [KB_CLK_DIR, KB_DIN_DIR, KB_AUX2, KB_AUX1, KB_CLK, KB_DIN]; TS_IN = [0, 0, 0, 0, 0, TS_BUSY, TS_PENIRQ, TS_DOUT]; TS_OUT_BUF = [TS_DIN, .X., .X., .X., .X., .X., TS_CS, TS_DCLK]; IOB_DIR = [IOB_DIR7..IOB_DIR0]; IOBI = [IOBIX7..IOBIX0]; TCNT = [TCNTX2..TCNTX0]; " ========================================================= Equations LED1 = !CS3; LED2 = 0; DISP_WR = !AX1 & !AX2 & CS3 & HWR; " 000x DISP_RD = !AX1 & !AX2 & CS3 & RD; " 000x KBD_WR = (AS == ^b0010) & CS3 & HWR; " 0010 KBD_RD = (AS == ^b0010) & CS3 & RD; " 0010 IOB_WR = (AS == ^b0100) & CS3 & HWR; " 0100 IOB_RD = (AS == ^b0100) & CS3 & RD; " 0100 TS_OUT_WR = (AS == ^b0011) & CS3 & HWR;" 0011 TS_OUT_RD = (AS == ^b0011) & CS3 & RD; " 0011 TS_IN_RD = (AS == ^b0101) & CS3 & RD; " 0101 IOB_DIR_RD = (AS == ^b0110) & CS3 & RD; " 0110 IOB_DIR_WR = (AS == ^b0110) & CS3 & HWR; " 0110 " --------------------------------------------------------- " --- Data bus DBUS.OE = DISP_RD # KBD_RD # IOB_RD # TS_OUT_RD # TS_IN_RD # IOB_DIR_RD; DBUS = KBI & KBD_RD # IOB_DIR & IOB_DIR_RD # DD & DISP_RD # IOBI & IOB_RD # TS_IN & TS_IN_RD # TS_OUT_BUF & TS_OUT_RD; " --- Display DD = DBUS.PIN; DD.OE = DISP_WR; DRS = AX0; DCS = DISP_RD # DISP_WR; DWR = DISP_WR & (TCNT < 4); DRD = RD; " --- TCNT (DWR generator) TCNT.AR = !(DISP_WR # DISP_RD); TCNT.CLK = FI; TCNT := TCNT + 1; " --- TS (Touch Screen control) TS_OUT_BUF.CLK = !TS_OUT_WR; TS_OUT_BUF := DBUS; " --- KBO KBO.CLK = !KBD_WR; KB_DIN.AP = !RESET; " input KB_CLK.AP = !RESET; " input KB_DIN.OE = !KB_DIN_DIR; " KBO[0]: 0 -> output KB_CLK.OE = !KB_CLK_DIR; " KBO[1]: 0 -> output KBIX1 = KB_CLK.FB & !KB_CLK_DIR # KB_CLK.PIN & KB_CLK_DIR; KBIX0 = KB_DIN.FB & !KB_DIN_DIR # KB_DIN.PIN & KB_DIN_DIR; KBO := [DX5..DX0]; " --- IOB_DIR IOB_DIR := DBUS; IOB_DIR.CLK = !IOB_DIR_WR; IOB_DIR.AP = !RESET; " Input after reset " --- IOB IOB := DBUS; IOB.CLK = !IOB_WR; IOB.OE = !IOB_DIR; IOBI = IOB.PIN & IOB_DIR # IOB.FB & !IOB_DIR; " --- Controls CPU_WAIT = 0; " No WAIT states inserted DRST = RESET; " Both active L " ========================================================= end DK_5