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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> lpc4337 прерывания 1мкс
sergey sva
сообщение Jan 3 2014, 22:08
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Разбираюсь с исходниками, интервал прерываний задается в этой строчке.
Код
SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/100);               /* Generate interrupt every 10 ms */

Как сделать 1мкс , может для этого другой таймер лучше использовать, или может что посоветуете?
Go to the top of the page
 
+Quote Post
ataradov
сообщение Jan 3 2014, 23:56
Сообщение #2


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

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



QUOTE (sergey sva @ Jan 3 2014, 15:08) *
Как сделать 1мкс , может для этого другой таймер лучше использовать, или может что посоветуете?
В теории нужно делить на 1000000 вместо 100. Рабочая частота, естественно нужна такая, чтобы проц не захлебнулся так часто прерываться.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jan 4 2014, 04:57
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Вроде так:


SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/1000);

Цитата(nanorobot @ Jan 4 2014, 10:39) *
Вроде так:


SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/1000);


прошу прощения - это для 1ms

Для 1 us, как правильноответили выше : SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/1000000);

Сообщение отредактировал nanorobot - Jan 4 2014, 04:41
Go to the top of the page
 
+Quote Post
mantech
сообщение Jan 4 2014, 06:43
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(sergey sva @ Jan 4 2014, 02:08) *
Разбираюсь с исходниками, интервал прерываний задается в этой строчке.
Код
SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/100);               /* Generate interrupt every 10 ms */

Как сделать 1мкс , может для этого другой таймер лучше использовать, или может что посоветуете?


Незнаю, для какой задачи, но так часто прерываться не гуд, может есть какой-либо другой способ, например, если что-то нужно считать и стробировать с такой частотой, может лучше таймер в режиме захвата?
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jan 4 2014, 08:40
Сообщение #5


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

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(sergey sva @ Jan 4 2014, 01:08) *
Разбираюсь с исходниками, интервал прерываний задается в этой строчке.
Код
SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/100);               /* Generate interrupt every 10 ms */

Как сделать 1мкс , может для этого другой таймер лучше использовать, или может что посоветуете?


Посоветую посмотреть в документацию. Я с этим процессором не работал, но если NXP ничего не поменяли в системе тактирования ядра и переферии, то частота переферии задаётся как частота ядра делённая на один из 4х фиксированых делителей (регистр PCLKSEL). Зная частоту переферии легко вручную посчитать то, что возвращает CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/100 для требуемого Вам периода генерации прерываний.
По опыту использования 5us прерываний на CORTEX-M3, заведённом на 100 MHz - нормально не работает. Слишком много пропусков. А Вы метите на 1uS...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 4 2014, 09:30
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(mempfis_ @ Jan 4 2014, 14:40) *
По опыту использования 5us прерываний на CORTEX-M3, заведённом на 100 MHz - нормально не работает. Слишком много пропусков. А Вы метите на 1uS...

При частоте ядра ==100МГц прерывания с периодом 5мкс не должны составлять никакой проблемы. Ищите баги у себя. Например - проверьте приоритет ISR-ов,
длительности запретов прерываний в коде и т.п.
У меня работают таймерные прерывания 2МГц на M3 (LPC1758) при CLK ядра==100МГц. И не просто входит и выходит в ISR, но и выполняет свою задачу.
Конечно загрузка CPU более 90%. Но если нужно - это возможно. У меня такое прерывание от периферийного таймера, но от SysTick будет ещё проще, так как не надо в
каждом прерывании давать подтверждение таймеру.
Такие частоты прерываний очень полезны для отладки. Например я так ищу проблемы например с разрушением памяти: портится некая переменная - делаешь мониторинг её в
таком ISR (ISR написан на асм) и получаешь источник записи с точностью +/- несколько команд.
А уж на 400кГц вполне хватает для сохранения всего контекста CPU и ещё дампа стека глубиной 40 слов (32-битных).
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jan 4 2014, 11:18
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Сейчас поэкспериментирую, процессор работает на частоте 204 , но пока еще не разобрался как настраиваются предделители.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jan 4 2014, 12:53
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Пока нормально работает, судя по аналоговому осциллографу. 5мкс одновременно работает uart tcpip easywebserver дрожания и подвисаний не видно посмотрим что дальше будет.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jan 8 2014, 19:49
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Немного поэкспериментировал, работает нормально доделал код генератора stepdir,код сложный много функций из библиотеки math и string, думал будут пропуски шагов но за это небольшое время не заметил.
Попробую прицепить к станку с рисовалкой и посмотрю повторяемость. Единственное придется наверно запускать два ядра, первое для браузера(webserver) сейчас получается так: пока интерполяция не закончиться вебсервер не может отдать страницу.
Круговая интерполяция может долго работать браузер будет выдавать 404 где таймоут задается ?
(имею ввиду сколько времени будет ждать браузер ответа от сервера где этот параметр задается.)
видео
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jan 16 2014, 18:57
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Смотрю документацию и m0 и m4 тактируются 204 mhz, получается производительность как на 408мгц в чем подвох? ) Еще один вопрос какой стек tcp лучше использовать для m0 ? Хочу попробовать сделать на м0 стек а другом генератор импульсов. не знаю что из этого получиться.
Go to the top of the page
 
