1 #include "t_services.h"
\r
2 #include "s_services.h"
\r
3 #include <cdefBF533.h>
\r
8 #define pFLASHA_PORTA_OUT ((volatile unsigned char * )0x20270004)
\r
9 #define pFLASHA_PORTA_DIR ((volatile unsigned char * )0x20270006)
\r
12 struct DMA_DESCRIPTOR{
\r
13 struct DMA_DESCRIPTOR * next;
\r
15 unsigned short config;
\r
16 unsigned short x_count;
\r
21 // CODEC
\8f\89\8aú
\89»
\83f
\81[
\83^
\97ñ
\r
22 static short sCodec1836TxRegs[] =
\r
24 DAC_CONTROL_1 | 0x000,
\r
25 DAC_CONTROL_2 | 0x000,
\r
26 DAC_VOLUME_0 | 0x3ff,
\r
27 DAC_VOLUME_1 | 0x3ff,
\r
28 DAC_VOLUME_2 | 0x3ff,
\r
29 DAC_VOLUME_3 | 0x3ff,
\r
30 DAC_VOLUME_4 | 0x3ff,
\r
31 DAC_VOLUME_5 | 0x3ff,
\r
32 ADC_CONTROL_1 | 0x000,
\r
33 ADC_CONTROL_2 | 0x180,
\r
34 ADC_CONTROL_3 | 0x000
\r
38 //
\83I
\81[
\83f
\83B
\83I
\83o
\83b
\83t
\83@
\r
39 // 1
\83T
\83\93\83v
\83\8b\82 \82½
\82è8
\83f
\81[
\83^
\82ð
\93]
\91\97\82·
\82é
\81B
\83_
\83u
\83\8b\83o
\83b
\83t
\83@
\8d\
\90¬
\82È
\82Ì
\82Å
\82³
\82ç
\82É
\82»
\82Ì2
\94{
\95K
\97v
\r
40 static struct CODEC_BUFFER TxBuffer[2], RxBuffer[2];
\r
42 static struct DMA_DESCRIPTOR tDescA, tDescB, rDescA, rDescB;
\r
44 void run_ad1836_task(VP_INT extinf)
\r
46 ena_int( INTNO_SPI ); // SPI DMA
\8a\84\82è
\8d\9e\82Ý
\83}
\83X
\83N
\82ð
\82Í
\82¸
\82·
\r
47 ena_int( INTNO_SPORT0_RX ); // SPORT0 DMA
\8a\84\82è
\8d\9e\82Ý
\83}
\83X
\83N
\82ð
\82Í
\82¸
\82·
\r
49 //--------------------------------------------------------
\r
50 // AD1836
\82Ì
\83\8a\83Z
\83b
\83g
\r
52 *pFLASHA_PORTA_DIR |= 0x01; // CODEC
\83\8a\83Z
\83b
\83g
\90M
\8d\86\82ð
\8fo
\97Í
\82É
\r
53 *pFLASHA_PORTA_OUT &= 0xFE; // CODEC
\83\8a\83Z
\83b
\83g
\82ð
\83A
\83T
\81[
\83g
\r
54 tslp_tsk( 1 ); //
\83\8a\83Z
\83b
\83g=L
\83p
\83\8b\83X
\82ð
\8dì
\82é
\r
55 *pFLASHA_PORTA_OUT |= 0x01; // CODEC
\83\8a\83Z
\83b
\83g
\82ð
\83f
\83A
\83T
\81[
\83g
\r
56 tslp_tsk( 1 ); //
\83\8a\83Z
\83b
\83g
\82©
\82ç
\82Ì
\89ñ
\95\9c\8e\9e\8aÔ
\82ð
\97^
\82¦
\82é
\r
58 //--------------------------------------------------------
\r
61 // PF4
\82ÍAD1836
\82ÌSPI SS
\83s
\83\93 \r
63 // SPI
\83r
\83b
\83g
\83\8c\81[
\83g = SCLK/(2*SPIBAUD) :
\82¨
\82æ
\82» 2MHz
\r
65 // SPI DMA
\8f\91\82«
\8d\9e\82Ý
\82É
\82æ
\82é
\83g
\83\8a\83K, 16bit
\83f
\81[
\83^, MSB first,
\83}
\83X
\83^
\r
66 *pSPI_CTL = TIMOD | SIZE | MSTR;
\r
70 //--------------------------------------------------------
\r
71 // SPI DMA
\90Ý
\92è
\r
73 // 16bit
\83f
\81[
\83^
\81A
\83\81\83\82\83\8a\82©
\82ç
\93Ç
\82Ý
\8fo
\82µ
\81A
\8fI
\97¹
\8cã
\8a\84\82è
\8d\9e\82Ý
\r
74 *pDMA5_CONFIG = WDSIZE_16 | DI_EN;
\r
75 // CODEC
\8f\89\8aú
\89»
\95¶
\8e\9a\97ñ
\82Ì
\83A
\83h
\83\8c\83X
\r
76 *pDMA5_START_ADDR = sCodec1836TxRegs;
\r
77 // DMA
\93]
\91\97\83J
\83E
\83\93\83g
\r
78 *pDMA5_X_COUNT = sizeof( sCodec1836TxRegs ) / sizeof( short );
\r
80 *pDMA5_X_MODIFY = sizeof( short );
\r
83 //--------------------------------------------------------
\r
86 *pDMA5_CONFIG |= DMAEN;
\r
91 // DMA
\91\97\8fo
\8fI
\97¹
\82ð
\91Ò
\82Â
\r
93 // DMA
\8fI
\97¹
\82ÍSPI
\91\97\90M
\8fI
\97¹
\82Å
\82Í
\82È
\82¢
\82Ì
\82Å
\81A
\82¿
\82å
\82Á
\82Æ
\91Ò
\82Â
\r
96 //--------------------------------------------------------
\r
98 //
\83}
\83\8b\83`
\83`
\83\83\83\93\83l
\83\8b\82Ì
\8fê
\8d\87\81A
\8fí
\82É SPORTx_yCR1.LATFS = 0
\r
99 // Sport0
\8eó
\90M
\90Ý
\92è
\r
100 //
\8aO
\95\94\83N
\83\8d\83b
\83N,
\8aO
\95\94\93¯
\8aú
\90M
\8d\86, MSB
\83t
\83@
\81[
\83X
\83g
\r
101 // 32-bit
\83f
\81[
\83^
\r
102 *pSPORT0_RCR1 = RFSR;
\r
103 *pSPORT0_RCR2 = 31; //
\83f
\81[
\83^
\92· 32
\r
105 // Sport0
\91\97\90M
\90Ý
\92è
\r
106 //
\8aO
\95\94\83N
\83\8d\83b
\83N,
\8aO
\95\94\93¯
\8aú
\90M
\8d\86, MSB
\83t
\83@
\81[
\83X
\83g
\r
107 // 32
\83r
\83b
\83g
\83f
\81[
\83^
\r
108 *pSPORT0_TCR1 = TFSR;
\r
109 *pSPORT0_TCR2 = 31; //
\83f
\81[
\83^
\92· 32
\r
111 //
\83t
\83\8c\81[
\83\80\82 \82½
\82è8
\83X
\83\8d\83b
\83g
\82Ì
\83f
\81[
\83^
\82ð
\91\97\8eó
\82Å
\8eg
\82¤
\r
112 *pSPORT0_MTCS0 = 0x000000FF;
\r
113 *pSPORT0_MRCS0 = 0x000000FF;
\r
115 //
\83}
\83\8b\83`
\83`
\83\83\83\93\83l
\83\8b\90Ý
\92è
\r
116 *pSPORT0_MCMC1 = 0x0000; //
\83I
\83t
\83Z
\83b
\83g = 0,
\83E
\83C
\83\93\83h
\83E
\83T
\83C
\83Y = 8
\r
117 *pSPORT0_MCMC2 = 0x1000 | MCMEN | MCDRXPE | MCDTXPE; // MFD = 1;
\r
119 //--------------------------------------------------------
\r
120 // SPORT DMA
\90Ý
\92è
\r
122 // DMA1
\90Ý
\92è (SPORT0 RX)
\r
123 rDescA.next = &rDescB;
\r
124 rDescA.start = RxBuffer[0].data;
\r
125 rDescA.config = 0x7700 | WNR | WDSIZE_32 | DI_EN | DMAEN; // Large List, 7 short word.
\r
126 rDescA.x_count = 8 * SAMPLE_PER_INTR;
\r
127 rDescA.x_modify = 4;
\r
129 rDescB.next = &rDescA;
\r
130 rDescB.start = RxBuffer[1].data;
\r
131 rDescB.config = 0x7700 | WNR | WDSIZE_32 | DI_EN | DMAEN; // Large List, 7 short word.
\r
132 rDescB.x_count = 8 * SAMPLE_PER_INTR;
\r
133 rDescB.x_modify = 4;
\r
136 // DMA2
\90Ý
\92è (SPORT0 TX)
\r
137 tDescA.next = &tDescB;
\r
138 tDescA.start = TxBuffer[0].data;
\r
139 tDescA.config = 0x7700 | WDSIZE_32 | DMAEN; // Large List, 7 short word.
\r
140 tDescA.x_count = 8 * SAMPLE_PER_INTR;
\r
141 tDescA.x_modify = 4;
\r
143 tDescB.next = &tDescA;
\r
144 tDescB.start = TxBuffer[1].data;
\r
145 tDescB.config = 0x7700 | WDSIZE_32 | DMAEN; // Large List, 7 short word.
\r
146 tDescB.x_count = 8 * SAMPLE_PER_INTR;
\r
147 tDescB.x_modify = 4;
\r
150 *pDMA2_NEXT_DESC_PTR = &tDescA;
\r
151 *pDMA1_NEXT_DESC_PTR = &rDescA;
\r
152 *pDMA2_CONFIG = 0x7700 | WDSIZE_32;
\r
153 *pDMA1_CONFIG = 0x7700 | WNR | WDSIZE_32;
\r
156 //--------------------------------------------------------
\r
159 *pDMA2_CONFIG |= DMAEN;
\r
160 *pDMA1_CONFIG |= DMAEN;
\r
162 // SPORT2
\8aJ
\8en
\r
163 *pSPORT0_TCR1 |= TSPEN;
\r
164 *pSPORT0_RCR1 |= RSPEN;
\r
169 int sample, slot, bufTx, bufRx;
\r
170 struct CODEC_BUFFER * BufToBeTransmit;
\r
172 //
\8eó
\90MDMA
\8fI
\97¹
\8a\84\82è
\8d\9e\82Ý
\82Æ
\93¯
\8aú
\r
173 wai_sem( sport0_sem);
\r
175 //
\83v
\83\8d\83Z
\83b
\83T
\82ª
\8eg
\82Á
\82Ä
\82æ
\82¢
\83o
\83b
\83t
\83@
\82ð
\8a\84\82è
\8fo
\82·
\r
176 bufTx = ( &tDescA == *pDMA2_NEXT_DESC_PTR) ? 0 : 1;
\r
177 bufRx = ( &rDescA == *pDMA1_NEXT_DESC_PTR) ? 0 : 1;
\r
180 processData(&RxBuffer[bufRx], &TxBuffer[bufTx]);
\r