热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

配置_mstar平台I2C配置

芯片的pin脚可以用作不同的功能,总结一句就是外设进行状态和数据交换。最常用的是作为GPIO,设置为输出模式时,通过高低电平来控制一些外围设置;

芯片的pin 脚可以用作不同的功能,总结一句就是外设进行状态和数据交换。

最常用的是作为GPIO,设置为输出模式时,通过高低电平来控制一些外围设置;
// 如LED,屏的电源,背光的开关,功放的静音等等。 除了控制设置之外,还需要和外部设置传输数据。
pin 作为GPIO 设置为IN时,是获取外设的高低来判断外设的状态,最常用的一些source 通道的detect,及一些wakeup 功能。
pin 作为SAR 口,获取ADC值; // 如按键板,参照“mstar平台SAR口使用”
pin 作为UART / SPI /SD 口;
pin 作为I2C 口;
一般来说,大部分有特殊功能的Pin脚其实都可以作为GPIO使用,但是当我们将其配置成特殊功能后,就不能同时配为GPIO。
所以当我们发现某个Pin脚我们想将其配成GPIO后,却没办法改变它的高低状态时,就要留意一下该Pin脚是否已经被误配为特殊功能了,这时就需要我们先DISABLE 掉这个特殊功能之后,才能设置成GPIO及其状态设定。每个chip有对应一个init GPIO配置,BD_MST{$Board}.h, drvpadconf.c.

标准GPIO口配置
总共时钟状态

#define GPIO_NONE 0 // Not GPIO pin (default)
#define GPIO_IN 1 // GPI
#define GPIO_OUT_LOW 2 // GPO output low
#define GPIO_OUT_HIGH 3 // GPO output high

特殊口配置
uart 口配置
特殊功能的pin 需要在BD_MST{$Board}.h 中配置。

#define DISABLE 0
#define ENABLE 1

#define CONFIG_PADMUX_MODE0 0x00
#define CONFIG_PADMUX_MODE1 0x01
#define CONFIG_PADMUX_MODE2 0x02
#define CONFIG_PADMUX_MODE3 0x03
#define CONFIG_PADMUX_MODE4 0x04
#define CONFIG_PADMUX_MODE5 0x05
#define CONFIG_PADMUX_MODE6 0x06
#define CONFIG_PADMUX_MODE7 0x07
#define CONFIG_PADMUX_MODE8 0x08
#define CONFIG_PADMUX_MODE9 0x09
#define CONFIG_PADMUX_UNKNOWN 0xFF

例如UART3,UART4 配置成了CONFIG_PADMUX_MODE1,其实也是ENABLE。接着在drvPadConf.c 文件中设置寄存器值。

针对UART3,UART4 设置了寄存器0x1e05 的bit2,0x1e04的bit6 。这样就配置完成了。

I2C 总线功能配置
下面我们以I2C2 为例

技术图片

 

 

I2C 的clk,data 脚分别连接在AD16,AC16 两个pin 上面。比较特殊的是这两个pin 都是有复用功能的。所以我们需要disable掉其特殊功能LED/tcon。在BD_MST160D_AH_M7221.h中我们可以关闭LED功能

#define PADS_LED_MODE DISABLE
Tcon[11],Tcon[12], 未找到,属于备用的暂不处理

寄存器设置

#ifdef PADS_LED_MODE
#if (PADS_LED_MODE != CONFIG_PADMUX_UNKNOWN)
#define _CONFIG_LED_MODE ((PADS_LED_MODE == ENABLE) ? BIT4 : 0)
_RVM1(0x1eb4, _CONFIG_LED_MODE, BIT4),

#if (PADS_LED_MODE == DISABLE)
_MEMMAP_PM_,
//reg_seperate_wol_led_is_gpio
_RVM1(0x0e39, BIT7, BIT7),
//reg_led_is_gpio
_RVM1(0x0e39, 0, BIT0),
_MEMMAP_nonPM_,
#endif
#endif
#endif
disable 掉特殊功能之后,开始配置I2C 功能

//SWI2C
#define PAD_DDCR_CK_IS_GPIO GPIO_IN //I2C-SCL (EEPROM)
#define PAD_DDCR_DA_IS_GPIO GPIO_IN //I2CM-SDA (EEPROM)

#define PAD_TGPIO0_IS_GPIO GPIO_IN //TUNER_SCL
#define PAD_TGPIO1_IS_GPIO GPIO_IN //TUNER_SDA

