test public
Dependencies: HttpServer_snapshot_mbed-os
mbed-gr-libs/R_BSP/tools/ssif_api.c@0:e9fd5575b10e, 2019-10-18 (annotated)
- Committer:
- anhtran
- Date:
- Fri Oct 18 03:09:43 2019 +0000
- Revision:
- 0:e9fd5575b10e
abc
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
anhtran | 0:e9fd5575b10e | 1 | /******************************************************************************* |
anhtran | 0:e9fd5575b10e | 2 | * DISCLAIMER |
anhtran | 0:e9fd5575b10e | 3 | * This software is supplied by Renesas Electronics Corporation and is only |
anhtran | 0:e9fd5575b10e | 4 | * intended for use with Renesas products. No other uses are authorized. This |
anhtran | 0:e9fd5575b10e | 5 | * software is owned by Renesas Electronics Corporation and is protected under |
anhtran | 0:e9fd5575b10e | 6 | * all applicable laws, including copyright laws. |
anhtran | 0:e9fd5575b10e | 7 | * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING |
anhtran | 0:e9fd5575b10e | 8 | * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT |
anhtran | 0:e9fd5575b10e | 9 | * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
anhtran | 0:e9fd5575b10e | 10 | * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. |
anhtran | 0:e9fd5575b10e | 11 | * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS |
anhtran | 0:e9fd5575b10e | 12 | * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE |
anhtran | 0:e9fd5575b10e | 13 | * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR |
anhtran | 0:e9fd5575b10e | 14 | * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE |
anhtran | 0:e9fd5575b10e | 15 | * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. |
anhtran | 0:e9fd5575b10e | 16 | * Renesas reserves the right, without notice, to make changes to this software |
anhtran | 0:e9fd5575b10e | 17 | * and to discontinue the availability of this software. By using this software, |
anhtran | 0:e9fd5575b10e | 18 | * you agree to the additional terms and conditions found by accessing the |
anhtran | 0:e9fd5575b10e | 19 | * following link: |
anhtran | 0:e9fd5575b10e | 20 | * http://www.renesas.com/disclaimer* |
anhtran | 0:e9fd5575b10e | 21 | * Copyright (C) 2015 Renesas Electronics Corporation. All rights reserved. |
anhtran | 0:e9fd5575b10e | 22 | *******************************************************************************/ |
anhtran | 0:e9fd5575b10e | 23 | |
anhtran | 0:e9fd5575b10e | 24 | #include "ssif_api.h" |
anhtran | 0:e9fd5575b10e | 25 | |
anhtran | 0:e9fd5575b10e | 26 | #if defined(TARGET_RZ_A1XX) |
anhtran | 0:e9fd5575b10e | 27 | #if defined(TARGET_RZA1H) /* mbed */ |
anhtran | 0:e9fd5575b10e | 28 | static const PinMap PinMap_SSIF_SCK[] = { |
anhtran | 0:e9fd5575b10e | 29 | // pin ch func |
anhtran | 0:e9fd5575b10e | 30 | {P2_8 , 0 , 4}, |
anhtran | 0:e9fd5575b10e | 31 | {P4_4 , 0 , 5}, |
anhtran | 0:e9fd5575b10e | 32 | {P3_4 , 1 , 3}, |
anhtran | 0:e9fd5575b10e | 33 | {P7_1 , 1 , 6}, |
anhtran | 0:e9fd5575b10e | 34 | {P10_12 , 1 , 2}, |
anhtran | 0:e9fd5575b10e | 35 | {P7_5 , 2 , 6}, |
anhtran | 0:e9fd5575b10e | 36 | {P9_5 , 2 , 3}, |
anhtran | 0:e9fd5575b10e | 37 | {P4_12 , 3 , 6}, |
anhtran | 0:e9fd5575b10e | 38 | {P7_8 , 3 , 2}, |
anhtran | 0:e9fd5575b10e | 39 | {P7_12 , 4 , 2}, |
anhtran | 0:e9fd5575b10e | 40 | {P8_12 , 4 , 8}, |
anhtran | 0:e9fd5575b10e | 41 | {P11_4 , 4 , 3}, |
anhtran | 0:e9fd5575b10e | 42 | {P2_4 , 5 , 4}, |
anhtran | 0:e9fd5575b10e | 43 | {P4_8 , 5 , 5}, |
anhtran | 0:e9fd5575b10e | 44 | {P8_8 , 5 , 8}, |
anhtran | 0:e9fd5575b10e | 45 | {NC , NC , 0} |
anhtran | 0:e9fd5575b10e | 46 | }; |
anhtran | 0:e9fd5575b10e | 47 | |
anhtran | 0:e9fd5575b10e | 48 | static const PinMap PinMap_SSIF_WS[] = { |
anhtran | 0:e9fd5575b10e | 49 | // pin ch func |
anhtran | 0:e9fd5575b10e | 50 | {P2_9 , 0 , 4}, |
anhtran | 0:e9fd5575b10e | 51 | {P4_5 , 0 , 5}, |
anhtran | 0:e9fd5575b10e | 52 | {P3_5 , 1 , 3}, |
anhtran | 0:e9fd5575b10e | 53 | {P7_2 , 1 , 6}, |
anhtran | 0:e9fd5575b10e | 54 | {P10_13 , 1 , 2}, |
anhtran | 0:e9fd5575b10e | 55 | {P7_6 , 2 , 6}, |
anhtran | 0:e9fd5575b10e | 56 | {P9_6 , 2 , 3}, |
anhtran | 0:e9fd5575b10e | 57 | {P4_13 , 3 , 6}, |
anhtran | 0:e9fd5575b10e | 58 | {P7_9 , 3 , 2}, |
anhtran | 0:e9fd5575b10e | 59 | {P7_13 , 4 , 2}, |
anhtran | 0:e9fd5575b10e | 60 | {P8_13 , 4 , 8}, |
anhtran | 0:e9fd5575b10e | 61 | {P11_5 , 4 , 3}, |
anhtran | 0:e9fd5575b10e | 62 | {P2_5 , 5 , 4}, |
anhtran | 0:e9fd5575b10e | 63 | {P4_9 , 5 , 5}, |
anhtran | 0:e9fd5575b10e | 64 | {P8_9 , 5 , 8}, |
anhtran | 0:e9fd5575b10e | 65 | {NC , NC , 0} |
anhtran | 0:e9fd5575b10e | 66 | }; |
anhtran | 0:e9fd5575b10e | 67 | |
anhtran | 0:e9fd5575b10e | 68 | static const PinMap PinMap_SSIF_TxD[] = { |
anhtran | 0:e9fd5575b10e | 69 | // pin ch func |
anhtran | 0:e9fd5575b10e | 70 | {P2_11 , 0 , 4}, |
anhtran | 0:e9fd5575b10e | 71 | {P4_7 , 0 , 5}, |
anhtran | 0:e9fd5575b10e | 72 | {P7_4 , 1 , 6}, |
anhtran | 0:e9fd5575b10e | 73 | {P10_15 , 1 , 2}, |
anhtran | 0:e9fd5575b10e | 74 | {P7_7 , 2 , 6}, /* SSIDATA2 */ |
anhtran | 0:e9fd5575b10e | 75 | {P9_7 , 2 , 3}, /* SSIDATA2 */ |
anhtran | 0:e9fd5575b10e | 76 | {P4_15 , 3 , 6}, |
anhtran | 0:e9fd5575b10e | 77 | {P7_11 , 3 , 2}, |
anhtran | 0:e9fd5575b10e | 78 | {P6_1 , 4 , 6}, /* SSIDATA4 */ |
anhtran | 0:e9fd5575b10e | 79 | {P7_14 , 4 , 2}, /* SSIDATA4 */ |
anhtran | 0:e9fd5575b10e | 80 | {P8_14 , 4 , 8}, /* SSIDATA4 */ |
anhtran | 0:e9fd5575b10e | 81 | {P11_6 , 4 , 3}, /* SSIDATA4 */ |
anhtran | 0:e9fd5575b10e | 82 | {P2_7 , 5 , 4}, |
anhtran | 0:e9fd5575b10e | 83 | {P4_11 , 5 , 5}, |
anhtran | 0:e9fd5575b10e | 84 | {P8_10 , 5 , 8}, |
anhtran | 0:e9fd5575b10e | 85 | {NC , NC , 0} |
anhtran | 0:e9fd5575b10e | 86 | }; |
anhtran | 0:e9fd5575b10e | 87 | |
anhtran | 0:e9fd5575b10e | 88 | static const PinMap PinMap_SSIF_RxD[] = { |
anhtran | 0:e9fd5575b10e | 89 | // pin ch func |
anhtran | 0:e9fd5575b10e | 90 | {P2_10 , 0 , 4}, |
anhtran | 0:e9fd5575b10e | 91 | {P4_6 , 0 , 5}, |
anhtran | 0:e9fd5575b10e | 92 | {P3_7 , 1 , 3}, |
anhtran | 0:e9fd5575b10e | 93 | {P7_3 , 1 , 6}, |
anhtran | 0:e9fd5575b10e | 94 | {P10_14 , 1 , 2}, |
anhtran | 0:e9fd5575b10e | 95 | {P7_7 , 2 , 6}, /* SSIDATA2 */ |
anhtran | 0:e9fd5575b10e | 96 | {P9_7 , 2 , 3}, /* SSIDATA2 */ |
anhtran | 0:e9fd5575b10e | 97 | {P4_14 , 3 , 6}, |
anhtran | 0:e9fd5575b10e | 98 | {P7_10 , 3 , 2}, |
anhtran | 0:e9fd5575b10e | 99 | {P6_1 , 4 , 6}, /* SSIDATA4 */ |
anhtran | 0:e9fd5575b10e | 100 | {P7_14 , 4 , 2}, /* SSIDATA4 */ |
anhtran | 0:e9fd5575b10e | 101 | {P8_14 , 4 , 8}, /* SSIDATA4 */ |
anhtran | 0:e9fd5575b10e | 102 | {P11_6 , 4 , 3}, /* SSIDATA4 */ |
anhtran | 0:e9fd5575b10e | 103 | {P2_6 , 5 , 4}, |
anhtran | 0:e9fd5575b10e | 104 | {P4_10 , 5 , 5}, |
anhtran | 0:e9fd5575b10e | 105 | {NC , NC , 0} |
anhtran | 0:e9fd5575b10e | 106 | }; |
anhtran | 0:e9fd5575b10e | 107 | |
anhtran | 0:e9fd5575b10e | 108 | static const PinMap PinMap_SPDIF_AUDIO_CLK[] = { |
anhtran | 0:e9fd5575b10e | 109 | {NC, NC, 0} |
anhtran | 0:e9fd5575b10e | 110 | }; |
anhtran | 0:e9fd5575b10e | 111 | |
anhtran | 0:e9fd5575b10e | 112 | #else |
anhtran | 0:e9fd5575b10e | 113 | static const PinMap PinMap_SSIF_SCK[] = { |
anhtran | 0:e9fd5575b10e | 114 | // pin ch func |
anhtran | 0:e9fd5575b10e | 115 | {P2_7 , 3 , 2}, |
anhtran | 0:e9fd5575b10e | 116 | {NC , NC , 0} |
anhtran | 0:e9fd5575b10e | 117 | }; |
anhtran | 0:e9fd5575b10e | 118 | |
anhtran | 0:e9fd5575b10e | 119 | static const PinMap PinMap_SSIF_WS[] = { |
anhtran | 0:e9fd5575b10e | 120 | // pin ch func |
anhtran | 0:e9fd5575b10e | 121 | {P2_9 , 3 , 2}, |
anhtran | 0:e9fd5575b10e | 122 | {NC , NC , 0} |
anhtran | 0:e9fd5575b10e | 123 | }; |
anhtran | 0:e9fd5575b10e | 124 | |
anhtran | 0:e9fd5575b10e | 125 | static const PinMap PinMap_SSIF_TxD[] = { |
anhtran | 0:e9fd5575b10e | 126 | // pin ch func |
anhtran | 0:e9fd5575b10e | 127 | {P2_8 , 3 , 2}, |
anhtran | 0:e9fd5575b10e | 128 | {NC , NC , 0} |
anhtran | 0:e9fd5575b10e | 129 | }; |
anhtran | 0:e9fd5575b10e | 130 | |
anhtran | 0:e9fd5575b10e | 131 | static const PinMap PinMap_SSIF_RxD[] = { |
anhtran | 0:e9fd5575b10e | 132 | // pin ch func |
anhtran | 0:e9fd5575b10e | 133 | {P2_6 , 3 , 2}, |
anhtran | 0:e9fd5575b10e | 134 | {NC , NC , 0} |
anhtran | 0:e9fd5575b10e | 135 | }; |
anhtran | 0:e9fd5575b10e | 136 | |
anhtran | 0:e9fd5575b10e | 137 | static const PinMap PinMap_SPDIF_AUDIO_CLK[] = { |
anhtran | 0:e9fd5575b10e | 138 | {NC, NC, 0} |
anhtran | 0:e9fd5575b10e | 139 | }; |
anhtran | 0:e9fd5575b10e | 140 | |
anhtran | 0:e9fd5575b10e | 141 | #endif |
anhtran | 0:e9fd5575b10e | 142 | |
anhtran | 0:e9fd5575b10e | 143 | static void ssif_power_enable(uint32_t ssif_ch) { |
anhtran | 0:e9fd5575b10e | 144 | volatile uint8_t dummy; |
anhtran | 0:e9fd5575b10e | 145 | |
anhtran | 0:e9fd5575b10e | 146 | switch (ssif_ch) { |
anhtran | 0:e9fd5575b10e | 147 | case 0: |
anhtran | 0:e9fd5575b10e | 148 | CPGSTBCR11 &= ~(0x20); |
anhtran | 0:e9fd5575b10e | 149 | break; |
anhtran | 0:e9fd5575b10e | 150 | case 1: |
anhtran | 0:e9fd5575b10e | 151 | CPGSTBCR11 &= ~(0x10); |
anhtran | 0:e9fd5575b10e | 152 | break; |
anhtran | 0:e9fd5575b10e | 153 | case 2: |
anhtran | 0:e9fd5575b10e | 154 | CPGSTBCR11 &= ~(0x08); |
anhtran | 0:e9fd5575b10e | 155 | break; |
anhtran | 0:e9fd5575b10e | 156 | case 3: |
anhtran | 0:e9fd5575b10e | 157 | CPGSTBCR11 &= ~(0x04); |
anhtran | 0:e9fd5575b10e | 158 | break; |
anhtran | 0:e9fd5575b10e | 159 | #if defined(TARGET_RZA1H) /* mbed */ |
anhtran | 0:e9fd5575b10e | 160 | case 4: |
anhtran | 0:e9fd5575b10e | 161 | CPGSTBCR11 &= ~(0x02); |
anhtran | 0:e9fd5575b10e | 162 | break; |
anhtran | 0:e9fd5575b10e | 163 | case 5: |
anhtran | 0:e9fd5575b10e | 164 | CPGSTBCR11 &= ~(0x01); |
anhtran | 0:e9fd5575b10e | 165 | break; |
anhtran | 0:e9fd5575b10e | 166 | #endif |
anhtran | 0:e9fd5575b10e | 167 | } |
anhtran | 0:e9fd5575b10e | 168 | dummy = CPGSTBCR11; |
anhtran | 0:e9fd5575b10e | 169 | (void)dummy; |
anhtran | 0:e9fd5575b10e | 170 | } |
anhtran | 0:e9fd5575b10e | 171 | |
anhtran | 0:e9fd5575b10e | 172 | #elif defined(TARGET_RZ_A2XX) |
anhtran | 0:e9fd5575b10e | 173 | |
anhtran | 0:e9fd5575b10e | 174 | static const PinMap PinMap_SSIF_SCK[] = { |
anhtran | 0:e9fd5575b10e | 175 | // pin ch func |
anhtran | 0:e9fd5575b10e | 176 | {P9_6 , 0 , 5}, |
anhtran | 0:e9fd5575b10e | 177 | {NC , NC , 0} |
anhtran | 0:e9fd5575b10e | 178 | }; |
anhtran | 0:e9fd5575b10e | 179 | |
anhtran | 0:e9fd5575b10e | 180 | static const PinMap PinMap_SSIF_WS[] = { |
anhtran | 0:e9fd5575b10e | 181 | // pin ch func |
anhtran | 0:e9fd5575b10e | 182 | {P9_5 , 0 , 5}, |
anhtran | 0:e9fd5575b10e | 183 | {NC , NC , 0} |
anhtran | 0:e9fd5575b10e | 184 | }; |
anhtran | 0:e9fd5575b10e | 185 | |
anhtran | 0:e9fd5575b10e | 186 | static const PinMap PinMap_SSIF_TxD[] = { |
anhtran | 0:e9fd5575b10e | 187 | // pin ch func |
anhtran | 0:e9fd5575b10e | 188 | {P9_4 , 0 , 5}, |
anhtran | 0:e9fd5575b10e | 189 | {NC , NC , 0} |
anhtran | 0:e9fd5575b10e | 190 | }; |
anhtran | 0:e9fd5575b10e | 191 | |
anhtran | 0:e9fd5575b10e | 192 | static const PinMap PinMap_SSIF_RxD[] = { |
anhtran | 0:e9fd5575b10e | 193 | // pin ch func |
anhtran | 0:e9fd5575b10e | 194 | {P9_3 , 0 , 5}, |
anhtran | 0:e9fd5575b10e | 195 | {NC , NC , 0} |
anhtran | 0:e9fd5575b10e | 196 | }; |
anhtran | 0:e9fd5575b10e | 197 | |
anhtran | 0:e9fd5575b10e | 198 | static void ssif_power_enable(uint32_t ssif_ch) { |
anhtran | 0:e9fd5575b10e | 199 | volatile uint8_t dummy; |
anhtran | 0:e9fd5575b10e | 200 | |
anhtran | 0:e9fd5575b10e | 201 | switch (ssif_ch) { |
anhtran | 0:e9fd5575b10e | 202 | case 0: |
anhtran | 0:e9fd5575b10e | 203 | CPG.STBCR7.BYTE &= ~(0x08); |
anhtran | 0:e9fd5575b10e | 204 | break; |
anhtran | 0:e9fd5575b10e | 205 | case 1: |
anhtran | 0:e9fd5575b10e | 206 | CPG.STBCR7.BYTE &= ~(0x04); |
anhtran | 0:e9fd5575b10e | 207 | break; |
anhtran | 0:e9fd5575b10e | 208 | case 2: |
anhtran | 0:e9fd5575b10e | 209 | CPG.STBCR7.BYTE &= ~(0x02); |
anhtran | 0:e9fd5575b10e | 210 | break; |
anhtran | 0:e9fd5575b10e | 211 | case 3: |
anhtran | 0:e9fd5575b10e | 212 | CPG.STBCR7.BYTE &= ~(0x01); |
anhtran | 0:e9fd5575b10e | 213 | break; |
anhtran | 0:e9fd5575b10e | 214 | } |
anhtran | 0:e9fd5575b10e | 215 | dummy = CPG.STBCR7.BYTE; |
anhtran | 0:e9fd5575b10e | 216 | (void)dummy; |
anhtran | 0:e9fd5575b10e | 217 | } |
anhtran | 0:e9fd5575b10e | 218 | |
anhtran | 0:e9fd5575b10e | 219 | static const PinMap PinMap_SPDIF_AUDIO_CLK[] = { |
anhtran | 0:e9fd5575b10e | 220 | {P6_4, 0, 4}, |
anhtran | 0:e9fd5575b10e | 221 | {PH_0, 0, 1}, |
anhtran | 0:e9fd5575b10e | 222 | {NC, NC, 0} |
anhtran | 0:e9fd5575b10e | 223 | }; |
anhtran | 0:e9fd5575b10e | 224 | |
anhtran | 0:e9fd5575b10e | 225 | #endif |
anhtran | 0:e9fd5575b10e | 226 | |
anhtran | 0:e9fd5575b10e | 227 | int32_t ssif_init(PinName sck, PinName ws, PinName tx, PinName rx, PinName audio_clk) { |
anhtran | 0:e9fd5575b10e | 228 | /* determine the ssif to use */ |
anhtran | 0:e9fd5575b10e | 229 | uint32_t ssif_sck = pinmap_peripheral(sck, PinMap_SSIF_SCK); |
anhtran | 0:e9fd5575b10e | 230 | uint32_t ssif_ws = pinmap_peripheral(ws, PinMap_SSIF_WS); |
anhtran | 0:e9fd5575b10e | 231 | uint32_t ssif_tx = pinmap_peripheral(tx, PinMap_SSIF_TxD); |
anhtran | 0:e9fd5575b10e | 232 | uint32_t ssif_rx = pinmap_peripheral(rx, PinMap_SSIF_RxD); |
anhtran | 0:e9fd5575b10e | 233 | uint32_t ssif_ch = pinmap_merge(ssif_tx, ssif_rx); |
anhtran | 0:e9fd5575b10e | 234 | |
anhtran | 0:e9fd5575b10e | 235 | if ((ssif_ch == ssif_sck) && (ssif_ch == ssif_ws)) { |
anhtran | 0:e9fd5575b10e | 236 | ssif_power_enable(ssif_ch); |
anhtran | 0:e9fd5575b10e | 237 | pinmap_pinout(sck, PinMap_SSIF_SCK); |
anhtran | 0:e9fd5575b10e | 238 | pinmap_pinout(ws, PinMap_SSIF_WS); |
anhtran | 0:e9fd5575b10e | 239 | pinmap_pinout(tx, PinMap_SSIF_TxD); |
anhtran | 0:e9fd5575b10e | 240 | pinmap_pinout(rx, PinMap_SSIF_RxD); |
anhtran | 0:e9fd5575b10e | 241 | if ((int32_t)audio_clk != NC) { |
anhtran | 0:e9fd5575b10e | 242 | pinmap_pinout(audio_clk, PinMap_SPDIF_AUDIO_CLK); |
anhtran | 0:e9fd5575b10e | 243 | } |
anhtran | 0:e9fd5575b10e | 244 | } else { |
anhtran | 0:e9fd5575b10e | 245 | ssif_ch = (uint32_t)NC; |
anhtran | 0:e9fd5575b10e | 246 | } |
anhtran | 0:e9fd5575b10e | 247 | |
anhtran | 0:e9fd5575b10e | 248 | return (int32_t)ssif_ch; |
anhtran | 0:e9fd5575b10e | 249 | } |
anhtran | 0:e9fd5575b10e | 250 |