www.pudn.com > CAN_USB.rar > Initial.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低电平触发。 
	 
	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; 
}