久久精品国产精品国产一区,少妇扒开毛毛自慰喷水,国产精品无码电影在线观看 ,久久天天躁夜夜躁狠狠85麻豆

思澈科技軟件開發(fā)工具包  2.20
Audio

音頻驅(qū)動(dòng)程序包括兩層:用于 I2S 的硬件訪問層 (HAL) 和用于 RT-Thread 的適配層。
硬件訪問層提供用于訪問 I2S 外設(shè)寄存器的基本 API。 有關(guān)詳細(xì)信息,請參閱 I2S 的 API 文檔。
適配層提供對 RT-Thread 驅(qū)動(dòng)框架的支持。 用戶可以使用 RT-Thread POSIX 驅(qū)動(dòng)程序接口進(jìn)行音頻編程。 請參閱 RT-Thread 驅(qū)動(dòng)程序的 API 文檔。
主要功能包括:

  • 麥克風(fēng)設(shè)備和揚(yáng)聲器設(shè)備支持
  • 用于音頻捕獲和播放的 DMA
  • 音頻捕獲轉(zhuǎn)儲工具支持并保存在 PC 中
  • 兩路I2S硬件支持,其中I2S1只用來輸入, I2S2 既支持輸入也支持輸出

驅(qū)動(dòng)配置

音頻設(shè)備使用 I2S 作為傳輸。 可以使用 menuconfig 工具為每個(gè)項(xiàng)目選擇外設(shè)和 DMA 支持配置的實(shí)例,通常保存在 C 頭文件中。 默認(rèn)情況下,配置保存為 rtconfig.h。

以下示例顯示在一個(gè)項(xiàng)目頭文件中定義的標(biāo)志,該項(xiàng)目使用支持 DMA 和 RT 音頻的麥克風(fēng)設(shè)備:

#define BSP_USING_DMA 1
#define RT_USING_AUDIO 1
#define BSP_USING_I2S 1
#define BSP_ENABLE_I2S_MIC 1
#define BSP_ENABLE_I2S_CODEC 1

配置完成后,用戶需要在所有需要訪問驅(qū)動(dòng)程序的源代碼中包含頭文件。

使用音頻驅(qū)動(dòng)程序

適配器層注冊 RT-Thread 請求的硬件支持功能,并使用 I2S HAL 實(shí)現(xiàn)這些功能。 I2S HAL 的 API 詳見 I2S

對于使用 RT-Thread 麥克風(fēng)設(shè)備進(jìn)行音頻捕獲的用戶,可以使用以下代碼作為示例:

uint8_t g_pipe_data[512];
// Find and open device
rt_device_t g_mic = rt_device_find("i2s1");
rt_err_t err = rt_device_open(g_mic, RT_DEVICE_FLAG_RDONLY);
// Configure Microphone deivce, sample rate 16000
struct rt_audio_caps caps;
caps.main_type = AUDIO_TYPE_INPUT;
caps.sub_type = AUDIO_DSP_SAMPLERATE;
caps.udata.value =16000;
rt_device_control(g_mic, AUDIO_CTL_CONFIGURE, &caps);;
// Start capture
int stream = 1; // record = 1, playback = 0
rt_device_set_rx_indicate(g_mic, audio_rx_ind);
rt_device_control(g_mic, AUDIO_CTL_START, &stream);
...
rt_err_t audio_rx_ind(rt_device_t dev, rt_size_t size)
{
// Processing audio data. Please note this is in interrupt context.
// User might need to start a thread to read and process data, call rt_device_read(g_mic, 0, g_pipe_data, AUDIO_BUF_SIZE);
}

對于使用 RT-Thread 喇叭/耳機(jī)設(shè)備進(jìn)行音頻播放的用戶,可以使用以下代碼作為示例:

uint8_t g_pipe_data[512];
// Find and open device
rt_device_t g_i2s = rt_device_find("i2s2");
rt_err_t err = rt_device_open(g_i2s, RT_DEVICE_FLAG_RDWR);
// Configure speaker deivce, sample rate 16000
struct rt_audio_caps caps;
caps.main_type = AUDIO_TYPE_INPUT; //AUDIO_TYPE_OUTPUT// for I2S2, configure RX will configure RX+TX
caps.sub_type = AUDIO_DSP_SAMPLERATE;
caps.udata.value =16000;
rt_device_control(g_i2s, AUDIO_CTL_CONFIGURE, &caps);;
// Start capture
int stream = 0; // record = 1, playback = 0
rt_device_set_tx_complete(g_i2s, audio_tx_done);
rt_device_control(g_i2s, AUDIO_CTL_START, &stream);
...
rt_err_t audio_tx_done(rt_device_t dev, void *buffer)
{
// Processing audio data. Please note this is in interrupt context.
// User might need to start a thread to fill data, call rt_device_write(g_i2s, 0, g_pipe_data, AUDIO_BUF_SIZE)
}