|
Скорость махания ногами lpc1343 |
|
|
|
Jan 16 2011, 09:16
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 3-05-08
Пользователь №: 37 238

|
Здравствуйте, начал осваивать кортексы, взял пример моргания светодиодом, заодно решил проверить максимальную скорость махания ногами, получилось, что при частоте 72мГц максимальная скорость коммутации ~ 0,5мГц. Использовал стандартную функцию: GPIO_SetValue(0, 7); GPIO_ClearValue(0, 7); из примера IARARM 5.50 для lpc1343 SystemTick. Как я понял управление осуществляется через: Код typedef struct { union { __IO uint32_t MASKED_ACCESS[4096]; struct { uint32_t RESERVED0[4095]; __IO uint32_t DATA; }; }; uint32_t RESERVED1[4096]; __IO uint32_t DIR; __IO uint32_t IS; __IO uint32_t IBE; __IO uint32_t IEV; __IO uint32_t IE; __IO uint32_t RIS; __IO uint32_t MIS; __IO uint32_t IC; } LPC_GPIO_TypeDef;
void GPIO_SetValue(uint8_t portNum, uint32_t bitValue) { LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
if (pGPIO != NULL) { pGPIO->DATA |= (0x1<<bitValue);
} }
void GPIO_ClearValue(uint8_t portNum, uint32_t bitValue) { LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
if (pGPIO != NULL) { pGPIO->DATA &= ~(0x1<<bitValue); } } что при выполнении вылилось в 53такта на смену состояния, что соответствует ~0,5мГц. Собственно вопрос: можно ли достичь большей скорости используя эти библиотеки и можно ли напрямую использовать регистр GPIOnDATA для управления состоянием вывода поскольку в хедере этих регистров не нашел.
|
|
|
|
|
 |
Ответов
|
Jan 19 2011, 18:09
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 3-05-08
Пользователь №: 37 238

