📄 port.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 + -