#include "yc_otp.h" #include "yc_drv_common.h" /* * @brief: OTP deint * @param: none * @return: none */ void deinit_otp(void) { HWRITE(RFEN_CHGPUMP,HREAD(RFEN_CHGPUMP) & ~(0x40)); } /* * @brief: OTP init * @param: none * @return: none */ void init_otp(void) { // HWRITE(RFEN_CHGPUMP,0x70); HWRITE(RFEN_CHGPUMP,HREAD(RFEN_CHGPUMP)|0x40); SYS_delay_us(CHARGEPUMP_DELAY); } /* * @brief: OTP SET ADDR * @param: addr * @return: none */ void otp_set_addr(uint32_t addr) { addr=addr<<3; HWRITEW(CORE_OTP_ADDR,addr); HWRITE(CORE_OTP_DIN,0); } /* * @brief: OTP CE * @param: none * @return: none */ void otp_ce(void) { HWRITE(CORE_OTP_CTRL,0x82); SYS_delay_us(1); HWRITE(CORE_OTP_CTRL,0x80); HWRITE(CORE_OTP_CTRL,0x82); SYS_delay_us(13); } /* * @brief: OTP read init * @param: *data * @param: len * @return: none */ void read_otp_init(uint8_t *data,uint32_t len) { int rega; otp_ce(); HWRITE(CORE_OTP_CTRL,0xa2); HWRITEW(CORE_OTP_RXADDR,data); HWRITEW(CORE_OTP_RXLEN,len); HWRITE(CORE_OTP_DIN,0x11); HWRITE(CORE_DMA_START,OTP_START); } /* * @brief: OTP read * @param: addr * @param: *data * @param: len * @return: none */ void read_otp(uint32_t addr,uint8_t *data,uint32_t len) { otp_set_addr(addr); read_otp_init((uint8_t *)mem_otp_data_buf, len); while(!(HREAD(CORE_DMA_STATUS)&2)); HWRITE(CORE_OTP_CTRL,0x83); for(int i=0;i packagelen ? packagelen :len; read_otp(addr,data,len); addr += ilen; data += ilen; len -= ilen; } deinit_otp(); OS_EXIT_CRITICAL(); }