Mighty Gecko EMU模块中的内部温度传感器的转换函数怎样的?
参加Gecko SDK中的TEMPDRV 固件驱动来获取EMU温度传感器的转换函数。该驱动位置在硬盘驱动的如下位置:
C:\SiliconLabs\SimplicityStudio\v4\developer\sdks\exx32\v4.4.0\emdrv\tempdrv\
具体的说,下面的函数返回采用存储在DI页校准数据处理后的以摄氏度为单位的温度值。
int8_t TEMPDRV_GetTemp(void)
我可以使用LFRCO来给LEUART提供时钟吗?
LFRCO可以被用来给LEUART提供时钟,但是LFRCO的频率随温度和电源电压变化有较大的变动。为了克服LFRCO的这个变化,建议使用一个更精确的时钟源周期性的校准LFRCO。幸好MCU提供使用CALCTRL(参考时钟)来校准校准LFRCO的功能。该校准过程应该在芯片运行过程中进行来保证LRRCO不会在温度及电源电压变化时有飘移。
如需了解更详细的信息以及软件示例代码,请参考AN0004.
设备信息(DI)页包含什么信息以及如何访问这信息?
每一个设备的Flash都包含有一个设备信息(DI)页,该页在芯片生产过程中写入芯片的唯一识别码以及包含诸如校准值等有用数据。如需了解更多关于该页内容所保存的详细信息,请阅读对应设备的参考手册(Reference manual)。
在使用Silabs SDK时候,SDK定义了一个称为DEVINFO的结构体使得用户可以访问DI信息。
你可以在Happy Gecko的efm32hg_devinfo.h,Wonder Gecko的efm32wg_devinfo.h以及其他芯片的同样文件中得到更详细的关于该结构体的信息。该头文件通过你的代码中的em_device.h被包含进来。
下面是一个对于使用Happy Gecko 的 efm32hg_devinfo.h中的 DEVINFO结构体以及其他#define宏读取CRC的示例:
uint32_t read; read |= ((DEVINFO->CAL & _DEVINFO_CAL_CRC_MASK) >> _DEVINFO_CAL_CRC_SHIFT);
如何把 em_msc.c 中的 flash 擦/写函数放在flash?
在默认情况下,所有em_msc.c 中的flash 擦/写函数被放在RAM中。为了节约RAM空间使用,这些函数可以在不同IDE下通过定义符号EM_MSC_RUN_FROM_FLASH放在flash中。
注意:
什么是IFC的读取-清除(Read-Clear )操作?
IFC读取-清除操作是EFM32 Gecko系列1和EFR3无线Gecko 系列1设备的一个新加入特性。
除了常用的通过IFS/IFC寄存器中断置位和中断清除操作之外,有一个通过置位寄存器MSC_CTRL 位域 IFCREADCLEAR 来使能(打开该功能)的附加原子读取-清除操作。
在使能的情况下,外设的IFC寄存器的读取会返回中断向量值(镜像IF寄存器),同时清除已经置位的中断标志位。该操作功能上等效于读取IF寄存器并立即把读取的值写回到IFC寄存器。
/* Enable atomic read-clear operation on reading IFC register */ MSC->CTRL |= MSC_CTRL_IFCREADCLEAR;
当芯片选择引脚使能位(CSPEN)被置位时, 为何我不能驱动USART芯片选择引脚(CS)为高或者低电平?
如果USART CS引脚在ROUTE寄存器中被使能, 但是ANTOCS没被使用,那么硬件会禁用CS引脚的端口引脚驱动,从而引脚输出处于浮空。
要使用硬件芯片选择(AUTOCS),需要满足一下条件:
然而,如果硬件控制策略的CS引脚时序不能满足应用需要的话,用户应该禁用CSPEN并在固件中手动控制CS引脚的输出锁存值。
总的说来在AUTOCS不使用的时候CSPEN不应该被置位,因为这会禁用通过GPIO_Px_POUT寄存器对该引脚手动控制从而CS引脚保持为悬空状态。
32-bit Knowledge Base
EFM32MG 温度传感器的转换函数
我可以使用LFRCO来给LEUART提供时钟吗?
设备信息(DI)页
如何把 em_msc.c 中的 flash 擦/写函数放在flash?
什么是IFC的读取-清除(Read-Clear)操作?
EFM32 USART 芯片选择引脚(CS)手动控制?