程序如下,外部晶振为4M
void CAN1_Init(void)
{
CANCTL1_CANE = 1;
/* CANCTL0: INITRQ=1 */
setReg8Bits(CANCTL0, 0x01U);
while(CANCTL1_INITAK == 0U)
{ /* Wait for init acknowledge */
}
/* CANCTL1: CANE=1,CLKSRC=0,LOOPB=0,LISTEN=0,BORM=0,WUPM=0,SLPAK=0,INITAK=1 */
setReg8(CANCTL1, 0x81U);
/* CANBTR1: SAMP=0,TSEG22=0,TSEG21=1,TSEG20=1,TSEG13=1,TSEG12=0,TSEG11=1,TSEG10=0 */
setReg8(CANBTR1, 0x3AU);
/* CANBTR0: SJW1=1,SJW0=1,BRP5=0,BRP4=0,BRP3=0,BRP2=0,BRP1=0,BRP0=1 */
setReg8(CANBTR0, 0xC1U);
/* CANIDAC: ??=0,??=0,IDAM1=0,IDAM0=1,??=0,IDHIT2=0,IDHIT1=0,IDHIT0=0 */
setReg8(CANIDAC, 0x10U);
/* CANIDAR0: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CANIDAR0, 0x00U);
/* CANIDAR1: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CANIDAR1, 0x00U);
/* CANIDAR2: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CANIDAR2, 0x00U);
/* CANIDAR3: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CANIDAR3, 0x00U);
/* CANIDAR4: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CANIDAR4, 0x00U);
/* CANIDAR5: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CANIDAR5, 0x00U);
/* CANIDAR6: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CANIDAR6, 0x00U);
/* CANIDAR7: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CANIDAR7, 0x00U);
/* CANIDMR0: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */
setReg8(CANIDMR0, 0x00U);
/* CANIDMR1: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */
setReg8(CANIDMR1, 0x00U);
/* CANIDMR2: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */
setReg8(CANIDMR2, 0x00U);
/* CANIDMR3: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */
setReg8(CANIDMR3, 0x00U);
/* CANIDMR4: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */
setReg8(CANIDMR4, 0x00U);
/* CANIDMR5: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */
setReg8(CANIDMR5, 0x00U);
/* CANIDMR6: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */
setReg8(CANIDMR6, 0x00U);
/* CANIDMR7: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */
setReg8(CANIDMR7, 0x00U);
/* CANCTL0: INITRQ=0 */
clrReg8Bits(CANCTL0, 0x01U);
while(CANCTL1_INITAK) { /* Wait for init exit */
}
/* CANCTL0: RXFRM=0,RXACT=0,CSWAI=0,SYNCH=0,TIME=0,WUPE=0,SLPRQ=0,INITRQ=0 */
setReg8(CANCTL0, 0x00U);
/* CANRIER: WUPIE=0,CSCIE=0,RSTATE1=0,RSTATE0=0,TSTATE1=0,TSTATE0=0,OVRIE=0,RXFIE=1 */
setReg8(CANRIER, 0x01U);
/* CANTIER: ??=0,??=0,??=0,??=0,??=0,TXEIE2=0,TXEIE1=0,TXEIE0=0 */
setReg8(CANTIER, 0x00U);
}
总是无法退出初始化模式,求大虾相助
|