|
|
  |
STM32 mp3 playback |
|
|
|
Dec 2 2010, 09:52
|
Знающий
   
Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594

|
Цитата(Ivan Kuznetzov @ Dec 2 2010, 09:15)  kan35, какой максимальный битрейт Вам удалось воспроизвести с помощью этого кодека? В общем я только проверил на том кусочке, который в виде таблицы находится в файле mp3.h (там чуть более секунды). На сколько я помню (смотрел JTAG-ом) у него был 128кбит (не точно), и точно: частота 44100, стерео. На 72МГц процесс отъедал около 40% CPU. Спрашивали как инициализировал таймер, код. То что относится к RTOS, LCD я думаю выбросить не составить труда: CODE void TIM1_CC_IRQHandler(void) { TIM1_ClearITPendingBit(TIM1_IT_CC1); extern void TIM1_CC_Handler(void); TIM1_CC_Handler(); }
void Task_Extra(void) { // Timer1 Init // Enable Timer1 clock and release reset RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, DISABLE);
// Set timer period 0.5 sec TIM1_TimeBaseInitTypeDef TIM1_TimeBaseInitStruct; TIM1_TimeBaseInitStruct.TIM1_Prescaler = 0; TIM1_TimeBaseInitStruct.TIM1_CounterMode = TIM1_CounterMode_Up; TIM1_TimeBaseInitStruct.TIM1_Period = 1632;// TIM1_TimeBaseInitStruct.TIM1_ClockDivision = TIM1_CKD_DIV1; TIM1_TimeBaseInitStruct.TIM1_RepetitionCounter = 0; TIM1_TimeBaseInit(&TIM1_TimeBaseInitStruct); // Clear update interrupt bit //TIM1_ClearITPendingBit(TIM1_FLAG_Update); // Enable update interrupt //TIM1_ITConfig(TIM1_FLAG_Update,ENABLE); //PWM SETUP TIM1_OCInitTypeDef ocr_str; TIM1_OCStructInit( &ocr_str ); ocr_str.TIM1_OCMode = TIM1_OCMode_PWM1; ocr_str.TIM1_OutputState = TIM1_OutputState_Enable; ocr_str.TIM1_Pulse = 800; ocr_str.TIM1_OCPolarity = TIM1_OCPolarity_High; TIM1_OC1Init(&ocr_str); TIM1_OC1PreloadConfig(TIM1_OCPreload_Enable); // TIM1 Main Output Enable TIM1_CtrlPWMOutputs(ENABLE); // Compare interrupt enable TIM1_ITConfig(TIM1_IT_CC1, ENABLE); /*GPIOA Configuration: TIM1 channel 1 as alternate function push-pull */ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);
NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 12; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // Enable timer counting TIM1_Cmd(ENABLE);
HD44780_PowerUpInit(); HD44780_ReturnToHome(); OS_TIMER TIMERTEST; OS_CreateTimer(&TIMERTEST, NULL, 100000); unsigned int j = 0; while (1) { OS_RetriggerTimer(&TIMERTEST); void decoder( void ); decoder( ); OS_StopTimer(&TIMERTEST); char buf[50]; unsigned int data = 100000 - OS_GetTimerValue(&TIMERTEST); //data /= 1.28; sprintf(buf, "%d %d ", data, j++);// HD44780_ReturnToHome(); for (int i = 0; buf[i]!=0 && i<20; i++) { OS_Delay(1); HD44780WrData(buf[i]); } } } И по старую периферийную библиотеку все сделано, я думаю, тоже не составить труда перевести под новую.
Сообщение отредактировал IgorKossak - Jul 15 2011, 07:38
|
|
|
|
|
Jul 17 2011, 12:15
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
Запустил пример, компилятор IAR. Все время выходит из функции MP3Decode в самом начале: Код if (!mp3DecInfo) return ERR_MP3_NULL_POINTER; Проблема была в маленьком HEAP - указал побольше (0x5000) и стало играть. Теперь надо как-то декодированный буфер через DMA гнать в I2S. А то на 192кбит/с немножко затыкается. Интерфейс с картой SPI. На SDIO будет получше конечно.
Сообщение отредактировал Ivan Kuznetzov - Jul 17 2011, 15:28
--------------------
Разработчик
|
|
|
|
|
Dec 13 2011, 18:36
|
Знающий
   
Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594

|
Цитата(Ivan Kuznetzov @ Dec 13 2011, 16:05)  Сделал вывод стерео через ШИМ. ШИМ 70кГц. Качество примерно как у аудиокассеты, но вполне слушабельно... не вполне ясно откуда берется 70кГц??? все же DAC существенно лучше: во первых битность больше на тех же 44кГц, во вторых - проще фильтровать. На моем образце большинство людей разницу с фабричными плеерами не замечают, так что я бы сказал качество выше аудиокассетного существенно. И в обоих случаях требуется выдавать звук через DMA.
|
|
|
|
|
Dec 14 2011, 17:49
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
Цитата(kan35 @ Dec 14 2011, 00:36)  не вполне ясно откуда берется 70кГц??? все же DAC существенно лучше: во первых битность больше на тех же 44кГц, во вторых - проще фильтровать. На моем образце большинство людей разницу с фабричными плеерами не замечают, так что я бы сказал качество выше аудиокассетного существенно. И в обоих случаях требуется выдавать звук через DMA. С DAC у меня тоже работает (STM32F103VET6), согласен, качество существенно лучше. ШИМ приделывал c целью возможности использования на проце, где ДАКа нету...
--------------------
Разработчик
|
|
|
|
|
Dec 16 2011, 06:02
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
Цитата(AHTOXA @ Dec 15 2011, 01:36)  Позвольте поинтересоваться, удалось ли добиться нормального воспроизведения 320 kbps mp3 на STM32F1xx? Вроде были сообщения, что не тянут они? подтверждаю, прекрасно тянет! работаю на helix mp3dec. сорцы полностью сявые.
--------------------
Разработчик
|
|
|
|
|
Dec 17 2011, 12:23
|
Знающий
   
Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594

|
Цитата(sonycman @ Dec 16 2011, 11:20)  Выше на этой же странице Ваш пост про 40% загрузку процессора уже на 128 килобитах. А теперь тоже самое на 320?
Другой декодер? Посмотрите https://datatype.helixcommunity.org/Mp3dec табличку зависимости загрузки от битрейта. Скажу подробно: плеер работает во freertos, и я снимаю статистику загрузки штатными средствами и она показывает 57% напроцесс плеера, при этом все отсчеты (коих однако 88200 в секунду) проходят "софтверную" нормализацию, если это "вычесть", а так же "вычесть" чтение из файла (оно производится в этом же потоке), потому я примерно прикинул - 40-45% (72МГц).
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|