Jump to content

    

Vladimir_T

Свой
  • Content Count

    545
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Vladimir_T

  • Rank
    Vladimir_T

Recent Profile Visitors

3711 profile views
  1. Великолепная книга! Плохая работа синтезатора вызвана, видимо, ошибками трассировки и согласования выхода PLL с нагрузками. Осталось только это поправить... Но методику я понял. Благодарю вас за вашу огромную помощь!
  2. Методику понял. Частотомером измерил опорную частоту - 99998.240 кГц, ее нужно корректировать. А сигнала выше 225 МГц так и нет, амплитуда 400 мВ, а на 300 МГц - совсем нет, но сигнал захвата есть. Видимо без анализатора частот уже мне не справиться: есть много гармоник, которые видны даже встроенным анализатором спектра осциллографа LeCroy 64xS-A. Возможно есть доступная литература по настройке подобного синтезатора?
  3. Метрологическое обеспечение - простое: Ч3-63 (пару недель после поверки). Сделаю, конечно, регистровый файл на основе вашего.
  4. Замечал непонятное поведение, но не мог понять причины. Благодарю вас.
  5. Не буду переписывать! Да, все так и есть: логика изменилась. Сейчас частота 99999.879 МГц, т.е. ошибка 1211 Гц для 100.001 МГц допустима? Ее можно будет снизить до нуля подбором коэффициентов? Можно вас просить подготовить файл с коэффициентами для частоты 300.003 МГц?
  6. Калибровка делается после обновления регистров, как положено. Но потом через небольшую задержку бит калибровки убираю, потому, как он автоматически не снимается. 2. Program R0 with FCAL_EN = 1. The PLL will calibrate and lock using the new PLL_R and PLL_N values. (SNAS764 –MAY 2018) Благодарю вас, сейчас проверю.
  7. Сигнал после 200МГц только появляется, со снижением частоты - амплитуда только растет. Щуп ставлю после C32/(C33). Выходной сигнал - синусоида Благодарю за помощь. Это содержимое регистров для 100.001 МГц Это содержимое регистров для 100 МГц
  8. Здравствуйте, уважаемые коллеги, подскажите, почему нет выходного сигнала с LMX2572LP на частотах выше 200 МГц? Петля из таких элементов C1=2200, С2= 15000, R1 = 330, сигнал захвата MuxOut = 1. Частоты от 200 MHz (амплитуда - 500мВ) и ниже формируются, но с понижением частоты - амплитуда растёт до напряжения питания. На что нужно обратить внимание и почему с частотой падает амплитуда. Коэффициенты пробовал разные и целочисленные - все равно плохо...
  9. Здравствуйте, посмотрите, пожалуйста на мой код - прерывания по приему от I2S так и не идут. #define I2S2_CK GPIO_Pin_10 // PB10 #define I2S2_WS GPIO_Pin_9 // PB09 #define I2S2_SD GPIO_Pin_3 // PC03 /*---------------------------------------------------------------------------- void Config_I2S2_Pin (void) -----------------------------------------------------------------------------*/ void Config_I2S2_Pin (void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = I2S2_CK | I2S2_WS; // Config I2S2 PINs GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // GPIO_PuPd_UP GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = I2S2_SD; // Config I2S2 PINs GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // GPIO_PuPd_UP GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOC, GPIO_PinSource3, GPIO_AF_SPI2); } // Config_I2S2_Pin (); #define I2S_AudioFreq_48_8k ((uint32_t)48800) void I2S_Slave_Init (void) { I2S_InitTypeDef I2S_InitStruct; RCC_I2SCLKConfig (RCC_I2S2CLKSource_PLLI2S); // Ôóíêöèÿ âûçûâàåòñÿ ïåðâîé äëÿ âûáîðà èñòî÷íèêà òàêòèðîâàíèÿ RCC_PLLI2SCmd(ENABLE); RCC_GetFlagStatus(RCC_FLAG_PLLI2SRDY); RCC_PLLI2SCmd(DISABLE); RCC_PLLI2SConfig(16,2); // PLLI2SN = 2..432, PLLI2SR = 2..7 RCC_PLLI2SCmd(ENABLE); RCC_APB1PeriphResetCmd (RCC_APB1Periph_SPI2, DISABLE); RCC_APB1PeriphClockCmd (RCC_APB1Periph_SPI2, ENABLE); // Enable SPI2 I2S_InitStruct.I2S_Mode = I2S_Mode_SlaveRx; /* Initialize the I2S_Mode Slave I2S_Mode_SlaveRx */ I2S_InitStruct.I2S_Standard = I2S_Standard_Phillips; /* Initialize the I2S_Standard member */ I2S_InitStruct.I2S_DataFormat = I2S_DataFormat_16b; /* Initialize the I2S_DataFormat member */ I2S_InitStruct.I2S_MCLKOutput = I2S_MCLKOutput_Disable; /* Initialize the I2S_MCLKOutput member */ I2S_InitStruct.I2S_AudioFreq = I2S_AudioFreq_48_8k; /* Initialize the I2S_AudioFreq member */ I2S_InitStruct.I2S_CPOL = I2S_CPOL_Low; /* Initialize the I2S_CPOL member */ I2S_Init (SPI2, &I2S_InitStruct); I2S_Cmd (SPI2, ENABLE); Config_I2S2_Pin (); SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_RXNE, ENABLE); // Rx buffer not empty interrupt mask } // I2S_Slave_Init (void) Для обеспечения требования STM32F40x and STM32F41x Errata sheet: Workaround The I2S peripheral must be enabled when the external master sets the WS line at: ● High level when the I2S protocol is selected. ● Low level when the LSB or MSB-justified mode is selected Делается инициализация I2S процессора, а потом кодека, вроде не должно быть рассинхронизации, о чем предупреждает ST. Но кодек запускается, а прерывания не идут. Контроллер прерываний настроен корректно. Set_ADC_TLV320 (1); I2S_Slave_Init (); // Config STM32F4xx for I2S-Slave Mode TLV320_I2S_Init ();
  10. I2S используется для работы с кодеком TLV320IAC520 в режиме мастера. Кодек формирует все служебные сигналы. Документацию читал и рекомендации стараюсь выполнять. Самое интересное, что эта связка сразу заработала нормально: прерывания от приемника I2S идут, сделал поканальную обработку потока. Затем некоторое время занимался отладкой других узлов. Но когда вернулся к кодеку - тут и сюрприз. Не работает оцифровка потока - сколько не бьюсь, а прерываний по приему так и нет! Что еще можно предпринять?
  11. I2S для STM32F405

    Здравствуйте, уважаемые коллеги, подскажите, пожалуйста по конфигурированию интерфейса I2S для STM32F405. В режиме I2S slave для приема данных, я должен линию I2S_CK подключить CKIN (PC9) ? Сейчас I2S_CK на I2S2_CK(PB9). Внутреннюю периферию сконфигурировал, а приема данных нет. void Config_I2S2_Pin (void) // From Port C { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = I2S2_CK | I2S2_WS; // Config I2S2 PINs GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // GPIO_PuPd_UP GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = I2S2_SD; // Config I2S2 PINs GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // GPIO_PuPd_UP GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOC, GPIO_PinSource3, GPIO_AF_SPI2); } // Config_I2S2_Pin (); void I2S_Slave_Init (void) { I2S_InitTypeDef I2S_InitStruct; RCC_APB1PeriphClockCmd (RCC_APB1Periph_SPI2, ENABLE); // Enable SPI2 I2S_InitStruct.I2S_Mode = I2S_Mode_SlaveRx; /* Initialize the I2S_Mode Slave */ I2S_InitStruct.I2S_Standard = I2S_Standard_Phillips; /* Initialize the I2S_Standard member */ I2S_InitStruct.I2S_DataFormat = I2S_DataFormat_16b; /* Initialize the I2S_DataFormat member */ I2S_InitStruct.I2S_MCLKOutput = I2S_MCLKOutput_Disable; /* Initialize the I2S_MCLKOutput member */ I2S_InitStruct.I2S_AudioFreq = I2S_AudioFreq_48k; /* Initialize the I2S_AudioFreq member */ I2S_InitStruct.I2S_CPOL = I2S_CPOL_Low; /* Initialize the I2S_CPOL member */ I2S_Init (SPI2, &I2S_InitStruct); SPI_Cmd (SPI2, ENABLE); I2S_Cmd (SPI2, ENABLE); Config_I2S2_Pin (); SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_RXNE, ENABLE); // Rx buffer not empty interrupt mask } // I2S_Slave_Init (void)
  12. Благодарю вас за помощь и полезные советы. Сейчас все работает как часы. Вчера посмотрел на мою задачу с другой стороны. Дело было в том, что шина I2S в АЦП как мастер, а со стороны микроконтроллера STM32F405 шина не инициирована и выводы находилась в третьем состоянии. Шина I2S в контроллере была не активна, все выводы были в третьем состоянии. Но TLV320 может работать в режиме каскадирования и внутренний контроль, видимо, не разрешал вывод потока данных на шину I2S.
  13. Хотя есть осадок. Ведь есть у кодека режим DC измерений с доступными фильтрами, этот режим устанавливаю и идут прерывания INT1, после его обработки вычитываю регистры АЦП: Read_ADC_TLV320 (0x68, 0); Read_ADC_TLV320 (0x69, 0); Read_ADC_TLV320 (0x6A, 0); Read_ADC_TLV320 (0x6B, 0); Read_ADC_TLV320 (0x6C, 0); Read_ADC_TLV320 (0x6D, 0); Есть ведь доступ к регистрам данных АЦП через SPI. Но прерывания идут редко - периодом 2.4 мсек, как написано в документации (P0_R49) Но главное, что АЦП на запускается на потоковую обработку, возможно ли из-за несоответствия: CODEC_CLKIN = NADC * MADC * AOSR * ADC_FS 25МГц = MCLK ≠ 1 * 4 * 128 * 48000 = 24.576 МГц Может внутренние коллизии не дают АЦП стартовать? На PLL переходить не желательно, а MCLK менять крайне не желательно