target.c

来自「G.711/G.726语音采集源代码」· C语言 代码 · 共 726 行 · 第 1/2 页

C
726
字号
    
     extern void Timer0_Handler(void);
   //extern void Timer1_Handler(void);
    
    extern void EINT0_Handler(void);
    extern void EINT1_Handler(void);
    extern void EINT2_Handler(void);
    extern void EINT3_Handler(void);
    
    //extern void PWM_Handler(void); 
             
    //extern void I2C_Handler(void);
     
    extern void SPI_Handler(void);  
     
    VICIntEnClr    = 0XFFFFFFFF;             //禁止所有中断
    VICDefVectAddr = (uint32)IRQ_Handler;
    
    VICVectAddr0 = (uint32)UART1_Handler;
    VICVectCntl0 = (0x20 | 0x07);
    VICIntEnable = 1 << 7;
          
    VICVectAddr1 = (uint32)UART0_Handler;
    VICVectCntl1 = (0x20 | 0x06);
    VICIntEnable = 1 << 6;
    
    VICVectAddr2 = (uint32)EINT1_Handler;    // 装入EINT1 IRQ服务程序的起始地址
    VICVectCntl2 = (0x20 | 15);              // 通道号为14(EINT0)中断源允许优先级为1
    VICIntEnable = 1 << 15;                  //允许EXTINT1中断
    
    //VICVectAddr3 = (uint32)Timer1_Handler;  // Timer1 向量中断初始化
    //VICVectCntl3 = (0x20 | 0x05);
    VICIntEnable   = 1 << 5;
    
    VICVectAddr4 = (uint32)Timer0_Handler;
    VICVectCntl4 = (0x20 | 0x04);
    VICIntEnable = 1 << 4;
       
    VICVectAddr5 = (uint32)EINT0_Handler;    // 装入EINT0 IRQ服务程序的起始地址
    VICVectCntl5 = (0x20 | 14);              // 通道号为14(EINT0)中断源允许优先级为0
    VICIntEnable = 1 << 14;                  //允许EXTINT0中断
        
    VICVectAddr6 = (uint32)EINT2_Handler;    // 装入EINT2 IRQ服务程序的起始地址
    VICVectCntl6 = (0x20 | 16);              // 通道号为14(EINT0)中断源允许优先级为2
    VICIntEnable = 1 << 16;                  //允许EXTINT2中断
    
    VICVectAddr7 = (uint32)EINT3_Handler;    // 装入EINT3 IRQ服务程序的起始地址
    VICVectCntl7 = (0x20 | 17);              // 通道号为14(EINT0)中断源允许优先级为3
  //  VICIntEnable = 1 << 17;               //允许EXTINT3中断
  
    //VICVectAddr8  = (uint32)PWM_Handler;  // PWM 向量中断初始化
    //VICVectCntl8  = (0x20 | 0X08);
   // VICIntEnable  = 1 << 8;
       
    //VICVectAddr9  = (uint32)I2C_Handler;  // I2C 向量中断初始化
   // VICVectCntl9  = (0x20 | 9);
    //VICIntEnable   = 1 << 9; 
       
    VICVectAddr10  = (uint32)SPI_Handler;  // SPI0 向量中断初始化
    VICVectCntl10  = (0x20 | 10);
    VICIntEnable   = 1 << 10;        
 }
