Tx Polling
该示例通过使用 I2S 外设以轮询的方式实现数据发送功能。
将 I2S TX 引脚连接到逻辑分析仪,可以看到发送数据的波形。
环境需求
该示例的环境需求,可参考 环境需求。
硬件连线
将 EVB 上的 P3_2, P3_3 和 P4_0 连接逻辑分析仪。
其中 P3_2 为LRCK, P3_3 为 BCLK, P4_0 为 DATA。
编译和下载
该示例的编译和下载流程,可参考 编译和下载。
测试验证
EVB 启动后, 通过逻辑分析仪观察 I2S 输出波形。I2S 输出波形如下图所示。

I2S output 波形
代码介绍
该章节主要介绍示例中的初始化和相应功能实现的代码和流程说明。
源码路径
工程文件和源码路径如下:
工程路径:
sdk\samples\peripheral\i2s\tx_polling\proj
源码路径:
sdk\samples\peripheral\i2s\tx_polling\src
初始化
外设的初始化流程可参考 General Introduction 中的 初始化流程 部分。
调用
Pad_Config()
与Pinmux_Config()
,配置对应引脚的 PAD 和 PINMUX。void board_i2s_init(void) { Pad_Config(I2S_BCLK_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_ENABLE, PAD_OUT_LOW); Pad_Config(I2S_LRCK_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_ENABLE, PAD_OUT_LOW); Pad_Config(I2S_DATA_TX_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_ENABLE, PAD_OUT_LOW); Pinmux_Config(I2S_BCLK_PIN, I2S_BCLK_PINMUX); Pinmux_Config(I2S_LRCK_PIN, I2S_LRCK_PINMUX); Pinmux_Config(I2S_DATA_TX_PIN, I2S_DATA_TX_PINMUX); }
调用
RCC_PeriphClockCmd()
,开启 I2S 时钟。对 I2S 外设进行初始化:
定义
I2S_InitTypeDef
类型I2S_InitStruct
,调用I2S_StructInit()
将I2S_InitStruct
预填默认值。根据需求修改
I2S_InitStruct
参数。I2S 的初始化参数配置如下表。调用
I2S_Init()
,初始化 I2S 外设。
I2S Hardware Parameters |
Setting in the |
I2S |
---|---|---|
Clock Source |
||
Sample Rate (Mi) |
0x271 |
|
Sample Rate (Ni) |
0x10 |
|
Device Mode |
||
Channel Type |
||
Data Width |
||
Data Format |
使能 I2S TX 功能。
I2S_Cmd(I2S_NUM, I2S_MODE_TX, ENABLE);
功能实现
定义发送数据,调用 I2S_SendData()
循环发送数据。在逻辑分析仪内可以观察到 I2S 发送的数据。
void i2s_senddata(void)
{
uint32_t i = 0x12348800;
while (1)
{
if (I2S_GetTxFIFOFreeLen(I2S_NUM))
{
/* 16bit format, lower half word send first! */
I2S_SendData(I2S_NUM, i++);
}
}
}