main.c
来自「博创2410的实验代码」· C语言 代码 · 共 246 行
C
246 行
/***************************************************************************\
Copyright (c) 2004-2007 threewater@up-tech.com, All rights reserved.
by threewter 2004.5.12
\***************************************************************************/
/***************************************************************************\
#说明: C main 函数,ucos-ii初始化等定义
---------------------------------- Bug --------------------------------------
---------------------------------- TODO list --------------------------------------
----------------------------------修正--------------------------------------
2004-5-12 创建
\***************************************************************************/
#include"../ucos-ii/includes.h" /* uC/OS interface */
#include "../ucos-ii/add/osaddition.h"
#include "../inc/drivers.h"
#include "../inc/sys/lib.h"
#include "../src/gui/gui.h"
//#include "2410addr.h"
#include <string.h>
#include <stdio.h>
#pragma import(__use_no_semihosting_swi) // ensure no functions that use semihosting
///******************任务定义***************///
#define rUTRSTAT0 (*(volatile unsigned *)0x50000010)
OS_STK Main_Stack[STACKSIZE]={0, }; //Main_Test_Task堆栈
void Main_Task(void *Id); //Main_Test_Task
#define Main_Task_Prio 12
OS_STK test_Stack[STACKSIZE]={0, }; //test_Test_Task堆栈
void test_Task(void *Id); //test_Test_Task
#define test_Task_Prio 15
//void Main_Task(void);
int Audio_Init(void);
static void uda1341_l3_address(U8 data);
static void uda1341_l3_data(U8 data);
unsigned Init_UDA1341(void);
void UDA1341_Send(unsigned char data);
FILE* pfile; //定义文件结构指针
U32 DataCount=0;
char str[AUDIO_IN_BUFFERSIZE*20]; //文件缓冲区
char TextFilename[]="/sys/ucos/fj/1.wav";
/***************************************************************/
/**************已经定义的OS任务*************
#define SYS_Task_Prio 1
#define Touch_Screen_Task_Prio 9
#define Main_Task_Prio 12
#define Key_Scan_Task_Prio 58
#define Lcd_Fresh_prio 59
#define Led_Flash_Prio 60
********************************************/
#define LEN 64
int main(void)
{
ARMTargetInit(); // do target (uHAL based ARM system) initialisation //
OSInit(); // needed by uC/OS-II //
OSInitUart();
initOSFile();
#if USE_MINIGUI==0
initOSMessage();
initOSList();
initOSDC();
initOSCtrl();
LoadFont();
#endif
loadsystemParam();
// create the tasks in uC/OS and assign increasing //
// priorities to them so that Task3 at the end of //
// the pipeline has the highest priority. //
LCD_printf("Create task on uCOS-II...\n");
OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_Stack[STACKSIZE-1], Main_Task_Prio);
OSAddTask_Init(1);
Audio_Init();
pfile=fopen(TextFilename,"r"); //打开文件
if(pfile==NULL){ //文件打开失败
LCD_printf("\n Can't Open file!\n");
while(1);
OSTimeDly(1000);
}
DataCount=fread((U8*)str,512,(int)(AUDIO_IN_BUFFERSIZE*20/512),pfile);//读取音频文件数据
LCD_printf("Starting uCOS-II...\n");
OSStart(); // start the OS //
// never reached //
return 0;
}
static void uda1341_l3_address(U8 data) //设置UDA1341寄存器地址
{
int i;
write_gpio_bit(GPIO_L3CLOCK, 1);
write_gpio_bit(GPIO_L3DATA, 0);
hudelay(10);
write_gpio_bit(GPIO_L3MODE, 0); //L3MODE为低,设置地址模式
hudelay(5);
for (i = 0; i < 8; i++) {
if (data & 0x1) {
write_gpio_bit(GPIO_L3CLOCK, 0);//配合write_gpio_bit(GPIO_L3CLOCK, 1);模拟L3CLOCK时钟
hudelay(1);
write_gpio_bit(GPIO_L3DATA, 1); //写入1数据
hudelay(1);
write_gpio_bit(GPIO_L3CLOCK, 1);
hudelay(1);
} else {
write_gpio_bit(GPIO_L3CLOCK, 0);
hudelay(1);
write_gpio_bit(GPIO_L3DATA, 0); //写入0数据
hudelay(1);
write_gpio_bit(GPIO_L3CLOCK, 1);
hudelay(1);
}
data >>= 1;
}
hudelay(5);
write_gpio_bit(GPIO_L3MODE, 1);
hudelay(1);
}
static void uda1341_l3_data(U8 data) //写UDA1341数据寄存器
{
int i;
write_gpio_bit(GPIO_L3MODE, 1); //L3MODE为高,设置数据传输模式
hudelay(5);
for (i = 0; i < 8; i++) {
if (data & 0x1) {
write_gpio_bit(GPIO_L3CLOCK, 0);//配合write_gpio_bit(GPIO_L3CLOCK, 1);模拟L3CLOCK时钟
hudelay(1);
write_gpio_bit(GPIO_L3DATA, 1); //写入1数据
hudelay(1);
write_gpio_bit(GPIO_L3CLOCK, 1);
hudelay(1);
} else {
write_gpio_bit(GPIO_L3CLOCK, 0); //配合write_gpio_bit(GPIO_L3CLOCK, 1);模拟L3CLOCK时钟
hudelay(1);
write_gpio_bit(GPIO_L3DATA, 0); //写入0数据
hudelay(1);
write_gpio_bit(GPIO_L3CLOCK, 1);
hudelay(1);
}
data >>= 1;
}
//write_gpio_bit(GPIO_L3MODE, 1);
hudelay(1);
write_gpio_bit(GPIO_L3MODE, 0);
hudelay(2);
write_gpio_bit(GPIO_L3MODE, 1);
}
static int uda1341_volume;
static U8 uda_sampling;
static int uda1341_boost;
unsigned Init_UDA1341(void)
{
uda1341_volume = 62 - ((DEF_VOLUME * 61) / 100);
uda1341_boost = 0;
uda_sampling = DATA2_DEEMP_NONE | DATA2_PEAKAFTER;
uda_sampling &= ~(DATA2_MUTE);
write_gpio_bit(GPIO_L3CLOCK, 1);
write_gpio_bit(GPIO_L3MODE, 1);
uda1341_l3_address(UDA1341_REG_STATUS); //UDA1341复位
uda1341_l3_data(STAT0_RST);
uda1341_l3_address(UDA1341_REG_STATUS);//写状态控制寄存器,设置UDA1341,参见UDA1341手册P15
uda1341_l3_data(STAT0_SC_384FS | STAT0_IF_I2S | STAT0_DC_FILTER); // 256 system clock,IIS
uda1341_l3_data(STAT1 | STAT1_DAC_GAIN | STAT1_ADC_GAIN | STAT1_ADC_ON | STAT1_DAC_ON);
uda1341_l3_address(UDA1341_REG_DATA0); //写UDA1341数据寄存器,参见UDA1341手册P17
uda1341_l3_data(DATA0 |DATA0_VOLUME(uda1341_volume)); // maximum volume
uda1341_l3_data(DATA1 |DATA1_BASS(uda1341_boost)| DATA1_TREBLE(0));
uda1341_l3_data(DATA2 |uda_sampling);
uda1341_l3_data(EXTADDR(EXT2));
uda1341_l3_data(EXTDATA(EXT2_MIC_GAIN(0x6)| EXT2_MIXMODE_CH2));
uda1341_l3_data(EXTADDR(EXT5));
uda1341_l3_data(EXTDATA(0x7));
write_gpio_bit(GPIO_L3CLOCK, 1);
write_gpio_bit(GPIO_L3MODE, 0);
return 1;
}
void IIS_PortSetting(void)
{
//----------------------------------------------------------
// PORT G GROUP
//Ports : GPG9 GPG10 GPG8
//Signal : L3CLOCK L3DATA L3MODE
//Setting: OUTPUT OUTPUT OUTPUT
// [18:19] [20:21] [16:17]
//Binary : 01 , 01 01
//----------------------------------------------------------
rGPGDAT = rGPGDAT & ~(UDA1341_MODE|L3CLK|L3DATA) |(UDA1341_MODE|L3CLK); //设置UDA1341 L3接口
//Start condition : L3M=H, L3C=H
rGPGUP = rGPGUP & ~(0x7<<8)|(0x7<<8); //GPG8-10上拉关闭
//The pull up function is disabled GPG[8:10]
rGPGCON = rGPGCON & ~(0x3f<<16)|(0x15<<16); //GPG8-10配置为输出
//GPB[8:10]=Output(L3CLOCK):Output(L3DATA):Output(L3MODE)
//----------------------------------------------------------
// PORT E GROUP
//Ports : GPE4 GPE3 GPE2 GPE1 GPE0
//Signal : I2SSDO I2SSDI CDCLK I2SSCLK I2SLRCK
//Binary : 10 , 10 10 , 10 10
//----------------------------------------------------------
rGPEDAT = 0x0;
rGPEUP = rGPEUP & ~(0x1f) | 0x1f;
//The pull up function is disabled GPE[4:0] 1 1111
rGPECON = rGPECON & ~(0x3ff) | 0x2aa;
//GPE[4:0]=I2SSDO:I2SSDI:CDCLK:I2SSCLK:I2SLRCK
}
int Audio_Init(void) //音频配置初始化
{
IIS_PortSetting(); //音频相应端口设置
Init_UDA1341(); //UDA1341初始化
return OK;
}
void Main_Task(void *Id) //Main_Test_Task Add by Allan_hua
{
int i=100;
char *data;
LCD_printf("Now Begin Playing...\n");
//DMA2 for AudioOut
rDMASKTRIG2 = (1<<2)|(0<<1); //Dma2Stop
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?