123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #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<len;i++)
- {
- data[i]=HREAD(mem_otp_data_buf+i);
- }
- }
- /*
- * @brief: OTP read data
- * @param: addr
- * @param: *data
- * @param: len
- * @return: none
- */
- void read_otp_data(uint32_t addr,uint8_t *data,uint32_t len)
- {
- OS_ENTER_CRITICAL();
- uint32_t i=0;
- uint32_t packnum=0;
- uint32_t ilen=0;
-
- packnum = len/packagelen;
- if(len%packagelen)
- {
- packnum++;
- }
-
- init_otp();
-
- for(i=0;i<packnum;i++)
- {
- ilen = len > packagelen ? packagelen :len;
- read_otp(addr,data,len);
-
- addr += ilen;
- data += ilen;
- len -= ilen;
- }
- deinit_otp();
- OS_EXIT_CRITICAL();
- }
|