Перейти к содержанию
    

BlackOps

Свой
  • Постов

    597
  • Зарегистрирован

  • Посещение

Весь контент BlackOps


  1. ничего не будет, тоже не работает! а вот если ставлю брейк на линии int dummy = SPI2->DR; исполняю код, дохожу до брейка, затем опять исполняют, то работает! не могу понять в чем дело! да но ведь я же использую SPI2 а не SPI1!
  2. естесственно хватает, вот что вижу на осциллографе когда работает: [DELETED] а вот когда не работает: [DELETED] чтото пост большой какойто стал :Р без дебаггера тоже не работает! т.е. если на чип заливаю, и включаю, то не работает! Никакой функции нету! исполняю прямо кодом для простоты! вот один из кодов привожу еще раз, где в комменте указано если там стоит брейк то работает, если нет брейка то не работает. (void) SPI2->DR; /* clear SPI_SR_RXNE in status register */ // breakpoint here! SPI2->DR = (d0 & SPI_DR_DR); while ((SPI2->SR & SPI_SR_TXE) == 0) ; да! я знаю! проблема сократилась! но дело в том что непонятно в чем сейчас дело... все просто...убираю брейк не работает если прогорняыется код сразу! ставлю брейк вижу сначала изображение №2 в посте, потом вновь запускаю как только достиг брейка, и вижу изображение №1 (т.е. рабочее) а если нет брейка, т.е. сразу прогоняыется весь код, то тока изображение №2!
  3. вот по вашему образцу код мой: (void) SPI2->DR; /* clear SPI_SR_RXNE in status register */ // breakpoint here! SPI2->DR = (d0 & SPI_DR_DR); while ((SPI2->SR & SPI_SR_TXE) == 0) ; Видите коммент где про breakpoint сказано?так вот если ставлю туда брейкпоинт, дохожу до него и опять стартую то работает! если без брейк поинта, то не работает когда исполняется все сразу! не могу понать почему?
  4. Да, как яуже говорил, если например ставлю брейк межу циклом и между отправкой, то все работает (если SPI2 были бы сконфигурированы не верне, не работало бы вообще!) еще работает тогда, когда я например в дебаггере по очереди пальцем жму на исполнение каждой строки этого кода.. а прогоняя весь код не работает! причем проблема именно в этих двух линиях! но какая именно понять не могу? еще вот какой вариант работает: никаких циклов, ничего, ставлю только это: SPI2->DR = d0; НО! перед этой строкоы ставлю брейк! в дебаггере исполняю, доходит до брейка, и на осциллографе вижу как преже поднятй SCK и нулевой MOSI! Но потом, нажимаю кнопку Run опять, и уже исполняыется вышеописанная команда!И вот вижу свой байт на осциллографе и переключение SCK! А вот если без брейка... т.е. сразу запустить всю прогу! то только вижу приподнятй SCK и нулевой MOSI! Это на какие либо мысли толкает? что это может быть?
  5. да нет не заработало, попробовал также один байт и без цикла послать, тоже самое..
  6. вот моя константа как объявлена: typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus; а зачем делать вот это: SPI1->DR & SPI_DR_DR ?
  7. Да нет же! Все правильно сдесь! while ( ( (SPI2 -> SR) & 0x2 ) == RESET) * Если ТХЕ = 0, то (SPI2 -> SR) & 0x2 ) = 0, и 0 = RESET, цикл продолжает исполнятся * Если ТХЕ = 1, то (SPI2 -> SR) & 0x2 ) = 1, и 0 != RESET, и мы вылетаем из цыкла! Таким образом я и жду пока бит ТХЕ = 1. Проблема значит в чем то другом?
  8. Вы кажется первый мой пост совсем пропустили. вот же код: while ( ( (SPI2 -> SR) & 0x2 ) == RESET) { //wait until TXE bit is 1 } SPI2 -> DR = d0; если после цикла ставлю брейк, а потом повторно нажимаю кнопку исполнения в дебаггере, то на осциллографе вижу нужное переключение битов. а если сразу исполняю весь код(или запускаю не из дебаггера а после залива проги в чип) то не вижу.
  9. вот настройка SPI //============================================================================= // SPI2 Related configuration //============================================================================= // enable SPI2 clock ((RCC_TypeDef *) (RCC_BASE))->APB1ENR |= RCC_APB1ENR_SPI2EN; // configure SPI2 ((SPI_TypeDef *) (SPI2_BASE)) -> CR1 |= (SPI_CR1_SPE | SPI_CR1_CPOL | SPI_CR1_CPHA | SPI_CR1_MSTR | SPI_CR1_BR_1 | SPI_CR1_SSM | SPI_CR1_SSI); фпцлк=42MHz, BR=010, когда на осциллографе (в случае если между циклом проверки ТХЕ и записью в регистр DR стоит брейкпоинт) виден SCK , его период примерно 5 MHz. что тут может быть не так? с настройкой точно нет! Иначе вообще бы не работало! Но байт отсылается ведь! Но отсылается только когда поочередно в дебаггере те две линии кода исполняю. я даже пробовал считывать в переменные содержимое регистра SRи CR1сразу после выхода из цикла проверки на бит ТХЕ. результат: CR1=б1101010111 (SSM=1,SSI=1,SPE=1,BR=010,MSTR=1,CPOL=1,CPHA=1) SR=0х2 (т.е. только ТХЕ=1) а после этого идет запись в DR. все же вроде правильно! в чем может быть причина?
  10. после - бесконечный цикл. до - ничего касательно этого SPI порта. да, я просто отсылаю один байт. ничего не принимаю. простой тест, отсылаю, а на выходе ножки цепляю на осциллограф посмотреть.
  11. STM32F407 Проблемы с SPI

    Вот код: while ( ( (SPI2 -> SR) & 0x2 ) == RESET) { //wait until TXE bit is 1 } SPI2 -> DR = d0; когда этот код исполняется на чипе, или в дебаггере без брейкпоинтов то на осциллографе я только вижу SCK поднятый а MOSI на нуле. Но когда я исполняю этот код по очереди линию за линией в дебаггере, или же ставлю брейк поинт в дебаггере между циклом while и строчкой с записью в DR, а затем достигнув брейкпоинта опятй продолжаю исполнять код, то на осциллографе вижу переключение SCK и отсылку битов d0. в чем может быть проблема? Мне например кажется что SPI2 -> DR = d0; который сразу следует после цикла не дает возможности SPI контроллеру быстро среагировать и послать бит, а исполняя код строка за строкой все работает. но ведь с другой стороны, я же циклом проверяю бит ТХЕ!? и если я вышел с цикла то буфер свободен и должен бит нормально отослатся? (я пробовал тоже самое циклом проверять и бит BSY, тоже самое) есть идеи?
  12. еще вот что интерестно, нужно ли мне тогда на плату тестового чипа ставить комбинацию ресисторов для того чтобы обеспечить выходное сопротивление 50 Ом?
  13. ну вобщем вот нашел этот документ: http://cp.literature.agilent.com/litweb/pdf/5988-5635EN.pdf там описаны различные методы, в том числе и метод указанный выше где замеряется single ended методом сигналы, но его недостатки в том, что он не дает точных ресультатов поведения девайса в дифференциальном режиме. также там описан балун, его недостатки уже упомянуты были (частотный диапазон), плюс ко всему балун не позволяет common-mode поведение девайса узнать т.к. он его тушит. но вот Simulated mixed-mode method где сначала собираются одиночные измерения, импортируются в симулятор АДС, а затем с двумя трансформерами проводится замер, это кажется точно то что нужно. Они там описывают еще один метод, Calculated mixed-mode S-parameters method, насколько я понимаю тот метод если налажен то работает быстро (т.к. ненадо много одиночных измерений проводить), но он по моему тоже потребует балун который работает на всем интересующем тебя диапазоне. (и балун нужно отдельно характеризовать тоже) Поэтому я сделал вывод копать в сторону метода: Simulated mixed-mode method ну а так если у когото есть что дополнить из собственного опыта, напишите, буду рад посмотреть
  14. просмотрел я этот док. Ну вобщем выходит из него что: 1) При низкой входной мощности нет особой разницы между дифференциальным измерением(TruDi) и отдельным не-дифференциальным (Verdi) 2)для активных устройств (активный фильтр или усилитель как в моем случае), при условии что он работает в линейном режиме, разницы тоже быть не должно, только при нелинейном режиме большая разница. Выходит что имеет смысл сделать так как описал soldat_shveyk, только при условии что измерения проводить при малой входной мощности на усилитель? Какие еще мысли будут по этому поводу?
  15. (ну а для симуляции самого девайса можно использовать идеальный балун вобщемто) Ясно, т.е. я должен сделать итого 12 разных измерений? s21, s31, s41, s12, s32, s42, s13, s23, s43, s14, s24, s34 И скажем если например подключил порт для замера s43, то порты 1,2 моего девайса на плате должны быть терминированы на 50 Ом, так? И еще, если например я мерю s43, (заземляа через 50 Ом порты 1,2 естесственно), то то что я вижу на анализаторе как s21 и есть мой s43? таким образом то что я вижу на анализаторе как s12 есть мой s34, верно? Ну и выходит мне надо тогда не 12 раз переставлять тест бенч а 6 раз (хотя количество замеров всеравно 12)
  16. Допустим есть чип, радио усилитель, работающий на частоте ну скажем до 10ГГц, и есть Векторный Анализатор Цепей который тянет до 20ГГц, ну и с комплектом для измерения S параметров. Дело в том что чип, усилитель, он дифференциальный, а векторный анализатор цепей двух-портный, в идеале естесственно можно на тестовую плату на вход и выход усилителя поставить трансформеры для перехода от single-ended к Differential но дело в том что все(дешевые) трансформеры имеют довольно таки низкие ограничения по частоте, ну максимум тянут на 3ГГц, некоторые с 5 до 7 ГГц итд, одним словом не подходят к требуемому диапазону (хотябы от 100МГц до 10ГГц). Я находил некоторые решения для такой задачи, т.е. своего рода инструментальные трансформеры для организации такого перехода, но стоят они очень дорого, цена данного решения почти 5500$. Так вот вопрос, имея только то оборудование которое упомянул в начале, ну и скажем +200$ на другие необходимые детали (стоимость тестовой платы не включаю), как можно измерить параметры данного усилителя, т.е. как сделать это дешево? реально ли вообще?
  17. Альтиум порядка 5000$ стоит, т.е. этот CADSTAR выходит может делать все то что может Альтиум и стоит меньше? Какая у него цена?
  18. Сейчас в середине проекта заниматся писаниной макроса времени нет. Просто это самые важные функции которые я считаю должны присутствовать. Ну так поделитесь может быть макросом тут? Я уверен многие не откажутся скачать! Спасибо!
  19. я даже на секунду задумался а что если редактировать нетлист в LTSpice а потом плату рисовать Kикадом, но вроде как не возможно это.. Или можно как то? (и еще каким нибудь образом передавать данные об элементах, т.е. номер производителя итд, для оформления списка материалов) Разводка Кикада..ну так себе еще ничего вроде как. Правда вот установка Виа это проблема! Много времени на это тратить нужно! Т.е. скажем ставить виа соедененные к земле или куда то еще на полигоны, в радио платах это особенно часто приходится делать.
  20. вобщем, самое ненавиствное для меня в Кикаде, это то что когда в сХематике удаляю например длинную линию соединения к которой подключены другие линии откуда то, то точки соединения остаются! И их надо отдельно удалять! Это вообще глупость полная. Еще жутко то что когда копируеш модуль с линиями, и подгоняыеш его к другому модулю с линиями, то линии не соединяются друг с другом пока их концы не соедениш. т.е. образуются разрывы. Вобщем сХематик у кикада это жуть! явно тот кто разрабатывал сам особо никаких сХематик проектов не делал, хоть бы взяли пример ну незнаю с бесплатного LTspice? Там вон как красиво все рисуется и редактируется!
  21. ну я так и в общемто решил сделать, поставлю комбинацию керамика+электролит твердотельный, плюс ограничитель.
  22. тут еще одна есть проблема с выбором тантала (или твердого электролита), а именно, их эффективная емкость значительно падает после 1МГц, после 1.5МГц многие из доступных конденсаторов уже перестают иметь эффективную емкость, а т.к. мой свитчер работает на 4 МГц, то мне нужен конденсатор который будет иметь свою емкость до 4МГц хотябы. я просимулировал несколько керамических конденсаторов размером 0603 например, и вижу что они имеют емкость примерно 2.2мкф на частоте до 4МГц, мне нужна емкость хотябы ну скажем 40мкф на входе импульсника. т.е. если я параллельно поставлю скажем 20 таких конденсаторов размером 0603, то одновременно я снижаю и параллельную индуктивность,сопротивление, имею свои 44мкф, и каждый конденсатор будет работать на заданной частоте. а насчет подскока напряжения, как уже упоминалос, буду использовать на входе ограничитель, т.е. это уже не страшно поетому керамику применить можно. 20 конденсаторов выглядит как то много, но их размер 0603, вроде бы не так уж плохо. ну что думаете такое решение нормальное или как?
  23. Я немного не так объяснил, не приемлимы электролитические конденсаторы с жидким электролитом. Но конденсаторы с твердым полимером я всетаки могу тоже использовать.
×
×
  • Создать...