本帖最后由 ddllxxrr 于 2016-1-4 20:45 编辑
ASF库提供了熔丝位读函数和锁定位读写函数。
熔丝位是一个系统功能的重要设置并且只能从外部编程接口写。应用软件可以读
熔丝位。熔丝位用来配置复位源如掉电检测,看门狗,启支配置,JTAG使能和
JTAG用户ID。
锁定位用于设置不同的闪存部分的保护级别。它们被用来阻止读写和/或写在不
同的闪存部分。锁定位可以由外部程序员编写,并从应用软件中设置了更为严格
的保护级别,但不设置一个不太严格的保护级别。芯片擦除是擦除锁位的唯一途
径。锁定位被擦除后,其余的闪存被擦除。一个没有编程的熔丝位或锁定位将有
一个1值,当被编程时这个锁定位将变为0,无论是熔丝位还是锁定位都可以象
FLASH一样编程。
static void nvm_blba_lock_bits_write (enum NVM_BLBA_enum
blba_lock)
static void nvm_blbat_lock_bits_write (enum NVM_BLBAT_enum
blbat_lock)
static void nvm_blbb_lock_bits_write (enum NVM_BLBB_enum
blbb_lock)
uint8_t nvm_fuses_read (enum fuse_byte_t fuse)
static void nvm_lb_lock_bits_write (enum NVM_LB_enum lb_lock)
static void nvm_lock_bits_write (enum NVM_BLBB_enum blbb_lock,
enum NVM_BLBA_enum blba_lock, enum NVM_BLBAT_enum blbat_lock, enum
NVM_LB_enum lb_lock)
程序很简单,读第五个节字。
#include <asf.h>
uint8_t fuse_value;
int main (void)
{
/* Insert system clock initialization code here (sysclk_init()). */
//sysclk_init();
sysclk_init();
board_init();
fuse_value = nvm_fuses_read(FUSEBYTE5);
if ((fuse_value & NVM_FUSES_BODLVL_gm) == 0x07) {
gpio_set_pin_high(LED0_GPIO);
}
}
这个程序是读一个熔丝位然后判断如查是预期的值就点亮LED。
最后运行结果是点亮了LED
|