⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dynamic_clock.c

📁 MMI层OBJ不能完全编译
💻 C
📖 第 1 页 / 共 2 页
字号:
 /************* Revision Controle System Header *************
 *                  GSM Layer 1 software
 * DYNAMIC_CLOCK_C
 *
 *        Filename dynamic_clock.c
 *  Copyright 2003 (C) Texas Instruments
 *
 ************* Revision Controle System Header *************/

/*
 * Only SAMSON/CALYPSO families are considered for dynamic clock configuration.
 */

#include "chipset.cfg"
#include "board.cfg"

#include "../../drivers/drv_core/pin_config.h"
#define INTEL_FLASH
#if (CHIPSET == 4) || (CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 10) || \
    (CHIPSET == 11) || (CHIPSET == 12) || (CHIPSET == 15)

  #include "nucleus.h"

  /* Include file for DSP latency definition */
  #include "l1_macro.h"
  #include "l1_confg.h"
  #include "l1_types.h"
  #include "sys_types.h"
  #include "l1_const.h"


  /* Include file for l1_config variable */
  #if TESTMODE
    #include "l1tm_defty.h"
  #endif // TESTMODE

  #if (AUDIO_TASK == 1)
    #include "l1audio_const.h"
    #include "l1audio_cust.h"
    #include "l1audio_defty.h"
  #endif // AUDIO_TASK

  #if (L1_GTT == 1)
    #include "l1gtt_const.h"
    #include "l1gtt_defty.h"
  #endif

  #if (L1_MP3 == 1)
    #include "l1mp3_defty.h"
  #endif

  #if (L1_MIDI == 1)
    #include "l1midi_defty.h"
  #endif

  #include "l1_defty.h"
  //#include "cust_os.h"
  #include "l1_msgty.h"
  #include "l1_varex.h"
  #include "l1_proto.h"


  /* Include file for H/W configuration impacted by clock update */
  #include "dynamic_clock.h"
  #include "clkm.h"
  #include "mem.h"
  #include "rhea_arm.h"
  #include "ulpd.h"

  #define _DYNAMIC_CLOCK_C_

  #if (CHIPSET == 4)
    #include "dynamic_clock_4.h"

  #elif (CHIPSET == 7) || (CHIPSET == 8)
    #include "dynamic_clock_7_8.h"

  #elif (CHIPSET == 10) || (CHIPSET == 11)
    #include "dynamic_clock_10_11.h"
    
  #elif (CHIPSET == 12)
    #include "dynamic_clock_12.h"
  
  #elif (CHIPSET == 15)
    #include "dynamic_clock_15.h"
  #else
    #error "This CHIPSET configuration is not supported"
  #endif


  extern void INT_DisableIRQ(void);
  extern void INT_EnableIRQ(void);
  

  /***********************************************************************************************
   *          Only SAMSON/CALYPSO families are considered for dynamic clock configuration.
   ***********************************************************************************************
   *
   *                         Supported clock configuration                           
   *
   *
   *       CHIPSET                78/78/13    78/78/39   104/104/52    156/78/52   130/130/65
   *                                 (0)         (1)          (2)         (3)         (4)
   *
   *  HERCULES              (2)      NA           NA          NA          NA          NA
   *  ULYSSE/ULYSSE G0      (3)      NA           NA          NA          NA          NA
   *  ULYSSE C035           (9)      NA           NA          NA          NA          NA
   *  ULYSSE G1 (13MHz)     (5)      NA           NA          NA          NA          NA
   *  ULYSSE G1 (26MHz)     (6)      NA           NA          NA          NA          NA
   *
   *  SAMSON C07            (4)      X            ?           NA          NA          NA
   *  CALYPSO C05 Rev A     (7)      X            X           NA          NA          NA
   *  CALYPSO C05 Rev B     (8)      X            X           NA          NA          NA
   *  CALYPSO C035          (10)     NA           X           X           NA          NA
   *  CALYPSO LITE C035     (11)     NA           X           X           NA          NA
   *  CALYPSO PLUS c035     (12)     NA           X           X           X           X
   *
   *
   *
   *
   *           BOARD                CHIPSET                         Access Time (ns)
   *                                                     CS0    CS1    CS2    CS3    CS4    CS5
   *  
   *    EVA4 (RAM)        (6)     CALYPSO PLUS           100    NA     NA     NA     100    100
   *                              CALYPSO C05/C035                                          NA
   *                              SAMSON                                                    NA
   *    C-Sample (RAM)    (8)     CALYPSO C05/SAMSON     100    100    NA                   NA    (RD108, RD308) FLASH : AM29DL322T-70 (AMD) - SRAM : IC806 ????
   *    C-Sample (FLASH)  (9)     CALYPSO C05/SAMSON     100    100    NA                   NA    (RD108, RD308) FLASH : AM29DL322T-70 (AMD) - SRAM : IC806 ????
   *    D-Sample (RAM)    (40)    CALYPSO C035/SAMSON    85     70     70                   NA    (RD316, RD112) FLASH/SRAM : 28F640W30B70 (Intel) - SRAM : K1S321615M-EE10 (Samsung)
   *                              CALYPSO C05             
   *    D-Sample (FLASH)  (41)    CALYPSO C035/SAMSON    70     70     85                   NA    (RD316, RD112) FLASH/SRAM : 28F640W30B70 (Intel) - SRAM : K1S321615M-EE10 (Samsung)
   *                              CALYPSO C05
   *    E-Sample (SRAM)   (42)    CALYPSO PLUS           NA     NA     NA      NA    70     70
   *    E-Sample (FLASH)  (43)    CALYPSO PLUS           NA     NA     NA      NA    70     70
   *
   *
   ***********************************************************************************************/



  T_DYNAMIC_CLOCK_CFG *p_dynamic_clock_cfg;
  SYS_UWORD32   d_dsp_cur_clk;     // Used to keep track of current DSP clock.
  INT old_int_mask;

