Programmer’s Reference
Example
CM_BASE | EQU | 0x10000000 |
| ; base address of Core Module registers |
SPD_BASE | EQU | 0x10000100 |
| ; base address of SPD information |
lightled |
|
|
|
|
|
| ; turn on header LED and remap memory | ||
| LDR | r0, =CM_BASE |
| ; load register base address |
| MOV | r1,#5 |
| ; set remap and led bits |
| STR | r1,[r0,#0xc] |
| ; write the register |
|
| ; setup SDRAM |
|
|
readspdbit |
|
|
|
|
|
| ; check SPD bit | is set | |
| LDR | r1,[r0,#0x20] |
| ; read the status register |
| AND | r1,r1,#0x20 |
| ; mask SPD bit (5) |
| CMP | r1,#0x20 |
| ; test if set |
| BNE | readspdbit |
| ; branch until the SPD memory has been read |
setupsdram |
|
|
|
|
|
| ; work out the | SDRAM size | |
| LDR | r0, =SPD_BASE | ; | point at SPD memory |
| LDRB | r1,[r0,#3] | ; | number of row address lines |
| LDRB | r2,[r0,#4] | ; | number of column address lines |
| LDRB | r3,[r0,#5] | ; | number of banks |
| LDRB | r4,[r0,#31] | ; | module bank density |
| MUL | r5,r4,r3 | ; | calculate size of SDRAM (MB divided by 4) |
| MOV | r5,r5,ASL#2 | ; | size in MB |
| CMP | r5,#0x10 | ; | is it 16MB? |
| BNE | not16 | ; | if no, move on |
| MOV | r6,#0x2 | ; | store size and CAS latency of 2 |
| B | writesize |
|
|
not16 |
|
|
|
|
| CMP | r5,#0x20 | ; | is it 32MB? |
| BNE | not32 | ; | if no, move on |
| MOV | r6,#0x6 | ; | store size and CAS latency of 2 |
| B | writesize |
|
|
not32 |
|
|
|
|
| CMP | r5,#0x40 | ; | is it 64MB? |
| BNE | not64 | ; | if no, move on |
| MOV | r6,#0xa | ; | store size and CAS latency of 2 |
| B | writesize |
|
|
ARM DUI 0125A | © Copyright ARM Limited 1999. All rights reserved. |