在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

零基礎(chǔ)開發(fā)小安派-Eyes-S1外設(shè)篇——I2S

AIoT行業(yè)洞察 ? 來源:AIoT行業(yè)洞察 ? 作者:AIoT行業(yè)洞察 ? 2024-12-13 18:02 ? 次閱讀

AiPi-Eyes-S1是安信可開源團(tuán)隊(duì)專門為Ai-M61-32S設(shè)計(jì)的一款開發(fā)板,支持WiFi6、BLE5.3。所搭載的Ai-M61-32S 模組具有豐富的外設(shè)接口,具體包括 DVP、MJPEG、Dispaly、AudioCodec、USB2.0、SDU、以太網(wǎng) (EMAC)、SD/MMC(SDH)、SPI、UARTI2C、I2S、PWM、GPDAC、GPADC、ACOMP 和 GPIO 等。

AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預(yù)留TF卡座,并且引出USB接口,可接入U(xiǎn)SB攝像頭。

從零開始學(xué)習(xí)小安派:

1、零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——初識(shí)小安派-Eyes-S1

2、零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——安裝VMware與Ubuntu

3、入門篇:零基礎(chǔ)開發(fā)小安派-Eyes-S1——新建工程并燒錄調(diào)試

4、零基礎(chǔ)開發(fā)小安派-Eyes-S1入門篇——Win下SSH連接Linux

5、零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——Samba共享文件夾

6、零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——工程文件架構(gòu)

7、零基礎(chǔ)開發(fā)小安派-Eyes-S1【外設(shè)篇】——GPIO 輸入輸出

8、零基礎(chǔ)開發(fā)小安派-Eyes-S1【外設(shè)篇】——GPIO中斷編程

9、零基礎(chǔ)開發(fā)小安派-Eyes-S1【外設(shè)篇】——PWM

10、零基礎(chǔ)開發(fā)小安派-Eyes-S1【外設(shè)篇】——UART

11、零基礎(chǔ)開發(fā)小安派-Eyes-S1【外設(shè)篇】——I2C

12、零基礎(chǔ)開發(fā)小安派-Eyes-S1【外設(shè)篇】——ADC

13、零基礎(chǔ)開發(fā)小安派-Eyes-S1【外設(shè)篇】——FLASH

I2S(Inter-IC Sound)是一種廣泛應(yīng)用于數(shù)字音頻傳輸?shù)拇薪涌跇?biāo)準(zhǔn)。它最初由 Philips 開發(fā),用于解決在集成電路之間傳輸音頻數(shù)據(jù)的問題。I2S 協(xié)議定義了音頻數(shù)據(jù)的傳輸格式、時(shí)序和控制信號(hào)。在 I2S 只能同時(shí)存在一個(gè)主設(shè)備和發(fā)送設(shè)備,主設(shè)備可以是發(fā)送設(shè)備也可以是接收設(shè)備,提供 BCK 和 FS 的設(shè)備為主設(shè)備。

01了解小安派-Eyes-S1 的 I2S

特點(diǎn):

支持主模式和從模式。

支持多種協(xié)議(Normal I2S、Left-Justified、Right-Justified、PCM、TDM/TDM64)。

支持單/雙聲道,在 TDM 模式下支持四聲道/六聲道。

支持 8/11.025/16/22.05/32/44.1/48/96/192 KHz 采樣率。

1.struct bflb_i2c_config_s

說明:I2S 配置的結(jié)構(gòu)體。

struct bflb_i2s_config_s {
uint32_t bclk_freq_hz;
uint8_t role;
uint8_t format_mode;
uint8_t channel_mode;
uint8_t frame_width;
uint8_t data_width;
uint8_t fs_offset_cycle;
uint8_t tx_fifo_threshold;
uint8_t rx_fifo_threshold;
};

wKgZO2dcBjCAGEAkAAA8xj7khw009.webp

role 可以為下列參數(shù)

#define I2S_ROLE_MASTER 0#define I2S_ROLE_SLAVE 1

format_mode 可以為下列參數(shù):

#define I2S_MODE_LEFT_JUSTIFIED 0 /* 左對齊或Philips標(biāo)準(zhǔn) */#define I2S_MODE_RIGHT_JUSTIFIED 1 /* 右對齊 */#define I2S_MODE_DSP_SHORT_FRAME_SYNC 2 /* DSP模式A/B短幀同步 */#define I2S_MODE_DSP_LONG_FRAME_SYNC 3 /* DSP模式A/B長幀同步 */