/***************************************************************************************************************
*                                               TargetInit
*
* Description: Initialize the target board; it is called in a necessary place, change it as needed
*
* Arguments  : 
*                     
* Returns    : 
*				       
* Note       :  根据实际需要可以改变代码
***************************************************************************************************************/
void TargetInit(void)
{
    OS_ENTER_CRITICAL();
    
    srand((uint32) TargetInit);
    VICIntSelect = 0x00000020;	// 设置所有中断分配为IRQ中断
   // PINSEL0 = 0XC5555555;     // 初始化端口
    PINSEL1 = 0X00000000;
    PINSEL2 = (PINSEL2 & 0x0f814900) | 0X00000014;
    
    IO1DIR = IO1DIR | IDLE;            /* RUN            相连 p1.21 输出,设备处于待机状态*/
    IO1SET = IDLE;
    IO1DIR = IO1DIR | RUN ;            /* IDLE           相连 p1.22 输出,设备正处于运行状态*/
    IO1CLR = RUN;
  
    IO1DIR = IO1DIR | UT35C_GPS_PWR ;  /* UT35C_GPS_PWR  相连 p1.23 输出,控制手机和GPS电源*/
    IO1CLR = UT35C_GPS_PWR;

    IO1DIR = IO1DIR | (~CF_DETC);      /* CF_Detect      相连 p1.25 输入,检测CF卡是否插上 */
    IO0DIR = IO0DIR | CF_Detect;       /* CF_Detect      相连 p0.22 输出,如CF卡没插上,点亮CF 指示灯*/
    IO0CLR = CF_Detect;
    
    IO0DIR = IO0DIR | GPS_Detect;      /* GPS_Detect     相连 p0.23输出,如有GPS信号指示灯亮*/
    IO0SET = GPS_Detect;
        
    IO0DIR = IO0DIR | Handest_Detect;  /* Handest_Detect 相连 p0.24 如手机有信令,指示灯亮*/
    IO0SET = Handest_Detect;
    SPIInit(0xD8);
    UART0Init(4800);
    ModemInit(115200);
    //ADPCM_Init();
    Timer0Init();
    PWMInit();    
    SYS_BusIni();			    /*ATA总线初始化*/
    //ATA_INI();				/*ATA设备初始化*/
    Timer1Init();
    EINT0_Init(0X00000001);     // 设置 P0.16设置为外部中断 0 输入 DTMF中断输入
    EINT1_Init(0X20000000);     // 设置 P0.14 设置为外部中断 1 输入待机中断输入
    EINT2_Init(0X80000000);     // 设置 P0.15 设置为外部中断 2 输入以太网中断输入
    EINT3_Init(0X20000000);     // 设 置P0.30 设置为外部中断 3 输入    
    VICInit();
    OS_EXIT_CRITICAL();
}

/*********************************************************************************************************
** Function name:			InitialiseUART0
**
** Descriptions:			Initialize the Uart0
**
** input parameters:		None
** Returned value:			None
**         
** Used global variables:	None
** Calling modules:			None
**
********************************************************************************************************/
void InitialiseUART0(uint32 bps)
{  	
  uint16 Fdiv;
    
  PINSEL0 = (PINSEL0 & 0xfffffff0) | 0x05;    /* Select the pins for Uart 选择管脚为UART0 */

  U0LCR = 0x80;                               /* Enable to access the frequenc regecter 允许访问分频因子寄存器 */
  Fdiv  = (Fpclk / 16) / bps;                  /* Set the baudrate设置波特率 */
  U0DLM = Fdiv / 256;							
  U0DLL = Fdiv % 256;						
  U0LCR = 0x03;                               /* Disable to access the frequenc regecter 禁止访问分频因子寄存器 */
                                                /* set to 8,1,n 且设置为8,1,n */
  U0IER = 0x00;                               /* Disable interrupt禁止中断 */
  U0FCR = 0x00;                               /* initial FIFO 初始化FIFO */
} 
/*********************************************************************************************************
** Function name:			TargetResetInit
**
** Descriptions:			Initialize the target 
**
** input parameters:		None
** Returned value:			None
**         
** Used global variables:	None
** Calling modules:			None
**
********************************************************************************************************/
void TargetResetInit(void)
{
   PCON  = 0X0;               // 关闭空闲模式和掉电模式
   //PCONP = 0XA17;             // 关闭所有外设,只打开外部存储器接口(EMC)
   
#ifdef __DEBUG                // 板上JP6接为:Bank0-RAM,Bank1-Flash,JP7接为:OUTSIDE
    MEMMAP = 0x3;             // remap 用户外部存储器模式,中断向量从外部存储器重新映射
    BCFG0  = 0x10000400;		  // 外部RAM
	  BCFG1  = 0x10000460;		  // 外部Flash
#endif

#ifdef __OUT_CHIP				      // 板上JP6接为:Bank0-Flash,Bank1-RAM,JP7接为:OUTSIDE
	MEMMAP = 0x3;               // remap 用户外部存储器模式,中断向量从外部存储器重新映射行
	BCFG0  = 0x10000460;		    // 外部FLASH
	BCFG1  = 0x10000400;		    // 外部RAM
#endif

#ifdef __IN_CHIP    			    // 板上JP6接为:Bank0-RAM,Bank1-Flash,JP7接为:INSIDE
	MEMMAP = 0x1;               // remap 用户FLASH模式,中断向量不重新映射,它位于FLASH中
	BCFG0  = 0x10000400;		    // 外部RAM
	BCFG1  = 0x10000460;		    // 外部Flash
#endif
    
/*------------------------------------------------------------------------------------------------------    
**              Set System timers for each component 设置系统各部分时钟
**              Set VPB timers  设置VPB时钟频率
**  #define Fpclk        (Fcclk / 5)*2        // VPB时钟频率,只能为(Fcclk / 5)的2倍
------------------------------------------------------------------------------------------------------*/
     PLLCON = 1;                 // PLL允许激活 PLLCON寄存器的第一位

#if (Fpclk / (Fcclk / 5)) == 1   // VPB总线时钟位处理器时钟的1/4 
     VPBDIV = 0;                 // Fpclk = Fosc * 5 / 5
#endif
#if (Fpclk / (Fcclk / 5)) == 2   // VPB总线时钟位处理器时钟的1/2
     VPBDIV = 2;
#endif
#if (Fpclk / (Fcclk / 5)) == 5   // VPB总线时钟位处理器时钟相同 
     VPBDIV = 1;
#endif

/************************************ Set system timers  设置系统时钟*********************************/

#if (Fcco / Fcclk) == 2
    PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
#endif
#if (Fcco / Fcclk) == 4
    PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
#endif
#if (Fcco / Fcclk) == 8
    PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
#endif
#if (Fcco / Fcclk) == 16
    PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
#endif

    PLLFEED = 0xaa;
    PLLFEED = 0x55;
    while((PLLSTAT & (1 << 10)) == 0);
    PLLCON = 3;
    PLLFEED = 0xaa;
    PLLFEED = 0x55;

/***************************Set memory accelerater module 设置存储器加速模块 **************************/

    MAMCR = 0;
#if Fcclk < 20000000
    MAMTIM = 1;
#else
#if Fcclk < 40000000  
    MAMTIM = 2;
#else
    MAMTIM = 3;  // Fcclk = 55.296MHz
#endif
#endif

/*initialize UART 设置串行口 */
    PINSEL0 = (PINSEL0 & 0xFFFF0000) | 0x05 | 0x50; // 设置为串口UART0模式,是为了ISP程序更新操作
    InitialiseUART0(115200);

/* initialize RTC 设置实时时钟 */

    CCR = 1;
    PREINT = Fpclk / 32768 - 1;
    PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
    YEAR = 2006;
    MONTH = 03;
    DOM = 031;
    HOUR  = 8;
    MIN   = 0;
    SEC   = 0;
    
/* initialize VIC*/

    VICIntEnClr  = 0XFFFFFFFF;
    VICVectAddr  = 0;
    VICIntSelect = 0x00000000;
    T0IR         = 0XFFFFFFFF;
    T0TCR        = 0X02;
}

