/* Reflow Oven Controller * * Copyright (C) 2020 Mario Hüttel * * This file is part of the Reflow Oven Controller Project. * * The reflow oven controller is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * The Reflow Oven Control Firmware is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the reflow oven controller project. * If not, see . */ #include #include #define LOW_WORD_ADDR (0x1FFF7A10UL) #define MID_WORD_ADDR (LOW_WORD_ADDR+4U) #define HIGH_WORD_ADDR (LOW_WORD_ADDR+8U) void stm_unique_id_get(uint32_t *high, uint32_t *mid, uint32_t *low) { if (!high || !mid || !low) return; *low = *((uint32_t *)LOW_WORD_ADDR); *mid = *((uint32_t *)MID_WORD_ADDR); *high = *((uint32_t *)HIGH_WORD_ADDR); } void stm_dev_rev_id_get(uint32_t *device_id, uint32_t *revision_id) { if (device_id) *device_id = DBGMCU->IDCODE & DBGMCU_IDCODE_DEV_ID; if (revision_id) *revision_id = (DBGMCU->IDCODE & DBGMCU_IDCODE_REV_ID) >> 16; } void stm_cpuid_get(uint8_t *implementer, uint8_t *variant, uint16_t *part_no, uint8_t *rev) { uint32_t cpuid; cpuid = SCB->CPUID; if (implementer) *implementer = (uint8_t)((cpuid >> 24) & 0xFFU); if (variant) *variant = (uint8_t)((cpuid >> 20) & 0x0FU); if (part_no) *part_no = (uint16_t)((cpuid >> 4) & 0x0FFFU); if (rev) *rev = (uint8_t)(cpuid & 0x0FU); }