#pragma CODE_SECTION(disable_ps_ram_burst, ".emifconf")
#pragma CODE_SECTION(enable_ps_ram_burst, ".emifconf")
#pragma CODE_SECTION(disable_flash_burst, ".emifconf")
  

  #pragma CODE_SECTION(enable_flash_burst, ".emifconf")
  #pragma CODE_SECTION(enable_flash_burst_mirror, ".emifconf")
  #pragma CODE_SECTION(lld_SetConfigRegCmd, ".emifconf")

//fangcj added
#pragma CODE_SECTION(read_ps_ram_bcr_reg, ".emifconf")
#pragma CODE_SECTION(read_flash_bcr_reg, ".emifconf")

void disable_ps_ram_burst ()
{
	SET_EMIF_NO_DYN_WAIT(0, 1); // '1' = Dynamic wait state disabled
	SET_EMIF_CFG(0, 2, 0, 1, 2, 3, 0, 1); //	SET_EMIF_CFG(CS, BTWST, MEMMODE, WELEN, WRWST, RDWST, RT, FCLKDIV)
	SET_EMIF_ADVANCED_CFG(0, 0, 0, 0, 0, 0, 2);//	SET_EMIF_ADVANCED_CFG(CS, RC, CLKMSK, BTMODE, ADVHOLD, OEHOLD, OESETUP)
	// Prefetch OFF
	SET_EMIF_CONF_REG(0, 1, 0, 1, 1); //	(WP, FLUSH_PREFETCH, PREFETCH_MODE, PDE, PWD_EN)

	MEM16 (PSRAM_OFFSET + 0x007FFFF0); // Unlock sequence
	MEM16 (PSRAM_OFFSET + 0x007FFFFE);
	MEM16 (PSRAM_OFFSET + 0x007FFFFE);
// Due to special handling of the write-strobe, it is important that this code runs undisturbed and from internal RAM
	SET_EMIF_CONF_REG(0, 1, 0, 1, 1); //	(WP, FLUSH_PREFETCH, PREFETCH_MODE, PDE, PWD_EN)
//	SET_EMIF_CONF_REG(0, 0, 1, 1, 1); //	(WP, FLUSH_PREFETCH, PREFETCH_MODE, PDE, PWD_EN)
//	MEM16 (0xfffef1de) = 0x0001;	// Set RnW = 0 to generate nCS controlled writes (special unlock requirement)
	MEM16 (PSRAM_OFFSET + 0x007FFFFE) = 0x0001;
//	MEM16 (0xfffef1de) = 0x0000;	// Set RnW = normal
	MEM16 (PSRAM_OFFSET + 0x007FFFFE) = 0x9d4f;	// Default async
}

