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