【经验】如何正确使用8位MCU的PortMatch功能
SILICON LABS的很多8位MCU(C8051和EFM8)都具有PortMatch功能,此功能允许一个或多个端口IO引脚上的逻辑电平变化触发系统事件。例如GPIO的输入电平与配置的电平不匹配时可以触发中断事件,并且这一功能可以将MCU从Sleep模式唤醒。但是很多工程师在使用PortMatch功能时,总会遇到很多问题,本文为大家讲解如何正确使用PortMatch功能,MCU选用低功耗的EFM8SB系列为例。
端口PortMatch的功能通过设置PnMASK寄存器的相关位来启动,如配置P0.0引脚使能PortMatch功能的语句P0MASK |= 0x01;。另外,如果引脚模式被配置成了模拟则PortMatch功能无法使用,因此寄存器PnMDIN和PnMDOUT的相关位需要配置引脚作为数字输入(即open-drain)模式P0MDIN |= 0x01; P0MDOUT &= 0xFE。 然后需要配置的是引脚匹配的电平值,这是用于设置引脚是高电平还是低电平触发事件的。需要注意的是,PortMatch事件是引脚的电平与设置的电平值不一致时触发,因此配置P0.0是低电平触发,需要配置P0MAT |= 0x01;。如需产生PortMatch中断,需要使能PortMatch中断,将寄存器EIE1的EMAT位置1,并使能总中断EA。若只是用PortMatch功能来唤醒MCU,则不必一定开启中断,只要PortMatch事件被触发就可以唤醒MCU。使用图形化配置如下:
上面配置后,PortMatch事件是可以正确触发了,但在实际应用中,还是会遇到一些问题,现总结如下。
1、PortMatch中断函数的入口只有一个,即所有IO触发PortMatch中断时,都会执行同一个中断服务函数,当配置多个IO具有PortMatch中断时,如何判断此次中断是哪一个IO触发的?
在中断服务函数读取Pn寄存器来判断是哪个引脚的电平发生变化触发的,这里还是以P0.0引脚在低电平触发为例,假设P0.0外部是按键来控制电平,按键不按时是高电平,按键按下时是低电平。代码实现如下:
SI_SBIT (Pin0_0,SFR_P0,0); //定义P0.0为Pin0_0
SI_INTERRUPT (PMATCH_ISR, PMATCH_IRQn)
{
if(Pin0_0 = 0)//判断P0.0是不是低电平,因为低电平触发中断,如果是,则执行相关内容
{}
}
2、PortMatch触发是电平触发,当开启中断,电平不匹配时,则会一直触发中断,代码会循环地执行中断函数。如何才能实现类似边沿触发的方式?
这可以在中断函数里通过重新配置PnMAT寄存器来实现。例如按键按下低电平触发,那么就将P0.0改成低电平匹配,这样中断服务函数执行完后,就不会再次执行。当按键松开IO电平变高电平时,会再次执行中断服务函数,将P0.0再改回低电平匹配。这就相当于实现了边沿触发,上升沿和下降沿各执行中断一次。代码实现如下:
SI_INTERRUPT (PMATCH_ISR, PMATCH_IRQn)
{
uint8_t P0_sample = P0;
uint8_t P1_sample = P1;
P0MAT = P0_sample;
P1MAT = P1_sample;
}
3、配置低电平触发唤醒MCU,寄存器配置和电路设计需要注意的地方是什么?
如果是低电平触发,表示这个引脚平时需要保持高电平状态。寄存器配置如上面所述,将此引脚配置成数字开漏模式(PnMDIN和PnMDOUT),内部电平锁存值配置成高(Pn),即内部下拉关闭,匹配电平配置成高电平(PnMAT),使能匹配功能即可(P0MASK)。开漏模式的引脚内部上拉无法使用,EFM8SB内部有若上拉功能,但是为了降低功耗,建议电路设计上使用较大阻值的外部上拉电阻,关闭内部若上拉功能(XBR2的WEAKPUD位置1)。
4、配置高电平触发唤醒MCU,寄存器配置和电路设计需要注意的地方是什么?
如果是高电平触发,表示这个引脚平时需要保持低电平状态。寄存器配置方面,将此引脚配置成数字开漏模式(PnMDIN和PnMDOUT),内部电平锁存值配置成高(Pn),即内部下拉关闭,匹配电平配置成低电平(PnMAT),使能匹配功能即可(P0MASK)。需要注意的是内部电平锁存值需要配置成高电平,因为如果配置成低电平的话,当外部将此引脚拉高时,消耗的电流会比较大。外部驱动能力强的话,还可以将引脚电平拉高,如果驱动能力弱的话,就无法将引脚电平拉高了,从而无法唤醒MCU。电路设计上建议外部使用较大阻值的外部下拉电阻,关闭内部若上拉功能(XBR2的WEAKPUD位置1)。
世强元件电商版权所有,转载请注明来源及链接。
- |
- +1 赞 0
- 收藏
- 评论 1
本网站所有内容禁止转载,否则追究法律责任!
相关推荐
【经验】 8位MCU EFM8UB3从Snooze模式唤醒方法
EFM8UB3系列是Silicon labs公司推出的带有USB功能的8位MCU,支持六种工作模式可供选择,有Normal(正常),Idle(空闲),Suspend(挂起),Stop(停止),贪睡模式(Snooze),停机模式(Shutdown)六种工作模式,其中Snooze(睡眠)模式,在实际产品中,最常用到,本文将详细从Snooze模式唤醒MCU的方法。
【经验】低功耗EFM8SB20系列8位MCU中额外的1KB非易失数据存储区的应用
Silicon labs 的8bit MCU 是最节能的小封装微控制器。采用高效的8051内核,最低睡眠电流为50nA,功耗可达170uA/MHZ,可应用手持设备、电池驱动式消费电子设备、传感器接口等。EFM8SB20系列中存储器有一块非易失数据区,和程序存储器共享相同的地址空间,可以通过不同的方式访问。通过PSCTL寄存器中的SFLE位使能数据存储器是否可以访问。
【经验】8位MCU C8051F350完美替换C8051F352,解决缺货烦恼
24位ADC的C8051F350与16位ADC的C8051F352是同一系列的芯片,芯片的封装及引脚的分配是完全相同的,所以在硬件上可以完全替换。
Silicon Labs(芯科科技) EFM8SB1 8位MCU数据手册(中文详细)
描述- EFM8SB1是一款低功耗、功能全面的8位微控制器,专为电池驱动式应用设计。它采用小型封装,结合创新的低功耗技术,具有14个高品质电容感测通道和高精度模拟功能,适用于触摸屏/键盘、仪表盘、可穿戴产品和电池驱动的消费电子设备。
型号- EFM8SB10F4G,EFM8SB10F8G-A-CSP16,EFM8SB10F4G-A-QFN20,EFM8SB10F8G–A–QSOP24R,EFM8SB10F8G-A-QFN20R,EFM8SB10F8G,EFM8SB10F8G-CSP16,EFM8SB10F8G-A-QFN24R,EFM8SB1,EFM8SB10F2,EFM8SB10F2G-A-QFN20R,EFM8SB10F8G-A-QSOP24R,EFM8SB10F2G-A-QFN20,EFM8SB10F8G-A-QSOP24,EFM8SB10F8,EFM8SB10F8G-A-QFN24,EFM8SB10F8A-A-QFN20,EFM8SB10F8G-A-CSP16R,EFM8SB10F4G-A-QFN20R,EFM8SB10F4,EFM8SB10F8G-A-QFN20,EFM8SB10F8A-A-QFN24,EFM8SB10F2G
【产品】小蜜蜂8位MCU助您轻松迎接物联网时代
Silicon labs推出了一款集小封装和高性价比于一身的多用途8位MCU EFM8BB1,可轻松替代普通8051家族的MCU产品。
EFM8LB低功耗8位MCU在使用BOOTLOADER时,如何让程序进入BOOTLOADER?
EFM8LB的芯片进入BOOTLOADER有三种方法。第一种:上电后如果0X0000地址的数据为0XFF,程序会直接进入BOOTLOADER. 第二种:在上电复 位时,如果C2D引脚保持低电平超过50uS,程序会进入BOOTLOADER.第三种: 应用程序将R0赋值为0XA5,然后执行软启动,启动后程序会自动进入 BOOTLOADER。
【技术】预安装BOOT的新一代的8位MCU
Silicon labs的EFM8系列MCU是C8051F的升级换代产品。较C8051F不同的是,其在出厂时已经固化好BOOT程序。
【技术】 EFM8SB2系列8位MCU复位源详解
EFM8SB2系列是Silicon Labs最节能的8位MCU之一,其120uA/MHz 运行功耗,0.5uA 睡眠电流,可以极大延长电池的使用寿命。
【技术】小封装、多用途8位MCU EFM8BB3系列MCU工作模式详解
EFM8BB3系列MCU是Silicon Labs公司推出的一款小封装、多用途8位MCU,该MCU最高运行频率可达49MHz,其RAM容量最大为4352B,FLASH容量最大可达64KB。
8位MCU EFM8LB1的可编程计数阵列PCA0具有哪些功能?
8位MCU EFM8LB1的可编程计数阵列PCA0由1个16位的定时/计数器和6个16位的捕获/比较通道组成,每个通道独立配置实现以下功能:边沿捕获、软件定时、高速输出、频率输出和脉宽幅度调制PWM输出。
高性能8位MCU降低汽车设计中的成本和复杂性
从汽车安全系统和底盘系统到车身电子和动力总成管理,高性能微控制器(MCU)为当今的汽车设计提供了关键的控制和数据分析能力。
为什么在8位MCU C8051F392上运行正常的程序增加了一个全局变量后就无法执行到主程序中?
8位MCU C8051F392芯片内部集成有看门狗功能,这个功能默认是开启的,当全局变量过多时,在C语言的程序初始化没有结束时看门狗已经复位了,所以无法执行到主程序中,解决 办法是将STARTUP.A51添加到项目中,并在STARTUP.A51文件中将看门狗关闭。
推荐一款带ADC的小封装8位MCU,适用于对模拟性能、MCU性能以及电路板尺寸有比较高要求的场合。
推荐EFM8LB11系列8位MCU,该系列MCU内部集成了高精度ADC(14位)、4个12位DAC、内置温度传感器、模拟比较器以及丰富的数字外设和通信接口,FLASH大小为16/32KB,RAM为1.25/2.25KB,封装包括QFN24、QFN32、QFP32以及QSOP24,最小封装3x3mm,具有高性能、低功耗、小封装等特性,非常适用于高性能、低功耗、小封装,对模拟外设有更高要求的应用设计。
Silicon Labs的EFM8 8位MCU应用在汽车电子哪部分?
Silicon Labs的EFM8 8位MCU 可以用在电机驱动部分,倒车雷达等;【应用】EFM8BB2 8位MCU在倒车雷达上的应用
Silicon Labs(芯科科技) EFM8BB2 8位MCU数据手册(英文)
描述- 该资料介绍了Silicon Labs公司的EFM8BB2系列微控制器(MCU)的数据表。EFM8BB2是一款多用途的8位MCU,具有丰富的功能集,适用于空间受限的应用。它集成了先进的模拟和高速度通信外设,并采用高效的8051核心,适合嵌入式应用。
型号- EFM8BB21F16,EFM8BB2X-QSOP24,EFM8BB21F16G-C-QSOP24R,EFM8BB21F16I-C-QFN20R,EFM8BB21F16I-C-QFN20,EFM8BB21F16I-C-QSOP24,EFM8,EFM8BB21F16G-B-QFN20,EFM8BB21F16G-B-QSOP24,EFM8BB21F16G-C-QSOP24,EFM8BB22F16I-C-QFN28,EFM8BB2X-QFN20,EFM8BB22F16G-B-QFN28,EFM8BB22F16,EFM8BB2,EFM8BB21F16A-C-QFN20,EFM8B2,EFM8BB21F16G-C-QFN20R,EFM8BB22F16G-B-QFN28R,EFM8BB22F16A-C-QFN28,EFM8BB22F16G-C-QFN28,EFM8BB22F16G-C-QFN28R,EFM8BB22F16G-A-QFN28R,EFM8BB2X-QFN28,EFM8BB22F16A-A-QFN28R,EFM8BB21F16G-C-QFN20,EFM8BB22F16I-C-QFN28R,EFM8BB22F16I-A-QFN28R
电子商城
现货市场
服务
可定制板装式压力传感器支持产品量程从5inch水柱到100 psi气压;数字输出压力传感器压力范围0.5~60inH2O,温度补偿范围-20~85ºС;模拟和数字低压传感器可以直接与微控制器通信,具备多种小型SIP和DIP封装可选择。
提交需求>
可来图定制均温板VC尺寸50*50mm~600*600 mm,厚度1mm~10mm,最薄0.3mm。当量导热系数可达10000W/M·K,散热量可达10KW, 功率密度可达50W/cm²。项目单次采购额需满足1万元以上,或年需求5万元以上。
提交需求>
登录 | 立即注册
提交评论