DSP ECan在配置扩展模式,非常奇怪的问题

讨论了在使用相同芯片F8069的两块不同板子上配置DSPECan扩展模式时遇到的问题:一块板子在下载程序后不复位才能发送接收数据,复位后功能失效;另一块板子则不受影响。已确认程序正确写入芯片。

DSP ECan在配置扩展模式,基本的发送接收功能时遇到一个非常奇怪的问题,
2块不同的板子,但芯片是相同的F8069,其中有一块板子只有下载完程序
而不复位就能发送和接收数据,只要复位之后,就不能再跑起来。
另外一块板子则不受影响,开机,复位都能在正常发送接收数据。
可以确认的是,程序已经成功写入到芯片,那还有什么原因会导致这样的情况发生呢?

<think>好的,用户现在想了解DSP2808的ECAN外设配置。之前他们问过如何确定CAN的时钟频率,现在可能是在实际项目中需要配置ECAN模块,所以需要具体的步骤和注意事项。我需要先回顾一下DSP2808的ECAN模块结构,以及配置流程。 首先,用户可能已经知道时钟配置,但可能需要将时钟部分和ECAN的具体配置结合起来。比如,之前提到的CANCLK的计算,这里需要关联到ECAN的波特率设置。用户可能关心如何初始化ECAN模块,包括寄存器配置、邮箱设置、中断处理等。 接下来,我应该分步骤介绍配置流程,从时钟初始化开始,然后到ECAN模块的使能、工作模式选择,再到波特率的设置,包括位定时参数的计算。然后可能需要解释邮箱的配置,比如发送和接收邮箱的设置,标识符过滤,以及中断的配置。此外,用户可能还需要了解如何验证配置是否正确,比如通过回环测试或者实际通信测试。 另外,用户可能对某些细节不太清楚,比如如何计算BRP、TSEG1和TSEG2的值,或者如何处理中断服务程序。需要确保解释清晰,并提供示例代码片段,这样用户可以直接参考应用。同时,需要注意寄存器名称和位域的正确性,避免错误。 还可能要考虑用户在实际应用中可能遇到的问题,比如配置后无法通信,可能的原因有哪些,比如时钟配置错误、波特率不匹配、邮箱未正确配置等,可以给出一些调试建议,比如使用示波器检查信号,或者通过读取寄存器状态来排查问题。 最后,总结配置的关键点,提醒用户注意数据手册中的细节,比如特定寄存器的位定义,或者不同模式下的配置差异。可能还需要提到TI提供的库函数或示例代码,方便用户快速上手。</think>以下是DSP2808 ECAN外设配置的核心步骤与技术要点: ### 一、ECAN模块架构特性 DSP2808的增强型CAN模块(eCAN)具有: - 32个独立邮箱(0-31),支持标准帧(11位ID)和扩展帧(29位ID) - 可配置为发送/接收邮箱,支持自动应答模式 - 最高1Mbps通信速率(需满足$f_{\text{CANCLK}} \geq 16 \times \text{波特率}$) ### 二、基础配置流程 #### 1. 时钟使能 ```c SysCtrlRegs.PCLKCR.bit.CAN_A = 1; // 使能CAN模块时钟 DELAY_US(100); // 等待时钟稳定 ``` #### 2. 工作模式配置 ```c ECanaRegs.CANMC.bit.STM = 0; // 退出自测试模式 ECanaRegs.CANMC.bit.SCM = 0; // 正常通信模式(非静默) ECanaRegs.CANMC.bit.ABO = 1; // 启用自动总线恢复 ``` #### 3. 位定时参数计算(以1Mbps为例) 假设$f_{\text{CANCLK}}=100\text{MHz}$: ```c ECanaRegs.CANBTC.bit.BRP = 4; // 分频系数N_brp=5 (4+1) ECanaRegs.CANBTC.bit.TSEG1 = 12; // 时间段1=13个时间单位(TSEG1+1) ECanaRegs.CANBTC.bit.TSEG2 = 2; // 时间段2=3个时间单位(TSEG2+1) ``` 验证公式: $$ \text{波特率} = \frac{f_{\text{CANCLK}}}{(BRP+1) \times (1 + TSEG1 + TSEG2)} $$ 代入计算: $$ \frac{100\text{MHz}}{5 \times (1+13+3)} = \frac{100\text{MHz}}{85} \approx 1.176\text{MHz} \quad (\text{实际需微调参数}) ``` ### 三、邮箱配置实例 #### 1. 发送邮箱配置(以邮箱16为例) ```c ECanaMboxes.MBOX16.MSGID.all = 0x456 << 2; // 标准帧ID 0x456 ECanaMboxes.MBOX16.MSGID.bit.IDE = 0; // 标准标识符 ECanaMboxes.MBOX16.MSGID.bit.AME = 0; // 禁用接收掩码 ECanaMboxes.MBOX16.MSGID.bit.AAM = 0; // 非自动应答模式 ECanaRegs.CANME.bit.ME16 = 1; // 使能邮箱16 ``` #### 2. 接收邮箱配置(以邮箱1为例) ```c ECanaMboxes.MBOX1.MSGID.all = 0x123 << 2; // 设置接收ID ECanaMboxes.MBOX1.MSGID.bit.AME = 1; // 启用接收掩码 ECanaRegs.CANMD.bit.MD1 = 1; // 配置为接收邮箱 ECanaRegs.CANME.bit.ME1 = 1; // 使能邮箱1 ``` ### 四、中断配置 ```c ECanaRegs.CANGIM.bit.I1EN = 1; // 使能中断级别1 ECanaRegs.CANMIM.bit.MIM1 = 1; // 使能邮箱1中断 ECanaRegs.CANTA.bit.TA16 = 1; // 清除发送确认标志 ``` ### 五、调试技巧 1. **回环测试验证**: ```c ECanaRegs.CANMC.bit.STM = 1; // 进入自测试模式 ECanaRegs.CANMC.bit.SCM = 1; // 自接收模式 ``` 2. **错误状态监测**: ```c Uint32 err = ECanaRegs.CANES.all; // 读取错误状态 if(err & CANES_EWARN) { // 进入错误警告状态处理 } ``` ### 六、配置验证流程 1. 使用CAN分析仪抓取总线数据 2. 通过CCS观察CANES寄存器错误计数器 3. 检查CANTA/CANRMP寄存器的传输完成标志 > 关键注意:配置完成后必须执行**CAN模块初始化序列**: > ```c > ECanaRegs.CANMC.bit.CCR = 1; // 进入配置模式 > while(ECanaRegs.CANES.bit.CCE !=1); // 等待配置使能 > // 执行配置操作 > ECanaRegs.CANMC.bit.CCR = 0; // 退出配置模式 > while(ECanaRegs.CANES.bit.CCE !=0); // 确认退出 > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值