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

📄 port.c

📁 用at91sam7s64+ucos写的mp3播放程序
💻 C
字号:
//port.c
#define  PORT_GLOBAL


#include "AT91SAM7S64.h"
#include "Board.h"
#include "type.h"
#include "port.h"
#include "dbgu.h"



/*
void KEY_ISR (void) __irq
{
   INT8U i;
   
   *AT91C_AIC_IDCR = (1 << AT91C_ID_PIOA);                          //禁止PIOA外围中断功能
    
   i = *AT91C_PIOA_ISR;
   *AT91C_AIC_ICCR = (1<<AT91C_ID_PIOA);
   DBGU_Print("Interrupt\n");
  
   *AT91C_AIC_IECR = (1<<AT91C_ID_PIOA);                            //使能PIOA外围中断
   
   *AT91C_AIC_EOICR = 0;                     // End of Interrupt 
}
*/

//----------------------------------------------------------------------
void port_Delay(INT16U time)
{
  INT16U i;
  {
     for(i=0; i<time; i++);
  }
}


//----------------------------------------------------------------------
void port_ClkOpen(void)
{
   *AT91C_PMC_SCER = AT91C_CKGR_MOSCEN;                             //使能系统时钟寄存器的处理器时钟           
   *AT91C_PMC_PCER = 1 << AT91C_ID_PIOA;     
}

////////////////////////////////////////////////////////////////
void port_SpiInit(void)
{
   *AT91C_PIOA_PER |= (MMC_PORT_MASK);      //使能PIOA外设功能
   *AT91C_PIOA_OER |= (MMC_PORT_OUT_MASK);  //输出使能
   *AT91C_PIOA_ODR |= (MMC_PORT_IN_MASK);   //输入使能 
   
   *AT91C_PIOA_PPUER |= SPIPULLUP;     //Pull-up enable  
}


////////////////////////////////////////////////////////////////
void port_8BitInit(void)
{ 
   *AT91C_PIOA_PER |= PORT_CTRL_MASK;
   *AT91C_PIOA_OER |= (PORT_CTRL_MASK | PORT_8BIT);
   *AT91C_PIOA_ODR |= (NUSB_INT | HDD_INTRQ);
   
   *AT91C_PIOA_PPUER |= (PORT_CTRL_MASK | PORT_8BIT | NUSB_INT | HDD_INTRQ);
   
   *AT91C_PIOA_OWER = 0x000000ff;
   *AT91C_PIOA_OWDR = 0xffffff00;  
   
   NLEBA_HIGH();
   NLEAB_HIGH();
   NOEBA_HIGH();
   NOEAB_HIGH();
}


//------------------------------------------------------------------------
void port_IntInit(void)
{
   *AT91C_PIOA_PER = (SW3_MASK | SW4_MASK);                        //使能PIOA外设功能
   *AT91C_PIOA_ODR = (SW3_MASK | SW4_MASK);                        //输入使能 
   *AT91C_PIOA_PPUER = (SW3_MASK | SW4_MASK);                      //Pull-up enable  
   *AT91C_PIOA_IFER = (SW3_MASK | SW4_MASK);
   
   *AT91C_AIC_IDCR = (1 << AT91C_ID_PIOA);                          //禁止PIOA外围中断功能
    
   AT91C_BASE_AIC->AIC_SMR[AT91C_ID_PIOA] = (AT91C_AIC_PRIOR_HIGHEST | AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED);
                                                                    //中断模式(中断级别和触发模式)
   *AT91C_AIC_ICCR = (1<<AT91C_ID_PIOA);                            //中断清除  
   *AT91C_PIOA_IDR = 0xffffffff;                                    //禁止所有PIOA中断
                                                                  
//   AT91C_BASE_AIC->AIC_SVR[AT91C_ID_PIOA] = (unsigned long)KEY_ISR;
   
//   *AT91C_PIOA_IER = (SW3_MASK | SW4_MASK);                         //允许SW3,4中断
   *AT91C_AIC_IECR = (1<<AT91C_ID_PIOA);                            //使能PIOA外围中断
   *AT91C_AIC_FFDR = 0xffffffff;                                    //禁止FIQ  
}


//----------------------------------------------------------------------
INT8U port_GetINT(INT8U u8Device)
{
   if(CH375_INTRQ == u8Device)
   {
     if(*AT91C_PIOA_PDSR & NUSB_INT)
     {
        return 1;
     }
     else
     {
        return 0;
     }
   }
   else if(IDE_INTRQ == u8Device)
   {
     if(*AT91C_PIOA_PDSR & HDD_INTRQ)
     {
        return 1;
     }
     else
     {
        return 0;
     }   
   }
   return 0;
} 


//----------------------------------------------------------------------
void port_SetAddress(INT8U u8Add)
{
   *AT91C_PIOA_ODSR = (INT32U)u8Add;
   
   ADD_LATCH_HIGH();
 //  port_Delay(1);
   ADD_LATCH_LOW();
}


//----------------------------------------------------------------------
void port_SendData(INT8U add, INT8U data)
{
   port_SetAddress(add);        //0111 1110b
   
   *AT91C_PIOA_ODSR = (INT32U)data;

   NWRITE_LOW();
 //  port_Delay(1);
   NWRITE_HIGH();  
}


//----------------------------------------------------------------------
INT8U port_ReadData(INT8U add)
{
   INT32U temp32;
   INT8U  temp8;
   
   port_SetAddress(add);        //0111 1110b
   
   *AT91C_PIOA_ODR |= (PORT_8BIT);
   NREAD_LOW();
  // port_Delay(1);
   temp32 = *AT91C_PIOA_PDSR;
   
   NREAD_HIGH();
   
   *AT91C_PIOA_OER |= (PORT_8BIT);
   
   temp8 = (INT8U)temp32;
   return temp8;
}


//----------------------------------------------------------------------
INT8U port_ReadDataNoAdd(void)
{
   INT32U temp32;
   INT8U  temp8;
   
   *AT91C_PIOA_ODR |= (PORT_8BIT);
   NREAD_LOW();
 //  port_Delay(1);
   temp32 = *AT91C_PIOA_PDSR;
   
   NREAD_HIGH();
   
   *AT91C_PIOA_OER |= (PORT_8BIT);
   
   temp8 = (INT8U)temp32;
   return temp8;  
}




















⌨️ 快捷键说明

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