• LPC18xx/43xx OTP Controller driver


    LPC18xx/43xx OTP Controller driver

    /*
     * @brief LPC18xx/43xx OTP Controller driver
     *
     * @note
     * Copyright(C) NXP Semiconductors, 2012
     * All rights reserved.
     *
     * @par
     * Software that is described herein is for illustrative purposes only
     * which provides customers with programming information regarding the
     * LPC products.  This software is supplied "AS IS" without any warranties of
     * any kind, and NXP Semiconductors and its licensor disclaim any and
     * all warranties, express or implied, including all implied warranties of
     * merchantability, fitness for a particular purpose and non-infringement of
     * intellectual property rights.  NXP Semiconductors assumes no responsibility
     * or liability for the use of the software, conveys no license or rights under any
     * patent, copyright, mask work right, or any other intellectual property rights in
     * or to any products. NXP Semiconductors reserves the right to make changes
     * in the software without notification. NXP Semiconductors also makes no
     * representation or warranty that such application will be suitable for the
     * specified use without further testing or modification.
     *
     * @par
     * Permission to use, copy, modify, and distribute this software and its
     * documentation is hereby granted, under NXP Semiconductors' and its
     * licensor's relevant copyrights in the software, without fee, provided that it
     * is used in conjunction with NXP Semiconductors microcontrollers.  This
     * copyright, permission, and disclaimer notice must appear in all copies of
     * this code.
     */
    
    #include "chip.h"
    
    /*****************************************************************************
     * Private types/enumerations/variables
     ****************************************************************************/
    
    #define BOOTROM_BASE            0x10400100
    #define OTP_API_TABLE_OFFSET    0x1
    
    static unsigned long *BOOTROM_API_TABLE;
    
    /*****************************************************************************
     * Public types/enumerations/variables
     ****************************************************************************/
    
    /*****************************************************************************
     * Private functions
     ****************************************************************************/
    
    static uint32_t (*Otp_ProgBootSrc)(CHIP_OTP_BOOT_SRC_T BootSrc);
    static uint32_t (*Otp_ProgJTAGDis)(void);
    static uint32_t (*Otp_ProgUSBID)(uint32_t ProductID, uint32_t VendorID);
    static uint32_t (*Otp_ProgGP0)(uint32_t Data, uint32_t Mask);
    static uint32_t (*Otp_ProgGP1)(uint32_t Data, uint32_t Mask);
    static uint32_t (*Otp_ProgGP2)(uint32_t Data, uint32_t Mask);
    static uint32_t (*Otp_ProgKey1)(uint8_t *key);
    static uint32_t (*Otp_ProgKey2)(uint8_t *key);
    static uint32_t (*Otp_GenRand)(void);
    
    /*****************************************************************************
     * Public functions
     ****************************************************************************/
    
    /* CHIP OTP Initialisation function */
    uint32_t Chip_OTP_Init(void)
    {
        uint32_t (*ROM_otp_Init)(void);
    
        BOOTROM_API_TABLE = *((unsigned long * *) BOOTROM_BASE + OTP_API_TABLE_OFFSET);
    
        ROM_otp_Init      = (uint32_t (*)(void))BOOTROM_API_TABLE[0];
        Otp_ProgBootSrc   = (uint32_t (*)(CHIP_OTP_BOOT_SRC_T BootSrc))BOOTROM_API_TABLE[1];
        Otp_ProgJTAGDis   = (uint32_t (*)(void))BOOTROM_API_TABLE[2];
        Otp_ProgUSBID     = (uint32_t (*)(uint32_t ProductID, uint32_t VendorID))BOOTROM_API_TABLE[3];
        Otp_ProgGP0       = (uint32_t (*)(uint32_t Data, uint32_t Mask))BOOTROM_API_TABLE[7];
        Otp_ProgGP1       = (uint32_t (*)(uint32_t Data, uint32_t Mask))BOOTROM_API_TABLE[8];
        Otp_ProgGP2       = (uint32_t (*)(uint32_t Data, uint32_t Mask))BOOTROM_API_TABLE[9];
        Otp_ProgKey1      = (uint32_t (*)(uint8_t *key))BOOTROM_API_TABLE[10];
        Otp_ProgKey2      = (uint32_t (*)(uint8_t *key))BOOTROM_API_TABLE[11];
        Otp_GenRand       = (uint32_t (*)(void))BOOTROM_API_TABLE[12];
    
        return ROM_otp_Init();
    }
    
    /* Program boot source in OTP Controller */
    uint32_t Chip_OTP_ProgBootSrc(CHIP_OTP_BOOT_SRC_T BootSrc)
    {
        return Otp_ProgBootSrc(BootSrc);
    }
    
    /* Program the JTAG bit in OTP Controller */
    uint32_t Chip_OTP_ProgJTAGDis(void)
    {
        return Otp_ProgJTAGDis();
    }
    
    /* Program USB ID in OTP Controller */
    uint32_t Chip_OTP_ProgUSBID(uint32_t ProductID, uint32_t VendorID)
    {
        return Otp_ProgUSBID(ProductID, VendorID);
    }
    
    /* Program OTP GP Word memory */
    uint32_t Chip_OTP_ProgGPWord(uint32_t WordNum, uint32_t Data, uint32_t Mask)
    {
        uint32_t status;
    
        switch (WordNum) {
        case 1:
            status = Otp_ProgGP1(Data, Mask);
            break;
    
        case 2:
            status = Otp_ProgGP2(Data, Mask);
            break;
    
        case 0:
        default:
            status = Otp_ProgGP0(Data, Mask);
            break;
        }
    
        return status;
    }
    
    /* Program AES Key */
    uint32_t Chip_OTP_ProgKey(uint32_t KeyNum, uint8_t *key)
    {
        uint32_t status;
    
        if (KeyNum) {
            status = Otp_ProgKey2(key);
        }
        else {
            status = Otp_ProgKey1(key);
        }
        return status;
    }
    
    /* Generate Random Number using HW Random Number Generator */
    uint32_t Chip_OTP_GenRand(void)
    {
        return Otp_GenRand();
    }
  • 相关阅读:
    机器学习 深度学习 网站
    Concat层解析
    网络可视化工具netron详细安装流程
    【中文】【deplearning.ai】【吴恩达课后作业目录】
    python 3 linux环境搭建django production环境
    eCharts画图
    mysql 外键
    django执行离线ORM、数据操作
    http 发包调试工具
    python有空仔细研究
  • 原文地址:https://www.cnblogs.com/shangdawei/p/4798523.html
Copyright © 2020-2023  润新知