1:
11:
12:
16:
17:
#ifndef _SSPPRM_H_
18:
#define _SSPPRM_H_
19:
20:
21:
#include <stdint.h>
22:
#include "lib_common/AG903_common.h"
23:
24:
#ifdef __cplusplus
25:
extern "C" {
26:
#endif
27:
28:
29:
#define AG903_SSP_CH_NUM (4)
30:
31:
32:
#define AG903_SSP_SDL_MAX (128)
33:
34:
41:
#define AG903_SSP_USERBIT_REGMAX (12)
42:
43:
44:
#define AG903_SSP_FIFO_DEPTH (16)
45:
46:
47:
#define AG903_SSP_FIFO_BITSIZE (32)
48:
49:
50:
enum _AG903_SspFormatType {
51: AG903_SSP_FORMAT_SSP = 0,
52: AG903_SSP_FORMAT_SPI,
53: AG903_SSP_FORMAT_MICROWIRE,
54: AG903_SSP_FORMAT_I2S,
55: AG903_SSP_FORMAT_RESERVE,
56: AG903_SSP_FORMAT_SPDIF,
57: AG903_SSP_FORMAT_TYPENUM,
58: };
59:
60:
61:
enum _AG903_SspOperationType {
62: AG903_SSP_OPM_SLAVE = 0,
63: AG903_SSP_OPM_SLAVE_STEREO,
64: AG903_SSP_OPM_MASTER,
65: AG903_SSP_OPM_MASTER_STEREO,
66: AG903_SSP_OPM_NUM,
67: };
68:
69:
#define AG903_SSP_INTSTS_TFTHIBIT (1<<3)
70:
#define AG903_SSP_INTSTS_RFTHIBIT (1<<2)
71:
#define AG903_SSP_INTSTS_TFURIBIT (1<<1)
72:
#define AG903_SSP_INTSTS_RFORIBIT (1<<0)
73:
74:
75:
typedef struct _AG903_SSPPrmCtrl{
76: uint16_t sclk_div;
77: uint8_t pdl;
78: uint8_t sdl;
79:
80:
81: uint8_t spi_fspo;
82: uint8_t format;
83: uint8_t spi_flash;
84: uint8_t validity;
85: uint8_t fsdist;
86:
87: uint8_t lsb;
88: uint8_t fspo;
89: uint8_t fsjstfy;
90: uint8_t opm;
91: uint8_t sclkpo;
92: uint8_t sclkph;
93: uint8_t reserve;
94: }
AG903_SSPPrmCtrl;
95:
96:
97:
typedef struct _AG903_SSPPrmCtrl2 {
98: uint8_t fsos;
99: uint8_t fs;
100: uint8_t txen;
101: uint8_t rxen;
102: uint8_t ssprst;
103:
104:
105: uint8_t txfclr;
106: uint8_t rxfclr;
107: uint8_t txdoe;
108: uint8_t sspen;
109: }
AG903_SSPPrmCtrl2;
110:
111:
112:
typedef struct _AG903_SSPPrmStatus{
113: uint8_t txfifo_num;
114: uint8_t rxfifo_num;
115: uint8_t busy;
116: uint8_t txfifo_notfull;
117: uint8_t rxfifo_full;
118: uint8_t reserve[3];
119: }
AG903_SSPPrmStatus;
120:
121:
122:
typedef struct _AG903_SSPPrmIntCtrl{
123: uint8_t tfthod;
124: uint8_t rfthod;
125: uint8_t tfdmaen;
126: uint8_t rfdmaen;
127: uint8_t tfthien;
128: uint8_t rfthien;
129: uint8_t tfurien;
130: uint8_t rforien;
131: }
AG903_SSPPrmIntCtrl;
132:
133:
void AG903_SSPPrmSetControl(uint8_t ch,
AG903_SSPPrmCtrl* param);
134:
void AG903_SSPPrmGetControl2(uint8_t ch,
AG903_SSPPrmCtrl2* param);
135:
void AG903_SSPPrmSetControl2(uint8_t ch,
AG903_SSPPrmCtrl2* param);
136:
void AG903_SSPPrmEnableOutput(uint8_t ch);
137:
void AG903_SSPPrmDisableOutput(uint8_t ch);
138:
void AG903_SSPPrmEnableTransfer(uint8_t ch);
139:
void AG903_SSPPrmDisableTransfer(uint8_t ch);
140:
void AG903_SSPPrmCheckEnable(uint8_t ch, uint8_t* enable);
141:
void AG903_SSPPrmEnableTxFunc(uint8_t ch);
142:
void AG903_SSPPrmDisbleTxFunc(uint8_t ch);
143:
void AG903_SSPPrmEnableRxFunc(uint8_t ch);
144:
void AG903_SSPPrmDisbleRxFunc(uint8_t ch);
145:
void AG903_SSPPrmGetTxFifoEntry(uint8_t ch, uint8_t* entry);
146:
void AG903_SSPPrmGetRxFifoEntry(uint8_t ch, uint8_t* entry);
147:
void AG903_SSPPrmSetTxFifoThreshold(uint8_t ch, uint8_t val);
148:
void AG903_SSPPrmSetRxFifoThreshold(uint8_t ch, uint8_t val);
149:
void AG903_SSPPrmClearTxFifo(uint8_t ch);
150:
void AG903_SSPPrmClearRxFifo(uint8_t ch);
151:
void AG903_SSPPrmReset(uint8_t ch);
152:
void AG903_SSPPrmSetStatusBit(uint8_t ch, uint32_t status_0, uint32_t status_1);
153:
void AG903_SSPPrmSetUserBit(uint8_t ch, uint8_t offset, uint32_t val);
154:
void AG903_SSPPrmEnableTxInt(uint8_t ch);
155:
void AG903_SSPPrmDisbleTxInt(uint8_t ch);
156:
void AG903_SSPPrmEnableRxInt(uint8_t ch);
157:
void AG903_SSPPrmDisbleRxInt(uint8_t ch);
158:
void AG903_SSPPrmEnableTxDmareq(uint8_t ch);
159:
void AG903_SSPPrmDisableTxDmareq(uint8_t ch);
160:
void AG903_SSPPrmEnableRxDmareq(uint8_t ch);
161:
void AG903_SSPPrmDisableRxDmareq(uint8_t ch);
162:
void AG903_SSPPrmSetData(uint8_t ch, uint32_t val);
163:
void AG903_SSPPrmGetData(uint8_t ch, uint32_t* val);
164:
void AG903_SSPPrmGetStatus(uint8_t ch,
AG903_SSPPrmStatus* status);
165:
void AG903_SSPPrmSetIntControl(uint8_t ch,
AG903_SSPPrmIntCtrl* param);
166:
void AG903_SSPPrmGetIntControl(uint8_t ch,
AG903_SSPPrmIntCtrl* param);
167:
void AG903_SSPPrmGetIntStatus(uint8_t ch, uint32_t* status);
168:
169:
170:
#ifdef __cplusplus
171: }
172:
#endif
173:
#endif