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

📄 main.bak

📁 AT917S64,ARM处理器的程序。有中断
💻 BAK
字号:
#include <AT91SAM7S64.h>

unsigned int ppt=0;



void delay_1ms(unsigned int n)                                      
{
    unsigned int i;
    unsigned int j;
    for (j=0;j<n;j++)
    {
     for (i=0;i<3000;i++);
    }
}

void  irp_in(void) __irq 
{ 
//  int i;
//  i=*AT91C_AIC_IVR;  
    if((*AT91C_PIOA_ODSR)&AT91C_PIO_PA0) *AT91C_PIOA_CODR=0X01;
    else                                 *AT91C_PIOA_SODR=0X01;
    *AT91C_AIC_EOICR = 0x00;
}
 
//---------------------------------------------------------------
void io_irq_handler(void) __irq                    
{ 
    if(*AT91C_PIOA_ISR&(1<<28|1<<29))   
    {
     if(!(*AT91C_PIOA_PDSR&(1<<28))) 
      {
       if((*AT91C_PIOA_ODSR)&AT91C_PIO_PA1) *AT91C_PIOA_CODR=0X02;
       else                                 *AT91C_PIOA_SODR=0X02;
      }
     else if(!(*AT91C_PIOA_PDSR&(1<<29)))
     {
       if((*AT91C_PIOA_ODSR)&AT91C_PIO_PA2) *AT91C_PIOA_CODR=0X04;
	else                                 *AT91C_PIOA_SODR=0X04;
     }
    }
   *AT91C_AIC_EOICR = 0;                 /* End of Interrupt */
}

void  TC2_int(void) __irq
{
	unsigned int i;
	i= *AT91C_TC2_SR;  
	if((*AT91C_PIOA_ODSR)&AT91C_PIO_PA3) *AT91C_PIOA_CODR=0X08;
	else                                 *AT91C_PIOA_SODR=0X08;
	ptt++;
	*AT91C_US0_RHR=ptt;
        *AT91C_AIC_EOICR = 0x00;
}

void  usart_irq_handler(void) __irq
{
	
	*AT91C_US0_THR=*AT91C_US0_RHR&0xff;
    *AT91C_AIC_EOICR = 0x00;
}


void mcu_init(void)
{
	
//------------------setup pio-----------------------	 
       *AT91C_PIOA_PER =  0xffffffff;                                     
       *AT91C_PIOA_PDR = AT91C_PA30_IRQ1|AT91C_PA5_RXD0|AT91C_PA6_TXD0;     
       *AT91C_PIOA_ASR = AT91C_PA30_IRQ1|AT91C_PA5_RXD0|AT91C_PA6_TXD0;	               
       *AT91C_PIOA_PPUER=AT91C_PA30_IRQ1;
       *AT91C_PIOA_IFER = 0xfffffff0;         
       *AT91C_PIOA_OER = AT91C_PIO_PA0 | AT91C_PIO_PA1|
                         AT91C_PIO_PA2 | AT91C_PIO_PA3;  
       *AT91C_PIOA_SODR=0xffffffff;                              //clear outpin                           
       *AT91C_PMC_PCER = (unsigned int)1<<AT91C_ID_TC2 |(unsigned int)1<<AT91C_ID_US0|
                         (unsigned int)1<<AT91C_ID_PIOA|(unsigned int)1<<AT91C_ID_IRQ1;		 
	          
//-------------------setup timer2----------------------
       *AT91C_TC2_CCR  = AT91C_TC_CLKEN;                                 
       *AT91C_TC2_CMR  = AT91C_TC_WAVE|AT91C_TC_WAVESEL_UP_AUTO|AT91C_TC_CLKS_TIMER_DIV5_CLOCK;
       *AT91C_TC2_RC   = 65535;
       *AT91C_TC2_IER  = AT91C_TC_CPCS;
       AT91C_AIC_SMR[AT91C_ID_TC2] = AT91C_AIC_PRIOR_LOWEST|AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE;
       AT91C_AIC_SVR[AT91C_ID_TC2]=(unsigned int)*TC2_int;
       *AT91C_TC2_CCR  = AT91C_TC_SWTRG;
       
//--------------------setup IRQ1-----------------------       
       AT91C_AIC_SMR[AT91C_ID_IRQ1]=AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE|0x03;
       AT91C_AIC_SVR[AT91C_ID_IRQ1]=(unsigned long) *irp_in;
       
//--------------------setup pio interuput--------------      
      *AT91C_AIC_IDCR = 1<<AT91C_ID_PIOA;                   // stop int  
      *AT91C_PIOA_PER = AT91C_PIO_PA29 | AT91C_PIO_PA28;      
      *AT91C_PIOA_ODR = AT91C_PIO_PA29 | AT91C_PIO_PA28;      
      *AT91C_PIOA_IER = AT91C_PIO_PA29 | AT91C_PIO_PA28;      
      *AT91C_AIC_ICCR = 1<<AT91C_ID_PIOA;                 //clear int
      AT91C_AIC_SMR[AT91C_ID_PIOA] = AT91C_AIC_SRCTYPE_HIGH_LEVEL|0x01 ;   
      AT91C_AIC_SVR[AT91C_ID_PIOA]=(unsigned int)*io_irq_handler;

//-------------------setup usart-----------------------
      *AT91C_US0_CR=AT91C_US_RXEN|AT91C_US_TXEN;
	  *AT91C_US0_MR=AT91C_US_USMODE_NORMAL|AT91C_US_CLKS_CLOCK|AT91C_US_CHRL_8_BITS|
	                AT91C_US_PAR_NONE|AT91C_US_NBSTOP_1_BIT|AT91C_US_MSBF;
	  *AT91C_US0_BRGR=78;
	  *AT91C_US0_IER=AT91C_US_RXRDY;//|AT91C_US_TXRDY;
	  AT91C_AIC_SMR[AT91C_ID_US0] = AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE|0x01 ;   
      AT91C_AIC_SVR[AT91C_ID_US0]=(unsigned int)*usart_irq_handler|0X05;
      
      *AT91C_AIC_IECR =(unsigned int)1<<AT91C_ID_PIOA|(unsigned int)1<<AT91C_ID_IRQ1| 
                       (unsigned int)1<<AT91C_ID_US0 |(unsigned int)1<<AT91C_ID_TC2;	
}

int  main (void)
{
	   
       mcu_init(); 
       while(1);

}

⌨️ 快捷键说明

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