Jump to content

    

Vladimir_T

Свой
  • Content Count

    535
  • Joined

  • Last visited

Everything posted by Vladimir_T


  1. I2S используется для работы с кодеком TLV320IAC520 в режиме мастера. Кодек формирует все служебные сигналы. Документацию читал и рекомендации стараюсь выполнять. Самое интересное, что эта связка сразу заработала нормально: прерывания от приемника I2S идут, сделал поканальную обработку потока. Затем некоторое время занимался отладкой других узлов. Но когда вернулся к кодеку - тут и сюрприз. Не работает оцифровка потока - сколько не бьюсь, а прерываний по приему так и нет! Что еще можно предпринять?
  2. 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)
  3. Благодарю вас за помощь и полезные советы. Сейчас все работает как часы. Вчера посмотрел на мою задачу с другой стороны. Дело было в том, что шина I2S в АЦП как мастер, а со стороны микроконтроллера STM32F405 шина не инициирована и выводы находилась в третьем состоянии. Шина I2S в контроллере была не активна, все выводы были в третьем состоянии. Но TLV320 может работать в режиме каскадирования и внутренний контроль, видимо, не разрешал вывод потока данных на шину I2S.
  4. Хотя есть осадок. Ведь есть у кодека режим 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 менять крайне не желательно
  5. Здравствуйте, если у вас найдется время, то взгляните на мою задачу:

    Может что подскажите. Заранее благодарен.

     

     

  6. Здравствуйте, уважаеые коллеги, подскажите, пожалуйста по кодеку TLV320AIC3254. Питание внешнее 3.3В. Схема включения - обычная, внешний генератор на MCLK = 25 МГц. После инициализации АЦП не стартует, в регистре состояния нет готовности даееых (Sticky Flag Register 3 - 0x00 / 0x2D (P0_R45)). Вывод MFP5 подключен на INT1 (сигнал должен формироваться по готовности данных) его также нет. Все регистры программируюся корректно, проверяю их чтением. Аналоговый модуль запускается и внутренние стабилизаторы включены, на выводах AVDD, DVDD, REF корректные напряжения. Что может быть и почему не стартует АЦП? Буду очень признателен за любой совет. Write_ADC_TLV320 (0x00, 0x00); /* Initialize to Page 0 */ Write_ADC_TLV320 (0x01, 0x01); /* Initialize the device through software reset */ Delay (25); Write_ADC_TLV320 (0x04, 0x00); /* MCLK pin is CODEC_CLKIN. MCLK = 25MHz */ Write_ADC_TLV320 (0x12, 0x84); /* NADC = 4 */ Write_ADC_TLV320 (0x13, 0x84); /* MADC = 4 */ Write_ADC_TLV320 (0x14, 0x20); /* AOSR = 32 */ Write_ADC_TLV320 (0x3d, 0x0D); /* ADC PRB_R13 = 13 */ Write_ADC_TLV320 (0x00, 0x01); /* Select Page 1 */ Write_ADC_TLV320 (0x01, 0x08); /* Disable Internal Crude AVdd in presence of external */ Write_ADC_TLV320 (0x02, 0x01); /* Power up AVDD LDO */ Write_ADC_TLV320 (0x7b, 0x01); /* REF Power-Up */ Write_ADC_TLV320 (0x14, 0x25); /* HP soft stepping settings for optimal pop performance at power up Rpop used is 6k with N = 6 and soft step = 20usec. This should work with 47uF coupling capacitor. Can try N=5,6 or 7 time constants as well. Trade-off delay vs ???pop??? sound. */ Write_ADC_TLV320 (0x0A, 0x33); // Set full chip common mode to 0.9V Write_ADC_TLV320 (0x3d, 0x00); /* Select ADC PTM_R4 */ Write_ADC_TLV320 (0x47, 0x32); /* Set MicPGA startup delay to 3.1ms */ Write_ADC_TLV320 (0x34, 0x10); /* Route IN2L to LEFT_P with 10K */ Write_ADC_TLV320 (0x36, 0x10); /* Route IN2R to LEFT_N with 10K */ Write_ADC_TLV320 (0x37, 0x04); /* Route IN3R to RIGHT_P with 10K */ Write_ADC_TLV320 (0x39, 0x04); /* Route IN3L to RIGHT_N with 10K */ Write_ADC_TLV320 (0x3c, 0x00); /* Unmute Right MICPGA, Gain selection of 32dB to make channel gain 0dB */ Write_ADC_TLV320 (0x3d, 0x00); /* Select ADC PRB_R1 */ Write_ADC_TLV320 (0x3b, 0); /* Unmute Left MICPGA, Gain selection of 32dB to make channel gain 0dB */ Write_ADC_TLV320 (0x00, 0x00); /* Initialize to Page 0 */ Write_ADC_TLV320 (0x51, 0xc0); /* Power up Left and Right ADC Channels */ Write_ADC_TLV320 (0x52, 0x00); /* Unmute Left and Right ADC Digital Volume Control */ Write_ADC_TLV320 (0x66, 0xc1); /* DC Measurement Mode enabled for Left and Right ADC Channels 0 0001: DC Measurement D parameter = 1*/ Write_ADC_TLV320 (0x67, 0x00); /* Left and Right Channel DC measurement result update enabled For IIR based DC measurement, the measurement value is updated before periodic clearing of IIR filter*/ Write_ADC_TLV320 (0x30, 0x01); /* INT1 Interrupt for DC Measurement DC Measurement data available will generate INT1 interrupt INT1 is active high interrupt of multiple pulses, each of duration 2ms. */ Write_ADC_TLV320 (0x34, 0x14); /* INT1 output from MFP5 (32pin)*/
  7. Благодарю за помощь. Добавил программу преобразования выходного файла TICS в файл для включения в С-код. Сделана на скорую руку, но может кому-то еще, кроме меня, будет полезной. Регистры можно обновлять из полученного массива, как по отдельности, так и блоком. Преобразователь_TICS.rar
  8. Благодарю Вас, установил ваши значения и стало все нормально. А то, что я обновляю лишь часть регистров (только несколько основных) это допустимо?
  9. Здравствуйте, уважаемые коллеги, прошу вас помочь разобраться с синтезатором частот LMX2572. Для установки выходной частоты и общего управления синтезатором использую программу TICS Pro v1.7, тактирование от генератора ABLNO-V-100МГц. Задаю частоту 200 МГц, а получаю 202. Коэффициенты все целочисленные, захват Lock Detect =1. Почему может быть такая большая ошибка синтезатора? Откровенно говоря, я не переписываю все 126 регистров, как рекомендуют, после внутреннего сброса все регистры заполнены заводскими установками. И программируются лишь необходимые. Содержимое регистров контролируется через чтение их содержимого. Прилагается код программы инициализации для частоты 200 МГц. Set_PLL2572LP_ML (0,0x211A); // Power UP, Reset Delay (15); Set_PLL2572LP_ML (0,0x2118); // Power Down_Up, Calibrate Delay (15); Set_PLL2572LP_ML (0x09,0x0004); // Doubler = 0 Set_PLL2572LP_ML (0x0C,0x5001); // Pre_R =1 Delay (15); Set_PLL2572LP_ML (0x0A,0x10F8); // Multipler = 1 Set_PLL2572LP_ML (0x0B,0xB018); // R = 1 Set_PLL2572LP_ML (0x0E,0x1870); // Charge Pump = 6500 Set_PLL2572LP_ML (0x4B,0x0940); // Channel Div = 32 Set_PLL2572LP_ML (0x20,0x0305); // MASH Phase Synchro =3 Set_PLL2572LP_ML (0x25,0x0205); // PFD DLY SEL Set_PLL2572LP_ML (0x2C,0x0923); // OUT A PWR = 9 Set_PLL2572LP_ML (0x2D,0xC609); // OUT B PWR = 9 Set_PLL2572LP_ML (0x22,0x0010); // PLL_N 0..3xxxx Set_PLL2572LP_ML (0x24,0x0020); // PLL_N 0..FFFF - 32 Set_PLL2572LP_ML (0x2A,0x0000); // PLL_NUM / Set_PLL2572LP_ML (0x2B,0x0000); // PLL_NUM / Set_PLL2572LP_ML (0x26,0x0000); // PLL_DEN / Set_PLL2572LP_ML (0x27,0x0000); // PLL_DEN / // Set_PLL2572LP_ML (0,0x2118); // Power Down_Up, Calibrate, MUXout - MISO Set_PLL2572LP_ML (0,0x211C); // Power Down_Up, Calibrate, MUXout - Lock Detect Delay (15); Заранее благодарен.
  10. Нет, конечно! Я ведь написал, что это СВЧ малошумящий усилитель. Из фирменных уже давно выбрал бы подходящий, но у китайской микросхемы цоколевка ни с одной фирменной не совпадает, а монтаж с проводниками не будет работать - там импедансы согласованы.
  11. Это - самое правильное решение, только очень волокитно: переписка, отправка, ремонт. На все уйдет месяц- полтора и в копеечку. Эх!!! Как прочно нас китайцы к себе привязали! Ведь у дистрибьютеров, к которым вы меня отправляете даже СХЕМ нет! НЕ ДАЮТ их им китайцы!
  12. Благодарю за ответы, полезные для меня. На плате КИТа установлены проволочные индуктивности - чьи это могут быть?
  13. Здравствуйте, может кто знает, что это за гусек стоит в качестве входного малошумящего СВЧ-усилителя в анализаторе спектра АКИП 4204. При настройке оборудования он у меня сгорел! На корпусе SOT23-6 маркировка 958V, уже долго-долго ищу по даташитам (TI, NSP, Analog) - ничего похожего не нашел. Заранее благодарен.
  14. Здравствуйте, подскажите пожалуйста, серии SMD чип индуктивностей и конденсаторы типоразмера 0402 - 0805 для диапазона 800 - 1600 Мгц доступные и высокодобротные. Проволочные индуктивности лучше пленочных ? Опыта маловато в вопросах СВЧ - прошу не издеваться....
  15. Все так! На объекте масса разномастной аппаратуры, мое беспокойство вызвано только возможными ошибками при подключении. Скорее всего все будет как надо - буду пробовать.
  16. Хочу всех поблагодарить за ответы. Именно такая ситуация и сложилась - для ЖД локомотива делается прибор. Гальваноразвяку RS422 сделал, питание от бортовой сети через DC/DC, экранирование предусмотрено, соединение корпусами есть, а вот соединять напрямую земли - просто боязно! Нужно мне еще ГОСТы изучать...
  17. Здравствуйте, уважаемые коллеги! Подскажите для RS422 обязательно соединять устройства со общему проводу GND? Где-то на схемах он есть, а где-то его нет? Почему не достаточно штатных дифференциальных сигналов AB и YZ?
  18. Вот теперь - точно я увяз! То, о чем вы пишете - это отдельный огромный пласт науки и технологий. Работали у нас Специалисты по данному направлению, да только их уже нет, остались лишь огромная библиотека и масса кристаллов для акустооптики.
  19. Эх! Во я вляпался! Эти датчики, как мне пояснили из Мураты только для парковочных систем авто. Извлек из промышленного дальномера DUS-16 датчик, подключил в свою схему и все заработало, как надо! Но этот датчик без маркировки и потому не могу знать его параметров и условий эксплуатации.
  20. Здравствуйте, хочу спросить по диаграмме направленности ультразвукового датчика фирмы Murata MA58MF14-7N. Собрал типовую схему для этого датчика, работает схема нормально. Не нормально только с диаграммой: пока мишень (стальная крашенная крышка корпуса от ПК) находится строго перпендикулярно оси излучения датчика, то эхо сигнал чудесный! Как только мишень под углом более 2-3 градусов, дистанция 6м - эхо пропадает! На датчик установил рупор - угол 15 град, длина 200мм из листового алюминия. В чем может быть дело? Промышленный ультразвуковой дальномер с подобным рупором не чувствителен даже к большим заклонам мишени. MA58MF14-7N.pdf
  21. Уважаемые коллеги, прочел материалы по данной теме SPI в STM32F4xx, но прежде все "неточности" работы SPI обнаружил у себя на MCU STM32F410. Мастером является STM32F405 , а ведомым STM32F410. На обоих процессорам обмен производится через прерывания. У мастера обмен: прием/передача без ошибок. А ведомый ведет себя так: принимает без ошибок, а вот передает - с ошибками! Но главное, что пока идет прием одного байта, он умудряется несколько раз вызвать прерывание по опустошению буфера TX. Код обработчика простой, инициализация также. Может будут какие-либо мысли - поделитесь со мной, пожалуйста. Идея обмена проста. В фоновом режиме получаем последовательность и в также заполняем буфер передатчика: опустел буфер, взвелся флаг TXE в SPI->SR, вырабатывается прерывание и в буфер передатчика заносим очередное значение. Но когда начинается обмен, то флаг TXE появляется чаще RXNE, хотя они должны следовать один после другого. Потому тестовые счетчики Cnt1 и Cnt2. SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //Config SPI Protocol SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_NSS = SPI_NSS_Hard; // SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; // High SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; // SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; // 16 SPI_Init(SPI1, &SPI_InitStructure); SPI_Cmd(SPI1, ENABLE); SPI_CalculateCRC(SPI1, DISABLE); SPI_SSOutputCmd(SPI1, DISABLE); Cnt_Tx = Cnt_Rx =0; SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE); SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_TXE, ENABLE); /***************************************************************************** SPI1_IRQHandler (); ******************************************************************************/ TControl *pCtrl = &Control; u32 Cnt1 =0, Cnt2=0, Cnt3=0; __irq void SPI1_IRQHandler(void) { if (SPI_I2S_GetITStatus(SPI1, SPI_IT_TXE)) { SPI1->DR = *pOut_Buff++; if (++Cnt_Tx == Cnt_Pack) { Cnt_Tx = 0; Cnt1 ++; // For Test pOut_Buff = (u8*)&SPI_USonic_Out; // Init pointer } } if (SPI_I2S_GetITStatus(SPI1, SPI_IT_RXNE)) { *pIn_Buff++ = SPI1->DR; if (++Cnt_Rx == Cnt_Pack) { Cnt_Rx = 0; Cnt2++; // For Test pCtrl-> Link_SPI = True; // Link is Ready pIn_Buff = (u8*)&SPI_USonic_In; // Init pointer } } } // SPI1_IRQHandler ();
  22. Про HardFault

    Спасибо Всем за помощь! Дело было в настройках размеров ОЗУ. Scatter load пытал инициализировать массив, размер которого для 405 был уже предельным, а для 410 совсем запредельный!
  23. Про HardFault

    Здравствуйте, уважаемые программисты, подскажите где мне искать решение? Как написано в описании STM32F410R8 программно абсолютно совместим с STM32F405RGT8, на котором успешно работает проект. Но когда этот же проект из Keil 4.70 загружаю d STM32F410, после запуска процессор улетает на HardFault из Startup. Все проверил карты памяти одинаковы, стеки настроены. В отладчике ловлю-ловлю вижу, что LR = 0xFFFFFFF9, почему так? Может для STM32F410 нужен другой Startup, тогда где его взять?