Skip to content

Commit 655a6b8

Browse files
committed
CAN: Add explicit pinmap support
1 parent 37714c7 commit 655a6b8

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

drivers/CAN.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,22 @@ class CAN : private NonCopyable<CAN> {
170170
*/
171171
CAN(PinName rd, PinName td, int hz);
172172

173+
/** Initialize CAN interface
174+
*
175+
* @param pinmap reference to structure which holds static pinmap
176+
* @param td the transmit pin
177+
* @param hz the bus frequency in hertz
178+
*/
179+
CAN(const can_pinmap_t &pinmap);
180+
181+
/** Initialize CAN interface and set the frequency
182+
*
183+
* @param pinmap reference to structure which holds static pinmap
184+
* @param td the transmit pin
185+
* @param hz the bus frequency in hertz
186+
*/
187+
CAN(const can_pinmap_t &pinmap, int hz);
188+
173189
virtual ~CAN();
174190

175191
/** Set the frequency of the CAN interface

drivers/source/CAN.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,30 @@ CAN::CAN(PinName rd, PinName td, int hz) : _can(), _irq()
4646
can_irq_init(&_can, (&CAN::_irq_handler), (uint32_t)this);
4747
}
4848

49+
CAN::CAN(const can_pinmap_t &pinmap) : _can(), _irq()
50+
{
51+
// No lock needed in constructor
52+
53+
for (size_t i = 0; i < sizeof _irq / sizeof _irq[0]; i++) {
54+
_irq[i] = NULL;
55+
}
56+
57+
can_init_direct(&_can, &pinmap);
58+
can_irq_init(&_can, (&CAN::_irq_handler), (uint32_t)this);
59+
}
60+
61+
CAN::CAN(const can_pinmap_t &pinmap, int hz) : _can(), _irq()
62+
{
63+
// No lock needed in constructor
64+
65+
for (size_t i = 0; i < sizeof _irq / sizeof _irq[0]; i++) {
66+
_irq[i] = NULL;
67+
}
68+
69+
can_init_freq_direct(&_can, &pinmap, hz);
70+
can_irq_init(&_can, (&CAN::_irq_handler), (uint32_t)this);
71+
}
72+
4973
CAN::~CAN()
5074
{
5175
// No lock needed in destructor

0 commit comments

Comments
 (0)