查看: 3999|回复: 0

MC9S08DZ32的MSCAN的LOOPB模式

[复制链接]

该用户从未签到

9

主题

18

帖子

0

新手上路

Rank: 1

积分
70
最后登录
1970-1-1
发表于 2010-10-4 02:23:14 | 显示全部楼层 |阅读模式
我的程序进入不了CAN接收中断,如果使能发送中断就会reset。附上代码,请大家帮我找找原因。
/*---------------------------mscan.h----------------------------*/
#define    TSEG1     5  //Time segment 1 = 5
#define    TSEG2     2  //Time segment 2 = 2
#define    CAN_BRP    10  //波特率预分频系数 = 10
#define    CAN_SJW     2  //同步跳转宽度 = 2时钟周期
#define  Fliter_16Bit     0x01  //16位滤波器
#define  CANIDARx_DEFAULT  0x00
#define  ALLCROSS    0xFF  
            
#define  MAX_LEN     0x08  //消息最大长度
#define  CAN_NO_ERR    0x00  //无错误
#define  CAN_ERR_BUFFER_FULL  0x80  //发送器满
#define  TRAN_INTERRUPT   0x00  //发送缓冲器空中断
#define  RECV_INTERRUPT   0x01  //接收缓冲器满中断
typedef struct mscan_msg{      //消息结构体定义
 INT16U id;
 INT8U RTR;
 INT8U data[8];
 INT8U len;
 INT8U prio; 
}CanMsg;
extern CanMsg MESSAGE_1;
extern void  MSCAN_Init ( void );
extern INT8U MSCAN_SendMsg ( CanMsg msg);
void CANRx_ISR(void);
#endif
/*---------------------------mscan.c----------------------------*/
/*-------------------------------------------------------
 函数名: MSCAN_Init
 变量输入: 无
 变量输出: 无
 函数功能: 初始化MSCAN内部控制器
--------------------------------------------------------*/
void MSCAN_Init ( void ) {
 INT8U sjw, brp;
 INT8U tseg1,tseg2;
 
 if( !CANCTL0_INITRQ ) CANCTL0_INITRQ = 1;  //激活CAN初始化模式
  while( !CANCTL1_INITAK );     //等待进入初始化模式
 
 sjw = ( CAN_SJW - 1)  MAX_LEN )  return ( FALSE ); /*检查消息数据长度是否小于8*/
 if( !CANCTL0_SYNCH )  return ( FALSE );   /*检查是否与CAN总线同步*/
 
 txbuf_num = 0;
            
 do{       /*查询一个空的发送缓冲器*/
  CANTBSEL = CANTFLG;
  txbuf_num = CANTBSEL;
 }while( !txbuf_num );
 CANTIDR0 = ( INT8U )( msg.id >> 3 ); /*写标识符*/
 CANTIDR1 = ( INT8U )( msg.id  5) );
 
 MESSAGE_1.len = CANRDLR;
 
 for( i = 0; i < MESSAGE_1.len; i++ ){
  MESSAGE_1.data = *( ( &CANRDSR0 ) + i );
 }
 
 if( MESSAGE_1.data[0] = 0x08) LED2_ON;
 else     LED3_ON;
 CANRFLG_RXF = 1;        /*清除RXF标志*/ 
}
/*---------------------------main.c-----------------------------*/
/*------------------------------------------------------
 任务名称: Task_Mscan_Send       
 变量输入: 无           
 变量输出: 无           
 任务描述: MSCAN初始化
       发送6次数据
       点亮LED2
-----------------------------------------------------*/
static void Task_Mscan_Send(void *p_arg){
 INT8U i;
 while(SWITCH1);
 MSCAN_Init();
 while(1){
  LED2_ON;
  while(SWITCH2);
  for(i = 0; i < 6; i++)
   MSCAN_SendMsg( MESSAGE_1 );
  while(1);
 }
}
/*----------------------------------------project.prm--------------------------------------*/
/* This is a linker parameter file for the mc9s08dz32 */
NAMES END /* CodeWarrior will pass all the needed files to the linker by command line. But here you may add your own files too. */
SEGMENTS /* Here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */
    Z_RAM                    =  READ_WRITE   0x0080 TO 0x00FF;
    RAM                      =  READ_WRITE   0x0100 TO 0x047F;
    RAM_2      =  READ_WRITE  0x0480 TO 0x087F;
    ROM                      =  READ_ONLY    0x7C00 TO 0xBFFF;
    ROM_2      =  READ_ONLY  0xC000 TO 0xF000;
    EEPROM                   =  READ_ONLY    0x1600 TO 0x17FF;
 /* INTVECTS                 =  READ_ONLY    0xFFC0 TO 0xFFFF; Reserved for Interrupt Vectors */
END
PLACEMENT /* Here all predefined and user segments are placed into the SEGMENTS defined above. */
    DEFAULT_RAM                         /* non-zero page variables */
                                        INTO  RAM;
    _PRESTART,                          /* startup code */
    STARTUP,                            /* startup data structures */
    ROM_VAR,                            /* constant variables */
    STRINGS,                            /* string literals */
    VIRTUAL_TABLE_SEGMENT,              /* C++ virtual table segment */
    DEFAULT_ROM,
    COPY,
                                     /* copy down information: how to initialize variables */
                                        INTO  ROM;
    MYCODE        INTO  ROM_2;
    _DATA_ZEROPAGE,                     /* zero page variables */
    MY_ZEROPAGE                         INTO  Z_RAM;
    MY_RAM        INTO  RAM_2;
END

STACKSIZE 0x50
VECTOR 0  _Startup /* Reset vector: this is the default entry point for an application. */
//VECTOR 1    OSSwiISR /* Swi vector:*/
VECTOR 1 OSCtxSw   /*任务切换软中断*/
VECTOR 11 OSTickISR /*系统时钟中断*/
VECTOR ADDRESS 0xFFC6 CANRx_ISR /*CAN接收中断*/
VECTOR 29 CANTx_ISR
 
调试了好久。。。问题出在哪呢?
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-8-3 23:43 , Processed in 0.075121 second(s), 18 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表