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

  1. 最常用的是作为GPIO,设置为输出模式时,通过高低电平来控制一些外围设置;
    // 如LED,屏的电源,背光的开关,功放的静音等等。 除了控制设置之外,还需要和外部设置传输数据。
  2. pin 作为GPIO 设置为IN时,是获取外设的高低来判断外设的状态,最常用的一些source 通道的detect,及一些wakeup 功能。
  3. pin 作为SAR 口,获取ADC值; // 如按键板,参照“mstar平台SAR口使用”
  4. pin 作为UART / SPI /SD 口;
  5. 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

特殊口配置

  1. 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 。这样就配置完成了。

  1. 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 引脚配置相关推荐

  1. I2C接口配置ES7243录音芯片,MCU(STM32)收不到I2C ACK的问题

    stm32F401收不到ES7243录音芯片的I2C ACK问题 硬件环境: stm32F401RCT6 ES7243 stm32 cubeMX生成工程:由于硬件原理设计原因,I2C用IO模拟: 固件 ...

  2. 引脚悬空是什么电平_STM32单片机必须掌握的八种IO口模式和引脚配置方式

    八种IO口模式STM32有八种IO口模式,分别是:模拟输入.浮空输入.上拉输入.下拉输入.开漏输出.推挽输出.复用开漏输出和复用推挽输出.1.模拟输入GPIO_Mode_AIN模拟输入,即关闭施密特触 ...

  3. STM32 BOOT 引脚配置

    STM32 BOOT 引脚配置 在STM32F10xxx里,可以通过BOOT[1:0]引脚选择三种不同启动模式: BOOT1=x BOOT0=0 从用户闪存启动,芯片内置的Flash,这是正常的工作模 ...

  4. LoRa学习:SX127x芯片数字IO引脚映射

    LoRa学习:SX127x芯片数字IO引脚映射 SX1276/7/8的6个DIO通用IO引脚在LoRa模式下均可用.它们的映射关系取决于RegDioMapping1和RegDioMapping2这两个 ...

  5. 【STM32】引脚配置—F1与F4系列

    目录 一.stm32的GPIO模式简介 1.输入模式 2.输出模式 3.复用模式 各形式说明: 二.GPIO配置 1.GPIO初始化函数 2.外设使能函数及选择 关于使能函数的选择 3.完整的GPIO ...

  6. 【C51单片机学习笔记--DS1302时钟芯片蜂鸣器I2C总线AT24C02存储器】

    C51单片机学习笔记–DS1302时钟芯片&&蜂鸣器&&I2C总线&&AT24C02存储器 文章目录 一.DS1302时钟芯片介绍 二.DS1302时钟 ...

  7. STM32芯片IO口的配置以及上拉下拉电阻介绍(一)

    STM32芯片IO口的配置以及上拉下拉电阻介绍(一) IO口常见的配置方式 推挽输出 开漏输出 STM32芯片做硬件研发的朋友们都知道.但是还是有很多做硬件的新朋友"只知其然而不知其所然&q ...

  8. linux i2c 读写函数,Linux下读写芯片的I2C寄存器

    要想在Linux下读写芯片的I2C寄存器,一般需要在Linux编写一份该芯片的I2C驱动,关于Linux下如何编写I2C驱动,前一篇文章<手把手教你写Linux I2C设备驱动>已经做了初 ...

  9. STM32 端口复用与重映射及低功耗引脚配置

    STM32 端口复用与重映射及低功耗引脚配置 什么是复用? 在TSM32里面,大部分的引脚都是有GPIO复用功能,也就是说,一个 GPIO如果可以复用为内置外设的功能引脚,那么当这个 GPIO 作为内 ...

最新文章

  1. leetcode-521-Longest Uncommon Subsequence I
  2. mysql jdbc 表结构_JavaEE_day09_MySQL多表JDBC
  3. leetcode-cli 用命令行开心的刷算法
  4. blast | diamond 输出结果选择和解析 | 比对
  5. java中String类是什么_Java中的String类
  6. C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式错误
  7. 2020HC大会上,这群人在讨论云原生…
  8. SQLi LABS Less 14 报错注入+布尔盲注
  9. mac 图形化安装mysql,mac安装mysql图形化工具?
  10. 营销管理手册_某连锁动物医院营销管理咨询项目方案成功汇报
  11. 已经被说“烂”的微服务,到底是个什么鬼?通过拆分实战案例来带你入门。...
  12. mysql ibd文件还原_MySQL
  13. mysql 内存表 限制_MySQL内存表的弊端
  14. picasa android 缓存,从android应用上传到picasa
  15. 唯众中职人工智能专业解决方案
  16. IEEE模板如何在abstract和keywords之间加一个段落Note to Practitioners
  17. 第一次软工作业(数独)
  18. 面向对象的特征之一:抽象
  19. matlab模糊控制图怎么导出_4步教你学会使用matlab模糊控制工具箱 | 学步园
  20. 【GNSS】gfzrnx-用法

热门文章

  1. 钉钉版会议室预订系统使用指南
  2. Python 带你一键生成九宫格短视频
  3. 简单解释什么是伦敦银
  4. transactionManager手动事物管理--记一次重大的生产事故
  5. layui数据表格简单使用
  6. tomcat服务器接口响应超时,Tomcat请求超时
  7. Linux下ORACLE 使用dblink连接mysql
  8. 窗口看门狗的真正作用
  9. 硅谷行记二:走进百度美国研发中心
  10. android ListView显示网络图片