Перейти к содержанию
    

lpc4337 прерывания 1мкс

Разбираюсь с исходниками, интервал прерываний задается в этой строчке.

 SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/100);               /* Generate interrupt every 10 ms */

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как сделать 1мкс , может для этого другой таймер лучше использовать, или может что посоветуете?
В теории нужно делить на 1000000 вместо 100. Рабочая частота, естественно нужна такая, чтобы проц не захлебнулся так часто прерываться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде так:

 

 

SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/1000);

 

Вроде так:

 

 

SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/1000);

 

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

 

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

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разбираюсь с исходниками, интервал прерываний задается в этой строчке.

 SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/100);               /* Generate interrupt every 10 ms */

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

 

Незнаю, для какой задачи, но так часто прерываться не гуд, может есть какой-либо другой способ, например, если что-то нужно считать и стробировать с такой частотой, может лучше таймер в режиме захвата?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разбираюсь с исходниками, интервал прерываний задается в этой строчке.

 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...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По опыту использования 5us прерываний на CORTEX-M3, заведённом на 100 MHz - нормально не работает. Слишком много пропусков. А Вы метите на 1uS...

При частоте ядра ==100МГц прерывания с периодом 5мкс не должны составлять никакой проблемы. Ищите баги у себя. Например - проверьте приоритет ISR-ов,

длительности запретов прерываний в коде и т.п.

У меня работают таймерные прерывания 2МГц на M3 (LPC1758) при CLK ядра==100МГц. И не просто входит и выходит в ISR, но и выполняет свою задачу.

Конечно загрузка CPU более 90%. Но если нужно - это возможно. У меня такое прерывание от периферийного таймера, но от SysTick будет ещё проще, так как не надо в

каждом прерывании давать подтверждение таймеру.

Такие частоты прерываний очень полезны для отладки. Например я так ищу проблемы например с разрушением памяти: портится некая переменная - делаешь мониторинг её в

таком ISR (ISR написан на асм) и получаешь источник записи с точностью +/- несколько команд.

А уж на 400кГц вполне хватает для сохранения всего контекста CPU и ещё дампа стека глубиной 40 слов (32-битных).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сейчас поэкспериментирую, процессор работает на частоте 204 , но пока еще не разобрался как настраиваются предделители.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока нормально работает, судя по аналоговому осциллографу. 5мкс одновременно работает uart tcpip easywebserver дрожания и подвисаний не видно посмотрим что дальше будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Немного поэкспериментировал, работает нормально доделал код генератора stepdir,код сложный много функций из библиотеки math и string, думал будут пропуски шагов но за это небольшое время не заметил.

Попробую прицепить к станку с рисовалкой и посмотрю повторяемость. Единственное придется наверно запускать два ядра, первое для браузера(webserver) сейчас получается так: пока интерполяция не закончиться вебсервер не может отдать страницу.

Круговая интерполяция может долго работать браузер будет выдавать 404 где таймоут задается ?

(имею ввиду сколько времени будет ждать браузер ответа от сервера где этот параметр задается.)

видео

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрю документацию и m0 и m4 тактируются 204 mhz, получается производительность как на 408мгц в чем подвох? ) Еще один вопрос какой стек tcp лучше использовать для m0 ? Хочу попробовать сделать на м0 стек а другом генератор импульсов. не знаю что из этого получиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрю документацию и m0 и m4 тактируются 204 mhz, получается производительность как на 408мгц

 

Во классно, прямо чудо какое-то!!! Что-то тут не так :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Немного поэкспериментировал, работает нормально доделал код генератора stepdir,код сложный много функций из библиотеки math и string, думал будут пропуски шагов но за это небольшое время не заметил.

Попробую прицепить к станку с рисовалкой и посмотрю повторяемость. Единственное придется наверно запускать два ядра, первое для браузера(webserver) сейчас получается так: пока интерполяция не закончиться вебсервер не может отдать страницу.

Круговая интерполяция может долго работать браузер будет выдавать 404 где таймоут задается ?

(имею ввиду сколько времени будет ждать браузер ответа от сервера где этот параметр задается.)

видео

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Станок может быть любой. На этой плате генерируются импульсы направления и шага в зависимости от того куда нужно переместиться с какой скоростью и как линейно или дугой. Импульсы можно на сервопривода или на привода которые управляют шаговыми двигателями. Чем больше частота прерываний, тем больше импульсов можно получить. Особенно актуально для сервопривода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 мкс - это нормально,

если с микрошагами по 256 на шаг, то даже не супер быстро.

в таких системах от 2 до 5 МГц частота шагов бывает, 500-200 нСек то есть.

 

только доверять такое процу... плавать же будет из-за нечеткости прерывания и прочих процессов. Надо либо полностью ядро освобождать под это, или ДМА из фифо-буфера какого - то, но мы пошли путем ПЛИС со своим буфером, так надежнее...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А Вы кол-во тактов обработчика смотрели?

у ARM-v7M вход в прерывание 12 циклов, выход 10

при частоте 204 Mhz - остается 182 цикла, но надо и на другое оставить...

 

 

только доверять такое процу... плавать же будет из-за нечеткости прерывания и прочих процессов.

Можно избавится от "дрожания" посадив выход на "External Match Output", а в прерывании уже рассчитывать новое значение Match регистра...

у NXP удобно сделана работа через EMR регистр, там можно и напрямую ногой управлять и выставить какое действие будет по очередному событию.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...