UdonLibrary
1.0.0
機械システム研究部 C++ ライブラリ
Toggle main menu visibility
読み取り中…
検索中…
一致する文字列を見つけられません
CanBusSpiPico.hpp
[詳解]
1
//
2
// CAN通信 Raspberry Pi Pico用バスクラス (SPI経由)
3
//
4
// Copyright (c) 2022 udonrobo
5
//
6
7
#pragma once
8
9
#include <SPI.h>
10
11
#include "
ICanBus.hpp
"
12
#include "
CanUtility.hpp
"
13
14
#include <
Udon/Types/StaticVector.hpp
>
15
#include <Udon/Thirdparty/pico_mcp2515/mcp2515.h>
16
#include <
Udon/Algorithm/ScopedInterruptLocker.hpp
>
17
#include <deque>
18
19
namespace
Udon
20
{
22
class
CanBusSpi
23
:
public
ICanBus
24
{
25
public
:
27
struct
Config
28
{
29
spi_inst_t*
channel
= spi_default;
// SPI チャンネル (spi0, spi1)
30
uint8_t
cs
= PICO_DEFAULT_SPI_CSN_PIN;
// チップセレクトピン
31
uint8_t
mosi
= PICO_DEFAULT_SPI_TX_PIN;
// MOSIピン (TX)
32
uint8_t
miso
= PICO_DEFAULT_SPI_RX_PIN;
// MISOピン (RX)
33
uint8_t
sck
= PICO_DEFAULT_SPI_SCK_PIN;
// クロックピン
34
uint8_t
interrupt
= 20;
// 受信割り込みピン
35
36
uint32_t
spiClock
= 1'000'000;
// SPIクロック周波数 [Hz]
37
38
uint32_t
transmitInterval
= 5;
// 送信間隔 [ms]
39
uint32_t
transmitTimeout
= 100;
// 送信タイムアウト時間 [ms]
40
uint32_t
receiveTimeout
= 100;
// 受信タイムアウト時間 [ms]
41
CAN_SPEED
canBaudrate
= CAN_1000KBPS;
// CAN通信速度
42
CAN_CLOCK
mcpClock
= MCP_16MHZ;
// トランシーバー動作クロック周波数 [Hz]
43
};
44
47
CanBusSpi
(
const
Config
& config);
48
52
void
begin
();
53
56
void
update
();
57
59
void
end
();
60
62
explicit
operator
bool()
const
;
63
65
void
show
()
const
;
66
71
CanTxNode
*
createTx
(uint32_t
id
,
size_t
length)
override
;
72
77
CanRxNode
*
createRx
(uint32_t
id
,
size_t
length)
override
;
78
79
80
private
:
81
Config
config;
82
83
MCP2515 bus;
84
85
constexpr
static
uint32_t SingleFrameSize = 8;
86
87
std::deque<CanTxNode> txNodes;
88
std::deque<CanRxNode> rxNodes;
89
90
Udon::StaticVector<can_frame, 1024>
rxBuffer;
91
92
uint32_t transmitMs = 0;
93
uint32_t receiveMs = 0;
94
95
void
onReceive();
96
97
void
onTransmit();
98
100
bool
txTimeout()
const
;
101
103
bool
rxTimeout()
const
;
104
};
105
}
// namespace Udon
106
107
#include "
Impl/CanBusSpiPico.hpp
"
CanUtility.hpp
ICanBus.hpp
CanBusSpiPico.hpp
ScopedInterruptLocker.hpp
StaticVector.hpp
Udon::CanBusSpi::createTx
CanTxNode * createTx(uint32_t id, size_t length) override
バスに送信ノードを追加
Definition
CanBusSpiPico.hpp:184
Udon::CanBusSpi::begin
void begin()
通信開始
Definition
CanBusSpiPico.hpp:23
Udon::CanBusSpi::show
void show() const
バスの状態を表示する
Definition
CanBusSpiPico.hpp:132
Udon::CanBusSpi::update
void update()
バス更新
Definition
CanBusSpiPico.hpp:121
Udon::CanBusSpi::CanBusSpi
CanBusSpi(const Config &config)
コンストラクタ
Definition
CanBusSpiPico.hpp:13
Udon::CanBusSpi::createRx
CanRxNode * createRx(uint32_t id, size_t length) override
バスに受信ノードを参加させる
Definition
CanBusSpiPico.hpp:200
Udon::CanBusSpi::end
void end()
通信終了
Definition
CanBusSpiPico.hpp:93
Udon::ICanBus
CANバス管理クラス インターフェース
Definition
ICanBus.hpp:49
Udon::StaticVector
疑似可変長配列コンテナ
Definition
StaticVector.hpp:22
Udon
Definition
Bit.hpp:12
Udon::CanBusSpi::Config
設定
Definition
CanBusSpiPico.hpp:28
Udon::CanBusSpi::Config::spiClock
uint32_t spiClock
Definition
CanBusSpiPico.hpp:36
Udon::CanBusSpi::Config::transmitInterval
uint32_t transmitInterval
Definition
CanBusSpiPico.hpp:38
Udon::CanBusSpi::Config::miso
uint8_t miso
Definition
CanBusSpiPico.hpp:32
Udon::CanBusSpi::Config::canBaudrate
CAN_SPEED canBaudrate
Definition
CanBusSpiPico.hpp:41
Udon::CanBusSpi::Config::sck
uint8_t sck
Definition
CanBusSpiPico.hpp:33
Udon::CanBusSpi::Config::receiveTimeout
uint32_t receiveTimeout
Definition
CanBusSpiPico.hpp:40
Udon::CanBusSpi::Config::mcpClock
CAN_CLOCK mcpClock
Definition
CanBusSpiPico.hpp:42
Udon::CanBusSpi::Config::channel
spi_inst_t * channel
Definition
CanBusSpiPico.hpp:29
Udon::CanBusSpi::Config::mosi
uint8_t mosi
Definition
CanBusSpiPico.hpp:31
Udon::CanBusSpi::Config::cs
uint8_t cs
Definition
CanBusSpiPico.hpp:30
Udon::CanBusSpi::Config::transmitTimeout
uint32_t transmitTimeout
Definition
CanBusSpiPico.hpp:39
Udon::CanBusSpi::Config::interrupt
uint8_t interrupt
Definition
CanBusSpiPico.hpp:34
Udon::CanRxNode
CAN受信ノード
Definition
ICanBus.hpp:28
Udon::CanTxNode
CAN送信ノード
Definition
ICanBus.hpp:17