106 lines
3.2 KiB
C
106 lines
3.2 KiB
C
|
/*
|
||
|
******************************************************************************
|
||
|
* @file driver_efuse.c
|
||
|
* @author FreqChip Firmware Team
|
||
|
* @version V1.0.0
|
||
|
* @date 2021
|
||
|
* @brief eFuse module driver.
|
||
|
* This file provides firmware functions to manage the eFuse.
|
||
|
******************************************************************************
|
||
|
* @attention
|
||
|
*
|
||
|
* Copyright (c) 2021 FreqChip.
|
||
|
* All rights reserved.
|
||
|
******************************************************************************
|
||
|
*/
|
||
|
#include "fr30xx.h"
|
||
|
|
||
|
/************************************************************************************
|
||
|
* @fn eFuse_siso_read
|
||
|
*
|
||
|
* @brief read eFuse data.
|
||
|
*
|
||
|
* @param fp_Data: read data buffer.
|
||
|
*/
|
||
|
void eFuse_siso_read(uint32_t *fp_Data)
|
||
|
{
|
||
|
/* config read mode */
|
||
|
EFUSE_SISO->eFuse_Ctrl = EFUSE_SISO_READ_MODE;
|
||
|
/* wait config done */
|
||
|
while(!(EFUSE_SISO->eFuse_Ctrl & EFUSE_SISO_CHECK_DONE));
|
||
|
EFUSE_SISO->eFuse_Ctrl |= EFUSE_SISO_CHECK_DONE;
|
||
|
|
||
|
/* read data */
|
||
|
fp_Data[0] = EFUSE_SISO->eFuse_Data0;
|
||
|
fp_Data[1] = EFUSE_SISO->eFuse_Data1;
|
||
|
fp_Data[2] = EFUSE_SISO->eFuse_Data2;
|
||
|
}
|
||
|
|
||
|
/************************************************************************************
|
||
|
* @fn eFuse_siso_write
|
||
|
*
|
||
|
* @brief write eFuse data.
|
||
|
*
|
||
|
* @param fp_Data: write data buffer.
|
||
|
*/
|
||
|
void eFuse_siso_write(uint32_t *fp_Data)
|
||
|
{
|
||
|
/* write data */
|
||
|
EFUSE_SISO->eFuse_Data0 = fp_Data[0];
|
||
|
EFUSE_SISO->eFuse_Data1 = fp_Data[1];
|
||
|
EFUSE_SISO->eFuse_Data2 = fp_Data[2];
|
||
|
|
||
|
/* config write mode */
|
||
|
EFUSE_SISO->eFuse_Ctrl = EFUSE_SISO_WRITE_MODE;
|
||
|
/* wait config done */
|
||
|
while(!(EFUSE_SISO->eFuse_Ctrl & EFUSE_SISO_CHECK_DONE));
|
||
|
EFUSE_SISO->eFuse_Ctrl |= EFUSE_SISO_CHECK_DONE;
|
||
|
}
|
||
|
|
||
|
/************************************************************************************
|
||
|
* @fn eFuse_pipo_read
|
||
|
*
|
||
|
* @brief read eFuse data.
|
||
|
*
|
||
|
* @param fu8_Addr: efuse address, unit byte, range 0x00 ~ 0xFF;
|
||
|
* @param fp_Data: read data buffer.
|
||
|
*/
|
||
|
void eFuse_pipo_read(uint8_t fu8_Addr, uint8_t *fp_Data)
|
||
|
{
|
||
|
EFUSE_PIPO->eFuse_Addr = fu8_Addr;
|
||
|
|
||
|
/* config read mode */
|
||
|
EFUSE_PIPO->eFuse_Ctrl = EFUSE_PIPO_GO | EFUSE_PIPO_READ_MODE;
|
||
|
/* wait config done */
|
||
|
while(!(EFUSE_PIPO->eFuse_Ctrl & EFUSE_PIPO_CHECK_DONE));
|
||
|
EFUSE_PIPO->eFuse_Ctrl |= EFUSE_PIPO_WRITE_MODE;
|
||
|
EFUSE_PIPO->eFuse_Ctrl = 0x00;
|
||
|
|
||
|
fp_Data[0] = EFUSE_PIPO->eFuse_RData;
|
||
|
|
||
|
EFUSE_PIPO->eFuse_Ctrl &= ~EFUSE_PIPO_READ_MODE;
|
||
|
}
|
||
|
|
||
|
/************************************************************************************
|
||
|
* @fn eFuse_pipo_write
|
||
|
*
|
||
|
* @brief write eFuse data.
|
||
|
*
|
||
|
* @param fu8_Addr: efuse address, unit byte, range 0x00 ~ 0xFF;
|
||
|
* @param fp_Data: write data value.
|
||
|
*/
|
||
|
void eFuse_pipo_write(uint8_t fu8_Addr, uint8_t fu8_Data)
|
||
|
{
|
||
|
EFUSE_PIPO->eFuse_Ctrl = EFUSE_PIPO_AVDDEN;
|
||
|
|
||
|
EFUSE_PIPO->eFuse_Addr = fu8_Addr;
|
||
|
EFUSE_PIPO->eFuse_WData = fu8_Data;
|
||
|
|
||
|
/* config write mode */
|
||
|
EFUSE_PIPO->eFuse_Ctrl = EFUSE_PIPO_GO | EFUSE_PIPO_WRITE_MODE | EFUSE_PIPO_AVDDEN;
|
||
|
/* wait config done */
|
||
|
while(!(EFUSE_PIPO->eFuse_Ctrl & EFUSE_PIPO_CHECK_DONE));
|
||
|
EFUSE_PIPO->eFuse_Ctrl |= EFUSE_PIPO_WRITE_MODE;
|
||
|
EFUSE_PIPO->eFuse_Ctrl = 0x00;
|
||
|
}
|