|
Какую максимальную частоту можно считать с портов контроллера?, LPC2478 |
|
|
|
 |
Ответов
|
Apr 19 2011, 10:56
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 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 и длительность нуля огласите пожалуйста.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Apr 19 2011, 11:21
|
Частый гость
 
Группа: Участник
Сообщений: 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] !!!
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|