void enable_ps_ram_burst ()
{

  #if 0
	disable_ps_ram_burst ();

	// Configure the psRAM device for burst operation:
	MEM16 (PSRAM_OFFSET + 0x007FFFF0);
	MEM16 (PSRAM_OFFSET + 0x007FFFFE);
	MEM16 (PSRAM_OFFSET + 0x007FFFFE);
// Due to special handling of the write-strobe, it is important that this code runs undisturbed and from internal RAM
	SET_EMIF_CONF_REG(0, 1, 0, 0, 0); //	(WP, FLUSH_PREFETCH, PREFETCH_MODE, PDE, PWD_EN)
//	SET_EMIF_CONF_REG(0, 0, 1, 1, 1); //	(WP, FLUSH_PREFETCH, PREFETCH_MODE, PDE, PWD_EN)
//	MEM16 (0xfffef1de) = 0x0001;	// Set RnW = 0 to generate nCS controlled writes !!!!!!
	MEM16 (PSRAM_OFFSET + 0x007FFFFE) = 0x0001;
//	MEM16 (0xfffef1de) = 0x0000;	// Set RnW = normal
	MEM16 (PSRAM_OFFSET + 0x007FFFFE) = 
		(PSRAM_OPERATING_MODE << 15) | 
		(PSRAM_LATENCY_COUNTER << 11) | 
		(PSRAM_WAIT_POLARITY << 10) | 
		(PSRAM_WAIT_CONFIGURATION << 8) | 
		(PSRAM_CLOCK_CONFIGURATION << 6) | 
		(PSRAM_OUTPUT_IMPEDANCE << 5) | 
		(PSRAM_BURST_WRAP << 3) | 
		(PSRAM_BURST_LENGTH);	// Enable psRAM Burst mode

	// Configure EMIF for burst operation:
//	SET_EMIF_CONF_REG(0, 0, 1, 1, 1); //	(WP, FLUSH_PREFETCH, PREFETCH_MODE, PDE, PWD_EN)
//// Modified by Ranga to check if Instruction and Data prefetch works
	SET_EMIF_CONF_REG(0, 0, 0, 1, 1); //	(WP, FLUSH_PREFETCH, PREFETCH_MODE, PDE, PWD_EN)
	SET_EMIF_NO_DYN_WAIT(0, 0); // '0' = Dynamic wait state enabled
	SET_EMIF_ADVANCED_CFG(0, 0, 0, 0, 0, 0, 2);//	SET_EMIF_ADVANCED_CFG(CS, RC, CLKMSK, BTMODE, ADVHOLD, OEHOLD, OESETUP)
	SET_EMIF_CFG(0, 1, 2, 2, 0, 3, 0, 1); //	SET_EMIF_CFG(CS, BTWST, MEMMODE, WELEN, WRWST, RDWST, RT, FCLKDIV)

	SET_EMIF_CONF_REG(0, 0, 0, 0, 0); //	(WP, FLUSH_PREFETCH, PREFETCH_MODE, PDE, PWD_EN)

  #endif


  /// wangwang : get those code from intel
// 061227

// Configure the psRAM device for burst operation:
 /* BCR */
 CONF_GPIO_2  = MUX_CFG(0, PULLOFF);
 GPIO_DIRECTION_OUT(2);
 GPIO_SET_OUTPUT(2);

 MEM16(PSRAM_OFFSET+(0x00081942<<1))=0xff;
 GPIO_CLEAR_OUTPUT(2);

 
 SET_EMIF_CONF_REG(0, 0, 0, 0, 1);
 SET_EMIF_NO_DYN_WAIT(0 ,0);
 SET_EMIF_ADVANCED_CFG(0, 0, 0, 1, 0, 0, 2);// SET_EMIF_ADVANCED_CFG(CS, RC, CLKMSK, BTMODE, ADVHOLD, OEHOLD, OESETUP)
 SET_EMIF_CFG(0, 1, 2, 3, 0, 3, 0, 1); // SET_EMIF_CFG(CS, BTWST, MEMMODE, WELEN, WRWST, RDWST, RT, FCLKDIV)
 //SET_EMIF_CONF_REG(0, 0, 1, 0, 0); 

 /* 070315 for power consuming bug, we should config this reg
    in several steps. note !!!! */
  SET_EMIF_CONF_REG(0, 0, 2, 0, 1); 

 	MEM16 (0xfffffb02) = 0x00;
	MEM16 (0xfffffb02) = 0x13;    //pinghua check it for lenovo 
}




