|
Скорость махания ногами 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 16 2011, 09:28
|
Участник

Группа: Участник
Сообщений: 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 на ножках в таком режиме получить можно, вопрос только зачем?  Всякие условыне операторы лучше не использовать как в приведённых выше функциях, т.к. могут быть накладные расходы с конвеером.
|
|
|
|
|
Jan 16 2011, 09:59
|
Участник

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

|
Цитата А не проще напрямую регистрами порта? а разве это не он регистр GPIOnDATA? Цитата На 100МHz проца 10MHz на ножках в таком режиме получить можно, вопрос только зачем? программный spi (нету у устройств своего cs, а у контроллера один spi) P.S. вы с задержками не ошиблись?
Сообщение отредактировал alexey_z83 - Jan 16 2011, 10:23
|
|
|
|
|
Jan 16 2011, 11:00
|
Участник

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

|
Спасибо, разобрался, вроде, 4 такта (~ 9мГц при 72мГц) на смену состояния получилось.
Скажите кто имел дело с lpc1343, это максимум для него?
|
|
|
|
|
Jan 16 2011, 14:04
|
Участник

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

|
Спасибо за подсказку, GetSmart, оптимизация творит чудеса  . Благодарю всех за ответы на глупые вопросы.
|
|
|
|
|
Jan 16 2011, 19:00
|
Участник

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

|
Цитата(alexey_z83 @ Jan 16 2011, 12:59)  P.S. вы с задержками не ошиблись? Ясен пень что без циков :-))
|
|
|
|
|
Jan 18 2011, 03:44
|
Участник

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

|
Цитата А что значит у устройств нету своего CS? то, что у устройств есть только входы clk и sdi, даже выхода sdo нет, потому и не могу повесить на одну линию.
|
|
|
|
|
Jan 18 2011, 09:57
|
Участник

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

|
Да вы правы, до 3 устройств можно подключить, я только начал разбираться поэтому не все тонкости знаю.
|
|
|
|
|
Jan 19 2011, 04:04
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|