📄 iis.c
字号:
/*=================================================
File Name: Iis.c
===================================================*/
#include "2440addr.h"
#include "def.h"
#include "iis.h"
#include "WindowsXP_Wav.h" //长度为243552个字节
#include "uart.h"
#define L3C (1<<4) //GPB4 = L3CLOCK
#define L3D (1<<3) //GPB3 = L3DATA
#define L3M (1<<2) //GPB2 = L3MODE
int downloadAddress;
void Play_Wave_Iis(void)
{
unsigned char *buf;
unsigned int i;
unsigned int downloadSize = 243552;
IIS_Port_Init();
IIS_Init();
buf = (unsigned char *)0x30200000;
for( i = 0; i < 243552; i++ )
{
buf[i] = WindowsXP_Wav[i] ;
}
Init1341();
IIS_PlayWave_DMA2(buf, downloadSize);
IIS_Start();
}
void IIS_Port_Init(void)
{
rGPBUP = 0xff;
rGPBCON &= ~((0xf<<5)|(1<<4));
rGPBCON |= ((10<<5)|(1<<4));
rGPEUP = 0xff;
rGPECON &= ~(0x3fff);
rGPECON |= (0x2aa);
}
void IIS_PlayWave_DMA2(unsigned char *start_addr, int play_size)
{
rDISRC2 = (int)start_addr;
rDISRCC2 = 0x00;
rDIDST2 = 0x55000010;
rDIDSTC2 = 0x3;
rDCON2 = ((1<<31)|(1<<23)|(0<<22)|(1<<20)|(play_size/2));
rDMASKTRIG2 = 0x2;
}
void IIS_Init(void)
{
rIISCON &= ~(0x3f);
rIISCON |= ((2<<4)|(3<<1));
rIISMOD &= ~(0xff);
rIISMOD |= ((0x8<<4)|(0x9));
rIISFCON = ((1<<15)|(1<<13)|(1<<12));
rIISPSR = ((5<<5)|5);
}
void IIS_Start(void)
{
rIISCON |= (1<<0);
}
void Init1341(void)
{
rGPBDAT = rGPBDAT & ~(L3M|L3C|L3D) |(L3M|L3C); //Start condition : L3M=H, L3C=H =***1 01**
// rGPBUP = rGPBUP & ~(0x7<<2) |(0x7<<2); //The pull up function is disabled GPB[4:2] 1 1100
// rGPBCON = rGPBCON & ~(0x3f<<4) |(0x15<<4); //GPB[4:2]=Output(L3CLOCK):Output(L3DATA):Output(L3MODE)
//L3 Interface
_WrL3Addr(0x14 + 2); //STATUS (000101xx+10) =22 =000101 10
//_WrL3Data(0x60,0); //0,1,10, 000,0 : Status 0, Reset, 256fs,IIS-bus,no DC-filtering
_WrL3Data(0x60); //0,1,01, 000,0 : Status 0,Reset, 384fs,IIS-bus,no DC-filtering
_WrL3Addr(0x14 + 2); //STATUS (000101xx+10)
_WrL3Data(0x81); //bit[7:0] => 1,0,0,0, 0,0,01
//Status 1, Gain of DAC 0 dB,Gain of ADC 0dB,ADC non-inverting,DAC non-inverting
//Single speed playback,AD/C-Off DAC-On
_WrL3Addr(0x14 + 0);
_WrL3Data(0x0);
}
void _WrL3Addr(char data)
{
unsigned int i;
unsigned int j;
rGPBDAT = rGPBDAT & ~(L3M|L3C|L3D) |(L3M|L3C);
for(i = 0;i < 25;i++);
rGPBDAT = rGPBDAT & ~(L3M|L3C|L3D) | L3C;
for(i = 0;i < 25;i++);
UartPuts("hello world11\n");//
for(j = 0;j < 8;j++)
{
if(data&0x01)
{
rGPBDAT = rGPBDAT & ~(L3M|L3C|L3D) | (L3D);
for(i = 0;i < 25;i++);
rGPBDAT = rGPBDAT |(L3C)|(L3D);
for(i = 0;i < 25;i++);
}
else
{
rGPBDAT &= ~L3C;
rGPBDAT &= ~L3D;
for(i = 0;i < 25;i++);
rGPBDAT = rGPBDAT |(L3C)&(~L3D);
for(i = 0;i < 25;i++);
}
data>>=1;
UartPuts("hello world22\n");//
}
rGPBDAT = rGPBDAT & ~(L3M|L3C|L3D) |(L3M|L3C);
for(i = 0;i < 25;i++){}
}
void _WrL3Data(char data) //(0x60)
{
unsigned int i;
unsigned int j;
rGPBDAT = rGPBDAT & ~(L3M|L3C|L3D) |(L3M|L3C);
for(i = 0;i < 25;i++);
rGPBDAT = rGPBDAT & ~(L3M|L3C|L3D) |(L3C);
for(i = 0;i < 25;i++);
rGPBDAT = rGPBDAT & ~(L3M|L3C|L3D) | (L3C|L3M);
for(i = 0;i < 25;i++);
UartPuts("hello world33\n");//
for(j=0;j<8;j++)
{
if(data & 0x01)
{
rGPBDAT &= ~L3C;
rGPBDAT |= L3D;
for(i = 0;i < 25;i++);
rGPBDAT |= (L3C|L3D);
for(i = 0;i < 25;i++);
}
else
{
rGPBDAT &= ~L3C;
rGPBDAT &= ~L3D;
for(i = 0;i < 25;i++);
rGPBDAT |= L3C;
rGPBDAT &= ~L3D;
for(i = 0;i < 25;i++);
}
data >>= 1;
UartPuts("hello world44\n");//
}
rGPBDAT = rGPBDAT & ~(L3D | L3M | L3C) | (L3C | L3M);
for(i = 0;i < 25;i++){}
UartPuts("hello world55\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -