реклама на сайте
подробности

 
 
> Какую максимальную частоту можно считать с портов контроллера?, LPC2478
Prinz
сообщение Apr 15 2011, 11:24
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 11-09-08
Пользователь №: 40 121



Использую контроллер LPC2478.
Перефирия на частоте 72МГц.
Подскажите пожалуйста какую максимальную частоту можно считать этим контроллером с его портов?
И как будет быстрее в прерывании по изменении порта или в лмнлвнлм цикле?
Как правильно настроить ИАР для этого?
Поделитесь Ваши опытом пожалуйста. Самостоятельно у меня получилось считать только до 1 MHz. И то с натягом.
Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Apr 19 2011, 10:56
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE
Сделал, по Вашему совету.


Разве я вам такое насоветовал?

Вот причесанный и компилирующийся код:

CODE
#define VIDEOPORT FIOPIN

__ramfunc unsigned int GetScanLine(unsigned char *dest, unsigned long volatile *port)
{
   unsigned int v;
   unsigned char *d=dest;
   while((*port)&(1<<9)); //Ждем начала строки
   do
   {
      while(!((v=*port)&(1<<8))); //Ждем пикселя
      *d++=v; //Сохраняем
      while((v=*port)&(1<<8)); //Ждем конца строба пикселя, оптимальнее заменить на просто достаточную задержку
    }
    while(!(v&(1<<9))); //Пока не закончилась строка
    return d-dest;
}

extern void PrintPixCount(unsigned int);
extern unsigned char BmpBuff[];

void CameraTest(void)
{
  unsigned int PixelCount;
  __disable_interrupt();
  while(1)
  {
    while(!(VIDEOPORT&(1<<9))); //А вдруг начало в середине строки
    PixelCount=GetScanLine(BmpBuff,&VIDEOPORT);
    PrintPixCount(PixelCount);
  }
}


Листинг:

CODE

187 #define VIDEOPORT FIOPIN
188

