?? main.c.bak
字號:
/****************************************************************************
* 文件名:main.c
* 功 能:
*
* 說 明:
****************************************************************************/
#include <AT91SAM7S64.h>
//#include <SAM7S.h>
/****************************************************************************
* 文件名:irp_in()
* 功 能:中斷函數
*
* 說 明:
****************************************************************************/
extern void delay_1ms(unsigned int n);
//---------------------------------------------------------------
void irp_in(void) __irq
{
*AT91C_PIOA_SODR=0x00000001;
delay_1ms(500);
*AT91C_PIOA_CODR=0x00000001;
delay_1ms(500);
*AT91C_PIOA_SODR=0x00000001;
delay_1ms(500);
*AT91C_PIOA_CODR=0x00000001;
delay_1ms(500);
*AT91C_PIOA_SODR=0x00000001;
delay_1ms(500);
*AT91C_PIOA_CODR=0x00000001;
delay_1ms(500);
*AT91C_AIC_EOICR = 0x00;
}
int a,b,b,b,
//---------------------------------------------------------------
void io_irq_handler(void) __irq//I/O中斷函數
{
if(*AT91C_PIOA_ISR&(1<<14|1<<15)) //如果檢測到了對應管腳的電平變化
{
if(!(*AT91C_PIOA_PDSR&(1<<15)))
{
*AT91C_PIOA_SODR=0x00000002;
delay_1ms(500);
*AT91C_PIOA_CODR=0x00000002;
delay_1ms(500);
*AT91C_PIOA_SODR=0x00000002;
delay_1ms(500);
*AT91C_PIOA_CODR=0x00000002;
delay_1ms(500);
*AT91C_PIOA_SODR=0x00000002;
delay_1ms(500);
*AT91C_PIOA_CODR=0x00000002;
delay_1ms(500);
}
else if(!(*AT91C_PIOA_PDSR&(1<<14)))
{
*AT91C_PIOA_SODR=0x00000004;
delay_1ms(500);
*AT91C_PIOA_CODR=0x00000004;
delay_1ms(500);
*AT91C_PIOA_SODR=0x00000004;
delay_1ms(500);
*AT91C_PIOA_CODR=0x00000004;
delay_1ms(500);
*AT91C_PIOA_SODR=0x00000004;
delay_1ms(500);
*AT91C_PIOA_CODR=0x00000004;
delay_1ms(500);
}
}
*AT91C_AIC_EOICR = 1; /* End of Interrupt */
}
extern
/****************************************************************************
* 文件名:init()
* 功 能:初始化IO、中斷
*
* 說 明:
****************************************************************************/
void init(void)
{
unsigned long a;
*AT91C_PIOA_PER = 0xffffffff; //設置為POIO
*AT91C_PIOA_PDR = 1<<20; //PA20設為外設
*AT91C_PIOA_BSR = 1<<20; //PA20設為外設B
*AT91C_PMC_PCER = 1<<20; //打開外設時鐘
*AT91C_PIOA_OER = 0x0000000f; //PA01,PA02,PA03,PA04設為輸出
*AT91C_PIOA_IFER = 0xfffffff0; //打開慮波
AT91C_AIC_SVR[AT91C_ID_IRQ0]=(unsigned long) *irp_in;
a=*AT91C_AIC_ISR;
AT91C_AIC_SMR[AT91C_ID_IRQ0]=0x02<<6;
*AT91C_PMC_PCER = (unsigned int)1<<AT91C_ID_PIOA; //允許IO口的時鐘
*AT91C_AIC_IDCR = 1<<AT91C_ID_PIOA; //系統里面禁止中斷
*AT91C_PIOA_PER = AT91C_PIO_PA15 | AT91C_PIO_PA14; //PA16,15作為IO口
*AT91C_PIOA_ODR = AT91C_PIO_PA15 | AT91C_PIO_PA14; //PA16,15作為輸入
*AT91C_PIOA_IER = AT91C_PIO_PA15 | AT91C_PIO_PA14; //使能PA16,15的中斷
*AT91C_AIC_ICCR = 1<<AT91C_ID_PIOA; //清除中斷
AT91C_AIC_SMR[AT91C_ID_PIOA] = AT91C_AIC_SRCTYPE_EXT_HIGH_LEVEL | 1;
AT91C_AIC_SVR[AT91C_ID_PIOA]=(unsigned int)*io_irq_handler;
*AT91C_AIC_IECR = 1<<AT91C_ID_IRQ0; //打開AIC中斷
*AT91C_AIC_IECR = 1<<AT91C_ID_PIOA; //打開AIC中斷
}
/****************************************************************************
* 文件名:main.c
* 功 能:
*
* 說 明:
****************************************************************************/
int main (void)
{
init();
while(1)
{
*AT91C_PIOA_SODR=0x00000008;
delay_1ms(500);
*AT91C_PIOA_CODR=0x00000008;
delay_1ms(500);
*AT91C_PIOA_SODR=0x00000008;
delay_1ms(500);
*AT91C_PIOA_CODR=0x00000008;
delay_1ms(500);
*AT91C_PIOA_SODR=0x00000008;
delay_1ms(500);
*AT91C_PIOA_CODR=0x00000008;
delay_1ms(500);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -