#include "at32f403a_407.h"
#include "ms5192t.h"
#include "FreeRTOS.h"
#include "task.h"
#include "settings_api.h"
#include "io_utils.h"
#include "spi_common.h"
#include "Communication.h"
#include <stdio.h>





#define ADC_GET_STATUS_REG  0x40

//
void adc_gpio_init(void)
{
#if 0  
    gpio_init_type gpio_initstructure;
        
    crm_periph_clock_enable(CRM_GPIOE_PERIPH_CLOCK, TRUE);
    
    gpio_initstructure.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;  
    gpio_initstructure.gpio_pull           = GPIO_PULL_NONE;  
    gpio_initstructure.gpio_mode           = GPIO_MODE_OUTPUT;  
    gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_initstructure.gpio_pins           = GPIO_PINS_11 | GPIO_PINS_12 | 
                                             GPIO_PINS_13 | GPIO_PINS_14;
    
    gpio_init(GPIOE, &gpio_initstructure); 
#endif    
    
    gpio_init_type gpio_initstructure;
    spi_init_type spi_init_struct;
  
    crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
    crm_periph_clock_enable(CRM_GPIOE_PERIPH_CLOCK, TRUE);
    
    gpio_pin_remap_config(SPI4_GMUX_0001, TRUE);
  
    // SCK
    gpio_initstructure.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;  
    gpio_initstructure.gpio_pull           = GPIO_PULL_DOWN;  
    gpio_initstructure.gpio_mode           = GPIO_MODE_MUX;  
    gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_initstructure.gpio_pins           = GPIO_PINS_11;
    gpio_init(GPIOE, &gpio_initstructure);
  
    // MISO
    gpio_initstructure.gpio_pull           = GPIO_PULL_UP;  
    gpio_initstructure.gpio_mode           = GPIO_MODE_INPUT;  
    gpio_initstructure.gpio_pins           = GPIO_PINS_13;
    gpio_init(GPIOE, &gpio_initstructure);
    
    // MOSI
    gpio_initstructure.gpio_pull           = GPIO_PULL_UP;  
    gpio_initstructure.gpio_mode           = GPIO_MODE_MUX; 
    gpio_initstructure.gpio_pins           = GPIO_PINS_14;
    gpio_init(GPIOE, &gpio_initstructure);
     
    // CS
    gpio_initstructure.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;  
    gpio_initstructure.gpio_pull           = GPIO_PULL_UP;  
    gpio_initstructure.gpio_mode           = GPIO_MODE_OUTPUT;  
    gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_initstructure.gpio_pins           = GPIO_PINS_12;
    gpio_init(GPIOE, &gpio_initstructure);
    
    
    MS5192T_CS_HIGH;

    crm_periph_clock_enable(CRM_SPI4_PERIPH_CLOCK, TRUE);
    
    spi_default_para_init(&spi_init_struct);
    spi_init_struct.transmission_mode = SPI_TRANSMIT_FULL_DUPLEX;
    spi_init_struct.master_slave_mode = SPI_MODE_MASTER;
    spi_init_struct.mclk_freq_division = SPI_MCLK_DIV_32; //SPI_MCLK_DIV_2;
    spi_init_struct.first_bit_transmission = SPI_FIRST_BIT_MSB;
    spi_init_struct.frame_bit_num = SPI_FRAME_8BIT;
    spi_init_struct.clock_polarity = SPI_CLOCK_POLARITY_HIGH;
    spi_init_struct.clock_phase = SPI_CLOCK_PHASE_2EDGE;
    spi_init_struct.cs_mode_selection = SPI_CS_SOFTWARE_MODE;
    
    spi_init(MS5192T_SPI, &spi_init_struct);
 
    //spi_hardware_cs_output_enable(SPI3, TRUE);
    
    //adc_mosi_to_spi();
    
    spi_enable(MS5192T_SPI, TRUE);
    
    
}

//
void adc_mosi_high(void)
{
    gpio_init_type gpio_initstructure;
    
    gpio_initstructure.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;  
    gpio_initstructure.gpio_pull           = GPIO_PULL_UP;  
    gpio_initstructure.gpio_mode           = GPIO_MODE_OUTPUT;  
    gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_initstructure.gpio_pins           = GPIO_PINS_14;
    gpio_init(GPIOE, &gpio_initstructure);
    
    gpio_bits_set(GPIOE, GPIO_PINS_14);
}

//
void adc_mosi_to_spi(void)
{
    gpio_init_type gpio_initstructure;
    
    gpio_initstructure.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;  
    gpio_initstructure.gpio_pull           = GPIO_PULL_UP;  
    gpio_initstructure.gpio_mode           = GPIO_MODE_MUX;  
    gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_initstructure.gpio_pins           = GPIO_PINS_14;
    gpio_init(GPIOE, &gpio_initstructure);
}

//
void adc_test(void)
{
    uint8_t tx = 0;
    uint8_t rx = 0;
    
/*  
    gpio_bits_set(GPIOE, GPIO_PINS_11 | GPIO_PINS_12 | GPIO_PINS_13 | GPIO_PINS_14);
    vTaskDelay(100);
    gpio_bits_reset(GPIOE, GPIO_PINS_11 | GPIO_PINS_12 | GPIO_PINS_13 | GPIO_PINS_14);
    vTaskDelay(100);    
*/
    MS5192T_CS_LOW;
    adc_mosi_to_spi();
    //common_spi_send(MS5192T_SPI, ADC_GET_STATUS_REG);
    //rx =  common_spi_receive(MS5192T_SPI);
    rx = common_spi_tx_rx(MS5192T_SPI, ADC_GET_STATUS_REG);
    rx = common_spi_tx_rx(MS5192T_SPI, 0);
    MS5192T_CS_HIGH;
    adc_mosi_high();
    vTaskDelay(100);
}





