]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_IAR_Keil/libboard_samv7-ek/source/CS2100.c
Final V8.2.1 release ready for tagging:
[freertos] / FreeRTOS / Demo / CORTEX_M7_SAMV71_Xplained_IAR_Keil / libboard_samv7-ek / source / CS2100.c
1 /* ----------------------------------------------------------------------------\r
2  *         SAM Software Package License \r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2014, Atmel Corporation\r
5  *\r
6  * All rights reserved.\r
7  *\r
8  * Redistribution and use in source and binary forms, with or without\r
9  * modification, are permitted provided that the following conditions are met:\r
10  *\r
11  * - Redistributions of source code must retain the above copyright notice,\r
12  * this list of conditions and the disclaimer below.\r
13  *\r
14  * Atmel's name may not be used to endorse or promote products derived from\r
15  * this software without specific prior written permission.\r
16  *\r
17  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
20  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
23  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
24  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
25  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
26  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
27  * ----------------------------------------------------------------------------\r
28  */\r
29 \r
30 /**\r
31  * \file\r
32   *\r
33   * Implementation WM8904 driver.\r
34   *\r
35   */\r
36 \r
37 /*----------------------------------------------------------------------------\r
38  *        Headers\r
39  *----------------------------------------------------------------------------*/\r
40 \r
41 #include "board.h"\r
42 \r
43 /*----------------------------------------------------------------------------\r
44  *        Type\r
45  *----------------------------------------------------------------------------*/\r
46 typedef struct {\r
47     uint16_t value;\r
48     uint8_t address;\r
49 }CS2100_PARA;\r
50 \r
51 /*----------------------------------------------------------------------------\r
52  *        Exported functions\r
53  *----------------------------------------------------------------------------*/\r
54 /**\r
55  * \brief Read data from CS2100 Register.\r
56  *\r
57  * \param pTwid   Pointer to twi driver structure\r
58  * \param device  Twi slave address.\r
59  * \param regAddr Register address to read.\r
60  * \return value in the given register.\r
61  */\r
62 uint16_t CS2100_Read(Twid *pTwid,\r
63                      uint32_t device,\r
64                      uint32_t regAddr)\r
65 {\r
66     uint16_t bitsDataRegister;\r
67     uint8_t Tdata[2]={0,0};\r
68 \r
69     TWID_Read(pTwid, device, regAddr, 1, Tdata, 2, 0);\r
70     bitsDataRegister = (Tdata[0] << 8) | Tdata[1];\r
71     return bitsDataRegister;\r
72 }\r
73 \r
74 /**\r
75  * \brief  Write data to WM8904 Register.\r
76  *\r
77  * \param pTwid   Pointer to twi driver structure\r
78  * \param device  Twi slave address.\r
79  * \param regAddr Register address to read.\r
80  * \param data    Data to write\r
81  */\r
82 void CS2100_Write(Twid *pTwid,\r
83                   uint32_t device,\r
84                   uint32_t regAddr,\r
85                   uint16_t data)\r
86 {\r
87     uint8_t tmpData[2];\r
88     \r
89     tmpData[0] = (data & 0xff00) >> 8;\r
90     tmpData[1] = data & 0xff;\r
91     TWID_Write(pTwid, device, regAddr, 1, tmpData, 2, 0);\r
92 }\r
93 \r
94 uint8_t CS2100_Init(Twid *pTwid, uint32_t device,  uint32_t PCK)\r
95 {\r
96     uint16_t data = 0;\r
97 \r
98     // Reset (write Reg@0x0 to reset)\r
99     CS2100_Write(pTwid, device, 0, 0xFFFF);\r
100 \r
101     for(data=0;data<1000;data++);\r
102     //wait ready    \r
103     while(data!=0x8904)\r
104         data=CS2100_Read(pTwid, device, 0);\r
105 \r
106     \r
107 \r
108     \r
109     return 0;\r
110 }\r
111 \r
112 \r