📄 main.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 + -