1: int32_t AG903_SSPMgrSetReceiveBuf(
AG903_SSPMgrHandle* handle, uint8_t* buf, uint32_t size)
2: {
3: AG903_SSPMgrQue que;
4: int32_t retval =
AG903_ENONE;
5: uint32_t status;
6: uint32_t div;
7: uint8_t enable;
8: uint8_t ch;
9:
10: retval = SSPMgr_CheckHandle(handle, &ch);
11:
if(
AG903_ENONE != retval) {
12:
return -
AG903_EINVAL;
13: }
14:
if((NULL == buf) || (0 >= size)) {
15:
return -
AG903_EINVAL;
16: }
17:
if(0 != SspChStat[ch].dma) {
18:
return -
AG903_EPERM;
19: }
20:
21: div = SspChStat[ch].wordlen / 8;
22:
if(0 != (SspChStat[ch].wordlen%8)) {
23: div++;
24: }
25:
26:
do {
27: que.size = size*div;
28: que.buf = buf;
29: retval = SSPMgr_SetRxQue(ch, &que);
30:
if(
AG903_ENONE != retval) {
31:
break;
32: }
33:
34:
if(AG903_SSP_ENABLE_RECEIVE & SspChStat[ch].pio) {
35:
break;
36: }
37:
38: retval = SSPMgr_GetRxData(ch,
true);
39:
if(
AG903_ENONE != retval) {
40:
break;
41: }
42: SspChStat[ch].pio |= AG903_SSP_ENABLE_RECEIVE;
43:
AG903_SSPPrmSetRxFifoThreshold(ch,
AG903_SSP_RXFIFO_THRESHOLD);
44:
45:
AG903_SSPPrmCheckEnable(ch, &enable);
46:
if(0 == enable) {
47:
AG903_SSPPrmGetIntStatus(ch, &status);
48: }
49:
else {
50:
AG903_SSPPrmEnableRxInt(ch);
51: }
52: }
while(0);
53:
54:
return retval;
55: }