📄 akm4516a.c
字号:
//=====================================================================
// TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION
// Property of Texas Instruments -- For Unrestricted Internal Use Only
// Unauthorized reproduction and/or distribution is strictly prohibited
// This product is protected under copyright law and trade secret law as
// an unpublished work.Created 1987,(C) Copyright 1997 Texas Instruments.
// All rights reserved.
//=====================================================================
#include "akm4516a.h"
#include "pers_conf_a9.h"
#include "vspi.h"
//---------------------------------------------------------
//NAME : AKM_ConfigChipForSpi
//DESCRIPTION : VSPI on SPI mode to perseus port
//PARAMETERS : None
//RETURN VALUE: None
//LIMITATIONS : None
//---------------------------------------------------------
void AKM_ConfigChipForSpi(void)
{
// Configure VSPI in SPI mode
set_vspi_mode();
// Configure Clock polarity
set_vspi_clk_pol();
}
//---------------------------------------------------------
//NAME : AKM_InitSpiForCodec
//DESCRIPTION :config spi at ?? Hz for device 0
//PARAMETERS :None
//RETURN VALUE:None
//LIMITATIONS :None
//---------------------------------------------------------
void AKM_InitSpiForCodec(void)
{
// Setup 1 register :
// - enable internal clock
// - set Pre-scale clock divisor to 16
// - enable interrupt for read/write process only.
VSPI_InitSet1 (VSPI_RUN_CLOCK, VSPI_SET1_PTV16, VSPI_DISABLE_IT_WRITE, VSPI_ENABLE_IT_READWRITE);
// Setup 2 register :
// - Active RISING edge of the clock for device 0
// - Set negative level on nTSPEN signal for device 0
// - Set level trigger on nTSPEN signal for device 0
VSPI_InitSet2 (VSPI_DEV0_RISING_EDGE_CLOCK, VSPI_DEV0_NEGATIVE_LEVEL_SIG, VSPI_DEV0_LEVEL_TRIGGER_SIG);
}
//---------------------------------------------------------
//NAME : AKM_WriteSpi
//DESCRIPTION : write message on spi
//PARAMETERS : write_message (message to write)
//RETURN VALUE: None
//LIMITATIONS : None
//---------------------------------------------------------
void AKM_WriteSpi(UWORD16 write_message)
{
// write data to transmit register
VSPI_writeTxMsb (write_message);
// start write 16 bits transfer
VSPI_InitCtrl (VSPI_DEACTIV_RDWR_PROCESS, VSPI_ACTIV_WR_PROCESS, VSPI_CTRL_NB_16, VSPI_DEVICE_0, DMA_DIS);
// wait end of transmission
while (VSPI_IsWriteEnd() != True);
// stop write 16 bits transfer
VSPI_InitCtrl (VSPI_DEACTIV_RDWR_PROCESS, VSPI_DEACTIV_WR_PROCESS, VSPI_CTRL_NB_16, VSPI_DEVICE_0, DMA_DIS);
}
//---------------------------------------------------------
//NAME : AKM_WriteReadSpi
//DESCRIPTION : write/read cycle on spi
//PARAMETERS : write_read_message : address of register
// to read + dummy data
//RETURN VALUE: register to read value
//LIMITATIONS : None
//---------------------------------------------------------
UWORD16 AKM_WriteReadSpi(UWORD16 write_read_message)
{
// write data to transmit register
VSPI_writeTxMsb (write_read_message);
// start write/read 16 bits transfer
VSPI_InitCtrl (VSPI_ACTIV_RDWR_PROCESS, VSPI_DEACTIV_WR_PROCESS, VSPI_CTRL_NB_16, VSPI_DEVICE_0, DMA_DIS);
// wait end of transmission
while (VSPI_IsReadEnd() != True);
// stop write/read 16 bits transfer
VSPI_InitCtrl (VSPI_DEACTIV_RDWR_PROCESS, VSPI_DEACTIV_WR_PROCESS, VSPI_CTRL_NB_16, VSPI_DEVICE_0, DMA_DIS);
// return read data
return((VSPI_readRxLsb()& DATA_MASK));
}
//---------------------------------------------------------
//NAME : AKM_WriteCodecRegister
//DESCRIPTION : write to codec register
//PARAMETERS : register address, value to write
//RETURN VALUE: None
//LIMITATIONS : None
//---------------------------------------------------------
void AKM_WriteCodecRegister(UWORD16 register_addr, UWORD16 write_message)
{
// write value to CODEC register
AKM_WriteSpi(write_message | WRITE_OP_CODE | register_addr);
}
//---------------------------------------------------------
//NAME : AKM_ReadCodecRegister
//DESCRIPTION : read a codec register
//PARAMETERS : address of register to read
//RETURN VALUE: codec register value
//LIMITATIONS : None
//---------------------------------------------------------
UWORD16 AKM_ReadCodecRegister(UWORD16 register_to_read)
{
return (AKM_WriteReadSpi(register_to_read | READ_OP_CODE | DUMMY_DATA));
}
//---------------------------------------------------------
//NAME : AKM_ConfigCodecForI2sRecord
//DESCRIPTION :config codec for wave file record in I2S
//PARAMETERS : None
//RETURN VALUE: None
//LIMITATIONS : None
//---------------------------------------------------------
void AKM_ConfigCodecForI2sRecord(void)
{
//UWORD16 register_value;
// write and read some pipo pour essai
AKM_WriteCodecRegister( INPUT_PGA_CONTROL_LCH_ADDR , 0x000F);
AKM_WriteCodecRegister( OVERFLOW_STATUS_ADDR , 0x0055);
//register_value = AKM_ReadCodecRegister( AUTO_RECOVERY_CONTROL_1_ADDR);
AKM_ReadCodecRegister( AUTO_RECOVERY_CONTROL_1_ADDR);
// jl to do
}
//---------------------------------------------------------
//NAME : AKM_ConfigCodecForI2sPlay
//DESCRIPTION : config codec for playing recorded wave file
//PARAMETERS : None
//RETURN VALUE: None
//LIMITATIONS : None
//---------------------------------------------------------
void AKM_ConfigCodecForI2sPlay(void)
{
// jl to do
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -