在线时间3 小时
UID3172964
注册时间2015-10-19
NXP金币0
该用户从未签到
新手上路

- 积分
- 21
- 最后登录
- 2017-2-9
|
我初次使用9s12系列的mcu,在使用can模块收发数据时遇到问题
can模块的配置采用pe自动生成的代码,初始化函数如下:
void CAN0_Init(void)
{
/* CAN0CTL0: INITRQ=1 */
setReg8Bits(CAN0CTL0, 0x01U);
while(CAN0CTL1_INITAK == 0U) { /* Wait for init acknowledge */
}
/* CAN0CTL1: CANE=1,CLKSRC=0,LOOPB=0,LISTEN=0,BORM=0,WUPM=0,SLPAK=0,INITAK=1 */
setReg8(CAN0CTL1, 0x81U);
/* CAN0BTR1: SAMP=0,TSEG22=1,TSEG21=1,TSEG20=0,TSEG13=0,TSEG12=1,TSEG11=1,TSEG10=1 */
setReg8(CAN0BTR1, 0x67U);
/* CAN0BTR0: SJW1=1,SJW0=1,BRP5=0,BRP4=0,BRP3=0,BRP2=1,BRP1=0,BRP0=0 */
setReg8(CAN0BTR0, 0xC4U);
/* CAN0IDAC: ??=0,??=0,IDAM1=0,IDAM0=0,??=0,IDHIT2=0,IDHIT1=0,IDHIT0=0 */
setReg8(CAN0IDAC, 0x00U);
/* CAN0IDAR0: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CAN0IDAR0, 0x00U);
/* CAN0IDAR1: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CAN0IDAR1, 0x00U);
/* CAN0IDAR2: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CAN0IDAR2, 0x00U);
/* CAN0IDAR3: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CAN0IDAR3, 0x00U);
/* CAN0IDAR4: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CAN0IDAR4, 0x00U);
/* CAN0IDAR5: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CAN0IDAR5, 0x00U);
/* CAN0IDAR6: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CAN0IDAR6, 0x00U);
/* CAN0IDAR7: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */
setReg8(CAN0IDAR7, 0x00U);
/* CAN0IDMR0: AM7=1,AM6=1,AM5=1,AM4=1,AM3=1,AM2=1,AM1=1,AM0=1 */
setReg8(CAN0IDMR0, 0xFFU);
/* CAN0IDMR1: AM7=1,AM6=1,AM5=1,AM4=1,AM3=1,AM2=1,AM1=1,AM0=1 */
setReg8(CAN0IDMR1, 0xFFU);
/* CAN0IDMR2: AM7=1,AM6=1,AM5=1,AM4=1,AM3=1,AM2=1,AM1=1,AM0=1 */
setReg8(CAN0IDMR2, 0xFFU);
/* CAN0IDMR3: AM7=1,AM6=1,AM5=1,AM4=1,AM3=1,AM2=1,AM1=1,AM0=1 */
setReg8(CAN0IDMR3, 0xFFU);
/* CAN0IDMR4: AM7=1,AM6=1,AM5=1,AM4=1,AM3=1,AM2=1,AM1=1,AM0=1 */
setReg8(CAN0IDMR4, 0xFFU);
/* CAN0IDMR5: AM7=1,AM6=1,AM5=1,AM4=1,AM3=1,AM2=1,AM1=1,AM0=1 */
setReg8(CAN0IDMR5, 0xFFU);
/* CAN0IDMR6: AM7=1,AM6=1,AM5=1,AM4=1,AM3=1,AM2=1,AM1=1,AM0=1 */
setReg8(CAN0IDMR6, 0xFFU);
/* CAN0IDMR7: AM7=1,AM6=1,AM5=1,AM4=1,AM3=1,AM2=1,AM1=1,AM0=1 */
setReg8(CAN0IDMR7, 0xFFU);
/* CAN0CTL0: INITRQ=0 */
clrReg8Bits(CAN0CTL0, 0x01U);
while(CAN0CTL1_INITAK) { /* Wait for init exit */
}
/* CAN0CTL0: RXFRM=0,RXACT=0,CSWAI=0,SYNCH=0,TIME=0,WUPE=0,SLPRQ=0,INITRQ=0 */
setReg8(CAN0CTL0, 0x00U);
/* CAN0RIER: WUPIE=0,CSCIE=1,RSTATE1=0,RSTATE0=0,TSTATE1=0,TSTATE0=0,OVRIE=0,RXFIE=1 */
setReg8(CAN0RIER, 0x41U);
/* CAN0TIER: ??=0,??=0,??=0,??=0,??=0,TXEIE2=0,TXEIE1=0,TXEIE0=0 */
setReg8(CAN0TIER, 0x00U);
}
中断向量表也是由pe自动生成:
&ISR_CAN0_Tx, /* 0x58 0xFFB0 1 no ivVcan0tx used by PE */
&ISR_CAN0_Rx, /* 0x59 0xFFB2 1 no ivVcan0rx used by PE */
&ISR_CAN0_Error, /* 0x5A 0xFFB4 1 no ivVcan0err used by PE */
&ISR_CAN0_Wakeup, /* 0x5B 0xFFB6 1 no ivVcan0wkup used by PE */
中断子函数pe生成:
#pragma CODE_SEG __NEAR_SEG NON_BANKED
/*
** ===================================================================
** Interrupt handler : ISR_CAN0_Rx
**
** Description :
** User interrupt service routine.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
ISR(ISR_CAN0_Rx)
{
/* Write your interrupt code here ... */
CAN0_RxISR();
}
#pragma CODE_SEG DEFAULT
在调试接收模块时发现,接收中断已使能,can模块收到数据,也产生接收满标志:


但是程序未能进到接收中断。
请问是还有什么寄存器没有配置吗?
|
|