\ In section .textrw, align 4, keep-with-next
189 __ramfunc unsigned int GetScanLine(unsigned char *dest, unsigned long volatile *port)
190 {
191 unsigned int v;
192 unsigned char *d=dest;
\ GetScanLine:
\ 00000000 0020A0E1 MOV R2,R0
193 while((*port)&(1<<9)); //Ждем начала строки
\ ??GetScanLine_0:
\ 00000004 003091E5 LDR R3,[R1, #+0]
\ 00000008 800F13E3 TST R3,#0x200
\ 0000000C FCFFFF1A BNE ??GetScanLine_0
194 do
195 {
196 while(!((v=*port)&(1<<8))); //Ждем пикселя
\ ??GetScanLine_1:
\ 00000010 003091E5 LDR R3,[R1, #+0]
\ 00000014 400F13E3 TST R3,#0x100
\ 00000018 FCFFFF0A BEQ ??GetScanLine_1
197 *d++=v; //Сохраняем
\ 0000001C 0130C2E4 STRB R3,[R2], #+1
198 while((v=*port)&(1<<8)); //Ждем конца строба пикселя, оптимальнее заменить на просто достаточную задержку
\ ??GetScanLine_2:
\ 00000020 003091E5 LDR R3,[R1, #+0]
\ 00000024 400F13E3 TST R3,#0x100
\ 00000028 FCFFFF1A BNE ??GetScanLine_2
199 }
200 while(!(v&(1<<9))); //Пока не закончилась строка
\ 0000002C 800F13E3 TST R3,#0x200
\ 00000030 F6FFFF0A BEQ ??GetScanLine_1
201 return d-dest;
\ 00000034 000042E0 SUB R0,R2,R0
\ 00000038 1EFF2FE1 BX LR ;; return
202 }
203
204 extern void PrintPixCount(unsigned int);
205 extern unsigned char BmpBuff[];
206

\ In section .text, align 4, keep-with-next
207 void CameraTest(void)
208 {
\ CameraTest:
\ 00000000 30402DE9 PUSH {R4,R5,LR}
\ 00000004 04D04DE2 SUB SP,SP,#+4
209 unsigned int PixelCount;
210 __disable_interrupt();
\ 00000008 00000FE1 MRS R0,CPSR
\ 0000000C C00080E3 ORR R0,R0,#0xC0
\ 00000010 00F021E1 MSR CPSR_c,R0
\ 00000014 24509FE5 LDR R5,??CameraTest_0 ;; BmpBuff
\ 00000018 AF41E0E3 MVN R4,#-1073741781
\ 0000001C FF4DC4E3 BIC R4,R4,#0x3FC0
211 while(1)
212 {
213 while(!(VIDEOPORT&(1<<9))); //А вдруг начало в середине строки
\ ??CameraTest_1:
\ 00000020 000094E5 LDR R0,[R4, #+0]
\ 00000024 800F10E3 TST R0,#0x200
\ 00000028 FCFFFF0A BEQ ??CameraTest_1
214 PixelCount=GetScanLine(BmpBuff,&VIDEOPORT);
\ 0000002C 0410A0E1 MOV R1,R4
\ 00000030 0500A0E1 MOV R0,R5
\ 00000034 ........ BL GetScanLine
215 PrintPixCount(PixelCount);
\ 00000038 ........ BL PrintPixCount
\ 0000003C F7FFFFEA B ??CameraTest_1
\ ??CameraTest_0:
\ 00000040 ........ DC32 BmpBuff
\ 00000044 REQUIRE _A_FIOPIN
216 }
217 }



Но оптимально еще заменить вторую проверку на задержку. Какие точно у Вас параметры строба пикселей? Длительность 1 и длительность нуля огласите пожалуйста.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Prinz
сообщение Apr 19 2011, 11:21
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 11-09-08
Пользователь №: 40 121



Цитата(Rst7 @ Apr 19 2011, 16:56) *
Разве я вам такое насоветовал?

Вот причесанный и компилирующийся код:



Листинг:


Но оптимально еще заменить вторую проверку на задержку. Какие точно у Вас параметры строба пикселей? Длительность 1 и длительность нуля огласите пожалуйста.

Я его пробовал, он почему-то хуже работает.
Может с иаром проблема.

Вот моя версия, почти тоже всё самое, но работатет быстрее:

Код
  void CameraTest(BYTE *BmpBuff)
  {
    unsigned char v;
    BYTE *d = BmpBuff;
    BYTE str1[40];
    DWORD PixelCount = 0;
    bool FlagReady = false;
    pInt32U REG = (pInt32U)0x3FFFC056;  //àäðåññ FIO2PIN2
    __disable_interrupt();  
    m4: if((*REG & 0x40) == 0x0)
        {
          PixelCount = 0x0;
          goto m3;
        }
        goto m4;
    m3: if((*REG & 0x40)) goto m1;
        goto m3;
    m1: v = *REG;
        if((v & 0x40) == 0x0) goto m2;  
        if((v & 0x80))
        {
          if(FlagReady)
          {
              //*BmpBuff++ = v;
              PixelCount ++;
              FlagReady = false;
          }
        }
        else FlagReady = true;
        goto m1;
    m2: //PixelCount = BmpBuff - d;
        //BmpBuff = d;
        sprintf((char*)str1,"%u",PixelCount);
        lcd_put_str(10, 28, str1, 0x00FFFFFF,0);    
        goto m4;
    }


Листинг:


CODE
void CameraTest(BYTE *BmpBuff)
92 {
\ CameraTest:
\ 00000000 F0432DE9 PUSH {R4-R9,LR}
\ 00000004 2CD04DE2 SUB SP,SP,#+44
\ 00000008 0040B0E1 MOVS R4,R0
93 unsigned char v;
94 BYTE *d = BmpBuff;
\ 0000000C 0460B0E1 MOVS R6,R4
95 BYTE str1[40];
96 DWORD PixelCount = 0;
\ 00000010 0000A0E3 MOV R0,#+0
\ 00000014 0070B0E1 MOVS R7,R0
97 bool FlagReady = false;
\ 00000018 0000A0E3 MOV R0,#+0
\ 0000001C 0080B0E1 MOVS R8,R0
98 pInt32U REG = (pInt32U)0x3FFFC056; //àäðåññ FIO2PIN2
\ 00000020 A701E0E3 MVN R0,#-1073741783
\ 00000024 FE0DC0E3 BIC R0,R0,#0x3F80
\ 00000028 0090B0E1 MOVS R9,R0
99 __disable_interrupt();
\ 0000002C 00000FE1 MRS R0,CPSR
\ 00000030 C00080E3 ORR R0,R0,#0xC0
\ 00000034 00F021E1 MSR CPSR_c,R0
100 m4: if((*REG & 0x40) == 0x0)
\ ??CameraTest_0:
\ 00000038 0000D9E5 LDRB R0,[R9, #+0]
\ 0000003C 400010E3 TST R0,#0x40
\ 00000040 0200001A BNE ??CameraTest_1
101 {
102 PixelCount = 0x0;
\ 00000044 0000A0E3 MOV R0,#+0
\ 00000048 0070B0E1 MOVS R7,R0
103 goto m3;
\ 0000004C 000000EA B ??CameraTest_2
104 }
105 goto m4;
\ ??CameraTest_1:
\ 00000050 F8FFFFEA B ??CameraTest_0
106 m3: if((*REG & 0x40)) goto m1;
\ ??CameraTest_2:
\ 00000054 0000D9E5 LDRB R0,[R9, #+0]
\ 00000058 400010E3 TST R0,#0x40
\ 0000005C 0000001A BNE ??CameraTest_3
107 goto m3;
\ ??CameraTest_4:
\ 00000060 FBFFFFEA B ??CameraTest_2
108 m1: v = *REG;
\ ??CameraTest_3:
\ 00000064 000099E5 LDR R0,[R9, #+0]
\ 00000068 0050B0E1 MOVS R5,R0
109 if((v & 0x40) == 0x0) goto m2;
\ 0000006C 400015E3 TST R5,#0x40
\ 00000070 0B00001A BNE ??CameraTest_5
110 if((v & 0x80))
111 {
112 if(FlagReady)
113 {
114 //*BmpBuff++ = v;
115 PixelCount ++;
116 FlagReady = false;
117 }
118 }
119 else FlagReady = true;
120 goto m1;
121 m2: //PixelCount = BmpBuff - d;
122 //BmpBuff = d;
123 sprintf((char*)str1,"%u",PixelCount);
\ 00000074 0720B0E1 MOVS R2,R7
\ 00000078 ........ ADR R1,??DataTable3 ;; 0x25, 0x75, 0x00, 0x00
\ 0000007C 04008DE2 ADD R0,SP,#+4
\ 00000080 ........ BL sprintf
124 lcd_put_str(10, 28, str1, 0x00FFFFFF,0);
\ 00000084 0000A0E3 MOV R0,#+0
\ 00000088 00008DE5 STR R0,[SP, #+0]
\ 0000008C FF34E0E3 MVN R3,#-16777216
\ 00000090 04208DE2 ADD R2,SP,#+4
\ 00000094 1C10A0E3 MOV R1,#+28
\ 00000098 0A00A0E3 MOV R0,#+10
\ 0000009C ........ BL _Z11lcd_put_strttPhjj
125 goto m4;
\ 000000A0 E4FFFFEA B ??CameraTest_0
\ ??CameraTest_5:
\ 000000A4 800015E3 TST R5,#0x80
\ 000000A8 0600000A BEQ ??CameraTest_6
\ 000000AC FF8018E2 ANDS R8,R8,#0xFF ;; Zero extend
\ 000000B0 000058E3 CMP R8,#+0
\ 000000B4 0500000A BEQ ??CameraTest_7
\ 000000B8 017097E2 ADDS R7,R7,#+1
\ 000000BC 0000A0E3 MOV R0,#+0
\ 000000C0 0080B0E1 MOVS R8,R0
\ 000000C4 010000EA B ??CameraTest_7
\ ??CameraTest_6:
\ 000000C8 0100A0E3 MOV R0,#+1
\ 000000CC 0080B0E1 MOVS R8,R0
\ ??CameraTest_7:
\ 000000D0 E3FFFFEA B ??CameraTest_3
126 }


Сообщение отредактировал IgorKossak - Apr 19 2011, 11:22
Причина редактирования: [codebox] !!!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Prinz   Какую максимальную частоту можно считать с портов контроллера?   Apr 15 2011, 11:24
- - scifi   Для точного захвата внешних сигналов следует испол...   Apr 15 2011, 11:30
|- - Prinz   Цитата(scifi @ Apr 15 2011, 17:30) Для то...   Apr 15 2011, 11:37
|- - kovigor   Цитата(Prinz @ Apr 15 2011, 14:37) И как ...   Apr 15 2011, 12:02
|- - Prinz   Цитата(kovigor @ Apr 15 2011, 18:02) Боюс...   Apr 18 2011, 05:33
- - Rst7   Строб заводите на ножку прерывания. Режим для этог...   Apr 16 2011, 15:12
- - Prinz   Был бы рад краткому курсу по asm LPC ) Кодvoid Ca...   Apr 18 2011, 07:36
|- - kovigor   Цитата(Prinz @ Apr 18 2011, 10:36) Вот эт...   Apr 18 2011, 07:52
|- - Prinz   Цитата(kovigor @ Apr 18 2011, 13:52) А вы...   Apr 18 2011, 08:04
|- - kovigor   Цитата(Prinz @ Apr 18 2011, 11:04) Может ...   Apr 18 2011, 08:17
|- - Prinz   Цитата(kovigor @ Apr 18 2011, 14:17) А вы...   Apr 18 2011, 08:35
|- - Слесарь   Цитата(Prinz @ Apr 18 2011, 12:35) Мне на...   Apr 18 2011, 08:36
|- - Prinz   Цитата(Слесарь @ Apr 18 2011, 14:36) Тогд...   Apr 18 2011, 08:46
|- - scifi   Цитата(Prinz @ Apr 18 2011, 12:46) Я не в...   Apr 18 2011, 11:16
|- - ViKo   Цитата(scifi @ Apr 18 2011, 14:16) Лучше ...   Apr 18 2011, 11:33
|- - Prinz   Цитата(ViKo @ Apr 18 2011, 17:33) Наверно...   Apr 18 2011, 11:38
|- - ViKo   Цитата(Prinz @ Apr 18 2011, 14:38) А како...   Apr 18 2011, 11:59
- - Слесарь   Я при тактовой частоте 24 мГц PIC контроллера, уст...   Apr 18 2011, 08:18
- - Слесарь   проблема может статься в задержке распространения ...   Apr 18 2011, 08:58
|- - Prinz   Цитата(Слесарь @ Apr 18 2011, 14:58) проб...   Apr 18 2011, 09:10
- - Слесарь   У тебя есть осцилограф Если бы у меня был осц...   Apr 18 2011, 09:21
|- - Prinz   Цитата(Слесарь @ Apr 18 2011, 15:21) У те...   Apr 18 2011, 09:28
||- - Слесарь   Цитата(Prinz @ Apr 18 2011, 13:28) Я так ...   Apr 18 2011, 09:47
||- - Prinz   Цитата(Слесарь @ Apr 18 2011, 15:47) Мало...   Apr 18 2011, 09:53
|- - ViKo   Цитата(Слесарь @ Apr 18 2011, 12:21) Если...   Apr 18 2011, 11:07
|- - Prinz   Цитата(ViKo @ Apr 18 2011, 17:07) У меня ...   Apr 18 2011, 11:12
- - Prinz   Коллеги, кто ещё что посоветует? Прерывание счиате...   Apr 18 2011, 10:58
- - Rst7   Во-первых, я не помню, но посмотрите, есть ли в Ва...   Apr 18 2011, 12:10
|- - Prinz   Цитата(Rst7 @ Apr 18 2011, 18:10) Во-перв...   Apr 19 2011, 07:39
- - Prinz   Кодvoid CameraTest(BYTE *BmpBuff) 92 {...   Apr 19 2011, 09:51
- - Rst7   QUOTE Я его пробовал, он почему-то хуже работает. ...   Apr 19 2011, 11:26
|- - Prinz   Цитата(Rst7 @ Apr 19 2011, 17:26) Покажит...   Apr 19 2011, 12:04
- - Rst7   QUOTE Я бы не писал это ересь, если бы она не рабо...   Apr 19 2011, 12:57
|- - Prinz   Цитата(Rst7 @ Apr 19 2011, 18:57) Ага, то...   Apr 20 2011, 04:57
- - Rst7   Вы бы все-таки огласили параметры тактового сигнал...   Apr 20 2011, 07:58
|- - Prinz   Цитата(Rst7 @ Apr 20 2011, 13:58) Вы бы в...   Apr 20 2011, 08:48
- - Rst7   QUOTE Ну только ради Вас: Это я и так понимаю. А ...   Apr 20 2011, 10:25
|- - Prinz   Цитата(Rst7 @ Apr 20 2011, 16:25) Это я и...   Apr 20 2011, 10:50
- - Flexz   А обязательно по PCLK синхронизироваться каждый ра...   Apr 20 2011, 11:23
|- - Prinz   Цитата(Flexz @ Apr 20 2011, 17:23) А обяз...   Apr 20 2011, 12:07
- - Rst7   QUOTE он же стабильный и кратный частоте проца. Э...   Apr 20 2011, 12:27
|- - Prinz   Цитата(Rst7 @ Apr 20 2011, 18:27) . 1) Ч...   Apr 21 2011, 05:57
- - Rst7   QUOTE 1) Что-то мой иар не знает __delay_cycles дл...   Apr 21 2011, 08:09
|- - Prinz   Накатал кодик: Код__ramfunc unsigned int GetScanL...   Apr 21 2011, 08:46
- - Rst7   QUOTE Оцените, пожалуйста. Ересь какая-то. У Вас ...   Apr 21 2011, 10:09
|- - Prinz   Цитата(Rst7 @ Apr 21 2011, 16:09) Ересь к...   Apr 21 2011, 10:12
- - Rst7   QUOTE А что нельзя, в начале один раз затактироват...   Apr 21 2011, 10:15
|- - Prinz   Цитата(Rst7 @ Apr 21 2011, 16:15) Нельзя,...   Apr 21 2011, 11:27
- - Rst7   QUOTE Это должно быть так!? Уберите вот эти _...   Apr 21 2011, 11:53
|- - Prinz   Цитата(Rst7 @ Apr 21 2011, 17:53) Уберите...   Apr 22 2011, 04:58
- - Rst7   QUOTE Что нет так? Ну надо точно засинхронизирова...   Apr 22 2011, 06:44
|- - Prinz   Цитата(Rst7 @ Apr 22 2011, 12:44) Ну надо...   Apr 22 2011, 08:28
- - Rst7   QUOTE 1,125 MHz Поднимает на ура и железно. Это е...   Apr 22 2011, 08:50
|- - Prinz   Цитата(Rst7 @ Apr 22 2011, 14:50) Это еще...   Apr 22 2011, 08:58
- - Rst7   QUOTE 6 всё равно маловато, надо 9 ) Вы бы опреде...   Apr 22 2011, 09:11
|- - Prinz   Цитата(Rst7 @ Apr 22 2011, 15:11) Вы бы о...   Apr 22 2011, 09:34
- - Rst7   QUOTE 4.5 это нормальный результат. В идеале надо ...   Apr 22 2011, 09:53
|- - Prinz   Цитата(Rst7 @ Apr 22 2011, 15:53) Можно и...   Apr 22 2011, 10:12
- - Rst7   QUOTE Тоесть его писать самому? Его нет в библиоте...   Apr 22 2011, 10:26
- - Prinz   Цитата(Rst7 @ Apr 22 2011, 16:26) Посмотр...   Apr 22 2011, 10:32


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 4th September 2025 - 03:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.02395 секунд с 7
ELECTRONIX ©2004-2016