1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- MODULE SdControllers;
- (**
- AUTHOR Timothée Martiel, 12/2015
- PURPOSE SD Host Controller Initialization for Zynq SoC.
- *)
- IMPORT
- Platform,
- Sd, SdDisks, SdEnvironment;
- CONST
- Trace = FALSE;
- VAR
- hc0, hc1: Sd.HostController;
- PROCEDURE HandleInterruptSd0;
- BEGIN
- Sd.HandleInterrupt(hc0);
- END HandleInterruptSd0;
- PROCEDURE HandleInterruptSd1;
- BEGIN
- Sd.HandleInterrupt(hc1)
- END HandleInterruptSd1;
- PROCEDURE Init;
- VAR
- i, result: LONGINT;
- BEGIN
- Platform.slcr.SDIO_CLK_CTRL := 0;
- FOR i := 0 TO Platform.SdNb - 1 DO
- IF SdEnvironment.Enable(i) THEN
- IF Trace THEN
- SdEnvironment.String("[SD] Enabling controller "); SdEnvironment.Int(i, 0); SdEnvironment.Ln;
- SdEnvironment.String("[SD] clock = "); SdEnvironment.Int(SdEnvironment.HcClock(i), 0); SdEnvironment.String(" Hz"); SdEnvironment.Ln;
- SdEnvironment.String("[SD] regs = "); SdEnvironment.Address(Platform.SdBase[0]); SdEnvironment.Ln;
- SdEnvironment.String("[SD] irq = "); SdEnvironment.Int(Platform.SdIrq[0], 0); SdEnvironment.Ln
- END;
- INC(Platform.slcr.SDIO_CLK_CTRL, LSH(LONGINT(1), i));
- CASE i OF
- 0:
- NEW(hc0);
- Sd.InitHostController(hc0, Platform.SdBase[0]);
- IF Sd.SetExternalClock(hc0, SdEnvironment.HcClock(i), SdEnvironment.HcClock(i), result) THEN
- Sd.SetEventHandler(hc0, SdDisks.HandleSdEvent, NIL);
- SdEnvironment.InstallHandler(HandleInterruptSd0, Platform.SdIrq[0])
- ELSE
- SdEnvironment.String("[SD] Failed to enable controller 0: error code ");
- SdEnvironment.Int(result, 0);
- SdEnvironment.Ln
- END
- |1:
- NEW(hc1);
- Sd.InitHostController(hc1, Platform.SdBase[1]);
- IF Sd.SetExternalClock(hc1, SdEnvironment.HcClock(i), SdEnvironment.HcClock(i), result) THEN
- Sd.SetEventHandler(hc1, SdDisks.HandleSdEvent, NIL);
- SdEnvironment.InstallHandler(HandleInterruptSd1, Platform.SdIrq[1])
- ELSE
- SdEnvironment.String("[SD] Failed to enable controller 0: error code ");
- SdEnvironment.Int(result, 0);
- SdEnvironment.Ln
- END
- END
- ELSE
- IF Trace THEN
- SdEnvironment.String("[SD] Not Enabling controller "); SdEnvironment.Int(i, 0); SdEnvironment.Ln
- END
- END
- END
- END Init;
- BEGIN
- Init
- END SdControllers.
|