summaryrefslogtreecommitdiff
path: root/ports/stm32/can.c
AgeCommit message (Collapse)Author
2019-10-13remove ports/stm32Dan Halbert
2018-06-18stm32/can: Use MP_OBJ_ARRAY_TYPECODE_FLAG_RW where appropriate.Damien George
2018-05-02stm32/irq: Define IRQ priorities directly as encoded hardware values.Damien George
For a given IRQn (eg UART) there's no need to carry around both a PRI and SUBPRI value (eg IRQ_PRI_UART, IRQ_SUBPRI_UART). Instead, the IRQ_PRI_UART value has been changed in this patch to be the encoded hardware value, using NVIC_EncodePriority. This way the NVIC_SetPriority function can be used directly, instead of going through HAL_NVIC_SetPriority which must do extra processing to encode the PRI+SUBPRI. For a priority grouping of 4 (4 bits for preempt priority, 0 bits for the sub-priority), which is used in the stm32 port, the IRQ_PRI_xxx constants remain unchanged in their value. This patch also "fixes" the use of raise_irq_pri() which should be passed the encoded value (but as mentioned above the unencoded value is the same as the encoded value for priority grouping 4, so there was no bug from this error).
2018-04-11stm32/can: Allow CAN pins to be configured per board.Damien George
This patch allows a given board to configure which pins are used for the CAN peripherals, in a similar way to all the other bus peripherals (I2C, UART, SPI). To enable CAN on a board the mpconfigboard.h file should define (for example): #define MICROPY_HW_CAN1_TX (pin_B9) #define MICROPY_HW_CAN1_RX (pin_B8) #define MICROPY_HW_CAN2_TX (pin_B13) #define MICROPY_HW_CAN2_RX (pin_B12) And the board config file should no longer define MICROPY_HW_ENABLE_CAN.
2018-03-19stm32/can: Add "list" param to CAN.recv() to receive data inplace.Damien George
This API matches (as close as possible) how other pyb classes allow inplace operations, such as pyb.SPI.recv(buf).
2018-03-16stm32/can: Use explicit byte extraction instead of casting to word ptr.Damien George
Casting the Data array to a uint32_t* leads to strict aliasing errors on older gcc compilers.
2018-03-16stm32/can: Add CAN.info() method to retrieve error and tx/rx buf info.Damien George
2018-03-16stm32/can: Add CAN.state() method to get the state of the controller.Damien George
This is useful for monitoring errors on the bus and knowing when a restart is needed.
2018-03-15stm32/can: Add CAN.restart() method so controller can leave bus-off.Damien George
2018-03-15stm32/can: Add "auto_restart" option to constructor and init() method.Damien George
2018-03-15stm32/can: Use enums to index keyword arguments, for clarity.Damien George
2018-03-15stm32/can: Improve can.recv() so it checks for events, eg ctrl-C.Damien George
This patch provides a custom (and simple) function to receive data on the CAN bus, instead of the HAL function. This custom version calls mp_handle_pending() while waiting for messages, which, among other things, allows to interrupt the recv() method via KeyboardInterrupt.
2018-02-13stm32: Update HAL macro and constant names to use newer versions.Damien George
Newer versions of the HAL use names which are cleaner and more self-consistent amongst the HAL itself. This patch switches to use those names in most places so it is easier to update the HAL in the future.
2018-02-01stm32/can: Support MCUs without a CAN2 peripheral.Damien George
2017-10-04all: Remove inclusion of internal py header files.Damien George
Header files that are considered internal to the py core and should not normally be included directly are: py/nlr.h - internal nlr configuration and declarations py/bc0.h - contains bytecode macro definitions py/runtime0.h - contains basic runtime enums Instead, the top-level header files to include are one of: py/obj.h - includes runtime0.h and defines everything to use the mp_obj_t type py/runtime.h - includes mpstate.h and hence nlr.h, obj.h, runtime0.h, and defines everything to use the general runtime support functions Additional, specific headers (eg py/objlist.h) can be included if needed.
2017-09-06ports: Make new ports/ sub-directory and move all ports there.Damien George
This is to keep the top-level directory clean, to make it clear what is core and what is a port, and to allow the repository to grow with new ports in a sustainable way.