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

📄 main.c

📁 CCS中通过DM642对AIC23B音频编解码芯片的配置,采用AIC23B主模式,IIC数据传输方式
💻 C
字号:
/*
 *  ======== main.c ========
 
 */

#include <std.h>
#include <csl.h>
#include <stdio.h>
#include <csl_chip.h>
#include <csl_i2c.h>
#include <csl_emifa.h>
#include <csl_irq.h>
#include <csl_gpio.h>
#include "hal.h"
#include "InitFunc.h"

extern far void vectors();
I2C_Handle hSeeddm642i2c;

Uint16 LeftInputVolCtrl = 0x017;
Uint16 RightInputVolCtrl = 0x017;
Uint16 LeftHpVolCtrl = 0x1F9;			
Uint16 RightHpVolCtrl = 0x1F9;			
Uint16 AnalogAudioPathCtrl = 0x011;
Uint16 DigtalAudioPathCtrl = 0x000;		
Uint16 PowerDownCtrl = 0x000;				
Uint16 DigtalAudioInterfaceFmat = 0x043;// DSP mode
Uint16 SamRatCtrl = 0x000;						
Uint16 DigtalInterfaceActiv = 0x001;		
Uint16 RstReg;							// Default

/*SEEDDM642的emifa的设置结构*/
EMIFA_Config Seeddm642ConfigA ={
	   0x00052078,/*gblctl EMIFA(B)global control register value */
	   			  /*将CLK6、4、1使能;将MRMODE置1;使能EK2EN,EK2RATE*/
	   0xffffffd3,/*cectl0 CE0 space control register value*/
	   			  /*将CE0空间设为SDRAM*/
	   0x73a28e01,/*cectl1 CE1 space control register value*/
	   			  /*Read hold: 1 clock;
	   			    MTYPE : 0000,选择8位的异步接口
	   			    Read strobe :001110;14个clock宽度
	   			    TA:2 clock; Read setup 2 clock;
	   			    Write hold :2 clock; Write strobe: 14 clock
	   			    Write setup :7 clock
	   			    --					 ---------------
	   			  	  \		 14c		/1c
	   			 	   \----------------/ */
	   0x22a28a22, /*cectl2 CE2 space control register value*/
       0x22a28a42, /*cectl3 CE3 space control register value*/
	   0x57115000, /*sdctl SDRAM control register value*/
	   0x0000081b, /*sdtim SDRAM timing register value*/
	   0x001faf4d, /*sdext SDRAM extension register value*/
	   0x00000002, /*cesec0 CE0 space secondary control register value*/
	   0x00000002, /*cesec1 CE1 space secondary control register value*/
	   0x00000002, /*cesec2 CE2 space secondary control register value*/
	   0x00000073 /*cesec3 CE3 space secondary control register value*/	
};

/*SEEDDM642的IIC的设置结构*/
I2C_Config SEEDDM642IIC_Config = {
    0,  	/* master mode,  i2coar;采用主模式   */
    0,  	/* no interrupt, i2cier;只写,不读,采用无中断方式*/
    (20-5), /* scl low time, i2cclkl;  */
    (20-5), /* scl high time,i2cclkh;  */
    1,  	/* configure later, i2ccnt;*/
    0,  	/* configure later, i2csar;*/
    0x4ea0, /* master tx mode,     */
            /* i2c runs free,      */
            /* 8-bit data + NACK   */
            /* no repeat mode      */
    (75-1), /* 4MHz clock, i2cpsc, ipsc = 74  */
    
    /*	
    	fmod = fmst/(ipsc+1)/((clkl+d)+(clkh+d)) = fmst/300
    	ipsc >1, d =5;
    	ipsc =1, d =6;
    	ipsc =0, d =7; 
   	*/
};

CHIP_Config SEEDDM642percfg = {
	CHIP_I2C
};

void main ()
{

	Uint8 addrI2C = 0x1A;

/*-------------------------------------------------------*/
/* perform all initializations                           */
/*-------------------------------------------------------*/
	/*Initialise CSL,初始化CSL库*/
	CSL_init();
	CHIP_config(&SEEDDM642percfg);
	CLK_Init();
 		
/*----------------------------------------------------------*/
	/*EMIFA的初始化,将CE0设为SDRAM空间,CE1设为异步空间
	 注,DM642支持的是EMIFA,而非EMIF*/
	EMIFA_config(&Seeddm642ConfigA);

	
/*----------------------------------------------------------*/
	/*EMIFA的初始化,将CE0设为SDRAM空间,CE1设为异步空间
	 注,DM642支持的是EMIFA,而非EMIF*/
	EMIFA_config(&Seeddm642ConfigA);
/*----------------------------------------------------------*/
	/*中断向量表的初始化*/
	//Point to the IRQ vector table
    IRQ_setVecs(vectors);
    IRQ_nmiEnable();
    IRQ_globalEnable();
/*----------------------------------------------------------*/	
	/*进行IIC的初始化*/
	hSeeddm642i2c = I2C_open(I2C_PORT0,I2C_OPEN_RESET);
	I2C_config(hSeeddm642i2c,&SEEDDM642IIC_Config);

	GPIO_RSET(GPVAL,0x0);/*GPIO0输出为高,选择IIC1总线,配置
						   第二路,即为U21*/
						   
    _IIC_write(hSeeddm642i2c, addrI2C,ADDR_LLICVC, LeftInputVolCtrl);
    _IIC_write(hSeeddm642i2c, addrI2C,ADDR_RLICVC, RightInputVolCtrl);
    _IIC_write(hSeeddm642i2c, addrI2C,ADDR_LCHVC, LeftHpVolCtrl);
    _IIC_write(hSeeddm642i2c, addrI2C,ADDR_RCHVC, RightHpVolCtrl);
    _IIC_write(hSeeddm642i2c, addrI2C,ADDR_AAPC, AnalogAudioPathCtrl);
   	_IIC_write(hSeeddm642i2c, addrI2C,ADDR_DAPC, DigtalAudioPathCtrl);
    _IIC_write(hSeeddm642i2c, addrI2C,ADDR_PDC, PowerDownCtrl);
    _IIC_write(hSeeddm642i2c, addrI2C,ADDR_DAIF, DigtalAudioInterfaceFmat);
    _IIC_write(hSeeddm642i2c, addrI2C,ADDR_SRC, SamRatCtrl);
    _IIC_write(hSeeddm642i2c, addrI2C,ADDR_DIA, DigtalInterfaceActiv);

 /*----------------------------------------------------------*/		
	/*测试SEEDVPM642的LED*/
    GPIO_RSET(GPGC,0x0);/*将GPIO0不做为GPINT使用*/
    GPIO_RSET(GPEN,0x108);/*将GPIO0中的GP3和GP8使能*/
	GPIO_RSET(GPDIR,0x108);/*将GPIO0中的GP3和GP8做为输出*/

	/*GPIO3输出为高,D4亮*/
	GPIO_RSET(GPVAL,0x0);
   	SEEDDM642_waitusec(5000);
   	
   	SamRatCtrl = 0x001;
	_IIC_read(hSeeddm642i2c, addrI2C,ADDR_SRC, SamRatCtrl);

	for(;;)
	{}

}

⌨️ 快捷键说明

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