📄 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低电平触发。
//查询方式
/* 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 + -