3 // Bitsy development board uses two banks: KM416S4030C,
4 // 12 row address bits, 8 col address bits
5 // Bitsy uses two banks KM416S8030C, 12 row address bits,
7 // Have to set DRAC0 to 14 row bits or else you only get 8 col bits
8 // from the formfactor unit configuration registers: 0xF3536257
9 mdcnfg: // DRAM Configuration Register 10.2.1
10 WORD 1<<0 | 1<<2 | 0<<3 | 0x5<<4 | 0x3<<8 | 3<<12 | 3<<14
11 mdrefr0: // DRAM Refresh Control Register 10.2.2
12 WORD 1<<0 | 0x200<<4 | 1<<21 | 1<<22 | 1 <<31
13 mdrefr1: // DRAM Refresh Control Register 10.2.2
14 WORD 1<<0 | 0x200<<4 | 1<<21 | 1<<22
15 mdrefr2: // DRAM Refresh Control Register 10.2.2
16 WORD 1<<0 | 0x200<<4 | 1<<20 | 1<<21 | 1<<22
18 /* MDCAS settings from [1] Table 10-3 (page 10-18) */
26 delay: // delay without using memory
27 mov $100, r1 // 200MHz: 100 × (2 instructions @ 5 ns) == 1 ms
36 mov $INTREGS+4, r0 // turn off interrupts
39 // Is this necessary on wakeup?
40 mov $POWERREGS+14, r0 // set clock speed to 191.7MHz
43 // This is necessary on hard reset, but not on sleep reset
44 mov $0x80, r0 // wait ±128 µs
47 /* check to see if we're operating out of DRAM */
48 bic $0x000000ff, pc, r4
56 mov $POWERREGS+0x4, r1 // Clear DH in Power Manager Sleep Status Register
57 bic $(1<<3), (r1) // DH == DRAM Hold
58 // This releases nCAS/DQM and nRAS/nSDCS pins to make DRAM exit selfrefresh
60 /* Set up the DRAM in banks 0 and 1 [1] 10.3 */
63 mov mdrefr0, r2 // Turn on K1RUN
66 mov mdrefr1, r2 // Turn off SLFRSH
69 mov mdrefr2, r2 // Turn on E1PIN
82 mov 0x00(r0), r2 // Eight non-burst read cycles
91 mov mdcnfg, r2 // Enable memory banks
94 // Is there any use in turning on EAPD and KAPD in the MDREFR register?