📄 main.bak
字号:
#include <AT91SAM7S64.h>
extern void delay_1ms(unsigned int n);
//---------------------------------------------------------------
void irp_in(void) __irq
{
// int i;
// i=*AT91C_AIC_IVR;
*AT91C_PIOA_SODR=0xffffffff;
*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;
}
//---------------------------------------------------------------
void io_irq_handler(void) __irq //I/O中断函数
{
// int i;
/// i=*AT91C_AIC_IVR;
if(*AT91C_PIOA_ISR&(1<<28|1<<29)) //如果检测到了对应管脚的电平变化
{
*AT91C_AIC_ICCR=AT91C_PIO_PA29 | AT91C_PIO_PA28;
*AT91C_PIOA_SODR=0xffffffff;
if(!(*AT91C_PIOA_PDSR&(1<<28)))
{
*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<<29)))
{
*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 = 0; /* End of Interrupt */
}
void init(void)
{
*AT91C_PIOA_PER = 0xffffffff; //设置为POIO
*AT91C_PIOA_PDR = 1<<30; //PA20设为外设
*AT91C_PIOA_ASR = 1<<30; //PA20设为外设B
*AT91C_PMC_PCER = 1<<30; //打开外设时钟
*AT91C_PIOA_PPUER=1<<30;
*AT91C_PIOA_OER = 0x0000000f; //PA01,PA02,PA03,PA04设为输出
*AT91C_PIOA_IFER = 0xfffffff0; //打开虑波
AT91C_AIC_SMR[AT91C_ID_IRQ1]=(0x02<<5)|0x02;
AT91C_AIC_SVR[AT91C_ID_IRQ1]=(unsigned long) *irp_in;
*AT91C_PMC_PCER = (unsigned int)1<<AT91C_ID_PIOA; //允许IO口的时钟
*AT91C_AIC_IDCR = 1<<AT91C_ID_PIOA; //系统里面禁止中断
*AT91C_PIOA_PER = AT91C_PIO_PA29 | AT91C_PIO_PA28; //PA16,15作为IO口
*AT91C_PIOA_ODR = AT91C_PIO_PA29 | AT91C_PIO_PA28; //PA16,15作为输入
*AT91C_PIOA_IER = AT91C_PIO_PA29 | AT91C_PIO_PA28; //使能PA16,15的中断
*AT91C_AIC_ICCR = 1<<AT91C_ID_PIOA; //清除中断
AT91C_AIC_SMR[AT91C_ID_PIOA] = AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL ; //| 1;
AT91C_AIC_SVR[AT91C_ID_PIOA]=(unsigned int)*io_irq_handler;
*AT91C_AIC_IECR =(unsigned int)1<<AT91C_ID_IRQ1;
*AT91C_AIC_IECR =(unsigned int)1<<AT91C_ID_PIOA;
}
int main (void)
{
init();
while(1)
{
*AT91C_PIOA_SODR=0x0000000F;
delay_1ms(500);
*AT91C_PIOA_CODR=0x0000000F;
delay_1ms(500);
*AT91C_PIOA_SODR=0x0000000F;
delay_1ms(500);
*AT91C_PIOA_CODR=0x0000000F;
delay_1ms(500);
*AT91C_PIOA_SODR=0x0000000F;
delay_1ms(500);
*AT91C_PIOA_CODR=0x0000000F;
delay_1ms(500);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -