CAN: Add explicit pinmap support

pull/11892/head
Przemyslaw Stekiel 2019-09-23 14:34:08 +02:00
parent 37714c7894
commit 655a6b896f
2 changed files with 40 additions and 0 deletions

View File

@ -170,6 +170,22 @@ public:
*/
CAN(PinName rd, PinName td, int hz);
/** Initialize CAN interface
*
* @param pinmap reference to structure which holds static pinmap
* @param td the transmit pin
* @param hz the bus frequency in hertz
*/
CAN(const can_pinmap_t &pinmap);
/** Initialize CAN interface and set the frequency
*
* @param pinmap reference to structure which holds static pinmap
* @param td the transmit pin
* @param hz the bus frequency in hertz
*/
CAN(const can_pinmap_t &pinmap, int hz);
virtual ~CAN();
/** Set the frequency of the CAN interface

View File

@ -46,6 +46,30 @@ CAN::CAN(PinName rd, PinName td, int hz) : _can(), _irq()
can_irq_init(&_can, (&CAN::_irq_handler), (uint32_t)this);
}
CAN::CAN(const can_pinmap_t &pinmap) : _can(), _irq()
{
// No lock needed in constructor
for (size_t i = 0; i < sizeof _irq / sizeof _irq[0]; i++) {
_irq[i] = NULL;
}
can_init_direct(&_can, &pinmap);
can_irq_init(&_can, (&CAN::_irq_handler), (uint32_t)this);
}
CAN::CAN(const can_pinmap_t &pinmap, int hz) : _can(), _irq()
{
// No lock needed in constructor
for (size_t i = 0; i < sizeof _irq / sizeof _irq[0]; i++) {
_irq[i] = NULL;
}
can_init_freq_direct(&_can, &pinmap, hz);
can_irq_init(&_can, (&CAN::_irq_handler), (uint32_t)this);
}
CAN::~CAN()
{
// No lock needed in destructor