一)小E固件库编译错误解决方法 v1.4版固件不能在Eclipse下编译,会出现Nothingto be donw for FORCE,只能在虚拟机下编译,但直接编译也会出错,仔细分析可知是std.c文件中包含的complex.h找不到。分析std.c源码,发现是#include<tgmath.h>里包含complex.h,将tgmath.h注释,编译后又发现新错误,显示std.c里fabs(),查找了一下,发现没有其他C文件调用该函数,于是将return fab(x);改成return 1;重新编译成功。 发现个问题,将短接帽连接OLED,同时连接RGB的最下方B时,开机OLED不显示开机界面,但是放在其他位置就可以正常显示。目前还没解决
二)传感器和I2S 一、I/O口 共17个IO口,16个通用IO:GPIO0-GPIO15,可输入或输出,可招收中断触发,1个RTC模块IO,可输入输出,不可触发中断,需单独操作 每个IO口可复用4-5个功能 IO功能配置 IO功能选择寄存器基址:PERIPHS_IO_MUX IO功能选择寄存器:PERIPHS_IO_MUX_???_U,每个IO都不一样 IO功能选择寄存器地址:PERIPHS_IO_MUX_???_U= PERIPHS_IO_MUX+0x4*i IO功能号:FUC_XXXX,0-4 IO功能选择函数:PIN_FUNC_SELECT(PIN_NAME, FUNC); IO配置输出并使能:GPIO_OUTPUT_SET(gpio_no, bit_value) IO配置输入配置:GPIO_AS_INPUT(gpio_bits) 获取IO输入值:gpio_get_value(uint8 gpio_num) 中断配置:gpio_pin_intr_state_set(GPIO_NUM,GPIO_PIN_INTR_XXX) 中断相关三个寄存器:清中断寄存器、中断类型寄存器、中断状态寄存器 二、I/O操作实例 2.1温湿度查询DHT11 使用接口:GPIO5 数据格式:8bit湿度整数+8bit湿度小数+8bit温度整数+8bit温度小数+8bit校验和 主机发送:18ms低电平+20-40us高电平, 设备发送:80us低+80us高(响应信号),50us低+26-28us高(数据“0”),50us低+70us高(数据“1”) 80us用16*5us 主要操作函数: PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO_U,FUNC_GPIO); GPIO_OUTPUT_SET(i , LOGIC_HL); gpio_get_value(i); 2.2红外接收(IO中断) 使用协议:NEC协议 起始(9ms高+4.5ms低)+Address+/Address+Command+/Command 数据“1”:560us高+1.69ms低 = 2.25ms 数据“0”:560us高+560us低 = 1.12ms LSB 使用接口:GPIO5 中断IO初始化 (1)初始化IO:设置IO为输入 (2)清中断:GPIO_GET_WRITE(GPIO_STATUS_W1TC_ADDRESS, BIT(i)); (3)设置中断触发方式:gpio_pin_intr_state_set(i, GPIO_PIN_INTR_NEGEDGE); (4)注册中断函数:ETS_GPIO_INTR_ATTACH(ir_rx_intr_handler, NULL); (5)开启中断:ETS_GPIO_INTR_ENABLE(); 为什么下降沿触发:因为红外接收时做了反转 中断处理函数处理过程 (1)清中断;(2)读中断状态寄存器,判断中断IO;(3)处理 三、I2S协议 功能:用于音频设备间的数据传输 信号线: BCK:位时钟,BCK频率=2*采样频率*采样位数 WS:字段(声道选择),WS频率=采样频率,为低时传输左声道,为高时传输右声道 DATA:数据,MSB 四、语音播放功能 使用管脚IO15/2/13 (1)I2S配置寄存器 I2S有独立的FIFO,可单独操作,也可SLC自动DMA I2S时钟160MHz I2SCONF:启动收发主从机模式配置、设置时钟分频(采样率)、I2S中断等 I2S_FIFO_CONF:FIFO访问方式、收发模式 I2SCONF_CHAN:收发声道设置 I2SRXEOF_NUM:收FIFO触发SLC的数据数量 (2)SLC配置(提供DMA服务) SLC_RX_LINK、SLC_TX_LINK:SLC收发地址、启停SLC传输。 1、初始化 (1)SLC初始化 启动DMA、注册SDIO中断函数并开启 创建收发DMA缓冲区并设置 启动SLC传输 (2)I2S初始化 IO初始化:IO15/ IO2/ IO13为对应I2S功能 时钟初始化:160M 发送数据格式(FIFO位数)设置:每声道16bit半数据 声道设置:左声道 模式配置:发送主、接收从 采样率设置:设置BCK_DIV和CLKM_DIV控制,f= 160M/BCK_DIV/CLKM_DIV/位数 8KHz、16bit单声道采样率:BCK_DIV*CLKM_DIV= 160M/16/8K = 1250 = 50*25 BCK_DIV不能超过63,且大于CLKM_DIV 位数设置:16+i 2、语音下载、语音存储 3、语音送出 中断处理:初始化完成,无音频数据到来,FIFO空,DMA发送0;当音频数据到来时将音频数据从FLASH读入DMA缓冲区(一次读入缓冲区长度),DMA将数据送出,发送完成中断产生,再次读入,周而复始,直到发完所有数据。
|