CAN (Controller area network) - Регистры CAN-шины



CAN control and status registers - регистры управления и состояния CAN-шины


Offset: 0x00
CAN master control register
Регистр основного управления CAN-шиной
Offset: 0x04
CAN master status register
Регистр основного состояния CAN-шины
Offset: 0x08
CAN transmit status register
Регистр состояния передачи CAN-шины
Offset: 0x0C
CAN receive FIFO 0 register
Регистр приёмника FIFO 0
Offset: 0x10
CAN receive FIFO 1 register
Регистр приёмника FIFO 1
Offset: 0x14
CAN interrupt enable register
Регистр разрешения прерываний CAN-шины
Offset: 0x18
CAN error status register
Регистр состояния ошибок CAN-шины
Offset: 0x1С
CAN bit timing register
Регистр битов синхронизации CAN-шины




CAN mailbox registers - регистры почтовых ящиков CAN-шины


Offset: 0x180, 0x190, 0x1A0
CAN TX mailbox identifier register
Регистр идентификатора сообщения почтового ящика передатчика CAN-шины
Offset: 0x184, 0x194, 0x1A4
CAN mailbox data length control and time stamp register
Регистр управления длиной данных почтового ящика и временных меток передатчика CAN-шины
Offset: 0x188, 0x198, 0x1A8
CAN mailbox data low register
Регистр младших данных почтового ящика передатчика CAN-шины
Offset: 0x18С, 0x19С, 0x1AС
CAN mailbox data high register
Регистр старших данных почтового ящика передатчика CAN-шины
Offset: 0x1B0, 0x1C0
CAN receive FIFO mailbox identifier register
Регистр идентификатора сообщения почтового ящика FIFO приёмника CAN-шины
Offset: 0x1B4, 0x1C4
CAN receive FIFO mailbox data length control and time stamp register
Регистр управления длиной данных почтового ящика FIFO и временных меток приёмника CAN-шины
Offset: 0x1B8, 0x1C8
CAN receive FIFO mailbox data low register
Регистр младших данных почтового ящика FIFO приёмника CAN-шины
Offset: 0x1BС, 0x1СС
CAN receive FIFO mailbox data high register
Регистр старших данных почтового ящика FIFO приёмника CAN-шины




CAN filter registers - регистры фильтров CAN-шины


Offset: 0x200
CAN filter master register
Основной регистр фильтра CAN-шины
Offset: 0x204
CAN filter mode register
Регистр режима фильтра CAN-шины
Offset: 0x20С
CAN filter scale register
Регистр размера фильтра CAN-шины
Offset: 0x214
CAN filter FIFO assignment register
Регистр назначения фильтра для FIFO CAN-шины
Offset: 0x21С
CAN filter activation register
Регистр активации фильтра CAN-шины
Offset: 0x240...0x31C
Filter bank i register x (i=0..27, x=1, 2)
Регистр банков фильтра CAN-шины (регистр маски / идентификатора)



#define PERIPH_BASE         ((uint32_t)0x40000000)     /* Peripheral base address in the alias region */
#define APB1PERIPH_BASE     PERIPH_BASE
#define AHBPERIPH_BASE      (PERIPH_BASE + 0x20000)

#define CAN1_BASE           (APB1PERIPH_BASE + 0x6400)
#define CAN2_BASE           (APB1PERIPH_BASE + 0x6800)

#define CAN1                ((CAN_TypeDef *) CAN1_BASE)
#define CAN2                ((CAN_TypeDef *) CAN2_BASE)


typedef struct
{
  __IO uint32_t  MCR;
  __IO uint32_t  MSR;
  __IO uint32_t  TSR;
  __IO uint32_t  RF0R;
  __IO uint32_t  RF1R;
  __IO uint32_t  IER;
  __IO uint32_t  ESR;
  __IO uint32_t  BTR;
       uint32_t  RESERVED0[88];
  CAN_TxMailBox_TypeDef    sTxMailBox[3];
  CAN_FIFOMailBox_TypeDef  sFIFOMailBox[2];
       uint32_t  RESERVED1[12];
  __IO uint32_t  FMR;
  __IO uint32_t  FM1R;
       uint32_t  RESERVED2;
  __IO uint32_t  FS1R;
       uint32_t  RESERVED3;
  __IO uint32_t  FFA1R;
       uint32_t  RESERVED4;
  __IO uint32_t  FA1R;
       uint32_t  RESERVED5[8];
  CAN_FilterRegister_TypeDef  sFilterRegister[14]; /* not STM32F10X_CL */
//CAN_FilterRegister_TypeDef  sFilterRegister[28]; /* STM32F10X_CL     */
} CAN_TypeDef;


// Controller Area Network TxMailBox 
typedef struct
{
  __IO uint32_t TIR;
  __IO uint32_t TDTR;
  __IO uint32_t TDLR;
  __IO uint32_t TDHR;
} CAN_TxMailBox_TypeDef;


// Controller Area Network FIFOMailBox 
typedef struct
{
  __IO uint32_t RIR;
  __IO uint32_t RDTR;
  __IO uint32_t RDLR;
  __IO uint32_t RDHR;
} CAN_FIFOMailBox_TypeDef;


// Controller Area Network FilterRegister 
typedef struct
{
  __IO uint32_t FR1;
  __IO uint32_t FR2;
} CAN_FilterRegister_TypeDef;



/******  STM32 specific Interrupt Numbers  *******/
USB_HP_CAN1_TX_IRQn  = 19,     /* USB Device High Priority or CAN1 TX Interrupts       */
USB_LP_CAN1_RX0_IRQn = 20,     /* USB Device Low Priority or CAN1 RX0 Interrupts       */
CAN1_RX1_IRQn        = 21,     /* CAN1 RX1 Interrupt                  */
CAN1_SCE_IRQn        = 22,     /* CAN1 SCE Interrupt                  */
...
CAN2_TX_IRQn         = 63,     /* CAN2 TX Interrupt     STM32F10X_CL  */
CAN2_RX0_IRQn        = 64,     /* CAN2 RX0 Interrupt    STM32F10X_CL  */
CAN2_RX1_IRQn        = 65,     /* CAN2 RX1 Interrupt    STM32F10X_CL  */
CAN2_SCE_IRQn        = 66,     /* CAN2 SCE Interrupt    STM32F10X_CL  */


//- функции прерывания (из startup-файла)
DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX
DCD     USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0
DCD     CAN1_RX1_IRQHandler        ; CAN1 RX1
DCD     CAN1_SCE_IRQHandler        ; CAN1 SCE