在线时间0 小时
UID209373
注册时间2009-9-17
NXP金币0
该用户从未签到
新手上路

- 积分
- 57
- 最后登录
- 1970-1-1
|
我用的是MC9S12P32单片机,程序初始化不成功,老是在 while(!(CANCTL0_SYNCH)); /* Wait for Synchronization */这里等待,以下是我的初始化代码,希望能得到高人的指点,已经调了有几天了.
void CANInit(void) {
CANCTL0 |= CANCTL0_INITRQ_MASK; /* Enter Initialization Mode
*
* 0b00000001
* ||||||||__ Enter Initialization Mode
* |||||||___ Sleep Mode Request bit
* ||||||____ Wake-Up disabled
* |||||_____ Time stamping disabled
* ||||______ Synchronized Status
* |||_______ CAN not affected by Wait
* ||________ Receiver Active Status bit
* |_________ Received Frame Flag bit
*/
while (!(CANCTL1&0x01)){}; /* Wait for Initialization Mode acknowledge
* INITRQ bit = 1
*/
CANCTL1 |= CANCTL1_CANE_MASK|CANCTL1_CLKSRC_MASK;
CANCTL1_LOOPB = 0; /* Set to 1 for LoopBack Mode, 0 otherwise */
CANCTL1_LISTEN = 0; /* Not listen only mode 0ÊÇÕý³£Ä£Ê½*/
CANBTR0_BRP = 1;
CANBTR0_SJW =1;
CANBTR1_SAMP = 0; /* One sample per bit */
CANBTR1_TSEG_10 = 4;
CANBTR1_TSEG_20 = 1;
CANIDAC_IDAM = 0x01; /* Four 16-bit acceptance filters */
/* Acceptance Filters */
CANIDAR0 = ACC_CODE_ID100_HIGH; //|\ 16 bit Filter 0
CANIDMR0 =0xff; //MASK_CODE_ST_ID_HIGH; //| \__ Accepts Standard Data Frame Msg
CANIDAR1 = ACC_CODE_ID100_LOW; //| / with ID 0x100
CANIDMR1 = 0xff;//MASK_CODE_ST_ID_LOW; //|/
CANIDAR2 = 0x00; //|\ 16 bit Filter 1
CANIDMR2 =0xff;// MASK_CODE_ST_ID_HIGH; //| \__ Accepts Standard Data Frame Msg
CANIDAR3 = 0x00; //| / with ID 0x000
CANIDMR3 = 0xff;//MASK_CODE_ST_ID_LOW; //|/
CANIDAR4 = 0x00; //|\ 16 bit Filter 2
CANIDMR4 = 0xff;//MASK_CODE_ST_ID_HIGH; //| \__ Accepts Standard Data Frame Msg
CANIDAR5 = 0x00; //| / with ID 0x000
CANIDMR5 = 0xff;//MASK_CODE_ST_ID_LOW; //|/
CANIDAR6 = 0x00; //|\ 16 bit Filter 3
CANIDMR6 = 0xff;//MASK_CODE_ST_ID_HIGH; //| \__ Accepts Standard Data Frame Msg
CANIDAR7 = 0x00; //| / with ID 0x000
CANIDMR7 = 0xff;//MASK_CODE_ST_ID_LOW; //|/
CANCTL0_INITRQ = 0; /* Exit initialization mode request */
while (CANCTL1_INITAK); /* Wait for Normal Mode */
while(!(CANCTL0_SYNCH)); /* Wait for Synchronization */
CANRFLG_RXF = 1; /* Clear receiver flags */
CANRIER_RXFIE = 0; /* Enable Full Receive Buffer interrupt */
}
|
|