channel_mode 可以為下列參數(shù):

#define I2S_CHANNEL_MODE_NUM_1 0#define I2S_CHANNEL_MODE_NUM_2 1#define I2S_CHANNEL_MODE_NUM_3 2 /* 僅DSP模式,幀寬度與數(shù)據(jù)寬度必須一致 */#define I2S_CHANNEL_MODE_NUM_4 3 /* 僅DSP模式,幀寬度與數(shù)據(jù)寬度必須一致 */#define I2S_CHANNEL_MODE_NUM_6 4 /* 僅DSP模式,幀寬度與數(shù)據(jù)寬度必須一致 */

frame_width 和 data_width 可以為下列參數(shù):

#define I2S_SLOT_WIDTH_8 0#define I2S_SLOT_WIDTH_16 1#define I2S_SLOT_WIDTH_24 2#define I2S_SLOT_WIDTH_32 3

2.bflb_i2s_init

說明:I2S 初始化。

void bflb_i2s_init(struct bflb_device_s *dev, const struct bflb_i2s_config_s *config);

wKgZPGdcBjKAMPLSAAAMegA8JtQ22.webp

3.bflb_i2s_deinit

說明:I2S 逆初始化。

void bflb_i2s_deinit(struct bflb_device_s *dev);

wKgZO2dcBjKAdsZZAAAKDkMiPCA39.webp

4.bflb_i2s_link_txdma

說明:I2S RX DMA 使能開關(guān)

void bflb_i2s_link_txdma(struct bflb_device_s *dev, bool enable);

wKgZPGdcBjOANbIRAAAN3oi0R0A91.webp

5.bflb_i2s_link_rxdma

說明:I2S TX DMA 使能開關(guān)

void bflb_i2s_link_rxdma(struct bflb_device_s *dev, bool enable);

wKgZO2dcBjOAX6V7AAAOiKYnKfE16.webp

6.bflb_i2s_txint_mask

說明:I2S TX fifo 閾值中斷屏蔽開關(guān),開啟后超過設(shè)定閾值則觸發(fā)中斷。

void bflb_i2s_txint_mask(struct bflb_device_s *dev, bool mask);

wKgZPGdcBjOANFmbAAANgC1w_8807.webp

7.bflb_i2s_rxint_mask

說明:I2S RX fifo 閾值中斷屏蔽開關(guān),開啟后超過設(shè)定閾值則觸發(fā)中斷。

void bflb_i2s_rxint_mask(struct bflb_device_s *dev, bool mask);

wKgZO2dcBjSANroDAAANxilovME35.webp

8.bflb_i2s_errint_mask

說明:I2S 錯(cuò)誤中斷屏蔽開關(guān)。

void bflb_i2s_errint_mask(struct bflb_device_s *dev, bool mask);

wKgZPGdcBjmATUMSAAANcmE2wMo71.webp

9.bflb_i2s_get_intstatus

說明:獲取 I2S 中斷標(biāo)志。

uint32_t bflb_i2s_get_intstatus(struct bflb_device_s *dev);

wKgZO2dcBjqAYho4AAANsipa3EY08.webp

返回的中斷標(biāo)志有以下選項(xiàng):

#define I2S_INTSTS_TX_FIFO (1 << 1)
#define I2S_INTSTS_RX_FIFO (1 << 2)
#define I2S_INTSTS_FIFO_ERR (1 << 3)

10.bflb_i2s_feature_control

說明:控制 I2S 功能。

int bflb_i2s_feature_control(struct bflb_device_s *dev, int cmd, size_t arg);

wKgZPGdcBj-AGzotAAAQlpA47_o40.webp

cmd 可以為下列參數(shù):

#define I2S_CMD_CLEAR_TX_FIFO (0x01)
#define I2S_CMD_CLEAR_RX_FIFO (0x02)
#define I2S_CMD_RX_DEGLITCH (0x03)
#define I2S_CMD_DATA_ENABLE (0x04)
#define I2S_CMD_CHANNEL_LR_MERGE (0x05)
#define I2S_CMD_CHANNEL_LR_EXCHG (0x06)
#define I2S_CMD_MUTE (0x07)
#define I2S_CMD_BIT_REVERSE (0x08)

