Вот, кстати, кусок инициализации для одного нашего прибора -- настройка контроллера памяти:
Код:
; Настройка контроллера внешней памяти в расчёте на частоту процессора
; 72 или 120 МГц и использование SDR SDRAM-133 с организацией 16М * 16.
ldr R3, =BASE_SYSC + 0x180
MOVC R0, 1 << p_SYSC_CLKOUTCFG_CLKOUT_EN
str R0, [R3, #SYSC_CLKOUTCFG - 0x180]
MOVC R0, 0xA05
str R0, [R3, #SYSC_EMC_DLYCTL - 0x180]
; Настройка таймингов и режимов контроллера памяти.
ldr R6, =BASE_EMC
ldr R7, =BASE_EMC + DYNAMIC_CONFIG0
MOVC R4, (1 << p_EMC_CONTROL_ENABLE) + \
(EMC_CONTROL_MAP_NORMAL << p_EMC_CONTROL_MAP) + \
(EMC_CONTROL_POWER_NORMAL << p_EMC_CONTROL_POWER)
str R4, [R6, #EMC_CONTROL]
MOVC R4, DYNAMIC_READ_CONFIG_RD_CMD_DELAYED << \
p_DYNAMIC_READ_CONFIG_RD
str R4, [R6, #DYNAMIC_READ_CONFIG]
IF CPU_CLK <= 72000000
MOVC R4, (DYNAMIC_RAS_CAS_RAS_3 << p_DYNAMIC_RAS_CAS_RAS) + \
(DYNAMIC_RAS_CAS_CAS_2 << p_DYNAMIC_RAS_CAS_CAS)
str R4, [R7, #DYNAMIC_RAS_CAS0 - DYNAMIC_CONFIG0]
movs R4, #EMC_TIME_2
str R4, [R6, #DYNAMIC_RP] ; 20 нс
str R4, [R6, #DYNAMIC_APR] ; 20 нс ?
str R4, [R6, #DYNAMIC_MRD] ; 2 такта ?
str R4, [R6, #DYNAMIC_RRD] ; 15 нс
str R4, [R6, #DYNAMIC_WR] ; 1 такт + 7,5 нс ?
movs R4, #EMC_TIME_2
str R4, [R6, #DYNAMIC_SREX] ; 75 нс ?
str R4, [R6, #DYNAMIC_XSR] ; 75 нс ?
movs R4, #EMC_TIME_4
str R4, [R6, #DYNAMIC_RAS] ; 45 нс
str R4, [R6, #DYNAMIC_DAL] ; 2 такта + 20 нс
movs R4, #EMC_TIME_5
str R4, [R6, #DYNAMIC_RC] ; 65 нс
str R4, [R6, #DYNAMIC_RFC] ; 65 нс ?
ELSE
MOVC R4, (DYNAMIC_RAS_CAS_RAS_3 << p_DYNAMIC_RAS_CAS_RAS) + \
(DYNAMIC_RAS_CAS_CAS_3 << p_DYNAMIC_RAS_CAS_CAS)
str R4, [R7, #DYNAMIC_RAS_CAS0 - DYNAMIC_CONFIG0]
movs R4, #EMC_TIME_3
str R4, [R6, #DYNAMIC_RP] ; 20 нс
str R4, [R6, #DYNAMIC_APR] ; 20 нс ?
movs R4, #EMC_TIME_2
str R4, [R6, #DYNAMIC_MRD] ; 2 такта ?
str R4, [R6, #DYNAMIC_RRD] ; 15 нс
str R4, [R6, #DYNAMIC_WR] ; 1 такт + 7,5 нс ?
movs R4, #EMC_TIME_9
str R4, [R6, #DYNAMIC_SREX] ; 75 нс ?
str R4, [R6, #DYNAMIC_XSR] ; 75 нс ?
movs R4, #EMC_TIME_6
str R4, [R6, #DYNAMIC_RAS] ; 45 нс
movs R4, #EMC_TIME_5
str R4, [R6, #DYNAMIC_DAL] ; 2 такта + 20 нс
movs R4, #EMC_TIME_8
str R4, [R6, #DYNAMIC_RC] ; 65 нс
str R4, [R6, #DYNAMIC_RFC] ; 65 нс ?
ENDIF
MOVC R4, (DYNAMIC_CONFIG_MEM_TYPE_SDRAM << \
p_DYNAMIC_CONFIG_MEM_TYPE) + \
(DYNAMIC_CONFIG_ADDR_MAP_16_RBC_16M_16 << \
p_DYNAMIC_CONFIG_ADDR_MAP)
str R4, [R7, #DYNAMIC_CONFIG0 - DYNAMIC_CONFIG0]
; Выдача команды NOP на минимум 200 мкс.
ldr R4, =(DYNAMIC_CONTROL_CE_ALWAYS << p_DYNAMIC_CONTROL_CE) + \
(DYNAMIC_CONTROL_CLKOUT_ALWAYS << \
p_DYNAMIC_CONTROL_CLKOUT) + \
(DYNAMIC_CONTROL_INIT_NOP << p_DYNAMIC_CONTROL_INIT)
str R4, [R6, #DYNAMIC_CONTROL]
ldr R4, =10000
100 subs R4, #1
bne %B100
; Выдача команды PRECHARGE ALL и установка периода регенерации.
ldr R4, =(DYNAMIC_CONTROL_CE_ALWAYS << p_DYNAMIC_CONTROL_CE) + \
(DYNAMIC_CONTROL_CLKOUT_ALWAYS << \
p_DYNAMIC_CONTROL_CLKOUT) + \
(DYNAMIC_CONTROL_INIT_PRECHARGE_ALL << \
p_DYNAMIC_CONTROL_INIT)
str R4, [R6, #DYNAMIC_CONTROL]
movs R4, #1
str R4, [R6, #DYNAMIC_REFRESH]
movs R4, #128
200 subs R4, #1
bne %B200
IF CPU_CLK <= 72000000
movs R4, #33
ELSE
movs R4, #55
ENDIF
str R4, [R6, #DYNAMIC_REFRESH]
; Выдача команды MODE.
ldr R4, =(DYNAMIC_CONTROL_CE_ALWAYS << p_DYNAMIC_CONTROL_CE) + \
(DYNAMIC_CONTROL_CLKOUT_ALWAYS << \
p_DYNAMIC_CONTROL_CLKOUT) + \
(DYNAMIC_CONTROL_INIT_MODE << p_DYNAMIC_CONTROL_INIT)
str R4, [R6, #DYNAMIC_CONTROL]
IF CPU_CLK <= 72000000
ldr R5, =0xA0023000
ELSE
ldr R5, =0xA0033000
ENDIF
ldr R4, [R5]
; Переход в нормальный режим работы.
movs R4, #(DYNAMIC_CONTROL_CE_ALWAYS << p_DYNAMIC_CONTROL_CE) + \
(DYNAMIC_CONTROL_CLKOUT_ALWAYS << \
p_DYNAMIC_CONTROL_CLKOUT) + \
(DYNAMIC_CONTROL_INIT_NORMAL << p_DYNAMIC_CONTROL_INIT)
str R4, [R6, #DYNAMIC_CONTROL]
; Включение буферов.
MOVC R4, (DYNAMIC_CONFIG_MEM_TYPE_SDRAM << \
p_DYNAMIC_CONFIG_MEM_TYPE) + \
(DYNAMIC_CONFIG_ADDR_MAP_16_RBC_16M_16 << \
p_DYNAMIC_CONFIG_ADDR_MAP) + \
(1 << p_DYNAMIC_CONFIG_BUFFER_ENABLE)
str R4, [R7, #DYNAMIC_CONFIG0 - DYNAMIC_CONFIG0]
Память здесь обычная SDRAM, а не навороченные современные (DDR-2-3-4), так что и инициализация довольно простая. Но строк, как видите, уже довольно много.