查看: 153|回复: 0

[原创] [ 小e1智能硬件开发平台]小E开发板IO接口学习笔记

[复制链接]

2

主题

0

好友

100

积分

童生

Rank: 2

  • TA的每日心情

    前天 22:48
  • 签到天数: 12 天

    连续签到: 3 天

    [LV.3]偶尔看看II

    发表于 2017-6-26 10:29:17 |显示全部楼层
    一)小E固件库编译错误解决方法
    v1.4版固件不能在Eclipse下编译,会出现Nothingto be donw for FORCE,只能在虚拟机下编译,但直接编译也会出错,仔细分析可知是std.c文件中包含的complex.h找不到。分析std.c源码,发现是#include<tgmath.h>里包含complex.h,将tgmath.h注释,编译后又发现新错误,显示std.cfabs(),查找了一下,发现没有其他C文件调用该函数,于是将return fab(x);改成return 1;重新编译成功。
    发现个问题,将短接帽连接OLED,同时连接RGB的最下方B时,开机OLED不显示开机界面,但是放在其他位置就可以正常显示。目前还没解决

    二)传感器和I2S
    一、I/O
    17IO口,16个通用IOGPIO0-GPIO15,可输入或输出,可招收中断触发,1RTC模块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_XXXX04
    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”)
    80us16*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
    1.JPG
    使用接口: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
    2.JPG
    1I2S配置寄存器
    I2S有独立的FIFO,可单独操作,也可SLC自动DMA
    I2S时钟160MHz
    I2SCONF:启动收发主从机模式配置、设置时钟分频(采样率)、I2S中断等
    I2S_FIFO_CONFFIFO访问方式、收发模式
    I2SCONF_CHAN:收发声道设置
    I2SRXEOF_NUM:收FIFO触发SLC的数据数量
    2SLC配置(提供DMA服务)
    SLC_RX_LINKSLC_TX_LINKSLC收发地址、启停SLC传输。
    1、初始化
    1SLC初始化
    启动DMA、注册SDIO中断函数并开启
    创建收发DMA缓冲区并设置
    启动SLC传输
    2I2S初始化
    IO初始化:IO15/ IO2/ IO13为对应I2S功能
    时钟初始化:160M
    发送数据格式(FIFO位数)设置:每声道16bit半数据
    声道设置:左声道
    模式配置:发送主、接收从
    采样率设置:设置BCK_DIVCLKM_DIV控制,f= 160M/BCK_DIV/CLKM_DIV/位数
    8KHz16bit单声道采样率: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将数据送出,发送完成中断产生,再次读入,周而复始,直到发完所有数据。

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /4 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-8-16 23:07 , Processed in 0.118524 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部