This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请教MSP430F149通过SJA1000驱动CAN实现通信

Other Parts Discussed in Thread: MSP430F149

sja1000的寄存器是要映射到430F149的哪个地址空间呢?
是数据存储器RAM(基地址0x0200)
还是外围模块寄存器OR特殊功能寄存器(基地址0x00)呢?

  • 你的硬件连接是怎么样的?

    msp430一般是不对外开放总线的,要通过io模拟。另外,sja1000我记得是工作在5V电压的,和430F149通讯一般要经过电平转换ic。

  • 电路图是用430的P6口模拟数据地址总线,P1口的一些引脚作为功能引脚比如ALE,CS,WE,RE等等。在单片机与SJA1000之间用了SN74LV164245进行电平转换。

    我之前用过2812实现CAN通信,所以电路大都是在哪里搬过来的。在那个程序中SJA1000的基地址被映射到了2812的存储空间的某一个保留区,这个很好理解。就是为了控制外设所以保留的存储空间,把SJA1000的基地地址设定在该存储空间的起始地址,接下来就一个接一个的定义就好了。但是430F149就不一样了。也有外围模块寄存器,特殊功能寄存器00H——01FFH。搞糊涂了,不知道到底要映射到哪里开始。

  • 2812是dsp内核,和msp430的架构、应用领域是不一样的。

    所以有比较大的差异。

    msp430f149没有基地址映射,用io模拟原来的操作就好。如果非要用你习惯的映射的话,你可以映射到io相关寄存器试试能不能行

  • 你好,对430还处在刚接触的状态,不太理解您说的用I/O模拟原来的操作是什么意思。

    举个例子来说。现在用430的P6口接SJA1000的数据地址线,1.1 1.1 1.3 1.4接ALE CS WE RE。现在我要对sja1000的某个寄存器进行写操作,大致是怎么个流程呢(忽略时序)?

    谢谢

  • 前面说的是对的。430没有类似外部总线的功能,所以不存在怎么映射的问题。一定要用的话就是用IO口模拟,做法就是你要用代码在IO口的不同端口自己翻出你需要的时序,实际上也就是手动把IO口控制出外部总线的时序。所以这样对MCU的CPU load是很重的。

  • 谢谢各位,虽然我还是不太理解I/O模拟的原理,但是按照各位提供的方法已经可以对其进行读写了。