|
lpc4337 прерывания 1мкс |
|
|
|
Jan 4 2014, 04:57
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jan 4 2014, 06:43
|
Гуру
     
Группа: Участник
Сообщений: 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мкс , может для этого другой таймер лучше использовать, или может что посоветуете? Незнаю, для какой задачи, но так часто прерываться не гуд, может есть какой-либо другой способ, например, если что-то нужно считать и стробировать с такой частотой, может лучше таймер в режиме захвата?
|
|
|
|
|
Jan 4 2014, 08:40
|

Профессионал
    
Группа: Свой
Сообщений: 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...
|
|
|
|
|
Jan 4 2014, 09:30
|
Гуру
     
Группа: Свой
Сообщений: 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-битных).
|
|
|
|
|
Jan 20 2014, 00:30
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688

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

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