dat=LPC_I2S->RXFIFO; |
LPC_I2S->IRQ = 0x00070703; |
dat=LPC_I2S->RXFIFO; ... dat=LPC_I2S->TXFIFO; |
I2SInit(); I2SStart( ); for (i=0;i<100000;i++); I2SStop( ); |
void I2SInit( void ) { /*enable I2S in the PCONP register. I2S is disabled on reset*/ LPC_SC->PCONP |= (1 << 27); /*i2sRX data pini P0[25]*/ LPC_PINCON->PINSEL1 &= ~(0x3<<18); LPC_PINCON->PINSEL1 |= (0x2<<18); /*i2sTX CLK P2[11], WS P2[12], data P2[13] */ LPC_PINCON->PINSEL4 &= ~((0x3<<22) | (0x3<<24) | (0x3<<26)); LPC_PINCON->PINSEL4 |= ((0x3<<22) | (0x3<<24) | (0x3<<26)); /*i2sTX MCLK pini P4[29]*/ LPC_PINCON->PINSEL9 &= ~(0x3<<26); LPC_PINCON->PINSEL9 |= (0x1<<26); /*72MHz CCKL'dan 18MHz PCLK için 16 bit 16ksps ayarları*/ LPC_I2S->TXRATE = 0xDFF5; /*Tx_MCLK=8192Hz*/ LPC_I2S->RXRATE = 0xDFF5; LPC_I2S->TXBITRATE = 4; /*Tx_SCLK=1024kHz (64*FS)*/ LPC_I2S->RXBITRATE = 4; LPC_I2S->TXMODE=0x0008; LPC_I2S->RXMODE=0x0006; //NVIC_EnableIRQ(I2S_IRQn); //LPC_I2S->IRQ = 0x00070700; LPC_I2S->DAO = 0X000007C5; LPC_I2S->DAI = 0X000007C5; I2SStop( ); return; } |
void I2S_IRQHandler (void) { int i; LPC_I2S->IRQ = 0x00070700; uint32_t irqdata=LPC_I2S->STATE; int rx_level=(irqdata>>8) & 0xF; int tx_level=(irqdata>>16) & 0xF; //printf("rx level: %d\n",rx_level); //printf("tx level: %d\n",tx_level); if (rx_level>4) { uint32_t dat; for (i=0;i<rx_level;i++) { dat=LPC_I2S->RXFIFO; //printf("rx fifo%d: %d\n",i, dat); } } if (tx_level>4) { uint32_t dat; for (i=0;i<tx_level;i++) { dat=LPC_I2S->TXFIFO; //printf("tx fifo%d: %d\n",i, dat); } } LPC_I2S->IRQ = 0x00070703; return; } |