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

📄 initial.h

📁 经过改进之后的CAN-USB接口卡固件程序
💻 H
字号:
#pragma CODE_SEG DEFAULT

void Port_Init()
{	
	//PORTM
	DDRM_DDRM6 = 1;//输出
	DDRM_DDRM7 = 1;//输出
	
	// DMA传输 PORTH
	DDRH_DDRH0 = 0;//输入
	DDRH_DDRH1 = 1;//输出
	DDRH_DDRH2 = 1;//输出
	
	// LED显示端口 POTRP
	DDRP = 0xFF;//输出
	
	//PORTA,PORTB,R_/W,/IRQ 和 ECLK	
/*	MODE = 0xA0;	//1110 0000   普通窄扩展  
	
	PEAR_NECLK = 0;	//设定ECLK,0 = The associated pin (Port E bit 4) is the external E clock pin.
	PEAR_RDWE = 1;	//设定R_/W,1 = The associated pin (Port E bit 2) is configured as the R/W pin.
	
	PUCR_PUPEE = 1;	//PORTE口上拉		
	
	INITEE = 0x00;	// (111页)
	*/
	
	//中断方式
	INTCR_IRQEN = 1;//使能IRQ中断  (147页)
	INTCR_IRQE = 0;//IRQ低电平触发。
	
	//查询方式
/*	INTCR_IRQEN = 0;*/
	
	MODE = 0xA0;	//1110 0000   普通窄扩展  
	PEAR = 0x04;    //0000 1100	  NECLK=0, LSTRE=1, RDWE=1
	MISC = 0x0D;    //Number of E Clocks Stretched, (118页)
	EBICTL = 0x01;  ////设定ECLK,ESTR=1  (139页) 
	INITEE = 0x00;	
}

//SCI 初始化   (有两个串口0和1)
//注意:倍频的时候,实际波特率为这里设置的2倍
void SCI_Initial(void)
{
	SCI0BDL = (unsigned char)((16000000UL /* OSC freq */ / 2) / (57600/2) /* baud rate */ / 16 /*factor*/); 	
	//SCI Control Register 1,2
	SCI0CR1	=0x00;		//(*  Page 397  *)
	SCI0CR2	=0x2c;		//(*  Page 399  *)
	
	SCI1BDL = (unsigned char)((16000000UL /* OSC freq */ / 2) / (57600/2) /* baud rate */ / 16 /*factor*/); 	
	//SCI Control Register 1,2
	SCI1CR1	=0x00;		//(*  Page 397  *)
	SCI1CR2	=0x2c;		//(*  Page 399  *)		
}


//实时中断初始化
void RTIInit(void)
{
  //48*1.024 ms
  RTICTL = 0x7B; //set RTI prescaler 
  CRGINT = 0x80; //enable RTI interrupts 
}

void CAN0_Initial(void) 
{
	//CAN pin定义
	MODRR = 0x00;
	DDRM = 0xFF;  
	
	//CAN控制0设定, 初始化模式请求, CAN模块使能
	CAN0CTL0 |= 0x01;

	while (!(CAN0CTL0 & 0x01));//******注意,是否需要修改

	//标识符控制设置 
	CAN0IDAC = 0x00;    //2个32 位接收滤波器

	//标识符接收设置
	CAN0IDAR0 = 0xFF;
	CAN0IDAR1 = 0xFF;
	CAN0IDAR2 = 0xFF;
	CAN0IDAR3 = 0xFF;

	CAN0IDAR4 = 0xFF;
	CAN0IDAR5 = 0xFF;
	CAN0IDAR6 = 0xFF;
	CAN0IDAR7 = 0xFF;

	//标识符过滤设置
	CAN0IDMR0 = 0xff;
	CAN0IDMR1 = 0xff;
	CAN0IDMR2 = 0xff;
	CAN0IDMR3 = 0xff;
	CAN0IDMR4 = 0xff;
	CAN0IDMR5 = 0xff;
	CAN0IDMR6 = 0xff;
	CAN0IDMR7 = 0xff;

	//总线定时设置
	CAN0BTR0 = CAN_BTR0;
	CAN0BTR1 = CAN_BTR1;

	//CAN控制1, 模式设置, CAN模块使能
	CAN0CTL1 = 0x80;     //CAN0 普通模式

	//清INITRQ, 进入普通模式
	CAN0CTL0 &= 0xfe;

	while (CAN0CTL1 & 0x01);//******注意,是否需要修改

	//禁止中断
	CAN0RIER = 0x00;
	//发送缓冲区清空
	CAN0TFLG = 0x07;
}

void CAN1_Initial(void) 
{
	//CAN pin定义
	MODRR = 0x00;
	DDRM = 0xFF;  
	
	//CAN控制0设定, 初始化模式请求, CAN模块使能
	CAN1CTL0 |= 0x01;

	while (!(CAN1CTL0 & 0x01));//******注意,是否需要修改

	//标识符控制设置 
	CAN1IDAC = 0x00;    //2个32 位接收滤波器

	//标识符接收设置
	CAN1IDAR0 = 0xFF;
	CAN1IDAR1 = 0xFF;
	CAN1IDAR2 = 0xFF;
	CAN1IDAR3 = 0xFF;

	CAN1IDAR4 = 0xFF;
	CAN1IDAR5 = 0xFF;
	CAN1IDAR6 = 0xFF;
	CAN1IDAR7 = 0xFF;

	//标识符过滤设置
	CAN1IDMR0 = 0xff;
	CAN1IDMR1 = 0xff;
	CAN1IDMR2 = 0xff;
	CAN1IDMR3 = 0xff;
	CAN1IDMR4 = 0xff;
	CAN1IDMR5 = 0xff;
	CAN1IDMR6 = 0xff;
	CAN1IDMR7 = 0xff;

	//总线定时设置
	CAN1BTR0 = CAN_BTR0;
	CAN1BTR1 = CAN_BTR1;

	//CAN控制1, 模式设置, CAN模块使能
	CAN1CTL1 = 0x80;     //CAN1 普通模式

	//清INITRQ, 进入普通模式
	CAN1CTL0 &= 0xfe;

	while (CAN1CTL1 & 0x01);//******注意,是否需要修改

	//接收中断禁止
	CAN1RIER = 0x00;
	//发送缓冲区清空
	CAN1TFLG = 0x07;
}

⌨️ 快捷键说明

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