Browse Source

First draft for ext. interrupts

master
Maximilian Stiefel 5 years ago
parent
commit
65d35434a5
  1. 8
      drivers/dac101c085.c
  2. 4
      main.c
  3. 48
      platform/ext_interrupt.c
  4. 16
      platform/ext_interrupt.h
  5. 4
      platform/i2c.h

8
drivers/dac101c085.c

@ -20,20 +20,18 @@ void init(void)
void setDAC(uint16_t new_value) void setDAC(uint16_t new_value)
{ {
uint8_t ub = (new_value >> 6) & 0x0F; uint8_t ub = (new_value >> 6) & 0x0F;
//uint8_t ub = 0x10;
uint8_t lb = (new_value << 2) & 0xFF; uint8_t lb = (new_value << 2) & 0xFF;
init(); init();
osPrintf("Upper %d\n", ub);
osPrintf("Lower %d\n", lb);
i2cStartTransmission(I2Cx_DAC, I2C_Direction_Transmitter, DAC_ADDR); i2cStartTransmission(I2Cx_DAC, I2C_Direction_Transmitter, DAC_ADDR);
i2cWrite(I2Cx_DAC, &ub); i2cWrite(I2Cx_DAC, &ub, 1, STANDARD_I2C_TIMEOUT);
i2cWrite(I2Cx_DAC, &lb); i2cWrite(I2Cx_DAC, &lb, 1, STANDARD_I2C_TIMEOUT);
i2cEndTransmission(I2Cx_DAC); i2cEndTransmission(I2Cx_DAC);
} }
uint16_t readDAC(void) uint16_t readDAC(void)
{ {
uint16_t dac_val = 1; uint16_t dac_val = 1;
init();
i2cStartTransmission(I2Cx_DAC, I2C_Direction_Receiver, DAC_ADDR); i2cStartTransmission(I2Cx_DAC, I2C_Direction_Receiver, DAC_ADDR);
i2cAckOn(I2Cx_DAC); i2cAckOn(I2Cx_DAC);
dac_val = i2cRead(I2Cx_DAC); dac_val = i2cRead(I2Cx_DAC);

4
main.c

@ -2,6 +2,7 @@
#include <stdlib.h> #include <stdlib.h>
#include "platform/porting.h" #include "platform/porting.h"
#include "drivers/dac101c085.h" #include "drivers/dac101c085.h"
#include "platform/ext_interrupt.h"
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter" #pragma GCC diagnostic ignored "-Wunused-parameter"
@ -39,7 +40,8 @@ int main(int argc, char* argv[])
RCC_GetClocksFreq (&RCC_Clocks); RCC_GetClocksFreq (&RCC_Clocks);
osPrintf("System Core Clock: %d\n\r", SystemCoreClock); osPrintf("System Core Clock: %d\n\r", SystemCoreClock);
osPrintf("HCLK: %d\n\r", RCC_Clocks.HCLK_Frequency); 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); while (1);
// Infinite loop, never return. // Infinite loop, never return.
} }

48
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);
}
}

16
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 <stdlib.h>
void initExtInt(void);
#endif /* PLATFORM_EXT_INTERRUPT_H_ */

4
platform/i2c.h

@ -11,10 +11,12 @@
#include "stm32f10x.h" #include "stm32f10x.h"
#include <stdlib.h> #include <stdlib.h>
#define STANDARD_I2C_TIMEOUT 1000
void i2cInit(I2C_TypeDef* I2Cx); void i2cInit(I2C_TypeDef* I2Cx);
void i2c1Init(void); void i2c1Init(void);
void i2cStartTransmission(I2C_TypeDef* I2Cx, uint8_t dir, uint8_t slave_addr); 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); uint8_t i2cRead(I2C_TypeDef* I2Cx);
void i2cEndTransmission(I2C_TypeDef* I2Cx); void i2cEndTransmission(I2C_TypeDef* I2Cx);

Loading…
Cancel
Save