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

 
 
> Скорость махания ногами lpc1343
alexey_z83
сообщение Jan 16 2011, 09:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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 для управления состоянием вывода поскольку в хедере этих регистров не нашел.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexey_z83
сообщение Jan 19 2011, 18:09
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 08:41
Рейтинг@Mail.ru


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