Board logo

标题: 求助:MC9S12XDP512总线调试问题 [打印本页]

作者: shxwait    时间: 2009-5-28 20:14     标题: 求助:MC9S12XDP512总线调试问题

大家好,我现在急需要大家的帮助,在调试XDP512的过程中,遇到了一个很奇怪的问题.

要求总线速率是250kps,我用的晶振是无源12MHZ的晶体,在BDM调试时,其上的AD,IO等功能均调试

成功,但在总线调试时却遇到了一个大问题.为实现250kps的速率,即位时间为4us,我选用4分频,同步跳转宽

度为1TQ,时间段1为6TQ,时间段2为5TQ,选用外部晶振.标准帧,发送0x55数据,但却不成功.总线分析仪却检

测不到任何信息,总线负载显示为 86%,用示波器检测发现总线波形是对的,所发送的数据无误.但位时间却

19us左右,这是为什么呢?请大家帮帮忙.项目要交了,压力太大了.

我分析可能是:1.是否是因为在BDM调试状态下,造成非实时呢?

2. 波特率设得不对,但检查无误啊

3. 外置晶振偏差太大,这可从来未遇到过,还有如果是晶振的问题,如何检测呢?

谢谢


作者: shxwait    时间: 2009-5-28 21:00

我所设的波特率为250kps,如下设置
CAN0BTR0=0x03;//同步跳转宽度为1TQ,预分频为4
CAN0BTR1=0x45;//单采样,时间段2为5TQ,时间段1为6TQ。
作者: fish1330    时间: 2009-5-29 13:42

你加我们的QQ群,详谈。
作者: shxwait    时间: 2009-5-29 15:53

请问一下,在BDM调试下,总线调通的请留下言,我想知道是否是因为调试模式下其工作频率不同于脱机运行,才造成的此问题.
作者: fish1330    时间: 2009-5-30 10:02

在初始化函数的最后增加这句话:

CANCTL1 &= 0xbf;

(须在CAN初始化状态下执行)

[此贴子已经被作者于2009-5-30 10:10:29编辑过]


作者: fish1330    时间: 2009-5-30 10:03

应该可以了。

[此贴子已经被作者于2009-5-30 10:04:51编辑过]


作者: fish1330    时间: 2009-5-30 10:07

下次提问把 整个can模块初始化函数贴出来。让别人琢磨吗?
这样根本不是解决问题的态度嘛。
作者: shxwait    时间: 2009-5-30 11:39

感谢fish1330的观注.

以下是我的程序:

/* Acceptance Code Definitions */

#define ACC_CODE_ID100 0x2000

#define ACC_CODE_ID100_HIGH ((ACC_CODE_ID100&0xFF00)>>8)

#define ACC_CODE_ID100_LOW (ACC_CODE_ID100&0x00FF)

/*switch information*/

#define Switch_ID111 0x111

#define Switch_ID111_HIGH ((Switch_ID111&0xFF00)>>8)

#define Switch_ID111_LOW (Switch_ID111&0x00FF)

/*Check information*/

#define Check_ID241 0x241

#define Check_ID241_HIGH ((Check_ID241&0xFF00)>>8)

#define Check_ID241_LOW (Check_ID241&0x00FF)

/*Velocity information*/

#define Velocity_ID421 0x421

#define Velocity_ID421_HIGH ((Velocity_ID421&0xFF00)>>8)

#define Velocity_ID421_LOW (Velocity_ID421&0x00FF)

/*Temperature information*/

#define Temperature_ID451 0x451

#define Temperature_ID451_HIGH ((Temperature_ID451&0xFF00)>>8)

#define Temperature_ID451_LOW (Temperature_ID451&0x00FF)


作者: shxwait    时间: 2009-5-30 11:42

/*CAN0初始化函数*/