|
А у меня, вроде, за один такт получилось (хотя в реальной программе это мало пригодится), но только для pin8-pin11 порта, а для pin0-pin7 два такта (так и не понял почему компилятор так разложил?). Максимальная оптимизация по скорости IAR 5.50 Код LPC_GPIO0->DATA = 0x800; LPC_GPIO0->DATA = 0; LPC_GPIO0->DATA = 0x800; LPC_GPIO0->DATA = 0; LPC_GPIO0->DATA = 0x800; LPC_GPIO0->DATA = 0; LPC_GPIO0->DATA = 0x800; LPC_GPIO0->DATA = 0;
0x424: 0xf44f 0x6100 MOV.W r1, #2048 ; 0x800 0x428: 0x2200 MOVS r2, #0 LPC_GPIO0->DATA = 0x800; ??main_1: 0x42a: 0x6001 STR r1, [r0] LPC_GPIO0->DATA = 0; 0x42c: 0x6002 STR r2, [r0] LPC_GPIO0->DATA = 0x800; 0x42e: 0x6001 STR r1, [r0] LPC_GPIO0->DATA = 0; 0x430: 0x6002 STR r2, [r0] LPC_GPIO0->DATA = 0x800; 0x432: 0x6001 STR r1, [r0] LPC_GPIO0->DATA = 0; 0x434: 0x6002 STR r2, [r0] LPC_GPIO0->DATA = 0x800; 0x436: 0x6001 STR r1, [r0] LPC_GPIO0->DATA = 0; 0x438: 0x6002 STR r2, [r0] 0x43a: 0xe7f6 B.N ??main_1 ; 0x42a 0x43c: 0x0000 MOVS r0, r0 0x43e: 0x0000 MOVS r0, r0 ??DataTable2: 0x440: 0x10000458 DC32 SysTickCnt
LPC_GPIO0->DATA = 0x80; LPC_GPIO0->DATA = 0; LPC_GPIO0->DATA = 0x80; LPC_GPIO0->DATA = 0; LPC_GPIO0->DATA = 0x80; LPC_GPIO0->DATA = 0; LPC_GPIO0->DATA = 0x80; LPC_GPIO0->DATA = 0;
0x422: 0x480c LDR.N r0, ??DataTable2_3 [0x454]; GPIO0DATA LPC_GPIO0->DATA = 0x80; ??main_1: 0x424: 0x2180 MOVS r1, #128 ; 0x80 0x426: 0x6001 STR r1, [r0] LPC_GPIO0->DATA = 0; 0x428: 0x2100 MOVS r1, #0 0x42a: 0x6001 STR r1, [r0] LPC_GPIO0->DATA = 0x80; 0x42c: 0x2180 MOVS r1, #128 ; 0x80 0x42e: 0x6001 STR r1, [r0] LPC_GPIO0->DATA = 0; 0x430: 0x2100 MOVS r1, #0 0x432: 0x6001 STR r1, [r0] LPC_GPIO0->DATA = 0x80; 0x434: 0x2180 MOVS r1, #128 ; 0x80 0x436: 0x6001 STR r1, [r0] LPC_GPIO0->DATA = 0; 0x438: 0x2100 MOVS r1, #0 0x43a: 0x6001 STR r1, [r0] LPC_GPIO0->DATA = 0x80; 0x43c: 0x2180 MOVS r1, #128 ; 0x80 0x43e: 0x6001 STR r1, [r0] LPC_GPIO0->DATA = 0;
Сообщение отредактировал alexey_z83 - Jan 19 2011, 18:32
|
|
|
|
Сообщений в этой теме
alexey_z83 Скорость махания ногами lpc1343 Jan 16 2011, 09:16 codier А не проще напрямую регистрами порта? С LPC13хх не... Jan 16 2011, 09:28 alexey_z83 ЦитатаА не проще напрямую регистрами порта?
а раз... Jan 16 2011, 09:59 codier Цитата(alexey_z83 @ Jan 16 2011, 12:59) P... Jan 16 2011, 19:00 HARMHARM Цитата(alexey_z83 @ Jan 16 2011, 11:59) п... Jan 16 2011, 19:03 alexey_z83 Спасибо, разобрался, вроде, 4 такта (~ 9мГц при 72... Jan 16 2011, 11:00 GetSmart скорее всего может ещё в 2 раза быстрее. только ну... Jan 16 2011, 13:29 alexey_z83 Спасибо за подсказку, GetSmart, оптимизация творит... Jan 16 2011, 14:04 alexey_z83 ЦитатаА что значит у устройств нету своего CS?
то,... Jan 18 2011, 03:44 HARMHARM А не проще ли коммутировать sck на кристалле? У LP... Jan 18 2011, 08:11 rezident Цитата(alexey_z83 @ Jan 18 2011, 08:44) т... Jan 18 2011, 17:21 alexey_z83 Да вы правы, до 3 устройств можно подключить, я то... Jan 18 2011, 09:57 HARMHARM Спрашивайте, посоветуем, тут все мирные Jan 18 2011, 10:13 esaulenka Если исходный вопрос ещё актуален:
- регистр GPIOx... Jan 18 2011, 13:21 alexey_z83 ЦитатаТак не бывает! ...
Возьмем к примеру:
... Jan 19 2011, 04:04 HARMHARM Это не совсем SPI, а просто сдвиговый регистр. А в... Jan 19 2011, 12:08 alexey_z83 И опять вы правы, HARMHARM, хоть вход и не cs, но ... Jan 19 2011, 14:57 pofikus так дрыгать ногами можно быстрее....
static __IN... Jan 19 2011, 16:54 GetSmart Бфстрее двух тактов на изменение пина не бывает. Jan 19 2011, 17:08 zltigo QUOTE (alexey_z83 @ Jan 19 2011, 21:09) А... Jan 19 2011, 18:39 alexey_z83 CYCLECOUNTER — в симуляторе разве не кол-во тактов... Jan 19 2011, 18:57 zltigo QUOTE (alexey_z83 @ Jan 19 2011, 21:57) C... Jan 19 2011, 18:58 alexey_z83 Как расценивать ваш ответ? Jan 19 2011, 19:01 zltigo QUOTE (alexey_z83 @ Jan 19 2011, 22:01) К... Jan 19 2011, 19:06 alexey_z83 Хорошо, завтра посмотрю осциллографом, я так понял... Jan 19 2011, 19:12 GetSmart Команда STR займёт как минимум 2 такта. Поэтому са... Jan 19 2011, 20:18 alexey_z83 Помогите с ответами на вопросы:
1). В документе D... Jan 20 2011, 14:52 vallav Цитата(alexey_z83 @ Jan 20 2011, 17:52) 1... Jan 23 2011, 13:50 Kostia87 У меня получалось частоту переключения разогнать д... Mar 18 2011, 08:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|