*#define PAD_GPIO19_IS_GPIO GPIO_IN //I2C2-SCL
#define PAD_GPIO20_IS_GPIO GPIO_IN //I2C2-SDA*

将GPIO19,GPIO20 配置成了GPIO_IN,接着进行寄存器配置。如下:

#if(PAD_GPIO19_IS_GPIO != GPIO_NONE)
#define PAD_GPIO19_OEN (PAD_GPIO19_IS_GPIO == GPIO_IN ? BIT1: 0)
#define PAD_GPIO19_OUT (PAD_GPIO19_IS_GPIO == GPIO_OUT_HIGH ? BIT0: 0)
_RVM1(0x2b08, PAD_GPIO19_OUT, BIT0),
_RVM1(0x2b08, PAD_GPIO19_OEN, BIT1),
//reg_tconconfig11
_RVM1(0x1ea1, 0, BIT3), //reg[101ea1]#3 = 0b
//reg_agc_dbg
_RVM1(0x1e9e, 0, BIT7), //reg[101e9e]#7 = 0b
//reg_led_mode
_RVM1(0x1eb4, 0, BIT4), //reg[101eb4]#4 = 0b
//reg_seconduartmode
_RVM1(0x1e05, 0, BIT1 | BIT0), //reg[101e05]#1 ~ #0 = 00b
//reg_od2nduart
_RVM1(0x1ea9, 0, BIT1 | BIT0), //reg[101ea9]#1 ~ #0 = 00b
//reg_miic_mode0
_RVM1(0x1edc, 0, BIT0), //reg[101edc]#0 = 0b
#endif

#if(PAD_GPIO20_IS_GPIO != GPIO_NONE)
#define PAD_GPIO20_OEN (PAD_GPIO20_IS_GPIO == GPIO_IN ? BIT1: 0)
#define PAD_GPIO20_OUT (PAD_GPIO20_IS_GPIO == GPIO_OUT_HIGH ? BIT0: 0)
_RVM1(0x2b09, PAD_GPIO20_OUT, BIT0),
_RVM1(0x2b09, PAD_GPIO20_OEN, BIT1),
//reg_tconconfig12
_RVM1(0x1ea1, 0, BIT4), //reg[101ea1]#4 = 0b
//reg_agc_dbg
_RVM1(0x1e9e, 0, BIT7), //reg[101e9e]#7 = 0b
//reg_led_mode
_RVM1(0x1eb4, 0, BIT4), //reg[101eb4]#4 = 0b
//reg_seconduartmode
_RVM1(0x1e05, 0, BIT1 | BIT0), //reg[101e05]#1 ~ #0 = 00b
//reg_od2nduart
_RVM1(0x1ea9, 0, BIT1 | BIT0), //reg[101ea9]#1 ~ #0 = 00b
//reg_vx1gpi_mode
_RVM1(0x1e4a, 0, BIT1 | BIT0), //reg[101e4a]#1 ~ #0 = 00b
//reg_miic_mode0
_RVM1(0x1edc, 0, BIT0), //reg[101edc]#0 = 0b
//reg_extint5
_RVM1(0x1ea5, 0, BIT5), //reg[101ea5]#5 = 0b
#endif

其实配置成GPIO_IN 容易和 标准GPIO IN 模式产生误解。应该区别一下定义成IIC_MODE等其他宏,然后drvpadconf.c 文件中,设置寄存器即可。寄存器值的设置才是pin 的功能设置的本质。这样就完成mboot里面pin的功能定义。
————————————————


推荐阅读
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 在分析Android的Audio系统时,我们对mpAudioPolicy->get_input进行了详细探讨,发现其背后涉及的机制相当复杂。本文将详细介绍这一过程及其背后的实现细节。 ... [详细]
  • 详解 Qt 串口通信程序全程图文 (4)
    Qt串口通信程序全程图文是本文介绍的内容,本文一开始先讲解对程序的改进,在文章最后将要讲解一些重要问题。1、在窗口中加入一些组合框ComboBox&# ... [详细]
  • 单片机入门指南:基础理论与实践
    本文介绍了单片机的基础知识及其应用。单片机是一种将微处理器(类似于CPU)、存储器(类似硬盘和内存)以及多种输入输出接口集成在一块硅片上的微型计算机系统。通过详细解析其内部结构和功能,帮助初学者快速掌握单片机的基本原理和实际操作方法。 ... [详细]
author-avatar
mobiledu2502908197
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有