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

📄 ide.c

📁 用at91sam7s64+ucos写的mp3播放程序
💻 C
字号:
//ide.c
#include "AT91SAM7S64.h"
#include "Board.h"
#include "type.h"
#include "dbgu.h"

#include "ide.h"




#define WRITE     1
#define READ      0



#define vIdeSend8(a, d)     (port_SendData(a, d))
#define vIdeRead8(a)        (port_ReadData(a))


///////////////////////////////////////////////////////////////
void ide_TestBsy(void)
{   
   INT8U u8;
   
   do
   {
     u8 = vIdeRead8(FILE7);
   }
   while(0x80 & u8); 
}

///////////////////////////////////////////////////////////////
void ide_TestBsyDrq(void)
{   
   INT8U u8;
   do
   {
     u8 = vIdeRead8(FILE7);
   }
   while( (0 != (0x80 & u8)) || (0 == (u8 | 0x40)) );  
}


////////////////////////////////////////////////////////////////
void ide_vSendCommand(INT8U u8Com)
{
   ide_TestBsy();
   vIdeSend8(FILE7, u8Com);
}



////////////////////////////////////////////////////////////////
void ide_vIdeInit(void)
{   
   INT8U u8;
   
   NLEBA_HIGH();
   NLEAB_HIGH();
   NOEBA_HIGH();
   NOEAB_HIGH();
   
   HDDRST_LOW();
   port_Delay(5);
   HDDRST_HIGH();   //reset release
   
   do
   {
     vIdeSend8(FILE6, 0xa0);
     u8 = vIdeRead8(FILE7);
   }
   while( (0 != (0x80 & u8)) || (0 == (u8 | 0x40)) );
   
   vIdeSend8(FILE6, 0x20);
   vIdeSend8(FILE2, 64);
   vIdeSend8(FILE7, 0x91);
   
   ide_TestBsy();
   
   vIdeSend8(FILE7, 0x10);
   
   ide_TestBsy();  
}

/*
//////////////////////////////////////////////////////////////////
void  ide_WRReady(INT32U addr,INT8U u8secternum,INT8U wrorrd)
{
   INT8U u8Sector[4];

   NLEBA_HIGH();    //ide->8bit port disable
   NOEBA_HIGH();
   
   u8Sector[0] = (INT8U)(addr >> 24);
   u8Sector[1] = (INT8U)(addr >> 16);
   u8Sector[2] = (INT8U)(addr >> 8);
   u8Sector[3] = (INT8U)(addr);
   
   ide_TestBsy(); 
   
   vIdeSend8(FILE6, (0xe0 | (u8Sector[0] & 0x0f) ) );  
   vIdeSend8(FILE5, u8Sector[1]);  
   vIdeSend8(FILE4, u8Sector[2]);  
   vIdeSend8(FILE3, u8Sector[3]); 
   vIdeSend8(FILE2, u8secternum); 
   
   if(wrorrd == WRITE)
   {
      ide_vSendCommand(0x30);     //write command
   } 
   else
   {
      ide_vSendCommand(0x20);
   }
   
   //////////////////////////////////////////////////////////// 
   ide_TestBsyDrq();
   port_SetAddress(FILE0);            //set data reg addr
   *AT91C_PIOA_ODR |= (PORT_8BIT);    //8bit port input mode  
}
*/

//////////////////////////////////////////////////////////////////
void ide_ReadSector(INT32U addr, INT8U *pBuffer)
{  
   INT32U temp32;
   INT16U i;
   
  
   INT8U u8Sector[4];
   NLEBA_HIGH();    //ide->8bit port disable

   u8Sector[0] = (INT8U)(addr >> 24);
   u8Sector[1] = (INT8U)(addr >> 16);
   u8Sector[2] = (INT8U)(addr >> 8);
   u8Sector[3] = (INT8U)(addr);
   
   ide_TestBsy(); 
   
   vIdeSend8(FILE6, (0xe0 | (u8Sector[0] & 0x0f) ) );  
   vIdeSend8(FILE5, u8Sector[1]);  
   vIdeSend8(FILE4, u8Sector[2]);  
   vIdeSend8(FILE3, u8Sector[3]); 
   vIdeSend8(FILE2, 1);
   
    
   ide_vSendCommand(0x20); 
   ide_TestBsyDrq();
   
   ////////////////////////////////////////////////////////////
   port_SetAddress(FILE0);            //set data reg addr
   *AT91C_PIOA_ODR |= (PORT_8BIT);    //8bit port input mode
   
   
//   ide_WRReady(addr, 1, READ);
   
   for(i=0; i<256; i++)
   {
     NREAD_LOW();                     //read signal active
     
     *pBuffer ++ = (INT8U)(*AT91C_PIOA_PDSR);
     
     NLEBA_LOW();                     //ide->8bit port active
     NLEBA_HIGH();                    //ide->8bit port latch
     
     NREAD_HIGH();                    //read signal disable
       
     NOEBA_LOW();
     *pBuffer ++ = (INT8U)(*AT91C_PIOA_PDSR);

     NOEBA_HIGH();  
   }
   
   *AT91C_PIOA_OER |= (PORT_8BIT);
}


//////////////////////////////////////////////////////////////////
void ide_WriteSector(INT32U addr, INT8U *pBuffer)
{
   INT16U i;
   INT8U u8Temp;
   
   
   INT8U u8Sector[4];
   
   NLEBA_HIGH();    //ide->8bit port disable
   NOEBA_HIGH();
   
   u8Sector[0] = (INT8U)(addr >> 24);
   u8Sector[1] = (INT8U)(addr >> 16);
   u8Sector[2] = (INT8U)(addr >> 8);
   u8Sector[3] = (INT8U)(addr);
   
   ide_TestBsy(); 
   
   vIdeSend8(FILE6, (0xe0 | (u8Sector[0] & 0x0f) ) );  
   vIdeSend8(FILE5, u8Sector[1]);  
   vIdeSend8(FILE4, u8Sector[2]);  
   vIdeSend8(FILE3, u8Sector[3]); 
   vIdeSend8(FILE2, 1); 
   
   ide_vSendCommand(0x30);     //write command
   ide_TestBsyDrq();
   ////////////////////////////////////////////////////////////
   port_SetAddress(FILE0);            //set data reg addr
   *AT91C_PIOA_OER |= (PORT_8BIT);    //8bit port output mode 
   
   
 //  ide_WRReady(addr, 1, WRITE);
      
   for(i=0; i<256; i++)
   {
      pBuffer ++;                              //point to high byte
      u8Temp = *pBuffer;
      *AT91C_PIOA_ODSR = (INT32U)(u8Temp);   //high 8bit out
      NLEAB_LOW();                             //8bit port->ide active
      NLEAB_HIGH();                            //8bit port->ide latch      
      NOEAB_LOW();
      
      pBuffer --;                              //point to low byte
      u8Temp = *pBuffer;
      *AT91C_PIOA_ODSR = (INT32U)(u8Temp);
      
      NWRITE_LOW();
      NWRITE_HIGH();
        
      pBuffer += 2;
   } 
}





⌨️ 快捷键说明

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