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

📄 uart_int.c

📁 SHARP_ARM720T_LH79524/5软件开发包_支持TFT_LCD_NAND_FLASH_ETH_USB
💻 C
字号:
/**********************************************************************
 * Copyright (c) 2002 Sharp Microelectronics of the Americas
 *
 *        All rights reserved
 *      
 * $Workfile:   uart_int.c  $
 * $Revision:   1.0  $
 * $Author:   ZhangJ  $
 * $Date:   Oct 20 2004 09:32:44  $
 *
 * 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: LH79524 LPD SDK Example Code
 *
 * Description:
 *    This example shows how to use uart driver in interrupt mode
 *
 * Notes:
 *  
 * Revision History:
 * $Log:   //smaicnt2/pvcs/VM/sharpmcu/archives/sharpmcu/software/csps/lh79524/bsps/sdk79524/examples/uart_int/uart_int.c-arc  $
 * 
 *    Rev 1.0   Oct 20 2004 09:32:44   ZhangJ
 * Initial revision.
 * 
 *    Rev 1.0   Aug 19 2004 09:15:50   ZhangJ
 * Initial revision.
 * 
 * 
 *********************************************************************/
 
#include <string.h>
#include "abl_types.h"
#include "abl_irq_fiq.h"
#include "lh79524_chip.h"
#include "lh79524_int_driver.h"
#include "lh79524_uart_driver.h"


/* Board specific definition */

#define SDK79524_XTAL_IN    11289600 

/* Local defines for testing */
#define RCPC_CTRL  (RCPC_BASE + 0)
#define ESC_KEY     27
#define STR_SIZE    80
static  CHAR * greeting =   "Key in something - response availabe after FIFO is full! \r\n";
static  CHAR * end_string = "Example for interrupt mode done! \r\n";
static  CHAR output[STR_SIZE];
static  CHAR buffer[8];


/**********************************************************************
*
* 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_32 dev_uart;      /* UART handle */
  INT_32 dev_irq;       /* VIC  handle */
  INT_32 index;         /* tmp variable */
  void * uart_int_handler;
  
  /* 
   * Open UART0. By default, it is configured as 115200 baud rate,
   * 8 bit data, none parity check, and 1 stop bit. 
   */
  if ((dev_uart = uart_open(UART0_BASE, SDK79524_XTAL_IN)) == 0x0)
  {
    /* Error */
    return 1;
  }
  
  /* Operation mode configuration */
  uart_ioctl(dev_uart, UART_ENABLE_FIFO, 0);
  uart_ioctl(dev_uart, UART_ENABLE_RX, 0);
  uart_ioctl(dev_uart, UART_ENABLE_TX, 0);
  uart_ioctl(dev_uart, UART_START, 0);
  uart_ioctl(dev_uart, UART_SET_INT_MODE, 0);
  
  /* Open IRQ */
  if ((dev_irq = irq_open(0,0)) == 0x0)
  {
    /* Error */
    return 2;
  }
  
    /* Enable IRQ source */
    irq_ioctl(dev_irq, IRQ_ENABLE_SOURCE, VIC_UARTINT0);

    /* Get the UART int handler address */
    uart_ioctl(dev_uart, UART_GET_ISR, (INT_32)&uart_int_handler);
    
    /* Set up interruption handler */
    irq_ioctl(dev_irq, IRQ_SET_HANDLER, (INT_32)uart_int_handler);
    
  /* Enable uart interrupt - transmit, receive, receive time out */
  uart_ioctl(dev_uart, UART_ENABLE_INT, 
            (UART_INT_RX | UART_INT_TX | UART_INT_RT));
  
  	/* Enable global interrupt */
    irq_ioctl(dev_irq, IRQ_GLOBAL_ENABLE, 1);
  
  /* Send a string out */
  uart_write(dev_uart, greeting, strlen(greeting));
  
  /* 
   * Change the MCU operation mode from Active to Standby.
   * Since the peripheral clock is still running, any input from the 
   * UART will trigger an interrupt therefore will bring the MCU back to
   * Active mode.
   */   
  *(volatile UNS_32 *)RCPC_CTRL |= 0x04;   
  
  
  /* Init variables to accept a new string */
  index = 0;
  output[0] = '\0';
  
  /* Loop until the ESC key is pressed */
  while (1)
  {
    /* Read in one char */
    while(uart_read(dev_uart, buffer, 1) == 0);
    
    /* Pad the single char to a string */
    buffer[1] = '\0';
    
    /* 
     * If the ESC key is pressed, exit from the while() loop.
     * If the ENTER key is pressed, or the number of input chars are more than the 
     * predefined string length, send out the string.
     */
    if(buffer[0] == ESC_KEY)
    {
      break;
    }
    else if((buffer[0] == '\r') || (index >= STR_SIZE))
    {
      /* Send string out */
      uart_write(dev_uart,"\r\n",2);
      uart_write(dev_uart, "You entered - ", 15);
      uart_write(dev_uart, output, strlen(output));
      uart_write(dev_uart,"\r\n",2);
      uart_write(dev_uart,"\r\n",2);
      
      /* Send out a greeting string. Set variables to accept a new string. */
      uart_write(dev_uart, greeting, strlen(greeting));
      output[0] = '\0';
      index = 0;
    }
    else
    {
      /* Received something */
      strcat(output, buffer);
      /* Echo the input */
      uart_write(dev_uart, buffer, 1);
    }
    index++;
  }
  
  /* Send out the prompt string before exit */
  uart_write(dev_uart, end_string, strlen(end_string));

  /* Close device */
  uart_close(dev_uart);
     
  return 0;

}


#ifdef __iar

void main(void)
{
	c_entry();
	while(1);
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -