📄 main.c
字号:
#define IN_MAIN
#include "User.h"
#define TASK_STK_SIZE 64
OS_STK TaskLEDStk[TASK_STK_SIZE];
OS_STK TaskMP3PlayStk[TASK_STK_SIZE*40];
OS_EVENT *SD_INIT;
OS_EVENT *Uart0RecData;
INT8U SDKardState;
INT8U Int0Tdata;
INT8U MP3Handle;
volatile INT8U UART0_FIFO[16];
void Task_LED(void *pdata);
void MP3Play(void *pdata);
void TaskStart(void );
int main(void)
{
OSInit(); /* Initialize uC/OS-II */
TaskStart();
OSStart();
return 0;
}
void TaskStart (void)
{
OSTaskCreate(Task_LED, NULL, &TaskLEDStk[TASK_STK_SIZE - 1], 10);
OSTaskCreate(MP3Play, NULL, &TaskMP3PlayStk[TASK_STK_SIZE*40 - 1], 11);
}
void SD_Scan(void)
{
INT8U err;
static INT8U SD_Insert_flag;
if(((IO0PIN & SD_Insert) != 0) && (SD_Insert_flag == 1))
{
SD_Insert_flag = 0;
SDKardState = 0;
err = OSSemPost(SD_INIT);
}
else if(((IO0PIN & SD_Insert) == 0) && (SD_Insert_flag == 0))
{
SD_Insert_flag = 1;
SDKardState = 1;
err = OSSemPost(SD_INIT);
}
}
void Task_LED (void *pdata)
{
pdata = pdata;
TargetInit();
OSStatInit(); /* Initialize uC/OS-II's statistics */
PINSEL2 = PINSEL2 & (~0x08); //P1[25-16]设置为GPIO
IO1DIR |= LED; //设置IO口为输出口
while(1)
{
if((IO1SET & LED) == 0)
IO1SET = LED;
else
IO1CLR = LED;
SD_Scan();
OSTimeDly(OS_TICKS_PER_SEC/2); //延时1/2秒
}
}
void UartPrint(const INT8U *ch)
{
while(*ch != '\0')
{
if (*ch == '\n')
{
while (!(U0LSR & 0x20));
U1THR = CR;
}
while (!(U0LSR & 0x20));
U0THR = *ch;
ch++;
}
}
void UartPutchar(const INT8U ch)
{
while (!(U0LSR & 0x20));
U0THR = ch;
}
/*INT8U uar_getchar()
{
while (!(U0LSR & 0x01));
return (U0RBR);
}*/
void INT0Init(void)
{
PINSEL1 |= 0x01; //选择EINT0
VICIntSelect &=(~ (1 << 14)); //分配为IRQ中断
EXTMODE |= (1 << 0); //边沿触发
EXTPOLAR &=(~ (1 << 0)); //下降沿
}
void UART0_INT_Init(void)
{
U0IER |= 1 << 0; //允许接收中断
U0FCR = 0x11; //使能接收FIFO,接收中断触发深度为1字节
}
void MP3Play(void *pdata)
{
extern INT32U ReadFlen;
const INT8U SD_Find_Str[]={"SDKard found\n"};
const INT8U SD_REM_Str[]={"SDKard remove\n"};
INT8U *Receive_data;
INT8U StopFlag=0;
INT32U temp;
pdata = pdata;
UART0_INT_Init();
INT0Init();
DiskInit();
SD_INIT = OSSemCreate(0);
Uart0RecData = OSMboxCreate(NULL);
VS_Drive(MP3CMD_InitVS1003);
MP3Handle = 0;
while(1)
{
if(OSSemAccept(SD_INIT) > 0)
{
if(SDKardState == 0)
{
UartPrint(SD_REM_Str);
RemoveFileDriver('A');
}
else
{
SD_Init();
OSTimeDly(OS_TICKS_PER_SEC/5);
SD_Init();
UartPrint(SD_Find_Str);
AddFileDriver('A', SDKardCMD);
}
}
if(SDKardState == 1)
{
Receive_data = (INT8U *) OSMboxAccept(Uart0RecData);
if(Receive_data != NULL)
{
FileOperation(*Receive_data);
}
temp = GetFileSize() - 128;
if(ReadFlen > temp)
{
MP3Handle = MP3CMD_Stop;
if(StopFlag == 0)
{
UartPrint((void *)("\nStop"));
StopFlag = 1;
}
ReadFlen = 0;
}
VS_Drive(MP3Handle);
}
}
}
void Uart0_Exception(void)
{
INT8U err,i;
switch(U0IIR & 0x0f)
{
case 0x04:
case 0x0c:
for(i=0;i<1;i++)
UART0_FIFO[i]=U0RBR;
err = OSMboxPost(Uart0RecData,(void *)&UART0_FIFO);
}
VICVectAddr = 0;
}
void INT0_Exception(void)
{
EXTINT |= 1 << 0;
Int0Tdata = 'r';
OSMboxPost(Uart0RecData,(void *)&Int0Tdata);
VICVectAddr = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -