⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssp.c

📁 SHARP_ARM720T_LH79524/5软件开发包_支持TFT_LCD_NAND_FLASH_ETH_USB
💻 C
字号:
/**********************************************************************
 * Copyright (c) 2002 Sharp Microelectronics of the Americas
 *
 *        All rights reserved
 *      
 * $Workfile:   ssp.c  $
 * $Revision:   1.0  $
 * $Author:   ZhangJ  $
 * $Date:   Oct 20 2004 09:31:02  $
 *
 * 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/ssp/ssp.c-arc  $
 * 
 *    Rev 1.0   Oct 20 2004 09:31:02   ZhangJ
 * Initial revision.
 * 
 *    Rev 1.0   Jul 09 2003 09:13:30   LiJ
 * Initial revision.
 * 
 * 
 *********************************************************************/

#include <string.h> 
#include "lh79524_int_driver.h"
#include "lh79524_ssp_driver.h"

#define LED_ADDR    0x4cb00000

#define SSP_SPEED	(44100 * 16)

STATIC INT_32 dev_ssp = 0, dev_irq = 0;
STATIC volatile INT_32 ssp_occured = 0;
 
 
    CHAR   tmp_char[] = "ssp testing sentense --------------------!";
    CHAR   tmp_new_char[80];
    
     
/**********************************************************************
*
* Function: ssp_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_TXRX_INT_HANDLER, 0);
    
    /* Set indication bit */
    ssp_occured = 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)
{
    //CHAR   tmp_char[] = "ssp testing sentense --------------------!";
    //CHAR   tmp_new_char[80];
    
    INT_32 temp;
    CHAR * temp_ptr, * temp_ptr1;
    
    /* Open IRQ */
    if ((dev_irq = irq_open(0,0)) == 0x0)
    {
        /* Error opening the device */
        return 0;
    }
    
    /* 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_MOTOROLA);
    
    /* Set SSP data size */
    ssp_ioctl(dev_ssp, SSP_SET_DATA_SIZE, 8);
    
    /* Set SSP bits per second */
    ssp_ioctl(dev_ssp, SSP_SET_SPEED, SSP_SPEED);
    
    /* Set SSPFRM pin logic level */
    ssp_ioctl(dev_ssp, SSP_SET_SSPFRM_PIN, SSPFRM_AUTO);
    
    /* Set SCLK polarity as normal polarity */
    ssp_ioctl(dev_ssp, SSP_SET_SCLK_POLARITY, 0);
    
    /* Set SCLK phase as normal */
    ssp_ioctl(dev_ssp, SSP_SET_SCLK_PHASE, 0);
    
    /* Set SSP working in loopback mode */
    ssp_ioctl(dev_ssp, SSP_LOOP_BACK_ENABLE, 1);
    
    /* Enable SSP */
    ssp_ioctl(dev_ssp, SSP_ENABLE, 1);
    
    /* Get the string size in word */
    temp = sizeof(tmp_char)/2+1;
    temp_ptr = tmp_char;
    temp_ptr1 = tmp_new_char;
    
    /* Do SSP transceive under polling mode */
    while(temp--)
    {
        /* Transceive the sentense */
        *temp_ptr1++ = 
        ssp_ioctl(dev_ssp, SSP_TX_RX_WORD, *temp_ptr++);
    }
    
    if (strcmp(tmp_char, tmp_new_char) != 0)
    {
        /* string match, no error, turn on LED */
        *(volatile UNS_16 *)(LED_ADDR) = 0x1;
    }    
    
    strcpy(tmp_new_char,"xxxxxxxx");
    
    /* Do SSP transceive under DMA mode */
    
    /* Disable SSP */
    //ssp_ioctl(dev_ssp, SSP_ENABLE, 0);
        
    /* Set SSP frame format */
    ssp_ioctl(dev_ssp, SSP_SET_FRAME_FORMAT, SSP_MODE_TI);
    
    /* Set SSP data size */
    ssp_ioctl(dev_ssp, SSP_SET_DATA_SIZE, 16);
    
    /* Set SSP speed in us */
    //ssp_ioctl(dev_ssp, SSP_SET_SPEED, SSP_SPEED);
    
    /* Get the string size in word */
    temp = strlen(tmp_char)/2+1;
    temp_ptr = tmp_char;
    temp_ptr1 = tmp_new_char;
    
    /* Init SSP DMA mode */
    ssp_ioctl(dev_ssp, SSP_DMA_TX_RX_INIT, 0);
    
    /* Set source address */
    ssp_ioctl(dev_ssp, SSP_DMA_SET_SOURCE, (INT_32)temp_ptr);
    
    /* Set destination address */
    ssp_ioctl(dev_ssp, SSP_DMA_SET_DEST, (INT_32)temp_ptr1);
    
    /* Set count */
    ssp_ioctl(dev_ssp, SSP_DMA_SET_COUNT, temp);
    
    /***** Set up IRQ for SSP DMA transfer *****/
        
    /* 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 global IRQ bit */
    irq_ioctl(dev_irq, IRQ_GLOBAL_ENABLE, 1);

    /* Start SSP */
    ssp_ioctl(dev_ssp, SSP_DMA_TX_RX_START, 0);
    
    /* Wait until it is done */
    while(ssp_occured == 0);
    
    if (strcmp(tmp_char, tmp_new_char) != 0)
    {
        /* string match, no error, turn on LED */
        *(volatile UNS_16 *)(LED_ADDR) = 0x2;
    }    
    
    /* 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 + -