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

📄 main.bak

📁 AT917S64,ARM处理器的程序。有中断的应用。
💻 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 + -