arg 可以為下列參數(shù):

#define I2S_CMD_DATA_ENABLE_TX (1 << 1)
#define I2S_CMD_DATA_ENABLE_RX (1 << 2)

02示例——I2S 傳輸 8388 音頻數(shù)據(jù),實(shí)現(xiàn)邊錄音邊播放

首先附上 8388 的芯片手冊:8388 芯片手冊https://docs.ai-thinker.com/_media/19050105%E9%9F%B3%E9%A2%91%E8%A7%A3%E7%A0%81%E8%8A%AF%E7%89%87-%E9%A1%BA%E8%8A%AF-es8388.pdf

其次博流在 SDK 里提供了 8388 的驅(qū)動(dòng)庫,可以直接使用,在使用移植其它的.C 和.H 文件時(shí),可以參考如下的方法。

復(fù)制 Project_basic 工程,粘貼成為新的工程文件,將其修改成自用的工程名稱(這里筆者的工程名是 I2S_8388)。

wKgZO2dcBkSADkOjAAAklig1W-c98.webp

1.移植驅(qū)動(dòng)文件

在 components 下創(chuàng)建新的庫文件夾,這里命名為 8388,將 AiPi-OPEN/AiPi-Open-Kits/aithinker_Ai-M6X_SDK/examples/peripherals/i2s/i2s_es8388/例程下的 bsp_es8388.c 和 bsp_es8388.h 復(fù)制下來,放在 8388 文件夾下。

wKgZPGdcBkWAKWcQAAAgSkAUA9U07.webp

wKgZO2dcBkWAKqUhAAAfWKDOobk24.webp

在8388 文件夾下,修改 bsp_es8388.c 的 253 行,將注釋的 LOUT&ROUT 一行取消注釋,并注釋 ES8388_Write_Reg(0x04, 0x24),具體如下:

wKgZPGdcBkaAPQdYAAAwauAhkFw11.webp

2.修改 CMakeLists.txt

添加 8388 文件夾路徑。

wKgZO2dcBkeAWW9fAAAW8OXrNo481.webp

這里需要注意的是,要鏈接一個(gè)腳本,添加下面的這一行。

sdk_set_linker_script($ENV{BL_SDK_BASE}/bsp/board/bl616dk/bl616_flash_old.ld)

wKgZPGdcBkeAMs83AAA1AvJbB4837.webp

3.修改 flash_prog_cfg.ini

將 boot2_isp_mode 置零,[FW]下的工程文件名修改。

wKgZPGdcBk2AeesRAABk5vLo1p873.webp

MAIN

#include "board.h"
#include "bflb_gpio.h"
#include "bflb_l1c.h"
#include "bflb_mtimer.h"
#include "bflb_i2c.h"
#include "bl616_glb.h"
#include "bflb_dma.h"
#include "bsp_es8388.h"
#include "bflb_i2s.h"
//頭文件
struct bflb_device_s *i2s0;
struct bflb_device_s *dma0_ch0;
struct bflb_device_s *dma0_ch1;
//I2S外設(shè)句柄,DMA兩個(gè)通道
ATTR_NOCACHE_RAM_SECTION uint8_t rx_buffer[32000];
//DMA緩沖數(shù)組
static ES8388_Cfg_Type ES8388Cfg = {
.work_mode = ES8388_CODEC_MDOE, /*!< ES8388 work mode */
.role = ES8388_SLAVE, /*!< ES8388 role */
.mic_input_mode = ES8388_DIFF_ENDED_MIC, /*!< ES8388 mic input mode */
.mic_pga = ES8388_MIC_PGA_0DB, /*!< ES8388 mic PGA */
.i2s_frame = ES8388_LEFT_JUSTIFY_FRAME, /*!< ES8388 I2S frame */
.data_width = ES8388_DATA_LEN_16, /*!< ES8388 I2S dataWitdh */
};
/**
* ES8388配置結(jié)構(gòu)體{
* 工作模式:編碼器模式下工作
* 角色:從機(jī)
* 麥克風(fēng)輸入模式:麥克風(fēng)不同輸入模式
* PGA增益:0DB
* I2S幀:左對齊
* 數(shù)據(jù)寬度:16位
* }
*/
void dma0_ch0_isr(void *arg)
{
printf("tx donern");
}
//DMA通道0中斷服務(wù)函數(shù)
void dma0_ch1_isr(void *arg)
{
printf("rx donern");
}
//DMA通道1中斷服務(wù)函數(shù)
void i2s_gpio_init()
{
struct bflb_device_s *gpio;
gpio = bflb_device_get_by_name("gpio");
/* I2S_FS 左右聲道線,主機(jī)時(shí)輸出,從機(jī)時(shí)輸入*/
bflb_gpio_init(gpio, GPIO_PIN_13, GPIO_FUNC_I2S | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
/* I2S_DI 數(shù)據(jù)輸入線*/
bflb_gpio_init(gpio, GPIO_PIN_10, GPIO_FUNC_I2S | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
/* I2S_DO 數(shù)據(jù)輸出線*/
bflb_gpio_init(gpio, GPIO_PIN_11, GPIO_FUNC_I2S | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
/* I2S_BCLK 時(shí)鐘線,主機(jī)時(shí)輸出,從機(jī)時(shí)輸入*/
bflb_gpio_init(gpio, GPIO_PIN_20, GPIO_FUNC_I2S | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
/* I2S_MCLK 主時(shí)鐘輸出線*/
bflb_gpio_init(gpio, GPIO_PIN_14, GPIO_FUNC_CLKOUT | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
/* I2C0_SCL */
bflb_gpio_init(gpio, GPIO_PIN_0, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_2);
/* I2C0_SDA */
bflb_gpio_init(gpio, GPIO_PIN_1, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_2);
//8388的初始化需要I2C來配置
}
void i2s_dma_init()
{
static struct bflb_dma_channel_lli_pool_s tx_llipool[100];
static struct bflb_dma_channel_lli_transfer_s tx_transfers[1];
static struct bflb_dma_channel_lli_pool_s rx_llipool[100];
static struct bflb_dma_channel_lli_transfer_s rx_transfers[1];
//DMA支持lli模式,分配兩個(gè)內(nèi)存池,txllipool和rxllipool分別給通道0和通道1
//在傳輸數(shù)據(jù)時(shí)需要填充transfer_s,這里定義兩個(gè)transfer_s,一個(gè)作為發(fā)送,一個(gè)作為接收,后續(xù)需要填充內(nèi)容有源地址、目標(biāo)地址和長度
struct bflb_i2s_config_s i2s_cfg = {
.bclk_freq_hz = 16000 * 16 * 2, /* bclk = Sampling_rate * frame_width * channel_num */
.role = I2S_ROLE_MASTER,
.format_mode = I2S_MODE_LEFT_JUSTIFIED,
.channel_mode = I2S_CHANNEL_MODE_NUM_2,
.frame_width = I2S_SLOT_WIDTH_16,
.data_width = I2S_SLOT_WIDTH_16,
.fs_offset_cycle = 0,
.tx_fifo_threshold = 0,
.rx_fifo_threshold = 0,
};
//I2S的結(jié)構(gòu)體配置
struct bflb_dma_channel_config_s tx_config = {
.direction = DMA_MEMORY_TO_PERIPH,
.src_req = DMA_REQUEST_NONE,
.dst_req = DMA_REQUEST_I2S_TX,
.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE,
.dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE,
.src_burst_count = DMA_BURST_INCR1,
.dst_burst_count = DMA_BURST_INCR1,
.src_width = DMA_DATA_WIDTH_16BIT,
.dst_width = DMA_DATA_WIDTH_16BIT,
};
/**
* DMA配置結(jié)構(gòu)體{
* DMA傳輸方向:從內(nèi)存到外設(shè)
* DMA源請求:無
* DMA目標(biāo)請求:I2S_TX
* DMA源地址自增:開
* DMA目標(biāo)地址自增:關(guān)
* DMA源突發(fā)傳輸個(gè)數(shù):0
* DMA目標(biāo)突發(fā)傳輸個(gè)數(shù):0
* DMA源地址位寬:16位
* DMA目標(biāo)地址位寬:16位
*/
struct bflb_dma_channel_config_s rx_config = {
.direction = DMA_PERIPH_TO_MEMORY,
.src_req = DMA_REQUEST_I2S_RX,
.dst_req = DMA_REQUEST_NONE,
.src_addr_inc = DMA_ADDR_INCREMENT_DISABLE,
.dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE,
.src_burst_count = DMA_BURST_INCR1,
.dst_burst_count = DMA_BURST_INCR1,
.src_width = DMA_DATA_WIDTH_16BIT,
.dst_width = DMA_DATA_WIDTH_16BIT
};
/**
* DMA配置結(jié)構(gòu)體{
* DMA傳輸方向:從外設(shè)到內(nèi)存
* DMA源請求:I2S_TX
* DMA目標(biāo)請求:無
* DMA源地址自增:關(guān)
* DMA目標(biāo)地址自增:開
* DMA源突發(fā)傳輸個(gè)數(shù):0
* DMA目標(biāo)突發(fā)傳輸個(gè)數(shù):0
* DMA源地址位寬:16位
* DMA目標(biāo)地址位寬:16位
*/

printf("i2s initrn");
i2s0 = bflb_device_get_by_name("i2s0");
/* i2s init */
bflb_i2s_init(i2s0, &i2s_cfg);
/* enable dma */
bflb_i2s_link_txdma(i2s0, true);
bflb_i2s_link_rxdma(i2s0, true);
//I2S_DMA_TX_RX使能
printf("dma initrn");
dma0_ch0 = bflb_device_get_by_name("dma0_ch0");
dma0_ch1 = bflb_device_get_by_name("dma0_ch1");
bflb_dma_channel_init(dma0_ch0, &tx_config);
bflb_dma_channel_init(dma0_ch1, &rx_config);
//DMA通道初始化
bflb_dma_channel_irq_attach(dma0_ch0, dma0_ch0_isr, NULL);
bflb_dma_channel_irq_attach(dma0_ch1, dma0_ch1_isr, NULL);
//DMA通道中斷完成觸發(fā)回調(diào),回調(diào)里打印發(fā)送或接收完成
tx_transfers[0].src_addr = (uint32_t)rx_buffer;
tx_transfers[0].dst_addr = (uint32_t)DMA_ADDR_I2S_TDR;
tx_transfers[0].nbytes = sizeof(rx_buffer);
/**發(fā)送內(nèi)容填充
* 起始地址:緩沖數(shù)組
* 目標(biāo)地址:I2S的發(fā)送寄存器地址
* 數(shù)據(jù)大小:緩沖數(shù)組大小
*/
rx_transfers[0].src_addr = (uint32_t)DMA_ADDR_I2S_RDR;
rx_transfers[0].dst_addr = (uint32_t)rx_buffer;
rx_transfers[0].nbytes = sizeof(rx_buffer);
/**接收內(nèi)容填充
* 起始地址:I2S的接收寄存器地址
* 目標(biāo)地址:緩沖數(shù)組
* 數(shù)據(jù)大小:緩沖數(shù)組大小
*/
/********將接收到音頻數(shù)據(jù)通過DMA不斷存入緩沖數(shù)組中,通過DMA將緩沖數(shù)組中的信息不斷發(fā)送出去,實(shí)現(xiàn)錄音并播放********/
printf("dma lli initrn");
uint32_t num = bflb_dma_channel_lli_reload(dma0_ch0, tx_llipool, 100, tx_transfers, 1);
//配置lii信息,將前面配置的信息填入即可
printf("tx dma lli num: %d rn", num);
bflb_dma_channel_lli_link_head(dma0_ch0, tx_llipool, num);
//開啟循環(huán)鏈表模式,頭尾鏈接
printf("tx dma lli num: %d rn", num);
num = bflb_dma_channel_lli_reload(dma0_ch1, rx_llipool, 100, rx_transfers, 1);
printf("rx dma lli num: %d rn", num);
bflb_dma_channel_lli_link_head(dma0_ch1, rx_llipool, num);
bflb_dma_channel_start(dma0_ch0);
bflb_dma_channel_start(dma0_ch1);
//啟動(dòng)DMA傳輸
}
//時(shí)鐘源初始化
void mclk_out_init()
{
/* output MCLK,
Will change the clock source of i2s,
It needs to be called before i2s is initialized
clock source 25M
*/
GLB_Set_I2S_CLK(ENABLE, 2, GLB_I2S_DI_SEL_I2S_DI_INPUT, GLB_I2S_DO_SEL_I2S_DO_OUTPT);
// GLB_Set_Chip_Clock_Out3_Sel(GLB_CHIP_CLK_OUT_3_I2S_REF_CLK);
GLB_Set_Chip_Clock_Out2_Sel(GLB_CHIP_CLK_OUT_2_I2S_REF_CLK);
}
int main(void)
{
board_init();
/* gpio init */
i2s_gpio_init();
/* mclk clkout init */

mclk_out_init();
printf("es8388 initnr");
ES8388_Init(&ES8388Cfg);
//8388初始化,傳入8388配置結(jié)構(gòu)體
ES8388_Set_Voice_Volume(90);
/* i2s init */
i2s_dma_init();
/* enable i2s tx and rx */
bflb_i2s_feature_control(i2s0, I2S_CMD_DATA_ENABLE, I2S_CMD_DATA_ENABLE_TX | I2S_CMD_DATA_ENABLE_RX);
while (1) {
bflb_mtimer_delay_ms(1);
}
}

運(yùn)行結(jié)果

錄音和播放并易展示,需要注意的是,8388 芯片是兩路音頻輸入和輸出,對應(yīng)關(guān)系如下:

wKgZO2dcBk2ASgl2AADqrrqGPFg23.webp

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1717

    瀏覽量

    91836
  • 開源硬件
    +關(guān)注

    關(guān)注

    8

    文章

    210

    瀏覽量

    29882
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何用小安-Eyes-S1做一個(gè)電子木魚?

    2024年的第一教程來了,本篇學(xué)習(xí)如何添加LVGL事件,并制作完成一個(gè)電子木魚(小美苦苦哀求,我略微出手而已)。祝大家2024積德累功,心想事成!接下來看看如何用小安-Eyes-S1
    的頭像 發(fā)表于 01-13 15:18 ?1060次閱讀
    如何用<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>做一個(gè)電子木魚?

    零基礎(chǔ)開發(fā)小安-Eyes-S1外設(shè)——GPIO 輸入輸出

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預(yù)留TF卡座,并且引出USB接口,可接入U(xiǎn)SB攝像頭。 從開始學(xué)習(xí)小安
    的頭像 發(fā)表于 10-25 13:50 ?1058次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b><b class='flag-5'>外設(shè)</b><b class='flag-5'>篇</b>——GPIO 輸入輸出

    零基礎(chǔ)開發(fā)小安-Eyes-S1外設(shè)——GPIO中斷編程

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預(yù)留TF卡座,并且引出USB接口,可接入U(xiǎn)SB攝像頭。 產(chǎn)品資料:https://docs.ai-thinker.com/eyes
    的頭像 發(fā)表于 10-29 14:56 ?784次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b><b class='flag-5'>外設(shè)</b><b class='flag-5'>篇</b>——GPIO中斷編程

    零基礎(chǔ)開發(fā)小安-Eyes-S1 外設(shè)——DAC

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預(yù)留TF卡座,并且引出USB接口,可接入U(xiǎn)SB攝像頭。 從開始學(xué)習(xí)小安
    的頭像 發(fā)表于 12-27 10:55 ?799次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b> <b class='flag-5'>外設(shè)</b><b class='flag-5'>篇</b>——DAC

    零基礎(chǔ)開發(fā)安信可小安-Eyes-S1【入門】——初識(shí)小安-Eyes-S1

    初識(shí)小安-Eyes-S1 前言:本教程針對零基礎(chǔ)人員可以快速上手小安-
    發(fā)表于 09-08 11:06

    小安-Eyes-S1/S2多功能開發(fā)板簡介

    今天,我們在小安放出新鮮的開發(fā)板產(chǎn)品AiPi-Eyes-S1小安-
    的頭像 發(fā)表于 06-19 10:10 ?985次閱讀
    <b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>/<b class='flag-5'>S2</b>多功能<b class='flag-5'>開發(fā)</b>板簡介

    小安-Eyes-S1外設(shè)接口簡介

    前言:本教程針對零基礎(chǔ)人員可以快速上手小安-Eyes-S1實(shí)現(xiàn)一些簡單的應(yīng)用開發(fā),僅供參考學(xué)習(xí),本人也在學(xué)習(xí)的過程中,感謝大家支持。
    的頭像 發(fā)表于 09-18 09:55 ?883次閱讀

    零基礎(chǔ)開發(fā)小安-Eyes-S1【入門】——初識(shí)小安-Eyes-S1

    前言:本教程針對零基礎(chǔ)人員可以快速上手小安-Eyes-S1實(shí)現(xiàn)一些簡單的應(yīng)用開發(fā),僅供參考學(xué)習(xí),本人也在學(xué)習(xí)的過程中,感謝大家支持。
    的頭像 發(fā)表于 09-18 15:41 ?748次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【入門<b class='flag-5'>篇</b>】——初識(shí)<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>

    零基礎(chǔ)開發(fā)小安-Eyes-S1【入門】——工程文件架構(gòu)

    -Eyes-S1【入門】——初識(shí)小安-Eyes-S12、零基礎(chǔ)
    的頭像 發(fā)表于 11-06 16:10 ?196次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【入門<b class='flag-5'>篇</b>】——工程文件架構(gòu)

    零基礎(chǔ)開發(fā)小安-Eyes-S1外設(shè)】——PWM

    】——工程文件架構(gòu)7、零基礎(chǔ)開發(fā)小安-Eyes-S1外設(shè)
    的頭像 發(fā)表于 11-06 16:10 ?188次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【<b class='flag-5'>外設(shè)</b><b class='flag-5'>篇</b>】——PWM

    零基礎(chǔ)開發(fā)小安-Eyes-S1 外設(shè) ——I2C

    。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預(yù)留TF卡座,并且引出USB接口,可接入U(xiǎn)SB攝像頭。 從開始學(xué)習(xí)小安
    的頭像 發(fā)表于 11-27 16:39 ?273次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b> <b class='flag-5'>外設(shè)</b><b class='flag-5'>篇</b> ——<b class='flag-5'>I2</b>C

    零基礎(chǔ)開發(fā)小安-Eyes-S1外設(shè)】——FLASH

    。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預(yù)留TF卡座,并且引出USB接口,可接入U(xiǎn)SB攝像頭。 從開始學(xué)習(xí)小安
    的頭像 發(fā)表于 12-05 14:31 ?251次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【<b class='flag-5'>外設(shè)</b><b class='flag-5'>篇</b>】——FLASH

    零基礎(chǔ)開發(fā)小安-Eyes-S1——初識(shí)LVGL并搭建最小工程

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預(yù)留TF卡座,并且引出USB接口,可接入U(xiǎn)SB攝像頭。 從開始學(xué)習(xí)小安
    的頭像 發(fā)表于 01-03 14:09 ?345次閱讀

    零基礎(chǔ)開發(fā)小安-Eyes-S1【進(jìn)階】——初識(shí) LVGL 并搭建最小工程

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預(yù)留TF卡座,并且引出USB接口,可接入U(xiǎn)SB攝像頭。 從開始學(xué)習(xí)小安
    的頭像 發(fā)表于 01-06 16:14 ?148次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【進(jìn)階<b class='flag-5'>篇</b>】——初識(shí) LVGL 并搭建最小工程

    零基礎(chǔ)開發(fā)AiPi-Eyes-S1——通過屏幕輸入連接Wi-Fi

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預(yù)留TF卡座,并且引出USB接口,可接入U(xiǎn)SB攝像頭。 從開始學(xué)習(xí)小安
    的頭像 發(fā)表于 01-15 09:27 ?100次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b>AiPi-<b class='flag-5'>Eyes-S1</b>——通過屏幕輸入連接Wi-Fi
    主站蜘蛛池模板: 新网球王子u17世界杯篇免费观看| 最新久久免费视频| 久久久久久久影院| 国产午夜精品理论片在线| 国产大片黄在线观看| 免费啪啪网| 日本不卡视频| 在线观看网址你懂得| 天堂资源www天堂在线| 日韩一级片在线观看| 免费一级欧美片片线观看| 国产天堂网| 午夜久久网| 国产视频福利| 一区免费视频| 美女视频黄a| 久久久久久久综合| bt在线天堂| 人人干天天干| 视色4se在线视频播放| 轻点灬大ji巴太粗太长了h| 曰本在线网| 日本理论片www视频| 狠狠色噜噜狠狠狠狠奇米777| aa黄色毛片| 九九国产精品| 污污视频网址| 亚洲狠狠婷婷综合久久久图片| 日本午夜大片免费观看视频| 韩国三级视频在线观看| 天天爽夜夜爽视频| 免费午夜影片在线观看影院| 在线观看a网站| 欧美精品一区二区三区视频| free欧美| 东北老女人啪啪对白| 好色亚洲| 欧美三级视频在线播放| 真实子伦视频不卡| 717影院理论午夜伦不卡久久| 国产aaaaa一级毛片|