aboutsummaryrefslogtreecommitdiff
path: root/lib/stm32
diff options
context:
space:
mode:
authorUwe Hermann2011-04-28 19:42:35 +0200
committerUwe Hermann2011-04-28 19:42:35 +0200
commit089bb73018517701284b47d3801bf8bc6ad03cdd (patch)
tree1fe3c6fdbbd8a75c7748b59d64a2d073a3d46cd1 /lib/stm32
parent149c0c7dc0aeeda92b83c0c0e7c1a169d45e3d0b (diff)
parent3ac0ae839d710de6552f617934bed2f5f9629bec (diff)
Merge remote-tracking branch 'gsmcmullin/master'.
Diffstat (limited to 'lib/stm32')
-rw-r--r--lib/stm32/Makefile6
-rw-r--r--lib/stm32/can.c10
-rw-r--r--lib/stm32/vector.c26
3 files changed, 34 insertions, 8 deletions
diff --git a/lib/stm32/Makefile b/lib/stm32/Makefile
index 6ffcc4a..095f524 100644
--- a/lib/stm32/Makefile
+++ b/lib/stm32/Makefile
@@ -25,7 +25,7 @@ CC = $(PREFIX)-gcc
AR = $(PREFIX)-ar
CFLAGS = -Os -g -Wall -Wextra -I../../include -fno-common \
-mcpu=cortex-m3 -mthumb -Wstrict-prototypes \
- -ffunction-sections -fdata-sections
+ -ffunction-sections -fdata-sections -MD
# ARFLAGS = rcsv
ARFLAGS = rcs
OBJS = vector.o rcc.o gpio.o usart.o adc.o spi.o flash.o nvic.o \
@@ -52,8 +52,10 @@ $(LIBNAME).a: $(OBJS)
clean:
@printf " CLEAN lib/stm32\n"
- $(Q)rm -f *.o
+ $(Q)rm -f *.o *.d
$(Q)rm -f $(LIBNAME).a
.PHONY: clean
+-include $(OBJS:.o=.d)
+
diff --git a/lib/stm32/can.c b/lib/stm32/can.c
index 3266133..e571f8a 100644
--- a/lib/stm32/can.c
+++ b/lib/stm32/can.c
@@ -211,6 +211,8 @@ int can_transmit(u32 canport, u32 id, bool ext, bool rtr, u8 length, u8 *data)
if (ret == -1)
return ret;
+ /* Clear stale register bits */
+ CAN_TIxR(canport, mailbox) = 0;
if (ext) {
/* Set extended ID. */
CAN_TIxR(canport, mailbox) |= id << CAN_TIxR_EXID_SHIFT;
@@ -219,15 +221,11 @@ int can_transmit(u32 canport, u32 id, bool ext, bool rtr, u8 length, u8 *data)
} else {
/* Set standard ID. */
CAN_TIxR(canport, mailbox) |= id << CAN_TIxR_STID_SHIFT;
- /* Unset extended ID indicator bit. */
- CAN_TIxR(canport, mailbox) &= ~CAN_TIxR_IDE;
}
/* Set/clear remote transmission request bit. */
if (rtr)
CAN_TIxR(canport, mailbox) |= CAN_TIxR_RTR; /* Set */
- else
- CAN_TIxR(canport, mailbox) &= ~CAN_TIxR_RTR; /* Clear */
/* Set the DLC. */
CAN_TDTxR(canport, mailbox) &= 0xFFFFFFFF0;
@@ -270,12 +268,12 @@ void can_receive(u32 canport, u8 fifo, bool release, u32 *id, bool *ext,
if (CAN_RIxR(canport, fifo_id) & CAN_RIxR_IDE) {
*ext = true;
/* Get extended CAN ID. */
- *id = ((CAN_RIxR(canport, fifo_id) & CAN_RIxR_EXID_MASK) >
+ *id = ((CAN_RIxR(canport, fifo_id) & CAN_RIxR_EXID_MASK) >>
CAN_RIxR_EXID_SHIFT);
} else {
*ext = false;
/* Get standard CAN ID. */
- *id = ((CAN_RIxR(canport, fifo_id) & CAN_RIxR_STID_MASK) >
+ *id = ((CAN_RIxR(canport, fifo_id) & CAN_RIxR_STID_MASK) >>
CAN_RIxR_STID_SHIFT);
}
diff --git a/lib/stm32/vector.c b/lib/stm32/vector.c
index 4d3d510..39bd9a1 100644
--- a/lib/stm32/vector.c
+++ b/lib/stm32/vector.c
@@ -96,6 +96,15 @@ void WEAK dma2_channel1_isr(void);
void WEAK dma2_channel2_isr(void);
void WEAK dma2_channel3_isr(void);
void WEAK dma2_channel4_5_isr(void);
+void WEAK dma2_channel5_isr(void);
+void WEAK eth_isr(void);
+void WEAK eth_wkup_isr(void);
+void WEAK can2_tx_isr(void);
+void WEAK can2_rx0_isr(void);
+void WEAK can2_rx1_isr(void);
+void WEAK can2_sce_isr(void);
+void WEAK otg_fs_isr(void);
+
__attribute__ ((section(".vectors")))
void (*const vector_table[]) (void) = {
@@ -172,6 +181,14 @@ void (*const vector_table[]) (void) = {
dma2_channel2_isr,
dma2_channel3_isr,
dma2_channel4_5_isr,
+ dma2_channel5_isr,
+ eth_isr,
+ eth_wkup_isr,
+ can2_tx_isr,
+ can2_rx0_isr,
+ can2_rx1_isr,
+ can2_sce_isr,
+ otg_fs_isr,
};
void reset_handler(void)
@@ -268,3 +285,12 @@ void null_handler(void)
#pragma weak dma2_channel2_isr = null_handler
#pragma weak dma2_channel3_isr = null_handler
#pragma weak dma2_channel4_5_isr = null_handler
+#pragma weak dma2_channel5_isr
+#pragma weak eth_isr = null_handler
+#pragma weak eth_wkup_isr = null_handler
+#pragma weak can2_tx_isr = null_handler
+#pragma weak can2_rx0_isr = null_handler
+#pragma weak can2_rx1_isr = null_handler
+#pragma weak can2_sce_isr = null_handler
+#pragma weak otg_fs_isr = null_handler
+