diff gsm-fw/bsp/abb+spi/spi_drv.h @ 148:63750f70796d

gsm-fw/bsp/abb+spi: initial import from the Leonardo TCS211 version
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sat, 16 Nov 2013 19:03:37 +0000
parents
children 971e84124a6f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gsm-fw/bsp/abb+spi/spi_drv.h	Sat Nov 16 19:03:37 2013 +0000
@@ -0,0 +1,283 @@
+/**********************************************************************************/
+/*            TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION              */
+/*                                                                                */
+/*   Property of Texas Instruments -- For  Unrestricted  Internal  Use  Only      */
+/*   Unauthorized reproduction and/or distribution is strictly prohibited.  This  */
+/*   product  is  protected  under  copyright  law  and  trade  secret law as an  */
+/*   unpublished work.  Created 1987, (C) Copyright 1997 Texas Instruments.  All  */
+/*   rights reserved.                                                             */
+/*                                                                                */
+/*                                                                                */
+/*   Filename          : spi_drv.h                                                */
+/*                                                                                */
+/*   Description       : SPI registers and bits definitions.					  */
+/*                       Functions and macros to drive the SPI module.            */
+/*                       The Serial Port Interface is a bidirectional 3 lines 	  */
+/*                       interface dedicated to the transfer of data to and 	  */
+/*                       from up to 5 external devices offering a 3 lines 		  */
+/*                       serial interface.										  */
+/*						 In this project, it is only used to connect the TI 	  */
+/*						 Analog BaseBand (ABB).				    				  */
+/*						 It is assumed that the ABB is connected as the SPI       */																				  
+/*                       device 0.                                                */																				  
+/*																				  */
+/*                       This interface is specified to be compatible with 		  */
+/*                       the UMA1018M Philips, the FUJITSU MB15F02, the 		  */
+/*                       SIEMENS PMB2306T synthesizers and the TI ABB.			  */
+/*																				  */
+/*                       This serial port is based on a looped shift-register 	  */
+/*                       thus allowing both transmit (PISO) and receive (SIPO) 	  */
+/*                       modes.													  */
+/*																				  */
+/*                                                                                */
+/*   Author            : Pascal PUEL                                              */
+/*                                                                                */
+/*   Version number   : 1.28                                                       */
+/*                                                                                */
+/*   Date and time    : 07/01/03                                                       */
+/*                                                                                */
+/*   Previous delta   : Rework                                                    */
+/*                                                                                */
+/**********************************************************************************/
+
+#ifndef __SPI_DRV_H__
+#define __SPI_DRV_H__
+
+#include "l1sw.cfg"
+#include "chipset.cfg"
+
+#include "memif/mem.h" 
+#if (OP_L1_STANDALONE == 0)
+  #include "main/sys_types.h"
+#else
+  #include "sys_types.h"
+#endif
+
+// SPI module registers definition
+#define SPI_REG_SET1	(MEM_SPI + 0x00)
+#define SPI_REG_SET2	(MEM_SPI + 0x02)
+#define SPI_REG_CTRL	(MEM_SPI + 0x04)
+#define SPI_REG_STATUS	(MEM_SPI + 0x06)
+#define SPI_REG_TX_LSB	(MEM_SPI + 0x08)
+#define SPI_REG_TX_MSB	(MEM_SPI + 0x0A)
+#define SPI_REG_RX_LSB	(MEM_SPI + 0x0C)
+#define SPI_REG_RX_MSB	(MEM_SPI + 0x0E)
+
+
+// SPI module bits definition of register SPI_REG_SET1
+#define SPI_CLK_OFF          0x0000   // default value 
+#define SPI_CLK_ON           0x0001
+#define SPI_CLOCK_DIV_1      0x0000   // default value
+#define SPI_CLOCK_DIV_2      0x0002
+#define SPI_CLOCK_DIV_4      0x0004
+#define SPI_CLOCK_DIV_8      0x0006
+#define SPI_CLOCK_DIV_16     0x0008
+#if (CHIPSET == 12)
+#define SPI_CLOCK_DIV_32     0x000A
+#define SPI_CLOCK_DIV_64     0x000C
+#define SPI_CLOCK_DIV_128    0x000E
+#endif
+#define SPI_IT_MASK_0        0x0010   // default value
+#define SPI_IT_DEMASK_0      0x0000
+#define SPI_IT_MASK_1        0x0020   // default value   
+#define SPI_IT_DEMASK_1      0x0000
+
+
+// SPI module bits definition of register SPI_REG_SET2
+#define SPI_CLK_EDG_FALL     	  0x0000   // default value	for device 0
+#define SPI_CLK_EDG_RISE     	  0x0001
+#define SPI_CLK_EDG_FALL_1   	  0x0000   // default value	for device 1
+#define SPI_CLK_EDG_RISE_1   	  0x0002
+#define SPI_CLK_EDG_FALL_2   	  0x0000   // default value	for device 2
+#define SPI_CLK_EDG_RISE_2   	  0x0004
+#define SPI_CLK_EDG_FALL_3   	  0x0000   // default value	for device 3
+#define SPI_CLK_EDG_RISE_3   	  0x0008
+#define SPI_CLK_EDG_FALL_4   	  0x0000   // default value for device 4
+#define SPI_CLK_EDG_RISE_4   	  0x0010
+#define SPI_NTSPEN_NEG_LEV   	  0x0000   // default value	for device 0
+#define SPI_NTSPEN_POS_LEV   	  0x0020
+#define SPI_NTSPEN_NEG_LEV_1 	  0x0000   // default value	for device 1
+#define SPI_NTSPEN_POS_LEV_1 	  0x0040
+#define SPI_NTSPEN_NEG_LEV_2 	  0x0000   // default value	for device 2
+#define SPI_NTSPEN_POS_LEV_2 	  0x0080
+#define SPI_NTSPEN_NEG_LEV_3 	  0x0000   // default value	for device 3
+#define SPI_NTSPEN_POS_LEV_3 	  0x0100
+#define SPI_NTSPEN_NEG_LEV_4 	  0x0000   // default value for device 4
+#define SPI_NTSPEN_POS_LEV_4 	  0x0200
+#define SPI_NTSPEN_LEV_TRIG  	  0x0000   // default value	for device 0
+#define SPI_NTSPEN_EDG_TRIG  	  0x0400
+#define SPI_NTSPEN_LEV_TRIG_1	  0x0000   // default value	for device 1
+#define SPI_NTSPEN_EDG_TRIG_1	  0x0800
+#define SPI_NTSPEN_LEV_TRIG_2	  0x0000   // default value	for device 2
+#define SPI_NTSPEN_EDG_TRIG_2	  0x1000
+#define SPI_NTSPEN_LEV_TRIG_3	  0x0000   // default value	for device 3
+#define SPI_NTSPEN_EDG_TRIG_3	  0x2000
+#define SPI_NTSPEN_LEV_TRIG_4	  0x0000   // default value for device 4
+#define SPI_NTSPEN_EDG_TRIG_4	  0x4000
+
+
+// SPI module bits definition of register SPI_REG_CTRL
+#define SPI_RDWR_DEACTIV   0x0000      // default value
+#define SPI_RDWR_ACTIV     0x0001
+#define SPI_WR_DEACTIV     0x0000      // default value
+#define SPI_WR_ACTIV       0x0002
+#define SPI_WNB_0          0x0000      // default value  
+#define SPI_WNB_1          0x0004  
+#define SPI_WNB_2          0x0008  
+#define SPI_WNB_3          0x000c  
+#define SPI_WNB_4          0x0010  
+#define SPI_WNB_5          0x0014  
+#define SPI_WNB_6          0x0018  
+#define SPI_WNB_7          0x001c  
+#define SPI_WNB_8          0x0020  
+#define SPI_WNB_9          0x0024  
+#define SPI_WNB_10         0x0028  
+#define SPI_WNB_11         0x002c  
+#define SPI_WNB_12         0x0030  
+#define SPI_WNB_13         0x0034  
+#define SPI_WNB_14         0x0038  
+#define SPI_WNB_15         0x003c  
+#define SPI_WNB_16         0x0040  
+#define SPI_WNB_17         0x0044  
+#define SPI_WNB_18         0x0048  
+#define SPI_WNB_19         0x004c  
+#define SPI_WNB_20         0x0050  
+#define SPI_WNB_21         0x0054  
+#define SPI_WNB_22         0x0058  
+#define SPI_WNB_23         0x005c  
+#define SPI_WNB_24         0x0060  
+#define SPI_WNB_25         0x0064  
+#define SPI_WNB_26         0x0068  
+#define SPI_WNB_27         0x006c  
+#define SPI_WNB_28         0x0070  
+#define SPI_WNB_29         0x0074
+#define SPI_WNB_30         0x0078  
+#define SPI_WNB_31         0x007c 
+
+
+// SPI possible device IDs
+#define SPI_DEV0   0x0000 
+#define SPI_DEV1   0x0080   
+#define SPI_DEV2   0x0100   
+#define SPI_DEV3   0x0180   
+#define SPI_DEV4   0x0200   
+
+// ABB should be mapped as device 0
+#define ABB		SPI_DEV0
+
+
+// SPI module bits definition of register SPI_REG_STATUS
+#define RE_ST   0x0001   // bit 0
+#define WE_ST   0x0002   // bit 1
+
+
+/* The ARM emulator requires the spi clock always ON to be able to access */
+/* spi registers through a window.*/ 
+/* But it's better to stop the SPI clock in the GSM application to reduce the power consumption. */
+/* Validate the next line to reduce power consumption */
+//#define SPI_CLK_LOW_POWER
+
+
+
+// STRUCTURES
+typedef struct
+{
+    SYS_UWORD16 PrescVal;
+    SYS_UWORD16 DataTrLength;
+    SYS_UWORD16 DevAddLength;
+    SYS_UWORD16 DevId;
+    SYS_UWORD16 ClkEdge; 
+    SYS_UWORD16 TspEnLevel; 
+    SYS_UWORD16 TspEnForm; 
+}T_SPI_DEV;      // T_SPI_DEV is used to define an SPI device
+
+
+// MACROS
+#define SPI_WRITE_TX_LSB(TxLsb) { \
+* (volatile SYS_UWORD16 *) SPI_REG_TX_LSB = TxLsb;  }
+
+#define SPI_WRITE_TX_MSB(TxMsb) { \
+* (volatile SYS_UWORD16 *) SPI_REG_TX_MSB = TxMsb;  }
+
+#define SPI_START_WRITE {* (volatile SYS_UWORD16 *) SPI_REG_CTRL |= SPI_WR_ACTIV; }
+
+#define SPI_START_READ {* (volatile SYS_UWORD16 *) SPI_REG_CTRL |= SPI_RDWR_ACTIV; }
+
+#define SPI_CLK_DISABLE	{ \
+* (volatile SYS_UWORD16 *) SPI_REG_SET1 &= ~SPI_CLK_ON;  }
+
+#define SPI_CLK_ENABLE	{ \
+* (volatile SYS_UWORD16 *) SPI_REG_SET1 |= SPI_CLK_ON;  }
+
+#define SPI_MaskIT_WR { \
+* (volatile SYS_UWORD16 *) SPI_REG_SET1 |= SPI_IT_MASK_0;  }
+
+#define SPI_MaskIT_RD { \
+* (volatile SYS_UWORD16 *) SPI_REG_SET1 |= SPI_IT_MASK_1;  }
+
+#define SPI_Mask_All_IT { \
+* (volatile SYS_UWORD16 *) SPI_REG_SET1 |= (SPI_IT_MASK_0 | SPI_IT_MASK_1);  }
+
+#define SPI_UnmaskIT_WR { \
+* (volatile SYS_UWORD16 *) SPI_REG_SET1 &= ~SPI_IT_MASK_0;  }
+
+#define SPI_UnmaskIT_RD { \
+* (volatile SYS_UWORD16 *) SPI_REG_SET1 &= ~SPI_IT_MASK_1;  }
+
+#define SPI_Unmask_All_IT { \
+* (volatile SYS_UWORD16 *) SPI_REG_SET1 &= ~(SPI_IT_MASK_0 | SPI_IT_MASK_1);  }
+
+#define SPI_Ready_for_WR { \
+* (volatile SYS_UWORD16 *) SPI_REG_SET1 |= (SPI_CLK_ON | SPI_IT_MASK_0); }
+
+#define SPI_Ready_for_RD { \
+* (volatile SYS_UWORD16 *) SPI_REG_SET1 |= (SPI_CLK_ON | SPI_IT_MASK_1); }
+
+#define SPI_Ready_for_RDWR { \
+* (volatile SYS_UWORD16 *) SPI_REG_SET1 |= (SPI_CLK_ON | SPI_IT_MASK_0 | SPI_IT_MASK_1); }   
+
+
+
+// INLINE FUNCTIONS
+/*-----------------------------------------------------------------------*/
+/* SPI_ReadRX_LSB()                                                      */
+/*                                                                       */
+/* This function returns the value of SPI_REG_RX_LSB register            */
+/*                                                                       */
+/*-----------------------------------------------------------------------*/
+static inline SYS_UWORD16 SPI_ReadRX_LSB(void)
+{
+  return * (volatile SYS_UWORD16 *) SPI_REG_RX_LSB;
+}
+
+
+/*-----------------------------------------------------------------------*/
+/* SPI_ReadRX_MSB()                                                      */
+/*                                                                       */
+/* This function returns the value of SPI_REG_RX_MSB register            */
+/*                                                                       */
+/*-----------------------------------------------------------------------*/
+static inline SYS_UWORD16 SPI_ReadRX_MSB(void)
+{
+  return * (volatile SYS_UWORD16 *) SPI_REG_RX_MSB;
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* SPI_ReadStatus()                                                      */
+/*                                                                       */
+/* This function returns the value of SPI_REG_STATUS register            */
+/*                                                                       */
+/*-----------------------------------------------------------------------*/
+static inline SYS_UWORD16 SPI_ReadStatus(void)
+{
+  return * (volatile SYS_UWORD16 *) SPI_REG_STATUS;
+}
+
+
+
+// PROTOTYPES
+void SPI_InitDev(T_SPI_DEV *Device);
+
+#endif   //  __SPI_DRV_H__