"Как выяснилось, петь и сочинять не сложно. Достаточно начать - закончить тоже можно. Я за короткий срок так много сочинил, Что много из того, что сочинил, уже забыл. Но это не беда, зато я творчески окреп. И вот пою еще одну песню в стиле р-р-р-эп." К.Кинчев - "Алиса"
Имея сейчас возможность пощупать в реале DSP TMS320F28335, параллельно решил делиться своим мнением об этом чипе, или может даже правильно сказать о всём семействе C2000, посколько они почти все одинаковы. По мере появления новых мыслей и воспоминаний буду добавлять их.
Краткий и повествовательный обзор мнения от опыта работы с перефериями: - GPIO - ADC - ePWM - SPI - SCI - DMA - CAN - IRQ
GPIO - Для работы с GPIO в режиме вывода сигнала используются способы: 3 быстрых и 1 медленный: - быстрый - операция выдачи сигнала наружу в 1 такт процессора при установке состояний в регистр GPxTOGGLE | GPxCLEAR | GPxSET. - медленный - операция выдачи сигнала наружу в 3 такта процессора (чтение+модификация+запись) при установке состояний в регистр GPxDAT Скорость наростания фронта очень крутая, так что, чтоб не было лишнего ВЧ звона лучше сразу возле вывода поставить согласовывающий резистор, около 51Ом.
ADC - Очень крутой ADC, умеющий аппаратно стартовать от сигнала ePWM(а также GPIO, IRQ), причем АЦП тоже конфигурируемый, какой фронт будет задавать старт для начала измерения и т.д. За интервал времени в 80нс измеряет сразу по 16 каналам, и выдает 12 битные значения с очень высокой прицезионностью, я увидел погрешность в 2 разряда(вероятно сигнал был с пульсацияим). Этот АЦП может мерять сигнал с частотой до 12.5МГц. Выяснил что кроме документированного регистра с измерянными данными есть еще слабо документированный регистр, называется Mirror, в документации про него всего пара строк мелким текстом, однако работать с ним намного быстрее. (2) The ADC result registers are dual mapped. Locations in Peripheral Frame 2 (0x7108–0x7117) are 2 wait-states and left justified. Locations in Peripheral frame 0 space (0x0B00–0x0B0F) are 1 wait-state for CPU accesses and 0 wait state for DMA accesses and right justified. During high speed/continuous conversion use of the ADC, use the 0 wait-state locations for fast transfer of ADC results to user memory. При чтении измерянных значений с 16 регистров AdcRegs тратится времени 778нс, а с AdcMirror 556нс, что на почти что 40% быстрее. По какойто странной причине Texas Instruments не приводит в своих примерах работу с этим регистром. Но порывшись в инете нашел что для быстрых измерений используют всегда миррор. Есть встроенный в чип калибратор, который нужно программно вызывать. Также есть приведение, указано в еррате на кристал, в симултэниоус режиме выдает не правильные значения первых нескольких измерений, воркэраунд описан там же, в эррате. ePWM (ШИМ) - Работать может в 3х режимах: 1) UP, 2) DOWN, 3) UPDOWN и также между каналами можно устанавлить мертвую зону(dead-band), полезно при управлении транзисторами, чтобы на затворах исключить колизии относительно 2х каналов A и B. Ну и всякие навороченые фенички и свистоперделки типа детекта трипзоны и т.д. Очень расширенный по свои возможностям ШИМ. При тактовой 150МГц(а тактируется без всяких делителей, от тактовой проца), я выжал с него все что мог в режиме UPDOWN на частоте канала-A 50МГц, и на канале-B 12.5МГц полностью синхронных. Цель была эксперементально узнать и получить на одном ШИМ 2 сигнала, основной и в 4 раза меньше.
SPI - Пробовал завести для теста loopback, завелся c с пол-пинка. В принципе на этом все, дальше не тестировал, т.к. небыло необходимости.
SCI (Serial Controller Interface) - Пробовал завести для теста loopback, завелся почти что c с пол-пинка только режим передачи. Паралельно гугля, обнаружил что эта проблема снаскоку не решенная не только у меня... Также, если верить даташиту то бит LOOPBACKENA в SCICCR не отображён на блок схеме внутреннего устройства этой переферии. Но что еще странно, для переферии SPI тоже не отображён. UPD-1 - оказывается, SCI заводится нормально, nо у меня в коде была помеха, так что "страшилки" отсутствуют. Но одна страшилка всеж таки есть, а точнее приведение, о нем сказано в ерате на кристалл, а именно - на больших скоростях не формируется стоповый бит, потому что на 4 такта запаздывает на кристале сигнал...
DMA - не работает в режиме ДМА с перефериями SPI и SCI и это ясно указано в даташите. Причина почему Texas Instruments так сделал, лично мне не ясна, по идее наоборот это обязано быть. но...
CAN - Тоже навороченный, и да, то же присутствует в еррате на кристал, так что готовьтесь ловить приведения. Успел пощупать на практике, он ну и чекнутый это протокол однако... Главное что в этом интерфейсе из недостатков, это то, что его нельзя просто так взть и замкнул вход с выходом и получить loopback. Но, у микроконтроллера есть аналог режима лупбэка, называется Self Test Mode, эт такой там бит в регистре, называется STM. Для того чтобы работать с CAN интерфейсом нужно обязательно подключить прием и передачу на микросхему can-driver, иначе на выводе пина TX даже байт не выйдет, так что осциллографом ничего не увидите. Я полдня промучался, пока это не понял, и главное об этом ни где не сказано, во всяком случае я не нашёл. Как только драйвер припаялся, вам удастся отправлять данные. Но не радуйтесь, не спешите, так как для приема вам нужно по линии CAN отправить ответный байт, или используя сан-аналайзер с возможностью эхо. Приколы с скоростью тут полностью присутствую, так что следите за скоростью внимательно. Скорость может быть от 50кбит/с, до 1Мбит/с. Муть полная, не советую я вам закладывать этот интерфейс, я для себя это решил точно, назачто, хотя он и не плохой с точки зрения задумки.
IRQ - Начал читать про прерывания, очень огорчился по факту. В документации расписано как все круто и красиво, но после глубокого ознакомленя становится очевидно что красивые решение с использованием прерываний не получится, потому что нет явной преоритезации прерываний. Как таковые приоритеты есть, но это не те преоритеты которые позволяют в прерывании отвлечься на ещё более высокоприоритеныое событие. Суть в том что при возникновении прерывания, запускается тот обработчик который с высовим приоритетом. и если в процесссе его обработки возникают ещё несколько прерываний. то они становятся в очередь, и по завершению текущено выполнится следом тот у которого высшый приоритет. Очень напоминает реализацию прерываний у microchip`овских микроконтроллеров. В общем после глубокого прочтения про прерывания стало както угрюмо... не лично я не доволен такой реализацие прерываний и как это все помпезно преподнесено, не смотря на такую деревянную угрюмость в реализации... Не стоит забывать что это DSP, видимо что бы не было неппредусмотреностей они и отказались делать разширенный механизм прерываний. Так что это просто обратная сторона медали, имейте это ввиду.
_________________ * Ceci tuera cela. * Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.
|