732 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			732 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/****************************************************************************
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
							 | 
						||
| 
								 | 
							
								 * be copied by any method or incorporated into another program without
							 | 
						||
| 
								 | 
							
								 * the express written consent of Aerospace C.Power. This Information or any portion
							 | 
						||
| 
								 | 
							
								 * thereof remains the property of Aerospace C.Power. The Information contained herein
							 | 
						||
| 
								 | 
							
								 * is believed to be accurate and Aerospace C.Power assumes no responsibility or
							 | 
						||
| 
								 | 
							
								 * liability for its use in any way and conveys no license or title under
							 | 
						||
| 
								 | 
							
								 * any patent or copyright and makes no representation or warranty that this
							 | 
						||
| 
								 | 
							
								 * Information is free from patent or copyright infringement.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * ****************************************************************************/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* os shim includes */
							 | 
						||
| 
								 | 
							
								#include "os_types.h"
							 | 
						||
| 
								 | 
							
								#include "os_task.h"
							 | 
						||
| 
								 | 
							
								#include "os_utils.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* common includes */
							 | 
						||
| 
								 | 
							
								#include "iot_io.h"
							 | 
						||
| 
								 | 
							
								#include "iot_bitops.h"
							 | 
						||
| 
								 | 
							
								#include "iot_pkt.h"
							 | 
						||
| 
								 | 
							
								#include "iot_ipc.h"
							 | 
						||
| 
								 | 
							
								#include "iot_plc_lib.h"
							 | 
						||
| 
								 | 
							
								#include "iot_dbglog_api.h"
							 | 
						||
| 
								 | 
							
								#include "iot_config.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* driver includes */
							 | 
						||
| 
								 | 
							
								#include "iot_clock.h"
							 | 
						||
| 
								 | 
							
								#include "iot_uart.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* cli includes */
							 | 
						||
| 
								 | 
							
								#include "iot_cli.h"
							 | 
						||
| 
								 | 
							
								#include "iot_uart_h.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* debug includes*/
							 | 
						||
| 
								 | 
							
								#include "dbg_io.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "hw_reg_api.h"
							 | 
						||
| 
								 | 
							
								#include "uart.h"
							 | 
						||
| 
								 | 
							
								#include "apb_dma.h"
							 | 
						||
| 
								 | 
							
								#include "dma_hw.h"
							 | 
						||
| 
								 | 
							
								#include "hw_sadc.h"
							 | 
						||
| 
								 | 
							
								#include "sadc0_reg.h"
							 | 
						||
| 
								 | 
							
								#include "sadc1_reg.h"
							 | 
						||
| 
								 | 
							
								#include "sadc.h"
							 | 
						||
| 
								 | 
							
								#include "ahb_rf.h"
							 | 
						||
| 
								 | 
							
								#include "granite_reg.h"
							 | 
						||
| 
								 | 
							
								#include "ana.h"
							 | 
						||
| 
								 | 
							
								#include "apb_glb_reg.h"
							 | 
						||
| 
								 | 
							
								#include "phy_dfe_reg.h"
							 | 
						||
| 
								 | 
							
								#include "adc.h"
							 | 
						||
| 
								 | 
							
								#include "pmu_hw.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								desc_t *pdesc_rx=NULL;
							 | 
						||
| 
								 | 
							
								desc_t *pdesc_tx=NULL;
							 | 
						||
| 
								 | 
							
								desc_t *pdesc_rx_end=NULL;
							 | 
						||
| 
								 | 
							
								desc_t *pdesc_tx_end=NULL;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void dma_desc_tail_exchange(desc_t*desc0, desc_t*desc1)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    volatile unsigned int tail;
							 | 
						||
| 
								 | 
							
								    tail = desc0->tail_lable[0];
							 | 
						||
| 
								 | 
							
								    desc0->tail_lable[0] = desc1->tail_lable[0];
							 | 
						||
| 
								 | 
							
								    desc1->tail_lable[0] = tail;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								int int_stack[0x20];
							 | 
						||
| 
								 | 
							
								void sadc_dma_handler(int device, int status)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    desc_t *st, *end, *pnt;
							 | 
						||
| 
								 | 
							
								    iot_pkt_t **pkt;
							 | 
						||
| 
								 | 
							
								    static int int_stack_index=0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int_stack[(int_stack_index++)&0x1F] = status;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if(DMA_INT_IN_SUC_EOF&status)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        end = st = pdesc_rx_end;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        while((end->n_ptr != st) && (end->n_ptr->owner != DESC_OWNER_DMA)) end = end->n_ptr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        pdesc_rx_end = end->n_ptr;
							 | 
						||
| 
								 | 
							
								        pnt = pdesc_tx;
							 | 
						||
| 
								 | 
							
								        while(st != end->n_ptr)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            /* prepare pkt before exchange */
							 | 
						||
| 
								 | 
							
								            pkt = (iot_pkt_t**)EXTEN_POINTER(st);
							 | 
						||
| 
								 | 
							
								            iot_pkt_set_tail(*pkt, (*pkt)->data + st->length);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            pkt = (iot_pkt_t**)EXTEN_POINTER(pnt);
							 | 
						||
| 
								 | 
							
								            iot_pkt_set_data(*pkt, (*pkt)->head);
							 | 
						||
| 
								 | 
							
								            iot_pkt_set_tail(*pkt, (*pkt)->head);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            dma_desc_tail_exchange(pnt, st);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            pkt = (iot_pkt_t**)EXTEN_POINTER(st);
							 | 
						||
| 
								 | 
							
								            DMA_MAKE_DESC(st, (*pkt)->data, TEST_BUF_SIZE, 0, 0, 0, 0, DESC_OWNER_DMA);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            /* send pkt recieved */
							 | 
						||
| 
								 | 
							
								            pkt = (iot_pkt_t**)EXTEN_POINTER(pnt);
							 | 
						||
