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

 
 
> Скорость махания ногами 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
Ответов
Kostia87
сообщение Mar 18 2011, 08:52
Сообщение #2





Группа: Новичок
Сообщений: 1
Регистрация: 18-03-11
Пользователь №: 63 683



У меня получалось частоту переключения разогнать до 2Мгц на 72Мгц. используй этот код
.equ STACK_TOP, 0x10002000

.text
.global _start
.thumb
.syntax unified
_start:
.word STACK_TOP,start
.type start,function

.org 0x124
start:
ldr.w r0,=0x50008000 @ адресс GPIO0DIR
ldr.w r1,=0x00000000
ldr.w r2,=0xFFFFFFFFF
str.w r2,[r0] @ порт 0 все порты на выход
ldr.w r0,=0x50003FFC @ адресс GPIO0DATA
aaaa:
str.w r1,[r0] @ порт в 0
dsb.w @ синхронизация
str.w r2,[r0] @ порт в 1
dsb.w
bx aaaa

Весь код написан в thumb2 инструкциях для увеличения бысродействия. Инструкция синхронизации dsb нужна для того что бы значение успело записать в память, так как запись происходит не непосредственно в память а через буфер шины. Если ее не вставить на осцилографе вместо меандра будут палки.

Цитата(Kostia87 @ Mar 18 2011, 11:30) *
У меня получалось частоту переключения разогнать до 2Мгц на 72Мгц. используй этот код
.equ STACK_TOP, 0x10002000

.text
.global _start
.thumb
.syntax unified
_start:
.word STACK_TOP,start
.type start,function

.org 0x124
start:
ldr.w r0,=0x50008000 @ адресс GPIO0DIR
ldr.w r1,=0x00000000
ldr.w r2,=0xFFFFFFFFF
str.w r2,[r0] @ порт 0 все порты на выход
ldr.w r0,=0x50003FFC @ адресс GPIO0DATA
aaaa:
str.w r1,[r0] @ порт в 0
dsb.w @ синхронизация
str.w r2,[r0] @ порт в 1
dsb.w
b.w aaaa
Изменил код переход нужен b.w , а не bx



весь код с инициализацией ФАПЧ следующий.

.equ STACK_TOP, 0x10002000

.text
.global _start
.thumb
.syntax unified
_start:
.word STACK_TOP,start
.type start,function

.org 0x124
start:
bl SYS_TACT_INIT

ldr.w r0,=0x50008000 @ адресс GPIO0DIR
ldr.w r1,=0x00000000
ldr.w r2,=0xFFFFFFFFF
str.w r2,[r0] @ порт 0 все порты на выход
ldr.w r0,=0x50003FFC @ адресс GPIO0DATA
aaaa:
str.w r1,[r0] @ порт в 0
dsb.w @ синхронизация
str.w r2,[r0] @ порт в 1
dsb.w
b.w aaaa
SYS_TACT_INIT:
push {lr}
ldr.w r1,=0x00000001
ldr.w r2,=0x00000000

ldr.w r0,=PDRUNCFG
str.w r3,[r0]
bic.w r3,#0xA0
ldr.w r3,[r0]

ldr.w r0,=SYSPLLCLKSEL
str.w r1,[r0]
dsb
ldr.w r0,=SYSPLLUEN
str.w r2,[r0]
dsb
str.w r1,[r0]

bl SYS_PLL_72MHZ

ldr.w r0,=MAINCLKSEL
ldr.w r3,=0x00000003
str.w r3,[r0]
dsb
ldr.w r0,=MAINCLKUEN
str.w r2,[r0]
dsb
str.w r1,[r0]

ldr.w r0,=SYSAHBCLKCTRL
ldr.w r1,[r0]
ldr.w r2,=0x00001000
orr.w r1,r2
str.w r1,[r0]
dsb
pop {pc}

SYS_PLL_72MHZ:
push {r0-r2}
ldr.w r0,=SYSPLLCTRL
ldr.w r1,=0x00000005
str.w r1,[r0]
dsb
ldr.w r0,=SYSPLLSTAT
SYS_2:
ldr.w r1,[r0]
ldr.w r2,=0x00000001
ands.w r2,r1
bne.w SYS_2
pop {r0-r2}
bx lr




Сообщение отредактировал Kostia87 - Mar 18 2011, 08:34
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
- - alexey_z83   А у меня, вроде, за один такт получилось (хотя в р...   Jan 19 2011, 18:09
|- - 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


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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 01:23
Рейтинг@Mail.ru


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