altoslib: Move new sensor library code into altoslib
[fw/altos] / src / stm / stm32l.h
index e884ef04a8812e8f5af73daefc9e3f21ebfd5435..cb66df6c9bdb440d4e745ba5b34aa0abf7cd752e 100644 (file)
@@ -101,13 +101,13 @@ stm_ospeedr_get(struct stm_gpio *gpio, int pin) {
 #define STM_PUPDR_RESERVED             3
 
 static inline void
-stm_pupdr_set(struct stm_gpio *gpio, int pin, vuint32_t value) {
+stm_pupdr_set(struct stm_gpio *gpio, int pin, uint32_t value) {
        gpio->pupdr = ((gpio->pupdr &
                        ~(STM_PUPDR_MASK << STM_PUPDR_SHIFT(pin))) |
                       value << STM_PUPDR_SHIFT(pin));
 }
        
-static inline vuint32_t
+static inline uint32_t
 stm_pupdr_get(struct stm_gpio *gpio, int pin) {
        return (gpio->pupdr >> STM_PUPDR_SHIFT(pin)) & STM_PUPDR_MASK;
 }
@@ -855,10 +855,7 @@ isr(tim7)
 struct stm_syscfg {
        vuint32_t       memrmp;
        vuint32_t       pmc;
-       vuint32_t       exticr1;
-       vuint32_t       exticr2;
-       vuint32_t       exticr3;
-       vuint32_t       exticr4;
+       vuint32_t       exticr[4];
 };
 
 extern struct stm_syscfg stm_syscfg;
@@ -871,6 +868,34 @@ extern struct stm_syscfg stm_syscfg;
 
 #define STM_SYSCFG_PMC_USB_PU          0
 
+#define STM_SYSCFG_EXTICR_PA           0
+#define STM_SYSCFG_EXTICR_PB           1
+#define STM_SYSCFG_EXTICR_PC           2
+#define STM_SYSCFG_EXTICR_PD           3
+#define STM_SYSCFG_EXTICR_PE           4
+#define STM_SYSCFG_EXTICR_PH           5
+
+static inline void
+stm_exticr_set(struct stm_gpio *gpio, int pin) {
+       uint8_t reg = pin >> 2;
+       uint8_t shift = (pin & 3) << 2;
+       uint8_t val = 0;
+
+       if (gpio == &stm_gpioa)
+               val = STM_SYSCFG_EXTICR_PA;
+       else if (gpio == &stm_gpiob)
+               val = STM_SYSCFG_EXTICR_PB;
+       else if (gpio == &stm_gpioc)
+               val = STM_SYSCFG_EXTICR_PC;
+       else if (gpio == &stm_gpiod)
+               val = STM_SYSCFG_EXTICR_PD;
+       else if (gpio == &stm_gpioe)
+               val = STM_SYSCFG_EXTICR_PE;
+
+       stm_syscfg.exticr[reg] = (stm_syscfg.exticr[reg] & ~(0xf << shift)) | val << shift;
+}
+
+
 struct stm_dma_channel {
        vuint32_t       ccr;
        vuint32_t       cndtr;
@@ -953,8 +978,8 @@ extern struct stm_dma stm_dma;
 #define STM_DMA_CHANNEL_USART2_TX      7
 #define STM_DMA_CHANNEL_I2C2_TX                4
 #define STM_DMA_CHANNEL_I2C2_RX                5
-#define STM_DMA_CHANNEL_I2C1_RX                6
-#define STM_DMA_CHANNEL_I2C1_TX                7
+#define STM_DMA_CHANNEL_I2C1_TX                6
+#define STM_DMA_CHANNEL_I2C1_RX                7
 #define STM_DMA_CHANNEL_TIM2_CH3       1
 #define STM_DMA_CHANNEL_TIM2_UP                2
 #define STM_DMA_CHANNEL_TIM2_CH1       5
@@ -1589,4 +1614,16 @@ union stm_usb_bdt {
 
 extern uint8_t stm_usb_sram[];
 
+struct stm_exti {
+       vuint32_t       imr;
+       vuint32_t       emr;
+       vuint32_t       rtsr;
+       vuint32_t       ftsr;
+
+       vuint32_t       swier;
+       vuint32_t       pr;
+};
+
+extern struct stm_exti stm_exti;
+
 #endif /* _STM32L_H_ */