| 
								 | 
							
								            DMA_MAKE_DESC(pnt, (*pkt)->data, TEST_BUF_SIZE, iot_pkt_block_len(*pkt, IOT_PKT_BLOCK_DATA),\
							 | 
						||
| 
								 | 
							
								                0, 0, 0, DESC_OWNER_DMA);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            st = st->n_ptr;
							 | 
						||
| 
								 | 
							
								            pnt = pnt->n_ptr;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        end = pnt->l_ptr;
							 | 
						||
| 
								 | 
							
								        end->n_ptr = NULL;
							 | 
						||
| 
								 | 
							
								        pdesc_tx_end->n_ptr = pdesc_tx;
							 | 
						||
| 
								 | 
							
								        if(DESC_OWNER_CPU == pdesc_tx_end->owner)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            dma_hw_start_send(DMA_TEST_DEVICE, pdesc_tx);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        pdesc_tx = pnt;
							 | 
						||
| 
								 | 
							
								        pdesc_tx_end = end;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return ;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if DT_SADC_POLLING_EN
							 | 
						||
| 
								 | 
							
								/* 7 phase data */
							 | 
						||
| 
								 | 
							
								uint32_t chn_data[DT_SADC_SAMPLE_PHASE_NUM][DT_SADC_SAMPLE_QUANTITY] = {0};
							 | 
						||
| 
								 | 
							
								#if DT_SADC_TEST_MODE == DT_SADC_DUAL_13PHASE_MODE
							 | 
						||
| 
								 | 
							
								uint32_t chn_data1[DT_SADC_SAMPLE_PHASE_NUM - 1][DT_SADC_SAMPLE_QUANTITY] = {0};
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void sadc_data_polling()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t count0 = 0, count1 = 0, count2 = 0, \
							 | 
						||