typedef SYS_UWORD16 FLASHDATA;

#define FLASH_OFFSET(b,o)       (*(( (volatile FLASHDATA*)(b) ) + (o)))

#define FLASH_WR(b,o,d)         FLASH_OFFSET((b),(o)) = (d)
#define FLASH_RD(b,o)           FLASH_OFFSET((b),(o))

#define LLD_DEV_MULTIPLIER 0x00000001
#define LLD_DB_READ_MASK   0x0000FFFF
#define LLD_DEV_READ_MASK  0x0000FFFF
#define LLD_UNLOCK_ADDR1   0x00000555
#define LLD_UNLOCK_ADDR2   0x000002AA
#define LLD_BYTES_PER_OP   0x00000002
#define LLD_BUFFER_SIZE    16

#define NOR_UNLOCK_DATA1                 ((FLASHDATA)0xAAAAAAAA)
#define NOR_UNLOCK_DATA2                 ((FLASHDATA)0x55555555)
#define WSXXX_SET_CONFIG_CMD      ((FLASHDATA)0xD0D0D0D0)
#define WSXXX_SET_CONFIG_DATA      ((FLASHDATA)0xC6C6C6C6)
/******************************************************************************
* 
* lld_SetConfigRegCmd 
*
* RETURNS: n/a
*
*/
void lld_SetConfigRegCmd
(
FLASHDATA *   base_addr,
FLASHDATA value
)
{
  FLASH_WR(base_addr, LLD_UNLOCK_ADDR1, NOR_UNLOCK_DATA1);
  FLASH_WR(base_addr, LLD_UNLOCK_ADDR2, NOR_UNLOCK_DATA2);
  FLASH_WR(base_addr, LLD_UNLOCK_ADDR1, WSXXX_SET_CONFIG_CMD);
  FLASH_WR(base_addr, 0, value);
  FLASH_WR(base_addr, 0, 0xF0);//fangcj add for reset flash
}
// Switch to asynchronous mode
void disable_flash_burst ()
{
	SET_EMIF_CONF_REG(0, 0, 0, 0, 0); //	(WP, FLUSH_PREFETCH, PREFETCH_MODE, PDE, PWD_EN)
	SET_EMIF_NO_DYN_WAIT(3, 1); // '1' = Dynamic wait state disabled
	SET_EMIF_CFG(3, 2, 0, 1, 2, 3, 0, 1); //	SET_EMIF_CFG(CS, BTWST, MEMMODE, WELEN, WRWST, RDWST, RT, FCLKDIV)
	SET_EMIF_ADVANCED_CFG(3, 1, 0, 0, 0, 0, 2);//	SET_EMIF_ADVANCED_CFG(CS, RC, CLKMSK, BTMODE, ADVHOLD, OEHOLD, OESETUP)
}

