Hi,
ich experimentiere gerade etwas mit Chan's FatFS Lib und einer MicroSD
am SDIO Interface rum. Als Basiscode habe ich die hier genommen.
https://docs.google.com/file/d/0B7OY5pub_GfIcU1XTDFDRlptZDg/edit
Ich habe einen Speedtest gemacht, indem ich gucken wollte wie lange es
dauert 1Mbyte in 512Byte Blöcken in ein File zu schreiben.
Dazu habe ich mir Timer2 eingestellt.
1 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
|
2 |
|
3 | TIM_TimeBaseInitTypeDef tim;
|
4 | tim.TIM_ClockDivision = TIM_CKD_DIV1;
|
5 | tim.TIM_CounterMode = TIM_CounterMode_Up;
|
6 | tim.TIM_Period = 0xFFFFFFFF-1;
|
7 | tim.TIM_Prescaler = 4;
|
8 | tim.TIM_RepetitionCounter = 0x00;
|
9 | TIM_TimeBaseInit(TIM2,&tim);
|
10 | TIM_ARRPreloadConfig(TIM2,ENABLE);
|
11 |
|
12 | TIM_Cmd(TIM2,ENABLE);
|
13 | TIM_SetCounter(TIM2,0);
|
14 |
|
15 |
|
16 | for(unsigned int i=0;i<2048;i++)
|
17 | {
|
18 | res = f_write(&fil,(void*)data,512,&lenght);
|
19 | if(res != FR_OK)
|
20 | {
|
21 | int a = 12;
|
22 | int b = 12;
|
23 | int c = a+b;
|
24 | while(1){;}
|
25 | }
|
26 | }
|
27 |
|
28 | unsigned int out_counter = TIM_GetCounter(TIM2);
|
29 | TIM_Cmd(TIM2,DISABLE);
|
Timer2 läuft mit 84Mhz, die auf 21Mhz geteilt werden. Der Counterwert
wird am ende durch 21Mhz geteilt, dann erhält man die Sek. Anzahl.
Aber hier ist das Problem. Zuerst hatte ich den Timer mit der
CLock_Division durch 4 geteilt und den Prescaler auf 1. Aber hier
erhalte ich falsche Ergebnisse, und zwar genau den doppelten Wert.
Wenn ich Clock_Division auf 1 und Prescaler auf 4 setzte, wie oben, dann
funktioniert alles richtig.
Dabei müsste es doch das gleiche sein, oder habe ich da einen
Denkfehler?
MfG
GamerBoy