FreeCalypso > hg > fc-tourmaline
diff src/cs/drivers/drv_app/spi/spi_task.c @ 0:4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:23:26 +0000 |
parents | |
children | 365833d1d186 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cs/drivers/drv_app/spi/spi_task.c Fri Oct 16 06:23:26 2020 +0000 @@ -0,0 +1,148 @@ +/*****************************************************************************/ +/* */ +/* Name spi_task.c */ +/* */ +/* Function this file contains the main SPI function: spi_core. */ +/* It contains the body of the SPI task. */ +/* It will initialize the SPI and then wait for messages */ +/* or functions calls. */ +/* */ +/* Version 0.1 */ +/* Author Candice Bazanegue */ +/* */ +/* Date Modification */ +/* ------------------------------------ */ +/* 20/08/2000 Create */ +/* 01/09/2003 Modfication */ +/* Author Pascal Puel */ +/* */ +/* (C) Copyright 2000 by Texas Instruments Incorporated, All Rights Reserved */ +/*****************************************************************************/ + +#ifndef _WINDOWS + #include "chipset.cfg" + #if (CHIPSET == 12) + #include "inth/sys_inth.h" + #else + #include "inth/iq.h" // for IQ_Unmask() + #endif + #include "power/power.h" // for Switch_ON() +#endif + +#include "rv/rv_defined_swe.h" // for RVM_PWR_SWE +#include "rvm/rvm_use_id_list.h" +#include "spi/spi_env.h" +#include "spi/spi_process.h" +#include "spi/spi_task.h" + +#ifdef RVM_PWR_SWE + #include "pwr/pwr_liion_cha.h" + #include "pwr/pwr_disch.h" + #include "pwr/pwr_process.h" + #include "pwr/pwr_env.h" +#endif + + + +/******************************************************************************* +** Function spi_core +** +** Description Core of the spi task, which initiliazes the spi SWE and +** waits for messages. +** +*******************************************************************************/ +T_RV_RET spi_core(void) +{ + BOOLEAN error_occured = FALSE; + T_RV_HDR * msg_ptr; + + rvf_send_trace("SPI_task: Initialization", 24, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, SPI_USE_ID); + SPI_GBL_INFO_PTR->SpiTaskReady = TRUE; + +#ifndef _WINDOWS + /* Unmask External Interrupt once the SPI task is started */ + #if (CHIPSET == 12) + // Unmask ABB ext interrupt + F_INTH_ENABLE_ONE_IT(C_INTH_ABB_IRQ_IT); + #else + // Unmask external (ABB) interrupt + IQ_Unmask(IQ_EXT); + #endif + // Get the switch on cause from ABB. + Set_Switch_ON_Cause(); +#endif + + /* loop to process messages */ + while (error_occured == FALSE) + { + /* Wait for the necessary events (infinite wait for a msg in the mailbox 0). */ + UINT16 received_event = rvf_wait (0xffff, 0); + + /* If an event related to mailbox 0 is received, then */ + if (received_event & RVF_TASK_MBOX_0_EVT_MASK) + { + /* Read the message in the driver mailbox and delegate action..*/ + msg_ptr = (T_RV_HDR *) rvf_read_mbox(SPI_MAILBOX); + + #ifdef RVM_PWR_SWE + if(spi_process(msg_ptr)) + { + pwr_process(msg_ptr); + } + #else + spi_process(msg_ptr); + #endif + } + + #ifdef RVM_PWR_SWE + /* Timers */ + if (received_event & SPI_TIMER0_WAIT_EVENT) + { + pwr_bat_test_timer_process(); + } + + if (received_event & SPI_TIMER1_WAIT_EVENT) + /* timer used to detect the end of the CI charge */ + { + pwr_CI_charge_timer_process(); + } + + if (received_event & SPI_TIMER2_WAIT_EVENT) + /* timer used to detect the end of the CV charge */ + { + pwr_CV_charge_timer_process(); + } + + if (received_event & SPI_TIMER3_WAIT_EVENT) + /* timer used to check the battery discharge level */ + { + pwr_discharge_timer_process(); + } + #endif + } // end of while + return RV_OK; +} + + + +/********************************************************************************** +* Function : spi_adc_on +* +* Description : Put the variable is_adc_on of the T_SPI_GBL_INFO structure to TRUE. +* This variable is used for the battery management. +* This function is called by the CST entity. +* +* Parameters : None +* +* Return : None +* +**********************************************************************************/ +void spi_adc_on (void) +{ + SPI_GBL_INFO_PTR->is_adc_on = TRUE; + + rvf_send_trace("SPI: ADC are on",15, + NULL_PARAM, + RV_TRACE_LEVEL_DEBUG_LOW, + SPI_USE_ID); +}