Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
2015:audio-interface [2016/01/17 21:57] Martin Kokolia |
2015:audio-interface [2016/01/17 22:13] (aktuální) Martin Kokolia [Závěr] |
||
---|---|---|---|
Řádek 49: | Řádek 49: | ||
Použité knihovny v soubotu main.c | Použité knihovny v soubotu main.c | ||
- | <code> | + | <code c> |
#include "stm32f4xx_hal.h" | #include "stm32f4xx_hal.h" | ||
#include "usb_device.h" | #include "usb_device.h" | ||
Řádek 57: | Řádek 57: | ||
</code> | </code> | ||
- | <code> | + | <code c> |
assert_param(IS_ADC_CHANNEL(sConfig->ADC_CHANNEL_1)); | assert_param(IS_ADC_CHANNEL(sConfig->ADC_CHANNEL_1)); | ||
| | ||
Řádek 67: | Řádek 67: | ||
| | ||
cs43l22_Init(DAC_CHANNEL_1, OUTPUT_DEVICE_SPEAKER, 60, AUDIO_FREQUENCY_48K); | cs43l22_Init(DAC_CHANNEL_1, OUTPUT_DEVICE_SPEAKER, 60, AUDIO_FREQUENCY_48K); | ||
+ | | ||
+ | cmd = AUDIO_CMD_START; | ||
</code> | </code> | ||
- | <code> | + | <code c> |
while (1) | while (1) | ||
{ | { | ||
Řádek 90: | Řádek 92: | ||
Nejprve je inicializován AD převodník a přiřazeným kanálem číslo jedna, který odpovídá převodníku ADC1. Na tento převodník je přivedeno napětí z potenciometru, který ovládá Volume přehrávání audio výstupu. Následně jsou přiřazeny patřičné parametry a vzorkovací frekvence. | Nejprve je inicializován AD převodník a přiřazeným kanálem číslo jedna, který odpovídá převodníku ADC1. Na tento převodník je přivedeno napětí z potenciometru, který ovládá Volume přehrávání audio výstupu. Následně jsou přiřazeny patřičné parametry a vzorkovací frekvence. | ||
- | Dále je inicializován audio kodek, kde je přižen výstupní pin na Jack 3.5 mm, zvolen typ výstupního zařízení, počáteční hlasitost v procentech a vrozkovací frekvence na 48 kHz. Stejná je vzorkovací frekvence AD převodníku a rychlost přenosu po USB. | + | Dále je inicializován audio kodek, kde je přiřazen výstupní pin na Jack 3.5 mm, zvolen typ výstupního zařízení, počáteční hlasitost v procentech a vrozkovací frekvence na 48 kHz. Stejná je vzorkovací frekvence AD převodníku a rychlost přenosu po USB. |
Ve smyčče While je přepínán vstup mezi AD převodníky 1 a 2, takže je střídavě přijímán audio signál a snímáno nastavení Volume. | Ve smyčče While je přepínán vstup mezi AD převodníky 1 a 2, takže je střídavě přijímán audio signál a snímáno nastavení Volume. | ||
Řádek 100: | Řádek 102: | ||
Hlavní část programu se provádí v souboru usbd_audio_if.c, která využívá další knihovny | Hlavní část programu se provádí v souboru usbd_audio_if.c, která využívá další knihovny | ||
- | <code> | + | <code c> |
#include "usbd_audio_if.h" | #include "usbd_audio_if.h" | ||
#include "stm32f4xx_hal_adc.h" | #include "stm32f4xx_hal_adc.h" | ||
Řádek 107: | Řádek 109: | ||
</code> | </code> | ||
- | Veškeré procesy se provádí při volání funkce AUDIO_AudioCmd_FS. K jejímu volání dochází při naplnění audio bufferu. | + | Veškeré procesy se provádí při volání funkce AUDIO_AudioCmd_FS. K jejímu volání dochází při naplnění audio bufferu ''pbuf''. |
Je využito proměnných ze souboru main.c | Je využito proměnných ze souboru main.c | ||
- | <code> | + | <code c> |
extern hadc; | extern hadc; | ||
extern channel; | extern channel; | ||
+ | extern cmd; | ||
</code> | </code> | ||
- | <code> | + | <code c> |
static int8_t AUDIO_AudioCmd_FS (uint8_t* pbuf, uint32_t size, uint8_t cmd) | static int8_t AUDIO_AudioCmd_FS (uint8_t* pbuf, uint32_t size, uint8_t cmd) | ||
{ /* USER CODE BEGIN 2 */ | { /* USER CODE BEGIN 2 */ | ||
Řádek 131: | Řádek 134: | ||
case AUDIO_CMD_PLAY: | case AUDIO_CMD_PLAY: | ||
- | pbuf = | + | |
if (HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_0)==GPIO_PIN_RESET) | if (HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_0)==GPIO_PIN_RESET) | ||
{ | { | ||
Řádek 179: | Řádek 181: | ||
Vstupními parametry funkce jsou označení audio bufferu, jeho velikost a příkaz pro audio zařízení ''cmd''. Nejprve je zařízení v ražimu Start, kde dojde k inicializaci všech periferií atd. Po stistku hardwarového tlačítka přechází do ražimu Play. | Vstupními parametry funkce jsou označení audio bufferu, jeho velikost a příkaz pro audio zařízení ''cmd''. Nejprve je zařízení v ražimu Start, kde dojde k inicializaci všech periferií atd. Po stistku hardwarového tlačítka přechází do ražimu Play. | ||
Když je zařízení v ražimu Play, pak při stisku tlačítka dochází k přepínácí režimu Mute. | Když je zařízení v ražimu Play, pak při stisku tlačítka dochází k přepínácí režimu Mute. | ||
- | Dále dojde k čtení hodnoty z Ad převodníku pro zvolení hlasitosti přehrávání a nakonec jsou data ze vstupního bufferu s daty přijatých po USB přenesen do výstupního bufferu audio výstupu. | + | Dále dojde k čtení hodnoty z AD převodníku pro zvolení hlasitosti přehrávání, respektive načtení audio vstupu druhého AD převodníku a nakonec jsou data ze vstupního bufferu s daty přijatých po USB přenesen do výstupního bufferu audio výstupu. |
---- | ---- | ||
Řádek 196: | Řádek 198: | ||
====== Závěr ====== | ====== Závěr ====== | ||
- | Ze screenshotů je patrné že zařízení se po připojení k PC přihlásí jako audio zařízení pro přehrávání a je připraveno k přenosu dat. Kvůli střídavému čtení hodnot z AD převodníku 1 a 2 může docházet ke ztrátám některých vzorků, pokud by přepínání mezi čtením z převodníků probíhalo pomaleji než s frekvencí 48 kHz. Bohužel při testech nebylo dosaženo požadované funkčnosti, což je zřejmě způsobeno špatnými parametry pro funkce obsluhující USB přenos. Dokumentace výrobce je absolutně nepřehledná a postrádá faktické informace o skutečném významu a formátu parametrů, takže notná část parametrů funkcí byla odhadnuta podle obsahu knihoven. | + | Ze screenshotů je patrné že zařízení se po připojení k PC přihlásí jako audio zařízení pro přehrávání a je připraveno k přenosu dat. Kvůli střídavému čtení hodnot z AD převodníku 1 a 2 může docházet ke ztrátám některých vzorků, pokud by přepínání mezi čtením z převodníků probíhalo pomaleji než s frekvencí 48 kHz. |
+ | |||
+ | Bohužel při testech nebylo dosaženo požadované funkčnosti, což je zřejmě způsobeno špatnými parametry pro funkce obsluhující USB přenos. Program přechízi do režimu Play a funguje i Mute a Volume, ale do bufferu se nejspíše nedostávájí správná data. Dokumentace výrobce je absolutně nepřehledná a postrádá faktické informace o skutečném významu a formátu parametrů, takže notná část parametrů funkcí byla odhadnuta podle obsahu knihoven. | ||