📄 ssp_dma_audio.c
字号:
/**********************************************************************
* Copyright (c) 2002 Sharp Microelectronics of the Americas
*
* All rights reserved
*
* $Workfile: ssp_dma_audio.c $
* $Revision: 1.0 $
* $Author: ZhangJ $
* $Date: Oct 20 2004 09:03:30 $
*
* SHARP MICROELECTRONICS OF THE AMERICAS MAKES NO REPRESENTATION
* OR WARRANTIES WITH RESPECT TO THE PERFORMANCE OF THIS SOFTWARE,
* AND SPECIFICALLY DISCLAIMS ANY RESPONSIBILITY FOR ANY DAMAGES,
* SPECIAL OR CONSEQUENTIAL, CONNECTED WITH THE USE OF THIS SOFTWARE.
*
* SHARP MICROELECTRONICS OF THE AMERICAS PROVIDES THIS SOFTWARE SOLELY
* FOR THE PURPOSE OF SOFTWARE DEVELOPMENT INCORPORATING THE USE OF A
* SHARP MICROCONTROLLER OR SYSTEM-ON-CHIP PRODUCT. USE OF THIS SOURCE
* FILE IMPLIES ACCEPTANCE OF THESE CONDITIONS.
*
* Project: LH79520 EVB Example Code
*
* Description:
* This example will generate SSP signal on SSP0 and SSP1
*
* Notes:
*
* Revision History:
* $Log: //smaicnt2/pvcs/VM/sharpmcu/archives/sharpmcu/software/csps/lh79524/bsps/sdk79524/examples/audio/ssp_dma_audio.c-arc $
*
* Rev 1.0 Oct 20 2004 09:03:30 ZhangJ
* Initial revision.
*
* Rev 1.0 Jul 09 2003 09:13:30 LiJ
* Initial revision.
*
*
*********************************************************************/
#include <string.h>
#include "lh79524_rcpc.h"
#include "lh79524_int_driver.h"
#include "lh79524_ssp_driver.h"
#include "lh79524_sdk_audio_driver.h"
#include "sma_tk_16.h"
#define LED_ADDR 0x4cb00000
STATIC INT_32 dev_ssp = 0, dev_irq = 0;
STATIC volatile INT_32 ssp_occured = 0;
volatile int ssp_done = 0;
volatile int ssp_data_left = 0, ssp_data_current = 0;
volatile short *ssp_data_source;
CHAR tmp_char[] = "ssp testing sentense!";
CHAR tmp_new_char[80];
/**********************************************************************
*
* Function: dma1_int_handler
*
* Purpose:
* DMA interruption handler
*
* Processing:
*
* Parameters:
* None
*
* Outputs:
* None
*
* Returns:
* Nothing
*
* Notes:
* None
*
**********************************************************************/
void dma1_int_handler(void)
{
/* Clear ssp int bit */
ssp_ioctl(dev_ssp, SSP_DMA_TX_INT_HANDLER, 0);
/* Set indication bit */
ssp_occured = 1;
}
/**********************************************************************
*
* Function: init_ssp_slave_audio
*
* Purpose:
* init the ssp in slave mode to drive the audio chip
*
* Processing:
*
* Parameters:
* None
*
* Outputs:
* None
*
* Returns:
* Nothing
*
* Notes:
* None
*
**********************************************************************/
int init_ssp_slave_audio(short * source, int count)
{
/* Open SSP */
if ((dev_ssp = ssp_open(SSP,0)) == 0x0)
{
/* Error opening the device */
return 0;
}
/* Set SSP frame format */
ssp_ioctl(dev_ssp, SSP_SET_FRAME_FORMAT, SSP_MODE_TI);
/* Set SSP in slave mode */
ssp_ioctl(dev_ssp, SSP_SET_SLAVE, 1);
/* Set SSP data size */
ssp_ioctl(dev_ssp, SSP_SET_DATA_SIZE, 16);
/* Init SSP DMA mode */
ssp_ioctl(dev_ssp, SSP_DMA_TX_INIT, 0);
/* Set source address */
ssp_ioctl(dev_ssp, SSP_DMA_SET_SOURCE, (INT_32)source);
/* Set count */
ssp_ioctl(dev_ssp, SSP_DMA_SET_COUNT, count);
/* Enable TX FIFO int */
//ssp_ioctl(dev_ssp, SSP_INT_ENABLE, SSP_TRANSMIT_FIFO_INT);
ssp_data_source = source;
ssp_data_left = count;
ssp_data_current = 0;
/* Open IRQ */
if ((dev_irq = irq_open(0,0)) == 0x0)
{
/* Error opening the device */
return 0;
}
/* Enable IRQ source */
irq_ioctl(dev_irq, IRQ_ENABLE_SOURCE, VIC_DMA1);
/* Set up priority for SSP interrupt */
irq_ioctl(dev_irq, IRQ_SET_PRIORITY, 1);
/* Set up interruption handler */
irq_ioctl(dev_irq, IRQ_SET_HANDLER, (INT_32)dma1_int_handler);
/* Enable SSP */
ssp_ioctl(dev_ssp, SSP_ENABLE, 1);
/* Start SSP */
ssp_ioctl(dev_ssp, SSP_DMA_TX_START, 0);
/* Enable global IRQ bit */
irq_ioctl(dev_irq, IRQ_GLOBAL_ENABLE, 1);
return -1;
}
/**********************************************************************
*
* Function: c_entry
*
* Purpose:
* Function entry point from the startup code.
*
* Processing:
*
*
* Parameters:
* None
*
* Outputs:
* None
*
* Returns:
* Nothing
*
* Notes:
* None
*
**********************************************************************/
INT_32 c_entry (void)
{
int i;
UNS_16 * sound_source, num_samples;
audio_tl320dac23_configure(SAMPLE_44P1_KHZ);
num_samples = SMA_TK_16_NUM_SAMPLES;
sound_source = (UNS_16 *)sma_tk_16;
init_ssp_slave_audio((short *)sound_source, num_samples);
/* Wait until it is done */
while(ssp_occured == 0);
/* string match, no error, turn on LED */
*(volatile UNS_16 *)(LED_ADDR) = 0x2;
for(i=0;i<1000000;i++);
/* Done with the SSP DMA operation, close device */
/* Disable IRQ source */
irq_ioctl(dev_irq, IRQ_DISABLE_SOURCE, VIC_DMA1);
/* Remove IRQ handler */
irq_ioctl(dev_irq, IRQ_REMOVE_HANDLER, VIC_DMA1);
/* Disable global IRQ bit */
irq_ioctl(dev_irq, IRQ_GLOBAL_ENABLE, 0);
/* Close SSP */
ssp_close(dev_ssp);
/* Close IRQ */
irq_close(dev_irq);
return 1;
}
#ifdef __iar
void main(void)
{
c_entry();
while(1);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -