📄 main.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 + -