/**************************************************************************************************************
**                  以下为一些与系统相关的库函数的实现具体作用请ads的参考编译器与库函数手册
**                  用户可以根据自己的要求修改 
*                   The implementations for some library functions For more details, please refer to the 
*                   ADS compiler handbook and The library function manual User could change it as needed                     
*************************************************************************************************************/
#include "rt_sys.h"
#include "stdio.h"

#pragma import(__use_no_semihosting_swi)
#pragma import(__use_two_region_memory)
 
int __rt_div0(int a)
{
  a = a;
  return 0;
}

int fputc(int ch,FILE *f)
{
  ch = ch;
  f = f;
  return 0;
}

int fgetc(FILE *f)
{
  f = f;
  return 0;
}


int _sys_close(FILEHANDLE fh)
{
  fh = fh;
  return 0;
}

int _sys_write(FILEHANDLE fh, const unsigned char * buf, unsigned len, int mode)
{
  fh = fh;
  buf = buf;
  len =len;
  mode = mode;
  return 0;
}

int _sys_read(FILEHANDLE fh, unsigned char * buf,unsigned len, int mode)
{
  fh = fh;
  buf = buf;
  len =len;
  mode = mode;    
  return 0;
}

void _ttywrch(int ch)
{
  ch = ch;
}

int _sys_istty(FILEHANDLE fh)
{
  fh = fh;
  return 0;
}

int _sys_seek(FILEHANDLE fh, long pos)
{
  fh = fh;
  return 0;
}

int _sys_ensure(FILEHANDLE fh)
{
  fh = fh;
  return 0;
}

long _sys_flen(FILEHANDLE fh)
{
  fh = fh;
  return 0;
}

int _sys_tmpnam(char * name, int sig, unsigned maxlen)
{
  name = name;
  sig = sig;
  maxlen = maxlen;
  return 0;
}

void _sys_exit(int returncode)
{
  returncode = returncode;
}

char *_sys_command_string(char * cmd, int len)
{
  cmd = cmd;
  len = len;
  return 0;
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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