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

📄 lcodu_init.c

📁 是关于arm7的代码
💻 C
📖 第 1 页 / 共 2 页
字号:
unsigned char reset_timer0()
{  unsigned int dummy;
    //if(v_tmatpc==0) return ACK_CMDNOTEXE;
      //tc0
      AT91C_BASE_PMC->PMC_PCER = 1<<AT91C_ID_TC0;
    //* Disable the clock and the interrupts
    AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS ;
    AT91C_BASE_TC0->TC_IDR = 0xFFFFFFFF ;
    //* Clear status bit
    dummy = AT91C_BASE_TC0->TC_SR;
    //* Suppress warning variable "dummy" was set but never used
    dummy = dummy;
    //* Set the Mode of the Timer Counter;SELECT THE TCCLKS AND ENBALBE CPCTRG
    AT91C_BASE_TC0->TC_CMR = TC_CLKS_MCK1024 |AT91C_TC_CPCTRG; 
    //AT91C_BASE_TC1->TC_CMR = TC_CLKS_MCK1024 ; 
    //* Enable the clock
    AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN ;    
    //RC 
    AT91C_BASE_TC0->TC_RC = RC_8MS;
    //* Open tc1 interrupt
    AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC0, TIMER0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, timer0_c_irq_handler);
    //  IRQ enable CPC
    AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS;  
    AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0);
    
   
    //* Start timer0
        AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG ;
    return 0;
}
#endif

void close_timer0()
{ 
    //* Disable the clock and the interrupts
    AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS ;
    AT91C_BASE_TC0->TC_IDR = 0xFFFFFFFF ;
}


//*-----------------------------------------------------------------------------
//* Function Name       : US_int
//* Object              : initiate US0 and US1.
//* autor               : wang ping
//* Input Parameters    : none
//* Output Parameters   : none
//*-----------------------------------------------------------------------------
void US_int()
{
  
  AT91PS_USART COM0 = AT91C_BASE_US0;

 	//* Configure PIO controllers to periph mode
 	AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA,
 		((unsigned int) AT91C_PA5_RXD0    ) |
 		((unsigned int) AT91C_PA6_TXD0    ) , // Peripheral A
 		0); // Peripheral B


   	// First, enable the clock of the PIOA
    	AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_US0 ) ;
	// Usart Configure
        AT91F_US_Configure (COM0, MCK, AT91C_US_ASYNC_MODE_WP, AT91_BAUD_RATE, 0);
        //initiation the adc pdc
        AT91F_PDC_Open (AT91C_BASE_PDC_US0);
       //Set the PDC buffer and counter ; only use the first buffer 
        AT91F_PDC_ReceiveFrame ( AT91C_BASE_PDC_US0 , (char *) &us0_recv_dma[0], MAX_RECV_BUF,0,0);
   
        //enbale pdc interrupt        
         COM0->US_IDR = 0xffffffff;
         COM0->US_IER = AT91C_US_RXBUFF;
        //* open Usart 1 interrupt
         AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_US0, US0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, US0_c_irq_handler);
	 AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);
   
         // Enable usart
	COM0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;

//	AT91F_US_PutChar (COM0,'X');
        
        //usart1
        
        AT91PS_USART COM1 = AT91C_BASE_US1;

 	//* Configure PIO controllers to periph mode
 	AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA,
 		((unsigned int) AT91C_PA21_RXD1    ) |
 		((unsigned int) AT91C_PA22_TXD1    ) , // Peripheral A
 		0); // Peripheral B


   	// First, enable the clock of the PIOA
    	AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_US1 ) ;
	// Usart Configure
        AT91F_US_Configure (COM1, MCK, AT91C_US_ASYNC_MODE_WP, AT91_BAUD_RATE, 0);
        //initiation the adc pdc
        AT91F_PDC_Open (AT91C_BASE_PDC_US1);
       //Set the PDC buffer and counter ; only use the first buffer 
        AT91F_PDC_ReceiveFrame ( AT91C_BASE_PDC_US1 , (char *) &us1_recv_dma[0], MAX_RECV_BUF,0,0);
   
        //enbale pdc interrupt        
         COM1->US_IDR = 0xffffffff;
         COM1->US_IER = AT91C_US_RXBUFF;
        //* open Usart 1 interrupt
         AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_US1, US1_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, US1_c_irq_handler);
	 AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US1);
   
         // Enable usart
	COM1->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;

    AT91F_US_PutChar (COM1,'X');
  
}

