typedef enum NVM_PROD_SIG_IDX_enum { NVM_PROD_SIG_IDX_RCOSC2M = 0x00, NVM_PROD_SIG_IDX_RCOSC32K = 0x02, NVM_PROD_SIG_IDX_RCOSC32M = 0x03, NVM_PROD_SIG_IDX_LOTNUM0 = 0x08, NVM_PROD_SIG_IDX_LOTNUM1 = 0x09, NVM_PROD_SIG_IDX_LOTNUM2 = 0x0A, NVM_PROD_SIG_IDX_LOTNUM3 = 0x0B, NVM_PROD_SIG_IDX_LOTNUM4 = 0x0C, NVM_PROD_SIG_IDX_LOTNUM5 = 0x0D, NVM_PROD_SIG_IDX_WAFNUM = 0x10, NVM_PROD_SIG_IDX_COORDX0 = 0x12, NVM_PROD_SIG_IDX_COORDX1 = 0x13, NVM_PROD_SIG_IDX_COORDY0 = 0x14, NVM_PROD_SIG_IDX_COORDY1 = 0x15, NVM_PROD_SIG_IDX_ADCACAL0 = 0x20, NVM_PROD_SIG_IDX_ADCACAL1 = 0x21, NVM_PROD_SIG_IDX_ADCBCAL0 = 0x24, NVM_PROD_SIG_IDX_ADCBCAL1 = 0x25, NVM_PROD_SIG_IDX_TEMPSENSE0 = 0x2E, NVM_PROD_SIG_IDX_TEMPSENSE1 = 0x2F, NVM_PROD_SIG_IDX_DACAOFFCAL = 0x30, NVM_PROD_SIG_IDX_DACAINCAL = 0x31, NVM_PROD_SIG_IDX_DACBOFFCAL = 0x32, NVM_PROD_SIG_IDX_DACBINCAL = 0x33 } NVM_PROD_SIG_IDX_t; /* static inline */ uint8_t SystemReadCalibrationByte(uint8_t Index) { uint8_t Result; uint16_t Address = Index; uint8_t Command = NVM_CMD_READ_CALIB_ROW_gc; __asm__ volatile ( "sts %[NVMREG], %[Cmd]" "\n\t" "lpm %[Result], Z" "\n\t" : [Result] "=r" (Result) : "z" (Address), [Cmd] "r" (Command), [NVMREG] "m" (NVM_CMD) ); return Result; }