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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Скорость махания ногами 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
codier
сообщение Jan 16 2011, 09:28
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 21-01-05
Пользователь №: 2 113



А не проще напрямую регистрами порта? С LPC13хх не работал, на LPC17xx делал так:

Код
#include "cmsis/lpc17xx.h"
#include "cmsis/system_LPC17xx.h"

int main(void)
{
    SystemInit();

    // 1 - output
    LPC_GPIO1->FIODIR = 1 << 27;

    while(1)
    {
        LPC_GPIO1->FIOSET = 1 << 27;
        for(volatile int i = 0; i < 1000000; i++);
        LPC_GPIO1->FIOCLR = 1 << 27;
        for(volatile int i = 0; i < 1000000; i++);
    }
}


На 100МHz проца 10MHz на ножках в таком режиме получить можно, вопрос только зачем? sm.gif

Всякие условыне операторы лучше не использовать как в приведённых выше функциях, т.к. могут быть накладные расходы с конвеером.
Go to the top of the page
 
+Quote Post
alexey_z83
сообщение Jan 16 2011, 09:59
Сообщение #3


Участник
*

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



Цитата
А не проще напрямую регистрами порта?


а разве это не он регистр GPIOnDATA?

Цитата
На 100МHz проца 10MHz на ножках в таком режиме получить можно, вопрос только зачем?


программный spi (нету у устройств своего cs, а у контроллера один spi)

P.S. вы с задержками не ошиблись?

Сообщение отредактировал alexey_z83 - Jan 16 2011, 10:23
Go to the top of the page
 
+Quote Post
alexey_z83
сообщение Jan 16 2011, 11:00
Сообщение #4


Участник
*

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



Спасибо, разобрался, вроде, 4 такта (~ 9мГц при 72мГц) на смену состояния получилось.

Скажите кто имел дело с lpc1343, это максимум для него?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 16 2011, 13:29
Сообщение #5


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



скорее всего может ещё в 2 раза быстрее. только нужно всё оптимизировать и развернуть цикл.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
alexey_z83
сообщение Jan 16 2011, 14:04
Сообщение #6


Участник
*

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



Спасибо за подсказку, GetSmart, оптимизация творит чудеса sm.gif .
Благодарю всех за ответы на глупые вопросы.
Go to the top of the page
 
+Quote Post
codier
сообщение Jan 16 2011, 19:00
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 21-01-05
Пользователь №: 2 113



Цитата(alexey_z83 @ Jan 16 2011, 12:59) *
P.S. вы с задержками не ошиблись?


Ясен пень что без циков :-))
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Jan 16 2011, 19:03
Сообщение #8


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(alexey_z83 @ Jan 16 2011, 11:59) *
программный spi (нету у устройств своего cs, а у контроллера один spi)

А что значит у устройств нету своего CS?
Необязательно использовать CS от SSP, можно просто ножкой дергать. Запросто несколько устройств можно подключить, и быстрее будет работать чем софтварный spi.
Go to the top of the page
 
+Quote Post
alexey_z83
сообщение Jan 18 2011, 03:44
Сообщение #9


Участник
*

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



Цитата
А что значит у устройств нету своего CS?

то, что у устройств есть только входы clk и sdi, даже выхода sdo нет, потому и не могу повесить на одну линию.
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Jan 18 2011, 08:11
Сообщение #10


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



А не проще ли коммутировать sck на кристалле? У LPC1343 два вывода SCK, нога 22 и нога 29. Даже еще один есть, нога 31. Это для LQFP.
Go to the top of the page
 
+Quote Post
alexey_z83
сообщение Jan 18 2011, 09:57
Сообщение #11


Участник
*

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



Да вы правы, до 3 устройств можно подключить, я только начал разбираться поэтому не все тонкости знаю.
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Jan 18 2011, 10:13
Сообщение #12


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Спрашивайте, посоветуем, тут все мирные sm.gif
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jan 18 2011, 13:21
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Если исходный вопрос ещё актуален:
- регистр GPIOxDATA в стандартном заголовке теперь значится как GPIOx->DATA
- гораздо быстрее (и идеологически правильней, граблей меньше) работать через GPIOx->MASKED_ACCESS[y]. Измерений не проводил, но должно получиться ускорение в два раза.

PS универсальные хедеры - это всё-таки хорошо. IAR я давно не видел, но в кейле определения этих регистров точно такие же.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 18 2011, 17:21
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(alexey_z83 @ Jan 18 2011, 08:44) *
то, что у устройств есть только входы clk и sdi, даже выхода sdo нет, потому и не могу повесить на одну линию.
Так не бывает! Как же в вашем устройстве тогда фреймовая синхронизация осуществляется? По паузе в передаче?
Go to the top of the page
 
+Quote Post
alexey_z83
сообщение Jan 19 2011, 04:04
Сообщение #15


Участник
*

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



Цитата
Так не бывает! ...


Возьмем к примеру:

http://www.st.com/internet/com/TECHNICAL_R.../CD00149163.pdf стр.9

каким образом фрэймы отделяем?

Я конечно понемаю, что cs надежнее, но нет его и в результате импульсной помехи есть вероятность "перескочить через бит".

Сообщение отредактировал alexey_z83 - Jan 19 2011, 04:08
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 19:17
Рейтинг@Mail.ru


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