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

📄 main.c

📁 ARM9200的can驱动原程序
💻 C
字号:
/*****************************************************************************
;Institue of Automation, Chinese Academy of Sciences
;Beijing Hengyi Embedded System Co.,Ltd (www.hyesco.com)
;File Name:		
;Description:
;Date:			2006-03-15		
;Author:		Wujh
;E_mail:		wujh@hyesco.com
*****************************************************************************/	
#include "AT91RM9200.h"
#include "lib_AT91RM9200.h"
#include "can.h"

extern void AT91F_DBGU_Printk(char *buf,...);
extern void AT91F_ASM_CAN_Handler(void);


//初始化cpu总线
void Init_CAN_Board(void)
{
	    
	/* enable NCS */
    AT91C_BASE_SYS -> EBI_SMC2_CSR[6] = (AT91C_SMC2_NWS & 0x0f) | AT91C_SMC2_WSEN | AT91C_SMC2_DBW_8 | AT91C_SMC2_ACSS_3_CYCLES | AT91C_SMC2_RWSETUP | AT91C_SMC2_RWHOLD;
    // Enable PIOC
    AT91C_BASE_SYS -> PIOC_PDR |= (0x1<<12) ;
	AT91C_BASE_SYS -> PIOC_ASR |= (0x1<<12); 	
	
    AT91C_BASE_SYS -> PIOA_PER |= SJA_INT_PIOA ;
    /* enable input */
	AT91C_BASE_SYS -> PIOA_ODR |= SJA_INT_PIOA;
	/* enable input filter */
	AT91C_BASE_SYS -> PIOA_IFER |= SJA_INT_PIOA;
	/* enable Poll UP */
	AT91C_BASE_SYS -> PIOA_PPUER |= SJA_INT_PIOA;	
	
	/* enable pioa clock */
    AT91C_BASE_SYS -> PMC_PCER |= (0x1<< AT91C_ID_PIOA) | (0x1<< AT91C_ID_PIOC);  
	return;

}


//*----------------------------------------------------------------------------
//* \fn    AT91F_CAN_Handler
//* \brief CAN Handler
//*----------------------------------------------------------------------------
void AT91F_CAN_Handler(void)
{
    int tmp;
    
    AT91C_BASE_SYS->AIC_ICCR = 0x1 << AT91C_ID_PIOA ;
    
    tmp = AT91C_BASE_SYS -> PIOA_ISR;
    
    //CAN设备发生中断,调用中断分发函数
    if(tmp)
    Eint2CanInt();
    
   // AT91C_BASE_SYS->PIOB_IER  = SJA_INT_PIOB ;
   //  AT91F_AIC_EnableIt(AT91C_BASE_AIC,SJA_INT_ID);
    
}


//*----------------------------------------------------------------------------
//* \fn    Int_Setup()
//* \brief CAN Handler
//*----------------------------------------------------------------------------
void Int_Setup(void)
{
	int status;

 	// Configure CAN interrupt 
	AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,
						 SJA_INT_ID,
						 AT91C_AIC_PRIOR_HIGHEST,
						 AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,
						 AT91F_ASM_CAN_Handler);
						 
	
	status =  AT91C_BASE_SYS->PIOA_ISR;
	
	AT91C_BASE_SYS->PIOA_IDR  |= ~SJA_INT_PIOA ;	
	
	AT91C_BASE_SYS->PIOA_IER  = SJA_INT_PIOA ;	
    		
  	// Enable CAN interrupt
	AT91F_AIC_EnableIt(AT91C_BASE_AIC,SJA_INT_ID);

	return;
}


//主函数
int main(void)
{ 
	int ret=0;

	//初始化系统读写总线
	Init_CAN_Board();

	//初始化can寄存器
	ret=Init_CAN();  
	if(ret)//初始化错误
		AT91F_DBGU_Printk("Init can error,error id=%d!\n",ret);
	else
		AT91F_DBGU_Printk("Init can sucess!\n");
	 
	//安装中断
	Int_Setup();
	
	//发送测试函数
	CanSendData();
	
	//接受测试函数
    while(1)
    CanReceiveData(); 
	  	
    return 0;		
}

⌨️ 快捷键说明

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