void enable_flash_burst ()
{

  #if 0
	MEM16 (0xFFFEF19C) |= 0x0001;	//  Enable A22 muxing
	MEM16 (0xFFFEF1A2) |= 0x0001;	//  Enable CKM pin-muxing
	MEM16 (0xFFFEF19E) |= 0x0018;	//  Enable nRDY pull-up
	disable_flash_burst ();
	// Configure the FLASH device for burst operation:
	MEM16 (0x800000+ FLASH_OFFSET_ADR) = 0xFFFF;
	MEM16 (0x800000+ FLASH_OFFSET_ADR + 0x555 * 2) = 0xaa;
	MEM16 (0x800000+ FLASH_OFFSET_ADR + 0x2AA * 2) = 0x55;
	MEM16 (0x800000+ FLASH_OFFSET_ADR + 0xb555 * 2) = 0xc0; // Continous

	// Configure EMIF for burst operation:
	// SET_EMIF_CONF_REG(0, 0, 0, 1, 1); //	(WP, FLUSH_PREFETCH, PREFETCH_MODE, PDE, PWD_EN)
	MEM16 (0xfffffb02) = 0x00;
	//SET_EMIF_NO_DYN_WAIT(3, 0); // '1' = Dynamic wait state enabled
	MEM16 (0xfffffb1c) &= 0x07;
	//SET_EMIF_ADVANCED_CFG(3, 1, 0, 0, 0, 0, 2);//	SET_EMIF_ADVANCED_CFG(CS, RC, CLKMSK, BTMODE, ADVHOLD, OEHOLD, OESETUP)
	MEM16 (0xfffffb1a) = 0x0802;
	//SET_EMIF_CFG(3, 2, 1, 1, 2, 3, 0, 1); //	SET_EMIF_CFG(CS, BTWST, MEMMODE, WELEN, WRWST, RDWST, RT, FCLKDIV)
	MEM16 (0xfffffb10) = 0x1231;
	MEM16 (0xfffffb12) = 0x0081;
	
       asm(" NOP");
         asm(" NOP");
         asm(" NOP");
         asm(" NOP");
         asm(" NOP");
         asm(" NOP");
         asm(" NOP");
         asm(" NOP");

	//SET_EMIF_CONF_REG(0, 0, 2, 1, 1); //	(WP, FLUSH_PREFETCH, PREFETCH_MODE, PDE, PWD_EN)
	MEM16 (0xfffffb02) = 0x00;
	MEM16 (0xfffffb02) = 0x10;

    asm(" NOP");
    asm(" NOP");
    asm(" NOP");
    asm(" NOP");
	MEM16 (0xfffffb02) = 0x13;
    asm(" NOP");
    asm(" NOP");
    asm(" NOP");
    asm(" NOP");

    #endif


    //wangwang : get those codes from intel
// 061227
  unsigned int address, RCR_value;
 
  RCR_value = 0x000018c2;
  address = FLASH_OFFSET_ADR + (RCR_value<<1);
  MEM16(address) = 0x0060;
  MEM16(address) = 0x0003;
 SET_EMIF_NO_DYN_WAIT(3,1);
 SET_EMIF_ADVANCED_CFG(3, 1, 0, 0, 0, 0, 3);
 SET_EMIF_CFG(3, 2,1, 4,3,3, 0, 1);
 //SET_EMIF_CONF_REG(0, 0, 2, 0, 1); 

 /* 070315 for power consuming bug, we should config this reg
    in several steps. note !!!! */
 //SET_EMIF_CONF_REG(0, 0, 2, 1, 1); 


  
  SET_EMIF_CONF_REG(0, 0, 0, 0, 0); //	(WP, FLUSH_PREFETCH, PREFETCH_MODE, PDE, PWD_EN)
	SET_EMIF_CONF_REG(0, 0, 2, 0, 0); //	(WP, FLUSH_PREFETCH, PREFETCH_MODE, PDE, PWD_EN)
	asm(" NOP");
		asm(" NOP");
		asm(" NOP");
		asm(" NOP");
	SET_EMIF_CONF_REG(0, 0, 2, 0, 1); //	(WP, FLUSH_PREFETCH, PREFETCH_MODE, PDE, PWD_EN)
	asm(" NOP");
		asm(" NOP");
		asm(" NOP");
		asm(" NOP");
	MEM16 (0xfffffb02) = 0x13;   //pinghua check it for lenovo!!!
}

void enable_flash_burst_mirror ()
{
	MEM16 (0xFFFEF19C) |= 0x0001;	//  Enable A22 muxing
	MEM16 (0xFFFEF1A2) |= 0x0001;	//  Enable CKM pin-muxing
	MEM16 (0xFFFEF19E) |= 0x0018;	//  Enable nRDY pull-up
	disable_flash_burst ();
	// Configure the FLASH device for burst operation:

// from LLD 
	/* write 0x1FCA -> BCR to config Flash burst */
	lld_SetConfigRegCmd((FLASHDATA *) FLASH_OFFSET_ADR,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -