<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>http://mochiuwiki.e2.valueserver.jp/index.php?action=history&amp;feed=atom&amp;title=MSP430F149_-_CANBUS</id>
	<title>MSP430F149 - CANBUS - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="http://mochiuwiki.e2.valueserver.jp/index.php?action=history&amp;feed=atom&amp;title=MSP430F149_-_CANBUS"/>
	<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_CANBUS&amp;action=history"/>
	<updated>2026-09-09T18:09:09Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_CANBUS&amp;diff=14384&amp;oldid=prev</id>
		<title>Wiki: /* システムの構成 */</title>
		<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_CANBUS&amp;diff=14384&amp;oldid=prev"/>
		<updated>2026-02-21T01:11:14Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;システムの構成&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年2月21日 (土) 10:11時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l6&quot;&gt;6行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;6行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;MCP2515がCANプロトコルの処理を行い、その先にCANトランシーバIC (TJA1050等) が物理層の信号変換を担当する。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;MCP2515がCANプロトコルの処理を行い、その先にCANトランシーバIC (TJA1050等) が物理層の信号変換を担当する。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  MSP430F149 -- SPI --&amp;gt; MCP2515 --&amp;gt; MCP2551 / TJA1050等 --&amp;gt; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;CANバス&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  MSP430F149 -- SPI &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;&lt;/ins&gt;--&amp;gt; MCP2515 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;&lt;/ins&gt;--&amp;gt; MCP2551 / TJA1050等 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;&lt;/ins&gt;--&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;CANBUS&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;この3層構造により、MSP430F149のような汎用マイコンでもCAN通信 (CAN 2.0B通信) が可能になる。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;この3層構造により、MSP430F149のような汎用マイコンでもCAN通信 (CAN 2.0B通信) が可能になる。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiuwiki:diff:1.41:old-14379:rev-14384:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_CANBUS&amp;diff=14379&amp;oldid=prev</id>
		<title>2026年2月20日 (金) 21:21にWikiによる</title>
		<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_CANBUS&amp;diff=14379&amp;oldid=prev"/>
		<updated>2026-02-20T21:21:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年2月21日 (土) 06:21時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;3行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;3行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== システムの構成 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== システムの構成 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;MSP430F149はマイクロコントローラとして全体を制御し、SPI通信を使用してMCP2515 &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;CANコントローラーチップに命令を送信する。&lt;/del&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;MSP430F149はマイクロコントローラとして全体を制御し、SPI通信を使用してMCP2515 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;CANコントローラチップに命令を送信する。&lt;/ins&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;MCP2515がCANプロトコルの処理を行い、その先にCANトランシーバ &lt;/del&gt;(TJA1050等) が物理層の信号変換を担当する。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;MCP2515がCANプロトコルの処理を行い、その先にCANトランシーバIC &lt;/ins&gt;(TJA1050等) が物理層の信号変換を担当する。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; MSP430F149 -- SPI --&amp;gt; MCP2515 --&amp;gt; MCP2551 / TJA1050等 --&amp;gt; CANバス&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;この3層構造により、MSP430F149のような汎用マイコンでもCAN通信 (CAN 2.0B通信) が可能になる。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;この3層構造により、MSP430F149のような汎用マイコンでもCAN通信 (CAN 2.0B通信) が可能になる。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;center&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{| class=&quot;wikitable&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|+ 役割&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;! チップ !! 役割 !! 規格&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| MCP2515 || CANコントローラ (プロトコル処理) || ISO 11898-1&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| MCP2551 / TJA1050 / SN65HVD230等 || CANトランシーバ (物理層・差動信号) || ISO 11898-2&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/center&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;よく使用されるICの組み合わせを以下に示す。&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* MCP2515 + MCP2551 (Microchip)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* MCP2515 + TJA1050 (NXP製トランシーバ)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;また、次のような拡張も可能である。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;また、次のような拡張も可能である。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiuwiki:diff:1.41:old-13755:rev-14379:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_CANBUS&amp;diff=13755&amp;oldid=prev</id>
		<title>Wiki: /* メイン処理 */</title>
		<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_CANBUS&amp;diff=13755&amp;oldid=prev"/>
		<updated>2025-12-17T01:50:33Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;メイン処理&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2025年12月17日 (水) 10:50時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l512&quot;&gt;512行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;512行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== デバッグ ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;CANバスは最低2つのノードが必要なため、もう1台のCAN対応デバイス (別のMSP430 + MCP2515、Arduino、CANアナライザ等) を準備する。&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;デバッグ時に確認すべき点は以下の通りである。&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* まず、SPI通信が正しく動作しているかどうかを確認する。&amp;lt;br&amp;gt;オシロスコープやロジックアナライザがある場合、クロック信号とデータ信号を観察する。&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* 次に、MCP2515の初期化が成功しているかどうかを、CANSTATレジスタを読んで確認する。&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* また、CANバス上の電圧レベルを確認する。&amp;lt;br&amp;gt;アイドル状態において、CAN_HighとCAN_Lowの差が約2[V]になっていればよい。&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{#seo:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{#seo:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_CANBUS&amp;diff=13754&amp;oldid=prev</id>
		<title>Wiki: /* SPI通信 */</title>
		<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_CANBUS&amp;diff=13754&amp;oldid=prev"/>
		<updated>2025-12-17T01:31:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;SPI通信&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2025年12月17日 (水) 10:31時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l101&quot;&gt;101行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;101行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== SPI通信 ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== SPI通信 ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;SPI通信は、MSP430F149とMCP2515の間のデータ転送手段である。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;SPI通信は、MSP430F149とMCP2515の間のデータ転送手段である。&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;MSP430F149のUSART0モジュールをSPIモードで設定する必要がある。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;MSP430F149のUSART0モジュールをSPIモードで設定する必要がある。&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;SPIは同期式のシリアル通信であり、クロック信号に同期してデータを送受信する。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;SPIは同期式のシリアル通信であり、クロック信号に同期してデータを送受信する。&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;マスター (MSP430F149) がクロックを生成して、スレーブ (MCP2515) がそれに従う。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;マスター (MSP430F149) がクロックを生成して、スレーブ (MCP2515) がそれに従う。&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;全2重通信のため、1バイト送信すると同時に1バイト受信することになる。(SPI_Transfer関数で送受信を同時に行っている理由)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;全2重通信のため、1バイト送信すると同時に1バイト受信することになる。(SPI_Transfer関数で送受信を同時に行っている理由)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l160&quot;&gt;160行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;160行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== MCP2515の初期化とCAN設定 ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== MCP2515の初期化とCAN設定 ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;CAN通信の核心部分である。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;CAN通信の核心部分である。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiuwiki:diff:1.41:old-13753:rev-13754:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_CANBUS&amp;diff=13753&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == &lt;br&gt;&lt;br&gt;  == システムの構成 == MSP430F149はマイクロコントローラとして全体を制御し、SPI通信を使用してMCP2515 CANコントローラーチップに命令を送信する。&lt;br&gt; MCP2515がCANプロトコルの処理を行い、その先にCANトランシーバ (TJA1050等) が物理層の信号変換を担当する。&lt;br&gt; &lt;br&gt; この3層構造により、MSP430F149のような汎用マイコンでもCAN通信 (CAN 2.0B通…」</title>
		<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_CANBUS&amp;diff=13753&amp;oldid=prev"/>
		<updated>2025-12-17T01:30:50Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;  == システムの構成 == MSP430F149はマイクロコントローラとして全体を制御し、SPI通信を使用してMCP2515 CANコントローラーチップに命令を送信する。&amp;lt;br&amp;gt; MCP2515がCANプロトコルの処理を行い、その先にCANトランシーバ (TJA1050等) が物理層の信号変換を担当する。&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; この3層構造により、MSP430F149のような汎用マイコンでもCAN通信 (CAN 2.0B通…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== システムの構成 ==&lt;br /&gt;
MSP430F149はマイクロコントローラとして全体を制御し、SPI通信を使用してMCP2515 CANコントローラーチップに命令を送信する。&amp;lt;br&amp;gt;&lt;br /&gt;
MCP2515がCANプロトコルの処理を行い、その先にCANトランシーバ (TJA1050等) が物理層の信号変換を担当する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
この3層構造により、MSP430F149のような汎用マイコンでもCAN通信 (CAN 2.0B通信) が可能になる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
また、次のような拡張も可能である。&amp;lt;br&amp;gt;&lt;br /&gt;
* フィルタとマスクを適切に設定することにより、特定のメッセージIDのみを受信する。&lt;br /&gt;
* 複数の送信バッファを使用して送信の優先度を制御する。&lt;br /&gt;
* エラーハンドリングを実装して、バスオフ状態からの回復を行う。&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ハードウェア接続 ==&lt;br /&gt;
MSP430F149とMCP2515の接続は、MSP430F149のUSARTモジュールをSPIモードで使用する。&lt;br /&gt;
&lt;br /&gt;
* MCP2515 VCC &lt;br /&gt;
*: 3.3[V] または 5[V] (MCP2515の仕様に応じる)&lt;br /&gt;
* MCP2515 GND&lt;br /&gt;
*: GND&lt;br /&gt;
* MCP2515 CS&lt;br /&gt;
*: P3.0 (チップセレクト、任意のGPIOピン)&lt;br /&gt;
* MCP2515 SO (MISO)&lt;br /&gt;
*: P3.2 (SOMI0)&lt;br /&gt;
* MCP2515 SI (MOSI)&lt;br /&gt;
*: P3.1 (SIMO0)&lt;br /&gt;
* MCP2515 SCK&lt;br /&gt;
*: P3.3 (UCLK0)&lt;br /&gt;
* MCP2515 INT&lt;br /&gt;
*: P2.0 (割り込み用、任意のGPIOピン)&lt;br /&gt;
* MCP2515 RESET&lt;br /&gt;
*: P3.4 (リセット用、任意のGPIOピン)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;※注意&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;MSP430F149は3.3[V]で駆動するが、MCP2515は5[V]駆動するモデルもある。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;そのため、電圧レベルが異なる場合はレベルシフタの使用を検討すること。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== サンプルコード ==&lt;br /&gt;
==== レジスタの定義 ====&lt;br /&gt;
MCP2515は多くのレジスタを持っており、それぞれが特定の機能を制御する。&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430f149.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 // MCP2515のレジスタアドレス定義&lt;br /&gt;
 #define MCP_RXF0SIDH    0x00&lt;br /&gt;
 #define MCP_RXF0SIDL    0x01&lt;br /&gt;
 #define MCP_RXM0SIDH    0x20&lt;br /&gt;
 #define MCP_RXM0SIDL    0x21&lt;br /&gt;
 #define MCP_CNF3        0x28&lt;br /&gt;
 #define MCP_CNF2        0x29&lt;br /&gt;
 #define MCP_CNF1        0x2A&lt;br /&gt;
 #define MCP_CANINTE     0x2B&lt;br /&gt;
 #define MCP_CANINTF     0x2C&lt;br /&gt;
 #define MCP_EFLG        0x2D&lt;br /&gt;
 #define MCP_CANSTAT     0x0E&lt;br /&gt;
 #define MCP_CANCTRL     0x0F&lt;br /&gt;
 #define MCP_TXB0CTRL    0x30&lt;br /&gt;
 #define MCP_TXB0SIDH    0x31&lt;br /&gt;
 #define MCP_TXB0SIDL    0x32&lt;br /&gt;
 #define MCP_TXB0DLC     0x35&lt;br /&gt;
 #define MCP_TXB0DATA    0x36&lt;br /&gt;
 #define MCP_RXB0CTRL    0x60&lt;br /&gt;
 #define MCP_RXB0SIDH    0x61&lt;br /&gt;
 #define MCP_RXB0SIDL    0x62&lt;br /&gt;
 #define MCP_RXB0DLC     0x65&lt;br /&gt;
 #define MCP_RXB0DATA    0x66&lt;br /&gt;
 &lt;br /&gt;
 // MCP2515の命令セット&lt;br /&gt;
 // これらはSPI経由でMCP2515に送る命令コード&lt;br /&gt;
 #define MCP_WRITE       0x02&lt;br /&gt;
 #define MCP_READ        0x03&lt;br /&gt;
 #define MCP_BITMOD      0x05&lt;br /&gt;
 #define MCP_LOAD_TX0    0x40&lt;br /&gt;
 #define MCP_RTS_TX0     0x81&lt;br /&gt;
 #define MCP_READ_RX0    0x90&lt;br /&gt;
 #define MCP_READ_STATUS 0xA0&lt;br /&gt;
 #define MCP_RESET       0xC0&lt;br /&gt;
 &lt;br /&gt;
 // CANコントロールレジスタのモード設定&lt;br /&gt;
 #define MODE_NORMAL     0x00&lt;br /&gt;
 #define MODE_SLEEP      0x20&lt;br /&gt;
 #define MODE_LOOPBACK   0x40&lt;br /&gt;
 #define MODE_LISTENONLY 0x60&lt;br /&gt;
 #define MODE_CONFIG     0x80&lt;br /&gt;
 &lt;br /&gt;
 // ピン定義&lt;br /&gt;
 #define CS_PIN          BIT0  // P3.0&lt;br /&gt;
 #define RESET_PIN       BIT4  // P3.4&lt;br /&gt;
 #define INT_PIN         BIT0  // P2.0&lt;br /&gt;
 &lt;br /&gt;
 // チップセレクトのマクロ&lt;br /&gt;
 #define CS_LOW()        (P3OUT &amp;amp;= ~CS_PIN)&lt;br /&gt;
 #define CS_HIGH()       (P3OUT |= CS_PIN)&lt;br /&gt;
 #define RESET_LOW()     (P3OUT &amp;amp;= ~RESET_PIN)&lt;br /&gt;
 #define RESET_HIGH()    (P3OUT |= RESET_PIN)&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== SPI通信 ====&lt;br /&gt;
SPI通信は、MSP430F149とMCP2515の間のデータ転送手段である。&lt;br /&gt;
MSP430F149のUSART0モジュールをSPIモードで設定する必要がある。&lt;br /&gt;
&lt;br /&gt;
SPIは同期式のシリアル通信であり、クロック信号に同期してデータを送受信する。&lt;br /&gt;
マスター (MSP430F149) がクロックを生成して、スレーブ (MCP2515) がそれに従う。&lt;br /&gt;
全2重通信のため、1バイト送信すると同時に1バイト受信することになる。(SPI_Transfer関数で送受信を同時に行っている理由)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 // SPI通信の初期化関数&lt;br /&gt;
 // MSP430F149のUSART0をSPIマスターモードで設定する&lt;br /&gt;
 void SPI_Init(void)&lt;br /&gt;
 {&lt;br /&gt;
    // USART0をSPIモードで初期化&lt;br /&gt;
    // まず、USARTを無効化してから設定を行う&lt;br /&gt;
    U0CTL = SWRST;                    // USARTをリセット状態に&lt;br /&gt;
 &lt;br /&gt;
    // SPI設定：マスターモード、8ビットデータ、MSBファースト&lt;br /&gt;
    // 3ピンモード、同期モード (SPI)&lt;br /&gt;
    U0CTL |= CHAR + SYNC + MM;        &lt;br /&gt;
 &lt;br /&gt;
    // クロック極性とフェーズの設定&lt;br /&gt;
    // CKPL=0, CKPH=1はMCP2515の要求に合わせた設定である&lt;br /&gt;
    U0TCTL = CKPL + SSEL1 + SSEL0 + STC;  // SMCLK使用、3ピンモード&lt;br /&gt;
 &lt;br /&gt;
    // ボーレート設定&lt;br /&gt;
    // SMCLK = 8[MHz] の場合、分周比を2に設定して4[MHz]動作&lt;br /&gt;
    // MCP2515は最大10[MHz]まで対応しているが、安全マージンを取る&lt;br /&gt;
    U0BR0 = 0x02;                     &lt;br /&gt;
    U0BR1 = 0x00;                     &lt;br /&gt;
    U0MCTL = 0x00;                    // モジュレーション無効&lt;br /&gt;
 &lt;br /&gt;
    // ピンの機能設定&lt;br /&gt;
    // P3.1, P3.2, P3.3をSPI機能として使用&lt;br /&gt;
    P3SEL |= BIT1 + BIT2 + BIT3;      &lt;br /&gt;
 &lt;br /&gt;
    // USARTを有効化&lt;br /&gt;
    ME1 |= USPIE0;                    &lt;br /&gt;
    U0CTL &amp;amp;= ~SWRST;                  // リセット解除&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // SPI経由で1バイト送受信する関数&lt;br /&gt;
 uint8_t SPI_Transfer(uint8_t data)&lt;br /&gt;
 {&lt;br /&gt;
    // 送信バッファが空になるまで待機&lt;br /&gt;
    // これにより前回の送信が完了していることを確認&lt;br /&gt;
    while (!(IFG1 &amp;amp; UTXIFG0));&lt;br /&gt;
 &lt;br /&gt;
    // 1バイトのデータを送信&lt;br /&gt;
    U0TXBUF = data;&lt;br /&gt;
 &lt;br /&gt;
    // 受信完了まで待機&lt;br /&gt;
    // SPIは全2重通信のため、1バイト送信すると同時に1バイト受信する&lt;br /&gt;
    while (!(IFG1 &amp;amp; URXIFG0));&lt;br /&gt;
 &lt;br /&gt;
    // 受信したデータを返す&lt;br /&gt;
    return U0RXBUF;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== MCP2515の初期化とCAN設定 ====&lt;br /&gt;
CAN通信の核心部分である。&amp;lt;br&amp;gt;&lt;br /&gt;
MCP2515を初期化して、CANバスの通信速度やフィルタ等を設定する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
※ビットレート設定について&amp;lt;br&amp;gt;&lt;br /&gt;
CANバスの通信速度は重要であり、ネットワーク上の全てのノードが同じ速度に設定されている必要がある。&amp;lt;br&amp;gt;&lt;br /&gt;
以下の例では、500[kbps]に設定しているが、これは産業用途で用いられる一般的な速度となる。&amp;lt;br&amp;gt;&lt;br /&gt;
また、125[kbps]、250[kbps]、1[Mbps]等も広く使用されている。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 // MCP2515を初期化してCAN通信を準備する&lt;br /&gt;
 // この関数はプログラム起動時に1回だけ呼び出す&lt;br /&gt;
 uint8_t MCP2515_Init(void)&lt;br /&gt;
 {&lt;br /&gt;
    // ハードウェアリセット (オプション)&lt;br /&gt;
    RESET_LOW();&lt;br /&gt;
    __delay_cycles(10000);&lt;br /&gt;
    RESET_HIGH();&lt;br /&gt;
    __delay_cycles(10000);&lt;br /&gt;
 &lt;br /&gt;
    // ソフトウェアリセット&lt;br /&gt;
    MCP2515_Reset();&lt;br /&gt;
 &lt;br /&gt;
    // コンフィグレーションモードに入る&lt;br /&gt;
    // このモードでのみ、ビットレートなどの重要な設定が変更できる&lt;br /&gt;
    MCP2515_SetMode(MODE_CONFIG);&lt;br /&gt;
 &lt;br /&gt;
    // CAN通信速度の設定 (500[kbps] @ 8[MHz]水晶振動子)&lt;br /&gt;
    // この設定は使用する水晶振動子の周波数に依存する&lt;br /&gt;
    // ビットタイミングの計算は複雑であるが、以下のものは実績のある設定値である&lt;br /&gt;
 &lt;br /&gt;
    // CNF1: BRP=0 (分周比1)、SJW=00 (1TQ)&lt;br /&gt;
    MCP2515_Write(MCP_CNF1, 0x00);    &lt;br /&gt;
 &lt;br /&gt;
    // CNF2: BTLMODE=1、サンプルポイント設定&lt;br /&gt;
    // PHSEG1=110 (7TQ)、PRSEG=001 (2TQ)&lt;br /&gt;
    MCP2515_Write(MCP_CNF2, 0xD1);    &lt;br /&gt;
 &lt;br /&gt;
    // CNF3: PHSEG2=010 (3TQ)、ウェイクアップフィルタ無効&lt;br /&gt;
    MCP2515_Write(MCP_CNF3, 0x02);    &lt;br /&gt;
 &lt;br /&gt;
    // これらの設定により、次のビットタイミングが実現される:&lt;br /&gt;
    // 1ビット = 1TQ + PRSEG + PHSEG1 + PHSEG2 = 1 + 2 + 7 + 3 = 16TQ&lt;br /&gt;
    // ビットレート = 8MHz / (2 * (BRP+1) * 16) = 500[kbps]&lt;br /&gt;
 &lt;br /&gt;
    // 受信フィルタとマスクの設定&lt;br /&gt;
    // 全てのメッセージを受信するように設定 (フィルタ無効)&lt;br /&gt;
    MCP2515_Write(MCP_RXB0CTRL, 0x60); // 受信バッファ0 : 全て受信、ロールオーバー有効&lt;br /&gt;
 &lt;br /&gt;
    // マスクを0に設定すると、全てのIDを受け入れる&lt;br /&gt;
    MCP2515_Write(MCP_RXM0SIDH, 0x00);&lt;br /&gt;
    MCP2515_Write(MCP_RXM0SIDL, 0x00);&lt;br /&gt;
 &lt;br /&gt;
    // 割り込み設定&lt;br /&gt;
    // 受信割り込みを有効化&lt;br /&gt;
    MCP2515_Write(MCP_CANINTE, 0x01);  // RX0IE: 受信バッファ0割り込み有効&lt;br /&gt;
 &lt;br /&gt;
    // ノーマルモードに移行してCAN通信を開始&lt;br /&gt;
    MCP2515_SetMode(MODE_NORMAL);&lt;br /&gt;
 &lt;br /&gt;
    // 初期化が成功したか確認&lt;br /&gt;
    if ((MCP2515_Read(MCP_CANSTAT) &amp;amp; 0xE0) == MODE_NORMAL) {&lt;br /&gt;
       return 1;  // 成功&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    return 0;      // 失敗&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== MCP2515との通信 ====&lt;br /&gt;
MCP2515の特定のレジスタを読み書きする。&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 // MCP2515のレジスタから1バイト読み取る&lt;br /&gt;
 uint8_t MCP2515_Read(uint8_t address)&lt;br /&gt;
 {&lt;br /&gt;
    uint8_t data;&lt;br /&gt;
 &lt;br /&gt;
    CS_LOW();                         // チップセレクトをアクティブに&lt;br /&gt;
    SPI_Transfer(MCP_READ);           // 読み取り命令を送信&lt;br /&gt;
    SPI_Transfer(address);            // レジスタアドレスを送信&lt;br /&gt;
    data = SPI_Transfer(0x00);        // ダミーデータを送信してレジスタ値を受信&lt;br /&gt;
    CS_HIGH();                        // チップセレクトを非アクティブに&lt;br /&gt;
 &lt;br /&gt;
    return data;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // MCP2515のレジスタに1バイト書き込む&lt;br /&gt;
 void MCP2515_Write(uint8_t address, uint8_t data)&lt;br /&gt;
 {&lt;br /&gt;
    CS_LOW();                         // チップセレクトをアクティブに&lt;br /&gt;
    SPI_Transfer(MCP_WRITE);          // 書き込み命令を送信&lt;br /&gt;
    SPI_Transfer(address);            // レジスタアドレスを送信&lt;br /&gt;
    SPI_Transfer(data);               // データを送信&lt;br /&gt;
    CS_HIGH();                        // チップセレクトを非アクティブに&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // MCP2515のレジスタの特定ビットを変更する関数&lt;br /&gt;
 // マスクで指定したビットのみを変更できるため、他のビットに影響を与えずに設定を変更できる&lt;br /&gt;
 void MCP2515_BitModify(uint8_t address, uint8_t mask, uint8_t data)&lt;br /&gt;
 {&lt;br /&gt;
    CS_LOW();                         &lt;br /&gt;
    SPI_Transfer(MCP_BITMOD);         // ビット変更命令&lt;br /&gt;
    SPI_Transfer(address);            // レジスタアドレス&lt;br /&gt;
    SPI_Transfer(mask);               // 変更するビットのマスク&lt;br /&gt;
    SPI_Transfer(data);               // 新しい値&lt;br /&gt;
    CS_HIGH();                        &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // MCP2515のモード設定&lt;br /&gt;
 // コンフィグモード、ノーマルモードなどを切り替える&lt;br /&gt;
 void MCP2515_SetMode(uint8_t mode)&lt;br /&gt;
 {&lt;br /&gt;
    // CANCTRLレジスタの上位3ビットでモードを設定&lt;br /&gt;
    MCP2515_BitModify(MCP_CANCTRL, 0xE0, mode);&lt;br /&gt;
 &lt;br /&gt;
    // モード変更が完了するまで待機&lt;br /&gt;
    // CANSTATレジスタを読み取って確認します&lt;br /&gt;
    uint8_t timeout = 255;&lt;br /&gt;
    while ((MCP2515_Read(MCP_CANSTAT) &amp;amp; 0xE0) != mode &amp;amp;&amp;amp; timeout &amp;gt; 0) {&lt;br /&gt;
       __delay_cycles(1000);         // 短い遅延&lt;br /&gt;
       timeout--;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // MCP2515をリセットする&lt;br /&gt;
 void MCP2515_Reset(void)&lt;br /&gt;
 {&lt;br /&gt;
    CS_LOW();&lt;br /&gt;
    SPI_Transfer(MCP_RESET);          // リセット命令を送信&lt;br /&gt;
    CS_HIGH();&lt;br /&gt;
    __delay_cycles(10000);            // リセット後の安定待ち（約1ms）&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== CANメッセージの送信 ====&lt;br /&gt;
CANメッセージを送信する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
送信プロセスを以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
# まず、メッセージIDを設定する。&lt;br /&gt;
# 次に、データ長を指定する。&lt;br /&gt;
# 実際のデータを書き込む。&lt;br /&gt;
# 最後に、送信要求を出す。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MCP2515は送信バッファを持っているため、複数のメッセージを効率的に処理することができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 // CANメッセージ送信関数&lt;br /&gt;
 // id : CANメッセージID (標準フォーマット11ビット)&lt;br /&gt;
 // dlc : データ長（0～8バイト）&lt;br /&gt;
 // data : 送信するデータの配列&lt;br /&gt;
 uint8_t CAN_SendMessage(uint16_t id, uint8_t dlc, uint8_t *data)&lt;br /&gt;
 {&lt;br /&gt;
    // 送信バッファが空いているか確認&lt;br /&gt;
    // TXB0CTRLレジスタのTXREQビットが0なら送信可能&lt;br /&gt;
    if (MCP2515_Read(MCP_TXB0CTRL) &amp;amp; 0x08) {&lt;br /&gt;
       return 0;  // 送信バッファが使用中、送信失敗&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // メッセージIDの設定&lt;br /&gt;
    // 11ビットの標準IDを2つのレジスタに分割して格納&lt;br /&gt;
    // 上位8ビット (ID10-ID3) をSIDHレジスタに&lt;br /&gt;
    MCP2515_Write(MCP_TXB0SIDH, (uint8_t)(id &amp;gt;&amp;gt; 3));&lt;br /&gt;
 &lt;br /&gt;
    // 下位3ビット (ID2-ID0) をSIDLレジスタの上位3ビットに&lt;br /&gt;
    // ビット4はEXIDE (拡張ID有効ビット) で、標準フォーマットなので0&lt;br /&gt;
    MCP2515_Write(MCP_TXB0SIDL, (uint8_t)(id &amp;lt;&amp;lt; 5));&lt;br /&gt;
 &lt;br /&gt;
    // データ長コード (DLC) の設定&lt;br /&gt;
    // 下位4ビットがデータ長を表します（0～8）&lt;br /&gt;
    if (dlc &amp;gt; 8) dlc = 8;  // 最大8バイトに制限&lt;br /&gt;
    MCP2515_Write(MCP_TXB0DLC, dlc);&lt;br /&gt;
 &lt;br /&gt;
    // データの書き込み&lt;br /&gt;
    // 送信するデータをデータレジスタに順次書き込む&lt;br /&gt;
    for (uint8_t i = 0; i &amp;lt; dlc; i++) {&lt;br /&gt;
       MCP2515_Write(MCP_TXB0DATA + i, data[i]);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // 送信要求&lt;br /&gt;
    // TXB0CTRLレジスタのTXREQビットを1にセットして送信開始&lt;br /&gt;
    MCP2515_BitModify(MCP_TXB0CTRL, 0x08, 0x08);&lt;br /&gt;
 &lt;br /&gt;
    // 送信完了待ち (オプション)&lt;br /&gt;
    // 実際のアプリケーションでは割り込みを使用することが多い&lt;br /&gt;
    uint16_t timeout = 1000;&lt;br /&gt;
    while ((MCP2515_Read(MCP_TXB0CTRL) &amp;amp; 0x08) &amp;amp;&amp;amp; timeout &amp;gt; 0) {&lt;br /&gt;
       __delay_cycles(100);&lt;br /&gt;
       timeout--;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    if (timeout == 0) {&lt;br /&gt;
       return 0;  // タイムアウト、送信失敗&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return 1;  // 送信成功&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== CANメッセージの受信 ====&lt;br /&gt;
MCP2515は受信したメッセージを内部バッファに格納するため、それを読み出す必要がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
受信では、まず受信バッファにメッセージが存在するかを確認して、存在する場合はメッセージID、データ長、データ本体を順次読み出す。&amp;lt;br&amp;gt;&lt;br /&gt;
最後に受信フラグをクリアすることにより、次のメッセージの受信に備える。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 // CANメッセージ受信&lt;br /&gt;
 // 受信バッファにメッセージがある場合、それを読み出す&lt;br /&gt;
 // id : 受信したメッセージIDを格納するポインタ&lt;br /&gt;
 // dlc : 受信したデータ長を格納するポインタ&lt;br /&gt;
 // data : 受信データを格納する配列&lt;br /&gt;
 uint8_t CAN_ReceiveMessage(uint16_t *id, uint8_t *dlc, uint8_t *data)&lt;br /&gt;
 {&lt;br /&gt;
    // 受信バッファにメッセージがあるか確認&lt;br /&gt;
    // CANINTFレジスタのRX0IFビットが1なら受信あり&lt;br /&gt;
    if (!(MCP2515_Read(MCP_CANINTF) &amp;amp; 0x01)) {&lt;br /&gt;
       return 0;  // 受信メッセージなし&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // メッセージIDの読み取り&lt;br /&gt;
    // SIDHレジスタから上位8ビットを取得&lt;br /&gt;
    uint8_t sidh = MCP2515_Read(MCP_RXB0SIDH);&lt;br /&gt;
 &lt;br /&gt;
    // SIDLレジスタから下位3ビットを取得&lt;br /&gt;
    uint8_t sidl = MCP2515_Read(MCP_RXB0SIDL);&lt;br /&gt;
 &lt;br /&gt;
    // 11ビットの標準IDを復元&lt;br /&gt;
    // SIDH (8ビット) を左に3ビットシフトし、SIDLの上位3ビットを加算&lt;br /&gt;
    *id = (uint16_t)(sidh &amp;lt;&amp;lt; 3) | (uint16_t)(sidl &amp;gt;&amp;gt; 5);&lt;br /&gt;
 &lt;br /&gt;
    // データ長の読み取り&lt;br /&gt;
    *dlc = MCP2515_Read(MCP_RXB0DLC) &amp;amp; 0x0F;  // 下位4ビットがDLC&lt;br /&gt;
 &lt;br /&gt;
    // データの読み取り&lt;br /&gt;
    // 受信したデータをデータレジスタから順次読み出す&lt;br /&gt;
    for (uint8_t i = 0; i &amp;lt; *dlc; i++) {&lt;br /&gt;
       data[i] = MCP2515_Read(MCP_RXB0DATA + i);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // 受信割り込みフラグをクリア&lt;br /&gt;
    // 次のメッセージを受信できるようにする&lt;br /&gt;
    MCP2515_BitModify(MCP_CANINTF, 0x01, 0x00);&lt;br /&gt;
 &lt;br /&gt;
    return 1;  // 受信成功&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== メイン処理 ====&lt;br /&gt;
まず、全てのハードウェアを初期化して、その後無限ループの中で定期的にメッセージを送信し、受信を確認する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
実務では、送信タイミングや受信メッセージの処理内容は用途に応じて変更する必要がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 volatile uint8_t message_received = 0;  // 受信フラグ&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
    // ウォッチドッグタイマの停止&lt;br /&gt;
    WDTCTL = WDTPW + WDTHOLD;&lt;br /&gt;
 &lt;br /&gt;
    // クロック設定 (DCO = 8MHz)&lt;br /&gt;
    DCOCTL = CALDCO_8MHZ;&lt;br /&gt;
    BCSCTL1 = CALBC1_8MHZ;&lt;br /&gt;
 &lt;br /&gt;
    // GPIO初期化&lt;br /&gt;
    P3DIR |= CS_PIN + RESET_PIN;      // CS、RESETピンを出力に設定&lt;br /&gt;
    P3OUT |= CS_PIN;                  // CS初期状態はHIGH（非選択）&lt;br /&gt;
    P3OUT |= RESET_PIN;               // RESET初期状態はHIGH (非リセット)&lt;br /&gt;
 &lt;br /&gt;
    P2DIR &amp;amp;= ~INT_PIN;                // INTピンを入力に設定&lt;br /&gt;
    P2IE |= INT_PIN;                  // INTピンの割り込みを有効化&lt;br /&gt;
    P2IES |= INT_PIN;                 // 立ち下がりエッジで割り込み&lt;br /&gt;
    P2IFG &amp;amp;= ~INT_PIN;                // 割り込みフラグをクリア&lt;br /&gt;
 &lt;br /&gt;
    // SPI初期化&lt;br /&gt;
    SPI_Init();&lt;br /&gt;
 &lt;br /&gt;
    // MCP2515初期化&lt;br /&gt;
    if (!MCP2515_Init()) {&lt;br /&gt;
       // 初期化失敗時の処理&lt;br /&gt;
       // 例 : LEDを点滅させる等&lt;br /&gt;
       while(1) {&lt;br /&gt;
          __delay_cycles(8000000);  // 無限ループ&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // グローバル割り込み有効化&lt;br /&gt;
    __enable_interrupt();&lt;br /&gt;
 &lt;br /&gt;
    // メッセージ送信の例&lt;br /&gt;
    uint16_t tx_id = 0x123;           // 送信メッセージID&lt;br /&gt;
    uint8_t tx_dlc = 8;               // データ長8バイト&lt;br /&gt;
    uint8_t tx_data[8] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};&lt;br /&gt;
 &lt;br /&gt;
    // 受信用変数&lt;br /&gt;
    uint16_t rx_id;&lt;br /&gt;
    uint8_t rx_dlc;&lt;br /&gt;
    uint8_t rx_data[8];&lt;br /&gt;
 &lt;br /&gt;
    // メインループ&lt;br /&gt;
    while(1) {&lt;br /&gt;
       // 定期的にメッセージを送信（例：1秒ごと）&lt;br /&gt;
       if (CAN_SendMessage(tx_id, tx_dlc, tx_data)) {&lt;br /&gt;
          // 送信成功時の処理&lt;br /&gt;
          // ...略&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       // メッセージ受信のチェック&lt;br /&gt;
       if (message_received) {&lt;br /&gt;
          message_received = 0;  // フラグをクリア&lt;br /&gt;
 &lt;br /&gt;
          // メッセージを読み出し&lt;br /&gt;
          if (CAN_ReceiveMessage(&amp;amp;rx_id, &amp;amp;rx_dlc, rx_data)) {&lt;br /&gt;
             // 受信したメッセージの処理&lt;br /&gt;
             // 例 : 受信IDに応じて異なる処理を行う&lt;br /&gt;
             switch(rx_id) {&lt;br /&gt;
                case 0x100:&lt;br /&gt;
                   // ID 0x100のメッセージを処理&lt;br /&gt;
                   break;&lt;br /&gt;
                case 0x200:&lt;br /&gt;
                   // ID 0x200のメッセージを処理&lt;br /&gt;
                   break;&lt;br /&gt;
                default:&lt;br /&gt;
                   // その他のメッセージの処理&lt;br /&gt;
                   break;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
  &lt;br /&gt;
       // 次の送信まで待機 (約1秒)&lt;br /&gt;
       __delay_cycles(8000000);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // MCP2515の割り込みハンドラ&lt;br /&gt;
 // INTピンが立ち下がるとこの関数が呼ばれる&lt;br /&gt;
 #pragma vector=PORT2_VECTOR&lt;br /&gt;
 __interrupt void Port2_ISR(void)&lt;br /&gt;
 {&lt;br /&gt;
    if (P2IFG &amp;amp; INT_PIN) {&lt;br /&gt;
       // 受信フラグをセット&lt;br /&gt;
       message_received = 1;&lt;br /&gt;
 &lt;br /&gt;
       // 割り込みフラグをクリア&lt;br /&gt;
       P2IFG &amp;amp;= ~INT_PIN;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:&lt;br /&gt;
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki&lt;br /&gt;
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板&lt;br /&gt;
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux&lt;br /&gt;
|image=/resources/assets/MochiuLogo_Single_Blue.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[カテゴリ:MSP430]]&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
</feed>