+Quote Post
mantech
сообщение Jan 17 2014, 14:55
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(sergey sva @ Jan 16 2014, 22:57) *
Смотрю документацию и m0 и m4 тактируются 204 mhz, получается производительность как на 408мгц


Во классно, прямо чудо какое-то!!! Что-то тут не так biggrin.gif
Go to the top of the page
 
+Quote Post
evgen2
сообщение Jan 20 2014, 00:30
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Цитата(sergey sva @ Jan 8 2014, 23:49) *
Немного поэкспериментировал, работает нормально доделал код генератора stepdir,код сложный много функций из библиотеки math и string, думал будут пропуски шагов но за это небольшое время не заметил.
Попробую прицепить к станку с рисовалкой и посмотрю повторяемость. Единственное придется наверно запускать два ядра, первое для браузера(webserver) сейчас получается так: пока интерполяция не закончиться вебсервер не может отдать страницу.
Круговая интерполяция может долго работать браузер будет выдавать 404 где таймоут задается ?
(имею ввиду сколько времени будет ждать браузер ответа от сервера где этот параметр задается.)
видео


простите, а можно поинтересоваться - что это за такой крутой станок, для которого нужно использвать прерывания 1 мкс, судя по всему для шагового двигателя?
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jan 20 2014, 04:33
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Станок может быть любой. На этой плате генерируются импульсы направления и шага в зависимости от того куда нужно переместиться с какой скоростью и как линейно или дугой. Импульсы можно на сервопривода или на привода которые управляют шаговыми двигателями. Чем больше частота прерываний, тем больше импульсов можно получить. Особенно актуально для сервопривода.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 20 2014, 06:06
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



1 мкс - это нормально,
если с микрошагами по 256 на шаг, то даже не супер быстро.
в таких системах от 2 до 5 МГц частота шагов бывает, 500-200 нСек то есть.

только доверять такое процу... плавать же будет из-за нечеткости прерывания и прочих процессов. Надо либо полностью ядро освобождать под это, или ДМА из фифо-буфера какого - то, но мы пошли путем ПЛИС со своим буфером, так надежнее...
Go to the top of the page
 
+Quote Post
KRS
сообщение Jan 20 2014, 06:37
Сообщение #15


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



А Вы кол-во тактов обработчика смотрели?
у ARM-v7M вход в прерывание 12 циклов, выход 10
при частоте 204 Mhz - остается 182 цикла, но надо и на другое оставить...


Цитата(Golikov A. @ Jan 20 2014, 10:06) *
только доверять такое процу... плавать же будет из-за нечеткости прерывания и прочих процессов.

Можно избавится от "дрожания" посадив выход на "External Match Output", а в прерывании уже рассчитывать новое значение Match регистра...
у NXP удобно сделана работа через EMR регистр, там можно и напрямую ногой управлять и выставить какое действие будет по очередному событию.
Go to the top of the page
 
+Quote Post

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

 


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


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