FreeCalypso > hg > freecalypso-sw
comparison gsm-fw/bsp/abb+spi/abb_inline.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 |
comparison
equal
deleted
inserted
replaced
147:4ac657b95f52 | 148:63750f70796d |
---|---|
1 /**********************************************************************************/ | |
2 /* TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION */ | |
3 /* */ | |
4 /* Property of Texas Instruments -- For Unrestricted Internal Use Only */ | |
5 /* Unauthorized reproduction and/or distribution is strictly prohibited. This */ | |
6 /* product is protected under copyright law and trade secret law as an */ | |
7 /* unpublished work. Created 1987, (C) Copyright 1997 Texas Instruments. All */ | |
8 /* rights reserved. */ | |
9 /* */ | |
10 /* */ | |
11 /* Filename : abb_inline.h */ | |
12 /* */ | |
13 /* Description : inline functions to drive the ABB device. */ | |
14 /* The Serial Port Interface is used to connect the TI */ | |
15 /* Analog BaseBand (ABB). */ | |
16 /* It is assumed that the ABB is connected as the SPI */ | |
17 /* device 0. */ | |
18 /* */ | |
19 /* Author : Pascal PUEL */ | |
20 /* */ | |
21 /* Version number : 1.0 */ | |
22 /* */ | |
23 /* Date and time : Dec 2002 */ | |
24 /* */ | |
25 /* Previous delta : Creation */ | |
26 /* */ | |
27 /**********************************************************************************/ | |
28 | |
29 #ifndef __ABB_INLINE_H__ | |
30 #define __ABB_INLINE_H__ | |
31 | |
32 #include "l1sw.cfg" | |
33 | |
34 #if (OP_L1_STANDALONE == 0) | |
35 #include "main/sys_types.h" | |
36 #else | |
37 #include "sys_types.h" | |
38 #endif | |
39 | |
40 #include "spi/spi_drv.h" | |
41 | |
42 // MACROS | |
43 #define ABB_WRITE_REG(reg, data) { \ | |
44 SPI_WRITE_TX_MSB((data << 6) | reg) \ | |
45 SPI_START_WRITE } | |
46 | |
47 #define ABB_READ_REG(reg) { \ | |
48 SPI_WRITE_TX_MSB(reg | 1) \ | |
49 SPI_START_READ } | |
50 | |
51 | |
52 #define ABB_SET_PAGE(page) ABB_WRITE_REG(PAGEREG, page) | |
53 | |
54 #define SEVEN_CYCLES_13M_NS 539 | |
55 | |
56 // INLINE FUNCTIONS | |
57 /*-----------------------------------------------------------------------*/ | |
58 /* ABB_SetPage() */ | |
59 /* */ | |
60 /* This function sets the right page in the ABB register PAGEREG. */ | |
61 /* */ | |
62 /*-----------------------------------------------------------------------*/ | |
63 static inline void ABB_SetPage(SYS_UWORD16 page) | |
64 { | |
65 volatile SYS_UWORD16 status; | |
66 | |
67 ABB_SET_PAGE(page); | |
68 while(((status = * (volatile SYS_UWORD16 *) SPI_REG_STATUS) & WE_ST) == 0); | |
69 | |
70 // if IBIC is already processing another request (from the BSP) | |
71 // the USP request is delayed by 3 clock cycles | |
72 // which gives a total of 7 clock cycles ( = 539 ns at 13 MHz) in the worst case | |
73 wait_ARM_cycles(convert_nanosec_to_cycles(SEVEN_CYCLES_13M_NS)); | |
74 } | |
75 | |
76 | |
77 /*-----------------------------------------------------------------------*/ | |
78 /* ABB_WriteRegister() */ | |
79 /* */ | |
80 /* This function writes "data" in the ABB register "abb_reg". */ | |
81 /* */ | |
82 /*-----------------------------------------------------------------------*/ | |
83 static inline void ABB_WriteRegister(SYS_UWORD16 abb_reg, SYS_UWORD16 data) | |
84 { | |
85 volatile SYS_UWORD16 status; | |
86 | |
87 ABB_WRITE_REG(abb_reg, data); | |
88 while(((status = * (volatile SYS_UWORD16 *) SPI_REG_STATUS) & WE_ST) == 0); | |
89 | |
90 // if IBIC is already processing another request (from the BSP) | |
91 // the USP request is delayed by 3 clock cycles | |
92 // which gives a total of 7 clock cycles ( = 539 ns at 13 MHz) in the worst case | |
93 wait_ARM_cycles(convert_nanosec_to_cycles(SEVEN_CYCLES_13M_NS)); | |
94 | |
95 } | |
96 | |
97 | |
98 /*-----------------------------------------------------------------------*/ | |
99 /* ABB_ReadRegister() */ | |
100 /* */ | |
101 /* This function reads the ABB register "abb_reg" and returns */ | |
102 /* the real register value. */ | |
103 /* */ | |
104 /*-----------------------------------------------------------------------*/ | |
105 static inline SYS_UWORD16 ABB_ReadRegister(SYS_UWORD16 abb_reg) | |
106 { | |
107 volatile SYS_UWORD16 status; | |
108 | |
109 // First part of read access to the ABB register | |
110 ABB_READ_REG(abb_reg); | |
111 while(((status = * (volatile SYS_UWORD16 *) SPI_REG_STATUS) & RE_ST) == 0); | |
112 | |
113 // if IBIC is already processing another request (from the BSP) | |
114 // the USP request is delayed by 3 clock cycles | |
115 // which gives a total of 7 clock cycles ( = 539 ns at 13 MHz) in the worst case | |
116 wait_ARM_cycles(convert_nanosec_to_cycles(SEVEN_CYCLES_13M_NS)); | |
117 | |
118 // Second part of read access to the ABB register | |
119 ABB_READ_REG(abb_reg); | |
120 while(((status = * (volatile SYS_UWORD16 *) SPI_REG_STATUS) & RE_ST) == 0); | |
121 | |
122 // if IBIC is already processing another request (from the BSP) | |
123 // the USP request is delayed by 3 clock cycles | |
124 // which gives a total of 7 clock cycles ( = 539 ns at 13 MHz) in the worst case | |
125 wait_ARM_cycles(convert_nanosec_to_cycles(SEVEN_CYCLES_13M_NS)); | |
126 | |
127 return ((SPI_ReadRX_LSB() >> 6) & 0x3ff); | |
128 } | |
129 | |
130 | |
131 #endif // __ABB_INLINE_H__ |