diff bsp/abb+spi/spi_process.c @ 0:75a11d740a02

initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 09 Jun 2016 00:02:41 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bsp/abb+spi/spi_process.c	Thu Jun 09 00:02:41 2016 +0000
@@ -0,0 +1,162 @@
+/*****************************************************************************/
+/*                                                                           */
+/*  Name       spi_process.c                                                 */
+/*                                                                           */
+/*  Function    this file contains the spi_process function, used to         */
+/*		handle messages received in the SPI mailbox, and used to     */
+/*              access the ABB. It is called by the spi task core.           */
+/*                                                                           */
+/*  Version    0.1                                                           */
+/*                                                                           */
+/*  Date       Modification                                                  */
+/*  ------------------------------------                                     */
+/*  20/08/2000 Create                                                        */
+/*                                                                           */
+/* Author                                                                    */
+/*                                                                           */
+/* (C) Copyright 2000 by Texas Instruments Incorporated, All Rights Reserved */
+/*****************************************************************************/
+
+#include "../../riviera/rvf/rvf_api.h"
+#include "spi_api.h"
+#include "../../riviera/rvm/rvm_use_id_list.h"
+#include "spi_process.h"
+#include "../../riviera/rv/rv_defined_swe.h"	   // for RVM_PWR_SWE
+
+
+
+//#ifndef _WINDOWS
+//#include "iq.h"
+//#endif
+
+/*******************************************************************************
+** Function         spi_process
+**
+*******************************************************************************/
+UINT8 spi_process(T_RV_HDR * msg_ptr)
+{
+   UINT16 data ;
+//   static UINT8 int_nb = 0;
+
+   if(msg_ptr != NULL)
+   {
+      switch (msg_ptr->msg_id)
+      {
+         case ABB_EXT_IRQ_EVT:
+		 {
+            /* Call to the low-level driver function : interrupt status register reading */
+            data = ABB_Read_Register_on_page(PAGE0, ITSTATREG);
+
+//#ifndef _WINDOWS
+            // SW workaround to avoid an ABB interrupt occuring to early after the application start.
+			// The first ABB interrupt is skipped.
+
+//            if((int_nb == 0) && (data == ADCEND_IT_STS))
+//            {
+//              int_nb++;
+
+              /* Unmask keypad interrupt */
+//              IQ_Unmask(IQ_EXT);
+//            }
+//            else
+//            {
+
+			/* Callback function */
+//            if(msg_ptr->callback_func != NULL)
+//            {
+//               msg_ptr->callback_func(&data);
+//            }
+//          }
+//#else
+
+            /* Callback function */
+            if(msg_ptr->callback_func != NULL)
+            {
+               msg_ptr->callback_func(&data);
+            }
+//#endif
+
+            rvf_free_buf ((void *) msg_ptr);
+
+		   break;
+		 }
+
+         case SPI_ABB_READ_EVT:
+		 {
+           rvf_send_trace("SPI_task: SPI_READ_ABB_EVT received", 35, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, SPI_USE_ID);
+
+           /* Call to the low-level driver function */
+           data = ABB_Read_Register_on_page(((T_SPI_READ *)msg_ptr)->page, ((T_SPI_READ *)msg_ptr)->address);
+
+           /*  Callback function */
+           if(((T_SPI_READ *)msg_ptr)->os_hdr.callback_func != NULL)
+           {
+              ((T_SPI_READ *)msg_ptr)->os_hdr.callback_func(&data);
+           }
+
+           rvf_free_buf ((void *) msg_ptr);
+
+           return 0;
+		 }
+
+         case SPI_ABB_WRITE_EVT:
+		 {
+           rvf_send_trace("SPI_task: SPI_WRITE_ABB_EVT received", 36, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, SPI_USE_ID);
+
+           /* Call to the low-level driver function */
+           ABB_Write_Register_on_page(((T_SPI_WRITE *)msg_ptr)->page, ((T_SPI_WRITE *)msg_ptr)->address, ((T_SPI_WRITE *)msg_ptr)->data);
+
+           rvf_free_buf ((void *) msg_ptr);
+
+           return 0;
+		 }
+
+         case SPI_ABB_CONF_ADC_EVT:
+		 {
+           rvf_send_trace("SPI_task: SPI_ABB_CONF_ADC_EVT received", 39, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, SPI_USE_ID);
+
+           /* Call to the low-level driver function */
+           ABB_Conf_ADC(((T_SPI_ABB_CONF_ADC *)msg_ptr)->channels, ((T_SPI_ABB_CONF_ADC *)msg_ptr)->itval);                              
+
+           rvf_free_buf ((void *) msg_ptr);
+
+           return 0;
+		 }
+
+         case SPI_ABB_READ_ADC_EVT:
+		 {
+           rvf_send_trace("SPI_task: SPI_ABB_READ_ADC_EVT received", 39, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, SPI_USE_ID);
+
+           /* Call to the low-level driver function */
+           ABB_Read_ADC(((T_SPI_ABB_READ_ADC *)msg_ptr)->Buff);
+
+           /* Callback function */
+           if(((T_SPI_ABB_READ_ADC *)msg_ptr)->callback_func != NULL)
+           {
+              ((T_SPI_ABB_READ_ADC *)msg_ptr)->callback_func();
+           }
+
+           rvf_free_buf ((void *) msg_ptr);
+
+           return 0;
+		 }
+
+         default:
+		 {
+           /* Unknown message has been received */
+           #ifdef RVM_PWR_SWE
+           rvf_send_trace("SPI_task : Received an unknown or a PWR message",47, NULL_PARAM ,
+                           RV_TRACE_LEVEL_DEBUG_HIGH, SPI_USE_ID);
+           #else
+           rvf_send_trace("SPI_task : Received an unknown message",38, NULL_PARAM ,
+                           RV_TRACE_LEVEL_DEBUG_HIGH, SPI_USE_ID);
+
+           rvf_free_buf ((void *) msg_ptr);
+           #endif
+		   
+           return 1; 
+		 }
+      }	   // end of switch
+   }	// end of if (msg_ptr != NULL)
+   return 0;
+}