stm32_freertos_template/hw/inputdetect.c

111 lines
2.9 KiB
C

#include "inputdetect.h"
#include "gpio.h"
#include "error.h"
#include "gui.h"
#include "debug.h"
#include "main.h"
#include "stm32f10x.h"
#include <stdlib.h>
#include <stdint.h>
//------------------------definicje--------------------------------//
#define GPIOB_MANUAL_INPUT_MASK 0x8000
#define GPIOD_MANUAL_INPUT_MASK 0x3F00
//------------------------zmienne-------------------------//
//-----------------------------Funkcje------------------------------//
int8_t inputdetect_Initialize(void)
{
GPIO_InitTypeDef GPIO_Conf;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|
RCC_APB2Periph_GPIOE, ENABLE);
//wejścia auto - floating
GPIO_Conf.GPIO_Pin = AUTO_AMANERO_CLK|AUTO_AMANERO_DATA;
GPIO_Conf.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Conf.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_Conf);
GPIO_Conf.GPIO_Pin = AUTO_SPDIF|AUTO_TOSLINK|AUTO_AES_EBU;
GPIO_Init(GPIOD, &GPIO_Conf);
GPIO_Conf.GPIO_Pin = AUTO_PCM_CLK|AUTO_PCM_DATA|AUTO_DSD|AUTO_BT;
GPIO_Init(GPIOE, &GPIO_Conf);
//wejścia manualne - pullup, zero aktywne
GPIO_Conf.GPIO_Pin = IN1;
GPIO_Conf.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Conf.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_Conf);
GPIO_Conf.GPIO_Pin = IN2|IN3|IN4|IN5|IN6|IN7;
GPIO_Init(GPIOD, &GPIO_Conf);
}
uint16_t inputdetect_ReadInputSelector(void)
{
uint16_t input;
input = (~GPIO_Read(GPIOD) & GPIOD_MANUAL_INPUT_MASK) >> 7;
input |= (~GPIO_Read(GPIOB) & GPIOB_MANUAL_INPUT_MASK) >>15;
switch(input)
{
case 0x01:
return INPUT_AMANERO;
case 0x02:
return INPUT_PCM;
case 0x04:
return INPUT_DSD;
case 0x08:
return INPUT_AES_EBU;
case 0x10:
return INPUT_SPDIF;
case 0x20:
return INPUT_TOSLINK;
case 0x40:
return INPUT_BT;
default:
return INPUT_OFF;
}
}
uint16_t inputdetect_ReadClockDetectors(void)
{
uint16_t detector_state;
detector_state=0;
if (GPIO_Read(GPIOC) & AUTO_AMANERO_CLK)
detector_state |= DETECTOR_AMANERO_CLK;
if (GPIO_Read(GPIOC) & AUTO_AMANERO_DATA)
detector_state |= DETECTOR_AMANERO_DATA;
if (GPIO_Read(GPIOE) & AUTO_PCM_CLK)
detector_state |= DETECTOR_PCM_CLK;
if (GPIO_Read(GPIOE) & AUTO_PCM_DATA)
detector_state |= DETECTOR_PCM_DATA;
if (GPIO_Read(GPIOE) & AUTO_DSD)
detector_state |= DETECTOR_DSD;
if (GPIO_Read(GPIOD) & AUTO_SPDIF)
detector_state |= DETECTOR_SPDIF;
if (GPIO_Read(GPIOD) & AUTO_AES_EBU)
detector_state |= DETECTOR_AES_EBU;
if (GPIO_Read(GPIOD) & AUTO_TOSLINK)
detector_state |= DETECTOR_TOSLINK;
if (GPIO_Read(GPIOE) & AUTO_BT)
detector_state |= DETECTOR_BT;
return detector_state;
}