| 
      1
     | 
    
      // L138_aic3106_init.c
 
     | 
  
  
    | 
      2
     | 
    
      //
 
     | 
  
  
    | 
      3
     | 
    
      
 
     | 
  
  
    | 
      4
     | 
    
      #include "L138_aic3106_init.h"
 
     | 
  
  
    | 
      5
     | 
    
      #include "evmomapl138_spi.h"
 
     | 
  
  
    | 
      6
     | 
    
      #include "evmomapl138.h"
 
     | 
  
  
    | 
      7
     | 
    
      
 
     | 
  
  
    | 
      8
     | 
    
      
 
     | 
  
  
    | 
      9
     | 
    
      //#define PINMUX_GP08_REG_0          (0)
 
     | 
  
  
    | 
      10
     | 
    
      //#define PINMUX_GP08_MASK_0         (0xF0000000)
 
     | 
  
  
    | 
      11
     | 
    
      //#define PINMUX_GP08_VAL_0          (0x80000000)
 
     | 
  
  
    | 
      12
     | 
    
      //#define PINMUX_GP514_REG_0         (11)
 
     | 
  
  
    | 
      13
     | 
    
      //#define PINMUX_GP514_MASK_0        (0x000000F0)
 
     | 
  
  
    | 
      14
     | 
    
      //#define PINMUX_GP514_VAL_0         (0x80000080)
 
     | 
  
  
    | 
      15
     | 
    
      
 
     | 
  
  
    | 
      16
     | 
    
      
 
     | 
  
  
    | 
      17
     | 
    
      int16_t *pingIN, *pingOUT, *pongIN, *pongOUT;
 
     | 
  
  
    | 
      18
     | 
    
      
 
     | 
  
  
    | 
      19
     | 
    
      AIC31_data_type AIC31_data;
 
     | 
  
  
    | 
      20
     | 
    
      
 
     | 
  
  
    | 
      21
     | 
    
      typedef struct BITVAL    // used in function prbs()
 
     | 
  
  
    | 
      22
     | 
    
      {
     | 
  
  
    | 
      23
     | 
    
       unsigned int b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1;
 
     | 
  
  
    | 
      24
     | 
    
       unsigned int b7:1, b8:1, b9:1, b10:1, b11:1, b12:1,b13:1;
 
     | 
  
  
    | 
      25
     | 
    
       unsigned int dweebie:2; //Fills the 2 bit hole - bits 14-15
 
     | 
  
  
    | 
      26
     | 
    
      } bitval;
 
     | 
  
  
    | 
      27
     | 
    
      
 
     | 
  
  
    | 
      28
     | 
    
      typedef union SHIFT_REG
 
     | 
  
  
    | 
      29
     | 
    
      {
     | 
  
  
    | 
      30
     | 
    
       unsigned int regval;
 
     | 
  
  
    | 
      31
     | 
    
       bitval bt;
 
     | 
  
  
    | 
      32
     | 
    
      } shift_reg;
 
     | 
  
  
    | 
      33
     | 
    
      int fb = 1;                        // feedback variable
 
     | 
  
  
    | 
      34
     | 
    
      shift_reg sreg = {0xFFFF};         // shift register
     | 
  
  
    | 
      35
     | 
    
      
 
     | 
  
  
    | 
      36
     | 
    
      uint32_t prand_seed = 1;       // used in function prand()
 
     | 
  
  
    | 
      37
     | 
    
      
 
     | 
  
  
    | 
      38
     | 
    
      extern void vectors(void);
 
     | 
  
  
    | 
      39
     | 
    
      
 
     | 
  
  
    | 
      40
     | 
    
      void output_sample(int32_t out_data)
 
     | 
  
  
    | 
      41
     | 
    
      {
     | 
  
  
    | 
      42
     | 
    
        AIC31_data.uint = out_data;
 
     | 
  
  
    | 
      43
     | 
    
        if (poll) while (!CHKBIT(MCASP->SRCTL15, XRDY));
 
     | 
  
  
    | 
      44
     | 
    
        MCASP->XBUF0 = AIC31_data.uint;
 
     | 
  
  
    | 
      45
     | 
    
      }
 
     | 
  
  
    | 
      46
     | 
    
         
 
     | 
  
  
    | 
      47
     | 
    
      void output_left_sample(int16_t out_data)
 
     | 
  
  
    | 
      48
     | 
    
      {
     | 
  
  
    | 
      49
     | 
    
        AIC31_data.uint = 0;
 
     | 
  
  
    | 
      50
     | 
    
        AIC31_data.channel[LEFT]=out_data;
 
     | 
  
  
    | 
      51
     | 
    
        if (poll) while (!CHKBIT(MCASP->SRCTL15, XRDY));
 
     | 
  
  
    | 
      52
     | 
    
        MCASP->XBUF0 = AIC31_data.uint;
 
     | 
  
  
    | 
      53
     | 
    
      }
 
     | 
  
  
    | 
      54
     | 
    
      
 
     | 
  
  
    | 
      55
     | 
    
      
 
     | 
  
  
    | 
      56
     | 
    
      void L138_init_mcasp_poll()
 
     | 
  
  
    | 
      57
     | 
    
      {
     | 
  
  
    | 
      58
     | 
    
      
 
     | 
  
  
    | 
      59
     | 
    
      	// globally reset McASP0
 
     | 
  
  
    | 
      60
     | 
    
      		MCASP->GBLCTL  = 0;
 
     | 
  
  
    | 
      61
     | 
    
      
 
     | 
  
  
    | 
      62
     | 
    
      //		   // configure McASP0 receive registers
 
     | 
  
  
    | 
      63
     | 
    
      		MCASP->RMASK      = 0xFFFFFFFF;
 
     | 
  
  
    | 
      64
     | 
    
      		MCASP->RFMT       = 0x000080F8;
 
     | 
  
  
    | 
      65
     | 
    
      		MCASP->AFSRCTL    = 0x00000000;
 
     | 
  
  
    | 
      66
     | 
    
      		MCASP->ACLKRCTL   = 0x00000000;
 
     | 
  
  
    | 
      67
     | 
    
      		MCASP->AHCLKRCTL  = 0x00000000;
 
     | 
  
  
    | 
      68
     | 
    
      		MCASP->RTDM       = 0x00000001; // TDM timeslot 0
 
     | 
  
  
    | 
      69
     | 
    
      		MCASP->RINTCTL    = 0x00000000;
 
     | 
  
  
    | 
      70
     | 
    
      		MCASP->RCLKCHK    = 0x00000000;
 
     | 
  
  
    | 
      71
     | 
    
      
 
     | 
  
  
    | 
      72
     | 
    
      		   // configure McASP0 transmit registers
 
     | 
  
  
    | 
      73
     | 
    
      	    MCASP->XMASK      = 0xFFFFFFFF;
 
     | 
  
  
    | 
      74
     | 
    
      //		MCASP->XFMT       = 0x000080F8;
 
     | 
  
  
    | 
      75
     | 
    
      		MCASP->XFMT       = 0x00018070;
 
     | 
  
  
    | 
      76
     | 
    
      //		MCASP->AFSXCTL    = 0x00000002;
 
     | 
  
  
    | 
      77
     | 
    
      		MCASP->AFSXCTL    = 0x00000112;
 
     | 
  
  
    | 
      78
     | 
    
      	//	MCASP->AFSXCTL    = 0x00000000;
 
     | 
  
  
    | 
      79
     | 
    
      //		MCASP->ACLKXCTL   = 0x00000000;
 
     | 
  
  
    | 
      80
     | 
    
      		MCASP->ACLKXCTL   = 0x000000A3;
 
     | 
  
  
    | 
      81
     | 
    
      //		MCASP->AHCLKXCTL  = 0x00000000;
 
     | 
  
  
    | 
      82
     | 
    
      		MCASP->AHCLKXCTL  = 0x00008004;
 
     | 
  
  
    | 
      83
     | 
    
      		MCASP->XTDM       = 0x00000003; // TDM timeslot 0
 
     | 
  
  
    | 
      84
     | 
    
      		MCASP->XINTCTL    = 0x00000000; // interrupt on transmit
 
     | 
  
  
    | 
      85
     | 
    
      		MCASP->XCLKCHK    = 0x00000000;
 
     | 
  
  
    | 
      86
     | 
    
      
 
     | 
  
  
    | 
      87
     | 
    
      
 
     | 
  
  
    | 
      88
     | 
    
      		   // config pin function and direction.
 
     | 
  
  
    | 
      89
     | 
    
      		MCASP->PFUNC      = 0;
 
     | 
  
  
    | 
      90
     | 
    
      	//	MCASP->PDIR       = 0x00020000;
 
     | 
  
  
    | 
      91
     | 
    
      		MCASP->PDIR       = 0X14008000;
 
     | 
  
  
    | 
      92
     | 
    
      //		MCASP->PDIR       = 0x00008000;
 
     | 
  
  
    | 
      93
     | 
    
      
 
     | 
  
  
    | 
      94
     | 
    
      
 
     | 
  
  
    | 
      95
     | 
    
      		   //
 
     | 
  
  
    | 
      96
     | 
    
      		MCASP->XEVTCTL    = 0x00000000;
 
     | 
  
  
    | 
      97
     | 
    
      		MCASP->DITCTL     = 0x00000000;
 
     | 
  
  
    | 
      98
     | 
    
      		MCASP->DLBCTL     = 0x00000000;
 
     | 
  
  
    | 
      99
     | 
    
      		MCASP->AMUTE      = 0x00000000;
 
     | 
  
  
    | 
      100
     | 
    
      
 
     | 
  
  
    | 
      101
     | 
    
      
 
     | 
  
  
    | 
      102
     | 
    
      		   // Transmitter
 
     | 
  
  
    | 
      103
     | 
    
      		SETBIT(MCASP->XGBLCTL, XHCLKRST);
 
     | 
  
  
    | 
      104
     | 
    
      		while (!CHKBIT(MCASP->XGBLCTL, XHCLKRST)) {}
     | 
  
  
    | 
      105
     | 
    
      		SETBIT(MCASP->XGBLCTL, XCLKRST);
 
     | 
  
  
    | 
      106
     | 
    
      	    while (!CHKBIT(MCASP->XGBLCTL, XCLKRST)) {}
     | 
  
  
    | 
      107
     | 
    
      		SETBIT(MCASP->XGBLCTL, XSRCLR); //TXSERCLRS
 
     | 
  
  
    | 
      108
     | 
    
      		while (!CHKBIT(MCASP->XGBLCTL, XSRCLR)) {}
     | 
  
  
    | 
      109
     | 
    
      		MCASP->XBUF0 = 0;
 
     | 
  
  
    | 
      110
     | 
    
      
 
     | 
  
  
    | 
      111
     | 
    
      		SETBIT(MCASP->XGBLCTL, XSMRST);
 
     | 
  
  
    | 
      112
     | 
    
      		while (!CHKBIT(MCASP->XGBLCTL, XSMRST)) {}
     | 
  
  
    | 
      113
     | 
    
      		SETBIT(MCASP->XGBLCTL, XFRST);
 
     | 
  
  
    | 
      114
     | 
    
      		while (!CHKBIT(MCASP->XGBLCTL, XFRST)) {}
     | 
  
  
    | 
      115
     | 
    
      		MCASP->XBUF0 = 0;
 
     | 
  
  
    | 
      116
     | 
    
      
 
     | 
  
  
    | 
      117
     | 
    
      		   // configure serialisers (15 for xmit, 12 for rcv)
 
     | 
  
  
    | 
      118
     | 
    
      	    MCASP->SRCTL15    = 0x000D;
 
     | 
  
  
    | 
      119
     | 
    
      		MCASP->SRCTL12    = 0x000E;
 
     | 
  
  
    | 
      120
     | 
    
      
 
     | 
  
  
    | 
      121
     | 
    
      		MCASP->XSTAT = 0xFFFFFFFF;        // Clear all
 
     | 
  
  
    | 
      122
     | 
    
      
 
     | 
  
  
    | 
      123
     | 
    
      	    while(!CHKBIT(MCASP->SRCTL15, XRDY)) {}
     | 
  
  
    | 
      124
     | 
    
      	    MCASP->XBUF0 = 0;
 
     | 
  
  
    | 
      125
     | 
    
      
 
     | 
  
  
    | 
      126
     | 
    
      
 
     | 
  
  
    | 
      127
     | 
    
      		   //Receiver
 
     | 
  
  
    | 
      128
     | 
    
      //		SETBIT(MCASP->RGBLCTL, RHCLKRST);
 
     | 
  
  
    | 
      129
     | 
    
      //		while (!CHKBIT(MCASP->RGBLCTL, RHCLKRST)) {}
     | 
  
  
    | 
      130
     | 
    
      //		SETBIT(MCASP->RGBLCTL, RSRCLR);
 
     | 
  
  
    | 
      131
     | 
    
      //		while (!CHKBIT(MCASP->RGBLCTL, RSRCLR)) {}
     | 
  
  
    | 
      132
     | 
    
      //		SETBIT(MCASP->RGBLCTL, RSMRST);
 
     | 
  
  
    | 
      133
     | 
    
      //		while (!CHKBIT(MCASP->RGBLCTL, RSMRST)) {}
     | 
  
  
    | 
      134
     | 
    
      //		SETBIT(MCASP->RGBLCTL, RFRST);
 
     | 
  
  
    | 
      135
     | 
    
      //		while (!CHKBIT(MCASP->RGBLCTL, RFRST)) {}
     | 
  
  
    | 
      136
     | 
    
      //
 
     | 
  
  
    | 
      137
     | 
    
      //		MCASP->RSTAT = 0x0000FFFF;        // Clear all
 
     | 
  
  
    | 
      138
     | 
    
      //
 
     | 
  
  
    | 
      139
     | 
    
      //		   // Write zero to serialiser buffers so that no underrun occurs after releasing the state machine
 
     | 
  
  
    | 
      140
     | 
    
      //
 
     | 
  
  
    | 
      141
     | 
    
      //		MCASP->RBUF12 = 0;
 
     | 
  
  
    | 
      142
     | 
    
      
 
     | 
  
  
    | 
      143
     | 
    
      	   // wait for transmit ready and send a dummy byte.
 
     | 
  
  
    | 
      144
     | 
    
      }
 
     | 
  
  
    | 
      145
     | 
    
      
 
     | 
  
  
    | 
      146
     | 
    
      
 
     | 
  
  
    | 
      147
     | 
    
      
 
     | 
  
  
    | 
      148
     | 
    
      void L138_initialise_poll()
 
     | 
  
  
    | 
      149
     | 
    
      {
     | 
  
  
    | 
      150
     | 
    
        
 
     | 
  
  
    | 
      151
     | 
    
        poll = 1;     // used in input_sample() and output_sample() functions
 
     | 
  
  
    | 
      152
     | 
    
      
 
     | 
  
  
    | 
      153
     | 
    
      //  spi_config_t spi_config;
 
     | 
  
  
    | 
      154
     | 
    
      
 
     | 
  
  
    | 
      155
     | 
    
      
 
     | 
  
  
    | 
      156
     | 
    
      //   bsl initialisation functions
 
     | 
  
  
    | 
      157
     | 
    
      //  EVMOMAPL138_init();
 
     | 
  
  
    | 
      158
     | 
    
      //  EVMOMAPL138_initRAM();
 
     | 
  
  
    | 
      159
     | 
    
      //  USTIMER_init();
 
     | 
  
  
    | 
      160
     | 
    
      
 
     | 
  
  
    | 
      161
     | 
    
        EVMOMAPL138_lpscTransition(PSC1, DOMAIN0, LPSC_MCASP0, PSC_ENABLE);
 
     | 
  
  
    | 
      162
     | 
    
        EVMOMAPL138_lpscTransition(PSC1, DOMAIN0, LPSC_GPIO, PSC_ENABLE);
 
     | 
  
  
    | 
      163
     | 
    
        EVMOMAPL138_pinmuxConfig(PINMUX_MCASP_REG_0, PINMUX_MCASP_MASK_0, PINMUX_MCASP_VAL_0);
 
     | 
  
  
    | 
      164
     | 
    
        EVMOMAPL138_pinmuxConfig(PINMUX_MCASP_REG_1, PINMUX_MCASP_MASK_1, PINMUX_MCASP_VAL_1);
 
     | 
  
  
    | 
      165
     | 
    
      
 
     | 
  
  
    | 
      166
     | 
    
      
 
     | 
  
  
    | 
      167
     | 
    
        CSR = 0x0000; // disable interrupts globally while initialising
 
     | 
  
  
    | 
      168
     | 
    
      
 
     | 
  
  
    | 
      169
     | 
    
        L138_init_mcasp_poll();
 
     | 
  
  
    | 
      170
     | 
    
      
 
     | 
  
  
    | 
      171
     | 
    
        ICR = 0xFFF0; 
 
     | 
  
  
    | 
      172
     | 
    
      }
 
     | 
  
  
    | 
      173
     | 
    
      
 
     | 
  
  
    | 
      174
     | 
    
      int prbs(void) 			       //gen pseudo-random sequence {-1,1}
     | 
  
  
    | 
      175
     | 
    
      {
     | 
  
  
    | 
      176
     | 
    
        int prnseq;			 
 
     | 
  
  
    | 
      177
     | 
    
        if(sreg.bt.b0)
 
     | 
  
  
    | 
      178
     | 
    
      	prnseq = -NOISELEVEL;		           //scaled negative noise level
 
     | 
  
  
    | 
      179
     | 
    
        else
 
     | 
  
  
    | 
      180
     | 
    
      	prnseq = NOISELEVEL;		           //scaled positive noise level
 
     | 
  
  
    | 
      181
     | 
    
        fb =(sreg.bt.b0)^(sreg.bt.b1);   //XOR bits 0,1
 
     | 
  
  
    | 
      182
     | 
    
        fb^=(sreg.bt.b11)^(sreg.bt.b13); //with bits 11,13 -> fb
 
     | 
  
  
    | 
      183
     | 
    
        sreg.regval<<=1;
 
     | 
  
  
    | 
      184
     | 
    
        sreg.bt.b0=fb;			       //close feedback path
 
     | 
  
  
    | 
      185
     | 
    
        return prnseq;			       //return noise sequence value 
 
     | 
  
  
    | 
      186
     | 
    
      }
 
     | 
  
  
    | 
      187
     | 
    
      
 
     | 
  
  
    | 
      188
     | 
    
      
 
     | 
  
  
    | 
      189
     | 
    
      
 
     | 
  
  
    | 
      190
     | 
    
      uint32_t rand31_next()
 
     | 
  
  
    | 
      191
     | 
    
      {
     | 
  
  
    | 
      192
     | 
    
        uint32_t hi, lo;
 
     | 
  
  
    | 
      193
     | 
    
      
 
     | 
  
  
    | 
      194
     | 
    
        lo = 16807 * (prand_seed & 0xFFFF);
 
     | 
  
  
    | 
      195
     | 
    
        hi = 16807 * (prand_seed >> 16);
 
     | 
  
  
    | 
      196
     | 
    
      
 
     | 
  
  
    | 
      197
     | 
    
        lo += (hi & 0x7FFF) << 16;
 
     | 
  
  
    | 
      198
     | 
    
        lo += hi >> 15;
 
     | 
  
  
    | 
      199
     | 
    
      
 
     | 
  
  
    | 
      200
     | 
    
        if (lo > 0x7FFFFFFF) lo -= 0x7FFFFFFF;
 
     | 
  
  
    | 
      201
     | 
    
      
 
     | 
  
  
    | 
      202
     | 
    
        return(prand_seed = (uint32_t)lo);
 
     | 
  
  
    | 
      203
     | 
    
      }
 
     | 
  
  
    | 
      204
     | 
    
      
 
     | 
  
  
    | 
      205
     | 
    
      int16_t prand()
 
     | 
  
  
    | 
      206
     | 
    
      {
     | 
  
  
    | 
      207
     | 
    
      return ((int16_t)(rand31_next()>>18)-4096);
 
     | 
  
  
    | 
      208
     | 
    
      }
 
     |