mirror of https://github.com/ARMmbed/mbed-os.git
Add F1 differences.
Create can_device.h files to define specific code for the STM32 familypull/3737/head
parent
45c7e0dca9
commit
311648ab6c
|
@ -0,0 +1,42 @@
|
|||
/* mbed Microcontroller Library
|
||||
* Copyright (c) 2006-2017 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef MBED_CAN_DEVICE_H
|
||||
#define MBED_CAN_DEVICE_H
|
||||
|
||||
#include "cmsis.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef DEVICE_CAN
|
||||
|
||||
#define CAN_NUM 1 // Number of CAN peripherals present in the STM32 serie
|
||||
|
||||
#define CAN1_IRQ_RX_IRQN CEC_CAN_IRQn
|
||||
#define CAN1_IRQ_RX_VECT CAN_IRQHandler
|
||||
#define CAN1_IRQ_TX_IRQN CEC_CAN_IRQn
|
||||
#define CAN1_IRQ_TX_VECT CAN_IRQHandler
|
||||
#define CAN1_IRQ_ERROR_IRQN CEC_CAN_IRQn
|
||||
#define CAN1_IRQ_ERROR_VECT CAN_IRQHandler
|
||||
#define CAN1_IRQ_PASSIVE_IRQN CEC_CAN_IRQn
|
||||
#define CAN1_IRQ_PASSIVE_VECT CAN_IRQHandler
|
||||
#define CAN1_IRQ_BUS_IRQN CEC_CAN_IRQn
|
||||
#define CAN1_IRQ_BUS_VECT CAN_IRQHandler
|
||||
|
||||
#endif // DEVICE_CAN
|
||||
|
||||
#endif
|
|
@ -0,0 +1,42 @@
|
|||
/* mbed Microcontroller Library
|
||||
* Copyright (c) 2006-2017 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef MBED_CAN_DEVICE_H
|
||||
#define MBED_CAN_DEVICE_H
|
||||
|
||||
#include "cmsis.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef DEVICE_CAN
|
||||
|
||||
#define CAN_NUM 1 // Number of CAN peripherals present in the STM32 serie
|
||||
|
||||
#define CAN1_IRQ_RX_IRQN CAN1_RX0_IRQn
|
||||
#define CAN1_IRQ_RX_VECT CAN1_RX0_IRQHandler
|
||||
#define CAN1_IRQ_TX_IRQN CAN1_TX_IRQn
|
||||
#define CAN1_IRQ_TX_VECT CAN1_TX_IRQHandler
|
||||
#define CAN1_IRQ_ERROR_IRQN CAN1_SCE_IRQn
|
||||
#define CAN1_IRQ_ERROR_VECT CAN1_SCE_IRQHandler
|
||||
#define CAN1_IRQ_PASSIVE_IRQN CAN1_SCE_IRQn
|
||||
#define CAN1_IRQ_PASSIVE_VECT CAN1_SCE_IRQHandler
|
||||
#define CAN1_IRQ_BUS_IRQN CAN1_SCE_IRQn
|
||||
#define CAN1_IRQ_BUS_VECT CAN1_SCE_IRQHandler
|
||||
|
||||
#endif // DEVICE_CAN
|
||||
|
||||
#endif
|
|
@ -21,10 +21,10 @@
|
|||
#include "pinmap.h"
|
||||
#include "PeripheralPins.h"
|
||||
#include "mbed_error.h"
|
||||
#include "can_device.h" // Specific to STM32 serie
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
#define CAN_NUM 1
|
||||
static CAN_HandleTypeDef CanHandle;
|
||||
static uint32_t can_irq_ids[CAN_NUM] = {0};
|
||||
static can_irq_handler irq_handler;
|
||||
|
@ -393,6 +393,15 @@ static void can_irq(CANName name, int id)
|
|||
tmp1 = __HAL_CAN_TRANSMIT_STATUS(&CanHandle, CAN_TXMAILBOX_0);
|
||||
tmp2 = __HAL_CAN_TRANSMIT_STATUS(&CanHandle, CAN_TXMAILBOX_1);
|
||||
tmp3 = __HAL_CAN_TRANSMIT_STATUS(&CanHandle, CAN_TXMAILBOX_2);
|
||||
if (tmp1){
|
||||
__HAL_CAN_CLEAR_FLAG(&CanHandle, CAN_FLAG_RQCP0);
|
||||
}
|
||||
if (tmp2){
|
||||
__HAL_CAN_CLEAR_FLAG(&CanHandle, CAN_FLAG_RQCP1);
|
||||
}
|
||||
if (tmp3){
|
||||
__HAL_CAN_CLEAR_FLAG(&CanHandle, CAN_FLAG_RQCP2);
|
||||
}
|
||||
if(tmp1 || tmp2 || tmp3)
|
||||
{
|
||||
irq_handler(can_irq_ids[id], IRQ_TX);
|
||||
|
@ -427,10 +436,27 @@ static void can_irq(CANName name, int id)
|
|||
}
|
||||
}
|
||||
|
||||
#if defined(TARGET_STM32F0)
|
||||
void CAN_IRQHandler(void)
|
||||
{
|
||||
can_irq(CAN_1, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_STM32F1)
|
||||
void CAN1_RX0_IRQHandler(void )
|
||||
{
|
||||
can_irq(CAN_1, 0);
|
||||
}
|
||||
void CAN1_TX_IRQHandler(void)
|
||||
{
|
||||
can_irq(CAN_1, 0);
|
||||
}
|
||||
void CAN1_SCE_IRQHandler(void)
|
||||
{
|
||||
can_irq(CAN_1, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
void can_irq_set(can_t *obj, CanIrqType type, uint32_t enable)
|
||||
{
|
||||
|
@ -444,23 +470,31 @@ void can_irq_set(can_t *obj, CanIrqType type, uint32_t enable)
|
|||
switch (type) {
|
||||
case IRQ_RX:
|
||||
ier = CAN_IT_FMP0;
|
||||
irq_n = CAN1_IRQ_RX_IRQN;
|
||||
vector = (uint32_t)&CAN1_IRQ_RX_VECT;
|
||||
break;
|
||||
case IRQ_TX:
|
||||
ier = CAN_IT_TME;
|
||||
irq_n = CAN1_IRQ_TX_IRQN;
|
||||
vector = (uint32_t)&CAN1_IRQ_TX_VECT;
|
||||
break;
|
||||
case IRQ_ERROR:
|
||||
ier = CAN_IT_ERR;
|
||||
irq_n = CAN1_IRQ_ERROR_IRQN;
|
||||
vector = (uint32_t)&CAN1_IRQ_ERROR_VECT;
|
||||
break;
|
||||
case IRQ_PASSIVE:
|
||||
ier = CAN_IT_EPV;
|
||||
irq_n = CAN1_IRQ_PASSIVE_IRQN;
|
||||
vector = (uint32_t)&CAN1_IRQ_PASSIVE_VECT;
|
||||
break;
|
||||
case IRQ_BUS:
|
||||
ier = CAN_IT_BOF;
|
||||
irq_n = CAN1_IRQ_BUS_IRQN;
|
||||
vector = (uint32_t)&CAN1_IRQ_BUS_VECT;
|
||||
break;
|
||||
default: return;
|
||||
}
|
||||
irq_n = CEC_CAN_IRQn;
|
||||
vector = (uint32_t)&CAN_IRQHandler;
|
||||
}
|
||||
|
||||
if (enable) {
|
||||
|
|
Loading…
Reference in New Issue