FreeCalypso > hg > fc-tourmaline
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4e78acac3d88 |
---|---|
1 /*****************************************************************************/ | |
2 /* */ | |
3 /* Name spi_task.c */ | |
4 /* */ | |
5 /* Function this file contains the main SPI function: spi_core. */ | |
6 /* It contains the body of the SPI task. */ | |
7 /* It will initialize the SPI and then wait for messages */ | |
8 /* or functions calls. */ | |
9 /* */ | |
10 /* Version 0.1 */ | |
11 /* Author Candice Bazanegue */ | |
12 /* */ | |
13 /* Date Modification */ | |
14 /* ------------------------------------ */ | |
15 /* 20/08/2000 Create */ | |
16 /* 01/09/2003 Modfication */ | |
17 /* Author Pascal Puel */ | |
18 /* */ | |
19 /* (C) Copyright 2000 by Texas Instruments Incorporated, All Rights Reserved */ | |
20 /*****************************************************************************/ | |
21 | |
22 #ifndef _WINDOWS | |
23 #include "chipset.cfg" | |
24 #if (CHIPSET == 12) | |
25 #include "inth/sys_inth.h" | |
26 #else | |
27 #include "inth/iq.h" // for IQ_Unmask() | |
28 #endif | |
29 #include "power/power.h" // for Switch_ON() | |
30 #endif | |
31 | |
32 #include "rv/rv_defined_swe.h" // for RVM_PWR_SWE | |
33 #include "rvm/rvm_use_id_list.h" | |
34 #include "spi/spi_env.h" | |
35 #include "spi/spi_process.h" | |
36 #include "spi/spi_task.h" | |
37 | |
38 #ifdef RVM_PWR_SWE | |
39 #include "pwr/pwr_liion_cha.h" | |
40 #include "pwr/pwr_disch.h" | |
41 #include "pwr/pwr_process.h" | |
42 #include "pwr/pwr_env.h" | |
43 #endif | |
44 | |
45 | |
46 | |
47 /******************************************************************************* | |
48 ** Function spi_core | |
49 ** | |
50 ** Description Core of the spi task, which initiliazes the spi SWE and | |
51 ** waits for messages. | |
52 ** | |
53 *******************************************************************************/ | |
54 T_RV_RET spi_core(void) | |
55 { | |
56 BOOLEAN error_occured = FALSE; | |
57 T_RV_HDR * msg_ptr; | |
58 | |
59 rvf_send_trace("SPI_task: Initialization", 24, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, SPI_USE_ID); | |
60 SPI_GBL_INFO_PTR->SpiTaskReady = TRUE; | |
61 | |
62 #ifndef _WINDOWS | |
63 /* Unmask External Interrupt once the SPI task is started */ | |
64 #if (CHIPSET == 12) | |
65 // Unmask ABB ext interrupt | |
66 F_INTH_ENABLE_ONE_IT(C_INTH_ABB_IRQ_IT); | |
67 #else | |
68 // Unmask external (ABB) interrupt | |
69 IQ_Unmask(IQ_EXT); | |
70 #endif | |
71 // Get the switch on cause from ABB. | |
72 Set_Switch_ON_Cause(); | |
73 #endif | |
74 | |
75 /* loop to process messages */ | |
76 while (error_occured == FALSE) | |
77 { | |
78 /* Wait for the necessary events (infinite wait for a msg in the mailbox 0). */ | |
79 UINT16 received_event = rvf_wait (0xffff, 0); | |
80 | |
81 /* If an event related to mailbox 0 is received, then */ | |
82 if (received_event & RVF_TASK_MBOX_0_EVT_MASK) | |
83 { | |
84 /* Read the message in the driver mailbox and delegate action..*/ | |
85 msg_ptr = (T_RV_HDR *) rvf_read_mbox(SPI_MAILBOX); | |
86 | |
87 #ifdef RVM_PWR_SWE | |
88 if(spi_process(msg_ptr)) | |
89 { | |
90 pwr_process(msg_ptr); | |
91 } | |
92 #else | |
93 spi_process(msg_ptr); | |
94 #endif | |
95 } | |
96 | |
97 #ifdef RVM_PWR_SWE | |
98 /* Timers */ | |
99 if (received_event & SPI_TIMER0_WAIT_EVENT) | |
100 { | |
101 pwr_bat_test_timer_process(); | |
102 } | |
103 | |
104 if (received_event & SPI_TIMER1_WAIT_EVENT) | |
105 /* timer used to detect the end of the CI charge */ | |
106 { | |
107 pwr_CI_charge_timer_process(); | |
108 } | |
109 | |
110 if (received_event & SPI_TIMER2_WAIT_EVENT) | |
111 /* timer used to detect the end of the CV charge */ | |
112 { | |
113 pwr_CV_charge_timer_process(); | |
114 } | |
115 | |
116 if (received_event & SPI_TIMER3_WAIT_EVENT) | |
117 /* timer used to check the battery discharge level */ | |
118 { | |
119 pwr_discharge_timer_process(); | |
120 } | |
121 #endif | |
122 } // end of while | |
123 return RV_OK; | |
124 } | |
125 | |
126 | |
127 | |
128 /********************************************************************************** | |
129 * Function : spi_adc_on | |
130 * | |
131 * Description : Put the variable is_adc_on of the T_SPI_GBL_INFO structure to TRUE. | |
132 * This variable is used for the battery management. | |
133 * This function is called by the CST entity. | |
134 * | |
135 * Parameters : None | |
136 * | |
137 * Return : None | |
138 * | |
139 **********************************************************************************/ | |
140 void spi_adc_on (void) | |
141 { | |
142 SPI_GBL_INFO_PTR->is_adc_on = TRUE; | |
143 | |
144 rvf_send_trace("SPI: ADC are on",15, | |
145 NULL_PARAM, | |
146 RV_TRACE_LEVEL_DEBUG_LOW, | |
147 SPI_USE_ID); | |
148 } |