| 
								 | 
							
								        count30 = 0, count31 = 0, count32 = 0, count33 = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    while(1)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (count0<DT_SADC_SAMPLE_QUANTITY) {
							 | 
						||
| 
								 | 
							
								            if (sadc_check_data_vld(ANA_SADC0, SADC_PHASE0)) {
							 | 
						||
| 
								 | 
							
								                chn_data[0][count0] = sadc_data_get(ANA_SADC0, SADC_PHASE0);
							 | 
						||
| 
								 | 
							
								                sadc_data_vld_clr(ANA_SADC0, SADC_PHASE0);
							 | 
						||
| 
								 | 
							
								                count0++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (count1<DT_SADC_SAMPLE_QUANTITY) {
							 | 
						||
| 
								 | 
							
								            if (sadc_check_data_vld(ANA_SADC0, SADC_PHASE1)) {
							 | 
						||
| 
								 | 
							
								                chn_data[1][count1] = sadc_data_get(ANA_SADC0, SADC_PHASE1);
							 | 
						||
| 
								 | 
							
								                sadc_data_vld_clr(ANA_SADC0, SADC_PHASE1);
							 | 
						||
| 
								 | 
							
								                count1++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (count2<DT_SADC_SAMPLE_QUANTITY) {
							 | 
						||
| 
								 | 
							
								            if (sadc_check_data_vld(ANA_SADC0, SADC_PHASE2)) {
							 | 
						||
| 
								 | 
							
								                chn_data[2][count2] = sadc_data_get(ANA_SADC0, SADC_PHASE2);
							 | 
						||
| 
								 | 
							
								                sadc_data_vld_clr(ANA_SADC0, SADC_PHASE2);
							 | 
						||
| 
								 | 
							
								                count2++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (count30<DT_SADC_SAMPLE_QUANTITY) {
							 | 
						||
| 
								 | 
							
								            if (sadc_check_data_vld(ANA_SADC0, ID_PHASE3P0)) {
							 | 
						||
| 
								 | 
							
								                chn_data[3][count30] = sadc_data_get(ANA_SADC0, ID_PHASE3P0);
							 | 
						||
| 
								 | 
							
								                sadc_data_vld_clr(ANA_SADC0, ID_PHASE3P0);
							 | 
						||
| 
								 | 
							
								                count30++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (count31<DT_SADC_SAMPLE_QUANTITY) {
							 | 
						||
| 
								 | 
							
								            if (sadc_check_data_vld(ANA_SADC0, SADC_PHASE3_1)) {
							 | 
						||
| 
								 | 
							
								                chn_data[4][count31] = sadc_data_get(ANA_SADC0, SADC_PHASE3_1);
							 | 
						||
| 
								 | 
							
								                sadc_data_vld_clr(ANA_SADC0, SADC_PHASE3_1);
							 | 
						||
| 
								 | 
							
								                count31++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (count32<DT_SADC_SAMPLE_QUANTITY) {
							 | 
						||
| 
								 | 
							
								            if (sadc_check_data_vld(ANA_SADC0, SADC_PHASE3_2)) {
							 | 
						||
| 
								 | 
							
								                chn_data[5][count32] = sadc_data_get(ANA_SADC0, SADC_PHASE3_2);
							 | 
						||
| 
								 | 
							
								                sadc_data_vld_clr(ANA_SADC0, SADC_PHASE3_2);
							 | 
						||
| 
								 | 
							
								                count32++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (count33<DT_SADC_SAMPLE_QUANTITY) {
							 | 
						||
| 
								 | 
							
								            if (sadc_check_data_vld(ANA_SADC0, ID_PHASE3P3)) {
							 | 
						||
| 
								 | 
							
								                chn_data[6][count33] = sadc_data_get(ANA_SADC0, ID_PHASE3P3);
							 | 
						||
| 
								 | 
							
								                sadc_data_vld_clr(ANA_SADC0, ID_PHASE3P3);
							 | 
						||
| 
								 | 
							
								                count33++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ((count0 == DT_SADC_SAMPLE_QUANTITY) && (count1 == DT_SADC_SAMPLE_QUANTITY) && \
							 | 
						||
| 
								 | 
							
								            (count2 == DT_SADC_SAMPLE_QUANTITY) && (count30 == DT_SADC_SAMPLE_QUANTITY) && \
							 | 
						||
| 
								 | 
							
								            (count31 == DT_SADC_SAMPLE_QUANTITY) && (count32 == DT_SADC_SAMPLE_QUANTITY) && \
							 | 
						||
| 
								 | 
							
								            (count33 == DT_SADC_SAMPLE_QUANTITY)) {
							 | 
						||
| 
								 | 
							
								            iot_printf("count:%d dump complete!\n", DT_SADC_SAMPLE_QUANTITY);
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if DT_SADC_TEST_MODE == DT_SADC_DUAL_13PHASE_MODE
							 | 
						||
| 
								 | 
							
								void sadc1_data_polling()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t count0 = 0, count1 = 0, count2 = 0, \
							 | 
						||
| 
								 | 
							
								        count30 = 0, count31 = 0, count32 = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    while(1)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (count0<DT_SADC_SAMPLE_QUANTITY) {
							 | 
						||
| 
								 | 
							
								            if (sadc_check_data_vld(ANA_SADC1, SADC_PHASE0)) {
							 | 
						||
| 
								 | 
							
								                chn_data1[0][count0] = sadc_data_get(ANA_SADC1, SADC_PHASE0);
							 | 
						||
| 
								 | 
							
								                sadc_data_vld_clr(ANA_SADC1, SADC_PHASE0);
							 | 
						||
| 
								 | 
							
								                count0++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (count1<DT_SADC_SAMPLE_QUANTITY) {
							 | 
						||
| 
								 | 
							
								            if (sadc_check_data_vld(ANA_SADC1, SADC_PHASE1)) {
							 | 
						||
| 
								 | 
							
								                chn_data1[1][count1] = sadc_data_get(ANA_SADC1, SADC_PHASE1);
							 | 
						||
| 
								 | 
							
								                sadc_data_vld_clr(ANA_SADC1, SADC_PHASE1);
							 | 
						||
| 
								 | 
							
								                count1++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (count2<DT_SADC_SAMPLE_QUANTITY) {
							 | 
						||
| 
								 | 
							
								            if (sadc_check_data_vld(ANA_SADC1, SADC_PHASE2)) {
							 | 
						||
| 
								 | 
							
								                chn_data1[2][count2] = sadc_data_get(ANA_SADC1, SADC_PHASE2);
							 | 
						||
| 
								 | 
							
								                sadc_data_vld_clr(ANA_SADC1, SADC_PHASE2);
							 | 
						||
| 
								 | 
							
								                count2++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (count30<DT_SADC_SAMPLE_QUANTITY) {
							 | 
						||
| 
								 | 
							
								            if (sadc_check_data_vld(ANA_SADC1, ID_PHASE3P0)) {
							 | 
						||
| 
								 | 
							
								                chn_data1[3][count30] = sadc_data_get(ANA_SADC1, ID_PHASE3P0);
							 | 
						||
| 
								 | 
							
								                sadc_data_vld_clr(ANA_SADC1, ID_PHASE3P0);
							 | 
						||
| 
								 | 
							
								                count30++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (count31<DT_SADC_SAMPLE_QUANTITY) {
							 | 
						||
| 
								 | 
							
								            if (sadc_check_data_vld(ANA_SADC1, SADC_PHASE3_1)) {
							 | 
						||
| 
								 | 
							
								                chn_data1[4][count31] = sadc_data_get(ANA_SADC1, SADC_PHASE3_1);
							 | 
						||
| 
								 | 
							
								                sadc_data_vld_clr(ANA_SADC1, SADC_PHASE3_1);
							 | 
						||
| 
								 | 
							
								                count31++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (count32<DT_SADC_SAMPLE_QUANTITY) {
							 | 
						||
| 
								 | 
							
								            if (sadc_check_data_vld(ANA_SADC1, SADC_PHASE3_2)) {
							 | 
						||
| 
								 | 
							
								                chn_data1[5][count32] = sadc_data_get(ANA_SADC1, SADC_PHASE3_2);
							 | 
						||
| 
								 | 
							
								                sadc_data_vld_clr(ANA_SADC1, SADC_PHASE3_2);
							 | 
						||
| 
								 | 
							
								                count32++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ((count0 == DT_SADC_SAMPLE_QUANTITY) && (count1 == DT_SADC_SAMPLE_QUANTITY) && \
							 | 
						||
| 
								 | 
							
								            (count2 == DT_SADC_SAMPLE_QUANTITY) && (count30 == DT_SADC_SAMPLE_QUANTITY) && \
							 | 
						||
| 
								 | 
							
								            (count31 == DT_SADC_SAMPLE_QUANTITY) && (count32 == DT_SADC_SAMPLE_QUANTITY)) {
							 | 
						||
| 
								 | 
							
								            iot_printf("count1:%d dump complete!\n", DT_SADC_SAMPLE_QUANTITY);
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void sadc_reg_dump_dbg()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    iot_printf("dump sadc register:\n");
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_CHN_CFG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_CHN_CFG_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_CHN_MUX_SEL_CFG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_CHN_MUX_SEL_CFG_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_CHN_SAMPLE_TIME_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_CHN_SAMPLE_TIME_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_CHN_FILTER_CFG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_CHN_FILTER_CFG_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_PHASE0_THRS_CFG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_PHASE0_THRS_CFG_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_PHASE1_THRS_CFG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_PHASE1_THRS_CFG_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_PHASE2_THRS_CFG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_PHASE2_THRS_CFG_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_PHASE3_0_THRS_CFG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_PHASE3_0_THRS_CFG_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_PHASE3_1_THRS_CFG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_PHASE3_1_THRS_CFG_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_PHASE3_2_THRS_CFG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_PHASE3_2_THRS_CFG_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_PHASE3_3_THRS_CFG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_PHASE3_3_THRS_CFG_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_MTR_SEL_MUX_CFG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_MTR_SEL_MUX_CFG_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_VCM_CH1_SEL_MUX_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_VCM_CH1_SEL_MUX_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_RST_CH1_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_RST_CH1_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_IFRED_CH1_EN_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_IFRED_CH1_EN_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_MTR2PAD_EN_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_MTR2PAD_EN_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_MTR2PAD_EN_NEG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_MTR2PAD_EN_NEG_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_MTR3PAD_EN_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_MTR3PAD_EN_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_ATB2PAD_EN_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_ATB2PAD_EN_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_SCLR_CTRL_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_SCLR_CTRL_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_SUB_DC_THRS_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_SUB_DC_THRS_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_DBG_BUS0_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_DBG_BUS0_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_SUB_DC_THRS_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_SUB_DC_THRS_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_TSW_SENS_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_TSW_SENS_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_TSW_PD_PGA_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_TSW_PD_PGA_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_TSW_METER_PGA_GAIN_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_TSW_METER_PGA_GAIN_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_INT_RAW_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_INT_RAW_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_INT_ST_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_INT_ST_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_INT_ENA_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_INT_ENA_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_PHASE_EXTHRS_SEL_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_PHASE_EXTHRS_SEL_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_PHASE_DMA_OUT_CFG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_PHASE_DMA_OUT_CFG_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_CHN_CFG1_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_CHN_CFG1_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC0_DBG_CFG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC0_DBG_CFG_ADDR));
							 | 
						||
| 
								 | 
							
								    iot_printf("CFG_SADC_COMMON_CFG_ADDR: 0x%x\n", SADC0_READ_REG(CFG_SADC_COMMON_CFG_ADDR));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void sadc_dual_mode_test()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* 0:32k 1:8m 2:25m */
							 | 
						||
| 
								 | 
							
								    pmu_clk_set(2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //step1:sadc working basic configuration
							 | 
						||
| 
								 | 
							
								    sadc_phase_raw_regdata_en(ANA_SADC0, CHNL_NUM_ADC0, true);
							 | 
						||
| 
								 | 
							
								    sadc_phase_raw_regdata_en(ANA_SADC0, CHNL_NUM_ADC1, true);
							 | 
						||
| 
								 | 
							
								    sadc_phase_raw_regdata_en(ANA_SADC0, CHNL_NUM_ADC2, true);
							 | 
						||
| 
								 | 
							
								    sadc_phase_raw_regdata_en(ANA_SADC0, CHNL_NUM_ADC3, true);
							 | 
						||
| 
								 | 
							
								    sadc_phase_raw_regdata_en(ANA_SADC0, CHNL_NUM_ADC4, true);
							 | 
						||
| 
								 | 
							
								    sadc_phase_raw_regdata_en(ANA_SADC0, CHNL_NUM_ADC5, true);
							 | 
						||
| 
								 | 
							
								    sadc_phase_raw_regdata_en(ANA_SADC0, CHNL_NUM_ADC6, true);
							 | 
						||
| 
								 | 
							
								    /* clr auto */
							 | 
						||
| 
								 | 
							
								    sadc_phase_clr_auto_en(ANA_SADC0, CHNL_NUM_ADC0, false);
							 | 
						||
| 
								 | 
							
								    sadc_phase_clr_auto_en(ANA_SADC0, CHNL_NUM_ADC1, false);
							 | 
						||
| 
								 | 
							
								    sadc_phase_clr_auto_en(ANA_SADC0, CHNL_NUM_ADC2, false);
							 | 
						||
| 
								 | 
							
								    sadc_phase_clr_auto_en(ANA_SADC0, CHNL_NUM_ADC3, false);
							 | 
						||
| 
								 | 
							
								    sadc_phase_clr_auto_en(ANA_SADC0, CHNL_NUM_ADC4, false);
							 | 
						||
| 
								 | 
							
								    sadc_phase_clr_auto_en(ANA_SADC0, CHNL_NUM_ADC5, false);
							 | 
						||
| 
								 | 
							
								    sadc_phase_clr_auto_en(ANA_SADC0, CHNL_NUM_ADC6, false);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if DT_SADC_TEST_MODE == DT_SADC_DUAL_13PHASE_MODE
							 | 
						||
| 
								 | 
							
								    sadc_phase_raw_regdata_en(ANA_SADC1, CHNL_NUM_ADC0, true);
							 | 
						||
| 
								 | 
							
								    sadc_phase_raw_regdata_en(ANA_SADC1, CHNL_NUM_ADC1, true);
							 | 
						||
| 
								 | 
							
								    sadc_phase_raw_regdata_en(ANA_SADC1, CHNL_NUM_ADC2, true);
							 | 
						||
| 
								 | 
							
								    sadc_phase_raw_regdata_en(ANA_SADC1, CHNL_NUM_ADC3, true);
							 | 
						||
| 
								 | 
							
								    sadc_phase_raw_regdata_en(ANA_SADC1, CHNL_NUM_ADC4, true);
							 | 
						||
| 
								 | 
							
								    sadc_phase_raw_regdata_en(ANA_SADC1, CHNL_NUM_ADC5, true);
							 | 
						||
| 
								 | 
							
								    sadc_phase_raw_regdata_en(ANA_SADC1, CHNL_NUM_ADC6, true);
							 | 
						||
| 
								 | 
							
								    /* clr auto */
							 | 
						||
| 
								 | 
							
								    sadc_phase_clr_auto_en(ANA_SADC1, CHNL_NUM_ADC0, false);
							 | 
						||
| 
								 | 
							
								    sadc_phase_clr_auto_en(ANA_SADC1, CHNL_NUM_ADC1, false);
							 | 
						||
| 
								 | 
							
								    sadc_phase_clr_auto_en(ANA_SADC1, CHNL_NUM_ADC2, false);
							 | 
						||
| 
								 | 
							
								    sadc_phase_clr_auto_en(ANA_SADC1, CHNL_NUM_ADC3, false);
							 | 
						||
| 
								 | 
							
								    sadc_phase_clr_auto_en(ANA_SADC1, CHNL_NUM_ADC4, false);
							 | 
						||
| 
								 | 
							
								    sadc_phase_clr_auto_en(ANA_SADC1, CHNL_NUM_ADC5, false);
							 | 
						||
| 
								 | 
							
								    sadc_phase_clr_auto_en(ANA_SADC1, CHNL_NUM_ADC6, false);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* 7phase mode */
							 | 
						||
| 
								 | 
							
								    sadc_phase_mode_set(ANA_SADC0, 1);
							 | 
						||
| 
								 | 
							
								#if DT_SADC_TEST_MODE == DT_SADC_DUAL_13PHASE_MODE
							 | 
						||
| 
								 | 
							
								    sadc_phase_mode_set(ANA_SADC1, 1);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //step2: config analog info according to requirement
							 | 
						||
| 
								 | 
							
								    /* enable ch2 and ch3 pad */
							 | 
						||
| 
								 | 
							
								    sadc_chn2_pad_en(SADC_PHASE2, true);//single
							 | 
						||
| 
								 | 
							
								    sadc_mtr2pad_en_neg(SADC_PHASE2, false);//diff
							 | 
						||
| 
								 | 
							
								    sadc_mtr3pad_en(SADC_PHASE3_0, true);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    sadc_mtr_sel_scl_mux(SADC_PHASE0, 0x0);
							 | 
						||
| 
								 | 
							
								    sadc_phase_sel_scl_mux(SADC_PHASE0, SADC_TSW_SEL_SCL_MUX_SING_CH0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    sadc_mtr_sel_scl_mux(SADC_PHASE1, 0x0);
							 | 
						||
| 
								 | 
							
								    sadc_phase_sel_scl_mux(SADC_PHASE1, SADC_TSW_SEL_SCL_MUX_SING_CH1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    sadc_mtr_sel_scl_mux(SADC_PHASE2, 0x0);
							 | 
						||
| 
								 | 
							
								    sadc_phase_sel_scl_mux(SADC_PHASE2, SADC_TSW_SEL_SCL_MUX_SING_CH2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    sadc_mtr_sel_scl_mux(SADC_PHASE3_0, 0x0);
							 | 
						||
| 
								 | 
							
								    sadc_phase_sel_scl_mux(SADC_PHASE3_0, SADC_TSW_SEL_SCL_MUX_SING_CH3);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    sadc_mtr_sel_scl_mux(SADC_PHASE3_1, 0x0);
							 | 
						||
| 
								 | 
							
								    sadc_phase_sel_scl_mux(SADC_PHASE3_1, SADC_TSW_SEL_SCL_MUX_SING_CH4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    sadc_mtr_sel_scl_mux(SADC_PHASE3_2, 0x0);
							 | 
						||
| 
								 | 
							
								    sadc_phase_sel_scl_mux(SADC_PHASE3_2, SADC_TSW_SEL_SCL_MUX_SING_CH5);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    sadc_mtr_sel_scl_mux(SADC_PHASE3_3, 0x0);
							 | 
						||
| 
								 | 
							
								    sadc_phase_sel_scl_mux(SADC_PHASE3_3, SADC_TSW_SEL_SCL_MUX_SING_CH6);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if DT_SADC_TEST_MODE == DT_SADC_DUAL_13PHASE_MODE
							 | 
						||
| 
								 | 
							
								    sadc1_phase_sel_scl_mux(SADC_PHASE0, SADC_TSW_SEL_SCL_MUX_SING_CH0);
							 | 
						||
| 
								 | 
							
								    sadc1_phase_sel_scl_mux(SADC_PHASE1, SADC_TSW_SEL_SCL_MUX_SING_CH1);
							 | 
						||
| 
								 | 
							
								    sadc1_phase_sel_scl_mux(SADC_PHASE2, SADC_TSW_SEL_SCL_MUX_SING_CH2);
							 | 
						||
| 
								 | 
							
								    sadc1_phase_sel_scl_mux(SADC_PHASE3_0, SADC_TSW_SEL_SCL_MUX_SING_CH3);
							 | 
						||
| 
								 | 
							
								    sadc1_phase_sel_scl_mux(SADC_PHASE3_1, SADC_TSW_SEL_SCL_MUX_SING_CH4);
							 | 
						||
| 
								 | 
							
								    sadc1_phase_sel_scl_mux(SADC_PHASE3_2, SADC_TSW_SEL_SCL_MUX_SING_CH5);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //step3:
							 | 
						||
| 
								 | 
							
								    sadc_start_en(ANA_SADC0, true);
							 | 
						||
| 
								 | 
							
								#if DT_SADC_TEST_MODE == DT_SADC_DUAL_13PHASE_MODE
							 | 
						||
| 
								 | 
							
								    sadc_start_en(ANA_SADC1, true);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //step4: polling 7 phase data
							 | 
						||
| 
								 | 
							
								    sadc_data_polling();
							 | 
						||
| 
								 | 
							
								#if DT_SADC_TEST_MODE == DT_SADC_DUAL_13PHASE_MODE
							 | 
						||
| 
								 | 
							
								    sadc1_data_polling();
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    iot_printf("start dump data phase data:\n");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for(uint32_t i = 0; i < DT_SADC_SAMPLE_QUANTITY; i++)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        for(uint32_t phase_idx = 0; phase_idx < 7; phase_idx++)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            chn_data[phase_idx][i] = (chn_data[phase_idx][i]) & 0xfffff;
							 | 
						||
| 
								 | 
							
								            if ((chn_data[phase_idx][i]) & 0x80000) {
							 | 
						||
| 
								 | 
							
								                chn_data[phase_idx][i] = (chn_data[phase_idx][i]) - 0x100000;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if DT_SADC_TEST_MODE == DT_SADC_DUAL_13PHASE_MODE
							 | 
						||
| 
								 | 
							
								        for(uint32_t phase_idx1 = 0; phase_idx1 < 6; phase_idx1++)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            chn_data1[phase_idx1][i] = (chn_data1[phase_idx1][i]) & 0xfffff;
							 | 
						||
| 
								 | 
							
								            if ((chn_data1[phase_idx1][i]) & 0x80000) {
							 | 
						||
| 
								 | 
							
								                chn_data1[phase_idx1][i] = (chn_data1[phase_idx1][i]) - 0x100000;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if DT_SADC_TEST_MODE == DT_SADC_DUAL_13PHASE_MODE
							 | 
						||
| 
								 | 
							
								        iot_printf("%d,%d,%d,%d,%d,%d,%d  %d,%d,%d,%d,%d,%d\n", \
							 | 
						||
| 
								 | 
							
								            chn_data[0][i], chn_data[1][i], chn_data[2][i], \
							 | 
						||
| 
								 | 
							
								            chn_data[3][i], chn_data[4][i], chn_data[5][i], chn_data[6][i], \
							 | 
						||
| 
								 | 
							
								            chn_data1[0][i], chn_data1[1][i], chn_data1[2][i], \
							 | 
						||
| 
								 | 
							
								            chn_data1[3][i], chn_data1[4][i], chn_data1[5][i]);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								        iot_printf("%d,%d,%d,%d,%d,%d,%d\n", \
							 | 
						||
| 
								 | 
							
								            chn_data[0][i], chn_data[1][i], chn_data[2][i], \
							 | 
						||
| 
								 | 
							
								            chn_data[3][i], chn_data[4][i], chn_data[5][i], chn_data[6][i]);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if DT_SADC_DBG_EN
							 | 
						||
| 
								 | 
							
								    sadc_reg_dump_dbg();
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    while(1);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void sadc_multi_phase_test()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* adc init */
							 | 
						||
| 
								 | 
							
								    sadc_init(ANA_SADC0, NULL);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* mtr sel scl from Meter or vtemp/vcm */
							 | 
						||
| 
								 | 
							
								#if DT_SADC_MTR_SEL_SCL_EN == 1
							 | 
						||
| 
								 | 
							
								    sadc_mtr_sel_scl_mux(0, 0x7);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    sadc_mtr_sel_scl_mux(0, 0x0);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* init discard number for crosstalk */
							 | 
						||
| 
								 | 
							
								    sadc_discard_num_set(ANA_SADC0, 0, 6);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* dual sadc mode */
							 | 
						||
| 
								 | 
							
								    sadc_dual_mode_test();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void sadc_single_phase_test()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t sample_data = 0;
							 | 
						||
| 
								 | 
							
								    int32_t sample_tmp =0, sum_data = 0;
							 | 
						||
| 
								 | 
							
								    uint8_t err_num = 0;
							 | 
						||
| 
								 | 
							
								    uint32_t sum_cnt = 0;
							 | 
						||
| 
								 | 
							
								    float current_factor = \
							 | 
						||
| 
								 | 
							
								        (DT_SADC_REF_VOL_V * DT_SADC_CT_RATIO * DT_SADC_DIV_SQRT_2)/\
							 | 
						||
| 
								 | 
							
								        (DT_SADC_REF_SUM_DATA * DT_SADC_CURR_OHM_VAL);
							 | 
						||
| 
								 | 
							
								#if !DT_VOL_TRANSFORMER_SUPPORT
							 | 
						||
| 
								 | 
							
								    float vol_factor = (DT_SADC_REF_VOL_V * DT_SADC_DIV_SQRT_2 *\
							 | 
						||
| 
								 | 
							
								        (DT_SADC_VOL_R_NUM * DT_SADC_COL_R_CAL + DT_SADC_VOL_R_SHARE))/\
							 | 
						||
| 
								 | 
							
								        (DT_SADC_REF_SUM_DATA * DT_SADC_VOL_R_SHARE);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    float vol_factor = (DT_SADC_REF_VOL_V * DT_SADC_DIV_SQRT_2 *\
							 | 
						||
| 
								 | 
							
								        (DT_SADC_VOL_R_NUM * DT_SADC_COL_R_CAL))/\
							 | 
						||
| 
								 | 
							
								        (DT_SADC_REF_SUM_DATA * DT_SADC_VOL_R_SHARE);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    iot_printf("start sadc dump:\n");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* adc init */
							 | 
						||
| 
								 | 
							
								    sadc_init(ANA_SADC0, NULL);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* channel and phase init */
							 | 
						||
| 
								 | 
							
								    /* 1 phase mode, only phase 0*/
							 | 
						||
| 
								 | 
							
								    sadc_phase_mode_set(ANA_SADC0, 0);
							 | 
						||
| 
								 | 
							
								    sadc_phase_sel(ANA_SADC0, 0);
							 | 
						||
| 
								 | 
							
								    sadc_phase_sel_scl_mux(0, 0 + SADC_CHANNEL_EXT);
							 | 
						||
| 
								 | 
							
								    sadc_adc_gain_set(0, 0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* mtr sel scl from Meter or vtemp/vcm */
							 | 
						||
| 
								 | 
							
								#if DT_SADC_MTR_SEL_SCL_EN == 1
							 | 
						||
| 
								 | 
							
								    sadc_mtr_sel_scl_mux(0, 0x7);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    sadc_mtr_sel_scl_mux(0, 0x0);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* start en */
							 | 
						||
| 
								 | 
							
								    sadc_start_en(ANA_SADC0, 1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* init discard number for crosstalk */
							 | 
						||
| 
								 | 
							
								    sadc_discard_num_set(ANA_SADC0, 0, 6);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* sel scl */
							 | 
						||
| 
								 | 
							
								#if DT_SADC_TEST_MODE == DT_SADC_VOL_MODE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if !DT_VOL_TRANSFORMER_SUPPORT
							 | 
						||
| 
								 | 
							
								    /* ref vcm to gnd */
							 | 
						||
| 
								 | 
							
								    sadc_vcm_sel_mux_set(ANA_SADC0, SADC_PHASE0, ANA_SADC_VCM_SEL_GND);
							 | 
						||
| 
								 | 
							
								    /* ADC 500mV */
							 | 
						||
| 
								 | 
							
								    sadc_rst_ch_ext_set(ANA_SADC0, SADC_PHASE0, ANA_SADC_ADC_SEL_500MV);
							 | 
						||
| 
								 | 
							
								    /* input 0 and inner raise input to 500mV for PGA */
							 | 
						||
| 
								 | 
							
								    sadc_tsw_sens_set(ANA_SADC0, SADC_PHASE0, ANA_SADC_TSW_PGA_500MV);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* bond phase and channel */
							 | 
						||
| 
								 | 
							
								    sadc_phase_sel_scl_mux(0, SADC_TSW_SEL_SCL_MUX_SING_CH0);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    sadc_phase_sel_scl_mux(0, SADC_TSW_SEL_SCL_MUX_DIFF_CH10);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    while(1)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        sample_data = sadc_poll_data_start(0, 0, 0, &err_num);
							 | 
						||
| 
								 | 
							
								        if (1 == err_num) {
							 | 
						||
| 
								 | 
							
								            iot_printf("sadc_sum_get time out!\n");
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            sample_data = sample_data & 0xfffff;
							 | 
						||
| 
								 | 
							
								            if (sample_data & 0x80000) {
							 | 
						||
| 
								 | 
							
								                sample_tmp = sample_data - 0x100000;
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                sample_tmp = sample_data;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if 1
							 | 
						||
| 
								 | 
							
								        if (sum_cnt < DT_SADC_SUM_NUM) {
							 | 
						||
| 
								 | 
							
								            sum_data += sample_tmp;
							 | 
						||
| 
								 | 
							
								            sum_cnt++;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								#if DT_SADC_TEST_MODE == DT_SADC_VOL_MODE
							 | 
						||
| 
								 | 
							
								            iot_printf("%d, %f\n", sum_data, (float)sum_data * vol_factor);
							 | 
						||
| 
								 | 
							
								            (void)current_factor;
							 | 
						||
| 
								 | 
							
								#elif DT_SADC_TEST_MODE == DT_SADC_CURRENT_MODE
							 | 
						||
| 
								 | 
							
								            iot_printf("%d, %f\n", sum_data, (float)sum_data * current_factor);
							 | 
						||
| 
								 | 
							
								            (void)vol_factor;
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								            iot_printf("%d\n", sum_data);
							 | 
						||
| 
								 | 
							
								            (void)current_factor;
							 | 
						||
| 
								 | 
							
								            (void)vol_factor;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								            (void)current_factor;
							 | 
						||
| 
								 | 
							
								            sum_data = sample_tmp;
							 | 
						||
| 
								 | 
							
								            sum_cnt= 1;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        //while(dly_cnt--);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								        iot_printf("%d,\n", sample_tmp);
							 | 
						||
| 
								 | 
							
								        (void)sum_data;
							 | 
						||
| 
								 | 
							
								        (void)sum_cnt;
							 | 
						||
| 
								 | 
							
								        (void)current_factor;
							 | 
						||
| 
								 | 
							
								        (void)vol_factor;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void sadc_test_task(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* sadc0 soft reset */
							 | 
						||
| 
								 | 
							
								    pmu_soft_reset(SADC_CH1_SOFT_RST_OFFSET);
							 | 
						||
| 
								 | 
							
								#if DT_SADC_TEST_MODE == DT_SADC_DUAL_13PHASE_MODE
							 | 
						||
| 
								 | 
							
								    /* sadc1 soft reset */
							 | 
						||
| 
								 | 
							
								    pmu_soft_reset(SADC_CH2_SOFT_RST_OFFSET);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if DT_SADC_TEST_MODE >= DT_SADC_DUAL_7PHASE_MODE
							 | 
						||
| 
								 | 
							
								    sadc_multi_phase_test();
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    /* voltage or current mode */
							 | 
						||
| 
								 | 
							
								    sadc_single_phase_test();
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#include "dma_hw_rf.h"
							 | 
						||
| 
								 | 
							
								#include "apb.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								extern void dma_hw_rst();
							 | 
						||
| 
								 | 
							
								extern void dma_hw_fsm_rst();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void sadc_desc_data_process(
							 | 
						||
| 
								 | 
							
								    uint32_t desc_addr, uint32_t buf_addr, bool_t loop_en)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    volatile uint32_t tmp = 0;
							 | 
						||
| 
								 | 
							
								    volatile bool_t done_flag = false;
							 | 
						||
| 
								 | 
							
								    volatile int32_t sample_tmp = 0;
							 | 
						||
| 
								 | 
							
								    volatile uint32_t i = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* wait desc1 done */
							 | 
						||
| 
								 | 
							
								    do {
							 | 
						||
| 
								 | 
							
								        tmp = SOC_READ_REG(desc_addr) & 0x40000000;
							 | 
						||
| 
								 | 
							
								        done_flag = tmp >> 30;
							 | 
						||
| 
								 | 
							
								    } while (done_flag == 0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (loop_en) {
							 | 
						||
| 
								 | 
							
								        /* clr owner */
							 | 
						||
| 
								 | 
							
								        SOC_WRITE_REG(desc_addr, \
							 | 
						||
| 
								 | 
							
								            (1 << 31) | \
							 | 
						||
| 
								 | 
							
								            (0 << 24) | \
							 | 
						||
| 
								 | 
							
								            (0xFFC << 12) | \
							 | 
						||
| 
								 | 
							
								            (0xFFC << 0));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (i = 0; i < (0xFFC >> 2); i++)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        tmp = SOC_READ_REG(buf_addr + (i << 2)) & 0xfffff;
							 | 
						||
| 
								 | 
							
								        if (tmp & 0x80000) {
							 | 
						||
| 
								 | 
							
								            sample_tmp = tmp - 0x100000;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            sample_tmp = tmp;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /* print will block dma */
							 | 
						||
| 
								 | 
							
								        if (!loop_en) {
							 | 
						||
| 
								 | 
							
								            iot_printf("%d\n", sample_tmp);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    iot_printf("%d\n", 2500);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void sadc_test_task(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    volatile uint32_t tmp = 0;
							 | 
						||
| 
								 | 
							
								    volatile bool_t loop_flag = false;
							 | 
						||
| 
								 | 
							
								    int cnt = 0;
							 | 
						||
| 
								 | 
							
								    desc_t *rx = NULL;
							 | 
						||
| 
								 | 
							
								    const int desc_size = sizeof(desc_t);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* apb enable */
							 | 
						||
| 
								 | 
							
								    apb_enable(APB_DMA_HW);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* dma reset */
							 | 
						||
| 
								 | 
							
								    dma_hw_rst();
							 | 
						||
| 
								 | 
							
								    dma_hw_fsm_rst();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* adc init */
							 | 
						||
| 
								 | 
							
								    sadc_init(ANA_SADC0, NULL);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* channel and phase init */
							 | 
						||
| 
								 | 
							
								    /* 1 phase mode, only phase 0*/
							 | 
						||
| 
								 | 
							
								    sadc_phase_mode_set(ANA_SADC0, 0);
							 | 
						||
| 
								 | 
							
								    sadc_phase_sel(ANA_SADC0, 0);
							 | 
						||
| 
								 | 
							
								    sadc_phase_sel_scl_mux(0, 0 + SADC_CHANNEL_EXT);
							 | 
						||
| 
								 | 
							
								    sadc_adc_gain_set(0, 0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* mtr sel scl from Meter or vtemp/vcm */
							 | 
						||
| 
								 | 
							
								    sadc_mtr_sel_scl_mux(0, 0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* start en */
							 | 
						||
| 
								 | 
							
								    sadc_start_en(ANA_SADC0, 1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* sel scl */
							 | 
						||
| 
								 | 
							
								    sadc_phase_sel_scl_mux(0, SADC_TSW_SEL_SCL_MUX_DIFF_CH10);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* enable AI ram */
							 | 
						||
| 
								 | 
							
								    tmp = SOC_READ_REG(0x50000008);
							 | 
						||
| 
								 | 
							
								    SOC_WRITE_REG(0x50000008, tmp | 0x80);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* alloc mem for desc */
							 | 
						||
| 
								 | 
							
								    pdesc_rx = (desc_t *)os_mem_malloc(0, TEST_DESC_NUM * desc_size);
							 | 
						||
| 
								 | 
							
								    /* check alloc result */
							 | 
						||
| 
								 | 
							
								    if (NULL == pdesc_rx) {
							 | 
						||
| 
								 | 
							
								        return ;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    rx = pdesc_rx;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* To fill descriptors */
							 | 
						||
| 
								 | 
							
								    for(cnt = 0; cnt < TEST_DESC_NUM; cnt++)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        /* for RX */
							 | 
						||
| 
								 | 
							
								        DMA_MAKE_DESC(rx, \
							 | 
						||
| 
								 | 
							
								            0x73fd0000 + cnt * 0x10000, \
							 | 
						||
| 
								 | 
							
								            0xFFC, \
							 | 
						||
| 
								 | 
							
								            0xFFC, \
							 | 
						||
| 
								 | 
							
								            0, \
							 | 
						||
| 
								 | 
							
								            0, \
							 | 
						||
| 
								 | 
							
								            0, \
							 | 
						||
| 
								 | 
							
								            DESC_OWNER_DMA);
							 | 
						||
| 
								 | 
							
								        rx->n_ptr = (desc_t*)((int)rx + desc_size);
							 | 
						||
| 
								 | 
							
								        rx->l_ptr = (desc_t*)((int)rx - desc_size);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        rx = (desc_t*)((int)rx + desc_size);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    rx = (desc_t*)((int)pdesc_rx + desc_size*(TEST_DESC_NUM-1));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    pdesc_rx->l_ptr = rx;
							 | 
						||
| 
								 | 
							
								    rx->n_ptr = pdesc_rx;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    pdesc_rx_end = pdesc_rx;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* soc rx link */
							 | 
						||
| 
								 | 
							
								    DMA_HW_RF_WRITE_REG(CFG_DMA_HW_RX_CHN12_CFG0_ADDR, (uint32_t)pdesc_rx);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* start */
							 | 
						||
| 
								 | 
							
								    tmp = DMA_HW_RF_READ_REG(CFG_DMA_HW_RX_CHN12_CFG1_ADDR);
							 | 
						||
| 
								 | 
							
								    REG_FIELD_SET(CHN12_RX_START, tmp, 1);
							 | 
						||
| 
								 | 
							
								    DMA_HW_RF_WRITE_REG(CFG_DMA_HW_RX_CHN12_CFG1_ADDR, tmp);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    while(1)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        for(cnt = 0; cnt < TEST_DESC_NUM; cnt++)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            /* data process */
							 | 
						||
| 
								 | 
							
								            sadc_desc_data_process( \
							 | 
						||
| 
								 | 
							
								                (uint32_t)pdesc_rx, \
							 | 
						||
| 
								 | 
							
								                0x73fd0000 + cnt * 0x10000, \
							 | 
						||
| 
								 | 
							
								                loop_flag);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        while(!loop_flag);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 |