MSTAR芯片的I2C 引脚配置
芯片的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
- 1
- 2
- 3
- 4
特殊口配置
- 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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
例如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
- 1
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
将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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
其实配置成GPIO_IN 容易和 标准GPIO IN 模式产生误解。应该区别一下定义成IIC_MODE等其他宏,然后drvpadconf.c 文件中,设置寄存器即可。寄存器值的设置才是pin 的功能设置的本质。这样就完成mboot里面pin的功能定义。
</div>
MSTAR芯片的I2C 引脚配置相关推荐
- I2C接口配置ES7243录音芯片,MCU(STM32)收不到I2C ACK的问题
stm32F401收不到ES7243录音芯片的I2C ACK问题 硬件环境: stm32F401RCT6 ES7243 stm32 cubeMX生成工程:由于硬件原理设计原因,I2C用IO模拟: 固件 ...
- 引脚悬空是什么电平_STM32单片机必须掌握的八种IO口模式和引脚配置方式
八种IO口模式STM32有八种IO口模式,分别是:模拟输入.浮空输入.上拉输入.下拉输入.开漏输出.推挽输出.复用开漏输出和复用推挽输出.1.模拟输入GPIO_Mode_AIN模拟输入,即关闭施密特触 ...
- STM32 BOOT 引脚配置
STM32 BOOT 引脚配置 在STM32F10xxx里,可以通过BOOT[1:0]引脚选择三种不同启动模式: BOOT1=x BOOT0=0 从用户闪存启动,芯片内置的Flash,这是正常的工作模 ...
- LoRa学习:SX127x芯片数字IO引脚映射
LoRa学习:SX127x芯片数字IO引脚映射 SX1276/7/8的6个DIO通用IO引脚在LoRa模式下均可用.它们的映射关系取决于RegDioMapping1和RegDioMapping2这两个 ...
- 【STM32】引脚配置—F1与F4系列
目录 一.stm32的GPIO模式简介 1.输入模式 2.输出模式 3.复用模式 各形式说明: 二.GPIO配置 1.GPIO初始化函数 2.外设使能函数及选择 关于使能函数的选择 3.完整的GPIO ...
- 【C51单片机学习笔记--DS1302时钟芯片蜂鸣器I2C总线AT24C02存储器】
C51单片机学习笔记–DS1302时钟芯片&&蜂鸣器&&I2C总线&&AT24C02存储器 文章目录 一.DS1302时钟芯片介绍 二.DS1302时钟 ...
- STM32芯片IO口的配置以及上拉下拉电阻介绍(一)
STM32芯片IO口的配置以及上拉下拉电阻介绍(一) IO口常见的配置方式 推挽输出 开漏输出 STM32芯片做硬件研发的朋友们都知道.但是还是有很多做硬件的新朋友"只知其然而不知其所然&q ...
- linux i2c 读写函数,Linux下读写芯片的I2C寄存器
要想在Linux下读写芯片的I2C寄存器,一般需要在Linux编写一份该芯片的I2C驱动,关于Linux下如何编写I2C驱动,前一篇文章<手把手教你写Linux I2C设备驱动>已经做了初 ...
- STM32 端口复用与重映射及低功耗引脚配置
STM32 端口复用与重映射及低功耗引脚配置 什么是复用? 在TSM32里面,大部分的引脚都是有GPIO复用功能,也就是说,一个 GPIO如果可以复用为内置外设的功能引脚,那么当这个 GPIO 作为内 ...
最新文章
- leetcode-521-Longest Uncommon Subsequence I
- mysql jdbc 表结构_JavaEE_day09_MySQL多表JDBC
- leetcode-cli 用命令行开心的刷算法
- blast | diamond 输出结果选择和解析 | 比对
- java中String类是什么_Java中的String类
- C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式错误
- 2020HC大会上,这群人在讨论云原生…
- SQLi LABS Less 14 报错注入+布尔盲注
- mac 图形化安装mysql,mac安装mysql图形化工具?
- 营销管理手册_某连锁动物医院营销管理咨询项目方案成功汇报
- 已经被说“烂”的微服务,到底是个什么鬼?通过拆分实战案例来带你入门。...
- mysql ibd文件还原_MySQL
- mysql 内存表 限制_MySQL内存表的弊端
- picasa android 缓存,从android应用上传到picasa
- 唯众中职人工智能专业解决方案
- IEEE模板如何在abstract和keywords之间加一个段落Note to Practitioners
- 第一次软工作业(数独)
- 面向对象的特征之一:抽象
- matlab模糊控制图怎么导出_4步教你学会使用matlab模糊控制工具箱 | 学步园
- 【GNSS】gfzrnx-用法