void CAN0Initial(void) {

CAN0CTL0 = 0x01; /* Enter Initialization Mode,请求进入初始化模式

* CAN0CTL0 CAN0控制寄存器0,用以请求进入初始化模式

* 0b00000001

* ||||||||__ INITRQ(Enter Initialization Mode)初始化请求位

* |||||||___ SLPRQ(Sleep Mode Request bit)休眠模式请求位

* ||||||____ WUPE(Wake-Up disabled)唤醒允许位

* |||||_____ TIME(Time stamping disabled)定时器允许位

* ||||______ SYNCH(Synchronized Status)同步状态位

* |||_______ CSWAI(CAN not affected by Wait)等待模式下CAN停止控制位

* ||________ RXACT(Receiver Active Status bit)接收数据指示位

* |_________ RXFRM(Received Frame Flag bit)接收帧标志位

*/

while (CAN0CTL1_INITAK==0){};/* Wait for Initialization Mode acknowledge

* INITRQ bit = 1,表示已进入初始化模式

*/

CAN0CTL1 = 0x80; /* Enable MSCAN module and LoopBack Mode,使能CAN,选择外部时钟,

* CAN0CTL1 CAN0控制寄存器0

* 0b10000000

* ||||||||__ INITAK(Initialization Mode Acknowledge)初始化确认位

* |||||||___ SLPAK(Sleep Mode Acknowledge)休眠模式确认位

* ||||||____ WUPM(Wake-up low-pass filter disabled)

* |||||_____ BORM(Bus-Off Recovery Mode)下线恢复模式控制位

* ||||______ LISTEN(Listen Only Mode disabled)

* |||_______ LOOPB(Loop Back Mode enabled)监控自检模式控制位

* ||________ CLKSRC(Ext Osc/Xtal as Clock Source)时钟源选择位

* |_________ CANE(MSCAN Module enabled)使能CAN总线控制位

*/

CAN0BTR0 = 0x03; /* Synch Jump = 1 Tq clock Cycles,预分频为4

* MSCAN Bus Timing Register 0,总线定时寄存器0

* 0b00000011

* ||||||||__BRP0=1

* |||||||___BRP1=1

* ||||||____BRP2=0

* |||||_____RPP3=0

* ||||______BRP4=0

* |||_______BRP5=0,即预分频为4

* ||________SJW0=0

* |_________SJW1=0,即同步跳转宽度为1Tq

*/

CAN0BTR1 = 0x45; /* Set Number of samples per bit, TSEG1 and TSEG2,设置12时间段

* MSCAN Bus Timing Register 1, 总线定时寄存器1

* 0b01000101

* ||||||||__TSEG10=1

* |||||||___TSEG11=0

* ||||||____TSEG12=1

* |||||_____TSEG13=0,即时间段16 Tq

* ||||______TSEG20=0

* |||_______TSEG21=0

* ||________TSEG22=1,时间段2宽度为5 Tq

* |_________SAMP=0, 即每位进行1次采样,1时每位进行3次采样

*/

CAN0IDAC = 0x10; /* Set four 16-bit Filters,设置接收控制寄存器,

* MSCAN Identifier Acceptance Control Register

* 0b00010000

* ||||||||__IDHIT0

* |||||||___IDHIT1

* ||||||____IDHIT2,滤波器应用指示位

* |||||_____ Unimplemented

* ||||______IDAM0=1

* |||_______IDAM1=0,416位接收滤波器

* ||________

* |_________>- Unimplemented

*/


作者: shxwait    时间: 2009-5-30 11:42

/* Acceptance Filters */

CAN0IDAR0 = Switch_ID111_HIGH; //|\ 16 bit Filter 0

CAN0IDMR0 = 0x00; //| \__ Accepts Standard Data Frame Msg

CAN0IDAR1 = Switch_ID111_LOW; //| / with ID 0x111

CAN0IDMR1 = 0x00; //|/

CAN0IDAR2 = Check_ID241_HIGH; //|\ 16 bit Filter 1

CAN0IDMR2 = 0x00; //| \__ Accepts Standard Data Frame Msg

CAN0IDAR3 = Check_ID241_LOW; //| / with ID 0x241

CAN0IDMR3 = 0x00; //|/

CAN0IDAR4 = Velocity_ID421_HIGH; //|\ 16 bit Filter 2

CAN0IDMR4 = 0x00; //| \__ Accepts Standard Data Frame Msg

CAN0IDAR5 = Velocity_ID421_LOW; //| / with ID 0x421

CAN0IDMR5 = 0x00; //|/

CAN0IDAR6 = Temperature_ID451_HIGH; //|\ 16 bit Filter 3

CAN0IDMR6 = 0x00; //| \__ Accepts Standard Data Frame Msg

CAN0IDAR7 = Temperature_ID451_LOW; //| / with ID 0x451

CAN0IDMR7 = 0x00; //|/

CAN0CTL0 = 0x00; /* Exit Initialization Mode Request */

while (CAN0CTL1_INITAK==1){}; /* Wait for Normal Mode */

CAN0RIER_RXFIE=1; /*允许CAN0的接收中断*/

}