//*-----------------------------------------------------------------------------
//* Function Name       : init_pio
//* Object              : initiate PIO,enable PIO clock.
//* autor               : wang ping
//* Input Parameters    : none
//* Output Parameters   : none
//*-----------------------------------------------------------------------------
void init_pio()
{
   unsigned int tmp;
   AT91C_BASE_PIOA->PIO_PDR = PA17_TEMP;
   AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA;    // 允许PIO时钟
   tmp=0;
   tmp=0;
   tmp=(BIT0|BIT1|BIT2|BIT4|BIT7|BIT16|BIT18|BIT19|BIT23|BIT24|BIT25|BIT26|PA12_MUTE|BIT28|PA15_LE1|PA8_LED);//|AT91C_PA20_IRQ0|AT91C_PA30_IRQ1
   AT91C_BASE_PIOA->PIO_PER = tmp;  // 配置PA0为输出->att0 and att1
   AT91C_BASE_PIOA->PIO_OER = tmp;  
   AT91C_BASE_PIOA->PIO_SODR= tmp;
   
   //AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, tmp ) ;
}


//*-----------------------------------------------------------------------------
//* Function Name       : initiation
//* Object              : initiate RTT.And it's the entrance of the initiation
//* autor               : wang ping
//* Input Parameters    : none
//* Output Parameters   : none
//*-----------------------------------------------------------------------------
void initiation(void)
{
 
    //4HZ,即每秒计4次
  AT91C_BASE_RTTC->RTTC_RTMR = 0X2000;    
        
        
  ADC_int();
  IRQ_int();
  TC_int();
  US_int();
  init_pio();
 
//the below is for test


  
#if(0)
unsigned int wzm_temp1;
short wzm_temp2,wzm_temp3;

for(wzm_temp2=0;wzm_temp2<US0_TX_MAX;wzm_temp2++)
{
    US0_TX_Buffer[wzm_temp2]=wzm_temp2+10;
    US1_TX_Buffer[wzm_temp2]=wzm_temp2*2;
    
} 
  if (AT91F_PDC_IsTxEmpty(AT91C_BASE_PDC_US0))
      AT91F_PDC_SetTx(AT91C_BASE_PDC_US0, (char *)&US0_TX_Buffer, US0_TX_MAX);
if (AT91F_PDC_IsTxEmpty(AT91C_BASE_PDC_US1))
      AT91F_PDC_SetTx(AT91C_BASE_PDC_US1, (char *)&US1_TX_Buffer, US1_TX_MAX);
  
  
      	AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;  
      //LED --PA8
    	AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED1 ) ;
        
        
         AT91C_BASE_PMC->PMC_PCER = 1<<AT91C_ID_SPI;
      AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA,
 		((unsigned int) AT91C_PA11_NPCS0 ) |
 		((unsigned int) AT91C_PA13_MOSI )|((unsigned int)AT91C_PA14_SPCK) , // Peripheral A
 		0); // Peripheral B
      //reset spi
      AT91C_BASE_SPI->SPI_CR = AT91C_SPI_SWRST;
      AT91C_BASE_SPI->SPI_CR = AT91C_SPI_LASTXFER;
      //master 
      AT91C_BASE_SPI->SPI_MR = AT91C_SPI_MSTR | 44<<24 ;      
      AT91C_BASE_SPI->SPI_CSR[0] = AT91C_SPI_NCPHA|AT91C_SPI_CPOL|AT91C_SPI_BITS_16|22<<8;      
      //enable
      AT91C_BASE_SPI->SPI_CR = AT91C_SPI_SPIEN;
      
 
     
 wzm_temp3 = 0x0000;
  
while(1)
{
  wzm_temp3 =wzm_temp3+0x100;
  if (wzm_temp3 > 0xf00) wzm_temp3 =0;
   AT91C_BASE_SPI->SPI_TDR = wzm_temp3;
    
     
  wzm_temp1=AT91C_BASE_RTTC->RTTC_RTVR;
  wzm_temp2 = wzm_temp1%4;
  if(wzm_temp2)
     {
        AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED1 );
    }
    else
    {
        AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED1 );
    }
 

//  printf("..%d",wzm_temp1);

}

#endif

  
}

⌨️ 快捷键说明

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