justontime 0 September 25, 2018 Posted September 25, 2018 · Report post Пытаюсь запустить ADC на MAX 10, что-то не очень (мягко говоря) получается... Для начала, кто-нибудь знает, чем отличаются clock и adc_pll_clock ? Типа по clock идет общение с внешним миром, а adc_pll_clock только для преобразования A->D ? Если так, они должны быть как-то синхронизированы и т.д. ? Quote Share this post Link to post Share on other sites More sharing options...
andk 0 September 25, 2018 Posted September 25, 2018 · Report post Гхм. Подробный вопрос - подробный ответ. Ну конечно кто-нибудь знает. https://www.intel.com/content/dam/www/progr...10-adc-15.1.pdf Просмотрите, там совсем немного - 60 страниц с картинками. Quote Share this post Link to post Share on other sites More sharing options...
justontime 0 September 25, 2018 Posted September 25, 2018 · Report post Гхм. Подробный вопрос - подробный ответ. Ну конечно кто-нибудь знает. https://www.intel.com/content/dam/www/progr...10-adc-15.1.pdf Просмотрите, там совсем немного - 60 страниц с картинками. Мне кажется, я задал достаточно определенные вопросы, а не просто попросил рассказать вообще... А ADC UG у меня и так последние пару дней любимое чтиво... Ладно, с clk я уже разобрался (все, как и предполагал), возник другой вопрос. Использую только один аналоговый вход - ANAIN, а выводы ADCx (пара из них) задействованы как обычные GPIOs. При этом в процессе генерации ADC core указал, что используется только channel 0, в sequencer указал, что slot 1, привязан к ch 0. Тем не менее, при компиляции ругается, что "Can't place multiple pins..." именно на те ADCx, которые у меня задействованы, как GPIOs. Где ему еще нужно сказать, что эти ноги нафиг для ADC не нужны ??? Quote Share this post Link to post Share on other sites More sharing options...
andk 0 September 25, 2018 Posted September 25, 2018 · Report post И всё таки, настоятельно рекомендую вдумчиво покурить сей документ... К примеру про ваш вопрос враги не скрывают истину: Стр. 2-5 If you use bank 1A for ADC, you cannot use the bank for GPIO. :) Quote Share this post Link to post Share on other sites More sharing options...
justontime 0 September 25, 2018 Posted September 25, 2018 · Report post Они озверели !!! "Bank 1A, 1B, 2, and 8—you cannot use GPIO pins in these banks." если ADC в принципе включен !!! И это в корпусе E144... Вообще первоначальный восторг по поводу MAX 10 у меня начинает проходить - уже в который раз натыкаюсь на подобные засады... Да, понятно, что UG нужно читать внимательно, но... И всё таки, настоятельно рекомендую вдумчиво покурить сей документ... К примеру про ваш вопрос враги не скрывают истину: Стр. 2-5 If you use bank 1A for ADC, you cannot use the bank for GPIO. :) Да я параллельно уже тоже нашел (только в другом месте), и высказал свое крайнее неудовольствие... Реально у MAX 10 слишком много таких ограничений... If you use bank 1A for ADC, you cannot use the bank for GPIO. :) Кстати, именно это ко мне не имеет отношения - я же использую ANAIN, а не пин из обычного банка, поэтому и не ожидал такой засады... Ладно если бы использование пина из банка отрубало этот банк, но когда сам факт включения ADC отрубает чуть ли не половину GPIOs, это уже ни в какие ворота не лезет... Quote Share this post Link to post Share on other sites More sharing options...
andk 0 September 25, 2018 Posted September 25, 2018 · Report post :biggrin: Quote Share this post Link to post Share on other sites More sharing options...
justontime 0 September 26, 2018 Posted September 26, 2018 · Report post Блин, вроде бы сделал, как нужно, но фигню какую-то читает неменяющуюся (при изменении напряжения на входе ADC). Никто не поделится кусочком работающего кода, инициализирующего ADC и получающего данные ? Имел ввиду - код на С под NIOS... Quote Share this post Link to post Share on other sites More sharing options...
StewartLittle 9 September 26, 2018 Posted September 26, 2018 · Report post Блин, вроде бы сделал, как нужно, но фигню какую-то читает неменяющуюся (при изменении напряжения на входе ADC). Никто не поделится кусочком работающего кода, инициализирующего ADC и получающего данные ? Имел ввиду - код на С под NIOS... Ловите весь проект целиком. Кстати, какой версией квартуса пользуетесь? НЯП, в первых версиях, где появилась поддержка MAX 10, bsp для ниоса создавался с ошибкой: если в проекте использовались прерывания от АЦП, то в bsp все равно соответствующий парамер имел значение -1. Приходилось врукопашную его править. Только после этого все работало. max10_adc_test.zip Quote Share this post Link to post Share on other sites More sharing options...
justontime 0 September 26, 2018 Posted September 26, 2018 · Report post Ловите весь проект целиком. Спасибо !!! У меня версия 17.1 lite, там уже нормально ? И еще вопрос, если можно - судя по коду, который удалось найти в интернете, в какой-то момент названия были изменены, типа вместо MODULAR_AD1C_0_SEQUENCER_CSR_BASE стало ADC_SEQUENCER_CSR_BASE Это действительно так ? Quote Share this post Link to post Share on other sites More sharing options...
DmitryR 0 September 26, 2018 Posted September 26, 2018 · Report post Блин, вроде бы сделал, как нужно, но фигню какую-то читает неменяющуюся (при изменении напряжения на входе ADC). Никто не поделится кусочком работающего кода, инициализирующего ADC и получающего данные ? Имел ввиду - код на С под NIOS... const float adc_vref = 3.0f; const volatile int* const adc_sample_array = (int*) ADC_SAMPLE_STORE_CSR_BASE; float adc_voltage; *(unsigned*)ADC_SEQUENCER_CSR_BASE = 1; adc_voltage = adc_vref * adc_sample_array[0] / 4095; Драйвер ADC выкинул, экономия 600 байт. Quote Share this post Link to post Share on other sites More sharing options...
StewartLittle 9 September 26, 2018 Posted September 26, 2018 · Report post И еще вопрос, если можно - судя по коду, который удалось найти в интернете, в какой-то момент названия были изменены, типа вместо MODULAR_AD1C_0_SEQUENCER_CSR_BASE стало ADC_SEQUENCER_CSR_BASE Это действительно так ? ХЗ. Я всегда по актуальному bsp проверяю, как оно там называется. Quote Share this post Link to post Share on other sites More sharing options...
justontime 0 September 26, 2018 Posted September 26, 2018 · Report post const float adc_vref = 3.0f; const volatile int* const adc_sample_array = (int*) ADC_SAMPLE_STORE_CSR_BASE; float adc_voltage; *(unsigned*)ADC_SEQUENCER_CSR_BASE = 1; adc_voltage = adc_vref * adc_sample_array[0] / 4095; Драйвер ADC выкинул, экономия 600 байт. А не поделитесь ещё и инициализацией ? Quote Share this post Link to post Share on other sites More sharing options...
DmitryR 0 September 26, 2018 Posted September 26, 2018 · Report post А не поделитесь ещё и инициализацией ? А это всё, там нет никакой инициализации. Записывается 1 в CSR, и он начинает работать. Quote Share this post Link to post Share on other sites More sharing options...
justontime 0 September 26, 2018 Posted September 26, 2018 · Report post А это всё, там нет никакой инициализации. Записывается 1 в CSR, и он начинает работать. Блин, и оно при этом работает ! С ума сойти, это именно то, что мне нужно было, еще раз спасибо ! P.S. А как драйвер нафиг выбросить ? P.P.S. Ну, и если еще кто столкнется - самым простым решением убрать прерывание ADC (которое просто все подвешивало, хотя специально не разрешал) было просто отключение соответствующей линии IRQ в Platform Designer'е Quote Share this post Link to post Share on other sites More sharing options...
DmitryR 0 September 27, 2018 Posted September 27, 2018 · Report post Драйвер отключается в BSP Edtor убиранием соответствующей галочки в закладке "Drivers". Quote Share this post Link to post Share on other sites More sharing options...