Ejemplo n.º 1
0
// Reprogram the new settings if flash writing is allowed
static void program_cfg(cfg_setting_t *new_cfg)
{
    uint32_t status;
    uint32_t addr;
    cortex_int_state_t state;
    addr = (uint32_t)&config_rom;
    state = cortex_int_get_and_disable();
    status = EraseSector(addr);
    cortex_int_restore(state);

    if (status != 0) {
        return;
    }

    memset(write_buffer, 0xFF, sizeof(write_buffer));
    memcpy(write_buffer, new_cfg, sizeof(cfg_setting_t));
    state = cortex_int_get_and_disable();
    status = ProgramPage(addr, sizeof(write_buffer), write_buffer);
    cortex_int_restore(state);

    if (0 != status) {
        return;
    }
}
Ejemplo n.º 2
0
void read_unique_id(uint32_t *id)
{
#if defined(INTERNAL_FLASH)
    cortex_int_state_t local_state = cortex_int_get_and_disable();

    // readUID IAP call
    IAP iap_entry = (IAP)IAP_LOCATION;
    command[0] = 58;
    iap_entry(command, result);
    *id = result[1] ^ result[2] ^ result[3] ^ result[4];

    cortex_int_restore(local_state);
#else
    // IAP commands are only supported for parts with on-chip flash.
    (void)command;
    (void)result;
    *id = 0xdeadbeef;
#endif
}
Ejemplo n.º 3
0
void create_unique_id(void){
    cortex_int_state_t state;
    state = cortex_int_get_and_disable();

    EFC0->EEFC_FMR |= (1UL << 16);
    EFC0->EEFC_FCR = 0x5A00000E;
    /*Monitor FRDY*/
    while ((EFC0->EEFC_FSR & EEFC_FSR_FRDY) == EEFC_FSR_FRDY);

    unique_id[0] = *(uint32_t *)0x80000;
    unique_id[1] = *(uint32_t *)0x80004;
    unique_id[2] = *(uint32_t *)0x80008;
    unique_id[3] = *(uint32_t *)0x8000C;

    EFC0->EEFC_FCR = 0x5A00000F;
    /*Monitor FRDY*/
    while ((EFC0->EEFC_FSR & EEFC_FSR_FRDY) != EEFC_FSR_FRDY);

    cortex_int_restore(state);
}