История изменений
Исправление Zubok, (текущая версия) :
А в МК скажем ADC может быть сконфигурирован делать выборки сериями в разных порядках или параллельно, по событиям от таймеров, с передачей результата через DMA. Как тогда соединить напряжение на ноге с кодом прошива?
Тебе только надо постоянно вычилять новое значение на ножке по глобальному времени (у тебя же какая-то функция сигнала есть?). Чтобы быть более точным, скажу про simavr. Для этого в любой момент времени ты на нужные входы ADC (или на все вообще) записываешь новое значение входной величины в милливольтах в зависимости от глобального времени. Для этого используются прерывания (это не прерывания AVR - это внутренние прерывания симулятора!): ADC_IRQ_ADC<n>, где <n> - номер канала. В программе это будет выглядеть примерно так:
#include <simavr/avr_adc.h>
...
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC0, func0(t));
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC1, func1(t));
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC2, func2(t));
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC3, func3(t));
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC4, func4(t));
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC5, func5(t));
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC6, func6(t));
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC7, func7(t));
...
Структура analog_inputs - твоя. Нукак бы это гипотетические твои аналоговые входы. Ее инициализация тут пропущена. func<n> - это твои функции. В общем-то, и все. А симулятор в цикле крутится и таймеры у него все работают и заберут нужные значения с нужных каналов в соответсвии с прошивкой.
UPD: Прерывания симулятора - это и есть способ с ним взаимодействовать. Если произошло внешнее событие на порту, то он тебе выставит прерывание и у тебя обработчик notify стоит. Если ты хочешь ему что-то передать. то ты выставляешь прерывание - он словит.
Исходная версия Zubok, :
А в МК скажем ADC может быть сконфигурирован делать выборки сериями в разных порядках или параллельно, по событиям от таймеров, с передачей результата через DMA. Как тогда соединить напряжение на ноге с кодом прошива?
Тебе только надо постоянно вычилять новое значение на ножке по глобальному времени (у тебя же какая-то функция сигнала есть?). Чтобы быть более точным, скажу про simavr. Для этого в любой момент времени ты на нужные входы ADC (или на все вообще) записываешь новое значение входной величины в милливольтах в зависимости от глобального времени. Для этого используются прерывания (это не прерывания AVR - это внутренние прерывания симулятора!): ADC_IRQ_ADC<n>, где <n> - номер канала. В программе это будет выглядеть примерно так:
#include <simavr/avr_adc.h>
...
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC0, func0(t));
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC1, func1(t));
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC2, func2(t));
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC3, func3(t));
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC4, func4(t));
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC5, func5(t));
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC6, func6(t));
avr_raise_irq(analog_inputs->irq + ADC_IRQ_ADC7, func7(t));
...
Структура analog_inputs - твоя. Нукак бы это гипотетические твои аналоговые входы. Ее инициализация тут пропущена. func<n> - это твои функции. В общем-то, и все. А симулятор в цикле крутится и таймеры у него все работают и заберут нужные значения с нужных каналов в соответсвии с прошивкой.