fish1330所提:

"在初始化函数的最后增加这句话:

CANCTL1 &= 0xbf;

(须在CAN初始化状态下执行)"

是要求选择外部晶振时钟,可我已在初始化程序中置

CAN0CTL1 = 0x80;使能CAN,选择外部晶振时钟了,难道一定要在初始化函数最后一句吗?请教.


作者: WXEV    时间: 2009-5-30 13:57

初始化没问题,你检查下发送函数
作者: shxwait    时间: 2009-5-30 17:20

发送函数应无问题,因为的发送的数据用示波器能检测到,是正确的.关键问题是位速率不对.让我很奇怪.因为以前没用过此类单片机.不知在BDM调试下与脱机运行是否不同.在PIC单片机的调试状态下,总线发送都很正常.请大家帮我查一下为什么位时间不对的原因.谢谢!


作者: fish1330    时间: 2009-5-31 09:38

检查下晶振是否起振
作者: shxwait    时间: 2009-6-5 11:39

晶振不起振是不能发出信息的,我根据所发信息的位时间反推晶振频率为2。67MHZ,这与所焊晶振差别太大,因此确定为硬件问题,后来仔细检查电路发现一电阻焊错,因此出错,目前已调好,感谢大家了。
作者: yihsali    时间: 2011-3-22 14:21

你好!请问你有MC9S1XDP512芯片的中文资料吗?我现在基于这个芯片编程,可是资料全是英文的,看的很慢。希望能从你这里得到帮助,非常感谢!我的邮箱是yisha623@163.com.
作者: loveqvd99    时间: 2011-5-17 12:15

缔造中国最具实力的网络集团,让中国创造改变世界

                                                                                                          —— 梭尔
关于梭尔
梭尔的成长:历时三年,服务着几百家企事业单位。
梭尔的特色:具备丰富的建站经验,有着过硬的专业技能,富有职业的合作精神。
梭尔的使命:提升客户竞争力和盈利能力,成就客户。
梭尔的服务理念:为创造价值而经营,为树立品牌而奋斗!
梭尔的经营宗旨:做一个不断为社会创造价值的企业集团。
梭尔的业务定位宗旨:始终服务于最广大企业
梭尔的核心价值观:以感恩聚贤达,以诚信赢天下!

梭尔部分成功案例
广西壮族自治区妇幼保健院  http://www.gxfybj.com/
澳大利亚墨尔本博士社区    http://www.chinaneedyou.com/cn
南宁天影互动文化传播      http://www.tinwod.com/
    银河集团-新华照相院       http://www.xhzxy.com/
中国-东盟矿业网           http://www.ky101.net/

梭尔五一建站优惠


1、品牌形象站套餐     2888
   适合对网络需求较大,且未来对网络升级要求较高的各类企业;
2、全能版云建站套餐   1288
   适合对网络需求较大,希望通过网站达到全面展示公司信息的企业;
3、商城站套餐         2888
   适合希望通过网络进行销售下单、结算的各类企业;
4、团购网套餐         1580
   适合拥有较为广泛商品资源的企业或个人进行资源整合和进军团购市场。


梭尔的承诺:
1、网站建设一个月代理上传资料服务
2、后台使用培训服务
3、备案协助服务
4、15个工作日有限修改服务(仅限全站策划与定制的客户)
5、工作时间电话咨询服务
6、工作时间在线咨询服务
更多服务请登录我司官网www.soernet.cn查看

联系方式:15078877313   
联系热线:400-608-9700
联系地址:南宁市民生路131号绿都商厦702703




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0