diff --git a/drivers/dac101c085.c b/drivers/dac101c085.c index 6c5662b..4493620 100644 --- a/drivers/dac101c085.c +++ b/drivers/dac101c085.c @@ -20,20 +20,18 @@ void init(void) void setDAC(uint16_t new_value) { uint8_t ub = (new_value >> 6) & 0x0F; - //uint8_t ub = 0x10; uint8_t lb = (new_value << 2) & 0xFF; init(); - osPrintf("Upper %d\n", ub); - osPrintf("Lower %d\n", lb); i2cStartTransmission(I2Cx_DAC, I2C_Direction_Transmitter, DAC_ADDR); - i2cWrite(I2Cx_DAC, &ub); - i2cWrite(I2Cx_DAC, &lb); + i2cWrite(I2Cx_DAC, &ub, 1, STANDARD_I2C_TIMEOUT); + i2cWrite(I2Cx_DAC, &lb, 1, STANDARD_I2C_TIMEOUT); i2cEndTransmission(I2Cx_DAC); } uint16_t readDAC(void) { uint16_t dac_val = 1; + init(); i2cStartTransmission(I2Cx_DAC, I2C_Direction_Receiver, DAC_ADDR); i2cAckOn(I2Cx_DAC); dac_val = i2cRead(I2Cx_DAC); diff --git a/main.c b/main.c index 9cd602f..97d245a 100644 --- a/main.c +++ b/main.c @@ -2,6 +2,7 @@ #include #include "platform/porting.h" #include "drivers/dac101c085.h" +#include "platform/ext_interrupt.h" #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-parameter" @@ -39,7 +40,8 @@ int main(int argc, char* argv[]) RCC_GetClocksFreq (&RCC_Clocks); osPrintf("System Core Clock: %d\n\r", SystemCoreClock); osPrintf("HCLK: %d\n\r", RCC_Clocks.HCLK_Frequency); - osTaskCreate(*task3, "task 3", args, 1, NULL); + initExtInt(); + //osTaskCreate(*task3, "task 3", args, 1, NULL); while (1); // Infinite loop, never return. } diff --git a/platform/ext_interrupt.c b/platform/ext_interrupt.c new file mode 100644 index 0000000..6878ffd --- /dev/null +++ b/platform/ext_interrupt.c @@ -0,0 +1,48 @@ +/* + * ext_interrupt.c + * + * Created on: 3 Sep 2019 + * Author: maximilian + */ + +#include "ext_interrupt.h" + +void initExtInt(void) +{ + // Initialization structs + GPIO_InitTypeDef exti_gpio; + + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); + + //Additionally we need to initialize corresponding GPIOs + exti_gpio.GPIO_Pin = GPIO_Pin_8; + exti_gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING; + exti_gpio.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(GPIOC, &exti_gpio); + + GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8); + + EXTI_InitTypeDef EXTI_InitStructure; + EXTI_InitStructure.EXTI_Line = EXTI_Line8; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + NVIC_InitTypeDef NVIC_InitStructure; + NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //Enable keypad external interrupt channel + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; //Priority 2, + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; //Sub priority 2 + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //Enable external interrupt channel + NVIC_Init(&NVIC_InitStructure); + osPrintf("Ext. int initialized."); +} + +void EXTI9_5_IRQHandler(void) +{ + osPrintf("Got interrupt."); + if(EXTI_GetITStatus(EXTI_Line8) != RESET) { + EXTI_ClearITPendingBit(EXTI_Line0); + } +} diff --git a/platform/ext_interrupt.h b/platform/ext_interrupt.h new file mode 100644 index 0000000..92ceabf --- /dev/null +++ b/platform/ext_interrupt.h @@ -0,0 +1,16 @@ +/* + * ext_interrupt.h + * + * Created on: 3 Sep 2019 + * Author: maximilian + */ + +#ifndef PLATFORM_EXT_INTERRUPT_H_ +#define PLATFORM_EXT_INTERRUPT_H_ + +#include "stm32f10x.h" +#include + +void initExtInt(void); + +#endif /* PLATFORM_EXT_INTERRUPT_H_ */ diff --git a/platform/i2c.h b/platform/i2c.h index 55b9923..d71da17 100644 --- a/platform/i2c.h +++ b/platform/i2c.h @@ -11,10 +11,12 @@ #include "stm32f10x.h" #include +#define STANDARD_I2C_TIMEOUT 1000 + void i2cInit(I2C_TypeDef* I2Cx); void i2c1Init(void); void i2cStartTransmission(I2C_TypeDef* I2Cx, uint8_t dir, uint8_t slave_addr); -void i2cWrite(I2C_TypeDef* I2Cx, uint8_t* data); +void i2cWrite(I2C_TypeDef* I2Cx, uint8_t* data, uint16_t len, uint32_t timeout); uint8_t i2cRead(I2C_TypeDef* I2Cx); void i2cEndTransmission(I2C_TypeDef* I2Cx);