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

📄 main.c

📁 44B0的音频实验
💻 C
字号:
#include"..\ucos-ii\includes.h"               /* uC/OS interface */
#include "..\ucos-ii\add\osaddition.h"
#include "..\inc\drv.h"
#include <string.h>
#include "..\inc\drv\IIS-S3C44B0.h"
#include "..\inc\drv\OSFile.h"

#pragma import(__use_no_semihosting_swi)  // ensure no functions that use semihosting 
///******************任务定义***************///

OS_STK Main_Stack[STACKSIZE*8]={0, };   //Main_Test_Task堆栈
void Main_Task(void *Id);
void Task1(void *Id);             //Main_Test_Task
#define Main_Task_Prio     12
#define  Task1_Prio   11

/**************已经定义的OS任务*************
tcp监控任务		11
以太网物理层监控任务	8
触摸屏任务		9
键盘任务		10
lcd刷新任务		59
系统任务		1
*****************************************************/

///*****************事件定义*****************///
OS_EVENT *Nand_Rw_Sem;                   //Nand_Flash读写控制权旗语
//and you can use it as folloeing:
//    Nand_Rw_Sem=OSSemCreate(1);        //创建Nand-Flash读写控制权旗语,初值为1满足互斥条件//
//    OSSemPend(Nand_Rw_Sem,0,&err);
//    OSSemPost(Nand_Rw_Sem);

OS_EVENT *Uart_Rw_Sem;                   //Uart读写控制权旗语
//and you can use it as folloeing:
//    Uart_Rw_Sem=OSSemCreate(1);        //创建Uart读写控制权旗语,初值为1满足互斥条件//
//    OSSemPend(Uart_Rw_Sem,0,&err);
//    OSSemPost(Uart_Rw_Sem);
//////////////////////////////////////////////////////////

void initOSGUI()	//初始化操作系统的图形界面
{
	initOSMessage();
	initOSList();
	initOSDC();
	initOSCtrl();
	initOSFile();
}
/////////////////////////////////////////////////////
//                  Main function.                //
////////////////////////////////////////////////////

int main(void)
{
	ARMTargetInit(); //开发板初始化
	OSInit(); //操作系统初始化      
	uHALr_ResetMMU();//复位MMU
	LCD_Init();             //初始化LCD模块
	LCD_printf("LCD initialization is OK\n");//向液晶屏输出数据
	LCD_printf("320 x 240  Text Mode\n");
	initOSGUI();//初始化图形界面
	LoadFont();//调Unicode字库
	LoadConfigSys();//使用config.sys文件配置系统设置
	LCD_printf("Create task on uCOS-II...\n");
	OSTaskCreate(Main_Task,  (void *)0,  (OS_STK *)&Main_Stack[STACKSIZE*8-1],  Main_Task_Prio);// 创建系统任务
	OSTaskCreate(Task1,  (void *)0,  (OS_STK *)&Main_Stack[STACKSIZE*8-1],  Task1_Prio);
	OSAddTask_Init();//创建系统附加任务
	LCD_printf("Starting uCOS-II...\n");
	LCD_printf("Entering graph mode...\n");
	LCD_ChangeMode(DspGraMode);//变LCD显示模式为文本模式
	InitRtc();//初始化系统时钟
	Nand_Rw_Sem=OSSemCreate(1);   //创建Nand-Flash读写控制权旗语,初值为1满足互斥条件//
	OSStart();//操作系统任务调度开始
	//不会执行到这里
	return 0;
}

int buffer[AUDIO_IN_BUFFERSIZE*20];

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Main_Task(void *Id)             //Main_Test_Task
{
	U32 nbyte;
	FILE *pfile;
	char filename[]="1.wav";
   
   Uart_Printf("run task1\n");
	rIISCON=0;	//disable;
	rIISMOD=IISMOD_TX|IISMOD_16BIT|IISMOD_32FS|IISMOD_MCLK_384FS;//IISMOD=010001101
	                                                             //主模式,发送模式,左高右低,IIS格式,16位,主时钟为384Fs,串行时钟频率32fs
	rIISFCON=IISFCON_TXDMA|IISFCON_TXFIFO;//DMA存取模式,DMA接收模式
	rIISPSR=0x11;//4分频
	rIISCON=IISCON_PRESCALE|IISCON_ENABLE;//使能预分频,使能IIS
	Init_UDA1341();
	
    
	//pfile=OpenOSFile(filename, FILEMODE_READ);//读文件,返回指针
	//if(!pfile)
	//	return ;
	//ReadOSFile(pfile, (U8*) buffer, 0x16*2);//读取头文件信息
	//nbyte=ReadOSFile(pfile, (U8*) buffer, sizeof(buffer));//读取波形数据
    for(;;)
	   {//死循环
		/****** BDMA0 Initialize ******/
		//for Source
		rBDISRC0=(1<<30)+(1<<28)+(int)buffer;	//Half word,inc,Buf 半字,增地址
		//for des
		rBDIDES0=(1<<30)+(3<<28)+((int)rIISFIF);	//M2IO,fix,IISFIF 从外部存储器到内设,地址方向固定
		//Size
		//iis,reserve,done_int,not auto-reload/start,DMA enable,COUNT
		//IIS请求DMA,当中断计数时产生中断,禁止自动重载和自动开始,禁止DMA
		rBDICNT0=(1<<30)+(1<<26)+(3<<22)+(0<<21)+(0<<20)+(sizeof(buffer)&(~0x3));
		rBDICNT0 |= (1<<20);//enable
		//Enable DMA
		rBDCON0 = 0x0<<2;//允许外部DMA请求
		//Tx DMA
		rIISCON|=IISCON_TXDMA;//发送DMA请求使能
	   
	
      }	
}
void Task1(void *Id)             //Main_Test_Task
{
	//U32 nbyte;
	//FILE *pfile;
	//char filename[]="1.wav";
	
   Uart_Printf("run task2\n");
   
	rIISCON=0;	//disable;
	rIISMOD=IISMOD_RX|IISMOD_16BIT|IISMOD_32FS|IISMOD_MCLK_384FS;//IISMOD=010001101
	                                                             //主模式,发送模式,左高右低,IIS格式,16位,主时钟为384Fs,串行时钟频率32fs
	rIISFCON=IISFCON_RXDMA|IISFCON_RXFIFO;//DMA存取模式,DMA接收模式
	rIISPSR=0x11;//4分频
	rIISCON=IISCON_PRESCALE|IISCON_ENABLE;//使能预分频,使能IIS
	Init_UDA1341();
	
    
	//pfile=OpenOSFile(filename, FILEMODE_READ);//读文件,返回指针
	//if(!pfile)
		//return ;
	//ReadOSFile(pfile, (U8*) buffer, 0x16*2);//读取头文件信息
	//nbyte=ReadOSFile(pfile, (U8*) buffer, sizeof(buffer));//读取波形数据
    for(;;)
	   {//死循环
		/****** BDMA0 Initialize ******/
		//for Source
		rBDISRC0=(1<<30)+(3<<28)+(int)rIISFIF;	//Half word,inc,Buf 半字,增地址
		//for des
		rBDIDES0=(2<<30)+(1<<28)+((int)0xc210000);	//M2IO,fix,IISFIF 从外部存储器到内设,地址方向固定
		//Size
		//iis,reserve,done_int,not auto-reload/start,DMA enable,COUNT
		//IIS请求DMA,当中断计数时产生中断,禁止自动重载和自动开始,禁止DMA
		rBDICNT0=(1<<30)+(1<<26)+(3<<22)+(0<<21)+(0<<20)+10000;//+(sizeof(buffer)&(~0x3));
		rBDICNT0 |= (1<<20);//enable
		//Enable DMA
		rBDCON0 = 0x0<<2;//允许外部DMA请求
		//Tx DMA
		rIISCON|=IISCON_TXDMA;//发送DMA请求使能
	   
	
      }	
}

⌨️ 快捷键说明

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