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

📄 cdrom_drv.c

📁 atmel at89c51snd1c mp3芯片方案源码
💻 C
字号:
#include "config.h"                         /* system definition */
#include "cdrom_drv.h"
#include "lib_mcu\clock\clock.h"
#include "lib_mcu\lcd\lcd_drv.h" 
#include "lib_mcu\ide\ide_drv.h"
#include "modules\display\disp_task.h"
#include "lib_mcu\kbd\key_drv.h"            /* Keyboard driver definition */
#include <stdio.h>


INT8U        CmdPack[12];


////////////////////////////////////////////////////////////////////////
bit cd_getdata(INT8U *pData, INT8U u8Num)
{
   INT8U   i;
   INT8U   u8Status;

   while(!CD_INTRQ);
   u8Status = CDROM_FILE7;

   if(u8Status & DRQMASK)
   {
     for(i=0; i<u8Num; i+=2)
	 {
	    *pData ++ = CDROM_FILE0;
        *pData ++ = DAT16H;
	 }
   }
   //---------------------------------<<<<<still have data to sent
   u8Status = CDROM_FILE7;
   while(u8Status & DRQMASK)
   {
     i = CDROM_FILE0;
	 u8Status = CDROM_FILE7;
   }
   
   return 1;
}

////////////////////////////////////////////////////////////////////////
void cd_setcommand(INT8U u8Command)
{
  switch(u8Command)
  {
    case CMD_TESTUNITREADY://all set 0
	break;	

	case CMD_READTOC:
         CmdPack[0]=0x43;
         CmdPack[1]=0x02;
         CmdPack[6]=0xaa;
         CmdPack[8]=0x0c;
	break;

	case CMD_MODESENSE:
	     CmdPack[0] = 0x5A; //Mode Sense Command
         CmdPack[2] = 0x0E; //Audio Control Mode Page Format Current values 音频页当前值
         CmdPack[7] = 0x00;
         CmdPack[8] = 0x18; //参数长度     
	break;
    
	case CMD_MODESELECT:
         CmdPack[0] = 0x55; //Mode Select
         CmdPack[1] = 0x10; //
         CmdPack[7] = 0x00;
         CmdPack[8] = 0x18; //参数长度
	break;

	case CMD_PAUSE:
         CmdPack[0]=0x4b;
		 CmdPack[8]=0x00;
	break;

	case CMD_RESUME:
	     CmdPack[0]=0x4b;
		 CmdPack[8]=0x01; 
	break;

	case CMD_OPEN:
		 CmdPack[0]=0x1b;
		 CmdPack[4]=0x02;
	break;

	case CMD_CLOSE:
         CmdPack[0]=0x1b;
		 CmdPack[4]=0x03;
	break;

    case CMD_STOP:
         CmdPack[0]=0x1b;
		 CmdPack[4]=0x00;
	break;

	case CMD_START:
         CmdPack[0]=0x1b;
		 CmdPack[4]=0x01;
	break;

	case CMD_READSUBCH:
         CmdPack[0]=0x42;
		 CmdPack[1]=0x02;
		 CmdPack[2]=0x40;
		 CmdPack[3]=0x01;
		 CmdPack[7]=0x01;
	break;	
  }
}


////////////////////////////////////////////////////////////////////////
void cd_command(INT8U u8Command)
{
   INT8U i;

   for(i=0; i<12; i++)
   {
     CmdPack[i] = 0;
   }
   cd_setcommand(u8Command);
   do{ACC = CDROM_FILE7;}while(BSY | DRQ);
   CDROM_FILE7 = 0xa0;
   do{ACC = CDROM_FILE7;}while(BSY | (!DRQ));

   for(i=0; i<12;)
   {
 	  DAT16H      = CmdPack[i + 1];
      CDROM_FILE0 = CmdPack[i]; 
      i += 2;
   }
}








⌨️ 快捷键说明

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