FreeCalypso > hg > freecalypso-citrine
diff bsp/abb+spi/abb_inline.h @ 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/abb_inline.h Thu Jun 09 00:02:41 2016 +0000 @@ -0,0 +1,126 @@ +/******************************************************************************/ +/* 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 : abb_inline.h */ +/* */ +/* Description : inline functions to drive the ABB device. */ +/* The Serial Port Interface is used to connect the TI */ +/* Analog BaseBand (ABB). */ +/* It is assumed that the ABB is connected as the SPI */ +/* device 0. */ +/* */ +/* Author : Pascal PUEL */ +/* */ +/* Version number : 1.0 */ +/* */ +/* Date and time : Dec 2002 */ +/* */ +/* Previous delta : Creation */ +/* */ +/******************************************************************************/ + +#ifndef __ABB_INLINE_H__ +#define __ABB_INLINE_H__ + +#include "../../include/config.h" +#include "../../include/sys_types.h" + +#include "spi_drv.h" + +// MACROS +#define ABB_WRITE_REG(reg, data) { \ + SPI_WRITE_TX_MSB((data << 6) | reg) \ + SPI_START_WRITE } + +#define ABB_READ_REG(reg) { \ + SPI_WRITE_TX_MSB(reg | 1) \ + SPI_START_READ } + + +#define ABB_SET_PAGE(page) ABB_WRITE_REG(PAGEREG, page) + +#define SEVEN_CYCLES_13M_NS 539 + +// INLINE FUNCTIONS +/*-----------------------------------------------------------------------*/ +/* ABB_SetPage() */ +/* */ +/* This function sets the right page in the ABB register PAGEREG. */ +/* */ +/*-----------------------------------------------------------------------*/ +static inline void ABB_SetPage(SYS_UWORD16 page) +{ + volatile SYS_UWORD16 status; + + ABB_SET_PAGE(page); + while(((status = * (volatile SYS_UWORD16 *) SPI_REG_STATUS) & WE_ST) == 0); + + // if IBIC is already processing another request (from the BSP) + // the USP request is delayed by 3 clock cycles + // which gives a total of 7 clock cycles ( = 539 ns at 13 MHz) in the worst case + wait_ARM_cycles(convert_nanosec_to_cycles(SEVEN_CYCLES_13M_NS)); +} + + +/*-----------------------------------------------------------------------*/ +/* ABB_WriteRegister() */ +/* */ +/* This function writes "data" in the ABB register "abb_reg". */ +/* */ +/*-----------------------------------------------------------------------*/ +static inline void ABB_WriteRegister(SYS_UWORD16 abb_reg, SYS_UWORD16 data) +{ + volatile SYS_UWORD16 status; + + ABB_WRITE_REG(abb_reg, data); + while(((status = * (volatile SYS_UWORD16 *) SPI_REG_STATUS) & WE_ST) == 0); + + // if IBIC is already processing another request (from the BSP) + // the USP request is delayed by 3 clock cycles + // which gives a total of 7 clock cycles ( = 539 ns at 13 MHz) in the worst case + wait_ARM_cycles(convert_nanosec_to_cycles(SEVEN_CYCLES_13M_NS)); + +} + + +/*-----------------------------------------------------------------------*/ +/* ABB_ReadRegister() */ +/* */ +/* This function reads the ABB register "abb_reg" and returns */ +/* the real register value. */ +/* */ +/*-----------------------------------------------------------------------*/ +static inline SYS_UWORD16 ABB_ReadRegister(SYS_UWORD16 abb_reg) +{ + volatile SYS_UWORD16 status; + + // First part of read access to the ABB register + ABB_READ_REG(abb_reg); + while(((status = * (volatile SYS_UWORD16 *) SPI_REG_STATUS) & RE_ST) == 0); + + // if IBIC is already processing another request (from the BSP) + // the USP request is delayed by 3 clock cycles + // which gives a total of 7 clock cycles ( = 539 ns at 13 MHz) in the worst case + wait_ARM_cycles(convert_nanosec_to_cycles(SEVEN_CYCLES_13M_NS)); + + // Second part of read access to the ABB register + ABB_READ_REG(abb_reg); + while(((status = * (volatile SYS_UWORD16 *) SPI_REG_STATUS) & RE_ST) == 0); + + // if IBIC is already processing another request (from the BSP) + // the USP request is delayed by 3 clock cycles + // which gives a total of 7 clock cycles ( = 539 ns at 13 MHz) in the worst case + wait_ARM_cycles(convert_nanosec_to_cycles(SEVEN_CYCLES_13M_NS)); + + return ((SPI_ReadRX_LSB() >> 6) & 0x3ff); +} + + +#endif // __ABB_INLINE_H__