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

📄 fuction.h

📁 TMS320VC5416开发板上
💻 H
字号:
#include "dsk5416.h"
#include "5416.h"

typedef	float f32;
typedef	long s32;
typedef	int s16;
typedef	unsigned char u8;
typedef	unsigned int u16;
typedef	unsigned long u32;
s16 m;

void init_board(void)
{
	*(volatile u16*)CLKMD=0x0000;
	while(*(volatile u16*)CLKMD&0x0001){};
	*(volatile u16*)CLKMD=0x9807;  //定义pll时钟模块中的时钟配置
	                               //PLL MODE,PLLCOUNT=1111 1110,PLLMUL=9
	                               //DSP_CLK=16*2.25=36M
	asm(" nop");
	asm(" nop");
	*(volatile u16*)PMST=0x00A0;//0X00A0;   //DROM=0,OVLY=1,MP/MC=0,中断向量表定位在0x0001
	*(volatile u16*)SWWSR=0x7fff;//0X8FFF;  //0x7fff
	*(volatile u16*)SWCR=0x0001;   //0x0001
	*(volatile u16*)BSCR=0xC002;//0x8006;//0X8802;  
	                            //DIVFCT=10,CLKOUT=DSPCLK/3=12M
} 

void init_mcbsp(void)
{   
    //**************McBSP2 initialise**************//
	*(volatile u16*)SPSA_ADDR2=SPCR1_SUBADDR;
	*(volatile u16*)SPSD_ADDR2=0x2000;
	
	*(volatile u16*)SPSA_ADDR2=SPCR2_SUBADDR;
	*(volatile u16*)SPSD_ADDR2=0x0200;
	
	*(volatile u16*)SPSA_ADDR2=RCR1_SUBADDR;
	*(volatile u16*)SPSD_ADDR2=0x0340;
	
	*(volatile u16*)SPSA_ADDR2=RCR2_SUBADDR;
	*(volatile u16*)SPSD_ADDR2=0x0340;
	
	*(volatile u16*)SPSA_ADDR2=XCR1_SUBADDR;
	*(volatile u16*)SPSD_ADDR2=0x00340;//340
	
	*(volatile u16*)SPSA_ADDR2=XCR2_SUBADDR;
	*(volatile u16*)SPSD_ADDR2=0x00340;//340
	
	*(volatile u16*)SPSA_ADDR2=MCR1_SUBADDR;
	*(volatile u16*)SPSD_ADDR2=0x0001;
	
	*(volatile u16*)SPSA_ADDR2=MCR2_SUBADDR;
	*(volatile u16*)SPSD_ADDR2=0x0001;
	
	*(volatile u16*)SPSA_ADDR2=PCR_SUBADDR;
	*(volatile u16*)SPSD_ADDR2=0x0003;
	
	*(volatile u16*)SPSA_ADDR2=RCERA_SUBADDR;
	*(volatile u16*)SPSD_ADDR2=0x0005;
	
	*(volatile u16*)SPSA_ADDR2=XCERA_SUBADDR;
	*(volatile u16*)SPSD_ADDR2=0x000A;	
	
	
;//************McBSP1(SPI mode) initialise********//
	*(volatile u16*)SPSA_ADDR1=SPCR1_SUBADDR;
	*(volatile u16*)SPSD_ADDR1=0x1821;//1021
      asm(" rpt #6");
	  asm(" nop");
	*(volatile u16*)SPSA_ADDR1=SPCR2_SUBADDR;
	*(volatile u16*)SPSD_ADDR1=0x0061;//0x0061;
	  asm(" rpt #6");
	  asm(" nop");
	//-------------------------------------	
	*(volatile u16*)SPSA_ADDR1=RCR1_SUBADDR;
	*(volatile u16*)SPSD_ADDR1=0x0040;//0x0340;
	  asm(" rpt #6");
	  asm(" nop");
	*(volatile u16*)SPSA_ADDR1=RCR2_SUBADDR;
	*(volatile u16*)SPSD_ADDR1=0x0041;//0x0340;
	  asm(" rpt #6");
	  asm(" nop");	
	*(volatile u16*)SPSA_ADDR1=XCR1_SUBADDR;
	*(volatile u16*)SPSD_ADDR1=0x0040;//0x0040;
	  asm(" rpt #6");
	  asm(" nop");
	*(volatile u16*)SPSA_ADDR1=XCR2_SUBADDR;
	*(volatile u16*)SPSD_ADDR1=0x0041;//0x0040;41
	  asm(" rpt #6");
	  asm(" nop");
	//------------------------------------
	*(volatile u16*)SPSA_ADDR1=SRGR1_SUBADDR;
	*(volatile u16*)SPSD_ADDR1=0x0003;//0x1F00;
	  asm(" rpt #6");
	  asm(" nop");
	*(volatile u16*)SPSA_ADDR1=SRGR2_SUBADDR;
	*(volatile u16*)SPSD_ADDR1=0x2000;
      asm(" rpt #6");
	  asm(" nop");
	//----------------------------------------
	*(volatile u16*)SPSA_ADDR1=PCR_SUBADDR;
	*(volatile u16*)SPSD_ADDR1=0x0b08;//FSXM,CLKX均由内部时钟源获得?0x1F00;00ae
	  asm(" rpt #6");
	  asm(" nop");

;//************McBSP0(I2C mode) initialise*********//
	*(volatile u16*)SPSA_ADDR0=SPCR1_SUBADDR;
	*(volatile u16*)SPSD_ADDR0=0x0080;
	  asm(" rpt #6");
	  asm(" nop");
	*(volatile u16*)SPSA_ADDR0=XCR1_SUBADDR;
	*(volatile u16*)SPSD_ADDR0=0x0140;
	  asm(" rpt #6");
	  asm(" nop");
	*(volatile u16*)SPSA_ADDR0=XCR2_SUBADDR;
	*(volatile u16*)SPSD_ADDR0=0x0140; //0140   
	  asm(" rpt #6");
	  asm(" nop");
	*(volatile u16*)SPSA_ADDR0=PCR_SUBADDR;
	*(volatile u16*)SPSD_ADDR0=0x0007;
	  asm(" rpt #6");
	  asm(" nop");
	*(volatile u16*)SPSA_ADDR0=SPCR2_SUBADDR;
	*(volatile u16*)SPSD_ADDR0=0x00c0;
	  asm(" rpt #6");
	  asm(" nop");
	*(volatile u16*)SPSA_ADDR0=RCR1_SUBADDR;
	*(volatile u16*)SPSD_ADDR0=0x0140;
	  asm(" rpt #6");
	  asm(" nop");
	*(volatile u16*)SPSA_ADDR0=RCR2_SUBADDR;
	*(volatile u16*)SPSD_ADDR0=0x0140;//0140
	  asm(" rpt #6");
	  asm(" nop");

}

void init_aic23(void)
{  	
    unsigned int codec_buf[11]={0x1E00,0x0117,0x0317,0x05F9,0x07F9,0x0812,0x0A00,0x0C00,0x0E53,0x108D,0x1201};
  
    //0x0ea3:AIC23设 为从 模式?    ?dsp格式0e23 083a:bypass(enable,D3),sidetone(enable,D5)
    //1080:clkout=6M,clkin=12M,fs=48k;;108d:8k;;10af:8.021k;;1099:32k;;10a3:44.1k;;109d:96k;
    *(volatile u16*)SPSA_ADDR1=SPCR2_SUBADDR;		//enable mcbsp1 send
    *(volatile u16*)SPSD_ADDR1|=0x0001;
    asm(" nop");
	
    *(volatile u16*)SPSA_ADDR1=SPCR2_SUBADDR; 	  
    for(m=0;m<11;m++)
    {
       while(!((*(volatile u16*)SPSD_ADDR1)&0X0002)){};//bit1(XRDY) of SPCR2 equals equals 1?
 	   *(volatile u16*)DXR1_ADDR1=codec_buf[m];		// 
       asm(" nop");
       //*(volatile u16*)SPSA_ADDR1=SPCR2_SUBADDR;
       //while((*(volatile u16*)SPSD_ADDR1)&0X0004){};//bit4(XEMPTY) of SPCR2 equals equals 0?
    } 
    asm(" nop");
    
 }   



void init_pcm3002(void)
{
	DSK5416_CODEC_CLK=0x09;				//set the sample rate at 44.1KHz: 0x00
	asm(" nop");						//12KHz :0x09
	asm(" nop");
	DSK5416_MISC=0x00;
	asm(" nop");
	asm(" nop");
	
	DSK5416_PCM3002_L=0x28;				//register0
	DSK5416_PCM3002_H=0x01;
	
	while(!(DSK5416_MISC&0x80)){}; 
	DSK5416_PCM3002_L=0x28;				//register1
	DSK5416_PCM3002_H=0x03; 
	   
	while(!(DSK5416_MISC&0x80)){}; 
	DSK5416_PCM3002_L=0xA0;				//register2
	DSK5416_PCM3002_H=0x04;
	
	while(!(DSK5416_MISC&0x80)){}; 
	DSK5416_PCM3002_L=0x00;				//register3
	DSK5416_PCM3002_H=0x06;	
}






⌨️ 快捷键说明

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