доброго времени всем
используется интерфейс static memory
не пойму что откуда берется...
итак:
просто чтобы что-то писалось и читалось (для удобочитаемости всю начальную настройку Clock, MAM и т.д. убрал)
Код
int main()
{
volatile unsigned int* mem;
unsigned int n;
EMCStaticConfig = 0x00000082; // 32bit, BLS low for read & write, NO buffer, page mode, extended wait
EMCStaticWaitOEen = 0;
EMCStaticWaitRD = 6;
EMCStaticWaitWR = 6;
EMCStaticWaitTurn = 0;
while(1)
{
mem = (volatile U32*)0x80000000;
n = 1;
while (mem<(volatile U32*)0x84000000)
{
n = *mem++;
n = n * 4;
*mem++ = n;
}
}
}
скомпилировалось вот во что:
Код
0x0000043C E3A00102 MOV R0,#0x80000000
0x00000440 E5901000 LDR R1,[R0]
0x00000444 E1A01101 MOV R1,R1,LSL #2
0x00000448 E5A01004 STR R1,[R0,#0x0004]!
0x0000044C E2800004 ADD R0,R0,#0x00000004
0x00000450 E3500321 CMP R0,#0x84000000
0x00000454 3AFFFFF9 BCC 0x00000440
0x00000458 EAFFFFF7 B 0x0000043C
далее, руководствуясь даташитом на камень и "ARM PrimeCell™ MultiPort Memory Controller", получаю:
CCLK=72MHz... считаю время сигналов /RD, /CS и /WR каменюки
для чтения: (6+1)*(1/72MHz) = 97ns - RD&CS
для записи: (6+3)*(1/72MHz) = 125ns (CS), (6+1)*(1/72MHz) = 97ns (WR)
Рассчитываю общий цикл доступа к AHB:
чтение:
T0 AHB address provided to memory controller
T0-T1 AHB transaction processing
T1-T2 Arbitration of AHB memory ports
T2-T3 Memory controller processing
T3-T4 Memory controller processing
T4-T5 Static memory address, chip select, and control signals submitted to static memory
T5-T6 Read wait state 1
T6-T7 Read wait state 2
T7-T8 Read wait state 3
T9-T10 Read wait state 4
T10-T11 Read wait state 5
T11-T12 Read wait state 6
T12-T13 Read data returned from the static memory
T13-T14 Data is provided to the AHB
----------------------------------------
5+1+6+2 = 14 циклов (* 1/72MHz = 194нс)
запись:
T0 AHB address provided to memory controller.
T0-T1 AHB transaction processing.
T1-T2 Arbitration of AHB memory ports. Write data is read from the AHB memory port.
T2-T3 Memory controller processing.
T3-T4 Memory controller processing.
T4-T5 Static memory transfer 0, address, chip select, and control signals submitted to
static memory. Write enable inactive.
T5-T6 Write enable taken active. Write data submitted to static memory.
T6-T7 Wait state 1.
T7-T8 Wait state 2.
T8-T9 Wait state 3.
T9-T10 Wait state 4.
T10-T11 Wait state 5.
T11-T12 Wait state 6.
T12-T13 Static memory writes the data. Write enable taken inactive.
T13-T14 Static memory control signals taken inactive.
--------------------------------------------------------
5+1+1+6+1+1 = 15 (* 1/72MHz = 208нс)
теперь апофеоз

фактическое измерение осциллографом:
/RD = 180ns
/WR = 102ns
получается, что запись, практически, с учетом всяких округлений, совпатает с расчетными, а вот чтение отличается практически в два раза
так как Page mode не используется, сломал мозг в раздумьях

Подскажите, откуда берется такой длинный /RD ?