|
Скорость махания ногами 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 для управления состоянием вывода поскольку в хедере этих регистров не нашел.
|
|
|
|
|
 |
Ответов
|
Mar 18 2011, 08:52
|
Группа: Новичок
Сообщений: 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
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|