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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> 50MS/s ADC, LPC4370 - да или нет?
jcxz
сообщение Sep 13 2015, 04:35
Сообщение #1


Гуру
******

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



Возникла задача: оцифровать аналоговый сигнал с частотой ~ 50MS/s, разрядности хватит 8бит.
Режим измерения АЦП: кратковременный интервал (<100мкс).
Обработка сложная не нужна, нужно батарейное питание. Поэтому думаю использовать МК на Cortex-M.
Сначала думал АЦП-тракт построить на отдельном АЦП с параллельным выходом и завести поток на МК либо напрямую
(если в МК найдётся подходящий интерфейс, чтобы повесить внешний АЦП с необходимой скоростью) либо
через промежуточное FIFO для согласования скоростей (типа IDT72241).
Но потом у NXP обнаружил LPC4370 - 3-ядерный МК с АЦП на 80MS/s.
Вроде как раз то, что нужно! правда BGA и без флеши sad.gif((
Если его использовать, то схемотехника значительно упрощается и удешевляется. Да и наличие экономичного M0 очень подходит для батарейного питания (большую часть времени устройство будет находиться в ожидании, думаю в этом режиме держать включённым только одно M0-ядро).
Но я не имею опыта работы с линейкой LPC43xx. Имею большой опыт работы с LPC17xx и с многоядерными OMAP.

Есть здесь кто-то, кто имеет опыт с LPC43xx и конкретно - LPC4370?
Имеется ряд вопросов:
1. Как организована работа JTAG с разными ядрами? Есть-ли возможность одновременной отладки через один J-Link всех ядер?
Можно-ли управлять JTAGом ядрами независимо одно от другого (два стоят, третье - шагаем)? Есть-ли поддержка такой работы в IAR?
2. Насколько работоспособен ADCHS (высокоскоростной 12бит АЦП) в LPC4370? В LPC17xx сталкивался с проблемой большого шума
втроенного АЦП, из-за которой на большой скорости с ним практически нереально работать. Нет-ли в ADCHS подобной проблемы???

PS: А может народ знает - имеются-ли другие МК со встроенным АЦП порядка 50MS/s?
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 14 2015, 08:48
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(jcxz @ Sep 13 2015, 07:35) *
1. Как организована работа JTAG с разными ядрами? Есть-ли возможность одновременной отладки через один J-Link всех ядер?
Можно-ли управлять JTAGом ядрами независимо одно от другого (два стоят, третье - шагаем)? Есть-ли поддержка такой работы в IAR?

Я отлаживаю в Кейле (но собираю при помощи gcc). Там в настройках отладчика указывается, к которому ядру нужно цепляться через JTAG.
Пробовал отлаживать M0, там приходилось подключаться к M4, запускать M0, потом подключаться к M0 и отлаживать. В общем, геморрой. Наверное, что-то из этого можно автоматизировать, но мне не нужно было. В качестве адаптера использую LPC-LINK 2 с прошивкой CMSIS DAP.

Цитата(jcxz @ Sep 13 2015, 07:35) *
2. Насколько работоспособен ADCHS (высокоскоростной 12бит АЦП) в LPC4370? В LPC17xx сталкивался с проблемой большого шума втроенного АЦП, из-за которой на большой скорости с ним практически нереально работать. Нет-ли в ADCHS подобной проблемы???

У меня пока до реальной работы с сигналами дело не дошло. Оцифровывал с небольшой скоростью, данные идут. На форуме LPCWARE видел упоминания шума. Где-то есть рекомендации по разводке, какие пины лучше не задействовать, чтобы меньше шумел АЦП. В крайнем случае можно останавливать ядра и/или переферию на время оцифровки. В общем, только жизнь покажет.

Цитата(jcxz @ Sep 13 2015, 07:35) *
PS: А может народ знает - имеются-ли другие МК со встроенным АЦП порядка 50MS/s?

Я долго искал и ничего подобного больше нигде не видел.
Более того, этот МК стоит в разы дешевле, чем скоростной АЦП, который в нём сидит.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 14 2015, 11:03
Сообщение #3


Гуру
******

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



Цитата(scifi @ Sep 14 2015, 14:48) *
Я отлаживаю в Кейле (но собираю при помощи gcc). Там в настройках отладчика указывается, к которому ядру нужно цепляться через JTAG.
Пробовал отлаживать M0, там приходилось подключаться к M4, запускать M0, потом подключаться к M0 и отлаживать. В общем, геморрой. Наверное, что-то из этого можно автоматизировать, но мне не нужно было. В качестве адаптера использую LPC-LINK 2 с прошивкой CMSIS DAP.

В IAR7.20 тоже вижу что в свойствах проекта можно выбрать или LPC4370_M0 или LPC4370_M4 - это ясно, это для какого ядра компилить данный проект.
А в свойствах отладчика есть вкладка "Multicore", но она не активна. И есть чекбокс "Scan chain contains non-ARM devices", но не знаю что там нужно вписывать в поле "TAP number" и вкладка
"Multicore", после установки этого чекбокса, не становится активной. У меня J-Link (и есть SAU510), но могу и другой купить какой нужен.
А Вы не пробовали не отключаясь от M4, подключиться к M0?
Я много работал с OMAP-L137, там 4 ядра, два из которых: ARM9 и DSP C674x. Так там просто: два отдельных проекта, но их можно независимо друг от друга коннектить каждый к своему ядру и, независимо от другого, управлять им (загружать прошивку, останавливать, запускать, шагать и т.п.). И всё это через один JTAG (SAU510) под CCS.

Цитата(scifi @ Sep 14 2015, 14:48) *
Где-то есть рекомендации по разводке, какие
пины лучше не задействовать, чтобы меньше шумел АЦП. В крайнем случае можно останавливать ядра и/или переферию на время оцифровки. В общем, только жизнь покажет.

Рекомендации я видел в даташите.
В LPC17xx шум проявлялся в виде редких неожиданных провалов напряжения до максимального уровня или нуля. Такое ощущение что происходил сбой в АЦП, а не какие-то наводки.
Вроде пробовал и останавливать - не помогало. Но в том проекте нужно было измерять постоянное напряжение, так что я делал много измерений, а потом убирал эти помехи медианным фильтром и вобщем это не проблема была. А в новой задаче необходимо оцифровывать поток быстроменяющихся данных на частоте 50МГц, там лишних замеров не сделаешь, ядро конечно можно остановить, но DMA должно работать.

Цитата(scifi @ Sep 14 2015, 14:48) *
Я долго искал и ничего подобного больше нигде не видел.

Спасибо! Вы сэкономили мне кучу времени sm.gif

Вы с режимами пониженного потребления в LPC4370 не разбирались?
Как я понял из даташита, в sleep ядра можно переводить независимо друг от друга, но в более глубокие режимы - только целиком весь МК.
Мне был бы оптимален режим работы в качестве основного ядра: M0-подсистема, а ядро M4 - в deep sleep (или более глубокий сон). А когда нужна работа с АЦП - включается M4, делает работу и опять уходит в deep sleep. Но вроде так невозможно sad.gif(((
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 14 2015, 11:34
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(jcxz @ Sep 14 2015, 14:03) *
А в свойствах отладчика есть вкладка "Multicore", но она не активна. И есть чекбокс "Scan chain contains non-ARM devices", но не знаю что там нужно вписывать в поле "TAP number" и вкладка

В Кейле совсем просто: при открывании свойств адаптера он сразу сканирует цепочку JTAG и предлагает выбрать в списке одно из трёх ядер.

Цитата(jcxz @ Sep 14 2015, 14:03) *
Я много работал с OMAP-L137, там 4 ядра, два из которых: ARM9 и DSP C674x. Так там просто: два отдельных проекта, но их можно независимо друг от друга коннектить каждый к своему ядру и, независимо от другого, управлять им (загружать прошивку, останавливать, запускать, шагать и т.п.). И всё это через один JTAG (SAU510) под CCS.

Вот это я понимаю - софт для людей. Может быть, яры и кейлы подтянутся. А может и нет.

Цитата(jcxz @ Sep 14 2015, 14:03) *
А Вы не пробовали не отключаясь от M4, подключиться к M0?

Пробовал. Там при старте запускается только M4, а M0 сидят в сбросе. Считается, что прошивка, исполняемая на M4, должна снять сброс с M0. Я пробовал подключиться отладчиком к M0 и дёрнуть соответствующий регистр, чтобы снять сброс, но ничего не вышло. Вывод такой: перед подключением отладчика к M0 нужно обеспечить отключение сброса M0.

Цитата(jcxz @ Sep 14 2015, 14:03) *
Вы с режимами пониженного потребления в LPC4370 не разбирались?

Нет. Ни разу не приходилось экономить электроэнергию. Хотя у LPC4370 отключил тактирование ненужной периферии - уж очень заметно он греется.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 14 2015, 11:55
Сообщение #5


Гуру
******

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



Цитата(scifi @ Sep 14 2015, 17:34) *
Пробовал. Там при старте запускается только M4, а M0 сидят в сбросе. Считается, что прошивка, исполняемая на M4, должна снять сброс с M0. Я пробовал подключиться отладчиком к M0 и дёрнуть соответствующий регистр, чтобы снять сброс, но ничего не вышло. Вывод такой: перед подключением отладчика к M0 нужно обеспечить отключение сброса M0.

Это понятно - можно в начале main() для M4 вывести M0 из сброса (и прошагнуть это место отладчиком).
А можно то же самое сделать и конфигурационным файлом JTAG (.mac - файл в IAR).
Я подобным образом для LPC1788 сделал отладку проекта во внешней SDRAM: в .mac-файле прописал инит EMC-контроллера, и J-Link стал нормально грузить и запускать прошивку в SDRAM.
Это не проблема, также можно и вывести M0-ядро из ресета.
Главное тут - чтобы при подключенном к JTAG одном IAR-проекте, была возможность открыть другой проект и подключить его к тому-же работающему JTAG.
В CCS3.3 это решается промежуточной софтиной: вначале запускается "Parallel debug manager", он подключается к JTAG-эмулятору. А потом открываются
проекты для ядер и они уже коннектятся к "Parallel debug manager".

Цитата(scifi @ Sep 14 2015, 17:34) *
Нет. Ни разу не приходилось экономить электроэнергию. Хотя у LPC4370 отключил тактирование ненужной периферии - уж очень заметно он греется.

Я на LPC1758 экономил. Работа с периферией у меня была так сделана: включил нужную периферию, поработал с ней, затем - отключил её. И ПО так написано, что всё неиспользуемое время CPU находится в idle-процессе ОС выполняя команду WFE. Но отключение всей периферии и перевод в sleep-режим давали недостаточно экономии. Более глубокий сон там был невозможен (из-за задачи).
Потом добавил ещё в интервалы длительной малой активности отключение PLL с переходом на IRC и выставлением максимального делителя частоты ядра ==256. Так удалось добиться требуемого уровня потребления.
Здесь вроде есть для этого M0-подсистема - можно вроде больше сэкономить если-бы удалось выключить всё, что не входит в подсистему M0.
Хотелось бы потребление МК порядка 2-3мА. При этом выполнение некоторых простых функций M0-ядром.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Sep 14 2015, 12:59
Сообщение #6


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(jcxz @ Sep 14 2015, 15:03) *
Я много работал с OMAP-L137, там 4 ядра, два из которых: ARM9 и DSP C674x.

А остальные два - это что?
Разве L137 это не двухъядерный процессор?

Прошу прощения за офтоп 05.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 14 2015, 13:10
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Sep 14 2015, 15:59) *
А остальные два - это что?

Наверное, имелись в виду PRU. Но за ядра их считать не стоит.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 14 2015, 13:54
Сообщение #8


Гуру
******

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



Цитата(aaarrr @ Sep 14 2015, 19:10) *
Наверное, имелись в виду PRU. Но за ядра их считать не стоит.

Почему это? Вполне себе ядра. Хоть и урезанные по самое. По скорости любой STM32 уделают biggrin.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 14 2015, 14:08
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(jcxz @ Sep 14 2015, 16:54) *
Почему это? Вполне себе ядра. Хоть и урезанные по самое. По скорости любой STM32 уделают biggrin.gif

Даже всякие Cortex-M, занимающиеся управлением питанием в составе SoC'ов на Cortex-A, обычно не удостаиваются такого громкого именования.
PRU - это, по-моему, все же периферия, хоть и программируемая

Кстати, не приходилось их где-нибудь использовать?
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 14 2015, 14:29
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(aaarrr @ Sep 14 2015, 17:08) *
Даже всякие Cortex-M, занимающиеся управлением питанием в составе SoC'ов на Cortex-A, обычно не удостаиваются такого громкого именования.
PRU - это, по-моему, все же периферия, хоть и программируемая

Сказали бы просто "устройство в цепочке JTAG".
Если уж начали спорить о значении слов, то, строго говоря, "ядро" - это IP корка, и в эту категорию входят и UARTы, и Ethernet MACи, и т.д. Какой-то умелец назвал процессор "ядром", и понеслось. Интел подлил масла в огонь, начав использовать для своих процов брэнд "Core"
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 14 2015, 14:35
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(scifi @ Sep 14 2015, 17:29) *
Если уж начали спорить о значении слов, то, строго говоря, "ядро" - это IP корка, и в эту категорию входят и UARTы, и Ethernet MACи, и т.д. Какой-то умелец назвал процессор "ядром", и понеслось. Интел подлил масла в огонь, начав использовать для своих процов брэнд "Core"

Ядро в данном случае сокращение от "вычислительное ядро".
Go to the top of the page
 
+Quote Post
sonycman
сообщение Sep 14 2015, 15:03
Сообщение #12


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Sep 14 2015, 18:08) *
Кстати, не приходилось их где-нибудь использовать?

Интересно, а как эти пруссы программируются? Можно ли задать для них функцию в компиляторе?
Или настройка как для обычной периферии - через регистры ввода-вывода?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 14 2015, 15:30
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Sep 14 2015, 18:03) *
Интересно, а как эти пруссы программируются? Можно ли задать для них функцию в компиляторе?

Для них пишется отдельный ассемблерный код. Загрузка и запуск средствами нормального процессора.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Sep 14 2015, 15:47
Сообщение #14


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Sep 14 2015, 19:30) *
Для них пишется отдельный ассемблерный код. Загрузка и запуск средствами нормального процессора.

Ну а инструмент для этого ассемблера есть, наверное? Среда какая нибудь? Не бинарный же код набивать, сидя с книжкой - как в былые весёлые времена ZX Spectrum?

Имхо, костыль какой-то получается.
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 14 2015, 15:52
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(aaarrr @ Sep 14 2015, 17:35) *
Ядро в данном случае сокращение от "вычислительное ядро".

Напридумали словечек. В старину сие чудо называлось ЦПУ или "процессор".
Go to the top of the page
 
+Quote Post

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

 


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


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