圏9研究所 工作室

圏9研究所の開発情報資料など

STM32F411 BlackPill USB Speaker(6)USB audio data 転送処理

メインシーケンス作成のためデータハンドリング内容と定数を整理

1.オーディオデータ遷移
1)オーディオデータバッファとDAC PWMデータ遷移

 

関数

バッファ

クロック

処理

ホスト

ホスト

1msec毎に1 PACKETオーディオデータを送信

バイス

USBD_AUDIO_DataOut()

&haudio->buffer

データを順次バッファに保存

AUDIO_AudioCmd_FS()

pbuf

TransferComplete_CallBack_FS() によりバッファデータを伴いAUDIO_CMD_PLAY を発行

main()

pwm_buf

バイス

データをデコードして保存するAUDIO_OUT_PACKET_NUM 相当の時間が経過したらTransferComplete_CallBack_FS() を呼ぶ


2)再生スタートタイミング詳細(実測値)
・再生スタート時 AUDIO_CMD_START と AUDIO_CMD_PLAY 間は実測20.9usec
・AUDIO_CMD_START と AUDIO_CMD_PLAY 間で使える処理時間は 6.84usec(0.67 + 6.17)
・cmd値をUSB割込処理外のmain関数等に持ち出して処理するとUSB割込後の処理となる
 これは割込フラグが初期セットされているため発生する

 

2.オーディオデータ関連定数
1)定数一覧

シンボル

設定値

単位

内容

USBD_AUDIO_FREQ

48000

Hz

サンプリング周波数

AUDIO_OUT_PACKET

192

byte/PACKET

1パケットのバイト数

((USBD_AUDIO_FREQ * 2U * 2U) / 1000U)

AUDIO_OUT_PACKET_NUM

80U

PACKET/buff

バッファ収容パケット数

AUDIO_TOTAL_BUF_SIZE

15360

byte/buff

AUDIO_OUT_PACKET * AUDIO_OUT_PACKET_NUM

size

half word/buff

バッファ収容データ(16bit)

 AUDIO_AudioCmd_FS() 引数

2)タイマー類設定値一覧

所属

項目

設定値

設定コード・計算式

SYSTEM

システムクロック

SYSTEM_FREQ

96MHz

TIM2

Period

(TIM2_P_BASE)

2000-1

SYSTEM_FREQ/USBD_AUDIO_FREQ – 1

= TIM2_P_BASE - 1

TIM1

Period

(TIM1_P_BASE)

3840-1

AUDIO_TOTAL_BUF_SIZE/4 – 1

= TIM1_P_BASE - 1

Compare Pulse

1920-1

AUDIO_TOTAL_BUF_SIZE/4/2 – 1

= TIM1_P_BASE/2- 1

DMA PWM

バッファサイズ

AUDIO_DMA_BUF_SIZE

7680

AUDIO_TOTAL_BUF_SIZE/4 * 2

= TIM1_P_BASE * 2

保存開始

1920

AUDIO_TOTAL_BUF_SIZE/4 * 2 / 4

= AUDIO_DMA_BUF_SIZE / 4

 

(3)定数実装コード  <main.h> 

/* USER CODE BEGIN Private defines */
#define SYSTEM_FREQ 96000000U
#ifndef USBD_AUDIO_FREQ
/* AUDIO Class Config */
#define USBD_AUDIO_FREQ 48000U
#endif /* USBD_AUDIO_FREQ */
#define TIM2_P_BASE ((uint32_t)(SYSTEM_FREQ / USBD_AUDIO_FREQ))
#define TIM1_P_BASE ((uint16_t)(AUDIO_TOTAL_BUF_SIZE / 4))
#define AUDIO_DMA_BUF_SIZE ((uint16_t)(AUDIO_TOTAL_BUF_SIZE / 4 * 2))

/* USER CODE END Private defines */